calibre-autoupdate/CAU_Installer

312 lines
11 KiB
Bash
Executable File

#!/bin/bash
# Calibre Auto Updater Installscript
# Copyright (C) 2013-2014 Leon Gaultier
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>
# Programmversion
PROGNAME=`basename $0`
VERSION="0.14.99.2"
##### Variablen deklaration #####
# Downloadseite der Linuxinstallation
DOWNLOAD_URL=https://github.com/kovidgoyal/calibre/raw/master/setup/linux-installer.py
#################################
func_term_output () { # einheitliche Terminalausgabe
## Beginne mit der Ausgbe ##
tty -s && clear
echo -e "\033[44m \033[0m\033[1m $PROGNAME the Calibre-Autoupdate-Installer Version $VERSION\033[0m\n\033[44m \033[0m 2013-2014 by Leon Gaultier\n\e[m";
return 0
}
func_usage () # Gibt Auskunft über Verwendung des Scriptes
{
func_term_output
echo "Verwendung: $PROGNAME [OPTION...]"
echo -e "Verwende $PROGNAME --help oder $PROGNAME -h für mehr Informationen.\n"
}
func_help () # Listet alle Optionsschalter auf
{
func_term_output
echo "Verwende: $PROGNAME [OPTION...]"
echo "$PROGNAME -- Der Calibre-Autoupdate-Installer (CAUI)"
echo ""
echo "Options:"
echo " -h, --help zeigt die Hilfe an"
echo " -V, --version gibt die Programmversion aus"
echo " -i, --install installiert den Calibre-Autoupdater (CAU)"
echo " --install_calibre installiert Calibre in der aktuellsten Version"
echo ""
echo -e "Sende Fehler an <leongaultier@gmail.com>.\n";
}
func_version () # Versionsauskunft des Installers
{
func_term_output
echo "$PROGNAME: Der Calibre-Autoupdate-Installer (CAUI) v$VERSION"
echo "Leon Gaultier 2013-2014. Das Programm darf verteilt werden,"
echo -e "in der Hoffnung das es hilfreich ist, aber OHNR IRGENDEINE GARANTIE\n"
}
func_change_install_dir() # Funktion zur Abfrage des Installationsortes
{
read -p "Wo soll der Calibre-Autoupdater installiert werden? [default /usr/local] " UPDATER_INSTALL_LOCATION
if [ -z $UPDATER_INSTALL_LOCATION ]; then
UPDATER_INSTALL_LOCATION=/usr/local
fi
read -p "Wo befindet sich die Calibre Installation? [default /opt] " CALIBRE_INSTALL_LOCATION
if [ -z $CALIBRE_INSTALL_LOCATION ]; then
CALIBRE_INSTALL_LOCATION=/opt
fi
# Verzeichnishierarchie im Installationsort
INC=$UPDATER_INSTALL_LOCATION/include/
ETC=$UPDATER_INSTALL_LOCATION/etc/
BIN=$UPDATER_INSTALL_LOCATION/bin/
}
func_selection_query()
{
while ((!gueltig)); do # beginn der Ja/Nein Abfrage
echo -e "\033[1;34m"
read -sn1 -t 30 -p "Soll das Verzeichnis angelegt werden? [j/n] " answer
echo -e "\e[m"
case "$answer" in
[JjYy]) result=1; gueltig=1 ;;
[Nn]) result=0; gueltig=1 ;;
"") result=0; gueltig=1 ;;
*) gueltig=0 ;;
esac
done
echo
if (( ! result )); then
echo -e "\n\033[1;31mBite wähle einen anderen Ort für die Installation aus. Es muß zwingend die"
echo -e "Verzeichnisstruktur /etc; /bin; /include vorhanden sein, oder angelegt werden\e[m\n"
func_install_process
fi
}
func_check_dir_structur()
{
if [ ! -d $BIN ]; then
echo -e "\033[1;34mEs konnte unter $UPDATER_INSTALL_LOCATION kein /bin Verzeichnis gefunden werden"
func_selection_query
if [ ! -w $UPDATER_INSTALL_LOCATION ]; then
echo -e "Du hast kein Schreibrecht auf $UPDATER_INSTALL_LOCATION. Es wird SUDO verwendet!"
sudo mkdir $BIN
fi
mkdir $BIN
echo "Das Verzeichniss $BIN wurde unter $UPDATER_INSTALL_LOCATION angelegt"
fi
if [ ! -d $ETC ]; then
echo -e "\033[1;34mEs konnte unter $UPDATER_INSTALL_LOCATION kein /ect Verzeichnis gefunden werden"
func_selection_query
if [ ! -w $UPDATER_INSTALL_LOCATION ]; then
echo -e "Du hast kein Schreibrecht auf $UPDATER_INSTALL_LOCATION. Es wird SUDO verwendet!"
sudo mkdir $ETC
fi
mkdir $ETC
echo "Das Verzeichniss $ETC wurde unter $UPDATER_INSTALL_LOCATION angelegt"
fi
}
func_check_calibre_install() # Install oder Update Calibre Updater, Check ob Calibre überhaupt installiert ist
{
if test ! -d $CALIBRE_INSTALL_LOCATION/calibre ; then
echo -e "\n\033[31mKeine Calibre Installation unter $CALIBRE_INSTALL_LOCATION gefunden.\033[1;34m"
while ((!gueltig)); do # beginn der Ja/Nein Abfrage
echo -e "\033[1;34m"
read -sn1 -t 30 -p "Möchtest Du Calibre jetzt installieren? [j/n] " answer
echo -e "\e[m"
case "$answer" in
[JjYy]) result=1; gueltig=1 ;;
[Nn]) result=0; gueltig=1 ;;
"") result=0; gueltig=1 ;;
*) gueltig=0 ;;
esac
done
echo
if (( ! result )); then
echo -e "\n\033[1;31mDie installation des Calibre-Autoupdaters wurde durch Dich abgebrochen.\e[m\n"
exit 1
fi
echo -e "\033[1;34mNach der Calibre Installation wird die Installation des Calibre Autoupdaters durchgeführt\e[m"
sleep 3
func_install_calibre
exit 0
fi
if test -f $BIN/calibre-autoupdate ; then # Updater bereits installiert?
while ((!gueltig)); do # beginn der Ja/Nein Abfrage
echo -e "\033[1;34m"
read -sn1 -t 30 -p "Der calibre-autoupdater ist bereits installiert. Möchtest Du ein Update durchführen? [j/n] " answer
echo -e "\e[m"
case "$answer" in
[JjYy]) result=1; gueltig=1 ;;
[Nn]) result=0; gueltig=1 ;;
"") result=0; gueltig=1 ;;
*) gueltig=0 ;;
esac
done
echo
if (( ! result )); then
echo -e "\n\033[1;31mDie installation des Calibre-Autoupdaters wurde durch Dich abgebrochen.\e[m\n"
exit 1
fi
fi
}
func_progressbar()
{
echo -e -n $'\033[34m------------------------------------------------------------------------- 100%\r'
echo -e -n "\033[32m0% "
for ((i=0; i<61; i++)); do
echo -e -n "\033[32m="
case $i in
15)
echo -e -n "25%" ;;
30)
echo -e -n "50%" ;;
45)
echo -e -n "75%" ;;
60)
echo -e -n " 100%" ;;
esac
sleep 0.07
done
echo -e "\e[m"
}
func_install_noroot()
{
# Die sed Befehle ersetzen in den Programmdateien Platzhalter für den Installationsort.
# Grund hierfür sind die includes der Header unf Configfiles die den kompletten Fad benörigen
echo -e "\n\033[1;34mDer Calibre-Autoupdater wird nun unter $UPDATER_INSTALL_LOCATION installiert...\e[m";
echo -e "\033[1;32mProgramm-Dateien wird nach $BIN kopiert\e[m"
cp calibre-autoupdate $BIN
sed -i "s/_-ETC-_/${ETC//\//\/}/g" $BIN"calibre-autoupdate"
sed -i "s/_-VERSION-_/${VERSION//\//\/}/g" $BIN"calibre-autoupdate"
chmod 755 $BIN/calibre-autoupdate
func_progressbar
echo -e "\n\033[1;32mDie Header-Dateien werden nach $INC kopiert\e[m"
cp calibre-autoupdate.h calibre-autoupdate_checks.h $INC
chmod 644 $INC/calibre-autoupdate.h $INC/calibre-autoupdate_checks.h
func_progressbar
echo -e "\n\033[1;32mDie Konfigurations-Dateien wird nach $ETC kopiert\e[m"
cp calibre-autoupdate.conf $ETC
sed -i "s/_-INC-_/${INC//\//\/}/g" $ETC"calibre-autoupdate.conf"
sed -i "s/_-BIN-_/${BIN//\//\/}/g" $ETC"calibre-autoupdate.conf"
sed -i "s/_-CALIBRE_INSTALL_LOCATION-_/${CALIBRE_INSTALL_LOCATION//\//\/}/g" $ETC"calibre-autoupdate.conf"
chmod 644 $ETC/calibre-autoupdate.conf
func_progressbar
}
func_install_root()
{
# Die sed Befehle ersetzen in den Programmdateien Platzhalter für den Installationsort.
# Grund hierfür sind die includes der Header unf Configfiles die den kompletten Fad benörigen
echo -e "\n\033[1;34mDu hast kein Schreibrecht auf $UPDATER_INSTALL_LOCATION, daher wird SUDO versucht zu verwenden...\e[m";
sudo echo -e "\033[1;36mProgramm-Dateien wird nach $BIN kopiert\e[m\e[m"
sudo cp calibre-autoupdate $BIN
sudo sed -i "s/_-ETC-_/${ETC//\//\/}/g" $BIN"calibre-autoupdate"
sudo sed -i "s/_-VERSION-_/${VERSION//\//\/}/g" $BIN"calibre-autoupdate"
sudo chmod 755 $BIN"calibre-autoupdate"
func_progressbar
echo -e "\n\033[1;36mDie Header-Dateien werden nach $INC kopiert\e[m"
sudo cp calibre-autoupdate.h calibre-autoupdate_checks.h $INC
sudo chmod 644 $INC"calibre-autoupdate.h" $INC"calibre-autoupdate_checks.h"
func_progressbar
echo -e "\n\033[1;36mDie Konfigurations-Dateien wird nach $ETC kopiert\e[m"
sudo cp calibre-autoupdate.conf $ETC
sudo sed -i "s/_-INC-_/${INC//\//\/}/g" $ETC"calibre-autoupdate.conf"
sudo sed -i "s/_-BIN-_/${BIN//\//\/}/g" $ETC"calibre-autoupdate.conf"
sudo sed -i "s/_-CALIBRE_INSTALL_LOCATION-_/${CALIBRE_INSTALL_LOCATION//\//\/}/g" $ETC"calibre-autoupdate.conf"
sudo chmod 644 $ETC"calibre-autoupdate.conf";
func_progressbar
}
func_install_process() # Installiert den Calibre Updater
{
func_term_output
func_change_install_dir
func_check_dir_structur
func_check_calibre_install
if [ -w "$UPDATER_INSTALL_LOCATION" ]; then
func_install_noroot
else
func_install_root
fi
echo -e "\n\n\033[1;36mDer Calibre-Autoupdater wurde erfolgreich installiert und"
echo -e "kann nun mit calibre-update oder $BIN"calibre-update" aufgerufen werden\e[m\n"
}
func_install_calibre()
{
if [ ! $CALIBRE_INSTALL_LOCATION ]; then
func_term_output
read -p "Wohin soll Calibre installiert werden? [default /opt] " CALIBRE_INSTALL_LOCATION
fi
if [ -z $CALIBRE_INSTALL_LOCATION ]; then
CALIBRE_INSTALL_LOCATION=/opt
fi
if [ -w "$CALIBRE_INSTALL_LOCATION" ]; then
echo -e "\033[1;32mCalibre wird nun installiert...\n\e[m"
wget -nv -O- $DOWNLOAD_URL | python -c "import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('$CALIBRE_INSTALL_LOCATION')"
else
echo -e "\033[1;34mDu hast kein Schreibrecht auf $CALIBRE_INSTALL_LOCATION. Calibre wird mit SUDO installiert. Bitte gib hierzu Dein Userpasswort ein...\n\e[m"
sudo -v && wget -nv -O- $DOWNLOAD_URL | sudo python -c "import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('$CALIBRE_INSTALL_LOCATION')"
fi
echo -e "\n\n\033[1;36mHerzlichen Glückwunsch. Calibre wurde installiert und kann nun mit "calibre" verwendet werden.\n\033[0m"
sleep 5
func_install_process
}
while test "$#" -gt 0
do
arg="$1"
shift
case $arg in
-*=*) optarg=`echo "$arg" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;;
*) optarg= ;;
esac
case "$arg" in
--help | -h )
func_help; exit 0 ;;
--version | -V | -v )
func_version; exit 0 ;;
--install | -i | -I )
func_install_process; exit 0 ;;
--install_calibre )
func_install_calibre; exit 0
esac
done
func_term_output
func_usage
echo -e "\e[m"
exit 0