105 lines
3.6 KiB
Bash
105 lines
3.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
template_dir="/config-template"
|
|
monitor_dir="/var/spool/asterisk/monitor/mvpcc"
|
|
primary_sounds_dir="/usr/share/asterisk/sounds"
|
|
legacy_sounds_dir="/var/lib/asterisk/sounds"
|
|
keys_dir="/etc/asterisk/keys"
|
|
|
|
password_1001="${ASTERISK_ENDPOINT_1001_PASSWORD:-${ASTERISK_AMI_SECRET:-ChangeMe-1001}}"
|
|
password_2001="${ASTERISK_ENDPOINT_2001_PASSWORD:-${ASTERISK_AMI_SECRET:-ChangeMe-2001}}"
|
|
password_2002="${ASTERISK_ENDPOINT_2002_PASSWORD:-${ASTERISK_AMI_SECRET:-ChangeMe-2002}}"
|
|
ami_secret="${ASTERISK_AMI_SECRET:-ChangeMe-AmiSecret}"
|
|
external_address="${ASTERISK_EXTERNAL_ADDRESS:-92.38.48.166}"
|
|
|
|
mkdir -p /etc/asterisk "$monitor_dir" "$primary_sounds_dir" "$legacy_sounds_dir" "$keys_dir"
|
|
|
|
for file in extensions.conf pjsip.conf manager.conf http.conf rtp.conf; do
|
|
cp "${template_dir}/${file}" "/etc/asterisk/${file}"
|
|
done
|
|
|
|
export ASTERISK_PASSWORD_1001="$password_1001"
|
|
export ASTERISK_PASSWORD_2001="$password_2001"
|
|
export ASTERISK_PASSWORD_2002="$password_2002"
|
|
export ASTERISK_MANAGER_SECRET="$ami_secret"
|
|
export ASTERISK_EXTERNAL_ADDRESS_VALUE="$external_address"
|
|
|
|
python3 - <<'PY'
|
|
from pathlib import Path
|
|
import os
|
|
|
|
replacements = {
|
|
"ChangeMe-1001": os.environ["ASTERISK_PASSWORD_1001"],
|
|
"ChangeMe-2001": os.environ["ASTERISK_PASSWORD_2001"],
|
|
"ChangeMe-2002": os.environ["ASTERISK_PASSWORD_2002"],
|
|
"ChangeMe-AmiSecret": os.environ["ASTERISK_MANAGER_SECRET"],
|
|
"92.38.48.166": os.environ["ASTERISK_EXTERNAL_ADDRESS_VALUE"],
|
|
}
|
|
|
|
for path in (
|
|
Path("/etc/asterisk/pjsip.conf"),
|
|
Path("/etc/asterisk/manager.conf"),
|
|
):
|
|
text = path.read_text(encoding="utf-8")
|
|
for old, new in replacements.items():
|
|
text = text.replace(old, new)
|
|
path.write_text(text, encoding="utf-8")
|
|
|
|
modules_path = Path("/etc/asterisk/modules.conf")
|
|
if modules_path.exists():
|
|
text = modules_path.read_text(encoding="utf-8")
|
|
if "noload => chan_sip.so" not in text:
|
|
stanza = (
|
|
"; MVPCC uses PJSIP/WebRTC for browser softphones.\n"
|
|
"noload => chan_sip.so\n\n"
|
|
)
|
|
if "[global]" in text:
|
|
text = text.replace("[global]", f"{stanza}[global]", 1)
|
|
elif "[modules]" in text:
|
|
text = text.rstrip() + "\n\n" + stanza
|
|
else:
|
|
text = "[modules]\nautoload=yes\n\n" + stanza + text
|
|
modules_path.write_text(text, encoding="utf-8")
|
|
PY
|
|
|
|
if [ ! -f "${keys_dir}/asterisk.pem" ] || [ ! -f "${keys_dir}/asterisk.key" ]; then
|
|
openssl req \
|
|
-x509 \
|
|
-nodes \
|
|
-newkey rsa:2048 \
|
|
-keyout "${keys_dir}/asterisk.key" \
|
|
-out "${keys_dir}/asterisk.pem" \
|
|
-days 3650 \
|
|
-subj "/CN=${external_address}"
|
|
fi
|
|
|
|
if [ -f /assets/mvpcc_ivr_prompt.wav ]; then
|
|
for sounds_dir in "$primary_sounds_dir" "$legacy_sounds_dir"; do
|
|
cp /assets/mvpcc_ivr_prompt.wav "${sounds_dir}/mvpcc_ivr_prompt.wav"
|
|
mkdir -p "${sounds_dir}/en" "${sounds_dir}/ru" "${sounds_dir}/ru_RU"
|
|
cp /assets/mvpcc_ivr_prompt.wav "${sounds_dir}/en/mvpcc_ivr_prompt.wav"
|
|
cp /assets/mvpcc_ivr_prompt.wav "${sounds_dir}/ru/mvpcc_ivr_prompt.wav"
|
|
cp /assets/mvpcc_ivr_prompt.wav "${sounds_dir}/ru_RU/mvpcc_ivr_prompt.wav"
|
|
done
|
|
fi
|
|
|
|
if [ -d /assets/ivr ]; then
|
|
for sounds_dir in "$primary_sounds_dir" "$legacy_sounds_dir"; do
|
|
mkdir -p "${sounds_dir}/ivr"
|
|
cp -a /assets/ivr/. "${sounds_dir}/ivr/"
|
|
done
|
|
fi
|
|
|
|
chown -R asterisk:asterisk /etc/asterisk "$keys_dir" /var/spool/asterisk/monitor
|
|
|
|
for sounds_dir in "$primary_sounds_dir" "$legacy_sounds_dir"; do
|
|
if [ -w "$sounds_dir" ]; then
|
|
chown -R asterisk:asterisk "$sounds_dir"
|
|
fi
|
|
done
|
|
|
|
chmod 0755 /var/spool/asterisk /var/spool/asterisk/monitor "$monitor_dir"
|
|
|
|
exec /usr/sbin/asterisk -f -U asterisk -G asterisk -vvv
|