1#!/usr/local/bin/bash 2# vim:noet:sw=4:ts=4: 3# Copyright (c) 2005-2014 Andreas Mair 4# 5# 6# Download and patchscript for VDRAdmin-AM 7# (based on install.sh Copyright (c) 2003 Frank (xpix) Herrmann) 8 9PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin 10DESTDIR=${DESTDIR} 11LIBDIR=${LIBDIR:-$DESTDIR/usr/share/vdradmin} 12ETCDIR=${ETCDIR:-$DESTDIR/etc/vdradmin} 13DOCDIR=${DOCDIR:-$DESTDIR/usr/share/doc/vdradmin} 14BINDIR=${BINDIR:-$DESTDIR/usr/bin} 15LOCDIR=${LOCDIR:-$DESTDIR/usr/share/locale} 16MANDIR=${MANDIR:-$DESTDIR/usr/share/man} 17LOGDIR=${LOGDIR:-$DESTDIR/var/log/vdradmin} 18CACHEDIR=${CACHEDIR:-$DESTDIR/var/cache/vdradmin} 19PIDFILE=${PIDFILE:-$DESTDIR/var/run/vdradmin/vdradmind.pid} 20VIDEODIR=${VIDEODIR:-/video} 21EPGIMAGES=${EPGIMAGES:-$VIDEODIR/epgimages} 22VDRCONF=${VDRCONF:-$VIDEODIR} 23 24function usage() 25{ 26 echo "" 27 echo "usage: $(basename $0) [-c | -u | -p | -h]" 28 echo "" 29 echo -e "\t-c : Run \"vdradmind -c\" after installation (=configure)." 30 echo -e "\t-u : Perform uninstall." 31 echo -e "\t-p : List and optionally install required Perl modules." 32 echo -e "\t-h : This message." 33 echo "" 34 exit 0 35} 36 37function killRunningVDRAdmin() 38{ 39 local KILLED=0 40 local PID=$(pidof vdradmind) 41 [ "$PID" ] || PID=$(ps a | grep vdradmind.pl | grep perl | grep -v grep | cut -d' ' -f1) 42 if [ "$PID" ]; then 43 KILLED=1 44 kill $PID 45 fi 46 47 return $KILLED 48} 49 50# $1 - the Perl module to check for. 51function checkPerlModule() 52{ 53 [ -z "$1" ] && return 1 54 55 local MODULE=$1 56 local ALT_MODULE=$2 57 local ALT_MESSAGE= 58 [ "$ALT_MODULE" ] && ALT_MESSAGE=" or $ALT_MODULE" 59 60 echo -n "Checking for Perl module $MODULE$ALT_MESSAGE... " 61 perl -ce 'BEGIN{$0 =~ /(^.*\/)/; $BASENAME = $1; unshift(@INC, $BASENAME . "lib/");} use '$MODULE >/dev/null 2>&1 62 if [ $? -eq 2 ]; then 63 if [ "$ALT_MODULE" ]; then 64 perl -ce 'BEGIN{$0 =~ /(^.*\/)/; $BASENAME = $1; unshift(@INC, $BASENAME . "lib/");} use '$ALT_MODULE >/dev/null 2>&1 65 [ $? -eq 0 ] && echo " $ALT_MODULE found" && return 0 66 fi 67 echo " MISSING" 68 read -p "Do you want to install $MODULE? [y/N]" 69 [ "$REPLY" = "y" -o "$REPLY" = "Y" ] && su -c "perl -MCPAN -e 'CPAN::install \"$MODULE\"'" 70 else 71 echo " found" 72 fi 73} 74 75function perlModules() 76{ 77 echo "" 78 echo "*** Required ***" 79 checkPerlModule locale 80 checkPerlModule Template 81 checkPerlModule Template::Plugin::JavaScript 82 checkPerlModule CGI 83 checkPerlModule HTTP::Date 84 checkPerlModule IO::Socket 85 checkPerlModule Time::Local 86 checkPerlModule MIME::Base64 87 checkPerlModule File::Temp 88 checkPerlModule URI 89 checkPerlModule URI::Escape 90 91 92 echo "" 93 echo "You need Locale::gettext OR Locale::Messages" 94 checkPerlModule Locale::gettext Locale::Messages 95 96 echo "" 97 echo "*** Optional ***" 98 echo "* Required for AutoTimer email notification" 99 checkPerlModule Net::SMTP 100 checkPerlModule Authen::SASL 101 echo "* Required for AutoTimer email notification and CRAM-MD5 authentication" 102 checkPerlModule Digest::HMAC_MD5 103 echo "* Required if VDR and VDRAdmin-AM use different character encoding" 104 checkPerlModule Encode 105 echo "* Required for IPv6 support" 106 checkPerlModule IO::Socket::INET6 107 echo "* Required for SSL support (https)" 108 checkPerlModule IO::Socket::SSL 109 echo "* Required if you want to use gzip'ed HTTP responses" 110 checkPerlModule Compress::Zlib 111 echo "* Required if you want to log to syslog" 112 checkPerlModule Sys::Syslog 113} 114 115function makeDir() 116{ 117 [ -z "$1" ] && return 1 118 local DIR=$1 119 local MUST_CREATE=${2:-0} 120 if [ -e "$DIR" -a ! -d "$DIR" ]; then 121 echo "$DIR exists but is no directory!" 122 echo "Aborting..." 123 return 1 124 elif [ -d $DIR -a $MUST_CREATE = 1 ]; then 125 echo "$DIR exists. Please remove it before calling install.sh!" 126 echo "Aborting..." 127 return 1 128 fi 129 if [ ! -e "$DIR" ]; then 130 mkdir -p "$DIR" 131 if [ $? -ne 0 ]; then 132 echo "Failed to create directory $DIR!" 133 echo "Aborting..." 134 return 1 135 fi 136 fi 137 138 return 0 139} 140 141function doInstall() 142{ 143 echo "" 144 echo "********* Installing VDRAdmin-AM *************" 145 echo "" 146 147 perlModules 148 149 makeDir $DESTDIR$LIBDIR 1 && cp -r template lib $DESTDIR$LIBDIR || exit 1 150 makeDir $DESTDIR$BINDIR || exit 1 151 [ -n $NOPORTDOCS ] && makeDir $DESTDIR$DOCDIR && cp -r contrib COPYING CREDITS HISTORY INSTALL LGPL.txt README* REQUIREMENTS FAQ $DESTDIR$DOCDIR || exit 1 152 makeDir $DESTDIR$MANDIR/man8 && cp vdradmind.pl.1 $DESTDIR$MANDIR/man8/vdradmind.8 || exit 1 153 154 ( 155 cd locale 156 for lang in * 157 do 158 makeDir $DESTDIR$LOCDIR/$lang/LC_MESSAGES/ && install -m 644 $lang/LC_MESSAGES/vdradmin.mo $DESTDIR$LOCDIR/$lang/LC_MESSAGES/vdradmin.mo || exit 1 159 done 160 ) 161 162 local RESTART= 163 if [ -d $DESTDIR$BINDIR ]; then 164 killRunningVDRAdmin 165 if [ $? -ne 0 ] ; then 166 RESTART=1 167 echo "Killed running VDRAdmin-AM..." 168 fi 169 sed <vdradmind.pl >$DESTDIR$BINDIR/vdradmind \ 170 -e "s/^\(my \$SEARCH_FILES_IN_SYSTEM *=\) 0;/\1 1;/" \ 171 -e "s:/usr/share/vdradmin/lib:${LIBDIR}/lib:" \ 172 -e "s:/usr/share/vdradmin/template:${LIBDIR}/template:" \ 173 -e "s:/var/log/vdradmin:${LOGDIR}:" \ 174 -e "s:/var/cache/vdradmin:${CACHEDIR}:" \ 175 -e "s:/var/run/vdradmin/vdradmind.pid:${PIDFILE}:" \ 176 -e "s:\(\$ETCDIR *= \)\"/etc/vdradmin\";:\1\"${ETCDIR}\";:" \ 177 -e "s:/usr/share/locale:${LOCDIR}:" \ 178 -e "s:\(\$CONFIG{VIDEODIR} *= \)\"/video\";:\1\"${VIDEODIR}\";:" \ 179 -e "s:\(\$CONFIG{EPGIMAGES} *= \)\"\$CONFIG{VIDEODIR}/epgimages\";:\1\"${EPGIMAGES}\";:" \ 180 -e "s:\(\$CONFIG{VDRCONFDIR} *= \)\"\$CONFIG{VIDEODIR}\";:\1\"${VDRCONF}\";:" 181 182 chmod a+x $DESTDIR$BINDIR/vdradmind 183 184 if [ "$CONFIG" ]; then 185 echo "Configuring VDRAdmin-AM..." 186 $BINDIR/vdradmind -c 187 fi 188 189 if [ "$RESTART" ]; then 190 echo "Restarting VDRAdmin-AM..." 191 $BINDIR/vdradmind 192 fi 193 194 echo "" 195 if [ -e $DESTDIR$BINDIR/vdradmind.pl ]; then 196 echo "Removing ancient $DESTDIR$BINDIR/vdradmind.pl" 197 rm -f $DESTDIR$BINDIR/vdradmind.pl 198 fi 199 for man in man1/vdradmind.pl.1 man1/vdradmind.1; do 200 if [ -e $DESTDIR$MANDIR/$man ]; then 201 echo "Removing ancient $DESTDIR$MANDIR/$man" 202 rm -f $DESTDIR$MANDIR/$man 203 fi 204 done 205 else 206 echo "$BINDIR exists but is no directory!" 207 echo "Aborting..." 208 exit 1 209 fi 210 211 echo "" 212 echo "" 213 echo "VDRAdmin-AM has been installed!" 214 echo "" 215 if [ -z "$RESTART" ]; then 216 echo "Run \"$BINDIR/vdradmind\" to start VDRAdmin-AM." 217 echo "" 218 fi 219 echo "NOTE:" 220 echo "If you want to run VDRAdmin-AM in a different language you must set the LANG environment variable (see README)." 221 echo "" 222 echo "NOTE2:" 223 echo "If you would like VDRAdmin-AM to start at system's boot, please modify your system's init scripts." 224 225 local USED_DIRS="$(echo -e "$ETCDIR\n$LOGDIR\n$CACHEDIR\n$(dirname "$PIDFILE")" | sort -u)" 226 echo 227 echo "NOTE3:" 228 echo "VDRAdmin-AM needs to access some directories:" 229 echo "$USED_DIRS" 230 echo 231 echo "Please check that the user VDRAdmin-AM runs has enough permissions to access them!" 232 exit 0 233} 234 235function doUninstall() 236{ 237 echo "" 238 echo "********* Uninstalling VDRAdmin-AM *************" 239 echo "" 240 241 killRunningVDRAdmin 242 if [ -d $DOCDIR ]; then 243 rm -rf $DOCDIR 244 fi 245 if [ -d $LIBDIR ]; then 246 rm -rf $LIBDIR 247 fi 248 if [ -d $CACHEDIR ]; then 249 rm -rf $CACHEDIR 250 fi 251 for man in man1/vdradmind.pl.1 man1/vdradmind.1 man8/vdradmind.8; do 252 if [ -e $MANDIR/$man ]; then 253 rm -f $MANDIR/$man 254 fi 255 done 256 if [ -e $BINDIR/vdradmind.pl ]; then 257 rm -f $BINDIR/vdradmind.pl 258 fi 259 if [ -e $BINDIR/vdradmind ]; then 260 rm -f $BINDIR/vdradmind 261 fi 262 rm -f $LOCDIR/*/LC_MESSAGES/vdradmin.mo 263 264 echo "" 265 echo "VDRAdmin-AM has been uninstalled!" 266 echo "" 267 if [ -d $ETCDIR ]; then 268 echo "Your configuration files located in $ETCDIR have NOT been deleted!" 269 echo "If you want to get rid of them, please delete them manually!" 270 echo "" 271 fi 272} 273 274UNINSTALL= 275CONFIG= 276PERL= 277while [ "$1" ] 278do 279 case $1 in 280 -u) UNINSTALL=1;; 281 -c) CONFIG=1;; 282 -p) PERL=1;; 283 -h) usage;; 284 *) echo "Ignoring param \"$1\$.";; 285 esac 286 shift 287done 288 289if [ $(basename $0) = "uninstall.sh" -o "$UNINSTALL" ]; then 290 doUninstall 291elif [ "$PERL" ]; then 292 echo "" 293 echo "Testing required Perl modules..." 294 perlModules 295 echo "...done." 296else 297 doInstall 298fi 299