From d8f0ec7a468c30d401b2e51e4bbfe985997f8e0c Mon Sep 17 00:00:00 2001 From: Thierry Bultel Date: Mon, 15 Aug 2022 13:17:09 +0200 Subject: [PATCH] fs/cpio: new option to use dracut tool Adds an option to invoke the dracut host tool, providing a configuration file, instead of having a full cpio archive of the whole target directory. A default configuration file is provided. It assumes busybox init. ideally, a different default should be used in case of systemd init, but that's left for future work. Signed-off-by: Thierry Bultel [arnout@mind.be: many changes] Signed-off-by: Arnout Vandecappelle (Essensium/Mind) [yann.morin.1998@free.fr: some additional fixups] Signed-off-by: Yann E. MORIN --- fs/cpio/Config.in | 35 +++++++++++++++++ fs/cpio/cpio.mk | 33 ++++++++++++++++ fs/cpio/dracut.conf | 92 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 fs/cpio/dracut.conf diff --git a/fs/cpio/Config.in b/fs/cpio/Config.in index c1151a2881..861e9a929e 100644 --- a/fs/cpio/Config.in +++ b/fs/cpio/Config.in @@ -7,6 +7,41 @@ config BR2_TARGET_ROOTFS_CPIO if BR2_TARGET_ROOTFS_CPIO +choice + prompt "cpio type" + default BR2_TARGET_ROOTFS_CPIO_FULL + +config BR2_TARGET_ROOTFS_CPIO_FULL + bool "cpio the whole root filesystem" + help + Build a cpio archive containing the whole the root filesystem. + +config BR2_TARGET_ROOTFS_CPIO_DRACUT + bool "Invoke dracut to make a partial initramfs" + select BR2_PACKAGE_HOST_DRACUT + help + Build an additional initramfs using dracut. This only contains + a subset of the rootfs, as determined by the configuration + file. + This can be useful to create a recovery system, for instance. + +endchoice + +if BR2_TARGET_ROOTFS_CPIO_DRACUT + +config BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILE + string "dracut configuration file" + default "fs/cpio/dracut.conf" + help + Dracut configuration file. It determines which parts of the + rootfs get included in the cpio image. See dracut.conf(5) or + https://github.com/dracutdevs/dracut/blob/master/man/dracut.conf.5.asc + + The default configuration file is suitable for busybox init. + It doesn't, however, pivot_root into a full rootfs. + +endif + choice prompt "Compression method" default BR2_TARGET_ROOTFS_CPIO_NONE diff --git a/fs/cpio/cpio.mk b/fs/cpio/cpio.mk index 81f8c393d1..fa66b1c710 100644 --- a/fs/cpio/cpio.mk +++ b/fs/cpio/cpio.mk @@ -36,6 +36,8 @@ ROOTFS_CPIO_DEPENDENCIES += host-cpio ROOTFS_CPIO_OPTS += --reproducible endif +ifeq ($(BR2_TARGET_ROOTFS_CPIO_FULL),y) + define ROOTFS_CPIO_CMD cd $(TARGET_DIR) && \ find . \ @@ -44,6 +46,37 @@ define ROOTFS_CPIO_CMD > $@ endef +else ifeq ($(BR2_TARGET_ROOTFS_CPIO_DRACUT),y) + +ROOTFS_CPIO_DEPENDENCIES += host-dracut + +ROOTFS_CPIO_DRACUT_CONF_FILE = $(call qstrip,$(BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILE)) +ifeq ($(BR_BUILDING):$(ROOTFS_CPIO_DRACUT_CONF_FILE),y:) +$(error No dracut config file name specified, check your BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILE setting) +endif + +ifeq ($(BR2_LINUX_KERNEL),y) +ROOTFS_CPIO_DEPENDENCIES += linux +ROOTFS_CPIO_OPTS += --kver $(LINUX_VERSION_PROBED) +else +ROOTFS_CPIO_OPTS += --no-kernel +endif + +define ROOTFS_CPIO_CMD + mkdir -p $(ROOTFS_CPIO_DIR)/tmp + $(HOST_DIR)/bin/dracut \ + $(ROOTFS_CPIO_OPTS) \ + -c $(ROOTFS_CPIO_DRACUT_CONF_FILE) \ + --sysroot $(TARGET_DIR) \ + --tmpdir $(ROOTFS_CPIO_DIR)/tmp \ + -M \ + --force \ + --no-compress \ + $@ +endef + +endif #BR2_TARGET_ROOTFS_CPIO_DRACUT + ifeq ($(BR2_TARGET_ROOTFS_CPIO_UIMAGE),y) ROOTFS_CPIO_DEPENDENCIES += host-uboot-tools define ROOTFS_CPIO_UBOOT_MKIMAGE diff --git a/fs/cpio/dracut.conf b/fs/cpio/dracut.conf new file mode 100644 index 0000000000..2337736c4e --- /dev/null +++ b/fs/cpio/dracut.conf @@ -0,0 +1,92 @@ +#Simple dracut config for a system without systemd + +#Dracut configuration + +show_modules=yes +i18n_install_all=no +lvmconf=no +mdadmconf=no +early_microcode=no +hostonly=no +hostonly_cmdline=no +use_fstab=no +kernel_cmdline="rd.break=initqueue" +do_strip=no + +# Dracut modules needed +add_dracutmodules+=" \ +busybox-init +" + +# Modules to ignore +omit_dracutmodules+=" \ +bash \ +biosdevname \ +btrfs \ +bluetooth \ +busybox \ +caps \ +cifs \ +crypt \ +crypt-gpg \ +dash \ +dbus-broker \ +dbus-daemon \ +dm \ +dmraid \ +dmsquash-live-ntfs \ +dracut-systemd \ +fcoe \ +fcoe-uefi \ +fs-lib \ +iscsi \ +i18n \ +lvmmerge \ +lvm \ +lunmask \ +mdraid \ +memstrack \ +mksh \ +modsign \ +mount-root \ +multipath \ +nbd \ +network-legacy \ +network-wicked \ +nfs \ +nvdimm \ +nvmf \ +parse-lunmask \ +qemu \ +qemu-net \ +resume \ +rootfs-block \ +rngd \ +systemd \ +systemd-udevd \ +systemd-coredump \ +systemd-ask-password \ +systemd-timedated \ +systemd-rfkill \ +systemd-resolved \ +systemd-hostnamed \ +systemd-initrd \ +systemd-journald \ +systemd-ldconfig \ +systemd-networkd \ +systemd-timesyncd \ +systemd-veritysetup \ +systemd-modules-load \ +systemd-sysctl \ +systemd-repart \ +systemd-sysext \ +systemd-sysusers \ +systemd-tmpfiles \ +squash \ +ssh-client \ +stratis \ +tpm2-tss \ +udev-rules \ +url-lib \ +usrmount \ +"