From 364acf2f20390a9dbda02850b0e5cf11dc0d4170 Mon Sep 17 00:00:00 2001 From: Robert Church Date: Mon, 31 Jan 2022 23:22:02 -0500 Subject: [PATCH] debian: initramfs-ostree - Initial AIO partition/format support Add temporary installer support for creating default filesystem configuration for AIOs. This will create the following based on the current AIO CentOS kickstart settings for large disks: - Platform backup partition/filesystem - Default physical volume and volume group for cgts-vg - Logical volumes for log-lv and scratch-lv - Format platform backup, log, and scratch filesystem as ext4 Test Plan (using 512G root disk): - PASS: Build/Install ISO - PASS: Observe correct partitions, physical volume, volume group, logical volumes present after boot - PASS: Reinstall ISO after successful install Note: /etc/fstab is updated as a post-rootfs script in base-bullseye.yaml Story: 2009101 Task: 44398 Signed-off-by: Robert Church Change-Id: I6fb3f5bcd26f9035327fb614a34b8fc35ea64362 --- .../0003-Add-lvm2-package-to-initramfs.patch | 30 +++ .../debian/deb_patches/series | 1 + ...auto-expansion-of-fluxdata-partition.patch | 28 +++ ...S-compatible-initial-AIO-partitionin.patch | 204 ++++++++++++++++++ ostree/initramfs-ostree/debian/patches/series | 2 + 5 files changed, 265 insertions(+) create mode 100644 ostree/initramfs-ostree/debian/deb_patches/0003-Add-lvm2-package-to-initramfs.patch create mode 100644 ostree/initramfs-ostree/debian/patches/0001-Prevent-auto-expansion-of-fluxdata-partition.patch create mode 100644 ostree/initramfs-ostree/debian/patches/0002-debian-Add-CentOS-compatible-initial-AIO-partitionin.patch create mode 100644 ostree/initramfs-ostree/debian/patches/series diff --git a/ostree/initramfs-ostree/debian/deb_patches/0003-Add-lvm2-package-to-initramfs.patch b/ostree/initramfs-ostree/debian/deb_patches/0003-Add-lvm2-package-to-initramfs.patch new file mode 100644 index 000000000..02921258e --- /dev/null +++ b/ostree/initramfs-ostree/debian/deb_patches/0003-Add-lvm2-package-to-initramfs.patch @@ -0,0 +1,30 @@ +From d0aca679be610c4dbb8b3977be335f8d0dcd5e03 Mon Sep 17 00:00:00 2001 +From: Robert Church +Date: Tue, 1 Feb 2022 03:13:15 -0500 +Subject: [PATCH 3/3] Add lvm2 package to initramfs + +LVM will be used to set up the minimal StarlingX volume group. Include +the package in the Depends list so that vgcreate, pvcreate, lvcreate +commands are available for provisioning. + +Signed-off-by: Robert Church +--- + debian/control | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/debian/control b/debian/control +index 002f25a..899bbb2 100644 +--- a/debian/control ++++ b/debian/control +@@ -25,7 +25,7 @@ Homepage: https://github.com/WindRiver-Labs/meta-lat + + Package: initramfs-ostree + Architecture: all +-Depends: gdisk, e2fsprogs, ${misc:Depends}, ${shlibs:Depends} ++Depends: gdisk, e2fsprogs, lvm2, ${misc:Depends}, ${shlibs:Depends} + Multi-Arch: foreign + Description: Init for initramfs to mount ostree + Basic init for initramfs to mount ostree and pivot root +-- +2.16.6 + diff --git a/ostree/initramfs-ostree/debian/deb_patches/series b/ostree/initramfs-ostree/debian/deb_patches/series index d9cdae6e6..a65eefc05 100644 --- a/ostree/initramfs-ostree/debian/deb_patches/series +++ b/ostree/initramfs-ostree/debian/deb_patches/series @@ -1,2 +1,3 @@ 0001-Cleanup-package-depends-lists.patch 0002-Update-Copyright-and-License.patch +0003-Add-lvm2-package-to-initramfs.patch diff --git a/ostree/initramfs-ostree/debian/patches/0001-Prevent-auto-expansion-of-fluxdata-partition.patch b/ostree/initramfs-ostree/debian/patches/0001-Prevent-auto-expansion-of-fluxdata-partition.patch new file mode 100644 index 000000000..777d06ccf --- /dev/null +++ b/ostree/initramfs-ostree/debian/patches/0001-Prevent-auto-expansion-of-fluxdata-partition.patch @@ -0,0 +1,28 @@ +From: Robert Church +Date: Sun, 30 Jan 2022 20:55:04 -0500 +Subject: Prevent auto-expansion of fluxdata partition + +Set VSZ=20480 to prevent the fluxdata parition from expanding to fill +all free space on the root disk. + +For an AIO we want to provide free space for various customer driven +provisioning scenarios. + +Signed-off-by: Robert Church +--- + init-ostree.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/init-ostree.sh b/init-ostree.sh +index 1702e55..3b043ea 100644 +--- a/init-ostree.sh ++++ b/init-ostree.sh +@@ -32,7 +32,7 @@ ROOT_DELAY="0" + OSTREE_SYSROOT="" + OSTREE_BOOT_DEVICE="LABEL=otaboot" + OSTREE_LABEL_FLUXDATA="fluxdata" +-VSZ=0 ++VSZ=20480 + SKIP_BOOT_DIFF="" + ALLOW_RM_VAR=1 + # The timeout (tenth of a second) for rootfs on low speed device diff --git a/ostree/initramfs-ostree/debian/patches/0002-debian-Add-CentOS-compatible-initial-AIO-partitionin.patch b/ostree/initramfs-ostree/debian/patches/0002-debian-Add-CentOS-compatible-initial-AIO-partitionin.patch new file mode 100644 index 000000000..1570cc425 --- /dev/null +++ b/ostree/initramfs-ostree/debian/patches/0002-debian-Add-CentOS-compatible-initial-AIO-partitionin.patch @@ -0,0 +1,204 @@ +From: Robert Church +Date: Mon, 31 Jan 2022 22:47:09 -0500 +Subject: debian: Add CentOS compatible initial AIO partitioning/formatting + +Add support for initial AIO partitioning and LVM formatting for AIO +hosts. +- Creates platform-backup partition +- Creates default cgts-vg volume group and physical volume +- Creates initial logical volumes for scratch-lv and log-lv + +Signed-off-by: Robert Church +--- + init-ostree-install.sh | 122 +++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 119 insertions(+), 3 deletions(-) + +diff --git a/init-ostree-install.sh b/init-ostree-install.sh +index 55ece63..1d056a5 100644 +--- a/init-ostree-install.sh ++++ b/init-ostree-install.sh +@@ -82,7 +82,9 @@ OPTIONAL: + BSZ=# - MB size of boot partition + RSZ=# - MB size of root partition + VSZ=# - MB size of var partition (0 for auto expand) +- ++ StarlingX ++ inststx=0 - install StarlingX partitioning ++ personality=aio - StarlingX install personality (aio,con,wor,sto) + EOF + } + +@@ -102,7 +104,7 @@ conflict_label() { + local op=$1 + local 'label' 'd' 'devs' 'conflict' 'i' 'fstype' + conflict=1 +- for label in otaefi otaboot otaboot_b otaroot otaroot_b fluxdata; do ++ for label in otaefi otaboot otaboot_b otaroot otaroot_b fluxdata platform_backup platform_pv; do + devs=$(blkid -t LABEL=$label -o device |grep -v $INSTDEV) + if [ "$devs" != "" ] ; then + i=0 +@@ -513,6 +515,8 @@ IP="" + MAX_TIMEOUT_FOR_WAITING_LOWSPEED_DEVICE=60 + OSTREE_KERNEL_ARGS=${OSTREE_KERNEL_ARGS=%OSTREE_KERNEL_ARGS%} + KS="" ++INSTSTX=${INSTSTX=""} ++PERSONALITY=${PERSONALITY=""} + + if [ "$OSTREE_KERNEL_ARGS" = "%OSTREE_KERNEL_ARGS%" ] ; then + OSTREE_KERNEL_ARGS="ro rootwait" +@@ -603,6 +607,10 @@ read_args() { + RSZ=$optarg ;; + VSZ=*) + VSZ=$optarg ;; ++ inststx=*) ++ INSTSTX=$optarg ;; ++ personality=*) ++ PERSONALITY=$optarg ;; + esac + done + # defaults if not set +@@ -615,6 +623,9 @@ read_args() { + if [ "$INSTGPG" = "" ] ; then INSTGPG=1 ; fi + if [ "$INSTFLUX" = "" ] ; then INSTFLUX=1 ; fi + if [ "$INSTSBD" = "" ] ; then INSTSBD=2 ; fi ++ if [ "$INSTSTX" = "" ] ; then INSTSTX=0 ; fi ++ if [ "$PERSONALITY" = "" ] ; then PERSONALITY=aio ; fi ++ + } + + shell_start() { +@@ -680,6 +691,40 @@ grub_partition() { + a="" + first=`sgdisk -F ${dev}|grep -v Creating` + else ++ ############################################ ++ # StarlingX: Clean up the volume group ++ if [ "$INSTSTX" = 1 ] ; then ++ if [ "$VSZ" = 0 ] ; then ++ # /var using up the remainder of the disk ++ echo "WARNING WARNING - No volume group info to clean up, /var will use the remainder of the disk" ++ else ++ case $PERSONALITY in ++ aio) ++ echo "AIO: Clean up the volume group so that the disk can be re-partitioned" ++ vgremove -f cgts-vg ++ ++ # Find and wipe any existing PVs ++ partitions=$(pvs -o pv_name --noheading | grep -v '\[unknown\]') ++ for p in $partitions ++ do ++ echo "Pre-wiping $p (pvs present)" ++ dd if=/dev/zero of=$p bs=512 count=34 ++ dd if=/dev/zero of=$p bs=512 count=34 seek=$((`blockdev --getsz $p` - 34)) ++ pvremove -f $p ++ wipefs -a $p ++ done ++ ;; ++ con) ++ ;; ++ wor) ++ ;; ++ sto) ++ ;; ++ esac ++ fi ++ fi ++ ############################################ ++ + sgdisk -Z ${dev} + first=`sgdisk -F ${dev}|grep -v Creating` + if [ "$BIOSPLUSEFI" = "1" ] ; then +@@ -730,6 +775,41 @@ grub_partition() { + fi + a="$a -n $p:$first:$end -c $p:fluxdata" + fi ++ ++ ############################################ ++ # StarlingX: Temp partitioning compatability ++ if [ "$INSTSTX" = 1 ] ; then ++ if [ "$VSZ" = 0 ] ; then ++ # /var using up the remainder of the disk ++ echo "WARNING WARNING - Can't allocate StarlingX partitions, /var will use the remainder of the disk" ++ else ++ grub_pt_update ++ case $PERSONALITY in ++ aio) ++ echo "Allocating StarlingX AIO host partitioning" ++ CGCS_PV_SIZE=183296 ++ PLATFORM_BACKUP_SIZE=30000 ++ ++ end=$(($first+($PLATFORM_BACKUP_SIZE*1024*1024/$lsz)-1)) ++ a="$a -n $p:$first:$end -c $p:platform_backup -t $p:FFFF" ++ grub_pt_update ++ end=$(($first+($CGCS_PV_SIZE*1024*1024/$lsz)-1)) ++ a="$a -n $p:$first:$end -c $p:platform_pv -t $p:8E00" ++ ;; ++ con) ++ echo "WARNING WARNING: StarlingX standard controller host partitioning not supported" ++ ;; ++ wor) ++ echo "WARNING WARNING: StarlingX worker host partitioning not supported" ++ ;; ++ sto) ++ echo "WARNING WARNING: StarlingX storage host partitioning not supported" ++ ;; ++ esac ++ fi ++ fi ++ ############################################ ++ + sgdisk $a -p ${dev} + } + +@@ -1016,7 +1096,7 @@ fi + udevadm settle --timeout=3 + + cnt=50 +-while [ $cnt ] ; do ++while [ "$cnt" -gt 0 ] ; do + blockdev --rereadpt ${dev} 2> /dev/null > /dev/null && break + sleep 0.1 + cnt=$(($cnt - 1)) +@@ -1074,6 +1154,42 @@ if [ "$BL" = "grub" -a "$INSTFMT" != "0" ] ; then + mkfs.ext4 -F -L fluxdata ${fs_dev}${FLUXPART} + fi + fi ++ ######################################## ++ # StarlingX: Temp VG/PV/LV/FS formatting ++ if [ "$INSTSTX" = 1 ] ; then ++ if [ "$VSZ" = 0 ] ; then ++ echo "WARNING WARNING - Skipping StarlingX default LVM storage, /var will use the remainder of the disk" ++ else ++ case $PERSONALITY in ++ aio) ++ echo "Creating StarlingX AIO host default LVM storage" ++ LOG_VOL_SIZE=8000 ++ SCRATCH_VOL_SIZE=16000 ++ ++ pi=$((pi+2)) ++ mkfs.ext4 -F -L platform_backup ${fs_dev}${pi} ++ ++ pi=$((pi+1)) ++ vgcreate --force cgts-vg ${fs_dev}${pi} ++ lvcreate -n log-lv --size "${LOG_VOL_SIZE}MB" cgts-vg ++ mkfs.ext4 -F /dev/cgts-vg/log-lv ++ lvcreate -n scratch-lv --size "${SCRATCH_VOL_SIZE}MB" cgts-vg ++ mkfs.ext4 -F /dev/cgts-vg/scratch-lv ++ ++ ;; ++ con) ++ echo "WARNING WARNING: StarlingX standard controller host default LVM storage not supported" ++ ;; ++ wor) ++ echo "WARNING WARNING: StarlingX worker host default LVM storage not supported" ++ ;; ++ sto) ++ echo "WARNING WARNING: StarlingX storage host default LVM storage not supported" ++ ;; ++ esac ++ fi ++ fi ++ ######################################## + elif [ "$INSTFMT" != 0 ] ; then + if [ $INSTSF = 1 ] ; then + dosfslabel ${fs_dev}${p1} boot diff --git a/ostree/initramfs-ostree/debian/patches/series b/ostree/initramfs-ostree/debian/patches/series new file mode 100644 index 000000000..591bb8f98 --- /dev/null +++ b/ostree/initramfs-ostree/debian/patches/series @@ -0,0 +1,2 @@ +0001-Prevent-auto-expansion-of-fluxdata-partition.patch +0002-debian-Add-CentOS-compatible-initial-AIO-partitionin.patch