-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
159 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# SPDX-License-Identifier: MIT | ||
# SPDX-FileCopyrightText: Copyright 2024 SUSE LLC | ||
# SPDX-FileCopyrightText: Copyright 2024 Richard Brown | ||
|
||
if [ "${migrate}" == 1 ]; then | ||
probe_partitions $TIK_INSTALL_DEVICE "btrfs" "/usr/lib/os-release" | ||
|
||
if [ -z "${probedpart}" ]; then | ||
error "MIGRATION FAILED: New Installation NOT FOUND" | ||
fi | ||
|
||
prun /usr/bin/mkdir ${mig_dir}/mnt | ||
prun /usr/bin/mount -o compress=zstd:1 ${probedpart} ${mig_dir}/mnt | ||
prun /usr/bin/systemd-repart --pretty 0 --root ${mig_dir}/mnt --dry-run=0 ${probedpart} | ||
prun /usr/bin/mount -o compress=zstd:1,subvol=/@/var ${probedpart} ${mig_dir}/mnt/var | ||
prun /lib/systemd/systemd-growfs ${mig_dir}/mnt/var | ||
etcmountcmd=$(cat ${mig_dir}/mnt/etc/fstab | grep "overlay /etc" | sed 's/\/sysroot\//${mig_dir}\/mnt\//g' | sed 's/\/work-etc.*/\/work-etc ${mig_dir}\/mnt\/etc\//' | sed 's/overlay \/etc overlay/\/usr\/bin\/mount -t overlay overlay -o/') | ||
prun eval "$etcmountcmd" | ||
prun /usr/bin/cat ${mig_dir}/passwd.out >> ${mig_dir}/mnt/etc/passwd | ||
prun /usr/bin/cat ${mig_dir}/shadow.out >> ${mig_dir}/mnt/etc/shadow | ||
prun /usr/bin/sed -i "/^wheel:/ s/$/$(head -n 1 ${mig_dir}/passwd.out | awk -F'[/:]' '{print $1}')/" ${mig_dir}/mnt/etc/group | ||
prun /usr/bin/cp -a ${mig_dir}/system-connections ${mig_dir}/mnt/etc/NetworkManager/system-connections | ||
prun /usr/bin/umount ${mig_dir}/mnt/etc | ||
prun /usr/bin/umount ${mig_dir}/mnt/var | ||
prun /usr/bin/umount ${mig_dir}/mnt | ||
prun /usr/bin/mount -o compress=zstd:1,subvol=/@ ${probedpart} ${mig_dir}/mnt | ||
prun /usr/sbin/btrfs subvolume delete ${mig_dir}/mnt/home | ||
(prun /usr/sbin/btrfs send ${mig_dir}/${snap_dir} | pv -f -F "# %b copied in %t %r" | prun /usr/sbin/btrfs receive ${mig_dir}/mnt) 2>&1 | d --progress --title="Restoring /home" --pulsate --auto-close --no-cancel --width=400 | ||
prun /usr/bin/mv ${mig_dir}/mnt/${snap_dir} ${mig_dir}/mnt/home | ||
prun /usr/sbin/btrfs property set -f -ts ${mig_dir}/mnt/home ro false | ||
prun /usr/bin/umount ${mig_dir}/mnt | ||
prun /usr/bin/rmdir ${mig_dir}/mnt | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
# SPDX-License-Identifier: MIT | ||
# SPDX-FileCopyrightText: Copyright 2023-2024 SUSE LLC | ||
# SPDX-FileCopyrightText: Copyright 2023-2024 Richard Brown | ||
# SPDX-FileCopyrightText: Copyright 2024 SUSE LLC | ||
# SPDX-FileCopyrightText: Copyright 2024 Richard Brown | ||
|
||
d --info --ok-label="Install Now" --no-wrap --width=300 --height=300 --icon=distributor-logo-Aeon-symbolic --title="" --text="<big>Welcome to ${TIK_OS_NAME}</big>\n\nPlease press <b>Install Now</b> to continue" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
# SPDX-License-Identifier: MIT | ||
# SPDX-FileCopyrightText: Copyright 2024 SUSE LLC | ||
# SPDX-FileCopyrightText: Copyright 2024 Richard Brown | ||
|
||
mig_dir=/var/lib/tik/mig | ||
snap_dir=homebk | ||
if [ -d ${mig_dir} ]; then | ||
prun /usr/bin/mkdir -p ${mig_dir} | ||
fi | ||
|
||
probe_partitions() { | ||
local filesystem_type=$2 | ||
local filematch=$3 | ||
local device=$1 | ||
local mountops | ||
local part | ||
|
||
if [[ "${filesystem_type}" == "btrfs" ]]; then | ||
mountops="-o compress=zstd:1" | ||
fi | ||
prun /usr/bin/mkdir -p ${mig_dir}/mnt | ||
probedpart="" | ||
for part in $(lsblk ${device} -p -n -r -o ID-LINK,FSTYPE|tr -s ' ' ":"|grep ":${filesystem_type}"|cut -d: -f1); do | ||
prun /usr/bin/mount ${mountops} /dev/disk/by-id/${part} ${mig_dir}/mnt | ||
# Check if ${filematch} exists | ||
if [ -f ${mig_dir}/mnt/${filematch} ]; then | ||
probedpart=/dev/disk/by-id/${part} | ||
log "[probe_partitions] /dev/disk/by-id/${part} found" | ||
if grep -q 'PRETTY_NAME="openSUSE MicroOS"' ${mig_dir}/mnt/${filematch} && [ -f ${mig_dir}/mnt/usr/share/doc/packages/patterns-microos/desktop-gnome.txt ]; then | ||
# Found legacy Aeon, activate easter egg | ||
legacy_aeon=1 | ||
fi | ||
continue | ||
else | ||
continue | ||
fi | ||
done | ||
prun /usr/bin/umount ${mig_dir}/mnt | ||
prun /usr/bin/rmdir ${mig_dir}/mnt | ||
} | ||
|
||
if [ -z "$(ls -A ${mig_dir})" ]; then | ||
log "existing backup found" | ||
zenity --question --no-wrap --cancel-label="No, Delete Backup" --title="Existing user backup detected" --text="These users can be restored to the new installation\n\nWould you like to use this backup?" | ||
oldbackupyn=$? | ||
log "[oldbackupyn][${oldbackupyn}]" | ||
if [ "${oldbackupyn}" == 0 ]; then | ||
skipbackup=1 | ||
migrate=1 | ||
log "backup skipped, migration will use existing backup" | ||
else | ||
prun /usr/sbin/btrfs subvolume delete ${mig_dir}/${snap_dir} | ||
prun /usr/bin/rm ${mig_dir}/*.out | ||
prun /usr/bin/rm ${mig_dir}/system-connections/* | ||
prun /usr/bin/rmdir ${mig_dir}/system-connections | ||
fi | ||
fi | ||
|
||
get_disk | ||
|
||
if [ -z "${skipbackup}" ]; then | ||
# Probe selected disk for a btrfs partition containing /usr/lib/os-release | ||
probe_partitions $TIK_INSTALL_DEVICE "btrfs" "/usr/lib/os-release" | ||
|
||
if [ -n "${probedpart}" ]; then | ||
prun /usr/bin/mkdir ${mig_dir}/mnt | ||
if prun /usr/bin/mount -o compress=zstd:1,subvol=/@/home ${probedpart} ${mig_dir}/mnt; then | ||
prun /usr/sbin/btrfs quota rescan -w ${mig_dir}/mnt | d --progress --title="Detected existing /home subvolume.." --pulsate --auto-close --no-cancel --width=400 | ||
home_size=$(prun /usr/sbin/btrfs qgroup show --raw -f ${mig_dir}/mnt | grep @/home$ | awk '{print $2}') | ||
tik_stick_size=$(prun /usr/sbin/btrfs fi usage --raw ${mig_dir} | grep estimated | awk '{print $3}') | ||
if [ ${home_size} -gt ${tik_stick_size} ]; then | ||
# Not enough space to offer migration | ||
migrate=0 | ||
fi | ||
if [ ${home_size} -le 16384 ]; then | ||
# /home subvolume is empty | ||
migrate=0 | ||
fi | ||
prun /usr/bin/umount ${mig_dir}/mnt | ||
else | ||
log "no @/home subvolume found on ${probedpart}" | ||
migrate=0 | ||
fi | ||
prun /usr/bin/rmdir ${mig_dir}/mnt | ||
|
||
# partition found, /home subvolume found, no known reason to not migrate, so ask the user | ||
if [ -z "${migrate}" ]; then | ||
if [ "${legacy_aeon}" == 1 ]; then | ||
d --info --width=300 --height=300 --icon=distributor-logo-Aeon-symbolic --no-wrap --title="Message from the Aeon Team" --text="We'd like to thank you for adopting openSUSE Aeon so early in it's development,\nbefore we fully understood what we were building or how we wanted it to look\n\nWe are sorry that you need to reinstall your system\n\nThank you so much for your support.\nWe hope you enjoy the new look openSUSE Aeon" | ||
fi | ||
zenity --question --no-wrap --title="Backup users from the existing install?" --text="These users will be restored to the new installation." | ||
migrateyn=$? | ||
if [ "${migrateyn}" == 0 ]; then | ||
migrate=1 | ||
else | ||
migrate=0 | ||
fi | ||
fi | ||
|
||
fi | ||
|
||
if [ "${migrate}" == 1 ]; then | ||
# We're migrating, lets go! | ||
prun /usr/bin/mkdir ${mig_dir}/mnt | ||
prun /usr/bin/mount -o compress=zstd:1,subvol=/@/home ${probedpart} ${mig_dir}/mnt | ||
prun /usr/sbin/btrfs subvolume snapshot -r ${mig_dir}/mnt ${mig_dir}/mnt/${snap_dir} | ||
(prun /usr/sbin/btrfs send ${mig_dir}/mnt/${snap_dir} | pv -f -F "# %b copied in %t %r" | prun /usr/sbin/btrfs receive ${mig_dir}) 2>&1 | d --progress --title="Backing up /home" --pulsate --auto-close --no-cancel --width=400 | ||
prun /usr/sbin/btrfs subvolume delete ${mig_dir}/mnt/${snap_dir} | ||
prun /usr/bin/umount ${mig_dir}/mnt | ||
prun /usr/bin/mount -o compress=zstd:1 ${probedpart} ${mig_dir}/mnt | ||
prun /usr/bin/mount -o compress=zstd:1,subvol=/@/var ${probedpart} ${mig_dir}/mnt/var | ||
etcmntcmd=$(cat ${mig_dir}/mnt/etc/fstab | grep "overlay /etc" | sed 's/\/sysroot\//${mig_dir}\/mnt\//g' | sed 's/\/work-etc.*/\/work-etc ${mig_dir}\/mnt\/etc\//' | sed 's/overlay \/etc overlay/\/usr\/bin\/mount -t overlay overlay -o/') | ||
prun eval "$etcmntcmd" | ||
prun /usr/bin/awk -F'[/:]' '($3 >= 1000 && $3 != 65534)' ${mig_dir}/mnt/etc/passwd > ${mig_dir}/passwd.out | ||
prun /usr/bin/awk -F'[/:]' '{if ($3 >= 1000 && $3 != 65534) print $1}' ${mig_dir}/mnt/etc/passwd | prun /usr/bin/grep -f - ${mig_dir}/mnt/etc/shadow > ${mig_dir}/shadow.out | ||
prun /usr/bin/cp -a ${mig_dir}/mnt/etc/NetworkManager/system-connections ${mig_dir}/system-connections | ||
prun /usr/bin/umount ${mig_dir}/mnt/etc | ||
prun /usr/bin/umount ${mig_dir}/mnt/var | ||
prun /usr/bin/umount ${mig_dir}/mnt | ||
prun /usr/bin/rmdir ${mig_dir}/mnt | ||
fi | ||
fi |