fix: 拆分引导+核心脚本,彻底修复管道stdin问题

This commit is contained in:
mango
2026-02-24 22:43:24 +08:00
parent 429406134e
commit f622269313
2 changed files with 128 additions and 111 deletions

120
dd-core.sh Normal file
View File

@@ -0,0 +1,120 @@
#!/bin/bash
# DD 重装系统脚本 - Debian 13
# 此文件由引导脚本下载后本地执行stdin 正常可用
set -e
# 颜色
R='\033[0;31m' G='\033[0;32m' Y='\033[0;33m' B='\033[0;34m' N='\033[0m'
echo -e "${B}╔══════════════════════════════════════╗${N}"
echo -e "${B}║ DD 重装系统 - Debian 13 ║${N}"
echo -e "${B}╚══════════════════════════════════════╝${N}"
echo
# 默认值
DEF_PWD="Mng@2026DD!"
DEF_PORT="22"
DEF_HOST="debian"
DEF_TZ="Asia/Hong_Kong"
DEF_SWAP="1024"
# 交互输入
read -p "$(echo -e ${G}主机名${N} [${DEF_HOST}]: )" MYHOST
MYHOST=${MYHOST:-$DEF_HOST}
read -p "$(echo -e ${G}SSH端口${N} [${DEF_PORT}]: )" MYPORT
MYPORT=${MYPORT:-$DEF_PORT}
read -sp "$(echo -e ${G}root密码${N} [默认: ${DEF_PWD}]: )" MYPWD
echo
MYPWD=${MYPWD:-$DEF_PWD}
read -p "$(echo -e ${G}时区${N} [${DEF_TZ}]: )" MYTZ
MYTZ=${MYTZ:-$DEF_TZ}
read -p "$(echo -e ${G}Swap大小MB${N} [${DEF_SWAP}]: )" MYSWAP
MYSWAP=${MYSWAP:-$DEF_SWAP}
read -p "$(echo -e ${G}启用BBR${N} [Y/n]: )" BBR
BBR=${BBR:-Y}
# 系统选择
echo
echo -e "${Y}选择系统:${N}"
echo " 1) Debian 13 (默认)"
echo " 2) Debian 12"
echo " 3) Ubuntu 24.04"
echo " 4) Ubuntu 22.04"
echo " 5) CentOS 9"
echo " 6) Alpine 3.19"
read -p "$(echo -e ${G}选择${N} [1]: )" OS_CHOICE
OS_CHOICE=${OS_CHOICE:-1}
case $OS_CHOICE in
1) OS_FLAG="-debian 13" ;;
2) OS_FLAG="-debian 12" ;;
3) OS_FLAG="-ubuntu 24.04" ;;
4) OS_FLAG="-ubuntu 22.04" ;;
5) OS_FLAG="-centos 9" ;;
6) OS_FLAG="-alpine 3.19" ;;
*) OS_FLAG="-debian 13" ;;
esac
BBR_FLAG=""
[[ "${BBR,,}" != "n" ]] && BBR_FLAG="--bbr"
# 确认
echo
echo -e "${Y}════════ 确认配置 ════════${N}"
echo -e " 系统: ${B}${OS_FLAG}${N}"
echo -e " 主机名: ${B}${MYHOST}${N}"
echo -e " SSH端口: ${B}${MYPORT}${N}"
echo -e " 密码: ${B}******${N}"
echo -e " 时区: ${B}${MYTZ}${N}"
echo -e " Swap: ${B}${MYSWAP}MB${N}"
echo -e " BBR: ${B}${BBR_FLAG:-关闭}${N}"
echo -e "${Y}══════════════════════════${N}"
echo
read -p "$(echo -e ${R}确认重装? 数据将全部丢失!${N} [y/N]: )" CONFIRM
[[ "${CONFIRM,,}" != "y" ]] && echo "已取消" && exit 0
# 下载并执行
echo -e "${G}下载 InstallNET.sh ...${N}"
if command -v wget &>/dev/null; then
wget --no-check-certificate -qO InstallNET.sh \
'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh'
elif command -v curl &>/dev/null; then
curl -fsSL -o InstallNET.sh \
'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh'
else
echo -e "${R}错误: 需要 wget 或 curl${N}" && exit 1
fi
chmod a+x InstallNET.sh
echo -e "${G}开始重装...${N}"
bash InstallNET.sh $OS_FLAG \
-port "$MYPORT" \
-pwd "$MYPWD" \
-hostname "$MYHOST" \
-timezone "$MYTZ" \
-swap "$MYSWAP" \
$BBR_FLAG
# 修复 GRUB timeout
GRUB_CFG="/boot/grub/grub.cfg"
if [ -f "$GRUB_CFG" ]; then
if ! grep -q "^set timeout=" "$GRUB_CFG"; then
sed -i '/^set default=/a set timeout=5' "$GRUB_CFG"
echo -e "${G}已添加 GRUB timeout=5${N}"
fi
fi
echo
echo -e "${Y}重装完成10秒后自动重启...${N}"
for i in $(seq 10 -1 1); do
echo -ne "\r${R}${i}${N} 秒后重启... (Ctrl+C 取消)"
sleep 1
done
echo
reboot

View File

@@ -1,121 +1,18 @@
#!/bin/bash #!/bin/bash
# DD 重装系统脚本 - Debian 13 # DD 重装系统 - 引导脚本
# 用法: bash dd-reinstall.sh
# 一键: bash <(curl -sL mjjtop.com/dd) # 一键: bash <(curl -sL mjjtop.com/dd)
# 下载脚本到本地再执行,避免管道模式 stdin 冲突
set -e set -e
SCRIPT_URL="https://mjjtop.com/admin/dd-reinstall/raw/branch/main/dd-core.sh"
# 颜色
R='\033[0;31m' G='\033[0;32m' Y='\033[0;33m' B='\033[0;34m' N='\033[0m'
echo -e "${B}╔══════════════════════════════════════╗${N}"
echo -e "${B}║ DD 重装系统 - Debian 13 ║${N}"
echo -e "${B}╚══════════════════════════════════════╝${N}"
echo
# 默认值
DEF_PWD="Mng@2026DD!"
DEF_PORT="22"
DEF_HOST="debian"
DEF_TZ="Asia/Hong_Kong"
DEF_SWAP="1024"
# 交互输入 (< /dev/tty 确保管道模式下也能读取用户输入)
read -p "$(echo -e ${G}主机名${N} [${DEF_HOST}]: )" MYHOST < /dev/tty
MYHOST=${MYHOST:-$DEF_HOST}
read -p "$(echo -e ${G}SSH端口${N} [${DEF_PORT}]: )" MYPORT < /dev/tty
MYPORT=${MYPORT:-$DEF_PORT}
read -sp "$(echo -e ${G}root密码${N} [默认: ${DEF_PWD}]: )" MYPWD < /dev/tty
echo
MYPWD=${MYPWD:-$DEF_PWD}
read -p "$(echo -e ${G}时区${N} [${DEF_TZ}]: )" MYTZ < /dev/tty
MYTZ=${MYTZ:-$DEF_TZ}
read -p "$(echo -e ${G}Swap大小MB${N} [${DEF_SWAP}]: )" MYSWAP < /dev/tty
MYSWAP=${MYSWAP:-$DEF_SWAP}
read -p "$(echo -e ${G}启用BBR${N} [Y/n]: )" BBR < /dev/tty
BBR=${BBR:-Y}
# 系统选择
echo
echo -e "${Y}选择系统:${N}"
echo " 1) Debian 13 (默认)"
echo " 2) Debian 12"
echo " 3) Ubuntu 24.04"
echo " 4) Ubuntu 22.04"
echo " 5) CentOS 9"
echo " 6) Alpine 3.19"
read -p "$(echo -e ${G}选择${N} [1]: )" OS_CHOICE < /dev/tty
OS_CHOICE=${OS_CHOICE:-1}
case $OS_CHOICE in
1) OS_FLAG="-debian 13" ;;
2) OS_FLAG="-debian 12" ;;
3) OS_FLAG="-ubuntu 24.04" ;;
4) OS_FLAG="-ubuntu 22.04" ;;
5) OS_FLAG="-centos 9" ;;
6) OS_FLAG="-alpine 3.19" ;;
*) OS_FLAG="-debian 13" ;;
esac
BBR_FLAG=""
[[ "${BBR,,}" != "n" ]] && BBR_FLAG="--bbr"
# 确认
echo
echo -e "${Y}════════ 确认配置 ════════${N}"
echo -e " 系统: ${B}${OS_FLAG}${N}"
echo -e " 主机名: ${B}${MYHOST}${N}"
echo -e " SSH端口: ${B}${MYPORT}${N}"
echo -e " 密码: ${B}******${N}"
echo -e " 时区: ${B}${MYTZ}${N}"
echo -e " Swap: ${B}${MYSWAP}MB${N}"
echo -e " BBR: ${B}${BBR_FLAG:-关闭}${N}"
echo -e "${Y}══════════════════════════${N}"
echo
read -p "$(echo -e ${R}确认重装? 数据将全部丢失!${N} [y/N]: )" CONFIRM < /dev/tty
[[ "${CONFIRM,,}" != "y" ]] && echo "已取消" && exit 0
# 下载并执行
echo -e "${G}下载 InstallNET.sh ...${N}"
if command -v wget &>/dev/null; then if command -v wget &>/dev/null; then
wget --no-check-certificate -qO InstallNET.sh \ wget --no-check-certificate -qO /tmp/dd-reinstall.sh "$SCRIPT_URL"
'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh'
elif command -v curl &>/dev/null; then elif command -v curl &>/dev/null; then
curl -fsSL -o InstallNET.sh \ curl -fsSL -o /tmp/dd-reinstall.sh "$SCRIPT_URL"
'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh'
else else
echo -e "${R}错误: 需要 wget 或 curl${N}" && exit 1 echo "错误: 需要 wget 或 curl" && exit 1
fi
chmod a+x InstallNET.sh
echo -e "${G}开始重装...${N}"
bash InstallNET.sh $OS_FLAG \
-port "$MYPORT" \
-pwd "$MYPWD" \
-hostname "$MYHOST" \
-timezone "$MYTZ" \
-swap "$MYSWAP" \
$BBR_FLAG
# 修复 GRUB timeout防止卡在菜单
GRUB_CFG="/boot/grub/grub.cfg"
if [ -f "$GRUB_CFG" ]; then
if ! grep -q "^set timeout=" "$GRUB_CFG"; then
sed -i '/^set default=/a set timeout=5' "$GRUB_CFG"
echo -e "${G}已添加 GRUB timeout=5${N}"
fi
fi fi
echo chmod +x /tmp/dd-reinstall.sh
echo -e "${Y}重装完成10秒后自动重启...${N}" bash /tmp/dd-reinstall.sh
for i in $(seq 10 -1 1); do
echo -ne "\r${R}${i}${N} 秒后重启... (Ctrl+C 取消)"
sleep 1
done
echo
reboot