Instalación de Asterisk 13 en Raspberry Pi 3 – Raspian Stretch

En esta entrada veremos como instalar Asterisk 13 en un Raspberry Pi 3 con sistema operativo Raspbian Stretch ( Debian 9).

Primero descargamos la imagen del sistema operativo en nuestro computador partiendo desde este enalce; descomprimimos el archivo y, en el caso de Windows, con Win32DiskImager copiamos la imagen en la memoria SD que luego vamos a insertar en la ranura del Raspberry Pi.

Insertamos la tarjeta de memoria en el Raspberry, lo conectamos a nuestra red local, a un televisor/pantalla a través de la salida HDMI y a un teclado USB. Es indispensable realizar este paso porque la instalación por defecto no tiene activado el servidor SSH pues no podemos conectarnos desde remoto. Conectamos la alimentación y cuando el sistema nos pide usuario escribimos pi y contraseña raspberry. Lo primero que hacemos es modificar la contraseña del usuario pi:

passwd

Luego configuramos una contraseña para el usuario root:

sudo passwd root

luego modificamos la configuración de SSH:

sudo nano /etc/ssh/sshd_config

Modificamos esta linea:

PermitRootLogin without-password

para que quede:

PermitRootLogin yes

Guardamos los cambios y activamos y reiniciamos el servicio:

systemctl enable ssh

systemctl start ssh

Ya se puede acceder vía SSH desde otro dispositivo. El paso a seguir es configurar una IP local estática que quede dentro del rango permitido por la configuración de la LAN/DHCP del router:

nano /etc/dhcpcd.conf

al final del archivo, añadimos:

interface eth0

static ip_address=192.168.1.89/24

static routers=192.168.1.1

static domain_name_servers=192.168.1.1

192.168.1.89 es la IP estática que asignamos y 192.168.1.1 es la IP del Router. Guardamos los cambios y reniciamos el servidor:

reboot

Ahora ya podemos volver a acceder desde cualquier computador vía SSH con usuario root y la contraseña que hemos escogido. Como primera tarea, actualizamos el sistema:

apt-get update

apt-get upgrade

Luego ejecutamos la utilidad que permite una configuración más detallada del sistema operativo:

raspi-config

Empezamos modificando el nombre de dominio del servidor, Opción 2; luego modificamos la configuración del idioma y huso horario con la Opción 4. Una vez terminada esta parte, salimos de la utilidad con la opción <Finish>. Reiniciamos nuevamente el sistema:

reboot

Ahora podemos empezar con la instalación de Asterisk PBX 13. Primero unas dependencias:

apt-get install libsqlite3-dev libncurses5-dev libxml2-dev libnewt-dev libssl-dev libiksemel-dev libgnutls28-dev libcurl4-openssl-dev libspandsp2 libspandsp-dev mysql-client libmariadbd18 libmariadbd-dev mariadb-server unixodbc-dev unixodbc libportaudio-dev libical-dev libneon27-dev libportaudio-dev libspeex-dev speex libvorbis-dev libsrtp0-dev iptables-persistent libsox2 libsox-dev

apt-get install libuuid1 uuid uuid-dev libjansson4 libjansson-dev subversion sendmail sox ngrep

Descargamos la ultima versión de la rama 13 de Asterisk:

cd /usr/src/

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13.17.2.ta...

descomprimimos y entramos en la carpeta creada:

tar -xf asterisk-13.17.2.tar.gz

cd asterisk-13.17.2

Si queremos instalar también el nuevo canal chan_pjsip:

./configure --libdir=/usr/lib --with-pjproject-bundled

sin el canal chan_pjsip:

./configure --libdir=/usr/lib

make menuconfig

Seleccionamos los siguientes módulos, menú Add-ons:

Los paquetes de las locuciones audio que necesitamos en el menú Core Sound Packages. Lo mismo para el menú Extras Sound Packages. Guardamos los cambios con “Save & Exit” y iniciamos la compilación de las fuentes:

contrib/scripts/get_mp3_source.sh

make

alrededor de 25 minutos después:

make install

make samples

make config

para las locuciones audio en español:

mkdir /var/lib/asterisk/sounds/es

cd /var/lib/asterisk/sounds/es

wget https://www.asterisksounds.org/sites/asterisksounds.org/files/sounds/es-...

wget https://www.asterisksounds.org/sites/asterisksounds.org/files/sounds/es-...

unzip asterisk-sounds-core-es-AR-1.11.3.zip

unzip asterisk-sounds-extra-es-AR-1.11.3.zip

Iniciamos Asterisk:

systemctl start asterisk

entramos en la consola:

asterisk -rvvvvvvvvvvvvvvvvvvvv

Salimos de la consola:

CLI> quit

Paramos Asterisk

systemctl stop asterisk

y creamos base datos y tabla para guardar los CDR (Los registros de las llamadas)

systemctl enable mariadb

systemctl start mariadb

Creamo la contraseña del usuario root de MariaDB y lo ponemos en seguridad:

mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current

password for the root user. If you've just installed MariaDB, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

Enter current password for root (enter for none):

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB

root user without the proper authorisation.

Set root password? [Y/n] y

New password:

Re-enter new password:

Password updated successfully!

Reloading privilege tables..

... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone

to log into MariaDB without having to have a user account created for

them. This is intended only for testing, and to make the installation

go a bit smoother. You should remove them before moving into a

production environment.

Remove anonymous users? [Y/n] y

... Success!

Normally, root should only be allowed to connect from 'localhost'. This

ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y

... Success!

By default, MariaDB comes with a database named 'test' that anyone can

access. This is also intended only for testing, and should be removed

before moving into a production environment.

Remove test database and access to it? [Y/n] y

- Dropping test database...

... Success!

- Removing privileges on test database...

... Success!

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

Reload privilege tables now? [Y/n] y

... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB

installation should now be secure.

Thanks for using MariaDB!

Accedemos con el cliente utilizando la contraseña configurada para el usuario root:

mysql -u root -psesamo

Creamos la base de datos para los CDR:

MariaDB [(none)]> create database asteriskcdr;

Creamos usuario que tenga acceso a la base de datos y relativa contraseña:

MariaDB [(none)]> Grant All Privileges on asteriskcdr.* to asterisk@'localhost' identified by 'sesamo';

seleccionamos la base de datos y creamos la tabla:

MariaDB [(none)]> use asteriskcdr

MariaDB [asteriskcdr]> CREATE TABLE cdr (

id bigint(20) NOT NULL auto_increment,

calldate datetime NOT NULL default '0000-00-00 00:00:00',

clid varchar(80) NOT NULL default '',

src varchar(80) NOT NULL default '',

dst varchar(80) NOT NULL default '',

dcontext varchar(80) NOT NULL default '',

channel varchar(80) NOT NULL default '',

dstchannel varchar(80) NOT NULL default '',

lastapp varchar(80) NOT NULL default '',

lastdata varchar(80) NOT NULL default '',

duration int(11) NOT NULL default '0',

billsec int(11) NOT NULL default '0',

disposition varchar(45) NOT NULL default '',

amaflags int(11) NOT NULL default '0',

accountcode varchar(20) NOT NULL default '',

peeraccount varchar(20) NOT NULL default '',

uniqueid varchar(32) NOT NULL default '',

linkedid varchar(80) NOT NULL default '',

userfield varchar(255) NOT NULL default '',

PRIMARY KEY (`id`),

KEY callerid (clid)

);

Salimos del clientes y configuramos el archivo de asterisk que permite la conexión a la tabla del CDR:

MariaDB [asteriskcdr]> quit

mv /etc/asterisk/cdr_mysql.conf /etc/asterisk/cdr_mysql.conf.old

nano /etc/asterisk/cdr_mysql.conf

copiamos las lineas que siguen:

[global]

hostname=127.0.0.1

dbname=asteriskcdr

table=cdr

password=sesamo

user=asterisk

port=3306

sock=/var/run/mysqld/mysqld.sock

Gurdamos los cambios y iniciamos Asterisk:

systemctl start asterisk

entramos en la consola:

asterisk -rvvvvvvvvvvvvvv

averiguamos si la conexión está funcionando correctamente:

CLI> cdr mysql status

Connected to asteriskcdr@127.0.0.1, port 3306 using table cdr for 5 seconds.
  Wrote 0 records since last restart.

Seguimos instalando un servidor DNS ya que puede resultar cómodo tenerlo en algunos escenarios de instalación de Asterisk:

apt-get install bind9

Lo activamos para se inicie con el sistema:

systemctl enable bind9

Modificamos solamente un archivo:

nano /etc/bind/named.conf.options

cambiando este bloque:

// forwarders {

// 0.0.0.0;

// };

Para que quede:

forwarders {

208.67.222.222;

208.67.220.220;

};

para resolver los nombres de dominio utilizamos las dos IP de OpenDNS. Luego modificamos esta linea:

dnssec-validation auto;

para que quede:

dnssec-validation no;

Guardamos los cambios iniciamos el servicio:

systemctl start bind9

Revisamos el archivo de LOG para averiguar si hay errores:

tail -100f /var/log/syslog

Se le dice al sistema que cada consulta para resolver un nombre de dominio se realizará en local:

nano /etc/resolvconf.conf

modificando esta linea:

#name_servers=127.0.0.1

para que quede:

name_servers=127.0.0.1

Guardamos los cambios y reiniciamos el sistema:

reboot

Volvemos a acceder y averiguamos que efectivamente el sistema resuelve los nombres de dominios localmente:

nano /etc/resolv.conf

debería aparecer:

# Generated by resolvconf

nameserver 127.0.0.1

Cerramos el archivo y volvemos a abrir el siguiente:

nano /etc/dhcpcd.conf

modificamos la ultima linea:

static domain_name_servers=192.168.1.1

para que quede:

static domain_name_servers=127.0.0.1

Guardamos los cambios. En el caso en que queremos provisionar los teléfonos SIP directamente desde el RaspBerry, utilizando un servidor TFTP, tenemos que seguir estos pasos:

Instalar el servidor TFTP (en este caso atftpd):

apt-get install atftpd

Crear la carpeta con relativos permisos donde guardaremos las configuraciones de los teléfonos que se provisionarán vía TFTP:

mkdir /tftpboot
chmod -R 777 /tftpboot
chown -R nobody /tftpboot

Modificar la configuración del servidor:

nano /etc/default/atftpd

modificar esta linea:

USE_INETD=true

para que quede:

USE_INETD=false

(no se utilizará ATFTPD a través del servidor INET). Luego modificar esta linea:

OPTIONS="--tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /srv/tftp"

para que quede:

OPTIONS="--tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /tftpboot --logfile=/var/log/atftp.log "

Guardar los cambios y crear el archivo de log como indicado en la linea de configuración de ATFTPD con respectivos permisos:

touch /var/log/atftpd.log

chmod 644 /var/log/atftpd.log

En el caso en que el servicio inetd esté corriendo:

ps aux | grep inetd

root 1223 0.0 0.3 5664 2936 ? Ss 15:17 0:00 /usr/sbin/inetd

root 1326 0.0 0.0 5996 528 pts/0 S+ 15:20 0:00 grep inetd

se para y se deshabilita por defecto:

systemctl stop inetd
systemctl disable inetd
Removed symlink /etc/systemd/system/multi-user.target.wants/inetd.service.

Iniciar el servidor TFTP:

/etc/init.d/atftpd restart

Averiguar que esté corriendo correctamente:

netstat -lnp | grep ":69 "
udp 0 0 0.0.0.0:69 0.0.0.0:* 1383/atftpd

ps aux | grep atftpd
nobody 1383 0.0 0.1 3080 1576 ? Ss 15:20 0:00 /usr/sbin/atftpd --daemon --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /tftpboot --logfile=/var/log/atftp.log

root 1420 0.0 0.0 5996 548 pts/0 S+ 15:21 0:00 grep atftpd

Fin