Anwendungen
Portal
Forum
Wiki
Ikhaya
Planet
Mehr
Anmelden

heute

Version von ejabberd ermitteln

Permalink Invictus deus ex machina

Um die installierte Version des XMPP Servers ejabberd zu ermitteln muss auf der Konsole folgendes eingegeben werden:

ejabberdctl status

Anschließend erhält man die entsprechende Auskunft:

The node ejabberd@srv01 is started with status: started
ejabberd 2.1.11 is running in that node

Postfix 2.12 wird 3.0

Permalink debinux

Ganz im Stil von Klatsch und Tratsch, ein Announcement von Wietse Venema am frühen Morgen über die Mailing List des Postfix Servers.

As the subject says, Postfix has been renamed, and the next stable
release will be Postfix 3.0. This is the result of a mostly-mechanical
edit, with human inspection after mechanical checks.

Wietse

Damit vollzieht Postfix den zweiten Versionssprung seit April 2002.

gestern

Diaspora Datenbank aufräumen (MySQL)

Permalink thomas-leister.de

Die Datenbank von meinem Diaspora* Server („Pod”) hat sich während des letzten Jahres ziemlich aufgebläht – da habe ich mir gedacht ich räume mal ein bisschen auf, denn die Posts, Kommentare und Likes des letzten Jahres interessieren mich nicht mehr. Also weg damit. Hier findet ihr die SQL Kommandos, um Posts, Likes und Kommentar aus dem Jahr 2014 und früher zu löschen. Ne nach Größe der Datenbank und Leistung des Servers kann das einige Sekunden dauern.

Posts löschen

Von allen Usern:

DELETE FROM `posts` WHERE `created_at` < '2015-01-01 00:00:00';

Nur Posts eines bestimmten Benutzers löschen:

DELETE FROM `posts` WHERE `diaspora_handle` = 'user@pod.de' AND `created_at` < '2015-01-01 00:00:00';

Likes löschen

DELETE FROM `likes` WHERE `created_at` < '2015-01-01 00:00:00';

Kommentare löschen

DELETE FROM `comments` WHERE `created_at` < '2015-01-01 00:00:00';

 

LibreOffice 4.4 unter Ubuntu installieren

Permalink raspitux

Heute ging die Meldung durch die Newsstreams, dass eine neue Version von LibreOffice veröffentlicht wurde. Mit der Version 4.4 wurden einige Bugfixes eingespielt und ein paar Funktionen aufpoliert. Der Augenmerk jedoch besteht in der neuen UI der Office Suite. Ein genauer Changelog kann
eingesehen werden.

In diesem Artikel möchte ich kurz darauf eingehen, wie man das aktuellste Update bereits vor der eigentlichen Verbreitung über die Repositorien erhält. Dazu müsst ihr euch erstmal die Dateien runterladen. Für x86 Systeme hier und für x64 Systeme hier.

Nun entpacken wir die .tar.gz Datei und öffnen den neu generierten Ordner. Darin befindet sich im Unterordner “DEBS” die einzelenen Installationsdateien.
Wir öffnen nun eine Terminalsession und navigieren zum entsprechenden DEBS Ordner. Mit dem folgenden Befehl können wir nun alle Abhängigkeiten und vorhandenen Pakete installieren.

sudo dpkg -i *.deb

Nach kurzer Zeit haben wir nun die aktuellste Version von LibreOffice auf unserem PC.

@CPU-Versteher: Neue CPUs langsamer als neue?!

Permalink Linux – AHA

xfce4-splash

Folgendes Szenario:

Server 1: HP DL380 G6, ca. 4/5 Jahre alt, mit 2x Xeon QuadCore X5570 @2.93GHz CPUs und DAS SAS Platten mit SmartArray Controller P410i 256MB Cache, SLES 10

Server 2: HP DL380p G8, 1 Jahr alt, mit 2x Xeon EightCore E5-2690 @2.90Ghz CPUs und DAS SAS Platten mit SmartArray Controller P420i 2GB Cache, SLES 10

Die Applikation sollte von Server 1 auf den vermeintlich schnelleren Server 2 umgezogen werden. Leider lief die Applikation dort um einiges langsamer. Vermutet wurden I/O Probleme durch den Raid Controller, zuerst einmal bestätigt durch einen simplen Test. Da die Applikation viel mit kleinen Dateien arbeitet testeten wir das ganze mit Hilfe einer while Schleife, die 20.000 Dateien erstellt, und stoppen die Zeit.

#!/bin/bash

i=1
anfang=`date`
sleep 1
while [ $i -lt 20000 ]
do
echo "Test nr. : $i"
cat ./quelldatei >$i.tst
i=`expr $i + 1`
done

ende=`date`

echo "Anfang: $anfang"
echo "Ende: $ende"

Die Quelldatei könnte dabei eine kleine Konfigdatei aus /etc sein oder sowas.

Server 1 braucht für diesen Test ca. 30 Sekunden. Server 2 braucht ca. 1:10 Min. Warum? Großer Cache, neue Maschine … Wir dachten der ArrayController macht Probleme, dass bspw. kleine Dateien nicht gecached werden oder sowas. Verschiedene Dateisysteme ausprobiert … immer das Gleiche. Große Dateien waren ok. Controller Einstellungen geändert, Firmware, anderes Betriebssystem …. alles nichts. Eine SSD eingebaut – gleiches Bild. Immer war die Vermutung der Raid Controller. Weitere Maschinen ausprobiert … Darunter ein DL980G7(!) mit dem gleichen Ergebnis. Bis heute morgen …

Ich habe das ganze auf einer tmpfs Partition (RAMDisk) versucht und auch dort war das ganze quasi gleich langsam. Damit ist der Raid Controller aus dem Spiel da er in keiner Weise involviert ist. Da ein Lieferant schon vor längerer Zeit von einem Kunden erzählte, der Probleme mit neueren CPUs und deren Performance für Datenbanken hat kam ich dann auf die Idee, dass es möglicherweise an der CPU hängt. Das ganze geprüft und auf anderen Server ausprobiert erhärtete die Vermutung. Auf den neuen Xeon E… läuft das ganze langsam und auf den “alten” X… läuft es schnell. Warum? Ich habe keine Ahnung.

@all: Probiert es doch mal auf Euren Systemen. Wie sieht das bei Euch aus? Habt Ihr eine Idee oder weitere Informationen die bei der Lösung helfen könnten? Bisher habe ich nur die Idee auf eine ältere Generation der Server zu setzen, was jedoch mit der Zeit nicht mehr möglich sein wird.

Die Erben von Opera

Permalink Pinguinzubehör

Opera-Alternativen gibt es inzwischen wieder einige. Neben Opera selbst stehen Otter und Vivaldi in den Startlöchern. Wer sich darüber freut, bald wieder wie einst mit Opera 12 durchs Netz zu düsen, dürfte sich jedoch wahrscheinlich zu früh freuen.

Opera gibt es inzwischen auch wieder für Linux, jedenfalls fast. Doch mit dem einstigen Browser für fortgeschrittene Anwender hat das heutige Opera nicht mehr viel zu tun. Es soll eine Variante von Google Chrome für den Massengeschmack sein, kein Nachfolger von Opera 12. Doch die Rechnung geht kaum auf, die Nutzer greifen offenbar lieber zum Original von Google. Für die einstigen Opera-Fans, die die Konfigurierbar- und Andersartigkeit, die vielen pfiffigen Ideen an Opera schätzen, ist das heutige Opera daher kein wirklich befriedigender Ersatz.

In die Lücke, die Opera 12 hinterlassen und die das neue Opera nicht wieder gefüllt hat, springen nun andere: Otter und Vivaldi. Ob die beiden Projekte je den Status erreichen werden, den Opera einmal hatte, steht noch in den Sternen. Der Otter-Browser, der auf Apples Webkit aufbaut, entwickelt sich nur langsam, es gibt bislang nur Entwicklerversionen und noch immer kein endgültiges Release. Auch Vivaldi, auf Blink aufbauend, hat quasi gerade erst angefangen, eine erste Vorschauversion wurde dieser Tage veröffentlicht.

Vivaldi vs. Otter

Vivaldi sieht schon jetzt auf den ersten Blick deutlich mehr nach Opera 12 aus als Otter. Die Symbole (u. a. mit Vor- und Rücklauf-Button) und die Paneele sorgen für diesen Eindruck. Sogar die Mausgesten funktionieren schon. Bei genauerer Betrachtung ist Otter jedoch näher dran an Opera 12. Manch Vertrautes aus alten Opera-Versionen ist bereits zu sehen und vor allem zu benutzen. Das merkt man an der Bedienung und in den Einstellungen. Während Otter z. B. bereits die F12-Schnelleinstellungen, den typischen Ladebalken am unteren Seitenrand und sogar eigene Proxyeinstellungen hat, sieht Vivaldi abgesehen von den Paneelen eigentlich noch sehr nach Chrome aus. Während Otter bei der Bedienung durchaus schon Opera-12-Feeling aufkommen lässt und sich dank Programmierung in QT besser ans jeweilige Betriebssystem anpasst und nativ aussieht, verhält sich Vivaldi – dessen Oberfläche mit Javascript realisiert wird – eher wie ein umdekorierter Chrome-Browser mit zusätzlichen Seitenleisten – und wirkt wie ein Fremdkörper im System. Auch ist die Vivaldi-Oberfläche viel träger als das Otter-Interface.


Aktuelle Betaversion des Otter-Browsers

Demgegenüber darf jedoch vermutet werden, dass es wieder eine echte E-Mail-Komponente im Vivaldi-Browser geben wird, das entsprechende Paneel ist schon enthalten. Sollte das der Fall sein, hätte Vivaldi tatsächlich einen echten Mehrwert gegenüber Chrome, Opera oder Otter. Otter wird sich vielleicht stärker konfigurieren lassen, Vivaldi wird, wenn der E-Mail-Client kommt, mehr Funktionalität bieten. Vivaldi könnte Opera dadurch tatsächlich beerben und der heimliche Nachfolger von Opera 12 werden. Denn dass die Otter-Macher ebenfalls noch einen Mailclient programmieren, erscheint unwahrscheinlich, auch wenn die Roadmap die zusätzliche Integration eines Mailmoduls vorsieht. Kurzfristig dürfte es, wegen des höheren Entwicklungstempos, daher Vivaldi gelingen, die alten Opera-Fans wieder glücklich werden zu lassen.


Erste Vorschauversion des Vivaldi-Browsers

Sofern das Otter-Projekt durchhält, hat es langfristig jedoch ebenso gute Chancen, da es als Open-Source-Projekt unabhängiger ist und mehr auf die Wünsche der Nutzer eingehen kann. Vivaldi wird zwar ebenfalls auf quelloffener Software aufgebaut, dürfte selbst wie auch Googles Chrome aber nicht als freie Software veröffentlicht werden. Vivaldi scheint damit schon jetzt denselben Fehler zu begehen wie sein Vorbild: Wäre Opera 12 Open Source gewesen, hätte die Neuausrichtung bei Opera Software nicht dessen Ende bedeuten müssen. Auch Vivaldi will Geld verdienen, Otter muss sich diesen Luxus nicht leisten – mit allen Vor- und Nachteilen. Denkbares Szenario wäre allerdings auch, dass man beim Otter-Browser die Lust verliert, wenn mit Vivaldi irgendwann wieder ein adäquater Opera-Ersatz bereitstehen sollte – ähnlich wie es etwa beim Arora-Browser zu beobachten war, der die Safari/Webkit-Technik auf Linux brachte, bevor Chrome durchstartete.

Begehrte Community

Die alte Opera-Community hat Vivaldi bereits zu retten versucht, indem es nach Schließung der My-Opera-Seiten ein Alternativangebot startete. Auch das ist bislang nur teilweise gelungen, zumindest die ehemalige deutsche Opera-Community bleibt zerschlagen, seit mit dem Tod des Betreibers von Opera-info.de das dortige Forum geschlossen wurde. Nur wenige folgten dem Vivaldi-Angebot, einige machten stattdessen unter dem Dach von Deskmodder.de weiter. Bei Opera selbst gibt es nach dem Abschalten der alten Foren keinen deutschsprachigen Bereich mehr.

Altes Team beim neuen Browser

Jon S. von Tetzchner, der ehemalige Opera-Chef, macht mit einer neuen Firma einfach dort weiter, wo er bei Opera einst aufgehört hat, und hat auch gleich einen Teil der ehemaligen Opera-Entwickler wieder um sich versammelt, die bei Opera entlassen wurden. Die alte Opera-Kompetenz befindet sich daher nun tatsächlich zum Teil bei Vivaldi. Allerdings wird keine eigene, neue Browser-Engine entwickelt, sondern ebenfalls auf Basis von Chrome programmiert. Etwas anderes bleibt auch kaum übrig, denn eine kleine Firma kann nicht einfach so eine neue Browser-Engine aus dem Boden stampfen und pflegen. Dazu braucht es Größen wie Microsoft, die Mozilla-Stiftung, damals für Opera die norwegische Telekom im Rücken – oder eben Google. Die Blink-Technik unter Federführung von Google begrenzt daher auch die Möglichkeiten, die der alte Opera (bis Version 12 mit eigener Technik) noch hatte. Einige Funktionen und Eigenheiten in Bezug auf die Webseitendarstellung, die es beim klassischen Opera gab, werden daher auch mit den beiden neuen Projekten Otter und Vivaldi nicht wieder zurückkommen. Für Rufe wie „Opera 12 ist wieder da“ ist es daher etwas verfrüht. Vielleicht wird in Zukunft wieder ein Stand erreicht, der dem alten Opera recht nahekommen wird – jedenfalls in der Optik und Bedienung. Aber auch dann werden die Browser im Kern Chrome-Varianten bzw. Webkit/Blink-Browser bleiben.

Das Linux unter den Browsern

Chrome bzw. die dahinterstehende Blink-Engine entwickelt sich gewissermaßen immer mehr zum Linux unter den Browsern: Gefühlt alle paar Tage kommt ein neuer Browser auf den Markt, in leicht veränderter Zusammenstellung, aber irgendwie doch immer Chrome. Die Rolle, die Mozilla früher einmal spielte, aber dann aus freien Stücken aufgab, wird nun von Google übernommen. Echte Alternativen sind nur noch Internet Explorer bzw. künftig Spartan und Mozilla. Für Linux bedeutet das: Vordergründig viel Auswahl, letztlich aber nur zwei Möglichkeiten, das Internet anzeigen zu lassen: mit Gecko oder Webkit/Blink.

Aber das ist neu: Sowohl Vivaldi als auch Otter richten sich bewusst an die „Power-User“, die wissen, was sie tun und wie sie es tun wollen – und Wert auf Konfigurierbarkeit auch in der Standardausstattung legen. Etwas, was außer Seamonkey kein anderer Browser mehr bot. Es gibt damit künftig wieder Alternativen für Fortgeschrittene, die sich nicht erst den Browser mit Erweiterungen zustopfen wollen, um einen guten Workflow zu erreichen. Dem Trend, dass die Browser immer eintöniger und stromlininenförmiger wurden, wird wieder etwas entgegengesetzt.

Wie geht’s weiter?

Abzusehen ist bereits jetzt, dass Otter im Detail etwas näher am alten Opera-12-Verhalten dran sein und dessen Linie fortführen wird – Vivaldi wird sich wohl freier am alten Opera orientieren, die alte Kernfunktionalität bzw. die wichtigsten alten Opera-Features und -Komponenten wiederherstellen, sich ansonsten aber progressiver weiterentwickeln und auch neue Funktionen implementieren. Vivaldi tritt als Unternehmen professionell auf und steckt schon jetzt viel Aufwand in PR. Die alte Opera-Community zu hofieren und nicht kampflos aufzugeben war dabei ein geschickter Schachzug. Otter ist unauffälliger, macht kein Marketing und kommt mit dem Charme eines Entwicklerprojekts daher, hat aber ebenfalls bereits eine kleine Fangemeinschaft um sich geschart. Nichtkommerzieller Open-Source-Otter gegen kommerziellen Closed-Source-Vivaldi. Es wird spannend, was am Ende dabei herauskommen wird.

28. Januar 2015

Mozilla stellt Tor Middle Relays bereit

Permalink Sören Hentzschel

Die im November bekannt gegebene Partnerschaft zwischen Mozilla und dem Tor-Projekt trägt erste Früchte: Mozilla stellt nun erste Tor Middle Relays bereit.

Am 10. November feierte Mozilla den zehnten Geburtstag von Firefox. Großes Thema an diesem Tag war die Privatsphäre. In diesem Zusammenhang hat Mozilla die Privatsphäre-Initiative Polaris und damit verbunden eine Partnerschaft mit dem Tor-Projekt angekündigt. Heute war die Privatsphäre wieder ein großes Thema: Anlässlich des heutigen Data Privacy Days hat Mozilla nicht nur eine neue Datenschutz-Webseite online gestellt und gemeinsam mit anderen Firmen wie DuckDuckGo einen Privatsphäre-Chat über Twitter abgehalten, sondern auch den Start der ersten eigenen Tor Middle Relays bekannt gegeben. Zum Einsatz kommen zwei Juniper EX4200-Switches und drei SL170zG6-Server von HP mit jeweils zwei Xeon L5640-CPUs, 48 GiB RAM und zwei 1 Gbit/s-Netzwerkkarten. Zwei 10 Gbit/s-Leitungen binden die Tor-Relays an das Internet an. Der vollständig redundante Aufbau des Systems sorgt dafür, dass selbst im schlechtesten Fall (Wartungsarbeiten oder ungeplanter Ausfall) mindestens 50 Prozent der Kapazität zur Verfügung stehen. Weitere technische Details hat Mozilla auf seinem IT-Blog bekannt gegeben. Eine Liste der Mozilla-Relays gibt es hier.

Opera weiterhin nicht für Linux verfügbar

Permalink Pinguinzubehör

Die IT-Newsseiten pfiffen es von den Dächern: Opera gibt es seit einiger Zeit nun auch wieder für Linux. Nachdem es Opera in der Linuxvariante bislang nur als Betaversionen gab, gehört seit der Veröffentlichung von Version 26 Linux nun wieder zu den unterstützten Systemen.

Wo also liegt der Fehler? Strenggenommen gibt es weiterhin keine Linux-Version von Opera – nur eine Ubuntu-Version. Denn anders als gedacht wird Opera offiziell nur noch für Ubuntu und seine Derivate bereitgestellt. Streng genommen gibt es damit nicht einmal für Debian ein offizielles Paket. Ganz bewusst konzentriert sich Opera Software auf diese Distribution(en) und stellt lediglich ein DEB-Paket bereit. Vorbei die Zeiten, als Opera als DEB-, RPM- und TAR-Paket zur Verfügung stand und für alle Distributionen angeboten wurde.

Wegen fehlender Abhängigkeiten läuft Opera nicht einmal auf dem aktuellen Debian 7 stable. Das Linux-Opera läuft daher wirklich nur auf Ubuntu, dessen Variationen und seinen Ablegern wie Linux Mint – und wenn der Rechner halbwegs aktuell ist. Denn damit noch nicht genug; wer Ubuntu & Co. lediglich in der 32-Bit-Version installiert hat, bleibt ebenfalls außen vor und soll weiterhin Opera 12 benutzen. Den neuen Opera gibt es nur noch als 64-Bit-Variante. Nur für Windows werden weiterhin auch 32-bittige Browser zur Verfügung gestellt.

fast leeres Opera-FTP-Verzeichnis
Eine einsame Operaversion für die komplette Linuxlandschaft

Das ist wenigstens konsequent: Opera will nun Mainstream-Browser sein und richtet sich daher auch nur an die Mainstream-Distributionen, bei denen die meisten Anwender vermutet werden. Generös wird gestattet, das Ubuntu-DEB-Paket für andere Distributionen umzupacken – doch der Quellcode wird nicht bereitgestellt. Opera bleibt wie Chrome ein proprietärer Browser, auch wenn er weitgehend auf Open-Source-Technik aufbaut. Opera lässt die Arbeit die Distributionen bzw. einen seiner Entwickler in dessen Freizeit machen. Für entsprechend wenige Distributionen ist Opera daher bislang verfügbar.

Auch das nun separate Mailprogramm, das eigentlich nur eine kastrierte Opera-12-Suite ohne Webbrowserkomponente ist, wird nicht für Ubuntu bereitgestellt, dieses Privileg haben weiterhin nur Windows- und Macnutzer. Den Linuxern wird in den Opera-Foren stattdessen ernsthaft empfohlen, das alte Opera parallel zu installieren oder die Windowsversion von Opera Mail mit Hilfe von Wine laufen zu lassen.

Geringstmöglicher Aufwand für maximal mögliche Reichweite – es darf bezweifelt werden, ob Opera damit bei den Linuxern noch einmal einen Fuß in die Tür bekommt. Die alten Opera-Fans bekommen keinen würdigen Nachfolger – und der Rest ist mit Chrome oder Chromium wohl besser bedient. Opera für Linux? Leider nicht mehr als eine Ahnung dessen, was Opera früher einmal war. Ein ernstzunehmender Linuxbrowser ist Opera damit nicht mehr. Selbst Fast-ein-Mann-Projekte wie Qupzilla sind wie selbstverständlich für verschiedene Distributionen und Architekturen erhältlich. Das ist für ein börsennotiertes Unternehmen wie Opera ein Armutszeugnis.

Opera 12 gibt es weiterhin zum Download, und er kann sogar parallel zum aktuellen Browser installiert und betrieben werden, es gibt weiterhin Sicherheitsaktualisierungen für dieses Release. Wie lange noch, ist jedoch fraglich. Technisch allerdings ist Opera 12 schon längst veraltet und kann mit der Seitendarstellung von aktuellen Firefüchsen, Chromes und Explorern nicht mehr mithalten. Die neuesten CSS- und HTML-Spezifikationen werden in Opera 12 nicht mehr umgesetzt. Früher oder später werden sich daher auch die treuesten Opera-Anhänger einen anderen Browser suchen müssen.

Auf Desktop-Linux-Nutzer ist man bei Opera nicht mehr angewiesen, das hat bereits die monatelange Vernachlässigung gezeigt, als es keine aktuelle Version gab, während für Mac und Windows fleißig eine Version nach der nächsten erschien. Es wirkt, als würde Linux nur alibihaft unterstützt werden, um zumindest auf dem Papier multiplattformfähig zu sein – und weil Chromium ohnehin schon auf Linux läuft. Echtes Linuxengagement sähe jedoch anders aus. Damit bleibt Opera für Linux recht unattraktiv – de facto ein mit zusätzlicher Werbung zugepflasterter Chrome, der sich umständlich installieren lässt.

GHOST: Patcht die Systeme, glibc ist angreifbar

Permalink debinux

Wenn noch nicht geschehen, ist es an der Zeit für ein Upgrade der “glibc”(GNU C Library).

Einige Informationen dazu finden sich hier.

During a code audit performed internally at Qualys, we discovered a
buffer overflow in the __nss_hostname_digits_dots() function of the GNU
C Library (glibc). This bug is reachable both locally and remotely via
the gethostbyname*() functions, so we decided to analyze it — and its
impact — thoroughly, and named this vulnerability “GHOST”.

Es ist durchaus möglich Software im Einsatz zu haben, die von außen angreifbar ist.

Betroffen sind zudem nur ältere Versionen von “libc”, was Debian Wheezy leider angreifbar macht.

Angreifbarkeit testen

Wie im Security Advisory zu lesen, stellen die Erkunder von GHOST einen Code bereit, um die Angreifbarkeit zu testen:

Programm schreiben:

cat > GHOST.c << EOF
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

#define CANARY "in_the_coal_mine"

struct {
char buffer[1024];
char canary[sizeof(CANARY)];
} temp = { "buffer", CANARY };

int main(void) {
struct hostent resbuf;
struct hostent *result;
int herrno;
int retval;

/*** strlen (name) = size_needed - sizeof (*host_addr) - sizeof (*h_addr_ptrs) - 1; ***/
size_t len = sizeof(temp.buffer) - 16*sizeof(unsigned char) - 2*sizeof(char *) - 1;
char name[sizeof(temp.buffer)];
memset(name, '0', len);
name[len] = '\0';

retval = gethostbyname_r(name, &resbuf, temp.buffer, sizeof(temp.buffer), &result, &herrno);

if (strcmp(temp.canary, CANARY) != 0) {
puts("vulnerable");
exit(EXIT_SUCCESS);
}
if (retval == ERANGE) {
puts("not vulnerable");
exit(EXIT_SUCCESS);
}
puts("should not happen");
exit(EXIT_FAILURE);
}
EOF

Programm bauen:

gcc GHOST.c -o GHOST

Programm ausführen:

./GHOST

Automatische Sicherheitsupdates

Das Paket “unattended-upgrades” kümmert sich zuverlässig um die automatische Installation sicherheitsrelevanter Patches:

apt-get install unattended-upgrades

Abschließend scharf schalten:

dpkg-reconfigure unattended-upgrades

27. Januar 2015

Freifunk als Gäste-WLAN

Permalink [ENC]BladeXP's Blog

Schon seit längerer Zeit möchte ich in meinen eigenen vier Wänden ein richtiges Gäste-WLAN implementieren. Ziel war es das meine Gäste ohne großen Aufwand die wichtigsten Online Dienste (Soziale Netzwerke, Instant Messaging, …) nutzen können, ohne dabei direkt Teilnehmer meines eigenen Netzwerkes zu sein.

Durch die aktuell noch vorhandene Anbieterstörhaftung ist man als Betreiber eines WLANs (unabhängig davon ob offen oder nicht), für Dinge verantwortlich die über einen Anschluss passieren. Zwar möchte ich meinen Gästen nichts Böses unterstellen, doch sind Themen wie Maleware und Botnetze kein Neuland mehr.

Zusammengefasst gibt es also 3 Faktoren, die für eine Technik erforderlich sind. Das wäre zum einen die Usability und zum anderen die Sicherheit sowohl aus der rechtlichen als auch von der technischen Perspektive. Da ich den Aufwand einer eigenen Infrastruktur vermeiden wollte, habe ich mich für Freifunk Franken entschieden.

An Kosten sind mir so ca. 75€ für insgesamt 3 TP-Link WRT841ND v9 angefallen. Diese wurden direkt nach der Ankunft mit der entsprechenden Firmware meiner Freifunk Community ausgestattet. Da Freifunk ein VPN (entweder über Berlin oder übers Ausland) nutzt, habe ich kein Problem mit den Dingen, welche über dieses offene WLAN passieren. Gleichzeitig sorgt Freifunk für eine saubere Trennung der beiden Netze und das lästige Buchstabieren von 20-stelligen Passwörtern kann ebenfalls entfallen.

DNS für Entwickler

Permalink Unerklärliches am Rande

Als Webentwickler gerät man schnell in die Problematik das geschriebene Markup auf Tablets, Telefonen, TV Geräten usw. zu prüfen.  Ich schreibe eigentlich immer an mehreren Projekten gleichzeitig und löse das durch Subdomains auf localhost. Klappt auch ganz gut, aber spätestens wenn ich in oben genannte Situation komme oder ein Kollege nen Blick von seiner Maschine drauf werfen will wird es schnell doof.  Ein Dienst der Aussagen wie “Geh auf http://dev.michael.irgendwas!” ermöglicht muß her.

In meinem Fall lautet die Lösung dnsmasq – ein im Vergleich zu bind9 sehr einfach zu konfigurierender DNS Dienst.

Dnsmasq löst dev.michael.office bis michael.office auf. Das dev erledigt meine Maschine. Das hat den Vorteil, daß man nicht für jede neue Subdomain und jeden neuen Entwickler die Config anpassen muß.

Zuerst wird im Router ein weiterer DNS Server eingetragen – in einem meiner Fälle ein Raspberry Pi. Auf der Kiste wird nach der Anleitung im Ubuntuusers Wiki dnsmasq installiert.

Die Konfiguration ist wirklich simpel.

Zuerst in der /etc/hosts auf dem dnsmasq server die domains auflösen

#......
#Ip                         Domainname             Machine 
192.168.0.105               dns.office		   this
192.168.0.104	            michael.office         michael's machine
192.168.0.104	            hans.office            hans machine

Um alle Domains die hintendran oder davor hängen (kommt auf die Leserichtung an:-) ) muß noch eine Regel erstellt werden.

Die Konfiguration meiner Kiste auf dem dnsmasq server

pi@funkybert ~ $ cat /etc/dnsmasq.d/thinkpad 
address=/.thinkpad.home/192.168.0.104

Der Rest der Domain wird lokal aufgelöst:

ms@w530 ~ $ cat /etc/hosts
 
#.........
127.0.1.1 dev.michael.office

 

Zum Debuggen ist das Tool dig sehr zu empfehlen.

ms@w530 ~ $ dig michael.office

Zeigt wie die Domain aufgelöst wird.

ms@w530 ~ $ dig michael.office @192.168.0.105

Zeigt wie die Domain von dem DNS Sever unter 192.168.0.105 aufgelöst wird.

Neuer Browser Vivaldi

Permalink (Mer)Curius

Als Opera sich vor einiger Zeit selbst abschaffte bzw. zu einem Chromium-Addon verkam, war das für viele Nutzer ein herber Schlag. Zwar gibt es (Open Source) Browser wie Sand am Meer, vor allem seitdem mit WebKit ein funktionsfähiger Unterbau existiert. Wirklich gute Browser, die auch auf komplexen Seiten bestehen, sind aber viel zu selten. Mit Opera ging ein Pionier verloren, der oft neue Funktionen etabliert hatte und viele Dinge anders machte, als die anderen Browser.

Nun haben einige ehemalige Opera-Entwickler rund um den ehemaligen CEO einen neuen Browser vorgestellt: Vivaldi. Berichte dazu gibt es in der IT-Einheitspresse zur Genüge (Caschys Blog, Heise, Golem folgt sicher noch)

Als Unterbau setzt man auf Googles WebKit-Fork Blink, was erstmal natürlich keine schlechte Wahl ist. Pakete stehen auch für Linux bereit, damit macht man schon mal etwas besser als die Opera-Entwickler nach dem Abschied von der 12er Version.

Mein erster Test war allerdings schwer enttäuschend. Unter Windows >8 mag der Browser ganz ansehnlich sein, unter Linux fügt es sich überhaupt nicht in das Gesamtbild ein. Damit treibt Vivaldi einen allgemeinen Trend auf die Spitze. Anstatt sich in das Betriebssystem zu integrieren, wollen die Browserhersteller plattformübergreifende Ähnlichkeit erzeugen und gerieren sich deshalb wie Betriebssysteme im Betriebssystem – etwas überspitzt gesagt. Das sieht man bei Firefox Designsprache seit Australis, aber auch in Googles Chrome. Die Idee dahinter ist mutmaßlich, dass der Nutzer den Browser nicht mehr verlassen will und alles in ihm erledigt. Möglicherweise auch über integrierte Dienste über die sich wiederum Einnahmen genieren lassen.

Mein Fall ist das nicht. Ein Browser sollte sich optisch und funktional in das Betriebssystem integrieren und die Navigation im Internet ermöglichen. Nicht mehr und nicht weniger. Unter Linux ertrage ich mangels wirklicher Alternativen zur Zeit Firefox, aber Qupzilla und Midori haben das Potenzial hier bald einen Wechsel zu ermöglichen. Unter Windows greife ich am liebsten zum Internet Explorer.

So wird das meiner Ansicht nach mit Vivaldi nichts. Aber vielleicht schlägt das Projekt hier noch eine andere Richtung ein. 20 Mitarbeiter soll die Firma zur Zeit haben. Das ist mehr als 90% der Konkurrenten auffahren können und sollte ein ansehnliches Entwicklungstempo ermöglichen.

Google Authenticator als PAM-Modul im OpenSSH-Server

Permalink debinux

Die Umgebung

Folgendes Setup ist für diesen Artikel angedacht:

  • Logins sind nur schlüsselbasiert möglich.
  • Wurde Google Authenticator für einen Benutzer eingerichtet, muss es verwendet werden
  • Liegt kein Google Authenticator Profil für einen Benutzer vor, funktioniert der Login auch weiterhin mit Private Key

Am Ende noch ein kleiner Hinweis für die, die es lieber ohne Schlüssel “tun”. :-)
Nachdem wir geschätzt 10³ Artikel zu diesem Thema gelesen haben, versuche ich es etwas zu individualisieren, da in den Kommentaren immer die selben Fragen auftauchten.

Einrichtung

Ab Debian Jessie ist das Google Auth. PAM-Modul auch im offiziellen Repository Debians enthalten.
Das Modul ist nicht neu und sollte inzwischen in vielen Distributionen angekommen sein.
Für Ubuntu/Debian:

apt-get install libpam-google-authenticator

Das PAM-Modul kann nicht nur theoretisch, sondern auch praktisch in jedem Dienst Anwendung finden, der im Verzeichnis /etc/pam.d/ hierfür hinterlegt ist.
Für die erweiterte SSH-Authentifizierung, bearbeite ich zuerst die Datei /etc/pam.d/sshd.
Direkt am Anfang, sprich in erster Zeile, das Folgende einfügen:

/etc/pam.d/sshd:

auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok

Dieser Eintrag bewirkt, sollte der Google Authenticator für den Benutzer eingerichtet sein, dass dieser unbedingt zu benutzen ist.
Wurde der Authenticator nicht eingerichtet, kann der Benutzer sich trotzallem anmelden, da “nullok”.

“@include common-auth” wird übergangen, da vorher schon der Wert “success=done” für “auth” zurückgegeben wird.
Ohne “success=done” (zum Beispiel “success=ok”), würde zusätzlich die Passwortabfrage greifen (angenommen es ist in der SSHd-Konfiguration erlaubt!).

In der Konfigurationsdatei des OpenSSH-Servers /etc/ssh/sshd_config werden unten stehende Änderungen vorgenommen.

/etc/ssh/sshd_config:

# Auch wenn das Einloggen als root-Benutzer nur mit einem Private Key + Google Auth.
# möglich sein soll, muss dieser Eintrag "yes" und nicht "without-password" lauten. 
# Kein root-Login erwünscht? Dann "no".
PermitRootLogin yes 

# Das Google Auth. Modul arbeitet als "Challenge" zwischen User und SSHd, daher "yes".
ChallengeResponseAuthentication yes 

# Zuerst einen Key anfordern, danach den Bestätigungscode des Google Auth. eingeben lassen.
AuthenticationMethods publickey,keyboard-interactive:pam

# Standardeinstellung, jedoch noch einmal erwähnt, da wichtig.
UsePAM yes 

Beispielhaft eingeloggt als Benutzer “root”, möchte ich ein Google Authenticator Profil erstellen.
Ich habe mich dazu entschieden, den Vorgang mit Kommentaren zu versehen.

root@testing1:~# google-authenticator

# Ein zeitbasierter Code ist in der Regel erwünscht.
# Der Code muss also dann eingegeben werden, wenn er in der App als gültig angezeigt wird (etwa 30 Sekunden, die Dauer zeigt die App an!).
# Alternativ ist ein Code "counter-based", also abhängig davon, wie oft er verwendet wurde.
Do you want authentication tokens to be time-based (y/n) y

# An dieser Stelle erscheint ein Link und ein großer QR-Code. Der Link führt zum selben QR-Code, wie er schon auf dem Bildschirm sichtbar ist.
# Der QR-Code kann mit der App gescannt werden, so wird die Identität des Servers (der Schlüssel) automatisch hinterlegt.

https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@testing1%3Fsecret%3DMAI3Y7D5I6OLN3GS

[Abbildung QR-Code]

# Hier steht noch einmal der Schlüssel ("secret key"), der auch manuell in der App eingetragen werden kann. 
# Der "verification code" kann ignoriert werden.
# "emergency scratch codes" sind Einmal-Passwörter, die im Notfall angewendet werden können. Sie werden gelöscht, wenn ihr sie verwendet habt!
Your new secret key is: MAI3Y7D5I6OLN3GS
Your verification code is 756076
Your emergency scratch codes are:
  78313137
  36795830
  93407500
  10713953
  85166290

# Das Google Authenticator Profil für den aktuellen Benutzer ablegen? Ja!
Do you want me to update your "/root/.google_authenticator" file (y/n) y

# Einmal verwendet, muss bis zum nächsten Code gewartet werden (~30s), um sich noch einmal einzuloggen.
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

# Die App auf dem Handy muss zeitsynchron mit den Google Servern laufen, damit der angezeigte Code auch wirklich dann gültig ist, wenn ihr ihn seht!
# Meiner Meinung nach sind 90 Sekunden eine ausreichend große Abweichung, ansonsten "y" für 240 Sekunden eingeben.
By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n

# Ist nicht verkehrt, selbst wenn ein Brute-Force Schutz bereits besteht: 3 Versuche in 30 Sekunden. 
If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y

Den Dienst anschließend neustarten…

service ssh restart

Und in einer zweiten SSH-Session die Verbindung testen! Bitte haltet immer ein Terminal auf, um euch nicht auszusperren.

…und ohne Schlüssel?

Wer schlüsselbasierte Authentifizierung doof findet, dem sei trotzallem eine Hilfestellung gegeben:

Wie erwähnt wird “done” durch “ok” ersetzt, um die nächste “auth” Überprüfung NICHT zu überspringen:
/etc/pam.d/sshd:

auth [success=ok new_authtok_reqd=done default=die] pam_google_authenticator.so nullok

Es gilt Gleiches “wie mit”, außer…
/etc/ssh/sshd_config:

PasswordAuthentication yes
AuthenticationMethods keyboard-interactive:pam

26. Januar 2015

Verschluesselung

Permalink yhaupenthal.org – Yannic Haupenthal

Verschluesselung bzw. Sicherheit in der IT fand ich schon immer interessant, so habe ich z.B. auch den beiden Vorlesungen Cryptography und Security an der Uni beigewohnt.
Demnach ist mein Beduerfnis danach recht hoch.

Es ist dann immer wieder erstaunlich, was ausserhalb der Security-Blase abgeht ..
Hier einige Beispiele.

  • Drucker
    Drucker im Netzwerk mit einem Passwort zu sichern (und damit den Adminzugang) macht gerade in einer Firma viel Sinn. Traurig ist es dann nur, wenn ein 20-stelliges Passwort mit Sonderzeichen den Drucker zum Absturz bringt, und erst ein Hardware-Reset ihn wieder zum funktionieren bringt ... Das angenommene Passwort (es gab natuerlich keine Auskunft ueber Laenge und Auswahl der Zeichen), welches den Drucker nicht zum Absturz brachte war ein 8-stelliges alphanumerisches Passwort ...
  • WLAN-Router
    aehnlich zum Drucker hatte ich auch hier Probleme mit der Zeichenbeschraenkung. Und auch hier macht es eigentlich Sinn, ein gutes Passwort zu verwenden, wenn nicht schon das WLAN-Passwort sicher genug ist, als Sicherheitsstandard WPA2 eingesetzt wird und die SSID verborgen ist.
    Ich glaube es war ein Router von Kabel Deutschland, jedenfalls brachte ich auch diesen mit einem 20-stelligen Passwort mit Sonderzeichen zum Absturz. Abhilfe schaffte ein 10-stelliges alphanumerisches Passwort ...
    Und auch hier habe ich wieder keine Dokumentation gefunden. Coole Menschen haben aber einige Informationen zum System in einem Repository auf GitHub zusammengetragen.
    Und gerade ist mir aufgefallen, dass das Klartext Passwort nach dem Anmelden in einem Cookie gespeichert wird. Toll ist auch "passwordhaha":$('#user_password').val() im Quellcode der Anmeldeseite (http://kabel.box/).
  • Websites
    Super sind auch einige Websites mit ihrer Passwortpolitik. Einen Rant darueber hat Meillo geschrieben.
    Das hat mich auch schon super oft genervt. Beschraenkungen bei Passwoertern ist ein No-Go und deutet auf eine schlechte Verschluesselung hin (z.B. Klartext). Bei Heise oder in diesem Artikel wird beschrieben, wie Passwoerter gut & sicher gespeichert werden koennen (Schlagworte: Salt, Pepper, bcrypt/PBKDF2, SHA-2/SHA-3), und zwar am Besten weder im Klartext, noch mit MD5 ...
  • LDAP an der Uni
    Jedes Semester mussten alle Studierenden an der Uni ihre Passwoerter aendern. Aber auch hier gab es eine Begrenzung: acht (alphanumerische?) Zeichen. Zu diesem No-Go gab es dann noch folgendes "Feature": Stimmte ein Teil des neuen Passworts mit einem Teil des alten Passworts ueberein, konnte das Passwort nicht geaendert werden. Und sowas kann nur ueberprueft werden, wenn das Passwort im Klartext gespeichert wird ... m(
  • nochmal WLAN-Router
    Ich kam auf meinem Weg durch Teile von Indien mit verschiedenen WLAN-Routern (9 an der Zahl) in Kontakt. Fuenf davon nutzten immerhin den WPA2-Standard, ein Router WEP (bitte nicht nutzen!) und drei keine Verschluesselung (gar nicht erst in Erwaegung ziehen!) zur Anmeldung. Leider war unter den dreien auch ein Hotel ...
    Jedenfalls: der eine Router ohne Verschluesselung fiel dauernd aus. Weil ich das super nervig fand, tippte ich einfach mal die IP-Adresse des Routers (192.168.1.0) ein und gelangte zu einem Login. Ich erriet den Namen und das Passwort zum Anmelden beim ersten Versuch (admin/admin) und startete den Router mit anderen Einstellungen neu, und konnte erfolgreich surfen ;)
    Also auch hier ein Hinweis: nicht nur ein gutes Passwort zum Einloggen ins WLAN verwenden, sondern auch das Standardpasswort vom Router aendern ;)

Ich koennte noch einige Zeit so weitermachen, aber ich glaube, ihr wisst, was ich meine ;)

Mozilla veröffentlicht Firefox 35.0.1 und korrigiert Fehler

Permalink Sören Hentzschel

Mozilla hat das erste außerplanmäßige Update für Firefox 35 veröffentlicht. Firefox 35.0.1 korrigiert diverse Fehler.

Mit dem Update auf Firefox 35.0.1 bessert Mozilla an mehreren Stellen aus. Die neue Version beinhaltet einen spekulativen Bugfix für eine mögliche Absturzursache bei Programmstart, behebt außerdem einen durch die Erweiterung Enhanced Steam ausgelösten Absturz sowie eine Instabilität in der Editor-Komponente, welche unter anderem auf Godaddy Webmail oder beim Bearbeiten von Wikipedia-Artikeln Abstürze von Firefox verursachen konnte.

Darüber hinaus wurden Probleme in Zusammenhang mit der Content Security Policy (CSP) behoben, welche bei Verwendung von Großbuchstaben im Pfad zu fälschlicherweise blockierten Elementen führen konnten, außerdem wurde document.baseURI nicht korrekt zu document.location aktualisiert, wenn das base-Tag aus dem DOM entfernt worden ist.

Ebenfalls behoben wurde ein Problem mit Netzwerk-Aliases, was unter anderem dazu führte, dass eine Kerberos-Authentifizierung nicht länger möglich war, ein Problem mit dem Rendering von SVG-/CSS-Animationen für Nutzer von Apple OS X, welches unter anderem auf der Firefox Landig-Page und auf OpenStreetMap aufgetreten war, sowie ein Problem mit der Textauswahl in der Adressleiste von Firefox in Sprachen, in denen von rechts nach links geschrieben wird, sowie bei installierten Themes. Dort konnte es passieren, dass statt Text auszuwählen das Fenster verschoben wurde.

25. Januar 2015

HabitRPG: Installation, Wartung, Tipps

Permalink yhaupenthal.org – Yannic Haupenthal

In einem anderen Beitrag habe ich beschrieben, was HabitRPG ist und wozu und warum ich es nutze. Hier folgt nun eine detaillierte Beschreibung, wie HabitRPG lokal zum Laufen gebracht werden kann.

Die Gruende, warum ich HabitRPG lokal und nicht auf der normalen Website nutze:

  • es sind alles private Daten, die ich nicht in fremden Haenden sehen will (Stichwort: Datenschutz)
  • weil ich auch ohne Geld zu spenden die Features nutzen kann (Hintergruende, Quests, usw.)
  • und ... weil ich es kann ;)

Ok, los gehts! :)

Anleitungen fuer die lokale Installation mit Hilfe von Vagrant und unter Ubuntu befinden sich im Wiki von HabitRPG. Die Anleitung fuer Ubuntu gibt schon einige Sachen vor, aber ich will die einzelnen Schritte etwas genauer und an Arch Linux angepasst auflisten.

HabitRPG lokal aufsetzen

HabitRPG benoetigt im Hintergrund eine Datenbank, wobei sich hier fuer MongoDB entschieden wurde. Zudem basiert es unter anderem auf Node.js und die Menschen hinter HabitRPG haben ihren Code bei GitHub liegen. Also installieren wir erstmal die MongoDB, Node.js und Git mit folgendem Befehl (Quelle MongoDB):

# pacman -S mongodb nodejs git

Danach starten wir MongoDB (und lassen es optional bei jedem Systemstart starten).

# systemctl start mongodb
# systemctl enable mongodb # optional, startet MongoDB mit dem Systemstart

Nun koennen wir den Code von GitHub beziehen und wechseln anschliessend in das neue Verzeichnis, welches auch spaeter noch in einen anderen Ordner verschoben werden kann:

$ cd ~
$ git clone https://github.com/HabitRPG/habitrpg.git
$ cd habitrpg

Der Branch (Zweig) von Git sollte develop sein, das testen wir mit:

$ git branch

Der aktuelle Branch hat ein Stern (*) vor dem Namen. Wenn es nicht develop ist, wechseln wir in diesen Branch:

$ git checkout develop

Mit dem Paketmanager npm von Node.js installieren wir nun global (mit -g) grunt-cli und bower, daher folgendes mit Root-Rechten ausfuehren:

# npm install -g grunt-cli bower

Normalerweise sind die Rechte nun falsch gesetzt, daher passen wir die an, damit auch Leute ohne Root-Rechten die Programme nutzen koennen:

# chmod -R 755 /usr/lib/node_modules/grunt-cli /usr/lib/node_modules/bower

Mit npm installieren wir jetzt noch die restlichen Abhaengigkeiten:

$ npm install

Wir sind fast fertig, es fehlt nur noch die Anpassung der Konfigurationsdatei. Dazu kopieren wir die Beispiel-Konfigurationsdatei:

$ cp config.json.example config.json

Und aendern das SESSION_SECRET in config.json, z.B. mit pwgen (ggf. mit pacman -S pwgen installieren). Der Rest der Datei kann so belassen werden.

$ pwgen -s 50 1

Die Datenbank sollte jetzt schon laufen (siehe oben, evtl. ueberpruefen mit systemctl status mongodb), also starten wir die Anwendung:

$ npm start

Im Browser rufen wir nun http://localhost:3000 auf. HabitRPG sollte nun dort zu sehen sein :)

Nun koennen wir uns anmelden (auf Play klicken und unter Register anmelden), oder ein schon vorhandenes Konto beim offiziellen HabitRPG exportieren und in der lokalen Instanz importieren. Die Anleitung dafuer befindet sich weiter unten.

HabitRPG updaten

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

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

    $ cd /path/to/habitrpg
    $ git pull origin develop
    
  • ggf. Pakete aktualisieren

    $ npm install
    
  • ggf. Migrationen vornehmen: sollte bei git pull origin develop Dateien im Ordner migrations dazugekommen sein, muessen diese in der richtigen Reihenfolge (nach Datum) angewendet werden, begonnen mit der aeltesten. Es gibt dabei drei moegliche Aufrufe (je nach Datei, leider hilft da nur testen/lesen) (Quelle):

    $ mongo habitrpg ./migrations/20150125_bla.js
    

    Funktioniert das nicht, sollte ein Fehler kommen. Entweder wird was required, dann rufen wir dieses Modul einfach mit auf:

    $ mongo habitrpg ./node_modules/modul/modul.js ./migrations/20150125_bla.js
    

    Oder es hilft alles nichts, und wir fuehren es einfach mit node aus (da sollten die Requirements erfuellt werden):

    $ node migrations/20150125_bla.js
    
  • 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 HabitRPG im Produktivmodus laufen lassen (bisher lief es im Entwicklungsmodus). Update (2015-01-25): Laut paglias sollte HabitRPG nicht im Produktivmodus laufen, da zu viele externe Dienste eingebunden werden, die nur in der offiziellen Version benutzt werden. Dadurch failt in der lokalen Variante auch so vieles. Nutzung daher auf eigene Gewaehr.

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). oben beschrieben.
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 ;)

Update (2015-01-25): Ich hatte noch ein Problem mit dem Produktivmodus, den Bug und meinen Fix hab ich hier beschrieben (Quelle).

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 (Quelle):

    > 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.

Meine 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 ;)

Zudem gibt es ja noch die mobile Variante, mit der ich dann auch auf meine eigene HabitRPG-Instanz zugreifen koennte. Da hab ich mich allerdings noch nicht drangewagt.

Neues Gewand für 2015

Permalink DevDiary

Ich habe, auf der Basis von den alten Farben, ein neues Gewand für meinen Blog geschneidert. Dafür habe ich als Basis das Theme Twenty Fifteen von WordPress genommen. Somit ist es wesentlich einfacher, neue Elemente oder Updates einzuspielen. Falls ihr Vorschläge für Verbesserungen habt, könnt ihr mir dies über die Kommentarfunktion mitteilen.

Es gibt zwar noch ein paar Stellen, die ausgebessert werden müssen, jedoch wird dies recht schnell vonstatten gehen. Ich werde in einem späteren Artikel zeigen, wie man sich so ein Theme selber basteln kann.

Papierloses Büro mit Linux

Permalink (Mer)Curius

Das so genannte papierlose Büro ist der nächste heiße Trend seit Jahren, damit hat es was mit Linux auf dem Desktop gemein. Die Wahrscheinlichkeit, dass es sich im Beamtenland Deutschland flächendeckend durchsetzt, kann man wohl auch mit den Chancen von Linux auf dem Desktop vergleichen. Leider kann man auch nicht jedes Dokument scannen und wegschmeißen, einiges muss man in Papierform aufbewahren. Vieles aber auch nicht, weshalb mein Technik-Vorsatz für das Jahr 2015 die Umstellung auf weitestgehend papierlosen Bürobetrieb ist.

Empfehlungen sind da immer schwer zu geben. Während manche nur ein paar Rechnungen im Briefkasten finden, haben andere ein Home-Office und mancher Dokumentenmessie hat sogar noch die Strafzettel von 1995 fein säuberlich abgeheftet. Ausschlaggebend für meine Entscheidung war ein Umzug und gefühlte 200 Ordner, die von einem Keller in den nächsten gewandert sind. Für meinen nächsten Umzug möchte ich mir das gerne ersparen.

Die Hardware

Ein Scanner mit Einzug ist natürlich Pflicht, aber auch hier ist das Angebot äußerst vielfältig und die Preisspanne reicht von wenigen hundert Euro bis zum Mond. Linux-Nutzer müssen nebenbei noch die Treibersituation überprüfen, die von vielen Herstellern bewusst verschleiert nicht eindeutig beschrieben wird. Hier auf dem Schreibtisch steht nun mit dem Brother ADS 2100 eher ein Einsteigergerät, aber das muss jeder selbst entscheiden. Ausschlaggebend für Brother waren (neben den guten Erfahrungen mit einem Drucker desselben Herstellers) die direkt vom Hersteller für Linux angebotenen Treiber.

Offizielles Produktbild von Brother

Offizielles Produktbild von Brother

Das Gerät gibt es mittlerweile in diversen Online-Shops für relativ schmales Geld und bietet alle Funktionen, die ich mir so wünsche:

  • Offizielle Linux / SANE Treiber
  • Duplex-Scanner
  • Ein ADF-Fach mit Platz für 50 Seiten
  • Keine Hochglanzoberflächen (außer die Oberseite der Klappe)
  • 600 dpi Auflösung (mehr kann mein Drucker auch nicht)

Ganz einfach macht es Linux einem trotz Hersteller-Treiber mal wieder nicht. Neben den auf der Homepage von Brother angebotenen Treibern für SANE muss man noch die Regeln für udev anpassen, damit der Scanner auch für normale Nutzer zur Verfügung steht. Debian/Ubuntu Nutzer können dafür ein Paket von Brother nutzen, alle anderen müssen manuell die richtige Datei bearbeiten. Steht zwar alles auf der Homepage, aber wenn man das erste Mal einen Scanner unter Linux betreibt, ärgert man sich doch über die Komplexität. Das erinnert an die Drucker-Installation unter Linux im Jahr ~2005.

Nachdem man diese Hürde hinter sich gebracht hat, funktioniert der Brother ADS 2100 hervorragend mit Linux und lässt keine Wünsche offen. Selbst verknitterte oder ehemals zusammen getackerte Papiere scannt er ohne Problem ein. Lediglich die Lautstärke hatte ich im Vorfeld unterschätzt. Aber man scannt ja nicht den ganzen Tag.

 Die Software

Für die Scan-Software gilt immer noch der Satz aus dem ubuntuusers-Wiki:

Leider sind Scannerprogramme unter Linux nicht vergleichbar zu den Programmen, die man unter Windows kennt. Es fehlen durchweg wichtige – professionelle – Funktionen (z.B. Entrastern oder Staub/Fleckenentfernung).

Quelle: ubuntuusers-Wiki: Scanner

Das KDE-Programm skanlite eignet sich eigentlich nur für Flachbettscanner, da es weder mehrseitige Scans unterstützt, noch im PDF-Format speichern kann. Das Programm ist allerdings wenigstens so eindeutig unzureichend, das man es gar nicht erst in die nähere Wahl nehmen muss. Der Klassiker unter den Scan-Programmen für Linux ist sicherlich XSane. Ein Programm, bei dem man versteht weshalb so viele Linux-Nutzer glauben, dass die Konsole immer besser als jede GUI ist. Jeder noch so kryptische Befehl ist einfacher zu handhaben, als die Oberfläche von XSane mit seinen perfekt versteckten Optionen und vielen Fenstern. Gnome-Nutzer können Simple Scan verwenden. Für den Regelbetrieb bietet es genug Optionen und ist hinreichend einfach zu bedienen.

Wer mehr Optionen benötigt, sollte sich gscan2pdf ansehen. Ein in Perl geschriebenes Programm mit Gtk-Oberfläche, das bei allen Distributionen in den Paketquellen zu finden sein dürfte. Unter Debian/Ubuntu lässt sich es einfach installieren:

$ sudo apt-get install –no-install-recommends gscan2pdf

Die empfohlenen Abhängigkeiten sollten vor allem KDE-Nutzer abschalten, da man sonst Gefahr läuft sich unnötigerweise eine halbe Gnome-Umgebung auf die Festplatte zu holen.

Für die OCR-Texterkennung sollte man zusätzlich noch die Tesseract Pakete installieren. Tesseract wird inzwischen federführend von Google entwickelt und bietet eine relativ gute Texterkennung, ohne die in einem papierlosen Büro nichts funktioniert.

$ sudo apt-get install tesseract-ocr tesseract-ocr-deu

Der Dialog von gscan2pdf lässt einen eigentlich alle nötigen Einstellungen treffen.

gscan2pdf-Dialog Besonders beachten muss man die im Reiter Mode festgelegte Auflösung, die standardmäßig mit 200 dpi zu niedrig angesetzt ist.

Ablage und DMS

DMS (Dokumenten Management Systeme) gibt es wie Sand am Meer und auch für Linux ist das Angebot nicht schlecht. Je nach Papieraufkommen und Anzahl der zugreifenden Benutzer/Rechner muss es aber nicht immer ein DMS sein. Ein funktionierendes DMS ist natürlich erst einmal einer einfachen Ablage via Ordnerstruktur überlegen. Die Entscheidung für ein papierloses Büro ist aber eine Festlegung auf viele Jahre und kaum eine Software wird ewig entwickelt. Die Gefahr am Ende eine Datenbank zu haben, die man nicht mehr ohne weiteres lesen kann oder deren Exportfunktion zumindest verlustbehaftet ist, dürfte immens sein.

Hinzu kommt, dass moderne Betriebssysteme und Desktopumgebungen inzwischen sehr gute Suchfunktionen und Dateimanager haben. Eine gute Verschlagwortung der Dateien im Titel und eine wohl überlegte Ordnerstruktur, kann in Kombination mit einer Suche wie KDE’s Baloo ein DMS ersetzen. Die fehlenden Funktionen kompensiert die Gewissheit, dass die eigene Ordnerstruktur sich notfalls auch mit geringen Verlusten auf andere Systeme übertragen lässt.

Ein papierloses Büro erfordert natürlich umso mehr Aufmerksamkeit für Verschlüsselung des Systems, sowie der Backupmedien und über eine sinnvolle Backup-Verwaltung. Für letzteres würde ich zur Zeit BackInTime empfehlen. Das kann übrigens auch verschlüsselte Backups erstellen, allerdings nur mit EncFS, was wohl nicht allzu sicher ist.


Artikelbildquelle: Ordner von superscheeli auf Flickr unter CC 2.0

Wochenrückblick 04/2015

Permalink deesaster.org

Der Wochenrückblick lässt das Geschehen der vergangenen Woche rund um Ubuntu, Linux und Open Source Revue passieren.

Rund um Ubuntu

Zweite Alpha-Version von Ubuntu 15.04 erschienen

Auch wenn es für Ubuntu selbst keine Alpha-Versionen gibt, da jeden Tag neue Versionen zur Verfügung gestellt werden, wurde die zweite Alpha der Ubuntu-Flavor Kubuntu, Lubuntu, Ubuntu GNOME, Ubuntu Kylin und Ubuntu Cloud veröffentlicht. Wie immer der Hinweis, dass Alpha-Versionen nur für Entwickler und Tester und nicht für den täglichen Einsatz gedacht sind.

Quellen: Ubuntu Fridge, OMG!Ubuntu!

Ubuntu Core „Snappy“

Mit Ubuntu Core, einem abgespeckten Ubuntu-System für Embedded Systeme mit ARM- oder x86-Chipsatz will Canonical auch im Internet der Dinge Fuß fassen. Eine Besonderheit ist das Paketsystem, welches ein Rollback installierter Komponenten zulässt.

Mehr Informationen gibt es im Ikhaya-Artikel.

Weitere Quellen: Ubuntu Insights, Mark Shuttleworths Blog, Pro-Linux, Golem

Ergebnisse des Ubuntu Scope Showdown

Beim Ubuntu Scope Showdown Ende 2014 sollten die Teilnehmer innerhalb von sechs Wochen ein Scope für Ubuntu inkl. Anzeige in der Dash entwickelen. Den ersten Preis hat Daniele Laudani mit seinem „Cinema Scope“ gewonnen.

Quelle: Ubuntu Developer Blog, OMG! Ubuntu!

Aggregated Scopes vorgestellt

Canonical hat die zweite Ubuntu-Phone-News veröffentlicht, in der die Aggregated Scopes vorgestellt werden, die per Standard auf dem Ubuntu Phone installiert sein sollen. So gibt es ein „Today Scope“, welches die wichtigsten aktuellen Daten anzeigt. Das „Nearby Scope“ zeigt Informationen rund um den aktuellen Standort an, z.B. Restaurants oder Events. Es wird auch ein „Music Scope“ und ein „Video Scope“ geben, die die entsprechenden Medien und Angebote aus verschiedenen Quellen zusammenfassen.

Quellen: Riccardo Padovanis Blog, OMG!Ubuntu!

Access Points mit Ubuntu für Schulen

Intels Bildungsprogramm wird weiter ausgebaut, sodass der Chiphersteller nun auch Access Points für Schulen bereitstellt. Auf den Rechnern ist Ubuntu 12.04 mit extra Software installiert, die es Lehrern erleichtern soll, ihren Unterricht vorzubereiten.

Quelle: Golem

Neues rund um Linux

Paris stellt auf Krita um

Weil die Universität in Paris nicht mit Adobes Support für Photoshop zufrieden ist, wird dieses Jahr auf die freie Software Krita umgestellt. Das Bildbearbeitungsprogramm enthält zahlreiche Effekte und Modi, um Bildinhalte zu manipulieren. Andere Bildungseinrichtungen in Frankreich beobachten die Umstellung mit Interesse.

Quelle: Pro-Linux

Spielen unter Linux

Valve umgeht Steam-Bug

Letzte Woche wurde ein Bug in der Steam-Deinstallationsroutine bekannt, die bei einer nicht gesetzten Variable das gesamte Homeverzeichnis und alle Daten, auf die der angemeldete Benutzer Zugriff hat, löscht. Der Fehler im Deinstallationsskript wurde behoben bzw. umgangen, in dem die Variable darauf geprüft wurde, dass sie nicht leer ist. Kritik gibt es weiterhin, weil in der Variablen dennoch ein willkürlicher Pfad stehen könnte, der immer noch andere Benutzerdaten außer Steam löscht.

Quellen: heise open, Golem

Humble Weekly Bundle

Das neue Humble Weekly Bundle bringt drei Spiele für Linux mit: das Typographie-Geschicklichkeitsspiel Type:Rider, den Adventure-Puzzler Finding Teddy und das Unterwasserabenteuer Far Sky. Zusätzlich gibt es auch noch das Hörbuch Homeland von Cory Doctorow, gelesen von Wil Wheaton. Der gesamte Erlös geht dieses Mal an die Freedom of the Press Foundation.

Hardware und Mobiles

Wettrennen um erstes Ubuntu Phone?

Der spanischer Smartphone-Hersteller bq hat für Mitte Februar ein erstes Ubuntu Phone angekündigt. Der zweite Vertragspartner von Canonical, der chinesische Hersteller Meizu, will dieses Datum ggf. toppen. So gibt es Gerüchte, dass in China das Meizu M1 Mini das erste Smartphone mit Ubuntu werden könnte.

Quelle: Pro-Linux

Das Android Smartphone als Live USB Medium für Linux

Permalink thomas-leister.de

Phil Ram hat mich vor ein paar Minuten auf die Android App „DriveDroid” aufmerksam gemacht. Die App macht das Android Smartphone zu einem simulierten USB Massenspeicher mit dem gewünschten ISO bzw. IMG-File als eingelegtes Medium. Das heißt: Ihr startet die App, wählt eine Linux ISO, steckt euren Androiden an den Rechner an und könnt dann das am Smartphone eingelegte Image booten.

Wer öfter mal zu einem Live Linux greift (z.B. für Reparaturarbeiten an fremden Rechnern) benötigt also ab sofort nichts anderes mehr als sein Smartphone und ein dazu passendes USB Kabel – sehr praktisch! Ich habe die App gerade auch schon mit einem Arch Linux Image ausprobiert. Das ganze funktioniert mit meinem OnePlus One einwandfrei. Anscheinend läuft DriveDroid noch nicht auf allen Smartphones ohne Probleme.

Images können aus dem Android Speicher importiert werden oder direkt über die App heruntergeladen werden. Images für Arch Linux, Ubuntu, Fedora und weitere große Distris stehen zum Download bereit.

 

Mehr Kontrolle über Referrer: Mozilla implementiert Referrer-Metatag in Firefox

Permalink Sören Hentzschel

Mozilla unterstützt ab Firefox 36 das Referrer-Metatag, um Webseitenbetreibern mehr Kontrolle über den Referrer zu geben und damit die Privatsphäre der Nutzer besser zu schützen.

Der Referrer ist eine wichtige Information für Webseitenbetreiber, da sich darüber feststellen lässt, woher die Benutzer kommen, die auf der eigenen Webseite landen. Allerdings kann dies auch die Privatsphäre der Nutzer tangieren, wenn in der URL Informationen wie Nutzernamen oder Seiteneinstellungen vorkommen. Manche Seiten behelfen sich daher damit, dass ausgehende Verweise über eine spezielle Seite weitergeleitet werden und damit den Referrer-Header auf etwas verändert wird, was weniger Informationen über den Ursprung preisgibt.

Ab Firefox 36 unterstützt der Mozilla-Browser das Referrer-Metatag. Darüber kann festgelegt werden, ob und auf welche Weise der Referrer übertragen werden soll. Beispielsweise sorgt die folgende Zeile:

<meta name="referrer" content="origin">

… dafür, dass eine Seite https://example.com/page.html lediglich https://example.com/ als Referrer sendet. Es gibt noch weitere mögliche Werte, unter anderem um das Senden des Referrers komplett zu deaktivieren.

no-referrer Do not send a HTTP Referer header.
origin Send the origin of the document.
no-referrer-when-downgrade Send the origin as referrer to a-priori as-much-secure destination (https->https), but doesn’t send a referrer to a less secure destination (https->http). This is the default behavior.
origin-when-crossorigin Send a full URL (stripped from parameters) when performing a same-origin request, but only send the origin of the document for other cases.
unsafe-URL Send a full URL (stripped from parameters) when perfoming a same-origin request.

Tabelle aus dem Mozilla Developer Network (MDN)

Übrigens wird “referrer” hier tatsächlich in seiner korrekten Schreibweise verwendet, nachdem die falsche Schreibweise “referer” schon seit Jahren Verwendung findet, auch in den Einstellungen von Firefox.

SUSE Linux Expert Day 2015 Frankfurt

Permalink /var/pub/chris_blog

Download PDF

Diese Woche tagte in Frankfurt eines der SUSE Linux Expert Day-Events, die schon seit September 2014 weltweit stattfinden. Als Location wurde das 25hours Hotel Frankfurt by Levi’s gewählt – eine sehr stylishe und ausgefallene Location!

Agenda

Das Event war für rund 5 Stunden ausgelegt und beinhaltete zahlreiche interessante Vorträge:

  • Keynote – Michael Jores, Regional Director Central Europe SUSE
  • SUSE Roadmap – Olaf Kirch, Director SUSE Linux Enterprise
  • SUSE Linux Enterprise Server 12 – Lars Pinne, Senior Systems Engineer SUSE
  • SUSE Cloud Überblick & Ausblick – Lars Pinne, Senior Systems Engineer SUSE
  • Kundenreferenz: FIS-ASP GmbH, Matthias Braun, FIS-ASP GmbH
  • Wrap-up, Q&A – Martin Wolf, Account Executive Team Lead SUSE

SUSE Roadmap

Direkt nach der Keynote wurde die aktuelle Sicht der weiteren Entwicklungen aktueller SUSE-Produkte von Olaf Kirch präsentiert. Diese Planung ist selbstverständlich nicht verbindlich, zeigt aber schon starke Tendenzen der Produktentwicklungen.

Nachdem im Oktober 2014 SUSE Linux Enterprise 12 veröffentlicht wurde, soll im Juni/Juli diesen Jahres SP4 für das vorherige Major-Release 11 erscheinen. Neben üblichen Kerneltreiber-Updates (sofern diese nicht die API/ABI verändern) sollen auch die IBM z13-, POWER8 BE- und Intel Haswell EX-Plattformen unterstützt werden. Letztere soll lediglich grundlegend unterstützt werden. Nach der aktuellen Planung soll dies übrigens das letzte Service Pack sein, ein SP5 ist derzeit nicht vorgesehen.

Hinsichtlich SUSE Linux Enterprise Server 12 wurde erwähnt, dass dieses derzeit von SAP für die Verwendung der ERP-Softwarekomponenten zertifiziert wird. Mit einer offiziellen Freigabe ist noch in Q1/2015 zu rechnen. Kunden können dann das vollständige Produktfolio auf der neuesten SLES-Version installieren und vom vollständigen Support durch SAP und SUSE profitieren.

SUSE’s eigene Cloud-Suite SUSE Cloud wird in der ersten Hälfte dieses Jahres in der Version 5 erscheinen. Neben hochverfügbaren virtuellen Gästen sollen als technische Vorschau auch Docker-Container unterstützt werden. Diese sollen übrigens auch in späteren SUSE Manager-Versionen verwaltet werden können – ich persönlich hoffe, dass dieses Feature auch im Upstream-Projekt Spacewalk Verwendung finden wird. Für das dritte Quartal ist ein weiteres Update der SUSE Cloud geplant, welches auf OpenStackKilo” basieren soll. Bei dieser Version sollen die von OpenStack verwendeten Control Nodes auch auf SLES 12 lauffähig sein. Für 2016 ist SUSE Cloud 7 geplant, welches auf OpenStack 7 basieren soll.

Mit SUSE Storage Server möchten die Nürnberger im Geschäft software-definierten Speichers einsteigen. Das Produkt richtet sich vor allem an Kunden, die über eine Private oder Hybrid Cloud nachdenken oder für Low-/Mid-Performance- und Archivierungszwecke günstige Alternativen zum konventionellen SAN suchen. Kernkomponente des Produkts ist Ceph, welches für seine Hochskalierungsfähigkeit, gute Datendeduplizierung und Selbstheilung bekannt ist. Diese erkennt ausgefallene Festplatten und nimmt – bei korrektem Design – vollständig Spare-Speichermedien in Betrieb. Drei wesentliche Bestandteile des Ceph-Konzepts sind:

  • Object Storage – verteilter, objektbasierter Speicher, Zugriff erfolgt über C-/C++-, Java-, Python-, PHP- oder RESTful-Schnittstellen, implementiert Striping- und Snapshot-Funktionalitäten
  • Block Storage – Objektspeicher kann auch als thin-provisioned Blockspeicher bereitgestellt werden (z.B. für VMs)
  • Dateisystem – POSIX-kompatibles Dateisystem mit direktem Zugriff auf Objektspeicher, offizielle Integration im Linux-Kernel seit 2010 (2.6.34), optional ist ein FUSE-Client verfügbar

Während im letzten Jahr ausgewählten Kunden Zugriff auf eine Beta-Versionen ermöglicht wurde, erscheint im ersten Quartal diesen Jahres die erste öffentliche Version des Produkts, welches auf Ceph “Firefly” basiert. Für Q3/2015 ist die Programmversion 2.0 geplant, welches als Codebasis Ceph “Hammer” nutzen soll. Während als Server hier jeweils nur SLES 12 in Frage kommt, sollen clientseitig auch SLE 11-Releases unterstützt werden.

Mit besonderes großem Interesse habe ich zur Kenntnis genommen, dass SUSE nicht beabsichtigt Spacewalk als Upstream-Projekt für die eigene Management-Suite SUSE Manager abzulösen. Red Hat hat mit Satellite 6 hier eine klare Trennung vollzogen und wechselte die Code-Basis. Hierbei ist allerdings noch erwähnenswert, dass Satellite 6 nicht als Weiterentwicklung von Satellite 5.x angesehen werden darf – es ist eine komplette Neugestaltung und -programmierung. Für 2016 ist SUSE Manager 3 geplant, neben der Unterstützung von SLES 12 SP1 sollen auch High Availability- und Monitoring-Funktionen überarbeitet werden. Ich bin sehr gespannt, inwiefern SUSE die nur sehr rudimentären Monitoring-Funktionen von Spacewalk überarbeiten wird. Bisher habe ich dieses Feature schlichtweg nicht verwendet, weil mir der Funktionsumfang nicht ausreichte. Diese Entwicklungspläne sind für mich gutes Zeichen dafür, dass Spacewalk trotz dem nur noch sekundären Interesse durch Red Hat noch weiterentwickelt wird. Für 2017 ist die Verfügbarkeit von SUSE Manager 4 vorgesehen.

SUSE Linux Enterprise 12

SysVinit vs. Systemd

SysVinit vs. Systemd

Im Oktober 2014 wurde nach 5 Jahren ein neues Major-Release von SUSE Linux Enterprise veröffentlicht. Gegenüber der vorherigen Version wurden einige große Veränderungen durchgeführt, wovon Systemd die wohl größte und am kontroversten diskutierte sein dürfte. Im Laufe des letzten Jahres führte diese Update, welches bei den meisten Distributionen SysVinit ersetzte, für große Unruhe in der Linux-Szene. Das zeigte sich auch bei der Veranstaltung, die übliche “Systemd vs. SysVinit“-Diskussion blieb nicht aus.

Ich muss gestehen, dass mich dieses Thema mittlerweile ermüdet. Seit geraumer Zeit sind hitzige Diskussionen im Internet, die nicht selten in “Shit storms” und persönlichen Angriffen (es gab beispielsweise Spendenaufrufe, um Lennart Poettering “an der Arbeit zu hindern”) enden, quasi an der Tagesordnung und mit “Projekten” wie Devuan Linux wird immer wieder aufs Neue Öl in das Feuer gegossen. Ein Referent der Veranstaltung fasste das, wie ich finde, sehr treffend sinngemäß wie folgt zusammen:

Es ist alle 10 – 15 Jahre das Gleiche. Als damals RC-Skripte durch SysVinit ersetzt wurden, fand es auch jeder schrecklich, obwohl es keine signifikanten Nachteile hatte. Jetzt möchte es niemand mehr missen und die Geschichte wiederholt sich bei Systemd.

Dem kann ich nur zustimmen. Systemd ist eine radikale, aber durchaus zeitgemäße Veränderung, die viele Vorteile hat. Da technische Innovation jedoch auch immer mit Umdenken und neuen Fertigkeiten zu verbinden sind, kann die anfängliche Hürde auch durchaus ein Nachteil sein. Enterprise-Distributionen, wie SUSE Linux Enterprise oder Red Hat Enterprise Linux bieten Kunden optionale Möglichkeiten, altbekannte Werkzeuge zu verwenden (z.B. service, chkconfig, alte Konfigurationsdateien) um den Umstieg zu erleichtern. Unabhängig davon habe ich hier von der Linux-Szene mehr Offenheit und Toleranz erwartet.

In SUSE Linux Enterprise 12 wurden zwei radikale Änderungen vorgenommen: Systemd und der Wegfall der 32-bit Intel-Architektur i686. Reine 32-bit Systeme erleben in den letzten Jahren einen starken Abwärtstrend, es gibt kaum Hardware und Argumentationsgrundlagen, die eine Präferenz von 32-bit Systemen gegenüber 64-bit Alternativen rechtfertigen. SLES 12 wird erstmals nicht mehr für Intel Itanium-basierende Systeme (ia64) angeboten. Damit vollzieht SUSE einen Schritt, den andere Distributoren, wie auch Red Hat, schon vollzogen haben. Die nicht mehr konkurrenzfähige Prozessorarchitektur erlebt bereits seit Jahren einen starken Abwärtstrend und ist insbesondere für Linux-Kunden schon lange keine Referenzarchitektur mehr.

Mit Xen, KVM (Kernel-based Virtual Machine) und LXC (Linux Containers) gibt es gleich drei Möglichkeiten zur Virtualisierung. Für Container-Applikationen steht Docker bereit.

Btrfs (ButterFS) ist das neue Standard-Dateisystem in SLE12. Dieses wird vollständig durch den SUSE Support abgedeckt (sofern lediglich die über YaST konfigurierbaren Standard-Features des Dateisystems verwendet werden) und ermöglicht zusätzliche Features, wie ereignisgesteuerte Snapshots. So erstellt Zypper beispielsweise Snapshots vor System-Aktualisierungen – ist das System nach dem Update nicht mehr bootfähig, kann komfortabel über GRUB der vorherige Snapshot gestartet werden. Es hat sich bewährt, BtrFS für das Betriebssystem und XFS für Nutzdaten (z.B. MySQL Datenbank-Dateien) zu verwenden. ext4 wird nun auch schreibend unterstützt – SLE11 unterstützte das Dateisystem nur lesend, was daran lag, dass dieses Dateisystem nicht ausgiebig genug getestet werden konnte, um es für produktive Zwecke freizugeben. Ergänzend wurde erwähnt, dass ext4 gegenüber XFS schlecht in asynchronen IO-Aufrufen ist und daher für SUSE von sekundärem Interesse war.

Das zentrale Konfigurationswerkzeug YaST wurde einer Repogrammierung unterzogen. Es verwendet nun Ruby und nicht mehr die ursprünglich entwickelte Sprache YCP. Hierdurch versprechen sich die Nürnberger eine einfachere Wartung der Software. Mit Wicked wurde ein neues Netzwerk-Backend in YaST integriert. Der ereignisgesteuerte Dienst fokussiert nicht nur Client-Systeme und soll insbesondere in Hybrid-Clouds wertvolle Dienste leisten (der Titel der Folie lautete “Network configuration as a service” :D). Es wird empfohlen, die Netzwerkkonfiguration neuer Systeme direkt mit Wicked zu implementieren – altbekannte Konfigurationsmöglichkeiten werden derzeit noch untersützt.

Einige Software-Pakete wurde von SUSE in Modulen ausgelagert. Diese werden nicht 10 – 13 Jahre, sondern nur einige wenige Jahre durch den Support abgedeckt. Zu den Modulen gehören derzeit:

  • Web and scripting – PHP, Python, Ruby on Rails (3 Jahre Support)
  • Legacy – Sendmail, alte Java-Versionen, etc. (3 Jahre Support)
  • Public Cloud – Public Cloud-Softwarepakete (kontinuierliche Integration)
  • Toolchain – GNU Compiler Collection (pro jährlichem Release ein Jahr Support)
  • Advanced System Management – Tools und Frameworks für Systemverwaltung (kontinuierliche Integration)

Mit Machinery liefert SUSE derzeit als technische Vorschau ein Programm zur Service-Migration bestehender Systeme. Das Programm analysiert Systemkonfiguration, konsolidiert diese und migriert angebotene Services. Primär ist das Programm für Migrationen (z.B. von SLE11 auf 12) und Hybrid-Clouds gedacht. Desaster Recovery-Szenarien profitieren ebenfalls von Machinery – jedoch wird die Verwendung der Software derzeit noch nicht vom Support unterstützt.

Kernel Live-Patching

Die Veranstaltung stand ganz unter dem Motto “Towards Zero Downtime“, mit welchem die Nürnberger die Kernel Live-Patching-Funktionalität von SLES 12 bewerben. Wie auch bei Red Hat wird dieses Feature als Zusatzprodukt verkauft, um gesonderte Support-Verträge abzuschließen. Kernel-Patches werden als RPM-Dateien bereitgestellt, welche die Module installieren und auch Initial Ramdisks erneuern. Mithilfe ftrace und der eigens entwickelten Komponente kGraft werden Kernel Function-Calls auf ihre neuen Module umgeleitet. Bereits ausgeführte Anwendungen müssen demnach nicht neugestartet werden. Aktuell wird lediglich die x86_64-Plattform unterstützt, später sollen bei entsprechendem Kundeninteresse weitere Architekturen folgen. Mit kGraft (SUSE) und kPatch (Red Hat) gibt es derzeit zwei Konkurrenzprodukte zum proprietären kSplice (Oracle), die ähnliche quelloffene Kernel-Module nutzen, um Live Patching zu implementieren. SUSE implementiert, anders als die Red Hat-Lösung, detaillierte Konsistenzchecks. Im November vergangenen Jahres gab es erste Diskussionen seitens Red Hat die ähnlichen Produkte zu vereinheitlichen – ausschlaggebend dürfte jedoch die Entscheidung der Upstream-Community sein.

SUSE Cloud

Mit SUSE Cloud werden drei Produkte vereint, die zusammen ein interessante Werkzeugsammlung für Private und Hybrid Clouds darstellen:

  • OpenStack – Kernarchitektur für Cloud-Services
  • Crowbar – Provisioning-Framework, nutzt u.a. PXE für vollautomatisierte Installationen
  • Ceph – objektorientiertes Speicherbackend

Gegenüber alternativen Produkten bewerben die Nürnberger die Zertifizierung von erprobten Hardware-/Software-Setups und Unterstützung anderer Hypervisor, die von OpenStack nicht direkt unterstützt werden. Insbesondere VMware vSphere-Installationen werden durch SUSE verstärkt unterstützt. Auf der SUSE-Webseite kann eine 60 Tage-Testversion bezogen werden, welche binnen 30 Minuten ein vollständiges Private Cloud-Setup vornimmt. Gegenüber einer manuellen Installation übernimmt SUSE Cloud viel manuelle Konfigurationsarbeit, was den Einsatz bei Kunden, die noch keine Erfahrungen mit OpenStack haben, interessanter gestaltet.

Wie auch Red Hat trägt SUSE als Platinum-Mitglied viel zum OpenStack-Projekt bei, insbesondere finanzieller Natur.

Fazit

Für mich war es das erste SUSE Event dieser Art. SUSE hat bewusst zahlreiche regionale anstatt einige wenige überregionale Veranstaltungen geplant, um kleinere Teilnehmerzahlen und offene Diskussionsrunden zu fördern. Ich kann behaupten, dass sich das beim vergangenen Event durchaus bewährt hat. Die Teilnehmerzahl war überschaubar, man kam mit anderen Kunden ins Gespräch und konnte so konstruktive Diskussionen führen. Die Fachbeiträge waren sehr interessant, für Detailfragen standen erfahrene SUSE-Mitarbeiter zur Verfügung. Die Location wusste mit ausgefallenem und stilvollem Design zu überzeugen.

Download PDF

24. Januar 2015

Review: To The Moon – Reise zum Mond

Permalink deesaster.org

Die meisten Menschen haben Träume, die sie in ihrem Leben verwirklichen wollen. Als Kind möchte man Astronaut, Feuerwehrmann oder Superheld werden. Je nachdem, wie man die Jugend verlebt hat, festigt sich dieser Wunsch oder man schlägt eine ganze andere Richtung ein. Manchmal spielt das Leben aber anders als man es gerne hätte und so bedauert man auf dem Sterbebett, was man alles nicht erreicht hat. Wäre es nicht schön, wenn man zurück reisen und sein Leben ändern könnte, um seine Träume zu verwirklichen?

John schaute als Kind schon gerne die Sterne und den Mond an.
John schaute als Kind schon gerne die Sterne und den Mond an.

Zurück in die Vergangenheit

Dr. Neil Watts und Dr. Eva Rosalene sind zwei bei Sigmund Corp angestellte Wissenschaftler, die genau dies leisten sollen. Auch wenn sie nicht in die Vergangenheit reisen können, können sie sich zumindest in die Gedanken einer Person einschalten und bis in deren Kindheit zurück reisen, um dort Änderungen an deren Erinnerungen vorzunehmen.

John Wyles ist ein solche Person. Er liegt im Sterben und hat nur noch wenige Stunden zu leben, als Dr. Watts und Dr. Rosalene in seinem Haus, neben einem riesigen Leuchtturm eintreffen. Sie wurden einige Wochen zuvor von John Wyles beauftragt, seinen sehnlichsten Wunsch zu erfüllen – zum Mond zu reisen.

Dr. Rosalene und Dr. Watts haben eher unglücklich geparkt.
Dr. Rosalene und Dr. Watts haben eher unglücklich geparkt.

Den beiden Wissenschaftlern stellt sich nur das Problem, dass sie Beweggründe für Johns Wunsch nicht kennen. Und ohne den können sie auch keine Veränderungen in seinen Erinnerungen vornehmen, da der Wunsch, den eigenen Traum umzusetzen, immer noch vom Kunden selbst kommen muss.

Also reisen Dr. Watts und Dr. Rosalene in kleinen Schritten in Johns Erinnerungen zurück. Dabei lernen sie John und seine Frau River, die bereits einige Jahr zuvor verstorben ist, immer mehr kennen und bauen eine Beziehung zu ihm auf, auch wenn sie normalerweise die Distanz zu einem Kunden wahren sollten.

Am Ende finden beide heraus, wie sie Johns Wunsch erfüllen können. Die Änderung der Erinnerung hat aber einen hohen Preis …

In der Zeitleiste am oberen Rand sieht man, wo man sich in Johns Erinnerungen befindet.
In der Zeitleiste am oberen Rand sieht man, wo man sich in Johns Erinnerungen befindet.

Spielgefühl

Noch nie hat das Wort „Spielgefühl“ so gut auf einen Titel gepasst wie bei „To The Moon“, denn genau darum geht es in dem Spiel – um Gefühle. Träume, Wünsche, Hoffnungen, Tod, Trauer, Enttäuschung, Liebe, Krankheit, Schmerz … „To The Moon“ bietet dem „Spieler“ all das.

Das Wort „Spieler“ steht mit Absicht in Anführungszeichen, denn sehr oft ist man eher Zuschauer als aktiver Teilnehmer. Man kann Dr. Rosalene und Dr. Watts zwar durch die Level bewegen, Gegenstände aufheben und auf die Art kleinere Rätsel lösen, aber die stehen gar nicht im Vordergrund. Auch die kleinen Puzzlespiele, die zwischen jeder Erinnerungsebene auftauchen, sind keine Herausforderung, wirken manchmal sogar etwas deplatziert.

Es gibt auch ein ausgeklügeltes Kampfsystem. ;)
Es gibt auch ein ausgeklügeltes Kampfsystem. ;)

Das Herz von „To The Moon“ ist vor allem die Geschichte um John und seine Frau River. Man begleitet die beiden vom Sterbebett rückwärts durch die Johns Erinnerungen bis zu Johns Kindheit. So ergeben sich beim Spielen sehr oft Fragen, was einige Gespräche oder Ereignisse in Johns Erinnerungen bedeuten, da man deren Ursache noch nicht kennt. Und genau das reißt den Spieler mit, weil man unbedingt erfahren möchte, wie die Geschichte ausgeht – oder besser gesagt, wie sie anfing.

Und obwohl John und River nur zwei kleine Pixelpersonen sind, kann man sich in sie hinein versetzen und mitfühlen, wenn man ihre Erinnerungen teilt. Auch die beiden Wissenschaftler sind keinen weißen Blätter, sondern Menschen mit Persönlichkeiten und eigenen Problemen. In zahlreichen Zwischensequenzen und Dialogen erhält man somit nicht nur über die Hauptperson John Wyles mehr Informationen, sondern auch über die beiden Doktoren, was einem später im Spiel noch mehr leiden lässt.

Schade ist, dass es keine echten Entscheidungen gibt. So hat man keine Wahl,wie das Spiel ausgeht. Das heißt, auch wenn man als Spieler bzw. als Menschgerne anders handeln würde, lässt dies das Spiel nicht zu.

John und River an „ihrem“ Leuchtturm.
John und River an „ihrem“ Leuchtturm.

Etwas Technik

„To The Moon“ stammt vom Indie-Entwicklungsstudio Freebird Games und hat zahlreiche Preise erhalten, vor allem eben für die erzählte Geschichte. Das Spiel wurde 2011 für Windows veröffentlicht und schaffte es Anfang 2014 in das zehnte Humble Bundle und war damit auch für Linux erhältlich. Inzwischen ist das Spiel für Linux nur auf Steam erhältlich.

Wer das Spiel herunterlädt und installiert, erhält normalerweise die englische Version. Es gibt aber eine offizielle Übersetzung, die man im Freebird-Games-Forum findet. Effektiv muss man die Datei Deutsch.zip nur herunterladen, entpacken und die beiden Ordner Data und Graphics im Spiele-Installationsverzeichnis ersetzen. Danach sind alle Dialoge und Anzeigen im Spiel in Deutsch.

Haushälterin Lily begrüßt die beiden Doktoren.
Haushälterin Lily begrüßt die beiden Doktoren.

Wichtig ist, dass das ganze Spiel über nicht gesprochen wird. Alle Dialoge gibt es nur als Texte zum Durchklicken, sodass „To The Moon“ für manch einen eher wie ein interaktives Buch wirkt. Die Texte sind dafür aber immer passend zur aktuellen Situation; mal traurig, mal witzig, mal ernst. Und wie bei einem Buch, ist man nach ca. 4 bis 5 Stunden fertig. Was sehr kurz klingt, bietet dafür aber auch ein intensives Spielgefühl.

Was das Spiel trägt, ist dabei aber die Musik von Kan R. Gao, der das Spiel auch entwickelt hat. Das Hauptthema, welches in verschiedenen Variationen immer wieder im Spiel zu hören ist, untermalt die träumerische und teilweise traurige Stimmung der Geschichte sehr. Aber auch alle anderen Titel unterstreichen die einzelnen Passagen im Spiel sehr gut. Die 31 Titel kann man auf Bandcamp anhören und für 5 US-Dollar oder mehr als Digital-Download kaufen. Die Besonderheit ist, dass 50% der Einnahmen für wohltätige Zwecke gespendet werden.

John Wyles liegt im Sterben und will noch einmal zum Mond.
John Wyles liegt im Sterben und will noch einmal zum Mond.

Zu „To The Moon“ erschien Ende Dezember 2013 noch eine kleine Mini-Episode, die man kostenlos bei FreeBird-Games herunterladen kann. Daneben ist mit „A Bird Story“ Ende 2014 auch eine Nachfolge-Geschichte erschienen, die aber fast ohne Dialoge auskommt und auch nur eine Stunde Spielzeit hat.

Fazit

„To The Moon“ ist vielleicht kein perfektes Adventure, da die Rätsel viel zu simpel sind, aber das Spiel besticht durch eine großartige Geschichte, die ebenso großartig umgesetzt wurde. Handlungen, Dialoge, Personen, Musik – es stimmt einfach alles – und reißt den Spieler wirklich in allen Belangen mit.

Auch wenn man keine eigenen Entscheidungen treffen kann, ist es interessant, dass man sich dennoch Gedanken darüber macht, wie man selbst handeln würde. Allein die Entscheidung, die Erinnerungen einer Person zu beeinflussen, um deren Wünsche wahr werden zu lassen, wirft zahlreiche moralische Fragen auf. Sollte jemand wirklich diese Macht haben, das Leben derart zu beeinflussen? Auch wenn es der letzte Wunsch des Patienten ist? Macht einen Menschen nicht gerade dessen Erfahrungen und Erinnerungen aus? Was bleibt, wenn man ihm diese nimmt und durch etwas anderes ersetzt?

Wer „To The Moon“ spielt, wird das Spiel vermutlich nicht mehr vergessen und an zahlreiche schöne, aber auch traurige Momente im Spiel erinnern.

Hasen sind sehr wichtig …
Hasen sind sehr wichtig …

Programmieren – Grundlagen von C: Einlesen von Daten

Permalink DevDiary

Wörter sind schon etwas Feines, man kann mit ihnen Informationen austauschen.
Ob sachlich oder ganz persönlich, ohne Wörter würde man wahrscheinlich noch in der Steinzeit leben.
In dem zweiten Teil dieser Artikelserie geht es deshalb um den Datentypen char und das einlesen von Daten.
Zusätzlich wird der Begriff Array im Zusammenhang mit Text angesprochen sowie das zuweisen von Werten bei Variablen.

Datentyp Char

Um Zeichen, wie zum Beispiel Buchstaben, in C zu benutzen, gibt es den Datentypen char.
Variablen deklariert man in der Programmiersprache C über den Syntax char.
Konstanten von dem Typ char werden immer in Hochkommata (‘) eingeschlossen, so auch beim zuweisen von Werten.

char Buchstabe;

Arrays und Zeichenketten

Um ganze Wörter zu verwenden, benötigt man eine Zeichenkette (engl. string) welche im Grunde ein Array vom Typ char ist.
Dies kann man sich in etwa, wie eine Aneinanderreihung von Elementen, in diesem Fall Zeichen, vorstellen kann.
Im Gegensatz zu einigen anderen Programmiersprachen gibt es unter C keinen eigenen Datentyp für Zeichenketten.
Dabei muss man beachten, das standardmäßig in Zeichenketten keine Sonderzeichen, wie beispielsweise Umlaute, vorkommen dürfen.

Ein Array wird deklariert, indem man eine Variable anlegt, mit der Besonderheit, dass direkt hinter dem Variablennamen, zwischen zwei eckigen Klammern die Anzahl der gewünschten Elemente steht.
Nach dem Inhalt eines Arrays folgt die binäre Null. Sie signalisiert das Ende des Datenstromes, vergleichbar mit dem Punkt nach dem Satzende.
Manuell setzten muss man die binäre Null bei Zeichenketten nur in wenigen Fällen, da dies normalerweise von den Funktionen in C getan wird.

Dabei muss beachtet werden, dass die Anzahl an Elementen zwar bei 0 anfängt, jedoch immer die binäre Null mit eingerechnet werden muss.
Was bedeutet, bei 10 Feldelementen wird ein Array mit der Anzahl von 10 angelegt.
Die jeweiligen Elemente sind dann von 0 bis 9 erreichbar und Feldelement 10 ist die binäre Null.

Variablen für Zeichenketten deklariert man über den folgenden Syntax:

char Wort[5];

/* Beispiel: Array */
Wort = "Hallo";

/*
	Wort[0] = H
	Wort[1] = a
	Wort[2] = l
	Wort[3] = l
	Wort[4] = o
	-----------------
	Wort[5] = \0 (binäre Null)
*/

Konstanten

Häufig braucht man beim programmieren Werte die sich während des Programmablaufs nicht ändern.
Dazu verwendet man sogenannte Konstanten, welche das Gegenstück zu Variablen darstellen.

Typ Konstante
int z.B. 1 oder 4
char z.B. ‘a’ oder ‘h’
Zeichenkette z.B. “Hallo” oder “Wort”

Variablen

Variablen sind mit das Wichtigste in der Programmierwelt, sie ermöglichen einem Informationen während des Programmablaufs bereitzuhalten.
Aus der Mathematik kennen viele bereits den Begriff der Variablen, man rechnet oft mit x oder y.
Beim Programmieren verhält sich dies sehr ähnlich zu der Mathematik, die Variablen gelten auch hier nur so lange dass Programm läuft (bzw. nur für eine Funktion).
Variablen haben immer einen vorher festgelegten Datentypen, ein paar sind bereits vorgestellt worden, und ihnen kann man einen Wert zuweisen.

In C gibt es einige Regeln die man einhalten muss, um Variablen nutzen zu können.
So dürfen Variablennamen nur maximal 31 Zeichen lang sein und ausschließlich aus den Buchstaben a-z und A-Z sowie Ziffern und dem Unterstrich (_) bestehen.
Ziffern dürfen nicht am Anfang stehen. Der Name ist zwar beliebig aber es wird allgemein empfohlen sinngemäße Namen zu wählen (z.B. summe, ergebnis, name, etc.).
Auch ist C hierbei case-sensitive, was bedeutet das die Groß- und Kleinschreibung, ähnlich wie bei Passwörtern, wichtig ist.
Beispielsweise ist die Variable mit dem Namen Regen eine andere, als die mit dem Namen regen.

char Name; /* Variable wird angelegt (deklariert) */
Name = 'T'; /* Der Variable wird ein Wert zugewiesen (definiert) */

Variablen Werte zuweisen

Damit man Variablen richtig nutzen kann, muss man sie nicht nur deklarieren, sondern ihnen auch Werte zuweisen.
Beim Zuweisen nimmt der Wert einer Variable entweder den Wert einer anderen Variable oder den einer Konstanten an.
Dafür wird der Variablenname der zuzuweisenden Variable auf die linke und der Wert auf die rechte Seite von dem Gleichheitszeichen geschrieben.
Dies funktioniert im Eigentlichen, wie in der Mathematik (x=1) und im Sprachjargon wird das Zuweisen auch als definieren bezeichnet.

char Buchstabe;
Buchstabe = 'a';

int x;
x = 1;

Einlesen von Werten

Da man bei einem Programm, im herkömmlichen Sinne, nicht jedes mal den Quelltext abändern möchte um andere Werte zu benutzen, nutzt man z.B. die Funktion scanf aus der Standardbibliothek stdio.h.
Beim Aufrufen benötigt scanf zwei Argumente. Der erste Parameter ist eine Zeichenkette welcher den einzulesenden Datentyp in der gleichen Form wie bei printf (Platzhalter) bereithält.
Bei dem zweiten Argument wird ein sogenannter Zeiger (engl. pointer) auf die Variable, in die der Wert geschrieben werden soll, angegeben.

Ein Pointer kann man sich wie einen Link im Internet vorstellen, die eigentliche Seite liegt zwar nicht auf dem eigenem Server, jedoch ein Verweis auf den jeweiligen Server.
Nach diesem Prinzip ist ein Zeiger ein Link auf die Speicherstelle der Variable im Arbeitsspeicher, womit sie dann, von anderen Funktionen aus bearbeitet werden kann.
Um einen Pointer anzugeben, wird beim Verwenden einfach vor dem Variablennamen ein kaufmännisches Und (&) gesetzt.

char Buchstabe;
scanf("%c", &Buchstabe);

Kommentare im Quelltext

Um nicht die Übersicht zu verlieren und Informationen darzustellen, gibt es sogenannte Kommentare.
Diese werden in C über den Syntax /* begonnen und müssen mit */ wieder aufhören, die Länge ist dabei beliebig.
Normalerweise ist die Schachtelung von Kommentaren nicht erlaubt.

Bei einigen Editoren gibt es mit der Syntaxhervorhebung auch die Funktion in Kommentaren etwas zu markieren.
Häufig sind dies die Begriffe INFO und TODO.

/* Dies ist ein Kommentar */
/* INFO: Dies ist eine Info. */
/* TODO: Dies ist eine Aufgabe. */

Beispielprogramm

Im Folgenden wird ein Beispielprogramm mit den vorhin oder in der Vergangenheit, erklärten Elementen vorgestellt.
Dabei wird immer die gesamte Datei in dem Codeblock repräsentiert, der dazugehörige Dateiname steht immer unter diesem.
Wie man den Quellcode kompiliert, kann man in Teil 1 nachlesen.

#include <stdio.h>

int main()
{
	/* Variable Namen anlegen: Array mit 20 Elementen */
	char Name[20];
	
	/* Anweisung ausgeben */
	printf("Geben sie ihren Vornamen ein (Maximal 20 Zeichen): ");
	
	/* Name einlesen */
	scanf("%s", &Name);
	
	/* Name ausgeben */	
	printf("\nSie heißen: %s\n", Name);

	return 0;
}

Datei: main.c

Legende

Als binär bezeichnet man Daten, die im dualen Zahlensystem gehalten sind, also 1 oder 0.

Aufgabe

Damit man in der Zeit zwischen den einzelnen Teilen, etwas zum Üben hat, habe ich beschlossen ab jetzt bei jedem Teil eine Aufgabe zum Thema zu stellen.
Die Lösung steht dann immer in dem darauf folgenden Teil, sodass man sie mit seiner vergleichen kann.
Passend zum Thema, lautet die Aufgabe ein Programm zu schreiben, welches Vorname, Nachname und die Stadt abfragt und dann einen Satz nach dem folgenden Muster ausgibt.

Max Mustermann wohnt in der Stadt Musterhausen.

Ausblick

Im nächsten Teil geht es um dass rechnen mit Zahlen und wie man in C Fließkommazahlen benutzt.
Es wird in Zukunft voraussichtlich jede Woche ein neuer Teil erscheinen.

Fazit

In diesem Teil hat man gelernt, wie man in C mit Text umgehen kann und einiges mehr.
Was manchem beim Lesen auf den ersten Blick komplex erscheint, ist eigentlich recht simple.
Man könnte nun beispielsweise Programme für das Bilden von Texten programmieren.