#!/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 '//d' etc-fs/autoload_configs/modules.conf.xml echo "etc-fs rebuilt (freeswitch.xml: $(ls etc-fs/freeswitch.xml))"