aboutsummaryrefslogtreecommitdiffstats
path: root/install
diff options
context:
space:
mode:
Diffstat (limited to 'install')
-rw-r--r--install/README.md61
-rw-r--r--install/mmbtools-get266
-rw-r--r--install/mmbtools-get.conf11
3 files changed, 338 insertions, 0 deletions
diff --git a/install/README.md b/install/README.md
new file mode 100644
index 0000000..83e74a0
--- /dev/null
+++ b/install/README.md
@@ -0,0 +1,61 @@
+# Table of contents
+- [Introduction](#introduction)
+- [Installation](#installation)
+- [Removal](#removal)
+
+# Introduction
+The goal of the mmbtools-get shell script is to install:
+- the [odr-mmbtools](https://www.opendigitalradio.org/mmbtools) components developed by the [Open Digital Radio](https://www.opendigitalradio.org/) non-profit association on a clean debian environment
+- Working configuration files that you can later customize as you see fit
+
+# Installation
+## Preliminary notes
+We **highly recommend** that you install odr-mmbTools on a **new debian** environment, starting from the Bullseye release. Since some software components, like the audio encoders or the modulator, are CPU-intensive, we recommend you setup a lite debian environment (ie. without a GUI framework).
+
+If you want to quickly setup a lite clean debian environment, we suggest you use [Vagrant](https://www.vagrantup.com) associated with a virtualization hypervisor, like [Virtualbox](https://www.virtualbox.org). A sample Vagrantfile is available in the Vagrant folder of this repository.
+
+## Steps
+1. Sign-in with your user profile
+1. Update your system:
+ ```
+ sudo apt-get update
+ sudo apt-get upgrade -y
+ ```
+1. Find your time zone:
+ ```
+ timedatectl list-timezones
+ ```
+1. Set your time zone:
+ ```
+ sudo timedatectl set-timezone your_timezone
+ ```
+1. Install the git command:
+ ```
+ sudo apt-get install -y git
+ ```
+1. Clone this repository:
+ ```
+ cd $HOME
+
+ # Clone the stable version of dab-scripts
+ git clone https://github.com/opendigitalradio/dab-scripts.git
+
+ # Or clone the next version of dab-scripts
+ git clone --branch next https://github.com/opendigitalradio/dab-scripts.git
+ ```
+1. Install the ODR-mmbTools suite and the sample configuration folder
+ ```
+ # Install the stable version of odr-mmbTools
+ bash $HOME/dab-scripts/install/mmbtools-get --branch master install
+
+ # Or install the next version of odr-mmbTools
+ bash $HOME/dab-scripts/install/mmbtools-get --branch next install
+ ```
+
+# Removal
+If you wish to remove the odr-mmbTools suite and the sample configuration folder, then follow these steps:
+1. Stop all odr-mmbTools related jobs in supervisor
+2. Remove the ODR-mmbTools software suite and the configuration folder
+ ```
+ bash $HOME/dab-scripts/install/mmbtools-get remove
+ ```
diff --git a/install/mmbtools-get b/install/mmbtools-get
new file mode 100644
index 0000000..2dab049
--- /dev/null
+++ b/install/mmbtools-get
@@ -0,0 +1,266 @@
+#!/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 <https://www.gnu.org/licenses/>.
+#
+
+## 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 <name> 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 libzmq3-dev libuhd-dev libsoapysdr-dev libbladerf-dev liblimesuite-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 --enable-limesdr --enable-bladerf
+ 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 \ No newline at end of file
diff --git a/install/mmbtools-get.conf b/install/mmbtools-get.conf
new file mode 100644
index 0000000..e20380d
--- /dev/null
+++ b/install/mmbtools-get.conf
@@ -0,0 +1,11 @@
+# DEFINE DIRECTORIES
+CONFIG_NAME=config
+DIR_CONFIG=${HOME}/${CONFIG_NAME}
+DIR_MMB=${HOME}/ODR-mmbTools
+DIR_AUDIO=${DIR_MMB}/ODR-AudioEnc
+DIR_PAD=${DIR_MMB}/ODR-PadEnc
+DIR_MUX=${DIR_MMB}/ODR-DabMux
+DIR_MOD=${DIR_MMB}/ODR-DabMod
+DIR_FDKAAC=${DIR_MMB}/fdk-aac
+DIR_SRCCMP=${DIR_MMB}/ODR-SourceCompanion
+DIR_ENCMGR=${DIR_MMB}/ODR-EncoderManager \ No newline at end of file