ubuntuusers.de

🚧 Am Sonntag, 5. Mai, werden ab 16 Uhr die Server aktualisiert und eine neue Inyoka-Version veröffentlicht. Das Portal wird mehrmals nicht verfügbar sein.

24. Juni 2014

Immer wieder mal stolpere ich über den gleichen Fehler: man kann unter Linux (in LibreOffice) ab und zu nicht quer drucken.

Die Lösung ist denkbar einfach:

Im Dialog „Drucken“ des jeweiligen Dokuments auf den Drucker klicken und dort die Eigenschaften aufrufen. Dann den Reiter „Gerät“ auswählen und bei dem Menüpunkt „Druckersprache“ von Automatisch: PDF auf PostScript (Level des Treibers) umstellen. Fertig

Das ist allerdings nur eine temporäre Lösung und nach einem Neustart sind die Einstellungen wieder weg.

Folgende Seite beschreibt, wie man (unter openSUSE) eine dauerhafte Lösung herbeiführt.

Alt + F2 drücken und dann folgende Zeilen hinein kopieren:

/usr/lib/libreoffice/program/spadmin

bzw. für die LibreOffice 64bit Version

/usr/lib64/libreoffice/program/spadmin

und die gleichen Einstellungen hier vornehmen. Jetzt bleiben diese auch erhalten.

ajax loader

Ich habe mich mal wieder an einen neuen Desktop Hintergrund ran gemacht und dass Hintergrundbild namens Stone Wash Hexagon ist dabei raus gekommen.
Dafür habe die freie Software Gimp verwendet und mit Gradienten und Filtern sowie selbst gezeichnete pattern verwendet.
Falls jemand mal an einem kleinem Tutorial wie so etwas geht interessiert ist schreibe ich gerne einen Artikel dazu.

Um den Hintergrund in dem Format 1920 x 1080 px zu downloaden bitte auf dass Vorschaubild klicken.

Quelle - Wallpaper von mir
Quelle – Wallpaper von mir

Viel Spaß beim benutzen. 🙂

Heute morgen habe ich einige E-Mails von Uptimerobot bekommen, einem Monitoring-Dienst, von dem ich meine Serverdienste von außen auf Verfügbarkeit überwachen lasse. In letzter Zeit scheint Uptimerobot nicht so zu funktionieren wie er soll, denn ich habe immer wieder „Host xy is DOWN” E-Mails bekommen, obwohl alles okay war. Also habe ich mir auch bei den E-Mails heute morgen nicht viel gedacht, bis ich schließlich selbst feststellen musste, dass mit Nginx beim Aufruf einiger Services „Bad Gateway” ausspuckte.

Das Problem betraf nur Dienste, die den PHP Upstream nutzten. Im Errorlog der Nginx Webservers war der Fehler schnell gefunden:

2014/06/24 07:29:11 [crit] 30270#0: *166 connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: xxxxxxxx, server: thomas-leister.de, request: „GET /feed/ HTTP/1.1″, upstream: „fastcgi://unix:/var/run/php5-fpm.sock:”, host: „thomas-leister.de”, referrer: „https://thomas-leister.de/feed/”

Nginx konnte nicht auf den PHP Upstream (über PHP-FPM bereitgestellt) zugreifen, weil die Berechtigungen das nicht erlaubten.

Fehlerbehebung

Wie so oft bin ich auf stackoverflow fündig geworden:

In der Datei /etc/php5/fpm/pool.d/www.conf werden folgende Einstellungen „einkommentiert” (aktiviert):

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

… und der PHP-Server neu gestartet:

service php5-fpm restart

Ursache

Doch woher kommt das plötzliche Versagen? Wieso hat Nginx auf einmal nicht mehr ausreichend Rechte, um auf den PHP-FPM Socket zuzugreifen? Aufschluss gibt die Logdatei der automatisch installierten Updates auf meinem Server:

2014-06-24 06:58:58,192 INFO Packages that will be upgraded: […] php-pear php5 php5-cli php5-common php5-curl php5-fpm php5-gd php5-intl php5-mysql php5-readline

Heute morgen wurde nämlich ein automatisches Sicherheitsupdate heruntergeladen und installiert. Es betrifft einige PHP Pakete – auch php5-fpm. Nach dem Update war der Besitzer wohl auf „root” umgestellt… warum auch immer. Mit den Maßnahmen oben wird sichergestellt, dass der Socket wieder dem www-data User gehört, unter dem mein Nginx Server läuft.

Die Überraschung ist Opera gelungen. Nachdem es über ein Jahr lang keine neue Version für Linux mehr gab, nur die veraltende Version 12 auf Presto-Basis weitergenutzt werden konnte, gibt es Chrome im Opera-Gewand bald auch für Linux.

Trotz anderslautender Beteuerungen einiger Operamitarbeiter hat die Linuxgemeinde nicht mehr wirklich daran geglaubt, doch Opera für Linux ist auf dem Weg. Noch gibt es das neue Opera offiziell nur als Vorschauversion in einem 64-Bit-Paket für Ubuntu. Doch wenn Opera 24 demnächst erscheint, wird es aller Wahrscheinlichkeit nach auch wieder für alle Linuxdistributionen verfügbar sein.


Noch lädt der Opera-Download-Button die alten 12er-Versionen für Linux

Die einstigen Opera-Fans wird man damit jedoch nicht mehr erreichen, diese haben sich mittlerweile längst etwas Neues gesucht, haben Firefox über Erweiterungen mit operaähnlichen Funktionen ausgestattet, sind zu Seamonkey gewechselt oder haben sich den Otter-Browser schon einmal näher angeschaut.

Spekuliert werden darf darüber, inwieweit die Ankündigung des Otter-Browser-Projekts, einen Opera-Ersatz für Linux bereitstellen zu wollen, der die von Opera 12 gewohnten Funktionen nachprogrammiert, zu der Entscheidung beigetragen hat, Opera wieder für Linux herauszubringen. Wahrscheinlich überhaupt nicht, denn die Richtung von Opera ist längst eine andere. Opera hat in den letzten Jahren einen Richtungswechsel vollzogen, vom innovativen Spezialisten zum Anbieter von Mainstreamprodukten. Der frühere Ansatz, einen sowohl für Anfänger als auch erfahrene Anwender gleichermaßen attraktiven Browser bereitzustellen, ist beim aktuellen Opera nicht einmal mehr im Ansatz zu erkennen.

Unter Linux fängt der neue Opera zudem praktisch wieder bei Null an. Es gibt z.B. – wie auch in der Mac- und Windowsversion – noch immer keine klassischen Lesezeichen, die Seitenleisten fehlen und es gibt keine Integration in die verschiedenen Desktops. Momentan sieht der Linux-Opera überall wie für Ubuntu gemacht aus. Das dürfte sich in Zukunft höchstwahrscheinlich noch ändern, doch momentan sollte man die Vorschauversion besser nicht unter KDE laufen lassen.

Doch bereits jetzt ist absehbar: Operanutzer, die den Funktionsumfang der 12er-Serie schätzen, sollten sich trotzdem nach etwas anderem umsehen und nicht auf baldige Nachrüstung fehlender Funktionen hoffen. Für alle Webkit/Blink-Fans wird es dagegen in Zukunft unter Linux eine weitere Auswahlmöglichkeit im Browserangebot geben.

23. Juni 2014

Multi-Platform Mobile Apps via Ionic

Ionic ist ein Frontend-Framework, mit welchem man via HTML5 / JavaScript und CSS native Apps bauen kann. Diese Apps können via „Apache Cordova“ auf native Funktionen (Kamera, GPS, etc.) der Geräte zugreifen. Zudem wird Google’s JavaScript Framework „AnguarJS“ genutzt und natürlich wird auch „SASS“ unterstützt.

Vorbereitung

Man kann Multi-Platform Mobile Apps sowohl unter Windows, Linux oder Mac OS X entwickeln, jedoch ist die Vorbereitung unter Linux / Mac OS X um einiges einfacher.

Ich empfehle an dieser Stelle mal wieder die „.dotfiles“ zu installieren.

cd ~ 
git clone https://github.com/voku/dotfiles.git 
cd dotfiles 
source bootstrap.sh

# Standard- & Webworker-Tools installieren

~/dotfiles/firstInstall.sh

Bei der Frage nach den „webworker tools“,  muss diese mit „y“ beantwortet werden.

# Android SDK installieren

sudo ~/dotfiles/android_sdk_install.sh

# Java installieren

sudo add-apt-repository -y ppa:webupd8team/java
sudo aptitude update
sudo aptitude install oracle-java7-installer

# Ant installieren

sudo apt-get install ant

 

Nachdem die Installation komplett abgeschlossen ist, muss die „~/.extra“-Datei angepasst werden.

z.B.:

#!/bin/bash                                                                                                                                                                                                       

DEFAULT_USER="lars"
GIT_AUTHOR_NAME="Lars Moelleken"
GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"
git config --global user.name "$GIT_AUTHOR_NAME"
GIT_AUTHOR_EMAIL="lars@moelleken.org"
GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"
git config --global user.email "$GIT_AUTHOR_EMAIL"
git config --global push.default simple

# java - example
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export JDK_HOME=$JAVA_HOME
export JRE_HOME=$JAVA_HOME
export PATH=$JAVA_HOME/bin:$PATH

# android - example
export ANDROID_SDK_ROOT=/usr/local/android-sdk/
#export ANDROID_NDK=/usr/local/android-ndk/
export ANDROID_HOME=$ANDROID_SDK_ROOT
export PATH=$ANDROID_SDK_ROOT/tools/:$ANDROID_SDK_ROOT/platform-tools/:$ANDROID_SDK_ROOT/build-tools/19.1.0/:$PATH

 

PS: bei Debian (sid) musste ich noch ein wenig nachhelfen, so dass die Android-SDK auch korrekt funktioniert:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install lib32z1 lib32stdc++6

 

Beispiel-App für Android erstellen

ionic start planet-ubuntuusers
cd planet-ubuntuusers
rm -rf www/
git clone https://github.com/voku/planet-ubuntuusers-app www
ionic platform android
ionic build android

Man kann die App nun im Browser (ionic serve), im Android Emulator (ionic emulate android) oder direkt auf seinem Android-Gerät (ionic run android) ausprobieren!!!

 

Links

Es folgen ein paar Links zur App / API / Dokumentation  und zum Beispiel-Quellcode

ANDOIRD APP-DOWNLOAD:
 http://suckup.de/planet-ubuntuusers-json/PlanetApp-debug.apk

QUELLCODE ZUR APP:
https://github.com/voku/planet-ubuntuusers-app

SCREENSHOT:
Planet App

JSON-API: 
http://suckup.de/planet-ubuntuusers-json/json.php

HTML-OUTPUT VIA TWIG:
http://suckup.de/planet-ubuntuusers-json/

QUELLCODE ZUR API:
https://github.com/voku/planet-ubuntuusers-json (in zirka 2 Minuten geschrieben & deployed -> composer is great!!!)

 

DOKUMENTATION:
https://docs.angularjs.org/
http://ionicframework.com/docs/
http://cordova.apache.org/

22. Juni 2014

Mit Linux ist es glücklicherweise sehr einfach, den Rechner zu einem bestimmten Zeitpunkt hochfahren zu lassen. Mittels ACPI Wakeup kann eine Uhrzeit gesetzt werden, zu der der heruntergefahrene Rechner wieder hochfährt. Ich nutze dies, um meinen Rechner täglich kurz vor Mitternacht zwecks Backups hochzufahren.

Inzwischen unterstützen fast alle Mainboards das setzen eines Wakeup-Timers, manchmal muss dies aber noch in den BIOS Einstellungen aktiviert werden. Man kann es aber auch einfach testen, indem man eine Uhrzeit einträgt, den Rechner herunterfährt und wartet.

echo $(date -d "19:00" +%s) > /sys/class/rtc/rtc0/wakealarm

Anschließend kann man überprüfen, ob die Uhrzeit korrekt eingetragen wurde (hier 17:00 statt 19:00, da die RTC Uhr mit UTC läuft):

cat /proc/driver/rtc 
rtc_time	: 16:11:15
rtc_date	: 2014-06-22
alrm_time	: 17:00:00
alrm_date	: 2014-06-22
alarm_IRQ	: yes
alrm_pending	: no
update IRQ enabled	: no
periodic IRQ enabled	: no
periodic IRQ frequency	: 1024
max user IRQ frequency	: 64
24hr		: yes
periodic_IRQ	: no
update_IRQ	: no
HPET_emulated	: no
BCD		: yes
DST_enable	: no
periodic_freq	: 1024
batt_status	: okay

Wenn man einen anderen Wert setzen möchte, muss der alte zunächst entfernt bzw. durch einen leeren String überschrieben werden. Um ein wenig flexibler beim Setzen des Datums zu sein, kann man die diversen Formatierungsmethoden von 

date
  verwenden:
echo "" > /sys/class/rtc/rtc0/wakealarm
echo $(date -d "2014-06-23 20:00" +%s) > /sys/class/rtc/rtc0/wakealarm
cat /proc/driver/rtc 
rtc_time	: 16:13:52
rtc_date	: 2014-06-22
alrm_time	: 18:00:00
alrm_date	: 2014-06-23
alarm_IRQ	: yes
alrm_pending	: no
update IRQ enabled	: no
periodic IRQ enabled	: no
periodic IRQ frequency	: 1024
max user IRQ frequency	: 64
24hr		: yes
periodic_IRQ	: no
update_IRQ	: no
HPET_emulated	: no
BCD		: yes
DST_enable	: no
periodic_freq	: 1024
batt_status	: okay

Kurz, praktisch, einfach, das gefällt mir an Linux. Mit wenigen Zeilen habe ich mir ein Backup Script gebaut, das den Rechner spät abends hochfahren lässt, das Backup durchführt und nach Beendigung den Rechner wieder herunterfährt. Ebenso sind noch viele weitere Möglichkeiten denkbar, so könnte man seinen Arbeitsrechner morgens automatisch hochfahren lassen, um 1-2 Minuten Zeit zu sparen.

 

Wenn beim Kompilieren eines Kernels unter Ubuntu ein Fehler folgender Art auftritt:


/etc/kernel/postinst.d/apt-auto-removal: cannot create /etc/apt/apt.conf.d//01autoremove-kernels.dpkg-new: Permission denied

liegt es wahrscheinlich nicht an fehlenden (Root) Rechten, sondern an einem Bug in make_kpkg. Dazu gibt es bereits einen Fix: Man installiert das dort verlinkte Paket, das das Problem behebt:

https://launchpad.net/ubuntu/+source/kernel-package/13.003/+build/5980712/+files/kernel-package_13.003_all.deb

Wenn beim Kompilieren eines Kernels unter Ubuntu ein Fehler folgender Art auftritt:
/etc/kernel/postinst.d/apt-auto-removal: cannot create /etc/apt/apt.conf.d//01autoremove-kernels.dpkg-new: Permission denied
liegt es wahrscheinlich nicht an fehlenden (Root) Rechten, sondern an einem Bug in make_kpkg. Dazu gibt es bereits einen Fix: Man installiert das dort verlinkte Paket, das das Problem behebt:
https://launchpad.net/ubuntu/+source/kernel-package/13.003/+build/5980712/+files/kernel-package_13.003_all.deb

Mit erstklassiger Hardware und Verarbeitung kann der kleine 13-Zöller von HP ja schon mal glänzen. Unter Windows läuft er tadellos. Doch wie sind meine Erfahrungen im Dual-Boot-Betrieb mit Ubuntu 14.04 Trusty Tahr?

Installation alias Die UEFI-Hürde

Wenn man einige Fallstricke beachtet, ist Linux auch unter UEFI schnell installiert. Der BIOS-Nachfolger zwingt einen zwar, neue Wege zu gehe, aber das ist der Preis des Fortschritts. Alles in allem helfen einem aktuelle Distributionen weitesgehend keine Fehler zu machen. Eigentlich verwende ich seit geraumer Zeit Linux Mint, aber solange das noch nicht auf der neuen Ubuntu-Basis aufbaut (und demnach nicht von vielen Verbesserungen in neueren Kerneln profitiert), kehre ich zurück zu Ubuntu.

Da ich vorerst ein Dual-Boot-System verwenden möchte, deaktiviere ich zunächst Fast Boot in Windows, damit Windows auch immer fleißig vollständig herunterfährt, statt nur die Session zu beenden und in den Ruhezustand zu wechseln (nein, so ein Systemstart ist merklich nicht langsamer einer mit Schnellstart). Das geschieht in den Energieoptionen, unter „Auswählen, was beim Drücken von Netzschaltern geschehen soll“ und nach Klick auf den Link, dass „einige Einstellungen nicht verfügbar“ sind.
Um beim anschließenden Neustart direkt ins UEFI-Menü zu gelangen, lässt sich das direkt von Windows aus initialisieren. Die Option dafür erscheint, wenn man beim Klick auf Neu starten die Umschalttaste gedrückt hält und im Erweiterten Menü der Problembehandlung „UEFI“ wählt.
Nach wenigen Sekunden kann man dort Secure Boot deaktivieren und die Boot-Reihenfolge so ändern, dass ein USB-Stick geladen wird. Damit nicht versehentlich doch im BIOS-Kompatibilitätsmodus gebootet wird, kann man hier auch CSM abschalten. Ubuntu lässt sich daraufhin problemlos installieren. Einzig bei der Partitionierung ist Vorsicht geboten, damit die UEFI-Partitionen erhalten bleiben. Ich habe einfach die große Windows-Partition verkleinert und in den frei gewordenen Platz eine Systempartition mit Einhängepunkt / erzeugt, eine mit /home und eine Swap. Ubuntu schreibt sich auch in die Betriebssystemauswahl von UEFI, sodass man aus dem UEFI-Menü (Esc beim Booten) mit F9 in die Auswahl kommt und entweder Linux oder Windows wählen kann.
Zwischenfazit: Dual-Boot funktioniert.

Linux als Standard-Betriebssystem einrichten

Zunächst ist das System so konfiguriert, dass weiterhin bei jedem Systemstart Windows lädt, wenn man das UEFI-Menü nicht startet. Soll hingegen Linux das erste Betriebssystem werden, muss die Reihenfolge geändert werden.

Eigentlich ist das mit UEFI auch kein Problem — wenn HP sich an den Standard halten würde.

Theoretisch gibt es die Möglichkeit mit dem Tool efibootmgr so ziemlich alles Boot-mäßige zu konfigurieren. Es hat mich allerdings einige Stunden und zig Versuche gekostet, herauszufinden, dass HP offensichtlich jede Änderung an der Reihenfolge bei einem Neustart überschreibt und den Windows Boot Loader an die erste Position setzt (eine HP Support-Anfrage ist ausstehend).

Es bleibt zur Zeit leider nur die Möglichkeit, etwas zu tricksen. Die Idee ist, die Windows Starter-Datei bootmgfw.efi aus dem Verzeichnis /boot/efi/EFI/Microsoft/Boot/ woanders hinzukopieren (z. B. in den übergeordneten Ordner) und durch den Linux-Starter zu ersetzen.

sudo mv /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi /boot/efi/EFI/Microsoft/
sudo cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

So startet bei jedem Start Grub2, der einem alle installierten Betriebssysteme zum Starten anbietet. Auch Windows, welches wir ja nun aber durch Linux ersetzt haben (technisch gesehen liegt das an dem OS-Prober Skript, das Grub ausführt und anhand des eindeutigen Verzeichnisses den Eintrag für ein Windows hält). Soll hier also auch der Windows-Eintrag funktionsfähig sein, muss Grub umkonfiguriert werden. Entweder bearbeitet man die grub.cfg manuell und gibt den neuen Ort der kopierten Datei an (wobei das direkte Bearbeiten von der Datei eigentlich nicht empfohlen ist) oder man erzeugt einen neuen UEFI-Eintrag für Windows (s. u.).

Windows weiterhin bootfähig machen

Damit UEFI von dem neuen Verzeichnis für den Windows Loader erfährt, erzeugt man also am besten einen neuen Eintrag. Dafür gibt es das Windows-Tool bcdedit.exe. Ruft man dieses ohne Parameter auf, erscheint die aktuelle Liste der Starteinträge im NVRAM des Mainboards. Folgender Befehl bearbeitet dann den Haupteintrag so, dass der Link auf den neuen Pfad zeigt:

bcdedit.exe /set "{bootmgr}" path "\EFI\Microsoft\bootmgfw.efi"

Nicht verwundern sollte einen, dass das HP System daraufhin sinnloserweise einen neuen Eintrag erzeugt.
Sollte wider Erwarten wieder jedes Mal Windows booten, muss man das Ersetzen des Windows Loaders evtl. wiederholen. Ich brauchte auch zwei Anläufe und wunderte mich immer aufs Neue über das willkürliche Erscheinen von neuen Boot-Einträgen.

Belohnung

Hat man diese Hürde allerdings gemeistert, wird man mit einem funktionierenden und komfortablen Dual-Boot-System belohnt.

Zum Ultrabook

An sich ist das Ultrabook HP Spectre 13 super. Ein i7, 8GB RAM, sehr gutes Display, eine Akkulaufzeit von 6 Stunden und vieles mehr machen es zu einer Kaufempfehlung.

Leider habe ich aber auch Kompatibilitätsprobleme mit Linux festgestellt.

  • Das WLAN hat Probleme in einigen Netzwerken. Es verbindet sich zwar, aber empfängt keine Daten, man hat dann keinen Internetzugriff, selbst ein Ping an den Router liefert keine Antwort. Ich habe einen Bug Report eingereicht, weiß aber noch nicht, ob das ein Chipsatz-spezifisches Problem ist oder an etwas anderem liegt.
  • Der Subwoofer, der unter Windows einen für ein Notebook wirklich sehr guten Sound erzeugt, funktioniert unter Linux nicht. (Bug Report)
  • Das Notebook ist zwar die meiste Zeit lautlos, wenn der Lüfter allerdings pustet, dann für meinen Geschmack zu laut.

Quellen

Update 21.06.2014: Bezüglich der Probleme mit Sound und WLAN, verweise ich auf meinen Update-Artikel zur Nutzung des HP Spectre 13 unter Linux.

Update 22.06.2014: Nach einigen Windows-Updates wird unsere EFI-Datei wieder durch die richtige von Windows überschrieben, dann muss man den Kopieren-Schritt erneut ausführen, damit Ubuntu weiterhin standardmäßig gebootet wird.

So lange die Dateien nicht von Windows-Systemen stammen, habe ich normalerweise keine Probleme mit ungültigen Zeichen oder Sonderzeichen in Dateinamen. Ausgerechnet das Gnome Screenshot Tool sorgt nun bei mir für einige Probleme, denn es legt Dateien wie z.B. “Bildschirmfoto von »2014-06-22 00:06:45«.png” an. Die Zeichen “»” und “«” stören nun leider ownCloud bei der Synchronisierung. Danke an Morris für den Hinweis, es sind die Doppelpunkte, die stören. Im Aktivitätslog meldet ownCloud:

Die Datei beinhaltet ungültige Zeichen und kann nicht plattformübergreifend synchronisiert werden.

Leider habe ich keine Möglichkeit gefunden, den Dateinamen der Screenshots zu Konfigurieren. Darum habe ich jetzt einen Cronjob eingerichtet, der hin und wieder die Screenshot-Dateien im Bilder-Verzeichnis umbenennt. Da ich mit

mv
und 
rename
alleine nicht zum Ziel gekommen bin, habe ich es eben ein wenig anders gemacht:
#!/bin/bash
SCREENSHOT_DIR=/home/finn/Bilder
SCREENSHOTS=$(ls -1 $SCREENSHOT_DIR | grep '[\:]')

echo "$SCREENSHOTS" | while read filename; do
    if [ ! -z "$filename" ]; then
        new_filename=$(echo "$filename" | sed 's/[\:]/-/g')
        mv "$SCREENSHOT_DIR/$filename" "$SCREENSHOT_DIR/$new_filename"
    fi
done

Nicht elegant, aber es funktioniert. Der Cronjob läuft stündlich, das reicht mir völlig, da die Bildschirmfotos nicht sofort synchronisiert werden müssen.



   
Für alle die z.B. aus den verschiedensten Gründen eine Alternative zu Ubuntu suchen, empfehle ich Debian mit der Version Wheezy als stable (stabile Version).

Folgend genauer erklärt:

Von Debian werden zu jedem Zeitpunkt drei Varianten (Releases) parallel angeboten: stable (‚stabil‘), testing (‚Erprobung‘) und unstable (‚instabil‘). Nach der Veröffentlichung jeder stable-Version wird die vorige stable-Version als oldstable (‚alt-stabil‘) für mindestens ein Jahr weitergeführt.
Stable
 
stable ist die jeweils aktuelle offizielle Version. Dort sind alle Pakete gründlich getestet und aufeinander abgestimmt, Sicherheitsaktualisierungen sind schnell verfügbar. Debian veröffentlichte seit 2000 etwa alle zwei Jahre eine neue stable. Danach wird die Vorgänger-stable als oldstable noch weiterunterstützt. stable gilt daher als geeigneter Kandidat für Server-Systeme, die lange Zeit zuverlässig laufen müssen und einen Einsatz im Unternehmensumfeld ermöglichen.
Quelle: Wikipedia

Sehr lesenswert: Gründe für die Wahl von Debian

Diese Anleitung beschreibt die Installation von Debian als einziges 
Betriebssystem! Verwende diese Anleitung nur wenn du dir ganz sicher bist Windows komplett zu löschen und Linux als einziges Betriebssystem zu nutzen. Alle Daten und alle Programme die du auf Windows gespeichert und verwendet hast werden gelöscht und sind für immer verloren!

Es gibt viele Möglichkeiten Linux während der Installation einzurichten. Auch gibt es noch andere Wege ein Linux-Betriebssystem zu verschlüsseln. Diese Anleitung ist der einfachste und verständlichste Weg.


Handbücher

Bevor überhaupt eine Installation durchgeführt wird, empfehle ich besonders Linux-Einsteigern sich ein paar Handbücher anzusehen. 

Sehr zu empfehlen ist auch das Wiki von ubuntuusers und vom debianforum.

Windows ist zwar fix von der Platte geputzt und Linux schnell installiert, wenn dann aber etwas nicht gleich funktioniert ist man schnell gefrustet. Um dem vorzubeugen hilft es sich vorher mit der Materie auseinanderzusetzen. Man kann Linux auch erstmal virtuell installieren.


Kurze Eckdaten zur Installation
 

Version: Debian 7.5.0 Wheezy  

Desktop: Gnome 3
 

Installationsart: Grafisch

Auslagerungsspeicher/ Swap: Ja

Verschlüsselungsmethode: Geführt - gesamte Platte mit verschlüsseltem LVM

Dauer der Installation: 

Bis zu mehreren Tagen. Wenn man die gesamte Festplatte während der Installation mit Zufallszahlen überschreiben lässt. 

Wird darauf verzichtet, ist die Installation natürlich wesentlich schneller abgeschlossen! ;-)


Warum das Betriebssystem komplett verschlüsseln? 

Bei einem nicht komplett verschlüsseltem System besteht die Gefahr dass persönliche Daten in unverschlüsselten Bereichen gespeichert werden.
 


Stromversorgung

Solltest du Debian auf einem Laptop, Notebook oder Netbook installieren, solltest du darauf achten dass dieses mit Strom versorgt ist! Wenn dem Akku zwischendurch der Saft ausgeht, wird die Installation dadurch abgebrochen und muss nach einem Neustart von vorne durchgeführt werden. 


Da diese Installation mehrere Tage dauern kann, ist dies unbedingt zu beachten! 

 

Internetverbindung

Darauf wird bei dieser Installation verzichtet. Die Einstellungen zu deinen Netzwerkverbindungen werden bei dieser Anleitung nach der Installation vorgenommen.

 

Debian herunterladen

Sicher kann man Debian genauso mit der der CD-Variante installieren, folgend zeige ich die Auswahl einer DVD. Dies lässt sich genauso auf die CD anwenden. Es ist nur zu beachten ob 32-Bit oder 64-Bit verwendet wird. Kurz erwähnt sei auch, dass Debian als kleine Image-Datei  übers Internet installiert werden kann. Das setzt aber schon etwas mehr Erfahrung voraus. Es kann zwar dadurch vieles auf die eigenen Bedürfnisse angepasst werden, es muss allerdings einiges nachinstalliert werden.

Als Erstes besuchst du die Homepage von debian.org, hier der genaue Link zum Download:


http://www.debian.org/CD/http-ftp/#stable

Es stehen CD oder DVD zur Auswahl. Die DVD hat den Vorteil dass mehr Pakete vorhanden sind, die später nicht über das Internet nachgeladen werden müssen. Zumal ich bei dieser Anleitung die Installation ohne Internet beschreibe. 

32-Bit: auch i386 oder x86. Für ältere Rechner und leistungsschwache Netbooks mit 32-Bit-Prozessoren

64-Bit: auch amd64 oder x86_64. Für alle aktuelleren PCs, Notebooks und manche Netbooks
Quelle: ubuntuusers


Wenn du auf amd64 oder i386 geklickt hast, wird dir eine Liste angezeigt. Theoretisch können für die Installation auch drei DVDs, siehe folgendes Bild, benutzt werden. Für die normale Installation reicht DVD-1. 

Wähle DVD-1. Kurz darauf öffnet sich ein Fenster. Klicke auf Datei speichern, dann OK und es wird die Datei debian-7.5.0-i386-DVD-1.iso heruntergeladen. Dies wird ein paar Minuten dauern, da immerhin 3.7 GB heruntergeladen werden müssen.




Heruntergeladene Datei auf DVD brennen

Im Ordner Downloads findest du die Datei (bzw. das ISO-Abbild
debian-7.5.0-i386-DVD-1.iso. Wenn du ein Brennprogramm hast reicht ein Rechtsklick auf die heruntergeladene Datei, dann auf "Öffnen mit" und es wird dir dein Brennprogramm angezeigt, welches diese Datei brennen kann. 

Einfach anklicken. Die Datei wird mit deinem Brennprogramm geöffnet. Lege nun eine leere DVD ein und brenne die Datei mit der niedrigsten Geschwindigkeit. Siehe Bild, in diesem Fall heißt das Brennprogramm CDBurnerXP.




Vor der Installation

Während Windows läuft, legst du die gebrannte CD/ DVD in dein Laufwerk und führst einen Neustart durch.

Wenn automatisch von der CD gebootet wird, startet Debian von der CD und du siehst wie bei dieser Anleitung als Erstes das Debian-Installer-Boot-Menü, siehe erstes Bild der Anleitung, welches folgt. Somit kannst du ganz einfach die Installation durchführen.

Sollte aber bei einem Neustart nicht von der CD gebootet werden und Windows zeigt dir wieder das normale Anmeldefenster, muss im BIOS vorher noch die Boot-Reihenfolge geändert werden! Das CD/ DVD-Laufwerk muss im BIOS an erster Stelle stehen, damit die CD beim Hochfahren geladen wird.

Wie das genau funktioniert, wird hier erklärt:


Video: Von CD starten & Bootmenü öffnen

Die Bootreihenfolge im BIOS einstellen


Installation

DVD liegt im Laufwerk. Computer wird gestartet.

Auf die Plätze, fertig, los. Wähle Graphical install und bestätige mit Enter.




Sprache auswählen.



Auswählen des Standorts



Wähle das Layout der Tastatur aus.



Hier wird der Rechnername angegeben. Erst danach folgt der Benutzername! Du kannst hier ein beliebiges einzelnes Wort hinschreiben oder einfach debian stehen lassen und mit Enter bestätigen.



Lass alles frei. Enter.



____________________


Vor dem nächsten Schritt lies dir bitte das Sicherheits 1x1 von ubuntuusers durch! 

Ich empfehle dir für deinen Computer und zum Verschlüsseln ein anderes Passwort zu nutzen, als z.B. für deinen Email-Account oder wo du dich sonst im Internet anmeldest. Das mag zwar etwas Gedächtnistraining sein, erhöht aber die Sicherheit. Du wirst dich schnell daran gewöhnen ein längeres Passwort einzugeben.
____________________


Der Unterschied von Debian zu Ubuntu ist u.a.: Dass folgend zusätzlich zum Benutzerpasswort vorher noch ein root-Benutzerkonto erstellt wird. Wozu dies dient, wird z.B. hier beschrieben: 

1.1.3. Das root-Benutzerkonto
Das root-Benutzerkonto wird auch Superuser oder privilegierter Benutzer genannt. Mit diesem Benutzerkonto können Sie die folgenden Aufgaben zur Systemadministration erledigen:

  • Lesen, schreiben und löschen aller Dateien auf dem System unabhängig von deren Zugriffsrechten
  • Setzen von Eigentümer und Zugriffsrechten jeglicher Dateien auf dem System 
  • Setzen des Passworts von jedem unprivilegierten Benutzer auf dem System 
  • Anmeldung an jedem Benutzerkonto ohne deren Passwort 
Diese uneingeschränkte Kraft des root-Benutzerkontos erfordert von Ihnen, dass Sie sich besonnen und verantwortungsvoll verhalten, wenn Sie es benutzen.


[Warnung]                 Warnung
Teilen Sie das root-Passwort nie anderen mit.
 Quelle: Kapitel 1. GNU/Linux-Lehrstunde

Gib dein sicheres Passwort ein. Darunter nochmals zur Bestätigung.



Benutzer einrichten. Hier schreibst du deinen Vornamen rein, was völlig ausreichend ist. Du kannst auch deinen Spitznamen oder wie auch immer du dich nennen möchtest hinschreiben. 



Weiter.



Wähle ein anderes Passwort als für root!



Wähle Geführt - gesamte Platte mit verschlüsseltem LVM



Hier wird deine Festplatte angezeigt. Weiter.



Alle Dateien auf eine Partition und weiter gehts.



Ja, ich will. ;-)



____________________

Daten löschen und mit Zufallszahlen überschreiben

ubuntuusers:
"Es ist aus Sicherheitsgründen empfehlenswert, die Partition ein Mal mit Zufallszahlen zu überschreiben, vor allen Dingen, wenn auf dieser vorher unverschlüsselte Daten gespeichert waren. Ansonsten sind unter Umständen viele Dateien nach dem Verschlüsseln noch auslesbar."
Ich empfehle dir auf jeden Fall die Daten zu löschen! 
____________________


Solltest du Debian auf einem Netbook, Laptop oder Notebook installieren, achte darauf dass dieses mit Strom versorgt ist und auf keinen Fall während der Installation zuklappen!

Der Installer startet jetzt automatisch das Löschen der Daten auf deiner Festplatte! Allerdings kann der Löschvorgang, je nach Größe deiner Festplatte, bis zu mehren Tagen dauern! Falls dir das zu lange dauert, kannst du den Vorgang ganz einfach abbrechen. Der Löschvorgang wird somit vorzeitig beendet und es folgt die Eingabe der Passphrase für die Verschlüsselung.



Hier nochmal der Hinweis zum Sicherheits 1x1 von ubuntuusers! 

Wie auch folgend im Bild steht:


"Eine gute Passphrase enthält eine Mischung aus Buchstaben, Zahlen und Satzzeichen. Passphrasen sollten empfohlenerweise eine Länge von 20 oder mehr Zeichen haben!"


Wähle ein anderes und vor allem längeres Passwort als das welches du für dich als Benutzer und für root angelegt hast! 




Beim folgenden Bild wird die Übersicht der einzelnen Partitionen und Einbindungspunkte angezeigt.

Lesenwert: Grundlagen Partitionierung und Partitionierung


Hier die kurze Bedeutung von dem was beim Bild zu sehen ist:


/ Root-Verzeichnis, hier werden alle Dateien gespeichert
Swap Partition für den Auslagerungsspeicher
lvm Logical Volume Manager
/boot Hier wird der Kernel gespeichert
crypt gesamte verschlüsselte Partition
ext4 Dateisystem von Linux (Windows nutzt NTFS oder FAT32)
ext2 Dateisystem von Linux 



Wichtige Info zur /boot Partition

Auf dieser werden alle Daten des Kernel gespeichert. Dieser Bereich bleibt unverschlüsselt, da beim Start kein Programm geladen ist welches die Boot-Partition entschlüsseln könnte. Somit ist es zwingend erforderlich bei einem komplett verschlüsseltem Linux-System diese Partition zu erstellen! Bei dieser Installation (Gesamte Platte mit verschlüsseltem LVM) wird die Boot-Partition automatisch angelegt.

Wenn eine neue Kernelversion zur Verfügung steht, wird sie in dieser Partition gespeichert. In unregelmäßigen Abständen gibt es neue Kernelversionen. Der alte Kernel wird aber nicht ersetzt, sondern bleibt weiterhin auf der Boot-Partition. Somit füllt sich diese nach einiger Zeit. Ist die Boot-Partition zu klein, kann das dazu führen dass sie nach einigen Kernelversionen so voll ist, dass kein neuer Kernel darauf Platz findet. Dann müssen ältere Kernelversionen eigenhändig gelöscht werden.



Ja, Änderungen auf die Festplatte schreiben.



Wähle Nein.



Wähle Nein.



Nein. Es sei denn du möchtest daran teilnehmen. 




Hier kann ausgewählt werden welche Software zusätzlich installiert werden soll. Die Standard-Systemwerkzeuge sind bereits ausgewählt. Wenn du Debian auf einem Laptop installierst, wird dort z.B. ebenso ein Haken zu sehen sein.



Wähle Ja.



Glückwunsch! Du hast Debian erfolgreich verschlüsselt und installiert. :-)

DVD aus Laufwerk entfernen. Weiter.



Gib deine Passphrase ein, welche du während der Eingabe nicht siehst! Eingeben und Enter. Erst danach folgt die Anmeldung mit deinem erstellten Benutzernamen.



Die Eingabe des Passworts war erfolgreich.



Gib deinen Benutzernamen ein.




Dann das Passwort, welches du für dich als Benutzer angelegt hast. Damit ist nicht das root-Passwort gemeint. 



Ich wünsche dir viel Spaß mit Debian! 

Herzlichst
Emanuel

 

Wenn dir diese Anleitung und mein Blog gefällt,
kannst du mir gerne über Paypal eine Spende zukommen lassen. 
Vielen Dank und weiterhin viel Spaß mit Linux.


• • • • • • • • • • • • • • • • • • • • • • • •

Das könnte dich auch interessieren:

➥ Kein Ton: Audio und Video - Debian Wheezy XFCE - Notebook

➥ Touchpad aktivieren - Debian Wheezy XFCE

➥ Parole: Could not initialise Xv output

• • • • • • • • • • • • • • • • • • • • • • • •

➥ Ubuntu 14.04 LTS verschlüsseln - Anleitung der Installation

➥ Debian verschlüsseln - Anleitung der Installation - Wheezy mit XFCE

➥ TrueCrypt - Anleitung der Installation für Ubuntu

➥ Überwachung - Big Brother is watching you

➥ Emails verschlüsseln - Anleitung

• • • • • • • • • • • • • • • • • • • • • • • • 

21. Juni 2014

Ich nutze an diesem Rechner eigentlich nur Fedora, aber gelegentlich benötige ich ein Windows zwecks Microsoft Office oder Visual Studio im Rahmen des Studiums. Dafür benutze ich VirtaulBox (Oracle Version), eine vermutlich vor allem im privaten Umfeld häufig anzutreffende Virtualisierungslösung. Leider war ich bei der Dimensionierung der Festplatte für Windows 7 mit 40 GB nicht sehr großzügig, was sich nun darin äußert, dass die Festplatte voll ist. Also muss sie vergrößert werden.

Die VirtualBox Installation bringt dazu die Anwendung 

vboxmanage
  mit, mit der etliche Einstellungen einer virtuellen Maschine geändert werden können. Sicherheitshalber sollte man ein Backup seiner virtuellen Festplatte machen, bevor man die Vergrößerung vornimmt. Der Aufruf von vboxmanage zeigt alle Optionen, benötigt wird folgende:
modifyhd                  <uuid|filename>
                            [--type normal|writethrough|immutable|shareable|
                                    readonly|multiattach]
                            [--autoreset on|off]
                            [--compact]
                            [--resize <megabytes>|--resizebyte <bytes>]

Nun kann die Festplatte mit einem Befehl vergrößert werden:

vboxmanage modifyhd /media/nas/VirtualBox\ VMs/Windows\ 7/Windows\ 7.vdi --resize 61440

Wenn der Vorgang abgeschlossen ist, muss noch die Partition auf der Festplatte vergrößert werden. In meinem Fall ist es eine 40GB NTFS Partition. Sollte man aber eine andere Partition, z.B. die ext4 Partition eines Linux Systems, vergrößern wollen, ist das weitere Vorgehen gleich.

Man hängt nun das ISO der bevorzugten Linux-Distribution ein, die parted/ntfsresize oder, wie ich empfehlen würde, die grafische Variante GParted enthält. Wer ratlos ist, sollte am besten zu GParted Live greifen. Nach dem Booten und dem eventuellen Festlegen der Tastaturbelegung startet GParted automatisch und durch einen Rechtsklick auf die gewünscht Partition kann diese vergrößert werden. Die Bedienung von GParted ist relativ leicht und übersichtlich:

GPartedAnschließend müssen die Befehle noch mit “Apply” bestätigt werden, erst dann werden sie ausgeführt. Nun kann GParted Live heruntergefahren, das ISO aus VirtualBox entfernt werden und Windows kann wieder gestartet werden. Beim Starten wird nun zuerst eine Festplattenüberprüfung ausgeführt, anschließend steht die Partition mit dem neuen Speicherplatz zur Verfügung.

Kurztipp: lokalen offenen Port finden (bash)

Habe soeben folgende Funktionen zu meinen dotfiles hinzugefügt, um einen freien lokalen Port zu finden. Diese werden wiederum verwendet, um z.B. die „phpserver„-Funktion auszuführen.

# -------------------------------------------------------------------
# netstat_used_local_ports: get used tcp-ports
netstat_used_local_ports()
{
  netstat -atn | awk '{printf "%s\n%s\n", $4, $4}' | grep -oE '[0-9]*$' | sort -n | uniq
}

# -------------------------------------------------------------------
# netstat_free_local_port: get one free tcp-port
netstat_free_local_port()
{
  read lowerPort upperPort < /proc/sys/net/ipv4/ip_local_port_range
 
  # create a local array of used ports 
  local all_used_ports=($(netstat_used_local_ports))

  for port in $(seq $lowerPort $upperPort); do
    for used_port in "${all_used_ports[@]}"; do
      if [ $used_port -eq $port ]; then
        continue
      else
        echo $port
        return 0
      fi
    done
  done 
}

 

Nach zwei Monaten intensiver Nutzung meines neuen Ultrabooks bleibt das Fazit sehr positiv. Die meisten anfänglichen Kritikpunkte lösen sich inzwischen auf, allen voran das WLAN-Problem und der (im Vergleich zu Windows) schlechte Sound.



Problem: WLAN verbunden, trotzdem kein Internet


Das Problem mit dem WLAN hat sich mehr oder weniger durch Geisterhand (aka Kernel-Updates) gelöst. Ich kann es nicht mehr genau nachvollziehen, aber ich denke, Ubuntus Kernelversion 3.13.0-27 hat den Erfolg gebracht. Allerdings hatte ich auch schon eine stabile Verbindung, nachdem ich das WPA2-Passwort vereinfacht und den Kanal auf

Nicht unerwähnt sollte bleiben, dass der Bug Report #42978 zu diesem Thema weiterhin offen ist.



Problem: Matter, bassloser Sound trotz „BeatsAudio®


Die Kurzbeschreibung meiner Bemühungen, die eigentliche sehr gute Audioausgabequalität des Spectre 13 auch unter Linux zu erreichen, ist folgende:



  • ALSA Bug Report #74841 bearbeitet (anfangs unter der Annahme, es wäre ein Subwoofer verbaut)

  • HP Support kontaktiert (an dieser Stelle ein Lob an HP: Das Problem wird ernst genommen, bisher jedoch ohne Erfolg…)

  • Der Blogger cbx meldet sich und erklärt, wie er den problematisch eingestellten High Pass Filter auf einen vernünftigen Wert setzt.


Ich habe das Ändern der Grenzfrequenz des Hochpassfilters ausprobiert und tatsächlich einen deutlich besseren Sound erzielen können. Folgende Zeile führt direkt zum Erfolg:


sudo hda-verb /dev/snd/hwC1D0 0x1a 0x795 0x00

Die Änderungen erfolgen sofort, d.h. auch bei laufender Wiedergabe, müssten aber theoretisch nach jedem Systemstart neu gesetzt werden. Allerdings habe ich die Kernel-Entwickler informiert; die Änderungen werden in den kommenden Kernelversionen Standard.


Update 27.06.2014: Der Patch ist genehmigt und wird in den Kernel 3.16(-rc2) integriert und voraussichtlich auch in stabile Kernel zurückportiert.

Dabei ist auch ein Patch für die Mute-LED herumgekommen, die nun auch funktionieren sollte.

Wer den Patch manuell einkompilieren möchte, findet ihn hier.

20. Juni 2014

Flo und ich nutzen schon seit einiger Zeit einen eigenen Jabberserver (bzw. XMPP-Server), da wir uns nicht mehr wirklich auf jabber.ccc.de verlassen konnten. Zumal deren Server bei Sicherheitstests nicht soo toll abschneidet ..
Ein anderer Grund ist natuerlich auch: weil wirs koennen ;)

Daher hier mal eine Anleitung fuer alle Arch Linux Nutzer*innen, die schon immer mal einen Jabberserver aufsetzen wollten und den auch etwas absichern wollten :)

Als Jabberserver nutzen wir Ejabberd und als CA nutzen wir CAcert.

Installation

Zur Installation von ejabberd reicht ein einfaches (Quelle):

# pacman -S ejabberd

Konfiguration

Es gibt zwei Konfigurationsdateien in /etc/ejabberd: ejabberdctl.cfg und ejabberd.yml. Die erste Datei muss nicht angefasst werden, d.h. wir aendern nur ejabberd.yml.

Ich beschreibe im Folgenden Schritt fuer Schritt die Abweichungen von der Standardkonfiguration, und werde am Ende eine vollstaendige Konfiguration - allerdings ohne Kommentare - praesentieren.

Die erste Aenderung sind die Hosts, in unserem Falle:

hosts:
    - "albion2.org"
    - "yhaupenthal.org"
    - "localhost"

Zitat aus der Wikipedia:

Die Verbindung zwischen zwei XMPP-Clients wird immer über mindestens einen XMPP-Server aufgebaut. Sind beide Clients an zwei verschiedenen Servern angemeldet, so muss auch zwischen den beiden Servern eine Verbindung aufgebaut werden (Client A ↔ Server A ↔ Server B ↔ Client B).

D.h. wir brauchen einmal eine Verschluesselung fuer Client-to-Server (c2s) und dann noch eine fuer Server-to-Server (s2s). Fuer s2s legen wir die folgenden Optionen fest:

# eine verschluesselte Verbindung ist erforderlich
s2s_use_starttls: required
# Pfad zum SSL-Zertifikat, die Anleitung dazu befindet sich
# weiter unten
s2s_certfile: "/etc/ejabberd/xmpp.pem"

Die verwendeten Verschluesselungsverfahren sind im Folgenden aufgelistet, siehe dazu auch mein Post ueber die Cipher bei lighttpd. Direkt danach deaktivieren wir noch die Komprimierung von TLS, damit wir nicht anfaellig fuer CRIME sind.

s2s_ciphers: "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA"
s2s_tls_compression: false
# wir wollen kein SSLv3 nutzen, daher schalten wir es aus.
s2s_protocol_options:
  - "no_sslv3"

Update (2015-05-21) Durch Logjam und BetterCrypto haben wir "DHE-RSA-AES256-SHA" aus der Ciphersliste entfernt (auch bei den Clienteinstellungen).

Danach folgen die Optionen fuer c2s (bei listen):

listen:
  -
    port: 5222
    module: ejabberd_c2s
    max_stanza_size: 65536
    shaper: c2s_shaper
    access: c2s
    # ab hier die neuen Optionen
    # Die Protokolloptionen muessen nicht unbedingt benutzt
    # werden, sind aber sinnvoll, zumindest "no_sslv3"
    protocol_options:
      - "no_sslv3"
    #  - "no_tlsv1"
    # wieder wie oben der Pfad zum SSL-Zertifikat
    certfile: "/etc/ejabberd/xmpp.pem"
    # auch hier ist starttls wieder erforderlich
    starttls: true
    starttls_required: true
    # und auch hier wollen wir uns gegen CRIME absichern
    tls_compression: false
    # die Verschluesselungsverfahren (Cipher bzw. Ciphers) sind
    # die gleichen wie bei s2s
    ciphers: "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA"
    # wir wollen auch nicht den Stream komprimieren
    zlib: false

Als Authentifizierung nutzen wir wie im Standard internal, speichern aber die Passwoerter nicht im Klartext:

auth_method: internal
auth_password_format: scram

Im naechsten Schritt legen wir die Nutzer*innen an, die damit ein Jabberkonto haben (und in unserem Falle Admin sind). Die Namen sind dabei Beispiele.

acl:
  admin:
    user:
      - "beispiel": "albion2.org"
      - "beispiel": "yhaupenthal.org"

Da wir ausser diesen Konten keine weiteren mehr brauchen, verbieten wir die Registrierung von anderen Namen:

access:
  register:
    all: deny

Update (2015-07-02): Wenn wir doch noch Einstellungen vornehmen wollen, koennen wir das via Webinterface oder der Kommandozeile loesen. Bei der Kommandozeile habe ich noch nicht durchgeblickt, da gibts aber hier eine Anleitung.
Das Webinterface ist standardmaessig unverschluesselt ueber folgende Adresse zu erreichen: http://example.org:5280/admin
Dort muss zum Einloggen eine (volle) Jabber-ID mit Adminrechten und das zugehoerige Passwort eingegeben werden.
Unverschluesselt ist natuerlich doof, daher kann es ueber SSL laufen, das habe ich allerdings nicht hinbekommen, es wird aber hier beschrieben. So aehnlich sollte es dann aussehen:

ip: "127.0.0.1"
port: 5282
module: ejabberd_http
certfile: "/etc/ejabberd/webadmincert.pem"
tls: true
web_admin: true

Meine Alternative: per default das Webadmin ausgeschaltet lassen und nur bei Bedarf anschalten. Dann mit einem Proxy (mit Lighttpd, aehnlich zu dem Proxy fuer HabitRPG hier) ueber SSL laufen lassen:

$HTTP["host"] =~ "^(?i:xmpp\.(example)\.org(?::\d+)?)$" {
    proxy.server = ( "" => ( (
        "host" => "127.0.0.1",
        "port" => "5280" ) # oder 5282 je nach der Konfiguration von Ejabberd
    ) )
}

Hilfe ist hier gerne gesehen ;)

Das wars auch schon mit der Konfiguration :)
Die gibts hier nochmal in ganz (ohne Kommentare):

loglevel: 4
hosts:
  - "albion2.org"
  - "yhaupenthal.org"
  - "localhost"
s2s_use_starttls: required
s2s_certfile: "/etc/ejabberd/xmpp.pem"
s2s_ciphers: "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA"
s2s_tls_compression: false
s2s_protocol_options:
  - "no_sslv3"
listen: 
  - 
    port: 5222
    module: ejabberd_c2s
    certfile: "/etc/ejabberd/xmpp.pem"
    starttls: true
    starttls_required: true
    tls_compression: false
    max_stanza_size: 65536
    shaper: c2s_shaper
    access: c2s
    ciphers: "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA"
    zlib: false
    protocol_options:
      - "no_sslv3"
  - 
    port: 5269
    module: ejabberd_s2s_in
  - 
    port: 5280
    module: ejabberd_http
    web_admin: false # bei Bedarf einschalten, SSL Konfiguration siehe oben
    http_poll: true
    http_bind: true
    captcha: true
auth_method: internal
auth_password_format: scram
shaper:
  normal: 1000
  fast: 50000
max_fsm_queue: 1000
acl:
  admin:
    user:
      - "beispiel": "albion2.org"
      - "beispiel": "yhaupenthal.org"

  local: 
    user_regexp: ""
  loopback:
    ip:
      - "127.0.0.0/8"
access:
  max_user_sessions: 
    all: 10
  max_user_offline_messages: 
    admin: 5000
    all: 100
  local: 
    local: allow
  c2s: 
    blocked: deny
    all: allow
  c2s_shaper: 
    admin: none
    all: normal
  s2s_shaper: 
    all: fast
  announce: 
    admin: allow
  configure: 
    admin: allow
  muc_admin: 
    admin: allow
  muc_create: 
    local: allow
  muc: 
    all: allow
  pubsub_createnode: 
    local: allow
  register: 
    all: deny
  trusted_network: 
    loopback: allow

language: "en"
modules: 
  mod_adhoc: {}
  mod_announce: # recommends mod_adhoc
    access: announce
  mod_blocking: {} # requires mod_privacy
  mod_caps: {}
  mod_carboncopy: {}
  mod_configure: {} # requires mod_adhoc
  mod_disco: {}
  mod_irc: {}
  mod_http_bind: {}
  mod_last: {}
  mod_muc: 
    access: muc
    access_create: muc_create
    access_persistent: muc_create
    access_admin: muc_admin
  mod_offline: 
    access_max_user_messages: max_user_offline_messages
  mod_ping: {}
  mod_privacy: {}
  mod_private: {}
  mod_pubsub: 
    access_createnode: pubsub_createnode
    ignore_pep_from_offline: true
    last_item_cache: false
    plugins: 
      - "flat"
      - "hometree"
      - "pep" # pep requires mod_caps
  mod_register: 
    welcome_message: 
      subject: "Welcome!"
      body: |-
        Hi.
        Welcome to this XMPP server.
    ip_access: trusted_network
    access: register
  mod_roster: {}
  mod_shared_roster: {}
  mod_stats: {}
  mod_time: {}
  mod_vcard: {}
  mod_version: {}

TLSv1 abzuschalten waere bei IM Observatory zwar sinnvoll, um 100 % bei Cipher score zu bekommen, allerdings koennen wir uns dann nicht mehr zu jabber.ccc.de verbinden :(
Daher beide Male nur 95 % ..

SSL-Zertifikat

Zur Erstellung eines Zertifikats bei CAcert muss sich auf der Website angemeldet werden. Ein Zertifikat kann direkt erstellt werden, allerdings muessen erst noch die Domains eingetragen und per E-Mail verifiziert werden.

Die Anleitung zur Erstellung befindet sich hier (direkt die ersten Punkte befolgen).
Bei den Abfragen haben wir folgendes angegeben:

--- 8< ---
Short Hostname (ie. imap big_srv www2): xmpp
FQDN/CommonName (ie. www.example.com) : *.albion2.org
Type SubjectAltNames for the certificate, one per line. Enter a blank line to finish
SubjectAltName: DNS:www.albion2.org
SubjectAltName: DNS:www.yhaupenthal.org
SubjectAltName: DNS:*.yhaupenthal.org
SubjectAltName: DNS:yhaupenthal.org
SubjectAltName: DNS:albion2.org
SubjectAltName: DNS:*.albion2.org
SubjectAltName: DNS:
Running OpenSSL...
Generating a 4096 bit RSA private key
--- >8 ---

Liegt das Zertifikat von CAcert dann vor, muss noch folgendes ausgefuehrt werden:

# cat xmpp_privatekey.pem xmpp_server.pem > /etc/ejabberd/xmpp.pem

Start :)

Das wars, nun muss nur noch Ejabberd gestartet werden (und optional beim Systemstart gestartet werden):

# systemctl start ejabberd
# systemctl enable ejabberd

Viel Spass mit eurem eigenen Jabberserver! :)

Zu dem NFC Modul welches ich bei Farnell element14 bestellt habe gehört das Modul selbst, ein kleiner Zettel mit Mini Anleitung und eine RFID Karte. Das Modul ist ungefähr so groß wie der Rasbperry Pi und wird direkt auf die GPIO Ports gesetzt. Durch das aufsetzen des Moduls sind leider die anderen GPIO Ports nicht mehr nutzbar.

Damit das Modul genutzt werden kann muss SPI aktiviert werden.
Hierfür auf der Kommandozeile sudo raspi-config ausführen und unter den Advancded Options SPI aktivieren, im Anschluss den Rasbperry Pi neustarten.

Über einem Windows oder Linux Rechner (nicht über den Rasbperry Pi) die benötigte Software hier herunterladen und entpacken. In den entpackten Verzeichnissen befindet sich die card_polling.zip, diese muss auf den Rasbperry Pi kopiert und werden.

Für das kompilieren der polling Software muss zunächst cmake installiert werden.

Als root auf der Kommandozeile:
apt-get update
apt-get install cmake

Nun als Pi user in das Verzeichniss wechseln in der die zip Datei liegt und mit unzip card_polling.zip entpacken.
Nach dem entpacken müssen folgende Befehle ausgeführt werden:

cd ~/card_polling/build
cmake ../source
make

Nun über ./card_polling die kompilierte Software starten und das polling beginnt.

/home/pi/card_polling/build# ./card_polling
/****** Begin Polling ******/
No card or Tag detected
No card or Tag detected
MIFARE Ultralight detected
UID: 04 F1 DE 81 A0 22 80

MIFARE Ultralight detected
UID: 04 F1 DE 81 A0 22 80

No card or Tag detected
No card or Tag detected

Sobald eine RFID Karte auf das Modul gelegt wird, gibt die Software den Typ und die UID der Karte aus.

NFC Paket

NFC montiert

UPDATE:Leider hatte ich vergessen die verwendete Distribution mit anzugeben, ich nutze hier Raspian. Danke für den Hinweis Marco

Ich habe letztens dass Spiel Spacebase DF-9 entdeckt und da ich besonders Aufbauspiele mag es gleich gekauft und erst mal einen Tag im Spiel verbracht.
Spacebase DF-9 stammt von dem Entwicklerstudio Double Fine Productions welche bei dem Humble Bundle Amnesia Fortnight bereits einen Prototypen davon veröffentlicht haben.
Dieser war allerdings nur für Windows sodass sich mir erst jetzt die Möglichkeit bot dass Spiel zu spielen.
Da dass Spiel noch nicht fertig ist gibt es die Möglichkeit eine frühe Version mit ein paar Bugs zu spielen welche jedoch recht gut Funktioniert und Spaß für mehr als 10 Stunden bietet.

Quelle - Bildschirmfoto von Spacebase DF-9
Quelle – Bildschirmfoto von Spacebase DF-9

Inhalt

In Spacebase DF-9 geht es darum eine Weltraumstation aufzubauen und den einzelnen Einwohner Berufe zuzuteilen.
Dabei muss für jedes Objekt und jeden Raum vorher Gestein aus dem All von den Minern abgebaut und durch eine Maschine zu Materie umgewandelt werden.
Danach können Räume von Bauarbeitern erbaut und einer bestimmten Zone zugewiesen werden.
Jede Zone erfüllt eine Aufgabe und die dafür erforderlichen Objekte können nur in diesen Zonen gebaut werden.

Wichtig sind vor allem Lebensunterstützende Zonen in denen der Sauerstoff in der Luft aufgefrischt wird.
Mit der Anzahl der Umwandler erhöht sich auch die Personenanzahl die maximal aufgenommen werden können.
In den Schlafzonen können Betten für die Mannschaft aufgestellt werden, die ruhen sich bei Erschöpfung darin aus.
Daneben gibt es noch weitere Zonen die verschiedenste Aufgaben wie dem sozialen Kontakt dienen.

Ab und zu gibt es auch Katastrophen wie Überfälle oder Meteoritenschauer die schnell zum Tode führen wenn nicht richtig gehandelt wird.
Dafür lassen sich in allen Räumen Feuerlöscher und Alarmsysteme installieren und bei Gefahr auch bedienen.
Die Türen lassen sich auch verriegeln sodass ein evakuieren bei guter Planung recht schnell und die Katastrophe meist ohne Tote vorüber geht.
Neben Banditen fragen auch Schiffe mit Leuten die zu der Crew gehören wollen ob sie andocken können.
Dass bringt nach und nach immer mehr Leute denen verschiedenen Berufe zugeordnet werden können.

In den Forschungslaboren lassen sich verbesserte Gegenstände und Werkzeuge sowie Krankheiten erforschen.
Diese ermöglichen unter anderem den Bauvorgang zu beschleunigen oder statten die Sicherheitskräfte mit Gewehren aus.
Von Zeit zu Zeit kommen auch Krankheiten in der Bevölkerung auf die dann in den Forschungseinrichtungen erforscht werden müssen sodass sie auf den Krankenstationen bekämpft werden können.

Quelle - Bildschirmfoto von Spacebase DF-9
Quelle – Bildschirmfoto von Spacebase DF-9

Grafik

Die Grafik von Spacebase DF-9 ist hübsch gestaltet und stellt dass Spielgeschehen aus der Isoperspektive dar.
Der Grafikstil hat seinen eigenen Charme und wirkt auf mich mit den metallischen Oberflächen passend zum Geschehen.

Infos und Details

Dass Spiel kann derzeit über den Humble Store und Steam für 22.99 Euro erworben werden.
Anschließen lässt sich Spacebase DF-9 über Steam für die Plattformen Linux, Mac und Windows herunterladen und spielen.
Es existiert derzeit noch keine DRM-Freihe Version im Humble Store allerdings ist die Steam Version gleichzeitig eine sodass Steam nur zum herunterladen gebraucht wird.

Der Soundtrack im Spiel fällt mir positiv auf da er zum geschehen passt und auch nach langer Zeit nicht nervend wird.

Die Hardwareanforderungen für Linux sind recht niedrig gehalten sodass dass Spiel auch auf einem einigermaßen modernen Laptop laufen wird.

Linux Systemanforderungen:

– Betriebssystem: Ubuntu 12.04 LTS, aktualisiert
– Prozessor: 1.8 GHz dual core CPU
– Arbeitsspeicher: 1 GB RAM
– Grafik: 256 MB GeForce 8800, Radeon HD 2000, or Intel HD 4000 Graphics
– Festplattenspeicher: 200 MB verfügbaren Speicher
– Audiokarte: DirectX Compatible Sound Card

Quelle - Bildschirmfoto von Spacebase DF-9
Quelle – Bildschirmfoto von Spacebase DF-9

Wertung

Kategorie Wertung
Grafik 9/10
Gestaltung 7/10
Inhalt 8/10
Gesamt 24/30

Fazit

Dass Spiel gefällt mir sehr und der Preis ist für den Inhalt angemessen.
Jeden Monat sollte laut den Entwicklern ein Update hinzukommen welche oft mehr Möglichkeiten und Gegenstände mitbringen.
Spacebase DF-9 hat ein schönes Konzept welches unter Linux noch nicht häufig vertreten ist.
Ich kann dass Spiel bedenkenlos weiterempfehlen, auch denen die sonst nicht viel Spaß an Aufbauspielen haben.

19. Juni 2014

Firefox besitzt mit dem Telemetrie-Feature eine Mess-Infrastruktur, um diverse Leistungsdaten von Firefox anonym an die Mozilla-Server zu übertragen. Ab sofort ist Telemetrie in den Betaversionen standardmäßig aktiviert.

Telemetrie liefert Mozilla wichtige Erkenntnisse zur Nutzung des Browsers, um diesen zu verbessern. Für Nutzer der Nightly- sowie Aurora-Versionen von Firefox war Telemetrie bereits standardmäßig aktiviert, Gleiches trifft nun auch für Nutzer der Beta-Versionen zu. In den finalen Versionen wird Telemetrie auch weiterhin standardmäßig nicht aktiviert sein. Aktiviert kann Telemetrie über Einstellungen → Erweitert → Datenübermittlung werden.  Grundsätzlich sollte jeder Nutzer Telemetrie aktivieren beziehungsweise bei der Nutzung von Vorabversionen aktiviert lassen, da es nur im eigenen Interesse sein kann, dass das eigene System und Nutzungsverhalten bei der Entwicklung berücksichtigt wird.

Die Änderung betrifft sowohl den Desktop- als auch den Android-Browser von Mozilla und wird damit begründet, dass die Nutzer der Betaversionen deutlich repräsentativer in Bezug auf die finalen Versionen sind und dies Mozilla ermöglicht, bessere Voraussagen darüber zu treffen, wie sich eine Änderung für die Nutzer der finalen Versionen auswirken wird, als das bei den Nightly- und Aurora-Nutzern der Fall ist.

Nutzer, welche ihre Entscheidung für oder gegen Telemetrie davon abhängig machen wollen, welche Daten überhaupt an Mozilla übertragen werden, können about:telemetry in die Adressleiste von Firefox eingeben und sich diese ansehen. Die aggregierten Daten aller Nutzer lassen sich online über telemetry.mozilla.org betrachten und analysieren.

Es gibt sicherlich viele Möglichkeiten, stets über aktuelle Updates informiert zu sein. Mailinglisten oder Feeds sind sicherlich eine praktische und vor allem informative Möglichkeit, aber viel einfacher ist es, den Server oder Rechner die Arbeit zu überlassen. Die Paketverwaltung yum, welche bei CentOS und Fedora verwendet wird, bringt glücklicherweise das Kommando 

yum check-update
  mit, welches genau diese Aufgabe erledigt. Falls Updates verfügbar sind, beendet yum sich mit dem Exit-Code 100.

Für diese Aufgabe habe ich mir ein kleinen Bash-Script gebaut, welches die Ausgabe von 

yum check-update
  nur ausgbit, wenn auch wirklich Updates vorliegen. In einem Cronjob mit konfigurierter E-Mail Adresse erhält man so eine E-Mail, wenn Updates verfügbar sind:
#!/bin/bash
YUM_OUTPUT=$(/usr/bin/yum check-update)
if [ "$?" == 100 ]; then
    echo -e "There are updates available!\n\n" 
    echo -e "$YUM_OUTPUT"
fi

Mein Eintrag in der Crontab sieht dann z.B. so aus:

MAILTO="email@example.org"
0 5 * * * /usr/local/bin/yum_check-update.sh

An sich eine sehr simple Angelegenheit. Natürlich kann das Script bei Bedarf auch mehrfach täglich ausgeführt werden, man müsste nur den Cronjob anpassen. Es gibt sicherlich auch umfangreichere Lösungen, aber ich denke so ein paar Zeilen sind schnell erledigt und bringen schon einen deutlichen Mehrwert.

Bereits vor einigen Wochen wurde im deutschen Twitter-Blog angekündigt, dass zur WM einige Addons bei Twitter eingefügt werden. Dazu gehört unter anderem eine Seitenleiste, in der die Paarungen des Tages gesammelt werden, Hinweise in der Timeline zum jeweiligen Spiel, dass gerade läuft und kleine Nationalfähnchen, die bestimmte Hashtags verzieren. Wie das konkret aussieht zeigt beispielhaft der folgenden Screenshots.

Wer wie ich Fußball mag, aber den medialen Hype um die WM im Fußball der Männer eher Unverständnis entgegenbringt, ist vielleicht daran interessiert, Twitter im Webbrowser seiner Wahl wieder unbelastet nutzen zu können. Ein Adblocker, wie Adblock Edge, und ein bisschen CSS-Kenntnisse machen das leicht möglich.

Zunächst gilt es die Elemente ausfindig zu machen, die blockiert werden sollen. Dann müssen hinreichend eindeutige Identifikatoren für diese Elemente gefunden werden. Im konkreten Fall sind das folgende:

  • Seitenleiste: DIV mit id=dashboard-matches
  • Info-Tweet: DIV mit data-name="TwitterFootball"
  • Hashtag-Fahne: IMG mit class=twitter-hashflag

Um diese zu blockieren muss nun Adblock auf sie los gelassen werden. Dafür müssen eigene Filterregeln angelegt werden. Um das zu tun, öffnet ihr mit der Tastenkombination Ctrl+Shift+F die Filtereinstellungen. Links-oben findet sich der Reiter "Eigene Filter". Falls noch keine Filtergruppe existiert muss zunächst eine angelegt werden. In diese Filtergruppe können nun eigen Filter eingefügt werden. Die Syntax ist relativ simpel und wird sehr gut auf den Seiten von Adblock+ erklärt.

In unserem Fall werden wir mittels der gefundenen CSS-Selektoren blocken. Die Syntax ist in diesem Fall realtiv simpel:

webseitenname.kürzel ## CSS-Selector [" spezielle Eigenschaft "]

Die Angabe des Webseiten-Namens ist fakultativ. Wenn ein Name angegeben wird, dann wirkt der Filter nur auf der angegebenen Website. Wenn kein Name angegeben ist, wirkt er überall. Eine fertige Filterliste für unsere oben gefundenen Objekte sieht also folgender Maßen aus:

twitter.com##DIV[id="dashboard-matches"]
twitter.com##DIV[data-name="TwitterFootball"]
img[class="twitter-hashflag"]

Wenn die fertige Liste im Adblocker sollte nun den folgenden Inhalt haben:

Bildschirmfoto vom 2014-06-19 11:42:37

Jetzt solltet ihr Twitter wieder weitestgehend ohne nervige Addons nutzen können.

PS: Wo wir gerade bei nervig sind. Auch der Hinweis zur Cookie-Nutzung, der beim Login angezeigt wird und bei mir regelmäßig das halbe Login-Feld überdeckt, lässt sich mit dieser Methode leicht entfernen. Die Zeile lautet in diesem Fall:

twitter.com##DIV[class="Banner eu-cookie-notice"]

Manchmal ist es praktisch, kurz einen Tunnel zur Verfügung zu haben, mit dem man seinen Traffic über einen anderen Server leiten kann. Dafür braucht man nicht immer ein VPN oder externe Proxy Server, auf die Schnelle geht dies auch mit dem OpenSSH Client, wenn man SSH Zugang zu einem anderen Server hat. Aufgerufen mit der Option 

-D <port>
  lauscht, wenn keine Adresse angegeben wird, stellt der SSH Client lokal auf dem Port einen SOCKS Proxy zur Verfügung und leitet Anfragen an den Server weiter. Die Manpage formuliert dies ein wenig genauer:
Specifies a local “dynamic” application-level port forwarding.

Somit hat man mit zwei kleinen Schritten einen SOCKS Proxy zur Verfügung:

ssh -D 1080 example.org

Und tatsächlich, der SSH Client lauscht nun auf Port 1080:

netstat -antu | grep 1080
tcp        0      0 127.0.0.1:1080          0.0.0.0:*               LISTEN
tcp6       0      0 ::1:1080                :::*                    LISTEN

Nun kann man z.B. in seinem Browser oder anderen Anwendungen die Adresse 

localhost:1080
  als SOCKS(5) Proxy eintragen. Diese Methode ist aber mit Vorsicht zu genießen, da hiermit auch diverse Firewall oder Filter-Mechanismen umgangen werden können, so lange eben der SSH Port erreichbar ist.

Im folgenden Video zeige ich kurz (~ 5 min.) wie meine Toolchain im Live-Betrieb aussieht, dabei nutze ich unter anderem Sublime Text, PHP, Twig, Grunt, Sass, Compass, LiveReload und ein paar Funktionen aus den “dofiles” (z.B. phpserver).

 

Wer den Beispiel-Code aus dem Video selber ausprobieren möchte, hier die Zusammenfassung:

sudo apt-get install git

cd ~
git clone https://github.com/voku/dotfiles/
cd dotfiles/
./firstInstall.sh
./bootstrap.sh
cd ~
vim ~/.extra #1

cd ~
mkdir Projects/
git clone https://github.com/voku/twig-wrapper-example/
cd twig-wrapper-example/
npm install
grunt watch

cd ~/Projects/twig-wrapper-example/
phpserver

#1 füge deine persönlichen Git-Einstellungen hier hinzu

 

Wer mehr Infos oder Erklärungen zu den hier verwendeten Tools haben möchte, sollte sich einmal folgende Videos anschauen: suckup.de/howto/html/moderner-build-development-workflow-via-bower-grunt-yeoman/

 

Man kann über proprietäre Software denken was man will aber wenn Software wirklich gut ist und einem die Arbeit erleichtert / beschleunigt solle man sich diese zumindest einmal anschauen.

Installation

Es gibt unterschiedliche Wege Sublime Text zu installieren. Man kann das Paket direkt von der entsprechenden Webseite laden und mit folgendem Befehl installieren.

wget http://c758482.r82.cf2.rackcdn.com/sublime-text_build-3059_amd64.deb
sudo dpkg -i sublime-text_build-3059_amd64.deb

Info: dev-builds gibt es hier Oder man verwendet z.B. das Linux Mint Repository und installiert Sublime über den Paketmanager.

sudo echo "deb http://packages.linuxmint.com/ debian main import backport upstream romeo" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install sublime-text

 

Plugin-Manager hinzufügen

Auf der folgenden Webseite gibt es “den” Plugin-Manager für Sublime, welchen man auf jeden Fall installieren sollte: sublime.wbond.net/installation

mkdir ~/.config/sublime-text-3/Packages/Installed\ Packages
cd ~/.config/sublime-text-3/Packages/Installed\ Packages
wget https://sublime.wbond.net/Package%20Control.sublime-package

Nachdem man Sublime einmal neugestartet hat, findet man unter “Preferences -> Package Control” alle Befehle zum verwalten von Plugins.

 

Plugin Empfehlungen

– BracketHighlighter -> Bracket and tag highlighter for Sublime Text

– DocBlockr -> Simplifies writing DocBlock comments in Javascript, PHP, CoffeeScript, Actionscript, C & C++

Emmet -> Emmet (ex-Zen Coding) for Sublime Text

PHP-Twig -> A TextMate (and Sublime Text) bundle for Twig.

Sass -> Sass support for TextMate & Sublime Text 2

Git -> Plugin for some git integration into sublime text

– GitGutter -> A Sublime Text 2/3 plugin to see git diff in gutter

 

Links:

Sublime Text – Tips-Tricks-Shortcuts

– Best of Sublime Text 3 Features. Plugins and Settings

– Sublime Text – Keyboard-Shortcuts

– www.sublimetext.com/docs/3/

18. Juni 2014

Vor einiger Zeit kam mir der Gedanke, mein Leben zu gamifizieren.
Der Gedanke kam mir kurz vorm Entruempeln eines Schreibtisches und ich dachte an die erfolgreiche Gamifizierung von Lernplattformen wie Codecademy, Khan Academy, Memrise und Duolingo - um nur einige zu nennen - und bei Spielen generell (vgl. Steam).

Also: wir spielen Sims oder irgendein Spiel um dort voran zu kommen bzw. einen Character zu verbessern, trainieren usw., sitzen aber selbst leider nur vor diesem Kasten und bewegen lediglich die Haende ..
Spiele sind nicht grundlegend schlecht, ja sind sogar teilweise gut fuer uns, aber was bringt es, wenn mein virtueller Charakter in einem Spiel die Hoechststufe erreicht hat, wenn wir selbst dahinvegetieren?

Naja, jedenfalls dachte ich mir, ich hab ja schonmal eine Website gebaut mit ein bisschen Gamifizierung, ich kann sowas ja nochmal machen, diesmal aber auf mein Leben anwenden.
Die Anforderungen waren dabei eine Website, in der TODOs usw. eingetragen werden koennen und es bei Erfuellung dieser eine Belohnung in Form von Abzeichen oder aehnliches gibt. Dabei soll das ganze lokal laufen koennen, aber auch zentral, um sich durch einen optionalen Wettbewerb mit anderen zu messen.

Ich wollte mich aber zuerst noch vergewissern, dass es sowas nicht schon gibt und hab mal in der Suchmaschine meiner Wahl danach gesucht. Und natuerlich gibt es solch eine Website schon: HabitRPG :D

Dabei werden sogar alle Features umgesetzt, die ich auch bei mir angedacht habe. HabitRPG kann - dank Open Source - lokal aufgesetzt werden, laeuft aber auch zentral und die Spieler*innen koennen sich in optionalen Wettbewerben miteinander messen. Zudem wird die Gamifizierung sehr schoen umgesetzt, es ist naemlich kein einfaches Belohnungssystem sondern an ein Role Play Game (RPG) angelehnt, d.h. es gibt einen Charakter, der durch "Aufbauen" von Gewohnheiten (Habits) sowie Erledigung von taeglichen (Dailies) und einmaligen Aufgaben (TO-DOs) Erfahrungspunkte sammeln kann um dann mit genuegend Punkten ein Level aufzusteigen.
Einige Level schalten dabei verschiedene Dinge frei, so koennen ab Level 2 Haustiere und Reittiere aufgezogen werden und ab Level 10 eine neue Klasse gewaehlt werden.
Soziale Interaktion ist im Gasthaus oder in Gilden bzw. Gruppen moeglich um sich bspw. mit anderen zu messen.
Mehr dazu im Wiki von HabitRPG.

Startseite
von HabitRPG nach dem Einloggen

[Hinweis zum Bild: ich wollte erst verpixeln, aber daraus koennen die urspruenglichen Informationen wieder hergestellt werden. Daher am Besten: ausschneiden, schwaerzen oder zufaellig verwischen.]

Jedenfalls wollte ich HabitRPG natuerlich lokal aufsetzen, weil ich ja die Kontrolle ueber meine doch privaten Daten haben will. Gerade in Zeiten der Ueberwachung ist das auch ziemlich sinnvoll und wichtig.

Allerdings habe ich nicht mit diesem Aufwand gerechnet (zuerst mal MongoDB und NodeJS-Umgebung bauen) und den leider vielen Bugs. Zumindest als ich es ausgetestet habe, fehlten anscheinend die ganzen Mediadaten wie Bilder und die Sprachdateien.
D.h. es ging einfach nichts und ich hatte nach ein paar Stunden und dank nicht so toller Dokumentation keine Lust mehr und hab mich auf der zentralen Seite angemeldet.

Aber gut, dass ich nicht so leicht aufgebe, ich habe es wieder versucht. Und nach ein paar Stunden hat dann auch alles so funktioniert, wie ich das wollte. Allerdings ist die Doku immer noch schlecht ;)

Daher hier eine moeglichst umfangreiche Anleitung (fuer Arch Linux).
Danach geht es normal weiter im Text ;)

HabitRPG lokal aufsetzen

Die Anleitung im Wiki von HabitRPG gibt schon einige Sachen vor (und ist ausfuehrlicher als die auf GitHub), aber ich will die einzelnen Schritte etwas genauer und an Arch Linux angepasst auflisten.

  • MongoDB installieren und aufsetzen (Quelle)

    # pacman -S mongodb
    
  • MongoDB starten (und optional bei jedem Systemstart starten lassen)

    # systemctl start mongodb
    # systemctl enable mongodb
    
  • Installation von NodeJS und Git

    # pacman -S nodejs git
    
  • Beziehen des Codes von HabitRPG (von GitHub) und Wechseln in das neue Verzeichnis (kann spaeter z.B. nach ~/repos verschoben werden)

    $ cd
    $ git clone https://github.com/HabitRPG/habitrpg.git
    $ cd habitrpg
    
  • Auf richtigen Branch testen (sollte develop sein)

    $ git branch
    
  • Wenn es nicht develop ist, zu develop wechseln

    $ git checkout develop
    
  • grunt-cli und bower global installieren

    # npm install -g grunt-cli bower
    
  • Am Besten noch die Rechte der letzten beiden Pakete richtig setzen

    # chmod -R 755 /usr/lib/node_modules/grunt-cli /usr/lib/node_modules/bower
    
  • Restliche Abhaengigkeiten installieren

    $ npm install
    $ bower install
    
  • Konfigurationsdatei erstellen

    $ cp config.json.example config.json
    
  • Das SESSION_SECRET in config.json aendern, z.B. mit pwgen, der Rest der Datei kann so belassen werden

    $ pwgen -s 50 1
    
  • Datenbank mit Initialwerten befuellen

    $ node src/seed.js
    
  • Starten der Anwendung

    $ npm start
    
  • Im Browser http://localhost:3000 aufrufen

  • Auf Play klicken und unter Register anmelden oder ein schon vorhandenes Konto beim offiziellen HabitRPG exportieren und in der lokalen Instanz importieren (Anleitung siehe unten)

HabitRPG updaten

Ab und zu gibt es am offiziellen HabitRPG Aenderungen, die dann natuerlich auch genutzt werden koennen.
Dazu folgende Schritte ausfuehren (Quelle):

  • Ins Verzeichnis mit dem Code von HabitRPG wechseln und den Code updaten

    $ cd /path/to/habitrpg
    $ git pull origin develop
    
  • Updates installieren

    $ npm install
    $ bower install -f
    

    Wenn du weisst was du tust, kannst du auch die Abhaengigkeiten updaten:

    $ npm update
    $ bower update
    
  • Und HabitRPG wieder starten :)

    $ npm start
    

Datenexport und -import (zentral nach lokal)

Um ein schon vorhandenes Konto im offiziellen HabitRPG im lokalen zu nutzen, muessen die Daten erst exportiert werden. Dazu am Besten alle drei Dateien unter Export (history.csv, userdata.xml, userdata.json) herunterladen.
Da in den Daten kein Passwort vorhanden ist, kann ein temporaeres Passwort (in diesem Fall test) in userdata.json eingefuegt werden, um sich damit einloggen zu koennen. Das Passwort sollte danach direkt wieder geaendert werden!
Dazu die Datei userdata.json mit einem Texteditor oeffnen und die Zeile mit dem Wort email suchen. An das Ende der Zeile dann ein Komma anhaengen und folgendes in die naechsten zwei Zeilen schreiben:

"salt" : "f45185359d",
"hashed_password" : "b04475ce5a970087602f702ffec1af6e4a2eb73e"

Danach die Datei schliessen und mit folgendem Befehl in MongoDB importieren (zuerst gab es bei mir eine Fehlermeldung beim Import, daher am Besten noch --jsonArray anhaengen (Quelle)):

$ mongoimport --db habitrpg --collection users --file userdata.json --jsonArray

Nun kann sich ganz normal eingeloggt werden (mit dem Benutzernamen wie bei der offiziellen Version und dem Passwort test).

Datensicherung

Was manuell geht, geht natuerlich auch automatisch: die Sicherung der Daten.
Die koennen jetzt direkt per mongodump und einem Cronjob gesichert werden und ggf. per mongorestore wieder eingespielt werden.

$ mongodump --db habitrpg --out ~/backup

Der Cronjob koennte so aussehen:

$ crontab -e
@daily mongodump --db habitrpg --out $HOME/backup

Und die Backupdateien koennten dann z.B. in einem Gitrepository gesichert werden.

[An dieser Stelle schwand etwas meine Lust ;)]

Update (2014-07-18): Eingespielt werden koennen die Daten ueber folgenden Befehl (Quelle):

$ mongorestore --drop ~/backup/habitrpg

HabitRPG auf einem Server mit SSL aufsetzen

Das wollte ich heute (2014-07-18) mal nachholen, bin aber klaeglich gescheitert. Es existiert dafuer natuerlich wieder keine Doku, und auch herumprobieren (eher stochern) hat mich nicht weitergebracht.

Ueber jegliche Hilfe bin ich sehr dankbar! :)

Allerdings war mein erstes Problem, dass ich nichtmal die unverschluesselte Version mit Chromium aufrufen konnte, was an HSTS lag :(
Warum gibt es da nicht die Moeglichkeit, die Ports oder auch nur einzelne Ports/Subdomains zu ignorieren?
Naja, geloescht werden kann die jeweilige Domain in den Einstellungen von Chromium, dazu einfach folgendes in die Adressleiste eingeben (Quelle):

chrome://net-internals/#hsts

Unter "Delete domain" kann die Domain nun entfernt werden.

Update (2014-07-19): Hehe, neuer Tag, neues Glueck - so schnell gebe ich nicht auf ;)

Habe es nun hinbekommen. Den entscheidenden Tipp fand ich in diesem Blog, nach einer kurzen Suche nach "lighttpd npm" :)

Bei gleichbleibender config.json muss nur folgendes in die Konfigurationsdatei von lighttpd (siehe dazu auch mein Artikel zum absichern von lighttpd):

server.modules += ( "mod_proxy" )

$HTTP["host"] == "subdomain.domain.tld" {
    proxy.server = ( "" => ( (
        "host" => "127.0.0.1",
        "port" => "3000" )
    ) )
}

Und lighttpd neustarten:

systemctl restart lighttpd

Damit nun nicht mehr via http und Port 3000 auf HabitRPG zugegriffen werden kann, einfach den Port in der Firewall zumachen (Quelle) ;)

HabitRPG sollte auf dem Server am Besten unter einem extra User laufen, der z.B. so erstellt werden kann:

# useradd -d /home/habitrpg -s /bin/nologin habitrpg

Um direkt mit dem System zu starten, reicht bei systemd folgendes (z.B. in /etc/systemd/system/habitrpg.service):

[Unit]
Description=HabitRPG
After=syslog.target network.target

[Service]
Type=simple
User=habitrpg
WorkingDirectory=/home/habitrpg
ExecStart=/usr/bin/npm start
ExecStop=/usr/bin/npm stop

[Install]
WantedBy=multi-user.target

Aktivieren und starten dann mit folgenden Befehlen:

# systemctl enable habitrpg.service
# systemctl start habitrpg.service

Update (2014-08-17): Nach laengerem Laufen haben wir festgestellt, dass der Service das Log zuspammt (einzusehen via journalctl -e). Dies kann durch zwei Wege verhindert werden: alles nach /dev/null, also ins Nichts leiten oder (praeferiert) HabitRPG im Produktivmodus laufen lassen (bisher lief es im Entwicklungsmodus).

Fuer beide Wege gilt: erst mal den Service stoppen:

# systemctl stop habitrpg.service

Ersteres laesst sich dann durch folgende ergaenzende Zeile (bei [Service]) in /etc/systemd/system/habitrpg.service bewerkstelligen:

StandardOutput=null

Zweiteres durch den Austausch der ExecStart-Zeile durch folgende Zeilen ...

ExecStartPre=/home/habitrpg/node_modules/.bin/grunt build:prod
ExecStart=/home/habitrpg/node_modules/.bin/grunt nodemon

... und den Austausch der NODE_ENV-Zeile in /home/habitrpg/config.json durch folgende Zeile (also quasi development in production aendern):

"NODE_ENV":"production"

In beiden Faellen dann den Service neuladen und starten:

# systemctl daemon-reload
# systemctl start habitrpg.service

HabitRPG sollte nun nicht mehr das Log zuspammen und/oder im Produktivmodus laufen :)

Es war uebrigens wieder ein K(r)ampf, das alles herauszufinden, da der Produktivmodus ueberhaupt nicht dokumentiert ist ..
Letztendlich geholfen hat das Lesen des Codes (Gruntfile.js und Procfile) ..

Update (2014-11-13): Ein paar Mal hab ich inzwischen auf die neueste Version geupdated, dabei ist die best practice, den HabitRPG-Ordner zu verschieben (mv habitrpg habitrpg.bak-$(date +%F)), neu zu klonen (git clone https://github.com/HabitRPG/habitrpg.git), Abhaengigkeiten zu installieren (cd habitrpg ; npm install ; bower install) und die alte Konfigurationsdatei zu kopieren (cp ../habitrpg.bak-.../config.json .). Ggf. die Konfigurationsdatei an die neue Example-Datei anpassen (diff config.json config.json.example).
Beim jetzigen Mal wollte HabitRPG aber einfach nicht starten (weder mit npm start (und development) noch mit ./node_modules/.bin/grunt build:prod;./node_modules/.bin/grunt nodemon; (und production)). Der Fehler war dieser hier:

/home/habitrpg/node_modules/winston/lib/winston/logger.js:435
  var instance = created ? transport : (new (transport)(options));
                                        ^
TypeError: undefined is not a function
    at Logger.add (/home/habitrpg/node_modules/winston/lib/winston/logger.js:435:41)
    at Object.<anonymous> (/home/habitrpg/src/logging.js:11:16)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/habitrpg/src/server.js:7:15)
    at Module._compile (module.js:456:26)
[nodemon] app crashed - waiting for file changes before starting...

Ich hab nicht wirklich Ahnung vom Code, daher tippe ich einfach mal, dass das Problem an New Relic liegt, was ich aber nicht nutze (die Angaben in der Konfigurationsdatei habe ich so gelassen). Einfachster Weg ist hier, den Logger einfach nicht zu aktivieren. Dazu wird in der Datei src/logging.js folgende Zeile

logger.add(winston.transports.newrelic, {});

durch diese ersetzt:

// logger.add(winston.transports.newrelic, {});

Danach laesst sich HabitRPG wie gewohnt starten. Natuerlich habe ich auch diesmal nichts im Internet gefunden, und ich glaube auch, dass dieser Eintrag der einzige im Internet ist, der die Produktivinstallation von HabitRPG halbwegs nutzbar beschreibt (ausser vielleicht interne Firmendokumentationen ;)). Naja ;)

Erweiterte Rechte

Der Vorteil bei einer lokalen Installation ist nicht nur der Datenschutzaspekt, sondern auch die erweiterten Rechte ;)
So kann das eigene Konto mit Adminrechten und Edelsteinen ausgestattet werden, um alles machen zu koennen, was normalerweise Geld kostet. Das soll natuerlich nicht fuer alles genutzt werden, sonst macht das nicht mehr so viel Sinn ;)

Dazu folgende Schritte ausfuehren:

  • User-ID z.B. hier finden und kopieren. Eine Beispiel-ID ist:

    05e3c0da-f47f-4cb4-be3c-7ab12093ceaf
    
  • In der Datenbank einloggen (Quelle)

    $ mongo habitrpg
    
  • Adminrechte setzen:

    > db.users.update({_id: '05e3c0da-f47f-4cb4-be3c-7ab12093ceaf'}, {$set: {contributor: {"admin":1}}})
    
  • Nun koennen in der Halle der Helden noch einige Einstellungen veraendert werden, unter anderem koennen bei Saldo Edelsteine verliehen werden oder die Werbung abgeschaltet werden.

Noch ein Einwurf, dann gehts weiter im Text ;)
Diese Website waere ja langweilig, wenn es nicht noch ein bisschen geekiger gaenge, so bin ich eben ueber HabitRPG fuer die Kommandozeile gestolpert :D
Getestet habe ich es noch nicht, es steht aber als TODO in meiner lokalen HabitRPG-Instanz ;)

.. und weiter im Text ..

Nach einiger Eingewoehnungszeit finde ich HabitRPG bisher sehr gut. Es laeuft nun seit ca. einem Monat und ich bin sehr zufrieden damit.
Insgesamt bin ich der Meinung, dass dieses Programm wirklich hilft, denn der Anreiz, den Charakter zu leveln und Straehnen-Bonus/Perfekte Tage zu bekommen, ist recht hoch.
Auch der Wettbewerb mit anderen hilft dabei, Dinge auch tatsaechlich umzusetzen.

Es macht jedenfalls viel mehr Spass, die TODO-Liste abzuarbeiten und Gewohnheiten zu veraendern, als wenn es keine "Belohnung" gibt.
Natuerlich ist aber der erste Schritt, die Gewohnheit zu bilden, HabitRPG zu nutzen, ansonsten bringt auch die ganze Gamifizierung nichts ;) Allerdings war das fuer mich kein Problem: ich glaube, es liegt an meiner Begeisterung :D
Es hilft, die Website immer offen zu lassen und z.B. bei Chromium als "pinned Tab" zu nutzen.

Ein paar Tipps:

  • meiner Meinung nach sind die taeglichen Aufgaben besser dafuer geeignet, eine Gewohnheit aufzubauen, da diese quasi Pflicht sind und bei Nichterledigung Punkte abziehen, waehrend bei "Gewohnheiten" einfach nichts passiert.
  • fuer unterwegs gibt es eine App fuer Android und iOS
  • am Anfang moeglichst wenig Geld ausgeben fuer die Belohnungen (also Schwerter oder Ausruestung), da ab Level 10 die Klasse gewechselt werden kann und nur bei der Klasse Krieger diese Belohnungen etwas nutzen. Alle anderen Klassen bekommen andere Belohnungen freigeschaltet.
  • nutzt den Wettbewerb mit anderen Leuten bzw. schaut euch in der Liste mit allen Wettbewerben um, vielleicht entdeckt ihr ja etwas neues.

Ich finde es jedenfalls erstaunlich, wie gut ich mich damit selbst austricksen kann und von mir vorgegebene Dinge auch wirklich umsetze. Das hat bisher immer nicht so gut geklappt (ausser bei wirklich grossen Dingen wie vegetarisch zu leben oder so).
Obwohl ich einige Blogs lese, die ueber Produktivitaet und Persoenlichkeitsentwicklung im Allgemeinen schreiben (wie Steve Pavlina, Leo Babauta, Markus Cerenak, ..), sowie einige Buecher zu diesen Themen wie focus, Zen To Done oder 52 Changes gelesen habe, gelang es mir auf Dauer nicht, gewisse Dinge auch wirklich umzusetzen.
Das wird sich nun aendern ;)

Ein Beispiel: ich hatte mir schon laenger vorgenommen, nur noch mit 10 Fingern zu schreiben. In Verbindung mit Tipp10 wurden meine Fortschritte schon besser, allerdings bin ich nie dauerhaft dabei geblieben, was ich nun aber tue. Grossartig. Und das nach nur ein paar Wochen :)

Ein positiver Aspekt hat die Nutzung von HabitRPG noch: da die deutsche Uebersetzung an einigen Stellen noch ziemlich mies ist, hab ich dabei geholfen, HabitRPG zu uebersetzen :)

So, und nun viel Spass beim Unprokrastinieren ;)

add-folder-to-archiveImmer wieder hab ich mich nun schon mit automatischer Versionierung beschäftigt. Aber leider waren die Ansätze meist zu aufwendig oder auch zu umständlich – wenigstens für das was ich eigentlich haben wollte. Äh …. haben wollte …. ja was wollte ich denn anderes haben als die anderen?

Naja, ich bin kein Entwickler in dem Sinne. Mit geht es überwiegend darum Konfigurationsdateien und deren Änderungen halbwegs im Auge zu haben, bzw. auch nachvollziehen zu können welche Änderungen vorgenommen wurden um ggf. Fehler zu finden. Also möchte ich kein grossartiges ein- oder auschecken, keinen zentralen Server auf dem das “Master Branch” liegt oder so. Nö.

Nun gibt es verschiedene Ansätze. EtcKeeper sei da genannt und man findet auch diverse Ansätze das ganze über inotify zu automatisieren. EtcKeeper hat mir persönlich zu viel selbst gemacht. Die Lösungen mit inotify haben ihren Sinn und Zweck, allerdings für mich ein wenig übertrieben. Ich wollte das einfacher.

Ganz normales Handwerkszeug

Meine Lösung benötigt lediglich cron, git und gitk.

Beispielsweise /etc initialisieren:

cd /etc

git add .

Nun folgende Zeile in die crontab:

0 19 * * * root cd /etc; /usr/bin/git add -A; /usr/bin/git commit -a -m "autoupdate"

Fertig.

Die Zeiten kann man natürlich nach Lust und Laune anpassen und ggf. auch öfter am Tag einen Abgleich durchführen … je nach dem wie viele verschiedene Leute auf einem System arbeiten und wie viel dort passiert. GitK in dem entsprechenden Verzeichnis aufgerufen zeigt nun schnell einen Überblick über die letzten Änderungen (natürlich auch mit den git Befehlen auf der cli).

Für mich eine echt gute Lösung.