summarylogtreecommitdiffstats
path: root/expressvpn.install
blob: 617f4ed492e178271943c51540caa95a06dd6a6e (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
WORK_DIR="/var/lib/expressvpn"
gen_key() {
  /usr/bin/expressvpnd --workdir "$WORK_DIR/" generate-client-ca > /dev/null 2>&1
  /usr/bin/expressvpnd --workdir "$WORK_DIR/" generate-client-certs > /dev/null 2>&1
  /usr/bin/chmod 644 "$WORK_DIR/certs/client.key" > /dev/null 2>&1
  /usr/bin/rm -f "$WORK_DIR/certs/client.req" > /dev/null 2>&1
  /usr/bin/rm -f "$WORK_DIR/certs/clientca.srl" > /dev/null 2>&1
}

upgrade_userdata() {
  local CLIENT_VERSION=$(/usr/bin/echo $1 | /usr/bin/cut -d '.' -f 1-3)
  local BUILD_VERSION=$(/usr/bin/echo ${1%_*} | /usr/bin/cut -d '.' -f 4)

  # Upgrade userdata to v2
  if [ -e "$WORK_DIR/userdata.dat" -a ! -e "$WORK_DIR/userdata2.dat" ]; then
    mv "$WORK_DIR/userdata.dat" "$WORK_DIR/userdata2.dat"
  fi

  if [ -e "$WORK_DIR/userdata2.dat" -a ! -e "$WORK_DIR/data/e21fb121.bin" ]; then
    /usr/bin/printf "----------------------------------------------\n"
    /usr/bin/printf " Upgrading userdata\n"

    mkdir -p "$WORK_DIR/data"
    chmod 700 "$WORK_DIR/data"
    /usr/sbin/expressvpnd \
      --workdir "$WORK_DIR" \
      --client-version "$CLIENT_VERSION" \
      --client-build "$BUILD_VERSION" \
      migrate 2>&1
    /usr/bin/printf "----------------------------------------------\n"
  fi
}

post_install() {
  gen_key
  /usr/bin/printf "----------------------------------------------\n"
  /usr/bin/printf " Start the expressvpn daemon with\n"
  /usr/bin/printf "     # systemctl start expressvpn.service\n"
  /usr/bin/printf " Then activate your expressVPN account with\n"
  /usr/bin/printf "     $ expressvpn activate [activation code]\n"
  /usr/bin/printf " (Your activation code can be found at\n"
  /usr/bin/printf " https://www.expressvpn.com/subscriptions)\n"
  /usr/bin/printf "\n"
  /usr/bin/printf " Once activated, Use 'expressvpn list' to\n"
  /usr/bin/printf " list servers and 'expressvpn connect [id]' \n"
  /usr/bin/printf " to connect to your preferred server.\n"
  /usr/bin/printf " See 'expressvpn help' for more information.\n"
  /usr/bin/printf "\n"
  /usr/bin/printf " Please note that ExpressVPN now offer a\n"
  /usr/bin/printf " native Arch Linux package on their website.\n"
  /usr/bin/printf "----------------------------------------------\n"
}

post_upgrade() {
  gen_key
  upgrade_userdata $1
  if [ "$(/usr/bin/vercmp 1.2.0 "$2")" -eq 1 ]; then
    /usr/bin/printf "------------------------------------------------------------------------------\n"
    /usr/bin/printf " Upstream now ship a systemd service file with a different name to the one we\n"
    /usr/bin/printf " previously shipped. The new service name is:\n"
    /usr/bin/printf "     'expressvpn.service'\n"
    /usr/bin/printf " Please remember to enable it if you want the service to start at boot.\n"
    /usr/bin/printf " If you had enabled the previous service file please manually remove its\n"
    /usr/bin/printf " symlink:\n"
    /usr/bin/printf "     # rm /etc/systemd/system/multi-user.target.wants/expressvpnd.service\n"
    /usr/bin/printf " Unfortunately, you will need to reactivate your expressvpn after this update\n"
    /usr/bin/printf "------------------------------------------------------------------------------\n"
  fi
  /usr/bin/printf "--------------------------------------------------\n"
  /usr/bin/printf " You will need to re-start the expressvpn daemon:\n"
  /usr/bin/printf "     # systemctl start expressvpn.service\n"
  /usr/bin/printf "--------------------------------------------------\n"
}

post_remove() {
  /usr/bin/rm -f "$WORK_DIR/certs/client.key"
  /usr/bin/rm -f "$WORK_DIR/certs/client.crt"
  /usr/bin/rm -f "$WORK_DIR/certs/client.p12"
  /usr/bin/rm -f "$WORK_DIR/certs/clientca.crt"
  /usr/bin/rm -f "$WORK_DIR/certs/clientca.key"
}

pre_remove() {
  # Disconnect before remove. OK to fail.
  if /usr/bin/expressvpn status 2>/dev/null | grep -q Connected; then
    /usr/bin/expressvpn disconnect > /dev/null 2>&1 || true
  fi

  # Stop expressvpn daemon
  if [ -x /usr/bin/systemctl ]; then
    /usr/bin/systemctl stop expressvpn &>/dev/null
  fi
}

pre_upgrade() {
  pre_remove
  if grep -q "Generated by expressvpn" /etc/resolv.conf; then
    # reset chattr
    [ -x /usr/bin/chattr ] && /usr/bin/chattr -i /etc/resolv.conf &>/dev/null || true

    # restore previous resolv.conf
    BAKFILE="$WORK_DIR/resolv.conf.orig"
    if [ -L "$BAKFILE" ]; then
      mv "$BAKFILE" /etc/resolv.conf
    elif [ -f "$BAKFILE" ]; then
      cat "$BAKFILE" > /etc/resolv.conf
      rm "$WORK_DIR/resolv.conf.orig"
    fi
  fi
}