Last active 1 day ago

ubuntu_to_aos.sh Raw
1#!/bin/bash
2set -e
3set -o pipefail
4set -u
5
6PKG_TEMP_FILE=$(mktemp)
7trap 'rm -f "$PKG_TEMP_FILE"' EXIT
8
9Green="\033[32m"
10Red="\033[31m"
11Yellow="\033[33m"
12Blue="\033[36m"
13Font="\033[0m"
14GreenBG="\033[42;37m"
15RedBG="\033[41;37m"
16OK="${Green}[ OK ]${Font}"
17ERROR="${Red}[FAILED]${Font}"
18WARNING="${Yellow}[ WARN ]${Font}"
19
20function print_ok() {
21 echo -e "${OK} ${Blue} $1 ${Font}"
22}
23
24function print_error() {
25 echo -e "${ERROR} ${Red} $1 ${Font}"
26}
27
28function print_warn() {
29 echo -e "${WARNING} ${Yellow} $1 ${Font}"
30}
31
32function judge() {
33 if [[ 0 -eq $? ]]; then
34 print_ok "$1 succeeded"
35 sleep 0.2
36 else
37 print_error "$1 failed"
38 exit 1
39 fi
40}
41function clean_up() {
42 print_ok "Cleaning up old files..."
43 sudo umount /mnt/anduinos_squashfs >/dev/null 2>&1 || true
44 sudo umount /mnt/anduinos_iso >/dev/null 2>&1 || true
45 sudo rm -rf /mnt/anduinos_squashfs >/dev/null 2>&1 || true
46 sudo rm -rf /mnt/anduinos_iso >/dev/null 2>&1 || true
47 sudo rm /tmp/AnduinOS-1.4.0* >/dev/null 2>&1 || true
48 judge "Cleanup"
49}
50
51clean_up
52
53print_ok "Checking system compatibility..."
54codename=$(lsb_release -cs)
55if [[ "$codename" != "questing" ]] then
56 print_error "This upgrade script can only be run *from* AnduinOS Questing."
57 exit 1
58fi
59judge "System compatibility check"
60
61print_ok "Ensure current user is not root..."
62if [[ "$(id -u)" -eq 0 ]]; then
63 print_error "This script must not be run as root. Please run as a normal user with sudo privileges."
64 exit 1
65fi
66
67print_ok "Installing required packages (aria2, curl, lsb-release)..."
68sudo apt install -y aria2 curl lsb-release
69judge "Install required packages"
70
71CURRENT_LANG=${LANG%%.*}
72DOWNLOAD_URL="https://download.anduinos.com/1.4/1.4.0/AnduinOS-1.4.0-${CURRENT_LANG}.torrent"
73HASH_URL="https://download.anduinos.com/1.4/1.4.0/AnduinOS-1.4.0-${CURRENT_LANG}.sha256"
74
75print_ok "Current system language detected: ${CURRENT_LANG}"
76print_ok "Attempting to download with URL: ${DOWNLOAD_URL}"
77
78if ! curl --head --silent --fail "$DOWNLOAD_URL" >/dev/null; then
79 print_warn "Language pack for ${CURRENT_LANG} not found, falling back to en_US"
80 DOWNLOAD_URL="https://download.anduinos.com/1.4/1.4.0/AnduinOS-1.4.0-en_US.torrent"
81 HASH_URL="https://download.anduinos.com/1.4/1.4.0/AnduinOS-1.4.0-en_US.sha256"
82fi
83
84if ! curl --head --silent --fail "$DOWNLOAD_URL" >/dev/null; then
85 print_error "Download URL is not reachable. Please check your network connection."
86 exit 1
87fi
88
89print_ok "Downloading AnduinOS 1.4.0 torrent, please wait..."
90curl -o /tmp/AnduinOS-1.4.0.torrent "$DOWNLOAD_URL"
91curl -o /tmp/AnduinOS-1.4.0.sha256 "$HASH_URL"
92judge "Download AnduinOS 1.4.0 torrent"
93
94print_ok "Starting download via aria2..."
95aria2c --allow-overwrite=true --seed-ratio=0.0 --seed-time=0 -x 16 -s 16 -k 1M -d /tmp /tmp/AnduinOS-1.4.0.torrent
96judge "Download AnduinOS 1.4.0 ISO"
97
98ISO_FILE_PATH=$(ls /tmp/AnduinOS-1.4.0*.iso | head -n 1)
99print_ok "Ensure downloaded ISO file exists..."
100if [[ -f "$ISO_FILE_PATH" ]]; then
101 print_ok "Downloaded ISO file found: $ISO_FILE_PATH"
102else
103 print_error "Downloaded ISO file not found."
104 exit 1
105fi
106
107SHA256_FILE_PATH="/tmp/AnduinOS-1.4.0.sha256"
108
109print_ok "Verifying download integrity..."
110ACTUAL_SHA256=$(sha256sum "$ISO_FILE_PATH" | awk '{print $1}')
111EXPECTED_SHA256=$(grep 'SHA256:' "$SHA256_FILE_PATH" | awk '{print $2}')
112if [[ "$ACTUAL_SHA256" == "$EXPECTED_SHA256" ]]; then
113 print_ok "SHA256 checksum verification passed."
114else
115 print_ok "Expected SHA256: $EXPECTED_SHA256"
116 print_ok "Actual SHA256: $ACTUAL_SHA256"
117 print_error "SHA256 checksum verification failed. The downloaded file may be corrupted."
118 exit 1
119fi
120
121print_ok "Mounting the ISO..."
122sudo mkdir -p /mnt/anduinos_iso
123sudo mount -o loop,ro "$ISO_FILE_PATH" /mnt/anduinos_iso
124judge "Mount ISO"
125
126print_ok "Verifying content in the ISO..."
127(cd /mnt/anduinos_iso && sudo md5sum -c md5sum.txt)
128judge "ISO content integrity verification"
129
130print_ok "Mounting the filesystem.squashfs..."
131sudo mkdir -p /mnt/anduinos_squashfs
132sudo mount -o loop,ro /mnt/anduinos_iso/casper/filesystem.squashfs /mnt/anduinos_squashfs
133judge "Mount filesystem.squashfs"
134
135print_ok "Updating package mirrors..."
136curl -s https://gitlab.aiursoft.cn/anduin/init-server/-/raw/master/mirror.sh?ref_type=heads | bash
137sudo apt update
138judge "Update package mirrors"
139
140print_ok "Resetting APT configuration files..."
141sudo rm /etc/apt/preferences.d/* >/dev/null 2>&1 || true
142judge "Reset APT configuration files"
143
144print_ok "Updating Mozilla Team PPA..."
145sudo rm -f /etc/apt/sources.list.d/mozillateam*
146sudo rsync -Aax /mnt/anduinos_squashfs/etc/apt/sources.list.d/mozillateam* /etc/apt/sources.list.d/
147sudo apt update
148judge "Update Mozilla Team PPA"
149
150print_ok "Generating package list for upgrade..."
151MANIFEST_FILE="/mnt/anduinos_iso/casper/filesystem.manifest-desktop"
152
153cut -d' ' -f1 "$MANIFEST_FILE" \
154 | grep -v '^linux-' \
155 | grep -v '^lib' \
156 | grep -v '^plymouth-' \
157 | grep -v '^software-properties-' > "$PKG_TEMP_FILE"
158
159if [ ! -s "$PKG_TEMP_FILE" ]; then
160 print_ok "No missing packages to install."
161else
162 print_warn "Fast mode failed. Retrying one by one (robust mode)..."
163 print_ok "This may take 5-10 minutes. Only errors will be displayed."
164
165 PKG_INSTALL_LOG="/tmp/anduinos-pkg-install.log"
166
167 while read -r pkg; do
168 if [ -n "$pkg" ]; then
169 if sudo apt install --no-install-recommends -y "$pkg" > "$PKG_INSTALL_LOG" 2>&1; then
170 : # Bash的 "no-op" (空操作)
171 else
172 print_warn "Failed to install package: '$pkg'. Details:"
173 cat "$PKG_INSTALL_LOG"
174 echo -e "${Red}-----------------------------------------------------${Font}"
175 fi
176 fi
177 done < "$PKG_TEMP_FILE"
178
179 rm -f "$PKG_INSTALL_LOG"
180 print_ok "Robust missing package install mode finished."
181fi
182judge "Install missing packages"
183
184print_ok "Removing obsolete packages..."
185sudo apt autoremove -y \
186 distro-info \
187 software-properties-gtk \
188 ubuntu-advantage-tools \
189 ubuntu-pro-client \
190 ubuntu-pro-client-l10n \
191 ubuntu-release-upgrader-gtk \
192 ubuntu-report \
193 ubuntu-settings \
194 update-notifier-common \
195 update-manager \
196 update-manager-core \
197 update-notifier \
198 ubuntu-release-upgrader-core \
199 ubuntu-advantage-desktop-daemon \
200 kgx
201judge "Remove obsolete packages"
202
203print_ok "Upgrading installed packages..."
204sudo apt upgrade -y
205sudo apt autoremove --purge -y
206judge "System package cleanup"
207
208print_ok "Upgrading GNOME Shell extensions..."
209sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/gnome-shell/extensions/ /usr/share/gnome-shell/extensions/
210judge "Upgrade GNOME Shell extensions"
211
212print_ok "Upgrading icon and theme files..."
213sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/icons/ /usr/share/icons/
214sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/themes/ /usr/share/themes/
215judge "Upgrade icon and theme files"
216
217print_ok "Upgrading desktop backgrounds..."
218sudo rsync -Aax --update /mnt/anduinos_squashfs/usr/share/backgrounds/ /usr/share/backgrounds/
219sudo rsync -Aax --update /mnt/anduinos_squashfs/usr/share/gnome-background-properties/ /usr/share/gnome-background-properties/
220judge "Upgrade desktop backgrounds"
221
222print_ok "Upgrading APT configuration files..."
223sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/etc/apt/apt.conf.d/ /etc/apt/apt.conf.d/
224judge "Upgrade APT configuration files"
225
226print_ok "Upgrading APT preferences files..."
227sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/etc/apt/preferences.d/ /etc/apt/preferences.d/
228judge "Upgrade APT preferences files"
229
230print_ok "Upgrading session files..."
231sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/gnome-session/sessions/ /usr/share/gnome-session/sessions/
232sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/wayland-sessions/ /usr/share/wayland-sessions/
233judge "Upgrade session files"
234
235print_ok "Upgrading pixmaps..."
236sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/pixmaps/ /usr/share/pixmaps/
237judge "Upgrade pixmaps"
238
239print_ok "Upgrading /etc/skel/ files..."
240sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/etc/skel/ /etc/skel/
241judge "Upgrade /etc/skel/ files"
242
243print_ok "Upgrading python-apt templates and distro info..."
244sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/python-apt/templates/ /usr/share/python-apt/templates/
245sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/distro-info/ /usr/share/distro-info/
246judge "Upgrade python-apt templates and distro info"
247
248print_ok "Upgrading deskmon service..."
249sudo rsync -Aax /mnt/anduinos_squashfs/usr/local/bin/deskmon /usr/local/bin/deskmon
250sudo rsync -Aax /mnt/anduinos_squashfs/etc/systemd/user/deskmon.service /etc/systemd/user/deskmon.service
251sudo rsync -Aax /mnt/anduinos_squashfs/etc/systemd/user/default.target.wants/deskmon.service /etc/systemd/user/default.target.wants/deskmon.service
252judge "Upgrade deskmon service"
253
254print_ok "Updating system version information..."
255sudo rsync -Aax /mnt/anduinos_squashfs/usr/local/bin/do_anduinos_upgrade /usr/local/bin/do_anduinos_upgrade
256sudo rsync -Aax /mnt/anduinos_squashfs/usr/bin/add-apt-repository /usr/bin/add-apt-repository
257sudo rsync -Aax /mnt/anduinos_squashfs/etc/lsb-release /etc/lsb-release
258sudo rsync -Aax /mnt/anduinos_squashfs/etc/issue /etc/issue
259sudo rsync -Aax /mnt/anduinos_squashfs/etc/issue.net /etc/issue.net
260sudo rsync -Aax /mnt/anduinos_squashfs/etc/os-release /etc/os-release
261sudo rsync -Aax /mnt/anduinos_squashfs/usr/lib/os-release /usr/lib/os-release
262sudo rsync -Aax /mnt/anduinos_squashfs/etc/legal /etc/legal
263sudo rsync -Aax /mnt/anduinos_squashfs/etc/sysctl.d/20-apparmor-donotrestrict.conf /etc/sysctl.d/20-apparmor-donotrestrict.conf
264sudo rsync -Aax /mnt/anduinos_squashfs/var/lib/flatpak/repo/config /var/lib/flatpak/repo/config
265sudo rsync -Aax /mnt/anduinos_squashfs/usr/share/plymouth/themes/spinner/bgrt-fallback.png /usr/share/plymouth/themes/spinner/bgrt-fallback.png
266sudo rsync -Aax /mnt/anduinos_squashfs/usr/share/plymouth/themes/spinner/watermark.png /usr/share/plymouth/themes/spinner/watermark.png
267sudo rsync -Aax /mnt/anduinos_squashfs/usr/share/plymouth/ubuntu-logo.png /usr/share/plymouth/ubuntu-logo.png
268judge "Update system version information"
269
270print_ok "Applying dconf settings patch..."
271PATCH_URL="https://gitlab.aiursoft.cn/anduin/anduinos/-/raw/1.4/src/mods/35-dconf-patch/dconf.ini?ref_type=heads"
272curl -sL "$PATCH_URL" | dconf load /org/gnome/
273judge "Apply dconf settings patch"
274
275print_ok "Upgrade completed! Please reboot your system to apply all changes."
276
277print_ok "Starting cleanup..."
278clean_up