initial release
This commit is contained in:
parent
2c32fc3715
commit
f47ed8cc36
70
conf/strummolo.ini
Normal file
70
conf/strummolo.ini
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
### stripped botamusique configuration file
|
||||||
|
[server]
|
||||||
|
host = mumble.esiliati.org
|
||||||
|
port = 64738
|
||||||
|
#password =
|
||||||
|
channel = Napoli/MSAck/streaming
|
||||||
|
#tokens = token1,token2
|
||||||
|
#certificate =
|
||||||
|
|
||||||
|
[bot]
|
||||||
|
username = jukebox
|
||||||
|
volume = 0.1
|
||||||
|
playback_mode = one-shot
|
||||||
|
autoplay_length = 5
|
||||||
|
clear_when_stop_in_oneshot = False
|
||||||
|
target_version = stable
|
||||||
|
admin = picard;nt;vzzz;shadow.penguin
|
||||||
|
music_folder = music/
|
||||||
|
database_path = database.db
|
||||||
|
tmp_folder = /tmp/
|
||||||
|
tmp_folder_max_size = 200
|
||||||
|
ignored_folders = tmp
|
||||||
|
ignored_files = Thumbs.db
|
||||||
|
download_attempts = 3
|
||||||
|
auto_check_update = True
|
||||||
|
pip3_path = bin/pip
|
||||||
|
logfile = bam-cli.log
|
||||||
|
announce_current_music = True
|
||||||
|
allow_other_channel_message = False
|
||||||
|
allow_private_message = True
|
||||||
|
save_music_library = True
|
||||||
|
refresh_cache_on_startup = True
|
||||||
|
save_playlist = True
|
||||||
|
max_track_playlist = 20
|
||||||
|
max_track_duration = 60
|
||||||
|
ducking = True
|
||||||
|
ducking_volume = 0.05
|
||||||
|
ducking_threshold = 3000
|
||||||
|
when_nobody_in_channel = nothing
|
||||||
|
|
||||||
|
|
||||||
|
[webinterface]
|
||||||
|
enabled = True
|
||||||
|
listening_addr = 127.0.0.1
|
||||||
|
listening_port = 8181
|
||||||
|
is_web_proxified = False
|
||||||
|
web_logfile = bam-web.log
|
||||||
|
|
||||||
|
require_auth = True
|
||||||
|
user = strummolo
|
||||||
|
password = tiriteppolo
|
||||||
|
|
||||||
|
[debug]
|
||||||
|
ffmpeg = False
|
||||||
|
mumbleConnection = False
|
||||||
|
|
||||||
|
[radio]
|
||||||
|
#ponyville = http://192.99.131.205:8000/stream.mp3 "Here a command of !radio comment"
|
||||||
|
#luna = http://radio.ponyvillelive.com:8002/stream "calm and orchestra music"
|
||||||
|
#radiobrony = http://62.210.138.34:8000/live "Borny music of a friend"
|
||||||
|
#celestiaradio = http://celestia.aiverse.org:8000/mp3_256
|
||||||
|
#jazz = http://jazz-wr04.ice.infomaniak.ch/jazz-wr04-128.mp3 "Jazz Yeah !"
|
||||||
|
|
||||||
|
|
||||||
|
[commands]
|
||||||
|
command_symbol = !:!
|
||||||
|
split_username_at_space = False
|
||||||
|
|
||||||
|
[strings]
|
||||||
|
# this section is left blank
|
10
conf/strummolo.liq
Normal file
10
conf/strummolo.liq
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Liquidsoap configuration
|
||||||
|
output.icecast(
|
||||||
|
%mp3(bitrate=128, samplerate=44100, stereo=true),
|
||||||
|
mount="/yourmountpoint.mp3",
|
||||||
|
host="your.streaming.server.url",
|
||||||
|
port=80,
|
||||||
|
user="username",
|
||||||
|
password="password",
|
||||||
|
name="yourstreamingname",
|
||||||
|
input.pulseaudio(device="mumble.monitor"));
|
74
conf/tmux.conf
Normal file
74
conf/tmux.conf
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
# use ISO-8859-1
|
||||||
|
#set -g iso8859-1
|
||||||
|
#set-window-option -g iso8859-1 on
|
||||||
|
#set -g utf8
|
||||||
|
#set-window-option -g utf8 on
|
||||||
|
|
||||||
|
# make tmux display things in 256 colors
|
||||||
|
setw -g xterm-keys on
|
||||||
|
set -g default-terminal "screen-256color"
|
||||||
|
|
||||||
|
# set scrollback history to 10000 (10k)
|
||||||
|
set -g history-limit 10000
|
||||||
|
|
||||||
|
# fixes shift-pageup/shift-pagedown
|
||||||
|
#set -ga terminal-overrides 'xterm*:smcup@:rmcup@'
|
||||||
|
|
||||||
|
# shorten command delay
|
||||||
|
set -sg escape-time 1
|
||||||
|
|
||||||
|
# set window and pane index to 1 (0 by default)
|
||||||
|
set-option -g base-index 1
|
||||||
|
setw -g pane-base-index 1
|
||||||
|
|
||||||
|
# reload ~/.tmux.conf using PREFIX r
|
||||||
|
bind r source-file ~/.tmux.conf \; display "Reloaded!"
|
||||||
|
|
||||||
|
# make the current window the first window
|
||||||
|
bind T swap-window -t 1
|
||||||
|
|
||||||
|
set -g mouse on
|
||||||
|
|
||||||
|
# bind WheelUp and WheelDown for scroll
|
||||||
|
bind-key -T root WheelUpPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; copy-mode -e; send-keys -M"
|
||||||
|
#bind-key -t vi-copy WheelUpPane halfpage-up
|
||||||
|
#bind-key -t vi-copy WheelDownPane halfpage-down
|
||||||
|
|
||||||
|
# bind PageUp for copy-mode
|
||||||
|
bind-key S-Pageup copy-mode -u
|
||||||
|
|
||||||
|
# bind S to toggle synchronize-panes
|
||||||
|
bind-key S set-window-option synchronize-panes \; display "synchronize-panes is now #{?pane_synchronized,on,off}"
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------
|
||||||
|
# set some pretty colors
|
||||||
|
# ----------------------
|
||||||
|
# set pane colors - hilight the active pane
|
||||||
|
set-option -g pane-border-style fg=colour235 #base02
|
||||||
|
set-option -g pane-active-border-style fg=colour240 #base01
|
||||||
|
|
||||||
|
|
||||||
|
# colorize messages in the command line
|
||||||
|
set-option -g message-style bg=black,fg=brightred #base02
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------
|
||||||
|
# Status Bar
|
||||||
|
# -----------------------
|
||||||
|
set-option -g status on # turn the status bar on
|
||||||
|
#set -g status-utf-8 on # set utf-8 for the status bar
|
||||||
|
set -g status-interval 5 # set update frequencey (default 15 seconds)
|
||||||
|
|
||||||
|
### solarized ###
|
||||||
|
set-option -g status-style bg=colour235,fg=colour130 #base02 // 235
|
||||||
|
set-window-option -g window-status-style fg=colour33,bg=default #base0 // 224
|
||||||
|
set-window-option -g window-status-current-style fg=colour196,bg=default #orange // 166
|
||||||
|
|
||||||
|
# visual notification of activity in other windows
|
||||||
|
setw -g monitor-activity on
|
||||||
|
set -g visual-activity on
|
||||||
|
|
||||||
|
set -g status-right-length 150
|
||||||
|
set -g status-right "#H | Load:#(uptime | awk -F "average:" '{print $2}') | %d-%b-%Y - %H:%M "
|
||||||
|
|
306
deploy.sh
Executable file
306
deploy.sh
Executable file
@ -0,0 +1,306 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# This script install the following components and their dependencies:
|
||||||
|
# - pulseaudio
|
||||||
|
# - Go
|
||||||
|
# - Ruby
|
||||||
|
# - Python3 (at least 3.6)
|
||||||
|
# - liquidsoap
|
||||||
|
# - barnard
|
||||||
|
# - botamusique
|
||||||
|
# - tmuxinator (optional)
|
||||||
|
# - NGINX (optional)
|
||||||
|
#
|
||||||
|
# This solution relies on a pre-existing Mumble instance.
|
||||||
|
#
|
||||||
|
# This script works ONLY on latest Debian systems - buster, atm - and it will exit if the system differs
|
||||||
|
#
|
||||||
|
# After the installation we'll have this infrastructure:
|
||||||
|
# * a streaming daemon by liquidsoap
|
||||||
|
# * a commandline mumble client that streams to liquidsoap
|
||||||
|
# * a mumble bot to play music
|
||||||
|
# * all these softwares run into a tmux session (optionally spawned by tmuxinator)
|
||||||
|
# * NGINX is an optional software to expose the botamusique web interface
|
||||||
|
#
|
||||||
|
# Author: bisco <bisco@autistici.org>
|
||||||
|
# The script is released under GNU General Public License v3 or later.
|
||||||
|
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
CONFDIR="conf"
|
||||||
|
LIQCONF="${CONFDIR}/strummolo.liq"
|
||||||
|
TMUXCONF="${CONFDIR}/tmux.conf"
|
||||||
|
BOTAMCONF="${CONFDIR}/strummolo.ini"
|
||||||
|
NGINXCONF="${CONFDIR}/nginx_vhost.conf"
|
||||||
|
TXTORCONF="${CONFDIR}/tmuxinator.yml"
|
||||||
|
MUMNICK="strummolo"
|
||||||
|
BOTNICK="jukebox"
|
||||||
|
MUMCHAN="mystrumblingchan"
|
||||||
|
USERNAME="strummolo"
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
# - make this script idempotent
|
||||||
|
# - daemonize the mumble client (maybe replaced by a bot, if it works into the infrastructure)
|
||||||
|
# - uwsgify botamusique for better performances
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Code - do not edit below unless you know what you're doing
|
||||||
|
|
||||||
|
### Exit on errors
|
||||||
|
set -e
|
||||||
|
|
||||||
|
|
||||||
|
### check_error function
|
||||||
|
### Check if things went all done when exit
|
||||||
|
check_error()
|
||||||
|
{
|
||||||
|
if [ ! $? = 0 ]; then
|
||||||
|
echo "====> ERROR!"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### trap built-in command
|
||||||
|
### Run "check_error" function on exit process status
|
||||||
|
trap check_error EXIT
|
||||||
|
|
||||||
|
|
||||||
|
### check_root function
|
||||||
|
### Check if the script has been ran by root (or sudo)
|
||||||
|
check_root()
|
||||||
|
{
|
||||||
|
if [ "$(id -u)" == "0" ];
|
||||||
|
then
|
||||||
|
echo "[OK] Check root permissions"
|
||||||
|
else
|
||||||
|
echo "[FAIL] Check root permissions"
|
||||||
|
echo "[INFO] Run this script as root or sudo"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### check_os function
|
||||||
|
### Check if the OS is a Debian Buster (10.x) otherwise the script exits
|
||||||
|
check_os()
|
||||||
|
{
|
||||||
|
if [ -e /etc/debian_version ];
|
||||||
|
then
|
||||||
|
if [[ $(cat /etc/debian_version) == "10"* ]];
|
||||||
|
then
|
||||||
|
echo "[OK] Check OS version"
|
||||||
|
else
|
||||||
|
echo "[FAIL] Check OS version"
|
||||||
|
echo "[INFO] Debian Buster not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "[FAIL] Check OS version"
|
||||||
|
echo "[INFO] Debian system not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### check_network function
|
||||||
|
### Check if network properly works otherwise the script exits
|
||||||
|
check_network()
|
||||||
|
{
|
||||||
|
ping -c 3 -q 8.8.8.8
|
||||||
|
if [ $? == 0 ];
|
||||||
|
then
|
||||||
|
echo "[OK] Check Network"
|
||||||
|
else
|
||||||
|
echo "[FAIL] Check Network"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### update_repo function
|
||||||
|
### Update the package repositories
|
||||||
|
update_repo()
|
||||||
|
{
|
||||||
|
apt-get -qq update
|
||||||
|
if [ $? == 0 ];
|
||||||
|
then
|
||||||
|
echo "[OK] Updating repository"
|
||||||
|
else
|
||||||
|
echo "[FAIL] Updating repository"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### liq_repo function
|
||||||
|
### Install liquidsoap's repository
|
||||||
|
liq_repo()
|
||||||
|
{
|
||||||
|
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 20D63CCDDD0F62C2
|
||||||
|
if [ $? == 0 ];
|
||||||
|
then
|
||||||
|
echo "[OK] Adding Liquidsoap's APT key"
|
||||||
|
else
|
||||||
|
echo "[FAIL] Adding Liquidsoap's APT key"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo deb http://deb.debian.org/debian/ buster contrib non-free > /etc/apt/sources.list.d/strummolo.list
|
||||||
|
echo deb http://deb.liquidsoap.info/debian stable main > /etc/apt/sources.list.d/liquidsoap.list
|
||||||
|
if [ $? == 0 ];
|
||||||
|
then
|
||||||
|
echo "[OK] Adding Liquidsoap's APT Repo"
|
||||||
|
else
|
||||||
|
echo "[FAIL] Adding Liquidsoap's APT Repo"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### install_pre function
|
||||||
|
install_pre()
|
||||||
|
{
|
||||||
|
apt-get -qq install -y \
|
||||||
|
curl \
|
||||||
|
gnupg
|
||||||
|
}
|
||||||
|
|
||||||
|
### install_deps function
|
||||||
|
### Install needed packages
|
||||||
|
|
||||||
|
install_deps()
|
||||||
|
{
|
||||||
|
apt-get -qq install -y \
|
||||||
|
build-essential \
|
||||||
|
pulseaudio \
|
||||||
|
liquidsoap-master \
|
||||||
|
golang \
|
||||||
|
tmux \
|
||||||
|
python3-dev \
|
||||||
|
libjpeg-dev \
|
||||||
|
zlib1g-dev \
|
||||||
|
libtiff5 \
|
||||||
|
opus-tools \
|
||||||
|
ffmpeg \
|
||||||
|
git \
|
||||||
|
libopenal-dev \
|
||||||
|
python3-venv
|
||||||
|
|
||||||
|
if [ $? == 0 ];
|
||||||
|
then
|
||||||
|
echo "[OK] Dependencies installation"
|
||||||
|
else
|
||||||
|
echo "[FAIL] Dependencies installation"
|
||||||
|
echo "[INFO] Please read the error log to solve the problem"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### create_user function
|
||||||
|
### Creates the custom user for our bundle software
|
||||||
|
create_user()
|
||||||
|
{
|
||||||
|
set +e
|
||||||
|
id -u $USERNAME >/dev/null 2>&1
|
||||||
|
if [ $? == 0 ];
|
||||||
|
then
|
||||||
|
echo "[FAIL] User creation"
|
||||||
|
echo "[INFO] User $USERNAME exists. Please remove the user and its home directory"
|
||||||
|
else
|
||||||
|
useradd -m -s /bin/bash $USERNAME
|
||||||
|
echo "[OK] User creation"
|
||||||
|
fi
|
||||||
|
set -e
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### install_barnard function
|
||||||
|
### Install Barnard, a mumble text-based client written in Go
|
||||||
|
install_pkgs()
|
||||||
|
{
|
||||||
|
su - ${USERNAME} -c "go get -u layeh.com/barnard"
|
||||||
|
if [ $? == 0 ];
|
||||||
|
then
|
||||||
|
echo "[OK] Barnard (Mumble text client)"
|
||||||
|
else
|
||||||
|
echo "[FAIL] Barnard (Mumble text client)"
|
||||||
|
echo "[INFO] Please read the error log to solve the problem"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
su - ${USERNAME} -c "mkdir -p musicbot"
|
||||||
|
su - ${USERNAME} -c "curl -Lo botamusique.tar.gz http://packages.azlux.fr/botamusique/sources.tar.gz"
|
||||||
|
su - ${USERNAME} -c "tar -xzf botamusique.tar.gz -C musicbot"
|
||||||
|
su - ${USERNAME} -c "python3 -m venv musicbot"
|
||||||
|
su - ${USERNAME} -c "/home/${USERNAME}/musicbot/bin/pip install --upgrade pip"
|
||||||
|
su - ${USERNAME} -c "/home/${USERNAME}/musicbot/bin/pip install wheel"
|
||||||
|
su - ${USERNAME} -c "/home/${USERNAME}/musicbot/bin/pip install -r musicbot/botamusique/requirements.txt"
|
||||||
|
if [ $? == 0 ];
|
||||||
|
then
|
||||||
|
echo "[OK] Botamusique (Mumble bot)"
|
||||||
|
else
|
||||||
|
echo "[FAIL] Botamusique (Mumble bot)"
|
||||||
|
echo "[INFO] Please read the error log to solve the problem"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### configure_bundle function
|
||||||
|
### Copy/create software configuration files
|
||||||
|
configure_bundle()
|
||||||
|
{
|
||||||
|
|
||||||
|
cp $TMUXCONF /home/${USERNAME}/.tmux.conf
|
||||||
|
chown ${USERNAME}:${USERNAME} /home/${USERNAME}/.tmux.conf
|
||||||
|
su - ${USERNAME} -c "mkdir -p /home/${USERNAME}/liq"
|
||||||
|
cp $LIQCONF /home/${USERNAME}/liq/
|
||||||
|
chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/liq
|
||||||
|
cp $BOTAMCONF /home/${USERNAME}/musicbot/botamusique/
|
||||||
|
chown ${USERNAME}:${USERNAME} /home/${USERNAME}/musicbot/botamusique/strummolo.ini
|
||||||
|
if [ $? == 0 ];
|
||||||
|
then
|
||||||
|
echo "[OK] Configuration files copied"
|
||||||
|
else
|
||||||
|
echo "[FAIL] Configuration files copied"
|
||||||
|
echo "[INFO] Please read the error log to solve the problem"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
### usage function
|
||||||
|
### self-explainatory
|
||||||
|
usage()
|
||||||
|
{
|
||||||
|
echo "Usage: $0 [option]";
|
||||||
|
echo "";
|
||||||
|
echo "Options available:"
|
||||||
|
echo "-s|--system = check the system for the bundle";
|
||||||
|
echo "-i|--install = install the bundle software";
|
||||||
|
echo "-h|--help = show this message and exit";
|
||||||
|
echo "";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
-s | --system)
|
||||||
|
check_root;
|
||||||
|
check_os;
|
||||||
|
check_network;;
|
||||||
|
-i | --install)
|
||||||
|
check_root;
|
||||||
|
check_os;
|
||||||
|
check_network;
|
||||||
|
update_repo;
|
||||||
|
install_pre;
|
||||||
|
liq_repo;
|
||||||
|
update_repo;
|
||||||
|
install_deps;
|
||||||
|
create_user;
|
||||||
|
install_pkgs;
|
||||||
|
configure_bundle;;
|
||||||
|
-h | --help | *)
|
||||||
|
usage;;
|
||||||
|
esac
|
Loading…
Reference in New Issue
Block a user