197 lines
4.7 KiB
Bash
Executable File
197 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
## Installing kodi on a raspberry pi
|
|
## Some measures are taken to prevent corrupting existing files
|
|
## but it's intendet use is for a blank rasperry pi.
|
|
|
|
toolName="Kodi"
|
|
toolUser="kodi"
|
|
toolServiceFile="/etc/systemd/system/kodi.service"
|
|
toolProfileDir="/home/kodi/.kodi"
|
|
|
|
step_1_info() { echo "Install $toolName via apt"; }
|
|
step_1_alias() { ALIAS="install"; }
|
|
step_1() {
|
|
exe apt update && apt install kodi
|
|
}
|
|
|
|
step_2_info() { echo "Set localisation and keyboard layout"; }
|
|
step_2() {
|
|
echo "Goto \"Localisation Options\" in the following menu."
|
|
read -p "Press ENTER to continue..."
|
|
exe raspi-config
|
|
saveReturn $?
|
|
endReturn
|
|
}
|
|
|
|
step_3_info() { echo "Add $toolName user ($toolUser)"; }
|
|
step_3() {
|
|
exep "id -u $toolUser >>/dev/null 2>&1"
|
|
if [ $? -eq 0 ] ; then
|
|
echo
|
|
echo "User $toolUser exists."
|
|
echo "Skipping user creation."
|
|
return 0
|
|
fi
|
|
exe adduser \
|
|
--disabled-password \
|
|
--gecos "User to run $toolName Media Center" \
|
|
$toolUser
|
|
exe usermod -a -G audio,video,plugdev,input,tty $toolUser
|
|
saveReturn $?
|
|
endReturn
|
|
echo "User $toolUser details:"
|
|
exe id $tooLuser
|
|
}
|
|
|
|
|
|
step_4_info() { echo "Create systemd service"; }
|
|
step_4() {
|
|
addConf -c "$toolServiceContent" "$toolServiceFile"
|
|
|
|
if [ $? -eq 0 ] ; then
|
|
exe systemctl daemon-reload
|
|
exe systemctl enable kodi.service
|
|
saveReturn $?
|
|
endReturn
|
|
else
|
|
echo "[ERROR] failed to setup systemd service"
|
|
fi
|
|
}
|
|
|
|
toolServiceContent="\
|
|
[Unit]
|
|
Description = Kodi Media Center
|
|
|
|
# if you don't need the MySQL DB backend, this should be sufficient
|
|
After = systemd-user-sessions.service network.target sound.target
|
|
|
|
# if you need the MySQL DB backend, use this block instead of the previous
|
|
# After = systemd-user-sessions.service network.target sound.target mysql.service
|
|
# Wants = mysql.service
|
|
|
|
[Service]
|
|
User = kodi
|
|
Group = kodi
|
|
Type = simple
|
|
ExecStart = /usr/bin/kodi-standalone
|
|
Restart = always
|
|
RestartSec = 15
|
|
|
|
[Install]
|
|
WantedBy = multi-user.target"
|
|
|
|
step_5_info() { echo "Enable text input for USB keyboards within $toolName"; }
|
|
step_5() {
|
|
local udevFile="/etc/udev/rules.d/99-kodi.rules"
|
|
local inputRule="KERNEL==\"tty[0-9]*\", GROUP=\"tty\", MODE=\"0660\""
|
|
|
|
addConf -c "$inputRule" "$udevFile"
|
|
}
|
|
|
|
step_6_info() { echo "Increase raspberry pi GPU memory to 320"; }
|
|
step_6() {
|
|
exep "grep -e '^[ ]*gpu_mem' \"$bootConfigLoc\" >>/dev/null 2>&1"
|
|
if [ $? -ne 0 ] && [ -f "$bootConfigLoc" ] ; then
|
|
# attach settings to raspberry boot configuration
|
|
exe mount -o remount,rw /boot
|
|
addConf -a "$bootConfig" "$bootConfigLoc"
|
|
exe mount -o remount,ro /boot
|
|
else
|
|
# add to missing conf
|
|
addConf -m "$bootConfig" "$bootConfigLoc"
|
|
fi
|
|
}
|
|
|
|
bootConfigLoc="/boot/config.txt"
|
|
bootConfig="
|
|
# Modifications for $toolName
|
|
start_x=1
|
|
gpu_mem=320"
|
|
|
|
step_7_info() { echo "Reboot is needed for all changes to take effect"; }
|
|
step_7() {
|
|
if [ $QUIET -eq "1" ] ; then
|
|
answer=n
|
|
else
|
|
read -p "Reboot now? y/n(default)" answer
|
|
fi
|
|
case $answer in
|
|
y|Y)
|
|
exe reboot;;
|
|
*)
|
|
echo
|
|
echo "Start $toolName manually:"
|
|
echo "service kodi start"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
step_10_info() { echo "Send $toolName logs to syslog"; }
|
|
step_10_alias() { ALIAS="syslog"; }
|
|
step_10() {
|
|
addConf -s "$kodiSyslog" "$kodiSyslogLoc"
|
|
exe chmod -f +x "$kodiSyslogLoc"
|
|
}
|
|
kodiSyslogLoc="/usr/local/bin/kodisyslog"
|
|
kodiSyslog="#!/bin/bash
|
|
tail -f /home/kodi/.kodi/temp/kodi.log |
|
|
while read -r line
|
|
do
|
|
logger -t KODI \"\${line:37}\"
|
|
done"
|
|
|
|
step_11_info() { echo "Create systemd service for logging to syslog"; }
|
|
step_11() {
|
|
[ ! -f "$kodiSyslogLoc" ] && return 1
|
|
|
|
addConf -s "$kodiSyslogService" "$kodiSyslogServiceLoc"
|
|
|
|
echoseq " [I] Consider limiting systemd journal size"
|
|
echoseq " [/etc/systemd/journald.conf]"
|
|
echoseq " SystemMaxUse=50M"
|
|
}
|
|
kodiSyslogServiceLoc="/etc/systemd/system/kodisyslog.service"
|
|
kodiSyslogService="[Unit]
|
|
Description=Pipe kodi logs to syslog
|
|
After=network.target syslog.service
|
|
|
|
[Service]
|
|
User=root
|
|
ExecStart=/usr/local/bin/kodisyslog
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target"
|
|
|
|
step_12_info() { echo "Enable and start kodisyslog service"; }
|
|
step_12() {
|
|
local kodiSyslogName="$(basename $kodiSyslogServiceLoc)"
|
|
|
|
exe systemctl daemon-reload
|
|
exe systemctl enable $kodiSyslogName
|
|
exe systemctl start $kodiSyslogName
|
|
}
|
|
|
|
step_40_info() { echo "Reset music database"; }
|
|
step_40_alias() { ALIAS="resetmusic"; }
|
|
step_40() {
|
|
local i
|
|
local answer="y"
|
|
local musicDb=( "$toolProfileDir/userdata/Database/MyMusic"*.db )
|
|
echoseq " [W] Erasing:"
|
|
for i in ${musicDb[@]}; do
|
|
echoseq $i
|
|
done
|
|
[ $QUIET -eq 0 ] && read -p "Are you sure? (y)/[n] " answer
|
|
case "$answer" in
|
|
y|Y)
|
|
exe rm ${musicDb[@]};;
|
|
*)
|
|
echoseq " [I] Abort reset"
|
|
return 1;
|
|
esac
|
|
}
|
|
|
|
VERSION_SEQREV=12
|
|
. /usr/local/bin/sequencer.sh
|