JamUp - Version 2017

Shell Script zum bequemen Update Jameica Framework

 
CBC
Benutzer
Avatar
Geschlecht:
Herkunft: Bonn
Homepage: viaembedded.com
Beiträge: 81
Dabei seit: 06 / 2015
Betreff:

JamUp - Version 2017

 · 
Gepostet: 09.01.2017 - 14:55 Uhr  ·  #1
Hallo zusammen,

ich habe das Update Script für Jameica überarbeitet. Das Script bietet eine bequeme Möglichkeit, Jameica per Kommandozeilenaufruf mit "jamup.sh" zu aktualisieren (das 2. Script wird vom ersten Script aufgerufen)

Neu hinzugekommen sind in dieser Version u.a. die folgenden Schalter:

1. "--forceup", so lässt sich ein Update auch dann durchführen, wenn keine neuere Version als die installierte verfügbar ist

2. "--forcestable", so lässt sich ein Update von Nightly auf Stable durchführen. Vorsicht!

3. "--forcenightly", so lässt sich ein Update von Stable auf Nightly durchführen.

Ein Backup der aktuellen Installation wird beim Updatei unter "/opt/jameica.old" gespeichert," und wird erst bei der nächsten Aktualisierung wieder überschrieben.
Wurden Plugins im Anwendungsordner/opt/jameica/plugins gespechert, so werden diese in die neue Installation übertragen. Das gilt auch für das /opt/jameica/cfg Verzeichnis, falls hier Dateien vorhanden sind.

Ist Jameica NICHT in /opt/jameica installiert, bitte erst in BEIDEN Scripten die Variable jameica_home="/opt/jameica" anpassen.

Nachfolgend nun die beiden Scripte als Copy & Paste Code, bzw. sind die Scripte auch als ZIP Anhang an diesen Beitrag angehangen.

Viel Spaß

Christian


Hauptscript "jamup.sh"

Code


#!/bin/bash

# ****************************************************************
#
#  JamUp - Shellscript zum bequemen Update des Jameica Frameworks
#
#   (c) 2017 Christian B. Caldarone, Released under GPL V2 only
#
# ****************************************************************



link=$(readlink -f "$0")
dir=$(dirname "$link")
cd "$dir"
cmdline=${1,,}
forceup=0
forcestabe=0
forcenightly=0
jameica_home="/opt/jameica"


case $cmdline in
    --forceup) 
        
    echo
    echo "   Update wird forciert, auch wenn keine neuere Version vorhanden."
    echo -n "   "
    forceup=1    

        ;;

    --forcenightly) 
        
    echo
    echo "   !!! Update auf Nightly wird forciert. Vorsicht !!!"
    echo -n "   "
    forceup=1
    forcenightly=1

        ;;


    --forcestable) 
        
    echo
    echo "   !!! Update auf Stable wird forciert. Vorsicht !!!"
    echo -n "   "
    forceup=1    
    forcestable=1
        ;;


    --help)

    echo
         echo "   Kommandozeilenoptionen."
    echo "   "
    echo "   --help         | Diesen Text anzeigen"
    echo "   --forceup      | Update durchführen, auch wenn keine neuere Version verfügbar."
    echo "   --forcenightly | Update auf Nightly durchführen."
    echo "   --forcestable  | Update auf Stable durchführen. Inkompatibilitäten beachten."
    echo "   --version      | Versionsinformationen anzeigen"    
        echo "   "
    exit
    ;;

    --version)

    echo
         echo "   JamUp - Shellscript zum bequemen Update des Jameica Frameworks"
    echo "   "
    echo "   (c) 2017 Christian B. Caldarone, Released under GPL V2 only"
    echo "   "
    exit
    ;;

  esac


echo
echo "   Überprüfen ob Jameica auf diesem System installiert ist und wenn ja, in welcher Version..."
echo

if [[ -e $HOME/.jameica/cfg/de.willuhn.jameica.plugin.PluginLoader.properties ]]; then

  eval $(cat $HOME/.jameica/cfg/de.willuhn.jameica.plugin.PluginLoader.properties | grep jameica=)

else

  if [[ $(ls -A $jameica_home) ]]; then

    echo "   Jameica wurde unter diesem Benutzer noch nicht gestartet, ist aber grundsätzlich auf diesem System installiert."
    echo "   Bitte Jameica mit diesem Benutzer einmal ausführen, dann dieses Script noch einmal starten."
  

  else

    echo "   Jameica ist auf diesem System noch nicht installiert, oder befindet sich nicht im Standardverzeichnis $jameica_home"
    echo "   Bitte überprüfen oder ggf. das Script anpassen (Variable '$jameica_home')."

    jameica="0.0.0"

  fi

fi


if ( [[ $jameica == *"nightly"* ]] || [[ $forcenightly -gt 0 ]] ) && [[ $forcestable -eq 0 ]] ; then

  jameica_new=$(curl --silent --get http://www.willuhn.de/products/jameica/download_ext.php | grep 'nightly-linux.zip' | sed -e 's/.*jameica-\(.*\)-linux.*/\1/')

  
else

  jameica_new=$(curl --silent --get http://www.willuhn.de/products/jameica/download.php | grep '<h2>Jameica' | sed -e 's/.*Jameica \(.*\) - Aktuelle Version.*/\1/')

fi

  

if [[ $jameica < $jameica_new ]] || ( [[ $nightly -gt 0 ]] && [[ $(date -r "$jameica_home/jameica.jar" +%Y-%m-%d) < $(date +%Y-%m-%d) ]] ); then

  echo "   Installierte Jameica Version: $jameica vom "$(date -r "$jameica_home/jameica.jar" +%d.%m.%Y)
  echo
  echo "   ==> Es ist eine neueres Jameica in der Version $jameica_new verfügbar!"
  do_update=1


else


  echo "   Installierte Jameica Version ist aktuell: $jameica vom "$(date -r "$jameica_home/jameica.jar" +%d.%m.%Y)
  echo
  echo "   ==> Es ist keine neuere Version vorhanden!"
  
  if [ $forceup -gt 0 ]; then

    echo
    echo "   Update auf $jameica_new wird forciert."

    do_update=1

  else

    echo
         echo "   Beenden ohne Aktualisierung."

    do_update=0

  fi


fi


if [ $do_update -gt 0 ]; then

  echo
  echo "   Jameica kann jetzt automatisch aktualisiert werden!"
  echo
  echo "   Ein Backup der aktuellen Installation wird hierbei unter $jameica_home.old gespeichert,"
  echo "   und wird erst bei der nächsten Aktualisierung wieder überschrieben."
  echo "   Wurden Plugins im Anwendungsordner $jameica_home/plugins gespechert, so werden diese in"
  echo "   die neue Installation übertragen. Das gilt auch für das $jameica_home/cfg Verzeichnis,"
  echo "   falls hier Dateien vorhanden sind."
  echo

  read -r -p "   Soll Jameica jetzt automatisch aktualisiert werden? [J/N]" abfrage

  case $abfrage in
    [jJ]|[yY]) 
        
    echo
    echo "   Installiere...."
    echo "   "
    echo -n "   Root "
   su -c "./perform_jamupdate.sh $jameica_new"

   # Fall keine Root-Rechte benötigt werden, kann die nächste Zeile für den Aufruf
   # des Helper-Scripts genutzt werden. Die vorherigen dann auskommentieren.
   #
   # sh ./perform_jamupdate.sh $jameica_new


        ;;

    *)

    echo
         echo "   Beenden ohne Aktualisierung."
        ;;

  esac

fi





Update Helfer-Script, wird vom ersten Script aufgerufen

Code


#!/bin/bash


link=$(readlink -f "$0")
dir=$(dirname "$link")
cd "$dir" 
jameica_home="/opt/jameica"

download_file="jameica-linux"



if [[ ! -w $jameica_home ]]; then

  echo "Keine Schreibrechte in$jameica_home"
  exit 1

fi


inst_tmp=$(mktemp -d --tmpdir jameica.XXXXXXXX) || { echo "Fehler beim anlegen des Temp-Dir."; exit 1; } 

if [[ $* == *"nightly"* ]]; then

  
  download_file="jameica-$1-linux"

else

  download_file="jameica-linux"

fi







if [[ $(uname -m | grep 64) ]]; then


  download_file="$download_file"64.zip

else

  download_file="$download_file".zip

fi

echo $download_file


if [[ $* == *"nightly"* ]]; then

  nightly=1

  download_url="http://www.willuhn.de/products/jameica/releases/nightly/"

  wget -q -P $inst_tmp/ $download_url$download_file

  




else

  nightly=0

  download_url="http://www.willuhn.de/products/jameica/releases/current/jameica/"

  wget -q -P $inst_tmp/ $download_url$download_file
  
  wget -q -P $inst_tmp/ $download_url$download_file.SHA 

  file_sha=$(sha1sum -b $inst_tmp/$download_file | sed -r 's/(.{40}).*/\1/') 

  test_sha=$(cat $inst_tmp/$download_file.SHA | sed -r 's/(.{40}).*/\1/') 

  [ "$file_sha" == "$test_sha" ] || { echo "Checksumme stimmt nicht, Download fehlerhaft. Abbruch!"; exit 1; }



fi


mkdir $inst_tmp/backup

if [[ -d $jameica_home/plugins ]]; then

  
  if [[ $(ls -A $jameica_home/plugins) ]]; then

    cp -fpR $jameica_home/plugins $inst_tmp/backup

  fi


fi


if [ -d "$jameica_home/cfg" ]; then

  
  if [[ $(ls -A $jameica_home/cfg) ]]; then

    cp -fpR $jameica_home/cfg $inst_tmp/backup

  fi


fi

rm -rf $jameica_home".old"

mv -f $jameica_home $jameica_home".old"

unzip -qu $inst_tmp/$download_file -d /opt


if [[ $(ls -A $inst_tmp/backup) ]]; then

  cp -fpR $inst_tmp/backup/* $jameica_home

fi



rm -rf $inst_tmp


Der an diesem Beitrag angefügte Anhang ist entweder nur im eingeloggten Zustand sichtbar oder die Berechtigung Deiner Benutzergruppe ist nicht ausreichend.
Benutzer
Avatar
Geschlecht:
Beiträge: 346
Dabei seit: 11 / 2003
Betreff:

Re: JamUp - Version 2017

 · 
Gepostet: 09.01.2017 - 16:49 Uhr  ·  #2
Vielen Dank für die Skripte!

Sitz aktuell nicht vor meinem Linux Rechner, aber was ist, wenn ich Jameica in /home/heart/Programme/jameica z.B. installiert habe, dann setze ich diesen Pfad in jamup.sh + perform_jamupdate.sh als jameica_home und benötige ja dann eigentlich überhaupt keine root-Rechte für die Installation...

Das Helper-Skript perform_jamupdate.sh würde dann aber trotzdem abbrechen wg. der harten Prüfung auf Schreibrechte in /opt oder?
Code
if [[ ! -w /opt ]]; then

  echo "Keine Schreibrechte in /opt"
  exit 1

fi
CBC
Benutzer
Avatar
Geschlecht:
Herkunft: Bonn
Homepage: viaembedded.com
Beiträge: 81
Dabei seit: 06 / 2015
Betreff:

Re: JamUp - Version 2017

 · 
Gepostet: 09.01.2017 - 18:05 Uhr  ·  #3
Zitat geschrieben von Heart

Vielen Dank für die Skripte!

Sitz aktuell nicht vor meinem Linux Rechner, aber was ist, wenn ich Jameica in /home/heart/Programme/jameica z.B. installiert habe, dann setze ich diesen Pfad in jamup.sh + perform_jamupdate.sh als jameica_home und benötige ja dann eigentlich überhaupt keine root-Rechte für die Installation...

Das Helper-Skript perform_jamupdate.sh würde dann aber trotzdem abbrechen wg. der harten Prüfung auf Schreibrechte in /opt oder?
Code
if [[ ! -w /opt ]]; then

  echo "Keine Schreibrechte in /opt"
  exit 1

fi



Stimmt ;) Habe auch gerade noch einen kleinen Fehler gefunden, daher nun ein Update des originalen Beitrags/Scripte bzw. des Anhangs.

Im Helper-Script prüft das Script nun die Schreibrechte des in der Variable "jameica_home" angegebenen Verzeichnisses:

Code


if [[ ! -w $jameica_home ]]; then

  echo "Keine Schreibrechte in $jameica_home"
  exit 1

fi



Für einen Aufruf ohne Root-Rechte, einfach folgendes Übernehmen und anpassen (könnte ich ja noch einen --noroot einbauen, allerdings beherrscht die Parameter-Übergabe derzeit nur einen Parameter zur selben Zeit..

Code


    echo -n "   Root "
    su -c "./perform_jamupdate.sh $jameica_new"
    
    # Fall keine Root-Rechte benötigt werden, kann die nächste Zeile für den Aufruf
    # des Helper-Scripts genutzt werden. Die vorherigen dann auskommentieren.
    #
    # sh ./perform_jamupdate.sh $jameica_new

Gewählte Zitate für Mehrfachzitierung:   0