Skip to content
Snippets Groups Projects
Commit ad92c92b authored by Bob Mottram's avatar Bob Mottram
Browse files

icecast app

parent 1b8e334d
No related branches found
No related tags found
No related merge requests found
#!/bin/bash
#
# .---. . .
# | | |
# |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
# | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
# ' ' --' --' -' - -' ' ' -' -' -' ' - --'
#
# Freedom in the Cloud
#
# Icecast application
#
# License
# =======
#
# Copyright (C) 2017 Bob Mottram <bob@freedombone.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
VARIANTS='full'
IN_DEFAULT_INSTALL=0
SHOW_ON_ABOUT=1
SHOW_ICANN_ADDRESS_ON_ABOUT=0
ICECAST_DOMAIN_NAME=
ICECAST_CODE=
ICECAST_PORT=8005
ICECAST_ONION_PORT=8146
ICECAST_DIR=/icestream
ICECAST_PLAYLIST_FILE=/etc/ices2/playlist.txt
ICECAST_LOGIN_TEXT=$"Icecast login"
icecast_variables=(MY_USERNAME
ONION_ONLY
ICECAST_DOMAIN_NAME
ICECAST_CODE
DEFAULT_LANGUAGE)
function icecast_update_daemon {
echo '#! /bin/sh' > /etc/init.d/icecast2
echo '#' >> /etc/init.d/icecast2
echo '# icecast2' >> /etc/init.d/icecast2
echo '#' >> /etc/init.d/icecast2
echo '# Written by Miquel van Smoorenburg <miquels@cistron.nl>.' >> /etc/init.d/icecast2
echo '# Modified for Debian' >> /etc/init.d/icecast2
echo '# by Ian Murdock <imurdock@gnu.ai.mit.edu>.' >> /etc/init.d/icecast2
echo '#' >> /etc/init.d/icecast2
echo '# Further modified by Keegan Quinn <ice@thebasement.org>' >> /etc/init.d/icecast2
echo '# for use with Icecast 2' >> /etc/init.d/icecast2
echo '#' >> /etc/init.d/icecast2
echo '' >> /etc/init.d/icecast2
echo 'PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin' >> /etc/init.d/icecast2
echo 'DAEMON=/usr/bin/icecast2' >> /etc/init.d/icecast2
echo 'NAME=icecast2' >> /etc/init.d/icecast2
echo 'DESC=icecast2' >> /etc/init.d/icecast2
echo 'ICES=/usr/bin/ices2' >> /etc/init.d/icecast2
echo 'ICES_CONFIGFILE=/etc/ices2/ices-playlist.xml' >> /etc/init.d/icecast2
echo '' >> /etc/init.d/icecast2
echo 'test -x $DAEMON || exit 0' >> /etc/init.d/icecast2
echo '' >> /etc/init.d/icecast2
echo '# Defaults' >> /etc/init.d/icecast2
echo 'CONFIGFILE="/etc/icecast2/icecast.xml"' >> /etc/init.d/icecast2
echo 'CONFIGDEFAULTFILE="/etc/default/icecast2"' >> /etc/init.d/icecast2
echo 'USERID=icecast2' >> /etc/init.d/icecast2
echo 'GROUPID=icecast' >> /etc/init.d/icecast2
echo 'ENABLE="false"' >> /etc/init.d/icecast2
echo '' >> /etc/init.d/icecast2
echo '# Reads config file (will override defaults above)' >> /etc/init.d/icecast2
echo '[ -r "$CONFIGDEFAULTFILE" ] && . $CONFIGDEFAULTFILE' >> /etc/init.d/icecast2
echo '' >> /etc/init.d/icecast2
echo 'if [ "$ENABLE" != "true" ]; then' >> /etc/init.d/icecast2
echo ' echo "$NAME daemon disabled - read $CONFIGDEFAULTFILE."' >> /etc/init.d/icecast2
echo ' exit 0' >> /etc/init.d/icecast2
echo 'fi' >> /etc/init.d/icecast2
echo '' >> /etc/init.d/icecast2
echo 'set -e' >> /etc/init.d/icecast2
echo '' >> /etc/init.d/icecast2
echo 'case "$1" in' >> /etc/init.d/icecast2
echo ' start)' >> /etc/init.d/icecast2
echo ' echo -n "Starting $DESC: "' >> /etc/init.d/icecast2
echo ' start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \' >> /etc/init.d/icecast2
echo ' --exec $DAEMON -- -b -c $CONFIGFILE' >> /etc/init.d/icecast2
echo ' sleep 3' >> /etc/init.d/icecast2
echo ' start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE' >> /etc/init.d/icecast2
echo ' echo "$NAME."' >> /etc/init.d/icecast2
echo ' ;;' >> /etc/init.d/icecast2
echo ' stop)' >> /etc/init.d/icecast2
echo ' echo -n "Stopping $DESC: "' >> /etc/init.d/icecast2
echo ' start-stop-daemon --stop --oknodo --quiet --exec $ICES' >> /etc/init.d/icecast2
echo '' >> /etc/init.d/icecast2
echo ' start-stop-daemon --stop --oknodo --quiet --exec $DAEMON' >> /etc/init.d/icecast2
echo ' echo "$NAME."' >> /etc/init.d/icecast2
echo ' ;;' >> /etc/init.d/icecast2
echo ' reload|force-reload)' >> /etc/init.d/icecast2
echo ' echo "Reloading $DESC configuration files."' >> /etc/init.d/icecast2
echo ' start-stop-daemon --stop --oknodo --quiet --exec $ICES' >> /etc/init.d/icecast2
echo ' start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON' >> /etc/init.d/icecast2
echo ' sleep 3' >> /etc/init.d/icecast2
echo ' start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE' >> /etc/init.d/icecast2
echo ' ;;' >> /etc/init.d/icecast2
echo ' restart)' >> /etc/init.d/icecast2
echo ' echo -n "Restarting $DESC: "' >> /etc/init.d/icecast2
echo ' start-stop-daemon --stop --oknodo --quiet --exec $ICES' >> /etc/init.d/icecast2
echo '' >> /etc/init.d/icecast2
echo ' start-stop-daemon --stop --oknodo --quiet --exec $DAEMON' >> /etc/init.d/icecast2
echo ' sleep 3' >> /etc/init.d/icecast2
echo ' start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \' >> /etc/init.d/icecast2
echo ' --exec $DAEMON -- -b -c $CONFIGFILE' >> /etc/init.d/icecast2
echo ' sleep 3' >> /etc/init.d/icecast2
echo ' start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE' >> /etc/init.d/icecast2
echo ' echo "$NAME."' >> /etc/init.d/icecast2
echo ' ;;' >> /etc/init.d/icecast2
echo ' *)' >> /etc/init.d/icecast2
echo ' echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2' >> /etc/init.d/icecast2
echo ' exit 1' >> /etc/init.d/icecast2
echo ' ;;' >> /etc/init.d/icecast2
echo 'esac' >> /etc/init.d/icecast2
echo '' >> /etc/init.d/icecast2
echo 'exit 0' >> /etc/init.d/icecast2
systemctl daemon-reload
systemctl restart icecast2
}
function change_password_icecast {
curr_username="$1"
new_user_password="$2"
sed -i -e "s|<source-password>[^<]*</source-password>|<source-password>$new_user_password</source-password>|" \
-e "s|<relay-password>[^<]*</relay-password>|<relay-password>$new_user_password</relay-password>|" \
-e "s|<admin-password>[^<]*</admin-password>|<admin-password>$new_user_password</admin-password>|" \
/etc/icecast2/icecast.xml
${PROJECT_NAME}-pass -u "$curr_username" -a icecast -p "$new_user_password"
systemctl restart icecast2
}
function logging_on_icecast {
echo -n ''
}
function logging_off_icecast {
echo -n ''
}
function reconfigure_icecast {
echo -n ''
}
function icecast_convert_files {
clear
cd ${1}
echo $'Converting any mp3 files to ogg format'
find . -type f -name '*.mp3' -exec bash -c 'ffmpeg -i "$0" -c:a libvorbis -q:a 4 "${f/%mp3/ogg}' '{}' \;
echo $'Converting any mp4 files to ogv format'
find . -type f -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" -c:a libvorbis -q:a 4 "${f/%mp4/ogv}' '{}' \;
chown -R icecast2:icecast2 $ICECAST_DIR
}
function icecast_add_file_to_playlist {
files_dir=${1}
if [ ! -d $files_dir ]; then
return
fi
echo $'Adding ogg files to playlist'
find $files_dir -type f -name '*.ogg' -print0 | while read -d $'\0' file; do
if ! grep -q "$file" $ICECAST_PLAYLIST_FILE; then
echo "$file" >> $ICECAST_PLAYLIST_FILE
fi
done
echo $'Adding ogv files to playlist'
find $files_dir -type f -name '*.ogv' -print0 | while read -d $'\0' file; do
if ! grep -q "$file" $ICECAST_PLAYLIST_FILE; then
echo "$file" >> $ICECAST_PLAYLIST_FILE
fi
done
chown icecast2:icecast2 $ICECAST_PLAYLIST_FILE
systemctl restart icecast2
}
function icecast_import_from_directory {
data=$(tempfile 2>/dev/null)
dialog --title "Choose a directory containing stream files" --dselect /home/$MY_USERNAME/ 30 60 2> $data
selected_dir=$(cat $data)
rm $data
if [[ "$selected_dir" == "$ICECAST_DIR" ]]; then
return
fi
if [ ! -d $selected_dir ]; then
return
fi
if [[ "$selected_dir" == "/home/$MY_USERNAME/" ]]; then
return
fi
if [[ "$selected_dir" == "/home/$MY_USERNAME/."* ]]; then
return
fi
if [[ "$selected_dir" == *"/Maildir" || "$selected_dir" == *"/Sync" ]]; then
return
fi
dialog --title $"Import stream files directory into Icecast" \
--backtitle $"Freedombone Control Panel" \
--defaultno \
--yesno $"\nImport the directory:\n\n $selected_dir" 12 75
sel=$?
case $sel in
1) return;;
255) return;;
esac
if [ ! -d $ICECAST_DIR ]; then
mkdir -p $ICECAST_DIR
fi
dest_dir=$(basename "$selected_dir")
mv "$selected_dir" $ICECAST_DIR
icecast_convert_files $ICECAST_DIR/$dest_dir
icecast_add_file_to_playlist $ICECAST_DIR/$dest_dir
dialog --title $"Import stream files directory into Icecast" \
--msgbox $"Import success" 6 40
}
function icecast_import_from_usb {
clear
detect_usb_drive
if [ ! -b $USB_DRIVE ]; then
dialog --title $"Import stream files from USB drive" --msgbox $'No USB drive found' 6 50
return
fi
backup_mount_drive ${USB_DRIVE}
if [ ! -d $USB_MOUNT$ICECAST_DIR ]; then
dialog --title $"Import stream files from USB drive" --msgbox $'No stream files directory found on USB drive' 6 50
backup_unmount_drive ${USB_DRIVE}
fi
cp -ru $USB_MOUNT$ICECAST_DIR/* $ICECAST_DIR
backup_unmount_drive ${USB_DRIVE}
icecast_convert_files $ICECAST_DIR
dialog --title $"Import stream files from USB drive" --msgbox $'Import complete. You may now remove the USB drive' 6 50
}
function icecast_export_to_usb {
clear
detect_usb_drive
if [ ! -b $USB_DRIVE ]; then
dialog --title $"Export stream files to USB drive" --msgbox $'No USB drive found' 6 50
return
fi
backup_mount_drive ${USB_DRIVE}
if [ ! -d $USB_MOUNT$ICECAST_DIR ]; then
mkdir -p $USB_MOUNT$ICECAST_DIR
fi
cp -ru $ICECAST_DIR/* $USB_MOUNT$ICECAST_DIR
backup_unmount_drive ${USB_DRIVE}
dialog --title $"Export stream files to USB drive" --msgbox $'Export complete. You may now remove the USB drive' 6 50
}
function icecast_format_drive {
detect_usb_drive
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --title $"Format USB drive $USB_DRIVE for stream file storage" \
--backtitle $"Freedombone Control Panel" \
--defaultno \
--yesno $"\nPlease confirm that you wish to format drive\n\n ${USB_DRIVE}\n\nAll current data on the drive will be lost, and you will be prompted to give a password used to encrypt the drive.\n\nDANGER: If you screw up here and format the wrong drive it's your own fault!" 16 60
sel=$?
case $sel in
1) return;;
255) return;;
esac
rm $data
clear
echo ''
echo $"Formatting drive $USB_DRIVE. ALL CONTENTS WILL BE LOST."
echo ''
${PROJECT_NAME}-format $USB_DRIVE
dialog --title $"Format USB drive $USB_DRIVE for stream file storage" --msgbox $'Format complete. You may now export stream files or remove the USB drive' 6 50
}
function icecast_edit_playlist {
editor $ICECAST_PLAYLIST_FILE
systemctl restart icecast2
}
function icecast_change_login {
read_config_param $MY_USERNAME
ICECAST_USER_PASSWORD=$(${PROJECT_NAME}-pass -u $MY_USERNAME -a icecastuser)
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --title $"Change Icecast stream visitor login" \
--backtitle $"Freedombone Control Panel" \
--inputbox $"Enter the new login password for stream visitors" 8 60 "$ICECAST_USER_PASSWORD" 2>$data
sel=$?
case $sel in
0) ICECAST_USER_PASSWORD=$(<$data)
if [[ "$ICECAST_USER_PASSWORD" != *' '* ]]; then
if [ ${#ICECAST_USER_PASSWORD} -gt 8 ]; then
${PROJECT_NAME}-pass -u $MY_USERNAME -a icecastuser -p $ICECAST_USER_PASSWORD
dialog --title $"Change Icecast stream visitor login" \
--msgbox $"Password changed to $ICECAST_USER_PASSWORD" 6 75
fi
fi
;;
esac
rm $data
}
function icecast_enable_login {
dialog --title $"Enable Icecast login" \
--backtitle $"Freedombone Control Panel" \
--defaultno \
--yesno $"\nDo you want to add a login so that random web users can't access your stream?" 10 60
sel=$?
case $sel in
0) if grep -q '#auth_basic' /etc/nginx/sites-available/icecast; then
sed -i 's|#auth_basic|auth_basic|g' /etc/nginx/sites-available/icecast
systemctl restart nginx
fi
read_config_param $MY_USERNAME
ICECAST_USER_PASSWORD=$(${PROJECT_NAME}-pass -u $MY_USERNAME -a icecastuser)
dialog --title $"Enable Icecast login" \
--msgbox $"Icecast logins are now enabled with the password $ICECAST_USER_PASSWORD" 6 65
ICECAST_USER_PASSWORD=
;;
1) if ! grep -q '#auth_basic' /etc/nginx/sites-available/icecast; then
sed -i 's|auth_basic|#auth_basic|g' /etc/nginx/sites-available/icecast
systemctl restart nginx
fi
dialog --title $"Disable Icecast login" \
--msgbox $"Icecast logins are now disabled. Anyone can access your stream." 6 65
;;
esac
}
function configure_interactive_icecast {
while true
do
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --backtitle $"Freedombone Control Panel" \
--title $"Icecast" \
--radiolist $"Choose an operation:" 15 70 8 \
1 $"Import stream files from directory" off \
2 $"Import stream files from USB drive" off \
3 $"Manually edit playlist" off \
4 $"Export stream files to USB drive" off \
5 $"Format a USB drive for stream file storage" off \
6 $"Enable login for stream visitors" off \
7 $"Change password for stream visitors" off \
8 $"Exit" on 2> $data
sel=$?
case $sel in
1) break;;
255) break;;
esac
case $(cat $data) in
1) icecast_import_from_directory;;
2) icecast_import_from_usb;;
3) icecast_edit_playlist;;
4) icecast_export_to_usb;;
5) icecast_format_drive;;
6) icecast_enable_login;;
7) icecast_change_login;;
8) break;;
esac
done
}
function upgrade_icecast {
icecast_update_daemon
}
function backup_local_icecast {
if [ ! -d $ICECAST_DIR ]; then
return
fi
systemctl stop icecast2
cp /etc/nginx/.icepasswd $ICECAST_DIR
function_check backup_directory_to_usb
backup_directory_to_usb $ICECAST_DIR icecast
rm $ICECAST_DIR/.icepasswd
systemctl start icecast2
}
function restore_local_icecast {
if [ ! -d $ICECAST_DIR ]; then
return
fi
systemctl stop icecast2
temp_restore_dir=/root/tempicecast
function_check restore_directory_from_usb
restore_directory_from_usb $temp_restore_dir icecast
if [ -d $temp_restore_dir$ICECAST_DIR ]; then
cp -r $temp_restore_dir$ICECAST_DIR $ICECAST_DIR/
else
cp -r $temp_restore_dir/* $ICECAST_DIR/*
fi
cp $ICECAST_DIR/.icepasswd /etc/nginx/.icepasswd
rm $ICECAST_DIR/.icepasswd
chown -R icecast2:icecast2 $ICECAST_DIR
systemctl start icecast2
rm -rf $temp_restore_dir
}
function backup_remote_icecast {
if [ ! -d $ICECAST_DIR ]; then
return
fi
systemctl stop icecast2
cp /etc/nginx/.icepasswd $ICECAST_DIR
function_check backup_directory_to_friend
backup_directory_to_friend $ICECAST_DIR icecast
rm $ICECAST_DIR/.icepasswd
systemctl start icecast2
}
function restore_remote_icecast {
if [ ! -d $ICECAST_DIR ]; then
return
fi
systemctl stop icecast2
temp_restore_dir=/root/tempicecast
function_check restore_directory_from_friend
restore_directory_from_friend $temp_restore_dir icecast
if [ -d $temp_restore_dir$ICECAST_DIR ]; then
cp -r $temp_restore_dir$ICECAST_DIR $ICECAST_DIR/
else
cp -r $temp_restore_dir/* $ICECAST_DIR/*
fi
cp $ICECAST_DIR/.icepasswd /etc/nginx/.icepasswd
rm $ICECAST_DIR/.icepasswd
chown -R icecast2:icecast2 $ICECAST_DIR
systemctl start icecast2
rm -rf $temp_restore_dir
}
function remove_icecast {
nginx_dissite icecast
if [ -f /etc/nginx/sites-available/icecast ]; then
rm /etc/nginx/sites-available/icecast
fi
if [ -d /var/www/icecast ]; then
rm -rf /var/www/icecast
fi
apt-get -yq remove --purge icecast2
}
function install_icecast {
apt-get -yq install software-properties-common debconf-utils
apt-get -yq update
debconf-set-selections <<< "icecast2 icecast2/icecast-setup boolean false"
apt-get -yq install icecast2 ices2 ffmpeg apache2-utils
if [ ! -f /etc/icecast2/icecast.xml ]; then
echo $'Icecast not installed'
exit 7923528
fi
if [ ! ${ICECAST_PASSWORD} ]; then
if [ -f ${IMAGE_PASSWORD_FILE} ]; then
ICECAST_PASSWORD="$(printf `cat $IMAGE_PASSWORD_FILE`)"
else
ICECAST_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
fi
fi
ICECAST_ONION_HOSTNAME=$(add_onion_service icecast ${ICECAST_PORT} ${ICECAST_ONION_PORT})
sed -i -e "s|<source-password>[^<]*</source-password>|<source-password>$ICECAST_PASSWORD</source-password>|" \
-e "s|<relay-password>[^<]*</relay-password>|<relay-password>$ICECAST_PASSWORD</relay-password>|" \
-e "s|<admin-password>[^<]*</admin-password>|<admin-password>$ICECAST_PASSWORD</admin-password>|" \
-e "s|<hostname>[^<]*</hostname>|<hostname>$ICECAST_ONION_HOSTNAME</hostname>|" \
/etc/icecast2/icecast.xml
sed -i "s|<port>.*|<port>$ICECAST_PORT</port>|g" /etc/icecast2/icecast.xml
if [ ! -d /var/www/icecast/htdocs ]; then
mkdir -p /var/www/icecast/htdocs
fi
icecast_nginx_site=/etc/nginx/sites-available/icecast
echo 'server {' > $icecast_nginx_site
echo " listen 127.0.0.1:$ICECAST_ONION_PORT default_server;" >> $icecast_nginx_site
echo " server_name $ICECAST_ONION_HOSTNAME;" >> $icecast_nginx_site
echo '' >> $icecast_nginx_site
echo ' # Logs' >> $icecast_nginx_site
echo ' access_log /dev/null;' >> $icecast_nginx_site
echo ' error_log /dev/null;' >> $icecast_nginx_site
echo '' >> $icecast_nginx_site
echo ' location / {' >> $icecast_nginx_site
function_check nginx_limits
nginx_limits $ICECAST_ONION_HOSTNAME '15m'
echo " proxy_pass http://localhost:$ICECAST_PORT;" >> $icecast_nginx_site
echo " #auth_basic \"${ICECAST_LOGIN_TEXT}\";" >> $icecast_nginx_site
echo ' #auth_basic_user_file /etc/nginx/.icepasswd;' >> $icecast_nginx_site
echo ' }' >> $icecast_nginx_site
echo '}' >> $icecast_nginx_site
if [ ! -d /var/log/ices ]; then
mkdir -p /var/log/ices
fi
if [ ! -d /etc/ices2 ]; then
mkdir -p /etc/ices2
fi
echo '<?xml version="1.0"?>' > /etc/ices2/ices-playlist.xml
echo '<ices>' >> /etc/ices2/ices-playlist.xml
echo ' <!-- run in background -->' >> /etc/ices2/ices-playlist.xml
echo ' <background>1</background>' >> /etc/ices2/ices-playlist.xml
echo ' <!-- where logs, etc go. -->' >> /etc/ices2/ices-playlist.xml
echo ' <logpath>/var/log/ices</logpath>' >> /etc/ices2/ices-playlist.xml
echo ' <logfile>ices.log</logfile>' >> /etc/ices2/ices-playlist.xml
echo ' <!-- 1=error,2=warn,3=info,4=debug -->' >> /etc/ices2/ices-playlist.xml
echo ' <loglevel>1</loglevel>' >> /etc/ices2/ices-playlist.xml
echo ' <!-- set this to 1 to log to the console instead of to the file above -->' >> /etc/ices2/ices-playlist.xml
echo ' <consolelog>0</consolelog>' >> /etc/ices2/ices-playlist.xml
echo '' >> /etc/ices2/ices-playlist.xml
echo ' <!-- optional filename to write process id to -->' >> /etc/ices2/ices-playlist.xml
echo ' <!-- <pidfile>/home/ices/ices.pid</pidfile> -->' >> /etc/ices2/ices-playlist.xml
echo '' >> /etc/ices2/ices-playlist.xml
echo ' <stream>' >> /etc/ices2/ices-playlist.xml
echo ' <!-- metadata used for stream listing (not currently used) -->' >> /etc/ices2/ices-playlist.xml
echo ' <metadata>' >> /etc/ices2/ices-playlist.xml
echo ' <name>Example stream name</name>' >> /etc/ices2/ices-playlist.xml
echo ' <genre>Example genre</genre>' >> /etc/ices2/ices-playlist.xml
echo ' <description>A short description of your stream</description>' >> /etc/ices2/ices-playlist.xml
echo ' </metadata>' >> /etc/ices2/ices-playlist.xml
echo '' >> /etc/ices2/ices-playlist.xml
echo ' <!-- input module' >> /etc/ices2/ices-playlist.xml
echo '' >> /etc/ices2/ices-playlist.xml
echo ' The module used here is the playlist module - it has ' >> /etc/ices2/ices-playlist.xml
echo ' "submodules" for different types of playlist. There are' >> /etc/ices2/ices-playlist.xml
echo ' two currently implemented, "basic", which is a simple' >> /etc/ices2/ices-playlist.xml
echo ' file-based playlist, and "script" which invokes a command' >> /etc/ices2/ices-playlist.xml
echo ' to returns a filename to start playing. -->' >> /etc/ices2/ices-playlist.xml
echo '' >> /etc/ices2/ices-playlist.xml
echo ' <input>' >> /etc/ices2/ices-playlist.xml
echo ' <module>playlist</module>' >> /etc/ices2/ices-playlist.xml
echo ' <param name="type">basic</param>' >> /etc/ices2/ices-playlist.xml
echo ' <param name="file">playlist.txt</param>' >> /etc/ices2/ices-playlist.xml
echo ' <!-- random play -->' >> /etc/ices2/ices-playlist.xml
echo ' <param name="random">0</param>' >> /etc/ices2/ices-playlist.xml
echo ' <!-- if the playlist get updated that start at the beginning -->' >> /etc/ices2/ices-playlist.xml
echo ' <param name="restart-after-reread">0</param>' >> /etc/ices2/ices-playlist.xml
echo ' <!-- if set to 1 , plays once through, then exits. -->' >> /etc/ices2/ices-playlist.xml
echo ' <param name="once">0</param>' >> /etc/ices2/ices-playlist.xml
echo ' </input>' >> /etc/ices2/ices-playlist.xml
echo '' >> /etc/ices2/ices-playlist.xml
echo ' <!-- Stream instance' >> /etc/ices2/ices-playlist.xml
echo ' You may have one or more instances here. This allows you to ' >> /etc/ices2/ices-playlist.xml
echo ' send the same input data to one or more servers (or to different' >> /etc/ices2/ices-playlist.xml
echo ' mountpoints on the same server). Each of them can have different' >> /etc/ices2/ices-playlist.xml
echo ' parameters. This is primarily useful for a) relaying to multiple' >> /etc/ices2/ices-playlist.xml
echo ' independent servers, and b) encoding/reencoding to multiple' >> /etc/ices2/ices-playlist.xml
echo ' bitrates.' >> /etc/ices2/ices-playlist.xml
echo ' If one instance fails (for example, the associated server goes' >> /etc/ices2/ices-playlist.xml
echo ' down, etc), the others will continue to function correctly.' >> /etc/ices2/ices-playlist.xml
echo ' This example defines two instances as two mountpoints on the' >> /etc/ices2/ices-playlist.xml
echo ' same server. -->' >> /etc/ices2/ices-playlist.xml
echo ' <instance>' >> /etc/ices2/ices-playlist.xml
echo ' <!-- Server details:' >> /etc/ices2/ices-playlist.xml
echo ' You define hostname and port for the server here, along with' >> /etc/ices2/ices-playlist.xml
echo ' the source password and mountpoint. -->' >> /etc/ices2/ices-playlist.xml
echo ' <hostname>localhost</hostname>' >> /etc/ices2/ices-playlist.xml
echo " <port>$ICECAST_PORT</port>" >> /etc/ices2/ices-playlist.xml
echo " <password>$ICECAST_PASSWORD</password>" >> /etc/ices2/ices-playlist.xml
echo ' <mount>/example1.ogg</mount>' >> /etc/ices2/ices-playlist.xml
echo ' <!-- Reconnect parameters:' >> /etc/ices2/ices-playlist.xml
echo ' When something goes wrong (e.g. the server crashes, or the' >> /etc/ices2/ices-playlist.xml
echo ' network drops) and ices disconnects from the server, these' >> /etc/ices2/ices-playlist.xml
echo ' control how often it tries to reconnect, and how many times' >> /etc/ices2/ices-playlist.xml
echo ' it tries to reconnect. Delay is in seconds.' >> /etc/ices2/ices-playlist.xml
echo ' If you set reconnectattempts to -1, it will continue ' >> /etc/ices2/ices-playlist.xml
echo ' indefinately. Suggest setting reconnectdelay to a large value' >> /etc/ices2/ices-playlist.xml
echo ' if you do this.' >> /etc/ices2/ices-playlist.xml
echo ' -->' >> /etc/ices2/ices-playlist.xml
echo ' <reconnectdelay>2</reconnectdelay>' >> /etc/ices2/ices-playlist.xml
echo ' <reconnectattempts>5</reconnectattempts> ' >> /etc/ices2/ices-playlist.xml
echo '' >> /etc/ices2/ices-playlist.xml
echo ' <!-- maxqueuelength:' >> /etc/ices2/ices-playlist.xml
echo ' This describes how long the internal data queues may be. This' >> /etc/ices2/ices-playlist.xml
echo ' basically lets you control how much data gets buffered before' >> /etc/ices2/ices-playlist.xml
echo ' ices decides it cant send to the server fast enough, and ' >> /etc/ices2/ices-playlist.xml
echo ' either shuts down or flushes the queue (dropping the data)' >> /etc/ices2/ices-playlist.xml
echo ' and continues. ' >> /etc/ices2/ices-playlist.xml
echo ' For advanced users only.' >> /etc/ices2/ices-playlist.xml
echo ' -->' >> /etc/ices2/ices-playlist.xml
echo ' <maxqueuelength>80</maxqueuelength>' >> /etc/ices2/ices-playlist.xml
echo '' >> /etc/ices2/ices-playlist.xml
echo ' <!-- Live encoding/reencoding:' >> /etc/ices2/ices-playlist.xml
echo ' Currrently, the parameters given here for encoding MUST' >> /etc/ices2/ices-playlist.xml
echo ' match the input data for channels and sample rate. That ' >> /etc/ices2/ices-playlist.xml
echo ' restriction will be relaxed in the future.' >> /etc/ices2/ices-playlist.xml
echo ' Remove this section if you dont want your files getting reencoded.' >> /etc/ices2/ices-playlist.xml
echo ' -->' >> /etc/ices2/ices-playlist.xml
echo ' <encode> ' >> /etc/ices2/ices-playlist.xml
echo ' <nominal-bitrate>64000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps -->' >> /etc/ices2/ices-playlist.xml
echo ' <samplerate>44100</samplerate>' >> /etc/ices2/ices-playlist.xml
echo ' <channels>2</channels>' >> /etc/ices2/ices-playlist.xml
echo ' </encode>' >> /etc/ices2/ices-playlist.xml
echo ' </instance>' >> /etc/ices2/ices-playlist.xml
echo '' >> /etc/ices2/ices-playlist.xml
echo ' </stream>' >> /etc/ices2/ices-playlist.xml
echo '</ices>' >> /etc/ices2/ices-playlist.xml
sed -i 's|ENABLE=.*|ENABLE=true|g' /etc/default/icecast2
if [ ! -d $ICECAST_DIR ]; then
mkdir $ICECAST_DIR
fi
chown -R icecast2:icecast2 $ICECAST_DIR
# create a password for users
ICECAST_USER_PASSWORD="$(create_password ${MINIMUM_PASSWORD_LENGTH})"
if grep -q "$MY_USERNAME:" /etc/nginx/.icepasswd; then
sed -i "/$MY_USERNAME:/d" /etc/nginx/.icepasswd
fi
echo "$ICECAST_USER_PASSWORD" | htpasswd -i -s -c /etc/nginx/.icepasswd $MY_USERNAME
if [ ! -f /etc/nginx/.icepasswd ]; then
echo $'/etc/nginx/.icepasswd not found'
exit 73528235
fi
${PROJECT_NAME}-pass -u $MY_USERNAME -a icecast -p "$ICECAST_PASSWORD"
${PROJECT_NAME}-pass -u $MY_USERNAME -a icecastuser -p "$ICECAST_USER_PASSWORD"
icecast_update_daemon
nginx_ensite icecast
systemctl restart nginx
APP_INSTALLED=1
}
function install_interactive_icecast {
install_icecast
}
# NOTE: deliberately no exit 0
......@@ -175,7 +175,7 @@ function reconfigure_koel {
function koel_import_from_directory {
data=$(tempfile 2>/dev/null)
dialog --title "test" --dselect /home/$MY_USERNAME/ 30 60 2> $data
dialog --title "Choose a directory containing music" --dselect /home/$MY_USERNAME/ 30 60 2> $data
selected_dir=$(cat $data)
rm $data
if [[ "$selected_dir" == '/music' ]]; then
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment