diff --git a/README.md b/README.md index d0ef0b4..d9bda55 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,42 @@ sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/main.sh)" sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/gl-inet.sh)" ``` -### MT3000 如果你升级到 原厂4.8.3-op24 强烈建议把默认软件源 替换为阿里云 因为op官网的源容易下载失败 影响任何软件的安装 +#### MT3000 / MT6000 (OP24固件) +```bash +sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/gl-inet-op24.sh)" +``` + +#### BE6500 +```bash +sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/be6500.sh)" +``` + +#### BE3600 +```bash +sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/be3600.sh)" +``` + +#### MT-3600BE +```bash +sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/mt3600.sh)" +``` + +#### MT-5000 +```bash +sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/mt5000.sh)" +``` + +#### MT-3000 换分区助手 (U盘扩容) +```bash +sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/mt-3000/mt3000.sh)" +``` + +--- + +## 📝 MT3000 OP24固件软件源配置 + +如果你升级到原厂4.8.3-op24,建议把默认软件源替换为阿里云: + ``` src/gz core https://fw.gl-inet.cn/releases/v24.x/24.10.4/mediatek/filogic src/gz base https://mirrors.aliyun.com/openwrt/releases/24.10.4/packages/aarch64_cortex-a53/base @@ -33,31 +68,28 @@ src/gz routing https://mirrors.aliyun.com/openwrt/releases/24.10.4/packages/aarc src/gz telephony https://mirrors.aliyun.com/openwrt/releases/24.10.4/packages/aarch64_cortex-a53/telephony ``` -## 新增 兼容原厂op24固件(luci 24.10.4)的脚本 (MT3000/6000) -```bash -sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/gl-inet-op24.sh)" +--- + +## 📁 项目结构 ``` - -#### 新增 BE6500脚本 (GL-BE6500) ❤️ -```bash -sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/be6500.sh)" - -``` -#### 新增 BE3600脚本 (GL-BE3600) -```bash -sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/be3600.sh)" - +gl/ +├── main.sh # 主入口脚本 +├── lib/ +│ └── lib-common.sh # 公共函数库 +├── be6500.sh # BE6500专用脚本 +├── be3600.sh # BE3600专用脚本 +├── mt5000.sh # MT5000专用脚本 +├── mt3600.sh # MT3600专用脚本 +├── gl-inet.sh # MT2500/3000/6000通用脚本 +├── gl-inet-op24.sh # OP24固件专用脚本 +└── mt-3000/ + └── mt3000.sh # MT3000换分区助手 ``` -#### ❤️新增 MT-3600BE脚本 (GL-MT3600BE) -```bash -sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/mt3600.sh)" +--- -``` +## 🔗 相关链接 -#### ❤️新增 MT-5000脚本 (GL-MT5000) -```bash -sh -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main/mt5000.sh)" - -``` +- 作者导航站:https://tvhelper.cpolar.cn +- 项目赞助:https://wkdaily.cpolar.cn/01 \ No newline at end of file diff --git a/be3600.sh b/be3600.sh index 1a10a53..0cb7b33 100644 --- a/be3600.sh +++ b/be3600.sh @@ -1,486 +1,128 @@ #!/bin/sh -# 定义颜色输出函数 -red() { echo -e "\033[31m\033[01m$1\033[0m"; } -green() { echo -e "\033[32m\033[01m$1\033[0m"; } -yellow() { echo -e "\033[33m\033[01m$1\033[0m"; } -blue() { echo -e "\033[34m\033[01m$1\033[0m"; } -light_magenta() { echo -e "\033[95m\033[01m$1\033[0m"; } -light_yellow() { echo -e "\033[93m\033[01m$1\033[0m"; } -cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; } -third_party_source="https://istore.linkease.com/repo/all/nas_luci" +# GL-iNet BE3600 一键iStoreOS风格化脚本 +# by @wukongdaily + HTTP_HOST="https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main" -setup_base_init() { - #添加出处信息 - add_author_info - #添加安卓时间服务器 - add_dhcp_domain - ##设置时区 - uci set system.@system[0].zonename='Asia/Shanghai' - uci set system.@system[0].timezone='CST-8' - uci commit system - /etc/init.d/system reload - green "安装完毕!请使用8080端口访问luci界面:http://192.168.8.1:8080" - green "作者更多动态务必收藏:https://tvhelper.cpolar.cn/" +LIB_COMMON="/tmp/lib-common.sh" + +# 下载并加载公共库 +load_common_lib() { + if [ ! -f "$LIB_COMMON" ]; then + wget -O "$LIB_COMMON" "$HTTP_HOST/lib/lib-common.sh" 2>/dev/null || { + echo "下载公共库失败" + exit 1 + } + fi + . "$LIB_COMMON" } -## 安装应用商店和主题 +# BE3600 专用:64位架构配置 +add_arch_64bit() { + if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/64bit/arch.conf; then + echo "下载 arch.conf 失败,脚本终止。" + exit 1 + fi +} + +# 安装应用商店和主题 install_istore_os_style() { - ##设置Argon 紫色主题 - do_install_argon_skin - #增加终端 - opkg install luci-i18n-ttyd-zh-cn - #默认安装必备工具SFTP 方便下载文件 比如finalshell等工具可以直接浏览路由器文件 - opkg install openssh-sftp-server - #默认使用体积很小的文件传输:系统——文件传输 - do_install_filetransfer - FILE_PATH="/etc/openwrt_release" - NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" - CONTENT=$(cat $FILE_PATH) - UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") - echo "$UPDATED_CONTENT" >$FILE_PATH -} -# 安装iStore -do_istore() { - echo "do_istore 64bit ==================>" - opkg update - # 定义目标 URL 和本地目录 - URL="https://repo.istoreos.com/repo/all/store/" - DIR="/tmp/ipk_store" - - # 创建目录 - mkdir -p "$DIR" - cd "$DIR" || exit 1 - - for ipk in $(wget -qO- "$URL" | grep -oE 'href="[^"]+\.ipk"' | cut -d'"' -f2); do - echo "下载 $ipk" - wget -q "${URL}${ipk}" - done - - # 安装所有下载的 .ipk 包 - opkg install ./*.ipk - - #调整a53架构优先级 - add_arch_64bit - + do_install_argon_skin + opkg install luci-i18n-ttyd-zh-cn + opkg install openssh-sftp-server + do_install_filetransfer + FILE_PATH="/etc/openwrt_release" + NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" + CONTENT=$(cat $FILE_PATH) + UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") + echo "$UPDATED_CONTENT" >$FILE_PATH } # 首页和网络向导 do_quickstart() { - download_lib_quickstart - download_luci_quickstart - opkg install /tmp/ipk_downloads/*.ipk - green "正在更新到最新版iStoreOS首页风格 " - TMPATH=/tmp/qstart - mkdir -p ${TMPATH} - app_aarch64='quickstart_0.11.13-r1_aarch64_generic.ipk' - app_ui='luci-app-quickstart_0.12.4-r1_all.ipk' - app_lng='luci-i18n-quickstart-zh-cn_25.090.31208-f5bf244_all.ipk' - wget $HTTP_HOST/newquickstart/$app_aarch64 -O ${TMPATH}/$app_aarch64 - wget $HTTP_HOST/newquickstart/$app_ui -O ${TMPATH}/$app_ui - wget $HTTP_HOST/newquickstart/$app_lng -O ${TMPATH}/$app_lng - opkg install ${TMPATH}/*.ipk - rm -rf ${TMPATH} - hide_ui_elements - green "首页风格安装完毕!请使用8080端口访问luci界面:http://192.168.8.1:8080" - green "作者更多动态务必收藏:https://tvhelper.cpolar.cn/" + download_lib_quickstart + download_luci_quickstart + opkg install /tmp/ipk_downloads/*.ipk + do_install_new_quickstart } -download_luci_quickstart() { - # 目标目录 - REPO_URL="https://repo.istoreos.com/repo/all/nas_luci/" - DOWNLOAD_DIR="/tmp/ipk_downloads" - - # 创建下载目录 - mkdir -p "$DOWNLOAD_DIR" - - # 获取目录索引并筛选 quickstart ipk 链接 - wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | - sed 's/href="//;s/"//' | while read -r FILE; do - echo "📦 正在下载: $FILE" - wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" - done - - echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" -} - -download_lib_quickstart() { - # 目标目录 - REPO_URL="https://repo.istoreos.com/repo/aarch64_cortex-a53/nas/" - DOWNLOAD_DIR="/tmp/ipk_downloads" - - # 创建下载目录 - mkdir -p "$DOWNLOAD_DIR" - - # 获取目录索引并筛选 quickstart ipk 链接 - wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | - sed 's/href="//;s/"//' | while read -r FILE; do - echo "📦 正在下载: $FILE" - wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" - done - - echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" -} - -# 判断系统是否为iStoreOS -is_iStoreOS() { - DISTRIB_ID=$(cat /etc/openwrt_release | grep "DISTRIB_ID" | cut -d "'" -f 2) - # 检查DISTRIB_ID的值是否等于'iStoreOS' - if [ "$DISTRIB_ID" = "iStoreOS" ]; then - return 0 # true - else - return 1 # false - fi -} - -## 去除opkg签名 -remove_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - sed -i '/option check_signature/d' "$opkg_conf" -} - -## 添加opkg签名 -add_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - echo "option check_signature 1" >>"$opkg_conf" -} - -#设置第三方软件源 -setup_software_source() { - ## 传入0和1 分别代表原始和第三方软件源 - if [ "$1" -eq 0 ]; then - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - ##如果是iStoreOS系统,还原软件源之后,要添加签名 - if is_iStoreOS; then - add_check_signature_option - else - echo - fi - # 还原软件源之后更新 - opkg update - elif [ "$1" -eq 1 ]; then - #传入1 代表设置第三方软件源 先要删掉签名 - remove_check_signature_option - # 先删除再添加以免重复 - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - echo "src/gz third_party_source $third_party_source" >>/etc/opkg/customfeeds.conf - # 设置第三方源后要更新 - opkg update - else - echo "Invalid option. Please provide 0 or 1." - fi -} - -# 添加主机名映射(解决安卓原生TV首次连不上wifi的问题) -add_dhcp_domain() { - local domain_name="time.android.com" - local domain_ip="203.107.6.88" - - # 检查是否存在相同的域名记录 - existing_records=$(uci show dhcp | grep "dhcp.@domain\[[0-9]\+\].name='$domain_name'") - if [ -z "$existing_records" ]; then - # 添加新的域名记录 - uci add dhcp domain - uci set "dhcp.@domain[-1].name=$domain_name" - uci set "dhcp.@domain[-1].ip=$domain_ip" - uci commit dhcp - else - echo - fi -} - -#添加出处信息 -add_author_info() { - uci set system.@system[0].description='wukongdaily' - uci set system.@system[0].notes='文档说明: - https://tvhelper.cpolar.cn/' - uci commit system -} - -##获取软路由型号信息 -get_router_name() { - model_info=$(cat /tmp/sysinfo/model) - echo "$model_info" -} - -get_router_hostname() { - hostname=$(uci get system.@system[0].hostname) - echo "$hostname 路由器" -} - -# 安装体积非常小的文件传输软件 默认上传位置/tmp/upload/ -do_install_filetransfer() { - mkdir -p /tmp/luci-app-filetransfer/ - cd /tmp/luci-app-filetransfer/ - wget --user-agent="Mozilla/5.0" -O luci-app-filetransfer_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-app-filetransfer_all.ipk" - wget --user-agent="Mozilla/5.0" -O luci-lib-fs_1.0-14_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-lib-fs_1.0-14_all.ipk" - opkg install *.ipk --force-depends -} -do_install_depends_ipk() { - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-lua-runtime_all.ipk" "$HTTP_HOST/theme/luci-lua-runtime_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/libopenssl3.ipk" "$HTTP_HOST/theme/libopenssl3.ipk" - opkg install "/tmp/luci-lua-runtime_all.ipk" - opkg install "/tmp/libopenssl3.ipk" -} -#单独安装argon主题 -do_install_argon_skin() { - echo "正在尝试安装argon主题......." - #下载和安装argon的依赖 - do_install_depends_ipk - # bug fix 由于2.3.1 最新版的luci-argon-theme 登录按钮没有中文匹配,而2.3版本字体不对。 - # 所以这里安装上一个版本2.2.9,考虑到主题皮肤并不需要长期更新,因此固定版本没问题 - opkg update - opkg install luci-lib-ipkg - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-theme-argon.ipk" "$HTTP_HOST/theme/luci-theme-argon-master_2.2.9.4_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-app-argon-config.ipk" "$HTTP_HOST/theme/luci-app-argon-config_0.9_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-i18n-argon-config-zh-cn.ipk" "$HTTP_HOST/theme/luci-i18n-argon-config-zh-cn.ipk" - cd /tmp/ - opkg install luci-theme-argon.ipk luci-app-argon-config.ipk luci-i18n-argon-config-zh-cn.ipk - # 检查上一个命令的返回值 - if [ $? -eq 0 ]; then - echo "argon主题 安装成功" - # 设置主题和语言 - uci set luci.main.mediaurlbase='/luci-static/argon' - uci set luci.main.lang='zh_cn' - uci commit - sed -i 's/value="<%:Login%>"/value="登录"/' /usr/lib/lua/luci/view/themes/argon/sysauth.htm - echo "重新登录web页面后, 查看新主题 " - else - echo "argon主题 安装失败! 建议再执行一次!再给我一个机会!事不过三!" - fi -} - -recovery() { - echo "⚠️ 警告:此操作将恢复出厂设置,所有配置将被清除!" - echo "⚠️ 请确保已备份必要数据。" - read -p "是否确定执行恢复出厂设置?(yes/[no]): " confirm - - if [ "$confirm" = "yes" ]; then - echo "正在执行恢复出厂设置..." - # 安静执行 firstboot,不显示其内部的提示信息 - firstboot -y >/dev/null 2>&1 - echo "操作完成,正在重启设备..." - reboot - else - echo "操作已取消。" - fi -} - -add_arch_64bit() { - if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/64bit/arch.conf; then - echo "下载 arch.conf 失败,脚本终止。" - exit 1 - fi -} - -# 防止误操作 隐藏首页无用的元素 -hide_ui_elements() { - - TARGET="/www/luci-static/quickstart/style.css" - MARKER="/* hide custom luci elements */" - - # 如果没有追加过,就添加 - if ! grep -q "$MARKER" "$TARGET"; then - cat <>"$TARGET" - -$MARKER -/* 隐藏首页格式化按钮 */ -.value-data button { - display: none !important; -} - -/* 隐藏网络页的第 3 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(3) { - display: none !important; -} - -/* 隐藏网络页的第 5 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(5) { - display: none !important; -} - -/* 隐藏 feature-card.pink */ -#main > div > div.card-container > div.feature-card.pink { - display: none !important; -} - -EOF - echo "✅ 自定义元素已隐藏" - else - echo "⚠️ 无需重复操作" - fi -} - -#自定义风扇开始工作的温度 -set_glfan_temp() { - - is_integer() { - if [[ $1 =~ ^[0-9]+$ ]]; then - return 0 # 是整数 - else - return 1 # 不是整数 - fi - } - echo "兼容带风扇机型的GL-iNet路由器" - echo "请输入风扇开始工作的温度(建议40-70之间的整数):" - read temp - - if is_integer "$temp"; then - uci set glfan.@globals[0].temperature="$temp" - uci set glfan.@globals[0].warn_temperature="$temp" - uci set glfan.@globals[0].integration=4 - uci set glfan.@globals[0].differential=20 - uci commit glfan - /etc/init.d/gl_fan restart - echo "设置成功!稍等片刻,请查看风扇转动情况" - else - echo "错误: 请输入整数." - fi -} - -toggle_adguardhome() { - status=$(uci get adguardhome.config.enabled) - - if [ "$status" -eq 1 ]; then - echo "Disabling AdGuardHome..." - uci set adguardhome.config.enabled='0' >/dev/null 2>&1 - uci commit adguardhome >/dev/null 2>&1 - /etc/init.d/adguardhome disable >/dev/null 2>&1 - /etc/init.d/adguardhome stop >/dev/null 2>&1 - green "AdGuardHome 已关闭" - else - echo "Enabling AdGuardHome..." - uci set adguardhome.config.enabled='1' >/dev/null 2>&1 - uci commit adguardhome >/dev/null 2>&1 - /etc/init.d/adguardhome enable >/dev/null 2>&1 - /etc/init.d/adguardhome start >/dev/null 2>&1 - green "AdGuardHome 已开启 访问 http://192.168.8.1:3000" - fi -} - -# 安装[官方辅助UI]插件 by 论坛 iBelieve -do_install_ui_helper() { - - echo "⚠️ 请您确保当前固件版本大于 4.7.2,若低于此版本建议先升级。" - read -p "👉 如果您已确认,请按 [回车] 继续;否则按 Ctrl+C 或输入任意内容后回车退出:" user_input - - if [ -n "$user_input" ]; then - echo "🚫 用户取消安装。" - return 1 - fi - - local ipk_file="/tmp/glinjector_3.0.5-6_all.ipk" - local sha_file="${ipk_file}.sha256" - - echo "📥 正在下载 IPK 及 SHA256 校验文件..." - wget -O "$sha_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk.sha256" || { - echo "❌ 下载 SHA256 文件失败" - return 1 - } - - wget --user-agent="Mozilla/5.0" -O "$ipk_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk" || { - echo "❌ 下载 IPK 文件失败" - return 1 - } - - echo "🔐 正在进行 SHA256 校验..." - - cd "$(dirname "$ipk_file")" - sha256sum -c "$sha_file" || { - echo "❌ 校验失败:文件已损坏或未完整下载" - rm -f "$ipk_file" - return 1 - } - - echo "✅ 校验通过,开始安装..." - - opkg update - opkg install "$ipk_file" -} - -#高级卸载 -advanced_uninstall(){ - echo "📥 正在下载 高级卸载插件..." - wget -O /tmp/advanced_uninstall.ipk $HTTP_HOST/uninstall/advanced_uninstall.ipk - opkg update - opkg install /tmp/advanced_uninstall.ipk -} +# ============================================================================ +# 主程序 +# ============================================================================ +load_common_lib while true; do - clear - gl_name=$(get_router_name) - result="GL-iNet Be3600 一键iStoreOS风格化" - echo "***********************************************************************" - echo "* 一键安装工具箱(for gl-inet be3600) by @wukongdaily 20251118 " - echo "**********************************************************************" - echo "*******支持的机型列表***************************************************" - green "*******GL-iNet BE-3600********" - green "请确保您的固件版本在4.7.2以上" - echo + clear + gl_name=$(get_router_name) + result="GL-iNet Be3600 一键iStoreOS风格化(64位)" + echo "***********************************************************************" + echo "* 一键安装工具箱(for gl-inet be3600) by @wukongdaily" + echo "**********************************************************************" + echo "*******支持的机型列表***************************************************" + green "*******GL-iNet BE-3600********" + green "请确保您的固件版本在4.7.2以上" + echo - light_magenta " 1. $result (64位)" - echo - light_magenta " 2. 安装argon紫色主题" - echo - light_magenta " 3. 单独安装iStore商店" - echo - light_magenta " 4. 隐藏首页格式化按钮" - echo - light_magenta " 6. 启用或关闭AdGuardHome广告拦截" - echo - light_magenta " 7. 安装个性化UI辅助插件(by VMatrices)" - echo - light_magenta " 8. 安装高级卸载插件" - echo - light_magenta " 9. 恢复出厂设置/重置路由器" - echo - echo " Q. 退出本程序" - echo - read -p "请选择一个选项: " choice + light_magenta " 1. $result" + echo + light_magenta " 2. 安装argon紫色主题" + echo + light_magenta " 3. 单独安装iStore商店" + echo + light_magenta " 4. 隐藏首页格式化按钮" + echo + light_magenta " 5. 设置风扇工作温度" + echo + light_magenta " 6. 启用或关闭AdGuardHome广告拦截" + echo + light_magenta " 7. 安装个性化UI辅助插件(by VMatrices)" + echo + light_magenta " 8. 安装高级卸载插件" + echo + light_magenta " 9. 恢复出厂设置/重置路由器" + echo + echo " Q. 退出本程序" + echo + read -p "请选择一个选项: " choice - case $choice in + case $choice in + 1) + install_istore_os_style + setup_base_init + do_istore + do_quickstart + ;; + 2) + do_install_argon_skin + ;; + 3) + do_istore + ;; + 4) + hide_ui_elements + ;; + 5) + set_glfan_temp + ;; + 6) + toggle_adguardhome + ;; + 7) + do_install_ui_helper + ;; + 8) + advanced_uninstall + ;; + 9) + recovery + ;; + q | Q) + echo "退出" + exit 0 + ;; + *) + echo "无效选项,请重新选择。" + ;; + esac - 1) - #安装iStore风格 - install_istore_os_style - #基础必备设置 - setup_base_init - #安装iStore商店 - do_istore - #安装首页和网络向导 - do_quickstart - ;; - 2) - do_install_argon_skin - ;; - 3) - do_istore - ;; - 4) - hide_ui_elements - ;; - 5) - set_glfan_temp - ;; - 6) - toggle_adguardhome - ;; - 7) - do_install_ui_helper - ;; - 8) - advanced_uninstall - ;; - 9) - recovery - ;; - q | Q) - echo "退出" - exit 0 - ;; - *) - echo "无效选项,请重新选择。" - ;; - esac - - read -p "按 Enter 键继续..." + read -p "按 Enter 键继续..." done \ No newline at end of file diff --git a/be6500.sh b/be6500.sh index 438efff..23dff96 100644 --- a/be6500.sh +++ b/be6500.sh @@ -1,490 +1,127 @@ #!/bin/sh -# 定义颜色输出函数 -red() { echo -e "\033[31m\033[01m$1\033[0m"; } -green() { echo -e "\033[32m\033[01m$1\033[0m"; } -yellow() { echo -e "\033[33m\033[01m$1\033[0m"; } -blue() { echo -e "\033[34m\033[01m$1\033[0m"; } -light_magenta() { echo -e "\033[95m\033[01m$1\033[0m"; } -light_yellow() { echo -e "\033[93m\033[01m$1\033[0m"; } -cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; } -third_party_source="https://istore.linkease.com/repo/all/nas_luci" +# GL-iNet BE6500 一键iStoreOS风格化脚本 +# by @wukongdaily + HTTP_HOST="https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main" -setup_base_init() { - #添加出处信息 - add_author_info - #添加安卓时间服务器 - add_dhcp_domain - ##设置时区 - uci set system.@system[0].zonename='Asia/Shanghai' - uci set system.@system[0].timezone='CST-8' - uci commit system - /etc/init.d/system reload - green "安装完毕!请使用8080端口访问luci界面:http://192.168.8.1:8080" - green "作者更多动态务必收藏:https://tvhelper.cpolar.cn/" +LIB_COMMON="/tmp/lib-common.sh" + +# 下载并加载公共库 +load_common_lib() { + if [ ! -f "$LIB_COMMON" ]; then + wget -O "$LIB_COMMON" "$HTTP_HOST/lib/lib-common.sh" 2>/dev/null || { + echo "下载公共库失败" + exit 1 + } + fi + . "$LIB_COMMON" } -## 安装应用商店和主题 +# BE6500 专用:64位架构配置 +add_arch_64bit() { + if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/64bit/arch.conf; then + echo "下载 arch.conf 失败,脚本终止。" + exit 1 + fi +} + +# 安装应用商店和主题 install_istore_os_style() { - ##设置Argon 紫色主题 - do_install_argon_skin - #增加终端 - opkg install luci-i18n-ttyd-zh-cn - #默认安装必备工具SFTP 方便下载文件 比如finalshell等工具可以直接浏览路由器文件 - opkg install openssh-sftp-server - #默认使用体积很小的文件传输:系统——文件传输 - do_install_filetransfer - FILE_PATH="/etc/openwrt_release" - NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" - CONTENT=$(cat $FILE_PATH) - UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") - echo "$UPDATED_CONTENT" >$FILE_PATH -} -# 安装iStore -do_istore() { - echo "do_istore 64bit ==================>" - opkg update - # 定义目标 URL 和本地目录 - URL="https://repo.istoreos.com/repo/all/store/" - DIR="/tmp/ipk_store" - - # 创建目录 - mkdir -p "$DIR" - cd "$DIR" || exit 1 - - for ipk in $(wget -qO- "$URL" | grep -oE 'href="[^"]+\.ipk"' | cut -d'"' -f2); do - echo "下载 $ipk" - wget -q "${URL}${ipk}" - done - - # 安装所有下载的 .ipk 包 - opkg install ./*.ipk - - #调整a53架构优先级 - add_arch_64bit - + do_install_argon_skin + opkg install luci-i18n-ttyd-zh-cn + opkg install openssh-sftp-server + do_install_filetransfer + FILE_PATH="/etc/openwrt_release" + NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" + CONTENT=$(cat $FILE_PATH) + UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") + echo "$UPDATED_CONTENT" >$FILE_PATH } # 首页和网络向导 do_quickstart() { - download_lib_quickstart - download_luci_quickstart - opkg install /tmp/ipk_downloads/*.ipk - do_install_new_quickstart + download_lib_quickstart + download_luci_quickstart + opkg install /tmp/ipk_downloads/*.ipk + do_install_new_quickstart } -download_luci_quickstart() { - # 目标目录 - REPO_URL="https://repo.istoreos.com/repo/all/nas_luci/" - DOWNLOAD_DIR="/tmp/ipk_downloads" - - # 创建下载目录 - mkdir -p "$DOWNLOAD_DIR" - - # 获取目录索引并筛选 quickstart ipk 链接 - wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | - sed 's/href="//;s/"//' | while read -r FILE; do - echo "📦 正在下载: $FILE" - wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" - done - - echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" -} - -download_lib_quickstart() { - # 目标目录 - REPO_URL="https://repo.istoreos.com/repo/aarch64_cortex-a53/nas/" - DOWNLOAD_DIR="/tmp/ipk_downloads" - - # 创建下载目录 - mkdir -p "$DOWNLOAD_DIR" - - # 获取目录索引并筛选 quickstart ipk 链接 - wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | - sed 's/href="//;s/"//' | while read -r FILE; do - echo "📦 正在下载: $FILE" - wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" - done - - echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" -} - -# 判断系统是否为iStoreOS -is_iStoreOS() { - DISTRIB_ID=$(cat /etc/openwrt_release | grep "DISTRIB_ID" | cut -d "'" -f 2) - # 检查DISTRIB_ID的值是否等于'iStoreOS' - if [ "$DISTRIB_ID" = "iStoreOS" ]; then - return 0 # true - else - return 1 # false - fi -} - -## 去除opkg签名 -remove_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - sed -i '/option check_signature/d' "$opkg_conf" -} - -## 添加opkg签名 -add_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - echo "option check_signature 1" >>"$opkg_conf" -} - -#设置第三方软件源 -setup_software_source() { - ## 传入0和1 分别代表原始和第三方软件源 - if [ "$1" -eq 0 ]; then - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - ##如果是iStoreOS系统,还原软件源之后,要添加签名 - if is_iStoreOS; then - add_check_signature_option - else - echo - fi - # 还原软件源之后更新 - opkg update - elif [ "$1" -eq 1 ]; then - #传入1 代表设置第三方软件源 先要删掉签名 - remove_check_signature_option - # 先删除再添加以免重复 - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - echo "src/gz third_party_source $third_party_source" >>/etc/opkg/customfeeds.conf - # 设置第三方源后要更新 - opkg update - else - echo "Invalid option. Please provide 0 or 1." - fi -} - -# 添加主机名映射(解决安卓原生TV首次连不上wifi的问题) -add_dhcp_domain() { - local domain_name="time.android.com" - local domain_ip="203.107.6.88" - - # 检查是否存在相同的域名记录 - existing_records=$(uci show dhcp | grep "dhcp.@domain\[[0-9]\+\].name='$domain_name'") - if [ -z "$existing_records" ]; then - # 添加新的域名记录 - uci add dhcp domain - uci set "dhcp.@domain[-1].name=$domain_name" - uci set "dhcp.@domain[-1].ip=$domain_ip" - uci commit dhcp - else - echo - fi -} - -#添加出处信息 -add_author_info() { - uci set system.@system[0].description='wukongdaily' - uci set system.@system[0].notes='文档说明: - https://tvhelper.cpolar.cn/' - uci commit system -} - -##获取软路由型号信息 -get_router_name() { - model_info=$(cat /tmp/sysinfo/model) - echo "$model_info" -} - -get_router_hostname() { - hostname=$(uci get system.@system[0].hostname) - echo "$hostname 路由器" -} - -# 安装体积非常小的文件传输软件 默认上传位置/tmp/upload/ -do_install_filetransfer() { - mkdir -p /tmp/luci-app-filetransfer/ - cd /tmp/luci-app-filetransfer/ - wget --user-agent="Mozilla/5.0" -O luci-app-filetransfer_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-app-filetransfer_all.ipk" - wget --user-agent="Mozilla/5.0" -O luci-lib-fs_1.0-14_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-lib-fs_1.0-14_all.ipk" - opkg install *.ipk --force-depends -} -do_install_depends_ipk() { - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-lua-runtime_all.ipk" "$HTTP_HOST/theme/luci-lua-runtime_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/libopenssl3.ipk" "$HTTP_HOST/theme/libopenssl3.ipk" - opkg install "/tmp/luci-lua-runtime_all.ipk" - opkg install "/tmp/libopenssl3.ipk" -} -#单独安装argon主题 -do_install_argon_skin() { - echo "正在尝试安装argon主题......." - #下载和安装argon的依赖 - do_install_depends_ipk - # bug fix 由于2.3.1 最新版的luci-argon-theme 登录按钮没有中文匹配,而2.3版本字体不对。 - # 所以这里安装上一个版本2.2.9,考虑到主题皮肤并不需要长期更新,因此固定版本没问题 - opkg update - opkg install luci-lib-ipkg - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-theme-argon.ipk" "$HTTP_HOST/theme/luci-theme-argon-master_2.2.9.4_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-app-argon-config.ipk" "$HTTP_HOST/theme/luci-app-argon-config_0.9_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-i18n-argon-config-zh-cn.ipk" "$HTTP_HOST/theme/luci-i18n-argon-config-zh-cn.ipk" - cd /tmp/ - opkg install luci-theme-argon.ipk luci-app-argon-config.ipk luci-i18n-argon-config-zh-cn.ipk - # 检查上一个命令的返回值 - if [ $? -eq 0 ]; then - echo "argon主题 安装成功" - # 设置主题和语言 - uci set luci.main.mediaurlbase='/luci-static/argon' - uci set luci.main.lang='zh_cn' - uci commit - sed -i 's/value="<%:Login%>"/value="登录"/' /usr/lib/lua/luci/view/themes/argon/sysauth.htm - echo "重新登录web页面后, 查看新主题 " - else - echo "argon主题 安装失败! 建议再执行一次!再给我一个机会!事不过三!" - fi -} - -recovery() { - echo "⚠️ 警告:此操作将恢复出厂设置,所有配置将被清除!" - echo "⚠️ 请确保已备份必要数据。" - read -p "是否确定执行恢复出厂设置?(yes/[no]): " confirm - - if [ "$confirm" = "yes" ]; then - echo "正在执行恢复出厂设置..." - # 安静执行 firstboot,不显示其内部的提示信息 - firstboot -y >/dev/null 2>&1 - echo "操作完成,正在重启设备..." - reboot - else - echo "操作已取消。" - fi -} - -add_arch_64bit() { - if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/64bit/arch.conf; then - echo "下载 arch.conf 失败,脚本终止。" - exit 1 - fi -} - -# 防止误操作 隐藏首页无用的元素 -hide_ui_elements() { - - TARGET="/www/luci-static/quickstart/style.css" - MARKER="/* hide custom luci elements */" - - # 如果没有追加过,就添加 - if ! grep -q "$MARKER" "$TARGET"; then - cat <>"$TARGET" - -$MARKER -/* 隐藏首页格式化按钮 */ -.value-data button { - display: none !important; -} - -/* 隐藏网络页的第 3 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(3) { - display: none !important; -} - -/* 隐藏网络页的第 5 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(5) { - display: none !important; -} - -/* 隐藏 feature-card.pink */ -#main > div > div.card-container > div.feature-card.pink { - display: none !important; -} - -EOF - echo "✅ 自定义元素已隐藏" - else - echo "⚠️ 无需重复操作" - fi -} - -#自定义风扇开始工作的温度 -set_glfan_temp() { - - is_integer() { - if [[ $1 =~ ^[0-9]+$ ]]; then - return 0 # 是整数 - else - return 1 # 不是整数 - fi - } - echo "兼容带风扇机型的GL-iNet路由器" - echo "请输入风扇开始工作的温度(建议40-70之间的整数):" - read temp - - if is_integer "$temp"; then - uci set glfan.@globals[0].temperature="$temp" - uci set glfan.@globals[0].warn_temperature="$temp" - uci set glfan.@globals[0].integration=4 - uci set glfan.@globals[0].differential=20 - uci commit glfan - /etc/init.d/gl_fan restart - echo "设置成功!稍等片刻,请查看风扇转动情况" - else - echo "错误: 请输入整数." - fi -} - -toggle_adguardhome() { - status=$(uci get adguardhome.config.enabled) - - if [ "$status" -eq 1 ]; then - echo "Disabling AdGuardHome..." - uci set adguardhome.config.enabled='0' >/dev/null 2>&1 - uci commit adguardhome >/dev/null 2>&1 - /etc/init.d/adguardhome disable >/dev/null 2>&1 - /etc/init.d/adguardhome stop >/dev/null 2>&1 - green "AdGuardHome 已关闭" - else - echo "Enabling AdGuardHome..." - uci set adguardhome.config.enabled='1' >/dev/null 2>&1 - uci commit adguardhome >/dev/null 2>&1 - /etc/init.d/adguardhome enable >/dev/null 2>&1 - /etc/init.d/adguardhome start >/dev/null 2>&1 - green "AdGuardHome 已开启 访问 http://192.168.8.1:3000" - fi -} - -# 安装[官方辅助UI]插件 by 论坛 iBelieve -do_install_ui_helper() { - - echo "⚠️ 请您确保当前固件版本大于 4.7.2,若低于此版本建议先升级。" - read -p "👉 如果您已确认,请按 [回车] 继续;否则按 Ctrl+C 或输入任意内容后回车退出:" user_input - - if [ -n "$user_input" ]; then - echo "🚫 用户取消安装。" - return 1 - fi - - local ipk_file="/tmp/glinjector_3.0.5-6_all.ipk" - local sha_file="${ipk_file}.sha256" - - echo "📥 正在下载 IPK 及 SHA256 校验文件..." - wget -O "$sha_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk.sha256" || { - echo "❌ 下载 SHA256 文件失败" - return 1 - } - - wget --user-agent="Mozilla/5.0" -O "$ipk_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk" || { - echo "❌ 下载 IPK 文件失败" - return 1 - } - - echo "🔐 正在进行 SHA256 校验..." - - cd "$(dirname "$ipk_file")" - sha256sum -c "$sha_file" || { - echo "❌ 校验失败:文件已损坏或未完整下载" - rm -f "$ipk_file" - return 1 - } - - echo "✅ 校验通过,开始安装..." - - opkg update - opkg install "$ipk_file" -} -#高级卸载 -advanced_uninstall(){ - echo "📥 正在下载 高级卸载插件..." - wget -O /tmp/advanced_uninstall.ipk $HTTP_HOST/uninstall/advanced_uninstall.ipk - opkg update - opkg install /tmp/advanced_uninstall.ipk -} - -# 安装新首页风格 -do_install_new_quickstart(){ - green "正在更新到最新版iStoreOS首页风格 " - TMPATH=/tmp/qstart - mkdir -p ${TMPATH} - app_aarch64='quickstart_0.11.13-r1_aarch64_generic.ipk' - app_ui='luci-app-quickstart_0.12.4-r1_all.ipk' - app_lng='luci-i18n-quickstart-zh-cn_25.090.31208-f5bf244_all.ipk' - wget $HTTP_HOST/newquickstart/$app_aarch64 -O ${TMPATH}/$app_aarch64 - wget $HTTP_HOST/newquickstart/$app_ui -O ${TMPATH}/$app_ui - wget $HTTP_HOST/newquickstart/$app_lng -O ${TMPATH}/$app_lng - opkg install ${TMPATH}/*.ipk - rm -rf ${TMPATH} - hide_ui_elements - green "首页风格安装完毕!请使用8080端口访问luci界面:http://192.168.8.1:8080" - green "作者更多动态务必收藏:https://tvhelper.cpolar.cn/" -} +# ============================================================================ +# 主程序 +# ============================================================================ +load_common_lib while true; do - clear - gl_name=$(get_router_name) - result="GL-iNet Be6500 一键iStoreOS风格化(新版)" - echo "***********************************************************************" - echo "* 一键安装工具箱(for gl-inet be6500) by @wukongdaily " - echo "**********************************************************************" - echo "*******支持的机型列表***************************************************" - green "*******GL-iNet BE-6500********" - green "请确保您的固件版本在4.7.2以上" - echo + clear + gl_name=$(get_router_name) + result="GL-iNet Be6500 一键iStoreOS风格化(新版)" + echo "***********************************************************************" + echo "* 一键安装工具箱(for gl-inet be6500) by @wukongdaily" + echo "**********************************************************************" + echo "*******支持的机型列表***************************************************" + green "*******GL-iNet BE-6500********" + green "请确保您的固件版本在4.7.2以上" + echo - light_magenta " 1. $result" - echo - light_magenta " 2. 安装argon紫色主题" - echo - light_magenta " 3. 单独安装iStore商店" - echo - light_magenta " 4. 隐藏首页无用元素" - echo - light_magenta " 6. 安装个性化UI辅助插件(by VMatrices)" - echo - light_magenta " 7. 安装高级卸载插件" - echo - light_magenta " 8. 安装新首页" - echo - light_magenta " 9. 恢复出厂设置" - echo - echo " Q. 退出本程序" - echo - read -p "请选择一个选项: " choice + light_magenta " 1. $result" + echo + light_magenta " 2. 安装argon紫色主题" + echo + light_magenta " 3. 单独安装iStore商店" + echo + light_magenta " 4. 隐藏首页无用元素" + echo + light_magenta " 5. 设置风扇工作温度" + echo + light_magenta " 6. 安装个性化UI辅助插件(by VMatrices)" + echo + light_magenta " 7. 安装高级卸载插件" + echo + light_magenta " 8. 安装新首页" + echo + light_magenta " 9. 恢复出厂设置" + echo + echo " Q. 退出本程序" + echo + read -p "请选择一个选项: " choice - case $choice in + case $choice in + 1) + install_istore_os_style + setup_base_init + do_istore + ;; + 2) + do_install_argon_skin + ;; + 3) + do_istore + ;; + 4) + hide_ui_elements + ;; + 5) + set_glfan_temp + ;; + 6) + do_install_ui_helper + ;; + 7) + advanced_uninstall + ;; + 8) + do_install_new_quickstart + ;; + 9) + recovery + ;; + q | Q) + echo "退出" + exit 0 + ;; + *) + echo "无效选项,请重新选择。" + ;; + esac - 1) - #安装iStore风格 - install_istore_os_style - #基础必备设置 - setup_base_init - #安装iStore商店 - do_istore - #安装首页和网络向导 不适合6500和9300 因为mdadm组件不兼容 - #do_quickstart - ;; - 2) - do_install_argon_skin - ;; - 3) - do_istore - ;; - 4) - hide_ui_elements - ;; - 5) - set_glfan_temp - ;; - 6) - do_install_ui_helper - ;; - 7) - advanced_uninstall - ;; - 8) - do_install_new_quickstart - ;; - 9) - recovery - ;; - q | Q) - echo "退出" - exit 0 - ;; - *) - echo "无效选项,请重新选择。" - ;; - esac - - read -p "按 Enter 键继续..." + read -p "按 Enter 键继续..." done \ No newline at end of file diff --git a/docker/do_docker.sh b/docker/do_docker.sh deleted file mode 100644 index 42e083c..0000000 --- a/docker/do_docker.sh +++ /dev/null @@ -1,220 +0,0 @@ -#!/bin/sh - -# 定义颜色输出函数 -red() { echo -e "\033[31m\033[01m[WARNING] $1\033[0m"; } -green() { echo -e "\033[32m\033[01m[INFO] $1\033[0m"; } -yellow() { echo -e "\033[33m\033[01m[NOTICE] $1\033[0m"; } -blue() { echo -e "\033[34m\033[01m[MESSAGE] $1\033[0m"; } -light_magenta() { echo -e "\033[95m\033[01m[NOTICE] $1\033[0m"; } -light_yellow() { echo -e "\033[93m\033[01m[NOTICE] $1\033[0m"; } - - -# 获取路由器型号信息 -get_router_name() { - cat /tmp/sysinfo/model -} - -# 安装依赖应用 -install_depends_apps() { - blue "正在安装部署环境的所需要的工具 lsblk 和 fdisk ..." - router_name=$(get_router_name) - case "$router_name" in - *2500* | *3000*) - opkg update >/dev/null 2>&1 - if opkg install lsblk fdisk >/dev/null 2>&1; then - green "$router_name 的 lsblk fdisk 工具 安装成功。" - else - red "安装失败。" - exit 1 - fi - ;; - *6000*) - red "由于 mt6000 的软件源中没有找到 lsblk 和 fdisk ..." - yellow "因此先借用 mt3000 的软件源来安装 lsblk 和 fdisk 工具" - # 备份 /etc/opkg/distfeeds.conf - cp /etc/opkg/distfeeds.conf /etc/opkg/distfeeds.conf.backup - # 先替换为 mt3000 的软件源来安装 lsblk 和 fdisk 工具 - mt3000_opkg="https://cafe.cpolar.top/wkdaily/gl-inet-onescript/raw/branch/master/mt-3000/distfeeds.conf" - wget -O /etc/opkg/distfeeds.conf ${mt3000_opkg} - green "正在更新为 mt3000 的软件源" - cat /etc/opkg/distfeeds.conf - opkg update - green "再次尝试安装 lsblk 和 fdisk 工具" - if opkg install fdisk lsblk; then - green "$router_name 的 lsblk fdisk 工具 安装成功。" - # 还原软件源 - cp /etc/opkg/distfeeds.conf.backup /etc/opkg/distfeeds.conf - else - red "安装失败。" - # 还原软件源 - cp /etc/opkg/distfeeds.conf.backup /etc/opkg/distfeeds.conf - exit 1 - fi - ;; - *) - echo "Router name does not contain '3000', '6000', or '2500'." - ;; - esac -} - -# 准备USB设备 -prepare_usb_device() { - green "现在开始查找USB设备分区,请稍后......" - local usb_disk=$(lsblk -dn -o NAME,RM,TYPE | awk '$2=="1" && $3=="disk" {print "/dev/"$1; exit}') - if [ -z "$usb_disk" ]; then - red "未找到USB磁盘。" - exit 1 - fi - yellow "找到USB磁盘:$usb_disk" - - # 清零磁盘开始部分以清除分区表和文件系统签名 - dd if=/dev/zero of=$usb_disk bs=1M count=10 - sync - - # 卸载所有与该磁盘相关的挂载点 - unmount_usb_device "$usb_disk" - - red "正在重新分区并格式化$usb_disk..." - create_and_format_partition "$usb_disk" -} - -# 卸载USB设备 -unmount_usb_device() { - for mount in $(mount | grep "$1" | awk '{print $3}'); do - yellow "正在尝试卸载U盘挂载点:$mount" - umount $mount || { - red "警告:无法卸载挂载点 $mount。可能有文件正在被访问或权限不足。" - exit 1 - } - green "U盘挂载点 $mount 卸载成功。" - done -} - -# 创建并格式化分区 -create_and_format_partition() { - { - echo o # 创建一个新的空DOS分区表 - echo n # 添加一个新分区 - echo p # 主分区 - echo 1 # 分区号1 - echo # 第一个可用扇区(默认) - echo # 最后一个扇区(默认,使用剩余空间) - echo w # 写入并退出 - } | fdisk $1 >/dev/null 2>&1 - - sleep 5 - - local new_partition="${1}1" - red "正在将U盘 $new_partition 格式化为EXT4文件系统..." - mkfs.ext4 -F $new_partition >/dev/null 2>&1 - green "$new_partition 已成功格式化为EXT4文件系统。" - configure_and_start_docker $new_partition -} - -# 配置并启动Docker -configure_and_start_docker() { - local new_partition="$1" - local usb_mount_point="/mnt/upan_data" - local docker_root="$usb_mount_point/docker" - - mkdir -p $docker_root - green "将U盘 挂载到 $usb_mount_point..." - mount -t ext4 $new_partition $usb_mount_point - if [ $? -ne 0 ]; then - red "挂载失败,脚本退出。" - exit 1 - fi - green "U盘挂载成功啦\n" - - green "正在创建 Docker 配置文件 /etc/docker/daemon.json" - mkdir -p /etc/docker - echo '{ - "bridge": "docker0", - "storage-driver": "overlay2", - "data-root": "'$docker_root'" - }' >/etc/docker/daemon.json - - install_docker - configure_docker_to_start_on_boot "$new_partition" "$usb_mount_point" - -} - -# 安装 Docker 和 dockerd -install_docker() { - green "正在更新 OPKG 软件包..." - opkg update >/dev/null 2>&1 - green "正在安装 Docker 及相关服务...请耐心等待一会...大约需要1分钟\n" - opkg install luci-app-dockerman >/dev/null 2>&1 - opkg install luci-i18n-dockerman-zh-cn >/dev/null 2>&1 - opkg install dockerd --force-depends >/dev/null 2>&1 - # 修改 /etc/config/dockerd 文件中的 data_root 配置 - sed -i "/option data_root/c\ option data_root '/mnt/upan_data/docker/'" /etc/config/dockerd -} - -# 配置 Docker 开机启动 -configure_docker_to_start_on_boot() { - local new_partition="$1" - local usb_mount_point="$2" - # 创建并配置启动脚本 - green "正在设置 Docker 跟随系统启动的文件:/etc/init.d/docker" - cat </etc/init.d/docker -#!/bin/sh /etc/rc.common - -START=99 -USE_PROCD=1 -PROG="/usr/bin/dockerd" - -start_service() { - procd_open_instance - procd_set_param command \$PROG --config-file /etc/docker/daemon.json - procd_set_param stdout 1 - procd_set_param stderr 1 - procd_close_instance -} - -stop_service() { - killall dockerd -} - -restart() { - stop - start -} -EOF - - chmod +x /etc/init.d/docker - /etc/init.d/docker enable - - green "正在设置开机启动顺序的配置\n\n先挂载U盘,再启动Docker 修改/etc/rc.local后如下\n" - # 首先,备份 /etc/rc.local - cp /etc/rc.local /etc/rc.local.backup - # glinet系统重启后的 USB自动挂载点 - SYSTEM_USB_AUTO_MOUNTPOINT="/tmp/mountd/disk1_part1" - # 卸载USB自动挂载点 挂载自定义挂载点 /mnt/upan_data - if ! grep -q "umount $SYSTEM_USB_AUTO_MOUNTPOINT" /etc/rc.local; then - sed -i '/exit 0/d' /etc/rc.local - - # 将新的命令添加到 /etc/rc.local,然后再加上 exit 0 - { - echo "umount $SYSTEM_USB_AUTO_MOUNTPOINT || true" - echo "mount $new_partition $usb_mount_point || true" - echo "/etc/init.d/docker start || true" - echo "exit 0" - } >>/etc/rc.local - fi - - cat /etc/rc.local - green "Docker 运行环境部署完成 重启后生效\n" - red "是否立即重启?(y/n)" - read -r answer - if [ "$answer" = "y" ] || [ -z "$answer" ]; then - red "正在重启..." - reboot - else - yellow "您选择了不重启" - fi -} - -# START -install_depends_apps -prepare_usb_device diff --git a/gl-inet-op24.sh b/gl-inet-op24.sh index e9da963..f9631ba 100644 --- a/gl-inet-op24.sh +++ b/gl-inet-op24.sh @@ -1,644 +1,183 @@ #!/bin/sh -# 定义颜色输出函数 -red() { echo -e "\033[31m\033[01m$1\033[0m"; } -green() { echo -e "\033[32m\033[01m$1\033[0m"; } -yellow() { echo -e "\033[33m\033[01m$1\033[0m"; } -blue() { echo -e "\033[34m\033[01m$1\033[0m"; } -light_magenta() { echo -e "\033[95m\033[01m$1\033[0m"; } -light_yellow() { echo -e "\033[93m\033[01m$1\033[0m"; } -cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; } -third_party_source="https://istore.linkease.com/repo/all/nas_luci" +# GL-iNet MT-3000/MT-6000 OP24固件专用脚本 +# by @wukongdaily + HTTP_HOST="https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main" +LIB_COMMON="/tmp/lib-common.sh" + # 设置全局命令 g cp -f "$0" /usr/bin/g chmod +x /usr/bin/g - -setup_base_init() { - - #添加出处信息 - add_author_info - #添加安卓时间服务器 - add_dhcp_domain - ##设置时区 - uci set system.@system[0].zonename='Asia/Shanghai' - uci set system.@system[0].timezone='CST-8' - uci commit system - /etc/init.d/system reload - - ## 设置防火墙wan 打开,方便主路由访问 - uci set firewall.@zone[1].input='ACCEPT' - uci commit firewall - +# 下载并加载公共库 +load_common_lib() { + if [ ! -f "$LIB_COMMON" ]; then + wget -O "$LIB_COMMON" "$HTTP_HOST/lib/lib-common.sh" 2>/dev/null || { + echo "下载公共库失败" + exit 1 + } + fi + . "$LIB_COMMON" } -# 调整架构 兼容aarch64_generic +# MT系列专用:架构配置 add_arch() { - if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/mtarch/arch.conf; then - echo "下载 arch.conf 失败,脚本终止。" - exit 1 - fi -} - -# 切换到阿里云软件源 适用于MT3000 OP24固件 -change_opkg_source() { - if [[ "$gl_name" == *3000* ]]; then - if ! wget -O /etc/opkg/distfeeds.conf $HTTP_HOST/mt-3000/distfeeds-24.conf; then - echo "换源失败,脚本终止。" - exit 1 - fi - fi -} - -## 安装应用商店和主题 -install_istore_os_style() { - ##设置Argon 紫色主题 - do_install_argon_skin - #增加首页终端图标 - opkg install ttyd - #默认使用体积很小的文件传输:系统——文件传输 - do_install_filetransfer - #默认安装必备工具SFTP 方便下载文件 比如finalshell等工具可以直接浏览路由器文件 - is-opkg install app-meta-sftp - is-opkg install 'app-meta-ddnsto' - # 安装磁盘管理 - is-opkg install 'app-meta-diskman' - FILE_PATH="/etc/openwrt_release" - NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" - CONTENT=$(cat $FILE_PATH) - UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") - echo "$UPDATED_CONTENT" >$FILE_PATH - -} -# 安装iStore 参考 https://github.com/linkease/istore -do_istore() { - echo "do_istore method==================>" - ISTORE_REPO=https://istore.linkease.com/repo/all/store - FCURL="curl --fail --show-error" - - curl -V >/dev/null 2>&1 || { - echo "prereq: install curl" - opkg info curl | grep -Fqm1 curl || opkg update - opkg install curl - } - - IPK=$($FCURL "$ISTORE_REPO/Packages.gz" | zcat | grep -m1 '^Filename: luci-app-store.*\.ipk$' | sed -n -e 's/^Filename: \(.\+\)$/\1/p') - - [ -n "$IPK" ] || exit 1 - - $FCURL "$ISTORE_REPO/$IPK" | tar -xzO ./data.tar.gz | tar -xzO ./bin/is-opkg >/tmp/is-opkg - - [ -s "/tmp/is-opkg" ] || exit 1 - - chmod 755 /tmp/is-opkg - /tmp/is-opkg update - # /tmp/is-opkg install taskd - /tmp/is-opkg opkg install --force-reinstall luci-lib-taskd luci-lib-xterm - /tmp/is-opkg opkg install --force-reinstall luci-app-store || exit $? - [ -s "/etc/init.d/tasks" ] || /tmp/is-opkg opkg install --force-reinstall taskd - [ -s "/usr/lib/lua/luci/cbi.lua" ] || /tmp/is-opkg opkg install luci-compat >/dev/null 2>&1 - -} - -#设置风扇工作温度 -setup_cpu_fans() { - #设定温度阀值,cpu高于48度,则风扇开始工作 - uci set glfan.@globals[0].temperature=50 - uci set glfan.@globals[0].warn_temperature=50 - uci set glfan.@globals[0].integration=4 - uci set glfan.@globals[0].differential=20 - uci commit glfan - /etc/init.d/gl_fan restart -} - -# 判断系统是否为iStoreOS -is_iStoreOS() { - DISTRIB_ID=$(cat /etc/openwrt_release | grep "DISTRIB_ID" | cut -d "'" -f 2) - # 检查DISTRIB_ID的值是否等于'iStoreOS' - if [ "$DISTRIB_ID" = "iStoreOS" ]; then - return 0 # true - else - return 1 # false - fi -} - -## 去除opkg签名 -remove_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - sed -i '/option check_signature/d' "$opkg_conf" -} - -## 添加opkg签名 -add_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - echo "option check_signature 1" >>"$opkg_conf" -} - -#设置第三方软件源 -setup_software_source() { - ## 传入0和1 分别代表原始和第三方软件源 - if [ "$1" -eq 0 ]; then - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - ##如果是iStoreOS系统,还原软件源之后,要添加签名 - if is_iStoreOS; then - add_check_signature_option - else - echo - fi - # 还原软件源之后更新 - opkg update - elif [ "$1" -eq 1 ]; then - #传入1 代表设置第三方软件源 先要删掉签名 - remove_check_signature_option - # 先删除再添加以免重复 - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - echo "src/gz third_party_source $third_party_source" >>/etc/opkg/customfeeds.conf - # 设置第三方源后要更新 - opkg update - else - echo "Invalid option. Please provide 0 or 1." - fi -} - -# 添加主机名映射(解决安卓原生TV首次连不上wifi的问题) -add_dhcp_domain() { - local domain_name="time.android.com" - local domain_ip="203.107.6.88" - - # 检查是否存在相同的域名记录 - existing_records=$(uci show dhcp | grep "dhcp.@domain\[[0-9]\+\].name='$domain_name'") - if [ -z "$existing_records" ]; then - # 添加新的域名记录 - uci add dhcp domain - uci set "dhcp.@domain[-1].name=$domain_name" - uci set "dhcp.@domain[-1].ip=$domain_ip" - uci commit dhcp - else - echo - fi -} - -#添加出处信息 -add_author_info() { - uci set system.@system[0].description='wukongdaily' - uci set system.@system[0].notes='文档说明: - https://tvhelper.cpolar.cn/' - uci commit system -} - -##获取软路由型号信息 -get_router_name() { - model_info=$(cat /tmp/sysinfo/model) - echo "$model_info" -} - -get_router_hostname() { - hostname=$(uci get system.@system[0].hostname) - echo "$hostname 路由器" -} - -add_custom_feed() { - # 先清空配置 - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - # Prompt the user to enter the feed URL - echo "请输入自定义软件源的地址(通常是https开头 aarch64_cortex-a53 结尾):" - read feed_url - if [ -n "$feed_url" ]; then - echo "src/gz custom_feed $feed_url" >>/etc/opkg/customfeeds.conf - opkg update - if [ $? -eq 0 ]; then - echo "已添加并更新列表." - else - echo "已添加但更新失败,请检查网络或重试." - fi - else - echo "Error: Feed URL not provided. No changes were made." - fi -} - -remove_custom_feed() { - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - opkg update - if [ $? -eq 0 ]; then - echo "已删除并更新列表." - else - echo "已删除了自定义软件源但更新失败,请检查网络或重试." - fi -} - -# 检查是否安装了 whiptail -check_whiptail_installed() { - if [ -e /usr/bin/whiptail ]; then - return 0 - else - return 1 - fi -} - - -# 执行重启操作 -do_reboot() { - reboot -} - -#自定义风扇开始工作的温度 -set_glfan_temp() { - - is_integer() { - if [[ $1 =~ ^[0-9]+$ ]]; then - return 0 # 是整数 - else - return 1 # 不是整数 - fi - } - echo "兼容带风扇机型的GL-iNet路由器" - echo "请输入风扇开始工作的温度(建议40-70之间的整数):" - read temp - - if is_integer "$temp"; then - uci set glfan.@globals[0].temperature="$temp" - uci set glfan.@globals[0].warn_temperature="$temp" - uci set glfan.@globals[0].integration=4 - uci set glfan.@globals[0].differential=20 - uci commit glfan - /etc/init.d/gl_fan restart - echo "设置成功!稍等片刻,请查看风扇转动情况" - else - echo "错误: 请输入整数." - fi -} - -recovery_opkg_settings() { - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - mt3000_opkg="$HTTP_HOST/mt-3000/distfeeds-24.conf" - wget -O /etc/opkg/distfeeds.conf ${mt3000_opkg} -} - -update_opkg_config() { - kernel_version=$(uname -r) - echo "MT-6000 kernel version: $kernel_version" - case $kernel_version in - 5.4*) - mt6000_opkg="$HTTP_HOST/mt-6000/distfeeds-5.4.conf" - wget -O /etc/opkg/distfeeds.conf ${mt6000_opkg} - # 更换5.4.238 内核之后 缺少的依赖 - - mkdir -p /tmp/mt6000 - wget --user-agent="Mozilla/5.0" -O /tmp/mt6000/script-utils.ipk "$HTTP_HOST/mt-6000/script-utils.ipk" - wget --user-agent="Mozilla/5.0" -O /tmp/mt6000/mdadm.ipk "$HTTP_HOST/mt-6000/mdadm.ipk" - wget --user-agent="Mozilla/5.0" -O /tmp/mt6000/lsblk.ipk "$HTTP_HOST/mt-6000/lsblk.ipk" - opkg update - if [ -f "/tmp/mt6000/lsblk.ipk" ]; then - # 先卸载之前安装过的lsblk,确保使用的是正确的lsblk - opkg remove lsblk - fi - opkg install /tmp/mt6000/*.ipk - ;; - 5.15*) - mt6000_opkg="$HTTP_HOST/mt-6000/distfeeds.conf" - wget -O /etc/opkg/distfeeds.conf ${mt6000_opkg} - ;; - *) - echo "Unsupported kernel version: $kernel_version" - return 1 - ;; - esac -} - -do_luci_app_wireguard() { - setup_software_source 0 - opkg install luci-app-wireguard - opkg install luci-i18n-wireguard-zh-cn - echo "请访问 http://"$(uci get network.lan.ipaddr)"/cgi-bin/luci/admin/status/wireguard 查看状态 " - echo "也可以去接口中 查看是否增加了新的wireguard 协议的选项 " -} -update_luci_app_quickstart() { - if [ -f "/bin/is-opkg" ]; then - # 如果 /bin/is-opkg 存在,则执行 is-opkg update - is-opkg update - is-opkg install luci-i18n-quickstart-zh-cn --force-depends >/dev/null 2>&1 - opkg install iptables-mod-tproxy - opkg install iptables-mod-socket - opkg install iptables-mod-iprange - green "正在更新到最新版iStoreOS首页风格 " - TMPATH=/tmp/qstart - mkdir -p ${TMPATH} - app_aarch64='quickstart_0.11.13-r1_aarch64_generic.ipk' - app_ui='luci-app-quickstart_0.12.4-r1_all.ipk' - app_lng='luci-i18n-quickstart-zh-cn_25.090.31208-f5bf244_all.ipk' - wget $HTTP_HOST/newquickstart/$app_aarch64 -O ${TMPATH}/$app_aarch64 - wget $HTTP_HOST/newquickstart/$app_ui -O ${TMPATH}/$app_ui - wget $HTTP_HOST/newquickstart/$app_lng -O ${TMPATH}/$app_lng - opkg install ${TMPATH}/*.ipk - rm -rf ${TMPATH} - hide_ui_elements - yellow "恭喜您!现在你的路由器已经变成iStoreOS风格啦!" - green "现在您可以访问8080端口 查看是否生效 http://192.168.8.1:8080" - green "更多up主项目和动态 请务必收藏我的导航站 https://tvhelper.cpolar.cn " - green "赞助本项目作者 https://wkdaily.cpolar.cn/01 " - addr_hostname=$(uci get system.@system[0].hostname) - else - red "请先执行第一项 一键iStoreOS风格化" - fi -} - -# 安装体积非常小的文件传输软件 默认上传位置/tmp/upload/ -do_install_filetransfer() { - mkdir -p /tmp/luci-app-filetransfer/ - cd /tmp/luci-app-filetransfer/ - wget --user-agent="Mozilla/5.0" -O luci-app-filetransfer_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-app-filetransfer_all.ipk" - wget --user-agent="Mozilla/5.0" -O luci-lib-fs_1.0-14_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-lib-fs_1.0-14_all.ipk" - opkg install *.ipk --force-depends -} -do_install_depends_ipk() { - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-lua-runtime_all.ipk" "$HTTP_HOST/theme/luci-lua-runtime_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/libopenssl3.ipk" "$HTTP_HOST/theme/libopenssl3.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-compat.ipk" "$HTTP_HOST/theme/luci-compat.ipk" - opkg install "/tmp/luci-lua-runtime_all.ipk" - opkg install "/tmp/libopenssl3.ipk" - opkg install "/tmp/luci-compat.ipk" -} -#单独安装argon主题 -do_install_argon_skin() { - echo "正在尝试安装argon主题......." - wget "$HTTP_HOST/theme/argon-2.4.3.run" -O /tmp/argon.run - sh /tmp/argon.run - # 检查上一个命令的返回值 - if [ $? -eq 0 ]; then - echo "argon主题 安装成功" - # 设置主题和语言 - uci set luci.main.mediaurlbase='/luci-static/argon' - uci set luci.main.lang='zh_cn' - uci commit - echo "重新登录web页面后, 查看新主题 " - else - echo "argon主题 安装失败! 建议再执行一次!再给我一个机会!事不过三!" - fi -} - -#单独安装文件管理器 -do_install_filemanager() { - echo "为避免bug,安装文件管理器之前,需要先iStore商店" - do_istore - echo "接下来 尝试安装文件管理器......." - is-opkg install 'app-meta-linkease' - echo "重新登录web页面,然后您可以访问: http://192.168.8.1/cgi-bin/luci/admin/services/linkease/file/?path=/root" -} -#更新脚本 -update_myself() { - wget -O gl-inet.sh "$HTTP_HOST/gl-inet.sh" && chmod +x gl-inet.sh - echo "脚本已更新并保存在当前目录 gl-inet.sh,现在将执行新脚本。" - ./gl-inet.sh - exit 0 -} - -#根据release地址和命名前缀获取apk地址 -get_docker_compose_url() { - if [ $# -eq 0 ]; then - echo "需要提供GitHub releases页面的URL作为参数。" - return 1 - fi - local releases_url=$1 - # 使用curl获取重定向的URL - latest_url=$(curl -Ls -o /dev/null -w "%{url_effective}" "$releases_url") - # 使用sed从URL中提取tag值,并保留前导字符'v' - tag=$(echo $latest_url | sed 's|.*/v|v|') - # 检查是否成功获取到tag - if [ -z "$tag" ]; then - echo "未找到最新的release tag。" - return 1 - fi - # 拼接docker-compose下载链接 - local repo_path=$(echo "$releases_url" | sed -n 's|https://github.com/\(.*\)/releases/latest|\1|p') - docker_compose_download_url="https://github.com/${repo_path}/releases/download/${tag}/docker-compose-linux-aarch64" - echo "$docker_compose_download_url" -} - -# 下载并安装Docker Compose -do_install_docker_compose() { - # https://github.com/docker/compose/releases/download/v2.26.0/docker-compose-linux-aarch64 - # 检查/usr/bin/docker是否存在并且可执行 - if [ -f "/usr/bin/docker" ] && [ -x "/usr/bin/docker" ]; then - echo "Docker is installed and has execute permissions." - else - red "警告 您还没有安装Docker" - exit 1 - fi - if [[ "$gl_name" == *3000* ]]; then - red "警告 docker-compose 组件的大小将近60MB,请谨慎安装" - yellow "确定要继续安装吗(y|n)" - read -r answer - if [ "$answer" = "y" ] || [ -z "$answer" ]; then - green "正在获取最新版docker-compose下载地址" - else - yellow "已退出docker-compose安装流程" - exit 1 - fi - fi - local github_releases_url="https://github.com/docker/compose/releases/latest" - local docker_compose_url=$(get_docker_compose_url "$github_releases_url") - echo "最新版docker-compose 地址:$docker_compose_url" - wget -O /usr/bin/docker-compose $docker_compose_url - if [ $? -eq 0 ]; then - green "docker-compose下载并安装成功,你可以使用啦" - chmod +x /usr/bin/docker-compose - else - red "安装失败,请检查网络连接.或者手动下载到 /usr/bin/docker-compose 记得赋予执行权限" - yellow "刚才使用的地址是:$docker_compose_url" - exit 1 - fi - -} - -#mt3000更换分区 -mt3000_overlay_changed() { - wget -O mt3000.sh "$HTTP_HOST/mt-3000/mt3000.sh" && chmod +x mt3000.sh - sh mt3000.sh -} - -# 防止误操作 隐藏首页无用的元素 -hide_ui_elements() { - - TARGET="/www/luci-static/quickstart/style.css" - MARKER="/* hide custom luci elements */" - - # 如果没有追加过,就添加 - if ! grep -q "$MARKER" "$TARGET"; then - cat <>"$TARGET" - -$MARKER -/* 隐藏首页格式化按钮 */ -.value-data button { - display: none !important; -} - -/* 隐藏网络页的第 3 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(3) { - display: none !important; -} - -/* 隐藏网络页的第 5 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(5) { - display: none !important; -} - -/* 隐藏 feature-card.pink */ -#main > div > div.card-container > div.feature-card.pink { - display: none !important; -} - -EOF - echo "✅ 自定义元素已隐藏" - else - echo "⚠️ 无需重复操作" + if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/mtarch/arch.conf; then + echo "下载 arch.conf 失败,脚本终止。" + exit 1 fi } -# 启用adguardhome -toggle_adguardhome() { - status=$(uci get adguardhome.config.enabled) - - if [ "$status" -eq 1 ]; then - echo "Disabling AdGuardHome..." - uci set adguardhome.config.enabled='0' >/dev/null 2>&1 - uci commit adguardhome >/dev/null 2>&1 - /etc/init.d/adguardhome disable >/dev/null 2>&1 - /etc/init.d/adguardhome stop >/dev/null 2>&1 - green "AdGuardHome 已关闭" - else - echo "Enabling AdGuardHome..." - uci set adguardhome.config.enabled='1' >/dev/null 2>&1 - uci commit adguardhome >/dev/null 2>&1 - /etc/init.d/adguardhome enable >/dev/null 2>&1 - /etc/init.d/adguardhome start >/dev/null 2>&1 - green "AdGuardHome 已开启 访问 http://192.168.8.1:3000" - fi +# OP24专用:切换到阿里云软件源 +change_opkg_source() { + if [[ "$gl_name" == *3000* ]]; then + if ! wget -O /etc/opkg/distfeeds.conf $HTTP_HOST/mt-3000/distfeeds-24.conf; then + echo "换源失败,脚本终止。" + exit 1 + fi + fi } -# 安装[官方辅助UI]插件 by 论坛 iBelieve -do_install_ui_helper() { - - echo "⚠️ 请您确保当前固件版本大于 4.7.0,若低于此版本建议先升级。" - local ipk_file="/tmp/glinjector_3.0.5-6_all.ipk" - local sha_file="${ipk_file}.sha256" - - echo "📥 正在下载 IPK 及 SHA256 校验文件..." - wget -O "$sha_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk.sha256" || { - echo "❌ 下载 SHA256 文件失败" - return 1 - } - - wget --user-agent="Mozilla/5.0" -O "$ipk_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk" || { - echo "❌ 下载 IPK 文件失败" - return 1 - } - - echo "🔐 正在进行 SHA256 校验..." - - cd "$(dirname "$ipk_file")" - sha256sum -c "$sha_file" || { - echo "❌ 校验失败:文件已损坏或未完整下载" - rm -f "$ipk_file" - return 1 - } - - echo "✅ 校验通过,开始安装..." - - opkg update - opkg install "$ipk_file" +# 安装应用商店和主题 +install_istore_os_style() { + do_install_argon_skin + opkg install ttyd + do_install_filetransfer + is-opkg install app-meta-sftp + is-opkg install 'app-meta-ddnsto' + is-opkg install 'app-meta-diskman' + FILE_PATH="/etc/openwrt_release" + NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" + CONTENT=$(cat $FILE_PATH) + UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") + echo "$UPDATED_CONTENT" >$FILE_PATH } -#高级卸载 -advanced_uninstall(){ - echo "📥 正在下载 高级卸载插件..." - wget -O /tmp/advanced_uninstall.ipk $HTTP_HOST/uninstall/advanced_uninstall.ipk - opkg update - opkg install /tmp/advanced_uninstall.ipk +# 设置风扇工作温度 +setup_cpu_fans() { + uci set glfan.@globals[0].temperature=50 + uci set glfan.@globals[0].warn_temperature=50 + uci set glfan.@globals[0].integration=4 + uci set glfan.@globals[0].differential=20 + uci commit glfan + /etc/init.d/gl_fan restart } +# 恢复原厂OPKG配置 +recovery_opkg_settings() { + echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf + mt3000_opkg="$HTTP_HOST/mt-3000/distfeeds-24.conf" + wget -O /etc/opkg/distfeeds.conf ${mt3000_opkg} +} + +# 更新首页风格 +update_luci_app_quickstart() { + if [ -f "/bin/is-opkg" ]; then + is-opkg update + is-opkg install luci-i18n-quickstart-zh-cn --force-depends >/dev/null 2>&1 + opkg install iptables-mod-tproxy + opkg install iptables-mod-socket + opkg install iptables-mod-iprange + do_install_new_quickstart + yellow "恭喜您!现在你的路由器已经变成iStoreOS风格啦!" + green "现在您可以访问8080端口 查看是否生效 http://192.168.8.1:8080" + green "更多up主项目和动态 请务必收藏我的导航站 https://tvhelper.cpolar.cn" + else + red "请先执行第一项 一键iStoreOS风格化" + fi +} + +# 安装文件管理器 +do_install_filemanager() { + echo "为避免bug,安装文件管理器之前,需要先iStore商店" + do_istore_generic + echo "接下来尝试安装文件管理器..." + is-opkg install 'app-meta-linkease' + echo "重新登录web页面,然后您可以访问: http://192.168.8.1/cgi-bin/luci/admin/services/linkease/file/?path=/root" +} + +# ============================================================================ +# 主程序 +# ============================================================================ +load_common_lib + while true; do - clear - gl_name=$(get_router_name) - result=$gl_name"一键iStoreOS风格化(新版)" - result=$(echo "$result" | sed 's/ like iStoreOS//') - echo "***********************************************************************" - echo "* 一键安装工具箱(for gl-inet Router)" - echo "* 20260109 by @wukongdaily " - echo "**********************************************************************" - echo "* 当前的路由器型号: "$gl_name | sed 's/ like iStoreOS//' - echo - echo "********仅支持op24固件的机型*********************************************" - green "*******GL-iNet MT-3000 op24 " - green "*******GL-iNet MT-6000 op24" - echo "******************下次调用 直接输入快捷键 g *****************************" - echo - light_magenta " 1. $result" - echo - echo " 2. 设置风扇开始工作的温度(仅限MT3000)" - echo " 3. 安装Argon紫色主题" - echo " 4. 安装文件管理器" - light_magenta " 5. 隐藏首页非必要UI元素" - light_magenta " 6. 安装个性化UI辅助插件(by VMatrices)" - light_magenta " 7. 安装高级卸载插件" - echo - echo " Q. 退出本程序" - echo - read -p "请选择一个选项: " choice + clear + gl_name=$(get_router_name) + result=$gl_name"一键iStoreOS风格化(新版)" + result=$(echo "$result" | sed 's/ like iStoreOS//') + echo "***********************************************************************" + echo "* 一键安装工具箱(for gl-inet Router)" + echo "* OP24固件专用 by @wukongdaily" + echo "**********************************************************************" + echo "* 当前的路由器型号: $gl_name" | sed 's/ like iStoreOS//' + echo + echo "********仅支持op24固件的机型*********************************************" + green "*******GL-iNet MT-3000 op24" + green "*******GL-iNet MT-6000 op24" + echo "******************下次调用 直接输入快捷键 g *****************************" + echo + light_magenta " 1. $result" + echo + echo " 2. 设置风扇开始工作的温度(仅限MT3000)" + echo " 3. 安装Argon紫色主题" + echo " 4. 安装文件管理器" + light_magenta " 5. 隐藏首页非必要UI元素" + light_magenta " 6. 安装个性化UI辅助插件(by VMatrices)" + light_magenta " 7. 安装高级卸载插件" + echo + echo " Q. 退出本程序" + echo + read -p "请选择一个选项: " choice - case $choice in + case $choice in + 1) + add_arch + change_opkg_source + if [[ "$gl_name" == *3000* ]]; then + setup_cpu_fans + fi + do_istore_generic + install_istore_os_style + update_luci_app_quickstart + setup_base_init + advanced_uninstall + do_install_ui_helper + ;; + 2) + case "$gl_name" in + *3000*) + set_glfan_temp + ;; + *) + echo "当前的路由器型号: $gl_name" | sed 's/ like iStoreOS//' + echo "并非MT3000 它没有风扇 无需设置" + ;; + esac + ;; + 3) + do_install_argon_skin + ;; + 4) + do_install_filemanager + ;; + 5) + hide_ui_elements + ;; + 6) + do_install_ui_helper + ;; + 7) + advanced_uninstall + ;; + q | Q) + echo "退出" + exit 0 + ;; + *) + echo "无效选项,请重新选择。" + ;; + esac - 1) - add_arch - change_opkg_source - if [[ "$gl_name" == *3000* ]]; then - # 设置风扇工作温度 - setup_cpu_fans - fi - #先安装istore商店 - do_istore - #安装iStore风格 - install_istore_os_style - #安装iStore首页风格 - update_luci_app_quickstart - #基础必备设置 - setup_base_init - advanced_uninstall - do_install_ui_helper - ;; - 2) - case "$gl_name" in - *3000*) - set_glfan_temp - ;; - *) - echo "* 当前的路由器型号: "$gl_name | sed 's/ like iStoreOS//' - echo "并非MT3000 它没有风扇 无需设置" - ;; - esac - ;; - 3) - do_install_argon_skin - ;; - 4) - do_install_filemanager - ;; - 5) - hide_ui_elements - ;; - 6) - do_install_ui_helper - ;; - 7) - advanced_uninstall - ;; - q | Q) - echo "退出" - exit 0 - ;; - *) - echo "无效选项,请重新选择。" - ;; - esac - - read -p "按 Enter 键继续..." -done + read -p "按 Enter 键继续..." +done \ No newline at end of file diff --git a/gl-inet.sh b/gl-inet.sh index 46e18c2..d59540f 100755 --- a/gl-inet.sh +++ b/gl-inet.sh @@ -1,745 +1,301 @@ #!/bin/sh -# 定义颜色输出函数 -red() { echo -e "\033[31m\033[01m$1\033[0m"; } -green() { echo -e "\033[32m\033[01m$1\033[0m"; } -yellow() { echo -e "\033[33m\033[01m$1\033[0m"; } -blue() { echo -e "\033[34m\033[01m$1\033[0m"; } -light_magenta() { echo -e "\033[95m\033[01m$1\033[0m"; } -light_yellow() { echo -e "\033[93m\033[01m$1\033[0m"; } -cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; } -third_party_source="https://istore.linkease.com/repo/all/nas_luci" +# GL-iNet MT-2500A/MT-3000/MT-6000 一键iStoreOS风格化脚本 +# by @wukongdaily + HTTP_HOST="https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main" +LIB_COMMON="/tmp/lib-common.sh" + # 设置全局命令 g cp -f "$0" /usr/bin/g chmod +x /usr/bin/g - -setup_base_init() { - - #添加出处信息 - add_author_info - #添加安卓时间服务器 - add_dhcp_domain - ##设置时区 - uci set system.@system[0].zonename='Asia/Shanghai' - uci set system.@system[0].timezone='CST-8' - uci commit system - /etc/init.d/system reload - - ## 设置防火墙wan 打开,方便主路由访问 - uci set firewall.@zone[1].input='ACCEPT' - uci commit firewall - +# 下载并加载公共库 +load_common_lib() { + if [ ! -f "$LIB_COMMON" ]; then + wget -O "$LIB_COMMON" "$HTTP_HOST/lib/lib-common.sh" 2>/dev/null || { + echo "下载公共库失败" + exit 1 + } + fi + . "$LIB_COMMON" } -# 调整架构 兼容aarch64_generic +# MT系列专用:架构配置 add_arch() { - if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/mtarch/arch.conf; then - echo "下载 arch.conf 失败,脚本终止。" - exit 1 - fi -} - - -## 安装应用商店和主题 -install_istore_os_style() { - ##设置Argon 紫色主题 - do_install_argon_skin - #增加首页终端图标 - opkg install ttyd - #默认使用体积很小的文件传输:系统——文件传输 - do_install_filetransfer - #默认安装必备工具SFTP 方便下载文件 比如finalshell等工具可以直接浏览路由器文件 - is-opkg install app-meta-sftp - is-opkg install 'app-meta-ddnsto' - # 安装磁盘管理 - is-opkg install 'app-meta-diskman' - FILE_PATH="/etc/openwrt_release" - NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" - CONTENT=$(cat $FILE_PATH) - UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") - echo "$UPDATED_CONTENT" >$FILE_PATH - -} -# 安装iStore 参考 https://github.com/linkease/istore -do_istore() { - echo "do_istore method==================>" - ISTORE_REPO=https://istore.linkease.com/repo/all/store - FCURL="curl --fail --show-error" - - curl -V >/dev/null 2>&1 || { - echo "prereq: install curl" - opkg info curl | grep -Fqm1 curl || opkg update - opkg install curl - } - - IPK=$($FCURL "$ISTORE_REPO/Packages.gz" | zcat | grep -m1 '^Filename: luci-app-store.*\.ipk$' | sed -n -e 's/^Filename: \(.\+\)$/\1/p') - - [ -n "$IPK" ] || exit 1 - - $FCURL "$ISTORE_REPO/$IPK" | tar -xzO ./data.tar.gz | tar -xzO ./bin/is-opkg >/tmp/is-opkg - - [ -s "/tmp/is-opkg" ] || exit 1 - - chmod 755 /tmp/is-opkg - /tmp/is-opkg update - # /tmp/is-opkg install taskd - /tmp/is-opkg opkg install --force-reinstall luci-lib-taskd luci-lib-xterm - /tmp/is-opkg opkg install --force-reinstall luci-app-store || exit $? - [ -s "/etc/init.d/tasks" ] || /tmp/is-opkg opkg install --force-reinstall taskd - [ -s "/usr/lib/lua/luci/cbi.lua" ] || /tmp/is-opkg opkg install luci-compat >/dev/null 2>&1 - -} - -#设置风扇工作温度 -setup_cpu_fans() { - #设定温度阀值,cpu高于48度,则风扇开始工作 - uci set glfan.@globals[0].temperature=50 - uci set glfan.@globals[0].warn_temperature=50 - uci set glfan.@globals[0].integration=4 - uci set glfan.@globals[0].differential=20 - uci commit glfan - /etc/init.d/gl_fan restart -} - -# 判断系统是否为iStoreOS -is_iStoreOS() { - DISTRIB_ID=$(cat /etc/openwrt_release | grep "DISTRIB_ID" | cut -d "'" -f 2) - # 检查DISTRIB_ID的值是否等于'iStoreOS' - if [ "$DISTRIB_ID" = "iStoreOS" ]; then - return 0 # true - else - return 1 # false - fi -} - -## 去除opkg签名 -remove_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - sed -i '/option check_signature/d' "$opkg_conf" -} - -## 添加opkg签名 -add_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - echo "option check_signature 1" >>"$opkg_conf" -} - -#设置第三方软件源 -setup_software_source() { - ## 传入0和1 分别代表原始和第三方软件源 - if [ "$1" -eq 0 ]; then - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - ##如果是iStoreOS系统,还原软件源之后,要添加签名 - if is_iStoreOS; then - add_check_signature_option - else - echo - fi - # 还原软件源之后更新 - opkg update - elif [ "$1" -eq 1 ]; then - #传入1 代表设置第三方软件源 先要删掉签名 - remove_check_signature_option - # 先删除再添加以免重复 - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - echo "src/gz third_party_source $third_party_source" >>/etc/opkg/customfeeds.conf - # 设置第三方源后要更新 - opkg update - else - echo "Invalid option. Please provide 0 or 1." - fi -} - -# 添加主机名映射(解决安卓原生TV首次连不上wifi的问题) -add_dhcp_domain() { - local domain_name="time.android.com" - local domain_ip="203.107.6.88" - - # 检查是否存在相同的域名记录 - existing_records=$(uci show dhcp | grep "dhcp.@domain\[[0-9]\+\].name='$domain_name'") - if [ -z "$existing_records" ]; then - # 添加新的域名记录 - uci add dhcp domain - uci set "dhcp.@domain[-1].name=$domain_name" - uci set "dhcp.@domain[-1].ip=$domain_ip" - uci commit dhcp - else - echo - fi -} - -#添加出处信息 -add_author_info() { - uci set system.@system[0].description='wukongdaily' - uci set system.@system[0].notes='文档说明: - https://tvhelper.cpolar.cn/' - uci commit system -} - -##获取软路由型号信息 -get_router_name() { - model_info=$(cat /tmp/sysinfo/model) - echo "$model_info" -} - -get_router_hostname() { - hostname=$(uci get system.@system[0].hostname) - echo "$hostname 路由器" -} - -add_custom_feed() { - # 先清空配置 - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - # Prompt the user to enter the feed URL - echo "请输入自定义软件源的地址(通常是https开头 aarch64_cortex-a53 结尾):" - read feed_url - if [ -n "$feed_url" ]; then - echo "src/gz custom_feed $feed_url" >>/etc/opkg/customfeeds.conf - opkg update - if [ $? -eq 0 ]; then - echo "已添加并更新列表." - else - echo "已添加但更新失败,请检查网络或重试." - fi - else - echo "Error: Feed URL not provided. No changes were made." - fi -} - -remove_custom_feed() { - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - opkg update - if [ $? -eq 0 ]; then - echo "已删除并更新列表." - else - echo "已删除了自定义软件源但更新失败,请检查网络或重试." - fi -} - -# 检查是否安装了 whiptail -check_whiptail_installed() { - if [ -e /usr/bin/whiptail ]; then - return 0 - else - return 1 - fi -} - -#定义一个通用的Dialog -show_whiptail_dialog() { - #判断是否具备whiptail dialog组件 - if check_whiptail_installed; then - echo "whiptail has installed" - else - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - opkg update - opkg install whiptail - fi - local title="$1" - local message="$2" - local function_definition="$3" - whiptail --title "$title" --yesno "$message" 15 60 --yes-button "是" --no-button "否" - if [ $? -eq 0 ]; then - eval "$function_definition" - else - echo "退出" - exit 0 - fi -} - -# 执行重启操作 -do_reboot() { - reboot -} - -#提示用户要重启 -show_reboot_tips() { - reboot_code='do_reboot' - show_whiptail_dialog "重启提醒" " $(get_router_hostname)\n 一键风格化运行完成.\n 为了更好的清理临时缓存,\n 您是否要重启路由器?" "$reboot_code" -} - -#自定义风扇开始工作的温度 -set_glfan_temp() { - - is_integer() { - if [[ $1 =~ ^[0-9]+$ ]]; then - return 0 # 是整数 - else - return 1 # 不是整数 - fi - } - echo "兼容带风扇机型的GL-iNet路由器" - echo "请输入风扇开始工作的温度(建议40-70之间的整数):" - read temp - - if is_integer "$temp"; then - uci set glfan.@globals[0].temperature="$temp" - uci set glfan.@globals[0].warn_temperature="$temp" - uci set glfan.@globals[0].integration=4 - uci set glfan.@globals[0].differential=20 - uci commit glfan - /etc/init.d/gl_fan restart - echo "设置成功!稍等片刻,请查看风扇转动情况" - else - echo "错误: 请输入整数." - fi -} - -recovery_opkg_settings() { - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - router_name=$(get_router_name) - case "$router_name" in - *3000*) - echo "Router name contains '3000'." - mt3000_opkg="$HTTP_HOST/mt-3000/distfeeds.conf" - wget -O /etc/opkg/distfeeds.conf ${mt3000_opkg} - ;; - *2500*) - echo "Router name contains '2500'." - mt2500a_opkg="$HTTP_HOST/mt-2500a/distfeeds.conf" - wget -O /etc/opkg/distfeeds.conf ${mt2500a_opkg} - ;; - *6000*) - update_opkg_config - ;; - *) - echo "Router name does not contain '3000' 6000 or '2500'." - ;; - esac -} - -update_opkg_config() { - kernel_version=$(uname -r) - echo "MT-6000 kernel version: $kernel_version" - case $kernel_version in - 5.4*) - mt6000_opkg="$HTTP_HOST/mt-6000/distfeeds-5.4.conf" - wget -O /etc/opkg/distfeeds.conf ${mt6000_opkg} - # 更换5.4.238 内核之后 缺少的依赖 - - mkdir -p /tmp/mt6000 - wget --user-agent="Mozilla/5.0" -O /tmp/mt6000/script-utils.ipk "$HTTP_HOST/mt-6000/script-utils.ipk" - wget --user-agent="Mozilla/5.0" -O /tmp/mt6000/mdadm.ipk "$HTTP_HOST/mt-6000/mdadm.ipk" - wget --user-agent="Mozilla/5.0" -O /tmp/mt6000/lsblk.ipk "$HTTP_HOST/mt-6000/lsblk.ipk" - opkg update - if [ -f "/tmp/mt6000/lsblk.ipk" ]; then - # 先卸载之前安装过的lsblk,确保使用的是正确的lsblk - opkg remove lsblk - fi - opkg install /tmp/mt6000/*.ipk - ;; - 5.15*) - mt6000_opkg="$HTTP_HOST/mt-6000/distfeeds.conf" - wget -O /etc/opkg/distfeeds.conf ${mt6000_opkg} - ;; - *) - echo "Unsupported kernel version: $kernel_version" - return 1 - ;; - esac -} - -do_luci_app_wireguard() { - setup_software_source 0 - opkg install luci-app-wireguard - opkg install luci-i18n-wireguard-zh-cn - echo "请访问 http://"$(uci get network.lan.ipaddr)"/cgi-bin/luci/admin/status/wireguard 查看状态 " - echo "也可以去接口中 查看是否增加了新的wireguard 协议的选项 " -} -update_luci_app_quickstart() { - if [ -f "/bin/is-opkg" ]; then - # 如果 /bin/is-opkg 存在,则执行 is-opkg update - is-opkg update - is-opkg install luci-i18n-quickstart-zh-cn --force-depends >/dev/null 2>&1 - opkg install iptables-mod-tproxy - opkg install iptables-mod-socket - opkg install iptables-mod-iprange - green "正在更新到最新版iStoreOS首页风格 " - TMPATH=/tmp/qstart - mkdir -p ${TMPATH} - app_aarch64='quickstart_0.11.13-r1_aarch64_generic.ipk' - app_ui='luci-app-quickstart_0.12.4-r1_all.ipk' - app_lng='luci-i18n-quickstart-zh-cn_25.090.31208-f5bf244_all.ipk' - wget $HTTP_HOST/newquickstart/$app_aarch64 -O ${TMPATH}/$app_aarch64 - wget $HTTP_HOST/newquickstart/$app_ui -O ${TMPATH}/$app_ui - wget $HTTP_HOST/newquickstart/$app_lng -O ${TMPATH}/$app_lng - opkg install ${TMPATH}/*.ipk - rm -rf ${TMPATH} - hide_ui_elements - yellow "恭喜您!现在你的路由器已经变成iStoreOS风格啦!" - green "现在您可以访问8080端口 查看是否生效 http://192.168.8.1:8080" - green "更多up主项目和动态 请务必收藏我的导航站 https://tvhelper.cpolar.cn " - green "赞助本项目作者 https://wkdaily.cpolar.cn/01 " - addr_hostname=$(uci get system.@system[0].hostname) - else - red "请先执行第一项 一键iStoreOS风格化" - fi -} - -# 安装体积非常小的文件传输软件 默认上传位置/tmp/upload/ -do_install_filetransfer() { - mkdir -p /tmp/luci-app-filetransfer/ - cd /tmp/luci-app-filetransfer/ - wget --user-agent="Mozilla/5.0" -O luci-app-filetransfer_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-app-filetransfer_all.ipk" - wget --user-agent="Mozilla/5.0" -O luci-lib-fs_1.0-14_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-lib-fs_1.0-14_all.ipk" - opkg install *.ipk --force-depends -} -do_install_depends_ipk() { - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-lua-runtime_all.ipk" "$HTTP_HOST/theme/luci-lua-runtime_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/libopenssl3.ipk" "$HTTP_HOST/theme/libopenssl3.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-compat.ipk" "$HTTP_HOST/theme/luci-compat.ipk" - opkg install "/tmp/luci-lua-runtime_all.ipk" - opkg install "/tmp/libopenssl3.ipk" - opkg install "/tmp/luci-compat.ipk" -} -#单独安装argon主题 -do_install_argon_skin() { - echo "正在尝试安装argon主题......." - #下载和安装argon的依赖 - do_install_depends_ipk - # bug fix 由于2.3.1 最新版的luci-argon-theme 登录按钮没有中文匹配,而2.3版本字体不对。 - # 所以这里安装上一个版本2.2.9,考虑到主题皮肤并不需要长期更新,因此固定版本没问题 - opkg update - opkg install luci-lib-ipkg - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-theme-argon.ipk" "$HTTP_HOST/theme/luci-theme-argon-master_2.2.9.4_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-app-argon-config.ipk" "$HTTP_HOST/theme/luci-app-argon-config_0.9_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-i18n-argon-config-zh-cn.ipk" "$HTTP_HOST/theme/luci-i18n-argon-config-zh-cn.ipk" - cd /tmp/ - opkg install luci-theme-argon.ipk luci-app-argon-config.ipk luci-i18n-argon-config-zh-cn.ipk - # 检查上一个命令的返回值 - if [ $? -eq 0 ]; then - echo "argon主题 安装成功" - # 设置主题和语言 - uci set luci.main.mediaurlbase='/luci-static/argon' - uci set luci.main.lang='zh_cn' - uci commit - echo "重新登录web页面后, 查看新主题 " - else - echo "argon主题 安装失败! 建议再执行一次!再给我一个机会!事不过三!" - fi -} - -#单独安装文件管理器 -do_install_filemanager() { - echo "为避免bug,安装文件管理器之前,需要先iStore商店" - do_istore - echo "接下来 尝试安装文件管理器......." - is-opkg install 'app-meta-linkease' - echo "重新登录web页面,然后您可以访问: http://192.168.8.1/cgi-bin/luci/admin/services/linkease/file/?path=/root" -} -#更新脚本 -update_myself() { - wget -O gl-inet.sh "$HTTP_HOST/gl-inet.sh" && chmod +x gl-inet.sh - echo "脚本已更新并保存在当前目录 gl-inet.sh,现在将执行新脚本。" - ./gl-inet.sh - exit 0 -} - -#根据release地址和命名前缀获取apk地址 -get_docker_compose_url() { - if [ $# -eq 0 ]; then - echo "需要提供GitHub releases页面的URL作为参数。" - return 1 - fi - local releases_url=$1 - # 使用curl获取重定向的URL - latest_url=$(curl -Ls -o /dev/null -w "%{url_effective}" "$releases_url") - # 使用sed从URL中提取tag值,并保留前导字符'v' - tag=$(echo $latest_url | sed 's|.*/v|v|') - # 检查是否成功获取到tag - if [ -z "$tag" ]; then - echo "未找到最新的release tag。" - return 1 - fi - # 拼接docker-compose下载链接 - local repo_path=$(echo "$releases_url" | sed -n 's|https://github.com/\(.*\)/releases/latest|\1|p') - docker_compose_download_url="https://github.com/${repo_path}/releases/download/${tag}/docker-compose-linux-aarch64" - echo "$docker_compose_download_url" -} - -# 下载并安装Docker Compose -do_install_docker_compose() { - # https://github.com/docker/compose/releases/download/v2.26.0/docker-compose-linux-aarch64 - # 检查/usr/bin/docker是否存在并且可执行 - if [ -f "/usr/bin/docker" ] && [ -x "/usr/bin/docker" ]; then - echo "Docker is installed and has execute permissions." - else - red "警告 您还没有安装Docker" - exit 1 - fi - if [[ "$gl_name" == *3000* ]]; then - red "警告 docker-compose 组件的大小将近60MB,请谨慎安装" - yellow "确定要继续安装吗(y|n)" - read -r answer - if [ "$answer" = "y" ] || [ -z "$answer" ]; then - green "正在获取最新版docker-compose下载地址" - else - yellow "已退出docker-compose安装流程" - exit 1 - fi - fi - local github_releases_url="https://github.com/docker/compose/releases/latest" - local docker_compose_url=$(get_docker_compose_url "$github_releases_url") - echo "最新版docker-compose 地址:$docker_compose_url" - wget -O /usr/bin/docker-compose $docker_compose_url - if [ $? -eq 0 ]; then - green "docker-compose下载并安装成功,你可以使用啦" - chmod +x /usr/bin/docker-compose - else - red "安装失败,请检查网络连接.或者手动下载到 /usr/bin/docker-compose 记得赋予执行权限" - yellow "刚才使用的地址是:$docker_compose_url" - exit 1 - fi - -} - -#mt3000更换分区 -mt3000_overlay_changed() { - wget -O mt3000.sh "$HTTP_HOST/mt-3000/mt3000.sh" && chmod +x mt3000.sh - sh mt3000.sh -} - -# 防止误操作 隐藏首页无用的元素 -hide_ui_elements() { - - TARGET="/www/luci-static/quickstart/style.css" - MARKER="/* hide custom luci elements */" - - # 如果没有追加过,就添加 - if ! grep -q "$MARKER" "$TARGET"; then - cat <>"$TARGET" - -$MARKER -/* 隐藏首页格式化按钮 */ -.value-data button { - display: none !important; -} - -/* 隐藏网络页的第 3 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(3) { - display: none !important; -} - -/* 隐藏网络页的第 5 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(5) { - display: none !important; -} - -/* 隐藏 feature-card.pink */ -#main > div > div.card-container > div.feature-card.pink { - display: none !important; -} - -EOF - echo "✅ 自定义元素已隐藏" - else - echo "⚠️ 无需重复操作" + if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/mtarch/arch.conf; then + echo "下载 arch.conf 失败,脚本终止。" + exit 1 fi } -# 启用adguardhome -toggle_adguardhome() { - status=$(uci get adguardhome.config.enabled) - - if [ "$status" -eq 1 ]; then - echo "Disabling AdGuardHome..." - uci set adguardhome.config.enabled='0' >/dev/null 2>&1 - uci commit adguardhome >/dev/null 2>&1 - /etc/init.d/adguardhome disable >/dev/null 2>&1 - /etc/init.d/adguardhome stop >/dev/null 2>&1 - green "AdGuardHome 已关闭" - else - echo "Enabling AdGuardHome..." - uci set adguardhome.config.enabled='1' >/dev/null 2>&1 - uci commit adguardhome >/dev/null 2>&1 - /etc/init.d/adguardhome enable >/dev/null 2>&1 - /etc/init.d/adguardhome start >/dev/null 2>&1 - green "AdGuardHome 已开启 访问 http://192.168.8.1:3000" - fi +# 安装应用商店和主题 +install_istore_os_style() { + do_install_argon_skin + opkg install ttyd + do_install_filetransfer + is-opkg install app-meta-sftp + is-opkg install 'app-meta-ddnsto' + is-opkg install 'app-meta-diskman' + FILE_PATH="/etc/openwrt_release" + NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" + CONTENT=$(cat $FILE_PATH) + UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") + echo "$UPDATED_CONTENT" >$FILE_PATH } -# 安装[官方辅助UI]插件 by 论坛 iBelieve -do_install_ui_helper() { - - echo "⚠️ 请您确保当前固件版本大于 4.7.0,若低于此版本建议先升级。" - read -p "👉 如果您已确认,请按 [回车] 继续;否则按 Ctrl+C 或输入任意内容后回车退出:" user_input - - if [ -n "$user_input" ]; then - echo "🚫 用户取消安装。" - return 1 - fi - - local ipk_file="/tmp/glinjector_3.0.5-6_all.ipk" - local sha_file="${ipk_file}.sha256" - - echo "📥 正在下载 IPK 及 SHA256 校验文件..." - wget -O "$sha_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk.sha256" || { - echo "❌ 下载 SHA256 文件失败" - return 1 - } - - wget --user-agent="Mozilla/5.0" -O "$ipk_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk" || { - echo "❌ 下载 IPK 文件失败" - return 1 - } - - echo "🔐 正在进行 SHA256 校验..." - - cd "$(dirname "$ipk_file")" - sha256sum -c "$sha_file" || { - echo "❌ 校验失败:文件已损坏或未完整下载" - rm -f "$ipk_file" - return 1 - } - - echo "✅ 校验通过,开始安装..." - - opkg update - opkg install "$ipk_file" +# 设置风扇工作温度 +setup_cpu_fans() { + uci set glfan.@globals[0].temperature=50 + uci set glfan.@globals[0].warn_temperature=50 + uci set glfan.@globals[0].integration=4 + uci set glfan.@globals[0].differential=20 + uci commit glfan + /etc/init.d/gl_fan restart } -#高级卸载 -advanced_uninstall(){ - echo "📥 正在下载 高级卸载插件..." - wget -O /tmp/advanced_uninstall.ipk $HTTP_HOST/uninstall/advanced_uninstall.ipk - opkg update - opkg install /tmp/advanced_uninstall.ipk +# 添加自定义软件源 +add_custom_feed() { + echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf + echo "请输入自定义软件源的地址(通常是https开头 aarch64_cortex-a53 结尾):" + read feed_url + if [ -n "$feed_url" ]; then + echo "src/gz custom_feed $feed_url" >>/etc/opkg/customfeeds.conf + opkg update + if [ $? -eq 0 ]; then + echo "已添加并更新列表." + else + echo "已添加但更新失败,请检查网络或重试." + fi + else + echo "Error: Feed URL not provided." + fi } +# 删除自定义软件源 +remove_custom_feed() { + echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf + opkg update + if [ $? -eq 0 ]; then + echo "已删除并更新列表." + else + echo "已删除了自定义软件源但更新失败,请检查网络或重试." + fi +} + +# 恢复原厂OPKG配置 +recovery_opkg_settings() { + echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf + router_name=$(get_router_name) + case "$router_name" in + *3000*) + mt3000_opkg="$HTTP_HOST/mt-3000/distfeeds.conf" + wget -O /etc/opkg/distfeeds.conf ${mt3000_opkg} + ;; + *2500*) + mt2500a_opkg="$HTTP_HOST/mt-2500a/distfeeds.conf" + wget -O /etc/opkg/distfeeds.conf ${mt2500a_opkg} + ;; + *6000*) + update_opkg_config + ;; + *) + echo "Router name does not contain '3000', '6000' or '2500'." + ;; + esac +} + +# MT6000专用:更新OPKG配置 +update_opkg_config() { + kernel_version=$(uname -r) + echo "MT-6000 kernel version: $kernel_version" + case $kernel_version in + 5.4*) + mt6000_opkg="$HTTP_HOST/mt-6000/distfeeds-5.4.conf" + wget -O /etc/opkg/distfeeds.conf ${mt6000_opkg} + mkdir -p /tmp/mt6000 + wget --user-agent="Mozilla/5.0" -O /tmp/mt6000/script-utils.ipk "$HTTP_HOST/mt-6000/script-utils.ipk" + wget --user-agent="Mozilla/5.0" -O /tmp/mt6000/mdadm.ipk "$HTTP_HOST/mt-6000/mdadm.ipk" + wget --user-agent="Mozilla/5.0" -O /tmp/mt6000/lsblk.ipk "$HTTP_HOST/mt-6000/lsblk.ipk" + opkg update + if [ -f "/tmp/mt6000/lsblk.ipk" ]; then + opkg remove lsblk + fi + opkg install /tmp/mt6000/*.ipk + ;; + 5.15*) + mt6000_opkg="$HTTP_HOST/mt-6000/distfeeds.conf" + wget -O /etc/opkg/distfeeds.conf ${mt6000_opkg} + ;; + *) + echo "Unsupported kernel version: $kernel_version" + return 1 + ;; + esac +} + +# 安装 WireGuard +do_luci_app_wireguard() { + setup_software_source 0 + opkg install luci-app-wireguard + opkg install luci-i18n-wireguard-zh-cn + echo "请访问 http://$(uci get network.lan.ipaddr)/cgi-bin/luci/admin/status/wireguard 查看状态" +} + +# 更新首页风格 +update_luci_app_quickstart() { + if [ -f "/bin/is-opkg" ]; then + is-opkg update + is-opkg install luci-i18n-quickstart-zh-cn --force-depends >/dev/null 2>&1 + opkg install iptables-mod-tproxy + opkg install iptables-mod-socket + opkg install iptables-mod-iprange + do_install_new_quickstart + yellow "恭喜您!现在你的路由器已经变成iStoreOS风格啦!" + green "现在您可以访问8080端口 查看是否生效 http://192.168.8.1:8080" + green "更多up主项目和动态 请务必收藏我的导航站 https://tvhelper.cpolar.cn" + else + red "请先执行第一项 一键iStoreOS风格化" + fi +} + +# 安装文件管理器 +do_install_filemanager() { + echo "为避免bug,安装文件管理器之前,需要先iStore商店" + do_istore_generic + echo "接下来尝试安装文件管理器..." + is-opkg install 'app-meta-linkease' + echo "重新登录web页面,然后您可以访问: http://192.168.8.1/cgi-bin/luci/admin/services/linkease/file/?path=/root" +} + +# 更新脚本 +update_myself() { + wget -O gl-inet.sh "$HTTP_HOST/gl-inet.sh" && chmod +x gl-inet.sh + echo "脚本已更新并保存在当前目录 gl-inet.sh,现在将执行新脚本。" + ./gl-inet.sh + exit 0 +} + +# MT3000更换分区 +mt3000_overlay_changed() { + wget -O mt3000.sh "$HTTP_HOST/mt-3000/mt3000.sh" && chmod +x mt3000.sh + sh mt3000.sh +} + +# ============================================================================ +# 主程序 +# ============================================================================ +load_common_lib + while true; do - clear - gl_name=$(get_router_name) - result=$gl_name"一键iStoreOS风格化(新版)" - result=$(echo "$result" | sed 's/ like iStoreOS//') - echo "***********************************************************************" - echo "* 一键安装工具箱(for gl-inet Router)" - echo "* 20251118 by @wukongdaily " - echo "**********************************************************************" - echo "* 当前的路由器型号: "$gl_name | sed 's/ like iStoreOS//' - echo - echo "*******支持的机型列表***************************************************" - green "*******GL-iNet MT-2500A" - green "*******GL-iNet MT-3000 " - green "*******GL-iNet MT-6000 " - echo "******************下次调用 直接输入快捷键 g *****************************" - echo - light_magenta " 1. $result" - echo - echo " 2. 设置自定义软件源" - echo " 3. 删除自定义软件源" - echo - echo " 4. 设置风扇开始工作的温度(仅限MT3000)" - echo " 5. 恢复原厂OPKG配置软件包" - echo - echo " 6. 启用/关闭原厂adguardhome" - echo " 7. 安装luci-app-wireguard" - echo " 8. 更新luci-app-quickstart" - echo " 9. 安装Argon紫色主题" - echo "10. 安装文件管理器" - light_magenta "11. 安装Docker" - light_magenta "12. 安装docker-compose" - light_magenta "13. 更新脚本" - cyan "14. MT3000一键更换分区" - light_magenta "15. 隐藏首页非必要UI元素" - light_magenta "16. 安装个性化UI辅助插件(by VMatrices)" - light_magenta "17. 安装高级卸载插件" - echo - echo " Q. 退出本程序" - echo - read -p "请选择一个选项: " choice + clear + gl_name=$(get_router_name) + result=$gl_name"一键iStoreOS风格化(新版)" + result=$(echo "$result" | sed 's/ like iStoreOS//') + echo "***********************************************************************" + echo "* 一键安装工具箱(for gl-inet Router)" + echo "* by @wukongdaily" + echo "**********************************************************************" + echo "* 当前的路由器型号: $gl_name" | sed 's/ like iStoreOS//' + echo + echo "*******支持的机型列表***************************************************" + green "*******GL-iNet MT-2500A" + green "*******GL-iNet MT-3000" + green "*******GL-iNet MT-6000" + echo "******************下次调用 直接输入快捷键 g *****************************" + echo + light_magenta " 1. $result" + echo + echo " 2. 设置自定义软件源" + echo " 3. 删除自定义软件源" + echo + echo " 4. 设置风扇开始工作的温度(仅限MT3000)" + echo " 5. 恢复原厂OPKG配置软件包" + echo + echo " 6. 启用/关闭原厂adguardhome" + echo " 7. 安装luci-app-wireguard" + echo " 8. 更新luci-app-quickstart" + echo " 9. 安装Argon紫色主题" + echo "10. 安装文件管理器" + light_magenta "11. MT3000一键更换分区" + light_magenta "12. 隐藏首页非必要UI元素" + light_magenta "13. 安装个性化UI辅助插件(by VMatrices)" + light_magenta "14. 安装高级卸载插件" + light_magenta "15. 更新脚本" + echo + echo " Q. 退出本程序" + echo + read -p "请选择一个选项: " choice - case $choice in + case $choice in + 1) + add_arch + if [[ "$gl_name" == *3000* ]]; then + setup_cpu_fans + fi + recovery_opkg_settings + do_istore_generic + install_istore_os_style + update_luci_app_quickstart + setup_base_init + ;; + 2) + add_custom_feed + ;; + 3) + remove_custom_feed + ;; + 4) + case "$gl_name" in + *3000*) + set_glfan_temp + ;; + *) + echo "当前的路由器型号: $gl_name" | sed 's/ like iStoreOS//' + echo "并非MT3000 它没有风扇 无需设置" + ;; + esac + ;; + 5) + recovery_opkg_settings + ;; + 6) + toggle_adguardhome + ;; + 7) + do_luci_app_wireguard + ;; + 8) + update_luci_app_quickstart + ;; + 9) + do_install_argon_skin + ;; + 10) + do_install_filemanager + ;; + 11) + mt3000_overlay_changed + ;; + 12) + hide_ui_elements + ;; + 13) + do_install_ui_helper + ;; + 14) + advanced_uninstall + ;; + 15) + update_myself + ;; + q | Q) + echo "退出" + exit 0 + ;; + *) + echo "无效选项,请重新选择。" + ;; + esac - 1) - add_arch - if [[ "$gl_name" == *3000* ]]; then - # 设置风扇工作温度 - setup_cpu_fans - fi - # 解决首页“已联网”的UI问题 - recovery_opkg_settings - #先安装istore商店 - do_istore - #安装iStore风格 - install_istore_os_style - #安装iStore首页风格 - update_luci_app_quickstart - #基础必备设置 - setup_base_init - ;; - 2) - add_custom_feed - ;; - 3) - remove_custom_feed - ;; - 4) - case "$gl_name" in - *3000*) - set_glfan_temp - ;; - *) - echo "* 当前的路由器型号: "$gl_name | sed 's/ like iStoreOS//' - echo "并非MT3000 它没有风扇 无需设置" - ;; - esac - ;; - 5) - recovery_opkg_settings - ;; - 6) - toggle_adguardhome - ;; - 7) - do_luci_app_wireguard - ;; - 8) - update_luci_app_quickstart - ;; - 9) - do_install_argon_skin - ;; - 10) - do_install_filemanager - ;; - 11) - yellow "注意!插入U盘之前请确认U盘数据已备份" - red "确定要继续吗(y|n)" - read -r answer - if [ "$answer" = "y" ] || [ -z "$answer" ]; then - wget -q -O do_docker.sh "$HTTP_HOST/docker/do_docker.sh" && chmod +x do_docker.sh - ./do_docker.sh - else - yellow "已退出Docker安装流程" - fi - ;; - 12) - do_install_docker_compose - ;; - 13) - update_myself - ;; - 14) - mt3000_overlay_changed - ;; - 15) - hide_ui_elements - ;; - 16) - do_install_ui_helper - ;; - 17) - advanced_uninstall - ;; - q | Q) - echo "退出" - exit 0 - ;; - *) - echo "无效选项,请重新选择。" - ;; - esac - - read -p "按 Enter 键继续..." -done + read -p "按 Enter 键继续..." +done \ No newline at end of file diff --git a/index.html b/index.html deleted file mode 100644 index 00bf961..0000000 --- a/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - mt3000备用脚本 - - - - -
加载中...
- - - - - - diff --git a/lib/lib-common.sh b/lib/lib-common.sh new file mode 100644 index 0000000..cbc6d37 --- /dev/null +++ b/lib/lib-common.sh @@ -0,0 +1,410 @@ +#!/bin/sh +# GL-iNet 路由器工具箱公共函数库 +# by @wukongdaily + +# ============================================================================ +# 颜色输出函数 +# ============================================================================ +red() { echo -e "\033[31m\033[01m$1\033[0m"; } +green() { echo -e "\033[32m\033[01m$1\033[0m"; } +yellow() { echo -e "\033[33m\033[01m$1\033[0m"; } +blue() { echo -e "\033[34m\033[01m$1\033[0m"; } +light_magenta() { echo -e "\033[95m\033[01m$1\033[0m"; } +light_yellow() { echo -e "\033[93m\033[01m$1\033[0m"; } +cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; } + +# ============================================================================ +# 全局变量 +# ============================================================================ +HTTP_HOST="https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main" +third_party_source="https://istore.linkease.com/repo/all/nas_luci" + +# ============================================================================ +# 路由器信息获取 +# ============================================================================ +get_router_name() { + model_info=$(cat /tmp/sysinfo/model) + echo "$model_info" +} + +get_router_hostname() { + hostname=$(uci get system.@system[0].hostname) + echo "$hostname 路由器" +} + +# ============================================================================ +# 系统判断 +# ============================================================================ +is_iStoreOS() { + DISTRIB_ID=$(cat /etc/openwrt_release | grep "DISTRIB_ID" | cut -d "'" -f 2) + if [ "$DISTRIB_ID" = "iStoreOS" ]; then + return 0 + else + return 1 + fi +} + +# ============================================================================ +# OPKG 签名管理 +# ============================================================================ +remove_check_signature_option() { + local opkg_conf="/etc/opkg.conf" + sed -i '/option check_signature/d' "$opkg_conf" +} + +add_check_signature_option() { + local opkg_conf="/etc/opkg.conf" + echo "option check_signature 1" >>"$opkg_conf" +} + +# ============================================================================ +# 软件源设置 +# ============================================================================ +setup_software_source() { + if [ "$1" -eq 0 ]; then + echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf + if is_iStoreOS; then + add_check_signature_option + fi + opkg update + elif [ "$1" -eq 1 ]; then + remove_check_signature_option + echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf + echo "src/gz third_party_source $third_party_source" >>/etc/opkg/customfeeds.conf + opkg update + else + echo "Invalid option. Please provide 0 or 1." + fi +} + +# ============================================================================ +# DHCP 域名映射 (解决安卓原生TV首次连不上wifi的问题) +# ============================================================================ +add_dhcp_domain() { + local domain_name="time.android.com" + local domain_ip="203.107.6.88" + + existing_records=$(uci show dhcp | grep "dhcp.@domain\[[0-9]\+\].name='$domain_name'") + if [ -z "$existing_records" ]; then + uci add dhcp domain + uci set "dhcp.@domain[-1].name=$domain_name" + uci set "dhcp.@domain[-1].ip=$domain_ip" + uci commit dhcp + fi +} + +# ============================================================================ +# 作者信息添加 +# ============================================================================ +add_author_info() { + uci set system.@system[0].description='wukongdaily' + uci set system.@system[0].notes='文档说明: + https://tvhelper.cpolar.cn/' + uci commit system +} + +# ============================================================================ +# 基础初始化 +# ============================================================================ +setup_base_init() { + add_author_info + add_dhcp_domain + uci set system.@system[0].zonename='Asia/Shanghai' + uci set system.@system[0].timezone='CST-8' + uci commit system + /etc/init.d/system reload + green "安装完毕!请使用8080端口访问luci界面:http://192.168.8.1:8080" + green "作者更多动态务必收藏:https://tvhelper.cpolar.cn/" +} + +# ============================================================================ +# 隐藏首页无用元素 +# ============================================================================ +hide_ui_elements() { + TARGET="/www/luci-static/quickstart/style.css" + MARKER="/* hide custom luci elements */" + + if ! grep -q "$MARKER" "$TARGET"; then + cat <>"$TARGET" + +$MARKER +/* 隐藏首页格式化按钮 */ +.value-data button { + display: none !important; +} + +/* 隐藏网络页的第 3 个 item */ +#main > div > div.network-container.align-c > div > div > div:nth-child(3) { + display: none !important; +} + +/* 隐藏网络页的第 5 个 item */ +#main > div > div.network-container.align-c > div > div > div:nth-child(5) { + display: none !important; +} + +/* 隐藏 feature-card.pink */ +#main > div > div.card-container > div.feature-card.pink { + display: none !important; +} + +EOF + echo "✅ 自定义元素已隐藏" + else + echo "⚠️ 无需重复操作" + fi +} + +# ============================================================================ +# 文件传输插件安装 +# ============================================================================ +do_install_filetransfer() { + mkdir -p /tmp/luci-app-filetransfer/ + cd /tmp/luci-app-filetransfer/ + wget --user-agent="Mozilla/5.0" -O luci-app-filetransfer_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-app-filetransfer_all.ipk" + wget --user-agent="Mozilla/5.0" -O luci-lib-fs_1.0-14_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-lib-fs_1.0-14_all.ipk" + opkg install *.ipk --force-depends +} + +# ============================================================================ +# Argon 主题依赖安装 +# ============================================================================ +do_install_depends_ipk() { + wget --user-agent="Mozilla/5.0" -O "/tmp/luci-lua-runtime_all.ipk" "$HTTP_HOST/theme/luci-lua-runtime_all.ipk" + wget --user-agent="Mozilla/5.0" -O "/tmp/libopenssl3.ipk" "$HTTP_HOST/theme/libopenssl3.ipk" + opkg install "/tmp/luci-lua-runtime_all.ipk" + opkg install "/tmp/libopenssl3.ipk" +} + +# ============================================================================ +# Argon 主题安装 +# ============================================================================ +do_install_argon_skin() { + echo "正在尝试安装argon主题..." + do_install_depends_ipk + opkg update + opkg install luci-lib-ipkg + wget --user-agent="Mozilla/5.0" -O "/tmp/luci-theme-argon.ipk" "$HTTP_HOST/theme/luci-theme-argon-master_2.2.9.4_all.ipk" + wget --user-agent="Mozilla/5.0" -O "/tmp/luci-app-argon-config.ipk" "$HTTP_HOST/theme/luci-app-argon-config_0.9_all.ipk" + wget --user-agent="Mozilla/5.0" -O "/tmp/luci-i18n-argon-config-zh-cn.ipk" "$HTTP_HOST/theme/luci-i18n-argon-config-zh-cn.ipk" + cd /tmp/ + opkg install luci-theme-argon.ipk luci-app-argon-config.ipk luci-i18n-argon-config-zh-cn.ipk + if [ $? -eq 0 ]; then + echo "argon主题 安装成功" + uci set luci.main.mediaurlbase='/luci-static/argon' + uci set luci.main.lang='zh_cn' + uci commit + sed -i 's/value="<%:Login%>"/value="登录"/' /usr/lib/lua/luci/view/themes/argon/sysauth.htm + echo "重新登录web页面后, 查看新主题" + else + echo "argon主题 安装失败! 建议再执行一次!" + fi +} + +# ============================================================================ +# iStore 商店安装 (64位) +# ============================================================================ +do_istore() { + echo "do_istore 64bit ==================>" + opkg update + URL="https://repo.istoreos.com/repo/all/store/" + DIR="/tmp/ipk_store" + mkdir -p "$DIR" + cd "$DIR" || exit 1 + + for ipk in $(wget -qO- "$URL" | grep -oE 'href="[^"]+\.ipk"' | cut -d'"' -f2); do + echo "下载 $ipk" + wget -q "${URL}${ipk}" + done + + opkg install ./*.ipk +} + +# ============================================================================ +# iStore 商店安装 (通用方法) +# ============================================================================ +do_istore_generic() { + echo "do_istore method==================>" + ISTORE_REPO=https://istore.linkease.com/repo/all/store + FCURL="curl --fail --show-error" + + curl -V >/dev/null 2>&1 || { + echo "prereq: install curl" + opkg info curl | grep -Fqm1 curl || opkg update + opkg install curl + } + + IPK=$($FCURL "$ISTORE_REPO/Packages.gz" | zcat | grep -m1 '^Filename: luci-app-store.*\.ipk$' | sed -n -e 's/^Filename: \(.\+\)$/\1/p') + + [ -n "$IPK" ] || exit 1 + + $FCURL "$ISTORE_REPO/$IPK" | tar -xzO ./data.tar.gz | tar -xzO ./bin/is-opkg >/tmp/is-opkg + + [ -s "/tmp/is-opkg" ] || exit 1 + + chmod 755 /tmp/is-opkg + /tmp/is-opkg update + /tmp/is-opkg opkg install --force-reinstall luci-lib-taskd luci-lib-xterm + /tmp/is-opkg opkg install --force-reinstall luci-app-store || exit $? + [ -s "/etc/init.d/tasks" ] || /tmp/is-opkg opkg install --force-reinstall taskd + [ -s "/usr/lib/lua/luci/cbi.lua" ] || /tmp/is-opkg opkg install luci-compat >/dev/null 2>&1 +} + +# ============================================================================ +# Quickstart 下载 +# ============================================================================ +download_luci_quickstart() { + REPO_URL="https://repo.istoreos.com/repo/all/nas_luci/" + DOWNLOAD_DIR="/tmp/ipk_downloads" + mkdir -p "$DOWNLOAD_DIR" + + wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | + sed 's/href="//;s/"//' | while read -r FILE; do + echo "📦 正在下载: $FILE" + wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" + done + + echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" +} + +download_lib_quickstart() { + REPO_URL="https://repo.istoreos.com/repo/aarch64_cortex-a53/nas/" + DOWNLOAD_DIR="/tmp/ipk_downloads" + mkdir -p "$DOWNLOAD_DIR" + + wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | + sed 's/href="//;s/"//' | while read -r FILE; do + echo "📦 正在下载: $FILE" + wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" + done + + echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" +} + +# ============================================================================ +# 新首页风格安装 +# ============================================================================ +do_install_new_quickstart() { + green "正在更新到最新版iStoreOS首页风格" + TMPATH=/tmp/qstart + mkdir -p ${TMPATH} + app_aarch64='quickstart_0.11.13-r1_aarch64_generic.ipk' + app_ui='luci-app-quickstart_0.12.4-r1_all.ipk' + app_lng='luci-i18n-quickstart-zh-cn_25.090.31208-f5bf244_all.ipk' + wget $HTTP_HOST/newquickstart/$app_aarch64 -O ${TMPATH}/$app_aarch64 + wget $HTTP_HOST/newquickstart/$app_ui -O ${TMPATH}/$app_ui + wget $HTTP_HOST/newquickstart/$app_lng -O ${TMPATH}/$app_lng + opkg install ${TMPATH}/*.ipk + rm -rf ${TMPATH} + hide_ui_elements + green "首页风格安装完毕!请使用8080端口访问luci界面:http://192.168.8.1:8080" + green "作者更多动态务必收藏:https://tvhelper.cpolar.cn/" +} + +# ============================================================================ +# UI 辅助插件安装 +# ============================================================================ +do_install_ui_helper() { + echo "⚠️ 请您确保当前固件版本大于 4.7.2,若低于此版本建议先升级。" + read -p "👉 如果您已确认,请按 [回车] 继续;否则按 Ctrl+C 或输入任意内容后回车退出:" user_input + + if [ -n "$user_input" ]; then + echo "🚫 用户取消安装。" + return 1 + fi + + local ipk_file="/tmp/glinjector_3.0.5-6_all.ipk" + local sha_file="${ipk_file}.sha256" + + echo "📥 正在下载 IPK 及 SHA256 校验文件..." + wget -O "$sha_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk.sha256" || { + echo "❌ 下载 SHA256 文件失败" + return 1 + } + + wget --user-agent="Mozilla/5.0" -O "$ipk_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk" || { + echo "❌ 下载 IPK 文件失败" + return 1 + } + + echo "🔐 正在进行 SHA256 校验..." + + cd "$(dirname "$ipk_file")" + sha256sum -c "$sha_file" || { + echo "❌ 校验失败:文件已损坏或未完整下载" + rm -f "$ipk_file" + return 1 + } + + echo "✅ 校验通过,开始安装..." + + opkg update + opkg install "$ipk_file" +} + +# ============================================================================ +# 高级卸载插件 +# ============================================================================ +advanced_uninstall() { + echo "📥 正在下载高级卸载插件..." + wget -O /tmp/advanced_uninstall.ipk $HTTP_HOST/uninstall/advanced_uninstall.ipk + opkg update + opkg install /tmp/advanced_uninstall.ipk +} + +# ============================================================================ +# 恢复出厂设置 +# ============================================================================ +recovery() { + echo "⚠️ 警告:此操作将恢复出厂设置,所有配置将被清除!" + echo "⚠️ 请确保已备份必要数据。" + read -p "是否确定执行恢复出厂设置?(yes/[no]): " confirm + + if [ "$confirm" = "yes" ]; then + echo "正在执行恢复出厂设置..." + firstboot -y >/dev/null 2>&1 + echo "操作完成,正在重启设备..." + reboot + else + echo "操作已取消。" + fi +} + +# ============================================================================ +# 风扇温度设置 +# ============================================================================ +set_glfan_temp() { + echo "兼容带风扇机型的GL-iNet路由器" + echo "请输入风扇开始工作的温度(建议40-70之间的整数):" + read temp + + if [[ $temp =~ ^[0-9]+$ ]]; then + uci set glfan.@globals[0].temperature="$temp" + uci set glfan.@globals[0].warn_temperature="$temp" + uci set glfan.@globals[0].integration=4 + uci set glfan.@globals[0].differential=20 + uci commit glfan + /etc/init.d/gl_fan restart + echo "设置成功!稍等片刻,请查看风扇转动情况" + else + echo "错误: 请输入整数." + fi +} + +# ============================================================================ +# AdGuardHome 提示 +# ============================================================================ +toggle_adguardhome() { + echo "==========================================" + echo " AdGuardHome 广告拦截服务" + echo "==========================================" + echo + yellow "如需管理 AdGuardHome,请在 GL 原厂界面操作:" + echo + cyan "路径:系统 → 个性化 → 解锁区域限制" + echo + green "解锁后即可看到 AdGuardHome 菜单" + echo + echo "访问地址:http://192.168.8.1:3000" + echo +} \ No newline at end of file diff --git a/main.sh b/main.sh index 06cf4cc..b2b34a5 100755 --- a/main.sh +++ b/main.sh @@ -96,7 +96,6 @@ select_model() { green " 9. GL-iNet MT-6000 (OP24固件)" echo green "10. MT-3000 换分区助手 (U盘扩容)" - green "11. MT-3000 Docker安装" echo echo " Q. 退出" echo @@ -124,9 +123,6 @@ select_model() { 10) download_and_run_script "mt-3000/mt3000.sh" ;; - 11) - download_and_run_script "docker/do_docker.sh" - ;; q | Q) echo "退出" exit 0 diff --git a/mt-3000/mt3000.sh b/mt-3000/mt3000.sh index 3098e53..3eb0941 100644 --- a/mt-3000/mt3000.sh +++ b/mt-3000/mt3000.sh @@ -1,18 +1,15 @@ #!/bin/sh +# MT-3000 软件包更换分区助手 +# by @wukongdaily + # 定义颜色输出函数 red() { echo -e "\033[31m\033[01m$1\033[0m"; } green() { echo -e "\033[32m\033[01m$1\033[0m"; } -greeninfo() { echo -e "\033[32m\033[01m[INFO] $1\033[0m"; } -blueinfo() { echo -e "\033[32m\033[01m$1\033[0m"; } yellow() { echo -e "\033[33m\033[01m$1\033[0m"; } -blue() { echo -e "\033[34m\033[01m$1\033[0m"; } -light_magenta() { echo -e "\033[95m\033[01m$1\033[0m"; } -light_yellow() { echo -e "\033[93m\033[01m$1\033[0m"; } -purple() { echo -e "\033[38;5;141m$1\033[0m"; } cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; } install_depends_apps() { - cyan "正在安装必备工具...." + cyan "正在安装必备工具..." opkg update >/dev/null 2>&1 for pkg in lsblk fdisk; do if opkg list-installed | grep -qw "$pkg"; then @@ -36,13 +33,12 @@ unmount_usb_device() { red "警告:无法卸载挂载点 $mount。可能有文件正在被访问或权限不足。" exit 1 } - blueinfo "U盘挂载点 $mount 卸载成功。" + green "U盘挂载点 $mount 卸载成功。" done } create_and_format_partitions() { local device=$1 - # 使用fdisk -l获取设备的总容量(以字节为单位)并转换为GB local total_bytes=$(fdisk -l $device | grep "Disk $device:" | awk '{print $5}') local total_gb=$(echo "$total_bytes" | awk '{print int($1/(1024*1024*1024))}') @@ -50,83 +46,69 @@ create_and_format_partitions() { part1_gb=$CUSTOM_OPKG_SIZE yellow "U盘总容量约为 $total_gb GB,您设置的自定义软件包大小为 ${part1_gb}GB。" else - # 计算10%的大小,以GB为单位 part1_gb=$((total_gb / 10)) yellow "U盘总容量约为 $total_gb GB,第一分区大小设置为U盘容量的10% 即 ${part1_gb}GB。" fi green "计划将第一分区分配给软件包 其大小为 ${part1_gb}GB" - cyan "没错~你没有看错,让我们任性的告别 容 量 焦 虑!" - # 创建分区并分配空间 + cyan "没错~你没有看错,让我们任性的告别容量焦虑!" + { - echo g # 创建一个新的空DOS分区表 - echo n # 添加一个新分区 - echo p # 主分区 - echo 1 # 分区号1 - echo # 第一个可用扇区(默认) - echo +${part1_gb}G # 为第一个分区分配计算出的GB数 - echo n # 添加第二个新分区 - echo p # 主分区 - echo 2 # 分区号2 - echo # 第一个可用扇区(默认,自动) - echo # 最后一个扇区(默认,使用剩余空间) - echo w # 写入并退出 + echo g + echo n + echo p + echo 1 + echo + echo +${part1_gb}G + echo n + echo p + echo 2 + echo + echo + echo w } | fdisk $device >/dev/null 2>&1 - # 给系统一点时间来识别新分区 sleep 5 - # 格式化第一个分区为EXT4 local new_partition1="${device}1" cyan "正在将 $new_partition1 格式化为EXT4文件系统..." mkfs.ext4 -F $new_partition1 >/dev/null 2>&1 - cyan "$new_partition1 已成功格式化为EXT4文件系统。" - green "第2分区 ${device}2 暂不格式化,未来您可分配给docker使用" + green "$new_partition1 已成功格式化为EXT4文件系统。" + yellow "第2分区 ${device}2 暂不格式化,未来您可自行分配使用" } # 换区到U盘 change_overlay_usb() { install_depends_apps - blueinfo "现在开始查找USB设备分区 请稍后......" + cyan "现在开始查找USB设备分区 请稍后..." local USB_PARTITION=$(lsblk -dn -o NAME,TRAN | awk '$2=="usb" {print "/dev/"$1; exit}') if [ -z "$USB_PARTITION" ]; then red "未找到USB磁盘。" exit 1 fi yellow "找到USB磁盘 $USB_PARTITION" - # 清零磁盘开始部分以清除分区表和文件系统签名 dd if=/dev/zero of=$USB_PARTITION bs=1M count=10 sync - # 卸载所有与该磁盘相关的挂载点 unmount_usb_device "$USB_PARTITION" - red "正在将U盘${USB_PARTITION}分为2个区 ..." + red "正在将U盘${USB_PARTITION}分为2个区..." create_and_format_partitions "$USB_PARTITION" - # U盘分区的挂载点 MOUNT_POINT="/mnt/usb_overlay" - # 临时目录用于复制数据 TMP_DIR="/tmp/overlay_backup" - # 创建挂载点目录 mkdir -p $MOUNT_POINT - # 挂载U盘分区 - cyan "重新挂载第一分区 ${USB_PARTITION}1 到 $MOUNT_POINT" + cyan "重新挂载第一分区 ${USB_PARTITION}1 到 $MOUNT_POINT" mount ${USB_PARTITION}1 $MOUNT_POINT >/dev/null 2>&1 - # 创建临时目录用于备份overlay数据 mkdir -p $TMP_DIR - # 复制当前overlay到临时目录 cp -a /overlay/. $TMP_DIR - # 将临时目录的数据复制到U盘 - blueinfo "正在拷贝 当前系统文件到U盘" + green "正在拷贝当前系统文件到U盘" cp -a $TMP_DIR/. $MOUNT_POINT - # 更新fstab配置,以便在启动时自动挂载U盘为overlay - blueinfo "正在更新启动时的配置文件" + cyan "正在更新启动时的配置文件" uci set fstab.overlay=mount uci set fstab.overlay.uuid="$(blkid -o value -s UUID ${USB_PARTITION}1)" uci set fstab.overlay.target="/overlay" uci commit fstab - # 清理临时目录 rm -rf $TMP_DIR cp /etc/config/fstab $MOUNT_POINT/fstab.bak - cyan "overlay更换分区完成 重启验证是否成功." + green "overlay更换分区完成 重启验证是否成功。" red "是否立即重启?(y/n)" read -r answer if [ "$answer" = "y" ] || [ -z "$answer" ]; then @@ -137,47 +119,15 @@ change_overlay_usb() { fi } -check_overlay_size() { - # 使用df命令获取/overlay分区的总大小(以1K块为单位) - OVERLAY_SIZE=$(df /overlay | awk '/\/overlay/{print $2}') - # 将1GB转换为1K块单位,即1GB = 1*1024*1024 1K块 - ONE_GB_IN_1K_BLOCKS=$((1024 * 1024)) - # 比较/overlay分区的大小是否大于1GB - if [ "$OVERLAY_SIZE" -gt "$ONE_GB_IN_1K_BLOCKS" ]; then - yellow "检测到您已经换区到U盘啦,可以继续" - else - echo "您还没有换区到U盘,请先执行选项1." - exit 1 - fi -} - -# 安装 Docker 和 dockerd -install_docker() { - check_overlay_size - green "正在更新 OPKG 软件包..." - opkg update >/dev/null 2>&1 - cyan "正在安装 Docker 及相关服务...请耐心等待一会...大约需要1-2分钟\n" - opkg install luci-app-dockerman >/dev/null 2>&1 - opkg install luci-i18n-dockerman-zh-cn >/dev/null 2>&1 - opkg install dockerd --force-depends >/dev/null 2>&1 - cyan "Docker 运行环境部署完成 重启后生效\n" - red "正在重启..." - reboot -} - # 重新绑定 rebind_usb_overlay() { - cyan "正在重新绑定U盘设备...." - if opkg list-installed | grep -qw "lsblk"; then - echo - else + cyan "正在重新绑定U盘设备..." + if ! opkg list-installed | grep -qw "lsblk"; then opkg update >/dev/null 2>&1 - if opkg install "lsblk" >/dev/null 2>&1; then - echo - else - red "$pkg 安装失败。" + opkg install "lsblk" >/dev/null 2>&1 || { + red "lsblk 安装失败。" exit 1 - fi + } fi local USB_DEVICE=$(lsblk -dn -o NAME,RM,TYPE | awk '$2=="1" && $3=="disk" {print "/dev/"$1; exit}') if [ -z "$USB_DEVICE" ]; then @@ -188,23 +138,21 @@ rebind_usb_overlay() { uci set fstab.overlay.uuid="$(blkid -o value -s UUID ${USB_DEVICE}1)" uci set fstab.overlay.target="/overlay" uci commit fstab - green "重新绑定成功! 重启后生效" + green "重新绑定成功!重启后生效" red "正在重启..." reboot } -#自定义软件包的大小 -#默认为U盘容量的10% +# 自定义软件包的大小,默认为U盘容量的10% custom_package_size() { while :; do echo "请输入想分配的软件包的大小(数字,单位:GB):" read size - # 检查输入是否为数字 if [[ $size =~ ^[0-9]+$ ]]; then CUSTOM_OPKG_SIZE=$size yellow "已设置软件包大小为:$CUSTOM_OPKG_SIZE GB" green "接下来,您可以执行第一项啦" - break # 跳出循环 + break else red "错误: 请输入一个有效的数字。" fi @@ -214,13 +162,12 @@ custom_package_size() { while true; do clear echo "***********************************************************************" - green " MT-3000 软件包更换分区助手 " + green " MT-3000 软件包更换分区助手" echo "**********************************************************************" echo cyan " 1. MT-3000 一键更换overlay分区到U盘" - cyan " 2. MT-3000 安装Docker" - cyan " 3. 自定义设置软件包大小(GB)" - light_yellow " 4. 重新绑定U盘" + cyan " 2. 自定义设置软件包大小(GB)" + yellow " 3. 重新绑定U盘" echo echo " Q. 退出本程序" echo @@ -228,20 +175,15 @@ while true; do echo case $choice in - 1) change_overlay_usb ;; 2) - install_docker - ;; - 3) custom_package_size ;; - 4) + 3) rebind_usb_overlay ;; - q | Q) echo "退出" exit 0 @@ -251,4 +193,4 @@ while true; do ;; esac read -p "按 Enter 键继续..." -done +done \ No newline at end of file diff --git a/mt3600.sh b/mt3600.sh index c6e1bf9..8db6834 100644 --- a/mt3600.sh +++ b/mt3600.sh @@ -1,442 +1,143 @@ #!/bin/sh -# 定义颜色输出函数 -red() { echo -e "\033[31m\033[01m$1\033[0m"; } -green() { echo -e "\033[32m\033[01m$1\033[0m"; } -yellow() { echo -e "\033[33m\033[01m$1\033[0m"; } -blue() { echo -e "\033[34m\033[01m$1\033[0m"; } -light_magenta() { echo -e "\033[95m\033[01m$1\033[0m"; } -light_yellow() { echo -e "\033[93m\033[01m$1\033[0m"; } -cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; } -third_party_source="https://istore.linkease.com/repo/all/nas_luci" +# GL-iNet MT3600 一键iStoreOS风格化脚本 +# by @wukongdaily + HTTP_HOST="https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main" -setup_base_init() { - #添加出处信息 - add_author_info - #添加安卓时间服务器 - add_dhcp_domain - ##设置时区 - uci set system.@system[0].zonename='Asia/Shanghai' - uci set system.@system[0].timezone='CST-8' - uci commit system - /etc/init.d/system reload +LIB_COMMON="/tmp/lib-common.sh" + +# 下载并加载公共库 +load_common_lib() { + if [ ! -f "$LIB_COMMON" ]; then + wget -O "$LIB_COMMON" "$HTTP_HOST/lib/lib-common.sh" 2>/dev/null || { + echo "下载公共库失败" + exit 1 + } + fi + . "$LIB_COMMON" } -## 安装应用商店和主题 +# MT3600 专用:架构配置 +add_arch() { + if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/mtarch/arch.conf; then + echo "下载 arch.conf 失败,脚本终止。" + exit 1 + fi +} + +# 安装应用商店和主题 install_istore_os_style() { - ##设置Argon 紫色主题 - do_install_argon_skin - #增加终端 - opkg install luci-i18n-ttyd-zh-cn - #默认安装必备工具SFTP 方便下载文件 比如finalshell等工具可以直接浏览路由器文件 - opkg install openssh-sftp-server - #默认使用体积很小的文件传输:系统——文件传输 - do_install_filetransfer - FILE_PATH="/etc/openwrt_release" - NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" - CONTENT=$(cat $FILE_PATH) - UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") - echo "$UPDATED_CONTENT" >$FILE_PATH -} -# 安装iStore -do_istore() { - echo "do_istore 64bit ==================>" - opkg update - # 定义目标 URL 和本地目录 - URL="https://repo.istoreos.com/repo/all/store/" - DIR="/tmp/ipk_store" - - # 创建目录 - mkdir -p "$DIR" - cd "$DIR" || exit 1 - - for ipk in $(wget -qO- "$URL" | grep -oE 'href="[^"]+\.ipk"' | cut -d'"' -f2); do - echo "下载 $ipk" - wget -q "${URL}${ipk}" - done - - # 安装所有下载的 .ipk 包 - opkg install ./*.ipk - + do_install_argon_skin + opkg install luci-i18n-ttyd-zh-cn + opkg install openssh-sftp-server + do_install_filetransfer + FILE_PATH="/etc/openwrt_release" + NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" + CONTENT=$(cat $FILE_PATH) + UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") + echo "$UPDATED_CONTENT" >$FILE_PATH } # 首页和网络向导 do_quickstart() { - download_lib_quickstart - download_luci_quickstart - opkg install /tmp/ipk_downloads/*.ipk - green "正在更新到最新版iStoreOS首页风格 " - TMPATH=/tmp/qstart - mkdir -p ${TMPATH} - app_aarch64='quickstart_0.11.13-r1_aarch64_generic.ipk' - app_ui='luci-app-quickstart_0.12.4-r1_all.ipk' - app_lng='luci-i18n-quickstart-zh-cn_25.090.31208-f5bf244_all.ipk' - wget $HTTP_HOST/newquickstart/$app_aarch64 -O ${TMPATH}/$app_aarch64 - wget $HTTP_HOST/newquickstart/$app_ui -O ${TMPATH}/$app_ui - wget $HTTP_HOST/newquickstart/$app_lng -O ${TMPATH}/$app_lng - opkg install ${TMPATH}/*.ipk - rm -rf ${TMPATH} - hide_ui_elements - #安装高级卸载 - advanced_uninstall - do_auto_install_ui_helper - green "首页风格安装完毕!请使用8080端口访问luci界面:http://192.168.8.1:8080" - green "作者更多动态务必收藏:https://tvhelper.cpolar.cn/" + download_lib_quickstart + download_luci_quickstart + opkg install /tmp/ipk_downloads/*.ipk + do_install_new_quickstart + advanced_uninstall + do_install_ui_helper_silent } -download_luci_quickstart() { - # 目标目录 - REPO_URL="https://repo.istoreos.com/repo/all/nas_luci/" - DOWNLOAD_DIR="/tmp/ipk_downloads" +# 自动安装UI辅助插件 +do_install_ui_helper_silent() { + local ipk_file="/tmp/glinjector_3.0.5-6_all.ipk" + local sha_file="${ipk_file}.sha256" - # 创建下载目录 - mkdir -p "$DOWNLOAD_DIR" + wget -O "$sha_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk.sha256" || return 1 + wget --user-agent="Mozilla/5.0" -O "$ipk_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk" || return 1 - # 获取目录索引并筛选 quickstart ipk 链接 - wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | - sed 's/href="//;s/"//' | while read -r FILE; do - echo "📦 正在下载: $FILE" - wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" - done + cd "$(dirname "$ipk_file")" + sha256sum -c "$sha_file" || { + rm -f "$ipk_file" + return 1 + } - echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" + opkg update + opkg install "$ipk_file" } -download_lib_quickstart() { - # 目标目录 - REPO_URL="https://repo.istoreos.com/repo/aarch64_cortex-a53/nas/" - DOWNLOAD_DIR="/tmp/ipk_downloads" - - # 创建下载目录 - mkdir -p "$DOWNLOAD_DIR" - - # 获取目录索引并筛选 quickstart ipk 链接 - wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | - sed 's/href="//;s/"//' | while read -r FILE; do - echo "📦 正在下载: $FILE" - wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" - done - - echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" -} - -# 判断系统是否为iStoreOS -is_iStoreOS() { - DISTRIB_ID=$(cat /etc/openwrt_release | grep "DISTRIB_ID" | cut -d "'" -f 2) - # 检查DISTRIB_ID的值是否等于'iStoreOS' - if [ "$DISTRIB_ID" = "iStoreOS" ]; then - return 0 # true - else - return 1 # false - fi -} - -## 去除opkg签名 -remove_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - sed -i '/option check_signature/d' "$opkg_conf" -} - -## 添加opkg签名 -add_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - echo "option check_signature 1" >>"$opkg_conf" -} - -#设置第三方软件源 -setup_software_source() { - ## 传入0和1 分别代表原始和第三方软件源 - if [ "$1" -eq 0 ]; then - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - ##如果是iStoreOS系统,还原软件源之后,要添加签名 - if is_iStoreOS; then - add_check_signature_option - else - echo - fi - # 还原软件源之后更新 - opkg update - elif [ "$1" -eq 1 ]; then - #传入1 代表设置第三方软件源 先要删掉签名 - remove_check_signature_option - # 先删除再添加以免重复 - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - echo "src/gz third_party_source $third_party_source" >>/etc/opkg/customfeeds.conf - # 设置第三方源后要更新 - opkg update - else - echo "Invalid option. Please provide 0 or 1." - fi -} - -# 添加主机名映射(解决安卓原生TV首次连不上wifi的问题) -add_dhcp_domain() { - local domain_name="time.android.com" - local domain_ip="203.107.6.88" - - # 检查是否存在相同的域名记录 - existing_records=$(uci show dhcp | grep "dhcp.@domain\[[0-9]\+\].name='$domain_name'") - if [ -z "$existing_records" ]; then - # 添加新的域名记录 - uci add dhcp domain - uci set "dhcp.@domain[-1].name=$domain_name" - uci set "dhcp.@domain[-1].ip=$domain_ip" - uci commit dhcp - else - echo - fi -} - -#添加出处信息 -add_author_info() { - uci set system.@system[0].description='wukongdaily' - uci set system.@system[0].notes='文档说明: - https://tvhelper.cpolar.cn/' - uci commit system -} - -##获取软路由型号信息 -get_router_name() { - model_info=$(cat /tmp/sysinfo/model) - echo "$model_info" -} - -get_router_hostname() { - hostname=$(uci get system.@system[0].hostname) - echo "$hostname 路由器" -} - -# 安装体积非常小的文件传输软件 默认上传位置/tmp/upload/ -do_install_filetransfer() { - mkdir -p /tmp/luci-app-filetransfer/ - cd /tmp/luci-app-filetransfer/ - wget --user-agent="Mozilla/5.0" -O luci-app-filetransfer_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-app-filetransfer_all.ipk" - wget --user-agent="Mozilla/5.0" -O luci-lib-fs_1.0-14_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-lib-fs_1.0-14_all.ipk" - opkg install *.ipk --force-depends -} -do_install_depends_ipk() { - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-lua-runtime_all.ipk" "$HTTP_HOST/theme/luci-lua-runtime_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/libopenssl3.ipk" "$HTTP_HOST/theme/libopenssl3.ipk" - opkg install "/tmp/luci-lua-runtime_all.ipk" - opkg install "/tmp/libopenssl3.ipk" -} -#单独安装argon主题 -do_install_argon_skin() { - echo "正在尝试安装argon主题......." - #下载和安装argon的依赖 - do_install_depends_ipk - # bug fix 由于2.3.1 最新版的luci-argon-theme 登录按钮没有中文匹配,而2.3版本字体不对。 - # 所以这里安装上一个版本2.2.9,考虑到主题皮肤并不需要长期更新,因此固定版本没问题 - opkg update - opkg install luci-lib-ipkg - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-theme-argon.ipk" "$HTTP_HOST/theme/luci-theme-argon-master_2.2.9.4_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-app-argon-config.ipk" "$HTTP_HOST/theme/luci-app-argon-config_0.9_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-i18n-argon-config-zh-cn.ipk" "$HTTP_HOST/theme/luci-i18n-argon-config-zh-cn.ipk" - cd /tmp/ - opkg install luci-theme-argon.ipk luci-app-argon-config.ipk luci-i18n-argon-config-zh-cn.ipk - # 检查上一个命令的返回值 - if [ $? -eq 0 ]; then - echo "argon主题 安装成功" - # 设置主题和语言 - uci set luci.main.mediaurlbase='/luci-static/argon' - uci set luci.main.lang='zh_cn' - uci commit - sed -i 's/value="<%:Login%>"/value="登录"/' /usr/lib/lua/luci/view/themes/argon/sysauth.htm - echo "重新登录web页面后, 查看新主题 " - else - echo "argon主题 安装失败! 建议再执行一次!再给我一个机会!事不过三!" - fi -} - -recovery() { - echo "⚠️ 警告:此操作将恢复出厂设置,所有配置将被清除!" - echo "⚠️ 请确保已备份必要数据。" - read -p "是否确定执行恢复出厂设置?(yes/[no]): " confirm - - if [ "$confirm" = "yes" ]; then - echo "正在执行恢复出厂设置..." - # 安静执行 firstboot,不显示其内部的提示信息 - firstboot -y >/dev/null 2>&1 - echo "操作完成,正在重启设备..." - reboot - else - echo "操作已取消。" - fi -} - -# 调整架构 兼容aarch64_generic -add_arch() { - if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/mtarch/arch.conf; then - echo "下载 arch.conf 失败,脚本终止。" - exit 1 - fi -} - -# 防止误操作 隐藏首页无用的元素 -hide_ui_elements() { - - TARGET="/www/luci-static/quickstart/style.css" - MARKER="/* hide custom luci elements */" - - # 如果没有追加过,就添加 - if ! grep -q "$MARKER" "$TARGET"; then - cat <>"$TARGET" - -$MARKER -/* 隐藏首页格式化按钮 */ -.value-data button { - display: none !important; -} - -/* 隐藏网络页的第 3 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(3) { - display: none !important; -} - -/* 隐藏网络页的第 5 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(5) { - display: none !important; -} - -/* 隐藏 feature-card.pink */ -#main > div > div.card-container > div.feature-card.pink { - display: none !important; -} - -EOF - echo "✅ 自定义元素已隐藏" - else - echo "⚠️ 无需重复操作" - fi -} - -#自定义风扇开始工作的温度 -set_glfan_temp() { - echo "请安装 个性化辅助UI" - echo "来解锁风扇温度自定义功能" -} - -# 安装[官方辅助UI]插件 by 论坛 iBelieve -do_install_ui_helper() { - echo "⚠️ 请您确保当前固件版本大于 4.7.2,若低于此版本建议先升级。" - read -p "👉 如果您已确认,请按 [回车] 继续;否则按 Ctrl+C 或输入任意内容后回车退出:" user_input - if [ -n "$user_input" ]; then - echo "🚫 用户取消安装。" - return 1 - fi - do_auto_install_ui_helper -} - -#自动安装[官方辅助UI] -do_auto_install_ui_helper() { - - local ipk_file="/tmp/glinjector_3.0.5-6_all.ipk" - local sha_file="${ipk_file}.sha256" - - echo "📥 正在下载 IPK 及 SHA256 校验文件..." - wget -O "$sha_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk.sha256" || { - echo "❌ 下载 SHA256 文件失败" - return 1 - } - - wget --user-agent="Mozilla/5.0" -O "$ipk_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk" || { - echo "❌ 下载 IPK 文件失败" - return 1 - } - - echo "🔐 正在进行 SHA256 校验..." - - cd "$(dirname "$ipk_file")" - sha256sum -c "$sha_file" || { - echo "❌ 校验失败:文件已损坏或未完整下载" - rm -f "$ipk_file" - return 1 - } - - echo "✅ 校验通过,开始安装..." - - opkg update - opkg install "$ipk_file" -} - -#高级卸载 -advanced_uninstall(){ - echo "📥 正在下载 高级卸载插件..." - wget -O /tmp/advanced_uninstall.ipk $HTTP_HOST/uninstall/advanced_uninstall.ipk - opkg update - opkg install /tmp/advanced_uninstall.ipk -} +# ============================================================================ +# 主程序 +# ============================================================================ +load_common_lib while true; do - clear - gl_name=$(get_router_name) - result="GL-iNet MT3600BE 一键iStoreOS风格化" - echo "***********************************************************************" - echo "* 一键安装工具箱(for gl-inet MT3600BE) by @wukongdaily 20251220 " - echo "**********************************************************************" - echo "*******支持的机型列表***************************************************" - green "*******GL-iNet MT3600BE********" - echo + clear + gl_name=$(get_router_name) + result="GL-iNet MT3600BE 一键iStoreOS风格化" + echo "***********************************************************************" + echo "* 一键安装工具箱(for gl-inet MT3600BE) by @wukongdaily" + echo "**********************************************************************" + echo "*******支持的机型列表***************************************************" + green "*******GL-iNet MT3600BE********" + echo - light_magenta " 1. $result" - echo - light_magenta " 2. 安装argon紫色主题" - echo - light_magenta " 3. 单独安装iStore商店" - echo - light_magenta " 4. 隐藏首页格式化按钮" - echo - light_magenta " 6. 安装个性化UI辅助插件(by VMatrices)" - echo - light_magenta " 7. 安装高级卸载插件" - echo - light_magenta " 8. 恢复出厂设置/重置路由器" - echo - echo " Q. 退出本程序" - echo - read -p "请选择一个选项: " choice + light_magenta " 1. $result" + echo + light_magenta " 2. 安装argon紫色主题" + echo + light_magenta " 3. 单独安装iStore商店" + echo + light_magenta " 4. 隐藏首页格式化按钮" + echo + light_magenta " 5. 设置风扇工作温度" + echo + light_magenta " 6. 安装个性化UI辅助插件(by VMatrices)" + echo + light_magenta " 7. 安装高级卸载插件" + echo + light_magenta " 8. 恢复出厂设置/重置路由器" + echo + echo " Q. 退出本程序" + echo + read -p "请选择一个选项: " choice - case $choice in + case $choice in + 1) + add_arch + install_istore_os_style + setup_base_init + do_istore + do_quickstart + ;; + 2) + do_install_argon_skin + ;; + 3) + do_istore + ;; + 4) + hide_ui_elements + ;; + 5) + set_glfan_temp + ;; + 6) + do_install_ui_helper + ;; + 7) + advanced_uninstall + ;; + 8) + recovery + ;; + q | Q) + echo "退出" + exit 0 + ;; + *) + echo "无效选项,请重新选择。" + ;; + esac - 1) - add_arch - #安装iStore风格 - install_istore_os_style - #基础必备设置 - setup_base_init - #安装iStore商店 - do_istore - #安装首页和网络向导 - do_quickstart - ;; - 2) - do_install_argon_skin - ;; - 3) - do_istore - ;; - 4) - hide_ui_elements - ;; - 5) - set_glfan_temp - ;; - 6) - do_install_ui_helper - ;; - 7) - advanced_uninstall - ;; - 8) - recovery - ;; - q | Q) - echo "退出" - exit 0 - ;; - *) - echo "无效选项,请重新选择。" - ;; - esac - - read -p "按 Enter 键继续..." + read -p "按 Enter 键继续..." done \ No newline at end of file diff --git a/mt5000.sh b/mt5000.sh index a935683..42e3197 100644 --- a/mt5000.sh +++ b/mt5000.sh @@ -1,442 +1,143 @@ #!/bin/sh -# 定义颜色输出函数 -red() { echo -e "\033[31m\033[01m$1\033[0m"; } -green() { echo -e "\033[32m\033[01m$1\033[0m"; } -yellow() { echo -e "\033[33m\033[01m$1\033[0m"; } -blue() { echo -e "\033[34m\033[01m$1\033[0m"; } -light_magenta() { echo -e "\033[95m\033[01m$1\033[0m"; } -light_yellow() { echo -e "\033[93m\033[01m$1\033[0m"; } -cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; } -third_party_source="https://istore.linkease.com/repo/all/nas_luci" +# GL-iNet MT5000 一键iStoreOS风格化脚本 +# by @wukongdaily + HTTP_HOST="https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main" -setup_base_init() { - #添加出处信息 - add_author_info - #添加安卓时间服务器 - add_dhcp_domain - ##设置时区 - uci set system.@system[0].zonename='Asia/Shanghai' - uci set system.@system[0].timezone='CST-8' - uci commit system - /etc/init.d/system reload +LIB_COMMON="/tmp/lib-common.sh" + +# 下载并加载公共库 +load_common_lib() { + if [ ! -f "$LIB_COMMON" ]; then + wget -O "$LIB_COMMON" "$HTTP_HOST/lib/lib-common.sh" 2>/dev/null || { + echo "下载公共库失败" + exit 1 + } + fi + . "$LIB_COMMON" } -## 安装应用商店和主题 +# MT5000 专用:架构配置 +add_arch() { + if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/mtarch/arch.conf; then + echo "下载 arch.conf 失败,脚本终止。" + exit 1 + fi +} + +# 安装应用商店和主题 install_istore_os_style() { - ##设置Argon 紫色主题 - do_install_argon_skin - #增加终端 - opkg install luci-i18n-ttyd-zh-cn - #默认安装必备工具SFTP 方便下载文件 比如finalshell等工具可以直接浏览路由器文件 - opkg install openssh-sftp-server - #默认使用体积很小的文件传输:系统——文件传输 - do_install_filetransfer - FILE_PATH="/etc/openwrt_release" - NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" - CONTENT=$(cat $FILE_PATH) - UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") - echo "$UPDATED_CONTENT" >$FILE_PATH -} -# 安装iStore -do_istore() { - echo "do_istore 64bit ==================>" - opkg update - # 定义目标 URL 和本地目录 - URL="https://repo.istoreos.com/repo/all/store/" - DIR="/tmp/ipk_store" - - # 创建目录 - mkdir -p "$DIR" - cd "$DIR" || exit 1 - - for ipk in $(wget -qO- "$URL" | grep -oE 'href="[^"]+\.ipk"' | cut -d'"' -f2); do - echo "下载 $ipk" - wget -q "${URL}${ipk}" - done - - # 安装所有下载的 .ipk 包 - opkg install ./*.ipk - + do_install_argon_skin + opkg install luci-i18n-ttyd-zh-cn + opkg install openssh-sftp-server + do_install_filetransfer + FILE_PATH="/etc/openwrt_release" + NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" + CONTENT=$(cat $FILE_PATH) + UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") + echo "$UPDATED_CONTENT" >$FILE_PATH } # 首页和网络向导 do_quickstart() { - download_lib_quickstart - download_luci_quickstart - opkg install /tmp/ipk_downloads/*.ipk - green "正在更新到最新版iStoreOS首页风格 " - TMPATH=/tmp/qstart - mkdir -p ${TMPATH} - app_aarch64='quickstart_0.11.13-r1_aarch64_generic.ipk' - app_ui='luci-app-quickstart_0.12.4-r1_all.ipk' - app_lng='luci-i18n-quickstart-zh-cn_25.090.31208-f5bf244_all.ipk' - wget $HTTP_HOST/newquickstart/$app_aarch64 -O ${TMPATH}/$app_aarch64 - wget $HTTP_HOST/newquickstart/$app_ui -O ${TMPATH}/$app_ui - wget $HTTP_HOST/newquickstart/$app_lng -O ${TMPATH}/$app_lng - opkg install ${TMPATH}/*.ipk - rm -rf ${TMPATH} - hide_ui_elements - #安装高级卸载 - advanced_uninstall - do_auto_install_ui_helper - green "首页风格安装完毕!请使用8080端口访问luci界面:http://192.168.8.1:8080" - green "作者更多动态务必收藏:https://tvhelper.cpolar.cn/" + download_lib_quickstart + download_luci_quickstart + opkg install /tmp/ipk_downloads/*.ipk + do_install_new_quickstart + advanced_uninstall + do_install_ui_helper_silent } -download_luci_quickstart() { - # 目标目录 - REPO_URL="https://repo.istoreos.com/repo/all/nas_luci/" - DOWNLOAD_DIR="/tmp/ipk_downloads" +# 自动安装UI辅助插件 +do_install_ui_helper_silent() { + local ipk_file="/tmp/glinjector_3.0.5-6_all.ipk" + local sha_file="${ipk_file}.sha256" - # 创建下载目录 - mkdir -p "$DOWNLOAD_DIR" + wget -O "$sha_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk.sha256" || return 1 + wget --user-agent="Mozilla/5.0" -O "$ipk_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk" || return 1 - # 获取目录索引并筛选 quickstart ipk 链接 - wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | - sed 's/href="//;s/"//' | while read -r FILE; do - echo "📦 正在下载: $FILE" - wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" - done + cd "$(dirname "$ipk_file")" + sha256sum -c "$sha_file" || { + rm -f "$ipk_file" + return 1 + } - echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" + opkg update + opkg install "$ipk_file" } -download_lib_quickstart() { - # 目标目录 - REPO_URL="https://repo.istoreos.com/repo/aarch64_cortex-a53/nas/" - DOWNLOAD_DIR="/tmp/ipk_downloads" - - # 创建下载目录 - mkdir -p "$DOWNLOAD_DIR" - - # 获取目录索引并筛选 quickstart ipk 链接 - wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | - sed 's/href="//;s/"//' | while read -r FILE; do - echo "📦 正在下载: $FILE" - wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" - done - - echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" -} - -# 判断系统是否为iStoreOS -is_iStoreOS() { - DISTRIB_ID=$(cat /etc/openwrt_release | grep "DISTRIB_ID" | cut -d "'" -f 2) - # 检查DISTRIB_ID的值是否等于'iStoreOS' - if [ "$DISTRIB_ID" = "iStoreOS" ]; then - return 0 # true - else - return 1 # false - fi -} - -## 去除opkg签名 -remove_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - sed -i '/option check_signature/d' "$opkg_conf" -} - -## 添加opkg签名 -add_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - echo "option check_signature 1" >>"$opkg_conf" -} - -#设置第三方软件源 -setup_software_source() { - ## 传入0和1 分别代表原始和第三方软件源 - if [ "$1" -eq 0 ]; then - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - ##如果是iStoreOS系统,还原软件源之后,要添加签名 - if is_iStoreOS; then - add_check_signature_option - else - echo - fi - # 还原软件源之后更新 - opkg update - elif [ "$1" -eq 1 ]; then - #传入1 代表设置第三方软件源 先要删掉签名 - remove_check_signature_option - # 先删除再添加以免重复 - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - echo "src/gz third_party_source $third_party_source" >>/etc/opkg/customfeeds.conf - # 设置第三方源后要更新 - opkg update - else - echo "Invalid option. Please provide 0 or 1." - fi -} - -# 添加主机名映射(解决安卓原生TV首次连不上wifi的问题) -add_dhcp_domain() { - local domain_name="time.android.com" - local domain_ip="203.107.6.88" - - # 检查是否存在相同的域名记录 - existing_records=$(uci show dhcp | grep "dhcp.@domain\[[0-9]\+\].name='$domain_name'") - if [ -z "$existing_records" ]; then - # 添加新的域名记录 - uci add dhcp domain - uci set "dhcp.@domain[-1].name=$domain_name" - uci set "dhcp.@domain[-1].ip=$domain_ip" - uci commit dhcp - else - echo - fi -} - -#添加出处信息 -add_author_info() { - uci set system.@system[0].description='wukongdaily' - uci set system.@system[0].notes='文档说明: - https://tvhelper.cpolar.cn/' - uci commit system -} - -##获取软路由型号信息 -get_router_name() { - model_info=$(cat /tmp/sysinfo/model) - echo "$model_info" -} - -get_router_hostname() { - hostname=$(uci get system.@system[0].hostname) - echo "$hostname 路由器" -} - -# 安装体积非常小的文件传输软件 默认上传位置/tmp/upload/ -do_install_filetransfer() { - mkdir -p /tmp/luci-app-filetransfer/ - cd /tmp/luci-app-filetransfer/ - wget --user-agent="Mozilla/5.0" -O luci-app-filetransfer_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-app-filetransfer_all.ipk" - wget --user-agent="Mozilla/5.0" -O luci-lib-fs_1.0-14_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-lib-fs_1.0-14_all.ipk" - opkg install *.ipk --force-depends -} -do_install_depends_ipk() { - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-lua-runtime_all.ipk" "$HTTP_HOST/theme/luci-lua-runtime_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/libopenssl3.ipk" "$HTTP_HOST/theme/libopenssl3.ipk" - opkg install "/tmp/luci-lua-runtime_all.ipk" - opkg install "/tmp/libopenssl3.ipk" -} -#单独安装argon主题 -do_install_argon_skin() { - echo "正在尝试安装argon主题......." - #下载和安装argon的依赖 - do_install_depends_ipk - # bug fix 由于2.3.1 最新版的luci-argon-theme 登录按钮没有中文匹配,而2.3版本字体不对。 - # 所以这里安装上一个版本2.2.9,考虑到主题皮肤并不需要长期更新,因此固定版本没问题 - opkg update - opkg install luci-lib-ipkg - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-theme-argon.ipk" "$HTTP_HOST/theme/luci-theme-argon-master_2.2.9.4_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-app-argon-config.ipk" "$HTTP_HOST/theme/luci-app-argon-config_0.9_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-i18n-argon-config-zh-cn.ipk" "$HTTP_HOST/theme/luci-i18n-argon-config-zh-cn.ipk" - cd /tmp/ - opkg install luci-theme-argon.ipk luci-app-argon-config.ipk luci-i18n-argon-config-zh-cn.ipk - # 检查上一个命令的返回值 - if [ $? -eq 0 ]; then - echo "argon主题 安装成功" - # 设置主题和语言 - uci set luci.main.mediaurlbase='/luci-static/argon' - uci set luci.main.lang='zh_cn' - uci commit - sed -i 's/value="<%:Login%>"/value="登录"/' /usr/lib/lua/luci/view/themes/argon/sysauth.htm - echo "重新登录web页面后, 查看新主题 " - else - echo "argon主题 安装失败! 建议再执行一次!再给我一个机会!事不过三!" - fi -} - -recovery() { - echo "⚠️ 警告:此操作将恢复出厂设置,所有配置将被清除!" - echo "⚠️ 请确保已备份必要数据。" - read -p "是否确定执行恢复出厂设置?(yes/[no]): " confirm - - if [ "$confirm" = "yes" ]; then - echo "正在执行恢复出厂设置..." - # 安静执行 firstboot,不显示其内部的提示信息 - firstboot -y >/dev/null 2>&1 - echo "操作完成,正在重启设备..." - reboot - else - echo "操作已取消。" - fi -} - -# 调整架构 兼容aarch64_generic -add_arch() { - if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/mtarch/arch.conf; then - echo "下载 arch.conf 失败,脚本终止。" - exit 1 - fi -} - -# 防止误操作 隐藏首页无用的元素 -hide_ui_elements() { - - TARGET="/www/luci-static/quickstart/style.css" - MARKER="/* hide custom luci elements */" - - # 如果没有追加过,就添加 - if ! grep -q "$MARKER" "$TARGET"; then - cat <>"$TARGET" - -$MARKER -/* 隐藏首页格式化按钮 */ -.value-data button { - display: none !important; -} - -/* 隐藏网络页的第 3 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(3) { - display: none !important; -} - -/* 隐藏网络页的第 5 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(5) { - display: none !important; -} - -/* 隐藏 feature-card.pink */ -#main > div > div.card-container > div.feature-card.pink { - display: none !important; -} - -EOF - echo "✅ 自定义元素已隐藏" - else - echo "⚠️ 无需重复操作" - fi -} - -#自定义风扇开始工作的温度 -set_glfan_temp() { - echo "请安装 个性化辅助UI" - echo "来解锁风扇温度自定义功能" -} - -# 安装[官方辅助UI]插件 by 论坛 iBelieve -do_install_ui_helper() { - echo "⚠️ 请您确保当前固件版本大于 4.7.2,若低于此版本建议先升级。" - read -p "👉 如果您已确认,请按 [回车] 继续;否则按 Ctrl+C 或输入任意内容后回车退出:" user_input - if [ -n "$user_input" ]; then - echo "🚫 用户取消安装。" - return 1 - fi - do_auto_install_ui_helper -} - -#自动安装[官方辅助UI] -do_auto_install_ui_helper() { - - local ipk_file="/tmp/glinjector_3.0.5-6_all.ipk" - local sha_file="${ipk_file}.sha256" - - echo "📥 正在下载 IPK 及 SHA256 校验文件..." - wget -O "$sha_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk.sha256" || { - echo "❌ 下载 SHA256 文件失败" - return 1 - } - - wget --user-agent="Mozilla/5.0" -O "$ipk_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk" || { - echo "❌ 下载 IPK 文件失败" - return 1 - } - - echo "🔐 正在进行 SHA256 校验..." - - cd "$(dirname "$ipk_file")" - sha256sum -c "$sha_file" || { - echo "❌ 校验失败:文件已损坏或未完整下载" - rm -f "$ipk_file" - return 1 - } - - echo "✅ 校验通过,开始安装..." - - opkg update - opkg install "$ipk_file" -} - -#高级卸载 -advanced_uninstall(){ - echo "📥 正在下载 高级卸载插件..." - wget -O /tmp/advanced_uninstall.ipk $HTTP_HOST/uninstall/advanced_uninstall.ipk - opkg update - opkg install /tmp/advanced_uninstall.ipk -} +# ============================================================================ +# 主程序 +# ============================================================================ +load_common_lib while true; do - clear - gl_name=$(get_router_name) - result="GL-iNet MT5000 一键iStoreOS风格化" - echo "***********************************************************************" - echo "* 一键安装工具箱(for gl-inet MT5000) by @wukongdaily 20260116 " - echo "**********************************************************************" - echo "*******支持的机型列表***************************************************" - green "*******GL-iNet MT5000********" - echo + clear + gl_name=$(get_router_name) + result="GL-iNet MT5000 一键iStoreOS风格化" + echo "***********************************************************************" + echo "* 一键安装工具箱(for gl-inet MT5000) by @wukongdaily" + echo "**********************************************************************" + echo "*******支持的机型列表***************************************************" + green "*******GL-iNet MT5000********" + echo - light_magenta " 1. $result" - echo - light_magenta " 2. 安装argon紫色主题" - echo - light_magenta " 3. 单独安装iStore商店" - echo - light_magenta " 4. 隐藏首页格式化按钮" - echo - light_magenta " 6. 安装个性化UI辅助插件(by VMatrices)" - echo - light_magenta " 7. 安装高级卸载插件" - echo - light_magenta " 8. 恢复出厂设置/重置路由器" - echo - echo " Q. 退出本程序" - echo - read -p "请选择一个选项: " choice + light_magenta " 1. $result" + echo + light_magenta " 2. 安装argon紫色主题" + echo + light_magenta " 3. 单独安装iStore商店" + echo + light_magenta " 4. 隐藏首页格式化按钮" + echo + light_magenta " 5. 设置风扇工作温度" + echo + light_magenta " 6. 安装个性化UI辅助插件(by VMatrices)" + echo + light_magenta " 7. 安装高级卸载插件" + echo + light_magenta " 8. 恢复出厂设置/重置路由器" + echo + echo " Q. 退出本程序" + echo + read -p "请选择一个选项: " choice - case $choice in + case $choice in + 1) + add_arch + install_istore_os_style + setup_base_init + do_istore + do_quickstart + ;; + 2) + do_install_argon_skin + ;; + 3) + do_istore + ;; + 4) + hide_ui_elements + ;; + 5) + set_glfan_temp + ;; + 6) + do_install_ui_helper + ;; + 7) + advanced_uninstall + ;; + 8) + recovery + ;; + q | Q) + echo "退出" + exit 0 + ;; + *) + echo "无效选项,请重新选择。" + ;; + esac - 1) - add_arch - #安装iStore风格 - install_istore_os_style - #基础必备设置 - setup_base_init - #安装iStore商店 - do_istore - #安装首页和网络向导 - do_quickstart - ;; - 2) - do_install_argon_skin - ;; - 3) - do_istore - ;; - 4) - hide_ui_elements - ;; - 5) - set_glfan_temp - ;; - 6) - do_install_ui_helper - ;; - 7) - advanced_uninstall - ;; - 8) - recovery - ;; - q | Q) - echo "退出" - exit 0 - ;; - *) - echo "无效选项,请重新选择。" - ;; - esac - - read -p "按 Enter 键继续..." + read -p "按 Enter 键继续..." done \ No newline at end of file diff --git a/reinstall_istore.sh b/reinstall_istore.sh deleted file mode 100644 index b19ccc4..0000000 --- a/reinstall_istore.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -## 安装iStore 参考 https://github.com/linkease/istore -opkg update -ISTORE_REPO=https://istore.linkease.com/repo/all/store -FCURL="curl --fail --show-error" - -curl -V >/dev/null 2>&1 || { - echo "prereq: install curl" - opkg info curl | grep -Fqm1 curl || opkg update - opkg install curl -} - -IPK=$($FCURL "$ISTORE_REPO/Packages.gz" | zcat | grep -m1 '^Filename: luci-app-store.*\.ipk$' | sed -n -e 's/^Filename: \(.\+\)$/\1/p') - -[ -n "$IPK" ] || exit 1 - -$FCURL "$ISTORE_REPO/$IPK" | tar -xzO ./data.tar.gz | tar -xzO ./bin/is-opkg >/tmp/is-opkg - -[ -s "/tmp/is-opkg" ] || exit 1 - -chmod 755 /tmp/is-opkg -/tmp/is-opkg update -# /tmp/is-opkg install taskd -/tmp/is-opkg opkg install --force-reinstall luci-lib-taskd luci-lib-xterm -/tmp/is-opkg opkg install --force-reinstall luci-app-store || exit $? -[ -s "/etc/init.d/tasks" ] || /tmp/is-opkg opkg install --force-reinstall taskd -[ -s "/usr/lib/lua/luci/cbi.lua" ] || /tmp/is-opkg opkg install luci-compat >/dev/null 2>&1 diff --git a/try.sh b/try.sh deleted file mode 100644 index faba334..0000000 --- a/try.sh +++ /dev/null @@ -1,432 +0,0 @@ -#!/bin/sh -# 定义颜色输出函数 -red() { echo -e "\033[31m\033[01m$1\033[0m"; } -green() { echo -e "\033[32m\033[01m$1\033[0m"; } -yellow() { echo -e "\033[33m\033[01m$1\033[0m"; } -blue() { echo -e "\033[34m\033[01m$1\033[0m"; } -light_magenta() { echo -e "\033[95m\033[01m$1\033[0m"; } -light_yellow() { echo -e "\033[93m\033[01m$1\033[0m"; } -cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; } -third_party_source="https://istore.linkease.com/repo/all/nas_luci" -HTTP_HOST="https://cafe.cpolar.cn/wkdaily/gl/raw/branch/main" -setup_base_init() { - #添加出处信息 - add_author_info - #添加安卓时间服务器 - add_dhcp_domain - ##设置时区 - uci set system.@system[0].zonename='Asia/Shanghai' - uci set system.@system[0].timezone='CST-8' - uci commit system - /etc/init.d/system reload -} - -## 安装应用商店和主题 -install_istore_os_style() { - ##设置Argon 紫色主题 - do_install_argon_skin - #增加终端 - opkg install luci-i18n-ttyd-zh-cn - #默认安装必备工具SFTP 方便下载文件 比如finalshell等工具可以直接浏览路由器文件 - opkg install openssh-sftp-server - #默认使用体积很小的文件传输:系统——文件传输 - do_install_filetransfer - FILE_PATH="/etc/openwrt_release" - NEW_DESCRIPTION="Openwrt like iStoreOS Style by wukongdaily" - CONTENT=$(cat $FILE_PATH) - UPDATED_CONTENT=$(echo "$CONTENT" | sed "s/DISTRIB_DESCRIPTION='[^']*'/DISTRIB_DESCRIPTION='$NEW_DESCRIPTION'/") - echo "$UPDATED_CONTENT" >$FILE_PATH -} -# 安装iStore -do_istore() { - echo "do_istore 64bit ==================>" - opkg update - # 定义目标 URL 和本地目录 - URL="https://repo.istoreos.com/repo/all/store/" - DIR="/tmp/ipk_store" - - # 创建目录 - mkdir -p "$DIR" - cd "$DIR" || exit 1 - - for ipk in $(wget -qO- "$URL" | grep -oE 'href="[^"]+\.ipk"' | cut -d'"' -f2); do - echo "下载 $ipk" - wget -q "${URL}${ipk}" - done - - # 安装所有下载的 .ipk 包 - opkg install ./*.ipk - -} - -# 首页和网络向导 -do_quickstart() { - download_lib_quickstart - download_luci_quickstart - opkg install /tmp/ipk_downloads/*.ipk - hide_ui_elements - #安装高级卸载 - advanced_uninstall - do_auto_install_ui_helper - green "首页风格安装完毕!请使用8080端口访问luci界面:http://192.168.8.1:8080" - green "作者更多动态务必收藏:https://tvhelper.cpolar.cn/" -} - -download_luci_quickstart() { - # 目标目录 - REPO_URL="https://repo.istoreos.com/repo/all/nas_luci/" - DOWNLOAD_DIR="/tmp/ipk_downloads" - - # 创建下载目录 - mkdir -p "$DOWNLOAD_DIR" - - # 获取目录索引并筛选 quickstart ipk 链接 - wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | - sed 's/href="//;s/"//' | while read -r FILE; do - echo "📦 正在下载: $FILE" - wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" - done - - echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" -} - -download_lib_quickstart() { - # 目标目录 - REPO_URL="https://repo.istoreos.com/repo/aarch64_cortex-a53/nas/" - DOWNLOAD_DIR="/tmp/ipk_downloads" - - # 创建下载目录 - mkdir -p "$DOWNLOAD_DIR" - - # 获取目录索引并筛选 quickstart ipk 链接 - wget -qO- "$REPO_URL" | grep -oE 'href="[^"]*quickstart[^"]*\.ipk"' | - sed 's/href="//;s/"//' | while read -r FILE; do - echo "📦 正在下载: $FILE" - wget -q -P "$DOWNLOAD_DIR" "$REPO_URL$FILE" - done - - echo "✅ 所有 quickstart 相关 IPK 文件已下载到: $DOWNLOAD_DIR" -} - -# 判断系统是否为iStoreOS -is_iStoreOS() { - DISTRIB_ID=$(cat /etc/openwrt_release | grep "DISTRIB_ID" | cut -d "'" -f 2) - # 检查DISTRIB_ID的值是否等于'iStoreOS' - if [ "$DISTRIB_ID" = "iStoreOS" ]; then - return 0 # true - else - return 1 # false - fi -} - -## 去除opkg签名 -remove_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - sed -i '/option check_signature/d' "$opkg_conf" -} - -## 添加opkg签名 -add_check_signature_option() { - local opkg_conf="/etc/opkg.conf" - echo "option check_signature 1" >>"$opkg_conf" -} - -#设置第三方软件源 -setup_software_source() { - ## 传入0和1 分别代表原始和第三方软件源 - if [ "$1" -eq 0 ]; then - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - ##如果是iStoreOS系统,还原软件源之后,要添加签名 - if is_iStoreOS; then - add_check_signature_option - else - echo - fi - # 还原软件源之后更新 - opkg update - elif [ "$1" -eq 1 ]; then - #传入1 代表设置第三方软件源 先要删掉签名 - remove_check_signature_option - # 先删除再添加以免重复 - echo "# add your custom package feeds here" >/etc/opkg/customfeeds.conf - echo "src/gz third_party_source $third_party_source" >>/etc/opkg/customfeeds.conf - # 设置第三方源后要更新 - opkg update - else - echo "Invalid option. Please provide 0 or 1." - fi -} - -# 添加主机名映射(解决安卓原生TV首次连不上wifi的问题) -add_dhcp_domain() { - local domain_name="time.android.com" - local domain_ip="203.107.6.88" - - # 检查是否存在相同的域名记录 - existing_records=$(uci show dhcp | grep "dhcp.@domain\[[0-9]\+\].name='$domain_name'") - if [ -z "$existing_records" ]; then - # 添加新的域名记录 - uci add dhcp domain - uci set "dhcp.@domain[-1].name=$domain_name" - uci set "dhcp.@domain[-1].ip=$domain_ip" - uci commit dhcp - else - echo - fi -} - -#添加出处信息 -add_author_info() { - uci set system.@system[0].description='wukongdaily' - uci set system.@system[0].notes='文档说明: - https://tvhelper.cpolar.cn/' - uci commit system -} - -##获取软路由型号信息 -get_router_name() { - model_info=$(cat /tmp/sysinfo/model) - echo "$model_info" -} - -get_router_hostname() { - hostname=$(uci get system.@system[0].hostname) - echo "$hostname 路由器" -} - -# 安装体积非常小的文件传输软件 默认上传位置/tmp/upload/ -do_install_filetransfer() { - mkdir -p /tmp/luci-app-filetransfer/ - cd /tmp/luci-app-filetransfer/ - wget --user-agent="Mozilla/5.0" -O luci-app-filetransfer_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-app-filetransfer_all.ipk" - wget --user-agent="Mozilla/5.0" -O luci-lib-fs_1.0-14_all.ipk "$HTTP_HOST/luci-app-filetransfer/luci-lib-fs_1.0-14_all.ipk" - opkg install *.ipk --force-depends -} -do_install_depends_ipk() { - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-lua-runtime_all.ipk" "$HTTP_HOST/theme/luci-lua-runtime_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/libopenssl3.ipk" "$HTTP_HOST/theme/libopenssl3.ipk" - opkg install "/tmp/luci-lua-runtime_all.ipk" - opkg install "/tmp/libopenssl3.ipk" -} -#单独安装argon主题 -do_install_argon_skin() { - echo "正在尝试安装argon主题......." - #下载和安装argon的依赖 - do_install_depends_ipk - # bug fix 由于2.3.1 最新版的luci-argon-theme 登录按钮没有中文匹配,而2.3版本字体不对。 - # 所以这里安装上一个版本2.2.9,考虑到主题皮肤并不需要长期更新,因此固定版本没问题 - opkg update - opkg install luci-lib-ipkg - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-theme-argon.ipk" "$HTTP_HOST/theme/luci-theme-argon-master_2.2.9.4_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-app-argon-config.ipk" "$HTTP_HOST/theme/luci-app-argon-config_0.9_all.ipk" - wget --user-agent="Mozilla/5.0" -O "/tmp/luci-i18n-argon-config-zh-cn.ipk" "$HTTP_HOST/theme/luci-i18n-argon-config-zh-cn.ipk" - cd /tmp/ - opkg install luci-theme-argon.ipk luci-app-argon-config.ipk luci-i18n-argon-config-zh-cn.ipk - # 检查上一个命令的返回值 - if [ $? -eq 0 ]; then - echo "argon主题 安装成功" - # 设置主题和语言 - uci set luci.main.mediaurlbase='/luci-static/argon' - uci set luci.main.lang='zh_cn' - uci commit - sed -i 's/value="<%:Login%>"/value="登录"/' /usr/lib/lua/luci/view/themes/argon/sysauth.htm - echo "重新登录web页面后, 查看新主题 " - else - echo "argon主题 安装失败! 建议再执行一次!再给我一个机会!事不过三!" - fi -} - -recovery() { - echo "⚠️ 警告:此操作将恢复出厂设置,所有配置将被清除!" - echo "⚠️ 请确保已备份必要数据。" - read -p "是否确定执行恢复出厂设置?(yes/[no]): " confirm - - if [ "$confirm" = "yes" ]; then - echo "正在执行恢复出厂设置..." - # 安静执行 firstboot,不显示其内部的提示信息 - firstboot -y >/dev/null 2>&1 - echo "操作完成,正在重启设备..." - reboot - else - echo "操作已取消。" - fi -} - -# 调整架构 兼容aarch64_generic -add_arch() { - if ! wget -O /etc/opkg/arch.conf $HTTP_HOST/mtarch/arch.conf; then - echo "下载 arch.conf 失败,脚本终止。" - exit 1 - fi -} - -# 防止误操作 隐藏首页无用的元素 -hide_ui_elements() { - - TARGET="/www/luci-static/quickstart/style.css" - MARKER="/* hide custom luci elements */" - - # 如果没有追加过,就添加 - if ! grep -q "$MARKER" "$TARGET"; then - cat <>"$TARGET" - -$MARKER -/* 隐藏首页格式化按钮 */ -.value-data button { - display: none !important; -} - -/* 隐藏网络页的第 3 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(3) { - display: none !important; -} - -/* 隐藏网络页的第 5 个 item */ -#main > div > div.network-container.align-c > div > div > div:nth-child(5) { - display: none !important; -} - -/* 隐藏 feature-card.pink */ -#main > div > div.card-container > div.feature-card.pink { - display: none !important; -} - -EOF - echo "✅ 自定义元素已隐藏" - else - echo "⚠️ 无需重复操作" - fi -} - -#自定义风扇开始工作的温度 -set_glfan_temp() { - echo "请安装 个性化辅助UI" - echo "来解锁风扇温度自定义功能" -} - -# 安装[官方辅助UI]插件 by 论坛 iBelieve -do_install_ui_helper() { - echo "⚠️ 请您确保当前固件版本大于 4.7.2,若低于此版本建议先升级。" - read -p "👉 如果您已确认,请按 [回车] 继续;否则按 Ctrl+C 或输入任意内容后回车退出:" user_input - if [ -n "$user_input" ]; then - echo "🚫 用户取消安装。" - return 1 - fi - do_auto_install_ui_helper -} - -#自动安装[官方辅助UI] -do_auto_install_ui_helper() { - - local ipk_file="/tmp/glinjector_3.0.5-6_all.ipk" - local sha_file="${ipk_file}.sha256" - - echo "📥 正在下载 IPK 及 SHA256 校验文件..." - wget -O "$sha_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk.sha256" || { - echo "❌ 下载 SHA256 文件失败" - return 1 - } - - wget --user-agent="Mozilla/5.0" -O "$ipk_file" "$HTTP_HOST/ui/glinjector_3.0.5-6_all.ipk" || { - echo "❌ 下载 IPK 文件失败" - return 1 - } - - echo "🔐 正在进行 SHA256 校验..." - - cd "$(dirname "$ipk_file")" - sha256sum -c "$sha_file" || { - echo "❌ 校验失败:文件已损坏或未完整下载" - rm -f "$ipk_file" - return 1 - } - - echo "✅ 校验通过,开始安装..." - - opkg update - opkg install "$ipk_file" -} - -#高级卸载 -advanced_uninstall(){ - echo "📥 正在下载 高级卸载插件..." - wget -O /tmp/advanced_uninstall.run $HTTP_HOST/luci-app-uninstall.run && chmod +x /tmp/advanced_uninstall.run - sh /tmp/advanced_uninstall.run -} - -while true; do - clear - gl_name=$(get_router_name) - result="GL-iNet MT3600BE 一键iStoreOS风格化" - echo "***********************************************************************" - echo "* 一键安装工具箱(for gl-inet MT3600BE) by @wukongdaily 20251220 " - echo "**********************************************************************" - echo "*******支持的机型列表***************************************************" - green "*******GL-iNet MT3600BE********" - echo - - light_magenta " 1. $result" - echo - light_magenta " 2. 安装argon紫色主题" - echo - light_magenta " 3. 单独安装iStore商店" - echo - light_magenta " 4. 隐藏首页格式化按钮" - echo - light_magenta " 5. 自定义风扇启动温度" - echo - light_magenta " 6. 安装个性化UI辅助插件(by VMatrices)" - echo - light_magenta " 7. 安装高级卸载插件" - echo - light_magenta " 8. 恢复出厂设置/重置路由器" - echo - echo " Q. 退出本程序" - echo - read -p "请选择一个选项: " choice - - case $choice in - - 1) - add_arch - #安装iStore风格 - install_istore_os_style - #基础必备设置 - setup_base_init - #安装iStore商店 - do_istore - #安装首页和网络向导 - do_quickstart - ;; - 2) - do_install_argon_skin - ;; - 3) - do_istore - ;; - 4) - hide_ui_elements - ;; - 5) - set_glfan_temp - ;; - 6) - do_install_ui_helper - ;; - 7) - advanced_uninstall - ;; - 8) - recovery - ;; - q | Q) - echo "退出" - exit 0 - ;; - *) - echo "无效选项,请重新选择。" - ;; - esac - - read -p "按 Enter 键继续..." -done \ No newline at end of file