Files
zero3/zero3/op.sh
T
2024-07-08 16:48:23 +08:00

337 lines
12 KiB
Bash

#!/bin/sh
# OpenWrt/iStoreOS
# 定义颜色输出函数
red() { echo -e "\033[31m\033[01m[WARNING] $1\033[0m"; }
green() { echo -e "\033[32m\033[01m[INFO] $1\033[0m"; }
greenline() { echo -e "\033[32m\033[01m $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"; }
highlight() { echo -e "\033[32m\033[01m$1\033[0m"; }
cyan() { echo -e "\033[38;2;0;255;255m$1\033[0m"; }
is_x86_64_router() {
DISTRIB_ARCH=$(cat /etc/openwrt_release | grep "DISTRIB_ARCH" | cut -d "'" -f 2)
if [ "$DISTRIB_ARCH" = "x86_64" ]; then
return 0
else
return 1
fi
}
get_hostname() {
hostname=$(uci get system.@system[0].hostname)
echo "${hostname}.lan"
}
host_ip=$(get_hostname)
#安装alist
install_alist() {
green "正在安装alist 请稍后"
docker run -d --restart=unless-stopped -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest
sleep 3
docker exec -it alist ./alist admin set admin
echo '
AList已安装,已帮你设置好用户名和密码,若修改请在web面板修改即可。
用户: admin
密码: admin
'
green 浏览器访问:http://${host_ip}:5244
}
# 安装盒子助手docker版
install_wukongdaily_box() {
mkdir -p /opt/tvhelper_data
chmod 777 /opt/tvhelper_data
green 若使用自定义安装apk功能,可将apk放到/opt/tvhelper_data目录,用完记得及时清理
docker run -d \
--restart unless-stopped \
--name tvhelper \
-p 2299:22 \
-p 2288:80 \
-v "/opt/tvhelper_data:/tvhelper/shells/data" \
-e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/android-sdk/platform-tools \
wukongdaily/box:latest
if ! docker ps | grep -q "wukongdaily/box"; then
echo "Error: 盒子助手docker版 未运行成功"
else
green "盒子助手docker版已启动,可以通过 http://${host_ip}:2288 验证是否安装成功"
green "还可以通过 ssh root@${host_ip} -p 2299 连接到容器内 执行 ./tv.sh 使用该工具"
green "文档和教学视频:https://www.youtube.com/watch?v=xAk-3TxeXxQ \n https://www.bilibili.com/video/BV1Rm411o78P"
fi
}
# 更新自己
update_scripts() {
wget -O op.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/op.sh && chmod +x op.sh
./op.sh
exit 0
}
# 安装小雅xiaoya-tvbox
# 参考 https://har01d.cn/notes/alist-tvbox.html
install_xiaoya_tvbox() {
curl -fsSL https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/xiaoya/xiaoya_tvbox.sh -o xt.sh
chmod +x xt.sh
./xt.sh -d /etc/xiaoya
green "tvbox 使用的json地址是 http://${host_ip}:4567/sub/0"
green "更多文档请查看:https://har01d.cn/notes/alist-tvbox.html"
green "上述这些网址,建议等足5分钟后再查看!\n若没有配置过token信息,可以在此处添加账号 http://${host_ip}:4567/#/accounts"
echo '
小雅tvbox
webdav 信息如下
端口:5344
用户: guest
密码: guest_Api789
'
}
# 安装1panel面板
install_1panel_on_openwrt() {
docker run -d \
--name 1panel \
--restart always \
--network host \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /www/data/1panel-data:/opt/1panel_data \
-v /:/ahost \
-e TZ=Asia/Shanghai \
moelin/1panel:latest
echo '
默认端口:10086
默认账户:1panel
默认密码:1panel_password
默认入口:entrance'
green http://${host_ip}:10086/entrance
green "或者访问 http://路由器ip:10086/entrance"
}
# 安装istoreOS版本1panel
install_istorepanel() {
green "请务必确保您使用的是iStoreOS系统 回车或输入y来确定"
yellow "并且停止正在运行的istorepanel容器(y|n)"
read -r answer
if [ "$answer" = "y" ] || [ -z "$answer" ]; then
green "先确保安装了iStore增强"
is-opkg install app-meta-istoreenhance
green "正在安装1panel的iStoreOS版本..."
rm -rf /etc/config/istorepanel
is-opkg remove app-meta-istorepanel
is-opkg install app-meta-istorepanel
green "正在安装istore版1panel..."
# 执行 quickstart showLanIP 命令并提取结果
output=$(quickstart showLanIP)
lan_ip=$(echo $output | awk -F 'lanIp= ' '{print $2}')
# 获取 Docker 根目录路径
docker_root_dir=$(docker info 2>/dev/null | grep 'Docker Root Dir' | awk -F ': ' '{print $2}')
# 检查是否成功获取到路径
if [ -z "$docker_root_dir" ]; then
echo "Failed to get Docker root directory."
exit 1
fi
if ! is_available_space_greater_than_2GB "$docker_root_dir"; then
red "检测到docker空间不足2GB 请在iStoreOS首页迁移docker到更大的分区"
exit 1
fi
# 去除末尾的 '/docker' 部分
config_root_dir=$(dirname "$docker_root_dir")
config_path="${config_root_dir}/Configs/1Panel"
green "1Panel配置文件存放在下面的目录"
yellow "$config_path"
if [ -d "$config_path" ]; then
uci set istorepanel.@main[0].config_path=$config_path
uci commit istorepanel
wget -qO /tmp/istorepanel.sh https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/zero3/istorepanel.sh
chmod +x /tmp/istorepanel.sh
"/tmp/istorepanel.sh" install
greenline "———————————————安装完成————————————————————————"
countdown
echo
cyan "http://$lan_ip/cgi-bin/luci/admin/services/istorepanel"
green "跳转到上述页面, 打开1panel或修改参数"
cyan "http://$lan_ip:10086/entrance"
green "或者跳转到上述页面, 直接打开1panel面板"
else
red "安装失败,请检查1Panel配置文件的目录是否存在"
fi
else
yellow "您选择了不安装"
fi
}
is_available_space_greater_than_2GB() {
local dir_path=$1
local available_space_kb=$(df -k "$dir_path" | awk 'NR==2 {print $4}')
local available_space_gb=$((available_space_kb / 1024 / 1024))
if [ "$available_space_gb" -gt 2 ]; then
return 0
else
return 1
fi
}
# 倒计时15秒
countdown() {
local seconds=15
while [ $seconds -gt 0 ]; do
printf "\r请耐心等待: %2d 秒后再访问" $seconds
sleep 1
seconds=$((seconds - 1))
done
}
#根据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下载链接
if is_x86_64_router; then
platform="docker-compose-linux-x86_64"
else
platform="docker-compose-linux-aarch64"
fi
local repo_path=$(echo "$releases_url" | sed -n 's|https://github.com/\(.*\)/releases/latest|\1|p')
if [[ $(curl -s ipinfo.io/country) == "CN" ]]; then
docker_compose_download_url="https://cafe.cpolar.cn/wkdaily/docker-compose/raw/branch/main/${platform}"
else
docker_compose_download_url="https://github.com/${repo_path}/releases/download/${tag}/${platform}"
fi
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
local github_releases_url="https://github.com/docker/compose/releases/latest"
local docker_compose_url=$(get_docker_compose_url "$github_releases_url")
cyan "最新版docker-compose 地址:$docker_compose_url"
cyan "即将下载最新版docker-compose standalone"
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
}
# 安装特斯拉伴侣
install_teslamate() {
if which docker-compose >/dev/null 2>&1; then
echo "Docker Compose is installed."
docker-compose --version
mkdir -p /tmp/teslamate
wget -O /tmp/teslamate/docker-compose.yml https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/teslamate/docker-compose.yml
cd /tmp/teslamate
docker-compose up -d
else
red "Docker Compose is not installed. "
do_install_docker_compose
fi
}
install_xiaoya_allinone() {
if which docker-compose >/dev/null 2>&1; then
bash -c "$(curl -fsSL https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/xiaoya/xiaoya-all.sh)"
else
red "Docker Compose 还未安装,正在尝试安装..."
green "安装成功后,请您再次执行该选项"
do_install_docker_compose
fi
}
# *************************************************************
while true; do
#*************************************
clear
greenline "————————————————————————————————————————————————————"
echo '
*********** DIY docker轻服务器 ***************
环境:OpenWrt/iStoreOS
脚本作用:快速部署一个省电无感的小透明轻服务器
--- Made by wukong with YOU ---'
echo -e " https://github.com/wukongdaily/OrangePiShell"
greenline "————————————————————————————————————————————————————"
echo
cyan " 1. 安装小雅tvbox"
echo " 2. 安装盒子助手docker版"
echo " 3. 安装AList docker版"
cyan " 4. 安装1panel(iStoreOS版)"
echo " 5. 安装特斯拉伴侣TeslaMate"
echo " 6. 安装docker-compose"
echo " 7. 安装小雅全家桶Emby|Jellyfin"
echo " 8. 安装1panel面板通用版"
cyan " U. 更新脚本"
echo
echo " Q. 退出本程序"
echo
read -p "请选择一个选项: " choice
case $choice in
1)
install_xiaoya_tvbox
;;
2)
install_wukongdaily_box
;;
3)
install_alist
;;
4)
install_istorepanel
;;
5)
install_teslamate
;;
6)
do_install_docker_compose
;;
7)
install_xiaoya_allinone
;;
8)
install_1panel_on_openwrt
;;
u | U)
update_scripts
;;
q | Q)
echo "退出"
exit 0
;;
*)
echo "无效选项,请重新选择。"
;;
esac
read -p "按 Enter 键继续..."
done