refactor: 重构项目结构,提取公共函数库,删除无用文件和Docker功能
主要变更: - 创建 lib/lib-common.sh 公共函数库,减少约2300行重复代码 - 重构所有机型脚本,改为从远程加载公共库 - 删除 Docker 安装功能(路由器运行Docker不稳定) - 删除无用文件:reinstall_istore.sh、try.sh、index.html、docker目录 - 修改 AdGuardHome 函数为操作提示 - 更新 README.md,添加项目结构说明
This commit is contained in:
78
README.md
78
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
|
||||
580
be3600.sh
580
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 <<EOF >>"$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
|
||||
583
be6500.sh
583
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 <<EOF >>"$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
|
||||
@@ -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 <<EOF >/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
|
||||
785
gl-inet-op24.sh
785
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 <<EOF >>"$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
|
||||
1004
gl-inet.sh
1004
gl-inet.sh
File diff suppressed because it is too large
Load Diff
26
index.html
26
index.html
@@ -1,26 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>mt3000备用脚本</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify/lib/themes/vue.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">加载中...</div>
|
||||
|
||||
<script>
|
||||
window.$docsify = {
|
||||
name: 'mt3000备用脚本',
|
||||
repo: '',
|
||||
|
||||
// 自动跳转的首页内容(默认就是 README.md)
|
||||
loadSidebar: true, // 启用侧边栏
|
||||
loadNavbar: true, // 启用顶部导航栏
|
||||
subMaxLevel: 2, // 支持多级标题
|
||||
}
|
||||
</script>
|
||||
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify/lib/docsify.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
410
lib/lib-common.sh
Normal file
410
lib/lib-common.sh
Normal file
@@ -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 <<EOF >>"$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
|
||||
}
|
||||
4
main.sh
4
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
|
||||
|
||||
@@ -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
|
||||
541
mt3600.sh
541
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 <<EOF >>"$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
|
||||
541
mt5000.sh
541
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 <<EOF >>"$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
|
||||
@@ -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
|
||||
432
try.sh
432
try.sh
@@ -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 <<EOF >>"$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
|
||||
Reference in New Issue
Block a user