Chapter 11. Managing kernel arguments in bootc systems
You can use bootc to configure kernel arguments. By default, bootc uses the boot loader configuration files that are stored in /boot/loader/entries. This directory defines arguments provided to the Linux kernel. While kernel arguments are machine-specific, you can manage them through container updates. The boot loader menu entries are shared between multiple operating systems and boot loaders are installed on one device.
Currently, the boot loader entries are written by an OSTree backend.
11.1. Adding support to inject kernel arguments by using bootc Copy linkLink copied to clipboard!
The bootc tool uses generic operating system kernels. You can add support to inject kernel arguments by adding a custom configuration, in the TOML format, in /usr/lib/bootc/kargs.d. For example:
/usr/lib/bootc/kargs.d/10-example.toml
# /usr/lib/bootc/kargs.d/10-example.toml
kargs = ["mitigations=auto,nosmt"]
You can also make these kernel arguments architecture-specific by using the match-architectures key. For example:
/usr/lib/bootc/kargs.d/00-console.toml
# /usr/lib/bootc/kargs.d/00-console.toml
kargs = ["console=ttyS0,114800n8"]
match-architectures = ["x86_64"]
11.2. Modifying kernel arguments by using bootc install configurations Copy linkLink copied to clipboard!
You can use the bootc install command with the --karg option to inject kernel arguments during installation time in the following ways:
- Adding kernel arguments into the container image.
-
Adding kernel arguments by using the
bootc install --kargcommand.
Use the kernel arguments on Day 2 operations, by adding the arguments and applying them on a switch, upgrade, or edit.
Prerequisites
- You created a container image.
Procedure
Create files within
/usr/lib/bootc/kargs.dwith kernel arguments.sudo tee /usr/lib/bootc/kargs.d/console.kargs << EOF console=tty0 console=ttyS0,115200n8 EOF
$ sudo tee /usr/lib/bootc/kargs.d/console.kargs << EOF console=tty0 console=ttyS0,115200n8 EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow Fetch the container image to get the OSTree commit.
podman pull quay.io/<your_org>/<your_bootc_image>:latest
$ podman pull quay.io/<your_org>/<your_bootc_image>:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow Use the OSTree commit to return the file tree.
bootc install to-filesystem --karg=root=<UUID>=<uuid of /mnt> --imgref $self /mnt
# bootc install to-filesystem --karg=root=<UUID>=<uuid of /mnt> --imgref $self /mntCopy to Clipboard Copied! Toggle word wrap Toggle overflow Navigate to the
/usr/lib/bootc/kargs.dkernel arguments directory.cd /usr/lib/bootc/kargs.d
cd /usr/lib/bootc/kargs.dCopy to Clipboard Copied! Toggle word wrap Toggle overflow Read each file within the kernel arguments directory.
find /usr/lib/bootc/kargs.d -name ".kargs" -exec cat {} \;*$ find /usr/lib/bootc/kargs.d -name ".kargs" -exec cat {} \;*Copy to Clipboard Copied! Toggle word wrap Toggle overflow Push the contents of each
kargsfile into a file containing all the neededkargs.CONSOLIDATED_KARGS="/tmp/all-kargs.txt"
$ CONSOLIDATED_KARGS="/tmp/all-kargs.txt"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pass the
kargsto thestage()function.bootc kargs --append="$KARGS_STRING"
$ bootc kargs --append="$KARGS_STRING"Copy to Clipboard Copied! Toggle word wrap Toggle overflow Apply the kernel arguments to switch, upgrade, or edit during operations.
bootc switch --transport=registry quay.io/<your_org>/<your_bootc_image>:latest
$ bootc switch --transport=registry quay.io/<your_org>/<your_bootc_image>:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3. Injecting kernel arguments in the Containerfile Copy linkLink copied to clipboard!
To add kernel arguments into a container image, use a Containerfile. The following is an example:
11.4. Injecting kernel arguments at installation time Copy linkLink copied to clipboard!
You can use boot install with the --karg to inject kernel arguments during installation time. As a result, the kernel arguments become the machine-local state, that is, they became the persistent configuration unique to that specific machine.
Prerequisites
- You created a container image.
Procedure
Inject kernel arguments:
bootc install to-filesystem --karg=root=<UUID>=<uuid of /mnt> --imgref $self /mnt
# bootc install to-filesystem --karg=root=<UUID>=<uuid of /mnt> --imgref $self /mntCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.5. Adding install-time kernel arguments by using bootc-image-builder Copy linkLink copied to clipboard!
The bootc-image-builder tool supports the customizations.kernel.append during the installation time.
Prerequisites
- You created a container image.
Procedure
Add kernel arguments with
bootc-image-builderby using the following customization:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.6. How kernel arguments change after the installation with kargs.d Copy linkLink copied to clipboard!
The changes that you make to kargs.d files and include in a container build are applied after the installation, and the difference between the set of kernel arguments is applied to the current boot loader configuration. This preserves any machine-local kernel arguments.
You can use any tool to edit the /boot/loader/entries files, which are in a standardized format. The /boot file has read-only access to limit the set of tools that can write to this filesystem.
11.7. Editing kernel arguments in bootc systems Copy linkLink copied to clipboard!
To perform machine local changes, you also can edit kernel arguments on a bootc system or an rpm-ostree system, by using the rpm-ostree kargs command. The changes are made through the user/lib/bootc/kargs.d path, which also handles Day 2 changes, besides the first boot changes.
The following are the options that you can use to add, modify or remove kernel arguments.
rpm-ostree kargs
- --append=KEY=VALUE
-
Appends a kernel argument. It is useful with, for example,
console=that can be used multiple times. You can use an empty value for an argument. - --replace=KEY=VALUE=NEWVALUE
-
Replaces an existing kernel argument. You can replace an argument with
KEY=VALUEonly if one value already exists for that argument. - --delete=KEY=VALUE
- Deletes a specific kernel key-value pair argument or an entire argument with a single key-value pair.
- --append-if-missing=KEY=VALUE
- Appends a kernel argument. Does nothing if the key is already present.
- --delete-if-present=KEY=VALUE
- Deletes a specific kernel key-value pair argument. Does nothing if the key is missing.
- --editor
- Uses an editor to modify the kernel arguments.
Prerequisites
- You created a container image.
Procedure
Append a kernel argument, for example:
rpm-ostree kargs --append debug
# rpm-ostree kargs --append debug Staging deployment... done Freed: 40.1 MB (pkgcache branches: 0) Changes queued for next boot. Run "systemctl reboot" to start a rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow Check the help for more information:
rpm-ostree kargs --help
# rpm-ostree kargs --helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow