Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - ~RaMich~

Pages: [1]
1
Scripts / Re: apt-get upgrade and yad
« on: August 27, 2017, 07:25:30 PM »
wenn du meinst?
teste es. irgendwo speichern, ausführbar machen und los gehts. .. sofern auch alle neuen Abhängigkeiten installiert sind.

2
Scripts / Re: apt-get upgrade and yad
« on: August 27, 2017, 06:59:04 PM »
.. ich hab` mir den code geschnappt und `was rumgespielt
Code: [Select]
#!/bin/bash
#
APPNAME="Update Tool"
SCRIPTPFAD=$(dirname $(readlink -f $0))
LOGFILE=/var/log/misko-update.log
UPDATELOG=/var/log/last-update-log.log
#log einrückung und format
indent_weite="sed 's/^/                     |/'"
maximal_weite="70"
# dist-upgrade or upgrade, change next line
COMMAND=dist-upgrade
# Yad window icon
#ic=/usr/share/icons/oxygen/22x22/apps/system-software-update.png
#ic=/usr/share/icons/oxygen/22x22/apps/system-software-update-alpha.png
ic=/usr/local/bin/images/vsidoorb_80.png

function log_date(){
    message="$@"
    echo '['$(date +%d.%m.%Y\ %H:%M:%S)'] '$message | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})*)?m//g" | fold -sw 76 >> $LOGFILE
}

function log_indent(){
    message="$@"
    string=$($message | sed -n -e '1h;2,$H;${x;s/\n/ /g;p}')
    echo '                     |'$message | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})*)?[m|K]//g" | fold -sw 76 >> $LOGFILE
}

function indent() {
string=$(echo $@ | fmt --width=$maximal_weite  | eval "$indent_weite")
echo "$string" >> $LOGFILE
}

function checklock () {
  # Checks for exclusive lock and wait until package managers are closed
  while  fuser /var/lib/dpkg/lock 2>&1 >/dev/null  ; do
      echo "# !     . . .       . . .   warte auf Beendung andere Software-Manager   . . .     . . .      !" $"\n"
      if [ "$(pidof synaptic)" ]; then
          echo "# !     . . .       . . .   warte auf Beendung andere Software-Manager   . . .     . . .      !" $"\nsynaptic"
      fi
      echo 1
      sleep 1
      echo 30
      sleep 1
      echo 60
      sleep 1
      if [ ! -z "$(pgrep gdebi-gtk)" ]; then
          echo "# !     . . .       . . .   warte auf Beendung andere Software-Manager   . . .     . . .      !" $"\ngdebi-gtk"
      fi
      echo 95
      sleep 1
  done | (if ! yad  --progress \
                    --posx=50 \
                    --posy=50 \
                    --window-icon="$ic" \
                    --title="$APPNAME - schließen Sie alle geöffneten Paket-Manager !" \
                    --percentage=20 \
                    --auto-close \
                    --button="abbrechen:1";then killall $(basename $0); exit 0; fi)
}

function showlog () {
      if [[ ! -f $LOGFILE ]]; then
          yad --posx=50 \
              --posy=50 \
              --info \
              --window-icon="$ic" \
              --title="$APPNAME Info" \
              --text="kein log vorhanden."
      elif  [[  -z "$(cat $LOGFILE)"  ]]; then
          yad --posx=50 \
              --posy=50 \
              --info \
              --window-icon="$ic" \
              --title="$APPNAME Info" \
              --text="kein eintrag im log."
      else
          yad --posx=50 \
              --posy=50 \
              --text-info \
              --wrap \
              --window-icon="$ic" \
              --title="$APPNAME log file -> $LOGFILE" \
              --on-top \
              --button="update:0" \
              --button="update-log:1" \
              --button="log mit Kate öffnen:2" \
              --button="reverse:3" \
              --button="schließen:4" \
              --button="beenden:5" \
              --height=600 \
              --width=800 \
              --filename="$LOGFILE"
              BUTTON_SEL_RET=$?
  echo function showlog BUTTON_SEL_RET = $BUTTON_SEL_RET
          if [ "$BUTTON_SEL_RET" = "0" ]; then
              checklock; update
          elif [ "$BUTTON_SEL_RET" = "1" ]; then
              last-update-log
          elif [ "$BUTTON_SEL_RET" = "2" ]; then
              kate "$LOGFILE" &
          elif [ "$BUTTON_SEL_RET" = "3" ]; then
              showreverslog
          elif [ "$BUTTON_SEL_RET" = "4" ]; then
              main
          elif [ "$BUTTON_SEL_RET" = "5" ]; then
              exit 0
          fi
      fi
      main
}

function showreverslog () {
    if [[ ! -f $LOGFILE ]]; then
        yad --posx=50 --posy=50 --info --window-icon="$ic" --title="$APPNAME Info" --text="kein log vorhanden."
    elif  [[  -z "$(cat $LOGFILE)"  ]]; then
        yad --posx=50 --posy=50 --info --window-icon="$ic" --title="$APPNAME Info" --text="kein eintrag im log."
    else
        text=$(cat -n $LOGFILE | sort -nr | cut -b 8- )
        echo "$text" | \
        yad --posx=50 \
            --posy=50 \
            --text-info \
            --wrap \
            --window-icon="$ic" \
            --title="$APPNAME log file -> $LOGFILE" \
            --on-top \
            --height=600 \
            --width=800 \
            --button="update:0" \
            --button="update-log:1" \
            --button="log mit Kate öffnen:2" \
            --button="chronologisch:3" \
            --button="schließen:4" \
            --button="beenden:5"
            BUTTON_SEL_RET=$?
echo function showreverslog BUTTON_SEL_RET = $BUTTON_SEL_RET
        if [ "$BUTTON_SEL_RET" = "0" ]; then
            checklock; update
        elif [ "$BUTTON_SEL_RET" = "1" ]; then
            last-update-log
        elif [ "$BUTTON_SEL_RET" = "2" ]; then
            kate "$LOGFILE" &
        elif [ "$BUTTON_SEL_RET" = "3" ]; then
            showlog
        elif [ "$BUTTON_SEL_RET" = "4" ]; then
            main
        elif [ "$BUTTON_SEL_RET" = "5" ]; then
            exit
        fi
    fi
    main
}

function last-update-log () {
    if [[ ! -f $UPDATELOG ]]; then
        yad --posx=50 \
            --posy=50 \
            --info \
            --window-icon="$ic" \
            --title="$APPNAME Info" \
            --text="kein log vorhanden."
    elif  [[  -z "$(cat $UPDATELOG)"  ]]; then
        yad --posx=50 \
            --posy=50 \
            --info \
            --window-icon="$ic" \
            --title="$APPNAME Info" \
            --text="kein eintrag im log."
    else
        yad --posx=50 \
            --posy=50 \
            --text-info \
            --wrap \
            --window-icon="$ic" \
            --title="$APPNAME log file -> $UPDATELOG" \
            --button="update:0" \
            --button="Protokoll anzeigen:1" \
            --button="log mit Kate öffnen:2" \
            --button="schließen:3" \
            --button="beenden:4" \
            --height=600 \
            --width=800 \
            --filename="$UPDATELOG"
            BUTTON_SEL_RET=$?
echo function last-update-log BUTTON_SEL_RET = $BUTTON_SEL_RET
        if [ "$BUTTON_SEL_RET" = "0" ]; then
            checklock; update
echo function last-update-log im  0-teil nach funktionsaufruf
        elif [ "$BUTTON_SEL_RET" = "1" ]; then
            showreverslog
        elif [ "$BUTTON_SEL_RET" = "2" ]; then
            kate "$UPDATELOG" &
        elif [ "$BUTTON_SEL_RET" = "3" ]; then
            main
        elif [ "$BUTTON_SEL_RET" = "4" ]; then
            exit 0
        fi
    fi
    main
}

function about () {
    yad --posx=50 \
        --posy=50 \
        --info\
        --window-icon="$ic"\
        --title="über $APPNAME "\
        --on-top \
        --height=20\
        --width=300\
        --button="Update starten:0" \
        --button="schließen:1" \
        --button="beenden:2" \
        --text="$APPNAME ist ein kleines Update GUI, abgeleitet vom Linux Lite Upgrade-Tool und sehr einfach zu bedienen.\n\nÜbersetzt vom <a href='http://vsido.org/index.php?topic=1118.msg12502#msg12502'>http://vsido.org</a> Thread \n\nLicence GPL v3.\n\n Milos Pavlovic 2016"
         BUTTON_SEL_RET=$?
echo function about BUTTON_SEL_RET = $BUTTON_SEL_RET
        if [ "$BUTTON_SEL_RET" -eq "0" ]; then
            checklock; update
        elif [ "$BUTTON_SEL_RET" -eq "1" ]; then
            main
        elif [ "$BUTTON_SEL_RET" -eq "2" ]; then
            exit
        fi
}

function update() {
  # Temporary file for error tracking
  TMPLIST=$(mktemp /tmp/repos.XXXXXX)

  APTUPDATE=$(grep '^deb' -c /etc/apt/sources.list) # Total number of repositories registered, this is approximated

  apt-get update 2>&1 | tee $TMPLIST \
                      | awk -v total=$APTUPDATE '/^Ign|^Get/{count++;$1=""} FNR { if (total != 0){percentage=int (100*count/total);print (percentage < 90?percentage:90),"\n#",substr($0, 0, 128) }; fflush(stdout)}' \
                      | yad --progress \
                            --posx=50 \
                            --posy=50 \
                            --window-icon="$ic" \
                            --title="aktualisiere Softwarequellen - bitte warten..." \
                            --text="Paketlisten aktualisieren..." \
                            --percentage=0 \
                            --width=650 \
                            --button="schließen:0" \
                            --auto-close
                            BUTTON_SEL_RET=$?
  echo function update Paketlisten aktualisieren BUTTON_SEL_RET = $BUTTON_SEL_RET
      if [ "$BUTTON_SEL_RET" -ne "0" ]; then
          err_msg=$(awk '/^(W:|E:)/{$1=""; print $0}' $TMPLIST | tail -n 1 )    #Get errors/warnings
          log_date "ERROR: $err_msg"
          unset APTUPDATE
          rm -f $TMPLIST
          unset TMPLIST
          yad --posx=50 \
              --posy=50 \
              --error \
              --title="Error" \
              --text="$APPNAME konnte Paket-Cache Informationslisten nicht holen.\nÜberprüfen Sie das Protokoll für Details"
          main
      fi

  log_date "INFO: Software-Quellen wurden aktualisiert."

  unset APTUPDATE
  rm -f $TMPLIST
  unset TMPLIST

  #  Temporary list of available updates
  UPDATES=$(mktemp /tmp/updateslist.XXXXXX)

  apt-get --just-print $COMMAND 2>&1 \
      | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print "Name: $1 INSTALLED: $2 AVAILABLE: $3\n"}' \
      | awk '{print NR,":\t"$0}' \
      | tee $UPDATES  \
      | yad --progress \
            --posx=50 \
            --posy=50 \
            --window-icon="$ic" \
            --title="berechne Updates" \
            --text="bitte warten..." \
            --width=300 \
            --pulsate \
            --button="schließen:0" \
            --auto-close
            BUTTON_SEL_RET=$?
  echo function update berechne Updates BUTTON_SEL_RET = $BUTTON_SEL_RET
  # Check if any updates are available, if there are none, script pops up dialog box saying 'No Updates Available', removes /tmp/updateslist.XXXXXX
  if [  -z "$(cat $UPDATES)"  ]; then
      log_date "INFO: keine Updates verfügbar."
      rm -f $UPDATES
      unset UPDATES
      yad --posx=50 \
          --posy=50 \
          --info \
          --window-icon=$ic \
          --title="$APPNAME" \
          --on-top \
          --button="Protokoll anzeigen:0" \
          --button="schließen:1" \
          --button="beenden:2" \
          --text="keine Updates verfügbar"
          BUTTON_SEL_RET=$?
  echo function update keine Updates BUTTON_SEL_RET = $BUTTON_SEL_RET
          if [ "$BUTTON_SEL_RET" -eq "0" ]; then
              showreverslog
          elif [ "$BUTTON_SEL_RET" -eq "1" ]; then
  echo function update keine Updates  \>\> im 1-zweig schließen
              main
          elif [ "$BUTTON_SEL_RET" -eq "2" ]; then
              exit 0
          fi
  fi
      # Log available updates
      lst_upgrades=$(awk 'BEGIN { FS = "[ ]" } { print $3 }' $UPDATES  | sed ':a;N;$!ba;s/\n/ /g')
      log_date "INFO: Updates verfügbar:"
      indent $lst_upgrades
      unset lst_upgrades

  # Insert text into  /tmp/updateslist.XXXXXX
  sed -i -e '1 i\Liste der verfügbaren Updates' -e '1 i\Klicken Sie auf Update um fortzufahren oder Abbrechen um den Update-Vorgang zu stoppen\n'  $UPDATES

  # Erase existing available info
  sudo dpkg --clear-avail

  # Call the yad dialog to show update list
  yad --posx=50 \
      --posy=50 \
      --text-info \
      --window-icon="$ic" \
      --title="Verfügbare Updates" \
      --button="Update:0" \
      --button="abbrechen:1" \
      --width=800 \
      --height=300 \
      --filename="$UPDATES"
      BUTTON_SEL_RET=$?
  echo function update Verfügbare Updates BUTTON_SEL_RET = $BUTTON_SEL_RET
      # Continue script if no halt
      if [ "$BUTTON_SEL_RET" -eq "0" ];then

          # Write log
          log_date "INFO: Update started."

          # Remove tmp file and unset variable
          rm -f $UPDATES
          unset UPDATES

          # Begin upgrade
                   
          DEBIAN_FRONTEND=noninteractive apt-get  -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" $COMMAND --show-progress -y  2>&1 \
          | tee $UPDATELOG \
          | awk ' BEGIN { FS=" "; total=1;end_download=0} /upgraded/ {total= $1 + $3;FS="[ :]" } /^Get:[[:digit:]]+/ {printf "#Downloading %s %s %s\n",$7,$(NF-1),$NF;print int(($2 - 1) * 100 / total); fflush(stdout)} /^\(Reading / {if (end_download==0){print 100;fflush(stdout);end_download=1}} /^(Preparing|Unpacking|Selecting|Processing|Setting|Download)/ {print "#", $0; fflush(stdout)}  /^Progress/ {print  match($0, /([0-9]+)/, arr); if(arr[1] != "") print arr[1] ; fflush(stdout)}' \
          | ( yad --progress \
                  --posx=50 \
                  --posy=50 \
                  --window-icon=$ic \
                  --title="herunterladen - bitte warten..." \
                  --text="Pakete werden runtergeladen ... \nDies kann eine Weile dauern." \
                  --width=600 \
                  --percentage=0 \
                  --button="schließen:0" \
                  --auto-close ;\
              yad --progress \
                  --posx=50 \
                  --posy=50 \
                  --window-icon=$ic \
                  --title="Installation - bitte warten ..." \
                  --text="Konfigurieren und Installieren von Paketen ... \n Dies kann eine Weile dauern." \
                  --width=600 \
                  --percentage=0 \
                  --button="schließen:0" \
                  --auto-close )
                  BUTTON_SEL_RET=$?
  echo function update BUTTON_SEL_RET = $BUTTON_SEL_RET
          if [ "$BUTTON_SEL_RET" -ne "0" ]; then
              err_msg=$(awk '/^(W:|E:)/{$1=""; print $0}' $UPDATELOG | tail -n 1)
              log_date "ERROR:$err_msg"
              yad --posx=50 --posy=50 --error --title="Error" --window-icon="$ic" --text="Updates sind gescheitert.\nÜberprüfen Sie das Protokoll für Details."
              main
          fi

      # Halt updates script if user selects Cancel
      else
          log_date "INFO: Software-Upgrades vom Benutzer abgebrochen."
          rm -f $UPDATES
          unset UPDATES
          main
      fi

  log_date "INFO: Updates erfolgreich installiert."

  yad --posx=50 \
      --posy=50 \
      --question \
      --window-icon="$ic" \
      --title="$APPNAME" \
      --text="Updates wurden vollständig installiert.\n\nMöchten Sie das $APPNAME Protokoll anzuzeigen?" \
      --button="ja:0" \
      --button="nein:1"
      BUTTON_SEL_RET=$?
  echo function update Updates wurden vollständig installiert BUTTON_SEL_RET = $BUTTON_SEL_RET
  if [ $BUTTON_SEL_RET -eq 1 ]; then
      yad --posx=50 \
          --posy=50 \
          --info \
          --window-icon="$ic" \
          --title="$APPNAME" \
          --width=250 \
          --text="Aktualisierungen abgeschlossen." \
          --button="schließen:0" \
          --button="beenden:1"
          BUTTON_SEL_RET=$?
      echo function update Aktualisierungen abgeschlossen BUTTON_SEL_RET = $BUTTON_SEL_RET
      if [ "$BUTTON_SEL_RET" -eq "0" ]; then
          main;
      elif [ "$BUTTON_SEL_RET" -eq "1" ]; then
          exit
      fi
  else
      yad --posx=50 \
          --posy=50 \
          --text-info \
          --wrap \
          --window-icon="$ic" \
          --title="$APPNAME log file -> $UPDATELOG" \
          --height=600 \
          --width=800 \
          --on-top \
          --button="autoremove:0" \
          --button="Protokoll:1" \
          --button="schließen:2" \
          --button="beenden:3" \
          --filename="$UPDATELOG"
          BUTTON_SEL_RET=$?
      echo function update Updates Log BUTTON_SEL_RET = $BUTTON_SEL_RET
  fi
      if [ "$BUTTON_SEL_RET" -eq "0" ]; then
          autoremove
          main
      elif [ "$BUTTON_SEL_RET" -eq "1" ]; then
          showreverslog
      elif [ "$BUTTON_SEL_RET" -eq "2" ]; then
          main
      elif [ "$BUTTON_SEL_RET" -eq "3" ]; then
          exit
      fi
}

function autoremove() {
xterm -e 'read line <<TEXT_MARKE
apt-get autoremove
TEXT_MARKE
eval $line; bash'
        main
}

function main() {
selection=$(yad --posx=50 \
                --posy=50 \
                --list \
                --title="$APPNAME" \
                --window-icon="$ic" \
                --text="Option wählen --> Doppelklick" \
                --height=175 \
                --width=225 \
                --hide-column=1 \
                --no-buttons \
                --no-headers \
                --column="Function" \
                --column="option" \
                   "update" "➊ Update Packages" \
                   "showlog" "➋ Protokoll anzeigen" \
                   "showreverslog" "➌ Protokoll reverse anzeigen" \
                   "purgecache" "➍ apt info-cach löschen" \
                   "autoremove" "➎ apt autoremove" \
                   "about" "➏ über diese Anwendung" \
                   "exit" "➐ beenden" \
                --print-column=1) || exit
                selection=$(echo $selection | cut -d '|' -f 1)
echo function main selection = $selection
    case "$selection" in
        update) checklock; update
        ;;
        showlog) showlog
        ;;
        showreverslog) showreverslog
        ;;
        purgecache) checklock; sudo rm -vfd /var/lib/apt/lists/*  || yad --posx=50 --posy=50 --error --text="! Fehler, kann cache nicht löschen.\nVersuchen Sie es manuell mittels:\nsudo rm /var/lib/apt/lists/* -vf"
        ;;
        autoremove) autoremove
        ;;
        about) about
        ;;
        exit) exit 0
        ;;
    esac
}

# Make sure only root can run our script
if [[ $EUID -ne 0 ]]; then
    echo
    echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    echo "x   Dieses Skript muss als root ausgeführt werden!         x" 1>&2
    echo "x   Tipp: Verwenden Sie gksu oder ein ähnliches Werkzeug.  x" 1>&2
    echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    echo
    SCRIPT=$( readlink -m $( type -p $0 ))
    EXPECTPFAD=$(mktemp /tmp/expectScriptStart.XXXXXX.exp)

    echo "schreibe hilfs-script"
    echo
    echo expect temp datei: \"$EXPECTPFAD\"
    #--expect script anlegen uns schreiben--------------------------------
    echo "#!/usr/bin/expect" >> $EXPECTPFAD 2>&1
    echo "spawn gksu $SCRIPT" >> $EXPECTPFAD 2>&1
    echo "spawn shred -u $EXPECTPFAD" >> $EXPECTPFAD 2>&1
    echo "expect eof" >> $EXPECTPFAD 2>&1
    #--------------------------------------------------------------------------
    chmod +x $EXPECTPFAD
    #--------------------------------------------------------------------------
    expectScriptStart="$(cat $EXPECTPFAD)"
    echo dateiinhalt:
    echo .....................................................
    echo "$expectScriptStart"
    echo .....................................................
    echo starte hilfs-script
    echo
    exec $EXPECTPFAD
    exit 0
fi
#----------------das script an sich-----------------------------------------------------------------
SCRIPT=$( readlink -m $( type -p $0 ))
#echo \$SCRIPT: $SCRIPT
main


Pages: [1]