2025-12-09 05:31:55 +01:00
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
|
|
# ------------------------------------------------------------
|
|
|
|
|
|
# aur-builder-setup.sh
|
|
|
|
|
|
#
|
|
|
|
|
|
# Setup helper for an 'aur_builder' user and yay on Arch-based
|
|
|
|
|
|
# systems. Intended for host usage and can also be used in
|
|
|
|
|
|
# containers if desired.
|
|
|
|
|
|
# ------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
echo "[aur-builder-setup] Checking for pacman..."
|
|
|
|
|
|
if ! command -v pacman >/dev/null 2>&1; then
|
|
|
|
|
|
echo "[aur-builder-setup] pacman not found – this is not an Arch-based system. Skipping."
|
|
|
|
|
|
exit 0
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [[ "${EUID:-0}" -ne 0 ]]; then
|
|
|
|
|
|
ROOT_CMD="sudo"
|
|
|
|
|
|
else
|
|
|
|
|
|
ROOT_CMD=""
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo "[aur-builder-setup] Installing base-devel, git, sudo..."
|
|
|
|
|
|
${ROOT_CMD} pacman -Syu --noconfirm
|
|
|
|
|
|
${ROOT_CMD} pacman -S --needed --noconfirm base-devel git sudo
|
|
|
|
|
|
|
|
|
|
|
|
echo "[aur-builder-setup] Ensuring aur_builder group/user..."
|
|
|
|
|
|
if ! getent group aur_builder >/dev/null 2>&1; then
|
|
|
|
|
|
${ROOT_CMD} groupadd -r aur_builder
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if ! id -u aur_builder >/dev/null 2>&1; then
|
|
|
|
|
|
${ROOT_CMD} useradd -m -r -g aur_builder -s /bin/bash aur_builder
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo "[aur-builder-setup] Configuring sudoers for aur_builder..."
|
|
|
|
|
|
${ROOT_CMD} bash -c "echo '%aur_builder ALL=(ALL) NOPASSWD: /usr/bin/pacman' > /etc/sudoers.d/aur_builder"
|
|
|
|
|
|
${ROOT_CMD} chmod 0440 /etc/sudoers.d/aur_builder
|
|
|
|
|
|
|
|
|
|
|
|
if command -v sudo >/dev/null 2>&1; then
|
|
|
|
|
|
RUN_AS_AUR=(sudo -u aur_builder bash -lc)
|
|
|
|
|
|
else
|
|
|
|
|
|
RUN_AS_AUR=(su - aur_builder -c)
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo "[aur-builder-setup] Ensuring yay is installed for aur_builder..."
|
2025-12-11 19:40:25 +01:00
|
|
|
|
|
2025-12-09 05:31:55 +01:00
|
|
|
|
if ! "${RUN_AS_AUR[@]}" 'command -v yay >/dev/null 2>&1'; then
|
2025-12-11 19:40:25 +01:00
|
|
|
|
echo "[aur-builder-setup] yay not found – starting retry sequence for download..."
|
|
|
|
|
|
|
2025-12-11 19:44:36 +01:00
|
|
|
|
MAX_TIME=300
|
|
|
|
|
|
SLEEP_INTERVAL=20
|
2025-12-11 19:40:25 +01:00
|
|
|
|
ELAPSED=0
|
|
|
|
|
|
|
|
|
|
|
|
while true; do
|
|
|
|
|
|
if "${RUN_AS_AUR[@]}" '
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
cd ~
|
|
|
|
|
|
rm -rf yay || true
|
|
|
|
|
|
git clone https://aur.archlinux.org/yay.git yay
|
|
|
|
|
|
'; then
|
|
|
|
|
|
echo "[aur-builder-setup] yay repository cloned successfully."
|
|
|
|
|
|
break
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo "[aur-builder-setup] git clone failed (likely 504). Retrying in ${SLEEP_INTERVAL}s..."
|
|
|
|
|
|
sleep "${SLEEP_INTERVAL}"
|
|
|
|
|
|
ELAPSED=$((ELAPSED + SLEEP_INTERVAL))
|
|
|
|
|
|
|
|
|
|
|
|
if (( ELAPSED >= MAX_TIME )); then
|
|
|
|
|
|
echo "[aur-builder-setup] ERROR: Aborted after 5 minutes of retry attempts."
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
# Now build yay after successful clone
|
|
|
|
|
|
"${RUN_AS_AUR[@]}" '
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
cd ~/yay
|
|
|
|
|
|
makepkg -si --noconfirm
|
|
|
|
|
|
'
|
|
|
|
|
|
|
2025-12-09 05:31:55 +01:00
|
|
|
|
else
|
|
|
|
|
|
echo "[aur-builder-setup] yay already installed."
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo "[aur-builder-setup] Done."
|