debian_org: lint fixes
[mirror/dsa-puppet.git] / modules / debian_org / manifests / init.pp
1 # == Class: debian_org
2 #
3 # Stuff common to all debian.org servers
4 #
5 class debian_org {
6   include debian_org::apt
7
8   if $::systemd {
9     include dsa_systemd
10     $servicefiles = 'present'
11   } else {
12     $servicefiles = 'absent'
13   }
14
15   # the virtual facter needs virt-what on jessie to work; clean up.
16   package { 'virt-what': ensure => purged }
17
18   $samhain_recipients = hiera('samhain_recipients')
19   $root_mail_alias = hiera('root_mail_alias')
20
21   package { [
22       'klogd',
23       'sysklogd',
24       'rsyslog',
25       'os-prober',
26       'apt-listchanges',
27       'mlocate',
28     ]:
29     ensure => purged,
30   }
31   package { [
32       'debian.org',
33       'debian.org-recommended',
34       'dsa-munin-plugins',
35       'userdir-ldap',
36     ]:
37     ensure => installed,
38     tag    => extra_repo,
39   }
40
41   package { [
42       'apt-utils',
43       'bash-completion',
44       'dnsutils',
45       'less',
46       'lsb-release',
47       'ruby-filesystem',
48       'mtr-tiny',
49       'nload',
50       'pciutils',
51       'lldpd',
52       'ncurses-term',
53     ]:
54     ensure => installed,
55   }
56
57   munin::check { [
58       'cpu',
59       'entropy',
60       'forks',
61       'interrupts',
62       'iostat',
63       'irqstats',
64       'load',
65       'memory',
66       'open_files',
67       'open_inodes',
68       'processes',
69       'swap',
70       'uptime',
71       'vmstat',
72     ]:
73   }
74
75   package { 'molly-guard':
76     ensure => installed,
77   }
78   file { '/etc/molly-guard/run.d/10-check-kvm':
79     mode    => '0755',
80     source  => 'puppet:///modules/debian_org/molly-guard/10-check-kvm',
81     require => Package['molly-guard'],
82   }
83   file { '/etc/molly-guard/run.d/15-acquire-reboot-lock':
84     mode    => '0755',
85     source  => 'puppet:///modules/debian_org/molly-guard/15-acquire-reboot-lock',
86     require => Package['molly-guard'],
87   }
88
89   augeas { 'inittab_replicate':
90     context => '/files/etc/inittab',
91     changes => [
92       'set ud/runlevels 2345',
93       'set ud/action respawn',
94       'set ud/process "/usr/bin/ud-replicated -d"',
95     ],
96     notify  => Exec['init q'],
97   }
98
99
100   file { '/etc/facter':
101     ensure  => directory,
102     purge   => true,
103     force   => true,
104     recurse => true,
105     source  => 'puppet:///files/empty/',
106   }
107   file { '/etc/facter/facts.d':
108     ensure => directory,
109   }
110   file { '/etc/facter/facts.d/debian_facts.yaml':
111     content => template('debian_org/debian_facts.yaml.erb')
112   }
113   file { '/etc/timezone':
114     content => "Etc/UTC\n",
115     notify  => Exec['dpkg-reconfigure tzdata -pcritical -fnoninteractive'],
116   }
117   file { '/etc/localtime':
118     ensure => 'link',
119     target => '/usr/share/zoneinfo/Etc/UTC',
120     notify => Exec['dpkg-reconfigure tzdata -pcritical -fnoninteractive'],
121   }
122   file { '/etc/puppet/puppet.conf':
123     content => template('debian_org/puppet.conf.erb'),
124     mode    => '0440',
125     group   => 'puppet',
126   }
127   file { '/etc/default/puppet':
128     source => 'puppet:///modules/debian_org/puppet.default',
129   }
130   file { '/etc/systemd':
131     ensure => directory,
132     mode   => '0755',
133   }
134   file { '/etc/systemd/system':
135     ensure => directory,
136     mode   => '0755',
137   }
138   file { '/etc/systemd/system/ud-replicated.service':
139     ensure => $servicefiles,
140     source => 'puppet:///modules/debian_org/ud-replicated.service',
141     notify => Exec['systemctl daemon-reload'],
142   }
143   if $::systemd {
144     file { '/etc/systemd/system/multi-user.target.wants/ud-replicated.service':
145       ensure => 'link',
146       target => '../ud-replicated.service',
147       notify => Exec['systemctl daemon-reload'],
148     }
149   }
150   file { '/etc/systemd/system/puppet.service':
151     ensure => 'link',
152     target => '/dev/null',
153     notify => Exec['systemctl daemon-reload'],
154   }
155   file { '/etc/systemd/system/proc-sys-fs-binfmt_misc.automount':
156     ensure => 'link',
157     target => '/dev/null',
158     notify => Exec['systemctl daemon-reload'],
159   }
160
161   file { '/etc/cron.d/dsa-puppet-stuff':
162     ensure => 'absent',
163   }
164   file { '/etc/dsa/cron.ignore.dsa-puppet-stuff':
165     ensure => 'absent',
166   }
167
168   concat { '/etc/cron.d/puppet-crontab': }
169   concat::fragment { 'puppet-crontab---header':
170     target  => '/etc/cron.d/puppet-crontab',
171     order   => '000',
172     content => @(EOF)
173       ## THIS FILE IS UNDER PUPPET CONTROL. DON'T EDIT IT HERE.
174       SHELL=/bin/bash
175       MAILTO=root
176       PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/nagios/plugins
177       | EOF
178   }
179   concat::fragment { 'puppet-crontab---all':
180     target  => '/etc/cron.d/puppet-crontab',
181     order   => '010',
182     content => template('debian_org/puppet-crontab.cron.erb'),
183     require => Package['debian.org'],
184   }
185   file { '/etc/ldap/ldap.conf':
186     require => Package['debian.org'],
187     content => template('debian_org/ldap.conf.erb'),
188   }
189   file { '/etc/pam.d/common-session':
190     require => Package['debian.org'],
191     content => template('debian_org/pam.common-session.erb'),
192   }
193   file { '/etc/pam.d/common-session-noninteractive':
194     require => Package['debian.org'],
195     content => template('debian_org/pam.common-session-noninteractive.erb'),
196   }
197   file { '/etc/rc.local':
198     mode    => '0755',
199     content => template('debian_org/rc.local.erb'),
200     notify  => Exec['service rc.local restart'],
201   }
202   file { '/etc/dsa':
203     ensure => directory,
204     mode   => '0755',
205   }
206   file { '/etc/dsa/cron.ignore.puppet-crontab':
207     source  => 'puppet:///modules/debian_org/puppet-crontab.cron.ignore',
208     require => Package['debian.org']
209   }
210   file { '/etc/nsswitch.conf':
211     mode   => '0444',
212     source => 'puppet:///modules/debian_org/nsswitch.conf',
213   }
214
215   file { '/etc/profile.d/timeout.sh':
216     mode   => '0555',
217     source => 'puppet:///modules/debian_org/etc.profile.d/timeout.sh',
218   }
219   file { '/etc/zsh':
220     ensure => directory,
221   }
222   file { '/etc/zsh/zprofile':
223     mode   => '0444',
224     source => 'puppet:///modules/debian_org/etc.zsh/zprofile',
225   }
226   file { '/etc/environment':
227     content => '',
228     mode    => '0440',
229   }
230   file { '/etc/default/locale':
231     content => '',
232     mode    => '0444',
233   }
234
235   # set mmap_min_addr to 4096 to mitigate
236   # Linux NULL-pointer dereference exploits
237   base::sysctl { 'mmap_min_addr':
238     ensure => absent
239   }
240   base::sysctl { 'perf_event_paranoid':
241     key   => 'kernel.perf_event_paranoid',
242     value => '2',
243   }
244   base::sysctl { 'puppet-vfs_cache_pressure':
245     key   => 'vm.vfs_cache_pressure',
246     value => '10',
247   }
248   base::alternative { 'editor':
249     linkto => '/usr/bin/vim.basic',
250   }
251   base::alternative { 'view':
252     linkto => '/usr/bin/vim.basic',
253   }
254   mailalias { 'samhain-reports':
255     ensure    => present,
256     recipient => $samhain_recipients,
257     require   => Package['debian.org']
258   }
259   mailalias { 'root':
260     ensure    => present,
261     recipient => $root_mail_alias,
262     require   => Package['debian.org']
263   }
264
265   file { '/usr/local/bin/check_for_updates':
266     source => 'puppet:///modules/debian_org/check_for_updates',
267     mode   => '0755',
268     owner  => root,
269     group  => root,
270   }
271   file { '/usr/local/bin/dsa-is-shutdown-scheduled':
272     ensure => 'absent',
273   }
274
275   exec { 'dpkg-reconfigure tzdata -pcritical -fnoninteractive':
276     path        => '/usr/bin:/usr/sbin:/bin:/sbin',
277     refreshonly => true
278   }
279   exec { 'service puppetmaster restart':
280     refreshonly => true
281   }
282   exec { 'service rc.local restart':
283     refreshonly => true
284   }
285   exec { 'init q':
286     refreshonly => true
287   }
288
289   exec { 'systemctl daemon-reload':
290     refreshonly => true,
291     onlyif      => 'test -x /bin/systemctl'
292   }
293
294   exec { 'systemd-tmpfiles --create --exclude-prefix=/dev':
295     refreshonly => true,
296     onlyif      => 'test -x /bin/systemd-tmpfiles'
297   }
298
299   tidy { '/var/lib/puppet/clientbucket/':
300     age      => '2w',
301     recurse  => 9,
302     type     => ctime,
303     matches  => [ 'paths', 'contents' ],
304     schedule => weekly
305   }
306
307   file { '/root/.bashrc':
308     source => 'puppet:///modules/debian_org/root-dotfiles/bashrc',
309   }
310   file { '/root/.profile':
311     source => 'puppet:///modules/debian_org/root-dotfiles/profile',
312   }
313   file { '/root/.selected_editor':
314     source => 'puppet:///modules/debian_org/root-dotfiles/selected_editor',
315   }
316   file { '/root/.screenrc':
317     source => 'puppet:///modules/debian_org/root-dotfiles/screenrc',
318   }
319   file { '/root/.tmux.conf':
320     source => 'puppet:///modules/debian_org/root-dotfiles/tmux.conf',
321   }
322   file { '/root/.vimrc':
323     source => 'puppet:///modules/debian_org/root-dotfiles/vimrc',
324   }
325
326   if versioncmp($::lsbmajdistrelease, '9') == 0 { # older puppets do facts as strings.
327     if $::processorcount > 1 {
328       package { 'irqbalance': ensure => installed }
329     }
330   } else {
331     # 926967 drops the recommendation on irqbalance in Buster
332     package { 'irqbalance': ensure => purged }
333   }
334
335
336   # https://www.decadent.org.uk/ben/blog/bpf-security-issues-in-debian.html
337   base::sysctl { 'unprivileged_bpf_disabled':
338     key   => 'kernel.unprivileged_bpf_disabled',
339     value => '1',
340   }
341
342   # our ipv6 addresses and routes are statically configured.
343   file { '/etc/network/if-pre-up.d/no_accept_ra':
344     source => 'puppet:///modules/debian_org/ifupdown-pre-up-accept-ra',
345     mode   => '0555',
346   }
347   base::sysctl { 'dsa-accept-ra-default':
348     ensure => absent,
349   }
350   base::sysctl { 'dsa-accept-ra-all':
351     ensure => absent,
352   }
353
354   # Disable kpartx udev rules
355   $want_kpartx_rules = $::has_lib_udev_rules_d_60_kpartx_rules ? { true  => 'present', default => 'absent' }
356   file { '/etc/udev/rules.d/60-kpartx.rules':
357     ensure  => $want_kpartx_rules,
358     content => '',
359     mode    => '0444',
360   }
361
362   # this is only to avoid warnings, else puppet will complain that we
363   # have a symlink there, even if we're not replacing it anyhow.
364   if ! $::has_etc_ssh_ssh_known_hosts {
365     file { '/etc/ssh/ssh_known_hosts':
366       ensure  => 'present',
367       replace => 'no',
368       content => inline_template('<%= open("/etc/ssh/ssh_known_hosts").read() %>'),
369       notify  => Exec['ud-replicate'],
370     }
371   }
372
373   exec { 'ud-replicate':
374     path        => '/usr/bin:/usr/sbin:/bin:/sbin',
375     command     => '/usr/bin/ud-replicate',
376     refreshonly => true,
377     require     => Package['userdir-ldap']
378   }
379
380   # some changes require rebuilding the initramfs.  Have the common exec here.
381   exec { 'update-initramfs -u':
382     path        => '/etc/init.d:/usr/bin:/usr/sbin:/bin:/sbin',
383     refreshonly => true;
384   }
385 }