summaryrefslogtreecommitdiff
path: root/init-recordings-bigbluebutton.sh
blob: df8ead086b3c92cab8f44a4133285f3c164aeb8a (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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/bin/bash -ex

usage() {
    set +x
    cat 1>&2 <<HERE
Script for integrating BigBlueButton Recordings with Scaleite.
USAGE:
    wget -qO- https://raw.githubusercontent.com/jfederico/scalelite-run/master/init-recordings-bigbluebutton.sh | bash -s -- [OPTIONS]
OPTIONS
  -s <scalelite-hostname>          Configure server with <scalelite-hostname> (required)
EXAMPLES:
Sample options for setup a BigBlueButton server
    -s scalelite.example.com
HERE
exit 0
}

main() {
  export DEBIAN_FRONTEND=noninteractive
  while builtin getopts "s:" opt "${@}"; do

    case $opt in
      s)
        HOST=$OPTARG
        if [ "$HOST" == "scalelite.example.com" ]; then
          err "You must specify a valid hostname (not the hostname given in the docs)."
        fi
        ;;
    esac

  done

  if [ ! -z "$HOST" ]; then
    check_host $HOST
  else
    usage
  fi
}

check_root() {
  if [ $EUID != 0 ]; then err "You must run this command as root."; fi
}

check_host() {
  if [ ! -z "$HOST" ]; then
    need_pkg dnsutils apt-transport-https net-tools
    DIG_IP=$(dig +short $1 | grep '^[.0-9]*$' | tail -n1)
    if [ -z "$DIG_IP" ]; then err "Unable to resolve $1 to an IP address using DNS lookup.";  fi
  fi
}

err() {
  echo "$1" >&2
  exit 1
}

need_pkg() {
  check_root

  if [ ! "$SOURCES_FETCHED" = true ]; then
    apt-get update
    SOURCES_FETCHED=true
  fi

  if ! dpkg -s ${@:1} >/dev/null 2>&1; then
    LC_CTYPE=C.UTF-8 apt-get install -yq ${@:1}
  fi
}

main "$@" || exit 1


# We can proceed with the setup
if grep -q scalelite-spool /etc/group
then
  echo "Group <scalelite-spool> exists"
else
  echo "Group <scalelite-spool> does not exist. Create it with GID 2000..."
  groupadd -g 2000 scalelite-spool
fi

if grep -q bigbluebutton /etc/passwd
then
  echo "User <bigbluebutton> exists"
else
  echo 'User <bigbluebutton> does not exist. Add the bigbluebutton user using group <scalelite-spool>...'
  useradd -m -d /home/bigbluebutton -s /bin/bash bigbluebutton
fi
usermod -a -G scalelite-spool bigbluebutton

if [ -d "/home/bigbluebutton" ]
then
  echo "Home Directory for <bigbluebutton> was found"
else
  echo "Home Directory for <bigbluebutton> was not found"
  mkdir /home/bigbluebutton
  chown bigbluebutton.bigbluebutton /home/bigbluebutton/
fi

echo 'Generate ssh key pair...'
su - bigbluebutton -s /bin/bash -c "ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_rsa" || true

echo 'Generate ssh config...'
if [ -f "/home/bigbluebutton/.ssh/config" ]; then
  echo "file /home/bigbluebutton/.ssh/config exists"
  rm /home/bigbluebutton/.ssh/config
fi
echo "Host scalelite-spool" | sudo tee -a /home/bigbluebutton/.ssh/config
echo "  HostName $HOST" | sudo tee -a /home/bigbluebutton/.ssh/config
echo "  User bigbluebutton" | sudo tee -a /home/bigbluebutton/.ssh/config
echo "  Port 22" | sudo tee -a /home/bigbluebutton/.ssh/config
echo "  IdentityFile /home/bigbluebutton/.ssh/id_rsa" | sudo tee -a /home/bigbluebutton/.ssh/config
chown bigbluebutton.bigbluebutton /home/bigbluebutton/.ssh/config

echo 'Add recording transfer scripts...'
POST_PUBLISH_DIR=/usr/local/bigbluebutton/core/scripts/post_publish
if [ -f "$POST_PUBLISH_DIR/scalelite_post_publish.rb" ]; then
   echo "file $POST_PUBLISH_DIR/scalelite_post_publish.rb exists"
   rm $POST_PUBLISH_DIR/scalelite_post_publish.rb
fi
wget -O post_publish_scalelite.rb -P $POST_PUBLISH_DIR https://raw.githubusercontent.com/blindsidenetworks/scalelite/master/bigbluebutton/scalelite_post_publish.rb

echo 'Add recording transfer settings...'
CORE_SCRIPTS_DIR=/usr/local/bigbluebutton/core/scripts
if [ -f "$CORE_SCRIPTS_DIR/scalelite.yml" ]; then
   echo "file $CORE_SCRIPTS_DIR/scalelite.yml exists"
   rm $CORE_SCRIPTS_DIR/scalelite.yml
fi
wget https://raw.githubusercontent.com/blindsidenetworks/scalelite/master/bigbluebutton/scalelite.yml -P $CORE_SCRIPTS_DIR
sed -e '/spool_dir/ s/^#*/#/' -i $CORE_SCRIPTS_DIR/scalelite.yml
sed -e '/extra_rsync_opts/ s/^#*/#/' -i $CORE_SCRIPTS_DIR/scalelite.yml
echo 'spool_dir: bigbluebutton@scalelite-spool:/var/bigbluebutton/spool' | tee -a $CORE_SCRIPTS_DIR/scalelite.yml
echo 'extra_rsync_opts: ["-av", "--no-owner", "--chmod=F664"]' | tee -a $CORE_SCRIPTS_DIR/scalelite.yml

public_key=$(cat /home/bigbluebutton/.ssh/id_rsa.pub)
set +x
echo "**********************************************************************"
echo "Add this key to /home/bigbluebutton/.ssh/authorized_keys in scalelite:"
echo "**********************************************************************"
echo
echo "$public_key"
echo
echo "**********************************************************************"
exit 0