Update do_docker.sh
This commit is contained in:
parent
26e1e94adf
commit
39c97e7091
@ -17,124 +17,120 @@ light_magenta() {
|
||||
light_yellow() {
|
||||
echo -e "\033[93m\033[01m[NOTICE] $1\033[0m"
|
||||
}
|
||||
lsblk_url="https://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/mt-6000/lsblk.ipk"
|
||||
install_lsblk() {
|
||||
# 查找 lsblk 包
|
||||
if opkg find lsblk | grep -q lsblk; then
|
||||
# 检查 lsblk 是否已经安装
|
||||
if opkg list-installed | grep -q lsblk; then
|
||||
blue "系统已包含必备组件lsblk"
|
||||
else
|
||||
blue "正在安装查找USB设备所需要的依赖 lsblk ..."
|
||||
opkg install lsblk >/dev/null 2>&1
|
||||
# 再次验证安装是否成功
|
||||
if opkg list-installed | grep -q lsblk; then
|
||||
green "lsblk 安装成功."
|
||||
else
|
||||
red "lsblk 安装失败."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "lsblk package not found, attempting to download and install from URL..."
|
||||
mkdir -p /tmp/mt6000
|
||||
wget -q -O /tmp/mt6000/lsblk.ipk $lsblk_url
|
||||
opkg install /tmp/mt6000/lsblk.ipk >/dev/null 2>&1
|
||||
if opkg list-installed | grep -q lsblk; then
|
||||
green "formURL lsblk 安装成功."
|
||||
else
|
||||
red "formURL lsblk 安装失败."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
##获取路由型号信息
|
||||
get_router_name() {
|
||||
model_info=$(cat /tmp/sysinfo/model)
|
||||
echo "$model_info"
|
||||
}
|
||||
|
||||
format_usb(){
|
||||
# 检查USB设备分区是否已挂载,这是glinet自动挂载点 /tmp/mountd/diskX_partX
|
||||
AUTOMOUNT_POINT=$(mount | grep "/dev/$CORRECTED_PART " | awk '{print $3}')
|
||||
|
||||
if [ -n "$AUTOMOUNT_POINT" ]; then
|
||||
echo "设备分区已挂载在 $AUTOMOUNT_POINT,正在尝试卸载..."
|
||||
if
|
||||
! command -v docker &
|
||||
>/dev/null
|
||||
then
|
||||
echo "Docker is not installed, skipping Docker stop procedure."
|
||||
# 直接执行后续操作或退出
|
||||
# 安装必备工具lsblk和fdisk等
|
||||
install_depends_apps() {
|
||||
blue "正在安装部署环境的所需要的工具 lsblk 和fdisk ..."
|
||||
router_name=$(get_router_name)
|
||||
case "$router_name" in
|
||||
*3000*)
|
||||
opkg update >/dev/null 2>&1
|
||||
if opkg install lsblk fdisk >/dev/null 2>&1; then
|
||||
green "$router_name 的 lsblk fdisk 工具 安装成功。"
|
||||
else
|
||||
# 尝试停止 Docker 服务
|
||||
/etc/init.d/docker stop
|
||||
|
||||
# 等待 docker 守护进程停止
|
||||
while true; do
|
||||
# 检查 docker 守护进程是否停止
|
||||
if ! docker ps >/dev/null 2>&1; then
|
||||
echo "Docker daemon has stopped."
|
||||
break # 跳出循环
|
||||
else
|
||||
echo "Waiting for Docker daemon to stop..."
|
||||
sleep 1 # 等待1秒再次检查
|
||||
fi
|
||||
done
|
||||
fi
|
||||
# 在此处执行卸载或其他操作
|
||||
umount /dev/$CORRECTED_PART
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "卸载成功。"
|
||||
else
|
||||
echo "卸载失败,请检查设备是否正被使用。"
|
||||
red "安装失败。"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "设备分区未挂载。"
|
||||
fi
|
||||
;;
|
||||
*2500*)
|
||||
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://raw.githubusercontent.com/wukongdaily/gl-inet-onescript/master/mt-3000/distfeeds.conf"
|
||||
wget -q -O /etc/opkg/distfeeds.conf ${mt3000_opkg}
|
||||
green "正在更新为mt3000的软件源"
|
||||
opkg update >/dev/null 2>&1
|
||||
green "再次尝试安装 lsblk 和fdisk工具"
|
||||
if opkg install lsblk fdisk >/dev/null 2>&1; 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
|
||||
}
|
||||
|
||||
# 格式化分区为EXT4,你可以根据需要更改为其他文件系统类型
|
||||
red "正在格式化U盘: /dev/$CORRECTED_PART 为 EXT4... 请耐心等待..."
|
||||
red "通常情况 U盘越大格式化时间会越久一些"
|
||||
mkfs.ext4 -F -E lazy_itable_init=1,lazy_journal_init=1 /dev/$CORRECTED_PART >/dev/null 2>&1
|
||||
# START
|
||||
install_depends_apps
|
||||
green "现在开始查找USB设备分区,请稍后......"
|
||||
# 自动识别第一个可移除的USB磁盘
|
||||
USB_DISK=$(lsblk -dn -o NAME,RM,TYPE | awk '$2=="1" && $3=="disk" {print "/dev/"$1; exit}')
|
||||
if [ -z "$USB_DISK" ]; then
|
||||
echo "未找到USB磁盘。"
|
||||
exit 1
|
||||
fi
|
||||
yellow "找到USB磁盘:$USB_DISK"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
green "格式化成功。"
|
||||
else
|
||||
red "\n U盘格式化失败"
|
||||
# 卸载所有与该磁盘相关的挂载点
|
||||
for mount in $(mount | grep "$USB_DISK" | awk '{print $3}'); do
|
||||
yellow "正在尝试卸载U盘挂载点:$mount"
|
||||
if ! umount $mount; then
|
||||
red "警告:无法卸载挂载点 $mount。可能有文件正在被访问或权限不足。"
|
||||
exit 1
|
||||
else
|
||||
green "U盘挂载点 $mount 卸载成功。"
|
||||
fi
|
||||
}
|
||||
green "正在更新软件包,请稍后......"
|
||||
green "正在查找USB设备分区,请稍后......"
|
||||
opkg update >/dev/null 2>&1
|
||||
install_lsblk
|
||||
|
||||
# 查找USB设备分区
|
||||
USB_DEVICES=$(lsblk -o NAME,RM,TYPE -dn | awk '/1/ && !/mmcblk/ && $3=="disk" {print $1}')
|
||||
|
||||
for device in $USB_DEVICES; do
|
||||
# 检查该设备下是否存在分区
|
||||
PARTITIONS=$(lsblk -o NAME,TYPE -dn | grep "^${device}" | awk '$2=="part" {print $1}')
|
||||
if [ -n "$PARTITIONS" ]; then
|
||||
# 如果存在分区,则仅处理这些分区
|
||||
for part in $PARTITIONS; do
|
||||
FORMAT_TARGET=$part
|
||||
done
|
||||
else
|
||||
# 如果没有分区,直接处理整个磁盘
|
||||
FORMAT_TARGET=$device
|
||||
fi
|
||||
CORRECTED_PART=$(echo $FORMAT_TARGET | sed 's/[^a-zA-Z0-9]//g')
|
||||
echo "找到USB设备分区: /dev/$CORRECTED_PART"
|
||||
format_usb
|
||||
done
|
||||
|
||||
red "正在重新分区并格式化$USB_DISK..."
|
||||
# 使用fdisk清除所有分区并创建一个新的主分区
|
||||
{
|
||||
echo o # 创建一个新的空DOS分区表
|
||||
echo n # 添加一个新分区
|
||||
echo p # 主分区
|
||||
echo 1 # 分区号1
|
||||
echo # 第一个可用扇区(默认)
|
||||
echo # 最后一个扇区(默认,使用剩余空间)
|
||||
echo w # 写入并退出
|
||||
} | fdisk $USB_DISK >/dev/null 2>&1
|
||||
|
||||
# 等待磁盘分区表更新
|
||||
sleep 5
|
||||
|
||||
# 格式化新分区为EXT4文件系统
|
||||
NEW_PARTITION="${USB_DISK}1"
|
||||
red "正在将U盘 $NEW_PARTITION 格式化为EXT4文件系统..."
|
||||
mkfs.ext4 -F $NEW_PARTITION >/dev/null 2>&1
|
||||
green "$NEW_PARTITION 已成功格式化为EXT4文件系统。"
|
||||
|
||||
# 卸载所有与该磁盘相关的挂载点
|
||||
for mount in $(mount | grep "$USB_DISK" | awk '{print $3}'); do
|
||||
echo "再次卸载U盘的自动挂载点:$mount"
|
||||
umount $mount
|
||||
done
|
||||
|
||||
yellow "为Docker Root 创建挂载点..."
|
||||
USB_MOUNT_POINT="/mnt/upan_data"
|
||||
DOCKER_ROOT="$USB_MOUNT_POINT/docker"
|
||||
mkdir -p $DOCKER_ROOT
|
||||
|
||||
green "将挂载 U 盘到 $DOCKER_ROOT..."
|
||||
mount -t ext4 /dev/$CORRECTED_PART $USB_MOUNT_POINT
|
||||
|
||||
green "将U盘 挂载到 $USB_MOUNT_POINT..."
|
||||
mount -t ext4 $NEW_PARTITION $USB_MOUNT_POINT
|
||||
# 检查挂载命令的退出状态
|
||||
if [ $? -ne 0 ]; then
|
||||
red "挂载失败,脚本退出。"
|
||||
@ -150,7 +146,7 @@ echo '{
|
||||
}' >/etc/docker/daemon.json
|
||||
|
||||
# 安装 Docker 和 dockerd
|
||||
green "正在更新OPKG软件包..."
|
||||
green "正在更新 OPKG 软件包..."
|
||||
opkg update >/dev/null 2>&1
|
||||
green "正在安装 Docker及相关服务...请耐心等待一会...大约需要1分钟\n"
|
||||
opkg install luci-app-dockerman >/dev/null 2>&1
|
||||
@ -189,11 +185,10 @@ chmod +x /etc/init.d/docker
|
||||
/etc/init.d/docker enable
|
||||
/etc/init.d/docker start
|
||||
|
||||
green "正在设置开机启动顺序的配置\n先挂载U盘,再启动Docker 修改/etc/rc.local后如下\n"
|
||||
green "正在设置开机启动顺序的配置\n\n先挂载U盘,再启动Docker 修改/etc/rc.local后如下\n"
|
||||
# 首先,备份 /etc/rc.local
|
||||
cp /etc/rc.local /etc/rc.local.backup
|
||||
# U盘分区 /dev/sdx
|
||||
USB_DEVICE_PART="/dev/$CORRECTED_PART"
|
||||
# U盘分区 /dev/sdx=$NEW_PARTITION
|
||||
# glinet系统重启后的 USB自动挂载点
|
||||
SYSTEM_USB_AUTO_MOUNTPOINT="/tmp/mountd/disk1_part1"
|
||||
# 卸载USB自动挂载点 挂载自定义挂载点 /mnt/upan_data
|
||||
@ -203,7 +198,7 @@ if ! grep -q "umount $SYSTEM_USB_AUTO_MOUNTPOINT" /etc/rc.local; then
|
||||
# 将新的命令添加到 /etc/rc.local,然后再加上 exit 0
|
||||
{
|
||||
echo "umount $SYSTEM_USB_AUTO_MOUNTPOINT || true"
|
||||
echo "mount $USB_DEVICE_PART $USB_MOUNT_POINT || true"
|
||||
echo "mount $NEW_PARTITION $USB_MOUNT_POINT || true"
|
||||
echo "/etc/init.d/docker start || true"
|
||||
echo "exit 0"
|
||||
} >>/etc/rc.local
|
||||
@ -233,7 +228,8 @@ yellow "正在重启Docker 守护进程...."
|
||||
sleep 2
|
||||
/etc/init.d/docker start
|
||||
sleep 5
|
||||
yellow "Docker 运行环境部署完毕,建议重启一次路由器"
|
||||
green "Docker 运行环境部署完毕"
|
||||
yellow "正在帮您启动Docker....若出现卡住现象 20s都没反应。建议手动重启路由器"
|
||||
# 检查Docker是否正在运行
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
red "Docker 启动失败,您可以手动启动docker 执行 /etc/init.d/docker start"
|
||||
@ -245,7 +241,7 @@ else
|
||||
if [ "$DOCKER_ROOT_DIR" = "/opt/docker" ]; then
|
||||
yellow "虽然Docker启动成功了,但是Docker根目录不正确 $DOCKER_ROOT_DIR 。建议立即重启以修正。"
|
||||
else
|
||||
green "设置正确,您可以直接使用啦~"
|
||||
green "Docker启动成功并设置正确,您可以直接使用啦~\n"
|
||||
light_yellow "不过为了验证下次启动docker的有效性 建议手动重启路由器一次 祝您使用愉快"
|
||||
fi
|
||||
echo
|
||||
|
Loading…
Reference in New Issue
Block a user