#!/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" } third_party_source="https://istore.linkease.com/repo/all/nas_luci" 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 } ## 安装应用商店和主题 install_istore_os_style() { ##设置Argon 紫色主题 do_install_argon_skin #增加首页终端图标 opkg install ttyd is-opkg install 'app-meta-ddnsto' #安装首页需要的文件管理功能 is-opkg install 'app-meta-linkease' # 安装磁盘管理 is-opkg install 'app-meta-diskman' # 若已安装iStore商店则在概览中追加iStore字样 if ! grep -q " like iStoreOS" /tmp/sysinfo/model; then sed -i '1s/$/ like iStoreOS/' /tmp/sysinfo/model fi } # 安装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=48 uci set glfan.@globals[0].warn_temperature=48 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://github.com/wukongdaily/gl-inet-onescript' 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="https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/mt-3000/distfeeds.conf" wget -O /etc/opkg/distfeeds.conf ${mt3000_opkg} ;; *2500*) echo "Router name contains '2500'." mt2500a_opkg="https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/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="https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/mt-6000/distfeeds-5.4.conf" wget -O /etc/opkg/distfeeds.conf ${mt6000_opkg} # 更换5.4.238 内核之后 缺少的依赖 mkdir -p /tmp/mt6000 wget -O /tmp/mt6000/script-utils.ipk "https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/mt-6000/script-utils.ipk?$(date +%s)" wget -O /tmp/mt6000/mdadm.ipk "https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/mt-6000/mdadm.ipk?$(date +%s)" wget -O /tmp/mt6000/lsblk.ipk "https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/mt-6000/lsblk.ipk?$(date +%s)" opkg update if [ -f "/tmp/mt6000/lsblk.ipk" ]; then # 先卸载之前安装过的lsblk,确保使用的是正确的lsblk opkg remove lsblk fi opkg install /tmp/mt6000/*.ipk ;; 5.15*) mt6000_opkg="https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/mt-6000/distfeeds.conf" wget -O /etc/opkg/distfeeds.conf ${mt6000_opkg} ;; *) echo "Unsupported kernel version: $kernel_version" return 1 ;; esac } do_luci_app_adguardhome() { setup_software_source 0 opkg remove gl-sdk4-ui-adguardhome opkg remove gl-sdk4-adguardhome opkg install adguardhome echo "请访问 http://"$(uci get network.lan.ipaddr)":3000 初始化设置adguardhome " } 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 yellow "恭喜您!现在你的路由器已经变成iStoreOS风格啦!" green "如果没有首页和网络向导,可以执行第8项 更新luci_app_quickstart" else red "请先执行第一项 一键iStoreOS风格化" fi } do_install_depends_ipk() { wget -O "/tmp/luci-lua-runtime_all.ipk" "https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/theme/luci-lua-runtime_all.ipk" wget -O "/tmp/libopenssl3.ipk" "https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/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 -O "/tmp/luci-theme-argon.ipk" "https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/theme/luci-theme-argon-master_2.2.9.4_all.ipk" wget -O "/tmp/luci-app-argon-config.ipk" "https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/theme/luci-app-argon-config_0.9_all.ipk" wget -O "/tmp/luci-i18n-argon-config-zh-cn.ipk" "https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/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 https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/gl-inet.sh?$(date +%s) && chmod +x gl-inet.sh echo "脚本已更新并保存在当前目录 gl-inet.sh,现在将执行新脚本。" ./gl-inet.sh exit 0 } 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) v1.1 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 "**********************************************************************" echo light_magenta " 1. $result" echo echo " 2. 设置自定义软件源" echo " 3. 删除自定义软件源" echo echo " 4. 设置风扇开始工作的温度(仅限MT3000)" echo " 5. 恢复原厂OPKG配置软件包" echo echo " 6. 安装GL原厂Adguardhome(10MB)" echo " 7. 安装luci-app-wireguard" echo " 8. 更新luci-app-quickstart" echo " 9. 安装Argon紫色主题" echo "10. 安装文件管理器" light_magenta "11. 安装Docker" echo "12. 安装Docker Compose(开发中)" light_magenta "13. 更新脚本" echo echo " Q. 退出本程序" echo read -p "请选择一个选项: " choice case $choice in 1) 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) do_luci_app_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 "如果U盘安装过其他系统或者做过引导盘\n请先在电脑处理为一个单独分区" red "确定要继续吗(y|n)" read -r answer if [ "$answer" = "y" ] || [ -z "$answer" ]; then wget -q -O /tmp/do_docker.sh https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/docker/do_docker.sh && chmod +x /tmp/do_docker.sh && /tmp/do_docker.sh else yellow "已退出Docker安装流程" fi ;; 12) yellow "开发中......" ;; 13) update_myself ;; q | Q) echo "退出" exit 0 ;; *) echo "无效选项,请重新选择。" ;; esac read -p "按 Enter 键继续..." done