blob: bc7fdc13a87771bd83391086079b85148697fe95 [file] [log] [blame]
#!/bin/bash
# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Arguments:
# $1 - Configuration file containing boot args.
modify_kernel_command_line() {
local config_file="$1"
# Lakitu boards currently use GRUB2 with BIOS. In ChromeOS tree, GRUB2 is
# almost always associated with EFI, so we trick everyone into believing that
# Lakitu uses EFI. Specifically, the image signers (at image build time) and
# the post-installer (during auto-updates) rely on presence of 'cros_efi' in
# the kernel commandline to infer the bootloader type.
# See
# https://www.chromium.org/chromium-os/chromiumos-design-docs/disk-format#TOC-Which-kernel-
sed -i -e 's/cros_secure/cros_efi/g' "${config_file}"
# Enable AppArmor by default.
echo "security=apparmor" >> "${config_file}"
# Turn on tx napi for the virtio_net driver.
echo "virtio_net.napi_tx=1" >> "${config_file}"
# Enable cgroup-v2 hybrid mode
echo "systemd.unified_cgroup_hierarchy=false" >> "${config_file}"
echo "systemd.legacy_systemd_cgroup_controller=false" >> "${config_file}"
# Disable Container Security Monitor by default.
echo "csm.disabled=1" >> "${config_file}"
# Exclude pinning kernel modules.
echo "loadpin.exclude=kernel-module" >> "${config_file}"
# Load loadpin-trigger kernel module automatically on boot.
echo "modules-load=loadpin_trigger" >> "${config_file}"
# Enforce kernel module signature verification.
echo "module.sig_enforce=1" >> "${config_file}"
# Add vsyscall=emulate to command-line. Chromeos kernel defaults to
# vsyscall=none, but Lakitu users can run containers with old glibc which has
# dependency on vsyscall.
echo "vsyscall=emulate" >> "${config_file}"
# Enable IOMMU for SRIOV
echo "intel_iommu=on iommu=pt" >> "${config_file}"
}