212 lines
9.0 KiB
Bash
212 lines
9.0 KiB
Bash
#!/bin/bash
|
|
# Calibre Auto Updater - The Skript automatically updates your Calibre (http://calibre-ebook.com/)
|
|
# Installation
|
|
# Copyright (C) 2013-2015 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/>
|
|
#
|
|
|
|
|
|
####################################
|
|
####################################
|
|
#
|
|
# Versionsverlauf
|
|
#
|
|
# v0.1 Body des Skriptes erstellt
|
|
# Abfrage neuste Version vorhanden
|
|
# Abfrage welche Version installiert
|
|
# Funktion Versionsvergleich
|
|
# Download und installation der neusten Version
|
|
# Desktopmeldungen hinzugefügt
|
|
#
|
|
# v0.2 Verbesserungen bei den Desktopmeldungen
|
|
#
|
|
# v0.3 Funktion Check Verfügbarkeit der Downloadseiten hinzugefügt
|
|
#
|
|
# v0.4 Check Verfügbarkeit auf Test Netzwerk vorhanden und Auswertung erweitert
|
|
# diverse Kommentare hinzugefügt
|
|
#
|
|
# v0.5 Funktion Check läuft noch eine Calibre Instanz mit Counter
|
|
# Ausgabe Texte verbessert und erweitert
|
|
# URL Statuscodes holen ins main verlagert.
|
|
#
|
|
# v0.6 Verbesserungen in der Terminalausgabe, Startausgabe ist eine eigene Funktion
|
|
# URL Status Code ist nun eine eigene Funktion
|
|
#
|
|
# v0.7 Der Updateprozes wurde in eine Prozedure geschrieben und die main Prozedure gibt,
|
|
# nur noch Hilfe und Verion aus oder startet sofort die Update Prozedure
|
|
#
|
|
# v0.8 Optionsschalter hinzugefügt, Kontrolle ob benötigte Programme vorhanden sind.
|
|
# Unterschiedliche Installationsart und -dialog je nach dem ob man Schreibrechte
|
|
# auf im Calibre Installationspfad hat oder nicht.
|
|
#
|
|
# v0.9 einbinden eines Konfigurationsfiles, auslagern einiger Funktionen in Headerfiles
|
|
# einbringen der Dateien in die Linux Verzeichnishierarchie
|
|
# v0.10 hinzufügen eines Installationsskriptes für den calibre-autoupdater, Installsript prüft
|
|
# vorhanden sein von calibre und des updaters und fragt nach Installationsort des Updaters
|
|
#
|
|
# v0.11 Das Mainscript wurde angepasst so das der Installer die ermittelten Variablen für den
|
|
# Installationsort in das Mainscript und die Konfigdatei schreiben kann.
|
|
# Es wurden diverse Ausgabentexte sprachlich verbessert und Fehler beseitigt.
|
|
# !!! Das ist die erste Version welche eine reibungslose Installation und einen reibungslosen
|
|
# betrieb unter allen Linuxvarianten ermöglicht !!!
|
|
#
|
|
# v0.13 Es wurden diverse Fehler beim eigentlichen Updateprozess bereinigt. Desweiteren wurden größere
|
|
# Prozesse in kleine aufgeteilt.
|
|
#
|
|
# v0.14 Uninstallfunktion für Calibre hinzugefügt. Hiermit kann Calibre von der Festplatte deinstalliert werden.
|
|
# Bei einer nicht vorhandenen Calibreinstallation wird vom Installsript des Updaters gefragt, ob Calibre
|
|
# installiert werden soll.
|
|
# Die Funktion Installation des Updaters wurde aufgeteilt in root_install und noroot_install
|
|
# Uninstall Funktion für den calibre-autoupdater mit gleichzeitiger nachfrage und eventueller
|
|
# deinstallation vom Calibre Programm
|
|
# Der Code wurde überarbeitet, die Dialoge verbessert, Ergebnisse von Funktionsaufrufen in Variablen
|
|
# geschrieben
|
|
#
|
|
# v0.15 die Funktion Versionsvergleich wurde mit der Funktion zum auslesen der Vorhanden Version und der verfügbaren
|
|
# Version
|
|
# zusammen gelegt.
|
|
# der Installer kontrolliert ob am Installationsort des Updaters die Verzeichnisstrucktur /bin /include /etc
|
|
# vorhanden ist und wenn nicht legt er sie an.
|
|
#
|
|
# v0.20 Der Code wurde komplett überarbeitet und vieles neu geschrieben. Sauberer Code und weniger Abfragen.
|
|
# Die Bedingungen und Schleifen wurden einfacher und logischer geschrieben
|
|
# Die Prüfung ob Calibre noch gestartet ist wenn ein Update gemacht wird ist nun simpler geschrieben,
|
|
# und es wird nicht mehr hart beendet sondern gewartet bis der Benutzer Calibre beendet
|
|
# Die Calibre Installation ist vom Installer in das Updaterskript gewandert, und im Zuge einer Calibre-
|
|
# installation wird automatisch die Konfigurationsdatei des Updaters angepasst (übergabe CalibreInstallOrt)
|
|
# Es wird wieder geprüft ob Calibre installiert ist bevor der Updater gestartet wird
|
|
#
|
|
# v0.21 Um die neuste Version von der Calibrehomepage fest zu stellen wurde die Routine geändert. Es wird nun ganz
|
|
# einfach und simpel die Seite http://calibre-ebook.com/downloads/latest_version abgefragt :-D
|
|
#
|
|
# v0.22 Statt notify-send wurde nun kdialog integriert. Bedeutet aber das nur unter KDE Benachrichtigungen ausserhalb
|
|
# der Konsole ausgegeben werden. Außerdem wurde sed für den /s Parameter angepasst. Da gab es in der letzten
|
|
# sed Version eine Änderung
|
|
#
|
|
# v0.24 Anpassungen an neue URL für die Überprüfung der aktuelll im Netz vorhandene Version. Kleine Bugfixes.
|
|
#
|
|
# TODO Auslesen der Download URL von der Download Seite
|
|
#
|
|
#
|
|
##########################################################
|
|
##########################################################
|
|
|
|
|
|
# Programmversion
|
|
PROGNAME=`basename $0`
|
|
VERSION="_-VERSION-_"
|
|
|
|
|
|
|
|
#################################
|
|
######### CONFIGURATION #########
|
|
# Diese Version funktioniert für alle Linuxsysteme nur so lange
|
|
# bis Veränderungen auf der Internetseite durchgeführt wurden
|
|
#################################
|
|
# Installationsfade in der Verzeichnishierarchie
|
|
ETC=_-ETC-_
|
|
|
|
# Einlesen des Configfiles mit den Variablen für die Calibre Downloadseite, Hauptseite
|
|
# und den Installationsfaden in der Verzeichnishierarchie
|
|
source $ETC/calibre-autoupdate.conf
|
|
|
|
#################################
|
|
##### Zusätzliche Funktionen aus Headerfiles laden #####
|
|
|
|
source $INC/calibre-autoupdate.h
|
|
source $INC/calibre-autoupdate_checks.h
|
|
|
|
#######################################################
|
|
#######################################################
|
|
|
|
# Wenn eine "KDE" oder "PLASMA NEXT" vorhanden ist, wird der "kdialog" für Benachrichtigungen verwendet, ansonsten immer "echo"
|
|
NOTIFY="echo"
|
|
[ -n "$DISPLAY" ] && NOTIFY="kdialog --passivepopup"
|
|
|
|
#######################################################
|
|
|
|
|
|
func_update () {
|
|
func_term_output # ruft die Funktion für Konsolenausgabe auf
|
|
func_check_stat # ruft die Funktion "check Status Netzwerk und Downloadadressen" auf
|
|
CHECK_STATE_RESULT="$?"
|
|
|
|
case "$CHECK_STATE_RESULT" in
|
|
1)
|
|
func_check_version
|
|
CHECK_VERCOMP_RESULT="$?"
|
|
|
|
case $CHECK_VERCOMP_RESULT in
|
|
0)
|
|
$NOTIFY "Deine Calibre Version ist auf dem aktuellsten Stand (Version $CURRENT_VERSION).";;
|
|
1)
|
|
$NOTIFY "Uh Oh! Deine Calibre Version ist aktueller wie die letzte Verfügbare! (Installiert: Version $CURRENT_VERSION, Letzte Verfügbare: Version $LATEST_VERSION)";;
|
|
2)
|
|
$NOTIFY "Ein Calibre Update ist verfügbar. (Installiert: $CURRENT_VERSION, letzte Verfügbare: $LATEST_VERSION)"
|
|
# Installiert die aktuellste verfügbare Version von der Calibre Homepage
|
|
func_check_run_calibre # Aufruf der Funktion ob Calibre gestartet ist
|
|
if [ -w "$CALIBRE_INSTALL_LOCATION" ]; then
|
|
$NOTIFY "Das Update wird nun installiert..."
|
|
echo -e "\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
|
|
$NOTIFY "Du hast kein Schreibrecht auf $CALIBRE_INSTALL_LOCATION. Das Update wird mit SUDO installiert. Bitte gib hierzu Dein Userpasswort im Terminalfenster ein..."
|
|
echo -e "\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
|
|
$NOTIFY "Calibre wurde auf die neuste Version $LATEST_VERSION aktuallisiert.";;
|
|
esac
|
|
;;
|
|
2)
|
|
$NOTIFY "Versionsvergleich fehlgeschlagen!!! Die Calibre Homepage $CHECK_CALIBRE_DOWNLOAD_PAGE ist nicht verfügbar!";;
|
|
3)
|
|
$NOTIFY "Update fehlgeschlagen!!! Die Download Seite $CHECK_DOWNLOAD_URL ist nicht verfügbar!";;
|
|
4)
|
|
$NOTIFY "Update und Versionsvergleich fehlgeschlagen!!! Kann kein Netzwerkinterface finden!";;
|
|
esac
|
|
echo -e "\e[m"
|
|
return 0
|
|
}
|
|
|
|
#### Main Funktion ####
|
|
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 ;;
|
|
--check | -C | -c )
|
|
func_check_prog; exit 0 ;;
|
|
--uninstall | -U | -u )
|
|
func_uninstall; exit 0 ;;
|
|
--install-calibre )
|
|
func_install_calibre; exit 0 ;;
|
|
--uninstall-calibre )
|
|
func_uninstall_calibre; exit 0 ;;
|
|
esac
|
|
done
|
|
func_check_prog
|
|
func_update
|
|
echo -e "\e[m"
|
|
exit 0
|