最后活跃于 2 days ago

修订 30efbe0b49e1123052a02ec2fa8c2011d6ada79c

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