mirror of
https://github.com/bigbluebutton/docker.git
synced 2025-06-21 12:33:04 +02:00
freeswitch: build ourselves with patches included
This commit is contained in:
parent
ad484aa870
commit
2a0cd91e72
@ -106,7 +106,10 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: mod/freeswitch
|
context: mod/freeswitch
|
||||||
args:
|
args:
|
||||||
|
BBB_BUILD_TAG: {{ .Env.BBB_BUILD_TAG }}
|
||||||
|
TAG_FS_BUILD_FILES: {{ .Env.TAG_FS_BUILD_FILES }}
|
||||||
TAG_FS_CONFIG: {{ .Env.TAG_FS_CONFIG }}
|
TAG_FS_CONFIG: {{ .Env.TAG_FS_CONFIG }}
|
||||||
|
TAG_FREESWITCH: {{ .Env.TAG_FREESWITCH }}
|
||||||
image: alangecker/bbb-docker-freeswitch:{{ .Env.TAG_FS_CONFIG }}
|
image: alangecker/bbb-docker-freeswitch:{{ .Env.TAG_FS_CONFIG }}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
cap_add:
|
cap_add:
|
||||||
|
@ -1,66 +1,88 @@
|
|||||||
FROM debian:bullseye-slim
|
ARG BBB_BUILD_TAG
|
||||||
|
FROM gitlab.senfcall.de:5050/senfcall-public/docker-bbb-build:$BBB_BUILD_TAG AS builder
|
||||||
|
|
||||||
# install dependencies
|
ARG TAG_FREESWITCH
|
||||||
RUN apt-get update && \
|
RUN mkdir -p /build/freeswitch && \
|
||||||
apt-get install -y --no-install-recommends \
|
cd /build/freeswitch && \
|
||||||
subversion curl wget ca-certificates gnupg gnupg2 lsb-release unzip
|
git init && \
|
||||||
|
git remote add origin https://github.com/signalwire/freeswitch.git && \
|
||||||
|
git fetch --depth 1 origin $TAG_FREESWITCH && \
|
||||||
|
git checkout FETCH_HEAD
|
||||||
|
|
||||||
COPY --from=alangecker/bbb-docker-base-java /usr/local/bin/dockerize /usr/local/bin/dockerize
|
# install most recent git version for proper sparse-checkout support
|
||||||
|
# https://stackoverflow.com/questions/72223738/failed-to-initialize-sparse-checkout
|
||||||
|
RUN echo 'deb https://ppa.launchpadcontent.net/git-core/ppa/ubuntu focal main' > /etc/apt/sources.list.d/git-core-ppa.list && \
|
||||||
# install freeswitch
|
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A1715D88E1DF1F24 && \
|
||||||
RUN wget -q -O /usr/share/keyrings/freeswitch-archive-keyring.gpg https://freeswitch-mirror.chandi.it/repo/deb/debian-release/signalwire-freeswitch-repo.gpg && \
|
|
||||||
echo 'deb [signed-by=/usr/share/keyrings/freeswitch-archive-keyring.gpg] http://freeswitch-mirror.chandi.it/repo/deb/debian-release/ bullseye main' > /etc/apt/sources.list.d/freeswitch.list && \
|
|
||||||
apt-get update && \
|
apt-get update && \
|
||||||
apt-get install -y \
|
apt-get install -y git
|
||||||
freeswitch \
|
|
||||||
freeswitch-mod-commands \
|
|
||||||
freeswitch-mod-conference \
|
|
||||||
freeswitch-mod-console \
|
|
||||||
freeswitch-mod-dialplan-xml \
|
|
||||||
freeswitch-mod-dptools \
|
|
||||||
freeswitch-mod-event-socket \
|
|
||||||
freeswitch-mod-native-file \
|
|
||||||
freeswitch-mod-opusfile \
|
|
||||||
freeswitch-mod-opus \
|
|
||||||
freeswitch-mod-sndfile \
|
|
||||||
freeswitch-mod-spandsp \
|
|
||||||
freeswitch-mod-sofia \
|
|
||||||
freeswitch-sounds-en-us-callie \
|
|
||||||
iptables
|
|
||||||
|
|
||||||
# replace mute & unmute sounds
|
# get build files for bbb-freeswitch (build/packages-template/bbb-freeswitch-core/)
|
||||||
RUN wget -q https://gitlab.senfcall.de/senfcall-public/mute-and-unmute-sounds/-/archive/master/mute-and-unmute-sounds-master.zip && \
|
ARG TAG_FS_BUILD_FILES
|
||||||
|
RUN git clone -b $TAG_FS_BUILD_FILES --depth 1 --filter=blob:none --sparse https://github.com/bigbluebutton/bigbluebutton.git /bbb && \
|
||||||
|
cd /bbb && \
|
||||||
|
git sparse-checkout set build/packages-template/bbb-freeswitch-core/ && \
|
||||||
|
cp build/packages-template/bbb-freeswitch-core/* /build/ && \
|
||||||
|
rm -rf /bbb
|
||||||
|
|
||||||
|
# mock files expected by build.sh
|
||||||
|
RUN mkdir -p /build/bbb-voice-conference/config/freeswitch/conf/ && \
|
||||||
|
touch \
|
||||||
|
/build/opts-build.sh \
|
||||||
|
/build/freeswitch.service.build \
|
||||||
|
/build/bbb-voice-conference/config/freeswitch/conf/a \
|
||||||
|
&& \
|
||||||
|
echo "" > /usr/local/bin/fpm
|
||||||
|
|
||||||
|
|
||||||
|
RUN cd /build && ./build.sh
|
||||||
|
|
||||||
|
|
||||||
|
# add english sounds
|
||||||
|
RUN mkdir -p /build/staging/opt/freeswitch/share/freeswitch && \
|
||||||
|
wget http://bigbluebutton.org/downloads/sounds.tar.gz -O sounds.tar.gz && \
|
||||||
|
tar xvfz sounds.tar.gz -C /build/staging/opt/freeswitch/share/freeswitch && \
|
||||||
|
wget https://gitlab.senfcall.de/senfcall-public/mute-and-unmute-sounds/-/archive/master/mute-and-unmute-sounds-master.zip && \
|
||||||
unzip mute-and-unmute-sounds-master.zip && \
|
unzip mute-and-unmute-sounds-master.zip && \
|
||||||
cd mute-and-unmute-sounds-master/sounds/ && \
|
cd mute-and-unmute-sounds-master/sounds && \
|
||||||
find . -name "*.wav" -exec /bin/bash -c "echo {};sox -v 0.3 {} /tmp/tmp.wav; mv /tmp/tmp.wav /usr/share/freeswitch/sounds/en/us/callie/conference/{}" \; && \
|
find . -name "*.wav" -exec /bin/bash -c "sox -v 0.3 {} /tmp/tmp.wav; cp /tmp/tmp.wav /build/staging/opt/freeswitch/share/freeswitch/sounds/en/us/callie/conference/{}" \;
|
||||||
cd ../.. && \
|
|
||||||
rm -r mute-and-unmute-sounds-master mute-and-unmute-sounds-master.zip
|
|
||||||
|
|
||||||
|
|
||||||
# -- get official bbb freeswitch config
|
|
||||||
# we use svn for retrieving the files since the repo is quite large,
|
|
||||||
# git sparse-checkout is not yet available with buster and there
|
|
||||||
# is no other sane way of downloading a single directory via git
|
|
||||||
|
|
||||||
|
# add bigblugbutton config
|
||||||
ARG TAG_FS_CONFIG
|
ARG TAG_FS_CONFIG
|
||||||
RUN svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG_FS_CONFIG/bbb-voice-conference/config/freeswitch/conf /etc/freeswitch \
|
RUN git clone -b $TAG_FS_CONFIG --depth 1 --filter=blob:none --sparse https://github.com/bigbluebutton/bigbluebutton.git /bbb && \
|
||||||
&& rm -rf /etc/freeswitch/.svn
|
cd /bbb && \
|
||||||
|
git sparse-checkout set bbb-voice-conference/config/freeswitch/conf/ && \
|
||||||
|
cp -r /bbb/bbb-voice-conference/config/freeswitch/conf/* /build/staging/opt/freeswitch/etc/freeswitch/
|
||||||
|
|
||||||
# the current available freeswitch-mod-opusfile is broken,
|
|
||||||
# it can't write any .opus files. The fix provided in
|
|
||||||
# https://github.com/signalwire/freeswitch/pull/719/files
|
|
||||||
# is not sufficient as the module still comes without opus
|
# ===============================================
|
||||||
# write support, so we rather switch to the binary built
|
|
||||||
# by bigbluebutton and add its dependencies
|
# we are using ubuntu here, because libjpeg8 is required, but not available in debian
|
||||||
RUN wget -O /usr/lib/freeswitch/mod/mod_opusfile.so https://github.com/bbb-pkg/bbb-freeswitch-core/raw/43f3a47af1fcf5ea559e16bb28b900c925a7f2c3/opt/freeswitch/lib/freeswitch/mod/mod_opusfile.so \
|
FROM ubuntu:20.04
|
||||||
&& wget -O /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb https://launchpad.net/~bigbluebutton/+archive/ubuntu/support/+files/libopusenc0_0.2.1-1bbb1_amd64.deb \
|
RUN apt-get update && \
|
||||||
|
apt-get install -y \
|
||||||
|
xmlstarlet wget iptables curl \
|
||||||
|
libfreetype6 libcurl4 libspeex1 libspeexdsp1 libopus0 libsndfile1 libopusfile0 liblua5.2-0 libjbig0 libldns2 libedit2 libtiff5 libpng16-16 \
|
||||||
|
&& \
|
||||||
|
# install libopusenc0
|
||||||
|
wget -O /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb https://launchpad.net/~bigbluebutton/+archive/ubuntu/support/+files/libopusenc0_0.2.1-1bbb1_amd64.deb \
|
||||||
&& dpkg -i /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb \
|
&& dpkg -i /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb \
|
||||||
&& rm /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb
|
&& rm /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb
|
||||||
|
|
||||||
# add modifications
|
# add dockerize
|
||||||
COPY ./conf /etc/freeswitch/
|
COPY --from=alangecker/bbb-docker-base-java /usr/local/bin/dockerize /usr/local/bin/dockerize
|
||||||
|
|
||||||
|
# copy over built freeswitch & config
|
||||||
|
COPY --from=builder /build/staging/opt /opt
|
||||||
|
COPY --from=builder /build/staging/etc /etc
|
||||||
|
|
||||||
|
RUN ldconfig && \
|
||||||
|
ln -s /opt/freeswitch/conf /etc/freeswitch && \
|
||||||
|
groupadd freeswitch && \
|
||||||
|
useradd --home-dir /opt/freeswitch --shell /usr/sbin/nologin -g freeswitch freeswitch
|
||||||
|
|
||||||
COPY ./entrypoint.sh /entrypoint.sh
|
COPY ./entrypoint.sh /entrypoint.sh
|
||||||
|
COPY ./conf /etc/freeswitch/
|
||||||
|
|
||||||
ENTRYPOINT /entrypoint.sh
|
ENTRYPOINT /entrypoint.sh
|
@ -54,7 +54,7 @@
|
|||||||
for presence.
|
for presence.
|
||||||
-->
|
-->
|
||||||
<!-- Name of the db to use for this profile -->
|
<!-- Name of the db to use for this profile -->
|
||||||
<!--<param name="dbname" value="share_presence"/>-->
|
<param name="dbname" value="sqlite://memory://file:external-ipv6?mode=memory&cache=shared"/>
|
||||||
<!--<param name="presence-hosts" value="$${domain}"/>-->
|
<!--<param name="presence-hosts" value="$${domain}"/>-->
|
||||||
<!--<param name="force-register-domain" value="$${domain}"/>-->
|
<!--<param name="force-register-domain" value="$${domain}"/>-->
|
||||||
<!--all inbound reg will stored in the db using this domain -->
|
<!--all inbound reg will stored in the db using this domain -->
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
for presence.
|
for presence.
|
||||||
-->
|
-->
|
||||||
<!-- Name of the db to use for this profile -->
|
<!-- Name of the db to use for this profile -->
|
||||||
<!--<param name="dbname" value="share_presence"/>-->
|
<param name="dbname" value="sqlite://memory://file:external?mode=memory&cache=shared"/>
|
||||||
<!--<param name="presence-hosts" value="$${domain}"/>-->
|
<!--<param name="presence-hosts" value="$${domain}"/>-->
|
||||||
<!--<param name="force-register-domain" value="$${domain}"/>-->
|
<!--<param name="force-register-domain" value="$${domain}"/>-->
|
||||||
<!--all inbound reg will stored in the db using this domain -->
|
<!--all inbound reg will stored in the db using this domain -->
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash -e
|
||||||
|
|
||||||
# remove all SIP (port 5060) iptable rules
|
# remove all SIP (port 5060) iptable rules
|
||||||
iptables -S INPUT | grep "\-\-dport 5060 " | cut -d " " -f 2- | xargs -rL1 iptables -D
|
iptables -S INPUT | grep "\-\-dport 5060 " | cut -d " " -f 2- | xargs -rL1 iptables -D
|
||||||
@ -15,13 +15,19 @@ for IP in "${ADDR[@]}"; do
|
|||||||
iptables -I INPUT -p udp --dport 5060 -s $IP -j ACCEPT
|
iptables -I INPUT -p udp --dport 5060 -s $IP -j ACCEPT
|
||||||
done
|
done
|
||||||
|
|
||||||
|
mkdir -p /var/freeswitch/meetings
|
||||||
chown -R freeswitch:daemon /var/freeswitch/meetings
|
chown -R freeswitch:daemon /var/freeswitch/meetings
|
||||||
chmod 777 /var/freeswitch/meetings
|
chmod 777 /var/freeswitch/meetings
|
||||||
|
chown -R freeswitch:daemon /opt/freeswitch/var
|
||||||
|
chown -R freeswitch:daemon /opt/freeswitch/etc
|
||||||
|
chmod -R g-rwx,o-rwx /opt/freeswitch/etc
|
||||||
|
|
||||||
# install freeswitch sounds if missing
|
# install freeswitch sounds if missing
|
||||||
SOUNDS_DIR=/usr/share/freeswitch/sounds
|
SOUNDS_DIR=/opt/freeswitch/share/freeswitch/sounds
|
||||||
if [ "$SOUNDS_LANGUAGE" == "de-de-daedalus3" ]; then
|
if [ "$SOUNDS_LANGUAGE" == "en-us-callie" ]; then
|
||||||
|
# default, is already installed
|
||||||
|
echo ""
|
||||||
|
elif [ "$SOUNDS_LANGUAGE" == "de-de-daedalus3" ]; then
|
||||||
if [ ! -d "$SOUNDS_DIR/de/de/daedalus3" ]; then
|
if [ ! -d "$SOUNDS_DIR/de/de/daedalus3" ]; then
|
||||||
echo "sounds package for de-de-daedalus3 not installed yet"
|
echo "sounds package for de-de-daedalus3 not installed yet"
|
||||||
wget -O /tmp/freeswitch-german-soundfiles.zip https://github.com/Daedalus3/freeswitch-german-soundfiles/archive/master.zip
|
wget -O /tmp/freeswitch-german-soundfiles.zip https://github.com/Daedalus3/freeswitch-german-soundfiles/archive/master.zip
|
||||||
@ -36,10 +42,24 @@ if [ "$SOUNDS_LANGUAGE" == "de-de-daedalus3" ]; then
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
SOUNDS_PACKAGE=$(echo "freeswitch-sounds-${SOUNDS_LANGUAGE}" | tr '[:upper:]' '[:lower:]')
|
if [ ! -f $SOUNDS_DIR/$SOUNDS_LANGUAGE.installed ]; then
|
||||||
if ! dpkg -s $SOUNDS_PACKAGE >/dev/null 2>&1; then
|
|
||||||
echo "sounds package for $SOUNDS_LANGUAGE not installed yet"
|
echo "sounds package for $SOUNDS_LANGUAGE not installed yet"
|
||||||
apt-get install $SOUNDS_PACKAGE
|
|
||||||
|
# get filename of latest release for this sound package
|
||||||
|
FILENAME=$(curl -s https://files.freeswitch.org/releases/sounds/ | grep -i $SOUNDS_LANGUAGE 2> /dev/null | awk -F'\"' '{print $8}' | grep -E '\-48000-.*\.gz$' | sort -V | tail -n 1)
|
||||||
|
|
||||||
|
if [ "$FILENAME" = "" ]; then
|
||||||
|
echo "Error: could not find sounds for language '$SOUNDS_LANGUAGE'"
|
||||||
|
echo "make sure to specify a value for SOUNDS_LANGUAGE which exists on https://files.freeswitch.org/releases/sounds/"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
for bitrate in 8000 16000 32000 48000; do
|
||||||
|
URL=https://files.freeswitch.org/releases/sounds/$(echo $FILENAME | sed "s/48000/$bitrate/")
|
||||||
|
wget -O /tmp/sounds.tar.gz $URL
|
||||||
|
tar xvfz /tmp/sounds.tar.gz -C $SOUNDS_DIR
|
||||||
|
done
|
||||||
|
|
||||||
|
touch $SOUNDS_DIR/$SOUNDS_LANGUAGE.installed
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -49,4 +69,4 @@ export SOUNDS_PATH=$SOUNDS_DIR/$(echo "$SOUNDS_LANGUAGE" | sed 's|-|/|g')
|
|||||||
dockerize \
|
dockerize \
|
||||||
-template /etc/freeswitch/vars.xml.tmpl:/etc/freeswitch/vars.xml \
|
-template /etc/freeswitch/vars.xml.tmpl:/etc/freeswitch/vars.xml \
|
||||||
-template /etc/freeswitch/autoload_configs/conference.conf.xml.tmpl:/etc/freeswitch/autoload_configs/conference.conf.xml \
|
-template /etc/freeswitch/autoload_configs/conference.conf.xml.tmpl:/etc/freeswitch/autoload_configs/conference.conf.xml \
|
||||||
/usr/bin/freeswitch -u freeswitch -g daemon -nonat -nf
|
/opt/freeswitch/bin/freeswitch -u freeswitch -g daemon -nonat -nf
|
||||||
|
@ -45,12 +45,14 @@ docker run \
|
|||||||
-e TAG_BBB_WEB=${TAG_BBB_WEB} \
|
-e TAG_BBB_WEB=${TAG_BBB_WEB} \
|
||||||
-e TAG_HTML5=${TAG_HTML5} \
|
-e TAG_HTML5=${TAG_HTML5} \
|
||||||
-e TAG_FS_CONFIG=${TAG_FS_CONFIG} \
|
-e TAG_FS_CONFIG=${TAG_FS_CONFIG} \
|
||||||
|
-e TAG_FS_BUILD_FILES=${TAG_FS_BUILD_FILES} \
|
||||||
-e TAG_LEARNING_DASHBOARD=${TAG_LEARNING_DASHBOARD} \
|
-e TAG_LEARNING_DASHBOARD=${TAG_LEARNING_DASHBOARD} \
|
||||||
-e TAG_RECORDINGS=${TAG_RECORDINGS} \
|
-e TAG_RECORDINGS=${TAG_RECORDINGS} \
|
||||||
-e TAG_WEBRTC_SFU=${TAG_WEBRTC_SFU} \
|
-e TAG_WEBRTC_SFU=${TAG_WEBRTC_SFU} \
|
||||||
-e TAG_WEBHOOKS=${TAG_WEBHOOKS} \
|
-e TAG_WEBHOOKS=${TAG_WEBHOOKS} \
|
||||||
-e TAG_PLAYBACK=${TAG_PLAYBACK} \
|
-e TAG_PLAYBACK=${TAG_PLAYBACK} \
|
||||||
-e TAG_PADS=${TAG_PADS} \
|
-e TAG_PADS=${TAG_PADS} \
|
||||||
|
-e TAG_FREESWITCH=${TAG_FREESWITCH} \
|
||||||
-e DEV_MODE=${DEV_MODE:-false} \
|
-e DEV_MODE=${DEV_MODE:-false} \
|
||||||
-e EXTERNAL_IPv6=${EXTERNAL_IPv6:-} \
|
-e EXTERNAL_IPv6=${EXTERNAL_IPv6:-} \
|
||||||
-e ENABLE_RECORDING=${ENABLE_RECORDING:-false} \
|
-e ENABLE_RECORDING=${ENABLE_RECORDING:-false} \
|
||||||
|
7
tags.env
7
tags.env
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
|
|
||||||
# https://gitlab.senfcall.de/senfcall-public/docker-bbb-build
|
# https://gitlab.senfcall.de/senfcall-public/docker-bbb-build
|
||||||
BBB_BUILD_TAG=v2022-12-08-meteor-290
|
BBB_BUILD_TAG=v2022-12-29-grails-524
|
||||||
|
|
||||||
# https://github.com/bigbluebutton/bigbluebutton
|
# https://github.com/bigbluebutton/bigbluebutton
|
||||||
TAG_COMMON_MESSAGE=v2.5.10
|
TAG_COMMON_MESSAGE=v2.5.10
|
||||||
@ -14,9 +14,10 @@ TAG_BBB_WEB=v2.5.11
|
|||||||
TAG_HTML5=v2.5.10
|
TAG_HTML5=v2.5.10
|
||||||
TAG_RECORDINGS=v2.5.10
|
TAG_RECORDINGS=v2.5.10
|
||||||
|
|
||||||
TAG_LEARNING_DASHBOARD=v2.5.10
|
TAG_FS_CONFIG=v2.6.0
|
||||||
TAG_FS_CONFIG=v2.5.7
|
TAG_FS_BUILD_FILES=v2.6.0
|
||||||
|
|
||||||
|
TAG_FREESWITCH=v1.10.9
|
||||||
|
|
||||||
# individual git submodules
|
# individual git submodules
|
||||||
# use `./scripts/checkout-submodules` to ensure, that the submodules
|
# use `./scripts/checkout-submodules` to ensure, that the submodules
|
||||||
|
Loading…
x
Reference in New Issue
Block a user