Ultima attività 2 days ago

Revisione a8770ce38a180dd08c98d1328a2c9e2d8e26a027

ubuntu_to_aos.sh Raw
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
8export DEBIAN_FRONTEND=noninteractive
9export LATEST_VERSION="1.1.10"
10export CODE_NAME="noble"
11export OS_ID="AnduinOS"
12export CURRENT_VERSION=$(cat /etc/lsb-release | grep DISTRIB_RELEASE | cut -d "=" -f 2)
13
14#==========================
15# Color
16#==========================
17Green="\033[32m"
18Red="\033[31m"
19Yellow="\033[33m"
20Blue="\033[36m"
21Font="\033[0m"
22GreenBG="\033[42;37m"
23RedBG="\033[41;37m"
24OK="${Green}[ OK ]${Font}"
25ERROR="${Red}[FAILED]${Font}"
26WARNING="${Yellow}[ WARN ]${Font}"
27
28#==========================
29# Print Colorful Text
30#==========================
31function print_ok() {
32 echo -e "${OK} ${Blue} $1 ${Font}"
33}
34
35function print_error() {
36 echo -e "${ERROR} ${Red} $1 ${Font}"
37}
38
39function print_warn() {
40 echo -e "${WARNING} ${Yellow} $1 ${Font}"
41}
42
43#==========================
44# Judge function
45#==========================
46function judge() {
47 if [[ 0 -eq $? ]]; then
48 print_ok "$1 succeeded"
49 sleep 0.2
50 else
51 print_error "$1 failed"
52 exit 1
53 fi
54}
55#==========================
56
57# Clean up function
58#==========================
59function clean_up() {
60 # Clean up
61 print_ok "Cleaning up old files..."
62 sudo umount /mnt/anduinos_squashfs >/dev/null 2>&1 || true
63 sudo umount /mnt/anduinos_iso >/dev/null 2>&1 || true
64 sudo rm -rf /mnt/anduinos_squashfs >/dev/null 2>&1 || true
65 sudo rm -rf /mnt/anduinos_iso >/dev/null 2>&1 || true
66 sudo rm /tmp/AnduinOS-1.4.0* >/dev/null 2>&1 || true
67 judge "Cleanup"
68}
69
70clean_up
71
72print_ok "Checking system compatibility..."
73codename=$(lsb_release -cs)
74if [[ "$codename" != "questing" ]] then
75 print_error "This upgrade script only supports AnduinOS Noble, Verne, and Turing."
76 exit 1
77fi
78judge "System compatibility check"
79
80print_ok "Installing required packages (aria2, curl, lsb-release)..."
81sudo apt install -y aria2 curl lsb-release
82judge "Install required packages"
83
84# $LANG maybe en_US.UTF-8, so we use only the `en_US` part
85CURRENT_LANG=${LANG%%.*}
86DOWNLOAD_URL="https://download.anduinos.com/1.4/1.4.0/AnduinOS-1.4.0-${CURRENT_LANG}.torrent"
87HASH_URL="https://download.anduinos.com/1.4/1.4.0/AnduinOS-1.4.0-${CURRENT_LANG}.sha256"
88
89print_ok "Current system language detected: ${CURRENT_LANG}"
90print_ok "Attempting to download with URL: ${DOWNLOAD_URL}"
91
92# If download URL is not reachable, fallback to en_US
93if ! curl --head --silent --fail "$DOWNLOAD_URL" >/dev/null; then
94 print_warn "Language pack for ${CURRENT_LANG} not found, falling back to en_US"
95 DOWNLOAD_URL="https://download.anduinos.com/1.4/1.4.0/AnduinOS-1.4.0-en_US.torrent"
96 HASH_URL="https://download.anduinos.com/1.4/1.4.0/AnduinOS-1.4.0-en_US.sha256"
97fi
98
99# Ensure download URL is reachable
100if ! curl --head --silent --fail "$DOWNLOAD_URL" >/dev/null; then
101 print_error "Download URL is not reachable. Please check your network connection."
102 exit 1
103fi
104
105print_ok "Downloading AnduinOS 1.4.0 torrent, please wait..."
106curl -o /tmp/AnduinOS-1.4.0.torrent "$DOWNLOAD_URL"
107curl -o /tmp/AnduinOS-1.4.0.sha256 "$HASH_URL"
108judge "Download AnduinOS 1.4.0 torrent"
109
110print_ok "Starting download via aria2..."
111aria2c --allow-overwrite=true --seed-ratio=0.0 --seed-time=0 -x 16 -s 16 -k 1M -d /tmp /tmp/AnduinOS-1.4.0.torrent
112judge "Download AnduinOS 1.4.0 ISO"
113
114ISO_FILE_PATH=$(ls /tmp/AnduinOS-1.4.0*.iso | head -n 1)
115print_ok "Ensure downloaded ISO file exists..."
116if [[ -f "$ISO_FILE_PATH" ]]; then
117 print_ok "Downloaded ISO file found: $ISO_FILE_PATH"
118else
119 print_error "Downloaded ISO file not found."
120 exit 1
121fi
122
123SHA256_FILE_PATH="/tmp/AnduinOS-1.4.0.sha256"
124
125print_ok "Verifying download integrity..."
126ACTUAL_SHA256=$(sha256sum "$ISO_FILE_PATH" | awk '{print $1}')
127EXPECTED_SHA256=$(grep 'SHA256:' "$SHA256_FILE_PATH" | awk '{print $2}')
128if [[ "$ACTUAL_SHA256" == "$EXPECTED_SHA256" ]]; then
129 print_ok "SHA256 checksum verification passed."
130else
131 print_ok "Expected SHA256: $EXPECTED_SHA256"
132 print_ok "Actual SHA256: $ACTUAL_SHA256"
133 print_error "SHA256 checksum verification failed. The downloaded file may be corrupted."
134 exit 1
135fi
136
137print_ok "Mounting the ISO..."
138sudo mkdir -p /mnt/anduinos_iso
139sudo mount -o loop,ro "$ISO_FILE_PATH" /mnt/anduinos_iso
140judge "Mount ISO"
141
142print_ok "Verifying content in the ISO..."
143(
144 cd /mnt/anduinos_iso && \
145 sudo md5sum -c md5sum.txt && \
146 print_ok "Verify content succeeded."
147)
148print_ok "Content integrity verified."
149
150print_ok "Mounting the filesystem.squashfs..."
151sudo mkdir -p /mnt/anduinos_squashfs
152sudo mount -o loop,ro /mnt/anduinos_iso/casper/filesystem.squashfs /mnt/anduinos_squashfs
153judge "Mount filesystem.squashfs"
154
155print_ok "Updating package mirrors..."
156curl -s https://gitlab.aiursoft.cn/anduin/init-server/-/raw/master/mirror.sh?ref_type=heads | bash
157sudo apt update
158judge "Update package mirrors"
159
160# Reset apt settings
161print_ok "Resetting APT configuration files..."
162sudo rm /etc/apt/preferences.d/* >/dev/null 2>&1 || true
163judge "Reset APT configuration files"
164
165# Add Mozilla Team PPA
166print_ok "Updating Mozilla Team PPA..."
167sudo rm -f /etc/apt/sources.list.d/mozillateam*
168sudo cp /mnt/anduinos_squashfs/etc/apt/sources.list.d/mozillateam* /etc/apt/sources.list.d/
169judge "Update Mozilla Team PPA"
170
171# Install missing package.
172print_ok "Installing missing packages from the new release..."
173MANIFEST_FILE="/mnt/anduinos_iso/casper/filesystem.manifest-desktop"
174PACKAGE_LIST=$(cut -d' ' -f1 "$MANIFEST_FILE" \
175 | grep -v '^linux-' \
176 | grep -v '^lib' \
177 | grep -v '^plymouth-' \
178 | grep -v '^software-properties-' \
179 | xargs)
180sudo apt install -y $PACKAGE_LIST
181judge "Install missing packages"
182
183# Remove obsolete packages.
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 APT configuration files..."
213sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/etc/apt/apt.conf.d/ /etc/apt/apt.conf.d/
214judge "Upgrade APT configuration files"
215
216print_ok "Upgrading APT preferences files..."
217sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/etc/apt/preferences.d/ /etc/apt/preferences.d/
218judge "Upgrade APT preferences files"
219
220print_ok "Upgrading session files..."
221sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/gnome-session/sessions/ /usr/share/gnome-session/sessions/
222sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/wayland-sessions/ /usr/share/wayland-sessions/
223judge "Upgrade session files"
224
225print_ok "Upgrading pixmaps..."
226sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/pixmaps/ /usr/share/pixmaps/
227judge "Upgrade pixmaps"
228
229print_ok "Upgrading python-apt templates and distro info..."
230sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/python-apt/templates/ /usr/share/python-apt/templates/
231sudo rsync -Aax --update --delete /mnt/anduinos_squashfs/usr/share/distro-info/ /usr/share/distro-info/
232judge "Upgrade python-apt templates and distro info"
233
234print_ok "Upgrading deskmon service..."
235systemctl --user stop deskmon.service || true
236sudo rsync -Aax /mnt/anduinos_squashfs/usr/local/bin/deskmon /usr/local/bin/deskmon
237sudo rsync -Aax /mnt/anduinos_squashfs/etc/systemd/user/deskmon.service /etc/systemd/user/deskmon.service
238sudo rsync -Aax /mnt/anduinos_squashfs/etc/systemd/user/default.target.wants/deskmon.service /etc/systemd/user/default.target.wants/deskmon.service
239systemctl --user daemon-reload
240systemctl --user start deskmon.service
241judge "Upgrade deskmon service"
242
243print_ok "Updating system version information..."
244sudo rsync -Aax /mnt/anduinos_squashfs/usr/bin/do_anduinos_upgrade /usr/local/bin/do_anduinos_upgrade
245sudo rsync -Aax /mnt/anduinos_squashfs/usr/bin/add-apt-repository /usr/bin/add-apt-repository
246sudo rsync -Aax /mnt/anduinos_squashfs/etc/lsb-release /etc/lsb-release
247sudo rsync -Aax /mnt/anduinos_squashfs/etc/issue /etc/issue
248sudo rsync -Aax /mnt/anduinos_squashfs/etc/issue.net /etc/issue.net
249sudo rsync -Aax /mnt/anduinos_squashfs/etc/os-release /etc/os-release
250sudo rsync -Aax /mnt/anduinos_squashfs/usr/lib/os-release /usr/lib/os-release
251sudo rsync -Aax /mnt/anduinos_squashfs/etc/legal /etc/legal
252sudo rsync -Aax /mnt/anduinos_squashfs/etc/sysctl.d/20-apparmor-donotrestrict.conf /etc/sysctl.d/20-apparmor-donotrestrict.conf
253judge "Update system version information"
254
255print_ok "Applying dconf settings patch..."
256VERSION=$(grep -oP "VERSION_ID=\"\\K\\d+\\.\\d+" /etc/os-release)
257curl -sL https://gitlab.aiursoft.cn/anduin/anduinos/-/raw/$VERSION/src/mods/35-dconf-patch/dconf.ini?ref_type=heads | dconf load /org/gnome/
258judge "Apply dconf settings patch"
259
260print_ok "Upgrade completed! Please reboot your system to apply all changes."
261
262print_ok "Starting cleanup..."
263clean_up
264