Modifying Kernel Arguments

Currently to change kernel arguments, you must script a systemd service which runs rpm-ostree kargs --reboot. The command supports appending kernel arguments (via --append KEY[=VAL]), deleting them (via --delete KEY[=VAL]), and replacing them (via --replace KEY[=VALUE]).

In the future, we will have a more Ignition-friendly method of doing this with stronger guarantees. See this upstream issue for more information.

Here’s an example which drops the default systemd.unified_cgroup_hierarchy=0 kernel argument so that the machine uses cgroups v2:

variant: fcos
version: 1.1.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - $pubkey
systemd:
  units:
    - name: cgroups-v2-karg.service
      enabled: true
      contents: |
        [Unit]
        Description=Switch To cgroups v2
        # We run after `systemd-machine-id-commit.service` to ensure that
        # `ConditionFirstBoot=true` services won't rerun on the next boot.
        After=systemd-machine-id-commit.service
        ConditionKernelCommandLine=systemd.unified_cgroup_hierarchy
        ConditionPathExists=!/var/lib/cgroups-v2-karg.stamp

        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStart=/bin/rpm-ostree kargs --delete=systemd.unified_cgroup_hierarchy
        ExecStart=/bin/touch /var/lib/cgroups-v2-karg.stamp
        ExecStart=/bin/systemctl --no-block reboot

        [Install]
        WantedBy=multi-user.target
The After=systemd-machine-id-commit.service directive is important to avoid some subtle issues. Similarly, any ConditionFirstBoot=true services should use Before=first-boot-complete.target systemd-machine-id-commit.service. See the systemd documentation for more details.