Skip to content

Instantly share code, notes, and snippets.

@ghafran
Last active September 7, 2020 07:12
Show Gist options
  • Save ghafran/544546bb4ca15c4a767c to your computer and use it in GitHub Desktop.
Save ghafran/544546bb4ca15c4a767c to your computer and use it in GitHub Desktop.
#!/bin/bash
# https://code.google.com/p/webrtc2sip/wiki/Building_Source_v2_0
sudo su
sudo yum -y update
sudo yum install -y make libtool autoconf subversion git cvs wget libogg-devel gcc gcc-c++ pkgconfig nasm
#Building libsrtp
cd /usr/local/src/
git clone https://github.com/cisco/libsrtp/
cd libsrtp
git checkout v1.5.0
CFLAGS="-fPIC" ./configure --enable-pic && make && make install
#Building OpenSSL
yum install -y openssl-devel
# cd /usr/local/src/
# wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
# tar -xvzf openssl-1.0.1c.tar.gz
# cd openssl-1.0.1c
# ./config shared --prefix=/usr/local --openssldir=/usr/local/openssl && make && make install
#Building libspeex and libspeexdsp
cd /usr/local/src/
wget http://downloads.xiph.org/releases/speex/speex-1.2beta3.tar.gz
tar -xvzf speex-1.2beta3.tar.gz
cd speex-1.2beta3
./configure --disable-oggtest --without-libogg && make && make install
#Building YASM
cd /usr/local/src/
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar -xvzf yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure && make && make install
#Building libvpx
sudo yum install -y libvpx-devel
# cd /usr/local/src/
# git clone http://git.chromium.org/webm/libvpx.git
# cd libvpx
# ./configure --enable-realtime-only --enable-error-concealment --disable-examples --enable-vp8 --enable-pic --enable-shared --as=yasm
# make && make install
#Building libyuv - documents say to skip it
# cd /usr/local/src/
# yum install -y gcc gcc-c++ kernel-devel
# mkdir libyuv && cd libyuv
# svn co http://src.chromium.org/svn/trunk/tools/depot_tools .
# ./gclient config http://libyuv.googlecode.com/svn/trunk
# ./gclient sync && cd trunk
# make -j6 V=1 -r libyuv BUILDTYPE=Release
# make -j6 V=1 -r libjpeg BUILDTYPE=Release
# cp out/Release/obj.target/libyuv.a /usr/local/lib
# cp out/Release/obj.target/third_party/libjpeg_turbo/libjpeg_turbo.a /usr/local/lib
# mkdir --parents /usr/local/include/libyuv/libyuv
# cp -rf include/libyuv.h /usr/local/include/libyuv
# cp -rf include/libyuv/*.h /usr/local/include/libyuv/libyuv
#Build libopus
cd /usr/local/src/
wget http://downloads.xiph.org/releases/opus/opus-1.0.2.tar.gz
tar -xvzf opus-1.0.2.tar.gz
cd opus-1.0.2
./configure --with-pic --enable-float-approx && make && make install
#Building opencore-amr
cd /usr/local/src/
git clone git://opencore-amr.git.sourceforge.net/gitroot/opencore-amr/opencore-amr
cd opencore-amr
autoreconf --install && ./configure && make && make install
#Building libgsm - document says to skip it
# sudo yum install gsm-devel
# cd /usr/local/src/
# wget http://www.quut.com/gsm/gsm-1.0.13.tar.gz
# tar -xvzf gsm-1.0.13.tar.gz
# cd gsm-1.0-pl13 && make && make install
# cp -rf ./inc/* /usr/local/include
# cp -rf ./lib/* /usr/local/lib
#Building g729 - document says to skip it
# cd /usr/local/src/
# svn co http://g729.googlecode.com/svn/trunk/ g729b
# cd g729b
# ./autogen.sh && ./configure --enable-static --disable-shared && make && make install
#Building iLBC
cd /usr/local/src/
svn co http://doubango.googlecode.com/svn/branches/2.0/doubango/thirdparties/scripts/ilbc
cd ilbc
wget http://www.ietf.org/rfc/rfc3951.txt
awk -f extract.awk rfc3951.txt
./autogen.sh && ./configure
make && make install
#Building x264
cd /usr/local/src/
wget ftp://ftp.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
tar -xvjf last_x264.tar.bz2
# the output directory may be difference depending on the version and date
cd x264-snapshot-20141218-2245
./configure --enable-shared --enable-pic --disable-asm && make && make install
#Building OpenH264
cd /usr/local/src/
git clone https://github.com/cisco/openh264.git
cd openh264
git checkout v1.1
make ENABLE64BIT=Yes # Use ENABLE64BIT=No for 32bit platforms
make install
#Building FFmpeg
cd /usr/local/src/
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
# grap a release branch
git checkout n1.2
# configure source code
./configure \
--extra-cflags="-fPIC" \
--extra-ldflags="-lpthread" \
--enable-pic --enable-memalign-hack --enable-pthreads \
--enable-shared --disable-static \
--disable-network --enable-pthreads \
--disable-ffmpeg --disable-ffplay --disable-ffserver --disable-ffprobe \
--enable-libx264 --enable-encoder=libx264 --enable-decoder=h264 \
--enable-gpl --enable-nonfree \
--enable-encoder=h263 --enable-encoder=h263p --enable-decoder=h263 \
--disable-debug
# to force enabling h264, append to the configure command: --enable-libx264 --enable-encoder=libx264 --enable-decoder=h264
# to force enabling h263 and h263+, append to the configure command: --enable-encoder=h263 --enable-encoder=h263p --enable-decoder=h263
# build and install
make && make install
#Building Doubango
cd /usr/local/src/
svn checkout http://doubango.googlecode.com/svn/branches/2.0/doubango doubango
cd doubango
chmod 755 ./autogen.sh && ./autogen.sh
#./configure --with-doubango=/usr/local/src/doubango --with-ssl --with-srtp --with-vpx --with-yuv --with-amr --with-speex --with-speexdsp --with-opus --with-gsm --with-ilbc --with-g729 --with-ffmpeg
./configure --with-doubango=/usr/local/src/doubango --with-ssl --with-srtp --with-vpx --with-amr --with-speex --with-speexdsp --with-opus --with-ilbc --with-ffmpeg
make && make install
#Building webrtc2sip
cd /usr/local/src/
yum install -y libxml2-devel
svn co https://webrtc2sip.googlecode.com/svn/trunk/ webrtc2sip
cd webrtc2sip
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig"
export PREFIX=/opt/webrtc2sip
./autogen.sh && ./configure --prefix=$PREFIX CFLAGS='-lpthread' LDFLAGS='-ldl' LIBS='-ldl'
make clean && make && make install
cp -f ./config.xml $PREFIX/sbin/config.xml
# generate cert
cd /opt/webrtc2sip/sbin
sudo openssl req -new > new.ssl.csr
sudo openssl rsa -in privkey.pem -out new.cert.key
sudo openssl x509 -in new.ssl.csr -out new.cert.cert -req -signkey new.cert.key -days 999999
sudo mkdir -p /etc/ssl/certs/
sudo cp new.cert.cert /etc/ssl/certs/server.crt
sudo chmod 640 /etc/ssl/certs/server.crt
sudo mkdir -p /etc/ssl/private/
sudo cp new.cert.key /etc/ssl/private/server.key
sudo chmod 640 /etc/ssl/private/server.key
#config.xml
cd /opt/webrtc2sip/sbin
cp config.xml config.bak.xml
cat <<EOF > config.xml
<?xml version="1.0" encoding="utf-8" ?>
<!-- Please check the technical guide (http://webrtc2sip.org/technical-guide-1.0.pdf) for more information on how to adjust this file -->
<config>
<debug-level>INFO</debug-level>
<transport>udp;*;10060</transport>
<transport>ws;*;10060</transport>
<transport>wss;*;10062</transport>
<!--transport>tcp;*;10063</transport-->
<!--transport>tls;*;10064</transport-->
<enable-rtp-symetric>yes</enable-rtp-symetric>
<enable-100rel>no</enable-100rel>
<enable-media-coder>yes</enable-media-coder>
<enable-videojb>yes</enable-videojb>
<video-size-pref>vga</video-size-pref>
<rtp-buffsize>65535</rtp-buffsize>
<avpf-tail-length>100;400</avpf-tail-length>
<srtp-mode>optional</srtp-mode>
<srtp-type>sdes;dtls</srtp-type>
<dtmf-type>rfc4733</dtmf-type>
<codecs>opus;pcma;pcmu;vp8;h264-bp;h264-mp;h263;h263+</codecs>
<codec-opus-maxrates>48000;48000</codec-opus-maxrates>
<stun-server>stun.l.google.com;19302;;</stun-server>
<enable-icestun>yes</enable-icestun>
<max-fds>-1</max-fds>
<!--nameserver>66.66.66.6</nameserver-->
<ssl-certificates>
/etc/ssl/private/server.key;
/etc/ssl/certs/server.crt;
yes
</ssl-certificates>
<!-- ***CLICK-TO-CALL SERVICE*** -->
<transport>c2c;*;10070</transport>
<transport>c2cs;*;10072</transport>
<database>sqlite;*</database>
<!--account-mail>smtps;*;*;auth.smtp.1and1.fr;465;noreply@example.com;noreply@example.com;mysecret</account-mail-->
<!--account-sip-caller>*;sip:a@example.com;a;example.com;mysecret</account-sip-caller-->
</config>
EOF
# upstart webrtc2sip
echo 'Defaults:root !requiretty' > /etc/sudoers.d/888-cloud-init-requiretty
service ntpd restart
mkdir -p /var/log/webrtc2sip
touch /var/log/webrtc2sip/webrtc2sip.log
chmod 666 /var/log/webrtc2sip/webrtc2sip.log
cat <<EOF > /etc/init/webrtc2sip.conf
description "webrtc2sip"
start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown
respawn
script
exec sudo -u root /opt/webrtc2sip/sbin/webrtc2sip --config=/opt/webrtc2sip/sbin/config.xml >> /var/log/webrtc2sip/webrtc2sip.log 2>&1
end script
EOF
start webrtc2sip
#tail logs
tail -f /var/log/webrtc2sip/webrtc2sip.log
# test webrtc2sip
# cd /opt/webrtc2sip/sbin
# ./webrtc2sip --help
# ./webrtc2sip
@dahili
Copy link

dahili commented May 3, 2018

Hello my friend, do you offer paid support? or reccomend me developer for paid support?
to build custom installations on CentOS-6.9-X86_64
doubango, click2call, webrtc2sip, and configure asterisk to use it?
dahili dot network at g mail dot com

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment