#!/bin/bash
draw_box () {
clear
size=$2
if [ "$size" = "1" ] || [ "$size" = "0" ]
then
size=2
fi
box_size_x=64
box_size_y=17
#parse :(
bar_size2=$(echo "scale=2; 0.55 * $size" | bc)
bar_size_p=${bar_size2##*.}
bar_size=${bar_size2//.$bar_size_p/}
#parse :)
x=0
y=2
full_line=$x
export "hasu$1"="\033[0;32m"
print_numbah () {
u=$1
while (( u >= 1 ))
do
echo -ne "$2"
let "u -= 1"
done
u=0
}
draw_full_line () {
let "x += 2"
while (( "$box_size_x" >= "$x" ))
do
echo -n "#"
let "x += 1"
done
echo "#"
x=0
}
while (( "$box_size_y" >= "$y" ))
do
if [ "$y" = "2" ] || [ "$y" = "$box_size_y" ]
then
draw_full_line
else
echo -n "#"
x=3
while (( "$box_size_x" >= "$x" ))
do
echo -n " "
let "x += 1"
done
echo "#"
x=0
fi
if [ "$y" = 3 ]
then
echo -ne "#" "${hasu1}1. Update\033[0m"
print_numbah 52 " "
echo -n "#"
echo #
fi
if [ "$y" = 4 ]
then
echo -ne "# ${hasu2}2. backups\033[0m"
print_numbah 51 " "
echo -n "#"
echo #
fi
if [ "$y" = 5 ]
then
echo -ne "# ${hasu3}3. install and compile\033[0m"
print_numbah 39 " "
echo -n "#"
echo #
fi
if [ "$y" = "14" ]
then
echo -n "# |"
print_numbah $bar_size '\E[33;40m#\033[0m'
let "printade = 55 - $bar_size"
print_numbah $printade " "
echo -n "| #"
echo " "
echo -n "# |"
print_numbah $bar_size '\E[33;40m#\033[0m'
let "printade = 55 - $bar_size"
print_numbah $printade " "
echo -n "| #"
echo " "
fi
let "y += 1"
done
}
echo_err () {
#red on black bg
echo -e '\E[31;40m'ERROR: $1; tput sgr0
}
svn_get () {
echo "Downloading source of "$1
if svn co $1 > /dev/null
then
return 0
else
echo_err "failed to get source of "$1
echo "exiting..." && exit
return 1
fi
}
#updates everything, dir name
svn_update () {
if [ $(svn update $1 | wc -l) > 1 ] || [ "$2" = "f" ]
then
#echo "$1 updated"
return 0
else
#echo "$1 is already latest version"
return 1
fi
}
dir_check () {
if [ -d mythtv ]
then
if [ -d mythplugins ]
then
if [ -d myththemes ]
then
return 0
else return 2
fi
else return 2
fi
else return 2
fi
}
#will check if user is valid and if all needed programs are installed, valid_user
bas_check () {
if [ $(id -un) = $1 ]
then
if [ -e /usr/bin/gcc ] || [ -e /usr/local/bin/gcc ]
then
if [ -e /usr/bin/svn ] || [ -e /usr/local/bin/svn ]
then
if [ -e /usr/bin/bc ] || [ -e /usr/local/bin/bc ]
then
return 0
else
echo "you need to install bc"
return 2
fi
else
echo "You need to install subversion"
fi
else
echo "you need to install gcc"
return 2
fi
else
echo "you need to be" $1 "please do 'su" $1"' and come back"
return 2
fi
}
#Compile+configure for mythtv part compile_options,name
compile_1 () {
cd $2
if ./configure $1 > /dev/null
then
if qmake "$2".pro > /dev/null
then
if make > /dev/null 2>/dev/null
then
cd ..
return 0
else echo_err "failed at make of" $2 && return 3
fi
else echo_err "failed at qmake of" $2 && return 2
fi
else echo_err "failed at configure of" $2 && return 1
fi
}
#name compile_options, mythtv:myththemes:mythplugins, no_root,need to compile
compile_23 () {
if [[ $4 = 0 ]]
then
if compile_1 "$1" $2
then
if [[ $3 = 0 ]]
then
echo "Using sudo to install $2"
sudo /etc/init.d/mythtv-backend stop
#sudo /etc/init.d/mythtv-frontend stop
sleep 1
#just to make sure
killc mythbackend
killc mythfrontend
cd $2
sudo make install > /dev/null
cd ..
return 0
else
#echo "you cannot proceed because rooting is not allowed"
return 2
fi
else
echo_err "compile or install failed!" $2
echo "You need to run following as root to restore backups: "cd / && tar zxvf ~/mythlibs.tgz""
return 1
fi
else
echo "no need to compile or install" $2
return 0
fi
}
#Will tell time used, $(date +%s) at start
timer () {
let "erotus = $(date +%s) - $1"
if [[ $erotus > 60 ]]
then
aika=$(echo "scale=2; "$erotus"/60" | bc)
echo "Total process took "$aika" minutes"
else
echo "Total process took "$erotus" seconds"
fi
}
#Runs endless loop untill program is down
killc () {
while [ "$a" != "0" ]
do
if echo "$(ps -C $1)" | grep -q $1
then
#echo "Killing $1"
killall -9 $1
else
a=0
fi
done
}
svn_mythtv=http://svn.mythtv.org/svn/branches/release-0-20-fixes/mythtv
svn_myththemes=http://svn.mythtv.org/svn/branches/release-0-20-fixes/myththemes
svn_mythplugins=http://svn.mythtv.org/svn/branches/release-0-20-fixes/mythplugins
valid_user=mythtv
mythtv_options="--enable-dvb --prefix=/usr"
myththemes_options="--prefix=/usr"
mythplugins_options="--prefix=/usr"
clear
echo "#########################################################################################"
echo "# Following script will compile mythtv from svn. #"
echo "# Run this in directory where keep your mythtv source #"
echo "#########################################################################################"
echo "# ***Current settings are**** #"
echo "# mythtv source = $svn_mythtv "
echo "# mythplugins source = $svn_mythplugins"
echo "# myththemes source = $svn_myththemes "
echo "# gcc version = $(gcc -dumpversion) "
echo "#"
echo "# ***Current configure options***"
echo "# mythtv $mythtv_options "
echo "# mytplugins $mythplugins_options "
echo "# myththemes $myththemes_options "
echo " "
echo "#for force mode run this with -f"
force_mode=${1//"-"/}
vastus=s
while [ "$vastus" != "y" ]
do
echo "Do you wish to continue (y/n)"
read vastus
if [ $vastus = "n" ]
then
exit 0
fi
done
unset vastus
clear
#echo "Now checking if everything is right...."
draw_box 0 4
if bas_check $valid_user
then
echo "Everything seems to be right."
else
echo exiting...
exit
fi
echo "Install of mythtv requires root previgles do you wish to login as root? (y/n)"
vastus=s
while [ "$vastus" != "y" ]
do
read a
case "$a" in
[Yy] ) vastus=y && no_root=0 ;;
[Nn] ) no_root=2 && vastus=y ;;
* ) echo "Give 'y' or 'n'" ;;
esac
done
time=$(date +%s)
#echo "TIMER STARTED!"
draw_box 0 1
#echo "Checking if sources need to be downloaded or just updated"
draw_box 1 20
if dir_check
then
echo "good you have already downloaded it, updating ..."
if svn_update mythtv $force_mode
then
mythtv_c=0
fi
if svn_update mythplugins $force_mode
then
mythplugins_c=0
fi
if svn_update myththemes $force_mode
then
myththemes_c=0
fi
else
echo "Downloading svn"
svn_get $svn_mythtv
svn_get $svn_myththemes
svn_get $svn_mythplugins
fi
draw_box 2 40
if [ myththemes_c=0 ] || [ mythplugins_c=0 ] || [ mythtv_c=0 ]
then
echo "Making backups..."
if [ -d backups_$(date +%d.%m) ]
then
rm -rf backups_$(date +%d.%m)_old > /dev/null
mv backups_$(date +%d.%m) backups_$(date +%d.%m)_old
fi
mkdir backups_$(date +%d.%m)
tar czvf backups_$(date +%d.%m)/mythlibs.tgz /usr/lib/libmyth* /usr/bin/myth* > /dev/null 2>/dev/null
# mythbackup > /dev/null
cp /usr/share/mythtv/mainmenu.xml backups_$(date +%d.%m) > /dev/null
cp /usr/share/mythtv/optical_menu.xml backups_$(date +%d.%m) > /dev/null
fi
draw_box 3 50
echo "Now configuring, compiling and installing ( if you gave root previgles)"
cd mythtv
export QTDIR=/usr/share/qt3
cd ..
if compile_23 "$mythtv_options" mythtv $no_root $mythtv_c
then
draw_box 3 70
if compile_23 "$mythplugins_options" mythplugins $no_root $mythplugins_c
then
draw_box 3 85
if compile_23 "$myththemes_options" myththemes $no_root $myththemes_c
then
draw_box 3 100
sudo /etc/init.d/mythtv-backend start
echo "great you have succesfully installed mythtv"
#sudo /etc/init.d/mythtv-frontend start
timer $time
exit 0
else
echo_err "failed to compile or install myththemes"
fi
else
echo_err "failed to compile or install mythplugins"
fi
else
echo_err "failed to compile or install mythtv. Leaving..."
timer $time
exit 2
fi