summarylogtreecommitdiffstats
path: root/anki-sync-server.install
blob: 9aa8873e3f4a31402e200273ed7eee0fef24284e (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
post_install() {
  # create user and set ownership
  useradd -d /opt/anki-sync-server -r -s /sbin/nologin anki-sync-server
  chown -R anki-sync-server /opt/anki-sync-server
  chgrp -R anki-sync-server /opt/anki-sync-server

  # fix protobuf needs older version (pending upstream change)
  sudo -u anki-sync-server sed -i "s/\\(protobuf\\)==.*$/\\1<=3.20.1/" /opt/anki-sync-server/requirements.txt

  # install prerequisites as stated on the website
  echo "installing python packages as anki-sync-server user..."
  sudo -u anki-sync-server pip install -r /opt/anki-sync-server/requirements.txt --user --no-warn-script-location

  append_nginx_config

  systemctl enable anki-sync-server
  systemctl start anki-sync-server

  # post installation instructions
  echo "==============================================="
  echo "Check the manpage for post-install instructions"
  echo "==============================================="

  # ankisyncctl.py can't find ankisyncd module unless it's in the root directory (pending upstream change)
  sudo -u anki-sync-server mv /opt/anki-sync-server/ankisyncd_cli/ankisyncctl.py /opt/anki-sync-server/.
}

post_remove(){
  # stop service (and remove systemd files)
  systemctl stop anki-sync-server
  systemctl disable anki-sync-server
  echo "Executing systemctl daemon-reload"
  systemctl daemon-reload

  # remove user (& group)
  getent passwd anki-sync-server &>/dev/null && userdel anki-sync-server || true
  getent group anki-sync-server &>/dev/null && groupdel anki-sync-server || true

  # remove servers from sites-enabled
  sudo find /etc/nginx/sites-enabled \( -name "anki-sync-server-http" -or -name "anki-sync-server-https" \) -delete
  sudo find /etc/nginx/sites-enabled -type d -empty -delete

  echo "==================================================================="
  echo "rm -rf /opt/anki-sync-server to remove the database and cache files"
  echo "==================================================================="
}

pre_upgrade(){
  echo "stopping anki-sync-server.service..."
  sudo systemctl stop anki-sync-server.service
}

post_upgrade(){
  # install prerequisites as stated on the website
  echo "installing python packages as anki-sync-server user..."
  sudo -u anki-sync-server pip install -r /opt/anki-sync-server/requirements.txt --user

  append_nginx_config

  sudo chown -R anki-sync-server /opt/anki-sync-server
  sudo chgrp -R anki-sync-server /opt/anki-sync-server

  echo "reloading systemd daemon..."
  sudo systemctl daemon-reload
  echo "starting anki-sync-server.service..."
  sudo systemctl start anki-sync-server
}

function append_nginx_config() {
  local _config_dir_="/etc/nginx"
  local _pacsave_="${_config_dir_}/nginx.conf.pacsave"
  local _config_="${_config_dir_}/nginx.conf"
  local _sites_available_dir_="${_config_dir_}/sites-available"
  local _sites_enabled_dir_="${_config_dir_}/sites-enabled"
  local _nginx_plugins_dir_="/opt/anki-sync-server/plugins/nginx"

  if (grep "include[[:space:]]\+/etc/nginx/sites-enabled" "${_config_}" --quiet); then
    echo "nginx config aleady uses sites-enabled"
    echo "not modifying nginx.conf!"
    echo "= you may need to manually enable the anki server ="
  else
    sudo cp "${_config_}" "${_pacsave_}"
    sudo awk -f "${_nginx_plugins_dir_}/append.awk" \
      "${_pacsave_}" > "${_config_}"

    # defaulting to use http
    ! [ -f "${_sites_enabled_dir_}/anki-sync-server-http" ] && \
      sudo \
        ln -s "${_sites_available_dir_}/anki-sync-server-http" \
        "${_sites_enabled_dir_}/anki-sync-server-http"
  fi
}