This folder contains the configuration files for the driverkit build grid.
Just make is enough! ❤️
make
all
: build all the Falco drivers (all the versions), for every supported distro, and every supported kernel releasegenerate
: generate Driverkit config files for building drivers for specific arch, kernel and target for all Falco lib versionsvalidate
: validate Driverkit config files for building drivers for specific arch, kernel and target for all Falco lib versionsspecific_target
: build the filtered driver versionsclean
: remove everything in theoutput/
directory (except it, and its.gitignore
file)publish
: publish all the built Falco drivers (those existing in theoutput/
directory) to bintraypublish_<driver_version>
: publish all the built Falco drivers to bintray filtering by the Falco driver version (those existing in theoutput/<driver_version>
directory)publish_s3
: publish all the built Falco drivers (those existing in theoutput/
directory) to S3publish_s3_<driver_version>
: publish all the built Falco drivers to S3 filtering by the Falco driver version (those existing in theoutput/<driver_version>
directory)cleanup
: delete from bintray the driver version no more supported (those present on bintray but not in theconfig/
directory)cleanup_s3
: delete from S3 the driver version no more supported (those present on S3 but not in theconfig/
directory)stats
: print counts about currently available Falco drivers
In case you want to build the Falco drivers (all the available versions) for just a distro or a specific kernel or both, use the specific_target
make target:
make -e TARGET_DISTRO=amazonlinux2 specific_target
These are the available filters as environment variables:
TARGET_ARCH
: a specific arch between { "x86_64", "aarch64" }TARGET_VERSION
: a specific Falco driver versionTARGET_DISTRO
: a spefific Linux distributionTARGET_KERNEL_RELEASE
: a specific Linux kernel release (i.e. the result ofuname -r
):- in <kernel_version>.<major_version>.<minor_version> format
- in <kernel_version>.<major_version>.* format
- in <kernel_version>.* format
TARGET_KERNEL_VERSION
: a specific Linux version (i.e. from the result ofuname -v
)TARGET_KERNEL
: a specific Linux kernel release and kernel version, separated by underscore ('_'). Specifying it will overrideTARGET_KERNEL_RELEASE
andTARGET_KERNEL_VERSION
.
Notice all the filters are optional (except for generate
where they are mandatory).
These are the available used as environment variables:
- all of the above filter variables
TARGET_KERNEL_DEFCONFIG
: a path to a file that contains the base64 encoded defconfig for the kernel. Optional.TARGET_HEADERS
: a list of headers for the current kernel. Optional.
You can filter a specific distro with a specific kernel (i.e. 5.9.0 release and version #1):
make -e TARGET_DISTRO="debian" -e TARGET_KERNEL="5.9.0_1" specific_target
The result would be the same of:
make -e TARGET_DISTRO="debian" -e TARGET_KERNEL_RELEASE="5.9.0" -e TARGET_KERNEL_VERSION="1" specific_target
Or, you can ask it to make all the Falco drivers for all the kernel versions of the 5.9.0 kernel release:
make -e TARGET_DISTRO="debian" -e TARGET_KERNEL_RELEASE="5.9.0" specific_target
Or, you can ask it to make all the Falco drivers for debian 5.x kernels.
make -e TARGET_DISTRO="debian" -e TARGET_KERNEL="5.*" specific_target
In case you're only interested in a precise Falco driver version, you can filter by it too:
make -e TARGET_VERSION="2aa88" -e TARGET_DISTRO="debian" -e TARGET_KERNEL="4.9.*" specific_target
Finally, notice you can use these filters also with the stats
make target.
Eg.,
make -e TARGET_DISTRO=debian stats
A: Go to https://download.falco.org/driver/site/index.html
A: You can generate and contribute configurations for your OS, as follows:
-
Fork this repository
-
From the
driverkit
directory of the repository, run:make generate -e TARGET_DISTRO=<TARGET_DISTRO> -e TARGET_KERNEL=<TARGET_KERNEL>
Besides
$TARGET_DISTRO
and$TARGET_KERNEL
, you can find more filters here, that help you to target specific kernel releases.If you want the drivers for your local kernel, you can fill
$TARGET_KERNEL
with:"$(uname -r)_$(uname -v | sed 's/#\([[:digit:]]\ \).*/\1/')"
.Available values for
$TARGET_DISTRO
can be found here. -
Send a PR to this upstream repository, with the changes
The configurations are then consumed by driverkit in our CI pipeline.
You can find examples of configurations in this repository. The configuration paths are built as follows:
driverkit/config/<driver version>/<architecture>/<linux distribution>_<kernel release name>_<kernel build version>.yaml
.
You can also validate the configurations you generate with make validate
, and using same filters used for make generate
to target specific configurations.
You can find more info about the Driverkit Build Grid here.
It should be noted that the Driverkit Build Grid configurations are kept only for the last kernel-crawler's result, as the crawler represents the uniqe source of truth. Therefore, added configurations will be dropped on Driverkit Build Grid updates but published artifacts will not be cleaned up and will still remain available.
A: If you have proper S3 permissions from Terraform or Prow, run
make publish_s3
to publish the results after the build finishes.