Initial commit

lib/main
Dustin 2024-12-02 18:51:13 -06:00
commit 86330dc292
10 changed files with 233 additions and 0 deletions

7
.editorconfig Normal file
View File

@ -0,0 +1,7 @@
root = true
[*.sh]
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
stage3-*.tar.*
latest-*.txt

38
README.md Normal file
View File

@ -0,0 +1,38 @@
# Aimee OS Build Container Images
Prerequisites:
* `buildah`
## Gentoo Stage 3 Image
This image forms the base layer for Aimee OS build images.
Use the default stage3 tarball (`stage3-amd64-nomultilib-openrc`):
```sh
sh stage3-image.sh
```
Use a specific stage3 tarball:
```sh
sh stage3-image.sh amd64-systemd
```
## Crossdev Image
This image includes a cross-compilation toolchain, generated by _crossdev_.
```sh
sh crossdev-image.sh
```
Use the `--base` and `--target` command-line arguments to specify a base Stage
3 image (see above) and crossdev target, respectively, e.g.:
```sh
sh crossdev-image.sh --target armv7a-unknown-linux-gnueabihf
```

63
build-image.sh Normal file
View File

@ -0,0 +1,63 @@
#!/bin/sh
target=aarch64-unknown-linux-gnu
MIRROR=http://mirror.leaseweb.com/gentoo
URLPATH=releases/amd64/autobuilds
GENTOO_KEY=13EBBDBEDE7A12775DFDB1BABB572E0E2D182910
GENTOO_KEYSERVER=hkps://keys.gentoo.org
target=aarch64-unknown-linux-gnu
stage3=amd64-nomultilib-openrc
while [ $# -gt 0 ]; do
case "$1" in
-t|--target)
shift
target="$1"
;;
-b|--base)
shift
stage3="$1"
;;
*)
printf 'Unknown argument: %s\n' "$1" >&2
exit 2
;;
esac
done
set -e
gpg --keyserver ${GENTOO_KEYSERVER} --recv-keys ${GENTOO_KEY}
curl -fLO "${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 "${MIRROR}/${URLPATH}/${tarball}"
fi
if [ ! -f "${tarball##*/}.asc" ]; then
curl -fLO "${MIRROR}/${URLPATH}/${tarball}.asc"
fi
gpg --verify "${tarball##*/}.asc"
cid=$(buildah from scratch)
buildah add ${cid} "${tarball##*/}"
buildah run \
--mount type=cache,target=/var/db/repos/gentoo \
--mount type=cache,target=/var/cache\
-- ${cid} \
sh -s - "${target}" \
< build.sh \
|| {
rc=$?
buildah rm ${cid}
exit $rc
}
buildah config \
--add-history \
--cmd /bin/bash \
--label target=${target} \
${cid}
buildah commit --rm --squash ${cid} aimee-os.org/build/cross-${target}

15
common.sh Normal file
View File

@ -0,0 +1,15 @@
#!/bin/sh
buildah_run_script() {
local cid script
cid=$1
shift
script=$1
shift
buildah run \
--mount type=cache,target=/var/db/repos/gentoo \
--mount type=cache,target=/var/cache \
-- "${cid}" \
sh -s - "$@" \
< "${script}"
}

36
crossdev-image.sh Normal file
View File

@ -0,0 +1,36 @@
#!/bin/sh
SELF=$(readlink -f "$0")
SRCDIR=${SELF%/*}
. "${SRCDIR}"/common.sh
target=aarch64-unknown-linux-gnu
stage3=amd64-nomultilib-openrc
while [ $# -gt 0 ]; do
case "$1" in
-t|--target)
shift
target="$1"
;;
-b|--base)
shift
stage3="$1"
;;
*)
printf 'Unknown argument: %s\n' "$1" >&2
exit 2
;;
esac
done
set -e
cid=$(buildah from "aimee-os.org/gentoo/stage3-${stage3}")
buildah_run_script ${cid} sync.sh
buildah_run_script ${cid} crossdev.sh "${target}"
buildah config \
--add-history \
--cmd /bin/bash \
--label target=${target} \
${cid}
buildah commit --rm ${cid} aimee-os.org/build/cross-${target}

20
crossdev.sh Normal file
View File

@ -0,0 +1,20 @@
#!/bin/sh
export FEATURES='-ipc-sandbox -network-sandbox -pid-sandbox'
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 -j sys-devel/crossdev
crossdev --stable -t "$1"

37
stage3-image.sh Normal file
View File

@ -0,0 +1,37 @@
#!/bin/sh
SELF=$(readlink -f "$0")
SRCDIR=${SELF%/*}
. "${SRCDIR}"/common.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 "${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"
cid=$(buildah from scratch)
buildah add ${cid} "${tarball##*/}"
buildah_run_script ${cid} sync.sh
buildah_run_script ${cid} update.sh
buildah config \
--add-history \
--cmd /bin/bash \
${cid}
buildah commit --rm --squash ${cid} "aimee-os.org/gentoo/stage3-${stage3}"

10
sync.sh Normal file
View File

@ -0,0 +1,10 @@
#!/bin/sh
export FEATURES='-ipc-sandbox -network-sandbox -pid-sandbox'
if [ ! -e /var/db/repos/gentoo/metadata ]; then
emaint sync
fi
if [ "$(find /var/db/repos/gentoo -newermt '-24 hours' | wc -l)" -eq 0 ]; then
emerge-webrsync
fi

5
update.sh Normal file
View File

@ -0,0 +1,5 @@
#!/bin/sh
export FEATURES='-ipc-sandbox -network-sandbox -pid-sandbox'
emerge -uUDj @world