blob: 80e9c755c3796adb048abe866d3f1465c5400d75 [file] [view]
# cos-dkms for Container-Optimized OS
`cos-dkms` is a tool used in
[Container-Optimized OS](https://cloud.google.com/container-optimized-os/) to
manage, install, and distribute kernel modules.
cos-dkms is based on [Dell DKMS](https://github.com/dell/dkms), and is intended
to largely be a drop-in replacement on COS instances. It additionally supports
uploading/downloading modules to/from a GCS bucket in order to simplify module
distribution. If modules need to be built from source, cos-dkms will
automatically download the correct compiler toolchain and kernel sources for the
running COS instance.
This repository provides a convenient wrapper to download and call the
[cos-dkms container](https://cos.googlesource.com/cos/tools/+/refs/heads/master/src/cmd/cos_dkms/),
which will do the real work of managing modules.
This script will pass `--gcs-bucket=cos-default` to the container. This bucket
will have signed modules compiled by the COS team which can be installed and
loaded for the running COS instance.
The script will mount the following paths into the container:
Name | Host path | Guest path | Note
--------------------- | ----------------------------- | ------------------ | ----
`SOURCE_TREE` | `/var/lib/google/dkms/source` | `/usr/src` | This is the directory containing user-managed module sources.
`DKMS_TREE` | `/var/lib/google/dkms/dkms` | `/var/lib/dkms` | This is the tree where modules will be added and built.
`KERNEL_TREE` | `/var/lib/google/dkms/kernel` | `/lib/modules` | This is the set of directories where kernel modules can be installed after they are built. cos-dkms installs to /var/lib/google/kernel/modules/updates by default.
`KERNEL_MODULES_TREE` | `/lib/modules` | `/host_modules` | This maps the host kernel modules to the guest as read-only so that the correct module dependency graph can be constructed when inserting modules into the kernel.
`LSB_RELEASE` | `/etc/lsb-release` | `/etc/lsb-release` | This file contains OS information, such as the COS build id and board.
Each of these paths can be overridden by setting the `HOST_*` or `GUEST_*`
variables, e.g., `HOST_SOURCE_TREE=/home/my-source-tree/ GUEST_DKMS_TREE=/dkms
cos-dkms ...`
The following variables can also be overridden to change the behavior of the
wrapper script:
* `IMAGE_NAME`: The name of the cos-dkms container image to use. Defaults to
gcr.io/cos-cloud/cos-dkms:latest.
* `CONTAINER_NAME`: The name to use for the cos-dkms container. Defaults to
`cos-dkms-<random integer>`.
* `CONTAINER_NAMESPACE`: The namespace to use for container-related options,
including the image download. Defaults to `cos-dkms`.
* `CONTAINERD_SOCK`: The containerd socket file to use when connecting to the
containerd service. Defaults to `/run/containerd/containerd.sock`.