From e351801933ce9c89c0cd25f0725fbc8ae8b84257 Mon Sep 17 00:00:00 2001 From: A Holt Date: Sun, 7 Aug 2022 20:29:24 -0400 Subject: [PATCH 01/11] 1-prep/templates/iiab-expand-rootfs.service based on 2020's #2522 --- roles/1-prep/templates/iiab-expand-rootfs.service | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/roles/1-prep/templates/iiab-expand-rootfs.service b/roles/1-prep/templates/iiab-expand-rootfs.service index f7f68402c..89e42f2ab 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs.service +++ b/roles/1-prep/templates/iiab-expand-rootfs.service @@ -1,5 +1,8 @@ [Unit] Description=Root Filesystem Auto-Expander +DefaultDependencies=no +After=systemd-remount-fs.service +Before=dphys-swapfile.service [Service] Environment=TERM=linux @@ -8,7 +11,7 @@ ExecStart=/usr/sbin/iiab-expand-rootfs # "Standard output type syslog is obsolete" # StandardError=syslog # WHEREAS StandardError=journal is the default, per https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput= -RemainAfterExit=no +RemainAfterExit=yes [Install] -WantedBy=multi-user.target +WantedBy=local-fs.target From 6403ce517a348baa2c453659258695d7896e4ddd Mon Sep 17 00:00:00 2001 From: A Holt Date: Mon, 8 Aug 2022 18:18:53 -0400 Subject: [PATCH 02/11] iiab-expand-rootfs.service: TimeoutSec=infinity in [Service] --- roles/1-prep/templates/iiab-expand-rootfs.service | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/1-prep/templates/iiab-expand-rootfs.service b/roles/1-prep/templates/iiab-expand-rootfs.service index 89e42f2ab..1d29e4b90 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs.service +++ b/roles/1-prep/templates/iiab-expand-rootfs.service @@ -8,6 +8,7 @@ Before=dphys-swapfile.service Environment=TERM=linux Type=oneshot ExecStart=/usr/sbin/iiab-expand-rootfs +TimeoutSec=infinity # "Standard output type syslog is obsolete" # StandardError=syslog # WHEREAS StandardError=journal is the default, per https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput= From 5c26d52549e2344aa2012fd5692ad530bcb85ede Mon Sep 17 00:00:00 2001 From: A Holt Date: Mon, 8 Aug 2022 19:24:23 -0400 Subject: [PATCH 03/11] iiab-expand-rootfs.service: Explain Before=dphys-swapfile.service --- roles/1-prep/templates/iiab-expand-rootfs.service | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/1-prep/templates/iiab-expand-rootfs.service b/roles/1-prep/templates/iiab-expand-rootfs.service index 1d29e4b90..0756d8151 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs.service +++ b/roles/1-prep/templates/iiab-expand-rootfs.service @@ -2,6 +2,8 @@ Description=Root Filesystem Auto-Expander DefaultDependencies=no After=systemd-remount-fs.service +# 2022-08-08: While dphys-swapfile.service doesn't exist on Ubuntu, Mint +# and pure Debian, the following line may still serve a purpose on RasPiOS: Before=dphys-swapfile.service [Service] From 3798685ba7ec369196acf4f045146d4eae6ed7c5 Mon Sep 17 00:00:00 2001 From: A Holt Date: Mon, 8 Aug 2022 19:52:51 -0400 Subject: [PATCH 04/11] iiab-expand-rootfs.service: Explain TimeoutSec=infinity --- roles/1-prep/templates/iiab-expand-rootfs.service | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/1-prep/templates/iiab-expand-rootfs.service b/roles/1-prep/templates/iiab-expand-rootfs.service index 0756d8151..f8333e020 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs.service +++ b/roles/1-prep/templates/iiab-expand-rootfs.service @@ -10,6 +10,8 @@ Before=dphys-swapfile.service Environment=TERM=linux Type=oneshot ExecStart=/usr/sbin/iiab-expand-rootfs +# 2022-08-08: By default, systemd dangerously kills rootfs expansion after just +# 90s (1TB microSD cards take ~8 min to expand). Let's remove the time limit: TimeoutSec=infinity # "Standard output type syslog is obsolete" # StandardError=syslog From c3ab1236a5fae68c4bf73b00bb9f5522ce8cc2ee Mon Sep 17 00:00:00 2001 From: A Holt Date: Mon, 8 Aug 2022 22:46:36 -0400 Subject: [PATCH 05/11] iiab-expand-rootfs.service: Explain After=systemd-remount-fs.service --- roles/1-prep/templates/iiab-expand-rootfs.service | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/1-prep/templates/iiab-expand-rootfs.service b/roles/1-prep/templates/iiab-expand-rootfs.service index f8333e020..91de4cc5b 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs.service +++ b/roles/1-prep/templates/iiab-expand-rootfs.service @@ -1,6 +1,8 @@ [Unit] Description=Root Filesystem Auto-Expander DefaultDependencies=no +# 2022-08-08: IIAB's 4 core OS's have 'After=systemd-fsck-root.service' WITHIN +# systemd-remount-fs.service, allowing us to avoid #3325 race condition w/ fsck After=systemd-remount-fs.service # 2022-08-08: While dphys-swapfile.service doesn't exist on Ubuntu, Mint # and pure Debian, the following line may still serve a purpose on RasPiOS: From b9a653c1b962ebcdf73315f6370d4203aee62c37 Mon Sep 17 00:00:00 2001 From: A Holt Date: Thu, 11 Aug 2022 21:42:57 -0400 Subject: [PATCH 06/11] iiab-expand-rootfs: bash -e exit on error; do not delete /.expand-rootfs --- roles/1-prep/templates/iiab-expand-rootfs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/1-prep/templates/iiab-expand-rootfs b/roles/1-prep/templates/iiab-expand-rootfs index 2cd28de46..620990893 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs +++ b/roles/1-prep/templates/iiab-expand-rootfs @@ -1,4 +1,4 @@ -#!/bin/bash -x +#!/bin/bash -xe # Expand rootfs partition to its maximum size, if /.expand-rootfs exists. # Used by /etc/systemd/system/iiab-expand-rootfs.service on IIAB boot. From b3bad6ea21e6ff271f926ab735454c1d32a22153 Mon Sep 17 00:00:00 2001 From: A Holt Date: Thu, 22 Sep 2022 11:41:31 -0400 Subject: [PATCH 07/11] iiab-expand-rootfs: reboot right after 'raspi-config --expand-rootfs' --- roles/1-prep/templates/iiab-expand-rootfs | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/1-prep/templates/iiab-expand-rootfs b/roles/1-prep/templates/iiab-expand-rootfs index 620990893..d727d5623 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs +++ b/roles/1-prep/templates/iiab-expand-rootfs @@ -15,6 +15,7 @@ if [ -f /.expand-rootfs ] || [ -f /.resize-rootfs ]; then # 2022-02-17: Uses do_expand_rootfs() from: # https://github.com/RPi-Distro/raspi-config/blob/master/raspi-config raspi-config --expand-rootfs # REQUIRES A REBOOT + reboot # In future, we might warn interactive users? else # REQUIRES NO REBOOT; BEWARE iiab-expand-rootfs.service RACE CONDITION WITH fsck (PR #2522 & #3325) # 2022-03-15: Borrows from above raspi-config URL's do_expand_rootfs() ROOT_PART="$(findmnt / -o SOURCE -n)" # e.g. /dev/sda2 or /dev/mmcblk0p2 From e125fc1e39eda5ffde7f4d07117012484434c618 Mon Sep 17 00:00:00 2001 From: A Holt Date: Thu, 22 Sep 2022 11:47:19 -0400 Subject: [PATCH 08/11] iiab-expand-rootfs: 'rm -f /.expand-rootfs /.resize-rootfs' prior to reboot --- roles/1-prep/templates/iiab-expand-rootfs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/roles/1-prep/templates/iiab-expand-rootfs b/roles/1-prep/templates/iiab-expand-rootfs index d727d5623..9b5b01c9d 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs +++ b/roles/1-prep/templates/iiab-expand-rootfs @@ -15,6 +15,7 @@ if [ -f /.expand-rootfs ] || [ -f /.resize-rootfs ]; then # 2022-02-17: Uses do_expand_rootfs() from: # https://github.com/RPi-Distro/raspi-config/blob/master/raspi-config raspi-config --expand-rootfs # REQUIRES A REBOOT + rm -f /.expand-rootfs /.resize-rootfs reboot # In future, we might warn interactive users? else # REQUIRES NO REBOOT; BEWARE iiab-expand-rootfs.service RACE CONDITION WITH fsck (PR #2522 & #3325) # 2022-03-15: Borrows from above raspi-config URL's do_expand_rootfs() @@ -54,7 +55,7 @@ if [ -f /.expand-rootfs ] || [ -f /.resize-rootfs ]; then # # Resize partition # growpart /dev/$root_dev $root_part_no # resize2fs /dev/$root_part + + rm -f /.expand-rootfs /.resize-rootfs fi - - rm -f /.expand-rootfs /.resize-rootfs fi From 939fc0d11cc67780a77c8a80c838aaef7a2f0353 Mon Sep 17 00:00:00 2001 From: A Holt Date: Thu, 22 Sep 2022 11:56:28 -0400 Subject: [PATCH 09/11] iiab-expand-rootfs: IGNORE growpart errors for now (good enough!?) --- roles/1-prep/templates/iiab-expand-rootfs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/1-prep/templates/iiab-expand-rootfs b/roles/1-prep/templates/iiab-expand-rootfs index 9b5b01c9d..db77f59ec 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs +++ b/roles/1-prep/templates/iiab-expand-rootfs @@ -32,7 +32,7 @@ if [ -f /.expand-rootfs ] || [ -f /.resize-rootfs ]; then fi # Expand partition - growpart $ROOT_DEV $ROOT_PART_NUM # raspi-config instead uses fdisk + growpart $ROOT_DEV $ROOT_PART_NUM || true # raspi-config instead uses fdisk. WARNING: growpart RC 2 is more severe than RC 1, and should possibly be handled separately in future? resize2fs $ROOT_PART # 2022-03-15: Legacy code below worked with Raspberry Pi microSD cards From dfdc5eb78c441a511362208cbb3cdcdbbffe9327 Mon Sep 17 00:00:00 2001 From: A Holt Date: Thu, 22 Sep 2022 12:05:20 -0400 Subject: [PATCH 10/11] iiab-expand-rootfs: Comment clarif RE: auto-reboot --- roles/1-prep/templates/iiab-expand-rootfs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/1-prep/templates/iiab-expand-rootfs b/roles/1-prep/templates/iiab-expand-rootfs index db77f59ec..90cdb9318 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs +++ b/roles/1-prep/templates/iiab-expand-rootfs @@ -16,7 +16,7 @@ if [ -f /.expand-rootfs ] || [ -f /.resize-rootfs ]; then # https://github.com/RPi-Distro/raspi-config/blob/master/raspi-config raspi-config --expand-rootfs # REQUIRES A REBOOT rm -f /.expand-rootfs /.resize-rootfs - reboot # In future, we might warn interactive users? + reboot # In future, we might warn interactive users that a reboot is coming? else # REQUIRES NO REBOOT; BEWARE iiab-expand-rootfs.service RACE CONDITION WITH fsck (PR #2522 & #3325) # 2022-03-15: Borrows from above raspi-config URL's do_expand_rootfs() ROOT_PART="$(findmnt / -o SOURCE -n)" # e.g. /dev/sda2 or /dev/mmcblk0p2 From c76bd2745d156b9052340a0d674022fb94f167ad Mon Sep 17 00:00:00 2001 From: A Holt Date: Sat, 24 Sep 2022 08:16:38 -0400 Subject: [PATCH 11/11] iiab-expand-rootfs: Make growpart & resize2fs RC visible to bash -x --- roles/1-prep/templates/iiab-expand-rootfs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/1-prep/templates/iiab-expand-rootfs b/roles/1-prep/templates/iiab-expand-rootfs index 90cdb9318..a1fd06772 100644 --- a/roles/1-prep/templates/iiab-expand-rootfs +++ b/roles/1-prep/templates/iiab-expand-rootfs @@ -33,7 +33,9 @@ if [ -f /.expand-rootfs ] || [ -f /.resize-rootfs ]; then # Expand partition growpart $ROOT_DEV $ROOT_PART_NUM || true # raspi-config instead uses fdisk. WARNING: growpart RC 2 is more severe than RC 1, and should possibly be handled separately in future? + rc=$? # Make Return Code visible, for 'bash -x' resize2fs $ROOT_PART + rc=$? # Make RC visible (as above) # 2022-03-15: Legacy code below worked with Raspberry Pi microSD cards # but *not* with USB boot drives, internal spinning disks/SSD's, etc.