#!/bin/bash # =============================================== # UOS YUM Repository 配置脚本 (模板生成版) # 功能:根据模板,在 /etc/yum.repos.d/ 下生成 UOS 的 .repo 文件 # 特点:不依赖本地文件,直接使用组件模板写入 # =============================================== set -euo pipefail # 获取脚本所在目录 BUILD_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # ==================== 配置区域 ==================== # 目标文件名 DEST_REPO_FILE="local.repo" DEST_DIR="/etc/yum.repos.d/" # 仓库基础URL (可以是 http://, https:// 或 file://) # 请根据实际仓库地址修改 #REPO_BASE_URL="https://wh.wujf.cn/rpm/uos/1070-loongarch64" REPO_BASE_URL="file//${BUILD_DIR}" # GPG 密钥文件路径 (通常保持不变) GPG_KEY_NAME="$(ls -1 //etc/pki/rpm-gpg/ | sort | tail -n 1)" GPG_KEY_PATH="file:///etc/pki/rpm-gpg/${GPG_KEY_NAME}" # ==================== 组件列表 ==================== # 使用数组定义各个软件仓库组件 # 格式: "仓库ID|描述|相对路径|是否默认启用(1或0)" REPO_COMPONENTS=( "ks10-adv-os-local|ks10-adv-os local|ks10-adv-os|1" "ks10-adv-updates-local|ks10-adv-updates local|ks10-adv-updates|1" "ks10-adv-addons-local|ks10-adv-addons local|ks10-adv-addons|0" ) # ==================== 函数定义 ==================== # 备份除目标文件外的所有 .repo 文件 backup_other_repo_files() { local backup_suffix=".backup.$(date +%Y%m%d_%H%M%S)" local backup_count=0 echo "开始备份其他仓库配置文件..." # 遍历 DEST_DIR 下所有 .repo 文件 for repo_file in "$DEST_DIR"*.repo; do # 检查文件是否存在(避免没有匹配文件时的错误) [ -e "$repo_file" ] || continue # 获取文件名(不含路径) filename=$(basename "$repo_file") # 如果不是目标文件,则进行备份 if [ "$filename" != "$DEST_REPO_FILE" ]; then backup_file="${repo_file}${backup_suffix}" mv "$repo_file" "$backup_file" echo " ✅ 已备份: $filename -> ${filename}${backup_suffix}" backup_count=$((backup_count + 1)) fi done if [ $backup_count -eq 0 ]; then echo " ℹ️ 没有找到其他需要备份的 .repo 文件" else echo " ✅ 共备份 $backup_count 个文件" fi } # ==================== 脚本开始 ==================== echo "正在生成 UOS YUM 仓库配置文件..." # 1. 校验 root 权限 if [ "$(id -u)" -ne 0 ]; then echo "❌ 错误:此脚本必须以 root 权限运行。请使用 'sudo ./setup_uos_repo.sh' 执行。" exit 1 fi # 2. 检查目标目录可写性 if [ ! -w "$DEST_DIR" ]; then echo "❌ 错误:没有权限写入 $DEST_DIR。" exit 1 fi # 3. 显示当前使用的 URL 配置 echo "----------------------------------------" echo "当前仓库基础URL: $REPO_BASE_URL" echo "如需修改,请编辑脚本中的 REPO_BASE_URL 变量" echo "----------------------------------------" # 4. 备份其他仓库配置文件(不包括目标文件) backup_other_repo_files # 5. 备份现有目标配置文件(如果存在) FULL_DEST_PATH="${DEST_DIR}${DEST_REPO_FILE}" if [ -f "$FULL_DEST_PATH" ]; then BACKUP_FILE="${FULL_DEST_PATH}.backup.$(date +%Y%m%d_%H%M%S)" cp "$FULL_DEST_PATH" "$BACKUP_FILE" echo "✅ 已备份现有目标配置文件至:$BACKUP_FILE" fi # 6. 生成新的 .repo 文件 # 使用临时文件,避免写入中断导致文件不完整 TEMP_FILE=$(mktemp) # 写入文件头,包含注释说明 cat > "$TEMP_FILE" <> "$TEMP_FILE" </dev/null | grep -v "\.backup\." || echo " 没有找到 .repo 文件" echo "----------------------------------------" # 9. 显示生成的配置文件内容预览 echo "生成的文件内容预览(前20行):" echo "----------------------------------------" head -n 20 "$FULL_DEST_PATH" | cat -n echo "----------------------------------------" # 10. 完成提示 echo "" echo "✅ 配置完成!" echo "" echo "后续操作:" echo " 1. 如需修改仓库地址,请编辑脚本中的 REPO_BASE_URL 变量" echo " 2. 修改后重新运行此脚本即可更新配置" echo " 3. 运行以下命令更新 YUM 缓存:" echo " yum clean all && yum makecache" echo "" echo "当前使用的仓库地址: $REPO_BASE_URL"