From a8f1246e3522fd05f357c86b9bd5bdb3eb8fa47f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=96=B5=E4=BA=8C?= <66155308+miaoermua@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:44:38 +0800 Subject: [PATCH] Update: Install ipk (#14) * Update: install ipk * Update cattools.sh * Update cattools.sh * Update cattools.sh * Update cattools.sh * Update cattools.sh * Update cattools.sh * Update cattools.sh * Update cattools.sh --- cattools.sh | 124 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 118 insertions(+), 6 deletions(-) diff --git a/cattools.sh b/cattools.sh index 922ee26..24025f0 100644 --- a/cattools.sh +++ b/cattools.sh @@ -1245,9 +1245,10 @@ utilities_menu() { echo "2. Tailscale 配置" echo "3. LeigodAcc 配置" echo "4. TTYD 免密配置(危险)" - echo "5. SSL/TLS 证书上传配置" - echo "6. 重置 root 密码" - echo "7. 重置系统" + echo "5. 导入 IPK 软件包" + echo "6. SSL/TLS 证书上传配置" + echo "7. 重置 root 密码" + echo "8. 重置系统" echo "" echo "0. 返回 Cattools 主菜单" echo @@ -1257,9 +1258,10 @@ utilities_menu() { 2) configure_tailscale ;; 3) configure_leigodacc ;; 4) configure_ttyd ;; - 5) manual_deploy_uhttpd_ssl_cert ;; - 6) reset_root_password ;; - 7) openwrt_firstboot ;; + 5) install_ipk ;; + 6) manual_deploy_uhttpd_ssl_cert ;; + 7) reset_root_password ;; + 8) openwrt_firstboot ;; 0) menu ;; *) echo "[ERROR] 无效选项,请重试" && utilities_menu ;; esac @@ -1511,6 +1513,116 @@ configure_leigodacc() { sh -c "$(curl -fsSL https://service.miaoer.xyz/openwrt-leigodacc-manager/leigod.sh)" } +install_ipk() { + echo + echo "[INFO] 检测 /tmp/upload/ 目录中的 IPK 文件..." + lan_ip=$(uci get network.lan.ipaddr) + echo "[INFO] 文件上传访问链接: http://$lan_ip/cgi-bin/luci/admin/system/filetransfer" + ipk_files=$(ls /tmp/upload/*.ipk 2>/dev/null) + + if [ -n "$ipk_files" ]; then + echo "[INFO] 检测到以下 IPK 文件已上传到 /tmp/upload/:" + echo "$ipk_files" + echo + echo "请选择操作: " + echo "1. 立即安装" + echo "2. 保留,稍后安装" + echo "3. 移除文件" + read -p "请输入选项 (1/2/3): " choice + + case $choice in + 1) + echo "[INFO] 正在安装 IPK 文件..." + install_ipk_files "$ipk_files" + ;; + 2) + echo "[INFO] 已选择稍后安装,请继续上传其他 IPK 文件" + return + ;; + 3) + echo "[INFO] 移除 IPK 文件..." + rm -f /tmp/upload/*.ipk + echo "[INFO] 已移除所有 IPK 文件" + install_ipk + return + ;; + *) + echo "[ERROR] 无效选项" + return + ;; + esac + else + echo "[INFO] 你可以通过 IPK 文件/URL 导入 IPK 文件安装" + read -p "请输入 IPK 文件路径或多个 URL (用英文逗号 ',' 分隔不能使用中文逗号','分割!): " input + + if [[ -z "$input" ]]; then + echo "[INFO] 没有输入 URL,等待上传 IPK 文件..." + sleep 5 # 等待文件上传 + ipk_files=$(ls /tmp/upload/*.ipk 2>/dev/null) + + if [ -n "$ipk_files" ]; then + echo "[INFO] 检测到本地文件: $ipk_files" + install_ipk_manager "$ipk_files" + else + echo "[ERROR] 未检测到任何 IPK 文件,请重新尝试。" + fi + else + if [[ -f "$input" ]]; then + echo "[INFO] 检测到本地文件: $input" + install_ipk_manager "$input" + else + urls=$(echo "$input" | tr ',' ' ') + echo "[INFO] 检测到多个 URL: $urls" + echo + + for url in $urls; do + filename=$(basename "$url") + + if [[ "$filename" == *kmod* ]]; then + echo "[Warn] 文件名包含 'kmod',可能会出现兼容性问题: $filename" + fi + + echo "[INFO] 正在下载: $url" + wget -P /tmp/upload/ "$url" + done + + ipk_files=$(ls /tmp/upload/*.ipk 2>/dev/null) + if [ -n "$ipk_files" ]; then + install_ipk_manager "$ipk_files" + else + echo "[ERROR] 无法下载任何 IPK 文件,请检查 URL 是否可以访问并下载" + fi + fi + fi + fi +} + +install_ipk_manager() { + files="$1" + + echo "[INFO] 安装前需要更新索引文件,获取在线软件源避免安装错误解决依赖问题" + echo "1. 确认(执行 apply_repo 配置软件源并 opkg update)" + echo "0. 尝试(仅 opkg update)" + read -p "请输入选项 (1/0): " confirm_net + + if [ "$confirm_net" == "1" ]; then + echo "[INFO] 正在配置软件源并更新软件包索引..." + apply_repo + elif [ "$confirm_net" == "0" ]; then + echo "[INFO] 尝试仅更新软件包索引..." + opkg update + else + echo "[ERROR] 无效选择" + return + fi + + for file in $files; do + echo "[INFO] 安装 IPK 文件: $file" + opkg install "$file" || echo "[ERROR] 安装 $file 时出错,请检查!" + done +} + + # TTYD (NOT SAFETY) configure_ttyd() { if ! opkg list_installed | grep -q "luci-app-ttyd" || ! opkg list_installed | grep -q "ttyd"; then