Vagrant Debian support (and experimental CentOS)

This changes the Vagrant setup to support multiple installations as multiple
boxes. In addition to Ubuntu Vagrant can now be used to install on Debian
as well as on CentOS.

I took the chance to clean up the .deb install a bit and backported analyzer
and celery to SysV proper so it runs there. Some of the distro specfics were
moved to the install script from the python setup scripts to acheive this.

For the CentOS support I added a rather involved OS prepare script. In the
long term this will be added to the preparing-the-server docs we already have.

I had to switch the default port to http-alt (8080). On CentOS 9080 is registered
for ocsp and getting it to work for apache without hacking SELinux is hard. I
think 8080 is the RFC way to go anyhow. If anyone want to override this it
should be rather easy using the --web-port arg and by hacking Vagrantfile.

The PyOpenSSL code has been refactored for all the distros that the Vagrantfile
now supports.

As far as my checks go, I tried this code with all the distros, uploaded a track
and downloaded a unicode and a ssl podcast and was able to listen to them
in each case.

In the experimental CentOS case, the UI is not up to spec since services
need to get scheduled through systemctl and the status overview (ie. on the /?config page)
do not work properly. They need to be as follows:

```
sudo systemctl start airtime-playout
sudo systemctl start airtime-liquidsoap
sudo systemctl start airtime_analyzer.service
sudo systemctl start airtime-celery.service
```
This commit is contained in:
Lucas Bickel 2017-03-08 12:39:59 +01:00
parent c8b4d40eb2
commit c29285ae48
19 changed files with 448 additions and 201 deletions

53
Vagrantfile vendored
View File

@ -3,10 +3,8 @@
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
# libretime web interface
config.vm.network "forwarded_port", guest: 9080, host:9080
config.vm.network "forwarded_port", guest: 8080, host:8080
# icecast2
config.vm.network "forwarded_port", guest: 8000, host:8000
# liquidsoap input harbors for instreaming (ie. /master)
@ -14,6 +12,11 @@ Vagrant.configure("2") do |config|
# mkdics documentation
config.vm.network "forwarded_port", guest: 8888, host:8888
# make sure we are using nfs (doesn't work out of the box with debian)
config.vm.synced_folder ".", "/vagrant", type: "nfs"
# private network for nfs
config.vm.network "private_network", ip: "192.168.10.100"
config.vm.provider "virtualbox" do |v|
# to run without OOMing we need at least 1GB of RAM
v.memory = 1024
@ -29,21 +32,33 @@ Vagrant.configure("2") do |config|
end
end
# ubuntu/trusty64 alsa setup
# slightly modernized from https://github.com/naomiaro/vagrant-alsa-audio
# https://wiki.ubuntu.com/Audio/UpgradingAlsa/DKMS
config.vm.provision "shell", inline: <<-SHELL
alsa_deb="oem-audio-hda-daily-dkms_0.201703070301~ubuntu14.04.1_all.deb"
wget -nv https://code.launchpad.net/~ubuntu-audio-dev/+archive/ubuntu/alsa-daily/+files/${alsa_deb}
sudo dpkg -i ${alsa_deb}
rm ${alsa_deb}
sudo DEBIAN_FRONTEND=noninteractive apt-get -y -m --force-yes install alsa
sudo usermod -a -G audio vagrant
# liquidsoap runs as apache
sudo usermod -a -G audio www-data
SHELL
config.vm.provision "shell", inline: "cd /vagrant; ./install -fIiapv --web-port=9080"
config.vm.provision "shell", path: "docs/scripts/install.sh"
config.vm.provision "shell", path: "docs/scripts/serve.sh"
# default installer args used for all distros
installer_args="--force --in-place --verbose --postgres --apache --icecast "
# define all the OS boxes we support
config.vm.define "ubuntu" do |os|
os.vm.box = "ubuntu/trusty64"
provision_libretime(os, "ubuntu.sh", installer_args + "--distribution=ubuntu --release=trusty")
end
config.vm.define "debian" do |os|
os.vm.box = "debian/jessie64"
provision_libretime(os, "debian.sh", installer_args + "--distribution=debian --release=jessie")
end
config.vm.define "centos" do |os|
os.vm.box = 'centos/7'
provision_libretime(os, "centos.sh", installer_args + "--ignore-dependencies --distribution=centos --web-user=apache")
end
def provision_libretime(config, prepare_script, installer_args)
# Prepare OS
config.vm.provision "prepare", type: "shell", path: "installer/vagrant/%s" % prepare_script
# Provision LibreTime
config.vm.provision "install", type: "shell", inline: "cd /vagrant; ./install %s --web-port=8080" % installer_args
# Provision docs
config.vm.provision "install-mkdocs", type: "shell", path: "docs/scripts/install.sh"
config.vm.provision "start-mkdocs", type: "shell", path: "docs/scripts/serve.sh"
end
end

View File

@ -91,7 +91,8 @@ class Application_Service_PodcastService
$podcastArray["language"] = htmlspecialchars($rss->get_language());
$podcastArray["copyright"] = htmlspecialchars($rss->get_copyright());
$name = empty($rss->get_author()) ? "" : $rss->get_author()->get_name();
$author = $rss->get_author();
$name = empty($author) ? "" : $author->get_name();
$podcastArray["creator"] = htmlspecialchars($name);
$categories = array();

View File

@ -20,10 +20,10 @@ The easiest way to check out LibreTime for yourself is to run a local instance i
```bash
git clone https://github.com/libretime/libretime.git
cd libretime
vagrant up
vagrant up ubuntu
```
If everything works out, you will find LibreTime on [port 9080](http://localhost:9080), icecast on [port 8000](http://localhost:8000) and the docs on [port 8888](http://localhost:8888).
If everything works out, you will find LibreTime on [port 8080](http://localhost:8080), icecast on [port 8000](http://localhost:8000) and the docs on [port 8888](http://localhost:8888).
Of course, this setup isn't appropriate for production use. For that, check out our [installation instructions](install.md). More information on the vagrant setup are in [the docs](vagrant.md).

View File

@ -4,7 +4,7 @@ These Airtime instructions are outdated, see [install.md](../../install.md) for
The following instructions assume that you have root access (**sudo** on Ubuntu) to a GNU/Linux server, and are familiar with basic command line tasks. Experienced system administrators may prefer to skip to the *Expert install* chapter in the appendix of this book after preparing the server as shown in the steps below.
The recommended Airtime server platform is Debian 7.2 'wheezy'. Ubuntu 12.04 LTS 'Precise Pangolin' is also supported. Users of other GNU/Linux distributions may be able to adapt these instructions to suit their needs.
The recommended Airtime server platform is Debian 8 'jessie'. Ubuntu 14.04 LTS 'Trusty Tahir' is also supported. Users of other GNU/Linux distributions may be able to adapt these instructions to suit their needs.
The server should have at least a 1GHz processor and 1GB of RAM, preferably 2GB RAM or more. If you are using a desktop environment and web browser directly on the server you should install at least 2GB RAM, to avoid swapping to disk.

View File

@ -20,13 +20,25 @@ To get started you clone the repo and run `vagrant up`.
```bash
git clone https://github.com/libretime/libretime.git
cd libretime
vagrant up
vagrant up ubuntu
```
If everything works out, you will find LibreTime on [port 9080](http://localhost:9080), icecast on [port 8000](http://localhost:8000) and the docs on [port 8888](http://localhost:8888).
If everything works out, you will find LibreTime on [port 8080](http://localhost:8080), icecast on [port 8000](http://localhost:8000) and the docs on [port 8888](http://localhost:8888).
Once you reach the web setup GUI you can click through it using the default values. To connect to the vagrant machine you can run `vagrant ssh` in the libretime directory.
Once you reach the web setup GUI you can click through it using the default values. To connect to the vagrant machine you can run `vagrant ssh ubuntu` in the libretime directory.
## Alternative OS installations
With the above instructions LibreTime is installed on Ubuntu Trusty Tahir. The Vagrant setup offers the option to choose a different operation system according to you needs.
| OS | Command | Comment |
| ------ | ------------------- | ------- |
| Ubuntu | `vagrant up ubuntu` | Current default install since it was used by legacy upstream, based on Trusty Tahir . |
| Debian | `vagrant up debian` | Recommended install on Jessie as per the docs. |
| CentOS | `vagrant up centos` | Experimental install on 7.3 with native systemd support and activated SELinux. |
## Troubleshooting
If anything fails during the initial provisioning step you can try running `vagrant provision` to rerun the installer.
If you only want to re-run parts of the installer, use `--provision-with install`. The supported steps are `prepare`, `install`, `install-mkdocs` and `start-mkdocs`.

122
install
View File

@ -1,4 +1,5 @@
#!/bin/bash -e
#-e Causes bash script to exit if any of the installers
#return with a non-zero return value.
@ -75,6 +76,8 @@ _q=0
upgrade="f"
dist=""
code=""
apache_bin="apache2"
function verbose() {
if [[ ${_v} -eq 1 ]]; then
@ -299,6 +302,9 @@ echo "| |___| || \_\ \ | \/\ ___/| | | | Y Y \ ___/ "
echo "|_______ \__||___ /__| \___ >____| |__|__|_| /\___ >"
echo -e " \/ \/ \/ \/ \/\n"
if [ "$dist" = "centos" ]; then
apache_bin="httpd"
fi
if [ "$ignore_dependencies" = "f" ]; then
set +e
@ -324,7 +330,7 @@ if [ "$ignore_dependencies" = "f" ]; then
fi
set -e
else
checkCommandExists "apache2"
checkCommandExists "${apache_bin}"
checkCommandExists "rabbitmqctl"
checkCommandExists "psql"
if [ "$in_place" = "t" ]; then
@ -338,8 +344,10 @@ eval hash "composer" 2>/dev/null
commandFound=$?
set -e
if [[ ! ${commandFound} -eq 0 ]]; then
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
curl -sS https://getcomposer.org/installer > get-composer.php
php ./get-composer.php --install-dir=/usr/local/bin --filename=composer
rm get-composer.php
PATH="${PATH}:/usr/local/bin"
fi
# Run composer (install PHP dependencies) and create a VERSION file
@ -414,9 +422,13 @@ if [ "$apache" = "t" ]; then
loud "\n-----------------------------------------------------"
loud " * Configuring Apache * "
loud "-----------------------------------------------------"
apache_sitedir="/etc/apache2/sites-available/"
if [ "$dist" = "centos" ]; then
apache_sitedir="/etc/httpd/conf.d/"
fi
set +e
apache2 -v | grep "2\.4" > /dev/null
$apache_bin -v | grep "2\.4" > /dev/null
apacheversion=$?
set -e
@ -432,7 +444,7 @@ if [ "$apache" = "t" ]; then
# install apache, we should overwrite any existing configuration. If we don't do this, doing
# an in-place installation over an old Airtime install (which installs to /usr/share by default)
# will fail
if [ "$upgrade" = "t" -o ! -f /etc/apache2/sites-available/${airtimeconfigfile} ]; then
if [ "$upgrade" = "t" -o ! -f ${apache_sitedir}${airtimeconfigfile} ]; then
verbose "\n * Creating Apache config for Airtime..."
listen_port=""
if [ "$web_port" != "80" ]; then
@ -448,15 +460,19 @@ if [ "$apache" = "t" ]; then
-e "s@WEB_PORT_LISTEN@${listen_port}@g" \
-e "s@WEB_PORT@${web_port}@g" \
-e "s@WEB_ROOT@${web_root}@g" \
${apache_template_file} > /etc/apache2/sites-available/${airtimeconfigfile}
${apache_template_file} > ${apache_sitedir}${airtimeconfigfile}
loudCmd "a2dissite 000-default"
if [ "$dist" != "centos" ]; then
loudCmd "a2dissite 000-default"
fi
# If Airtime was previously installed with apt, the vhost file name is different,
# so we need to specifically disable it.
if [ -f "/etc/apache2/sites-available/${oldconfigfile}" ]; then
loudCmd "a2dissite airtime-vhost"
fi
loudCmd "a2ensite airtime"
if [ "$dist" != "centos" ]; then
loudCmd "a2ensite airtime"
fi
else
verbose "\nApache config for Airtime already exists, skipping"
fi
@ -476,9 +492,15 @@ if [ "$icecast" = "t" ]; then
loud "-----------------------------------------------------"
verbose "\n * Enabling Icecast 2..."
sed -i 's/ENABLE=false/ENABLE=true/g' /etc/default/icecast2
icecast_unit_name="icecast2"
if [ "$dist" != "centos" ]; then
sed -i 's/ENABLE=false/ENABLE=true/g' /etc/default/icecast2
else
icecast_unit_name="icecast"
fi
set +e
loudCmd "service icecast2 start"
# restart in case icecast was already started (like is the case on debian)
loudCmd "service ${icecast_unit_name} restart"
set -e
verbose "...Done"
fi
@ -491,13 +513,17 @@ verbose "\n * Installing necessary python services..."
loudCmd "pip install setuptools --upgrade"
verbose "...Done"
if [[ `lsb_release -rs` == "14.04" ]] # Ubuntu trusty needs a workaround for python version SSL downloads
then
loudCmd "pip install pyOpenSSL cryptography idna certifi --upgrade"
# Ubuntu trusty needs a workaround for python version SSL downloads
# This affects all python installs where python < 2.7.9
use_pyopenssl=""
if [ "$dist" != "debian" ] || [ "$code" = "wheezy" ]; then
use_pyopenssl="t"
fi
if [ "$use_pyopenssl" = "t" ]; then
verbose "\n * Installing pyOpenSSL and ca db for SNI support..."
loudCmd "pip install pyOpenSSL cryptography idna certifi --upgrade"
verbose "...Done"
fi
verbose "\n * Creating /run/airtime..."
mkdir -p /run/airtime
@ -519,11 +545,29 @@ verbose "...Done"
verbose "\n * Installing airtime-celery..."
loudCmd "python ${AIRTIMEROOT}/python_apps/airtime-celery/setup.py install"
# Make the airtime log directory group-writable
loudCmd "chmod 775 /var/log/airtime"
# Create the Celery user
if [ "$dist" = "centos" ]; then
loudCmd "id celery || adduser --no-create-home -c 'LibreTime Celery' -r celery || true"
loudCmd "systemctl enable airtime-celery"
else
loudCmd "id celery || adduser --no-create-home --gecos 'LibreTime Celery' --disabled-login --firstuid 1 --lastuid 999 celery"
loudCmd "update-rc.d airtime-celery defaults"
fi
# Add celery to the www-data group
loudCmd "usermod -G ${web_user} -a celery"
if [ "$dist" = "ubuntu" ]; then
loudCmd "initctl reload-configuration"
fi
verbose "...Done"
verbose "\n * Installing airtime_analyzer..."
loudCmd "python ${AIRTIMEROOT}/python_apps/airtime_analyzer/setup.py install --install-scripts=/usr/bin"
loudCmd "initctl reload-configuration"
if [ "$dist" = "ubuntu" ]; then
loudCmd "initctl reload-configuration"
fi
verbose "...Done"
for i in /etc/init/airtime*.template; do
@ -533,20 +577,31 @@ for i in /etc/init/airtime*.template; do
done
set +e
loudCmd "initctl reload-configuration"
if [ "$dist" = "ubuntu" ]; then
loudCmd "initctl reload-configuration"
fi
# airtime-celery only has an init.d startup script
loudCmd "update-rc.d airtime-celery defaults" # Start at bootup, on Debian
if [ "$dist" = "centos" ]; then
loudCmd "systemctl enable airtime-celery"
else
loudCmd "update-rc.d airtime-celery defaults" # Start at bootup, on Debian
fi
# On Ubuntu, we already have the upstart configs, so this is redundant
# and causes multiple processes to spawn on startup
if [ "$dist" != "ubuntu" ]; then
if [ "$dist" = "debian" ]; then
loudCmd "systemctl daemon-reload" #systemd hipsters
loudCmd "update-rc.d airtime-playout defaults" # Start at bootup, on Debian
loudCmd "update-rc.d airtime-liquidsoap defaults" # Start at bootup, on Debian
loudCmd "update-rc.d airtime_analyzer defaults" # Start at bootup, on Debian
fi
if [ "$dist" = "centos" ]; then
loudCmd "systemctl enable airtime-playout"
loudCmd "systemctl enable airtime-liquidsoap"
loudCmd "systemctl enable airtime_analyzer"
fi
set -e
if [ ! -d /var/log/airtime ]; then
@ -571,15 +626,21 @@ chmod -R a+x /var/tmp/airtime
chown -R ${web_user}:${web_user} /var/tmp/airtime/
# PHP Config File for Apache
if [ ! -f "/etc/php5/apache2/conf.d/airtime.ini" ]; then
verbose "\n * Creating Airtime PHP config for Apache..."
cp ${SCRIPT_DIR}/installer/php/airtime.ini /etc/php5/apache2/conf.d/airtime.ini
libretime_phpini="/etc/php5/apache2/conf.d/airtime.ini"
if [ "$dist" = "centos" ]; then
libretime_phpini="/etc/php.d/airtime.ini"
fi
if [ ! -f "${libretime_phpini}" ]; then
verbose "\n * Creating LibreTime PHP config for Apache..."
cp ${SCRIPT_DIR}/installer/php/airtime.ini ${libretime_phpini}
else
verbose "\nAirtime PHP config for Apache already exists, skipping"
fi
# Enable Apache modules
loudCmd "a2enmod rewrite php5"
if [ "$dist" != "centos" ]; then
loudCmd "a2enmod rewrite php5"
fi
loud "\n-----------------------------------------------------"
loud " * Configuring PostgreSQL * "
@ -687,9 +748,18 @@ if [ "$ignore_dependencies" = "f" ]; then
fi
verbose "\n * Reloading apache..."
loudCmd "service apache2 reload 2>/dev/null"
if [ "$dist" != "centos" ]; then
loudCmd "service ${apache_bin} reload 2>/dev/null"
verbose "...Done"
IP=$(ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://')
IP=$(ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://')
else
verbose "systemctl restart ${apache_bin} 2>/dev/null"
loudCmd "systemctl restart ${apache_bin} 2>/dev/null"
verbose "...Done"
IP=$(ip -o -4 address show dev eth0 | grep -Po 'inet \K[\d.]+')
fi
echo -e "\n-----------------------------------------------------"
echo " * Basic Setup DONE! * "

View File

@ -29,6 +29,7 @@ patch
icecast2
curl
php5-curl
mpg123

View File

@ -1,68 +0,0 @@
apache2
libapache2-mod-php5
php5
php-pear
php5-gd
php5-json
lsb-release
rabbitmq-server
postgresql
postgresql-client
php5-pgsql
python
python-virtualenv
python-pip
libsoundtouch-ocaml
libtaglib-ocaml
libao-ocaml
libmad-ocaml
ecasound
libportaudio2
libsamplerate0
patch
php5-curl
mpg123
icecast2
libcamomile-ocaml-data
libpulse0
vorbis-tools
lsb-release
lsof
mp3gain
vorbisgain
flac
vorbis-tools
pwgen
libfaad2
php-apc
lame
coreutils
liquidsoap
liquidsoap-plugin-alsa
liquidsoap-plugin-ao
liquidsoap-plugin-faad
liquidsoap-plugin-flac
liquidsoap-plugin-icecast
liquidsoap-plugin-lame
liquidsoap-plugin-mad
liquidsoap-plugin-ogg
liquidsoap-plugin-portaudio
liquidsoap-plugin-pulseaudio
liquidsoap-plugin-taglib
liquidsoap-plugin-voaacenc
liquidsoap-plugin-vorbis
silan
libopus0

View File

@ -1,68 +0,0 @@
apache2
libapache2-mod-php5
php5
php-pear
php5-gd
lsb-release
rabbitmq-server
postgresql
postgresql-client
php5-pgsql
python
python-virtualenv
python-pip
libsoundtouch-ocaml
libtaglib-ocaml
libao-ocaml
libmad-ocaml
ecasound
libportaudio2
libsamplerate0
patch
php5-curl
mpg123
icecast2
libcamomile-ocaml-data
libpulse0
vorbis-tools
lsb-release
lsof
vorbisgain
flac
vorbis-tools
pwgen
libfaad2
php-apc
lame
coreutils
liquidsoap
liquidsoap-plugin-alsa
liquidsoap-plugin-ao
liquidsoap-plugin-faad
liquidsoap-plugin-flac
liquidsoap-plugin-icecast
liquidsoap-plugin-lame
liquidsoap-plugin-mad
liquidsoap-plugin-ogg
liquidsoap-plugin-portaudio
liquidsoap-plugin-pulseaudio
liquidsoap-plugin-taglib
liquidsoap-plugin-voaacenc
liquidsoap-plugin-vorbis
silan
libopus0
sysvinit-utils

View File

@ -0,0 +1,13 @@
[Unit]
Description=LibreTime Celery Service
After=network.target
[Service]
User=celery
Group=celery
Environment=RMQ_CONFIG_FILE=/etc/airtime/airtime.conf
WorkingDirectory=/srv/airtime
ExecStart=/bin/celery worker -A airtime-celery.tasks:celery --time-limit=300 --concurrency=1 --config=celeryconfig -l INFO
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,10 @@
[Unit]
Description=Airtime Liquidsoap Service
[Service]
ExecStart=/usr/bin/airtime-liquidsoap
User=libretime-playout
Group=libretime-playout
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,10 @@
[Unit]
Description=Airtime Playout Service
[Service]
ExecStart=/usr/bin/airtime-playout
User=libretime-pypo
Group=libretime-pypo
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,10 @@
[Unit]
Description=LibreTime Media Analyzer Service
[Service]
ExecStart=/usr/bin/airtime_analyzer
User=airtime-analyzer
Group=airtime-analyzer
[Install]
WantedBy=multi-user.target

154
installer/vagrant/centos.sh Normal file
View File

@ -0,0 +1,154 @@
#!/bin/bash
# Additional Repos
yum install -y epel-release
# Nux Dextop
yum install -y http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
# We are after PUIAS Unsupported where we get celery from
# the install needs forcing since springdale-core tries to replace centos-release
curl -O http://springdale.math.ias.edu/data/puias/6/x86_64/os/Packages/springdale-unsupported-6-2.sdl6.10.noarch.rpm
rpm -hiv --nodeps springdale-unsupported-6-2.sdl6.10.noarch.rpm
rm -f springdale-unsupported-6-2.sdl6.10.noarch.rpm
# we need to install the key manually since it is also part of springdale-core
curl -O http://puias.princeton.edu/data/puias/6/x86_64/os/RPM-GPG-KEY-puias
rpm --import RPM-GPG-KEY-puias
rm -f RPM-GPG-KEY-puias
# RaBe Liquidsoap Distribution (RaBe LSD)
curl -o /etc/yum.repos.d/home:radiorabe:liquidsoap.repo \
http://download.opensuse.org/repositories/home:/radiorabe:/liquidsoap/CentOS_7/home:radiorabe:liquidsoap.repo
# RaBe Audio Packages for Enterprise Linux (RaBe APEL)
curl -o /etc/yum.repos.d/home:radiorabe:audio.repo \
http://download.opensuse.org/repositories/home:/radiorabe:/audio/CentOS_7/home:radiorabe:audio.repo
# Update all the things (just to be sure we are on latest)
yum update -y
# Database
yum install -y postgresql-server patch
postgresql-setup initdb
patch -f /var/lib/pgsql/data/pg_hba.conf << EOD
--- /var/lib/pgsql/data/pg_hba.conf.orig2016-09-01 20:45:11.364000000 -0400
+++ /var/lib/pgsql/data/pg_hba.conf2016-09-01 20:46:17.939000000 -0400
@@ -78,10 +78,11 @@
# "local" is for Unix domain socket connections only
local all all peer
+local all all md5
# IPv4 local connections:
-host all all 127.0.0.1/32 ident
+host all all 127.0.0.1/32 md5
# IPv6 local connections:
-host all all ::1/128 ident
+host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
EOD
systemctl enable postgresql
systemctl start postgresql
# create database user airtime with password airtime
useradd airtime
echo "airtime:airtime" | chpasswd
su -l postgres bash -c 'createuser airtime'
su -l postgres bash -c 'createdb -O airtime airtime'
echo "ALTER USER airtime WITH PASSWORD 'airtime';" | su -l postgres bash -c psql
echo "GRANT ALL PRIVILEGES ON DATABASE airtime TO airtime;" | su -l postgres bash -c psql
# RabbitMQ
yum install -y rabbitmq-server
systemctl enable rabbitmq-server
systemctl start rabbitmq-server
rabbitmqctl add_user airtime airtime
rabbitmqctl add_vhost /airtime
rabbitmqctl set_permissions -p /airtime airtime ".*" ".*" ".*"
# LibreTime deps
yum install -y \
git \
php \
php-xml \
php-pdo \
php-pgsql \
php-bcmath \
php-mbstring \
httpd \
liquidsoap \
silan \
icecast \
python-pip \
selinux-policy \
policycoreutils-python \
python-celery
# for pip ssl install
yum install -y \
python-devel \
python-lxml \
openssl-devel
# SELinux Setup
setsebool -P httpd_can_network_connect 1
setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_execmem on # needed by liquidsoap to do stuff when called by php
setsebool -P httpd_use_nfs 1 # to get nfs mounted /vagrant
setsebool -P git_system_use_nfs 1 # same for git
semanage port -a -t http_port_t -p tcp 9080 # default vagrant web port
# Allow apache full access to /vagrant and /etc/airtime
semanage fcontext -a -t httpd_sys_rw_content_t "/vagrant(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "/etc/airtime(/.*)?"
semanage fcontext -a -t httpd_sys_rw_content_t "/srv/airtime(/.*)?"
restorecon -Rv /vagrant /etc/airtime /srv/airtime
# Disable default apache page
sed -i -e 's/^/#/' /etc/httpd/conf.d/welcome.conf
# Quick and dirty systemd unit install (will be in package later)
unit_dir="/etc/systemd/system"
unit_src_dir="/vagrant/installer/systemd"
cp -rp ${unit_src_dir}/*.service ${unit_dir}
# Overrides to use apache user for now (final packaging will have dedicated users)
for service in `ls ${unit_src_dir}/*.service`; do
unit_name=`basename ${service}`
if [ "$unit_name" = "airtime-celery.service" ]; then
continue
fi
sed -i \
-e 's/User=.*/User=apache/' \
-e 's/Group=.*/Group=apache/' \
${unit_dir}/${unit_name}
done
# for good measure, lets reload em
systemctl daemon-reload
# celery will not run unless we install a specific version (https://github.com/pypa/setuptools/issues/942)
# this will need to be figured out later on and will get overriden by the docs installer anyhow :(
pip install setuptools==33.1.1
pip freeze setuptools==33.1.1
# the web will fail badly if this is not set, using my personal default just because
echo 'date.timezone=Europe/Zurich' >> /etc/php.d/timezone.ini
systemctl restart httpd
# icecast needs to be available to everyone
sed -i -e 's@<bind-address>127.0.0.1</bind-address>@<bind-address>0.0.0.0</bind-address>@' /etc/icecast.xml
systemctl enable --now icecast

View File

@ -0,0 +1,5 @@
#!/bin/bash
DEBIAN_FRONTEND=noninteractive apt-get -y -m --force-yes install alsa-utils
usermod -a -G audio vagrant
usermod -a -G audio www-data

View File

@ -0,0 +1,15 @@
#!/bin/bash
# Install modern alsa module for snd-hda-intel
# slightly modernized from https://github.com/naomiaro/vagrant-alsa-audio
# https://wiki.ubuntu.com/Audio/UpgradingAlsa/DKMS
alsa_deb="oem-audio-hda-daily-dkms_0.201703070301~ubuntu14.04.1_all.deb"
wget -nv https://code.launchpad.net/~ubuntu-audio-dev/+archive/ubuntu/alsa-daily/+files/${alsa_deb}
dpkg -i ${alsa_deb}
rm ${alsa_deb}
DEBIAN_FRONTEND=noninteractive apt-get -y -m --force-yes install alsa
usermod -a -G audio vagrant
# liquidsoap runs as apache
usermod -a -G audio www-data

View File

@ -31,18 +31,6 @@ def postinst():
# permissions for the defaults config file
os.chmod('/etc/init.d/airtime-celery', 0755)
os.chmod('/etc/default/airtime-celery', 0640)
# Make the airtime log directory group-writable
os.chmod('/var/log/airtime', 0775)
# Create the Celery user
call(['adduser', '--no-create-home', '--gecos', '', '--disabled-login', '--firstuid', '1', '--lastuid', '999', 'celery'])
# Add celery to the www-data group
call(['usermod', '-G', 'www-data', '-a', 'celery'])
print "Reloading initctl configuration"
call(['initctl', 'reload-configuration'])
print "Setting Celery to start on boot"
call(['update-rc.d', 'airtime-celery', 'defaults'])
print "Run \"sudo service airtime-celery restart\" now."
setup(name='airtime-celery',

View File

@ -0,0 +1,78 @@
#!/bin/bash
### BEGIN INIT INFO
# Provides: airtime_analyzer
# Required-Start: $local_fs $remote_fs $network $syslog $all
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Manage airtime_analyzer daemon
### END INIT INFO
USERID=www-data
GROUPID=www-data
NAME=airtime_analyzer
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/$NAME.pid
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions
start () {
start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \
--make-pidfile --pidfile $PIDFILE --startas $DAEMON
}
stop () {
# Send TERM after 5 seconds, wait at most 30 seconds.
start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE
rm -f $PIDFILE
}
case "${1:-''}" in
'start')
# start commands here
echo -n "Starting $NAME: "
start
echo "Done."
;;
'stop')
# stop commands here
echo -n "Stopping $NAME: "
stop
echo "Done."
;;
'restart')
# restart commands here
echo -n "Restarting $NAME: "
stop
start
echo "Done."
;;
'force-reload')
# reload commands here
echo -n "Reloading $NAME: "
stop
start
echo "Done."
;;
'status')
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
*) # no parameter specified
echo "Usage: $SELF start|stop|restart|status"
exit 1
;;
esac

View File

@ -14,7 +14,8 @@ if '--no-init-script' in sys.argv:
data_files = []
sys.argv.remove('--no-init-script') # super hax
else:
data_files = [('/etc/init', ['install/upstart/airtime_analyzer.conf'])]
data_files = [('/etc/init', ['install/upstart/airtime_analyzer.conf']),
('/etc/init.d', ['install/sysvinit/airtime_analyzer'])]
print data_files
setup(name='airtime_analyzer',