summarylogtreecommitdiffstats
path: root/video-work-api-git.install
blob: 1779fc9d34d2dd0d13f95284dc9ccac3ed9f3ccb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/bin/bash
# shellcheck shell=bash
# Install hooks for video-work-api-git
# Does NOT enable or start the service. Does NOT download models.

set -e

_SERVICE_USER=video-work-api
_DATA_DIR=/var/lib/video-work-api
_CONF_DIR=/etc/video-work-api
_APP_DIR=/usr/lib/video-work-api

_ensure_root() {
  if [ "$(id -u)" -ne 0 ]; then
    echo "Error: install hooks must run as root." >&2
    exit 1
  fi
}

_ensure_user_and_dirs() {
  if ! getent group "$_SERVICE_USER" >/dev/null 2>&1; then
    groupadd --system "$_SERVICE_USER"
  fi
  if ! getent passwd "$_SERVICE_USER" >/dev/null 2>&1; then
    useradd --system --gid "$_SERVICE_USER" \
      --home-dir "$_DATA_DIR" \
      --create-home \
      --shell /usr/bin/nologin \
      --comment "Video Work API" \
      "$_SERVICE_USER"
  fi

  install -dm750 -o "$_SERVICE_USER" -g "$_SERVICE_USER" "$_DATA_DIR"
  install -dm750 -o "$_SERVICE_USER" -g "$_SERVICE_USER" "$_DATA_DIR/videos"
  install -dm750 -o "$_SERVICE_USER" -g "$_SERVICE_USER" "$_DATA_DIR/references"
  install -dm750 -o "$_SERVICE_USER" -g "$_SERVICE_USER" "$_DATA_DIR/profiles"
  install -dm750 -o "$_SERVICE_USER" -g "$_SERVICE_USER" "$_DATA_DIR/generations"
  install -dm750 -o "$_SERVICE_USER" -g "$_SERVICE_USER" "$_DATA_DIR/models"
  install -dm755 -o root -g root "$_CONF_DIR"

  # Keep ownership if directories already exist
  chown -R "$_SERVICE_USER:$_SERVICE_USER" "$_DATA_DIR" || true

  if [ -f "$_CONF_DIR/config.env" ]; then
    chmod 640 "$_CONF_DIR/config.env" || true
  fi
}

_print_banner() {
  local mode="$1"
  echo "-------------------------------------------------------------------"
  case "$mode" in
  install)
    echo "video-work-api-git installed (service not enabled)."
    echo ""
    echo "First-time setup (as root — reexecs as $_SERVICE_USER):"
    echo "  sudo vwactl setup          # Python venv + CosyVoice/FunClip deps"
    echo "  sudo vwactl init           # DB + one-time setup token"
    echo "  sudo vwactl model download # via hf CLI + Hub cache (opt-in, multi-GB)"
    echo ""
    echo "Optional MCP token in $_CONF_DIR/config.env:"
    echo "  VWA_MCP_TOKEN=\$(openssl rand -hex 32)"
    echo ""
    echo "Start (manual only; package never enables the unit):"
    echo "  sudo systemctl start video-work-api.service"
    echo "  journalctl -u video-work-api.service -f"
    echo ""
    echo "Paths:"
    echo "  App     $_APP_DIR"
    echo "  Config  $_CONF_DIR/config.env"
    echo "  Data    $_DATA_DIR"
    echo "  Port    7860 (default)"
    ;;
  upgrade)
    echo "video-work-api-git upgraded."
    echo ""
    echo "If Python deps changed, rebuild the service venv:"
    echo "  sudo vwactl setup"
    echo ""
    echo "Restart only if you already run the unit:"
    echo "  sudo systemctl restart video-work-api.service"
    ;;
  esac
  echo "-------------------------------------------------------------------"
  echo "Voice cloning requires explicit speaker consent. See SECURITY.md."
  echo "-------------------------------------------------------------------"
}

post_install() {
  _ensure_root
  _ensure_user_and_dirs
  systemctl daemon-reload || true
  _print_banner install
}

post_upgrade() {
  _ensure_root
  _ensure_user_and_dirs
  systemctl daemon-reload || true
  _print_banner upgrade
}

post_remove() {
  _ensure_root
  systemctl daemon-reload || true
  echo "-------------------------------------------------------------------"
  echo "Package removed. Service user and data were kept on purpose."
  echo "To wipe completely:"
  echo "  sudo systemctl stop video-work-api.service 2>/dev/null || true"
  echo "  sudo rm -rf $_DATA_DIR $_CONF_DIR"
  echo "  sudo userdel $_SERVICE_USER 2>/dev/null || true"
  echo "  sudo groupdel $_SERVICE_USER 2>/dev/null || true"
  echo "-------------------------------------------------------------------"
}