diff --git a/README.md b/README.md index 6e5b8cb..2ae9061 100644 --- a/README.md +++ b/README.md @@ -27,14 +27,14 @@ curl -sS -O https://gitea.tohub.top/Share/kejilion/raw/branch/main/kejilion.sh & *** ### 下载源配置 -脚本内通过 GitHub Raw 下载的资源默认走官方地址,脚本自身更新走本仓库 `main` 分支,均可用环境变量覆盖。部分测试工具使用其项目提供的独立域名,不受 `GITHUB_RAW_URL` 控制: +脚本内通过 GitHub Raw 下载的第三方资源默认走官方地址,项目附属资源默认从本仓库 `main` 分支下载,两者均可用环境变量覆盖。部分测试工具使用其项目提供的独立域名,不受 `GITHUB_RAW_URL` 控制: ```bash # 自定义第三方脚本下载源(例如自建 GitHub 反代) GITHUB_RAW_URL="https://your-mirror.example.com" ./kejilion.sh -# 自定义脚本自身的更新源 -UPDATE_RAW_URL="https://gitea.tohub.top/Share/kejilion/raw/branch/main" ./kejilion.sh +# 自定义本项目附属资源下载源 +PROJECT_RAW_URL="https://gitea.tohub.top/Share/kejilion/raw/branch/main" ./kejilion.sh ``` diff --git a/app.md b/app.md index eb55df5..0b17c81 100644 --- a/app.md +++ b/app.md @@ -44,7 +44,7 @@ - `./kejilion.sh clean` - `./kejilion.sh 清理` -### 5. BBR 管理 +### 4. BBR 管理 提供 BBR 管理入口,但实际下载并执行第三方 `Linux-NetSpeed/tcpx.sh`。 @@ -52,7 +52,7 @@ 另外,“系统工具”中还有一套本地实现的 **BBRv3/XanMod 内核管理**。 -### 8. 测试脚本合集 +### 5. 测试脚本合集 #### IP 与解锁检测 @@ -267,21 +267,7 @@ --- -## 三、脚本自身功能 - -### 脚本更新 - -支持: - -- 获取远程版本号和更新日志 -- 比较本地与远程版本 -- 拒绝自动降级 -- 下载新版本 -- 执行 Bash 语法检查 -- 校验下载版本 -- 原子替换当前脚本 -- 更新 `/usr/local/bin/k` -- 自动启动新版本 +## 三、命令行快捷功能 ### 软件包快捷命令 @@ -343,6 +329,6 @@ XanMod 软件源的 PGP 公钥。主脚本目前同样下载远程版本,没 2. **用户、Swap、DNS、时区、更新源等系统管理** 3. **BBR、网络线路与性能测试** 4. **Fail2Ban SSH 防护和流量限额关机** -5. **脚本自更新和命令行快捷操作** +5. **软件包与系统维护命令行快捷操作** 其中系统管理、账户、Swap、更新源、Crontab、hosts、BBRv3 和限流功能有较完整的本地实现;普通 BBR 菜单和多数测试功能主要依赖远程脚本。 \ No newline at end of file diff --git a/kejilion.sh b/kejilion.sh index 5505d9f..592db59 100644 --- a/kejilion.sh +++ b/kejilion.sh @@ -13,9 +13,9 @@ hui='\e[37m' GITHUB_RAW_URL="${GITHUB_RAW_URL:-https://raw.githubusercontent.com}" GITHUB_RAW_URL="${GITHUB_RAW_URL%/}" -# 本脚本自身的更新源 -UPDATE_RAW_URL="${UPDATE_RAW_URL:-https://gitea.tohub.top/Share/kejilion/raw/branch/main}" -UPDATE_RAW_URL="${UPDATE_RAW_URL%/}" +# 本项目附属资源的下载源 +PROJECT_RAW_URL="${PROJECT_RAW_URL:-https://gitea.tohub.top/Share/kejilion/raw/branch/main}" +PROJECT_RAW_URL="${PROJECT_RAW_URL%/}" XANMOD_SOURCE_FILE=/etc/apt/sources.list.d/kejilion-xanmod.list @@ -215,24 +215,6 @@ update_limit_cron() { return 1 } -# 版本号比较:$1 严格大于 $2 时返回 0,用于避免自更新把脚本降级 -version_gt() { - [ "$1" = "$2" ] && return 1 - local IFS=. i x y - local a=($1) b=($2) - for ((i = 0; i < ${#a[@]} || i < ${#b[@]}; i++)); do - x=${a[i]:-0}; y=${b[i]:-0} - x=${x//[!0-9]/}; y=${y//[!0-9]/} - x=${x:-0}; y=${y:-0} - [ "$x" -gt "$y" ] && return 0 - [ "$x" -lt "$y" ] && return 1 - done - return 1 -} - - - - ip_address() { ipv4_address=$(curl -s ipv4.ip.sb) ipv6_address=$(curl -s --max-time 1 ipv6.ip.sb) @@ -868,11 +850,9 @@ echo "------------------------" echo "1. 系统信息查询" echo "2. 系统更新" echo "3. 系统清理" -echo "5. BBR管理 ▶" -echo "8. 测试脚本合集 ▶ " -echo "13. 系统工具 ▶ " -echo "------------------------" -echo "00. 脚本更新" +echo "4. BBR管理 ▶" +echo "5. 测试脚本合集 ▶ " +echo "6. 系统工具 ▶ " echo "------------------------" echo "0. 退出脚本" echo "------------------------" @@ -1000,7 +980,7 @@ case $choice in linux_clean ;; - 5) + 4) clear tcpx_dir=$(mktemp -d) || { err_msg "无法创建临时目录。" @@ -1014,7 +994,7 @@ case $choice in rm -rf "$tcpx_dir" ;; - 8) + 5) while true; do clear echo "▶ 测试脚本合集" @@ -1158,7 +1138,7 @@ case $choice in done ;; - 13) + 6) while true; do clear echo "▶ 系统工具" @@ -2232,7 +2212,7 @@ case $choice in fi limit_script_existed=1 fi - if download_file "${UPDATE_RAW_URL}/Limiting_Shut_down.sh" "$tmp_limit_script" && + if download_file "${PROJECT_RAW_URL}/Limiting_Shut_down.sh" "$tmp_limit_script" && sed -i "s/^threshold_gb=.*/threshold_gb=${threshold_gb}/" "$tmp_limit_script" && grep -q "^threshold_gb=${threshold_gb}$" "$tmp_limit_script" && bash -n "$tmp_limit_script" && @@ -2294,70 +2274,6 @@ case $choice in done ;; - 00) - clear - echo "更新日志" - echo "------------------------" - changelog=$(curl -fsSL --max-time 20 "${UPDATE_RAW_URL}/kejilion_sh_log.txt") - if [ -n "$changelog" ]; then - echo "全部日志: ${UPDATE_RAW_URL}/kejilion_sh_log.txt" - echo "------------------------" - echo "$changelog" | tail -n 35 - else - echo "(当前更新源未提供更新日志)" - fi - echo "------------------------" - - sh_v_new=$(curl -fsSL --max-time 20 "${UPDATE_RAW_URL}/kejilion.sh" | grep -o 'sh_v="[0-9.]*"' | head -n 1 | cut -d '"' -f 2) - - if [ -z "$sh_v_new" ]; then - err_msg "无法获取远程版本信息,请检查网络或更新源: ${UPDATE_RAW_URL}" - elif [ "$sh_v" = "$sh_v_new" ]; then - echo -e "${lv}你已经是最新版本!${huang}v$sh_v${bai}" - elif ! version_gt "$sh_v_new" "$sh_v"; then - echo -e "${lv}本地版本 ${huang}v$sh_v${lv} 高于更新源版本 ${huang}v$sh_v_new${lv},已跳过更新。${bai}" - else - echo "发现新版本!" - echo -e "当前版本 v$sh_v 最新版本 ${huang}v$sh_v_new${bai}" - echo "------------------------" - read -p "确定更新脚本吗?(Y/N): " choice - case "$choice" in - [Yy]) - clear - # 在脚本所在目录下载并原子替换,避免更新失败时截断当前脚本 - script_dir=$(dirname "$SCRIPT_PATH") - tmp_sh=$(mktemp "${script_dir}/.kejilion.sh.XXXXXX") || { - err_msg "创建更新临时文件失败。" - echo "按任意键继续..." - read -n 1 -s -r -p "" - continue - } - if download_file "${UPDATE_RAW_URL}/kejilion.sh" "$tmp_sh" && - bash -n "$tmp_sh" && - downloaded_version=$(grep -m1 -oE '^sh_v="[0-9]+([.][0-9]+)*"$' "$tmp_sh" | cut -d '"' -f 2) && - [ "$downloaded_version" = "$sh_v_new" ] && - version_gt "$downloaded_version" "$sh_v" && - chmod +x "$tmp_sh" && - mv -f "$tmp_sh" "$SCRIPT_PATH"; then - cp "$SCRIPT_PATH" /usr/local/bin/k > /dev/null 2>&1 - echo -e "${lv}脚本已更新到最新版本!${huang}v$sh_v_new${bai}" - break_end - exec bash "$SCRIPT_PATH" - else - rm -f "$tmp_sh" - err_msg "更新失败,已保留当前版本。" - fi - ;; - [Nn]) - echo "已取消" - ;; - *) - ;; - esac - fi - - ;; - 0) clear exit