|
3 | 3 | #
|
4 | 4 | # Base image Ubuntu 18.04
|
5 | 5 |
|
6 |
| -FROM ubuntu:18.04 |
7 | 6 |
|
8 |
| -ENV DEBIAN_FRONTEND=noninteractive |
9 |
| -ENV MEDIA_SDK_VER=18.4.0 |
| 7 | +FROM ubuntu:18.04 AS owt-build |
| 8 | +WORKDIR /home |
| 9 | + |
| 10 | +# COMMON BUILD TOOLS |
| 11 | +RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y -q --no-install-recommends build-essential autoconf make git wget pciutils cpio libtool lsb-release ca-certificates pkg-config bison flex libcurl4-gnutls-dev zlib1g-dev nasm yasm m4 autoconf libtool automake cmake libfreetype6-dev |
| 12 | + |
| 13 | + |
| 14 | +# Build libnice |
| 15 | +ARG NICE_VER="0.1.4" |
| 16 | +ARG NICE_REPO=http://nice.freedesktop.org/releases/libnice-${NICE_VER}.tar.gz |
| 17 | +ARG LIBNICE_PATCH_VER="4.3" |
| 18 | +ARG LIBNICE_PATCH_REPO=https://github.com/open-webrtc-toolkit/owt-server/archive/v${LIBNICE_PATCH_VER}.tar.gz |
| 19 | + |
| 20 | +RUN apt-get update && apt-get install -y -q --no-install-recommends libglib2.0-dev |
| 21 | + |
| 22 | +RUN wget -O - ${NICE_REPO} | tar xz && \ |
| 23 | + cd libnice-${NICE_VER} && \ |
| 24 | + wget -O - ${LIBNICE_PATCH_REPO} | tar xz && \ |
| 25 | + patch -p1 < owt-server-${LIBNICE_PATCH_VER}/scripts/patches/libnice014-agentlock.patch && \ |
| 26 | + patch -p1 < owt-server-${LIBNICE_PATCH_VER}/scripts/patches/libnice014-agentlock-plus.patch && \ |
| 27 | + patch -p1 < owt-server-${LIBNICE_PATCH_VER}/scripts/patches/libnice014-removecandidate.patch && \ |
| 28 | + patch -p1 < owt-server-${LIBNICE_PATCH_VER}/scripts/patches/libnice014-keepalive.patch && \ |
| 29 | + patch -p1 < owt-server-${LIBNICE_PATCH_VER}/scripts/patches/libnice014-startcheck.patch && \ |
| 30 | + ./configure --prefix="/usr/local" --libdir=/usr/local/lib/x86_64-linux-gnu && \ |
| 31 | + make -s V=0 && \ |
| 32 | + make install |
| 33 | + |
| 34 | + |
| 35 | +# Build open ssl |
| 36 | +ARG OPENSSL_BASE="1.0.2" |
| 37 | +ARG OPENSSL_VER="1.0.2t" |
| 38 | +ARG OPENSSL_REPO=http://www.openssl.org/source/old/${OPENSSL_BASE}/openssl-${OPENSSL_VER}.tar.gz |
| 39 | + |
| 40 | +RUN wget -O - ${OPENSSL_REPO} | tar xz && \ |
| 41 | + cd openssl-${OPENSSL_VER} && \ |
| 42 | + ./config no-ssl3 --prefix="/usr/local" -fPIC && \ |
| 43 | + make depend && \ |
| 44 | + make -s V=0 && \ |
| 45 | + make install |
| 46 | + |
| 47 | + |
| 48 | +# Build libre |
| 49 | +ARG LIBRE_VER="v0.4.16" |
| 50 | +ARG LIBRE_REPO=https://github.com/creytiv/re.git |
| 51 | + |
| 52 | +RUN git clone ${LIBRE_REPO} && \ |
| 53 | + cd re && \ |
| 54 | + git checkout ${LIBRE_VER} && \ |
| 55 | + make SYSROOT_ALT="/usr" RELEASE=1 && \ |
| 56 | + make install SYSROOT_ALT="/usr" RELEASE=1 PREFIX="/usr" |
| 57 | + |
| 58 | + |
| 59 | +# Build usrsctp |
| 60 | +ARG USRSCTP_VERSION="30d7f1bd0b58499e1e1f2415e84d76d951665dc8" |
| 61 | +ARG USRSCTP_FILE="${USRSCTP_VERSION}.tar.gz" |
| 62 | +ARG USRSCTP_EXTRACT="usrsctp-${USRSCTP_VERSION}" |
| 63 | +ARG USRSCTP_URL="https://github.com/sctplab/usrsctp/archive/${USRSCTP_FILE}" |
| 64 | + |
| 65 | +RUN wget -O - ${USRSCTP_URL} | tar xz && \ |
| 66 | + mv ${USRSCTP_EXTRACT} usrsctp && \ |
| 67 | + cd usrsctp && \ |
| 68 | + ./bootstrap && \ |
| 69 | + ./configure --prefix="/usr/local" --libdir=/usr/local/lib/x86_64-linux-gnu && \ |
| 70 | + make && \ |
| 71 | + make install |
| 72 | + |
| 73 | + |
| 74 | +# Build libsrtp2 |
| 75 | +ARG SRTP2_VER="2.1.0" |
| 76 | +ARG SRTP2_REPO=https://codeload.github.com/cisco/libsrtp/tar.gz/v${SRTP2_VER} |
| 77 | + |
| 78 | +RUN apt-get update && apt-get install -y -q --no-install-recommends curl |
| 79 | + |
| 80 | +RUN curl -o libsrtp-${SRTP2_VER}.tar.gz ${SRTP2_REPO} && \ |
| 81 | + tar xzf libsrtp-${SRTP2_VER}.tar.gz && \ |
| 82 | + cd libsrtp-${SRTP2_VER} && \ |
| 83 | + export PKG_CONFIG_PATH="/usr/local/lib/x86_64-linux-gnu/pkgconfig" && \ |
| 84 | + export CFLAGS="-fPIC" && \ |
| 85 | + ./configure --enable-openssl --prefix="/usr/local" --with-openssl-dir="/usr/local" && \ |
| 86 | + make -s V=0 && \ |
| 87 | + make install |
| 88 | + |
| 89 | + |
| 90 | +# Fetch FFmpeg source |
| 91 | +ARG FFMPEG_VER="4.1.3" |
| 92 | +ARG FFMPEG_DIR="ffmpeg-${FFMPEG_VER}" |
| 93 | +ARG FFMPEG_SRC="${FFMPEG_DIR}.tar.bz2" |
| 94 | +ARG FFMPEG_SRC_URL="http://ffmpeg.org/releases/${FFMPEG_SRC}" |
| 95 | +ARG FFMPEG_SRC_MD5SUM="9985185a8de3678e5b55b1c63276f8b5" |
| 96 | + |
| 97 | +RUN wget ${FFMPEG_SRC_URL} && tar xf ${FFMPEG_SRC} && mv ${FFMPEG_DIR} FFmpeg && \ |
| 98 | + cd FFmpeg ; |
| 99 | +# Compile FFmpeg |
| 100 | +RUN cd /home/FFmpeg && \ |
| 101 | + export PKG_CONFIG_PATH="/usr/local/lib/x86_64-linux-gnu/pkgconfig" && \ |
| 102 | + ./configure --prefix="/usr/local" --libdir=/usr/local/lib/x86_64-linux-gnu --enable-shared --disable-static --disable-libvpx --disable-vaapi --enable-libfreetype && \ |
| 103 | + make -j8 && \ |
| 104 | + make install |
| 105 | + |
| 106 | + |
| 107 | +# Install node |
| 108 | +ARG NODE_VER=v8.15.0 |
| 109 | +ARG NODE_REPO=https://nodejs.org/dist/${NODE_VER}/node-${NODE_VER}-linux-x64.tar.xz |
| 110 | + |
| 111 | +RUN wget ${NODE_REPO} && \ |
| 112 | + tar xf node-${NODE_VER}-linux-x64.tar.xz && \ |
| 113 | + cp node-*/* /usr/local -rf && rm -rf node-* |
| 114 | + |
| 115 | + |
| 116 | +# Fetch SVT-HEVC |
| 117 | +ARG SVT_HEVC_VER=v1.3.0 |
| 118 | +ARG SVT_HEVC_REPO=https://github.com/intel/SVT-HEVC |
| 119 | + |
| 120 | +RUN git clone ${SVT_HEVC_REPO} && \ |
| 121 | + cd SVT-HEVC/Build/linux && \ |
| 122 | + export PKG_CONFIG_PATH="/usr/local/lib/x86_64-linux-gnu/pkgconfig" && \ |
| 123 | + git checkout ${SVT_HEVC_VER} && \ |
| 124 | + mkdir -p ../../Bin/Release && \ |
| 125 | + cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu -DCMAKE_ASM_NASM_COMPILER=yasm ../.. && \ |
| 126 | + make -j8 && \ |
| 127 | + make install |
| 128 | + |
| 129 | + |
| 130 | +# Install json_hpp |
| 131 | +ARG JSON_VER=v3.6.1 |
| 132 | +ARG JSON_LINK=https://github.com/nlohmann/json/releases/download/${JSON_VER}/json.hpp |
| 133 | + |
| 134 | +RUN wget -c ${JSON_LINK} && mv json.hpp /usr/include/ |
| 135 | + |
| 136 | + |
| 137 | +# Build OWT specific modules |
| 138 | +ARG OWTSERVER_REPO=https://github.com/open-webrtc-toolkit/owt-server.git |
| 139 | +ARG OPENH264_MAJOR=1 |
| 140 | +ARG OPENH264_MINOR=7 |
| 141 | +ARG OPENH264_SOVER=4 |
| 142 | +ARG OPENH264_SOURCENAME=v${OPENH264_MAJOR}.${OPENH264_MINOR}.0.tar.gz |
| 143 | +ARG OPENH264_SOURCE=https://github.com/cisco/openh264/archive/v${OPENH264_MAJOR}.${OPENH264_MINOR}.0.tar.gz |
| 144 | +ARG OPENH264_BINARYNAME=libopenh264-${OPENH264_MAJOR}.${OPENH264_MINOR}.0-linux64.${OPENH264_SOVER}.so |
| 145 | +ARG OPENH264_BINARY=https://github.com/cisco/openh264/releases/download/v${OPENH264_MAJOR}.${OPENH264_MINOR}.0/${OPENH264_BINARYNAME}.bz2 |
| 146 | +ARG LICODE_COMMIT="8b4692c88f1fc24dedad66b4f40b1f3d804b50ca" |
| 147 | +ARG LICODE_REPO=https://github.com/lynckia/licode.git |
| 148 | +ARG WEBRTC_REPO=https://github.com/open-webrtc-toolkit/owt-deps-webrtc.git |
| 149 | +ARG SVT_VER=v1.3.0 |
| 150 | +ARG SVT_REPO=https://github.com/intel/SVT-HEVC.git |
| 151 | +ARG SERVER_PATH=/home/owt-server |
| 152 | +ARG OWT_SDK_REPO=https://github.com/open-webrtc-toolkit/owt-client-javascript.git |
| 153 | +ARG OWT_BRANCH=master |
10 | 154 | ARG IMG_APP_PATH=/app_data/
|
11 | 155 | ENV APP_PATH=${IMG_APP_PATH}
|
12 | 156 |
|
13 |
| -# Update the system |
14 |
| -RUN apt-get update |
| 157 | +RUN apt-get update && apt-get install -y -q --no-install-recommends python libglib2.0-dev rabbitmq-server mongodb libboost-thread-dev libboost-system-dev liblog4cxx-dev |
| 158 | + |
| 159 | +# 1. Clone OWT server source code |
| 160 | +# 2. Clone licode source code and patch |
| 161 | +# 3. Clone webrtc source code and patch |
| 162 | +RUN git config --global user.email "[email protected]" && \ |
| 163 | + git config --global user.name "Your Name" && \ |
| 164 | + git clone --depth=1 -b ${OWT_BRANCH} ${OWTSERVER_REPO} && \ |
| 165 | + |
| 166 | + # Install node modules for owt |
| 167 | + npm install -g --loglevel error node-gyp grunt-cli underscore jsdoc && \ |
| 168 | + cd owt-server && npm install nan && \ |
| 169 | + |
| 170 | + # Get openh264 for owt |
| 171 | + cd third_party && \ |
| 172 | + mkdir openh264 && cd openh264 && \ |
| 173 | + wget ${OPENH264_SOURCE} && \ |
| 174 | + wget ${OPENH264_BINARY} && \ |
| 175 | + tar xzf ${OPENH264_SOURCENAME} openh264-${OPENH264_MAJOR}.${OPENH264_MINOR}.0/codec/api && \ |
| 176 | + ln -s -v openh264-${OPENH264_MAJOR}.${OPENH264_MINOR}.0/codec codec && \ |
| 177 | + bzip2 -d ${OPENH264_BINARYNAME}.bz2 && \ |
| 178 | + ln -s -v ${OPENH264_BINARYNAME} libopenh264.so.${OPENH264_SOVER} && \ |
| 179 | + ln -s -v libopenh264.so.${OPENH264_SOVER} libopenh264.so && \ |
| 180 | + echo 'const char* stub() {return "this is a stub lib";}' > pseudo-openh264.cpp && \ |
| 181 | + gcc pseudo-openh264.cpp -fPIC -shared -o pseudo-openh264.so |
| 182 | + |
| 183 | +# Get licode for owt |
| 184 | +RUN cd ${SERVER_PATH}/third_party && git clone ${LICODE_REPO} && \ |
| 185 | + cd licode && \ |
| 186 | + git reset --hard ${LICODE_COMMIT} && \ |
| 187 | + git am ${SERVER_PATH}/scripts/patches/licode/*.patch |
| 188 | + |
| 189 | +# Install webrtc for owt |
| 190 | +RUN cd ${SERVER_PATH}/third_party && mkdir webrtc && cd webrtc &&\ |
| 191 | + export GIT_SSL_NO_VERIFY=1 && \ |
| 192 | + git clone -b 59-server ${WEBRTC_REPO} src && \ |
| 193 | + ./src/tools-woogeen/install.sh && \ |
| 194 | + ./src/tools-woogeen/build.sh |
| 195 | + |
| 196 | +# Install webrtc79 for owt |
| 197 | +RUN mkdir ${SERVER_PATH}/third_party/webrtc-m79 && \ |
| 198 | + cd ${SERVER_PATH}/third_party/webrtc-m79 && \ |
| 199 | + /bin/bash ${SERVER_PATH}/scripts/installWebrtc.sh |
15 | 200 |
|
16 |
| -# Install utils |
17 |
| -RUN apt-get install -y ca-certificates git lsb-release mongodb nodejs npm sudo wget |
| 201 | +# Get js client sdk for owt |
| 202 | +RUN cd /home && git clone --depth=1 -b ${OWT_BRANCH} ${OWT_SDK_REPO} && cd owt-client-javascript/scripts && npm install && grunt && \ |
| 203 | + mkdir ${SERVER_PATH}/third_party/quic-lib && \ |
| 204 | + export LD_LIBRARY_PATH=/usr/local/lib/x86_64-linux-gnu && \ |
| 205 | + cd ${SERVER_PATH}/third_party/quic-lib && wget https://github.com/open-webrtc-toolkit/owt-deps-quic/releases/download/v0.1/dist.tgz && tar xzf dist.tgz && \ |
| 206 | + #Build and pack owt |
| 207 | + cd ${SERVER_PATH} && export PKG_CONFIG_PATH=/usr/local/lib/x86_64-linux-gnu/pkgconfig && ./scripts/build.js -t mcu-all -r -c && \ |
| 208 | + ./scripts/pack.js -t all --install-module --no-pseudo --app-path /home/owt-client-javascript/dist/samples/conference |
18 | 209 |
|
19 |
| -RUN npm install -g grunt-cli node-gyp |
20 | 210 |
|
21 |
| -# Keep proxy environment for sudo |
22 |
| -RUN bash -c "echo \"Defaults env_keep = \\\"http_proxy https_proxy no_proxy \\\"\" >> /etc/sudoers" |
23 |
| -RUN wget https://github.com/Intel-Media-SDK/MediaSDK/releases/download/intel-mediasdk-$MEDIA_SDK_VER/MediaStack.tar.gz -P /tmp |
24 |
| -RUN cd /tmp && tar -zxf MediaStack.tar.gz && cd MediaStack && ./install_media.sh |
25 |
| -RUN rm /tmp/MediaStack.tar.gz && rm -rf /tmp/MediaStack |
26 |
| -ENV MFX_HOME=/opt/intel/mediasdk |
| 211 | +FROM ubuntu:18.04 AS owt-run |
| 212 | +LABEL Description="This is the image for building OWT on Ubuntu 18.04" |
| 213 | +LABEL Vendor="Intel Corporation" |
| 214 | +WORKDIR /home |
27 | 215 |
|
28 |
| -RUN git clone https://github.com/open-webrtc-toolkit/owt-server.git --depth=1 |
29 |
| -RUN mkdir -p ${APP_PATH} |
| 216 | +# Prerequisites |
| 217 | +# Install node |
| 218 | +ARG NODE_VER=v8.15.0 |
| 219 | +ARG NODE_REPO=https://nodejs.org/dist/${NODE_VER}/node-${NODE_VER}-linux-x64.tar.xz |
30 | 220 |
|
31 |
| -WORKDIR /owt-server |
| 221 | +COPY --from=owt-build /home/owt-server/dist /home/owt |
| 222 | +COPY startowt.sh /home/ |
32 | 223 |
|
33 |
| -# This is needed to patch licode |
34 |
| -RUN git config --global user.email "[email protected]" && \ |
35 |
| - git config --global user.name "Your Name" |
| 224 | +RUN apt-get update && apt-get install -y -q --no-install-recommends ca-certificates wget xz-utils rabbitmq-server mongodb libboost-system-dev libboost-thread-dev liblog4cxx-dev libglib2.0-0 libfreetype6-dev curl |
36 | 225 |
|
37 |
| -RUN ./scripts/installDepsUnattended.sh |
| 226 | +RUN wget ${NODE_REPO} && \ |
| 227 | + tar xf node-${NODE_VER}-linux-x64.tar.xz && \ |
| 228 | + cp node-*/* /usr/local -rf && rm -rf node-* |
38 | 229 |
|
39 |
| -# Set workpath to where the app should be installed for the next step of the multibuild |
40 |
| -WORKDIR ${APP_PATH} |
| 230 | +ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib/x86_64-linux-gnu |
0 commit comments