32 lines
1.3 KiB
Bash
32 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
set -Eeuo pipefail
|
|
(( EUID == 0 )) || exit 1
|
|
project=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." && pwd -P)
|
|
if [[ ${1:-} != --namespace ]]; then
|
|
exec unshare --mount --pid --fork --kill-child=SIGKILL --propagation private /bin/bash "$0" --namespace "$@"
|
|
fi
|
|
shift
|
|
build_uid=${1:?}
|
|
build_gid=${2:?}
|
|
apt_cache=${3:-enabled}
|
|
[[ $apt_cache == enabled || $apt_cache == disabled ]]
|
|
[[ $build_uid =~ ^[0-9]+$ && $build_gid =~ ^[0-9]+$ ]]
|
|
(( build_uid > 0 && build_gid > 0 ))
|
|
work="$project/build"
|
|
root="$work/controller"
|
|
[[ ! -L $work && ! -L $root ]]
|
|
exec 9>"$work/operation.lock"
|
|
flock --nonblock 9
|
|
if [[ ! -f $work/controller-bootstrap.complete ]]; then
|
|
if [[ -e $root ]]; then
|
|
echo 'Incomplete controller. Inspect before retrying.' >&2
|
|
exit 1
|
|
fi
|
|
debootstrap --arch=amd64 --variant=minbase --include=ca-certificates,debian-archive-keyring,python3 \
|
|
--keyring=/usr/share/keyrings/debian-archive-keyring.gpg --force-check-sig \
|
|
trixie "$root" https://snapshot.debian.org/archive/debian/20261026T000000Z/
|
|
touch "$work/controller-bootstrap.complete"
|
|
fi
|
|
exec /bin/bash "$project/tools/lib/enter-root" "$root" "$work" root /bin/bash /work/input/configure-controller "$build_uid" "$build_gid" "$apt_cache"
|