Create a package hello
Talos is built from the pkgs repo and the first step will be to add your custom package to that repo to be built with Talos. You can look at other packages in that repository for examples of what should be included. The only file required to create a package is a pkg.yaml file in a folder. Let’s create an example package to walk through each step. Clone the repo and create a folder..kres.yaml
file in the root of the repository.
We use this file for templating and generating Makefiles.
Put your out-of-tree kernel module below the comment for dependent packages.
make
target to build your module and a directory to store your module configuration.
The next step is to create a pkg.yaml
file to tell bldr
how to create a container with the files you need.
The bldr
tool has assumptions about directory structure and steps you can read about in the GitHub repo.
This example does not build a kernel module, but it can be used as a basis for your own packages.
Please also see existing pkg.yaml files in the pkgs repo
Build the package and kernel
After you’ve created a pkg.yaml file you can test building your package with the make target you generated earlier. Because Talos requires kernel modules to be signed with a signing key only available during the Talos kernel build process we need to build the kernel and package at the same time. We also need a container registry available to store the built assets. Follow the steps in developing Talos to create a docker builder and run a local container registry before running this command.$KERNEL_IMAGE
and $PKG_IMAGE
variables.
Create an extension
System extensions are the way to add software and files to a Talos Linux root filesystem. Just like packages they are built as containers and then layered with Talos to create a bootable squashfs image. The only unique thing about building a system extension with a kernel module is we need to build it against the kernel we just built in the previous step. If we don’t do this then our kernel module won’t be signed and cannot be loaded at runtime. The process is very similar to creating a package. Start by cloning the extensions repo:.kres.yaml
file.
manifest.yaml
file for the metadata of your extension in the my-module folder.
/pkg
so we can copy files from that directory.
Build extension
You now have a complete extension config and can build it with the kernel from your previous pkg build.${EXTENSION_IMAGE}
.
Test the extension
Now we need to create installation media to boot Talos. We will build and use imager to include our extension. Clone the Talos repo.$BASE_INSTALLER_IMAGE
.
Create an installer image from your extension and the installer-base you just created with the following command.
_out/
folder of our repository.
Load and push the container image to a registry with crane.
Make sure you replace $REGISTRY
, $USER
, and $TAG
with the values you want.
crane
:
Test the installer with fresh install
Now you can boot a machine from generic Talos installation media. This is only used to get access to the API so we can apply a configuration that will use our installer image. We’ll assume this machine has an IP address of 192.168.100.100 Generate a configuration that uses your installer image..ko
file you built in the package and put in the /modules
directory.