1
0
Fork 0
mirror of https://github.com/iiab/iiab.git synced 2025-02-13 03:32:12 +00:00

Initial stab at installing FreePBX

This commit is contained in:
Anish Mangal 2019-01-17 10:32:58 +00:00 committed by root
parent 25702f4e1d
commit 490812e6a5
7 changed files with 199 additions and 3 deletions

View file

@ -5,3 +5,13 @@ pbx_installed: False
asterisk_url: http://downloads.asterisk.org/pub/telephony/asterisk/
asterisk_src_file: asterisk-16-current.tar.gz
asterisk_src_dir: /opt/iiab/asterisk
asterisk_db_host: localhost
asterisk_db_user: asterisk
asterisk_db_dbname: asterisk
asterisk_db_password: changeme
asterisk_db_cdrdbname: asteriskcdrdb
freepbx_url: http://mirror.freepbx.org/modules/packages/freepbx/
freepbx_src_file: freepbx-15.0-latest.tgz
freepbx_src_dir: /opt/iiab/freepbx

3
roles/pbx/meta/main.yml Normal file
View file

@ -0,0 +1,3 @@
dependencies:
- { role: nodejs, tags: ['nodejs'], when: pbx_install }

View file

@ -142,7 +142,7 @@
regexp: 'rungroup ='
line: 'rungroup = asterisk'
- name: Enable & Start asterisk service
- name: Asterisk - Enable & Start asterisk service
systemd:
daemon_reload: yes
name: asterisk
@ -150,7 +150,7 @@
state: started
when: pbx_enabled
- name: Disable & Stop asterisk service
- name: Asterisk - Disable & Stop asterisk service
systemd:
daemon_reload: yes
name: asterisk

View file

@ -1,4 +1,4 @@
- name: Install asterisk dependencies
- name: Asterisk - Install dependencies
package:
name:
- git

View file

@ -0,0 +1,142 @@
- name: FreePBX - Install dependencies
include: freepbx_dependencies.yml
- name: FreePBX - Download software to /opt/iiab/downloads
get_url:
url: "{{ freepbx_url }}/{{ freepbx_src_file }}"
dest: "{{ downloads_dir }}/{{ freepbx_src_file }}"
timeout: "{{ download_timeout }}"
when: internet_available
- name: FreePBX - Check for /opt/iiab/downloads/{{ freepbx_src_file }}
stat:
path: "{{ downloads_dir }}/{{ freepbx_src_file }}"
register: freepbx_src
- name: FreePBX - FAIL (force Ansible to exit) IF /opt/iiab/downloads/{{ freepbx_src_file }} doesn't exist
fail:
msg: "{ downloads_dir }}/{{ freepbx_src_file }} is REQUIRED in order to install."
when: not freepbx_src.stat.exists
- name: FreePBX - Create install source directory
file:
path: "{{ freepbx_src_dir }}"
state: directory
- name: FreePBX - Extract source
unarchive:
src: "{{ downloads_dir }}/{{ freepbx_src_file }}"
dest: "{{ freepbx_src_dir }}"
owner: root
group: root
extra_opts: [--strip-components=1]
- name: FreePBX - Add mysql user
mysql_user:
name: "{{ asterisk_db_user }}"
password: "{{ asterisk_db_password }}"
priv: "{{ asterisk_db_dbname }}.*:ALL/{{ asterisk_db_cdrdbname }}.*:ALL"
login_host: "{{ asterisk_db_host }}"
host: "{{ (asterisk_db_host == 'localhost') | ternary('localhost', ansible_default_ipv4.address) }}"
state: present
- name: FreePBX - Add mysql db
mysql_db:
name: "{{ asterisk_db_dbname }}"
encoding: utf8
collation: utf8_general_ci
login_host: "{{ asterisk_db_host }}"
state: present
- name: FreePBX - Add cdr mysql db
mysql_db:
name: "{{ asterisk_db_cdrdbname }}"
encoding: utf8
collation: utf8_general_ci
login_host: "{{ asterisk_db_host }}"
state: present
- name: FreePBX - Disable & Stop asterisk service
systemd:
daemon_reload: yes
name: asterisk
enabled: no
state: stopped
# using named groups due to this: http://www.handverdrahtet.org/2016/01/ansible-using-numbered-backreference.html
- name: FreePBX - Enable freepbx installation with remote mysql db
replace:
dest: "{{ freepbx_src_dir }}/installlib/installcommand.class.php"
regexp: "(?P<firstpart>\$amp_conf\[.AMPDBHOST.\] = .)localhost(.;)"
replace: "\g<firstpart>{{ asterisk_db_host }}\2"
- name: Don't let freepbx take over the php sessions dir
blockinfile:
content: |
[blacklist]
directory = /var/lib/php/sessions
marker: "; {mark} ANSIBLE MANAGED BLOCK"
dest: /etc/asterisk/freepbx_chown.conf
owner: asterisk
group: asterisk
create: yes
- name: Install freepbx (just ran once)
command: "{{ item }}"
args:
chdir: "{{ freepbx_src_dir }}/freepbx"
creates: /var/www/freepbx
with_items:
- ./start_asterisk start
- ./install -n --webroot /var/www/freepbx --dbuser {{ asterisk_db_user }} --dbpass {{ asterisk_db_password }} --dbname {{ asterisk_db_dbname }} --cdrdbname {{ asterisk_db_cdrdbname }}
register: freepbx_installation
- name: Install systemd freepbx service
copy: src=freepbx.service.j2 dest=/etc/systemd/system/freepbx.service mode=755
# http://community.freepbx.org/t/fixing-cdr-cel-on-ubuntu-debian-installation/30836
# Test using `isql -v MySQL-asteriskcdrdb`
- name: Fix asterisk cdr odbc connection (1)
blockinfile:
dest: /etc/odbcinst.ini
create: yes
marker: "; {mark} ANSIBLE MANAGED BLOCK"
content: |
[MySQL]
Description = ODBC for MySQL
Driver = {{ libodbc_path }}
FileUsage = 1
notify: Reload asterisk modules
- name: Fix asterisk cdr odbc connection (2)
replace:
dest: /etc/odbc.ini
regexp: /var/lib/mysql/mysql.sock
replace: /var/run/mysqld/mysqld.sock
notify: Reload asterisk modules
- name: Install freepbx modules
command: "fwconsole ma downloadinstall {{ item }}"
args:
creates: /var/www/freepbx/admin/modules/{{ item }}
with_items:
- userman
- asteriskinfo
- backup
- outroutemsg
- name: FreePBX - Enable and start FreePBX service
systemd:
daemon_reload: yes
name: freepbx
enabled: yes
state: started
when: pbx_enabled
- name: FreePBX - Disable and Stop FreePBX service
systemd:
daemon_reload: yes
name: freepbx
enabled: no
state: stopped
when: pbx_enabled

View file

@ -0,0 +1,29 @@
- name: FreePBX - Install dependencies
package:
name:
- wget
- git
- unixodbc # for asterisk cdr
- sudo # required by freepbx install script
- net-tools # fwconsole requirement
- cron # required by freepbx ucp package
- sox # required for CDR web-playback
- php
- php-pear
- php-cgi
- php-common
- php-curl
- php-mbstring
- php-gd
- php-mysql
- php-gettext
- php-bcmath
- php-zip
- php-xml
- php-imap
- php-json
- php-snmp
- php-fpm
- libapache2-mod-php
- python-mysqldb # https://github.com/Yannik/ansible-role-freepbx/blob/master/tasks/freepbx.yml#L33
state: latest

View file

@ -0,0 +1,12 @@
[Unit]
Description=FreePBX VoIP Server
After=mysql.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/fwconsole start
ExecStop=/usr/sbin/fwconsole stop
[Install]
WantedBy=multi-user.target