Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package tik for openSUSE:Factory checked in at 2024-06-20 16:47:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/tik (Old) and /work/SRC/openSUSE:Factory/.tik.new.18349 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "tik" Thu Jun 20 16:47:20 2024 rev:13 rq:1181742 version:1.1.9 Changes: -------- --- /work/SRC/openSUSE:Factory/tik/tik.changes 2024-06-17 19:29:56.351229656 +0200 +++ /work/SRC/openSUSE:Factory/.tik.new.18349/tik.changes 2024-06-20 16:47:47.950894894 +0200 @@ -1,0 +2,7 @@ +Wed Jun 19 12:11:44 UTC 2024 - rbr...@suse.com + +- Update to version 1.1.9: + * Fix indentations + * Add support for migrating fprint fingerprints + +------------------------------------------------------------------- Old: ---- tik-1.1.8.obscpio New: ---- tik-1.1.9.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ tik.spec ++++++ --- /var/tmp/diff_new_pack.Tk98bn/_old 2024-06-20 16:47:48.478913466 +0200 +++ /var/tmp/diff_new_pack.Tk98bn/_new 2024-06-20 16:47:48.482913606 +0200 @@ -17,7 +17,7 @@ Name: tik -Version: 1.1.8 +Version: 1.1.9 Release: 0 Summary: Transactional Installation Kit License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Tk98bn/_old 2024-06-20 16:47:48.514914732 +0200 +++ /var/tmp/diff_new_pack.Tk98bn/_new 2024-06-20 16:47:48.518914872 +0200 @@ -3,7 +3,7 @@ <service name="obs_scm" mode="manual"> <param name="url">https://github.com/sysrich/tik.git</param> <param name="scm">git</param> - <param name="revision">v1.1.8</param> + <param name="revision">v1.1.9</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*)</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.Tk98bn/_old 2024-06-20 16:47:48.546915858 +0200 +++ /var/tmp/diff_new_pack.Tk98bn/_new 2024-06-20 16:47:48.554916139 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/sysrich/tik.git</param> - <param name="changesrevision">965e7b0ed36f5347975cd01051ad7ea11457339d</param></service></servicedata> + <param name="changesrevision">c53a8b45a5931d6af1b69da91031dcf40d54611a</param></service></servicedata> (No newline at EOF) ++++++ tik-1.1.8.obscpio -> tik-1.1.9.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tik-1.1.8/usr/bin/tik new/tik-1.1.9/usr/bin/tik --- old/tik-1.1.8/usr/bin/tik 2024-06-17 17:26:18.000000000 +0200 +++ new/tik-1.1.9/usr/bin/tik 2024-06-19 14:10:16.000000000 +0200 @@ -21,7 +21,7 @@ # Check for debug mode if [[ $1 == "--debug" ]]; then - debug=1 + debug=1 fi # Read configuration files, /usr first, then /etc @@ -30,22 +30,22 @@ # Check essential paths exist if [ ! -d "${TIK_IMG_DIR}" ]; then - error "${TIK_IMG_DIR} does not exist" + error "${TIK_IMG_DIR} does not exist" fi cleanup() { - retval=$? - log "[STOP][${retval}] $0" - if [ "${debug}" == "1" ]; then - zenity --timeout 5 --info --no-wrap --text="<b>Test Succeeded:</b>\n\nHave a nice day!" - elif [ "${retval}" == "0" ]; then - zenity --timeout 5 --info --no-wrap --title="Installation Complete!" --text="${TIK_OS_NAME} has been installed.\n\n<b>System is rebooting</b>" - systemctl reboot - else - zenity --error --no-wrap --title="Installation Failed" --text="Please file a bug report at <tt>${TIK_BUG_URL}</tt>\n\nPlease include the <tt>tik.log</tt> file\nIt can be found on the IGNITION partition on this USB Stick\n\n<b>System is shutting down</b>" - cp -a ${tik_log} /ignition - systemctl poweroff - fi + retval=$? + log "[STOP][${retval}] $0" + if [ "${debug}" == "1" ]; then + zenity --timeout 5 --info --no-wrap --text="<b>Test Succeeded:</b>\n\nHave a nice day!" + elif [ "${retval}" == "0" ]; then + zenity --timeout 5 --info --no-wrap --title="Installation Complete!" --text="${TIK_OS_NAME} has been installed.\n\n<b>System is rebooting</b>" + systemctl reboot + else + zenity --error --no-wrap --title="Installation Failed" --text="Please file a bug report at <tt>${TIK_BUG_URL}</tt>\n\nPlease include the <tt>tik.log</tt> file\nIt can be found on the IGNITION partition on this USB Stick\n\n<b>System is shutting down</b>" + cp -a ${tik_log} /ignition + systemctl poweroff + fi } trap cleanup EXIT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tik-1.1.8/usr/lib/tik/lib/tik-functions new/tik-1.1.9/usr/lib/tik/lib/tik-functions --- old/tik-1.1.8/usr/lib/tik/lib/tik-functions 2024-06-17 17:26:18.000000000 +0200 +++ new/tik-1.1.9/usr/lib/tik/lib/tik-functions 2024-06-19 14:10:16.000000000 +0200 @@ -3,75 +3,75 @@ # SPDX-FileCopyrightText: Copyright 2023-2024 Richard Brown log(){ - echo "[${tik_module}][$(date +"%Y%m%d-%T")][LOG] $*" 1>&2 + echo "[${tik_module}][$(date +"%Y%m%d-%T")][LOG] $*" 1>&2 } warn() { - echo "[${tik_module}][$(date +"%Y%m%d-%T")][WARN] $*" 1>&2 - d --warning --text="$*" + echo "[${tik_module}][$(date +"%Y%m%d-%T")][WARN] $*" 1>&2 + d --warning --text="$*" } error() { - echo "[${tik_module}][$(date +"%Y%m%d-%T")][ERROR] $*" 1>&2 - d --error --text "$*" - exit 1 + echo "[${tik_module}][$(date +"%Y%m%d-%T")][ERROR] $*" 1>&2 + d --error --text "$*" + exit 1 } d(){ - while true - do - retval=0 - result="$(zenity "$@")" || retval=$? - log "[zenity][${retval}][${result}] $@" - case $retval in - 0) - return 0 - ;; - 1|255) - zenity --question --text="Do you really want to quit?" && exit 1 - ;; - esac - done + while true + do + retval=0 + result="$(zenity "$@")" || retval=$? + log "[zenity][${retval}][${result}] $@" + case $retval in + 0) + return 0 + ;; + 1|255) + zenity --question --text="Do you really want to quit?" && exit 1 + ;; + esac + done } # variant of privileged run (prun) function that doesn't require the pkexec call to return 0 prun-opt() { - if [ "${debug}" == "1" ]; then - log "[pkexec-noexec] $@" - else - retval=0 - pkexec "$@" - retval=$? - log "[pkexec][${retval}] $@" - fi + if [ "${debug}" == "1" ]; then + log "[pkexec-noexec] $@" + else + retval=0 + pkexec "$@" + retval=$? + log "[pkexec][${retval}] $@" + fi } # Most commonly used prun function, which requires the called command to work prun() { - prun-opt "$@" - if [ "${retval}" != "0" ]; then - error "Command <tt>$@</tt> FAILED" - fi + prun-opt "$@" + if [ "${retval}" != "0" ]; then + error "Command <tt>$@</tt> FAILED" + fi } get_persistent_device_from_unix_node() { - local unix_device=$1 - local schema=$2 - local node - local persistent_name - node=$(basename "${unix_device}") - for persistent_name in /dev/disk/"${schema}"/*; do - if [ "$(basename "$(readlink "${persistent_name}")")" = "${node}" ];then - if [[ ${persistent_name} =~ ^/dev/disk/"${schema}"/nvme-eui ]]; then - # Filter out nvme-eui nodes as they are not descriptive to the user - continue - fi - echo "${persistent_name}" - return - fi - done - warn "Could not find <tt>${schema}</tt> representation of <tt>${node}</tt>. Using original device <tt>${unix_device}</tt>" - echo "${unix_device}" + local unix_device=$1 + local schema=$2 + local node + local persistent_name + node=$(basename "${unix_device}") + for persistent_name in /dev/disk/"${schema}"/*; do + if [ "$(basename "$(readlink "${persistent_name}")")" = "${node}" ];then + if [[ ${persistent_name} =~ ^/dev/disk/"${schema}"/nvme-eui ]]; then + # Filter out nvme-eui nodes as they are not descriptive to the user + continue + fi + echo "${persistent_name}" + return + fi + done + warn "Could not find <tt>${schema}</tt> representation of <tt>${node}</tt>. Using original device <tt>${unix_device}</tt>" + echo "${unix_device}" } get_disk() { @@ -300,17 +300,17 @@ } set_boot_target() { - if [ "${debug}" == "1" ]; then - log "[debug] Not setting EFI boot target" - else - # Cleanup any existing openSUSE boot entries - prun-opt /usr/sbin/efibootmgr -B -L "openSUSE Boot Manager" - prun /usr/sbin/efibootmgr -O - # Currently assuming Aeon-like partition layout and shim name. This function will need extra intelligence to probe partitions for other image layouts - prun /usr/sbin/efibootmgr -c -L "openSUSE Boot Manager" -d ${TIK_INSTALL_DEVICE} -l "\EFI\systemd\shim.efi" -p 2 - # Log to show the resulting eficonfig - log "[efibootmgr] $(prun /usr/sbin/efibootmgr)" - fi + if [ "${debug}" == "1" ]; then + log "[debug] Not setting EFI boot target" + else + # Cleanup any existing openSUSE boot entries + prun-opt /usr/sbin/efibootmgr -B -L "openSUSE Boot Manager" + prun /usr/sbin/efibootmgr -O + # Currently assuming Aeon-like partition layout and shim name. This function will need extra intelligence to probe partitions for other image layouts + prun /usr/sbin/efibootmgr -c -L "openSUSE Boot Manager" -d ${TIK_INSTALL_DEVICE} -l "\EFI\systemd\shim.efi" -p 2 + # Log to show the resulting eficonfig + log "[efibootmgr] $(prun /usr/sbin/efibootmgr)" + fi } load_modules() { @@ -323,10 +323,10 @@ if [ -n "$(ls -A $module_dir)" ]; then for f in $module_dir/* do - tik_module="$f" - log "[START] $module_dir/$f" - . $f - log "[STOP] $module_dir/$f" + tik_module="$f" + log "[START] $module_dir/$f" + . $f + log "[STOP] $module_dir/$f" done fi tik_module="tik" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tik-1.1.8/usr/lib/tik/modules/post/10-encrypt new/tik-1.1.9/usr/lib/tik/modules/post/10-encrypt --- old/tik-1.1.8/usr/lib/tik/modules/post/10-encrypt 2024-06-17 17:26:18.000000000 +0200 +++ new/tik-1.1.9/usr/lib/tik/modules/post/10-encrypt 2024-06-19 14:10:16.000000000 +0200 @@ -3,61 +3,61 @@ # SPDX-FileCopyrightText: Copyright 2024 Richard Brown generate_recoveryKey() { - modhex=('c' 'b' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'n' 'r' 't' 'u' 'v') - mapfile -t raw_key < <(hexdump -v --format '1/1 "%u\n"' -n 32 /dev/random) - [ "${#raw_key[@]}" = 32 ] - key="" - for ((i=0;i<"${#raw_key[@]}";++i)); do - [ "$i" -gt 0 ] && [ "$((i%4))" -eq 0 ] && key="$key-" - c="${raw_key[i]}" - key="$key${modhex[$((c>>4))]}${modhex[$((c&15))]}" - done + modhex=('c' 'b' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'n' 'r' 't' 'u' 'v') + mapfile -t raw_key < <(hexdump -v --format '1/1 "%u\n"' -n 32 /dev/random) + [ "${#raw_key[@]}" = 32 ] + key="" + for ((i=0;i<"${#raw_key[@]}";++i)); do + [ "$i" -gt 0 ] && [ "$((i%4))" -eq 0 ] && key="$key-" + c="${raw_key[i]}" + key="$key${modhex[$((c>>4))]}${modhex[$((c&15))]}" + done } display_recoveryKey() { - log "Displaying Recovery Key" - zenity --width=500 --height=500 --no-wrap --warning --title="Encryption Recovery Key" --text="A secret recovery key has been generated for your Aeon installation:\n\n <b><big>$key</big></b>\n\nPlease save this secret recovery key at a secure location\nIt may be used to regain access to your system if the other credentials have been lost or forgotten\nThe recovery key can be used in place of a password whenever authentication is requested\n\nYou may optionally scan the recovery key off screen:\n<span face='monospace'>$(qrencode $key -t UTF8i)</span>" - log "Recovery Key Dialogue Dismissed" + log "Displaying Recovery Key" + zenity --width=500 --height=500 --no-wrap --warning --title="Encryption Recovery Key" --text="A secret recovery key has been generated for your Aeon installation:\n\n <b><big>$key</big></b>\n\nPlease save this secret recovery key at a secure location\nIt may be used to regain access to your system if the other credentials have been lost or forgotten\nThe recovery key can be used in place of a password whenever authentication is requested\n\nYou may optionally scan the recovery key off screen:\n<span face='monospace'>$(qrencode $key -t UTF8i)</span>" + log "Recovery Key Dialogue Dismissed" } encrypt_disk() { - probe_partitions $TIK_INSTALL_DEVICE "btrfs" "/usr/lib/os-release" - if [ -z "${probedpart}" ]; then - error "ENCRYPTION 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 - prun /usr/bin/umount ${mig_dir}/mnt/var - prun /usr/sbin/btrfs filesystem resize -32m /mnt - prun /usr/bin/umount ${mig_dir}/mnt - prun /usr/sbin/cryptsetup reencrypt --force-password --encrypt --reduce-device-size 32m ${probedpart} cr_root <<<"$key" - echo '{"type":"systemd-recovery","keyslots":["0"]}' | prun /usr/sbin/cryptsetup token import "${probedpart}" - prun /usr/sbin/btrfs rescue fix-device-size /dev/mapper/cr_root - prun /usr/bin/mount -o compress=zstd:1 /dev/mapper/cr_root ${mig_dir}/mnt - prun /usr/bin/mount -o compress=zstd:1,subvol=/@/var /dev/mapper/cr_root ${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/') - eval prun "$etcmountcmd" - echo "cr_root ${probedpart} none x-initrd.attach" | prun tee ${mig_dir}/mnt/etc/crypttab - probe_partitions $TIK_INSTALL_DEVICE "vfat" "/EFI/systemd/shim.efi" - prun /usr/bin/mount ${probedpart} ${mig_dir}/mnt/boot/efi - prun /usr/bin/mount -o compress=zstd:1,subvol=/@/.snapshots /dev/mapper/cr_root ${mig_dir}/mnt/.snapshots - prun /usr/bin/mount -t tmpfs -o size=10m tmpfs "${mig_dir}/mnt/run" - prun /usr/bin/mount -t tmpfs -o size=10m tmpfs "${mig_dir}/mnt/tmp" - for i in proc dev sys; do - prun /usr/bin/mount --bind "/$i" "${mig_dir}/mnt/$i" - done - prun /usr/bin/chroot ${mig_dir}/mnt <<EOT + probe_partitions $TIK_INSTALL_DEVICE "btrfs" "/usr/lib/os-release" + if [ -z "${probedpart}" ]; then + error "ENCRYPTION 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 + prun /usr/bin/umount ${mig_dir}/mnt/var + prun /usr/sbin/btrfs filesystem resize -32m /mnt + prun /usr/bin/umount ${mig_dir}/mnt + prun /usr/sbin/cryptsetup reencrypt --force-password --encrypt --reduce-device-size 32m ${probedpart} cr_root <<<"$key" + echo '{"type":"systemd-recovery","keyslots":["0"]}' | prun /usr/sbin/cryptsetup token import "${probedpart}" + prun /usr/sbin/btrfs rescue fix-device-size /dev/mapper/cr_root + prun /usr/bin/mount -o compress=zstd:1 /dev/mapper/cr_root ${mig_dir}/mnt + prun /usr/bin/mount -o compress=zstd:1,subvol=/@/var /dev/mapper/cr_root ${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/') + eval prun "$etcmountcmd" + echo "cr_root ${probedpart} none x-initrd.attach" | prun tee ${mig_dir}/mnt/etc/crypttab + probe_partitions $TIK_INSTALL_DEVICE "vfat" "/EFI/systemd/shim.efi" + prun /usr/bin/mount ${probedpart} ${mig_dir}/mnt/boot/efi + prun /usr/bin/mount -o compress=zstd:1,subvol=/@/.snapshots /dev/mapper/cr_root ${mig_dir}/mnt/.snapshots + prun /usr/bin/mount -t tmpfs -o size=10m tmpfs "${mig_dir}/mnt/run" + prun /usr/bin/mount -t tmpfs -o size=10m tmpfs "${mig_dir}/mnt/tmp" + for i in proc dev sys; do + prun /usr/bin/mount --bind "/$i" "${mig_dir}/mnt/$i" + done + prun /usr/bin/chroot ${mig_dir}/mnt <<EOT sdbootutil mkinitrd umount /etc EOT - for i in proc dev sys run tmp 'boot/efi' etc var '.snapshots'; do - prun /usr/bin/umount "${mig_dir}/mnt/$i" - done - prun /usr/bin/umount ${mig_dir}/mnt - prun /usr/bin/rmdir ${mig_dir}/mnt + for i in proc dev sys run tmp 'boot/efi' etc var '.snapshots'; do + prun /usr/bin/umount "${mig_dir}/mnt/$i" + done + prun /usr/bin/umount ${mig_dir}/mnt + prun /usr/bin/rmdir ${mig_dir}/mnt } generate_recoveryKey diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tik-1.1.8/usr/lib/tik/modules/post/20-mig new/tik-1.1.9/usr/lib/tik/modules/post/20-mig --- old/tik-1.1.8/usr/lib/tik/modules/post/20-mig 2024-06-17 17:26:18.000000000 +0200 +++ new/tik-1.1.9/usr/lib/tik/modules/post/20-mig 2024-06-19 14:10:16.000000000 +0200 @@ -3,7 +3,7 @@ # SPDX-FileCopyrightText: Copyright 2024 Richard Brown writemigdesktop() { - prun-opt /usr/bin/cat >> $1/.config/autostart/aeon-mig-firstboot.desktop << "EOF" + prun-opt /usr/bin/cat >> $1/.config/autostart/aeon-mig-firstboot.desktop << "EOF" [Desktop Entry] Name=Aeon Migration FirstBoot Setup Comment=Sets up Aeon Correctly On FirstBoot after Migration @@ -13,56 +13,56 @@ Categories=Utility;System; Name[en_GB]=startup EOF - prun-opt /usr/bin/chmod 666 $1/.config/autostart/aeon-mig-firstboot.desktop + prun-opt /usr/bin/chmod 666 $1/.config/autostart/aeon-mig-firstboot.desktop } if [ "${migrate}" == 1 ]; then - probe_partitions $TIK_INSTALL_DEVICE "btrfs" "/usr/lib/os-release" + 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 + 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/') - eval prun "$etcmountcmd" - prun /usr/bin/cat ${mig_dir}/passwd.out | prun tee -a ${mig_dir}/mnt/etc/passwd - prun /usr/bin/cat ${mig_dir}/group.out | prun tee -a ${mig_dir}/mnt/etc/group - prun /usr/bin/cat ${mig_dir}/shadow.out | prun tee -a ${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}/subuid ${mig_dir}/mnt/etc/subuid - prun /usr/bin/cp -a ${mig_dir}/subgid ${mig_dir}/mnt/etc/subgid - # It's not guaranteed that the system will have existing network configs, localtime or AccountsService - prun-opt /usr/bin/cp -a ${mig_dir}/system-connections/* ${mig_dir}/mnt/etc/NetworkManager/system-connections - prun-opt /usr/bin/cp -a ${mig_dir}/localtime ${mig_dir}/mnt/etc/localtime - prun-opt /usr/bin/cp -a ${mig_dir}/users/* ${mig_dir}/mnt/var/lib/AccountsService/users - prun-opt /usr/bin/cp -a ${mig_dir}/icons/* ${mig_dir}/mnt/var/lib/AccountsService/icons - prun-opt /usr/bin/cp -a ${mig_dir}/bluetooth/* ${mig_dir}/mnt/var/lib/bluetooth - prun-opt /usr/bin/cp -a ${mig_dir}/openvpn/* ${mig_dir}/mnt/etc/openvpn - 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 + eval prun "$etcmountcmd" + prun /usr/bin/cat ${mig_dir}/passwd.out | prun tee -a ${mig_dir}/mnt/etc/passwd + prun /usr/bin/cat ${mig_dir}/group.out | prun tee -a ${mig_dir}/mnt/etc/group + prun /usr/bin/cat ${mig_dir}/shadow.out | prun tee -a ${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}/subuid ${mig_dir}/mnt/etc/subuid + prun /usr/bin/cp -a ${mig_dir}/subgid ${mig_dir}/mnt/etc/subgid + # It's not guaranteed that the system will have existing network configs, localtime or AccountsService + prun-opt /usr/bin/cp -a ${mig_dir}/system-connections/* ${mig_dir}/mnt/etc/NetworkManager/system-connections + prun-opt /usr/bin/cp -a ${mig_dir}/localtime ${mig_dir}/mnt/etc/localtime + prun-opt /usr/bin/cp -a ${mig_dir}/users/* ${mig_dir}/mnt/var/lib/AccountsService/users + prun-opt /usr/bin/cp -a ${mig_dir}/icons/* ${mig_dir}/mnt/var/lib/AccountsService/icons + prun-opt /usr/bin/cp -a ${mig_dir}/bluetooth/* ${mig_dir}/mnt/var/lib/bluetooth + prun-opt /usr/bin/cp -a ${mig_dir}/fprint/* ${mig_dir}/mnt/var/lib/fprint + prun-opt /usr/bin/cp -a ${mig_dir}/openvpn/* ${mig_dir}/mnt/etc/openvpn + 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 for subsubvol in $(prun-opt /usr/sbin/btrfs subvolume list -o ${mig_dir}/${snap_dir} --sort=path | rev | cut -f1 -d' ' | rev | sed 's/^@//'); do - subsubvolname=$(basename $subsubvol) - subsubdirname=$(dirname $subsubvol | awk -F "${mig_dir}/${snap_dir}" '{print $2}') - (prun /usr/sbin/btrfs send ${subsubvol} | pv -f -F "# %b copied in %t %r" | prun /usr/sbin/btrfs receive ${mig_dir}/mnt/home/${subsubdirname} ) 2>&1 | d --progress --title="Restoring containers" --pulsate --auto-close --no-cancel --width=400 - prun /usr/sbin/btrfs property set -f -ts ${mig_dir}/mnt/home/${subsubdirname}/${subsubvolname} ro false - prun-opt /usr/bin/sed -i 's/driver = "overlay"/driver = "btrfs"/g' ${mig_dir}/mnt/etc/containers/storage.conf - + subsubvolname=$(basename $subsubvol) + subsubdirname=$(dirname $subsubvol | awk -F "${mig_dir}/${snap_dir}" '{print $2}') + (prun /usr/sbin/btrfs send ${subsubvol} | pv -f -F "# %b copied in %t %r" | prun /usr/sbin/btrfs receive ${mig_dir}/mnt/home/${subsubdirname} ) 2>&1 | d --progress --title="Restoring containers" --pulsate --auto-close --no-cancel --width=400 + prun /usr/sbin/btrfs property set -f -ts ${mig_dir}/mnt/home/${subsubdirname}/${subsubvolname} ro false + prun-opt /usr/bin/sed -i 's/driver = "overlay"/driver = "btrfs"/g' ${mig_dir}/mnt/etc/containers/storage.conf + done + for userhome in ${mig_dir}/mnt/home/*/; do + writemigdesktop $userhome done - for userhome in ${mig_dir}/mnt/home/*/; do - writemigdesktop $userhome - done - prun /usr/bin/umount ${mig_dir}/mnt - prun /usr/bin/rmdir ${mig_dir}/mnt + prun /usr/bin/umount ${mig_dir}/mnt + prun /usr/bin/rmdir ${mig_dir}/mnt fi \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tik-1.1.8/usr/lib/tik/modules/pre/10-welcome new/tik-1.1.9/usr/lib/tik/modules/pre/10-welcome --- old/tik-1.1.8/usr/lib/tik/modules/pre/10-welcome 2024-06-17 17:26:18.000000000 +0200 +++ new/tik-1.1.9/usr/lib/tik/modules/pre/10-welcome 2024-06-19 14:10:16.000000000 +0200 @@ -36,12 +36,12 @@ } verify_efi() { - # Verify that the system was booted with EFI, exit with error if not - if [ ! -d /sys/firmware/efi ]; then - # System was not booted with EFI - local error_msg="openSUSE Aeon requires UEFI mode, which is not found on your system.\nPlease check your BIOS settings to see if UEFI can be enabled." - error "${error_msg}" - fi + # Verify that the system was booted with EFI, exit with error if not + if [ ! -d /sys/firmware/efi ]; then + # System was not booted with EFI + local error_msg="openSUSE Aeon requires UEFI mode, which is not found on your system.\nPlease check your BIOS settings to see if UEFI can be enabled." + error "${error_msg}" + fi } proceedInstall diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tik-1.1.8/usr/lib/tik/modules/pre/20-mig new/tik-1.1.9/usr/lib/tik/modules/pre/20-mig --- old/tik-1.1.8/usr/lib/tik/modules/pre/20-mig 2024-06-17 17:26:18.000000000 +0200 +++ new/tik-1.1.9/usr/lib/tik/modules/pre/20-mig 2024-06-19 14:10:16.000000000 +0200 @@ -5,209 +5,207 @@ mig_dir=/var/lib/tik/mig snap_dir=homebk if [ ! -d ${mig_dir} ]; then - prun /usr/bin/mkdir -p ${mig_dir} + 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 - # Fallback to unix device in order to fix issue with USB devices - prun /usr/bin/mount ${mountops} "$(/usr/bin/readlink -f "/dev/disk/by-id/${part}")" "${mig_dir}/mnt" - # Check if ${filematch} exists - if [ -f ${mig_dir}/mnt/${filematch} ]; then - # Fallback to unix device in order to fix issue USB devices - probedpart="$(/usr/bin/readlink -f "/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/bin/gnome-shell ]; then - # Found legacy Aeon, activate easter egg - log "Legacy Aeon Install FOUND" - legacy_aeon=1 - fi - fi - prun-opt /usr/bin/umount ${mig_dir}/mnt - done - - prun /usr/bin/rmdir ${mig_dir}/mnt + 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 + # Fallback to unix device in order to fix issue with USB devices + prun /usr/bin/mount ${mountops} "$(/usr/bin/readlink -f "/dev/disk/by-id/${part}")" "${mig_dir}/mnt" + # Check if ${filematch} exists + if [ -f ${mig_dir}/mnt/${filematch} ]; then + # Fallback to unix device in order to fix issue USB devices + probedpart="$(/usr/bin/readlink -f "/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/bin/gnome-shell ]; then + # Found legacy Aeon, activate easter egg + log "Legacy Aeon Install FOUND" + legacy_aeon=1 + fi + fi + prun-opt /usr/bin/umount ${mig_dir}/mnt + done + 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-opt /usr/sbin/btrfs property set -f -ts ${mig_dir}/${snap_dir} ro false - for subsubvol in $(prun-opt /usr/sbin/btrfs subvolume list -o ${mig_dir}/${snap_dir} --sort=path | rev | cut -f1 -d' ' | rev | sed "s/^@//"); do - prun /usr/sbin/btrfs subvolume delete ${subsubvol} - done - prun-opt /usr/sbin/btrfs subvolume delete ${mig_dir}/${snap_dir} - prun-opt /usr/bin/rm ${mig_dir}/*.out - prun-opt /usr/bin/rm ${mig_dir}/system-connections/* - prun-opt /usr/bin/rmdir ${mig_dir}/system-connections - prun-opt /usr/bin/rm ${mig_dir}/users/* - prun-opt /usr/bin/rmdir ${mig_dir}/users - prun-opt /usr/bin/rm ${mig_dir}/icons/* - prun-opt /usr/bin/rmdir ${mig_dir}/icons - prun-opt /usr/bin/rm ${mig_dir}/localtime - prun-opt /usr/bin/rm ${mig_dir}/subgid - prun-opt /usr/bin/rm ${mig_dir}/subuid - prun-opt /usr/bin/rm ${mig_dir}/bluetooth/* - prun-opt /usr/bin/rmdir ${mig_dir}/bluetooth - prun-opt /usr/bin/rm ${mig_dir}/openvpn/* - prun-opt /usr/bin/rmdir ${mig_dir}/openvpn - prun-opt /usr/bin/rmdir ${mig_dir}/mnt - fi + 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-opt /usr/sbin/btrfs property set -f -ts ${mig_dir}/${snap_dir} ro false + for subsubvol in $(prun-opt /usr/sbin/btrfs subvolume list -o ${mig_dir}/${snap_dir} --sort=path | rev | cut -f1 -d' ' | rev | sed "s/^@//"); do + prun /usr/sbin/btrfs subvolume delete ${subsubvol} + done + prun-opt /usr/sbin/btrfs subvolume delete ${mig_dir}/${snap_dir} + prun-opt /usr/bin/rm ${mig_dir}/*.out + prun-opt /usr/bin/rm ${mig_dir}/system-connections/* + prun-opt /usr/bin/rmdir ${mig_dir}/system-connections + prun-opt /usr/bin/rm ${mig_dir}/users/* + prun-opt /usr/bin/rmdir ${mig_dir}/users + prun-opt /usr/bin/rm ${mig_dir}/icons/* + prun-opt /usr/bin/rmdir ${mig_dir}/icons + prun-opt /usr/bin/rm ${mig_dir}/localtime + prun-opt /usr/bin/rm ${mig_dir}/subgid + prun-opt /usr/bin/rm ${mig_dir}/subuid + prun-opt /usr/bin/rm ${mig_dir}/bluetooth/* + prun-opt /usr/bin/rmdir ${mig_dir}/bluetooth + prun-opt /usr/bin/rm ${mig_dir}/openvpn/* + prun-opt /usr/bin/rmdir ${mig_dir}/openvpn + prun-opt /usr/bin/rm -R ${mig_dir}/fprint/* + prun-opt /usr/bin/rmdir ${mig_dir}/fprint + prun-opt /usr/bin/rmdir ${mig_dir}/mnt + fi fi get_disk if [ -z "${skipbackup}" ]; then - # Although Legacy Aeon didn't officially support LUKS encrypted installations, - # some users might have nevertheless enabled encryption anyway. - # Search for existing crypto_LUKS partitions and, if found, prompt the user - # to unlock those so that the migration module can find existing data. - for encrypted_partition in $(lsblk ${TIK_INSTALL_DEVICE} -p -n -r -o ID-LINK,FSTYPE|tr -s ' ' ";"|grep ";crypto_LUKS"|cut -d\; -f1); do - if [ -e /dev/mapper/crypt_${encrypted_partition} ]; then - # Already opened for some reason... do not prompt for the passphrase - # but ensure we will clean up afterwards - crypt_opened="${crypt_opened} crypt_${encrypted_partition}" - else - while [ 1 ]; do - passphrase=$(zenity --password --title="Encrypted partition (${encrypted_partition}) detected" --cancel-label="Skip") || break - if [ -n "${passphrase}" ]; then - echo -n "${passphrase}" | prun /usr/sbin/cryptsetup luksOpen /dev/disk/by-id/${encrypted_partition} crypt_${encrypted_partition} - if [ "${?}" -eq 0 ]; then - crypt_opened="${crypt_opened} crypt_${encrypted_partition}" - - # Wait for the mapped device to appear - wait_count=0 - while [ ! -e /dev/mapper/crypt_${encrypted_partition} ] && [ ${wait_count} -lt 5 ]; do - sleep 1 - wait_count=$((wait_count + 1)) - done - break - fi - fi - done - fi - done - unset passphrase - - # 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 - # Check for existing snapshot from interrupted backup and delete if it exists boo#1224824 - if [ -d ${mig_dir}/mnt/${snap_dir} ]; then - prun /usr/sbin/btrfs subvolume delete ${mig_dir}/mnt/${snap_dir} - fi - 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} - # Probe for subvolumes nested beneath /home and back them up also - if (prun-opt /usr/sbin/btrfs subvolume list -o ${mig_dir}/mnt | grep -q "ID "); then - prun /usr/sbin/btrfs property set -f -ts ${mig_dir}/${snap_dir} ro false - for subsubvol in $(prun-opt /usr/sbin/btrfs subvolume list -o ${mig_dir}/mnt --sort=path | rev | cut -f1 -d' ' | rev | sed 's/^@\/home//'); do - subsubvolname=$(basename $subsubvol) - subsubdirname=$(dirname $subsubvol) - prun /usr/sbin/btrfs subvolume snapshot -r ${mig_dir}/mnt/${subsubvol} ${mig_dir}/mnt/${subsubvolname} - (prun /usr/sbin/btrfs send ${mig_dir}/mnt/${subsubvolname} | pv -f -F "# %b copied in %t %r" | prun /usr/sbin/btrfs receive ${mig_dir}/${snap_dir}/${subsubdirname}) 2>&1 | d --progress --title="Backing up containers" --pulsate --auto-close --no-cancel --width=400 - prun /usr/sbin/btrfs subvolume delete ${mig_dir}/mnt/${subsubvolname} - done - prun /usr/sbin/btrfs property set -f -ts ${mig_dir}/${snap_dir} ro true + # Although Legacy Aeon didn't officially support LUKS encrypted installations, + # some users might have nevertheless enabled encryption anyway. + # Search for existing crypto_LUKS partitions and, if found, prompt the user + # to unlock those so that the migration module can find existing data. + for encrypted_partition in $(lsblk ${TIK_INSTALL_DEVICE} -p -n -r -o ID-LINK,FSTYPE|tr -s ' ' ";"|grep ";crypto_LUKS"|cut -d\; -f1); do + if [ -e /dev/mapper/crypt_${encrypted_partition} ]; then + # Already opened for some reason... do not prompt for the passphrase + # but ensure we will clean up afterwards + crypt_opened="${crypt_opened} crypt_${encrypted_partition}" + else + while [ 1 ]; do + passphrase=$(zenity --password --title="Encrypted partition (${encrypted_partition}) detected" --cancel-label="Skip") || break + if [ -n "${passphrase}" ]; then + echo -n "${passphrase}" | prun /usr/sbin/cryptsetup luksOpen /dev/disk/by-id/${encrypted_partition} crypt_${encrypted_partition} + if [ "${?}" -eq 0 ]; then + crypt_opened="${crypt_opened} crypt_${encrypted_partition}" + # Wait for the mapped device to appear + wait_count=0 + while [ ! -e /dev/mapper/crypt_${encrypted_partition} ] && [ ${wait_count} -lt 5 ]; do + sleep 1 + wait_count=$((wait_count + 1)) + done + break + fi + fi + done + fi + done + unset passphrase + + # 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 + # Check for existing snapshot from interrupted backup and delete if it exists boo#1224824 + if [ -d ${mig_dir}/mnt/${snap_dir} ]; then + prun /usr/sbin/btrfs subvolume delete ${mig_dir}/mnt/${snap_dir} fi - 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/') - eval prun "$etcmntcmd" - prun /usr/bin/awk -F'[/:]' '($3 >= 1000 && $3 != 65534)' ${mig_dir}/mnt/etc/passwd | prun /usr/bin/awk -F':' '{ $7="/bin/bash"; print };' OFS=':' | prun tee ${mig_dir}/passwd.out - prun /usr/bin/awk -F'[/:]' '($3 >= 1000 && $3 != 65534 && $3 != 65533)' ${mig_dir}/mnt/etc/group | prun tee ${mig_dir}/group.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 | prun tee ${mig_dir}/shadow.out - prun /usr/bin/cp -a ${mig_dir}/mnt/etc/subuid ${mig_dir}/subuid - prun /usr/bin/cp -a ${mig_dir}/mnt/etc/subgid ${mig_dir}/subgid - # It's not guaranteed that the system will have existing network configs, custom localtime or AccountsService - prun-opt /usr/bin/cp -a ${mig_dir}/mnt/etc/NetworkManager/system-connections ${mig_dir}/system-connections - prun-opt /usr/bin/cp -a ${mig_dir}/mnt/etc/localtime ${mig_dir}/localtime - prun-opt /usr/bin/cp -a ${mig_dir}/mnt/var/lib/AccountsService/users ${mig_dir}/users - prun-opt /usr/bin/chmod 744 ${mig_dir}/users - prun-opt /usr/bin/cp -a ${mig_dir}/mnt/var/lib/AccountsService/icons ${mig_dir}/icons - prun-opt /usr/bin/cp -a ${mig_dir}/mnt/var/lib/bluetooth ${mig_dir}/bluetooth - prun-opt /usr/bin/cp -a ${mig_dir}/mnt/etc/openvpn ${mig_dir}/openvpn - prun-opt /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 - - # Close eventual mapped LUKS devices - if [ -n "${crypt_opened}" ]; then - for mapped_partition in ${crypt_opened}; do - if [ -e /dev/mapper/crypt_${encrypted_partition} ]; then - # We are going to replace the encrypted partition anyway, so if - # we're unable to gracefully close the device after 5 seconds, - # just give up (hence the prun-opt usage) - wait_count=0 - while ! prun-opt /usr/sbin/cryptsetup luksClose /dev/mapper/${mapped_partition} && [ ${wait_count} -lt 5 ]; do - sleep 1 - wait_count=$((wait_count + 1)) - done - fi - done - fi + 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} + # Probe for subvolumes nested beneath /home and back them up also + if (prun-opt /usr/sbin/btrfs subvolume list -o ${mig_dir}/mnt | grep -q "ID "); then + prun /usr/sbin/btrfs property set -f -ts ${mig_dir}/${snap_dir} ro false + for subsubvol in $(prun-opt /usr/sbin/btrfs subvolume list -o ${mig_dir}/mnt --sort=path | rev | cut -f1 -d' ' | rev | sed 's/^@\/home//'); do + subsubvolname=$(basename $subsubvol) + subsubdirname=$(dirname $subsubvol) + prun /usr/sbin/btrfs subvolume snapshot -r ${mig_dir}/mnt/${subsubvol} ${mig_dir}/mnt/${subsubvolname} + (prun /usr/sbin/btrfs send ${mig_dir}/mnt/${subsubvolname} | pv -f -F "# %b copied in %t %r" | prun /usr/sbin/btrfs receive ${mig_dir}/${snap_dir}/${subsubdirname}) 2>&1 | d --progress --title="Backing up containers" --pulsate --auto-close --no-cancel --width=400 + prun /usr/sbin/btrfs subvolume delete ${mig_dir}/mnt/${subsubvolname} + done + prun /usr/sbin/btrfs property set -f -ts ${mig_dir}/${snap_dir} ro true + fi + 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/') + eval prun "$etcmntcmd" + prun /usr/bin/awk -F'[/:]' '($3 >= 1000 && $3 != 65534)' ${mig_dir}/mnt/etc/passwd | prun /usr/bin/awk -F':' '{ $7="/bin/bash"; print };' OFS=':' | prun tee ${mig_dir}/passwd.out + prun /usr/bin/awk -F'[/:]' '($3 >= 1000 && $3 != 65534 && $3 != 65533)' ${mig_dir}/mnt/etc/group | prun tee ${mig_dir}/group.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 | prun tee ${mig_dir}/shadow.out + prun /usr/bin/cp -a ${mig_dir}/mnt/etc/subuid ${mig_dir}/subuid + prun /usr/bin/cp -a ${mig_dir}/mnt/etc/subgid ${mig_dir}/subgid + # It's not guaranteed that the system will have existing network configs, custom localtime or AccountsService + prun-opt /usr/bin/cp -a ${mig_dir}/mnt/etc/NetworkManager/system-connections ${mig_dir}/system-connections + prun-opt /usr/bin/cp -a ${mig_dir}/mnt/etc/localtime ${mig_dir}/localtime + prun-opt /usr/bin/cp -a ${mig_dir}/mnt/var/lib/AccountsService/users ${mig_dir}/users + prun-opt /usr/bin/chmod 744 ${mig_dir}/users + prun-opt /usr/bin/cp -a ${mig_dir}/mnt/var/lib/AccountsService/icons ${mig_dir}/icons + prun-opt /usr/bin/cp -a ${mig_dir}/mnt/var/lib/bluetooth ${mig_dir}/bluetooth + prun-opt /usr/bin/cp -a ${mig_dir}/mnt/var/lib/fprint ${mig_dir}/fprint + prun-opt /usr/bin/cp -a ${mig_dir}/mnt/etc/openvpn ${mig_dir}/openvpn + prun-opt /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 + + # Close eventual mapped LUKS devices + if [ -n "${crypt_opened}" ]; then + for mapped_partition in ${crypt_opened}; do + if [ -e /dev/mapper/crypt_${encrypted_partition} ]; then + # We are going to replace the encrypted partition anyway, so if + # we're unable to gracefully close the device after 5 seconds, + # just give up (hence the prun-opt usage) + wait_count=0 + while ! prun-opt /usr/sbin/cryptsetup luksClose /dev/mapper/${mapped_partition} && [ ${wait_count} -lt 5 ]; do + sleep 1 + wait_count=$((wait_count + 1)) + done + fi + done + fi fi ++++++ tik.obsinfo ++++++ --- /var/tmp/diff_new_pack.Tk98bn/_old 2024-06-20 16:47:48.666920078 +0200 +++ /var/tmp/diff_new_pack.Tk98bn/_new 2024-06-20 16:47:48.666920078 +0200 @@ -1,5 +1,5 @@ name: tik -version: 1.1.8 -mtime: 1718637978 -commit: 965e7b0ed36f5347975cd01051ad7ea11457339d +version: 1.1.9 +mtime: 1718799016 +commit: c53a8b45a5931d6af1b69da91031dcf40d54611a