commit 59ec864b9833e4672e47cbdf8a7c2b2185bfa038 Author: kuwoyuki Date: Sun Dec 7 14:52:38 2025 +0600 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0aa94e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +ctx/ +repo/ +*.key +*.pub +.DS_Store diff --git a/binhost.sh b/binhost.sh new file mode 100644 index 0000000..ff5984a --- /dev/null +++ b/binhost.sh @@ -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 < 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 + diff --git a/binhost/make.conf b/binhost/make.conf new file mode 100644 index 0000000..47d49a4 --- /dev/null +++ b/binhost/make.conf @@ -0,0 +1,25 @@ +# These settings were set by the catalyst build script that automatically +# built this stage. +# Please consult /usr/share/portage/config/make.conf.example for a more +# detailed example. +COMMON_FLAGS="-O2 -pipe -march=x86-64-v3" +CFLAGS="${COMMON_FLAGS}" +CXXFLAGS="${COMMON_FLAGS}" +FCFLAGS="${COMMON_FLAGS}" +FFLAGS="${COMMON_FLAGS}" +# RUSTFLAGS="${RUSTFLAGS} -C target-cpu=native" + +# NOTE: This stage was built with the bindist USE flag enabled + +# This sets the language of build output to English. +# Please keep this setting intact when reporting bugs. +LC_MESSAGES=C.UTF-8 + +USE="dist-kernel pulseaudio pipewire screencast -wayland" +VIDEO_CARDS="intel nouveau" + +# "buildpkg" = generate binary packages upon install +# "binpkg-multi-instance" = keep only latest version, but support slotting +FEATURES="${FEATURES} -getbinpkg buildpkg binpkg-multi-instance" + +BINPKG_FORMAT="gpkg" diff --git a/common/package.license b/common/package.license new file mode 100644 index 0000000..fec2d24 --- /dev/null +++ b/common/package.license @@ -0,0 +1,3 @@ +sys-kernel/linux-firmware @BINARY-REDISTRIBUTABLE +sys-firmware/intel-microcode intel-ucode + diff --git a/common/package.use b/common/package.use new file mode 100644 index 0000000..39a4ffb --- /dev/null +++ b/common/package.use @@ -0,0 +1,7 @@ +sys-apps/fwupd gnutls uefi +sys-kernel/installkernel grub dracut +media-video/pipewire sound-server pipewire-alsa extra bluetooth v4l ffmpeg +media-video/wireplumber elogind +media-libs/libsdl2 -pipewire +app-admin/sudo offensive + diff --git a/gentoo-sync.sh b/gentoo-sync.sh new file mode 100755 index 0000000..4c04e0d --- /dev/null +++ b/gentoo-sync.sh @@ -0,0 +1,60 @@ +#!/bin/bash +set -euo pipefail + +PILL_REPO="$HOME/gentoo-pill" +HOSTNAME_TAG="${HOSTNAME:-$(hostname)}" + +# remote trigger +SERVER_USER="mira" +SERVER_IP="192.168.102.148" +SERVER_BINHOST_DIR="~/gentoo-pill" + +HOST_DIR="$PILL_REPO/hosts/$HOSTNAME_TAG" +echo "> Syncing configuration for: $HOSTNAME_TAG" + +if [[ -d "$PILL_REPO/.git" ]]; then + git -C "$PILL_REPO" pull --rebase --autostash +else + echo "Error: repo not found at $PILL_REPO" + exit 1 +fi + +mkdir -p "$HOST_DIR" + +echo "> Syncing World file component..." +cp /var/lib/portage/world "$HOST_DIR/world" + +CONFIGS=(package.use package.accept_keywords package.license package.mask package.unmask package.env) + +echo "> Syncing Portage components..." +for type in "${CONFIGS[@]}"; do + local_src="/etc/portage/$type" + repo_dest="$HOST_DIR/$type" + + # rm -rf "$repo_dest" + + if [[ -e "$local_src" ]]; then + rsync -a --delete --copy-links "$local_src" "$HOST_DIR/" + else + rm -rf "$repo_dest" + fi +done + +echo "> Pushing..." +cd "$PILL_REPO" + +if [[ -n $(git status --porcelain) ]]; then + git add . + git commit -m "sync: $HOSTNAME_TAG $(date +'%Y-%m-%d %H:%M')" + git push + echo "> Changes pushed successfully." + + # trigger the remote + if [[ -n "$SERVER_IP" ]]; then + echo "> Triggering binhost build @ [$SERVER_IP]..." + ssh "${SERVER_USER}@${SERVER_IP}" \ + "cd ${SERVER_BINHOST_DIR} && ./binhost.sh" + fi +else + echo "> No changes, binhost trig skipped" +fi diff --git a/hosts/.keep b/hosts/.keep new file mode 100644 index 0000000..e69de29