mirror of
https://github.com/Cateners/tiny_computer.git
synced 2026-05-21 00:45:49 +08:00
146 lines
4.6 KiB
Bash
146 lines
4.6 KiB
Bash
#!/bin/bash
|
|
|
|
# 定义颜色以便于阅读
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}=== GXDE OS 15 -> 25 命令行升级工具 ===${NC}"
|
|
|
|
# 1. 检查 root 权限
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo -e "${RED}错误: 请使用 root 权限运行此脚本 (例如: sudo $0)${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# 2. 风险确认 (替代 Zenity)
|
|
echo -e "${YELLOW}警告:您即将执行 GXDE OS 15 到 25 的升级${NC}"
|
|
echo "• 该操作不可逆且存在风险"
|
|
echo "• 请确保系统已经更新到最新"
|
|
echo "• 请确保已做好数据备份"
|
|
echo "• 升级过程可能需要 1-3 小时,期间请勿关闭终端"
|
|
echo ""
|
|
read -p "您确定要继续吗?(输入 yes 继续,其他键取消): " confirm
|
|
if [ "$confirm" != "yes" ]; then
|
|
echo "操作已取消。"
|
|
exit 0
|
|
fi
|
|
|
|
echo -e "${YELLOW}再次确认:这是一个高风险操作!!!${NC}"
|
|
read -p "请输入 'I AGREE' (大写) 以确认并开始升级: " confirm_final
|
|
if [ "$confirm_final" != "I AGREE" ]; then
|
|
echo "操作已取消。"
|
|
exit 0
|
|
fi
|
|
|
|
echo -e "${GREEN}>>> 开始预处理...${NC}"
|
|
|
|
# 刷新缓存与修复依赖
|
|
echo "正在刷新系统包缓存..."
|
|
apt update
|
|
aptss update
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
echo "正在检查和修复系统依赖问题..."
|
|
aptss install -f -yqq
|
|
|
|
# 删除冲突包
|
|
echo "正在移除 qtbase5-dev..."
|
|
apt autopurge qtbase5-dev -y
|
|
|
|
# 3. 替换软件源 (核心逻辑)
|
|
echo "正在替换软件源..."
|
|
# 备份并替换主源
|
|
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
|
|
|
|
# 处理 PPA 源
|
|
declare -A ppa_map=(
|
|
["/etc/apt/sources.list.d/gxde.list"]='s/bixie/lizhi/g'
|
|
["/etc/apt/sources.list.d/gxde-testing.list"]='s/tianlu/zhuangzhuang/g'
|
|
)
|
|
rm -vf /etc/apt/sources.list.d/gxde-bpo.list
|
|
|
|
for file in "${!ppa_map[@]}"; do
|
|
if [[ -f "$file" ]]; then
|
|
sed -i "${ppa_map[$file]}" "$file"
|
|
echo "已更新源文件: $file"
|
|
else
|
|
[[ "$file" =~ testing ]] && continue
|
|
echo -e "${RED}严重错误:关键源文件缺失 $file${NC}"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# 屏蔽旧的更新器
|
|
echo "正在屏蔽旧版更新器..."
|
|
rm -fv /usr/bin/gxde-app-upgrader
|
|
cat > /usr/bin/gxde-app-upgrader << EOF
|
|
#!/bin/bash
|
|
echo "警告:检测到您尚未完成系统大版本更新,请完成 CLI 更新流程!"
|
|
EOF
|
|
chmod +x /usr/bin/gxde-app-upgrader
|
|
|
|
# 刷新新源
|
|
echo "正在刷新新源缓存..."
|
|
apt update
|
|
aptss update
|
|
yes n | aptss install gxde-25-upgrader -yqq
|
|
|
|
echo -e "${GREEN}>>> 预处理完成,准备开始核心升级...${NC}"
|
|
echo -e "${YELLOW}注意:接下来的过程请保持网络畅通,不要中断脚本运行。${NC}"
|
|
sleep 3
|
|
|
|
# 4. 执行核心升级逻辑 (原 gxde-post-upgrade-fix 内容)
|
|
|
|
# 检查当前桌面环境状态
|
|
ANDROID_INSTALLED=0
|
|
DESKTOP_MISSING=0
|
|
dpkg -s gxde-desktop-android &>/dev/null && ANDROID_INSTALLED=1
|
|
dpkg -s gxde-desktop &>/dev/null || DESKTOP_MISSING=1
|
|
|
|
# 确定要安装的桌面包
|
|
DESKTOP_PKG="gxde-desktop"
|
|
if [ "$ANDROID_INSTALLED" -eq 1 ] && [ "$DESKTOP_MISSING" -eq 1 ]; then
|
|
DESKTOP_PKG="gxde-desktop-android"
|
|
echo "检测到 Android 环境,将安装: $DESKTOP_PKG"
|
|
else
|
|
echo "将在升级后安装: $DESKTOP_PKG"
|
|
fi
|
|
|
|
# 执行 Full Upgrade
|
|
echo -e "${GREEN}>>> 正在执行系统全面升级 (Full Upgrade)...这可能需要很长时间${NC}"
|
|
yes n | env DEBIAN_FRONTEND=noninteractive aptss full-upgrade \
|
|
-o DPkg::options::="--force-confdef" \
|
|
-o DPkg::options::="--force-confold" \
|
|
-o DPkg::options::="--force-overwrite" \
|
|
-yqq --assume-yes
|
|
|
|
# 处理 grub 配置问题 (Hack)
|
|
echo "正在处理 GRUB 配置..."
|
|
if [ -f /var/lib/dpkg/info/grub-pc.postinst ]; then
|
|
mv -v /var/lib/dpkg/info/grub-pc.postinst /var/lib/dpkg/info/grub-pc.postinst.bak
|
|
dpkg --configure -a
|
|
mv -v /var/lib/dpkg/info/grub-pc.postinst.bak /var/lib/dpkg/info/grub-pc.postinst
|
|
else
|
|
dpkg --configure -a
|
|
fi
|
|
|
|
# 安装/更新核心软件包
|
|
echo -e "${GREEN}>>> 正在安装/重装核心组件...${NC}"
|
|
yes n | env DEBIAN_FRONTEND=noninteractive aptss install gxde-app-upgrader --reinstall -yqq
|
|
|
|
if yes n | env DEBIAN_FRONTEND=noninteractive aptss install $DESKTOP_PKG deepin-kwin-x11 libdtkcore-dev deepin-desktop-base spark-store gxde-control-center --reinstall -yqq; then
|
|
|
|
# 启用服务
|
|
systemctl enable dde-filemanager-daemon.service || true
|
|
|
|
echo -e "${GREEN}-----------------------${NC}"
|
|
echo -e "${GREEN}升级成功完成!${NC}"
|
|
echo -e "${YELLOW}请按回车键重启您的计算机,或者按 Ctrl+C 稍后手动重启。${NC}"
|
|
read
|
|
reboot
|
|
else
|
|
echo -e "${RED}!!!!!! 升级过程中出现错误 !!!!!!${NC}"
|
|
echo "请保留此终端输出,并反馈给 QQ 群 881201853"
|
|
exit 1
|
|
fi |