split-repo: Populate build branch
Aimee OS/container-images/pipeline/head There was a failure building this commit
Details
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`.build/main
parent
c3418b96e7
commit
ec9ccd6b3b
62
README.md
62
README.md
|
@ -1,62 +0,0 @@
|
||||||
# Aimee OS Build Container Images
|
|
||||||
|
|
||||||
Prerequisites:
|
|
||||||
|
|
||||||
* `buildah`
|
|
||||||
|
|
||||||
|
|
||||||
## Gentoo Stage 3 Image
|
|
||||||
|
|
||||||
This image is used to bootstrap the base layer for Aimee OS build images. To
|
|
||||||
build it, use the `gentoo-stage3.sh` build script. This script takes a single
|
|
||||||
(optional) positional argument: the name of a Gentoo stage 3 tarball to use to
|
|
||||||
produce the container image. If none is specified, the latest
|
|
||||||
`stage3-amd64-nomultilib-openrc` tarball is downloaded and used.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sh image-build/gentoo-stage3.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Base Image
|
|
||||||
|
|
||||||
The Aimee OS base build image is a minimal environment based on Gentoo. It
|
|
||||||
includes Portage and a basic build toolchain. Building it requires a Stage 3
|
|
||||||
image to bootstrap the environment. By default,
|
|
||||||
_aimee-os.org/gentoo/stage3-amd64-nomultilib-openrc:latest_ is used, but an
|
|
||||||
alternative image can be specified using the `-b`/`--base` argument to the
|
|
||||||
`base.sh` script.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sh image-build/base.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Crossdev Image
|
|
||||||
|
|
||||||
This image includes a cross-compilation toolchain, generated by _crossdev_. It
|
|
||||||
is built using the `cross.sh` script. This script takes a `-t`/`--target`
|
|
||||||
argument, which specifies the toolchain to generate. The default is
|
|
||||||
`aarch64-unknown-linux-gnu`. This image is layered on top of the base image,
|
|
||||||
which can be specified using the `-b`/`--base` argument. By default,
|
|
||||||
_aimee-os.org/build/base:latest_ is used.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sh image-build/cross.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
## Build Image
|
|
||||||
|
|
||||||
The top-level image is based on the Crossdev image, and includes additional
|
|
||||||
tools for building an Aimee OS project. It is built using the `build.sh` script.
|
|
||||||
As with the Crossdev image build script, this script accepts `-t`/`--target`
|
|
||||||
and `-b`/`--build` arguments, which specify the cross-compilation toolchain and
|
|
||||||
base image later, respectively.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sh image-build/build.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
This image is "squashed," meaning it consists of only a single layer. The Base
|
|
||||||
and Crossdev image layers are merged into the final layer when the image is
|
|
||||||
built. This reduces the final size of the image.
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
SELF=$(readlink -f "$0")
|
SELF=$(readlink -f "$0")
|
||||||
SRCDIR=${SELF%/*/*}
|
SRCDIR=${SELF%/*}
|
||||||
. "${SRCDIR}"/lib/common.sh
|
. "${SRCDIR}"/lib/common.sh
|
||||||
|
|
||||||
target=aarch64-unknown-linux-gnu
|
target=aarch64-unknown-linux-gnu
|
||||||
|
@ -31,5 +31,5 @@ set -e
|
||||||
cid=$(buildah from "${base}")
|
cid=$(buildah from "${base}")
|
||||||
buildah add "${cid}" portage /etc/portage
|
buildah add "${cid}" portage /etc/portage
|
||||||
buildah_run_script "${cid}" "${SRCDIR}"/lib/sync.sh
|
buildah_run_script "${cid}" "${SRCDIR}"/lib/sync.sh
|
||||||
buildah_run_script "${cid}" "${SRCDIR}"/lib/tools.sh
|
buildah_run_script "${cid}" "${SRCDIR}"/tools.sh
|
||||||
buildah commit --rm --squash "${cid}" "aimee-os.org/build/build-${target}"
|
buildah commit --rm --squash "${cid}" "aimee-os.org/build/build-${target}"
|
|
@ -8,27 +8,19 @@ pipeline {
|
||||||
}
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
stage('Gentoo Stage 3') {
|
stage('Prepare') {
|
||||||
steps {
|
steps {
|
||||||
sh 'sh -e image-build/gentoo-stage3.sh'
|
container('jnlp') {
|
||||||
}
|
// TODO checkout lib/ branch based on $BRANCH_NAME
|
||||||
}
|
sh 'git fetch origin lib/main:lib/main'
|
||||||
|
sh 'git worktree add lib lib/main'
|
||||||
stage('Base') {
|
}
|
||||||
steps {
|
|
||||||
sh 'sh -e image-build/base.sh'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage('Cross') {
|
|
||||||
steps {
|
|
||||||
sh 'sh -e image-build/cross.sh'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('Build') {
|
stage('Build') {
|
||||||
steps {
|
steps {
|
||||||
sh 'sh -e image-build/build.sh'
|
sh 'sh -e build.sh --base git.pyrocufflink.net/aimeeos/build/cross-aarch64-unknown-linux-gnu'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,8 +41,6 @@ pipeline {
|
||||||
git.pyrocufflink.net
|
git.pyrocufflink.net
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
sh 'buildah push aimee-os.org/build/base git.pyrocufflink.net/aimeeos/build/base'
|
|
||||||
sh 'buildah push aimee-os.org/build/cross-aarch64-unknown-linux-gnu git.pyrocufflink.net/aimeeos/build/cross-aarch64-unknown-linux-gnu'
|
|
||||||
sh 'buildah push aimee-os.org/build/build-aarch64-unknown-linux-gnu git.pyrocufflink.net/aimeeos/build/build-aarch64-unknown-linux-gnu'
|
sh 'buildah push aimee-os.org/build/build-aarch64-unknown-linux-gnu git.pyrocufflink.net/aimeeos/build/build-aarch64-unknown-linux-gnu'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
SELF=$(readlink -f "$0")
|
|
||||||
SRCDIR=${SELF%/*/*}
|
|
||||||
. "${SRCDIR}"/lib/common.sh
|
|
||||||
|
|
||||||
base=aimee-os.org/gentoo/stage3-amd64-nomultilib-openrc:latest
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
-b|--base)
|
|
||||||
shift
|
|
||||||
base="$1"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
printf 'Unknown argument: %s\n' "$1" >&2
|
|
||||||
exit 2
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
builddir=$(export TMPDIR=${TMPDIR:-${PWD}} && mktemp -d gentoo.XXXXXX)
|
|
||||||
builddir=$(readlink -f "${builddir}")
|
|
||||||
|
|
||||||
work=$(buildah from -v "${builddir}":/mnt/gentoo:rw,Z "${base}")
|
|
||||||
buildah add "${work}" portage /etc/portage/
|
|
||||||
buildah_run_script "${work}" "${SRCDIR}"/lib/sync.sh
|
|
||||||
buildah_run_script "${work}" "${SRCDIR}"/lib/bootstrap.sh
|
|
||||||
|
|
||||||
cid=$(buildah from scratch)
|
|
||||||
buildah copy "${cid}" "${builddir}" /
|
|
||||||
buildah_run_script "${cid}" "${SRCDIR}"/lib/profile.sh
|
|
||||||
buildah config --cmd /bin/bash "${cid}"
|
|
||||||
buildah commit --rm --squash "${cid}" aimee-os.org/build/base
|
|
||||||
|
|
||||||
buildah run "${work}" find /mnt/gentoo -mindepth 1 -delete
|
|
||||||
buildah rm "${work}"
|
|
||||||
rmdir "${builddir}"
|
|
|
@ -1,32 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
SELF=$(readlink -f "$0")
|
|
||||||
SRCDIR=${SELF%/*/*}
|
|
||||||
. "${SRCDIR}"/lib/common.sh
|
|
||||||
|
|
||||||
target=aarch64-unknown-linux-gnu
|
|
||||||
base=aimee-os.org/build/base
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
-t|--target)
|
|
||||||
shift
|
|
||||||
target="$1"
|
|
||||||
;;
|
|
||||||
-b|--base)
|
|
||||||
shift
|
|
||||||
base="$1"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
printf 'Unknown argument: %s\n' "$1" >&2
|
|
||||||
exit 2
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
cid=$(buildah from "${base}")
|
|
||||||
buildah_run_script "${cid}" "${SRCDIR}"/lib/sync.sh
|
|
||||||
buildah_run_script "${cid}" "${SRCDIR}"/lib/crossdev.sh "${target}"
|
|
||||||
buildah commit --rm "${cid}" aimee-os.org/build/cross-"${target}"
|
|
|
@ -1,22 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
SELF=$(readlink -f "$0")
|
|
||||||
SRCDIR=${SELF%/*/*}
|
|
||||||
|
|
||||||
tarball=$1
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ -z "${tarball}" ]; then
|
|
||||||
tarball=$(sh "${SRCDIR}"/tools/fetch-stage3.sh "$@")
|
|
||||||
fi
|
|
||||||
stage3=${tarball%.tar.*}
|
|
||||||
version=${stage3##*-}
|
|
||||||
stage3=${stage3%-*}
|
|
||||||
|
|
||||||
cid=$(buildah from scratch)
|
|
||||||
buildah add "${cid}" "${tarball}"
|
|
||||||
buildah config --cmd /bin/bash "${cid}"
|
|
||||||
buildah commit --rm --squash "${cid}" "aimee-os.org/gentoo/${stage3}:${version}"
|
|
||||||
buildah tag "aimee-os.org/gentoo/${stage3}:${version}" \
|
|
||||||
"aimee-os.org/gentoo/${stage3}:latest"
|
|
|
@ -1,29 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
mkdir -p /mnt/gentoo
|
|
||||||
|
|
||||||
USE=build \
|
|
||||||
emerge -kvnuUDj --rebuilt-binaries=y --root=/mnt/gentoo sys-apps/baselayout
|
|
||||||
|
|
||||||
# Portage itself only requires Python and Bash. Actually building
|
|
||||||
# packages requires a lot more. These dependencies are implicit because
|
|
||||||
# they are listed in @system. We do not want everything from @system,
|
|
||||||
# though, so we have to explicitly install several packages.
|
|
||||||
#
|
|
||||||
# At some point, we may end up with an Aimee OS profile for Portage.
|
|
||||||
# If/when that happens, we can override @system to remove the stuff we
|
|
||||||
# don't want, like virtual/service-manager and virtual/openssh.
|
|
||||||
xargs emerge -kvnuUDj --rebuilt-binaries=y --root=/mnt/gentoo <<EOF
|
|
||||||
app-arch/gzip
|
|
||||||
dev-build/make
|
|
||||||
net-misc/wget
|
|
||||||
sys-apps/diffutils
|
|
||||||
sys-apps/gawk
|
|
||||||
sys-apps/grep
|
|
||||||
sys-apps/portage
|
|
||||||
sys-devel/binutils
|
|
||||||
sys-devel/gcc
|
|
||||||
sys-devel/patch
|
|
||||||
EOF
|
|
|
@ -1,21 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
buildah_run_script() {
|
|
||||||
local cid script
|
|
||||||
cid=$1
|
|
||||||
shift
|
|
||||||
script=$(readlink -f "$1")
|
|
||||||
shift
|
|
||||||
mkdir -p binpkgs log tmp
|
|
||||||
buildah run \
|
|
||||||
--mount type=cache,target=/var/db/repos/gentoo \
|
|
||||||
--mount type=cache,target=/var/cache \
|
|
||||||
--mount type=bind,src="${PWD}"/log,target=/var/log,rw,z \
|
|
||||||
--mount type=bind,src="${PWD}"/tmp,target=/var/tmp,rw,z \
|
|
||||||
--mount type=bind,src="${PWD}"/binpkgs,target=/var/cache/binpkgs,rw,z \
|
|
||||||
--mount type=bind,src="${script}",target=/run/script,ro,z \
|
|
||||||
--tty=false \
|
|
||||||
-e FEATURES='-ipc-sandbox -network-sandbox -pid-sandbox' \
|
|
||||||
"${cid}" \
|
|
||||||
/run/script "$@"
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
target=$1
|
|
||||||
|
|
||||||
mkdir -p /var/db/repos/crossdev/profiles /var/db/repos/crossdev/metadata
|
|
||||||
echo crossdev > /var/db/repos/crossdev/profiles/repo_name
|
|
||||||
echo 'masters = gentoo' > /var/db/repos/crossdev/metadata/layout.conf
|
|
||||||
chown -R portage:portage /var/db/repos/crossdev
|
|
||||||
mkdir -p /etc/portage/repos.conf
|
|
||||||
cat > /etc/portage/repos.conf/crossdev.conf <<EOF
|
|
||||||
[crossdev]
|
|
||||||
location = /var/db/repos/crossdev
|
|
||||||
priority = 10
|
|
||||||
masters = gentoo
|
|
||||||
auto-sync = no
|
|
||||||
EOF
|
|
||||||
|
|
||||||
emerge -kvnj --rebuilt-binaries=y sys-devel/crossdev
|
|
||||||
|
|
||||||
crossdev --stable -t "$1"
|
|
||||||
|
|
||||||
ln -s /var/db/repos/gentoo/sys-devel/rust-std /var/db/repos/crossdev/cross-${target}/
|
|
||||||
|
|
||||||
mkdir -p
|
|
||||||
/etc/portage/env/dev-lang \
|
|
||||||
/etc/portage/package.accept_keywords \
|
|
||||||
/etc/portage/package.use \
|
|
||||||
&& :
|
|
||||||
printf 'cross-%s/rust-std **\n' "${target}" \
|
|
||||||
> /etc/portage/package.accept-keywords/rust-cross
|
|
||||||
echo 'dev-lang/rust rust-src' \
|
|
||||||
> /etc/portage/package.use/rust-src
|
|
||||||
case ${target%%-*} in
|
|
||||||
aarch64)
|
|
||||||
llvm_target=AArch64
|
|
||||||
;;
|
|
||||||
arm*)
|
|
||||||
llvm_target=ARM
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
printf 'Unknown LLVM target: %s' "${target%%-*}"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
printf '( %s:%s:%s )\n' \
|
|
||||||
"${llvm_target}" \
|
|
||||||
"${target}" \
|
|
||||||
"${target}" \
|
|
||||||
>> /etc/portage/env/dev-lang/rust
|
|
||||||
emerge -vbknuUj cross-${target}/rust-std
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
arch=$(uname -m)
|
|
||||||
case ${arch} in
|
|
||||||
x86_64) arch=amd64 ;;
|
|
||||||
aarch64) arch=arm64 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
mkdir -p /etc/portage
|
|
||||||
|
|
||||||
eselect profile set default/linux/"${arch}"/23.0/no-multilib
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if [ ! -e /var/db/repos/gentoo/metadata ]; then
|
|
||||||
emerge-webrsync
|
|
||||||
fi
|
|
||||||
if [ "$(find /var/db/repos/gentoo/metadata -newermt '-24 hours' | wc -l)" -eq 0 ]; then
|
|
||||||
emaint sync
|
|
||||||
fi
|
|
|
@ -1,24 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
: "${GENTOO_MIRROR:=http://mirror.leaseweb.com/gentoo}"
|
|
||||||
URLPATH=releases/amd64/autobuilds
|
|
||||||
GENTOO_KEY=13EBBDBEDE7A12775DFDB1BABB572E0E2D182910
|
|
||||||
GENTOO_KEYSERVER=hkps://keys.gentoo.org
|
|
||||||
|
|
||||||
stage3="${1:-amd64-nomultilib-openrc}"
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
gpg --keyserver ${GENTOO_KEYSERVER} --recv-keys ${GENTOO_KEY}
|
|
||||||
curl -fLO "${GENTOO_MIRROR}/${URLPATH}/latest-stage3-${stage3}.txt"
|
|
||||||
gpg --verify "latest-stage3-${stage3}.txt"
|
|
||||||
|
|
||||||
tarball=$(gpg --decrypt "latest-stage3-${stage3}.txt" | awk '$1!="#"{print $1}')
|
|
||||||
if [ ! -f "${tarball##*/}" ]; then
|
|
||||||
curl -fLO "${GENTOO_MIRROR}/${URLPATH}/${tarball}"
|
|
||||||
fi
|
|
||||||
if [ ! -f "${tarball##*/}.asc" ]; then
|
|
||||||
curl -fLO "${GENTOO_MIRROR}/${URLPATH}/${tarball}.asc"
|
|
||||||
fi
|
|
||||||
gpg --verify "${tarball##*/}.asc"
|
|
||||||
echo "${tarball##*/}"
|
|
Reference in New Issue