173 lines
7.0 KiB
Bash
173 lines
7.0 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# =============================================================
|
||
|
|
# install.sh — OpenClaw mailbox.org Kalender + Aufgaben
|
||
|
|
# Zielplattform: Raspberry Pi (Raspberry Pi OS / Ubuntu ARM)
|
||
|
|
# Ausführen als: pi-Nutzer (sudo-Rechte erforderlich)
|
||
|
|
# =============================================================
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
REPO_ROOT="$(dirname "$SCRIPT_DIR")"
|
||
|
|
ENV_FILE="$REPO_ROOT/.env"
|
||
|
|
|
||
|
|
# --- Farben ---
|
||
|
|
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
||
|
|
info() { echo -e "${GREEN}[INFO]${NC} $*"; }
|
||
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
||
|
|
error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; }
|
||
|
|
|
||
|
|
# =============================================================
|
||
|
|
# 1. .env laden
|
||
|
|
# =============================================================
|
||
|
|
if [[ ! -f "$ENV_FILE" ]]; then
|
||
|
|
warn ".env nicht gefunden — kopiere .env.example nach .env"
|
||
|
|
cp "$REPO_ROOT/assets/.env.example" "$ENV_FILE"
|
||
|
|
error "Bitte .env mit deinen mailbox.org-Zugangsdaten befüllen und install.sh erneut ausführen."
|
||
|
|
fi
|
||
|
|
# shellcheck source=/dev/null
|
||
|
|
# set -a exportiert alle Variablen; $HOME wird durch die Shell expandiert
|
||
|
|
set -a
|
||
|
|
source "$ENV_FILE"
|
||
|
|
set +a
|
||
|
|
info ".env geladen (Benutzer: ${MAILBOX_USER:-NICHT GESETZT})"
|
||
|
|
|
||
|
|
[[ -z "${MAILBOX_USER:-}" ]] && error "MAILBOX_USER in .env nicht gesetzt!"
|
||
|
|
[[ -z "${MAILBOX_PASS:-}" ]] && error "MAILBOX_PASS in .env nicht gesetzt!"
|
||
|
|
|
||
|
|
# @ im URL-Pfad muss als %40 kodiert sein (mailbox.org CalDAV-Anforderung)
|
||
|
|
export MAILBOX_USER_ENCODED="${MAILBOX_USER/@/%40}"
|
||
|
|
info "URL-kodierter Benutzername: ${MAILBOX_USER_ENCODED}"
|
||
|
|
|
||
|
|
# =============================================================
|
||
|
|
# 2. Systempakete installieren
|
||
|
|
# =============================================================
|
||
|
|
info "Installiere Systempakete..."
|
||
|
|
sudo apt-get update -qq
|
||
|
|
sudo apt-get install -y \
|
||
|
|
vdirsyncer \
|
||
|
|
khal \
|
||
|
|
todoman \
|
||
|
|
pass \
|
||
|
|
python3-keyring \
|
||
|
|
gettext-base \
|
||
|
|
curl \
|
||
|
|
jq \
|
||
|
|
python3-pip \
|
||
|
|
python3-venv
|
||
|
|
|
||
|
|
# Locale sicherstellen
|
||
|
|
sudo locale-gen de_AT.UTF-8 2>/dev/null || true
|
||
|
|
info "Pakete installiert."
|
||
|
|
|
||
|
|
# =============================================================
|
||
|
|
# 3. Verzeichnisse anlegen
|
||
|
|
# =============================================================
|
||
|
|
info "Lege Verzeichnisse an..."
|
||
|
|
|
||
|
|
VDIR_BASE="${VDIR_BASE_DIR:-$HOME/.local/share/vdirsyncer}"
|
||
|
|
mkdir -p "$VDIR_BASE/status"
|
||
|
|
mkdir -p "$VDIR_BASE/calendars"
|
||
|
|
mkdir -p "$VDIR_BASE/tasks"
|
||
|
|
mkdir -p "${KHAL_DB_PATH:-$HOME/.local/share/khal}"
|
||
|
|
mkdir -p "$HOME/.config/vdirsyncer"
|
||
|
|
mkdir -p "$HOME/.config/khal"
|
||
|
|
mkdir -p "$HOME/.config/todoman"
|
||
|
|
# Log + .env-Zielverzeichnis im Home (kein sudo nötig, passt zu systemd %h-Specifier)
|
||
|
|
mkdir -p "$HOME/.local/share/openclaw-mailbox-cal"
|
||
|
|
mkdir -p "$HOME/.config/openclaw-mailbox-cal"
|
||
|
|
|
||
|
|
# .env auch nach ~/.config/openclaw-mailbox-cal/.env kopieren
|
||
|
|
# (dort erwartet es die systemd EnvironmentFile-Direktive via %h)
|
||
|
|
cp "$ENV_FILE" "$HOME/.config/openclaw-mailbox-cal/.env"
|
||
|
|
chmod 600 "$HOME/.config/openclaw-mailbox-cal/.env"
|
||
|
|
info ".env nach ~/.config/openclaw-mailbox-cal/.env deployt"
|
||
|
|
|
||
|
|
# =============================================================
|
||
|
|
# 4. Konfigurationsdateien deployen (envsubst für Variablen)
|
||
|
|
# =============================================================
|
||
|
|
info "Deploye Konfigurationsdateien..."
|
||
|
|
|
||
|
|
# vdirsyncer config — Variablen ersetzen
|
||
|
|
export MAILBOX_USER MAILBOX_USER_ENCODED MAILBOX_PASS
|
||
|
|
envsubst '${MAILBOX_USER} ${MAILBOX_USER_ENCODED} ${MAILBOX_PASS}' \
|
||
|
|
< "$REPO_ROOT/config/vdirsyncer.conf" \
|
||
|
|
> "$HOME/.config/vdirsyncer/config"
|
||
|
|
chmod 600 "$HOME/.config/vdirsyncer/config"
|
||
|
|
info " → ~/.config/vdirsyncer/config"
|
||
|
|
|
||
|
|
# khal config
|
||
|
|
cp "$REPO_ROOT/config/khal.conf" "$HOME/.config/khal/config"
|
||
|
|
info " → ~/.config/khal/config"
|
||
|
|
|
||
|
|
# todoman config
|
||
|
|
cp "$REPO_ROOT/config/todoman.conf" "$HOME/.config/todoman/config.cfg"
|
||
|
|
info " → ~/.config/todoman/config.cfg"
|
||
|
|
|
||
|
|
# =============================================================
|
||
|
|
# 5. systemd Units installieren (User-Session)
|
||
|
|
# =============================================================
|
||
|
|
info "Installiere systemd Units (User-Session)..."
|
||
|
|
|
||
|
|
SYSTEMD_USER_DIR="$HOME/.config/systemd/user"
|
||
|
|
mkdir -p "$SYSTEMD_USER_DIR"
|
||
|
|
|
||
|
|
# Variablen in systemd-Units ersetzen
|
||
|
|
for unit_file in "$REPO_ROOT/systemd/"*.{service,timer}; do
|
||
|
|
[[ -f "$unit_file" ]] || continue
|
||
|
|
unit_name="$(basename "$unit_file")"
|
||
|
|
envsubst '${SYNC_INTERVAL}' < "$unit_file" > "$SYSTEMD_USER_DIR/$unit_name"
|
||
|
|
info " → $SYSTEMD_USER_DIR/$unit_name"
|
||
|
|
done
|
||
|
|
|
||
|
|
systemctl --user daemon-reload
|
||
|
|
systemctl --user enable --now vdirsyncer-sync.timer
|
||
|
|
info "systemd Timer aktiviert."
|
||
|
|
|
||
|
|
# Lingering aktivieren (damit User-Units ohne Login laufen)
|
||
|
|
loginctl enable-linger "$USER" 2>/dev/null || \
|
||
|
|
warn "loginctl enable-linger fehlgeschlagen — bitte manuell ausführen: sudo loginctl enable-linger $USER"
|
||
|
|
|
||
|
|
# =============================================================
|
||
|
|
# 6. Erst-Synchronisation
|
||
|
|
# =============================================================
|
||
|
|
info "Führe initialen vdirsyncer discover + sync durch..."
|
||
|
|
vdirsyncer discover calendars || warn "discover calendars hatte Warnungen — prüfe Ausgabe"
|
||
|
|
vdirsyncer discover tasks || warn "discover tasks hatte Warnungen — prüfe Ausgabe"
|
||
|
|
vdirsyncer sync || warn "sync hatte Warnungen — prüfe Ausgabe"
|
||
|
|
info "Erst-Sync abgeschlossen."
|
||
|
|
|
||
|
|
# =============================================================
|
||
|
|
# 7. khal-Index aufbauen
|
||
|
|
# =============================================================
|
||
|
|
info "Baue khal-Index auf..."
|
||
|
|
khal --config "$HOME/.config/khal/config" rebuild-cache || true
|
||
|
|
|
||
|
|
# =============================================================
|
||
|
|
# 8. OpenClaw Skill-Verknüpfung
|
||
|
|
# =============================================================
|
||
|
|
OPENCLAW_SKILLS_DIR="${OPENCLAW_SKILLS_DIR:-$HOME/.config/openclaw/skills}"
|
||
|
|
if [[ -d "$OPENCLAW_SKILLS_DIR" ]]; then
|
||
|
|
info "Verknüpfe OpenClaw Skill..."
|
||
|
|
ln -sf "$REPO_ROOT" "$OPENCLAW_SKILLS_DIR/mailbox-cal" 2>/dev/null || true
|
||
|
|
info " → $OPENCLAW_SKILLS_DIR/mailbox-cal"
|
||
|
|
else
|
||
|
|
warn "OpenClaw Skills-Verzeichnis nicht gefunden ($OPENCLAW_SKILLS_DIR)."
|
||
|
|
warn "Bitte Skill manuell in OpenClaw registrieren (siehe README.md)."
|
||
|
|
fi
|
||
|
|
|
||
|
|
# =============================================================
|
||
|
|
# Fertig
|
||
|
|
# =============================================================
|
||
|
|
echo ""
|
||
|
|
echo -e "${GREEN}╔══════════════════════════════════════════════════════╗${NC}"
|
||
|
|
echo -e "${GREEN}║ Installation abgeschlossen! ║${NC}"
|
||
|
|
echo -e "${GREEN}╚══════════════════════════════════════════════════════╝${NC}"
|
||
|
|
echo ""
|
||
|
|
echo " Nächste Schritte:"
|
||
|
|
echo " 1. khal agenda # Termine anzeigen"
|
||
|
|
echo " 2. todo list # Aufgaben anzeigen"
|
||
|
|
echo " 3. systemctl --user status vdirsyncer-sync.timer"
|
||
|
|
echo " 4. tail -f ~/.local/share/openclaw-mailbox-cal/sync.log"
|
||
|
|
echo ""
|