[#7] 根目录统一构建镜像入口脚本
This commit is contained in:
@@ -38,19 +38,20 @@ RUN if [ "$USE_INTRANET" = "true" ]; then \
|
||||
RUN mkdir -p /etc/supervisor/conf.d
|
||||
|
||||
# Copy supervisor configuration
|
||||
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
COPY src/bind/build/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
|
||||
# Copy BIND9 configuration files
|
||||
COPY named.conf.local /etc/bind/named.conf.local
|
||||
COPY db.argus.com /etc/bind/db.argus.com
|
||||
COPY src/bind/build/named.conf.local /etc/bind/named.conf.local
|
||||
COPY src/bind/build/db.argus.com /etc/bind/db.argus.com
|
||||
|
||||
# Copy startup and reload scripts
|
||||
COPY startup.sh /usr/local/bin/startup.sh
|
||||
COPY reload-bind9.sh /usr/local/bin/reload-bind9.sh
|
||||
COPY argus_dns_sync.sh /usr/local/bin/argus_dns_sync.sh
|
||||
COPY src/bind/build/startup.sh /usr/local/bin/startup.sh
|
||||
COPY src/bind/build/reload-bind9.sh /usr/local/bin/reload-bind9.sh
|
||||
COPY src/bind/build/argus_dns_sync.sh /usr/local/bin/argus_dns_sync.sh
|
||||
COPY src/bind/build/update-dns.sh /usr/local/bin/update-dns.sh
|
||||
|
||||
# Make scripts executable
|
||||
RUN chmod +x /usr/local/bin/startup.sh /usr/local/bin/reload-bind9.sh /usr/local/bin/argus_dns_sync.sh
|
||||
RUN chmod +x /usr/local/bin/startup.sh /usr/local/bin/reload-bind9.sh /usr/local/bin/argus_dns_sync.sh /usr/local/bin/update-dns.sh
|
||||
|
||||
# Set proper ownership for BIND9 files
|
||||
RUN chown bind:bind /etc/bind/named.conf.local /etc/bind/db.argus.com
|
||||
|
||||
68
src/bind/build/dns-monitor.sh
Normal file
68
src/bind/build/dns-monitor.sh
Normal file
@@ -0,0 +1,68 @@
|
||||
#!/bin/bash
|
||||
|
||||
# DNS监控脚本 - 每10秒检查dns.conf是否有变化
|
||||
# 如果有变化则执行update-dns.sh脚本
|
||||
|
||||
DNS_CONF="/private/argus/etc/dns.conf"
|
||||
DNS_BACKUP="/tmp/dns.conf.backup"
|
||||
UPDATE_SCRIPT="/private/argus/etc/update-dns.sh"
|
||||
LOG_FILE="/var/log/supervisor/dns-monitor.log"
|
||||
|
||||
# 确保日志文件存在
|
||||
touch "$LOG_FILE"
|
||||
|
||||
log_message() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') [DNS-Monitor] $1" >> "$LOG_FILE"
|
||||
}
|
||||
|
||||
log_message "DNS监控脚本启动"
|
||||
|
||||
while true; do
|
||||
if [ -f "$DNS_CONF" ]; then
|
||||
if [ -f "$DNS_BACKUP" ]; then
|
||||
# 比较文件内容
|
||||
if ! cmp -s "$DNS_CONF" "$DNS_BACKUP"; then
|
||||
log_message "检测到DNS配置变化"
|
||||
|
||||
# 更新备份文件
|
||||
cp "$DNS_CONF" "$DNS_BACKUP"
|
||||
|
||||
# 执行更新脚本
|
||||
if [ -x "$UPDATE_SCRIPT" ]; then
|
||||
log_message "执行DNS更新脚本: $UPDATE_SCRIPT"
|
||||
"$UPDATE_SCRIPT" >> "$LOG_FILE" 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
log_message "DNS更新脚本执行成功"
|
||||
else
|
||||
log_message "DNS更新脚本执行失败"
|
||||
fi
|
||||
else
|
||||
log_message "警告: 更新脚本不存在或不可执行: $UPDATE_SCRIPT"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
|
||||
# 第一次检测到配置文件,执行更新脚本
|
||||
if [ -x "$UPDATE_SCRIPT" ]; then
|
||||
log_message "执行DNS更新脚本: $UPDATE_SCRIPT"
|
||||
"$UPDATE_SCRIPT" >> "$LOG_FILE" 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
log_message "DNS更新脚本执行成功"
|
||||
|
||||
# 第一次运行,创建备份并执行更新
|
||||
cp "$DNS_CONF" "$DNS_BACKUP"
|
||||
log_message "创建DNS配置备份文件"
|
||||
|
||||
else
|
||||
log_message "DNS更新脚本执行失败"
|
||||
fi
|
||||
else
|
||||
log_message "警告: 更新脚本不存在或不可执行: $UPDATE_SCRIPT"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
log_message "警告: DNS配置文件不存在: $DNS_CONF"
|
||||
fi
|
||||
|
||||
sleep 10
|
||||
done
|
||||
@@ -16,6 +16,11 @@ if [ ! -f /private/argus/bind/db.argus.com ]; then
|
||||
cp /etc/bind/db.argus.com /private/argus/bind/db.argus.com
|
||||
fi
|
||||
|
||||
# Copy update-dns.sh to /private/argus/etc/
|
||||
cp /usr/local/bin/update-dns.sh /private/argus/etc/update-dns.sh
|
||||
chown bind:bind /private/argus/etc/update-dns.sh
|
||||
chmod a+x /private/argus/etc/update-dns.sh
|
||||
|
||||
# Create symlinks to use persistent configs
|
||||
ln -sf /private/argus/bind/named.conf.local /etc/bind/named.conf.local
|
||||
ln -sf /private/argus/bind/db.argus.com /etc/bind/db.argus.com
|
||||
|
||||
31
src/bind/build/update-dns.sh
Executable file
31
src/bind/build/update-dns.sh
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/bin/sh
|
||||
# update-dns.sh
|
||||
# 从 /private/argus/etc/dns.conf 读取 IP,写入 /etc/resolv.conf
|
||||
|
||||
DNS_CONF="/private/argus/etc/dns.conf"
|
||||
RESOLV_CONF="/etc/resolv.conf"
|
||||
|
||||
# 检查配置文件是否存在
|
||||
if [ ! -f "$DNS_CONF" ]; then
|
||||
echo "配置文件不存在: $DNS_CONF" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 生成 resolv.conf 内容
|
||||
{
|
||||
while IFS= read -r ip; do
|
||||
# 跳过空行和注释
|
||||
case "$ip" in
|
||||
\#*) continue ;;
|
||||
"") continue ;;
|
||||
esac
|
||||
echo "nameserver $ip"
|
||||
done < "$DNS_CONF"
|
||||
} > "$RESOLV_CONF".tmp
|
||||
|
||||
# 替换写入 /etc/resolv.conf
|
||||
cat "$RESOLV_CONF".tmp > "$RESOLV_CONF"
|
||||
rm -f "$RESOLV_CONF".tmp
|
||||
|
||||
echo "已更新 $RESOLV_CONF"
|
||||
|
||||
Reference in New Issue
Block a user