Skip to content
Snippets Groups Projects
debian.pp 6.61 KiB
Newer Older
Adam Lewenberg's avatar
Adam Lewenberg committed
# Rules specific to Debian systems.  Try to keep this rule set to an absolute
# minimum.  Part of the goal of Puppet is to make our systems look as similar
# as possible given the inherent differences between the distributions, and
# that means that changes should be wrapped in conceptual packages that do
# equivalent things on both distributions.  This should hold only those things
# that configure a Debian OS as such, as distinct from Red Hat.

# We install filter-syslog rules, so make sure that newsyslog is always
# installed.
#
# PARAMETERS
# ----------
#
# $apt_cache_notin_tmp: If you want apt to use a directory other than
# /tmp for its temporary cache, set this parameter to "true". This is needed
# if the /tmp partition is set to "noexec" (apt often needs to execture
# configuration files as part of an install or uninstall).
#
# If $apt_cache_notin_tmp is set to "true" and $apt_cache_directory is
# undefined, then apt will use /var/cache/apt/tmp for its temporary
# directory. If you want to specify a different directory, set
# the $apt_cache_tmp_dir.
#
# $apt_cache_tmp_dir: if $apt_cache_notin_tmp is set to "false" this
# parameter is ignored. If $apt_cache_notin_tmp is set to "true" then we
# configure apt to use $apt_cache_tmp_dir as apt's temporary directory
# during package installs and uninstalls.
#
# NOTE! If you use $apt_cache_tmp_dir to override the default, then you
# must have $apt_cache_tmp_dir as a file resource in your own Puppet
# code, otherwise Puppet will fail.

class base::os::debian (
  $apt_cache_notin_tmp = false,
  $apt_cache_tmp_dir   = '/var/cache/apt/tmp'
){
Adam Lewenberg's avatar
Adam Lewenberg committed
  include base::newsyslog

  # This really needs to be put somewhere else so that all possible uses of
  # package inherit from it.  Here, it only affects this particular class.
  Package {
    require => [ File['/etc/apt/apt.conf.d/10recommends'],
                  File['/etc/apt/preferences'],
                  File['/etc/apt/preferences.d'],
                  File['/etc/apt/sources.list'],
                  File['/etc/apt/sources.list.d'] ]
Adam Lewenberg's avatar
Adam Lewenberg committed
  }

  # Install basic configuration files.
  file {
    '/etc/apt/apt.conf.d/10recommends':
      source => 'puppet:///modules/base/os/etc/apt/apt.conf.d/10recommends';
    '/etc/default/rcS':
      source => 'puppet:///modules/base/os/etc/default/rcS';
    '/etc/filter-syslog/debian':
      source => 'puppet:///modules/base/os/etc/filter-syslog/debian';
  }

  # On wheezy, for right now we have to disable pdiffs due to problems with
  # the Translation files.
  if $::lsbdistcodename == 'wheezy' {
    file { '/etc/apt/apt.conf.d/30no-pdiffs':
      source => 'puppet:///modules/base/os/etc/apt/apt.conf.d/30no-pdiffs',
    }
  }

  # Install APT sources configuration.  This is generally handled via
  # templates.
  file {
    '/etc/apt/sources.list':
      content => template('base/os/sources/sources.list.erb'),
      notify  => Exec['aptitude update'];
    '/etc/apt/sources.list.d':
      ensure  => 'directory',
      recurse => true,
      purge   => true,
      notify  => Exec['aptitude update'];
    '/etc/apt/sources.list.d/backports.list':
      content => template('base/os/sources/backports.list.erb'),
      notify  => Exec['aptitude update'];
    '/etc/apt/sources.list.d/stanford.list':
      content => template('base/os/sources/stanford.list.erb'),
      notify  => Exec['aptitude update'];
  }

  # Install APT preferences.  We should never use /etc/apt/preferences
  # since the preferences.d directory is supported
Adam Lewenberg's avatar
Adam Lewenberg committed
  file { '/etc/apt/preferences.d':
    ensure  => directory,
    recurse => true,
    purge   => true,
  }
  if $::lsbdistcodename == 'wheezy' {
    file { '/etc/apt/preferences.d/rsyslog':
      content => template('base/os/preferences/rsyslog.erb')
    }
  }
  file {
    '/etc/apt/preferences':
      content => '';
    '/etc/apt/preferences.d/backports':
      content => template('base/os/preferences/backports.erb');
  if ($apt_cache_notin_tmp) {
    # If we did NOT override the apt cache directory make sure that
    # '/var/cache/apt/tmp' exists.
    if ($apt_cache_tmp_dir == '/var/cache/apt/tmp') {
      file { $apt_cache_tmp_dir:
        ensure  => directory,
      }
    }

    file { '/etc/apt/apt.conf.d/apt_cache_tmp':
      content => template('base/os/etc/apt/apt.conf.d/apt_cache_tmp.erb'),
      require => File[$apt_cache_tmp_dir],
    }
  }

Adam Lewenberg's avatar
Adam Lewenberg committed
  # lsb-release pulls in all of lsb unless we disable recommends handling
  # first, so make sure that we've done that.  That should be handled by the
  # global Package require set above.
  package {
    'bsd-mailx':       ensure => present;
    'dmidecode':       ensure => present;
    'debconf-utils':   ensure => present;
    'locate':          ensure => present;
    'lsb-release':     ensure => present;
    'kstart':          ensure => present;
    'stanford-keyring':
      ensure => present,
      notify => Exec['aptitude update'];
  }

  # libstdc++5 and smbios-utils are required for Dell firmware updates, so
  # install them on physical machines.
  if $::virtual == 'vmware' {
    package {
      'libsmbios-bin': ensure => absent;
      'smbios-utils':  ensure => absent;
    }
  } else {
    include base::libstdc::v5

    package { 'libsmbios-bin': ensure => absent }
    package { 'smbios-utils':
      ensure  => present,
      require => Package['libsmbios-bin'],
Adam Lewenberg's avatar
Adam Lewenberg committed
    }
  }

  # For i686 systems, install the optimized version of glibc.
  if $::hardwaremodel == 'i686' {
    package { 'libc6-i686': ensure => present }
  }

  # Handle additional distribution-specific tweaks, usually related to the
  # default package set.
  case $::lsbdistcodename {
    'wheezy': { package { 'emacs23-nox': ensure => present } }
    'jessie': { package { 'emacs24-nox': ensure => present } }
  }
Adam Lewenberg's avatar
Adam Lewenberg committed
  # Ensure this file exists, containing only a comment.
  file { '/etc/default/locale':
    ensure  => present,
    content => "# Not used but required by PAM.\n",
  }

  # Our old daemontools build assumed /service, but the new packages
  # available from Debian use /etc/service.  Make the latter a symlink to
  # the former so that we don't have to move everything.
  file {
    '/etc/service':
      ensure => link,
      target => '/service';
    '/service':
      ensure => directory,
      mode   => '0755';
  }

  # Triggered to refresh local package lists.
  exec { 'aptitude update':
    command     => 'aptitude update',
Adam Lewenberg's avatar
Adam Lewenberg committed
    path        => '/usr/bin',
Adam Lewenberg's avatar
Adam Lewenberg committed
    refreshonly => true,
  }

  # allow non-root users to use ping in Jessie
  if ($::lsbdistcodename == 'jessie') {
    exec { 'setcap ping':
      path    => "/usr/bin:/usr/sbin:/bin:/sbin",
      command => 'setcap cap_net_raw+ep /bin/ping',
      unless  => "getcap /bin/ping | grep -q 'cap_net_raw+ep'",