DIB: Add custom block-device-efi element 83/1983/2
authorAlexandru Avadanii <Alexandru.Avadanii@enea.com>
Thu, 14 Nov 2019 16:50:25 +0000 (17:50 +0100)
committerAlex Antone <Alexandru.Antone@enea.com>
Thu, 28 Nov 2019 14:02:37 +0000 (14:02 +0000)
Upstream block-device-efi DIB element hardcodes the root partition
filesystem type to 'ext4', hence ignoring our FS_TYPE env var
during image building. Although the image builds successfully,
booting the resulting ISO will run into various issues, especially
since most of our scripts assume an XFS root partition.

To allow overriding the rootfs type, provide our own block-device-efi
DIB element, identical to upstream [1] apart from hardcoding
mkfs.type for /. Our override will take precedence during image
building.

$ diff -Naur \
  ../diskimage-builder/diskimage_builder/elements/block-device-efi/
  ./dib_elements/block-device-efi/
@@ -22,7 +22,6 @@
         type: '8300'
         size: 100%
         mkfs:
-          type: ext4
           mount:
             mount_point: /
             fstab:

[1] https://github.com/openstack/diskimage-builder/tree/2.29.1/ \
    diskimage_builder/elements/block-device-efi

Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
Change-Id: Ic611bfcf00ad38e8a8a7332a64562f615096207a

dib_elements/block-device-efi/README.rst [new file with mode: 0644]
dib_elements/block-device-efi/block-device-default.yaml [new file with mode: 0644]
dib_elements/block-device-efi/element-provides [new file with mode: 0644]
dib_elements/block-device-efi/environment.d/15-block-device.bash [new file with mode: 0644]

diff --git a/dib_elements/block-device-efi/README.rst b/dib_elements/block-device-efi/README.rst
new file mode 100644 (file)
index 0000000..ac730c0
--- /dev/null
@@ -0,0 +1,14 @@
+================
+Block Device EFI
+================
+
+This provides a block-device configuration for the ``vm`` element to
+get a single-partition disk suitable for EFI booting.
+
+Based on upstream DIB element block-device-efi, the only modification
+being the root fs type from hardcoded 'ext4' to relying on FS_TYPE.
+
+Note on x86 this provides the extra `BIOS boot partition
+<https://en.wikipedia.org/wiki/BIOS_boot_partition>`__ and a EFI boot
+partition for maximum compatability.
+
diff --git a/dib_elements/block-device-efi/block-device-default.yaml b/dib_elements/block-device-efi/block-device-default.yaml
new file mode 100644 (file)
index 0000000..1f3c18b
--- /dev/null
@@ -0,0 +1,29 @@
+- local_loop:
+    name: image0
+
+- partitioning:
+    base: image0
+    label: gpt
+    partitions:
+      - name: ESP
+        type: 'EF00'
+        size: 550MiB
+        mkfs:
+          type: vfat
+          mount:
+            mount_point: /boot/efi
+            fstab:
+              options: "defaults"
+              fsck-passno: 1
+      - name: BSP
+        type: 'EF02'
+        size: 8MiB
+      - name: root
+        type: '8300'
+        size: 100%
+        mkfs:
+          mount:
+            mount_point: /
+            fstab:
+              options: "defaults"
+              fsck-passno: 1
diff --git a/dib_elements/block-device-efi/element-provides b/dib_elements/block-device-efi/element-provides
new file mode 100644 (file)
index 0000000..c0180a2
--- /dev/null
@@ -0,0 +1 @@
+block-device
\ No newline at end of file
diff --git a/dib_elements/block-device-efi/environment.d/15-block-device.bash b/dib_elements/block-device-efi/environment.d/15-block-device.bash
new file mode 100644 (file)
index 0000000..ad8a267
--- /dev/null
@@ -0,0 +1,10 @@
+#
+# Arch gate
+#
+
+if [[ "ppc64 ppc64le ppc64el" =~ "$ARCH" ]]; then
+    echo "block-device-efi is not supported on Power; use block-device-gpt or block-device-mbr"
+    exit 1
+fi
+
+export DIB_BLOCK_DEVICE=efi