From 00bd16b975f7330065878c57358e42239af6d64d Mon Sep 17 00:00:00 2001 From: Kai Lueke Date: Fri, 29 Sep 2023 18:15:13 +0200 Subject: [PATCH] Run partprobe after Ignition partition changes This adds https://github.com/coreos/ignition/pull/1717 as downstream patch to fix https://github.com/flatcar/Flatcar/issues/1194 --- .../bugfixes/2023-09-29-ignition-partition.md | 1 + ...un-partprobe-after-partition-changes.patch | 67 +++++++++++++++++++ .../sys-apps/ignition/ignition-9999.ebuild | 1 + .../bootengine/bootengine-9999.ebuild | 2 +- 4 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 changelog/bugfixes/2023-09-29-ignition-partition.md create mode 100644 sdk_container/src/third_party/coreos-overlay/sys-apps/ignition/files/0022-sgdisk-Run-partprobe-after-partition-changes.patch diff --git a/changelog/bugfixes/2023-09-29-ignition-partition.md b/changelog/bugfixes/2023-09-29-ignition-partition.md new file mode 100644 index 00000000000..b92e78bbe86 --- /dev/null +++ b/changelog/bugfixes/2023-09-29-ignition-partition.md @@ -0,0 +1 @@ +- Triggered re-reading of partition table to fix adding partitions to the boot disk [scripts#1202](https://github.com/flatcar/scripts/pull/1202) diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/ignition/files/0022-sgdisk-Run-partprobe-after-partition-changes.patch b/sdk_container/src/third_party/coreos-overlay/sys-apps/ignition/files/0022-sgdisk-Run-partprobe-after-partition-changes.patch new file mode 100644 index 00000000000..06901f2a20b --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/ignition/files/0022-sgdisk-Run-partprobe-after-partition-changes.patch @@ -0,0 +1,67 @@ +From e5c4e6bd9f3bad3b27e338e4da2f3b0b53ab1599 Mon Sep 17 00:00:00 2001 +From: Kai Lueke +Date: Fri, 29 Sep 2023 18:06:09 +0200 +Subject: [PATCH] sgdisk: Run partprobe after partition changes + +The sgdisk tool does not update the kernel partition table in contrast +to other similar tools. Often udev can detect the changes but not always +as experienced when adding a new partition on Flatcar's boot disk. +Instead of implicitly relying on some other component to re-read the +kernel partition table, trigger the re-read with partprobe. +--- + dracut/30ignition/module-setup.sh | 1 + + internal/distro/distro.go | 2 ++ + internal/sgdisk/sgdisk.go | 5 +++++ + 3 files changed, 8 insertions(+) + +diff --git a/dracut/30ignition/module-setup.sh b/dracut/30ignition/module-setup.sh +index ad7e80fd..3cdcb631 100755 +--- a/dracut/30ignition/module-setup.sh ++++ b/dracut/30ignition/module-setup.sh +@@ -33,6 +33,7 @@ install() { + mkfs.xfs \ + mkswap \ + sgdisk \ ++ partprobe \ + useradd \ + userdel \ + usermod \ +diff --git a/internal/distro/distro.go b/internal/distro/distro.go +index 61ca87ae..c1c13b62 100644 +--- a/internal/distro/distro.go ++++ b/internal/distro/distro.go +@@ -37,6 +37,7 @@ var ( + mdadmCmd = "mdadm" + mountCmd = "mount" + sgdiskCmd = "sgdisk" ++ partprobeCmd = "partprobe" + modprobeCmd = "modprobe" + udevadmCmd = "udevadm" + usermodCmd = "usermod" +@@ -90,6 +91,7 @@ func GroupdelCmd() string { return groupdelCmd } + func MdadmCmd() string { return mdadmCmd } + func MountCmd() string { return mountCmd } + func SgdiskCmd() string { return sgdiskCmd } ++func PartprobeCmd() string { return partprobeCmd } + func ModprobeCmd() string { return modprobeCmd } + func UdevadmCmd() string { return udevadmCmd } + func UsermodCmd() string { return usermodCmd } +diff --git a/internal/sgdisk/sgdisk.go b/internal/sgdisk/sgdisk.go +index 29915809..e70a3881 100644 +--- a/internal/sgdisk/sgdisk.go ++++ b/internal/sgdisk/sgdisk.go +@@ -121,6 +121,11 @@ func (op *Operation) Commit() error { + if _, err := op.logger.LogCmd(cmd, "deleting %d partitions and creating %d partitions on %q", len(op.deletions), len(op.parts), op.dev); err != nil { + return fmt.Errorf("create partitions failed: %v", err) + } ++ // In contrast to similar tools, sgdisk does not trigger the update of the kernel partition table ++ cmd = exec.Command(distro.PartprobeCmd(), op.dev) ++ if _, err := op.logger.LogCmd(cmd, "re-reading of %d deleted partitions and %d created partitions on %q", len(op.deletions), len(op.parts), op.dev); err != nil { ++ return fmt.Errorf("re-reading partitions failed: %v", err) ++ } + + return nil + } +-- +2.41.0 + diff --git a/sdk_container/src/third_party/coreos-overlay/sys-apps/ignition/ignition-9999.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-apps/ignition/ignition-9999.ebuild index 26ad7c169a9..0b642e849eb 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-apps/ignition/ignition-9999.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/sys-apps/ignition/ignition-9999.ebuild @@ -60,6 +60,7 @@ PATCHES=( "${FILESDIR}/0016-internal-exec-stages-disks-prevent-races-with-udev.patch" "${FILESDIR}/0017-translation-support-OEM-and-oem.patch" "${FILESDIR}/0018-revert-internal-oem-drop-noop-OEMs.patch" + "${FILESDIR}/0022-sgdisk-Run-partprobe-after-partition-changes.patch" ) src_compile() { diff --git a/sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-9999.ebuild b/sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-9999.ebuild index 9c1ba354621..49d3d1aeb55 100644 --- a/sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-9999.ebuild +++ b/sdk_container/src/third_party/coreos-overlay/sys-kernel/bootengine/bootengine-9999.ebuild @@ -10,7 +10,7 @@ CROS_WORKON_REPO="https://github.com" if [[ "${PV}" == 9999 ]]; then KEYWORDS="~amd64 ~arm ~arm64 ~x86" else - CROS_WORKON_COMMIT="af7ac28107d0a960b09e0c63ae9dd343aa697c98" # flatcar-3510-backport + CROS_WORKON_COMMIT="26f2f279c10a55fedac23dae896b980e7c8967f1" # flatcar-3510-backport KEYWORDS="amd64 arm arm64 x86" fi