init
This commit is contained in:
102
binhost.sh
Normal file
102
binhost.sh
Normal file
@@ -0,0 +1,102 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
REPO_URL="git@git.ayau.me:mira/gentoo-pill.git"
|
||||
WORK_DIR="$(pwd)"
|
||||
REPO="${WORK_DIR}/repo"
|
||||
CTX="${WORK_DIR}/ctx"
|
||||
|
||||
IMAGE="gentoo/stage3:amd64-desktop-openrc"
|
||||
PROFILE="default/linux/amd64/23.0/desktop"
|
||||
CFLAGS="-O2 -pipe -march=x86-64-v3"
|
||||
|
||||
if [[ ! -d "$REPO/.git" ]]; then
|
||||
git clone "$REPO_URL" "$REPO"
|
||||
else
|
||||
git -C "$REPO" pull --rebase
|
||||
fi
|
||||
|
||||
echo "Aggregating configuration..."
|
||||
rm -rf "$CTX" && mkdir -p "$CTX"/var/lib/portage
|
||||
|
||||
# config types to merge
|
||||
CONFIGS=(package.use package.accept_keywords package.license package.mask package.unmask package.env)
|
||||
|
||||
for type in "${CONFIGS[@]}"; do
|
||||
dest="$CTX/etc/portage/$type"
|
||||
mkdir -p "$dest"
|
||||
|
||||
inject() {
|
||||
local src=$1 prefix=$2
|
||||
[[ ! -e "$src" ]] && return
|
||||
|
||||
if [[ -d "$src" ]]; then
|
||||
for f in "$src"/*; do
|
||||
[[ -f "$f" ]] && cp "$f" "$dest/${prefix}-$(basename "$f")"
|
||||
done
|
||||
else
|
||||
cp "$src" "$dest/${prefix}-$(basename "$src")"
|
||||
fi
|
||||
}
|
||||
|
||||
inject "$REPO/common/$type" "00-common"
|
||||
|
||||
for host_dir in "$REPO/hosts"/*; do
|
||||
[[ -d "$host_dir" ]] || continue
|
||||
hostname=$(basename "$host_dir")
|
||||
inject "$host_dir/$type" "50-${hostname}"
|
||||
done
|
||||
done
|
||||
|
||||
# generate world union
|
||||
cat "$REPO"/hosts/*/world 2>/dev/null | sort -u | sed '/^#/d;/^$/d' > "$CTX/var/lib/portage/world"
|
||||
echo "Packages to build: $(wc -l < "$CTX/var/lib/portage/world")"
|
||||
|
||||
# make.conf
|
||||
mkdir -p "$CTX/etc/portage"
|
||||
cp "$REPO/binhost/make.conf" "$CTX/etc/portage/make.conf"
|
||||
{
|
||||
# we don't want build to fail bcs of EULA check..
|
||||
echo 'ACCEPT_LICENSE="*"'
|
||||
echo "CFLAGS=\"$CFLAGS\""
|
||||
echo "CXXFLAGS=\"$CFLAGS\""
|
||||
} >> "$CTX/etc/portage/make.conf"
|
||||
|
||||
echo "Starting Builder..."
|
||||
|
||||
VOLUMES=(
|
||||
-v portage_db:/var/db/repos/gentoo
|
||||
-v distfiles:/var/cache/distfiles
|
||||
-v binpkgs:/var/cache/binpkgs
|
||||
-v "$CTX/etc/portage/make.conf:/etc/portage/make.conf"
|
||||
-v "$CTX/var/lib/portage/world:/var/lib/portage/world"
|
||||
)
|
||||
|
||||
# add config dirs to volumes
|
||||
for type in "${CONFIGS[@]}"; do
|
||||
VOLUMES+=(-v "$CTX/etc/portage/$type:/etc/portage/$type")
|
||||
done
|
||||
|
||||
# start cooking
|
||||
podman run --rm -i \
|
||||
--name "gentoo_builder" \
|
||||
--cap-add=SYS_PTRACE \
|
||||
"${VOLUMES[@]}" \
|
||||
"$IMAGE" /bin/bash <<EOF
|
||||
set -e
|
||||
source /etc/profile
|
||||
|
||||
echo "> Syncing tree..."
|
||||
emerge-webrsync -q
|
||||
|
||||
echo "> Setting Profile..."
|
||||
eselect profile set "$PROFILE"
|
||||
|
||||
echo "> Building World..."
|
||||
emerge --verbose --buildpkg --update --deep --newuse --changed-use --with-bdeps=y --keep-going @world
|
||||
|
||||
echo "> Cleaning up..."
|
||||
emerge --depclean
|
||||
emaint binhost --fix
|
||||
EOF
|
||||
|
||||
Reference in New Issue
Block a user