Kernel.org down. Wo gibt es einen Kernel?

Ausser Betrieb
Ausser Betrieb

kernel.org ist anscheinend schon seit einigen Tagen nicht mehr erreichbar. Auf der Webseite steht bereits den ganzen Tag über «Down for Maintenance». Ich vermute mal dies hängt mit dem Einbruch zusammen welcher Anfang September entdeckt wurde. Dumm nur, wenn man gerade jetzt – am Wochenende hat man ja Zeit um etwas herumzukompilieren – auf einen Kernel angewiesen ist.

Da leider auch alle Mirrors von kernel.org down sind, muss man auf Alternativen ausweichen. Eine dieser Alternativen heisst Gentoo Mirror. Da Gentoo eine Metadistribution ist welche alles aus den Quellen erzeugt, kann man – wenn man weiss wo – einige der letzten Vanilla Kernels herunterladen. Bestimmt bietet sich diese Möglichkeit auch bei anderen Distributionen, bei Gentoo weiss ich aber zumindest wo man die Dateien findet 😀

Aus diesem Grund eine Liste von Links zu den Kernelquellen:




Assoziative Arrays in Bash

Fenster mit Quellcode

Mit bash 4.0 und höher hat man die Möglichkeit Assoziative Arrays verwenden zu können. In Python werden diese Art von Datenstrukturen Dictionaries genannt, in Perl heissen diese Hashes. Im Prinzip sind assoziative Arrays eine Erweiterung von normalen (indizierten) Arrays. Diese werden in der Regel dann eingesetzt, wenn man Arrayeinträge über vorher definierte Zeichenketten wiederfinden möchte.

 

Der Unterschied zu den indizierten Arrays besteht darin, dass bei den assoziativen Arrays nicht fortlaufende Nummern als Indizes, sondern sogenannte Keys (engl. Schlüssel) benutzt werden, die neben Zahlen auch Zeichenketten beinhalten können. Die einzelnen Arrayelemente werden demnach nicht einfach durchnummeriert, sondern jedes Element erhält eine Zeichenkette als Index.

Wollte man z.B. die Homeverzeichnisse von fünf Benutzern in einem Array abspeichern, musste man ein wenig tricksen um diese Infromationen pro Benutzer auch wieder auslesen zu können. Im folgenden Beispiel wird einfach definiert, dass in den ungeraden Indicies die Benutzernamen stehen und in den geraden Indicies die Pfade zu den Homeverzeichnissen.

#!/bin/bash

declare -a homeverzeichnis

homeverzeichnis[1]=matse
homeverzeichnis[2]=/home/matse
homeverzeichnis[3]=glatze
homeverzeichnis[4]=/to/boldly/go/patrick_stewart
homeverzeichnis[5]=fratze
homeverzeichnis[6]=/home/nightmare/freddy
homeverzeichnis[7]=james
homeverzeichnis[8]=/home/bond
homeverzeichnis[9]=bond
homeverzeichnis[10]=/007

echo "Benutzer 'fratze' hat folgendes homeverzeichnis:"

found=0
index=1

until [ $found -eq 1 ];do
if [ "${homeverzeichnis[${index}]}" = "fratze" ];then
echo ${homeverzeichnis[$(( ${index} + 1 ))]}
found=1
fi
index=$(( ${index} + 1 ))
done

Wie man sieht, ist das relativ umständlich. Einfacher geht dies seit Bash 4.0. Hierbei deklariert man zuerst ein Assoziatives Array mittels:

declare -A homeverzeichnis

Danach kann man einfach das Array füllen indem man als Schlüssel den Benutzernamen und als Wert den Pfad zum Homeverzeichnis definiert.

homeverzeichnis[matse]=/home/matse
homeverzeichnis[glatze]=/to/boldly/go/patrick_stewart
[etc.]

Das fertige Script sieht dann folgendermassen aus:

#!/bin/bash

declare -A homeverzeichnis

homeverzeichnis[matse]=/home/matse
homeverzeichnis[glatze]=/to/boldly/go/patrick_stewart
homeverzeichnis[fratze]=/home/nightmare/freddy
homeverzeichnis[james]=/home/bond
homeverzeichnis[bond]=/007

echo "Benutzer 'fratze' hat folgendes homeverzeichnis:"
echo "${homeverzeichnis[fratze]}"

Zum Schluss noch ein kleiner Tipp. Will man jeweils die Liste aller Schlüssel oder Werte erhalten, kann man folgendermassen vorgehen:

Eine Liste aller Keys eines Arrays erhält man mittels:

echo ${!homeverzeichnis[@]}

Eine Liste aller Werte eines Arrays erhält man mittels:

echo ${homeverzeichnis[@]}



Multipart ZIP Archive unter Linux öffnen.

Eigentlich ist das splitten von grossen Archiven eine ganz praktische Sache. Man kann dadurch grosse Archive in kleinere Häppchen schneiden. z.B. haben viele Mailserver eine Dateianhang Begrenzung von 10 MB. Hat man ein Paket das 16MB gross ist packt man es einfach nochmals neu, stellt aber ein, dass z.B. zwei 8MB Archive erzeugt werden. Der Empfänger speichert dann einfach beide Dateianhänge im selben Verzeichnis ab und kann diese wieder entpacken.

Soweit die Theorie. Leider musste ich feststellen, dass Multipart ZIP Archive doch einige Probleme bereiten können. Gerade bei Benutzern welche auf freie Alternativprodukte setzen, sei es nun unter Windows oder Linux, kommt es beim entpacken der Archive zu Problemen. So unterstützt z.B. 7-zip keine Multipart Archive. Und auch unter Linux heisst es in der Manpage von unzip:

[...]
BUGS
       Multi-part archives are not yet supported, except in  conjunction  with
       zip.  (All parts must be concatenated together in order, and then ''zip
       -F'' (for zip 2.x) or ''zip -FF'' (for zip 3.x) must  be  performed  on
       the  concatenated  archive  in  order to ''fix'' it.  Also, zip 3.0 and
       later can combine multi-part (split) archives into a  combined  single-
       file  archive using ''zip -s- inarchive -O outarchive''.
[...]

Schlussendlich hat bei mir die Variante funktioniert, welche ganz am Schluss der Manpage angegeben wird.

zip -s- archivname.zip -O archiv.zip
unzip archiv.zip

Das nächste mal produziere ich einfach weniger Daten 😉




Unix: Dateien mit nicht druckbaren Zeichen

Ich hatte gerade ein Verzeichnis auf einem Solaris 10 System, welches eine Datei mit dem Namen ¨ beinhaltete. Meistens sind solche Dateien Überbleibsel von wilden Kommandozeilen Orgien, bei denen irgend eine Umleitung schief gelaufen ist. Irgend ein Sonderzeichen hat sich dann im Dateinamen verewigt.

Doch wie schaut man solch eine Datei an (um entscheiden zu können, dass diese wirklich weg kann?) und wie löscht man diese dann?

Am einfachsten geht das wohl, wenn man statt über den Dateinamen über die Inode Nummer geht. (Eine Inode ist ein Eintrag in einem Unix-Dateisystem, der Metadaten einer Datei enthält.)

# ls -alFi
385683 drwxr-xr-x   8 pcs      iccc         512 Oct 29 11:59 ./
338148 drwxr-xr-x  23 root     root         512 Oct 13 12:55 ../
461707 drwxrwsr-x   2 root     iccc         512 Oct 13 12:54 tmp/
386788 -rw-r–r–   1 root     root        7694 Sep  1 08:31 ¨

Nun hat man aber immer noch das Problem, dass z.B. ein cat oder ein rm die Datei nicht behandeln können, da diese Programme nicht mit der Inode umgehen können. Hier hilft find, welcher gezielt nach Inodes suchen kann und dabei den korrekten Dateinamen mittels exec an ein anderes Programm übergeben kann.

Einige Beispiele

# Die Datei umbenennen in foobar
find . -inum 386788 -exec mv {} foobar \;

# Datei anschauen mit less
find . -inum 386788 -exec less {} \;

# Datei direkt löschen
find . -inum 386788 -exec rm {} \;




/bin/tar: Argument list too long

Wo sind bloss die 50GB Speicherplatz geblieben?

Diese Frage musste ich mir heute Morgen auf einem unserer Solaris 8 Systeme stellen. Nach einigen Aufräumarbeiten war der Übeltäter gefunden. Eines unserer Projektverzeichnisse hatte Logdateien enthalten, welche 38GB gefressen hatten.

Das Problem: Mir konnte natürlich wiedermal niemand sagen ob die Daten noch gebraucht werden.

Also wollte ich all die Dateien mit gtar/bzip2 Archivieren. Doch da hatte ich die Rechnung ohne den Wirt gemacht. Ein gtar cvjpf Archivdatei.tar.bz2 logfiles* scheiterte an der Menge der übergebenen Dateien und beendete sich mit der Fehlermeldung:

/bin/tar: Argument list too long

Was? Wieviele Datein waren denn da auf dem Server? Ein ls -1|wc -l brachte mir die Gewissheit.

372’378 Dateien!

Das ist natürlich eine Menge. Und wie sichere ich die nun? Ganz einfach. Zuerst wird mittels find eine Liste aller Dateien erstellt und danach wird das tar File anhand dieser Datei erzeugt.

find . -name '*.log' -print >/tmp/archivliste
tar cvjpf logfiles.tar.bz2 --files-from /tmp/archivliste

So einfach kann es sein… 🙂

Nachtrag:

Will man die Dateien löschen, hat man mit rm natürlich wieder das selbe Problem. Aus diesem Grund hier der Befehl, wie die Dateien löschen kann.

find . -name '*.log' | xargs rm

Uebrigens:

Der Grund, warum es über die Argumente nicht geht ist die beschränkte Puffergrösse für Argumente. Denn ein logfiles* wird in logfiles1 logfiles2 logfiles3 etc. aufgeschlüsselt. Und bei knapp 380’000 Daeien ist dieser Pufferplatz schnell einmal voll. Zumal der Puffer wohl nur zwischen 32Kb und 64Kb gross sein wird.




Hack den Igel

Keine Panik, Eggers Familien-Blog ist nach wie vor Kinderfreundlich. Hier geht es mitnichten darum putzige kleine Erinaceidae zu quälen sondern um das hacken von Thin-Clients der Firma IGEL. Genauer geht es um das Hacken eines IGEL 5110 X-Term.

Das Problem:

Bei einem Kunden sind in gewissen Applikationen keine Elemente anwähl- oder verschiebbar. Um nun herauszufinden ob das Problem bei den X-Terminal Settings oder unserem Server zu suchen ist muss ich zuerst einmal Zugriff auf des Kundens X-Terminal Einstellungen haben. Doch wie kommt man an diese ran ohne sich mit ihm telefonisch durch das grafische Konfigurationsmenu zu quälen?

Die Lösung:

Man logt sich remote auf das Terminal ein und kopiert sich die Settings. 🙂

Das Problem ist nur, wie komme ich auf das Terminal wo doch nur eine Remote Shell und kein Remote Login zur Verfügung steht? Ganz Einfach, man bittet den Kunden um hilfe. (Pech gehabt ihr Skriptkiddies da draussen! Keine rüberhol und kopier Anleitung für euch!)

Der Kunde muss folgende Schritte am Terminal vornehmen:

  1. Wenn das Terminal eingeschaltet ist muss er Alt-SysRq-F2 drücken (SysRq entspricht der Print Screen Taste)
  2. Danach wechselt er mit Alt-F10 auf die Konsole des Terminals.
  3. Nach drücken der ENTER Taste befindet er sich in einer bash Shell auf dem IGEL Terminal.
  4. Als nächstes muss er die Display Variable auf meinen Client setzen. Z.B. export DISPLAY=192.168.1.1:0.0
  5. Startet er nun ein X-Terminal habe ich mit dessen Hilfe Zugriff auf die Terminal Konsole. xterm &
  6. Nun kann der Kunde wieder in den normalen Modus wechseln mit der Tastenkombination Alt-F1.

In der Datei /wfs/setup.ini finde ich die XML Datei mit den Systemeinstellungen vor. Aber Achtung! Jede Änderung an der Datei verändert die Einstellungen des Terminals. Löscht man zuviel kann es passieren, dass das Terminal nach dem reboot nicht mehr richtig funktioniert.

Sicherer ist es, wenn man einfach das Setuptool selber ausführt. Hierzu muss man den Befehl /usr/X11R6/bin/setup ausführen.




ASUS P5E3 Deluxe/WiFi-AP@n mit integriertem Linux

Die Firma ASUS ist hauptsächlich für Ihre qualitativ guten Motherboards bekannt. Auch ich verwende bei Systemen, welche ich komplett selber zusammenbaue immer wieder gerne deren Mutterplatinen.

Beim neusten Motherboard (einem Core 2 Quad fähigen Board) haben sich die Entwickler bei ASUS etwas ganz spezielles einfallen lassen. Das System besitzt ein minimalstes Linux auf einem Chip, welches innerhalb von 5 Sekunden gebootet werden kann. Beim ersten mal muss man noch einige Fragen über sich ergehen lassen (Sprache, IP Adresse fix oder DHCP) und hat dann einen absolut minimalen Desktop vor sich, auf dem sich ein abgespeckter Firefox 2.0 Browser mit integriertem Flash Plugin findet. Bookmarks und sonstige Einstellungen werden auf dem Chip solange gespeichert, bis man im BIOS die «Default Settings» auswählt.

Die grafische Oberfläche (oder die Linux Distribution?) nennt sich SplashTop. Auf der Website [http://www.splashtop.com/] findet man jedoch noch keine Informationen. Diese sollen ab dem 10. Oktober (Release Termin) verfügbar sein. Man darf gespannt sein… Was man bisher an Screenshots bei Phoronix sieht, macht aber bereits Lust auf dieses System.

Meiner Meinung nach ist diese Erweiterung endlich einmal ein brauchbares Feature. Man stelle sich vor, der Rechner kommt beim hochfahren nur mit einer Fehlermeldung hoch. Einfach das SplashTop Linux booten und nach der Fehlermeldung bei google suchen. Kein zweiter Computer ist mehr nötig, kein langes booten irgend eines Systems muss mehr abgewartet werden.




Gentoo Linux – Die Metadistribution

Tobias ScherbaumTobias Scherbaum (a.k.a. dertobi123) hat endlich sein Buch Gentoo Linux – Die Metadistribution fertig gestellt. Unter angegebenem Link kann man bereits einmal das Inhaltverzeichnis, Vorwort, Kapitel 1 sowie das Stichwortverzeichnis als PDF herunterladen.

Drei Vorabexemplare inklusive CD hat er bereits erhalten und auch davon ein Photo geschossen. Wer also schon immer einmal Gentoo kennenlernen wollte, sich jedoch noch nicht an die zugegebenermasse komplexere Materie gewagt hat könnte es mit diesem Buch einmal versuchen.

Voraussichtlich wird es für 29€ verfügbar sein. In der Schweiz kann man es bereits bei buch.ch zum Preis von 49 CHF vorbestellen. Jedoch wird es dort noch als Gentoo Linux gehandelt.

Wird wohl langsam Zeit, dass ich mein Buch ebenfalls einmal auf die Beine stelle. Mir schwebt schon seit längerem ein unterhaltsam geschriebenes Linux/Gentoo Anfängerbuch vor. Ein Probekapitel kann im Gentoo Forum gelesen werden.




PHP: Call to undefined function: utf8_decode()

Das kommt davon, wenn man versucht seinen Rechner und die darauf laufenden Programme nach der Methode «alles raus was nicht benötigt wird» zu sichern. Irgend etwas vergisst man garantiert…

Mir wurde das bewusst, nachdem ich folgende Fehlermeldung beim betreiben des Blogs entgegengeschmettert bekam.

Call to undefined function: utf8_decode()

PHP will mir also mitteilen, dass er den übergebenen String gerne von UTF8 nach irgendwas decodieren möchte, dies jedoch aufgrund fehlender Funktionalität nicht möglich ist. Die Frage ist nur, wie kriege ich diese Funktionalität in PHP gepackt?

Die Antwort ist einfach. Man muss lediglich XML Unterstützung beim kompilieren aktivieren.

Wer (wie ich) Gentoo verwendet muss dabei nur wissen, welches USE Flag zu aktivieren ist.

  • Für PHP4 wird zwingend das USE Flag expat benötigt.
  • Für PHP5 wird zwingend das USE Flag xml benötigt.

So einfach kann es sein 😉