From 44b1cbec8c12568615cef5dab90241d7f82e8a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=96=B5=E4=BA=8C?= <66155308+miaoermua@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:41:10 +0800 Subject: [PATCH] Update DL_Mihomo --- cattools.sh | 138 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 129 insertions(+), 9 deletions(-) diff --git a/cattools.sh b/cattools.sh index c219239..0e349a4 100644 --- a/cattools.sh +++ b/cattools.sh @@ -893,24 +893,144 @@ enhancement_menu() { echo "增强配置" echo "========================" echo "" - echo "1. Tailscale 配置" - echo "2. TTYD 配置免密(危险)" - echo "3. SSL/TLS 证书上传配置" - echo "4. 重置 root 密码" - echo "5. 恢复出厂设置(重置系统)" + echo "1. Mihomo 配置" + echo "2. Tailscale 配置" + echo "3. TTYD 配置免密(危险)" + echo "4. SSL/TLS 证书上传配置" + echo "5. 重置 root 密码" + echo "6. 重置系统" echo "" echo "0. 返回 Cattools 主菜单" echo - read -p "请输入数字并回车(Please enter your choice):" choice + read -p "请输入数字并回车(Please enter your choice): " choice case $choice in - 1) configure_tailscale ;; - 2) configure_ttyd ;; - 3) manual_deploy_uhttpd_ssl_cert ;; + 1) configure_luci_mihomo ;; + 2) configure_tailscale ;; + 3) configure_ttyd ;; + 4) manual_deploy_uhttpd_ssl_cert ;; + 5) openwrt_firstboot ;; + 6) reset_root_password ;; 0) menu ;; *) echo "无效选项,请重试" && enhancement_menu ;; esac } +configure_luci_mihomo() { + if ! grep -q -E "catwrt|repo.miaoer.xyz" /etc/opkg/distfeeds.conf && ! ip a | grep -q -E "192\.168\.[0-9]+\.[0-9]+|10\.[0-9]+\.[0-9]+\.[0-9]+|172\.1[6-9]\.[0-9]+\.[0-9]+|172\.2[0-9]+\.[0-9]+\.[0-9]+|172\.3[0-1]\.[0-9]+\.[0-9]+"; then + echo "[ERROR] 请先配置软件源" + exit 1 + fi + + arch=$(uname -m) + case "$arch" in + "x86_64") + arch="amd64" + ;; + "aarch64") + arch="arm64" + ;; + *) + echo "[ERROR] 不支持的架构: $arch" + exit 1 + ;; + esac + + if ! opkg list_installed | grep -q luci-app-openclash; then + opkg update + opkg install luci-app-openclash + fi + + download_mihomo_core() { + local core_name="$1" + shift + local urls=("$@") + local dest_dir="/etc/openclash/core" + local temp_file=$(mktemp) + local success=0 + local failed_urls=() + + for url in "${urls[@]}"; do + echo "尝试下载: $url" + if curl --silent --connect-timeout 5 --max-time 10 -o "$temp_file" "$url"; then + if tar -tzf "$temp_file" &>/dev/null; then + tar -xz -C "$dest_dir" -f "$temp_file" + mv "$dest_dir/clash" "$dest_dir/$core_name" + rm -f "$temp_file" + echo "已成功下载: $url" + success=1 + break + else + echo "[ERROR] 无效的压缩文件: $url" + failed_urls+=("$url") + fi + else + echo "[ERROR] 下载失败: $url" + failed_urls+=("$url") + fi + done + + if [ $success -ne 1 ]; then + rm -f "$temp_file" + echo "[ERROR] 所有下载链接均失败" + exit 1 + fi + } + + echo "" + echo "Warning:" + echo "=========================================================================" + echo "我站不提供服务器,该功能只是补全 Mihomo 的内核,仅此而已所有结果由用户自行承担!" + echo "=========================================================================" + + sleep 2 + + echo "请选择下载类型:" + echo "1. 全部下载 (默认 3 秒自动执行)" + echo "2. 仅下载 Mihomo 内核" + echo "3. 仅下载原版内核" + echo -n "输入选项 ([1]/[2]/[3]): " + read -t 3 -p "" choice + + if [ -z "$choice" ]; then + choice=1 + fi + + local clash_meta_urls=( + "https://raw.githubusercontent.com/vernesong/OpenClash/core/master/meta/clash-linux-$arch.tar.gz" + "https://cdn.jsdelivr.net/gh/vernesong/OpenClash@core/master/meta/clash-linux-$arch.tar.gz" + "https://fastly.jsdelivr.net/gh/vernesong/OpenClash@core/master/meta/clash-linux-$arch.tar.gz" + ) + + local clash_urls=( + "https://raw.githubusercontent.com/vernesong/OpenClash/core/master/dev/clash-linux-$arch.tar.gz" + "https://cdn.jsdelivr.net/gh/vernesong/OpenClash@core/master/dev/clash-linux-$arch.tar.gz" + "https://fastly.jsdelivr.net/gh/vernesong/OpenClash@core/master/dev/clash-linux-$arch.tar.gz" + ) + + case $choice in + 1) + echo "正在更新 Mihomo 内核..." + download_mihomo_core "clash_meta" "${clash_meta_urls[@]}" + echo "正在更新原版内核..." + download_mihomo_core "clash" "${clash_urls[@]}" + ;; + 2) + echo "正在更新 Mihomo 内核..." + download_mihomo_core "clash_meta" "${clash_meta_urls[@]}" + ;; + 3) + echo "正在更新原版内核..." + download_mihomo_core "clash" "${clash_urls[@]}" + ;; + *) + echo "[ERROR] 无效选项" + exit 1 + ;; + esac + + echo "操作完成" +} + configure_tailscale(){ if ! grep -q -E "catwrt|repo.miaoer.xyz" /etc/opkg/distfeeds.conf && ! ip a | grep -q -E "192\.168\.[0-9]+\.[0-9]+|10\.[0-9]+\.[0-9]+\.[0-9]+|172\.1[6-9]\.[0-9]+\.[0-9]+|172\.2[0-9]\.[0-9]+\.[0-9]+|172\.3[0-1]\.[0-9]+\.[0-9]+"; then echo "[ERROR] 请先配置软件源"