mirror of
https://github.com/iiab/iiab.git
synced 2025-02-13 11:42:08 +00:00
222 lines
9.3 KiB
YAML
222 lines
9.3 KiB
YAML
# https://wiki.freepbx.org/display/FOP/Installing+FreePBX+16+on+Debian+10.9
|
|
# https://computingforgeeks.com/how-to-install-asterisk-16-with-freepbx-15-on-ubuntu-debian/
|
|
# RPi: http://mghadam.blogspot.com/2021/03/install-asterisk-18-freepbx-15-on.html
|
|
# 2012-2017: http://www.raspberry-asterisk.org
|
|
|
|
- name: FreePBX - Install dependencies
|
|
include: freepbx_dependencies.yml
|
|
|
|
- name: FreePBX - Download {{ freepbx_url }}/{{ freepbx_src_file }} to {{ downloads_dir }}
|
|
get_url:
|
|
url: "{{ freepbx_url }}/{{ freepbx_src_file }}"
|
|
dest: "{{ downloads_dir }}" # e.g. /opt/iiab/downloads/freepbx-16.0-latest.tgz
|
|
timeout: "{{ download_timeout }}"
|
|
when: internet_available
|
|
|
|
- name: FreePBX - Check for {{ downloads_dir }}/{{ freepbx_src_file }}
|
|
stat:
|
|
path: "{{ downloads_dir }}/{{ freepbx_src_file }}"
|
|
register: freepbx_src
|
|
|
|
- name: FreePBX - FAIL (force Ansible to exit) IF {{ downloads_dir }}/{{ freepbx_src_file }} doesn't exist
|
|
fail:
|
|
msg: "{{ downloads_dir }}/{{ freepbx_src_file }} is REQUIRED to install FreePBX."
|
|
when: not freepbx_src.stat.exists
|
|
|
|
- name: FreePBX - Create source dir {{ freepbx_src_dir }}
|
|
file:
|
|
path: "{{ freepbx_src_dir }}" # /opt/iiab/freepbx
|
|
state: directory
|
|
|
|
- name: FreePBX - Extract to source dir (root:root)
|
|
unarchive:
|
|
src: "{{ downloads_dir }}/{{ freepbx_src_file }}"
|
|
dest: "{{ freepbx_src_dir }}"
|
|
owner: root
|
|
group: root
|
|
extra_opts: [--strip-components=1]
|
|
creates: "{{ freepbx_src_dir }}/install"
|
|
|
|
# 2021-08-04: FreePBX 16 no longer needs this FreePBX 15 patch
|
|
# - name: FreePBX - Patch FreePBX source - IIAB Bug 1685
|
|
# patch:
|
|
# src: roles/pbx/templates/71-freepbx-framework.patch
|
|
# dest: "{{ freepbx_src_dir }}/amp_conf/htdocs/admin/libraries/BMO/Framework.class.php"
|
|
|
|
# 2021-08-04: FreePBX 16 no longer needs this FreePBX 15 patch
|
|
# - name: FreePBX - Patch FreePBX source - wants [] not {}
|
|
# patch:
|
|
# src: roles/pbx/templates/pbx.patch
|
|
# dest: "{{ freepbx_src_dir }}/amp_conf/htdocs/admin/libraries/Composer/vendor/neitanod/forceutf8/src/ForceUTF8/Encoding.php"
|
|
|
|
|
|
# 2021-08-04: systemd service 'asterisk' is Enabled but Not Active at this point -- LET'S EXPERIMENT
|
|
# - name: FreePBX - Disable & Stop 'asterisk' systemd service
|
|
# systemd:
|
|
# daemon_reload: yes
|
|
# name: asterisk
|
|
# enabled: no
|
|
# state: stopped
|
|
|
|
# 2021-08-05: Asterisk's systemd / systemctl support is getting there but Very
|
|
# Imperfect (even when compiled in, as a result of package 'libsystemd-dev' at
|
|
# top of asterisk.tml) so let's follow these "official" instructions for now:
|
|
|
|
- name: FreePBX - Run 'update-rc.d -f asterisk remove' similar to 'systemctl disable asterisk' giving FreePBX full control during boot - not strictly required but recommended by https://wiki.freepbx.org/display/FOP/Installing+FreePBX+16+on+Debian+10.9
|
|
command: update-rc.d -f asterisk remove
|
|
|
|
|
|
- name: FreePBX - Add MySQL user ({{ asterisk_db_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 }}"
|
|
# login_user: root
|
|
# login_password: "{{ mysql_root_password }}"
|
|
host: "{{ (asterisk_db_host == 'localhost') | ternary('localhost', ansible_default_ipv4.address) }}"
|
|
state: present
|
|
|
|
- name: FreePBX - Add MySQL db ({{ asterisk_db_dbname }})
|
|
mysql_db:
|
|
name: "{{ asterisk_db_dbname }}"
|
|
encoding: utf8
|
|
collation: utf8_general_ci
|
|
# login_host: "{{ asterisk_db_host }}"
|
|
# login_user: root
|
|
# login_password: "{{ mysql_root_password }}"
|
|
state: present
|
|
|
|
- name: FreePBX - Add cdr MySQL db ({{ asterisk_db_cdrdbname }})
|
|
mysql_db:
|
|
name: "{{ asterisk_db_cdrdbname }}"
|
|
encoding: utf8
|
|
collation: utf8_general_ci
|
|
login_host: "{{ asterisk_db_host }}"
|
|
state: present
|
|
|
|
- name: FreePBX - Create new php sessions dir /var/lib/php/asterisk_sessions/ - SEE 'php_value session.save_path /var/lib/php/asterisk_sessions/' IN pbx/templates/freepbx.conf.j2
|
|
file:
|
|
path: /var/lib/php/asterisk_sessions/
|
|
state: directory
|
|
|
|
- name: FreePBX - Set ownership for new php sessions dir (asterisk:asterisk)
|
|
file:
|
|
dest: /var/lib/php/asterisk_sessions/
|
|
owner: asterisk
|
|
group: asterisk
|
|
recurse: yes
|
|
|
|
- name: "FreePBX - Populate /etc/asterisk/freepbx_chown.conf to prevent 'fwconsole chown' takeover of /var/lib/php/sessions - and possibly later /etc/freepbx.conf, /var/log/asterisk/freepbx.log, /var/spool/asterisk/cache"
|
|
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
|
|
|
|
# 2021-08-04: FreePBX 16 no longer needs this FreePBX 15 patch
|
|
# - name: FreePBX - Patch FreePBX source - disable get_magic_quotes_gpc()
|
|
# patch:
|
|
# src: roles/pbx/templates/pbx2.patch
|
|
# dest: "{{ freepbx_install_dir }}/admin/libraries/view.functions.php"
|
|
|
|
|
|
- name: FreePBX - 2-step install (just run once) - CAN TAKE 3-12 MIN OR LONGER!
|
|
command: "{{ item }}"
|
|
args:
|
|
chdir: "{{ freepbx_src_dir }}"
|
|
creates: "{{ freepbx_install_dir }}" # /var/www/html/freepbx
|
|
with_items:
|
|
- ./start_asterisk start
|
|
- ./install -n --webroot {{ freepbx_install_dir }} --dbuser {{ asterisk_db_user }} --dbpass {{ asterisk_db_password }} --dbname {{ asterisk_db_dbname }} --cdrdbname {{ asterisk_db_cdrdbname }}
|
|
|
|
- name: "Run 'fwconsole stop' and 'killall -9 safe_asterisk' to stop both Asterisk processes -- this avoids \"Unable to run Pre-Asterisk hooks, because Asterisk is already running\" in 'journalctl -u freepbx' logs"
|
|
command: "{{ item }}"
|
|
with_items:
|
|
- fwconsole stop
|
|
- killall -9 safe_asterisk # 2021-08-08: Stronger medicine needed for 64-bit Ubuntu Server 21.04 on RPi 4. Originally from @jvonau's PR #2912.
|
|
# - killall -9 asterisk # 2021-08-05: Also from @jvonau's PR #2912, to brute force this. In the end, above 'fwconsole stop' works more gracefully.
|
|
# - ./start_asterisk stop # Buggy!
|
|
# - /usr/sbin/asterisk -rx "core stop gracefully"
|
|
# - fwconsole reload
|
|
# - fwconsole restart
|
|
# - fwconsole ma disablerepo commercial
|
|
# - fwconsole ma installall
|
|
# - fwconsole ma delete firewall
|
|
# - fwconsole reload
|
|
# - fwconsole restart
|
|
ignore_errors: yes # 2021-08-08: For things like 'killall -9 safe_asterisk' that fail when process doesn't exist
|
|
|
|
|
|
# 2021-08-06: This stanza works, but above is more graceful. (FYI PRs #2908,
|
|
# #2912, #2913 didn't quite work -- whereas this PR #2915 at least worked!)
|
|
# - name: FreePBX - Run 'systemctl restart freepbx' TWICE (THIS IS 1 OF 2) to get past 'systemctl status freepbx' glitch "Unable to run Pre-Asterisk hooks, because Asterisk is already running"
|
|
# systemd:
|
|
# daemon_reload: yes
|
|
# name: freepbx
|
|
# enabled: yes
|
|
# state: restarted
|
|
|
|
# - name: 'FreePBX - fix file permissions for NGINX: /etc/freepbx.conf (0644), /var/log/asterisk/freepbx.log (0666)'
|
|
# file:
|
|
# #state: file
|
|
# path: "{{ item.path }}"
|
|
# mode: "{{ item.mode }}"
|
|
# with_items:
|
|
# - { path: '/etc/freepbx.conf', mode: u=rw,g=r,o=r } # 2021-08-04: LATER ENDS UP AS 0660
|
|
# - { path: '/var/log/asterisk/freepbx.log', mode: u=rw,g=rw,o=rw } # 2021-08-04: LATER ENDS UP AS 0664
|
|
|
|
# - name: 'FreePBX - fix dir permissions for NGINX: /var/spool/asterisk/cache (0777)'
|
|
# file:
|
|
# state: directory
|
|
# path: "{{ item }}"
|
|
# mode: u=rwx,g=rwx,o=rwx # 2021-08-04: MOST CONTENT THEREIN ENDS UP AS asterisk:asterisk 664 (files) & 775 (dirs)
|
|
# # recurse: yes # Probably Doesn't Help?
|
|
# with_items:
|
|
# # - /var/www/html/freepbx/admin/assets/less/cache
|
|
# - /var/spool/asterisk/cache
|
|
|
|
- name: FreePBX - Install /etc/odbc.ini from template (root:root, 0644 by default) - in future consider compiling ODBC driver for aarch64 per http://mghadam.blogspot.com/2021/03/install-asterisk-18-freepbx-15-on.html ?
|
|
template:
|
|
src: odbc.ini
|
|
dest: /etc/
|
|
|
|
- name: FreePBX - Install /etc/systemd/system/freepbx.service from template (root:root, 0644 by default)
|
|
template:
|
|
src: freepbx.service
|
|
dest: /etc/systemd/system/
|
|
|
|
|
|
# For 'pbx_try_nginx: True' -- FreePBX's initial page (Admin user registration)
|
|
# tries to set up a cron job but fails:
|
|
# "Exception: Trying to edit user asterisk, when I'm running as www-data"
|
|
# #2916 DETAILS: https://github.com/iiab/iiab/pull/2916#issuecomment-894585322
|
|
# FWIW hacking /etc/freepbx.conf (lineinfile or manually) did not solve it...
|
|
# - name: "2021-08-06: Try \"$amp_conf['AMPASTERISKWEBUSER'] = 'www-data';\" in /etc/freepbx.conf for #2916 registration cron fix ?'"
|
|
# lineinfile:
|
|
# path: /etc/freepbx.conf
|
|
# insertafter: '^<\?php$' # Match exact line '<?php'
|
|
# line: "$amp_conf['AMPASTERISKWEBUSER'] = 'www-data';"
|
|
# when: pbx_try_nginx
|
|
|
|
|
|
- block:
|
|
|
|
- name: FreePBX - Install /etc/{{ apache_service }}/sites-available/freepbx.conf from template ({{ apache_user }}:{{ apache_user }}, 0644 by default)
|
|
template:
|
|
src: freepbx.conf.j2
|
|
dest: /etc/{{ apache_service }}/sites-available/freepbx.conf # apache2
|
|
owner: "{{ apache_user }}" # www-data
|
|
group: "{{ apache_user }}"
|
|
|
|
- name: FreePBX - Add directive "Listen {{ pbx_http_port }}" to /etc/{{ apache_service }}/ports.conf
|
|
lineinfile:
|
|
path: /etc/{{ apache_service }}/ports.conf
|
|
line: "Listen {{ pbx_http_port }}"
|
|
# insertafter: Listen 80
|
|
|
|
when: not pbx_try_nginx
|