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
This commit is contained in:
喵二
2024-09-02 16:44:38 +08:00
committed by GitHub
parent b04e94da27
commit a8f1246e35

View File

@@ -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