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 <thierry.bultel@linatsea.fr>
[arnout@mind.be: many changes]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
[yann.morin.1998@free.fr: some additional fixups]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
This commit is contained in:
Thierry Bultel 2022-08-15 13:17:09 +02:00 committed by Yann E. MORIN
parent 87f4900826
commit d8f0ec7a46
3 changed files with 160 additions and 0 deletions

View File

@ -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

View File

@ -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

92
fs/cpio/dracut.conf Normal file
View File

@ -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 \
"