From ef6f58b4e51e84f5766512788e6b7c991f5e56c4 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Wed, 8 Apr 2026 00:14:42 +0200 Subject: [PATCH] feat: install script --- systemd/install.sh | 105 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 systemd/install.sh diff --git a/systemd/install.sh b/systemd/install.sh new file mode 100644 index 0000000..23479ee --- /dev/null +++ b/systemd/install.sh @@ -0,0 +1,105 @@ +#!/usr/bin/env bash + +set -euo pipefail + +# --- Kolory do logowania --- +GREEN='\033[0;32m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +log() { echo -e "${GREEN}[INFO]${NC} $1"; } +err() { echo -e "${RED}[ERROR]${NC} $1" >&2; exit 1; } + +# --- Sprawdzenie uprawnień roota --- +if [[ $EUID -ne 0 ]]; then + err "Ten skrypt wymaga uprawnień roota. Uruchom z sudo." +fi + +# --- 1. Wykrycie menedżera pakietów (apt / dnf) --- +if command -v apt-get &>/dev/null; then + PKG_MGR="apt-get" + PKG_UPDATE="apt-get update -y" + PKG_INSTALL="apt-get install -y" +elif command -v dnf &>/dev/null; then + PKG_MGR="dnf" + PKG_UPDATE="dnf check-update || true" + PKG_INSTALL="dnf install -y" +else + err "Nie znaleziono obsługiwanego menedżera pakietów (apt/dnf)." +fi + +log "Wykryto menedżer pakietów: $PKG_MGR" +$PKG_UPDATE + +# --- 2. Instalacja python3, curl, unzip --- +log "Instalacja python3, curl, unzip..." +$PKG_INSTALL python3 python3-pip curl unzip +$PKG_INSTALL python3-venv || true + +# --- 3. Instalacja Dockera (jeśli nie zainstalowany) --- +if command -v docker &>/dev/null; then + log "Docker już zainstalowany — pomijam." +else + log "Instalacja Dockera..." + curl -fsSL https://get.docker.com | bash + systemctl enable --now docker + log "Docker zainstalowany i uruchomiony." +fi + +# --- 4. Utworzenie użytkownika 'karl' --- +if id "karl" &>/dev/null; then + log "Użytkownik 'karl' już istnieje — pomijam." +else + log "Tworzenie użytkownika 'karl'..." + useradd -m -s /bin/bash karl +fi + +# --- 5. Dodanie 'karl' do grupy 'docker' --- +log "Dodawanie użytkownika 'karl' do grupy 'docker'..." +usermod -aG docker karl + +# --- 6. Pobranie i rozpakowanie archiwum --- +APP_URL="${1:?Podaj URL archiwum ZIP jako pierwszy argument}" +APP_DIR="/opt/karl/app" + +log "Pobieranie archiwum z: $APP_URL" +mkdir -p "$APP_DIR" +TMPZIP=$(mktemp /tmp/karl-app-XXXXXX.zip) +curl -fSL -o "$TMPZIP" "$APP_URL" +unzip -o "$TMPZIP" -d "$APP_DIR" +rm -f "$TMPZIP" +chown -R karl:karl "$APP_DIR" +log "Aplikacja rozpakowana do $APP_DIR" + +# --- 7. Sprawdzenie / instalacja uv --- +if command -v uv &>/dev/null; then + log "uv już zainstalowane." +else + log "Instalacja uv..." + pip3 install uv +fi + +# --- 8. Synchronizacja zależności (uv sync) --- +log "Uruchamianie 'uv sync' w katalogu aplikacji..." +cd "$APP_DIR" +sudo -u karl uv sync + +# --- 9. Kopiowanie pliku usługi systemd --- +SERVICE_SRC="$(dirname "$(realpath "$0")")/karl.service" +SERVICE_DST="/etc/systemd/system/karl.service" + +if [[ ! -f "$SERVICE_SRC" ]]; then + err "Nie znaleziono pliku $SERVICE_SRC" +fi + +log "Kopiowanie $SERVICE_SRC -> $SERVICE_DST" +cp "$SERVICE_SRC" "$SERVICE_DST" +chmod 644 "$SERVICE_DST" + +# --- 10. Przeładowanie systemctl i uruchomienie usługi --- +log "Przeładowanie systemd i włączanie usługi karl..." +systemctl daemon-reload +systemctl enable karl.service +systemctl start karl.service + +log "Instalacja zakończona pomyślnie! ✅"