151 lines
4.7 KiB
Bash
151 lines
4.7 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PACKAGES_FILE="$SCRIPT_DIR/packages.txt"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Enable multilib in /etc/pacman.conf (with a safety backup)
|
|
# ---------------------------------------------------------------------------
|
|
enable_multilib() {
|
|
sudo sed -i.bak '/^#\[multilib\]/,+1 s/^#//' /etc/pacman.conf
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Ensure yay (AUR helper) is installed.
|
|
# ---------------------------------------------------------------------------
|
|
install_yay() {
|
|
if pacman -Q yay &>/dev/null; then
|
|
echo "yay bereits installiert; fahre fort."
|
|
return
|
|
fi
|
|
if pacman -Si yay &>/dev/null; then
|
|
echo "Installiere yay mit pacman ..."
|
|
sudo pacman -S --needed yay
|
|
return
|
|
fi
|
|
echo "installiere yay via git ..."
|
|
sudo pacman -S --needed base-devel git
|
|
local tmp
|
|
tmp="$(mktemp -d)"
|
|
git clone https://aur.archlinux.org/yay.git "$tmp/yay"
|
|
(
|
|
cd "$tmp/yay"
|
|
makepkg -si
|
|
)
|
|
rm -rf "$tmp"
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Read packages.txt, split into pacman / aur / npm sections.
|
|
# ---------------------------------------------------------------------------
|
|
read_packages() {
|
|
local section="pacman"
|
|
local current
|
|
current=""
|
|
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
current="${line%%#*}"
|
|
current="${current##*( )}"
|
|
current="${current%%*( )}"
|
|
[[ -z "$current" ]] && continue
|
|
case "$current" in
|
|
@pacman) section="pacman" ;;
|
|
@aur) section="aur" ;;
|
|
@npm) section="npm" ;;
|
|
*)
|
|
case "$section" in
|
|
pacman) pacman_pkgs+=("$current") ;;
|
|
aur) aur_pkgs+=("$current") ;;
|
|
npm) npm_pkgs+=("$current") ;;
|
|
esac
|
|
;;
|
|
esac
|
|
done < "$PACKAGES_FILE"
|
|
}
|
|
|
|
declare -a pacman_pkgs=() aur_pkgs=() npm_pkgs=()
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Install sections.
|
|
# ---------------------------------------------------------------------------
|
|
install_pacman() {
|
|
if ((${#pacman_pkgs[@]})); then
|
|
echo "==> Installiere Pacman-Pakete: ${pacman_pkgs[*]}"
|
|
yay -S --needed "${pacman_pkgs[@]}"
|
|
fi
|
|
}
|
|
|
|
install_aur() {
|
|
if ((${#aur_pkgs[@]})); then
|
|
echo "==> Installiere AUR-Pakete: ${aur_pkgs[*]}"
|
|
yay -S --needed "${aur_pkgs[@]}"
|
|
fi
|
|
}
|
|
|
|
install_npm() {
|
|
if ((${#npm_pkgs[@]})); then
|
|
echo "==> Installiere globale npm-Pakete: ${npm_pkgs[*]}"
|
|
npm install -g "${npm_pkgs[@]}"
|
|
fi
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Docker: Dienst aktivieren/starten, Benutzer in die docker-Gruppe aufnehmen
|
|
# und den Dienst verifizieren. (docker selbst wird ueber basic/packages.txt
|
|
# als Pacman-Paket installiert.)
|
|
# ---------------------------------------------------------------------------
|
|
setup_docker() {
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo "Warnung: docker nicht installiert; ueberspringe Docker-Setup."
|
|
return
|
|
fi
|
|
|
|
echo "==> Aktiviere und starte Docker-Dienst ..."
|
|
sudo systemctl enable --now docker
|
|
|
|
# Bei Aufruf via `sudo <script>` ist SUDO_USER der eigentliche Benutzer.
|
|
local target_user="${SUDO_USER:-$USER}"
|
|
echo "==> Stelle sicher, dass $target_user in der docker-Gruppe ist ..."
|
|
if [[ "$target_user" == "root" ]] || id -nG "$target_user" 2>/dev/null | grep -qw docker; then
|
|
echo "Benutzer $target_user ist bereits in der docker-Gruppe."
|
|
else
|
|
sudo usermod -aG docker "$target_user"
|
|
echo "Benutzer $target_user zur docker-Gruppe hinzugefuegt; wirksam nach dem naechsten Login."
|
|
fi
|
|
|
|
echo "==> Pruefe Docker-Dienst ..."
|
|
if systemctl is-active --quiet docker; then
|
|
echo "Docker-Dienst laeuft (Socket: /var/run/docker.sock)."
|
|
else
|
|
echo "Warnung: Docker-Dienst laeuft nicht; pruefe mit: systemctl status docker"
|
|
fi
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Main
|
|
# ---------------------------------------------------------------------------
|
|
main() {
|
|
echo "==> Aktiviere multilib ..."
|
|
enable_multilib
|
|
|
|
echo "==> System aktualisieren ..."
|
|
sudo pacman -Syu
|
|
|
|
echo "==> Sicherstelle yay ..."
|
|
install_yay
|
|
|
|
echo "==> Lese Paketliste: $PACKAGES_FILE"
|
|
read_packages
|
|
|
|
install_pacman
|
|
install_aur
|
|
install_npm
|
|
|
|
echo "==> Richte Docker ein ..."
|
|
setup_docker
|
|
|
|
echo "Fertig. Die Basis-Systemumgebung ist eingerichtet."
|
|
}
|
|
|
|
main
|