git Repositories schnell und bequem aktualisieren

Wer mehrere lokale git Repositories auf seinem Rechner liegen hat, weiß sicher, welche „Freude“ es macht, diese auf dem aktuellen Stand zu halten.

Mit ein wenig Shell-Script geht das jedoch ganz leicht von der Hand und weh tut es auch nicht 😉

#! /bin/bash

PRJDIR="$HOME/Projekte"

cd $PRJDIR
for REPO in $(find -name .git -type d | sort); do
    cd $PRJDIR
    DIR=$(dirname $REPO)
    REPOPATH=$(realpath $DIR)
    REPONAME=$(basename $REPOPATH)

    cd "$REPOPATH"
    echo "Aktualisiere $REPONAME"
    UPSTREAM=$(git remote -v | grep ups)
    if [ -n "$UPSTREAM" ]; then
        echo "Synchronisiere mit Upstream"
        git fetch upstream
        git checkout master
        git merge upstream/master
        git push
    else
        git pull
    fi
    echo
done

ggf. muss man die Variable $PRJDIR in Zeile 3 des Scriptes anpassen, sofern die git Repositories sich an einem anderen Ort befinden.

Unwetterwarner für Linux

Gemäß dem Motto es gibt kein schlechtes Wetter, wenn man rechtzeitig gewarnt wird, habe ich das Unwetterwarner-Script, das man hier findet, ein wenig überarbeitet und ergänzt.

#!/bin/bash
notify_header="Wetterwarnungen für Coburg"
popup_icon=~/Bilder/Wetterwarnung.png
landkreis=COX
image_viewer=display # must be able to handle URLs
warning_url='http://www.dwd.de/dyn/app/ws/html/reports/'${landkreis}'_warning_de.html'
timeline_url="http://www.dwd.de/dyn/app/ws/maps/${landkreis}_timeline.png"
automode=false

if [ -n "$1" ]; then
    if [ "$1" == "auto" ]; then
        automode=true
    else
        i="$1"
        size=${#i}
        if [ "$size" -eq 3 ]; then
            landkreis=$1
            notify_header="Wetterwarnungen für "$landkreis
        else
            notify-send --icon=$popup_icon """ungültiger Landkreis""" "ungültiger Landkreis: $1"
            exit
        fi
    fi
fi

textstring=$(wget $warning_url -O -  | grep -i -e "warnung vor" -e "vorabinformation" | sed s/\<\\/p\>//g ) 

if [ "$textstring" = ""  ]; then
    notify-send --icon=$popup_icon """$notify_header""" "keine Warnungen vorhanden"
else
    notify-send --icon=$popup_icon """$notify_header""" """$textstring"""
    if [ "$automode" == false ]; then
        $image_viewer $timeline_url &
        # xdg-open $warning_url &
        sleep 4
        kill $!
    fi
fi

Wer das Script selber nutzen möchte, muss entweder die Variable landkreis entsprechend anpassen. Der Code für den jeweiligen Landkreis ist im Prinzip das KFZ-Kennzeichen, welches mit X auf 3 Stellen aufgefüllt wird. Es sei denn, das Kennzeichen enthält ein Ö oder Ü – die werden einfach durch OE bzw. UE ersetzt.

Für die Nutzung mittels Crontab übergibt man dem Script einfach als Parameter auto alle anderen Werte werden als Landkreis interpretiert, was ggf. zu Fehlern führt, wenn man einen ungültigen Wert übergibt.

Die aktuellste Version des Scriptes gibt es hier.

gpg Schlüsselbund mit systemd regelmäßig aktualisieren

Neben dem klassischen Crontab bietet seit einiger Zeit auch systemd mittels so genannter Timer die Möglichkeit, Aufgaben regelmäßig auszuführen.

Wenn man beispielsweise seinen gpg Schlüsselbund regelmäßig aktualisieren möchte (was dringend zu empfehlen ist), dann kann man dies entweder mittels crontab erledigen, oder man nutzt systemd’s Timer für die Aufgabe.

Dafür muss man zuerst unter ~/.config/systemd/user/ eine systemd Unit gpg-update.service mit folgendem Inhalt anlegen:

[Unit]
Description=Update keys in local keyring

[Service]
Type=oneshot
Environment=DISPLAY=:0
ExecStart=/usr/bin/gpg --refresh-keys

[Install]
WantedBy=basic.target

Als nächstes wird im selben Verzeichnis noch der systemd Timer gpg-update.timer mit folgendem Inhalt angelegt:

[Unit]
Description=Update keys in local keyring
 
[Timer]
OnCalendar=hourly
Persistent=true
Unit=gpg-update.service
 
[Install]
WantedBy=gpg-update.service

In diesem Beispiel wird der Timer stündlich ausgeführt. Es kann jedoch auch ein anderes Interval verwendet werden.

Im nächsten Schritt wird dann noch der neu angelegte Timer aktiviert und gestartet

systemctl --user enable gpg-update.timer
systemctl --user start gpg-update-timer

Um zu prüfen, ob alles wie gewollte funktioniert hat, kann man dies mit folgendem Befehl überprüfen:

systemctl --user status gpg-update.timer

Sollte im Status des Timers unter dem Punkt Active nicht active (waiting) stehen, sollte man mittels journalctl -xe einen Blick in das Journal werfen um der möglichen Fehlerursache auf die Schliche zu kommen.

Linux Mint 16 auf Mint 17 mit apt-get upgraden

Offiziell unterstützt Linux Mint für Upgrades nur den extrem umständlichen Weg, seine Daten zuerst zu sichern, das System anschließend komplett neu zu installieren und zum Schluss das Backup der eigenen Daten wiederherzustellen – warum auch immer.

Wichtig: Es ist immer eine gute Idee, vor einem Upgrade den Inhalt seinen Home-Verzeichnisses auf ein externes Medium zu sichern. Man weiß ja nie 😉

Wer jedoch mutig ist, kann sein Mint auch mit Hilfe von apt-get upgraden. Dazu muss man lediglich die /etc/apt/sources.list.d/official-packages-repositories.list mittels

sudo gedit /etc/apt/sources.list.d/official-packages-repositories.list

öffnen und dort petra durch qiana und saucy durch trusty ersetzen, damit apt-get die Paketquellen der neuen Verion verwendet.

Es empfiehlt sich, sich vor dem eigentlichen Upgrade von der grafischen Oberfläche abzumelden und mittels STRG+ALT+F1 in ein Terminal zu wechseln. Dort kann man dann anschließend das eigentliche Upgrade mittels

sudo apt-get update
sudo apt-get dist-upgrade

anstossen und nach Beendigung des Upgradeprozesses das System mittels

sudo init 6

neu starten.

Nach dem Neustart empfiehlt es sich, das System mittels

sudo aptitude full-upgrade

sowie

sudo apt-get autoremove && sudo apt-get autoclean

zu entrümpeln.

Repository-Umzug

Wie einige Leser dieses Blogs vielleicht wissen, habe ich unter http://repo.heiko-adams.de ein kleines Repository für meine eigenen Fedora-Pakete bereitgestellt. Dieses Repository wird in den nächsten Stunden umziehen und dann unter http://copr.fedoraproject.org/coprs/heikoada/Repository/ verfügbar sein.

Dies bietet unter anderem den Vorteil, das ich das Erstellen und Verteilen der Pakete in die Infrastruktur des Fedora-Projektes auslagern und meinen eigenen Server dadurch entlasten kann. Für die Nutzer des Repositories bietet diese Lösung dementsprechend eine wesentlich höhere Ausfallsicherheit.

Wer bereits das alte Repository nutzt und auf das COPR-Repository umsteigen möchte, der sollte zuerst mein Release-Paket für das alte Repository mittels

su -c'yum remove ha-release'

entfernen und sich anschließend das aktuelle Repository-File aus dem COPR-Repository herunterladen.

Wichtig: Momentan fehlen noch einige Pakete im COPR-Repository, die ich mittlerweile selber nicht mehr verwende.

Dear Lazyweb

Es gibt für Gnome einige mehr oder wenige Apps, die einen über neue Mails benachrichtigen. Aber warum muss ich bei diesen Apps in Zeiten der Gnome-Shell und den Gnome-Online-Accounts die Zugangsdaten für die Mail-Accounts nochmals in den Einstellungen der Notifier-Apps hinterlegen?

Warum hat denn noch niemand die Idee gehabt, einen solchen Notifier – vielleicht sogar als Extension für die Gnome-Shell – zu schreiben, der sich die benötigten Daten aus den GOAs besorgt und den Anwender nur noch mit Detail-Einstellungen behelligt?

Das so etwas möglich ist, zeigt „Gmail-Notify“[1], das es als Extension für die Gnome-Shell gibt, der aber leider nur auf Google Mail beschränkt ist. Also warum gibt es dann so etwas nicht auf für normale IMAP-Accounts, die in den GOAs hinterlegt sind?

[1] https://extensions.gnome.org/extension/154/gmail-notify/

Finger weg von rpm und Co!

Es soll ja noch immer Leute geben, die Pakete, die sie aus für sie vertrauenswürdigen Fremdquellen heruntergeladen haben, per Hand mittels rpm oder einem anderen Paketmanager installieren.

Ehrlicherweise muss man aber sagen, das man als normaler Endanwender tunlichst die Finger vom Paketmanager lassen und stattdessen die Paketverwaltung (yum, apt-get etc) verwenden sollte. Alleine schon, weil man sich so unnötige Arbeit spart, sobald irgendwelche Abhängigkeiten nicht erfüllt sind. Finger weg von rpm und Co! weiterlesen