apt.install
macro
This documentation provides an overview of the convenience apt.install
repository macro to create Debian repositories with packages "installed" in
them and available to use in Bazel.
apt.install(name, manifest, lock, nolock, package_template, resolve_transitive)
Repository macro to create Debian repositories.
Warning
THIS IS A LEGACY MACRO. Use it only if you are still using WORKSPACE
.
Otherwise please use the apt
module extension.
Here's an example to create a Debian repo with apt.install
:
# WORKSPACE
load("@rules_distroless//apt:apt.bzl", "apt")
apt.install(
name = "bullseye",
# lock = "//examples/apt:bullseye.lock.json",
manifest = "//examples/apt:bullseye.yaml",
)
load("@bullseye//:packages.bzl", "bullseye_packages")
bullseye_packages()
Note that, for the initial setup (or if we want to run without a lock) the lockfile attribute can be omitted. All you need is a YAML manifest:
version: 1
sources:
- channel: bullseye main
url: https://snapshot-cloudflare.debian.org/archive/debian/20240210T223313Z
archs:
- amd64
packages:
- perl
apt.install
will parse the manifest and will fetch and install the
packages for the given architectures in the Bazel repo @<NAME>
.
Each <PACKAGE>/<ARCH>
has two targets that match the usual structure of a
Debian package: data
and control
.
You can use the package like so: @<REPO>//<PACKAGE>/<ARCH>:<TARGET>
.
E.g. for the previous example, you could use @bullseye//perl/amd64:data
.
As mentioned, the macro can be used without a lock because the lock will be generated internally on-demand. However, this comes with the cost of performing a new package resolution on repository cache misses.
The lockfile can be generated by running bazel run @bullseye//:lock
. This
will generate a .lock.json
file of the same name and in the same path as
the YAML manifest
file.
If you explicitly want to run without a lock and avoid the warning messages
set the nolock
argument to True
.
While we strongly encourage users to check in the generated lockfile, it's not always possible because Debian repositories are rolling by default. Therefore, a lockfile generated today might not work later if the upstream repository removes or publishes a new version of a package.
To avoid this problems and increase the reproducibility it's recommended to avoid using normal Debian mirrors and use snapshot archives instead.
Snapshot archives provide a way to access Debian package mirrors at a point in time. Basically, it's a "wayback machine" that allows access to (almost) all past and current packages based on dates and version numbers.
Debian has had snapshot archives for 10+ years. Ubuntu began providing a similar service recently and has packages available since March 1st 2023.
To use this services simply use a snapshot URL in the manifest. Here's two examples showing how to do this for Debian and Ubuntu:
For more infomation, please check https://snapshot.debian.org and/or https://snapshot.ubuntu.com.
PARAMETERS