Files
gentoo-pill/gentoo-sync.sh
2025-12-07 14:54:16 +06:00

61 lines
1.4 KiB
Bash
Executable File

#!/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