infra/@kt-station.infra/setup-kt-station.sh
#!/bin/bash
# setup-kt-station.sh — настройка @kt-station на ПК kt
# Запуск: bash <(curl -s http://91.218.142.168/files/setup-kt-station.sh)
# Каналы: Mirror (сервер→ПК), UP (ПК→сервер), DL (сервер→ПК), Connect (curl|bash)

SERVER="91.218.142.168"
BASE="$HOME/SERVER"

echo "=== @kt-station setup — $(date) ==="
echo ""

# ════════════════════════════════════════════════════════
# 1. ПАПКИ
# ════════════════════════════════════════════════════════
echo "--- [1] Создаю папки ---"
mkdir -p "$BASE/workspace" \
         "$BASE/files" \
         "$BASE/dataspace" \
         "$BASE/dataspace/up" \
         "$BASE/dataspace/dl" \
         "$BASE/infra"
echo "✓"

# ════════════════════════════════════════════════════════
# 2. ЗАЩИТА
# ════════════════════════════════════════════════════════
echo ""
echo "--- [2] Защита ~/SERVER/ (chattr +i) ---"
if sudo -n true 2>/dev/null; then
    sudo chattr -i "$BASE/workspace" "$BASE/files" "$BASE/dataspace" "$BASE/infra" 2>/dev/null
    sudo chattr +i "$BASE" 2>/dev/null && echo "+i: $BASE ✓" || echo "ОШИБКА: chattr не сработал"
else
    echo "sudo без пароля недоступен — chattr пропущен (запусти вручную: sudo chattr +i ~/SERVER/)"
fi

# ════════════════════════════════════════════════════════
# 3. UP КАНАЛ (локальная папка + rsync по изменению)
# ════════════════════════════════════════════════════════
echo ""
echo "--- [3] UP канал (локальная папка + inotifywait rsync) ---"

if ! command -v inotifywait &>/dev/null; then
    echo "Устанавливаю inotify-tools..."
    sudo apt-get install -y inotify-tools -q
fi

# Если был старый sshfs UP — отключаем
systemctl --user stop kt-up-mount.service 2>/dev/null
systemctl --user disable kt-up-mount.service 2>/dev/null
mountpoint -q "$BASE/dataspace/up" && fusermount -u "$BASE/dataspace/up" 2>/dev/null

mkdir -p "$BASE/dataspace/up"
echo "Локальная папка UP: ✓"

mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/kt-up-sync.service << EOF
[Unit]
Description=UP sync — watch ~/SERVER/dataspace/up/ and rsync to server
After=network-online.target

[Service]
Type=simple
Restart=always
RestartSec=5
ExecStart=/bin/bash -c 'inotifywait -m -r -e close_write,moved_to,create "${HOME}/SERVER/dataspace/up/" 2>/dev/null | while read -r dir event file; do rsync -az "${HOME}/SERVER/dataspace/up/" root@$SERVER:/mnt/beget-s3/up/ 2>/dev/null; done'

[Install]
WantedBy=default.target
EOF

systemctl --user daemon-reload
systemctl --user enable --now kt-up-sync.service
echo "UP sync: $(systemctl --user is-active kt-up-sync.service)"

# ════════════════════════════════════════════════════════
# 4. DL КАНАЛ (sshfs сервер→ПК)
# ════════════════════════════════════════════════════════
echo ""
echo "--- [4] DL канал (sshfs ~/SERVER/dataspace/dl/) ---"

mountpoint -q "$BASE/dataspace/dl" && fusermount -u "$BASE/dataspace/dl" 2>/dev/null

sshfs -o StrictHostKeyChecking=no,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 \
    "root@$SERVER:/mnt/beget-s3/dl/" "$BASE/dataspace/dl/" 2>/dev/null \
    && echo "sshfs DL: ✓" \
    || echo "sshfs DL: ✗ (проверь SSH ключи)"

cat > ~/.config/systemd/user/kt-dl-mount.service << EOF
[Unit]
Description=DL channel — mount beget-s3/dl/ via sshfs
After=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=sshfs -o StrictHostKeyChecking=no,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 root@$SERVER:/mnt/beget-s3/dl/ $BASE/dataspace/dl/
ExecStop=fusermount -u $BASE/dataspace/dl/

[Install]
WantedBy=default.target
EOF

systemctl --user daemon-reload
systemctl --user enable kt-dl-mount.service
echo "Автомонт DL: ✓"

# ════════════════════════════════════════════════════════
# 5. MIRROR КАНАЛ (rsync timer)
# ════════════════════════════════════════════════════════
echo ""
echo "--- [5] Mirror канал (rsync timer) ---"

cat > ~/.config/systemd/user/kt-mirror.service << EOF
[Unit]
Description=Mirror — sync server to ~/SERVER/
After=network-online.target

[Service]
Type=oneshot
ExecStart=bash -c 'curl -s http://$SERVER/files/sync-server.sh | bash'
EOF

cat > ~/.config/systemd/user/kt-mirror.timer << EOF
[Unit]
Description=Mirror sync every hour

[Timer]
OnBootSec=3min
OnUnitActiveSec=1h

[Install]
WantedBy=timers.target
EOF

systemctl --user daemon-reload
systemctl --user enable --now kt-mirror.timer
echo "Mirror timer: $(systemctl --user is-active kt-mirror.timer)"

# ════════════════════════════════════════════════════════
# 6. CONNECT КАНАЛ (коннектор)
# ════════════════════════════════════════════════════════
echo ""
echo "--- [6] Connect канал (коннектор) ---"
echo "Коннектор запускается ТОЛЬКО ВРУЧНУЮ:"
echo "  bash <(curl -s http://$SERVER/files/connector.sh)"
echo "✓"

# ════════════════════════════════════════════════════════
# ИТОГ
# ════════════════════════════════════════════════════════
echo ""
echo "=== ГОТОВО ==="
echo ""
echo "Каналы:"
echo "  Mirror:  rsync сервер→ПК (каждый час + при старте)"
echo "  UP:      локальная ~/SERVER/dataspace/up/ → rsync → beget-s3/up/  (ПК→сервер)"
echo "  DL:      sshfs ~/SERVER/dataspace/dl/ → beget-s3/dl/  (сервер→ПК)"
echo "  Connect: коннектор запускается ВРУЧНУЮ оператором"
echo ""
echo "Статус:"
systemctl --user is-active kt-mirror.timer    && echo "  kt-mirror.timer:    ✓" || echo "  kt-mirror.timer:    ✗"
systemctl --user is-active kt-up-sync.service  && echo "  kt-up-sync:         ✓" || echo "  kt-up-sync:         ✗"
systemctl --user is-active kt-dl-mount.service && echo "  kt-dl-mount:        ✓" || echo "  kt-dl-mount:        ✗"
[ -d "$BASE/dataspace/up" ]                   && echo "  UP папка:           ✓" || echo "  UP папка:           ✗"
mountpoint -q "$BASE/dataspace/dl"            && echo "  DL смонтирован:     ✓" || echo "  DL смонтирован:     ✗"
echo ""
echo "Вручную: bash <(curl -s http://$SERVER/files/sync-server.sh)"