#!/bin/bash
# mmbtools-get - Build, install, uninstall, remove the software stack
# Copyright (C) 20222 Robin ALEXANDER
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
## CONSTANTS
source $(realpath $(dirname $0))/mmbtools-get.conf
print_usage () {
cat <<- EOF
Usage:
mmbtools-get [option] action
Option:
-h, --help Print this help
-b, --branch Specify the odr-mmbTools branch to use
Action:
install Install the programs and the configuration sample
remove Remove the programs and the configuration sample
EOF
}
install_base () {
# Install the essential tools and create the tools root directory
sudo apt-get update
sudo apt-get install -y build-essential automake libtool supervisor
if [ ! -d ${DIR_MMB} ]; then
mkdir ${DIR_MMB}
fi
if [ ! $(grep inet_http_server /etc/supervisor/supervisord.conf) ]; then
cat << EOF | sudo tee -a /etc/supervisor/supervisord.conf > /dev/null
[inet_http_server]
port = 8001
username = odr ; Auth username
password = odr ; Auth password
EOF
fi
}
install_audioenc () {
# Install mmb-tools: audio encoder
sudo apt-get install -y libzmq3-dev libzmq5 libvlc-dev vlc-data vlc-plugin-base libcurl4-openssl-dev pkg-config
if [ ! -d ${DIR_AUDIO} ]; then
pushd ${DIR_MMB}
git clone https://github.com/Opendigitalradio/ODR-AudioEnc.git --branch ${1}
popd
fi
pushd ${DIR_AUDIO}
./bootstrap
./configure --enable-vlc
make
sudo make install
make clean
popd
}
install_padenc () {
# Install mmb-tools: PAD encoder
sudo apt-get install -y libmagickwand-dev
if [ ! -d ${DIR_PAD} ]; then
pushd ${DIR_MMB}
git clone https://github.com/Opendigitalradio/ODR-PadEnc.git --branch ${1}
popd
fi
pushd ${DIR_PAD}
./bootstrap
./configure
make
sudo make install
make clean
popd
}
install_dabmux () {
# Install mmb-tools: dab multiplexer
sudo apt-get install -y libboost-system-dev libcurl4-openssl-dev python3-zmq
if [ ! -d ${DIR_MUX} ]; then
pushd ${DIR_MMB}
git clone https://github.com/Opendigitalradio/ODR-DabMux.git --branch ${1}
popd
fi
pushd ${DIR_MUX}
./bootstrap.sh
## Temporary, until ODR-DabMux configure is modified
arch=$(uname -m)
if [ "${arch}" = "armv7l" ]; then
./configure --with-boost-libdir=/usr/lib/arm-linux-gnueabihf
else
./configure
fi
make
sudo make install
make clean
popd
}
install_dabmod () {
# Install mmb-tools: modulator
sudo apt-get install -y libfftw3-dev libsoapysdr-dev libuhd-dev
if [ ! -d ${DIR_MOD} ]; then
pushd ${DIR_MMB}
git clone https://github.com/Opendigitalradio/ODR-DabMod.git --branch ${1}
popd
fi
pushd ${DIR_MOD}
./bootstrap.sh
./configure CFLAGS="-O3 -DNDEBUG" CXXFLAGS="-O3 -DNDEBUG" --enable-fast-math --disable-zeromq
make
sudo make install
make clean
popd
}
install_fdkaac () {
# Install mmb-tools: fdk-aac
if [ ! -d ${DIR_FDKAAC} ]; then
pushd ${DIR_MMB}
git clone https://github.com/Opendigitalradio/fdk-aac.git
popd
fi
pushd ${DIR_FDKAAC}
./bootstrap
./configure
make
sudo make install
make clean
popd
}
install_srccmp () {
# Install mmb-tools: source companion
if [ ! -d ${DIR_SRCCMP} ]; then
pushd ${DIR_MMB}
git clone https://github.com/Opendigitalradio/ODR-SourceCompanion.git --branch ${1}
popd
fi
pushd ${DIR_SRCCMP}
./bootstrap
./configure
make
sudo make install
make clean
popd
}
install_encmgr () {
# Install mmb-tools: encoder manager
sudo apt-get install -y python3-cherrypy3 python3-jinja2 python3-serial python3-yaml supervisor python3-pysnmp4
if [ ! -d ${DIR_ENCMGR} ]; then
pushd ${DIR_MMB}
git clone https://github.com/Opendigitalradio/ODR-EncoderManager.git --branch ${1}
popd
fi
## Add the current user to the dialout and audio groups
sudo usermod --append --group dialout $(id --user --name)
sudo usermod --append --group audio $(id --user --name)
}
install_config () {
# Copy the configuration files
if [ -d ${DIR_CONFIG} ]; then
rm -r ${DIR_CONFIG}
fi
cp -r $(realpath $(dirname $0))/../${CONFIG_NAME} ${DIR_CONFIG}
sudo ln -s ${DIR_CONFIG}/supervisor/*.conf /etc/supervisor/conf.d/
## Adapt the supervisor configuration files
sed -e "s;user=pi;user=$(id --user --name);g" -i ${DIR_CONFIG}/supervisor/*.conf
sed -e "s;group=pi;group=$(id --group --name);g" -i ${DIR_CONFIG}/supervisor/*.conf
sed -e "s;/home/pi;${HOME};g" -i ${HOME}/config/supervisor/*.conf
## Adapt the ODR-EncoderManager configuration file
sed -e "s;/home/pi;${HOME};g" -i ${DIR_CONFIG}/encodermanager.json
sed -e "s;\"user\": \"pi\";\"user\": \"$(id --user --name)\";g" -i ${DIR_CONFIG}/encodermanager.json
sed -e "s;\"group\": \"pi\";\"group\": \"$(id --group --name)\";g" -i ${DIR_CONFIG}/encodermanager.json
## Adapt the odr-misc.conf
sed -e "s;--host=raspberrypi.local;--host=$(hostname -I | awk '{print $1}');" -i ${DIR_CONFIG}/supervisor/ODR-misc.conf
## Restart supervisor
sudo supervisorctl reread
sudo supervisorctl reload
echo "Sample configuration files installed"
}
install () {
# Clone the sources, build and install programs, clean-up
install_base ${1}
install_fdkaac ${1}
install_audioenc ${1}
install_padenc ${1}
install_dabmux ${1}
install_dabmod ${1}
install_srccmp ${1}
install_encmgr ${1}
install_config
sudo ldconfig
sudo apt-get purge -y
sudo rm -rf /var/lib/apt/lists/*
echo "ODR-mmbTools suite and configuration files installed"
}
remove () {
# Uninstall programs
for makefile in $(ls ${DIR_MMB}/**/Makefile); do
pushd $(dirname ${makefile})
sudo make uninstall
popd
done
# Delete sources
rm -rf ${DIR_MMB}
# Delete configuration files
rm -rf ${DIR_CONFIG}
# Update supervisor
sudo rm /etc/supervisor/conf.d/ODR-*
sudo supervisorctl reread
sudo supervisorctl reload
echo "ODR-mmbTools suite and configuration files removed"
}
# MAIN PROGRAM
branch="master"
action=""
while [ "$#" -gt 0 ] ; do
case "${1}" in
(-h|--help) print_usage; exit 0 ;;
(-b|--branch) branch="${2}" ; shift ;;
install) action="install" ;;
remove) action="remove" ;;
*) print_usage; exit 1 ;;
esac
shift
done
if [ "${action}" == "install" ]; then
install ${branch}
else
remove
fi