EG install scripts: websocketd is our default now
[sitka/sitka-tools.git] / deployment / install-osrf.sh
1 #!/bin/bash
2 DEFAULT_USER="opensrf"
3 HOMEDIR="/home/${DEFAULT_USER}"
4 BUILDDIR="${HOMEDIR}/opensrf"
5 INSTALLDIR="/srv/openils"
6 BRANCH="user/berick/lp1777180-websocketd-gateway"
7 HOSTNAME="nonprod"
8 SITKACONF="${HOMEDIR}/sysadmin"
9 SITKACONF_BRANCH="master"
10
11 WEBSOCKETD_VERSION="0.3.0"
12 WEBSOCKETD_ZIP="websocketd-${WEBSOCKETD_VERSION}-linux_amd64.zip"
13 WEBSOCKETD_URL="https://github.com/joewalnes/websocketd/releases/download/v${WEBSOCKETD_VERSION}/${WEBSOCKETD_ZIP}"
14
15 THISHOST=`hostname -s`
16
17 while getopts ":pWj" opt ; do
18   case $opt in
19     p ) PROD="prod";;
20     W ) SKIP_WEBSOCKETS="websockets";;
21     j ) SKIP_EJABBERD_REG="skip_ejabberd_reg";;
22   esac
23 done
24 shift $(($OPTIND - 1))
25
26 # test for ejabberd passwords
27 if [ -z "$PRIVATE_ROUTER_PASSWD" -o -z "$PRIVATE_OPENSRF_PASSWD" -o -z "$PUBLIC_ROUTER_PASSWD" -o -z "$PUBLIC_OPENSRF_PASSWD" ]
28 then
29   if [[ ! -n "$SKIP_EJABBERD_REG" ]] ; then
30     echo "Missing ejabberd password(s), no OpenSRF install!"
31     exit
32   fi
33 fi
34
35 # always use a proxy for websockets traffic
36 if [[ ! -n "$SKIP_WEBSOCKETS" ]] ; then
37     WSPORT="--with-websockets-port=443"
38     # load-balanced installs require mod_rpaf - see LP#1684970
39     apt-get install libapache2-mod-rpaf
40 else
41     WSPORT=""
42 fi
43
44 if [[ -n "$PROD" ]] ; then
45   echo 'this is a production install'
46   [ "$HOSTNAME" == "nonprod" ] && HOSTNAME="prod"
47 else
48   echo 'this is NOT a production install'
49 fi
50 # as root
51 usermod -a -G sudo ${DEFAULT_USER}
52 apt-get install git-core build-essential translate-toolkit python-polib bsdmainutils
53  
54 # as DEFAULT_USER
55 if [ ! -d "${SITKACONF}" ]
56 then
57   # this will fail unless DEFAULT_USER has read access to the repo
58   su -c "cd ${HOMEDIR} && git clone git+ssh://git@git.sitka.bclibraries.ca/sitka-infra/sysadmin" ${DEFAULT_USER}
59 fi
60 su -c "cd ${HOMEDIR}/sysadmin && git fetch origin && git checkout ${SITKACONF_BRANCH} && git pull" ${DEFAULT_USER}
61 if [ ! -d "${BUILDDIR}/.git" ] ; then
62   su -c "cd ${HOMEDIR} && git clone git://git.evergreen-ils.org/working/OpenSRF.git opensrf" ${DEFAULT_USER}
63 fi
64 su -c "cd ${BUILDDIR} && git fetch origin && git checkout ${BRANCH} && git pull" ${DEFAULT_USER}
65  
66 # as root
67 echo "need a placeholder apache2.conf, installing from config repo..."
68 if [ -f '/etc/apache2/apache2.conf' ]
69 then
70   mv /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak
71 fi
72 cp ${SITKACONF}/files/etc/apache2/apache2.conf/${HOSTNAME} /etc/apache2/apache2.conf
73 sed -i "s|__HOSTNAME__|${THISHOST}|g" /etc/apache2/apache2.conf
74
75 # as root
76 echo "Installing OpenSRF prerequisites for Ubuntu..."
77 cd ${BUILDDIR} && make -f src/extras/Makefile.install ubuntu-trusty
78  
79 # as DEFAULT_USER
80 echo "Configuring and building OpenSRF..."
81 su -c "cd ${BUILDDIR} && autoreconf -i" ${DEFAULT_USER}
82 su -c "cd ${BUILDDIR} && ./configure --prefix=${INSTALLDIR} --sysconfdir=${INSTALLDIR}/conf ${WSPORT}" ${DEFAULT_USER}
83 su -c "cd ${BUILDDIR} && make" ${DEFAULT_USER}
84  
85 # as root
86 echo "Installing OpenSRF..."
87 cd ${BUILDDIR} && make install
88 useradd -m -s /bin/bash opensrf
89 PATHFILES="/etc/profile /root/.bashrc /home/${DEFAULT_USER}/.bashrc /home/opensrf/.bashrc"
90 for PATHFILE in ${PATHFILES} ; do
91   if [[ ! -e "${PATHFILE}" || ! `egrep "PATH=.*${INSTALLDIR}/bin" "${PATHFILE}"` ]] ; then 
92     echo "export PATH=${INSTALLDIR}/bin:\$PATH" >> ${PATHFILE}
93   fi
94 done
95 chown ${DEFAULT_USER}:${DEFAULT_USER} /home/${DEFAULT_USER}/.bashrc
96 if [[ ! -n "$PROD" ]] ; then
97   chown -R opensrf:opensrf ${INSTALLDIR}
98 fi
99  
100 # as root, add the following two lines to /etc/hosts:
101 #127.0.1.2      public.localhost        public
102 #127.0.1.3      private.localhost       private
103 if [[ ! -n "$PROD" ]] ; then
104   if [[ ! `grep public.localhost /etc/hosts` ]] ; then
105     echo "Updating /etc/hosts..."
106     echo -e "127.0.1.2\tpublic.localhost\tpublic\n127.0.1.3\tprivate.localhost\tprivate\n" | \
107       cat - /etc/hosts > /etc/hosts.new && mv /etc/hosts.new /etc/hosts
108   fi
109 else
110   echo 'WARNING: If this is a new production server, you will need to manually update /etc/hosts!'
111 fi
112  
113 # as root
114 echo "ldconfig stuff..."
115 echo "${INSTALLDIR}/lib" > /etc/ld.so.conf.d/opensrf.conf
116 ldconfig
117  
118 # as root
119 echo "Setting up ejabberd..."
120 cp ${SITKACONF}/files/etc/ejabberd/ejabberd.cfg/${HOSTNAME} /etc/ejabberd/ejabberd.cfg
121 sed -i "s|__HOSTNAME__|${THISHOST}|g" /etc/ejabberd/ejabberd.cfg
122 chgrp ejabberd /etc/ejabberd/ejabberd.cfg
123 chmod 640 /etc/ejabberd/ejabberd.cfg
124 /etc/init.d/ejabberd stop && /etc/init.d/ejabberd start
125 if [[ ! -n "$SKIP_EJABBERD_REG" ]] ; then
126   sleep 5
127   ejabberdctl register router private.localhost ${PRIVATE_ROUTER_PASSWD} && \
128   ejabberdctl register opensrf private.localhost ${PRIVATE_OPENSRF_PASSWD} && \
129   ejabberdctl register router public.localhost ${PUBLIC_ROUTER_PASSWD} && \
130   ejabberdctl register opensrf public.localhost ${PUBLIC_OPENSRF_PASSWD}
131 fi
132
133 echo "OpenSRF is installed!"
134
135 # websockets install (REQUIRED for web client)
136 # XXX a valid SSL cert is required!
137 if [[ ! -n "$SKIP_WEBSOCKETS" ]] ; then
138   # remove apache-websocket stuff
139   rm -r /tmp/apache-websocket
140   rm -r /etc/apache2-websockets /etc/init.d/apache2-websockets /usr/local/sbin/*-websockets /var/log/apache2-websockets/ /etc/logrotate.d/apache2-websockets
141
142   # install websocketd
143   [[ -e "/tmp/websocketd" ]] && rm /tmp/websocketd
144   [[ ! -e "/tmp/${WEBSOCKETD_ZIP}" ]] && su -c "cd /tmp && wget '${WEBSOCKETD_URL}' && unzip ${WEBSOCKETD_ZIP}" ${DEFAULT_USER}
145   cp /tmp/websocketd /usr/local/bin/
146   WEBSOCKETD_INIT="/etc/init.d/websocketd"
147   [[ -e "${WEBSOCKETD_INIT}" ]] && mv ${WEBSOCKETD_INIT} ${WEBSOCKETD_INIT}.bak
148   cp ${SITKACONF}/files/${WEBSOCKETD_INIT} ${WEBSOCKETD_INIT}
149
150   #echo "websockets is installed!"
151 fi