summaryrefslogtreecommitdiff
path: root/install.sh
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2007-08-13 18:41:27 +0000
committerAndreas Brachold <vdr07@deltab.de>2007-08-13 18:41:27 +0000
commitbcbf441e09fb502cf64924ff2530fa144bdf52c5 (patch)
treef377707a2dac078db8cd0c7d7abfe69ac1006d71 /install.sh
downloadxxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.gz
xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.bz2
* Move files to trunk
Diffstat (limited to 'install.sh')
-rwxr-xr-xinstall.sh463
1 files changed, 463 insertions, 0 deletions
diff --git a/install.sh b/install.sh
new file mode 100755
index 0000000..16aa417
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,463 @@
+#!/bin/sh
+#
+# Shell based installer of xxv
+#
+# use options like
+# export PREFIX=/opt/xxv;./install.sh
+#
+#
+# based on install.sh for vdradmin
+# Copyright (c) 2003 Frank (xpix) Herrmann)
+# Copyright (c) 2005 Andreas Mair
+# Copyright (c) 2006 Andreas Brachold, Ronny Kornexl
+#
+################################################################################
+# ROOT should only used for testing, installing outside root folder
+# please use PREFIX as destination for installing
+ROOT=${ROOT:-""}
+
+################################################################################
+# use options like
+# export PREFIX=/opt/xxv;./install.sh
+#
+PREFIX=${PREFIX:-$ROOT/usr/local}
+
+################################################################################
+# destination for installing
+#
+BINDIR=${BINDIR:-$PREFIX/bin}
+LIBDIR=${LIBDIR:-$PREFIX/lib/xxv}
+SHAREDIR=${SHAREDIR:-$PREFIX/share/xxv}
+DOCDIR=${DOCDIR:-$PREFIX/share/xxv/doc}
+CONTRIBDIR=${CONTRIBDIR:-$PREFIX/share/xxv/contrib}
+LOCDIR=${LOCDIR:-$PREFIX/share/xxv/locale}
+SKINDIR=${SKINDIR:-$PREFIX/share/xxv/skins}
+MANDIR=${MANDIR:-$PREFIX/share/man/man1}
+
+################################################################################
+# some files
+#
+LOGDIR=${LOGDIR:-$ROOT/var/log}
+PIDFILE=${PIDFILE:-$ROOT/var/run/xxvd.pid}
+INITFILE=${INITFILE:-$ROOT/etc/init.d/xxvd}
+ETCDIR=${ETCDIR:-$ROOT/etc/xxv}
+
+################################################################################
+# to adjust more options into xxvd.cfg
+#
+# e.g. :
+# [CHANNELS]
+# empty=y
+# file=/etc/vdr/channels.conf
+# [GRAB]
+# file=/dev/shm/live.jpg
+#
+# use :
+# export CHANNELS_empty=y \
+# CHANNELS_file=/etc/vdr/channels.conf \
+# GRAB_file=/dev/shm/live.jpg; \
+# ./install.sh
+#
+################################################################################
+# begin of scripting part ( below this line, aren't user options )
+#
+LANGS="de"
+
+
+PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin
+
+function usage()
+{
+ echo ""
+ echo "usage: $(basename $0) [-h] [-p] [-u]"
+ echo ""
+ echo "Default action is install xxv."
+ echo -e "\t-h : This message."
+ echo -e "\t-p : check perl module."
+ echo -e "\t-u : uninstall xxv."
+ echo ""
+ exit 0
+}
+
+function killRunning()
+{
+ local KILLED=0
+ ps a | grep xxvd | grep perl | grep -v grep | while read PID UNWANTED
+ do
+ KILLED=1
+ kill $PID
+ done
+
+ return $KILLED
+}
+
+# $1 - the Perl module to check for.
+function checkPerlModule()
+{
+ [ -z "$1" ] && return 1
+
+ local MODULE=$1
+ local ALT_MODULE=$2
+ local ALT_MESSAGE=
+ [ "$ALT_MODULE" ] && ALT_MESSAGE=" or $ALT_MODULE"
+
+ echo -n "Checking for Perl module $MODULE$ALT_MESSAGE... "
+ perl -ce 'BEGIN{$0 =~ /(^.*\/)/; $BASENAME = $1; unshift(@INC, $BASENAME . "lib/");} use '$MODULE >/dev/null 2>&1
+ if [ $? -eq 2 ]; then
+ if [ "$ALT_MODULE" ]; then
+ perl -ce 'BEGIN{$0 =~ /(^.*\/)/; $BASENAME = $1; unshift(@INC, $BASENAME . "lib/");} use '$ALT_MODULE >/dev/null 2>&1
+ [ $? -eq 0 ] && echo " $ALT_MODULE found" && return 0
+ fi
+ echo " MISSING"
+ read -p "Do you want to install $MODULE? (y)es/(f)orced/(N)ever : "
+ if [ "$REPLY" = "y" -o "$REPLY" = "Y" -o "$REPLY" = "yes" -o "$REPLY" = "j" ]; then
+ su -c "perl -MCPAN -e 'install '$MODULE"
+ elif [ "$REPLY" = "f" -o "$REPLY" = "F" -o "$REPLY" = "force" ]; then
+ su -c "perl -MCPAN -e 'force install '$MODULE"
+ fi
+ else
+ echo " found"
+ fi
+}
+
+function perlModules()
+{
+ checkPerlModule Test::Simple
+#--------------------
+ checkPerlModule DBI
+ checkPerlModule DBD::mysql
+#--------------------
+ checkPerlModule Event
+ checkPerlModule MIME::Base64
+ checkPerlModule Time::HiRes
+ checkPerlModule Locale::gettext
+ checkPerlModule Config::Tiny
+ checkPerlModule Net::Telnet
+#--------------------
+ checkPerlModule URI
+ checkPerlModule URI::file
+ checkPerlModule URI::URL
+ checkPerlModule Compress::Zlib
+ checkPerlModule HTML::Tagset
+ checkPerlModule HTML::Parser
+ checkPerlModule HTML::Form
+ checkPerlModule HTTP::Status
+ checkPerlModule HTTP::Daemon
+ checkPerlModule HTTP::Request
+ checkPerlModule LWP::UserAgent
+ checkPerlModule LWP
+ checkPerlModule WWW::Mechanize
+#--------------------
+ checkPerlModule Data::Random
+ checkPerlModule WWW::Mechanize::FormFiller
+#--------------------
+ checkPerlModule GD
+#--------------------
+ checkPerlModule Digest::SHA1
+ checkPerlModule Digest::HMAC_MD5
+ checkPerlModule Digest::MD5
+ checkPerlModule Net::IP
+ checkPerlModule Net::DNS
+ checkPerlModule XML::Parser
+ checkPerlModule XML::RSS
+ checkPerlModule Math::BigInt::FastCalc
+ checkPerlModule JSON
+#--------------------
+ checkPerlModule Authen::SASL
+ checkPerlModule XML::Stream
+ checkPerlModule Net::XMPP
+#--------------------
+ checkPerlModule Proc::Killfam
+ checkPerlModule Proc::ProcessTable
+#--------------------
+ checkPerlModule Term::ReadLine::Gnu
+#--------------------
+ checkPerlModule Template
+#-SHARE--------------
+ checkPerlModule SOAP::Lite
+#-MUSIC--------------
+ checkPerlModule MP3::Icecast
+ checkPerlModule MP3::Info
+ checkPerlModule CGI
+ checkPerlModule LWP::Simple
+ checkPerlModule Net::Amazon
+ checkPerlModule Net::Amazon::Request::Artist
+}
+
+function makeDir()
+{
+ [ -z "$1" ] && return 1
+ local DIR=$1
+ local MUST_CREATE=${2:-0}
+ if [ -e "$DIR" -a ! -d "$DIR" ]; then
+ echo "$DIR exists but is no directory!"
+ echo "Aborting..."
+ return 1
+ elif [ -d $DIR -a $MUST_CREATE = 1 ]; then
+ echo "$DIR exists. Please remove it before calling install.sh!"
+ echo "Aborting..."
+ return 1
+ fi
+ if [ ! -e "$DIR" ]; then
+ mkdir -p "$DIR"
+ if [ $? -ne 0 ]; then
+ echo "Failed to create directory $DIR!"
+ echo "Aborting..."
+ return 1
+ fi
+ fi
+
+ return 0
+}
+
+function doInstall()
+{
+ echo ""
+ echo "********* Installing xxv *************"
+ echo ""
+
+ perlModules
+
+ echo ""
+ echo "********* Copying files *************"
+ echo ""
+
+ makeDir "$LIBDIR" 1 && cp -r lib/* "$LIBDIR" || exit 1
+ makeDir "$SHAREDIR" 1 && cp -r share/* "$SHAREDIR" || exit 1
+ makeDir "$DOCDIR" 1 && cp doc/CHANGELOG.txt doc/COPYING.txt doc/docu.tmpl doc/LIESMICH.txt doc/NEWS.txt doc/README.txt doc/TODO.txt doc/TUTORIAL.txt.gz "$DOCDIR" || exit 1
+ makeDir "$CONTRIBDIR" 1 && cp -r contrib/* "$CONTRIBDIR" || exit 1
+ makeDir "$SKINDIR" 1 && cp -r html wml "$SKINDIR" || exit 1
+ (cd "$SKINDIR";ln -s html default) || exit 1
+ makeDir "$MANDIR" && cp doc/xxvd.1 "$MANDIR" || exit 1
+ makeDir "$BINDIR" || exit 1
+ makeDir "$LOGDIR" || exit 1
+ makeDir `dirname $PIDFILE` || exit 1
+ makeDir "$ETCDIR" || exit 1
+ makeDir `dirname $INITFILE` || exit 1
+
+ for lang in $LANGS
+ do
+ makeDir "$LOCDIR/$lang/LC_MESSAGES/" && install -m 644 "locale/$lang/LC_MESSAGES/xxv.mo" "$LOCDIR/$lang/LC_MESSAGES/xxv.mo" || exit 1
+ done
+
+ local RESTART=
+ [ ! -e "$BINDIR" ] && mkdir -p "$BINDIR"
+ if [ ! -d "$BINDIR" ]; then
+ echo "$BINDIR exists but is no directory!"
+ echo "Aborting..."
+ exit 1
+ fi
+
+ killRunning
+ if [ $? -ne 0 ] ; then
+ RESTART=1
+ echo "Killed running xxv..."
+ fi
+
+ echo ""
+ echo "********* Adjust Config *************"
+ echo ""
+
+ echo "$BINDIR/xxvd"
+
+ sed < "bin/xxvd" > "$BINDIR/xxvd" \
+ -e "s:\$RealBin/../lib:${LIBDIR}:" \
+ -e "s:/var/log/xxvd.log:${LOGDIR}/xxvd.log:" \
+ -e "s:/var/run/xxvd.pid:${PIDFILE}:" \
+ -e "s:\$RealBin/../locale:${LOCDIR}:" \
+ -e "s:\$RealBin/../lib/XXV/MODULES:${LIBDIR}/XXV/MODULES:" \
+ -e "s:\$RealBin/../lib/XXV/OUTPUT/NEWS:${LIBDIR}/XXV/OUTPUT/NEWS:" \
+ -e "s:\$RealBin/../etc/xxvd.cfg:${ETCDIR}/xxvd.cfg:" \
+ -e "s:\$RealBin/../doc:${DOCDIR}:" \
+ -e "s:HTMLDIR => \"\$RealBin/../:HTMLDIR => \"${SKINDIR}:" \
+ -e "s:\$RealBin/../share/fonts/ttf-bitstream-vera:${SHAREDIR}/fonts/ttf-bitstream-vera:" \
+ -e "s:\$RealBin/../share/vtx:${SHAREDIR}/vtx:" \
+ -e "s:\$RealBin/../share/news:${SHAREDIR}/news:" \
+ -e "s:\$RealBin/../contrib:${CONTRIBDIR}:"
+
+ [ ! -e "$INITFILE" -a "$INITFILE" != "false" ] && echo "$INITFILE"
+
+ [ ! -e "$INITFILE" -a "$INITFILE" != "false" ] && sed < "etc/xxvd" > "$INITFILE" \
+ -e "s:/root/XXV:${BINDIR}:" \
+ -e "s:bin/xxvd:./xxvd:" \
+ -e "s:\$FOLDER/lib/XXV/MODULES:${LIBDIR}/XXV/MODULES:" \
+ -e "s:\$FOLDER/lib/XXV/OUTPUT/NEWS:${LIBDIR}/XXV/OUTPUT/NEWS:" \
+ -e "s:\$FOLDER/etc/xxvd.cfg:${ETCDIR}/xxvd.cfg:" \
+ -e "s:/var/run/xxvd.pid:${PIDFILE}:" \
+ -e "s:HTMLDIR=\"\$FOLDER:HTMLDIR=\"${SKINDIR}:" \
+ -e "s:\$FOLDER/doc:${DOCDIR}:" \
+ -e "s:/var/log/xxvd.log:${LOGDIR}/xxvd.log:" \
+ -e "s:\$FOLDER/contrib:${CONTRIBDIR}:" \
+ -e "s:\$FOLDER/share/news:${SHAREDIR}/news:"
+
+ echo "$ETCDIR/xxvd.cfg"
+
+ [ ! -e "$ETCDIR/xxvd.cfg" ] && \
+ while read i ; do
+ case $i in
+ [*) VAR=$(echo $i | tr a-z A-Z | tr -d :[])
+ echo $i
+ ;;
+ *) case ${VAR}${i%%=*} in
+ GENERALDSN|GENERALUSR|GENERALPWD)
+ echo $i ; eval $i ; eval GENERAL_${i%%=*}=\${${i%%=*}##*=} ; continue
+ ;;
+ esac
+ eval VALUE=$(echo "\$${VAR}_${i}" | cut -d= -f1)
+ test -n "$VALUE"
+ case $? in
+ 0) echo "${i%%=*}=$VALUE"
+ ;;
+ *) echo $i
+ ;;
+ esac
+ ;;
+ esac
+ done < "etc/xxvd.cfg.example" > "$ETCDIR/xxvd.cfg"
+
+ echo ""
+ echo "********* Create database *************"
+ echo ""
+
+ mysql -u root -e "
+use mysql;
+CREATE DATABASE IF NOT EXISTS ${GENERAL_DSN};
+use ${GENERAL_DSN};
+grant all privileges on ${GENERAL_DSN}.* to ${GENERAL_USR}@localhost IDENTIFIED BY '${GENERAL_PWD}';
+flush privileges;"
+
+ echo ""
+ echo "********* Check database *************"
+ echo ""
+
+ "${CONTRIBDIR}/update-xxv" -d "${GENERAL_DSN}"
+
+ echo ""
+ echo "********* Set permissions *************"
+ echo ""
+
+ chmod a+x "$BINDIR/xxvd"
+
+ if [ -e "$INITFILE" -a "$INITFILE" != "false" ]; then
+
+ echo ""
+ echo "********* Set startscript *************"
+ echo ""
+
+ chmod a+x "$INITFILE"
+
+ RVV=`runlevel | cut -d " " -f 2`
+ makeDir "$ROOT/etc/rc$RVV.d" || exit 1
+ ln -s "$INITFILE" "$ROOT/etc/rc$RVV.d/S90xxvd"
+ ln -s "$INITFILE" "$ROOT/etc/rc$RVV.d/K90xxvd"
+
+ if [ "$RESTART" ]; then
+ echo "Restarting xxv..."
+ "$INITFILE" start
+ fi
+ fi
+
+ echo ""
+ echo ""
+ echo "xxv has been installed!"
+ echo ""
+ if [ -z "$RESTART" ]; then
+ [ ! -e "$INITFILE" -a "$INITFILE" != "false" ] && \
+ echo "*) run \"$INITFILE start\" to start xxv."
+ echo "*) open your browser with http://host:8080"
+ echo " login with xxv / xxv"
+ echo " and adjust all preferences for your system"
+ echo "*) and watch \"${LOGDIR}/xxvd.log\" for messages"
+ fi
+ exit 0
+}
+
+function doUninstall()
+{
+ echo ""
+ echo "********* Uninstalling xxv *************"
+ echo ""
+
+ killRunning
+ if [ -d "$LIBDIR" ]; then
+ rm -rf "$LIBDIR" || echo "Can't remove $LIBDIR"
+ fi
+ if [ -d "$SHAREDIR" ]; then
+ rm -rf "$SHAREDIR" || echo "Can't remove $SHAREDIR"
+ fi
+ if [ -d "$DOCDIR" ]; then
+ rm -rf "$DOCDIR" || echo "Can't remove $DOCDIR"
+ fi
+ if [ -d "$CONTRIBDIR" ]; then
+ rm -rf "$CONTRIBDIR" || echo "Can't remove $CONTRIBDIR"
+ fi
+ if [ -d "$SKINDIR" ]; then
+ rm -rf "$SKINDIR" || echo "Can't remove $SKINDIR"
+ fi
+ if [ -e "$MANDIR/xxvd.1" ]; then
+ rm -f "$MANDIR/xxvd.1" || echo "Can't remove $MANDIR/xxvd.1"
+ fi
+ if [ -e "$BINDIR/xxvd" ]; then
+ rm -f "$BINDIR/xxvd" || echo "Can't remove $BINDIR/xxvd"
+ fi
+ if [ -e "$INITFILE" ]; then
+ rm -f "$INITFILE" || echo "Can't remove $INITFILE"
+ fi
+
+ RVV=`runlevel | cut -d " " -f 2`
+ if [ -h "$ROOT/etc/rc$RVV.d/S90xxvd" ]; then
+ rm -f "$ROOT/etc/rc$RVV.d/S90xxvd" || echo "Can't remove $ROOT/etc/rc$RVV.d/S90xxvd"
+ fi
+ if [ -h "$ROOT/etc/rc$RVV.d/K90xxvd" ]; then
+ rm -f "$ROOT/etc/rc$RVV.d/K90xxvd" || echo "Can't remove $ROOT/etc/rc$RVV.d/K90xxvd"
+ fi
+
+ if [ -e "$LOGDIR/xxvd.log" ]; then
+ rm -f "$LOGDIR/xxvd.log" || echo "Can't remove $LOGDIR/xxvd.log"
+ fi
+ if [ -e "$PIDFILE" ]; then
+ rm -f "$PIDFILE" || echo "Can't remove $PIDFILE"
+ fi
+ for lang in $LANGS
+ do
+ if [ -e "$LOCDIR/$lang/LC_MESSAGES/xxv.mo" ]; then
+ rm -f "$LOCDIR/$lang/LC_MESSAGES/xxv.mo" || echo "Can't remove $LOCDIR/$lang/LC_MESSAGES/xxv.mo"
+ fi
+ done
+
+ echo ""
+ echo "xxv has been uninstalled!"
+ echo ""
+ if [ -d "$ETCDIR" ]; then
+ echo "Your configuration files located in $ETCDIR have NOT been deleted!"
+ echo "If you want to get rid of them, please delete them manually!"
+ echo ""
+ fi
+}
+
+{
+
+UNINSTALL=
+PERL=
+while [ "$1" ]
+do
+ case $1 in
+ -u) UNINSTALL=1;;
+ -p) PERL=1;;
+ -h) usage;;
+ *) echo "Ignoring param \"$1\$.";;
+ esac
+ shift
+done
+
+if [ $(basename $0) = "uninstall.sh" -o "$UNINSTALL" ]; then
+ doUninstall
+elif [ "$PERL" ]; then
+ echo ""
+ echo "Only LISTING needed Perl modules..."
+ perlModules
+ echo "...done."
+else
+ doInstall
+fi
+} # | tee -a install.log