Puppet: System Administration Automated

Support

Installing Asterisk on Debian

This is mode for installing asterisk, libpri, zaptel and app_rxfax/app_txfax. It is very Debian specific, since it has to build the zaptel kernel module.

It also requires small ruby function to get the kernel version without the architecture for the linux-kbuild package.

$libdir/parser/functions/kernelversion.rb:

module Puppet::Parser::Functions
  newfunction(:kernelversion, :type => :rvalue) do |args|
    ka = lookupvar('kernelrelease').split('-')
    ka[0]
  end
end

modules/asterisk/manifests/init.pp:

class asterisk {

  $kernelversion = kernelversion()

  file { "/var/spool/asterisk/outgoing":
    ensure => directory,
    mode   => "777",
    require => Package["asterisk"],
  }
  file { "/var/spool/asterisk/sms":
    ensure => directory,
    mode   => "777",
    require => Package["asterisk"],
  }
  file { "/var/spool/asterisk/fax":
    ensure => directory,
    mode   => "777",
    require => Package["asterisk"],
  }

  file { "/usr/local/bin/email2fax":
    mode    => "755",
    source  => "puppet:///asterisk/fax/email2fax",
    require => Package["asterisk-app-fax"],
  }

  file { "/usr/local/bin/mailfax":
    mode    => "755",
    source  => "puppet:///asterisk/fax/mailfax",
   require => Package["asterisk-app-fax"],
  }

  file { "/etc/zaptel.conf":
    mode    => "644",
    source  => "puppet:///asterisk/zaptel.conf.$hostname",
    notify  => Exec["ztcfg"],
  }

  file { "/etc/asterisk":
    mode    => "644",
    source  => "puppet:///asterisk/asterisk",
    recurse => true,
    purge   => true,
    ignore  => [ ".svn", "zapata*" ],
    notify  => Exec["asterisk reload"],
    require => Package["asterisk"],
  }

  file { "/etc/asterisk/zapata.conf":
    mode    => "644",
    source  => "puppet:///asterisk/asterisk/zapata.conf.$hostname",
    notify  => Service["asterisk"],
  }

  mailalias { "fax":
    ensure    => present,
    recipient => '|"/usr/bin/sudo /usr/local/bin/email2fax"',
    require   => [ Package["asterisk-app-fax"], File["/usr/local/bin/email2fax"] ],
    notify => Exec["newaliases"],
  }

  exec { "m-a -q -t -l $kernelrelease a-i zaptel":
    path      => ["/bin", "/usr/bin", "/sbin", "/usr/sbin" ],
    timeout   => "600",
    logoutput => err,
    require   => [ Package["zaptel-source"], Package["linux-headers-$kernelrelease"], Package["g++"], Package["libc6-dev"], Package["libstdc++6-dev"], Package["linux-kernel-headers"], Package["linux-kbuild-$kernelversion"], Package["build-essential"] ],
    creates   => "/lib/modules/$kernelrelease/misc/zaptel.ko",
  }

  exec { "ztcfg":
    path        => ["/sbin"],
    refreshonly => true,
    require     => Package["zaptel"],
  }


  exec { "asterisk reload":
    path        => "/etc/init.d/",
    refreshonly => true,
  }

  service { "asterisk": ensure => running, enable => true; }

  package {
    "sox":                          ensure => present;
    "python":                       ensure => present;
    "asterisk":                     ensure => present;
    "festival":                     ensure => present;
    "g++":                          ensure => present;
    "libc6-dev":                    ensure => present;
    "libstdc++6-dev":               ensure => present;
    "linux-kernel-headers":         ensure => present;
    "linux-kbuild-$kernelversion":  ensure => present;
    "linux-headers-$kernelrelease": ensure => present;
    "build-essential":              ensure => present;
    "asterisk-app-fax":             ensure => present;
    "libpri1.0":                    ensure => present;
    "zaptel":                       ensure => present;
    "zaptel-source":                ensure => present, notify => Exec["m-a -q -t -l $kernelrelease a-i zaptel"];
  }
}

Please send comments and bug reports for this recipe to Martha Greenberg