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 Writing Your Own Functions 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