Files

30 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
# 生成 etc-fs 运行配置: 镜像 vanilla 配置 + 本仓库覆盖/补丁
# 每次全量重建 (rm -rf → 拷 vanilla → 打补丁), 天然幂等, 不会叠加损坏 XML
# 产出: ../etc-fs/ (整目录挂载到容器 /etc/freeswitch, 见 docker-compose.yml)
set -euo pipefail
cd "$(dirname "$0")/.."
IMG="safarov/freeswitch:latest"
# 1. 从镜像导出干净 vanilla 配置
rm -rf etc-fs && mkdir -p etc-fs
docker run --rm --entrypoint sh -v "$PWD/etc-fs:/out" "$IMG" \
-c "cp -a /usr/share/freeswitch/conf/vanilla/. /out/"
# 2. ESL: 0.0.0.0:8021 + 自定义密码 + 内置 rfc1918.auto ACL
# (vanilla listen-ip=:: 在本容器 getaddrinfo 失败; ACL 详见文件内注释)
cp conf/event_socket.conf.xml etc-fs/autoload_configs/event_socket.conf.xml
# 3. Mock 运营商 trunk 网关 (无注册 + OPTIONS ping 探活)
cp conf/mock-trunk.xml etc-fs/sip_profiles/external/mock-trunk.xml
# 4. 去 stun: 依赖 (容器网内无 NAT; stun-set 在配置解析期做外网 STUN 查询,
# 不通则 Invalid ext-sip-ip → mod_sofia 加载失败)
sed -i '/cmd="stun-set"/d' etc-fs/vars.xml
sed -i '/<param name="ext-sip-ip"/d;/<param name="ext-rtp-ip"/d' etc-fs/sip_profiles/*.xml
# 5. 删除 mod_signalwire (镜像缺 CA 证书, Curl 77 每分钟刷错误日志)
sed -i '/<load module="mod_signalwire"\/>/d' etc-fs/autoload_configs/modules.conf.xml
echo "etc-fs rebuilt (freeswitch.xml: $(ls etc-fs/freeswitch.xml))"