Commit Graph

22 Commits (dee09ece209e1950306b3988b1b3ad8aa8e6496d)

Author SHA1 Message Date
Dustin dee09ece20 xxx
Aimee OS/container-images/pipeline/head There was a failure building this commit Details
2025-01-04 07:38:05 -06:00
Dustin dd55d58e8f ci: Mount ephemeral volume for container storage
Aimee OS/container-images/pipeline/head There was a failure building this commit Details
Without a specific volume mount, the Buildah working container will be
stored in the Jenkins pod container filesystem.  This not only affects
performance, but limits the size of the working container filesystem and
the final image, as the worker nodes do not have very much space for
container filesystems.  Thus, we need to mount an ephemeral Longhorn
volume in the job pod to provide more space to Buildah.

Using a read-only root filesystem helps ensure that no temporary data
get written to container storage.  This of course breaks the work-around
we had in place for overriding the broken default `storage.conf` in the
_buildah_ image, so we mount a _tmpfs_ filesystem at `/home/build` as a
different work-around.
2025-01-04 07:02:37 -06:00
Dustin 486322eea1 Use build/rust-cross image
Aimee OS/container-images/pipeline/head Something is wrong with the build of this commit Details
The _build/cross_ image no longer contains a Rust toolchain.  The
_build/rust-cross_ is layerd on top of _build/cross_ and includes a
cross-compiling toolchain for Rust.
2024-12-22 12:25:45 -06:00
Dustin 9c78ac71ee Fix parsing arguments
Aimee OS/container-images/pipeline/head This commit looks good Details
Infinite loop much?
2024-12-21 17:11:01 -06:00
Dustin ec9ccd6b3b split-repo: Populate build branch
Aimee OS/container-images/pipeline/head There was a failure building this commit Details
In order to create multiple Jenkins build pipelines for this repository,
I'm splitting it up with branches.  There will be a branch for each
image:

* base/main: The base image
* cross/main: The image with a cross-compiler toolchain
* build/main: The final build image

Note _/main_ in each name.  The intent here is to be able to have
different "sub-branches" for each image, so e.g. there might be a
_base/dev_.

In addition to the branches for each image, there will be branches for
the shared library code as well, named like _lib/main_.  The image
branches will checkout this branch using `git worktree`.
2024-12-21 15:21:00 -06:00
Dustin c3418b96e7 portage: Set USE=-nls globally
A recent update to the Gentoo repo as introduced a circular dependency
between _m4_ and _gettext_.  We can avoid it by setting `USE=-nls`.
This is OK because we don't need i18n in the build environment.
2024-12-14 17:37:40 -06:00
Dustin 5d730ee0e6 lib/crossdev: Do not update when installing
This usually results in a broken dependency graph that has to be
resolved by rebuilding the base layer.
2024-12-14 17:37:40 -06:00
Dustin 961cb0078c lib: Disable emerge color
Although Jenkins is supposed to be able to decode ANSI escape sequences
for terminal colors, it doesn't do so in all cases and when it does, it
doesn't seem to produce the right result for output from `emerge`.
2024-12-14 17:37:25 -06:00
Dustin 9377c9423c ci: Fix file ownership before archiving
Several log files in `/var/log` are owned by users other than root.
From outside the user namespace, these files are inaccessible to the
unprivileged user, so we need to change their ownership before we can
archive them.
2024-12-14 14:17:33 -06:00
Dustin c1badb2d1e cross: Fix parsing arguments
Infinite loop much?
2024-12-14 14:17:33 -06:00
Dustin d79bf8526e ci: Archive logs from /var/log too
When `crossdev` fails, we need to read the logs it put in `/var/log`.
2024-12-14 14:17:33 -06:00
Dustin b7fdaa93ac ci: Set resource requests/limits
Aimee OS/container-images/pipeline/head There was a failure building this commit Details
Use the whole node to prevent interference from other processes causing
e.g. OOM conditions.
2024-12-14 11:25:20 -06:00
Dustin a67ed592df tools: Install tini
During development, we leave a container running and `exec` into it
to run multiple commands.  To keep the container running, we need a PID
1 process that never terminates, which we achieved previously with
Python.  This technically works, but ultimately leaves a lot of zombie
processes.  If we use a "true" init process for PID 1, it will clean
these up.
2024-12-14 09:45:50 -06:00
Dustin 3f136a4ad1 crossdev: Build a cross toolchain for Rust
To cross-compile Rust packages, we need a standard library compiled for
the target system.
2024-12-14 09:41:35 -06:00
Dustin aaed7211b2 build: Install QEMU
Aimee OS/container-images/pipeline/head There was a failure building this commit Details
Although most software can be cross-compiled, there are quite a few edge
cases where executables built for the target system need to be run on
the build host.  Notably, `ldconfig` only considers libraries for the
same machine type as the tool itself, so it's impossible to run it in a
cross-compiled root.  In order to get passed these situations, we can
use QEMU in user mode to emulate the target architecture, allowing ARM
executables to run on AMD64 machines.
2024-12-12 18:02:16 -06:00
Dustin 19068af38c ci: Push: Publish all images
Aimee OS/container-images/pipeline/head This commit looks good Details
The _build/cross-{target}_ image only includes the crossdev toolchain.
What we really need is the _build/build-{target}_ image, which contains
all the tools necessary to build an Aimee OS project.
2024-12-09 08:59:32 -06:00
Dustin 20916b48c6 ci: Persist build logs
Aimee OS/container-images/pipeline/head This commit looks good Details
2024-12-08 10:59:30 -06:00
Dustin f99176abf3 tools: emerge shadow first
_sys-apps/shadow_ needs to be installed explicity, otherwise all
_acct-user/*_ and _acct-group/*_ packages will fail to install.
2024-12-08 10:59:30 -06:00
Dustin c13a44c6bf common: Persist binary packages between runs 2024-12-08 10:59:30 -06:00
Dustin 15fbb180d0 ci: Begin Jenkins build pipeline 2024-12-08 10:59:30 -06:00
Dustin 65988b0c32 Rework images into three layers
* Base
* Crossdev
* Build

The *Base* layer is bootstrapped from a regular Gentoo stage 3
environment.  The *Build* layer is the primary artifact, and is
"squashed" into a single layer when built.
2024-12-08 10:59:28 -06:00
Dustin 86330dc292 Initial commit 2024-12-02 21:03:08 -06:00