Message ID | 20230110120055.463166-1-Quirin.Gylstorff@siemens.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [isar-cip-core,v2] Create a generic initramfs overlay | expand |
On 10.01.23 13:00, Quirin Gylstorff wrote: > From: Quirin Gylstorff <quirin.gylstorff@siemens.com> > > This allows the user to generate multiple overlays in a given > location. > > The configuration used the following variables: > - INITRAMFS_OVERLAY_STORAGE_PARTITION_LABEL: Label of the partition to store the overlays > - INITRAMFS_OVERLAY_PATHS: space-separated list of overlay directories (lower overlay directories) > - INITRAMFS_OVERLAY_STORAGE_PATH: path on the storage partition where the upper directory is stored > > e.g.: > ``` > INITRAMFS_OVERLAY_STORAGE_PARTITION_LABEL ??= "var" > INITRAMFS_OVERLAY_PATHS ??= "etc" > INITRAMFS_OVERLAY_STORAGE_PATH ??= "/var/local" > ``` > This will create an overlay for `/etc` and store it in `/var/local/etc`. > > Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> > --- > > Changes v2: > - INITRAMFS_OVERLAY_STORAGE_PATH contains the full path > - updated copyright > - formatting > - fix typos in commit message Could you also explain why my other suggestions are not feasible or reasonable? I would still prefer 2 over 3 variables, if possible. Jan
On 1/10/23 17:38, Jan Kiszka wrote: > On 10.01.23 13:00, Quirin Gylstorff wrote: >> From: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> >> This allows the user to generate multiple overlays in a given >> location. >> >> The configuration used the following variables: >> - INITRAMFS_OVERLAY_STORAGE_PARTITION_LABEL: Label of the partition to store the overlays >> - INITRAMFS_OVERLAY_PATHS: space-separated list of overlay directories (lower overlay directories) >> - INITRAMFS_OVERLAY_STORAGE_PATH: path on the storage partition where the upper directory is stored >> >> e.g.: >> ``` >> INITRAMFS_OVERLAY_STORAGE_PARTITION_LABEL ??= "var" >> INITRAMFS_OVERLAY_PATHS ??= "etc" >> INITRAMFS_OVERLAY_STORAGE_PATH ??= "/var/local" >> ``` >> This will create an overlay for `/etc` and store it in `/var/local/etc`. >> >> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> >> --- >> >> Changes v2: >> - INITRAMFS_OVERLAY_STORAGE_PATH contains the full path >> - updated copyright >> - formatting >> - fix typos in commit message > > Could you also explain why my other suggestions are not feasible or > reasonable? I would still prefer 2 over 3 variables, if possible. I can add the 2 variable version but in my option this makes the configuration harder to understand. As the script tries to mount a partition which is not mentioned before. > Jan > Quirin
On 10.01.23 20:01, Gylstorff Quirin wrote: > > > On 1/10/23 17:38, Jan Kiszka wrote: >> On 10.01.23 13:00, Quirin Gylstorff wrote: >>> From: Quirin Gylstorff <quirin.gylstorff@siemens.com> >>> >>> This allows the user to generate multiple overlays in a given >>> location. >>> >>> The configuration used the following variables: >>> - INITRAMFS_OVERLAY_STORAGE_PARTITION_LABEL: Label of the partition >>> to store the overlays >>> - INITRAMFS_OVERLAY_PATHS: space-separated list of overlay >>> directories (lower overlay directories) >>> - INITRAMFS_OVERLAY_STORAGE_PATH: path on the storage partition >>> where the upper directory is stored >>> >>> e.g.: >>> ``` >>> INITRAMFS_OVERLAY_STORAGE_PARTITION_LABEL ??= "var" >>> INITRAMFS_OVERLAY_PATHS ??= "etc" >>> INITRAMFS_OVERLAY_STORAGE_PATH ??= "/var/local" >>> ``` >>> This will create an overlay for `/etc` and store it in `/var/local/etc`. >>> >>> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com> >>> --- >>> >>> Changes v2: >>> - INITRAMFS_OVERLAY_STORAGE_PATH contains the full path >>> - updated copyright >>> - formatting >>> - fix typos in commit message >> >> Could you also explain why my other suggestions are not feasible or >> reasonable? I would still prefer 2 over 3 variables, if possible. > > I can add the 2 variable version but in my option this makes the > configuration harder to understand. As the script tries to mount > a partition which is not mentioned before. My suggestion only makes sense when the partition (label or whatever identifies it) can be derived from the storage path as it is mounted already or in an fstab that is accessible. It that true? In any case, please make sure that INITRAMFS_OVERLAY_PATHS can be specified absolutely ("/etc") and that subdirs also work ("/etc/foo /etc/bar"). Jan
diff --git a/recipes-initramfs/cip-core-initramfs/cip-core-initramfs.bb b/recipes-initramfs/cip-core-initramfs/cip-core-initramfs.bb index 9e0ee26..2935ed8 100644 --- a/recipes-initramfs/cip-core-initramfs/cip-core-initramfs.bb +++ b/recipes-initramfs/cip-core-initramfs/cip-core-initramfs.bb @@ -1,7 +1,7 @@ # # CIP Core, generic profile # -# Copyright (c) Siemens AG, 2021 +# Copyright (c) Siemens AG, 2021 - 2023 # # Authors: # Quirin Gylstorff <quirin.gylstorff@siemens.com> @@ -12,5 +12,5 @@ inherit initramfs INITRAMFS_INSTALL += " \ - initramfs-etc-overlay-hook \ + initramfs-overlay-hook \ " diff --git a/recipes-initramfs/initramfs-etc-overlay-hook/files/etc-overlay.script b/recipes-initramfs/initramfs-etc-overlay-hook/files/etc-overlay.script deleted file mode 100644 index 6e5aacd..0000000 --- a/recipes-initramfs/initramfs-etc-overlay-hook/files/etc-overlay.script +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -# -# CIP Core, generic profile -# -# Copyright (c) Siemens AG, 2022 -# -# Authors: -# Jan Kiszka <jan.kiszka@siemens.com> -# - -PREREQ="" - -prereqs() -{ - echo "$PREREQ" -} - -case $1 in -# get pre-requisites -prereqs) - prereqs - exit 0 - ;; -esac - -. /scripts/functions - -if ! mount -t $(get_fstype /dev/disk/by-label/var) /dev/disk/by-label/var ${rootmnt}/var; then - panic "Can't mount /var partition - overlay will not work!" -fi - -mkdir -p ${rootmnt}/var/local/etc -mkdir -p ${rootmnt}/var/local/.atomic -if ! mount -t overlay -o lowerdir=${rootmnt}/etc,upperdir=${rootmnt}/var/local/etc,workdir=${rootmnt}/var/local/.atomic overlay ${rootmnt}/etc; then - panic "Can't mount overlay!" -fi diff --git a/recipes-initramfs/initramfs-etc-overlay-hook/initramfs-etc-overlay-hook_0.1.bb b/recipes-initramfs/initramfs-etc-overlay-hook/initramfs-etc-overlay-hook_0.1.bb deleted file mode 100644 index 37a04ec..0000000 --- a/recipes-initramfs/initramfs-etc-overlay-hook/initramfs-etc-overlay-hook_0.1.bb +++ /dev/null @@ -1,30 +0,0 @@ -# -# CIP Core, generic profile -# -# Copyright (c) Siemens AG, 2022 -# -# Authors: -# Jan Kiszka <jan.kiszka@siemens.com> -# -# SPDX-License-Identifier: MIT -# - -inherit dpkg-raw - -SRC_URI += " \ - file://etc-overlay.hook \ - file://etc-overlay.script \ - " - -DEBIAN_DEPENDS = "initramfs-tools" - -do_install[cleandirs] += " \ - ${D}/usr/share/initramfs-tools/hooks \ - ${D}/usr/share/initramfs-tools/scripts/local-bottom" - -do_install() { - install -m 0755 "${WORKDIR}/etc-overlay.hook" \ - "${D}/usr/share/initramfs-tools/hooks/etc-overlay" - install -m 0755 "${WORKDIR}/etc-overlay.script" \ - "${D}/usr/share/initramfs-tools/scripts/local-bottom/etc-overlay" -} diff --git a/recipes-initramfs/initramfs-etc-overlay-hook/files/etc-overlay.hook b/recipes-initramfs/initramfs-overlay-hook/files/overlay.hook similarity index 100% rename from recipes-initramfs/initramfs-etc-overlay-hook/files/etc-overlay.hook rename to recipes-initramfs/initramfs-overlay-hook/files/overlay.hook diff --git a/recipes-initramfs/initramfs-overlay-hook/files/overlay.script.tmpl b/recipes-initramfs/initramfs-overlay-hook/files/overlay.script.tmpl new file mode 100644 index 0000000..dad14f7 --- /dev/null +++ b/recipes-initramfs/initramfs-overlay-hook/files/overlay.script.tmpl @@ -0,0 +1,45 @@ +#!/bin/sh +# +# CIP Core, generic profile +# +# Copyright (c) Siemens AG, 2022-2023 +# +# Authors: +# Jan Kiszka <jan.kiszka@siemens.com> +# Quirin Gylstorff <quirin.gylstorff@siemens.com> +# + +PREREQ="" + +prereqs() +{ + echo "$PREREQ" +} + +case $1 in +# get pre-requisites +prereqs) + prereqs + exit 0 + ;; +esac + +. /scripts/functions + +ovl_partition_label=${INITRAMFS_OVERLAY_STORAGE_PARTITION_LABEL} +ovl_storage_path=${rootmnt}${INITRAMFS_OVERLAY_STORAGE_PATH} +ovl_lower_dirs=${INITRAMFS_OVERLAY_PATHS} + +if ! mount -t $(get_fstype /dev/disk/by-label/${ovl_partition_label}) /dev/disk/by-label/${ovl_partition_label} ${rootmnt}/${ovl_partition_label}; then + panic "Can't mount /${ovl_partition_label} partition - overlay will not work!" +fi + +for ovl_lower_dir in ${ovl_lower_dirs}; do + ovl_atomic_dir=.${ovl_lower_dir}-atomic + + mkdir -p ${ovl_storage_path}/${ovl_lower_dir} + mkdir -p ${ovl_storage_path}/${ovl_atomic_dir} + if ! mount -t overlay -o lowerdir=${rootmnt}/${ovl_lower_dir},upperdir=${ovl_storage_path}/${ovl_lower_dir},workdir=${ovl_storage_path}/${ovl_atomic_dir} overlay ${rootmnt}/${ovl_lower_dir}; then + panic "Can't mount overlay for '$ovl_lower_dir' !" + fi +done diff --git a/recipes-initramfs/initramfs-overlay-hook/initramfs-overlay-hook_0.1.bb b/recipes-initramfs/initramfs-overlay-hook/initramfs-overlay-hook_0.1.bb new file mode 100644 index 0000000..25910b8 --- /dev/null +++ b/recipes-initramfs/initramfs-overlay-hook/initramfs-overlay-hook_0.1.bb @@ -0,0 +1,40 @@ +# +# CIP Core, generic profile +# +# Copyright (c) Siemens AG, 2022 - 2023 +# +# Authors: +# Jan Kiszka <jan.kiszka@siemens.com> +# Quirin Gylstorff <quirin.gylstorff@siemens.com> +# +# SPDX-License-Identifier: MIT +# + +inherit dpkg-raw + +SRC_URI += " \ + file://overlay.hook \ + file://overlay.script.tmpl \ + " + +INITRAMFS_OVERLAY_STORAGE_PARTITION_LABEL ??= "var" +INITRAMFS_OVERLAY_PATHS ??= "etc" +INITRAMFS_OVERLAY_STORAGE_PATH ??= "/var/local" + +TEMPLATE_FILES = "overlay.script.tmpl" +TEMPLATE_VARS += "INITRAMFS_OVERLAY_STORAGE_PARTITION_LABEL \ + INITRAMFS_OVERLAY_STORAGE_PATH \ + INITRAMFS_OVERLAY_PATHS" + +DEBIAN_DEPENDS = "initramfs-tools" + +do_install[cleandirs] += " \ + ${D}/usr/share/initramfs-tools/hooks \ + ${D}/usr/share/initramfs-tools/scripts/local-bottom" + +do_install() { + install -m 0755 "${WORKDIR}/overlay.hook" \ + "${D}/usr/share/initramfs-tools/hooks/overlay" + install -m 0755 "${WORKDIR}/overlay.script" \ + "${D}/usr/share/initramfs-tools/scripts/local-bottom/overlay" +}