前提:本脚本适合Kylin sp3 x86_64操作系统,其他如centos,deiban等系统自测。可以作为Kylin sp3 x86_64系统的yum源,适合测试使用。本文仅做个人备忘以及测试使用,如您需要参考,请评估自身环境。感谢AI让一切变得更简单。
#!/bin/bash
# ================================================================
# 麒麟 V10 SP3 x86_64 本地 YUM 仓库自动同步脚本
# 作者: ChatGPT
# 功能: 自动安装nginx、同步base+updates、每日定时任务+旧包清理
# ================================================================
set -e
REPO_BASEID="kylin-adv-base"
REPO_UPDATESID="kylin-adv-updates"
BASEURL_BASE="https://update.cs2c.com.cn/NS/V10/V10SP3-2403/os/adv/lic/base/x86_64/"
BASEURL_UPDATES="https://update.cs2c.com.cn/NS/V10/V10SP3-2403/os/adv/lic/updates/x86_64/"
SYNC_DIR="/var/www/html/kylin/V10SP3/adv/lic"
LOG_DIR="/var/log/reposync"
LOG_FILE="${LOG_DIR}/reposync-$(date +%F).log"
MAX_LOGS=7     # 保留最近7天日志
# ================================================================
echo "[INFO] 初始化环境..."
yum install -y yum-utils createrepo policycoreutils-python firewalld >/dev/null 2>&1 || true
# ===== 检查 Web 服务 =====
WEB_SERVICE=""
if systemctl list-unit-files | grep -q nginx.service; then
    WEB_SERVICE="nginx"
elif systemctl list-unit-files | grep -q apache2.service; then
    WEB_SERVICE="apache2"
elif systemctl list-unit-files | grep -q httpd.service; then
    WEB_SERVICE="httpd"
fi
if [ -z "$WEB_SERVICE" ]; then
    echo "[INFO] Web 服务未安装,正在安装 nginx..."
    yum install -y nginx >/dev/null 2>&1
    WEB_SERVICE="nginx"
    cat >/etc/nginx/conf.d/kylin_repo.conf <<'EOF'
server {
    listen 80;
    server_name _;
    root /var/www/html;
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;
    location / {
        allow all;
    }
}
EOF
    systemctl enable nginx --now >/dev/null 2>&1
    echo "[INFO] nginx 安装完成并已启动。"
else
    echo "[INFO] 已检测到 Web 服务: $WEB_SERVICE"
    systemctl enable "$WEB_SERVICE" --now >/dev/null 2>&1
fi
# ===== 防火墙设置 =====
if systemctl list-unit-files | grep -q firewalld.service; then
    systemctl enable firewalld --now >/dev/null 2>&1
    firewall-cmd --add-service=http --permanent >/dev/null 2>&1 || true
    firewall-cmd --reload >/dev/null 2>&1 || true
fi
# ===== 创建目录 =====
mkdir -p "$SYNC_DIR"/{base,updates}/x86_64
mkdir -p "$LOG_DIR"
# ===== 禁用其他 repo =====
find /etc/yum.repos.d/ -type f -name "*.repo" -exec sed -i 's/^enabled=1/enabled=0/' {} \;
# ===== 临时repo定义 =====
cat >/etc/yum.repos.d/${REPO_BASEID}.repo <<EOF
[${REPO_BASEID}]
name=Kylin V10 SP3 Advanced Base
baseurl=${BASEURL_BASE}
enabled=1
gpgcheck=0
EOF
cat >/etc/yum.repos.d/${REPO_UPDATESID}.repo <<EOF
[${REPO_UPDATESID}]
name=Kylin V10 SP3 Advanced Updates
baseurl=${BASEURL_UPDATES}
enabled=1
gpgcheck=0
EOF
yum clean all >/dev/null 2>&1
# ===== 同步函数 =====
sync_repo() {
    local REPOID="$1"
    local DEST="$2"
    echo "[$(date '+%F %T')] >>> 开始同步 $REPOID ..." | tee -a "$LOG_FILE"
    mkdir -p "$DEST"
    rm -rf "$DEST/repodata"
    reposync --repoid="$REPOID" -p "$DEST" --download-metadata >>"$LOG_FILE" 2>&1 || true
    createrepo --update "$DEST" >>"$LOG_FILE" 2>&1
    # ===== 清理旧版本包 =====
    echo "[INFO] 清理旧版本包..." | tee -a "$LOG_FILE"
    package-cleanup --oldkernels --count=1 -y >/dev/null 2>&1 || true
    find "$DEST" -name "*.rpm" | awk -F'/' '{print $NF}' | sort | uniq -d | while read f; do
        OLD=$(ls -1t "$DEST"/*/"$f" 2>/dev/null | tail -n +2)
        [ -n "$OLD" ] && rm -f $OLD
    done
    echo "[INFO] repodata 已生成: $DEST" | tee -a "$LOG_FILE"
}
sync_repo "$REPO_BASEID" "$SYNC_DIR/base/x86_64"
sync_repo "$REPO_UPDATESID" "$SYNC_DIR/updates/x86_64"
# ===== 权限修复 =====
WEBUSER=$(id -u www >/dev/null 2>&1 && echo www || echo nobody)
chown -R "$WEBUSER":"$WEBUSER" /var/www/html/kylin 2>/dev/null || true
chmod -R a+rX /var/www/html/kylin
if command -v semanage >/dev/null 2>&1; then
    semanage fcontext -a -t httpd_sys_content_t "/var/www/html/kylin(/.*)?" || true
    restorecon -Rv /var/www/html/kylin >/dev/null 2>&1 || true
fi
systemctl restart "$WEB_SERVICE" >/dev/null 2>&1
# ===== 日志轮转 =====
find "$LOG_DIR" -type f -name "reposync-*.log" -mtime +${MAX_LOGS} -delete
IP=$(hostname -I | awk '{print $1}')
echo
echo "[SUCCESS] 同步完成!访问路径:"
echo "  Base:    http://${IP}/kylin/V10SP3/adv/lic/base/x86_64/"
echo "  Updates: http://${IP}/kylin/V10SP3/adv/lic/updates/x86_64/"
echo
echo "[INFO] 日志文件: $LOG_FILE"
echo "[INFO] 保留最近 ${MAX_LOGS} 天日志。"
部署完毕,配置定时运行规则,例如每天凌晨3点执行,根据实际情况更改:
cat >/etc/cron.d/kylin-reposync <<'EOF'
0 3 * * * root /usr/local/bin/kylin_repo_sync.sh >> /var/log/reposync/cron.log 2>&1
EOF
systemctl restart crond
客户端yum源配置示例:
请先备份原有的yum源
cat >/etc/yum.repos.d/kylin-local.repo <<EOF
[kylin-adv-base-local]
name=Kylin Local Base
baseurl=http://<服务器IP>/kylin/V10SP3/adv/lic/base/x86_64/
enabled=1
gpgcheck=0
[kylin-adv-updates-local]
name=Kylin Local Updates
baseurl=http://<服务器IP>/kylin/V10SP3/adv/lic/updates/x86_64/
enabled=1
gpgcheck=0
EOF
yum clean all && yum makecache
散会
未经允许不得转载:小毛子的记录站 » 备忘:麒麟系统yum源服务器部署
 小毛子的记录站
小毛子的记录站 上古年间的玩客云刷机教程以及一些踩坑点
上古年间的玩客云刷机教程以及一些踩坑点