diff options
| author | root <root@elwms02.(none)> | 2010-04-06 16:13:08 +0200 |
|---|---|---|
| committer | root <root@elwms02.(none)> | 2010-04-06 16:13:08 +0200 |
| commit | 0e7005fcc7483c01aa102fbea358c5ac65a48d62 (patch) | |
| tree | 11517ce0d3d2977c6732b3aa583b0008083e0bd3 /functions | |
| download | x-vdr-0e7005fcc7483c01aa102fbea358c5ac65a48d62.tar.gz x-vdr-0e7005fcc7483c01aa102fbea358c5ac65a48d62.tar.bz2 | |
hello world
Diffstat (limited to 'functions')
| -rw-r--r-- | functions | 1100 |
1 files changed, 1100 insertions, 0 deletions
diff --git a/functions b/functions new file mode 100644 index 0000000..7cf784e --- /dev/null +++ b/functions @@ -0,0 +1,1100 @@ +#!/bin/sh + +# x-vdr (Installations-Skript fuer einen VDR mit Debian als Basis) +# von Marc Wernecke - www.zulu-entertainment.de +# 11.04.2009 + +# x-vdr functions + +########################################################### +## bash + +## bash alias +alias ..="cd .." +alias which="type -path" +alias where="type -all" +alias rm="rm" +alias mv="mv" +alias cp="cp" + +## x-vdr alias +alias unfreeze_rc=`which unfreeze-rc.d` +alias freeze_rc=`which freeze-rc.d` + +########################################################### +## Defaults +BACKUPDIR="/tmp/vdr-backup" +BACKUPPATH="$SOURCEDIR/x-vdr/backup" + +########################################################### +## General Functions + +# schreibe in logfile und screen +function log() { + LOGFILE="/var/log/x-vdr.log" + if [ "$1" = "--silent" ]; then + shift 1 + echo "`date` $*" >> $LOGFILE + else + echo "`date` $*" >> $LOGFILE + echo "$*" + fi +} + +# ueberpruefe eingabe (on/off) +function verify_input() { + input="$1" + [ "vi_${input}" != "vi_on" ] && input="off" + echo "$input" +} + +# ueberpruefe vdr versions nummer +function verify_vdrversion() { + input="$1" + if [ -z "$(echo "$input" | sed -e 's/ //' | grep "^1.[6-7].\+[0-9]$")" ]; then +# $DIALOG $d_args --title " $version - Eingabefehler " --msgbox "Die VDR Versions Nummer ist ungueltig!" $d_size + log "Error - VDRVERSION ist ungueltig!" + return 1 + fi + return 0 +} + +# DVB_API_VERSION +function get_dvbapi { + if [ -d $SOURCEDIR/DVB ]; then + VERSION_H=$(find $SOURCEDIR/DVB/ | grep "/version.h$") + else + VERSION_H=$(find /usr/include/linux/dvb/ | grep "/version.h$") + fi + + if [ -n "$VERSION_H" ]; then + DVB_API_VERSION=$(grep -m1 "DVB_API_VERSION" $VERSION_H | cut -f3 -d" ") + DVB_API_VERSION_MINOR=$(grep -m1 "DVB_API_VERSION_MINOR" $VERSION_H | cut -f3 -d" ") + fi +} + +# apt + +function apt_installed() { + [ "$*" != "" ] || return 1 + [ -n "$error_file" ] || error_file="/var/log/x-vdr.log" + + # set LANGUAGE to "en" + LANGUAGE_OLD="$LANGUAGE" + export LANGUAGE="en" + + + package="$1" + + if [ -n "$(echo $package | grep '/')" ]; then + package_tmp=$(echo $package | cut -f 1 -d '/') + apt_cache=$(apt-cache policy $package_tmp) + elif [ -n "$(echo $package | grep '=')" ]; then + package_tmp=$(echo $package | cut -f 1 -d '=') + apt_cache=$(apt-cache policy $package_tmp) + else + apt_cache=$(apt-cache policy $package) + fi + + export LANGUAGE="$LANGUAGE_OLD" + + if [ "$apt_cache" != "" ] && [ -z "$(echo $apt_cache | grep 'Installed.*(none)')" ]; then # installed + version=$(echo $apt_cache | cut -f 3 -d ':' | sed -e 's/Candidate//g' -e 's/^ //g' -e 's/ $//g') + if [ `echo $version | wc -m` -eq 2 ]; then + version=$(echo $apt_cache | cut -f 3,4 -d ':' | sed -e 's/Candidate//g' -e 's/^ //g' -e 's/ $//g') + fi + if [ "`echo $version | grep xvdr`" ]; then + echo "xvdr" + else + echo "debian" + fi + return 0 + fi + + echo "not installed" + return 1 +} + + +function apt_install() { + [ "$*" != "" ] || return 1 + [ -n "$error_file" ] || error_file="/var/log/x-vdr.log" + + # set LANGUAGE to "en" + LANGUAGE_OLD="$LANGUAGE" + export LANGUAGE="en" + + # check if the package is... + for package in $*; do + if [ "$APT_UPGRADE" = "on" ]; then + result=1 + apt-get -y --force-yes install $package && result=$? + case $result in + 0 ) log "$package is installed now" ;; + * ) log "ERROR - $package could not installed" ; EXITCODE=1 ; echo $package >> $error_file ;; + esac + + else + if [ -n "$(echo $package | grep '/')" ]; then + package_tmp=$(echo $package | cut -f 1 -d '/') + apt_cache=$(apt-cache policy $package_tmp) + elif [ -n "$(echo $package | grep '=')" ]; then + package_tmp=$(echo $package | cut -f 1 -d '=') + apt_cache=$(apt-cache policy $package_tmp) + else + apt_cache=$(apt-cache policy $package) + fi + + if [ "$apt_cache" != "" ]; then + if [ -n "$(echo $apt_cache | grep 'Installed.*(none)')" ]; then # not installed + version=$(echo $apt_cache | cut -f 4 -d ':' | sed -e 's/Version table//g' -e 's/^ //g' -e 's/ $//g') + if [ `echo $version | wc -m` -eq 2 ]; then + version=$(echo $apt_cache | cut -f 4,5 -d ':' | sed -e 's/Version table//g' -e 's/^ //g' -e 's/ $//g') + fi + result=1 + apt-get -y --force-yes install $package && result=$? + case $result in + 0 ) log "$package ($version) is installed now" ;; + * ) log "ERROR - $package could not installed" ; EXITCODE=1 ; echo $package >> $error_file ;; + esac + else # installed + version=$(echo $apt_cache | cut -f 3 -d ':' | sed -e 's/Candidate//g' -e 's/^ //g' -e 's/ $//g') + if [ `echo $version | wc -m` -eq 2 ]; then + version=$(echo $apt_cache | cut -f 3,4 -d ':' | sed -e 's/Candidate//g' -e 's/^ //g' -e 's/ $//g') + fi + log "$package ($version) is already installed" + fi + else # not found + log "ERROR - Unable to locate package $package" + fi + fi + done + export LANGUAGE="$LANGUAGE_OLD" +} + +function apt_remove() { + [ "$*" != "" ] || return 1 + [ -n "$error_file" ] || error_file="/var/log/x-vdr.log" + + # set LANGUAGE to "en" + LANGUAGE_OLD="$LANGUAGE" + export LANGUAGE="en" + + # check if the package is... + for package in $*; do + apt_cache=$(apt-cache policy $package) + if [ "$apt_cache" != "" ]; then + if [ -n "$(echo $apt_cache | grep 'Installed.*(none)')" ]; then # not installed + log "$package is not installed" + else # installed + result=1 + apt-get -y --force-yes --purge remove $package && result=$? + case $result in + 0 ) log "$package is removed now" ;; + * ) log "ERROR - $package could not removed" ; EXITCODE=1 ; echo $package >> $error_file ;; + esac + fi + else # not found + log "ERROR - Unable to locate package $package" + fi + done + export LANGUAGE="$LANGUAGE_OLD" +} + +########################################################### +## Install VDR Functions + +# user und group erstellen +function make_user() { + if [ "$VDRUSER" != "root" ]; then + if [ "$INS_USER" = "on" ] && [ `cat /etc/passwd | grep -cw "^${VDRUSER}:x"` -eq 0 ]; then + addgroup --gid 99 $VDRGROUP + useradd -u 99 -g $VDRGROUP -d $VDRCONFDIR -s /bin/bash -c "Video Disk Recorder" $VDRUSER + adduser $VDRUSER audio + adduser $VDRUSER video + adduser $VDRUSER cdrom + adduser $VDRUSER lp + log "VDRUSER = $VDRUSER" + log "VDRGROUP = $VDRGROUP" + elif [ "$INS_USER" = "off" ] && [ `cat /etc/passwd | grep -cw "^${VDRUSER}:x"` -gt 0 ]; then + log "VDRUSER = $VDRUSER" + log "VDRGROUP = $VDRGROUP" + log "Der user muss zur Zeit noch von Hand geloescht werden." + fi + fi +} + +# autostart on/off +function make_autostart() { + INITSCRIPT="vdr" + [ "$*" ] && INITSCRIPT=$1 + test -x /etc/init.d/$INITSCRIPT || return 1 + if [ "$AUTOSTART" = "on" ]; then + unfreeze_rc + update-rc.d $INITSCRIPT defaults 99 && log "Enable Autostart for: $INITSCRIPT" + freeze_rc + elif [ "$AUTOSTART" = "off" ]; then + unfreeze_rc + update-rc.d -f $INITSCRIPT remove && log "Disable Autostart for: $INITSCRIPT" + freeze_rc + fi +} + +# Erstellen der Verzeichnisse +function make_dirs() { + # media verzeichnis erstellen + [ ! -d $MEDIADIR ] && mkdir -p $MEDIADIR && log "Erstelle $MEDIADIR" + # video verzeichnis erstellen + [ ! -d $VIDEODIR ] && mkdir -p $VIDEODIR && log "Erstelle $VIDEODIR" + # musik verzeichnis erstellen + [ ! -d $MUSICDIR ] && mkdir -p $MUSICDIR && log "Erstelle $MUSICDIR" + # mkdir divx verzeichnis erstellen + [ ! -d $DIVXDIR ] && mkdir -p $DIVXDIR && log "Erstelle $DIVXDIR" + # bilder verzeichnis erstellen + [ ! -d $PICTUREDIR ] && mkdir -p $PICTUREDIR && log "Erstelle $PICTUREDIR" + # dvdimage verzeichnis erstellen + [ ! -d $DVDISODIR ] && mkdir -p $DVDISODIR && log "Erstelle $DVDISODIR" + # erstellen des man verzeichnisses + [ ! -d $VDRMANDIR/man1 ] && mkdir -p $VDRMANDIR/man1 && log "Erstelle $VDRMANDIR/man1" + [ ! -d $VDRMANDIR/man5 ] && mkdir -p $VDRMANDIR/man5 && log "Erstelle $VDRMANDIR/man5" + # epg + [ ! -d $VDRVARDIR ] && mkdir -p $VDRVARDIR && log "Erstelle $VDRVARDIR" + # vdr, runvdr, vdr2root, etc. + [ ! -d $VDRBINDIR ] && mkdir -p $VDRBINDIR && log "Erstelle $VDRBINDIR" + # VDRSCRIPTDIR. + [ ! -d $VDRSCRIPTDIR ] && mkdir -p $VDRSCRIPTDIR && log "Erstelle $VDRSCRIPTDIR" + # config + [ ! -d $VDRCONFDIR/plugins ] && mkdir -p $VDRCONFDIR/plugins && log "Erstelle $VDRCONFDIR" + [ ! -d $VDRCONFDIR/themes ] && mkdir -p $VDRCONFDIR/themes + # plugins + [ ! -d $VDRLIBDIR ] && mkdir -p $VDRLIBDIR && log "Erstelle $VDRLIBDIR" + # rechte setzen + chown -R $VDRUSER:$VDRGROUP $VDRCONFDIR $VDRSCRIPTDIR $VDRVARDIR $VIDEODIR $MUSICDIR $DIVXDIR $DVDISODIR $PICTUREDIR $MEDIADIR +} + +# Erstelle /etc/default/vdr +function make_default() { + [ "$setup" = "on" ] && submenu="off" + DEFAULT="/etc/default/vdr" + { + echo "# $DEFAULT" + echo "# x-vdr `date '+%F %T'`" + echo "#" + echo "" + echo "# init.d" + echo "AUTOSTART=\"$AUTOSTART\"" + echo "XPLAYER=\"$XPLAYER\"" + echo "" + echo "" + echo "# vdr" + echo "VDRUSER=\"$VDRUSER\"" + echo "VDRGROUP=\"$VDRGROUP\"" + echo "VDRBINDIR=\"$VDRBINDIR\"" + echo "VDRPRG=\"$VDRPRG\"" + echo "VDRCONFDIR=\"$VDRCONFDIR\"" + echo "VDRLIBDIR=\"$VDRLIBDIR\"" + echo "VDRSCRIPTDIR=\"$VDRSCRIPTDIR\"" + echo "VDRVARDIR=\"$VDRVARDIR\"" + echo "MEDIADIR=\"$MEDIADIR\"" + echo "VIDEODIR=\"$VIDEODIR\"" + echo "MUSICDIR=\"$MUSICDIR\"" + echo "DVDISODIR=\"$DVDISODIR\"" + echo "PICTUREDIR=\"$PICTUREDIR\"" + echo "DIVXDIR=\"$DIVXDIR\"" + echo "DVDBURNER=\"$DVDBURNER\"" + echo "KEYB_TTY=\"$KEYB_TTY\"" + echo "VDRLANG=\"$VDRLANG\"" + echo "VDRCHARSET=\"$VDRCHARSET\"" + echo "WATCHDOG=$WATCHDOG" + echo "XV_DISPLAY=$XV_DISPLAY" + echo "" + echo "" + # utilities + echo "# utilities" + echo "em8300=\"$em8300\"" + echo "graphlcd_base=\"$graphlcd_base\"" + echo "LCDproc=\"$LCDproc\"" + echo "lirc=\"$lirc\"" + echo "lirc_port=\"$lirc_port\"" + echo "noad=\"$noad\"" + echo "vdradmin=\"$vdradmin\"" +# echo "vdrconvert=\"$vdrconvert\"" +# echo "tvmovie2vdr=\"$tvmovie2vdr\"" +# echo "ssh=\"$ssh\"" +# echo "samba=\"$samba\"" +# echo "mysql=\"$mysql\"" +# echo "kde=\"$kde\"" +# echo "xxv=\"$xxv\"" +# echo "fb_tv=\"$fb_tv\"" + echo "" + echo "" + # plugins + echo "# plugins" + echo "PLUGINS_ON_TOP=\"$PLUGINS_ON_TOP\"" + xPlugins -d + echo "" + } > $DEFAULT +} + +# verify patchlevel +function verify_patchlevel() { + case "$PATCHLEVEL" in + e*|E*) PATCHLEVEL="EXTENSIONS";; + p*|P*) PATCHLEVEL="PATCHES";; + *) PATCHLEVEL="PLAIN";; + esac + ANALOGTV=`verify_input "$ANALOGTV"` + ATSC=`verify_input "$ATSC"` + CHANNELSCAN=`verify_input "$CHANNELSCAN"` + CMDRECCMDI18N=`verify_input "$CMDRECCMDI18N"` + CMDSUBMENU=`verify_input "$CMDSUBMENU"` + CUTTERLIMIT=`verify_input "$CUTTERLIMIT"` + CUTTERQUEUE=`verify_input "$CUTTERQUEUE"` + CUTTIME=`verify_input "$CUTTIME"` + DELTIMESHIFTREC=`verify_input "$DELTIMESHIFTREC"` + DDEPGENTRY=`verify_input "$DDEPGENTRY"` + DOLBYINREC=`verify_input "$DOLBYINREC"` + DVBPLAYER=`verify_input "$DVBPLAYER"` + DVBSETUP=`verify_input "$DVBSETUP"` + DVDARCHIVE=`verify_input "$DVDARCHIVE"` + DVDCHAPJUMP=`verify_input "$DVDCHAPJUMP"` + DVLFRIENDLYFNAMES=`verify_input "$DVLFRIENDLYFNAMES"` + DVLRECSCRIPTADDON=`verify_input "$DVLRECSCRIPTADDON"` + DVLVIDPREFER=`verify_input "$DVLVIDPREFER"` + EM84XX=`verify_input "$EM84XX"` + GRAPHTFT=`verify_input "$GRAPHTFT"` + HARDLINKCUTTER=`verify_input "$HARDLINKCUTTER"` + JUMPPLAY=`verify_input "$JUMPPLAY"` + LIEMIEXT=`verify_input "$LIEMIEXT"` + LIRCSETTINGS=`verify_input "$LIRCSETTINGS"` + LIVEBUFFER=`verify_input "$LIVEBUFFER"` + LNBSHARE=`verify_input "$LNBSHARE"` + MAINMENUHOOKS=`verify_input "$MAINMENUHOOKS"` + MENUORG=`verify_input "$MENUORG"` + NOEPG=`verify_input "$NOEPG"` + OSDMAXITEMS=`verify_input "$OSDMAXITEMS"` + PARENTALRATING=`verify_input "$PARENTALRATING"` + PINPLUGIN=`verify_input "$PINPLUGIN"` + PLUGINAPI=`verify_input "$PLUGINAPI"` + PLUGINMISSING=`verify_input "$PLUGINMISSING"` + PLUGINPARAM=`verify_input "$PLUGINPARAM"` + ROTOR=`verify_input "$ROTOR"` + SETTIME=`verify_input "$SETTIME"` + SETUP=`verify_input "$SETUP"` + SOFTOSD=`verify_input "$SOFTOSD"` + SOURCECAPS=`verify_input "$SOURCECAPS"` + SORTRECORDS=`verify_input "$SORTRECORDS"` + STREAMDEVEXT=`verify_input "$STREAMDEVEXT"` + SYNCEARLY=`verify_input "$SYNCEARLY"` + TIMERCMD=`verify_input "$TIMERCMD"` + TIMERINFO=`verify_input "$TIMERINFO"` + TTXTSUBS=`verify_input "$TTXTSUBS"` + VALIDINPUT=`verify_input "$VALIDINPUT"` + VOLCTRL=`verify_input "$VOLCTRL"` + WAREAGLEICON=`verify_input "$WAREAGLEICON"` + YAEPG=`verify_input "$YAEPG"` +} + +########################################################### +## VDR - BACKUP - CLEAN + +# backup vdr +function backup_vdr_bin() { + [ -d $BACKUPPATH ] || mkdir -p $BACKUPPATH + [ -d $BACKUPDIR ] && rm -rf $BACKUPDIR + mkdir -p $BACKUPDIR + # vdr + cp -pfR --parents $VDRCONFDIR $BACKUPDIR +# cp -pfR --parents $VDRVARDIR $BACKUPDIR + cp -pfR --parents $VDRLIBDIR $BACKUPDIR + cp -pfR --parents $VDRSCRIPTDIR $BACKUPDIR + cp -pf --parents $VDRPRG $BACKUPDIR + cp -pf --parents $VDRBINDIR/runvdr $BACKUPDIR + cp -pf --parents $VDRBINDIR/svdrpsend.pl $BACKUPDIR + cp -pf --parents $VDRMANDIR/man1/vdr.1.gz $BACKUPDIR + cp -pf --parents $VDRMANDIR/man5/vdr.5.gz $BACKUPDIR + cp -pf --parents /etc/default/vdr $BACKUPDIR + cp -pf --parents /etc/init.d/vdr $BACKUPDIR + # burn + [ -f $VDRBINDIR/burn-bc ] && cp -pf --parents $VDRBINDIR/burn-bc $BACKUPDIR + [ -f $VDRBINDIR/burn-buffers ] && cp -pf --parents $VDRBINDIR/burn-buffers $BACKUPDIR + [ -f $VDRBINDIR/vdrburn-archive.sh ] && cp -pf --parents $VDRBINDIR/vdrburn-archive.sh $BACKUPDIR + [ -f $VDRBINDIR/vdrburn-dvd.sh ] && cp -pf --parents $VDRBINDIR/vdrburn-dvd.sh $BACKUPDIR + # extrecmenu + [ -f $VDRBINDIR/dvdarchive.sh ] && cp -pf --parents $VDRBINDIR/dvdarchive.sh $BACKUPDIR + # pin (fskcheck) + [ -f $VDRBINDIR/fskcheck ] && cp -pf --parents $VDRBINDIR/fskcheck $BACKUPDIR + # softdevice (ShmClient) + [ -f $VDRBINDIR/ShmClient ] && cp -pf --parents $VDRBINDIR/ShmClient $BACKUPDIR + # xineliboutput (frontends and xine plugins) + [ -f $VDRBINDIR/vdr-fbfe ] && cp -pf --parents $VDRBINDIR/vdr-fbfe $BACKUPDIR + [ -f $VDRBINDIR/vdr-sxfe ] && cp -pf --parents $VDRBINDIR/vdr-sxfe $BACKUPDIR + # tarball + BACKUPFILE=$BACKUPPATH/`date +%y%m%d-%H%M`-vdr-bin.tar.gz + cd $BACKUPDIR + tar -zcf $BACKUPFILE * && log --silent "$BACKUPFILE created" + cd $SOURCEDIR/x-vdr + rm -rf $BACKUPDIR +} + +function backup_vdr_src() { + [ -d $BACKUPPATH ] || mkdir -p $BACKUPPATH + [ -d $BACKUPDIR ] && rm -rf $BACKUPDIR + mkdir -p $BACKUPDIR + cp -pfR --parents $SOURCEDIR/VDR $BACKUPDIR + if [ -d "$SOURCEDIR/vdr-$VDRVERSION" ]; then + cp -pfR --parents $SOURCEDIR/vdr-$VDRVERSION $BACKUPDIR + else + cp -pfR --parents $SOURCEDIR/vdr-* $BACKUPDIR + fi + BACKUPFILE=$BACKUPPATH/`date +%y%m%d-%H%M`-vdr-src.tar.gz + cd $BACKUPDIR + tar -zcf $BACKUPFILE * && log --silent "$BACKUPFILE created" + cd $SOURCEDIR/x-vdr + rm -rf $BACKUPDIR +} + + +function backup_vdr_conf() { + [ -d $BACKUPPATH ] || mkdir -p $BACKUPPATH + [ -d $BACKUPDIR ] && rm -rf $BACKUPDIR + mkdir -p $BACKUPDIR + cp -pfR --parents $VDRCONFDIR $BACKUPDIR + cp -pfR --parents $VDRSCRIPTDIR $BACKUPDIR + cp -pf --parents $VDRBINDIR/runvdr $BACKUPDIR + cp -pf --parents /etc/default/vdr $BACKUPDIR + cp -pf --parents /etc/init.d/vdr $BACKUPDIR + + local _AllUser="$(ls /home)" + for _User in $_AllUser; do + [ -d /home/$_User/.xine ] && cp -pfR --parents /home/$_User/.xine $BACKUPDIR + [ -f /home/$_User/vdrplayer.conf ] && cp -pf --parents /home/$_User/vdrplayer.conf $BACKUPDIR + done + [ -d /root/.xine ] && cp -pfR --parents /root/.xine $BACKUPDIR + [ -f /root/vdrplayer.conf ] && cp -pf --parents /root/vdrplayer.conf $BACKUPDIR + + BACKUPFILE=$BACKUPPATH/`date +%y%m%d-%H%M`-vdr-conf.tar.gz + cd $BACKUPDIR + tar -zcf $BACKUPFILE * && log --silent "$BACKUPFILE created" + cd $SOURCEDIR/x-vdr + rm -rf $BACKUPDIR +} + +# clean vdr +function clean_vdr() { + VDRCONF=`basename $VDRCONFDIR` + VDRVAR=`basename $VDRVARDIR` + VDRLIB=`basename $VDRLIBDIR` + VDRSCRIPT=`basename $VDRSCRIPTDIR` + # vdr + [ "$VDRCONF" = "vdr" ] && rm -rf "$VDRCONFDIR" + [ "$VDRVAR" = "epgdata" ] && rm -rf "$VDRVARDIR" + [ "$VDRLIB" = "plugins" ] && rm -rf "$VDRLIBDIR" + [ "$VDRSCRIPT" = "scripts" ] && rm -rf "$VDRSCRIPTDIR" + rm -f "$VDRPRG" + rm -f "$VDRBINDIR/runvdr" + rm -f "$VDRBINDIR/svdrpsend.pl" + rm -f "$VDRMANDIR/man1/vdr.1.gz" + rm -f "$VDRMANDIR/man5/vdr.5.gz" + rm -f /etc/default/vdr + # burn + rm -f "$VDRBINDIR/burn-bc" + rm -f "$VDRBINDIR/burn-buffers" + rm -f "$VDRBINDIR/vdrburn-archive.sh" + rm -f "$VDRBINDIR/vdrburn-dvd.sh" + # extrecmenu + rm -f "$VDRBINDIR/dvdarchive.sh" + # pin (fskcheck) + rm -f "$VDRBINDIR/fskcheck" + # softdevice (ShmClient) + rm -f "$VDRBINDIR/ShmClient" + # xineliboutput (frontends and xine plugins) + rm -f "$VDRBINDIR/vdr-fbfe" + rm -f "$VDRBINDIR/vdr-sxfe" + # init rc + local AUTOSTART="off" + make_autostart + rm -f /etc/init.d/vdr + log --silent "VDR removed" +} + +# vdr sourcen entfernen +function clean_vdr_src() { + rm -rf "$SOURCEDIR/VDR" + if [ -d "$SOURCEDIR/vdr-$VDRVERSION" ]; then + rm -rf "$SOURCEDIR/vdr-$VDRVERSION" + log --silent "VDR Source removed" + fi +} + +# vdr scripte und config entfernen - nur fuer start_reactivate (x-vdr.sh) +function clean_vdr_conf() { + VDRCONF=`basename $VDRCONFDIR` + VDRSCRIPT=`basename $VDRSCRIPTDIR` + [ "$VDRCONF" = "vdr" ] && rm -rf "$VDRCONFDIR" + [ "$VDRSCRIPT" = "scripts" ] && rm -rf "$VDRSCRIPTDIR" + rm -f $VDRBINDIR/runvdr + rm -f /etc/default/vdr + rm -f /etc/init.d/vdr + log --silent "VDR Scripts and Config removed" +} +########################################################### +## Utilitie Functions + +# download util +function download_util() { + cd $DIR + if [ -f "$FILES/utilities/$VAR" ]; then + log "$VAR gefunden" + elif [ -f "$VAR" ]; then + log "$VAR gefunden" + cp "$VAR" "$FILES/utilities" + else + log "$VAR nicht gefunden" + log "Starte download von $VAR" + for i in $WEB; do + wget --tries=2 "$i" --directory-prefix="$FILES/utilities" && log "Download von $VAR erfolgreich" && break + done + [ ! -f "$FILES/utilities/$VAR" ] && log "Download von $VAR nicht erfolgreich" && exit 1 + fi +} + +# extrahiere util +function extract_util() { + if echo "$FILES/utilities/$VAR" | grep ".bz2$" &>/dev/null; then + tar xjf "$FILES/utilities/$VAR" -C $SOURCEDIR && log "Extrahiere $VAR" + else + tar xzf "$FILES/utilities/$VAR" -C $SOURCEDIR && log "Extrahiere $VAR" + fi +} + +# check utilitie +function utilitie_check() { + KERNEL=`uname -r` + case $1 in + cdfs) + if [ -f /lib/modules/$KERNEL/extra/cdfs.ko ]; then + echo "" + echo "cdfs" + echo "/lib/modules/$KERNEL/extra/cdfs.ko" + return 2 + fi + ;; + em8300) + EM8300="/lib/modules/$KERNEL/em8300" + if [ -f $EM8300/adv717x.ko ] && [ -f $EM8300/bt865.ko ] && [ -f $EM8300/em8300.ko ]; then + echo "" + echo "adv717x.ko bt865.ko em8300.ko" + echo "$EM8300" + return 2 + fi + ;; + ffmpeg) + var=`which ffmpeg` + if [ "$var" ]; then + echo "" + echo "ffmpeg" + echo "$var" + return 2 + fi + ;; + genindex) + var=`which genindex` + if [ "$var" ]; then + echo "" + echo "genindex" + echo "$var" + return 2 + fi + ;; + graphlcd_base) + if [ -f $PREFIX/lib/libglcddrivers.so ]; then + echo "" + echo "graphlcd-base" + echo "$PREFIX/lib/libglcddrivers.so" + return 2 + fi + ;; + LCDproc) + var=`which LCDd` + if [ "$var" ]; then + echo "" + echo "LCDd" + echo "$var" + return 2 + fi + ;; + lirc) + var=`which lircd` + if [ "$var" ]; then + echo "" + echo `lircd -v` + echo "$var" + return 2 + fi + ;; + mplayer) + var=`which mplayer` + if [ "$var" ]; then + echo "" + echo "Mplayer" + echo "$var" + return 2 + fi + ;; + noad) + var=`which noad` + if [ "$var" ]; then + echo "" + echo `noad -V` + echo "$var" + return 2 + fi + ;; + nvram-wakeup) + var=`which nvram-wakeup` + if [ "$var" ]; then + echo "" + echo `nvram-wakeup -v` + echo "$var" + return 2 + fi + ;; + projectx) + if [ -f $PREFIX/bin/ProjectX/ProjectX.jar ]; then + echo "" + echo "ProjectX" + echo "$PREFIX/bin/ProjectX/ProjectX.jar" + return 2 + fi + ;; + vdradmin) + var=`which vdradmind.pl` + if [ "$var" ]; then + echo "" + echo "VDRadmin" + echo "$var" + return 2 + fi + ;; + vdrfonts) + if [ -d /usr/share/fonts/truetype/vdrsymbols ]; then + echo "" + echo "vdrfonts" + echo "/usr/share/fonts/truetype/vdrsymbols" + return 2 + fi + ;; + vidix) + if [ -f $PREFIX/include/vidix/fourcc.h ] && [ -f $PREFIX/include/vidix/vidix.h ] && [ -f $PREFIX/include/vidix/vidixlib.h ]; then + echo "" + echo "vidix" + echo "$PREFIX/include/vidix" + return 2 + fi + ;; + xine_lib) + var=`which xine` + if [ "$var" ]; then + echo "" + echo `xine -v` + echo "$var" + return 2 + fi + ;; + y4mscaler) + var=`which y4mscaler` + if [ "$var" ]; then + echo "" + echo `y4mscaler -V` + echo "$var" + return 2 + fi + ;; + esac +} + +# utilitie commands +function cmd_util() { + case $cmd in + --clean|-c) + clean_util + ;; + --make|-m) + make_util + ;; + --remake|-r) + clean_util + make_util + ;; + --status|-s) + status_util + exit 0 + ;; + --version|-v) + echo "$VERSION" + exit 0 + ;; + *) + echo "Moegliche Parameter sind:" + echo "--clean|-c -> Utilitie wird entfernt" + echo "--make|-m -> Utilitie wird installiert" + echo "--remake|-r -> wie --clean und --make" + echo "--status|-s -> 0=nicht gefunden, 1=gefunden 2=1+Source gefunden" + echo "--version|-v -> Zeigt die Utilitie-Version des Skripts" + echo "" + echo "Es ist immer nur ein Parameter erlaubt." + echo "" + exit 1 + ;; + esac +} + +########################################################### +## Plugin Functions + +# plugin helper function +function xPlugins() { + cmd="$1" + plugin_list= + # read libdir and create a pluginlist + plugs=$(ls -B "$SOURCEDIR/x-vdr/plugins") + if [ -n "$plugs" ]; then + for plug in $plugs ; do + if [ -z "${!plug}" ]; then + echo "" >> $SOURCEDIR/x-vdr/x-vdr.conf + echo "# $plug" >> $SOURCEDIR/x-vdr/x-vdr.conf + echo "${plug}=\"off"\" >> $SOURCEDIR/x-vdr/x-vdr.conf + eval ${plug}="off" + fi + if [ "x${!plug}" = "xon" ] || [ "x${!plug}" = "xoff" ]; then + args="${plug}_args" + plug_args="${!args}" + desc="${plug}_desc" + if [ -n "${!desc}" ]; then + plug_desc="${!desc}" + else + plug_desc="no description available" + fi + plug_name="${plug}" + plug_stat="${!plug}" + # menues + case $cmd in + -d) # write current config to /etc/default/vdr + echo "" + echo "# $plug_name" + case $plug_name in + vdr_plugins) + echo "hello=\"$plug_stat\"" + echo "osddemo=\"$plug_stat\"" + echo "svccli=\"$plug_stat\"" + echo "svcsvr=\"$plug_stat\"" + echo "skincurses=\"$plug_stat\"" + echo "sky=\"$plug_stat\"" + echo "status=\"$plug_stat\"" + echo "svdrpdemo=\"$plug_stat\"" ;; + streamdev) + echo "streamdev_client=\"$streamdev_client\"" + echo "streamdev_server=\"$streamdev_server\"" + echo "streamdev_server_args=\"$streamdev_server_args\"" ;; + mp3) + echo "$plug_name=\"$plug_stat\"" + echo "$args=\"$plug_args\"" + echo "" + echo "# mplayer" + echo "mplayer=\"$mplayer\"" + echo "mplayer_args=\"$mplayer_args\"" ;; + epgsearch) + echo "$plug_name=\"$plug_stat\"" + echo "$args=\"$plug_args\"" + echo "epgsearchonly=\"$epgsearchonly\"" + echo "conflictcheckonly=\"$conflictcheckonly\"" + echo "quickepgsearch=\"$quickepgsearch\"" ;; + *) + echo "$plug_name=\"$plug_stat\"" + [ "$plug_name" = "remote" ] && echo "remote_event=\"$remote_event\"" + [ -n "$plug_args" ] && echo "$args=\"$plug_args\"" ;; + esac ;; + -l) # create a list for sd_plugins + plugin_list="$plugin_list $plug_name \"$plug_desc\" $plug_stat " ;; + -m) # create a list for PluginMenu + var="inaktiv" + [ "$plug_stat" = "on" ] && var="aktiv" + plugin_list="$plugin_list $plug_name $var " ;; + -o) # set all plugins to off + eval $plug_name=off ;; + -s) # write to (x-vdr) setup.conf + echo "$plug_name=\"$plug_stat\"" ;; + esac + + else + plug_args="" + plug_desc="" + plug_name="" + plug_stat="" + eval ${plug}="off" + fi + done + fi +} + +# download plugin +function download_plugin() { + cd $DIR + if [ -f "$FILES/plugins/$VAR" ]; then + log "$VAR gefunden" + elif [ -f "$VAR" ]; then + log "$VAR gefunden" + cp "$VAR" "$FILES/plugins" + else + log "$VAR nicht gefunden" + log "Starte download von $VAR" + for i in $WEB; do + wget --tries=2 "$i" --directory-prefix="$FILES/plugins" && log "Download von $VAR erfolgreich" && break + done + [ ! -f "$FILES/plugins/$VAR" ] && log "Download von $VAR nicht erfolgreich" && exit 1 + fi +} + +# extrahiere plugin +function extract_plugin() { + [ -d "$SOURCEDIR/VDR/PLUGINS/src/$VERSION" ] && exit 0 + if echo "$FILES/plugins/$VAR" | grep ".bz2$" &>/dev/null; then + tar xjf "$FILES/plugins/$VAR" -C "$SOURCEDIR/VDR/PLUGINS/src" && log "Extrahiere $VAR" + else + tar xzf "$FILES/plugins/$VAR" -C "$SOURCEDIR/VDR/PLUGINS/src" && log "Extrahiere $VAR" + fi +} + +# patch plugin +function patch_plugin() { + [ ! -d "$DIR/patches" ] && mkdir "$DIR/patches" && return 0 + [ ! -d "$SOURCEDIR/VDR/PLUGINS/src/$LINK" ] && log "ERROR - $LINK not found" && return 1 + cd "$SOURCEDIR/VDR/PLUGINS/src/$LINK" + for i in `ls $DIR/patches | grep ".bz2$"`; do log "apply patch $i"; bzcat $DIR/patches/$i|patch; done + for i in `ls $DIR/patches | grep ".diff$"`; do log "apply patch $i"; patch < $DIR/patches/$i; done + for i in `ls $DIR/patches | grep ".patch$"`; do log "apply patch $i"; patch < $DIR/patches/$i; done +} + +# patch-p1 plugin +function patch_p1_plugin() { + [ -d "$DIR/patches/p1" ] || return 0 + cd "$SOURCEDIR/VDR/PLUGINS/src/$LINK" + for i in `ls $DIR/patches/p1 | grep ".bz2$"`; do log "apply patch $i"; bzcat $DIR/patches/p1/$i|patch -p 1; done + for i in `ls $DIR/patches/p1 | grep ".diff$"`; do log "apply patch $i"; patch -p 1 < $DIR/patches/p1/$i; done + for i in `ls $DIR/patches/p1 | grep ".patch$"`; do log "apply patch $i"; patch -p 1 < $DIR/patches/p1/$i; done +} + +# patch-p2 plugin +function patch_p2_plugin() { + [ -d "$DIR/patches/p2" ] || return 0 + cd "$SOURCEDIR/VDR/PLUGINS/src/$LINK" + for i in `ls $DIR/patches/p2 | grep ".bz2$"`; do log "apply patch $i"; bzcat $DIR/patches/p2/$i|patch -p 2; done + for i in `ls $DIR/patches/p2 | grep ".diff$"`; do log "apply patch $i"; patch -p 2 < $DIR/patches/p2/$i; done + for i in `ls $DIR/patches/p2 | grep ".patch$"`; do log "apply patch $i"; patch -p 2 < $DIR/patches/p2/$i; done +} + +# patch-p3 plugin +function patch_p3_plugin() { + [ -d "$DIR/patches/p3" ] || return 0 + cd "$SOURCEDIR/VDR/PLUGINS/src/$LINK" + for i in `ls $DIR/patches/p3 | grep ".bz2$"`; do log "apply patch $i"; bzcat $DIR/patches/p3/$i|patch -p 3; done + for i in `ls $DIR/patches/p3 | grep ".diff$"`; do log "apply patch $i"; patch -p 3 < $DIR/patches/p3/$i; done + for i in `ls $DIR/patches/p3 | grep ".patch$"`; do log "apply patch $i"; patch -p 3 < $DIR/patches/p3/$i; done +} + +# patch-p2 plugin +function patch_p4_plugin() { + [ -d "$DIR/patches/p4" ] || return 0 + cd "$SOURCEDIR/VDR/PLUGINS/src/$LINK" + for i in `ls $DIR/patches/p4 | grep ".bz2$"`; do log "apply patch $i"; bzcat $DIR/patches/p4/$i|patch -p 4; done + for i in `ls $DIR/patches/p4 | grep ".diff$"`; do log "apply patch $i"; patch -p 4 < $DIR/patches/p4/$i; done + for i in `ls $DIR/patches/p4 | grep ".patch$"`; do log "apply patch $i"; patch -p 4 < $DIR/patches/p4/$i; done +} + + +# make plugin +function make_plugin() { + cd "$SOURCEDIR/VDR/PLUGINS/src/$LINK" + log "starte mit $LINK" + make all + case "$LINK" in + mp3) LIB="mp3";; # mplayer + streamdev) LIB="streamdev-server";; # streamdev-client + *) LIB="$LINK";; + esac + if [ -f $VDRLIBDIR/libvdr-$LIB.so* ]; then + # copy locale + if [ -d $SOURCEDIR/VDR/locale ]; then + [ ! -d $VDRLOCDIR ] && mkdir -p $VDRLOCDIR && log "Erstelle $VDRLOCDIR" + cd "$SOURCEDIR/VDR/locale" + cp -fR --parents */LC_MESSAGES/vdr-$LINK.mo $VDRLOCDIR >/dev/null 2>&1 + [ "$LIB" = "mp3" ] && cp -fR --parents */LC_MESSAGES/vdr-mplayer.mo $VDRLOCDIR >/dev/null 2>&1 + fi + log "$LINK erfolgreich erstellt" + else + log "$LINK konnte nicht erstellt werden" + fi +} + +# plugin status +function status_plugin() { + case "$LINK" in + mp3) LIB="mp3";; # mplayer + streamdev) LIB="streamdev-server";; # streamdev-client + *) LIB="$LINK";; + esac + if [ -f $VDRLIBDIR/libvdr-$LIB.so* ]; then + echo "1" + else + if [ -d "$SOURCEDIR/VDR/PLUGINS/src/$LINK" ]; then + echo "2" + else + echo "0" + fi + fi +} + +# plugin commands +function cmd_plugin() { + case $cmd in + --clean|-c) + clean_plugin + ;; + --install|-i) + install_plugin + ;; + --make|-m) + install_plugin + make_plugin + ;; + --remake|-r) + clean_plugin + install_plugin + make_plugin + ;; + --status|-s) + status_plugin + exit 0 + ;; + --version|-v) + echo "$VERSION" + exit 0 + ;; + *) + echo "Moegliche Parameter sind:" + echo "--clean|-c -> entfernt das Plugin" + echo "--install|-i -> entpackt das Plugin etc." + echo "--make|-m -> wie --install aber das Plugin wird sofort uebersetzt" + echo "--remake|-r -> wie --clean und --install und --make" + echo "--status|-s -> 0=nicht gefunden, 1=gefunden" + echo "--version|-v -> Zeigt die Plugin-Version des Skripts" + echo "" + echo "Es ist immer nur ein Parameter erlaubt." + echo "" + exit 1 + ;; + esac +} + +function list_plugins() { + PLUGINDIR="$SOURCEDIR/VDR/PLUGINS" + anzahl=`ls $PLUGINDIR/src | grep -v '[^a-z0-9]' | wc -l` + version_vdr=`egrep '.*VDRVERSION.*"' $SOURCEDIR/VDR/config.h | sed -e 's/.* "//' | sed -e 's/[";]//g' | tr -d '\015' | tr -d '\012'` + version_api=`egrep '.*APIVERSION.*"' $SOURCEDIR/VDR/config.h | sed -e 's/.* "//' | sed -e 's/[";]//g' | tr -d '\015' | tr -d '\012'` + + echo "Es folgt eine Liste von $anzahl Plugins" + echo "Kennzeichen * --> uebersetzt fuer VDR-Version $version_vdr" + echo "Kennzeichen ! --> nicht uebersetzt (laesst sich nicht uebersetzen?)" + echo + echo "Plugin-Name Version (Version von Verzeichniss) / Hinweis" + echo + + for i in `ls $PLUGINDIR/src | grep -v '[^a-z0-9]'` + do + plugin_name=`egrep -m 1 '^[[:space:]]*PLUGIN[1=[:space:]]' $PLUGINDIR/src/$i/Makefile | sed -e 's/[\t ]*PLUGIN.*=//' | cut -f 1 -d "#" | sed -e 's/ //g'` + [ "$i" = "atmo" ] && plugin_name="atmo" # dirty hack for the atmolight-plugin + [ "$i" = "sport" ] && plugin_name="sport" # dirty hack for the sport-plugin + plugin_file1="" + for testfile in version.h src/version.h plugin.c $plugin_name.c $plugin_name.cpp $plugin_name.cc + do + if [ -z "$plugin_file1" -a -r $PLUGINDIR/src/$i/$testfile ]; then + plugin_file1="$testfile" + plugin_file2=`echo $plugin_file1 | sed -e 's/\.c/\.h/'` + fi + done + + case "$i" in + gngb2vdr) plugin_file1="cGngbPlugin.h";; + ipod) plugin_file1="$plugin_name.hpp";; + live) plugin_file1="setup.h";; + mailbox) plugin_file1="AxPluginMailBox.cpp";; + mediamvp) plugin_file1="mvp/config.h";; + mldkgui) plugin_file1="cMLdkGUIPlugin.h";; + reelchannelscan) plugin_file1="channelscan.h";; + streamdev) plugin_file1="common.c";; + servicedemo) plugin_file1="svccli.c";; + vodcatcher) plugin_file1="src/Version.h";; + esac + + plugin_version="" + if [ -r $PLUGINDIR/src/$i/$plugin_file1 ]; then + plugin_version=`egrep -m 1 '.*VERSION.*"' $PLUGINDIR/src/$i/$plugin_file1 | sed -e 's/.* "//' | sed -e 's/[";]//g' | tr -d '\015' | tr -d '\012'` + fi + if [ -z "$plugin_version" -a -r $PLUGINDIR/src/$i/$plugin_file2 ]; then + plugin_version=`egrep -m 1 '.*VERSION.*"' $PLUGINDIR/src/$i/$plugin_file2 | sed -e 's/.* "//' | sed -e 's/[";]//g' | tr -d '\015' | tr -d '\012'` + fi + if [ -z "$plugin_version" ]; then + plugin_version=`egrep -m 1 '^[[:space:]]*VERSION' $PLUGINDIR/src/$i/Makefile | sed -e 's/[\t ]*VERSION.*=//' | sed -e 's/ //g' | tr -d '\015' | tr -d '\012'` + fi + if [ -z "$plugin_version" ]; then + plugin_version="N/A" + fi + plugin_versiondir="" + if [ -L $PLUGINDIR/src/$i ]; then + plugin_versiondir=`readlink $PLUGINDIR/src/$i | sed -e 's/.*\///g'` + plugin_versiondir="${plugin_versiondir:${#plugin_name}:255}" + plugin_versiondir="${plugin_versiondir:1:255}" + fi + if [ -z "$plugin_versiondir" ]; then + plugin_versiondir="N/A" + fi + plugin_libs=1 + case "$plugin_name" in + mp3) plugin_libname="mp3 mplayer" + plugin_libs=2;; + mp3ng) plugin_libname="mp3ng mplayer" + plugin_libs=2;; + music) plugin_libname="music mplayer" + plugin_libs=2;; + servicedemo) plugin_libname="svccli svcsvr" + plugin_libs=2;; + streamdev) plugin_libname="streamdev-client streamdev-server" + plugin_libs=2;; + esac + plugin_anzahl=`ls -d $PLUGINDIR/src/$i-* 2>/dev/null | wc -l` + if [ $plugin_libs = 1 ]; then + if [ -r "$VDRLIBDIR/libvdr-$plugin_name.so.$version_vdr" ] || [ -r "$VDRLIBDIR/libvdr-$plugin_name.so.$version_api" ]; then + echo -n "* " + else + echo -n "! " + fi + else + echo -n "X " + fi + echo $plugin_name $plugin_version $plugin_versiondir $plugin_anzahl | awk '{ printf "%-25s %s", $1, $2; if ($2 != $3 && $3 != "N/A") printf " (%s)", $3; if ($4 > 1) printf " es sind %d Versionen vorhanden", $4; printf "\n"; }' + if [ $plugin_libs -gt 1 ]; then + for j in $plugin_libname ; do + if [ -r "$VDRLIBDIR/libvdr-$j.so.$version_vdr" ] || [ -r "$VDRLIBDIR/libvdr-$j.so.$version_api" ]; then + echo " * $j" + else + echo " ! $j" + fi + done + fi + if [ -z "$plugin_name" ]; then + echo "Fehler: kein plugin_name fuer Verzeichniss $i" >&2 + exit 1 + fi + done +} |
