Skip to content

Instantly share code, notes, and snippets.

@jason-shen
Created May 19, 2018 16:58
Show Gist options
  • Save jason-shen/0195fb8e5f543cacf3adabb8561d56ca to your computer and use it in GitHub Desktop.
Save jason-shen/0195fb8e5f543cacf3adabb8561d56ca to your computer and use it in GitHub Desktop.
#!/bin/sh
set -eu
JANUS_REV=master
CONTAINER=false # if true, delete more for smaller image
JANUS_REPO=meetecho/janus-gateway
PREFIX=/opt/janus-gateway
SRCDIR=$HOME/src
SU_CMD=sudo
if $CONTAINER; then
SU_CMD=""
fi
OPENSSL_REV="1.0.2h"
LIBSRTP_REV="1.5.4"
LIBNICE_REV="0.1.13"
SOFIASIP_REV="1.12.11"
LIBWEBSOCKETS_REV="1.5-chrome47-firefox41"
# left enabled: rest, websockets, echotest, videoroom, streaming
JANUS_FEATURE_OPTS="\
--disable-rabbitmq --disable-data-channels \
--disable-plugin-voicemail --disable-plugin-sip \
--disable-plugin-videocall --disable-plugin-audiobridge \
--disable-plugin-recordplay --disable-turn-rest-api
"
APT="$SU_CMD apt-get --quiet --assume-yes"
export DEBIAN_FRONTEND=noninteractive
if $CONTAINER; then
$APT update
fi
$APT install --no-install-recommends \
build-essential \
python \
autoconf \
automake \
libtool \
pkg-config \
gengetopt \
cmake \
ca-certificates \
wget \
git \
zlib1g-dev \
libmicrohttpd-dev \
libmicrohttpd-dbg \
libjansson-dev \
libglib2.0-dev \
libglib2.0-0-dbg \
mkdir -p $SRCDIR
cd $SRCDIR
$SU_CMD mkdir -p $PREFIX
export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig"
export CFLAGS="-I$PREFIX/include"
export LDFLAGS="-L$PREFIX/lib"
OPENSSL_TARBALL="openssl-${OPENSSL_REV}.tar.gz"
wget --no-verbose https://www.openssl.org/source/$OPENSSL_TARBALL
tar -xf $OPENSSL_TARBALL
cd openssl-$OPENSSL_REV
# -DPURIFY to disable use of un-initialized memory (it's safe :)
./config --prefix=$PREFIX --openssldir=$PREFIX/openssl -DPURIFY shared
make
$SU_CMD make install_sw
cd $SRCDIR
rm -r $OPENSSL_TARBALL openssl-$OPENSSL_REV
LIBSRTP_TARBALL="libsrtp-${LIBSRTP_REV}.tar.gz"
wget --no-verbose -O $LIBSRTP_TARBALL \
https://github.com/cisco/libsrtp/archive/v${LIBSRTP_REV}.tar.gz
tar -xf $LIBSRTP_TARBALL
cd libsrtp-$LIBSRTP_REV
./configure --prefix=$PREFIX --enable-openssl
make shared_library
$SU_CMD make install
cd $SRCDIR
rm -r $LIBSRTP_TARBALL libsrtp-$LIBSRTP_REV
LIBNICE_TARBALL="libnice-${LIBNICE_REV}.tar.gz"
wget --no-verbose http://nice.freedesktop.org/releases/${LIBNICE_TARBALL}
tar -xf $LIBNICE_TARBALL
cd libnice-$LIBNICE_REV
./configure --prefix=$PREFIX --disable-gupnp
make
# "make install" works fine but installs extra stuff
$SU_CMD make -C nice install-exec
$SU_CMD make -C nice install-data
$SU_CMD make -C stun install-data
$SU_CMD make -C agent install-data
cd $SRCDIR
if $CONTAINER; then
rm -r $LIBNICE_TARBALL libnice-$LIBNICE_REV
fi
SOFIASIP_TARBALL="sofia-sip-${SOFIASIP_REV}.tar.gz"
wget --no-verbose -O $SOFIASIP_TARBALL \
http://sourceforge.net/projects/sofia-sip/files/sofia-sip/${SOFIASIP_REV}/${SOFIASIP_TARBALL}/download
tar -xf $SOFIASIP_TARBALL
cd sofia-sip-$SOFIASIP_REV
# http://sourceforge.net/p/sofia-sip/bugs/121/ https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=729301
./configure --prefix=$PREFIX CFLAGS="$CFLAGS -fno-aggressive-loop-optimizations"
make
# "make install" works fine but installs extra stuff
$SU_CMD make -C libsofia-sip-ua install-exec
$SU_CMD make -C libsofia-sip-ua-glib install-exec
$SU_CMD make -C packages install-data
$SU_CMD make -C libsofia-sip-ua install-data
$SU_CMD make -C libsofia-sip-ua-glib install-data
cd $SRCDIR
if $CONTAINER; then
rm -rf $SOFIASIP_TARBALL sofia-sip-$SOFIASIP_REV
fi
LIBWEBSOCKETS_TARBALL="libwebsockets-${LIBWEBSOCKETS_REV}.tar.gz"
wget --no-verbose -O $LIBWEBSOCKETS_TARBALL \
https://github.com/warmcat/libwebsockets/archive/v${LIBWEBSOCKETS_REV}.tar.gz
tar -xf $LIBWEBSOCKETS_TARBALL
cd libwebsockets-$LIBWEBSOCKETS_REV
cmake -DCMAKE_INSTALL_PREFIX:PATH=$PREFIX -DLWS_WITHOUT_TESTAPPS:BOOL=ON
make
$SU_CMD make install
cd $SRCDIR
if $CONTAINER; then
rm -rf $LIBWEBSOCKETS_TARBALL libwebsockets-$LIBWEBSOCKETS_REV
fi
git clone https://github.com/${JANUS_REPO}.git
cd janus-gateway
git checkout $JANUS_REV
./autogen.sh
./configure --prefix=$PREFIX --disable-docs $JANUS_FEATURE_OPTS \
LDFLAGS="-L$PREFIX/lib -Wl,-rpath=$PREFIX/lib" \
CFLAGS="-I$PREFIX/include -O2 -g"
make
$SU_CMD make install
$SU_CMD mkdir -p $PREFIX/www/janus
$SU_CMD cp -R html/* $PREFIX/www/janus/
if $CONTAINER; then
rm -rf janus-gateway
$SU_CMD rm -r $PREFIX/share/doc
$APT purge \
build-essential \
autoconf \
libtool \
pkg-config \
gengetopt \
git \
wget \
cpp \
g++ \
gcc \
binutils \
fakeroot \
cmake \
$APT autoremove
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment