Update do_docker.sh
This commit is contained in:
parent
26e1e94adf
commit
39c97e7091
@ -17,124 +17,120 @@ light_magenta() {
|
|||||||
light_yellow() {
|
light_yellow() {
|
||||||
echo -e "\033[93m\033[01m[NOTICE] $1\033[0m"
|
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 包
|
get_router_name() {
|
||||||
if opkg find lsblk | grep -q lsblk; then
|
model_info=$(cat /tmp/sysinfo/model)
|
||||||
# 检查 lsblk 是否已经安装
|
echo "$model_info"
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
format_usb(){
|
# 安装必备工具lsblk和fdisk等
|
||||||
# 检查USB设备分区是否已挂载,这是glinet自动挂载点 /tmp/mountd/diskX_partX
|
install_depends_apps() {
|
||||||
AUTOMOUNT_POINT=$(mount | grep "/dev/$CORRECTED_PART " | awk '{print $3}')
|
blue "正在安装部署环境的所需要的工具 lsblk 和fdisk ..."
|
||||||
|
router_name=$(get_router_name)
|
||||||
if [ -n "$AUTOMOUNT_POINT" ]; then
|
case "$router_name" in
|
||||||
echo "设备分区已挂载在 $AUTOMOUNT_POINT,正在尝试卸载..."
|
*3000*)
|
||||||
if
|
|
||||||
! command -v docker &
|
|
||||||
>/dev/null
|
|
||||||
then
|
|
||||||
echo "Docker is not installed, skipping Docker stop procedure."
|
|
||||||
# 直接执行后续操作或退出
|
|
||||||
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 "卸载失败,请检查设备是否正被使用。"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "设备分区未挂载。"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 格式化分区为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
|
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
green "格式化成功。"
|
|
||||||
else
|
|
||||||
red "\n U盘格式化失败"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
green "正在更新软件包,请稍后......"
|
|
||||||
green "正在查找USB设备分区,请稍后......"
|
|
||||||
opkg update >/dev/null 2>&1
|
opkg update >/dev/null 2>&1
|
||||||
install_lsblk
|
if opkg install lsblk fdisk >/dev/null 2>&1; then
|
||||||
|
green "$router_name 的 lsblk fdisk 工具 安装成功。"
|
||||||
# 查找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
|
else
|
||||||
# 如果没有分区,直接处理整个磁盘
|
red "安装失败。"
|
||||||
FORMAT_TARGET=$device
|
exit 1
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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"
|
||||||
|
|
||||||
|
# 卸载所有与该磁盘相关的挂载点
|
||||||
|
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
|
fi
|
||||||
CORRECTED_PART=$(echo $FORMAT_TARGET | sed 's/[^a-zA-Z0-9]//g')
|
|
||||||
echo "找到USB设备分区: /dev/$CORRECTED_PART"
|
|
||||||
format_usb
|
|
||||||
done
|
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 创建挂载点..."
|
yellow "为Docker Root 创建挂载点..."
|
||||||
USB_MOUNT_POINT="/mnt/upan_data"
|
USB_MOUNT_POINT="/mnt/upan_data"
|
||||||
DOCKER_ROOT="$USB_MOUNT_POINT/docker"
|
DOCKER_ROOT="$USB_MOUNT_POINT/docker"
|
||||||
mkdir -p $DOCKER_ROOT
|
mkdir -p $DOCKER_ROOT
|
||||||
|
|
||||||
green "将挂载 U 盘到 $DOCKER_ROOT..."
|
green "将U盘 挂载到 $USB_MOUNT_POINT..."
|
||||||
mount -t ext4 /dev/$CORRECTED_PART $USB_MOUNT_POINT
|
mount -t ext4 $NEW_PARTITION $USB_MOUNT_POINT
|
||||||
|
|
||||||
# 检查挂载命令的退出状态
|
# 检查挂载命令的退出状态
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
red "挂载失败,脚本退出。"
|
red "挂载失败,脚本退出。"
|
||||||
@ -189,11 +185,10 @@ chmod +x /etc/init.d/docker
|
|||||||
/etc/init.d/docker enable
|
/etc/init.d/docker enable
|
||||||
/etc/init.d/docker start
|
/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
|
# 首先,备份 /etc/rc.local
|
||||||
cp /etc/rc.local /etc/rc.local.backup
|
cp /etc/rc.local /etc/rc.local.backup
|
||||||
# U盘分区 /dev/sdx
|
# U盘分区 /dev/sdx=$NEW_PARTITION
|
||||||
USB_DEVICE_PART="/dev/$CORRECTED_PART"
|
|
||||||
# glinet系统重启后的 USB自动挂载点
|
# glinet系统重启后的 USB自动挂载点
|
||||||
SYSTEM_USB_AUTO_MOUNTPOINT="/tmp/mountd/disk1_part1"
|
SYSTEM_USB_AUTO_MOUNTPOINT="/tmp/mountd/disk1_part1"
|
||||||
# 卸载USB自动挂载点 挂载自定义挂载点 /mnt/upan_data
|
# 卸载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
|
# 将新的命令添加到 /etc/rc.local,然后再加上 exit 0
|
||||||
{
|
{
|
||||||
echo "umount $SYSTEM_USB_AUTO_MOUNTPOINT || true"
|
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 "/etc/init.d/docker start || true"
|
||||||
echo "exit 0"
|
echo "exit 0"
|
||||||
} >>/etc/rc.local
|
} >>/etc/rc.local
|
||||||
@ -233,7 +228,8 @@ yellow "正在重启Docker 守护进程...."
|
|||||||
sleep 2
|
sleep 2
|
||||||
/etc/init.d/docker start
|
/etc/init.d/docker start
|
||||||
sleep 5
|
sleep 5
|
||||||
yellow "Docker 运行环境部署完毕,建议重启一次路由器"
|
green "Docker 运行环境部署完毕"
|
||||||
|
yellow "正在帮您启动Docker....若出现卡住现象 20s都没反应。建议手动重启路由器"
|
||||||
# 检查Docker是否正在运行
|
# 检查Docker是否正在运行
|
||||||
if ! docker info >/dev/null 2>&1; then
|
if ! docker info >/dev/null 2>&1; then
|
||||||
red "Docker 启动失败,您可以手动启动docker 执行 /etc/init.d/docker start"
|
red "Docker 启动失败,您可以手动启动docker 执行 /etc/init.d/docker start"
|
||||||
@ -245,7 +241,7 @@ else
|
|||||||
if [ "$DOCKER_ROOT_DIR" = "/opt/docker" ]; then
|
if [ "$DOCKER_ROOT_DIR" = "/opt/docker" ]; then
|
||||||
yellow "虽然Docker启动成功了,但是Docker根目录不正确 $DOCKER_ROOT_DIR 。建议立即重启以修正。"
|
yellow "虽然Docker启动成功了,但是Docker根目录不正确 $DOCKER_ROOT_DIR 。建议立即重启以修正。"
|
||||||
else
|
else
|
||||||
green "设置正确,您可以直接使用啦~"
|
green "Docker启动成功并设置正确,您可以直接使用啦~\n"
|
||||||
light_yellow "不过为了验证下次启动docker的有效性 建议手动重启路由器一次 祝您使用愉快"
|
light_yellow "不过为了验证下次启动docker的有效性 建议手动重启路由器一次 祝您使用愉快"
|
||||||
fi
|
fi
|
||||||
echo
|
echo
|
||||||
|
Loading…
Reference in New Issue
Block a user