calibre-autoupdate/calibre-autoupdate

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