#!/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 # 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 .\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_check_dir_structur() { 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 echo -e "\033[1;34mDas Verzeichnis wird angelegt!\e[m" } if [ ! -d $BIN ]; then echo -e "\033[1;34mEs konnte im Installationsort kein /bin Verzeichnis gefunden werden" func_selection_query fi if [ ! -d $ETC ]; then echo -e "\033[1;34mEs konnte im Installationsort kein /etc Verzeichnis gefunden werden" func_selection_query fi if [ ! -d $INC ]; then echo -e "\033[1;34mEs konnte im Installationsort kein /include Verzeichnis gefunden werden" func_selection_query 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