Files
FEDEO/scripts/selfhost-install.sh
florianfederspiel 6157d7e27d
All checks were successful
Build and Push Docker Images / build-backend (push) Successful in 11s
Build and Push Docker Images / build-frontend (push) Successful in 10s
Build and Push Docker Images / build-website (push) Successful in 11s
Build and Push Docker Images / build-docs (push) Successful in 11s
KI-AGENT: Nutze Terminaleingabe im Selfhost Installer
2026-05-19 22:14:51 +02:00

204 lines
4.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
FEDEO_REPO_URL="${FEDEO_REPO_URL:-https://git.federspiel.tech/flfeders/FEDEO.git}"
FEDEO_REF="${FEDEO_REF:-dev}"
FEDEO_DIR="${FEDEO_DIR:-/opt/fedeo}"
SETUP_ARGS=("$@")
FEDEO_USE_SUDO_DOCKER="${FEDEO_USE_SUDO_DOCKER:-false}"
TTY_INPUT="${FEDEO_TTY_INPUT:-/dev/tty}"
TTY_FD=""
if { exec 3<"$TTY_INPUT"; } 2>/dev/null; then
TTY_FD="3"
fi
SUDO=""
if [[ "$(id -u)" -ne 0 ]]; then
if command -v sudo >/dev/null 2>&1; then
SUDO="sudo"
else
echo "Dieses Script braucht Schreibrechte für $FEDEO_DIR oder sudo." >&2
exit 1
fi
fi
usage() {
cat <<'USAGE'
FEDEO Selfhost Installer
Typischer One-Liner:
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash
Mit Optionen für den Setup-Assistenten:
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash -s -- --simple --start
curl -fsSL https://git.federspiel.tech/flfeders/FEDEO/raw/branch/dev/scripts/selfhost-install.sh | bash -s -- --advanced
Umgebung:
FEDEO_DIR=/opt/fedeo
FEDEO_REPO_URL=https://git.federspiel.tech/flfeders/FEDEO.git
FEDEO_REF=dev
USAGE
}
read_interactive() {
if [[ -n "$TTY_FD" ]]; then
read -u "$TTY_FD" "$@"
else
read "$@"
fi
}
yes_no() {
local label="$1"
local default_value="${2:-j}"
local answer
while true; do
read_interactive -r -p "$label [$default_value]: " answer
answer="${answer:-$default_value}"
case "$answer" in
y|Y|j|J|yes|Yes|ja|Ja)
return 0
;;
n|N|no|No|nein|Nein)
return 1
;;
*)
echo "Bitte ja oder nein eingeben."
;;
esac
done
}
have() {
command -v "$1" >/dev/null 2>&1
}
install_base_packages() {
local missing=()
for binary in git curl openssl; do
if ! have "$binary"; then
missing+=("$binary")
fi
done
if [[ "${#missing[@]}" -eq 0 ]]; then
return
fi
if ! have apt-get; then
echo "Fehlende Programme: ${missing[*]}" >&2
echo "Bitte installiere sie manuell und starte den Installer erneut." >&2
exit 1
fi
echo "Installiere Basispakete: ${missing[*]}"
$SUDO apt-get update
$SUDO apt-get install -y ca-certificates curl git openssl
}
ensure_docker() {
if have docker && docker compose version >/dev/null 2>&1; then
FEDEO_USE_SUDO_DOCKER="false"
return
fi
if [[ -n "$SUDO" ]] && have docker && $SUDO docker compose version >/dev/null 2>&1; then
FEDEO_USE_SUDO_DOCKER="true"
return
fi
echo
echo "Docker Engine mit Compose Plugin wurde nicht gefunden."
if ! have curl; then
echo "curl fehlt, Docker kann nicht automatisch installiert werden." >&2
exit 1
fi
if yes_no "Docker jetzt über das offizielle Docker-Installationsscript installieren?" "j"; then
curl -fsSL https://get.docker.com | $SUDO sh
else
echo "Bitte Docker Engine inkl. Compose Plugin installieren und den Installer erneut starten." >&2
exit 1
fi
if docker compose version >/dev/null 2>&1; then
FEDEO_USE_SUDO_DOCKER="false"
return
fi
if [[ -n "$SUDO" ]] && $SUDO docker compose version >/dev/null 2>&1; then
FEDEO_USE_SUDO_DOCKER="true"
return
fi
if ! docker compose version >/dev/null 2>&1; then
echo "Docker Compose ist nach der Installation noch nicht verfügbar." >&2
echo "Melde dich ggf. neu an oder prüfe die Docker-Installation." >&2
exit 1
fi
}
prepare_checkout() {
echo
echo "Zielverzeichnis: $FEDEO_DIR"
echo "Repository: $FEDEO_REPO_URL"
echo "Version/Branch: $FEDEO_REF"
if [[ -d "$FEDEO_DIR/.git" ]]; then
echo "Bestehenden FEDEO-Checkout aktualisieren..."
git -C "$FEDEO_DIR" fetch --prune origin
git -C "$FEDEO_DIR" checkout "$FEDEO_REF"
git -C "$FEDEO_DIR" pull --ff-only origin "$FEDEO_REF"
return
fi
if [[ -e "$FEDEO_DIR" ]]; then
echo "$FEDEO_DIR existiert bereits, ist aber kein Git-Checkout." >&2
echo "Bitte FEDEO_DIR auf ein leeres Ziel setzen oder das Verzeichnis prüfen." >&2
exit 1
fi
$SUDO mkdir -p "$FEDEO_DIR"
if [[ -n "$SUDO" ]]; then
$SUDO chown "$(id -u):$(id -g)" "$FEDEO_DIR"
fi
git clone --branch "$FEDEO_REF" "$FEDEO_REPO_URL" "$FEDEO_DIR"
}
main() {
if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then
usage
exit 0
fi
cat <<'EOF'
FEDEO Selfhost Installer
Dieser Installer bringt die typische Serverstruktur mit:
- prüft Basispakete
- installiert Docker optional automatisch
- klont oder aktualisiert FEDEO nach /opt/fedeo
- startet danach den geführten Selfhost-Assistenten
EOF
install_base_packages
ensure_docker
prepare_checkout
echo
echo "Starte Selfhost-Assistent..."
cd "$FEDEO_DIR"
export FEDEO_USE_SUDO_DOCKER
export FEDEO_TTY_INPUT="$TTY_INPUT"
if [[ "$TTY_INPUT" == "/dev/tty" && -r "$TTY_INPUT" ]]; then
exec bash scripts/selfhost-setup.sh "${SETUP_ARGS[@]}" <"$TTY_INPUT"
fi
exec bash scripts/selfhost-setup.sh "${SETUP_ARGS[@]}"
}
main "$@"