Retire dsa-is-shutdown-scheduled in favor of test -e /run/systemd/shutdown/scheduled
[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         base::sysctl { 'dsa-accept-ra-default':
344                 key   => 'net.ipv6.conf.default.accept_ra',
345                 value => 0,
346         }
347         base::sysctl { 'dsa-accept-ra-all':
348                 key   => 'net.ipv6.conf.all.accept_ra',
349                 value => 0,
350         }
351
352         # Disable kpartx udev rules
353         file { '/etc/udev/rules.d/60-kpartx.rules':
354                 ensure => $has_lib_udev_rules_d_60_kpartx_rules ? { true  => 'present', default => 'absent' },
355                 content => "",
356                 mode => '0444',
357         }
358
359         # this is only to avoid warnings, else puppet will complain that we
360         # have a symlink there, even if we're not replacing it anyhow.
361         if ! $has_etc_ssh_ssh_known_hosts {
362                 file { '/etc/ssh/ssh_known_hosts':
363                         ensure  => 'present',
364                         replace => 'no',
365                         content => inline_template('<%= open("/etc/ssh/ssh_known_hosts").read() %>'),
366                         notify  => Exec['ud-replicate'],
367                 }
368         }
369
370         exec { 'ud-replicate':
371                 path => '/usr/bin:/usr/sbin:/bin:/sbin',
372                 command => '/usr/bin/ud-replicate',
373                 refreshonly => true,
374                 require => Package['userdir-ldap']
375         }
376
377         # some changes require rebuilding the initramfs.  Have the common exec here.
378         exec { 'update-initramfs -u':
379                 path        => '/etc/init.d:/usr/bin:/usr/sbin:/bin:/sbin',
380                 refreshonly => true;
381         }
382 }