From 6bcfcf0b63b3442b01aa148059cd6531f484c1aa Mon Sep 17 00:00:00 2001 From: "Stanislav Lechev [0xAF]" Date: Tue, 4 Jul 2023 23:29:15 +0300 Subject: [PATCH] rework docker for building versioned images from deb packages. --- docker.sh | 50 +++++++-- docker/deb_based/Dockerfile | 22 ++++ docker/deb_based/Makefile | 18 ++++ docker/deb_based/install-owrxp-extra.sh | 130 ++++++++++++++++++++++++ docker/deb_based/install-owrxp.sh | 36 +++++++ 5 files changed, 248 insertions(+), 8 deletions(-) create mode 100644 docker/deb_based/Dockerfile create mode 100644 docker/deb_based/Makefile create mode 100755 docker/deb_based/install-owrxp-extra.sh create mode 100755 docker/deb_based/install-owrxp.sh diff --git a/docker.sh b/docker.sh index 6375974d..d60b0c58 100755 --- a/docker.sh +++ b/docker.sh @@ -19,13 +19,15 @@ usage () { echo "Usage: ${0} [command]" echo "Available commands:" echo " help Show this usage information" - echo " build Build all docker images" - echo " push Push built docker images to the docker hub" + echo " buildn Build full docker nightly image" + echo " buildr Build full docker release image" + echo " pushn Push built docker nightly image to the docker hub" + echo " pushr Push built docker release image to the docker hub" echo " manifest Compile the docker hub manifest (combines arm and x86 tags into one)" echo " tag Tag a release" } -build () { +buildn () { # build the base images echo -ne "\n\nBuilding the base image.\n\n" time docker build --pull -t ${DH_PROJECT}-base:${ARCHTAG} -f docker/Dockerfiles/Dockerfile-base . @@ -50,7 +52,7 @@ build () { docker tag ${DH_USERNAME}/${DH_PROJECT}-full ${DH_USERNAME}/${DH_PROJECT}-nightly } -push () { +pushn () { #for image in ${IMAGES}; do # docker push ${DH_USERNAME}/${image}:${ARCHTAG} #done @@ -58,6 +60,32 @@ push () { docker push ${DH_USERNAME}/${DH_PROJECT}-nightly } +buildr () { + if [[ -z ${1:-} ]] ; then + echo "Usage: ${0} buildr [version]" + echo "NOTE: The version will be used for tagging." + echo "The image will be build from the current packages in the apt-repo." + echo; echo; + return + fi + + echo -ne "\n\nBuilding release image: $1.\n\n" + docker build --pull --build-arg VERSION=$1 -t ${DH_USERNAME}/${DH_PROJECT}:${1} -f docker/deb_based/Dockerfile . + + docker tag ${DH_USERNAME}/${DH_PROJECT}:${1} ${DH_USERNAME}/${DH_PROJECT} +} + +pushr () { + if [[ -z ${1:-} ]] ; then + echo "Usage: ${0} pushr [version]" + echo; echo; + return + fi + docker push ${DH_USERNAME}/${DH_PROJECT}:${1} + docker push ${DH_USERNAME}/${DH_PROJECT} +} + + manifest () { for image in ${IMAGES}; do # there's no docker manifest rm command, and the create --amend does not work, so we have to clean up manually @@ -110,11 +138,17 @@ run () { } case ${1:-} in - build) - build + buildn) + buildn ;; - push) - push + pushn) + pushn + ;; + buildr) + buildr ${@:2} + ;; + pushr) + pushr ${@:2} ;; manifest) manifest diff --git a/docker/deb_based/Dockerfile b/docker/deb_based/Dockerfile new file mode 100644 index 00000000..2c4b5f69 --- /dev/null +++ b/docker/deb_based/Dockerfile @@ -0,0 +1,22 @@ +FROM debian:bullseye-slim +ARG VERSION +LABEL OpenWebRX+ with All Receivers and Demodulators + +ADD docker/files /files + +COPY docker/deb_based/install-owrxp.sh docker/scripts/run.sh / +RUN /install-owrxp.sh +COPY docker/deb_based/install-owrxp-extra.sh / +RUN /install-owrxp-extra.sh + +ENV S6_CMD_ARG0="/run.sh" +ENTRYPOINT ["/init"] + +WORKDIR / + +VOLUME /etc/openwebrx +VOLUME /var/lib/openwebrx + +CMD [] + +EXPOSE 8073 diff --git a/docker/deb_based/Makefile b/docker/deb_based/Makefile new file mode 100644 index 00000000..5b428a7f --- /dev/null +++ b/docker/deb_based/Makefile @@ -0,0 +1,18 @@ +DATE=$(shell date +%F) +all: + @docker build -t openwebrxplus-softmbe:$(DATE) -t openwebrxplus-softmbe . + +run: + @docker run --rm -h openwebrxplus-softmbe --name openwebrxplus-softmbe --device /dev/bus/usb -p 8073:8073 -v openwebrxplus-settings:/var/lib/openwebrx openwebrxplus-softmbe + +admin: + @docker exec -it openwebrxplus-softmbe /usr/bin/openwebrx admin adduser af + +push: + @docker tag openwebrxplus-softmbe:$(DATE) slechev/openwebrxplus-softmbe:$(DATE) + @docker tag openwebrxplus-softmbe:$(DATE) slechev/openwebrxplus-softmbe:latest + @docker push slechev/openwebrxplus-softmbe:$(DATE) + @docker push slechev/openwebrxplus-softmbe + +dev: + @S6_CMD_ARG0=/bin/bash docker run -it --rm -p 8073:8073 --device /dev/bus/usb --name owrxp-build --entrypoint /bin/bash openwebrxplus-softmbe diff --git a/docker/deb_based/install-owrxp-extra.sh b/docker/deb_based/install-owrxp-extra.sh new file mode 100755 index 00000000..fbef86f7 --- /dev/null +++ b/docker/deb_based/install-owrxp-extra.sh @@ -0,0 +1,130 @@ +#!/bin/bash +set -euxo pipefail +export MAKEFLAGS="-j12" + +function cmakebuild() { + cd $1 + if [[ ! -z "${2:-}" ]]; then + git checkout $2 + fi + if [[ -f ".gitmodules" ]]; then + git submodule update --init + fi + mkdir build + cd build + cmake ${CMAKE_ARGS:-} .. + make + make install + cd ../.. + rm -rf $1 +} + +case `uname -m` in + arm*) + SDRPLAY_BINARY=SDRplay_RSP_API-ARM32-3.07.2.run + ;; + aarch64*) + SDRPLAY_BINARY=SDRplay_RSP_API-ARM64-3.07.1.run + ;; + x86_64*) + SDRPLAY_BINARY=SDRplay_RSP_API-Linux-3.07.1.run + ;; +esac + + +echo "+ Install dev packages..." +BUILD_PACKAGES="git cmake make patch wget sudo gcc g++ libusb-1.0-0-dev libsoapysdr-dev debhelper cmake libprotobuf-dev protobuf-compiler libcodecserver-dev build-essential xxd qt5-qmake libpulse-dev libfaad-dev libopus-dev libfftw3-dev pkg-config libglib2.0-dev libconfig++-dev libliquid-dev libairspyhf-dev libpopt-dev libiio-dev libad9361-dev libhidapi-dev libasound2-dev qtmultimedia5-dev libqt5serialport5-dev qttools5-dev qttools5-dev-tools libboost-all-dev libfftw3-dev libreadline-dev libusb-1.0-0-dev libudev-dev asciidoctor gfortran libhamlib-dev" +apt-get -y install --no-install-recommends $BUILD_PACKAGES + +echo "+ Install SDRPlay..." +wget --no-http-keep-alive https://www.sdrplay.com/software/$SDRPLAY_BINARY +sh $SDRPLAY_BINARY --noexec --target sdrplay +patch --verbose -Np0 < /files/sdrplay/install-lib.`uname -m`.patch +cd sdrplay +mkdir -p /etc/udev/rules.d +./install_lib.sh +cd .. +rm -rf sdrplay +rm $SDRPLAY_BINARY + +echo "+ Install PerseusSDR..." +git clone https://github.com/Microtelecom/libperseus-sdr.git +cd libperseus-sdr +# latest from master as of 2020-09-04 +git checkout c2c95daeaa08bf0daed0e8ada970ab17cc264e1b +./bootstrap.sh +./configure +make +make install +ldconfig /etc/ld.so.conf.d +cd .. +rm -rf libperseus-sdr + +echo "+ Install AirSpyHF+..." +git clone https://github.com/pothosware/SoapyAirspyHF.git +cmakebuild SoapyAirspyHF 5488dac5b44f1432ce67b40b915f7e61d3bd4853 + + +echo "+ Install RockOProg..." +git clone https://github.com/0xAF/rockprog-linux +cd rockprog-linux +make +cp rockprog /usr/local/bin/ +cd .. +rm -rf rockprog-linux + +echo "+ Install PlutoSDR..." +git clone https://github.com/pothosware/SoapyPlutoSDR.git +cmakebuild SoapyPlutoSDR 93717b32ef052e0dfa717aa2c1a4eb27af16111f + +echo "+ Install FCDPP..." +git clone https://github.com/pothosware/SoapyFCDPP.git +cmakebuild SoapyFCDPP soapy-fcdpp-0.1.1 + +echo "+ Install FreeDV..." +git clone https://github.com/drowe67/codec2.git +cd codec2 +mkdir build +cd build +cmake .. +make +make install +install -m 0755 src/freedv_rx /usr/local/bin +cd ../.. +rm -rf codec2 + +echo "+ Install wsjtx..." +WSJT_DIR=wsjtx-2.6.1 +WSJT_TGZ=${WSJT_DIR}.tgz +wget https://downloads.sourceforge.net/project/wsjt/${WSJT_DIR}/${WSJT_TGZ} +tar xfz ${WSJT_TGZ} +patch -Np0 -d ${WSJT_DIR} < /files/wsjtx/wsjtx-hamlib.patch +mv /files/wsjtx/wsjtx.patch ${WSJT_DIR} +cmakebuild ${WSJT_DIR} +rm ${WSJT_TGZ} + +echo "+ Install HFDL..." +git clone https://github.com/szpajder/libacars.git +cmakebuild libacars v2.1.4 + +git clone https://github.com/szpajder/dumphfdl.git +cmakebuild dumphfdl v1.4.1 + +echo "+ Install Dream (DRM)..." +wget https://downloads.sourceforge.net/project/drm/dream/2.1.1/dream-2.1.1-svn808.tar.gz +tar xvfz dream-2.1.1-svn808.tar.gz +pushd dream +patch -Np0 < /files/dream/dream.patch +qmake CONFIG+=console +make +make install +popd +rm -rf dream +rm dream-2.1.1-svn808.tar.gz + + +echo "+ Clean..." +SUDO_FORCE_REMOVE=yes apt-get -y purge --autoremove $BUILD_PACKAGES systemd udev dbus +apt-get clean +rm -rf /var/lib/apt/lists/* +rm -rf /files diff --git a/docker/deb_based/install-owrxp.sh b/docker/deb_based/install-owrxp.sh new file mode 100755 index 00000000..9e214f94 --- /dev/null +++ b/docker/deb_based/install-owrxp.sh @@ -0,0 +1,36 @@ +#!/bin/bash +set -euxo pipefail +export MAKEFLAGS="-j12" + +case `uname -m` in + arm*) + PLATFORM=armhf + ;; + aarch64*) + PLATFORM=aarch64 + ;; + x86_64*) + PLATFORM=amd64 + ;; +esac + +echo "+ Init..." +apt update +apt install -y --no-install-recommends wget gpg ca-certificates auto-apt-proxy udev + +echo "+ Install S6 services..." +wget https://github.com/just-containers/s6-overlay/releases/download/v1.21.8.0/s6-overlay-${PLATFORM}.tar.gz +tar xzf s6-overlay-${PLATFORM}.tar.gz -C / +rm s6-overlay-${PLATFORM}.tar.gz +mv /files/services/sdrplay /etc/services.d/ +sed -ri 's/^python3 openwebrx.py/openwebrx/' /run.sh + +echo "+ Add repos and update..." +wget -O - https://luarvique.github.io/ppa/openwebrx-plus.gpg | gpg --dearmor -o /etc/apt/trusted.gpg.d/openwebrx-plus.gpg +echo "deb [signed-by=/etc/apt/trusted.gpg.d/openwebrx-plus.gpg] https://luarvique.github.io/ppa/debian ./" > /etc/apt/sources.list.d/openwebrx-plus.list +wget -O - https://repo.openwebrx.de/debian/key.gpg.txt | gpg --dearmor -o /usr/share/keyrings/openwebrx.gpg +echo "deb [signed-by=/usr/share/keyrings/openwebrx.gpg] https://repo.openwebrx.de/debian/ bullseye main" > /etc/apt/sources.list.d/openwebrx.list +apt update + +echo "+ Install OpenWebRX, Soapy modules and some libs..." +DEBIAN_FRONTEND=noninteractive apt install -y openwebrx soapysdr-module-all libpulse0 libfaad2 libopus0 soapysdr-module-sdrplay3 airspyhf alsa-utils libpopt0 libiio0 libad9361-0 libhidapi-hidraw0 libhidapi-libusb0