#!/bin/bash set -e # -------------------------------------------- # 参数解析:必须指定 config.json 路径 # -------------------------------------------- CONFIG_PATH="" while [[ $# -gt 0 ]]; do case "$1" in -c|--config) CONFIG_PATH="$2" shift 2 ;; *) echo "❌ 未知参数: $1" exit 1 ;; esac done if [[ -z "$CONFIG_PATH" ]]; then echo "❌ 必须使用 -c " echo "示例: sudo ./install_mdns.sh -c /home/aiec/demo/config.json" exit 1 fi if [[ ! -f "$CONFIG_PATH" ]]; then echo "❌ 找不到配置文件:" echo " $CONFIG_PATH" exit 1 fi echo "📌 使用配置文件: $CONFIG_PATH" # -------------------------------------------- # 1. 安装 avahi 组件 # -------------------------------------------- echo "=== 安装 Avahi 相关 deb 包 ===" sudo dpkg -i avahi-daemon_*.deb avahi-utils_*.deb avahi-autoipd_*.deb libnss-mdns_*.deb || true sudo apt --fix-broken install -y echo "=== 启动 & 启用 avahi-daemon ===" sudo systemctl enable avahi-daemon || true sudo systemctl restart avahi-daemon # -------------------------------------------- # 2. 安装 update_mdns.sh(核心逻辑) # -------------------------------------------- echo "=== 写入 /usr/local/bin/update_mdns.sh ===" sudo mkdir -p /usr/local/bin sudo tee /usr/local/bin/update_mdns.sh >/dev/null <<'EOF' #!/bin/bash CONFIG="@CONFIG_PATH@" TRIGGER="/run/update_mdns_request" # --------------- 读取 device_no --------------- DEVICE_NO=$(grep -oP '"device_no"\s*:\s*"\K[^"]+' "$CONFIG") # 若触发文件存在,则优先使用触发文件内容 if [[ -f "$TRIGGER" ]]; then FILE_VALUE=$(tr -d '\n' < "$TRIGGER") if [[ -n "$FILE_VALUE" ]]; then DEVICE_NO="$FILE_VALUE" fi fi if [[ -z "$DEVICE_NO" ]]; then echo "[update_mdns] 未找到有效 device_no" exit 1 fi echo "[update_mdns] 更新 hostname = $DEVICE_NO" # --------------- 设置 hostname --------------- hostnamectl set-hostname "$DEVICE_NO" # 修复 /etc/hosts if grep -q "^127.0.1.1" /etc/hosts; then sed -i "s/^127.0.1.1.*/127.0.1.1 $DEVICE_NO/" /etc/hosts else echo "127.0.1.1 $DEVICE_NO" >> /etc/hosts fi # --------------- 更新 Avahi 服务 --------------- mkdir -p /etc/avahi/services tee /etc/avahi/services/webconfig.service >/dev/null < %h Config Page _http._tcp 18080 EOF2 systemctl restart avahi-daemon # 删除触发文件,避免重复触发 rm -f "$TRIGGER" EOF sudo chmod +x /usr/local/bin/update_mdns.sh # 用真实 CONFIG_PATH 替换脚本中的占位符 sudo sed -i "s|@CONFIG_PATH@|$CONFIG_PATH|g" /usr/local/bin/update_mdns.sh # -------------------------------------------- # 3. 安装 systemd service # -------------------------------------------- echo "=== 创建 update-mdns.service ===" sudo tee /etc/systemd/system/update-mdns.service >/dev/null </dev/null <