#!/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)"