You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

jitsi-meet-web-config.postinst 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. #!/bin/bash
  2. # postinst script for jitsi-meet-web-config
  3. #
  4. # see: dh_installdeb(1)
  5. set -e
  6. # summary of how this script can be called:
  7. # * <postinst> `configure' <most-recently-configured-version>
  8. # * <old-postinst> `abort-upgrade' <new version>
  9. # * <conflictor's-postinst> `abort-remove' `in-favour' <package>
  10. # <new-version>
  11. # * <postinst> `abort-remove'
  12. # * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
  13. # <failed-install-package> <version> `removing'
  14. # <conflicting-package> <version>
  15. # for details, see http://www.debian.org/doc/debian-policy/ or
  16. # the debian-policy package
  17. case "$1" in
  18. configure)
  19. # loading debconf
  20. . /usr/share/debconf/confmodule
  21. # try to get host from jitsi-videobridge
  22. db_get jitsi-videobridge/jvb-hostname
  23. if [ -z "$RET" ] ; then
  24. # server hostname
  25. db_set jitsi-videobridge/jvb-hostname "localhost"
  26. db_input critical jitsi-videobridge/jvb-hostname || true
  27. db_go
  28. fi
  29. JVB_HOSTNAME="$RET"
  30. # detect dpkg-reconfigure
  31. RECONFIGURING="false"
  32. db_get jitsi-meet/jvb-hostname
  33. JVB_HOSTNAME_OLD=$RET
  34. if [ -n "$RET" ] && [ ! "$JVB_HOSTNAME_OLD" = "$JVB_HOSTNAME" ] ; then
  35. RECONFIGURING="true"
  36. rm -f /etc/jitsi/meet/$JVB_HOSTNAME_OLD-config.js
  37. fi
  38. JVB_SERVE="false"
  39. db_get jitsi-meet/jvb-serve
  40. if [ -n "$RET" ] && [ "$RET" = "true" ] ; then
  41. JVB_SERVE="true"
  42. fi
  43. # stores the hostname so we will reuse it later, like in purge
  44. db_set jitsi-meet/jvb-hostname $JVB_HOSTNAME
  45. NGINX_INSTALL_CHECK="$(dpkg-query -f '${Status}' -W 'nginx' 2>/dev/null | awk '{print $3}' || true)"
  46. if [ "$NGINX_INSTALL_CHECK" = "installed" ] || [ "$NGINX_INSTALL_CHECK" = "unpacked" ] ; then
  47. FORCE_NGINX="true"
  48. fi
  49. APACHE_INSTALL_CHECK="$(dpkg-query -f '${Status}' -W 'apache2' 2>/dev/null | awk '{print $3}' || true)"
  50. if [ "$APACHE_INSTALL_CHECK" = "installed" ] || [ "$APACHE_INSTALL_CHECK" = "unpacked" ] ; then
  51. FORCE_APACHE="true"
  52. fi
  53. # if first time config ask for certs, or if we are reconfiguring
  54. if [ -z "$JVB_HOSTNAME_OLD" ] || [ "$RECONFIGURING" = "true" ] ; then
  55. # SSL for nginx
  56. db_get jitsi-meet/cert-choice
  57. CERT_CHOICE="$RET"
  58. UPLOADED_CERT_CHOICE="A certificate is available and the files are uploaded on the server"
  59. if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ] ; then
  60. db_set jitsi-meet/cert-path-key "/etc/ssl/$JVB_HOSTNAME.key"
  61. db_input critical jitsi-meet/cert-path-key || true
  62. db_go
  63. db_get jitsi-meet/cert-path-key
  64. CERT_KEY="$RET"
  65. db_set jitsi-meet/cert-path-crt "/etc/ssl/$JVB_HOSTNAME.crt"
  66. db_input critical jitsi-meet/cert-path-crt || true
  67. db_go
  68. db_get jitsi-meet/cert-path-crt
  69. CERT_CRT="$RET"
  70. else
  71. # create self-signed certs
  72. CERT_KEY="/etc/jitsi/meet/$JVB_HOSTNAME.key"
  73. CERT_CRT="/etc/jitsi/meet/$JVB_HOSTNAME.crt"
  74. HOST="$( (hostname -s; echo localhost) | head -n 1)"
  75. DOMAIN="$( (hostname -d; echo localdomain) | head -n 1)"
  76. openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj \
  77. "/O=$DOMAIN/OU=$HOST/CN=$JVB_HOSTNAME/emailAddress=webmaster@$HOST.$DOMAIN" \
  78. -keyout $CERT_KEY \
  79. -out $CERT_CRT
  80. fi
  81. fi
  82. # jitsi meet
  83. JITSI_MEET_CONFIG="/etc/jitsi/meet/$JVB_HOSTNAME-config.js"
  84. if [ ! -f $JITSI_MEET_CONFIG ] ; then
  85. cp /usr/share/doc/jitsi-meet-web/config.js $JITSI_MEET_CONFIG
  86. sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" $JITSI_MEET_CONFIG
  87. fi
  88. # this is new install let's configure jvb to serve meet
  89. # no-nginx, no-apache installed on machine, this is new install or reconfiguring old one which have jvb_serve set
  90. if [[ -z "$FORCE_NGINX" && -z "$FORCE_APACHE" && ( -z "$JVB_HOSTNAME_OLD" || ( "$JVB_SERVE" = "true" && "$RECONFIGURING" = "true" )) ]] ; then
  91. JVB_ETC_CONFIG="/etc/jitsi/videobridge/config"
  92. JVB_CONFIG="/etc/jitsi/videobridge/sip-communicator.properties"
  93. # this is a reconfigure, lets just delete old links
  94. if [ "$RECONFIGURING" = "true" ] ; then
  95. rm -f $JVB_CONFIG
  96. fi
  97. # we will write to the file if missing create it
  98. if [ ! -f $JVB_CONFIG ] ; then
  99. touch $JVB_CONFIG
  100. fi
  101. # configure jvb
  102. echo "AUTHBIND=yes" >> $JVB_ETC_CONFIG
  103. sed -i "s/JVB_OPTS=.*/JVB_OPTS=--apis=rest,xmpp/g" $JVB_ETC_CONFIG
  104. echo "org.jitsi.videobridge.rest.jetty.host=::" >> $JVB_CONFIG
  105. echo "org.jitsi.videobridge.rest.jetty.port=443" >> $JVB_CONFIG
  106. echo "org.jitsi.videobridge.rest.jetty.ProxyServlet.hostHeader=$JVB_HOSTNAME" >> $JVB_CONFIG
  107. echo "org.jitsi.videobridge.rest.jetty.ProxyServlet.pathSpec=/http-bind" >> $JVB_CONFIG
  108. echo "org.jitsi.videobridge.rest.jetty.ProxyServlet.proxyTo=http://localhost:5280/http-bind" >> $JVB_CONFIG
  109. echo "org.jitsi.videobridge.rest.jetty.ResourceHandler.resourceBase=/usr/share/jitsi-meet" >> $JVB_CONFIG
  110. echo "org.jitsi.videobridge.rest.jetty.ResourceHandler.alias./config.js=/etc/jitsi/meet/$JVB_HOSTNAME-config.js" >> $JVB_CONFIG
  111. echo "org.jitsi.videobridge.rest.jetty.ResourceHandler.alias./interface_config.js=/usr/share/jitsi-meet/interface_config.js" >> $JVB_CONFIG
  112. echo "org.jitsi.videobridge.rest.jetty.RewriteHandler.regex=^/([a-zA-Z0-9]+)$" >> $JVB_CONFIG
  113. echo "org.jitsi.videobridge.rest.jetty.RewriteHandler.replacement=/" >> $JVB_CONFIG
  114. echo "org.jitsi.videobridge.rest.jetty.SSIResourceHandler.paths=/" >> $JVB_CONFIG
  115. echo "org.jitsi.videobridge.rest.jetty.tls.port=443" >> $JVB_CONFIG
  116. echo "org.jitsi.videobridge.TCP_HARVESTER_PORT=443" >> $JVB_CONFIG
  117. echo "org.jitsi.videobridge.rest.jetty.sslContextFactory.keyStorePath=/etc/jitsi/videobridge/$JVB_HOSTNAME.jks" >> $JVB_CONFIG
  118. echo "org.jitsi.videobridge.rest.jetty.sslContextFactory.keyStorePassword=changeit" >> $JVB_CONFIG
  119. # configure authbind to allow jvb to bind to privileged ports
  120. OWNER=$(stat -c '%U' /usr/share/jitsi-videobridge)
  121. GROUP=$(stat -c '%G' /usr/share/jitsi-videobridge)
  122. JVB_UID="`id -u $OWNER`"
  123. if [ ! -f "/etc/authbind/byport/443" ] ; then
  124. if [ ! -d "/etc/authbind/byport" ] ; then
  125. mkdir -p /etc/authbind/byport
  126. chmod 755 /etc/authbind
  127. chmod 755 /etc/authbind/byport
  128. fi
  129. touch /etc/authbind/byport/443
  130. chown $OWNER /etc/authbind/byport/443
  131. chmod 755 /etc/authbind/byport/443
  132. fi
  133. CERT_P12="/etc/jitsi/videobridge/$JVB_HOSTNAME.p12"
  134. CERT_JKS="/etc/jitsi/videobridge/$JVB_HOSTNAME.jks"
  135. # create jks from certs
  136. openssl pkcs12 -export \
  137. -in $CERT_CRT -inkey $CERT_KEY -passout pass:changeit > $CERT_P12
  138. keytool -importkeystore -destkeystore $CERT_JKS \
  139. -srckeystore $CERT_P12 -srcstoretype pkcs12 \
  140. -noprompt -storepass changeit -srcstorepass changeit
  141. db_set jitsi-meet/jvb-serve "true"
  142. invoke-rc.d jitsi-videobridge restart
  143. elif [[ "$FORCE_NGINX" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
  144. # this is a reconfigure, lets just delete old links
  145. if [ "$RECONFIGURING" = "true" ] ; then
  146. rm -f /etc/nginx/sites-enabled/$JVB_HOSTNAME_OLD.conf
  147. rm -f /etc/jitsi/meet/$JVB_HOSTNAME_OLD-config.js
  148. fi
  149. # nginx conf
  150. if [ ! -f /etc/nginx/sites-available/$JVB_HOSTNAME.conf ] ; then
  151. cp /usr/share/doc/jitsi-meet-web/jitsi-meet.example /etc/nginx/sites-available/$JVB_HOSTNAME.conf
  152. if [ ! -f /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf ] ; then
  153. ln -s /etc/nginx/sites-available/$JVB_HOSTNAME.conf /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf
  154. fi
  155. sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" /etc/nginx/sites-available/$JVB_HOSTNAME.conf
  156. fi
  157. if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ] ; then
  158. # replace self-signed certificate paths with user provided ones
  159. CERT_KEY_ESC=$(echo $CERT_KEY | sed 's/\./\\\./g')
  160. CERT_KEY_ESC=$(echo $CERT_KEY_ESC | sed 's/\//\\\//g')
  161. sed -i "s/ssl_certificate_key\ \/etc\/jitsi\/meet\/.*key/ssl_certificate_key\ $CERT_KEY_ESC/g" \
  162. /etc/nginx/sites-available/$JVB_HOSTNAME.conf
  163. CERT_CRT_ESC=$(echo $CERT_CRT | sed 's/\./\\\./g')
  164. CERT_CRT_ESC=$(echo $CERT_CRT_ESC | sed 's/\//\\\//g')
  165. sed -i "s/ssl_certificate\ \/etc\/jitsi\/meet\/.*crt/ssl_certificate\ $CERT_CRT_ESC/g" \
  166. /etc/nginx/sites-available/$JVB_HOSTNAME.conf
  167. fi
  168. invoke-rc.d nginx reload
  169. elif [[ "$FORCE_APACHE" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
  170. echo "Apache2 server is installed, automatic configuration is not supported at this time."
  171. echo "You need to configure yourselve the virtual host for your domain."
  172. fi
  173. # and we're done with debconf
  174. db_stop
  175. ;;
  176. abort-upgrade|abort-remove|abort-deconfigure)
  177. ;;
  178. *)
  179. echo "postinst called with unknown argument \`$1'" >&2
  180. exit 1
  181. ;;
  182. esac
  183. # dh_installdeb will replace this with shell code automatically
  184. # generated by other debhelper scripts.
  185. #DEBHELPER#
  186. exit 0