Merge pull request #1294 from jooola/feat/format_shell_scripts

Format and check shell scripts
This commit is contained in:
Kyle Robbertze 2021-08-17 13:02:54 +02:00 committed by GitHub
commit 745ac37389
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
36 changed files with 1644 additions and 1594 deletions

View file

@ -25,5 +25,5 @@ apt-get install -y gstreamer1.0-plugins-base \
libcairo2-dev libcairo2-dev
# Making log directory for PHP tests # Making log directory for PHP tests
mkdir -p $LIBRETIME_LOG_DIR mkdir -p "$LIBRETIME_LOG_DIR"
chown runner:runner $LIBRETIME_LOG_DIR chown runner:runner "$LIBRETIME_LOG_DIR"

View file

@ -25,5 +25,5 @@ apt-get install -y gstreamer1.0-plugins-base \
libcairo2-dev libcairo2-dev
# Making log directory for PHP tests # Making log directory for PHP tests
mkdir -p $LIBRETIME_LOG_DIR mkdir -p "$LIBRETIME_LOG_DIR"
chown runner:runner $LIBRETIME_LOG_DIR chown runner:runner "$LIBRETIME_LOG_DIR"

View file

@ -1,10 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
echo "::group::Install Python apps" echo "::group::Install Python apps"
for app in $(ls python_apps); do for app in python_apps/*; do
if [[ -f "python_apps/$app/requirements-dev.txt" ]]; then if [[ -f "$app/requirements-dev.txt" ]]; then
pip3 install -r "python_apps/$app/requirements-dev.txt" pip3 install -r "$app/requirements-dev.txt"
fi fi
pip3 install -e "python_apps/$app" pip3 install -e "$app"
done done
echo "::endgroup::" echo "::endgroup::"

View file

@ -14,7 +14,7 @@ if ! make -C python_apps/api_clients test; then
fi fi
echo "::endgroup::" echo "::endgroup::"
if [[ "$failed" = "true" ]]; then if [[ $failed == "true" ]]; then
echo "Python tests failed" echo "Python tests failed"
exit 1 exit 1
fi fi

View file

@ -17,10 +17,8 @@ if [ $# == 0 ]; then
exit 1 exit 1
elif [ $# == 1 ]; then elif [ $# == 1 ]; then
suffix=$1 suffix=$1
version=$1
else else
suffix=$1-$2 suffix=$1-$2
version=$1
fi fi
echo "Creating tarball for LibreTime ${suffix}." echo "Creating tarball for LibreTime ${suffix}."
@ -41,9 +39,9 @@ echo " Done"
#echo "Done" #echo "Done"
cd .. cd ..
find libretime-${suffix} -type f -exec dos2unix {} \; find "libretime-${suffix}" -type f -exec dos2unix {} \;
echo -n "Creating tarball..." echo -n "Creating tarball..."
tar -czf libretime-${suffix}.tar.gz \ tar -czf "libretime-${suffix}.tar.gz" \
--owner=root --group=root \ --owner=root --group=root \
--exclude-vcs \ --exclude-vcs \
--exclude .zfproject.xml \ --exclude .zfproject.xml \

View file

@ -25,6 +25,27 @@ jobs:
- uses: actions/setup-python@v2 - uses: actions/setup-python@v2
- uses: pre-commit/action@v2.0.3 - uses: pre-commit/action@v2.0.3
check-shell:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- run: |
python -m venv venv && source venv/bin/activate
pip install gh-release-install
sudo venv/bin/gh-release-install \
koalaman/shellcheck \
shellcheck-{tag}.linux.x86_64.tar.xz --extract shellcheck-{tag}/shellcheck \
/usr/bin/shellcheck
sudo venv/bin/gh-release-install \
mvdan/sh \
shfmt_{tag}_linux_amd64 \
/usr/bin/shfmt
- run: SEVERITY=warning make shell-check
test: test:
strategy: strategy:
matrix: matrix:

16
Makefile Normal file
View file

@ -0,0 +1,16 @@
.PHONY: setup
SHELL = bash
all: setup
setup:
command -v pre-commit > /dev/null && pre-commit install
# https://google.github.io/styleguide/shellguide.html
shell-format:
shfmt -f . | xargs shfmt -i 2 -ci -sr -kp -w
shell-check:
shfmt -f . | xargs shfmt -i 2 -ci -sr -kp -d
shfmt -f . | xargs shellcheck --color=always --severity=$${SEVERITY:-style}

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
#Create a RabbitMQ airtime_tests user #Create a RabbitMQ airtime_tests user
#This is necessary for tests to run #This is necessary for tests to run
@ -14,8 +14,8 @@ rabbitmqctl list_vhosts | grep $RABBITMQ_VHOST
RESULT="$?" RESULT="$?"
if [ $RESULT = "0" ]; then if [ $RESULT = "0" ]; then
rabbitmqctl delete_vhost $RABBITMQ_VHOST rabbitmqctl delete_vhost $RABBITMQ_VHOST
rabbitmqctl delete_user $RABBITMQ_USER rabbitmqctl delete_user $RABBITMQ_USER
fi fi
rabbitmqctl add_vhost $RABBITMQ_VHOST rabbitmqctl add_vhost $RABBITMQ_VHOST
@ -29,9 +29,8 @@ export RABBITMQ_VHOST
export AIRTIME_UNIT_TEST="1" export AIRTIME_UNIT_TEST="1"
#Change the working directory to this script's directory #Change the working directory to this script's directory
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" && pwd)"
cd $DIR cd "$DIR" || (echo "could not cd in $DIR!" && exit 1)
#Run the unit tests #Run the unit tests
phpunit --verbose --log-junit test_results.xml phpunit --verbose --log-junit test_results.xml

View file

@ -1,27 +1,30 @@
#!/bin/bash -e #!/usr/bin/env bash
set -e # Exit if any of the steps fails.
composer install --no-dev --no-interaction composer install --no-dev --no-interaction
git_build="" git_build=""
if [ -d .git ]; then if [ -d .git ]; then
echo " * Building from Git" echo " * Building from Git"
git_build="y" git_build="y"
fi fi
if [ "${git_build}" = "y" ]; then if [ "${git_build}" = "y" ]; then
git_version=`git tag --points-at HEAD` git_version=$(git tag --points-at HEAD)
echo " * Version from tag: ${git_version}" echo " * Version from tag: ${git_version}"
if [ "${git_version}" = "" ]; then if [ "${git_version}" = "" ]; then
git_version=`git rev-parse --short HEAD` git_version=$(git rev-parse --short HEAD)
echo " * Overriding empty version with sha1 commit-ish: ${git_version}" echo " * Overriding empty version with sha1 commit-ish: ${git_version}"
fi fi
echo ${git_version} > VERSION echo "${git_version}" > VERSION
else else
# if no file was in tarball we create one letting the user know # if no file was in tarball we create one letting the user know
# if you run in to this you should grab an enriched tarball built # if you run in to this you should grab an enriched tarball built
# by travis. It already contains the VERSION file and also bundles # by travis. It already contains the VERSION file and also bundles
# all the PHP you vendors files making the install much faster on # all the PHP you vendors files making the install much faster on
# your part. # your part.
if [ ! -f VERSION ]; then if [ ! -f VERSION ]; then
echo "could not detect version for VERSION file" > VERSION echo "could not detect version for VERSION file" > VERSION
fi fi
fi fi

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# Set up 3 way PO file merging, which we need for non-mainline branches # Set up 3 way PO file merging, which we need for non-mainline branches
cp scripts/git-merge-po /usr/local/bin cp scripts/git-merge-po /usr/local/bin

View file

@ -1,9 +1,12 @@
#!/bin/bash -e #!/usr/bin/env bash
set -e
apt-get install -y --force-yes lsb-release sudo apt-get install -y --force-yes lsb-release sudo
dist=`lsb_release -is` dist=$(lsb_release -is)
code=`lsb_release -cs` code=$(lsb_release -cs)
cpu=`getconf LONG_BIT` # cpu=$(getconf LONG_BIT)
cpuvalue= # cpuvalue=
#enable apt.sourcefabric.org source #enable apt.sourcefabric.org source
set +e set +e
@ -11,42 +14,40 @@ grep -E "deb http://apt.sourcefabric.org $code main" /etc/apt/sources.list
returncode=$? returncode=$?
set -e set -e
if [ "$returncode" -ne "0" ]; then if [ "$returncode" -ne "0" ]; then
echo "deb http://apt.sourcefabric.org $code main" >> /etc/apt/sources.list echo "deb http://apt.sourcefabric.org $code main" >> /etc/apt/sources.list
fi fi
apt-get update apt-get update
apt-get -y --force-yes install sourcefabric-keyring apt-get -y --force-yes install sourcefabric-keyring
apt-get update apt-get update
if [ "$dist" = "Ubuntu" ]; then if [ "$dist" = "Ubuntu" ]; then
set +e set +e
grep -E "deb http://ca.archive.ubuntu.com/ubuntu/ $code multiverse" /etc/apt/sources.list grep -E "deb http://ca.archive.ubuntu.com/ubuntu/ $code multiverse" /etc/apt/sources.list
returncode=$? returncode=$?
set -e set -e
if [ "$returncode" -ne "0" ]; then if [ "$returncode" -ne "0" ]; then
echo "deb http://ca.archive.ubuntu.com/ubuntu/ $code multiverse" >> /etc/apt/sources.list echo "deb http://ca.archive.ubuntu.com/ubuntu/ $code multiverse" >> /etc/apt/sources.list
echo "deb http://ca.archive.ubuntu.com/ubuntu/ $code universe" >> /etc/apt/sources.list echo "deb http://ca.archive.ubuntu.com/ubuntu/ $code universe" >> /etc/apt/sources.list
fi fi
fi fi
#enable squeeze backports to get lame packages #enable squeeze backports to get lame packages
if [ "$dist" = "Debian" -a "$code" = "squeeze" ]; then if [[ "$dist" == "Debian" && "$code" == "squeeze" ]]; then
set +e set +e
grep -E "deb http://backports.debian.org/debian-backports squeeze-backports main" /etc/apt/sources.list grep -E "deb http://backports.debian.org/debian-backports squeeze-backports main" /etc/apt/sources.list
returncode=$? returncode=$?
set -e set -e
if [ "$returncode" -ne "0" ]; then if [ "$returncode" -ne "0" ]; then
echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> /etc/apt/sources.list echo "deb http://backports.debian.org/debian-backports squeeze-backports main" >> /etc/apt/sources.list
fi fi
fi fi
echo "System is $cpu bit..." # echo "System is $cpu bit..."
if [ "$cpu" = "64" ]; then # if [ "$cpu" = "64" ]; then
cpuvalue="amd64" # cpuvalue="amd64"
else # else
cpuvalue="i386" # cpuvalue="i386"
fi # fi
apt-get update apt-get update
apt-get -o Dpkg::Options::="--force-confold" upgrade apt-get -o Dpkg::Options::="--force-confold" upgrade
@ -62,14 +63,14 @@ apt-get -y --force-yes install libopus0 libopus-dev libopus-dbg libopus-doc
#obsoleted code end #obsoleted code end
apt-get -y --force-yes install git-core ocaml-findlib libao-ocaml-dev \ apt-get -y --force-yes install git-core ocaml-findlib libao-ocaml-dev \
libportaudio-ocaml-dev libmad-ocaml-dev libtaglib-ocaml-dev libalsa-ocaml-dev \ libportaudio-ocaml-dev libmad-ocaml-dev libtaglib-ocaml-dev libalsa-ocaml-dev \
libvorbis-ocaml-dev libladspa-ocaml-dev libxmlplaylist-ocaml-dev libflac-dev \ libvorbis-ocaml-dev libladspa-ocaml-dev libxmlplaylist-ocaml-dev libflac-dev \
libxml-dom-perl libxml-dom-xpath-perl patch autoconf libmp3lame-dev \ libxml-dom-perl libxml-dom-xpath-perl patch autoconf libmp3lame-dev \
libcamomile-ocaml-dev libcamlimages-ocaml-dev libtool libpulse-dev camlidl \ libcamomile-ocaml-dev libcamlimages-ocaml-dev libtool libpulse-dev camlidl \
libfaad-dev libpcre-ocaml-dev libfftw3-3 dialog libfaad-dev libpcre-ocaml-dev libfftw3-3 dialog
if [ "$code" != "lucid" ]; then if [ "$code" != "lucid" ]; then
apt-get -y --force-yes install libvo-aacenc-dev apt-get -y --force-yes install libvo-aacenc-dev
fi fi
#dpkg -i libopus-dbg_1.0.1~$code~sfo-1_$cpuvalue.deb libopus-dev_1.0.1~$code~sfo-1_$cpuvalue.deb libopus0_1.0.1~$code~sfo-1_$cpuvalue.deb aacplusenc_0.17.5-0.0medibuntu1_$cpuvalue.deb #dpkg -i libopus-dbg_1.0.1~$code~sfo-1_$cpuvalue.deb libopus-dev_1.0.1~$code~sfo-1_$cpuvalue.deb libopus0_1.0.1~$code~sfo-1_$cpuvalue.deb aacplusenc_0.17.5-0.0medibuntu1_$cpuvalue.deb
@ -111,7 +112,7 @@ sed -i "s/#ocaml-opus/ocaml-opus/g" PACKAGES
#sed -i "s/#ocaml-aacplus/ocaml-aacplus/g" PACKAGES #sed -i "s/#ocaml-aacplus/ocaml-aacplus/g" PACKAGES
#sed -i "s/#ocaml-shine/ocaml-shine/g" PACKAGES #sed -i "s/#ocaml-shine/ocaml-shine/g" PACKAGES
if [ "$code" != "lucid" ]; then if [ "$code" != "lucid" ]; then
sed -i "s/#ocaml-voaacenc/ocaml-voaacenc/g" PACKAGES sed -i "s/#ocaml-voaacenc/ocaml-voaacenc/g" PACKAGES
fi fi
chown -R tmp /liquidsoap-full chown -R tmp /liquidsoap-full

View file

@ -1,92 +1,92 @@
#!/bin/bash #!/usr/bin/env bash
exec 2>&1 exec 2>&1
ROOT_UID="0" ROOT_UID="0"
#Check if run as root #Check if run as root
if [ "$UID" -ne "$ROOT_UID" ] ; then if [ "$UID" -ne "$ROOT_UID" ]; then
echo "You must have 'sudo' right to do that!" echo "You must have 'sudo' right to do that!"
exit 1 exit 1
fi fi
rm -rf ./liquidsoap-compile_logs rm -rf ./liquidsoap-compile_logs
mkdir -p ./liquidsoap-compile_logs mkdir -p ./liquidsoap-compile_logs
showhelp () { showhelp() {
echo "Usage: run.sh [options] [parameters] echo "Usage: run.sh [options] [parameters]
-c all|ubuntu_lucid_32 Compile liquidsoap on all platforms or specified platform. -c all|ubuntu_lucid_32 Compile liquidsoap on all platforms or specified platform.
-b all|ubuntu_lucid_32 Build shroot environments for all platforms or specified platform. -b all|ubuntu_lucid_32 Build shroot environments for all platforms or specified platform.
-u username Local username will be used as sudo user of chroot env. Must be assigned before -b options" -u username Local username will be used as sudo user of chroot env. Must be assigned before -b options"
exit 0 exit 0
} }
build_env () { build_env() {
if [ $sudo_user = "-1" ];then if [ $sudo_user = "-1" ]; then
echo "Please use -u to assign sudo username before build environments." echo "Please use -u to assign sudo username before build environments."
exit 1 exit 1
fi fi
echo "build_env $1" echo "build_env $1"
#exec > >(tee ./liquidsoap_compile_logs/build_env_$1.log) #exec > >(tee ./liquidsoap_compile_logs/build_env_$1.log)
os=`echo $1 | awk '/(debian)/'` os=$(echo $1 | awk '/(debian)/')
cpu=`echo $1 | awk '/(64)/'` cpu=$(echo $1 | awk '/(64)/')
dist=`echo $1 | awk -F "_" '{print $2}'` dist=$(echo $1 | awk -F "_" '{print $2}')
rm -f /etc/schroot/chroot.d/$1.conf rm -f /etc/schroot/chroot.d/$1.conf
if cat /etc/passwd | awk -F:'{print $1}' | grep "tmp" >/dev/null 2>&1;then if cat /etc/passwd | awk -F:'{print $1}' | grep "tmp" > /dev/null 2>&1; then
echo "User tmp exists." echo "User tmp exists."
else
useradd tmp
echo "User tmp is created."
fi
apt-get update
apt-get --force-yes -y install debootstrap dchroot
echo [$1] > /etc/schroot/chroot.d/$1.conf
echo description=$1 >> /etc/schroot/chroot.d/$1.conf
echo directory=/srv/chroot/$1 >> /etc/schroot/chroot.d/$1.conf
echo type=directory >> /etc/schroot/chroot.d/$1.conf
echo users=$sudo_user,tmp >> /etc/schroot/chroot.d/$1.conf
echo root-users=$sudo_user >> /etc/schroot/chroot.d/$1.conf
rm -rf /srv/chroot/$1
mkdir -p /srv/chroot/$1
#cp liquidsoap_compile.sh /srv/chroot/$1/
if [ "$os" = "" ]; then
if [ "$cpu" = "" ]; then
echo "debootstrap --variant=buildd --arch=i386 $dist /srv/chroot/$1 http://archive.ubuntu.com/ubuntu/"
debootstrap --variant=buildd --arch=i386 $dist /srv/chroot/$1 http://archive.ubuntu.com/ubuntu/
else else
useradd tmp echo "debootstrap --variant=buildd --arch=amd64 $dist /srv/chroot/$1 http://archive.ubuntu.com/ubuntu/"
echo "User tmp is created." debootstrap --variant=buildd --arch=amd64 $dist /srv/chroot/$1 http://archive.ubuntu.com/ubuntu/
fi fi
else
apt-get update if [ "$cpu" = "" ]; then
apt-get --force-yes -y install debootstrap dchroot echo "debootstrap --variant=buildd --arch=i386 $dist /srv/chroot/$1 http://ftp.debian.com/debian/"
echo [$1] > /etc/schroot/chroot.d/$1.conf debootstrap --variant=buildd --arch=i386 $dist /srv/chroot/$1 http://ftp.debian.com/debian/
echo description=$1 >> /etc/schroot/chroot.d/$1.conf
echo directory=/srv/chroot/$1 >> /etc/schroot/chroot.d/$1.conf
echo type=directory >> /etc/schroot/chroot.d/$1.conf
echo users=$sudo_user,tmp >> /etc/schroot/chroot.d/$1.conf
echo root-users=$sudo_user >> /etc/schroot/chroot.d/$1.conf
rm -rf /srv/chroot/$1
mkdir -p /srv/chroot/$1
#cp liquidsoap_compile.sh /srv/chroot/$1/
if [ "$os" = "" ];then
if [ "$cpu" = "" ];then
echo "debootstrap --variant=buildd --arch=i386 $dist /srv/chroot/$1 http://archive.ubuntu.com/ubuntu/"
debootstrap --variant=buildd --arch=i386 $dist /srv/chroot/$1 http://archive.ubuntu.com/ubuntu/
else
echo "debootstrap --variant=buildd --arch=amd64 $dist /srv/chroot/$1 http://archive.ubuntu.com/ubuntu/"
debootstrap --variant=buildd --arch=amd64 $dist /srv/chroot/$1 http://archive.ubuntu.com/ubuntu/
fi
else else
if [ "$cpu" = "" ];then echo "debootstrap --variant=buildd --arch=amd64 $dist /srv/chroot/$1 http://ftp.debian.com/debian/"
echo "debootstrap --variant=buildd --arch=i386 $dist /srv/chroot/$1 http://ftp.debian.com/debian/" debootstrap --variant=buildd --arch=amd64 $dist /srv/chroot/$1 http://ftp.debian.com/debian/
debootstrap --variant=buildd --arch=i386 $dist /srv/chroot/$1 http://ftp.debian.com/debian/
else
echo "debootstrap --variant=buildd --arch=amd64 $dist /srv/chroot/$1 http://ftp.debian.com/debian/"
debootstrap --variant=buildd --arch=amd64 $dist /srv/chroot/$1 http://ftp.debian.com/debian/
fi
fi fi
fi
} }
compile_liq () { compile_liq() {
echo "complie_liq $1" echo "complie_liq $1"
#exec > >(tee ./liquidsoap_compile_logs/compile_liq_$1.log) #exec > >(tee ./liquidsoap_compile_logs/compile_liq_$1.log)
binfilename=`echo $1 | sed -e 's/ubuntu/liquidsoap/g' -e 's/debian/liquidsoap/g' -e 's/32/i386/g' -e 's/64/amd64/g'` binfilename=$(echo $1 | sed -e 's/ubuntu/liquidsoap/g' -e 's/debian/liquidsoap/g' -e 's/32/i386/g' -e 's/64/amd64/g')
rm -f /srv/chroot/$1/liquidsoap-compile.sh rm -f /srv/chroot/$1/liquidsoap-compile.sh
rm -f /srv/chroot/$1/liquidsoap rm -f /srv/chroot/$1/liquidsoap
cp liquidsoap-compile.sh /srv/chroot/$1/ cp liquidsoap-compile.sh /srv/chroot/$1/
schroot -c $1 -u root -d / -- /liquidsoap-compile.sh schroot -c $1 -u root -d / -- /liquidsoap-compile.sh
cp /srv/chroot/$1/liquidsoap ./$binfilename cp /srv/chroot/$1/liquidsoap ./$binfilename
if [ $? = 0 ];then if [ $? = 0 ]; then
echo "$binfilename is generated successfully" echo "$binfilename is generated successfully"
else else
mv ./liquidsoap-compile_logs/compile_liq_$1.log ./liquidsoap-compile_logs/fail_to_compile_liq_$1.log mv ./liquidsoap-compile_logs/compile_liq_$1.log ./liquidsoap-compile_logs/fail_to_compile_liq_$1.log
fi fi
} }
os_versions=("ubuntu_lucid_32" "ubuntu_lucid_64" "ubuntu_precise_32" "ubuntu_precise_64" "ubuntu_quantal_32" "ubuntu_quantal_64" "ubuntu_raring_32" "ubuntu_raring_64" "debian_squeeze_32" "debian_squeeze_64" "debian_wheezy_32" "debian_wheezy_64") os_versions=("ubuntu_lucid_32" "ubuntu_lucid_64" "ubuntu_precise_32" "ubuntu_precise_64" "ubuntu_quantal_32" "ubuntu_quantal_64" "ubuntu_raring_32" "ubuntu_raring_64" "debian_squeeze_32" "debian_squeeze_64" "debian_wheezy_32" "debian_wheezy_64")
@ -96,74 +96,67 @@ flag=
os= os=
sudo_user="-1" sudo_user="-1"
if [ x$1 = x ];then if [ x$1 = x ]; then
showhelp showhelp
fi fi
while getopts b:c:u: arg while getopts b:c:u: arg; do
do case $arg in
case $arg in b)
b) if [ "$OPTARG" = "all" ]; then
if [ "$OPTARG" = "all" ];then echo "Building all platforms on server..."
echo "Building all platforms on server..." for i in $(seq 0 $((num - 1))); do
for i in $(seq 0 $(($num -1))); build_env ${os_versions[$i]} | tee ./liquidsoap-compile_logs/build_env_${os_versions[$i]}.log
do done
build_env ${os_versions[$i]} | tee ./liquidsoap-compile_logs/build_env_${os_versions[$i]}.log else
done flag=1
else for i in $(seq 0 $((num - 1))); do
flag=1 if [ "$OPTARG" = ${os_versions[$i]} ]; then
for i in $(seq 0 $(($num -1))); echo "Building platform: $OPTARG ..."
do build_env ${os_versions[$i]} | tee ./liquidsoap-compile_logs/build_env_${os_versions[$i]}.log
if [ "$OPTARG" = ${os_versions[$i]} ];then flag=0
echo "Building platform: $OPTARG ..." fi
build_env ${os_versions[$i]} | tee ./liquidsoap-compile_logs/build_env_${os_versions[$i]}.log done
flag=0 if [ $flag = 1 ]; then
fi echo "Unsupported Platform from:"
done for j in "${os_versions[@]}"; do
if [ $flag = 1 ];then echo $j
echo "Unsupported Platform from:" done
for j in "${os_versions[@]}" exit 1
do fi
echo $j fi
done ;;
exit 1 c)
fi if [ "$OPTARG" = "all" ]; then
fi echo "Compiling liquidsoap for all platforms on server..."
;; for i in $(seq 0 $((num - 1))); do
c) compile_liq ${os_versions[$i]} | tee ./liquidsoap-compile_logs/compile_liq_${os_versions[$i]}.log
if [ "$OPTARG" = "all" ];then done
echo "Compiling liquidsoap for all platforms on server..."
for i in $(seq 0 $(($num -1)))
do
compile_liq ${os_versions[$i]} | tee ./liquidsoap-compile_logs/compile_liq_${os_versions[$i]}.log
done
else else
flag=1 flag=1
for i in $(seq 0 $(($num -1))); for i in $(seq 0 $((num - 1))); do
do if [ "$OPTARG" = ${os_versions[$i]} ]; then
if [ "$OPTARG" = ${os_versions[$i]} ];then echo "Compiling liquidsoap for platform: $OPTARG ..."
echo "Compiling liquidsoap for platform: $OPTARG ..." compile_liq ${os_versions[$i]} | tee ./liquidsoap-compile_logs/compile_liq_${os_versions[$i]}.log
compile_liq ${os_versions[$i]} | tee ./liquidsoap-compile_logs/compile_liq_${os_versions[$i]}.log flag=0
flag=0 fi
fi done
done if [ $flag = 1 ]; then
if [ $flag = 1 ];then echo "Unsupported Platform from:"
echo "Unsupported Platform from:" for k in "${os_versions[@]}"; do
for k in "${os_versions[@]}" echo $k
do done
echo $k exit 1
done fi
exit 1 fi
fi ;;
fi u)
;; sudo_user="$OPTARG"
u) echo "sudo_user is set as $sudo_user."
sudo_user="$OPTARG" ;;
echo "sudo_user is set as $sudo_user." ?)
;; showhelp
?) ;;
showhelp esac
;;
esac
done done

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# the base url of the bamboo server # the base url of the bamboo server
baseurl="$1/updateAndBuild.action?buildKey=" baseurl="$1/updateAndBuild.action?buildKey="
@ -10,16 +10,15 @@ baseurl="$1/updateAndBuild.action?buildKey="
# Moves to the 2nd param (first is URL) # Moves to the 2nd param (first is URL)
shift shift
# Loop for each build key # Loop for each build key
while (( "$#" )); do while (("$#")); do
# #
# Invoke the trigger # Invoke the trigger
# #
remoteCall=$baseurl$1 remoteCall=$baseurl$1
echo "Detected last directory that was committed ... triggering $remoteCall" echo "Detected last directory that was committed ... triggering $remoteCall"
/usr/bin/wget --timeout=10 -t1 $remoteCall -O /dev/null /usr/bin/wget --timeout=10 -t1 $remoteCall -O /dev/null
shift shift
done done
exit 0 exit 0

View file

@ -1,11 +1,14 @@
#!/bin/bash -e #!/usr/bin/env bash
# Absolute path to this script
SCRIPT=`readlink -f $0`
# Absolute directory this script is in
SCRIPTPATH=`dirname $SCRIPT`
cd $SCRIPTPATH/../airtime_mvc/ set -e
path=`pwd`
# Absolute path to this script
SCRIPT=$(readlink -f "$0")
# Absolute directory this script is in
SCRIPTPATH=$(dirname "$SCRIPT")
cd "$SCRIPTPATH/../airtime_mvc/" || (echo "could not cd in $SCRIPTPATH/../airtime_mvc/" && exit 1)
path=$(pwd)
cd build cd build
sed -i s#"project\.home =.*$"#"project.home = $path"#g build.properties sed -i "s|\"project\.home =.*$\"|\"project.home = $path\"|g" build.properties
../../vendor/propel/propel1/generator/bin/propel-gen ../../vendor/propel/propel1/generator/bin/propel-gen

View file

@ -1,4 +1,6 @@
#!/bin/bash -e #!/usr/bin/env bash
set -e
#release.sh 1.8.2 #release.sh 1.8.2
#creates a libretime folder with a "1.8.2" suffix #creates a libretime folder with a "1.8.2" suffix
@ -13,17 +15,17 @@
#creates tarballs with a "1.8.2-RC" suffix #creates tarballs with a "1.8.2-RC" suffix
if [ $# == 0 ]; then if [ $# == 0 ]; then
echo "Zero arguments" echo "Zero arguments"
exit exit
elif [ $# == 1 ]; then elif [ $# == 1 ]; then
suffix=$1 suffix=$1
version=$1 # version=$1
else else
suffix=$1-$2 suffix=$1-$2
version=$1 # version=$1
fi fi
dir=$(dirname $(readlink -f $0)) # dir=$(dirname "$(readlink -f "$0")")
gitrepo=$(readlink -f ./../../) gitrepo=$(readlink -f ./../../)
echo "Creating tarball for LibreTime ${suffix}." echo "Creating tarball for LibreTime ${suffix}."
@ -64,19 +66,18 @@ pushd /tmp/
find libretime-${suffix} -type f -exec dos2unix {} \; find libretime-${suffix} -type f -exec dos2unix {} \;
echo -n "Creating tarball..." echo -n "Creating tarball..."
tar -czf $target_file \ tar -czf $target_file \
--owner=root --group=root \ --owner=root --group=root \
--exclude-vcs \ --exclude-vcs \
--exclude .zfproject.xml \ --exclude .zfproject.xml \
--exclude .gitignore \ --exclude .gitignore \
--exclude .gitattributes \ --exclude .gitattributes \
--exclude .travis.yml \ --exclude .travis.yml \
--exclude travis \ --exclude travis \
--exclude dev_tools \ --exclude dev_tools \
--exclude vendor/phing \ --exclude vendor/phing \
--exclude vendor/simplepie/simplepie/tests \ --exclude vendor/simplepie/simplepie/tests \
libretime-${suffix} libretime-${suffix}
echo " Done" echo " Done"
popd popd
echo "Output file available at $target_file" echo "Output file available at $target_file"

View file

@ -22,7 +22,8 @@
# #
# - When merging branches, conflicts in PO files will be marked with "#-#-#-#" # - When merging branches, conflicts in PO files will be marked with "#-#-#-#"
# #
O=$1
# O=$1
A=$2 A=$2
B=$3 B=$3

View file

@ -1,38 +1,37 @@
#!/bin/bash #!/usr/bin/env bash
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root." 1>&2 echo "This script must be run as root." 1>&2
exit 1 exit 1
fi fi
usage () { usage() {
echo "Use --enable <user> or --disable flag. Enable is to set up environment" echo "Use --enable <user> or --disable flag. Enable is to set up environment"
echo "for specified user. --disable is to reset it back to pypo user" echo "for specified user. --disable is to reset it back to pypo user"
} }
if [ "$1" = "--enable" ]; then if [ "$1" = "--enable" ]; then
/etc/init.d/airtime-playout stop /etc/init.d/airtime-playout stop
/etc/init.d/airtime-playout start-liquidsoap /etc/init.d/airtime-playout start-liquidsoap
user=$2 user=$2
echo "Changing ownership to user $1" echo "Changing ownership to user $1"
chmod -R a+rw /var/log/airtime/pypo chmod -R a+rw /var/log/airtime/pypo
chmod a+r /etc/airtime/airtime.conf chmod a+r /etc/airtime/airtime.conf
chown -Rv $user:$user /var/tmp/airtime/pypo/ chown -Rv $user:$user /var/tmp/airtime/pypo/
chmod -v a+r /etc/airtime/api_client.cfg chmod -v a+r /etc/airtime/api_client.cfg
elif [ "$1" = "--disable" ]; then elif [ "$1" = "--disable" ]; then
user="pypo" user="pypo"
echo "Changing ownership to user $1" echo "Changing ownership to user $1"
chmod 644 /etc/airtime/airtime.conf chmod 644 /etc/airtime/airtime.conf
chown -Rv $user:$user /var/tmp/airtime/pypo/ chown -Rv $user:$user /var/tmp/airtime/pypo/
chmod -v a+r /etc/airtime/api_client.cfg chmod -v a+r /etc/airtime/api_client.cfg
/etc/init.d/airtime-playout stop-liquidsoap
/etc/init.d/airtime-playout stop-liquidsoap /etc/init.d/airtime-playout start
/etc/init.d/airtime-playout start
else else
usage usage
fi fi

View file

@ -4,8 +4,8 @@ cd ..
#generate a new .po file #generate a new .po file
#this will generate a file called messages.po #this will generate a file called messages.po
find airtime_mvc -iname "*.phtml" -o -name "*.php" | xargs xgettext -L php --from-code=UTF-8 find airtime_mvc -print0 -iname "*.phtml" -o -name "*.php" | xargs xgettext -L php --from-code=UTF-8
find airtime_mvc -iname "*.phtml" -o -name "*.php" | xargs xgettext -L php --from-code=UTF-8 -k --keyword=_pro:1 -d pro --force-po find airtime_mvc -print0 -iname "*.phtml" -o -name "*.php" | xargs xgettext -L php --from-code=UTF-8 -k --keyword=_pro:1 -d pro --force-po
#merge the new messages from messages.po into each existing .po file #merge the new messages from messages.po into each existing .po file
#this will generate new .po files #this will generate new .po files

1651
install

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,12 @@
#!/bin/bash -e #!/usr/bin/env bash
set -e
#-e Causes bash script to exit if any of the installers #-e Causes bash script to exit if any of the installers
#return with a non-zero return value. #return with a non-zero return value.
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo "Please run as root user." echo "Please run as root user."
exit 1 exit 1
fi fi
dist=$1 dist=$1
@ -52,9 +54,9 @@ echo "...Done"
IP=$(lxc-info -i -n ${name} -H) IP=$(lxc-info -i -n ${name} -H)
echo -e "\n * Opening ${name} in your browser..." echo -e "\n * Opening ${name} in your browser..."
if hash xdg-open 2>/dev/null; then if hash xdg-open 2> /dev/null; then
xdg-open "http://${IP}/" xdg-open "http://${IP}/"
elif hash gnome-open 2>/dev/null; then elif hash gnome-open 2> /dev/null; then
gnome-open "http://${IP}/" gnome-open "http://${IP}/"
fi fi
echo "...Done" echo "...Done"

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# Additional Repos # Additional Repos
yum install -y epel-release yum install -y epel-release
@ -9,15 +9,15 @@ dnf config-manager --enable powertools
# xiph multimedia (for icecast) # xiph multimedia (for icecast)
curl -o /etc/yum.repos.d/multimedia:xiph.repo \ curl -o /etc/yum.repos.d/multimedia:xiph.repo \
https://download.opensuse.org/repositories/multimedia:/xiph/CentOS_8/multimedia:xiph.repo https://download.opensuse.org/repositories/multimedia:/xiph/CentOS_8/multimedia:xiph.repo
# RaBe Liquidsoap Distribution (RaBe LSD) # RaBe Liquidsoap Distribution (RaBe LSD)
curl -o /etc/yum.repos.d/home:radiorabe:liquidsoap.repo \ curl -o /etc/yum.repos.d/home:radiorabe:liquidsoap.repo \
https://download.opensuse.org/repositories/home:/radiorabe:/liquidsoap/CentOS_8/home:radiorabe:liquidsoap.repo https://download.opensuse.org/repositories/home:/radiorabe:/liquidsoap/CentOS_8/home:radiorabe:liquidsoap.repo
# RaBe Audio Packages for Enterprise Linux (RaBe APEL) # RaBe Audio Packages for Enterprise Linux (RaBe APEL)
curl -o /etc/yum.repos.d/home:radiorabe:audio.repo \ curl -o /etc/yum.repos.d/home:radiorabe:audio.repo \
https://download.opensuse.org/repositories/home:/radiorabe:/audio/CentOS_8/home:radiorabe:audio.repo https://download.opensuse.org/repositories/home:/radiorabe:/audio/CentOS_8/home:radiorabe:audio.repo
# Update all the things (just to be sure we are on latest) # Update all the things (just to be sure we are on latest)
yum update -y yum update -y
@ -58,7 +58,6 @@ su -l postgres bash -c 'createdb -O airtime airtime'
echo "ALTER USER airtime WITH PASSWORD 'airtime';" | su -l postgres bash -c psql 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 echo "GRANT ALL PRIVILEGES ON DATABASE airtime TO airtime;" | su -l postgres bash -c psql
# RabbitMQ # RabbitMQ
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
yum install -y rabbitmq-server yum install -y rabbitmq-server
@ -142,7 +141,6 @@ sed -i \
-e 's/LoadModule mpm_event_module/#LoadModule mpm_event_module/' \ -e 's/LoadModule mpm_event_module/#LoadModule mpm_event_module/' \
/etc/httpd/conf.modules.d/00-mpm.conf /etc/httpd/conf.modules.d/00-mpm.conf
# celery will not run unless we install a specific version (https://github.com/pypa/setuptools/issues/942) # 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 overridden by the docs installer anyhow :( # this will need to be figured out later on and will get overridden by the docs installer anyhow :(
pip3 install setuptools==33.1.1 pip3 install setuptools==33.1.1

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
DEBIAN_FRONTEND=noninteractive apt-get -y install alsa-utils DEBIAN_FRONTEND=noninteractive apt-get -y install alsa-utils
usermod -a -G audio vagrant usermod -a -G audio vagrant

4
jekyll.sh Normal file → Executable file
View file

@ -1,4 +1,4 @@
#/bin/bash #!/usr/bin/env bash
echo "Installing Ruby" echo "Installing Ruby"
apt-get update -y && apt-get install -y ruby-full build-essential zlib1g-dev apt-get update -y && apt-get install -y ruby-full build-essential zlib1g-dev
@ -8,7 +8,7 @@ export PATH=".gems/bin:$PATH"
echo "Installing Jekyll" echo "Installing Jekyll"
cd docs cd docs || (echo "Could not cd in docs" && exit 1)
gem install jekyll bundler gem install jekyll bundler
# Running Jekyll # Running Jekyll

View file

@ -1,4 +1,7 @@
#!/bin/sh -e #!/usr/bin/env bash
set -e
# ============================================ # ============================================
# celeryd - Starts the Celery worker daemon. # celeryd - Starts the Celery worker daemon.
# ============================================ # ============================================
@ -8,7 +11,6 @@
# #
# See http://docs.celeryproject.org/en/latest/tutorials/daemonizing.html#generic-init-scripts # See http://docs.celeryproject.org/en/latest/tutorials/daemonizing.html#generic-init-scripts
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides: celeryd # Provides: celeryd
# Required-Start: $network $local_fs $remote_fs # Required-Start: $network $local_fs $remote_fs
@ -30,20 +32,20 @@
# #
VERSION=10.1 VERSION=10.1
echo "celery init v${VERSION}." echo "celery init v${VERSION}."
if [ $(id -u) -ne 0 ]; then if [ "$(id -u)" -ne 0 ]; then
echo "Error: This program can only be used by the root user." echo "Error: This program can only be used by the root user."
echo " Unprivileged users must use the 'celery multi' utility, " echo " Unprivileged users must use the 'celery multi' utility, "
echo " or 'celery worker --detach'." echo " or 'celery worker --detach'."
exit 1 exit 1
fi fi
export RMQ_CONFIG_FILE="/etc/airtime/airtime.conf" export RMQ_CONFIG_FILE="/etc/airtime/airtime.conf"
# Can be a runlevel symlink (e.g. S02celeryd) # Can be a runlevel symlink (e.g. S02celeryd)
if [ -L "$0" ]; then if [ -L "$0" ]; then
SCRIPT_FILE=$(readlink "$0") SCRIPT_FILE=$(readlink "$0")
else else
SCRIPT_FILE="$0" SCRIPT_FILE="$0"
fi fi
SCRIPT_NAME="$(basename "$SCRIPT_FILE")" SCRIPT_NAME="$(basename "$SCRIPT_FILE")"
@ -52,58 +54,63 @@ DEFAULT_PID_FILE="/var/run/celery/%n.pid"
DEFAULT_LOG_FILE="/var/log/celery/%n.log" DEFAULT_LOG_FILE="/var/log/celery/%n.log"
DEFAULT_LOG_LEVEL="INFO" DEFAULT_LOG_LEVEL="INFO"
DEFAULT_NODES="celery" DEFAULT_NODES="celery"
DEFAULT_CELERYD="-m celery worker --detach" # DEFAULT_CELERYD="-m celery worker --detach"
CELERY_DEFAULTS=${CELERY_DEFAULTS:-"/etc/default/${SCRIPT_NAME}"} CELERY_DEFAULTS=${CELERY_DEFAULTS:-"/etc/default/${SCRIPT_NAME}"}
# Make sure executable configuration script is owned by root # Make sure executable configuration script is owned by root
_config_sanity() { _config_sanity() {
local path="$1" local path
local owner=$(ls -ld "$path" | awk '{print $3}') local owner
local iwgrp=$(ls -ld "$path" | cut -b 6) local iwgrp
local iwoth=$(ls -ld "$path" | cut -b 9) local iwoth
if [ "$(id -u $owner)" != "0" ]; then path="$1"
echo "Error: Config script '$path' must be owned by root!" owner=$(ls -ld "$path" | awk '{print $3}')
echo iwgrp=$(ls -ld "$path" | cut -b 6)
echo "Resolution:" iwoth=$(ls -ld "$path" | cut -b 9)
echo "Review the file carefully and make sure it has not been " if [ "$(id -u $owner)" != "0" ]; then
echo "modified with mailicious intent. When sure the " echo "Error: Config script '$path' must be owned by root!"
echo "script is safe to execute with superuser privileges " echo
echo "you can change ownership of the script:" echo "Resolution:"
echo " $ sudo chown root '$path'" echo "Review the file carefully and make sure it has not been "
exit 1 echo "modified with mailicious intent. When sure the "
fi echo "script is safe to execute with superuser privileges "
if [ "$iwoth" != "-" ]; then # S_IWOTH echo "you can change ownership of the script:"
echo "Error: Config script '$path' cannot be writable by others!" echo " $ sudo chown root '$path'"
echo exit 1
echo "Resolution:" fi
echo "Review the file carefully and make sure it has not been " if [ "$iwoth" != "-" ]; then # S_IWOTH
echo "modified with malicious intent. When sure the " echo "Error: Config script '$path' cannot be writable by others!"
echo "script is safe to execute with superuser privileges " echo
echo "you can change the scripts permissions:" echo "Resolution:"
echo " $ sudo chmod 640 '$path'" echo "Review the file carefully and make sure it has not been "
exit 1 echo "modified with malicious intent. When sure the "
fi echo "script is safe to execute with superuser privileges "
if [ "$iwgrp" != "-" ]; then # S_IWGRP echo "you can change the scripts permissions:"
echo "Error: Config script '$path' cannot be writable by group!" echo " $ sudo chmod 640 '$path'"
echo exit 1
echo "Resolution:" fi
echo "Review the file carefully and make sure it has not been " if [ "$iwgrp" != "-" ]; then # S_IWGRP
echo "modified with malicious intent. When sure the " echo "Error: Config script '$path' cannot be writable by group!"
echo "script is safe to execute with superuser privileges " echo
echo "you can change the scripts permissions:" echo "Resolution:"
echo " $ sudo chmod 640 '$path'" echo "Review the file carefully and make sure it has not been "
exit 1 echo "modified with malicious intent. When sure the "
fi echo "script is safe to execute with superuser privileges "
echo "you can change the scripts permissions:"
echo " $ sudo chmod 640 '$path'"
exit 1
fi
} }
if [ -f "$CELERY_DEFAULTS" ]; then if [ -f "$CELERY_DEFAULTS" ]; then
_config_sanity "$CELERY_DEFAULTS" _config_sanity "$CELERY_DEFAULTS"
echo "Using config script: $CELERY_DEFAULTS" echo "Using config script: $CELERY_DEFAULTS"
. "$CELERY_DEFAULTS" # shellcheck disable=SC1090
. "$CELERY_DEFAULTS"
fi fi
# Sets --app argument for CELERY_BIN # Sets --app argument for CELERY_BIN
CELERY_APP_ARG="" CELERY_APP_ARG=""
if [ ! -z "$CELERY_APP" ]; then if [ ! -z "$CELERY_APP" ]; then
CELERY_APP_ARG="--app=$CELERY_APP" CELERY_APP_ARG="--app=$CELERY_APP"
fi fi
CELERYD_USER=${CELERYD_USER:-$DEFAULT_USER} CELERYD_USER=${CELERYD_USER:-$DEFAULT_USER}
# Set CELERY_CREATE_DIRS to always create log/pid dirs. # Set CELERY_CREATE_DIRS to always create log/pid dirs.
@ -111,12 +118,12 @@ CELERY_CREATE_DIRS=${CELERY_CREATE_DIRS:-0}
CELERY_CREATE_RUNDIR=$CELERY_CREATE_DIRS CELERY_CREATE_RUNDIR=$CELERY_CREATE_DIRS
CELERY_CREATE_LOGDIR=$CELERY_CREATE_DIRS CELERY_CREATE_LOGDIR=$CELERY_CREATE_DIRS
if [ -z "$CELERYD_PID_FILE" ]; then if [ -z "$CELERYD_PID_FILE" ]; then
CELERYD_PID_FILE="$DEFAULT_PID_FILE" CELERYD_PID_FILE="$DEFAULT_PID_FILE"
CELERY_CREATE_RUNDIR=1 CELERY_CREATE_RUNDIR=1
fi fi
if [ -z "$CELERYD_LOG_FILE" ]; then if [ -z "$CELERYD_LOG_FILE" ]; then
CELERYD_LOG_FILE="$DEFAULT_LOG_FILE" CELERYD_LOG_FILE="$DEFAULT_LOG_FILE"
CELERY_CREATE_LOGDIR=1 CELERY_CREATE_LOGDIR=1
fi fi
CELERYD_LOG_LEVEL=${CELERYD_LOG_LEVEL:-${CELERYD_LOGLEVEL:-$DEFAULT_LOG_LEVEL}} CELERYD_LOG_LEVEL=${CELERYD_LOG_LEVEL:-${CELERYD_LOGLEVEL:-$DEFAULT_LOG_LEVEL}}
CELERY_BIN=${CELERY_BIN:-"celery"} CELERY_BIN=${CELERY_BIN:-"celery"}
@ -124,211 +131,216 @@ CELERYD_MULTI=${CELERYD_MULTI:-"$CELERY_BIN multi"}
CELERYD_NODES=${CELERYD_NODES:-$DEFAULT_NODES} CELERYD_NODES=${CELERYD_NODES:-$DEFAULT_NODES}
export CELERY_LOADER export CELERY_LOADER
if [ -n "$2" ]; then if [ -n "$2" ]; then
CELERYD_OPTS="$CELERYD_OPTS $2" CELERYD_OPTS="$CELERYD_OPTS $2"
fi fi
CELERYD_LOG_DIR=`dirname $CELERYD_LOG_FILE` CELERYD_LOG_DIR=$(dirname $CELERYD_LOG_FILE)
CELERYD_PID_DIR=`dirname $CELERYD_PID_FILE` CELERYD_PID_DIR=$(dirname $CELERYD_PID_FILE)
# Extra start-stop-daemon options, like user/group. # Extra start-stop-daemon options, like user/group.
if [ -n "$CELERYD_CHDIR" ]; then if [ -n "$CELERYD_CHDIR" ]; then
DAEMON_OPTS="$DAEMON_OPTS --workdir=$CELERYD_CHDIR" DAEMON_OPTS="$DAEMON_OPTS --workdir=$CELERYD_CHDIR"
fi fi
check_dev_null() { check_dev_null() {
if [ ! -c /dev/null ]; then if [ ! -c /dev/null ]; then
echo "/dev/null is not a character device!" echo "/dev/null is not a character device!"
exit 75 # EX_TEMPFAIL exit 75 # EX_TEMPFAIL
fi fi
} }
maybe_die() { maybe_die() {
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Exiting: $* (errno $?)" echo "Exiting: $* (errno $?)"
exit 77 # EX_NOPERM exit 77 # EX_NOPERM
fi fi
} }
create_default_dir() { create_default_dir() {
if [ ! -d "$1" ]; then if [ ! -d "$1" ]; then
echo "- Creating default directory: '$1'" echo "- Creating default directory: '$1'"
mkdir -p "$1" mkdir -p "$1"
maybe_die "Couldn't create directory $1" maybe_die "Couldn't create directory $1"
echo "- Changing permissions of '$1' to 02755" echo "- Changing permissions of '$1' to 02755"
chmod 02755 "$1" chmod 02755 "$1"
maybe_die "Couldn't change permissions for $1" maybe_die "Couldn't change permissions for $1"
if [ -n "$CELERYD_USER" ]; then if [ -n "$CELERYD_USER" ]; then
echo "- Changing owner of '$1' to '$CELERYD_USER'" echo "- Changing owner of '$1' to '$CELERYD_USER'"
chown "$CELERYD_USER" "$1" chown "$CELERYD_USER" "$1"
maybe_die "Couldn't change owner of $1" maybe_die "Couldn't change owner of $1"
fi
if [ -n "$CELERYD_GROUP" ]; then
echo "- Changing group of '$1' to '$CELERYD_GROUP'"
chgrp "$CELERYD_GROUP" "$1"
maybe_die "Couldn't change group of $1"
fi
fi fi
if [ -n "$CELERYD_GROUP" ]; then
echo "- Changing group of '$1' to '$CELERYD_GROUP'"
chgrp "$CELERYD_GROUP" "$1"
maybe_die "Couldn't change group of $1"
fi
fi
} }
check_paths() { check_paths() {
if [ $CELERY_CREATE_LOGDIR -eq 1 ]; then if [ $CELERY_CREATE_LOGDIR -eq 1 ]; then
create_default_dir "$CELERYD_LOG_DIR" create_default_dir "$CELERYD_LOG_DIR"
fi fi
if [ $CELERY_CREATE_RUNDIR -eq 1 ]; then if [ $CELERY_CREATE_RUNDIR -eq 1 ]; then
create_default_dir "$CELERYD_PID_DIR" create_default_dir "$CELERYD_PID_DIR"
fi fi
} }
create_paths() { create_paths() {
create_default_dir "$CELERYD_LOG_DIR" create_default_dir "$CELERYD_LOG_DIR"
create_default_dir "$CELERYD_PID_DIR" create_default_dir "$CELERYD_PID_DIR"
} }
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin" export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
_get_pidfiles () { _get_pidfiles() {
# note: multi < 3.1.14 output to stderr, not stdout, hence the redirect. # note: multi < 3.1.14 output to stderr, not stdout, hence the redirect.
${CELERYD_MULTI} expand "${CELERYD_PID_FILE}" ${CELERYD_NODES} 2>&1 ${CELERYD_MULTI} expand "${CELERYD_PID_FILE}" ${CELERYD_NODES} 2>&1
} }
_get_pids() { _get_pids() {
found_pids=0 found_pids=0
my_exitcode=0 my_exitcode=0
for pidfile in $(_get_pidfiles); do for pidfile in $(_get_pidfiles); do
local pid=`cat "$pidfile"` local pid
local cleaned_pid=`echo "$pid" | sed -e 's/[^0-9]//g'` local cleaned_pid
if [ -z "$pid" ] || [ "$cleaned_pid" != "$pid" ]; then pid=$(cat "$pidfile")
echo "bad pid file ($pidfile)" cleaned_pid=$(echo "$pid" | sed -e 's/[^0-9]//g')
one_failed=true if [ -z "$pid" ] || [ "$cleaned_pid" != "$pid" ]; then
my_exitcode=1 echo "bad pid file ($pidfile)"
else one_failed=true
found_pids=1 my_exitcode=1
echo "$pid" else
fi found_pids=1
echo "$pid"
fi
if [ $found_pids -eq 0 ]; then if [ $found_pids -eq 0 ]; then
echo "${SCRIPT_NAME}: All nodes down" echo "${SCRIPT_NAME}: All nodes down"
exit $my_exitcode exit $my_exitcode
fi fi
done done
} }
_chuid () { _chuid() {
su "$CELERYD_USER" -c "$CELERYD_MULTI $*" su "$CELERYD_USER" -c "$CELERYD_MULTI $*"
} }
start_workers () { start_workers() {
if [ ! -z "$CELERYD_ULIMIT" ]; then if [ ! -z "$CELERYD_ULIMIT" ]; then
ulimit $CELERYD_ULIMIT ulimit $CELERYD_ULIMIT
fi fi
_chuid $* start $CELERYD_NODES $DAEMON_OPTS \ _chuid "$@" start $CELERYD_NODES $DAEMON_OPTS \
--pidfile="$CELERYD_PID_FILE" \ --pidfile="$CELERYD_PID_FILE" \
--logfile="$CELERYD_LOG_FILE" \ --logfile="$CELERYD_LOG_FILE" \
--loglevel="$CELERYD_LOG_LEVEL" \ --loglevel="$CELERYD_LOG_LEVEL" \
$CELERY_APP_ARG \ $CELERY_APP_ARG \
$CELERYD_OPTS $CELERYD_OPTS
} }
dryrun () { dryrun() {
(C_FAKEFORK=1 start_workers --verbose) (C_FAKEFORK=1 start_workers --verbose)
} }
stop_workers () { stop_workers() {
_chuid stopwait $CELERYD_NODES --pidfile="$CELERYD_PID_FILE" _chuid stopwait $CELERYD_NODES --pidfile="$CELERYD_PID_FILE"
} }
restart_workers () { restart_workers() {
_chuid restart $CELERYD_NODES $DAEMON_OPTS \ _chuid restart $CELERYD_NODES $DAEMON_OPTS \
--pidfile="$CELERYD_PID_FILE" \ --pidfile="$CELERYD_PID_FILE" \
--logfile="$CELERYD_LOG_FILE" \ --logfile="$CELERYD_LOG_FILE" \
--loglevel="$CELERYD_LOG_LEVEL" \ --loglevel="$CELERYD_LOG_LEVEL" \
$CELERY_APP_ARG \ $CELERY_APP_ARG \
$CELERYD_OPTS $CELERYD_OPTS
} }
kill_workers() { kill_workers() {
_chuid kill $CELERYD_NODES --pidfile="$CELERYD_PID_FILE" _chuid kill $CELERYD_NODES --pidfile="$CELERYD_PID_FILE"
} }
restart_workers_graceful () { restart_workers_graceful() {
echo "WARNING: Use with caution in production" echo "WARNING: Use with caution in production"
echo "The workers will attempt to restart, but they may not be able to." echo "The workers will attempt to restart, but they may not be able to."
local worker_pids= local worker_pids=
worker_pids=`_get_pids` worker_pids=$(_get_pids)
[ "$one_failed" ] && exit 1 [ "$one_failed" ] && exit 1
for worker_pid in $worker_pids; do for worker_pid in $worker_pids; do
local failed= local failed=
kill -HUP $worker_pid 2> /dev/null || failed=true kill -HUP $worker_pid 2> /dev/null || failed=true
if [ "$failed" ]; then if [ "$failed" ]; then
echo "${SCRIPT_NAME} worker (pid $worker_pid) could not be restarted" echo "${SCRIPT_NAME} worker (pid $worker_pid) could not be restarted"
one_failed=true one_failed=true
else else
echo "${SCRIPT_NAME} worker (pid $worker_pid) received SIGHUP" echo "${SCRIPT_NAME} worker (pid $worker_pid) received SIGHUP"
fi fi
done done
[ "$one_failed" ] && exit 1 || exit 0 [ "$one_failed" ] && exit 1 || exit 0
} }
check_status () { check_status() {
my_exitcode=0 my_exitcode=0
found_pids=0 found_pids=0
local one_failed= local one_failed=
for pidfile in $(_get_pidfiles); do for pidfile in $(_get_pidfiles); do
if [ ! -r $pidfile ]; then if [ ! -r $pidfile ]; then
echo "${SCRIPT_NAME} down: no pidfiles found" echo "${SCRIPT_NAME} down: no pidfiles found"
one_failed=true one_failed=true
break break
fi fi
local node=`basename "$pidfile" .pid` local node
local pid=`cat "$pidfile"` local pid
local cleaned_pid=`echo "$pid" | sed -e 's/[^0-9]//g'` local cleaned_pid
if [ -z "$pid" ] || [ "$cleaned_pid" != "$pid" ]; then node=$(basename "$pidfile" .pid)
echo "bad pid file ($pidfile)" pid=$(cat "$pidfile")
one_failed=true cleaned_pid=$(echo "$pid" | sed -e 's/[^0-9]//g')
else if [ -z "$pid" ] || [ "$cleaned_pid" != "$pid" ]; then
local failed= echo "bad pid file ($pidfile)"
kill -0 $pid 2> /dev/null || failed=true one_failed=true
if [ "$failed" ]; then else
echo "${SCRIPT_NAME} (node $node) (pid $pid) is down, but pidfile exists!" local failed=
one_failed=true kill -0 $pid 2> /dev/null || failed=true
else if [ "$failed" ]; then
echo "${SCRIPT_NAME} (node $node) (pid $pid) is up..." echo "${SCRIPT_NAME} (node $node) (pid $pid) is down, but pidfile exists!"
fi one_failed=true
fi else
done echo "${SCRIPT_NAME} (node $node) (pid $pid) is up..."
[ "$one_failed" ] && exit 1 || exit 0 fi
fi
done
[ "$one_failed" ] && exit 1 || exit 0
} }
case "$1" in case "$1" in
start) start)
check_dev_null check_dev_null
check_paths check_paths
start_workers start_workers
;; ;;
stop) stop)
check_dev_null check_dev_null
check_paths check_paths
stop_workers stop_workers
;; ;;
reload|force-reload) reload | force-reload)
echo "Use restart" echo "Use restart"
;; ;;
status) status)
check_status check_status
;; ;;
restart) restart)
check_dev_null check_dev_null
check_paths check_paths
restart_workers restart_workers
;; ;;
graceful) graceful)
check_dev_null check_dev_null
restart_workers_graceful restart_workers_graceful
;; ;;
kill) kill)
check_dev_null check_dev_null
kill_workers kill_workers
;; ;;
dryrun) dryrun)
check_dev_null check_dev_null
dryrun dryrun
;; ;;
try-restart) try-restart)
check_dev_null check_dev_null
check_paths check_paths
restart_workers restart_workers
;; ;;
create-paths) create-paths)
check_dev_null check_dev_null
create_paths create_paths
;; ;;
check-paths) check-paths)
check_dev_null check_dev_null
check_paths check_paths
;; ;;
*) *)
echo "Usage: /etc/init.d/${SCRIPT_NAME} {start|stop|restart|graceful|kill|dryrun|create-paths}" echo "Usage: /etc/init.d/${SCRIPT_NAME} {start|stop|restart|graceful|kill|dryrun|create-paths}"
exit 64 # EX_USAGE exit 64 # EX_USAGE
;; ;;
esac esac
exit 0 exit 0

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides: libretime-analyzer # Provides: libretime-analyzer
@ -20,6 +20,7 @@ PIDFILE=/var/run/$NAME.pid
[ -x "$DAEMON" ] || exit 0 [ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present # Read configuration variable file if it is present
# shellcheck disable=SC1090
[ -r /etc/default/$NAME ] && . /etc/default/$NAME [ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables # Load the VERBOSE setting and other rcS variables
@ -30,49 +31,49 @@ PIDFILE=/var/run/$NAME.pid
# and status_of_proc is working. # and status_of_proc is working.
. /lib/lsb/init-functions . /lib/lsb/init-functions
start () { start() {
start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \ start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \
--make-pidfile --pidfile $PIDFILE --startas $DAEMON --make-pidfile --pidfile $PIDFILE --startas $DAEMON
} }
stop () { stop() {
# Send TERM after 5 seconds, wait at most 30 seconds. # Send TERM after 5 seconds, wait at most 30 seconds.
start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE
rm -f $PIDFILE rm -f $PIDFILE
} }
case "${1:-''}" in case "${1:-''}" in
'start') 'start')
# start commands here # start commands here
echo -n "Starting $NAME: " echo -n "Starting $NAME: "
start start
echo "Done." echo "Done."
;; ;;
'stop') 'stop')
# stop commands here # stop commands here
echo -n "Stopping $NAME: " echo -n "Stopping $NAME: "
stop stop
echo "Done." echo "Done."
;; ;;
'restart') 'restart')
# restart commands here # restart commands here
echo -n "Restarting $NAME: " echo -n "Restarting $NAME: "
stop stop
start start
echo "Done." echo "Done."
;; ;;
'force-reload') 'force-reload')
# reload commands here # reload commands here
echo -n "Reloading $NAME: " echo -n "Reloading $NAME: "
stop stop
start start
echo "Done." echo "Done."
;; ;;
'status') 'status')
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;; ;;
*) # no parameter specified *) # no parameter specified
echo "Usage: $SELF start|stop|restart|status" echo "Usage: $SELF start|stop|restart|status"
exit 1 exit 1
;; ;;
esac esac

View file

@ -1,49 +1,48 @@
#!/bin/bash -xv #!/usr/bin/env bash
set -xv
post_file() { post_file() {
#kill process after 30 minutes (360*5=30 minutes) #kill process after 30 minutes (360*5=30 minutes)
max_retry=5 max_retry=5
retry_count=0 retry_count=0
file_path="${1}" file_path="${1}"
# Give us write permissions on the file to prevent problems if the user # Give us write permissions on the file to prevent problems if the user
# uploads a read-only file. # uploads a read-only file.
chmod +w "${file_path}" chmod +w "${file_path}"
#We must remove commas because CURL can't upload files with commas in the name #We must remove commas because CURL can't upload files with commas in the name
# http://curl.haxx.se/mail/archive-2009-07/0029.html # http://curl.haxx.se/mail/archive-2009-07/0029.html
stripped_file_path=${file_path//','/''} stripped_file_path=${file_path//','/''}
mv "${file_path}" "${stripped_file_path}" mv "${file_path}" "${stripped_file_path}"
file_path="${stripped_file_path}" file_path="${stripped_file_path}"
filename="${file_path##*/}" # filename="${file_path##*/}"
airtime_conf_path=/etc/airtime/airtime.conf airtime_conf_path=/etc/airtime/airtime.conf
#instance_path will look like 1/1384, for example
http_path=$(grep base_url ${airtime_conf_path} | awk '{print $3;}')
http_port=$(grep base_port ${airtime_conf_path} | awk '{print $3;}')
#instance_path will look like 1/1384, for example #post request url - http://bananas.airtime.pro/rest/media, for example
http_path=$(grep base_url ${airtime_conf_path} | awk '{print $3;}' ) url=http://
http_port=$(grep base_port ${airtime_conf_path} | awk '{print $3;}' ) url+=$http_path
url+=:
url+=$http_port
url+=/rest/media
#post request url - http://bananas.airtime.pro/rest/media, for example api_key=$(grep api_key ${airtime_conf_path} | awk '{print $3;}')
url=http://
url+=$http_path
url+=:
url+=$http_port
url+=/rest/media
# -f is needed to make curl fail if there's an HTTP error code
api_key=$(grep api_key ${airtime_conf_path} | awk '{print $3;}' ) # -L is needed to follow redirects! (just in case)
until curl -fL --max-time 30 $url -u $api_key":" -X POST -F "file=@${file_path}"; do
# -f is needed to make curl fail if there's an HTTP error code retry_count=$((retry_count + 1))
# -L is needed to follow redirects! (just in case) if [ $retry_count -ge $max_retry ]; then
until curl -fL --max-time 30 $url -u $api_key":" -X POST -F "file=@${file_path}" break
do fi
retry_count=$[$retry_count+1] sleep 5
if [ $retry_count -ge $max_retry ]; then done
break
fi
sleep 5
done
} }
post_file "${1}" & post_file "${1}" &

View file

@ -1,21 +1,20 @@
#! /bin/bash #! /bin/bash
post_file() { post_file() {
file_path=${1} file_path=${1}
filename="${file_path##*/}" filename="${file_path##*/}"
#kill process after 30 minutes (360*5=30 minutes) #kill process after 30 minutes (360*5=30 minutes)
max_retry=10 max_retry=10
retry_count=0 retry_count=0
until curl --max-time 30 http://localhost/rest/media -u 3188BDIMPJROQP89Z0OX: -X POST -F "file=@${file_path}" -F "name=${filename}" until curl --max-time 30 http://localhost/rest/media -u 3188BDIMPJROQP89Z0OX: -X POST -F "file=@${file_path}" -F "name=${filename}"; do
do retry_count=$((retry_count + 1))
retry_count=$[$retry_count+1] if [ $retry_count -ge $max_retry ]; then
if [ $retry_count -ge $max_retry ]; then break
break fi
fi sleep 1
sleep 1 done
done
} }
post_file "${1}" & post_file "${1}" &

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides: airtime-liquidsoap # Provides: airtime-liquidsoap
@ -20,6 +20,7 @@ PIDFILE=/var/run/$NAME.pid
[ -x "$DAEMON" ] || exit 0 [ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present # Read configuration variable file if it is present
# shellcheck disable=SC1090
[ -r /etc/default/$NAME ] && . /etc/default/$NAME [ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables # Load the VERBOSE setting and other rcS variables
@ -30,49 +31,49 @@ PIDFILE=/var/run/$NAME.pid
# and status_of_proc is working. # and status_of_proc is working.
. /lib/lsb/init-functions . /lib/lsb/init-functions
start () { start() {
start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \ start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \
--make-pidfile --pidfile $PIDFILE --startas $DAEMON --make-pidfile --pidfile $PIDFILE --startas $DAEMON
} }
stop () { stop() {
# Send TERM after 5 seconds, wait at most 30 seconds. # Send TERM after 5 seconds, wait at most 30 seconds.
start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE
rm -f $PIDFILE rm -f $PIDFILE
} }
case "${1:-''}" in case "${1:-''}" in
'start') 'start')
# start commands here # start commands here
echo -n "Starting $NAME: " echo -n "Starting $NAME: "
start start
echo "Done." echo "Done."
;; ;;
'stop') 'stop')
# stop commands here # stop commands here
echo -n "Stopping $NAME: " echo -n "Stopping $NAME: "
stop stop
echo "Done." echo "Done."
;; ;;
'restart') 'restart')
# restart commands here # restart commands here
echo -n "Restarting $NAME: " echo -n "Restarting $NAME: "
stop stop
start start
echo "Done." echo "Done."
;; ;;
'force-reload') 'force-reload')
# reload commands here # reload commands here
echo -n "Reloading $NAME: " echo -n "Reloading $NAME: "
stop stop
start start
echo "Done." echo "Done."
;; ;;
'status') 'status')
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;; ;;
*) # no parameter specified *) # no parameter specified
echo "Usage: $SELF start|stop|restart|status" echo "Usage: $SELF start|stop|restart|status"
exit 1 exit 1
;; ;;
esac esac

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides: airtime-playout # Provides: airtime-playout
@ -20,6 +20,7 @@ PIDFILE=/var/run/$NAME.pid
[ -x "$DAEMON" ] || exit 0 [ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present # Read configuration variable file if it is present
# shellcheck disable=SC1090
[ -r /etc/default/$NAME ] && . /etc/default/$NAME [ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables # Load the VERBOSE setting and other rcS variables
@ -30,49 +31,49 @@ PIDFILE=/var/run/$NAME.pid
# and status_of_proc is working. # and status_of_proc is working.
. /lib/lsb/init-functions . /lib/lsb/init-functions
start () { start() {
start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \ start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \
--make-pidfile --pidfile $PIDFILE --startas $DAEMON --make-pidfile --pidfile $PIDFILE --startas $DAEMON
} }
stop () { stop() {
# Send TERM after 5 seconds, wait at most 30 seconds. # Send TERM after 5 seconds, wait at most 30 seconds.
start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE
rm -f $PIDFILE rm -f $PIDFILE
} }
case "${1:-''}" in case "${1:-''}" in
'start') 'start')
# start commands here # start commands here
echo -n "Starting $NAME: " echo -n "Starting $NAME: "
start start
echo "Done." echo "Done."
;; ;;
'stop') 'stop')
# stop commands here # stop commands here
echo -n "Stopping $NAME: " echo -n "Stopping $NAME: "
stop stop
echo "Done." echo "Done."
;; ;;
'restart') 'restart')
# restart commands here # restart commands here
echo -n "Restarting $NAME: " echo -n "Restarting $NAME: "
stop stop
start start
echo "Done." echo "Done."
;; ;;
'force-reload') 'force-reload')
# reload commands here # reload commands here
echo -n "Reloading $NAME: " echo -n "Reloading $NAME: "
stop stop
start start
echo "Done." echo "Done."
;; ;;
'status') 'status')
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;; ;;
*) # no parameter specified *) # no parameter specified
echo "Usage: $SELF start|stop|restart|status" echo "Usage: $SELF start|stop|restart|status"
exit 1 exit 1
;; ;;
esac esac

105
uninstall
View file

@ -1,70 +1,53 @@
#!/bin/bash -e #!/usr/bin/env bash
# -e Causes bash script to exit if any of the steps
# return with a non-zero return value. set -e # Exit if any of the steps fails.
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo "Please run as root user." echo "Please run as root user."
exit 1 exit 1
fi fi
getStorDirFromDatabase() { getStorDirFromDatabase() {
# here-doc to execute this block as postgres user sudo -u postgres psql -d airtime -tAc "SELECT directory FROM cc_music_dirs WHERE type='stor'"
result=`su postgres <<'EOF'
set +e
echo $(psql -d airtime -tAc "SELECT directory FROM cc_music_dirs WHERE type='stor'")
set -e
# don't indent this!
EOF`
echo $result
} }
dropLibreTimeDatabase() { dropLibreTimeDatabase() {
# here-doc to execute this block as postgres user sudo -u postgres psql -d postgres -tAc "DROP DATABASE IF EXISTS airtime_test"
su postgres <<'EOF' sudo -u postgres psql -d postgres -tAc "DROP DATABASE IF EXISTS airtime"
set +e sudo -u postgres psql -d postgres -tAc "DROP USER IF EXISTS airtime"
# DROP DATABASE cannot be executed from a function or multi-command string
psql -d postgres -tAc "DROP DATABASE IF EXISTS airtime_test"
psql -d postgres -tAc "DROP DATABASE IF EXISTS airtime"
psql -d postgres -tAc "DROP USER IF EXISTS airtime"
set -e
# don't indent this!
EOF
} }
removeRabbitmqLibreTimeSettings() { removeRabbitmqLibreTimeSettings() {
if [ -f /etc/airtime/airtime.conf ]; then if [ -f /etc/airtime/airtime.conf ]; then
RMQ_VHOST=$(awk -F ' = ' '{if (! ($0 ~ /^;/) && $0 ~ /^vhost/ ) print $2}' /etc/airtime/airtime.conf) RMQ_VHOST=$(awk -F ' = ' '{if (! ($0 ~ /^;/) && $0 ~ /^vhost/ ) print $2}' /etc/airtime/airtime.conf)
RMQ_USER=$(awk -F ' = ' '{if (! ($0 ~ /^;/) && $0 ~ /^user/ ) print $2}' /etc/airtime/airtime.conf) RMQ_USER=$(awk -F ' = ' '{if (! ($0 ~ /^;/) && $0 ~ /^user/ ) print $2}' /etc/airtime/airtime.conf)
else else
RMQ_VHOST=/airtime RMQ_VHOST=/airtime
RMQ_USER=airtime RMQ_USER=airtime
fi fi
rabbitmqctl delete_vhost ${RMQ_VHOST} rabbitmqctl delete_vhost ${RMQ_VHOST}
rabbitmqctl delete_user ${RMQ_USER} rabbitmqctl delete_user ${RMQ_USER}
} }
SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )"
AIRTIMEROOT=${SCRIPT_DIR}
STOR_DIR=$(getStorDirFromDatabase) STOR_DIR=$(getStorDirFromDatabase)
FILES=( FILES=(
"/etc/airtime" "/etc/airtime"
"/var/log/airtime" "/var/log/airtime"
"/usr/lib/airtime" "/usr/lib/airtime"
"/usr/share/airtime" "/usr/share/airtime"
"/etc/init/airtime*" "/etc/init/airtime*"
"/etc/systemd/system/libretime*" "/etc/systemd/system/libretime*"
"/usr/local/bin/airtime-*" "/usr/local/bin/airtime-*"
"/usr/bin/airtime*" "/usr/bin/airtime*"
"/etc/apache2/sites-available/airtime*" "/etc/apache2/sites-available/airtime*"
"/etc/apache2/sites-enabled/airtime*" "/etc/apache2/sites-enabled/airtime*"
) )
echo -e "The following files, directories, and services will be removed:\n" echo -e "The following files, directories, and services will be removed:\n"
for i in ${FILES[*]}; do for i in ${FILES[*]}; do
echo $i echo "$i"
done done
echo "pip3 airtime-playout" echo "pip3 airtime-playout"
@ -72,19 +55,19 @@ echo -e "\nIf your web root is not listed, you will need to manually remove it."
echo -e "\nThis will *permanently* remove LibreTime and all related files from your computer. \ echo -e "\nThis will *permanently* remove LibreTime and all related files from your computer. \
Any files in LibreTime directories and subdirectories will be deleted. Are you sure you want to proceed? [y/N]: \c" Any files in LibreTime directories and subdirectories will be deleted. Are you sure you want to proceed? [y/N]: \c"
read IN read -r IN
if [[ ! ( "$IN" = "y" || "$IN" = "Y" ) ]]; then if [[ ! ($IN == "y" || $IN == "Y") ]]; then
exit 0 exit 0
fi fi
if [ -n "${STOR_DIR}" ]; then if [ -n "${STOR_DIR}" ]; then
echo -e "\nDo you want to remove your music storage directory ${STOR_DIR} and all of its subdirectories? [y/N]: \c" echo -e "\nDo you want to remove your music storage directory ${STOR_DIR} and all of its subdirectories? [y/N]: \c"
read IN read -r IN
if [[ ( "$IN" = "y" || "$IN" = "Y" ) ]]; then if [[ $IN == "y" || $IN == "Y" ]]; then
rm -rf "${STOR_DIR}" rm -rf "${STOR_DIR}"
fi fi
else else
echo -e "\nNo stor directory found, skipping..." echo -e "\nNo stor directory found, skipping..."
fi fi
echo -e "\nUninstalling LibreTime..." echo -e "\nUninstalling LibreTime..."
@ -94,14 +77,14 @@ removeRabbitmqLibreTimeSettings
set -e set -e
for i in ${FILES[*]}; do for i in ${FILES[*]}; do
rm -rf $i rm -rf "$i"
done done
echo -e "\nDo you want to drop your current LibreTime database? [y/N]: \c" echo -e "\nDo you want to drop your current LibreTime database? [y/N]: \c"
read IN read -r IN
if [[ "$IN" = "y" || "$IN" = "Y" ]]; then if [[ $IN == "y" || $IN == "Y" ]]; then
echo -e "\nDropping LibreTime database..." echo -e "\nDropping LibreTime database..."
dropLibreTimeDatabase dropLibreTimeDatabase
fi fi
pip3 uninstall -y airtime-playout airtime-media-monitor airtime-analyzer pip3 uninstall -y airtime-playout airtime-media-monitor airtime-analyzer

View file

@ -1,7 +1,7 @@
#!/bin/bash #!/usr/bin/env bash
# Absolute path to this script # Absolute path to this script
SCRIPT=`readlink -f $0` SCRIPT=$(readlink -f $0)
# Absolute directory this script is in # Absolute directory this script is in
SCRIPTPATH=`dirname $SCRIPT` SCRIPTPATH=$(dirname $SCRIPT)
php -q $SCRIPTPATH/airtime-log.php "$@" || exit 1 php -q $SCRIPTPATH/airtime-log.php "$@" || exit 1

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# Copyright (c) 2011 Sourcefabric O.P.S. # Copyright (c) 2011 Sourcefabric O.P.S.
# #
@ -24,10 +24,10 @@
# This script send data to data collection server # This script send data to data collection server
# #
# Absolute path to this script # Absolute path to this script
SCRIPT=`readlink -f $0` SCRIPT=$(readlink -f $0)
# Absolute directory this script is in # Absolute directory this script is in
SCRIPTPATH=`dirname $SCRIPT` SCRIPTPATH=$(dirname $SCRIPT)
cd $SCRIPTPATH cd $SCRIPTPATH || exit 1
python airtime-test-soundcard.py "$@" || exit 1 python airtime-test-soundcard.py "$@" || exit 1

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
# Copyright (c) 2011 Sourcefabric O.P.S. # Copyright (c) 2011 Sourcefabric O.P.S.
# #
@ -24,10 +24,10 @@
# This script send data to data collection server # This script send data to data collection server
# #
# Absolute path to this script # Absolute path to this script
SCRIPT=`readlink -f $0` SCRIPT=$(readlink -f $0)
# Absolute directory this script is in # Absolute directory this script is in
SCRIPTPATH=`dirname $SCRIPT` SCRIPTPATH=$(dirname $SCRIPT)
cd $SCRIPTPATH cd $SCRIPTPATH || exit 1
python airtime-test-stream.py "$@" || exit 1 python airtime-test-stream.py "$@" || exit 1

View file

@ -1,46 +1,44 @@
#!/bin/bash #!/usr/bin/env bash
if [ -z "$1" ] if [ -z "$1" ]; then
then ## Use config
## Use config backup_folder=~/libretime_backup/
backup_folder=~/libretime_backup/ else
else ## User arg as config
## User arg as config backup_folder=$1
backup_folder=$1
fi fi
airtime_conf_path=/etc/airtime/airtime.conf airtime_conf_path=/etc/airtime/airtime.conf
uploads_folder=/srv/airtime/stor/ uploads_folder=/srv/airtime/stor/
psdl_db=$(grep dbname ${airtime_conf_path} | awk '{print $3;}' ) psql_db=$(grep dbname ${airtime_conf_path} | awk '{print $3;}')
psql_user=$(grep dbuser ${airtime_conf_path} | awk '{print $3;}' ) psql_user=$(grep dbuser ${airtime_conf_path} | awk '{print $3;}')
psql_password=$(grep dbpass ${airtime_conf_path} | awk '{print $3;}' ) psql_password=$(grep dbpass ${airtime_conf_path} | awk '{print $3;}')
## Remove old backup ## Remove old backup
rm -rf $backup_folder rm -rf "$backup_folder"
mkdir $backup_folder mkdir "$backup_folder"
## Backup of database ## Backup of database
echo 'db: Getting database...' echo "db: Getting database..."
pg_dump --dbname='postgresql://'$psql_user':'$psql_password'@localhost/'$psql_db > $backup_folder'database' pg_dump --dbname="postgresql://$psql_user:$psql_password@localhost/$psql_db" > "${backup_folder}database"
echo 'db: Complete' echo "db: Complete"
## Backup of sounds ## Backup of sounds
mkdir $backup_folder'uploads/' mkdir "${backup_folder}uploads/"
echo 'stor : Copying uploaded files...' echo "stor : Copying uploaded files..."
rsync -r -a --info=progress2 $uploads_folder $backup_folder'uploads/' rsync -r -a --info=progress2 $uploads_folder "${backup_folder}uploads/"
echo 'stor: Complete' echo "stor: Complete"
## Backup of libretime config ## Backup of libretime config
mkdir $backup_folder'airtime_config/' mkdir "${backup_folder}airtime_config/"
echo 'config: Copying config...' echo "config: Copying config..."
rsync -r -a --info=progress2 /etc/airtime/ $backup_folder'airtime_config/' rsync -r -a --info=progress2 /etc/airtime/ "${backup_folder}airtime_config/"
echo 'config: Complete' echo "config: Complete"
date >> $backup_folder'datelog.txt' date >> "${backup_folder}datelog.txt"

View file

@ -1,14 +1,14 @@
#!/bin/bash #!/usr/bin/env bash
/etc/init.d/rabbitmq-server status | grep "\[{pid" /etc/init.d/rabbitmq-server status | grep "\[{pid"
pid_found="$?" pid_found="$?"
if [ "$pid_found" == "0" ]; then if [ "$pid_found" == "0" ]; then
#PID is available in the status message #PID is available in the status message
rabbitmqpid=`/etc/init.d/rabbitmq-server status | grep "\[{pid" | sed "s/.*,\(.*\)\}.*/\1/"` rabbitmqpid=$(/etc/init.d/rabbitmq-server status | grep "\[{pid" | sed "s/.*,\(.*\)\}.*/\1/")
else else
#PID should be available from file #PID should be available from file
rabbitmqpid=`sed "s/.*,\(.*\)\}.*/\1/" /var/lib/rabbitmq/pids` rabbitmqpid=$(sed "s/.*,\(.*\)\}.*/\1/" /var/lib/rabbitmq/pids)
fi fi
echo "RabbitMQ PID: $rabbitmqpid" echo "RabbitMQ PID: $rabbitmqpid"

View file

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
# A bash script to convert all Rivendell's audio-library to MP3, extract meta-tags from Rivendell's # A bash script to convert all Rivendell's audio-library to MP3, extract meta-tags from Rivendell's
# database and set appropriate tags to each MP3 file. # database and set appropriate tags to each MP3 file.
@ -7,10 +7,9 @@
# 1 - Rivendell store files in .wav format, airtime uses .mp3 format # 1 - Rivendell store files in .wav format, airtime uses .mp3 format
# 2 - WAV does not have Meta-tag support so all meta-tags need to be fetched from Rivendell database. # 2 - WAV does not have Meta-tag support so all meta-tags need to be fetched from Rivendell database.
if [ $# -ne 2 ]; then if [ $# -ne 2 ]; then
echo "usage: $0 <rivendell_dir> <final_dir>" echo "usage: $0 <rivendell_dir> <final_dir>"
exit exit
fi fi
#*** MySql data ***# #*** MySql data ***#
@ -22,25 +21,23 @@ db="Rivendell" #Edit this only if you changed Rivendell's database name :-)
rivendell_dir=$1 rivendell_dir=$1
end_dir=$2 end_dir=$2
cd "$rivendell_dir" cd "$rivendell_dir" || (echo "could not cd in $rivendell_dir" && exit 1)
for file in * for file in *; do
do lame "$file"
lame "$file"
done done
mv "$rivendell_dir"/*.mp3 "$end_dir" mv "$rivendell_dir"/*.mp3 "$end_dir"
cd "$end_dir" cd "$end_dir" || (echo "could not cd in $end_dir" && exit 1)
for file in * for file in *; do
do id=$(echo "$file" | head -c 10)
id=`echo $file | head -c 10` title=$(mysql -u $user -p$pass -sN -e "SELECT CU.DESCRIPTION FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db)
title=`mysql -u $user -p$pass -sN -e "SELECT CU.DESCRIPTION FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db` artist=$(mysql -u $user -p$pass -sN -e "SELECT CA.ARTIST FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db)
artist=`mysql -u $user -p$pass -sN -e "SELECT CA.ARTIST FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db` album=$(mysql -u $user -p$pass -sN -e "SELECT CA.ALBUM FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db)
album=`mysql -u $user -p$pass -sN -e "SELECT CA.ALBUM FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db` year=$(mysql -u $user -p$pass -sN -e "SELECT CA.YEAR FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db)
year=`mysql -u $user -p$pass -sN -e "SELECT CA.YEAR FROM CUTS CU, CART CA WHERE CA.NUMBER=CU.CART_NUMBER AND CU.CUT_NAME=\"${id}\"" $db` id3 -t "$title" -a "$artist" -A "$album" -y "$year" $file
id3 -t "$title" -a "$artist" -A "$album" -y "$year" $file mv "$file" "$artist-$title.mp3"
mv "$file" "$artist-$title.mp3"
done done
exit exit