From 6e2169c41fd68754cc093c442393627828df45e5 Mon Sep 17 00:00:00 2001 From: Tobias Blomberg Date: Tue, 2 Jan 2024 17:55:52 +0100 Subject: [PATCH] Update container build for Debian and Ubuntu --- docker/debian-build/Dockerfile | 87 +++++++++++++++++------- docker/debian-build/build-svxlink.sh | 23 +++---- docker/ubuntu-build/Dockerfile | 99 +++++++++++++++++++--------- docker/ubuntu-build/build-svxlink.sh | 23 +++---- 4 files changed, 155 insertions(+), 77 deletions(-) diff --git a/docker/debian-build/Dockerfile b/docker/debian-build/Dockerfile index e5f65ac90..19b4fcf2f 100644 --- a/docker/debian-build/Dockerfile +++ b/docker/debian-build/Dockerfile @@ -1,56 +1,95 @@ -# Build with: -# docker build --pull -t svxlink-debian-build . # -# Run with: -# docker run -it --rm --hostname debian-build svxlink-debian-build +# Build container image with: +# podman build --pull -t svxlink-debian-build . +# +# Optional build arguments: +# --build-arg=FROM= +# --build-arg=SOUNDS_VER= +# --build-arg=SOUNDS_LANG= +# --build-arg=SOUNDS_VOICE= +# --build-arg=SOUNDS_RATE= +# --build-arg=SOUNDS_URL= +# --build-arg=GIT_URL_DEFAULT= +# --build-arg=GIT_SSL_NO_VERIFY_DEFAULT= +# --build-arg=GIT_BRANCH_DEFAULT= +# --build-arg=NUM_CORES_DEFAULT= +# +# Run container with: +# podman run -it --rm --hostname debian-build --userns=keep-id svxlink-debian-build # # For using sound inside the docker container add: -# --privileged -v /dev/snd:/dev/snd -# -e HOSTAUDIO_GID=$(stat -c "%g" /dev/snd/timer) +# --privileged -v /dev/snd:/dev/snd # -# To import your git config add (mileage may vary): -# -v ${HOME}/.gitconfig:/home/svxlink/.gitconfig:ro +# To import your git config add: +# -v ${HOME}/.gitconfig:/home/svxlink/.gitconfig:ro # -# To use a specific git repositoty instead of the default one: -# -e GIT_URL=username@your.repo:/path/to/svxlink.git +# To use a specific git repository instead of the default one: +# -e GIT_URL=username@your.repo.srv:/path/to/svxlink.git +# -e GIT_URL=https://your.repo.srv/path/to/svxlink.git +# -e GIT_SSL_NO_VERIFY=true # # To build another branch than master: -# -e GIT_BRANCH=the_branch +# -e GIT_BRANCH=the_branch +# +# To use the local workingcopy rather then cloning the repo in the container: +# -v $(pwd)/../..:/home/svxlink/svxlink:ro # # To use more than one CPU core when compiling: -# -e NUM_CORES=8 +# -e NUM_CORES=8 +# +# Build software with: +# ./build-svxlink.sh # +# Run software with: +# svxlink -FROM debian +ARG FROM=debian:latest + +FROM ${FROM} MAINTAINER Tobias Blomberg # Install required packages and set up the svxlink user RUN apt-get update && \ apt-get -y install git cmake g++ make libsigc++-2.0-dev libgsm1-dev \ libpopt-dev tcl8.6-dev libgcrypt20-dev libspeex-dev \ - libasound2-dev alsa-utils vorbis-tools libqt4-dev \ - libopus-dev librtlsdr-dev libcurl4-openssl-dev curl sudo + libasound2-dev alsa-utils vorbis-tools qtbase5-dev \ + qttools5-dev qttools5-dev-tools libopus-dev \ + librtlsdr-dev libjsoncpp-dev libcurl4-openssl-dev \ + libgpiod-dev libogg-dev curl sudo #RUN apt-get -y install groff doxygen +ARG SOUNDS_VER="19.09.99.3" +ARG SOUNDS_LANG="en_US" +ARG SOUNDS_VOICE="heather" +ARG SOUNDS_RATE="16k" +ARG SOUNDS_URL="https://github.com/sm0svx/svxlink-sounds-${SOUNDS_LANG}-${SOUNDS_VOICE}/releases/download/${SOUNDS_VER}/svxlink-sounds-${SOUNDS_LANG}-${SOUNDS_VOICE}-${SOUNDS_RATE}-${SOUNDS_VER}.tar.bz2" + # Install svxlink audio files RUN mkdir -p /usr/share/svxlink/sounds && \ cd /usr/share/svxlink/sounds && \ - curl -LO https://github.com/sm0svx/svxlink-sounds-en_US-heather/releases/download/14.08/svxlink-sounds-en_US-heather-16k-13.12.tar.bz2 && \ + curl -LO ${SOUNDS_URL} && \ tar xvaf svxlink-sounds-* && \ - ln -s en_US-heather-16k en_US && \ + ln -s ${SOUNDS_LANG}-${SOUNDS_VOICE}-${SOUNDS_RATE} ${SOUNDS_LANG} && \ rm svxlink-sounds-* -# Set up password less sudo for user svxlink +# Set up password-less sudo for user svxlink ADD sudoers-svxlink /etc/sudoers.d/svxlink RUN chmod 0440 /etc/sudoers.d/svxlink -ENV GIT_URL=https://github.com/sm0svx/svxlink.git \ - GIT_BRANCH=master \ - NUM_CORES=1 +ARG GIT_URL_DEFAULT="https://github.com/sm0svx/svxlink.git" +ARG GIT_SSL_NO_VERIFY_DEFAULT="false" +ARG GIT_BRANCH_DEFAULT="master" +ARG NUM_CORES_DEFAULT="1" + +ENV GIT_URL=${GIT_URL_DEFAULT} \ + GIT_SSL_NO_VERIFY=${GIT_SSL_NO_VERIFY_DEFAULT} \ + GIT_BRANCH=${GIT_BRANCH_DEFAULT} \ + NUM_CORES=${NUM_CORES_DEFAULT} RUN useradd -s /bin/bash svxlink ADD build-svxlink.sh /home/svxlink/ -RUN chown -R svxlink.svxlink /home/svxlink +RUN chown -R svxlink:svxlink /home/svxlink -ADD entrypoint.sh / -ENTRYPOINT ["/entrypoint.sh"] +WORKDIR /home/svxlink +USER svxlink:svxlink +ENTRYPOINT ["/bin/bash"] diff --git a/docker/debian-build/build-svxlink.sh b/docker/debian-build/build-svxlink.sh index 902993e19..a5cb4309a 100755 --- a/docker/debian-build/build-svxlink.sh +++ b/docker/debian-build/build-svxlink.sh @@ -1,25 +1,26 @@ -#!/bin/bash -xe +#!/bin/bash -x + +set -euo pipefail + +GIT_BRANCH=${GIT_BRANCH:-master} # Make sure that we are in the home directory cd # Clone or update the repo if [[ ! -d svxlink ]]; then - git clone $GIT_URL svxlink + git clone --branch=$GIT_BRANCH $GIT_URL svxlink cd svxlink else cd svxlink - git fetch - git checkout master - git reset --hard origin/master -fi - -# Checkout the wanted branch -if [ -n "$GIT_BRANCH" ]; then - git checkout $GIT_BRANCH + if [[ -w . ]]; then + git fetch + git checkout $GIT_BRANCH + git reset --hard origin/$GIT_BRANCH + fi fi -# Find out how many cores we've got +# How many cores to use during the build num_cores=${NUM_CORES:-1} # Create a build directory and build svxlink diff --git a/docker/ubuntu-build/Dockerfile b/docker/ubuntu-build/Dockerfile index 43b7ff37e..c7e53e74e 100644 --- a/docker/ubuntu-build/Dockerfile +++ b/docker/ubuntu-build/Dockerfile @@ -1,59 +1,96 @@ -# Build with: -# docker build --pull -t svxlink-ubuntu-build . # -# Run with: -# docker run -it --rm --hostname ubuntu-build svxlink-ubuntu-build +# Build container image with: +# podman build --pull -t svxlink-ubuntu-build . +# +# Optional build arguments: +# --build-arg=FROM= +# --build-arg=SOUNDS_VER= +# --build-arg=SOUNDS_LANG= +# --build-arg=SOUNDS_VOICE= +# --build-arg=SOUNDS_RATE= +# --build-arg=SOUNDS_URL= +# --build-arg=GIT_URL_DEFAULT= +# --build-arg=GIT_SSL_NO_VERIFY_DEFAULT= +# --build-arg=GIT_BRANCH_DEFAULT= +# --build-arg=NUM_CORES_DEFAULT= +# +# Run container with: +# podman run -it --rm --hostname ubuntu-build --userns=keep-id svxlink-ubuntu-build # # For using sound inside the docker container add: -# --privileged -v /dev/snd:/dev/snd -# -e HOSTAUDIO_GID=$(stat -c "%g" /dev/snd/timer) +# --privileged -v /dev/snd:/dev/snd # -# To import your git config add (your mileage may vary): -# -v ${HOME}/.gitconfig:/home/svxlink/.gitconfig:ro +# To import your git config add: +# -v ${HOME}/.gitconfig:/home/svxlink/.gitconfig:ro # -# To use a specific git repositoty instead of the default one: -# -e GIT_URL=username@your.repo:/path/to/svxlink.git +# To use a specific git repository instead of the default one: +# -e GIT_URL=username@your.repo.srv:/path/to/svxlink.git +# -e GIT_URL=https://your.repo.srv/path/to/svxlink.git +# -e GIT_SSL_NO_VERIFY=true # # To build another branch than master: -# -e GIT_BRANCH=the_branch +# -e GIT_BRANCH=the_branch +# +# To use the local workingcopy rather then cloning the repo in the container: +# -v $(pwd)/../..:/home/svxlink/svxlink:ro # # To use more than one CPU core when compiling: -# -e NUM_CORES=8 +# -e NUM_CORES=8 +# +# Build software with: +# ./build-svxlink.sh # +# Run software with: +# svxlink -FROM ubuntu -MAINTAINER Tobias Blomberg +ARG FROM=ubuntu:latest + +FROM ${FROM} +MAINTAINER Tobias Blomberg # Install required packages and set up the svxlink user -RUN apt update && \ +RUN apt-get update && \ export DEBIAN_FRONTEND=noninteractive && \ - apt -y install git cmake g++ make libsigc++-2.0-dev libgsm1-dev \ - libpopt-dev tcl-dev libgcrypt20-dev libspeex-dev \ - libasound2-dev alsa-utils vorbis-tools qtbase5-dev \ - qttools5-dev qttools5-dev-tools libopus-dev \ - librtlsdr-dev libjsoncpp-dev libcurl4-openssl-dev \ - curl sudo -#RUN apt -y install groff doxygen + apt-get -y install git cmake g++ make libsigc++-2.0-dev libgsm1-dev \ + libpopt-dev tcl8.6-dev libgcrypt20-dev libspeex-dev \ + libasound2-dev alsa-utils vorbis-tools qtbase5-dev \ + qttools5-dev qttools5-dev-tools libopus-dev \ + librtlsdr-dev libjsoncpp-dev libcurl4-openssl-dev \ + libgpiod-dev libogg-dev curl sudo +#RUN apt-get -y install groff doxygen + +ARG SOUNDS_VER="19.09.99.3" +ARG SOUNDS_LANG="en_US" +ARG SOUNDS_VOICE="heather" +ARG SOUNDS_RATE="16k" +ARG SOUNDS_URL="https://github.com/sm0svx/svxlink-sounds-${SOUNDS_LANG}-${SOUNDS_VOICE}/releases/download/${SOUNDS_VER}/svxlink-sounds-${SOUNDS_LANG}-${SOUNDS_VOICE}-${SOUNDS_RATE}-${SOUNDS_VER}.tar.bz2" # Install svxlink audio files RUN mkdir -p /usr/share/svxlink/sounds && \ cd /usr/share/svxlink/sounds && \ - curl -LO https://github.com/sm0svx/svxlink-sounds-en_US-heather/releases/download/19.09.99.1/svxlink-sounds-en_US-heather-16k-19.09.99.1.tar.bz2 && \ + curl -LO ${SOUNDS_URL} && \ tar xvaf svxlink-sounds-* && \ - ln -s en_US-heather-16k en_US && \ + ln -s ${SOUNDS_LANG}-${SOUNDS_VOICE}-${SOUNDS_RATE} ${SOUNDS_LANG} && \ rm svxlink-sounds-* -# Set up password less sudo for user svxlink +# Set up password-less sudo for user svxlink ADD sudoers-svxlink /etc/sudoers.d/svxlink RUN chmod 0440 /etc/sudoers.d/svxlink -ENV GIT_URL=https://github.com/sm0svx/svxlink.git \ - GIT_BRANCH=master \ - NUM_CORES=1 +ARG GIT_URL_DEFAULT="https://github.com/sm0svx/svxlink.git" +ARG GIT_SSL_NO_VERIFY_DEFAULT="false" +ARG GIT_BRANCH_DEFAULT="master" +ARG NUM_CORES_DEFAULT="1" + +ENV GIT_URL=${GIT_URL_DEFAULT} \ + GIT_SSL_NO_VERIFY=${GIT_SSL_NO_VERIFY_DEFAULT} \ + GIT_BRANCH=${GIT_BRANCH_DEFAULT} \ + NUM_CORES=${NUM_CORES_DEFAULT} RUN useradd -s /bin/bash svxlink ADD build-svxlink.sh /home/svxlink/ -RUN chown -R svxlink.svxlink /home/svxlink +RUN chown -R svxlink:svxlink /home/svxlink -ADD entrypoint.sh / -ENTRYPOINT ["/entrypoint.sh"] +WORKDIR /home/svxlink +USER svxlink:svxlink +ENTRYPOINT ["/bin/bash"] diff --git a/docker/ubuntu-build/build-svxlink.sh b/docker/ubuntu-build/build-svxlink.sh index 902993e19..a5cb4309a 100755 --- a/docker/ubuntu-build/build-svxlink.sh +++ b/docker/ubuntu-build/build-svxlink.sh @@ -1,25 +1,26 @@ -#!/bin/bash -xe +#!/bin/bash -x + +set -euo pipefail + +GIT_BRANCH=${GIT_BRANCH:-master} # Make sure that we are in the home directory cd # Clone or update the repo if [[ ! -d svxlink ]]; then - git clone $GIT_URL svxlink + git clone --branch=$GIT_BRANCH $GIT_URL svxlink cd svxlink else cd svxlink - git fetch - git checkout master - git reset --hard origin/master -fi - -# Checkout the wanted branch -if [ -n "$GIT_BRANCH" ]; then - git checkout $GIT_BRANCH + if [[ -w . ]]; then + git fetch + git checkout $GIT_BRANCH + git reset --hard origin/$GIT_BRANCH + fi fi -# Find out how many cores we've got +# How many cores to use during the build num_cores=${NUM_CORES:-1} # Create a build directory and build svxlink