Don't understand german? Read or subscribe to my english-only feed.

TrueCrypt – OpenSource Disk Encryption Software für Windows XP/2000/2003 und Linux (Update 2)

April 18th, 2006

Wahrlich keine sonderliche Neuigkeit, aber endlich hatte ich mal Gelegenheit es mir anzusehen: TrueCrypt.

Unter Windows hantierte ich bisher mit GPG-verschlüsselten Dateien (was ich trotz WinPT mangels transparenter Integration eher als Krampf empfinde), auf Linux nutze ich cryptsetup-luks bzw. den praktischen Wrapper drum herum namens grml-crypt. TrueCrypt ist sowohl für Windows als auch Linux verfügbar, und insofern vor allem für Leute interessant, die öfters auf mehreren Betriebssystemen mit schützenswerten Daten zu tun haben.

Das grafische Interface für Windows ist selbsterklärend und man kann eine Container-Datei inkl. Software-Installation innerhalb von 5 Minuten in Betrieb nehmen. Die Integration durch die Einbindung als weiteres Laufwerk ist sehr angenehm.

Die unter Windows erstellte Container-Datei lässt sich dann unter Linux einfach nutzen:

# modprobe truecrypt
# truecrypt --filesystem vfat ~/truecrpypt /mnt/test   # die container-datei einhängen
Enter password for '/root/truecrpypt':
# truecrypt -vl
/dev/mapper/truecrypt0:
Volume: /root/truecrpypt
Type: Normal Size: 10485248 bytes
Encryption algorithm: AES
Mode of operation: LRW
Read-only: No
Hidden volume protected: No
# $DATEN_BEARBEITEN
# truecrypt -d         # und schliesslich wieder aushängen

Update: Schade ist, dass man mit TrueCrypt unter Linux bisher nur komplette Partitionen verschlüsseln, aber keine einzelnen Container anlegen kann. Schade ist, dass man mit TrueCrypt unter Linux keine Möglichkeit hat, um ein Truecrypt-Volume zu erstellen.

Update2: mit TrueCrypt Version 4.2 kann man jetzt netterweise auch unter Linux Volumes anlegen. Das passende Debian-Paket für grml-User gibt es bereits im grml-Repository.

Aber mal sehen, ob sich TrueCrypt im Praxisalltag neben grml-crypt bewähren kann. Auf alle Fälle wird die in Kürze erscheinende grml-Version 0.7 Support für truecrypt mitbringen. :)

Merke…

April 14th, 2006

… Babyphones können WLAN-Killer sein.

grml 0.7 – bitte ein Bootenschnitzl!

April 10th, 2006

Eine neue Version von grml, der Live-CD für Sysadmins, Texttool-User und Geeks ist verfügbar. Diesmal in Version 0.7 und mit dem Codenamen ‘Bootenschnitzl’.

Was ist neu? Der Kernel wurde auf Version 2.6.16 aktualisiert. Es gibt Support für aktuelle Vodafone-/UMTS-Karten via dem nozomi-Kernelmodul. Leute mit einem SD-Cardreader wie z.B. im Samsung X20-Laptop vorhanden werden sich über den SDHCI-Support freuen. Reiser4, Speakup und SquashFS sind selbstverständlich auch wieder mit an Board.

Im Userland hinzugekommen ist bt-audio, ein Skript um ein Bluetooth-Headset einfach nutzen zu können. grml-debugtools beinhaltet den event-viewer, ein Programm um alle fork/exec/exit/uid/gid-Events vom laufenden System via dem neuen Netlink/Fork-Connector Interface zu sehen. grub kann man nun direkt aus dem Bootmenü erreichen. grml2hd beherrscht nun auch die Installation auf externen Firewire-Geräten. truecrypt ist auch wie versprochen mit an Board.
Und es gibt noch viele weitere Nettigkeiten… :-) Weitere Details gibt es in den offiziellen Release-Notes.

Und wer mit dem Booten und Nutzen der CD noch nicht genug hat, kann sich ein Bootenschnitzl-Shirt im grml-Spreadshirt-Shop holen. Wessen Hunger auch dann noch nicht gestillt ist, der wird sein Schnitzl wohl oder übel im Restaurant seiner Wahl holen gehen müssen. Auf alle Fälle wünsche ich guten Appetit und Mahlzeit!

Raw-Devices mit Linux

April 6th, 2006

Vor ein paar Tagen kam beim Mailen zum Thema Klonen von Systemen die Sprache auf “wie geht das mit Raw-Devices eigentlich mit Linux?”. Unter Solaris geht das bekanntlich mit /dev/rdsk/foo als Raw-Device für /dev/dsk/foo. Für Linux gibt es etwas Äquivalentes.

Die alte Variante der Nutzung von Raw-Devices mit Linux:

# modprobe raw
# raw /dev/raw/raw1 /dev/sda1

Und schon kann man auf /dev/raw/raw1 munter herumoperieren. Aber Achtung: Das Kernelmodul wollen die Linuxentwickler schon seit längerem “deprecaten”:

$KERNEL_SOURCE_2.6.16/Documentation/feature-removal-schedule.txt
What:   RAW driver (CONFIG_RAW_DRIVER) When:   December 2005
Why:    declared obsolete since kernel 2.6.3 O_DIRECT can be used instead
Who:    Adrian Bunk 

Wenn ich das richtig sehe, fliegt der raw-Treiber entweder mit 2.6.17 oder im Jänner 2007 raus. Ob das dann auch wirklich der Fall ist, wird man ja sehen. ;)

Statt dem Kernelmodul sollte man also O_DIRECT nutzen. Der Vorteil von O_DIRECT ist, dass man nur Lese-/Schreibrechte für das Device braucht und keine Rootrechte besitzen muß, um das Raw-Device auf eine Platte/Partition zu binden. Der Nachteil von O_DIRECT ist, dass es (AFAIK) Linux-only ist und die Applikation das halt von sich aus unterstützen muß.

dd auf /dev/raw/raw* ist nicht schneller als über ein Blockdevice, aber sg_dd taugt für Raw-Devices. Und aktuelle dd-Versionen aus den coreutils beherrschen O_DIRECT via dem Flag ‘direct’ (“direct use direct I/O for data”).

raw-Devices und O_DIRECT sind von der Geschwindigkeit her übrigens äquivalent, laut linux_2_6_datacenter_performance.pdf liegt das im Bereich von unter 2% Unterschied. Ein Benchmark mit O_DIRECT/raw und einem aktuellen 2.6er Kernel steht bei mir noch auf der ToDo-Liste.

Wer jetzt noch ein bisschen Theorie dazu will, kann z.B. “Asynchronous I/O Support in Linux 2.5” aus Reprint-Pulavarty-OLS2003.pdf und O_DIRECT von Andrea Arcangeli als Einstiegspunkt nehmen.

Samsung X20 – Cardreader mit Linux (Update)

March 31st, 2006

Mit meinem Samsung X20 Laptop bin ich sehr zufrieden. Ein Punkt auf der Todoliste war noch der eingebaute Cardreader. Jetzt habe ich 18 Euro in eine SD-Karte invesiert und wollte schauen ob ich “Multi Memory Card Slot: Memory stick / Memory stick pro / SD card” nutzen kann. Die Hardware identifiziert sich als solche:

# lspci
[...]
0000:02:09.2 0805: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 17)
0000:02:09.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 08)

Und dank dem sdhci-Treiber (Secure Digital Host Controller Interface) war es dann auch stressfrei. Als Grundlage diente der aktuelle 2.6.16-grml Kernel, diesen habe ich um den sdhci-Treiber aus dem mm-Tree erweitert, et voila:

# modprobe sdhci
# dmesg
[...]
sdhci: Secure Digital Host Controller Interface driver, 0.11
sdhci: Copyright(c) Pierre Ossman
ACPI: PCI Interrupt 0000:02:09.2[C] -> GSI 18 (level, low) -> IRQ 209
mmc0: SDHCI at 0xb8003800 irq 209 PIO
mmcblk0: mmc0:8000 SD256 247040KiB
mmcblk0: p1

Und schon geht es dahin:

# mount /dev/mmcblk0p1 /mnt/cardreader

Der nächste Build von 2.6.16-grml wird den Treiber beinhalten und damit wird grml 0.7 auch Support für sdhci beinhalten. Mein Samsung X20-Howto wird natürlich auch noch dementsprechend erweitert.

Update: das Device (/dev/mmcblk0p1) wird nicht immer automatisch erstellt. Abhilfe schafft dann ein manuelles ‘modprobe mmc_block’. Wenn es erfolgreich war sieht man im syslog dann sowas:


Mar 31 00:54:26 grml kernel: mmcblk0: mmc0:8000 SD256 247040KiB
Mar 31 00:54:26 grml kernel: mmcblk0: p1

Funktioniert übrigens nur mit SD-Karten. Der ausgeborgte Sony Memory-Stick will noch nicht. Der Kernelbuild ist übrigens auch schon fertig.

Booten vom USB-Stick: fdisk vs. cfdisk

March 24th, 2006

Ich habe mir einen 1 GB großen USB-Stick geleistet, um auch das “große” grml120 via USB-Stick booten zu können. Das ist nämlich noch mal schneller als via CD-ROM zu booten. Und an sich ist es auch nur ein “grml2usb /path/to/grml.iso /mnt/external1″ und schon ist auf dem USB-Stick grml drauf. Das BIOS listet den USB-Stick auch brav, aber trotz installiertem syslinux bootet er nicht: “No operating system found”. Huch?! Na schauen wir mal:

root@grml ~ # fdisk -l /dev/sda

Disk /dev/sda: 1024 MB, 1024966656 bytes
32 heads, 63 sectors/track, 993 cylinders
Units = cylinders of 2016 * 512 = 1032192 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         992      999813+   6  FAT16
root@grml ~ # fdisk -l -u /dev/sda

Disk /dev/sda: 1024 MB, 1024966656 bytes
32 heads, 63 sectors/track, 993 cylinders, total 2001888 sectors
Units = sectors of 1 * 512 = 512 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1             245     1999871      999813+   6  FAT16
root@grml ~ # cfdisk -P s /dev/sda
Partition Table for /dev/sda

First       Last
# Type       Sector      Sector   Offset    Length   Filesystem Type (ID) Flag
-- ------- ----------- ----------- ------ ----------- -------------------- ----
Pri/Log           0         244*     0#        245*Free Space           None
1 Primary         245*    1999871      0     1999627*FAT16 (06)           None
Pri/Log     1999872     2001887      0        2016 Free Space           None

Man achte auf die Position der Partion im Output von fdisk vs. ‘fdisk -l -u’ vs. cfdisk. Und genau das war der Fehler: die Partition hat nicht beim 1. Sektor angefangen und darum kann man vom USB-Stick auch nicht booten. Kaum habe ich die Partition angepasst geht auch das Booten einwandfrei. :-) Also unbedingt darauf achten, wie man fdisk aufruft (bzw. gleich cfdisk nehmen) und wie die Partition(en) angelegt sind.

Merke…

March 23rd, 2006

… Rumkugeln haben neben dem Lüfterausgang des Laptops nichts zu suchen.

Portknocking in Reallife

March 22nd, 2006

Knock Code Technology

[via schneier on security]

ms-sys – Microsoft kompatiblen Bootrecord schreiben

March 22nd, 2006

ms-sys ist ein praktisches Tool für Leute, die gerade keine Windows-CD zur Hand haben, aber den Windows-Bootrecord neu schreiben wollen (AKA ‘fdisk /mbr’):

This is a Linux program for writing Microsoft compatible boot records. The program does the same as Microsoft “fdisk /mbr” to a hard disk or “sys d:” to a floppy or FAT partition except that it does not copy any system files, only the boot record is written.

Die folgende Option ist jene, die ich meistens benötige:

-m, --mbr       Write a Windows 2000/XP/2003 MBR to device

Mit einem einfachen:

# ms-sys -m /dev/hda

ist das Windows-System auch wieder bootfähig. Selbstverständlich findet man ms-sys auf der Besten aller Live-CDs. ;-)

Die Gesetze von OpenSource…

March 12th, 2006

Ja, OpenSource hat seine eigenen Gesetze. Das wissen wir wohl spätestens seit The cathedral and the bazaar. Mein grml-Projekt läuft jetzt seit über einem Jahr und für mich ist es seither mindestens ein Halbtagsjob. In dieser Zeitspanne gab es viele Höhepunkte, aber – wie bei jedem Projekt und wie das Leben so spielt[tm] – auch einige Tiefschläge. Was aber hat mich diese Zeit gelehrt?

Projektanfang

“Hallo, ich bin foo und möchte bar machen. Bar soll das Beste Teil werden!!11! Wer macht mit?” Ein oft gemachter Fehler: an die Öffentlichkeit gehen bevor Code existiert. Merke: es werden sich weitere Entwickler nur dann finden, wenn es bereits Code gibt. Setze dich hin, überlege dir das Design, schreibe ein wenig Dokumentation *für* *dich* *selbst* und erst wenn du was Lauffähiges/Vorzeigbares hast, mache dich auf die Suche nach Contributoren.

Für Leseratten: einschlägige Literatur lesen. Gute Startpunkte sind z.B. das bereits erwähnte The Cathedral and the Bazaar von Eric Steven Raymond und “Die Software Rebellen” von Glyn Moody [ISBN: 3478387302].

Zielgruppe

Das typische OpenSource-Projekt ensteht aus der Motivation, dass ein Problem gelöst werden will. Lösungen alla WFM (Works For Me) sind schnell gebastelt, der Weg bis zu einer öffentlichen Release ist aber weit. Wirklich. Ja, definitiv. WFM ist das, was man als $HOME/bin/* kennt. Um Software auch anderen Leuten zugänglich zu machen, muss aber nicht nur die technische Implementierung stimmen. Man muss sich auch um Sachen wie Dokumentation und Support kümmern (mehr zu diesen Themen noch später). Um den WFM-Status erfolgreich(!) zu verlassen muss man sich klar machen, wer denn eigentlich die Zielgruppe ist. Man kann prinzipbedingt einfach nicht alle głücklich machen. Man kann (in den meisten Fällen) einen Experten und einen Anfänger nicht gleichermaßen bedienen. Deswegen sollte man sich die Zielgruppe ganz klar definieren. Die Software/das Projekt muss auch dementsprechend ausgelegt sein.

Lerne mit Kritik umzugehen

Geschmäcker sind verschieden. Ebenso die Kommunikationsfähigkeiten. Es gibt Leute die schon in der ersten Mail an dich einen harrschen Tonfall verwenden. Flamer gibt es ebenso wie freundliche Menschen. Lerne mit ihnen umzugehen. Unterscheide zwischen konstruktiver und destruktiver Kritik und versuche die Aussage hinter dem Text zu finden.

Feedback?

Feedback gibt es vorwiegend bei Problemen. Ein Medienexperte hat mir gelehrt, dass man ca. 10-mal so viel negatives wie positives Feedback bekommt. Das ist also normal. Reagiere aber auf jede Art von Feedback, lasse den Anderen nicht im Ungewissen hängen. Egal ob der Fehler in deinem Produkt oder beim Benutzer (PEBCAK) liegt.

Bugreports

Bugreports kommen von Leuten die sich für dein Produkt interessieren. Wenn sich jemand für dein Produkt nicht interessiert, wird er dich auch gar nicht erst wissen lassen was wo happert. Stelle deinen Benutzern also ein Bug Tracking System (BTS) zur Verfügung. So erhält man Transparenz nach aussen. Bugreports sind dann nicht nur dem Maintainer in dessen Mailbox zugänglich, sondern auch andere Leute dürfen wissen, was Sache ist. Wichtig: das BTS muss *einfach* und *schnell* zugänglich sein. Mache nicht den Fehler, den besonders große, kommerzielle Firmen gerne machen: geschlosse BTS. Das BTS muss öffentlich sein. Verlange auch keinen Account für das BTS. Wer sich erst registieren muss (siehe Bugzilla@Novell) oder einen Account via Mail braucht (siehe bugs.kde.org) hat schon eine Hürde aufgebaut, die viele User gar nicht überqueren können oder wollen. Wer regelmäßig Bugs meldet, wird auch gegen einen Account nichts haben. Aber Leute denen etwas auffällt und die das den Entwicklern mitteilen wollen, möchten nicht erst minutenlang Webfrontents durchklicken. Ein gutes Beispiel, wie man ein BTS sinnvollerweise betreibt ist IMO jenes von Debian. Wer sich ein BTS mangels Ressourcen nicht leisten kann, sollte zumindest einen editierbaren Bereich schaffen. Ein Wiki ist dafür sehr brauchbar. Und für Leute die weder mit dem BTS noch mit einem Wiki umgehen können/wollen empfiehlt es sich, auch ein Webformular zu schaffen. Die darüber versandten Mails kann man immer noch in ein BTS oder das Wiki einpflegen. Natürlich skaliert das nicht beliebig, aber wenn man eine gewisse Projektgröße hat, stellt sich auch die Ressourcenfrage nicht mehr so… Das Webformular hat auch den großen Vorteil, dass der Bugreporter dafür kein funktionierendes Mailsetup braucht. Bei einer Live-CD wie grml übrigens sehr praktisch: mehrere verschiedene Browser sind vorhanden und wer Netzwerk hat kann einen Bugreport ganz schnell und einfach direkt nach dem Start machen.

Produkvermarktung

Screenshots! Für Neulinge deines Produktes zählt der erste Eindruck. In vielen Fällen ist der Aufwand, um “ein Produkt zu aktivieren” hoch. Sei es, dass erst einige (hundert) MB runtergeladen werden wollen, dass die Software erst durch die autoconf/automake-Hölle muss, oder dass man bestimmte Hardware braucht um sie zu nutzen. Bis dein Produkt beim Benutzer läuft, ist der Weg unter Umständen ein langer. Biete dem User also möglichst viele Möglichkeiten, dein Produkt schon im Vorfeld zu begutachten. Screenshots sind leicht und einfach zu erstellen und der User kann schon vorab sehen was ihn erwartet. Wenn ihm das Gezeigte zusagt, hast du vielleicht einen glücklichen Benutzer mehr. Umgekehrt bewahren Screenshots deine Benutzer vor falschen Erwartungen.

Produktverbreitung

Wie verbreite ich meine Software/mein Produkt erfolgreich? Wenn es Software ist, dann soll diese vermutlich nicht nur in deiner Distribution laufen, sondern auch auf Redhat, SuSE, $whatever zu finden sein. Mach es den Paketbetreuern also möglichst einfach, deine Software zu paketieren. Inkludiere eine Lizenzinfromation. Schreibe unbedingt Changelogs! Mach’ deine Software von möglichst wenigen Bibliotheken und weiterer Software abhängig. Sorge dafür, dass dein Produkt schnell zugänglich ist. Besorge Mirror für hohe Verfügbarkeit und schnelle Downloads. Versuche nach Möglichkeit stabile Links sowohl für deine Homepage als auch die Downloads selbst zur Verfügung zu stellen. Für Leute ohne Breitbandzugang sollte es auch einen Weg geben, um an dein Produkt auf anderen Wegen zu gelangen. Opensource-Shops kommen da oft von selbst angetrabt und kosten dich nichts. Und für Interessenten soll es die Möglichkeit geben, um Informationen bezüglich neuer Releases/Versionen zu bekommen, z.B. via Mailingliste oder RSS-Feed.

Werbung

Mundpropaganda. Nichts verbreitet sich schneller und effektiver, als wenn Leidensgenossen miteinander über gleiche Interessen reden. Sorge also dafür, dass deine Zielgruppe dein Produkt kennt. Sobald dein Produkt besser als die existierenden Alternativen ist, erledigt sich das fast von alleine. Das gilt nicht zwingend für alle User (AKA Mainstream), denn dort verbreitet sich in der Regel nicht immer das technisch beste Produkt, aber für deine Zielgruppe gilt das mit ziemlicher Sicherheit. Sei präsent! Schau dir die Referer auf deiner Projekt-Webseite an und melde dich in den Blogs, Artikeln, Foren,… zu Worte, wenn es was zu sagen gibt.

Teamarbeit

Arbeite mit deinen Leuten zusammen und nicht gegeneinander! Versuche zu erkennen, welche Leute für welche Aufgaben geeignet sind. Die meisten Sachen regeln sich von alleine, aber achte darauf, dass sich Leute mit einem Punkt auf der Todo-Liste nicht überfordert fühlen. Eine Zusage alla “ich mache $feature bis…” ist schnell gemacht, die Realisierung aber eine andere Sache. Unterschätze deine Mitstreiter aber auch nicht. Stille Wasser sind oft tief! :-)

Releasezyklen

Ein kritischer Punkt bei OpenSource ist der potenzielle Zeitmangel für das eigene Projekt. Dahinter stecken meist auch finanzielle Aspekte. Damit andere Leute den Status aber einschätzen können, muss die Website aktuell sein. Die letzte Release sollte nicht 3 Jahre zurückliegen. Zeige deinen Benutzern, dass du dich um sie kümmerst und informiere sie regelmäßig über den Entwicklungsstatus. “Release early and often.” Lass dich aber nicht von einem Releasedatum stressen. Kommerzielle Anbieter haben diesen Termindruck und du als freier OpenSource-Entwickler hast einen Riesenvorteil, den du auf keinen Fall ungenutzt lassen solltest. Die Release geht nicht dann raus, wenn es das Marketing will, sondern wenn du als Entwickler die Software als releasereif ansiehst. Wenn die Release deiner Meinung nach steht, dann steht sie, und keine Sekunde früher. Wenn es Deadlines einzuhalten gibt (CD-Druck, Fachartikel,…) , dann setze dir deine eigene Deadline noch wesentlich vor dem Stichtag. Es gibt Faktoren die du nicht kontrollieren kannst. Bugs bemerkt man laut Murphy immer im falschen Moment. Stecke dir aber auf jeden Fall Ziele für Releases. Nur wer ein Ziel vor Augen hat kommt zu einem Ergebnis. Ich verweise in Entwicklergesprächen gerne auf Gets Things Done. “Ach, ich mach die Release, wann es halt passt…” ist der erste Schritt zu Yet-Another-Dead-SourceForge-Project++.

Userfriendly

Schreibe fehlertolerante Software. Entwickler interagieren mit ihrer Software anders als die Benutzer. Deine Benutzer kommen auf Ideen, auf die du nie im Leben kommen würdest. Ja, wirklich. Mach’ Usability-Untersuchungen. Am Besten mit Leuten, die deine Software noch nicht kennen. Im Laufe der Zeit entwickelt sich einfach eine Betriebsblindheit. Was für den Einen selbstverständlich sein mag, ist für einen Anderen noch Neuland.

Kompatibel

Schreibe deine Software so weit es geht rück- und vorwärtskompatibel. Deine Benutzer werden dich vermutlich hintern den Mond wünschen, wenn sie bei jedem Down- oder Upgrade Konfigurationsdateien nachziehen und eine schwarze Katze opfern müssen, nur damit deine Software laufen will. Auf immer und ewig Altlasten mit zu schleppen ist aber auch nicht besonders elegant. Den Kompriss zwischen “wird sind vollkommen auf- und abwärtskompatibel” und “wir schmeissen Altlasten von Bord” zu finden ist die Kunst.

Finanzierung

Software-Entwicklung kostet Zeit und Geld. Nicht jeder OpenSource-Entwickler hat das Glück und kann Software im Zuge einer Anstellung programmieren. Was aber können Benutzer zurückgeben? Man muß dafür nicht programmieren können. Erzähle z.B. anderen Leuten wie gut dir die Software gefällt, das schmeichelt den Entwicklern. Gute Software zeichnet aus, dass sich mehr Sachen mit ihr realisieren lassen, als auf den ersten Blick scheint. Schreibe deshalb Dokumentation – Anleitungen, Artikel, Tipps und Tricks. Und vielleicht gibt es ja auch eine Wunschliste oder Möglichkeit zum Spenden? Mit dem Geld kann der Entwickeler noch mehr machen (vielleicht bekommst du ja endlich *das* langersehnte Feature implementiert?), neue Hardware und Literatur besorgen, oder auch einfach Sachen wie Hostingkosten für das Projekt bezahlen. Gib zurück was du bekommst!

Weiterführende Literatur

Wer an dieser Stelle noch Literatur zu dem Thema sucht, dem kann ich “Producing Open Source Software – How to Run a Successful Free Software Project” von Karl Fogel schwer ans Herz legen. Das Buch steht unter der Creative Commons Attribution-ShareAlike Lizenz und die 184 Seiten sind wirklich angenehm zu lesen. Vieles davon ist den Meisten vermutlich eh schon bekannt, aber es wird noch einmal ins Bewusstsein gerufen und es sind nette Anekdoten zu finden. :)

Persistente Interface-Namen mit Linux

March 9th, 2006

Eine Runde Bullshit-Bingo? Nein, keine Angst. ;-) Es geht um das Problem, dass man auf Systemen öfters stabile Interface-Namen haben will/muss. Das gilt nicht nur für externe Geräte wie USB-Sticks und Drucker, sondern durchaus auch für NICs. Praxisbeispiel: mehrere NICs in einem Linux-Gateway, die mit einem iptables-Skript gesteuert werden. Nur weil die NIC mit dem Interface-Namen eth1 ausfällt und eth2 so zu eth1 werden könnte, dürfen Policies aber nicht auf das “neue, aber falsche eth1” angewandt werden. Genau für sowas will man eben auch persistente Interface-Namen haben.

Als erste Variante bietet sich der Weg über modutils bzw. module-init-tools an. modutils ist noch von Kernel 2.2 und 2.4 und man geht dabei über /etc/modutils/. Wer Kernel 2.6 fährt, geht natürlich über /etc/modprobe.d/ der module-init-tools. Bei Debian bitte nicht direkt /etc/modules.conf bearbeiten, sondern brav über /etc/modprobe.d/ und update-modules gehen. In die aliases-Datei trägt man dann die Konfiguration ein:

alias eth0 $module1
alias eth1 $module2

Durch “options” lässt sich das Problem vermeiden, dass bei identischen Netzwerk-Karten der gleiche Treiber mehrfach gebraucht wird. Siehe auch www.linuxhaven.de/dlhp/HOWTO/DE-Netzwerk-HOWTO-5.html.

Als zweite Variante bietet sich interface-Mapping via ifupdown an. Das funktioniert bei Debian über /etc/network/interfaces und z.B. das get-mac-address.sh-Skript:

# cp /usr/share/doc/ifupdown/examples/get-mac-address.sh /etc/network/
# chmod 755 /etc/network/get-mac-address.sh
# cat /etc/network/interfaces
[...]
auto eth0 eth1
mapping eth0 eth1
script /etc/network/get-mac-address.sh
map xx:xx:xx:xx:xx:x1 lan
map xx:xx:xx:xx:xx:x2 internet 

Siehe dazu auch /usr/share/doc/ifupdown/examples/network-interfaces.gz.

Als dritte Variante bietet sich nameif aus den net-tools an. Dabei trägt man in /etc/mactab die MAC-Adressen und die Interface-Namen ein. Nachteile: funktioniert leider nur für Ethernet-Devices und man muss dafür Sorge tragen, dass nameif aufgerufen wird, bevor das Interface “up” ist.

Die vierte Variante geht über udev. Das ist übrigens jene Variante, die ich aktuell bevorzuge, da man sie ohne Reboot und distributionsunabhängig einsetzen kann. Man schreibt dafür einfach seine eigenen Regeln:

# cat /etc/udev/network.rules
KERNEL=="eth*", SYSFS{address}=="xx:xx:xx:xx:xx:x1", NAME="lan1"
KERNEL=="eth*", SYSFS{address}=="xx:xx:xx:xx:xx:x2", NAME="lan2"
KERNEL=="eth*", SYSFS{address}=="xx:xx:xx:xx:xx:x3", NAME="wlan1"
# cd /etc/udev/rules.d/ && ln -s ../network.rules z35_network.rules

Die SYSFS-Adresse entspricht dabei natürlich der MAC-Adresse. Bitte auf die Schreibweise achten und am Besten via ‘udevinfo -a -p /sys/class/net/$DEVICE/ | grep address’ auslesen. Nicht vergessen: die Regeln auch via /etc/udev/rules.d/ aktivieren.

Weitere Informationen zu udev gibt es in /usr/share/doc/udev/ und “Writing udev rules” (lokal /usr/share/doc/udev/writing_udev_rules/index.html). Letzteres aber im eventuellen Problemfall bitte mit Vorsicht geniessen: der Guide entspricht nicht 100%ig den aktuellen udev-Features.

Ach ja, wie schaut das dann im Einsatz aus?

 # awk '/:/ {print $1}' /proc/net/dev
lo:
ipw:
b44:
1394:
sit0:
vmnet1:
vmnet8:
#

Und schon kann man die Interfaces kontrolliert ansprechen. Ein ‘ifup ipw=home’ reicht um das WLAN@home via Interface-Mapping zu aktivieren. Netzwerk via Firewire gibt’s via ‘ifup 1394=dhcp’ und natürlich eignet sich das auch hervorragend für die Systemskripte. Zum Thema Interface-Mapping gibt es aber noch ein anderes Mal mehr…

Simpsons in Real-Life

March 9th, 2006

3Das Video117117 kennt jetzt sowieso schon jeder. (Wer das noch nicht kennt: wie heisst der Stein hinter dem du wohnst? Was für Blogs liest du? 8-))

Aber ist jemandem aufgefallen, dass Marge und Maggie veitenserkehrt sitzen?

*

jot — print sequential or random data

March 9th, 2006

Jot is used to print out increasing, decreasing, random, or redundant data, usually numbers, one per line.

Das, was ein

for i in {1..10}; do echo $i; done

in der Bash, ein

for i in {1..10}; echo $i

in der Zsh, ein

seq 0 10

mit seq ist, entspricht einem:

jot 11 0

mit dem jot-Tool. Ja, es ist yet-another-seq-Tool. ;-) Weitere Usage-Examples zu jot gibt es in dessen Manpage. Auf Debian bekommt man jot via:

apt-get install athena-jot

KeyJnote

March 8th, 2006

keyjnote screenshotBei der Linuxnacht auf den Chemnitzer Linuxtagen wurde unter anderem die Applikation KeyJnote vorgestellt:

KeyJnote is a program that displays presentation slides. But unlike OpenOffice.org Impress or other similar applications, it does so with style. Smooth alpha-blended slide transitions are provided for the sake of eye candy, but in addition to this, KeyJnote offers some unique tools that are really useful for presentations.

Die gezeigten Features klangen vielversprechend und daher wollte ich das mal mit meinen PDF-Folien probieren. Nach einem:
# apt-get install python-opengl python-pygame python-imaging
geht es mit ./keyjnote.py $PDF auch schon dahin. Schaut nett aus und bringt mir Features, die ich bisher bei meinen PDF-Folien vermisst habe.

Chemnitzer Linux-Tage 2006 – geschafft

March 6th, 2006

Am Freitag um 12 Uhr Treffpunkt in Graz, gegen 14 Uhr waren wir dann mit 3 Autos und insgesamt 11 Leuten auf der Autobahn. Den Abend haben wir gemeinsam verbracht. Im Stau. 8-) Dank Schneefall und mehrerer Unfälle auf der Autobahn sind wir erst um 00:30 Uhr in Chemnitz zum Linuxtag angekommen. :-o Zimmer beziehen war glücklicherweise trotzdem noch möglich. Ein großes Danke an die exzellente Organisation und jene Leute, die so lange auf Leute wie uns gewartet haben!

Nach zu wenig Schlaf gabs in der Früh mal ein Frühstück und danach habe ich die ersten 4 Slots im Vortragsraum Nummer 4 verbracht. Im Laufe des Tages habe ich dann viele nette Leute getroffen, den Abend haben wir schließlich bei der Come-Together-Party verbracht. Nico haben wir mit österreichischem Dialekt zugedichtet, wir haben gefinkelte[tm] Wörter entdeckt. 8-) Den Abend haben wir mit der Linuxnacht ausklingen lassen und im Gästehaus hatten wir dann netterweise noch bis gegen 3 Uhr WLAN-Zugang von einer benachbarten Veranstaltung. *hehe*

Am Sonntag war dann neben weiteren Debian-Vorträgen auch mein Vortrag zu grml – Debian-basierte Live-CD für Systemadministratoren und Texttool-User” an der Reihe. Abgesehen von technischen Probleme mit den Rolos und der Sonneneinstrahlung ist es, glaube ich, ganz gut gelaufen. Die Folien von meinem Vortrag gibt es online (1,5 MB, PDF). Die vom grml-Team und Tuxman.de gesponserten grml-CDs (eine spezielle CLT06-Edition) habe ich dann nach dem Vortrag verteilt. (Falls jemand aus Graz noch eine haben möchte, ein paar wenige CDs habe ich noch übrig – abholbereit bei mir auf der TUG.)

Ein großes Danke geht an Timo ‘Spida’ Boettcher, der dem grml-Team einen Kasten Club-Mate gesponsert hat! :-) Das Scho-ka-kola war übrigens auch eine neue Erfahrung für mich.

Am Sonntag abend ging es in den Medien wegen Schneefall rund. Wir sind aber trotzdem auf gut Glück gegen 19 Uhr losgefahren. Außer LKWs war auf den Straßen nichts los, auch kein besonders schlechtes Wetter. So sind wir gegen 2 Uhr 30 heil in Graz angekommen.

Bilder vom Event gibt’s z.B. bei Nobse und von unserem Karl (thx!).

CD-Prüfen mit readcd

March 1st, 2006

In der letzten Charge grml-CDs, die ich von meinem Bruder bedruckt bekommen habe, haben sich ein paar kaputte CDs reingeschlichen. Beim Booten der grml-CD bekommt man dann meistens SquashFS-Fehler und “dann geht nix mehr”. Um jetzt die schlechten von den guten[tm] CDs auszusortieren, habe ich readcd verwendet. So schaut das aus wenn es in Ordnung ist:

# readcd -c2scan dev=/dev/cdrom
Read  speed:  4234 kB/s (CD  24x, DVD  3x).
Write speed:  4234 kB/s (CD  24x, DVD  3x).
Capacity: 353867 Blocks = 707734 kBytes = 691 MBytes = 724 prMB
Sectorsize: 2048 Bytes
Copy from SCSI (0,0,0) disk to file '/dev/null'
end:    353867
addr:   353867 cnt: 38
Time total: 519.971sec
Read 914386.80 kB at 1758.5 kB/sec.
Total of 0 hard read errors.
C2 errors total: 0 bytes in 0 sectors on disk
C2 errors rate: 0.000000%
C2 errors on worst sector: 0, sectors with 100+ C2 errors: 0
#

Und die CD schmeisst man lieber weg, wenn man sowas zu sehen bekommt:

Read  speed:  4234 kB/s (CD  24x, DVD  3x).
Write speed:  4234 kB/s (CD  24x, DVD  3x).
Capacity: 353869 Blocks = 707738 kBytes = 691 MBytes = 724 prMB
Sectorsize: 2048 Bytes
Copy from SCSI (0,0,0) disk to file '/dev/null'
end:    353869
readcd: Success. read_cd: scsi sendcmd: no error
CDB:  BE 00 00 05 66 25 00 00 28 FA 00 00
status: 0x2 (CHECK CONDITION)
Sense Bytes: F0 00 25 00 05 66 4B 0A 00 00 21 00 64 00 00 00
Sense Key: 0x5 Illegal Request, Segment 0
Sense Code: 0x64 Qual 0x00 (illegal mode for this track) Fru 0x0
Sense flags: Blk 353867 (valid) illegal block length
resid: 105840
cmd finished after 0.030s timeout 40s
readcd: Success. Cannot read source disk
readcd: Retrying from sector 353829.
.......................................
readcd: Success. Error on sector 353867 not corrected. Total of 1 errors.
readcd: -noerror set, continuing ...
.
readcd: Success. Error on sector 353868 not corrected. Total of 2 errors.
readcd: -noerror set, continuing ...
C2 in sector: 353868 first at byte:  374 (0x02) total:  172 errors
addr:   353869
Time total: 594.388sec
Read 914391.97 kB at 1538.4 kB/sec.
Max corected retry count was 0 (limited to 10).
The following 2 sector(s) could not be read correctly:
353867
353868
Total of 2 hard read errors.
C2 errors total: 172 bytes in 1 sectors on disk
C2 errors rate: 0.000021%
C2 errors on worst sector: 172, sectors with 100+ C2 errors: 1

Vodafone 3G Datacard mit Linux (UMTS)

February 28th, 2006

Was Marc in “UMTS unter Linux funktioniert” schon mal festgehalten hat, konnte ich dank einer ausgeborgten Vodafone-Karte auch mal selbst testen. Die Inbetriebnahme war, abgesehen vom 32bit-PCMCIA-mit->=2.6.14-Problem, auch stressfrei. Wenn die Module usbserial und option [Option Card (PC-Card to) USB to Serial Driver] geladen sind (geht bei mir ohne Zutun und irgendwelche Optionen), sowie die /dev/ttyUSB-Devices existieren, geht es auch schon los:

# gcom -d /dev/ttyUSB0

bucht die SIM-Karte ins Netz ein (man wird da nach dem PIN gefragt) [gcom-sources, Debian-Paket gibt’s bei Jimmy]. /etc/wvdial.conf laut dem HowTo auf pharscape anpassen:

# cat /etc/wvdial.conf
[Dialer Defaults]
Modem = /dev/ttyUSB0
Baud = 460800
SetVolume = 0
Dial Command = ATDT
FlowControl = NOFLOW
Init1 = ATZ
Init2 = ATM0

[Dialer umts]
Username = ppp@A1plus.at
Password = ppp
Phone = *99***1#
Stupid Mode = 1
Init3 = AT+CGDCONT=1,"IP","A1.net"
Dial Attempts = 3

Mit

# wvdial umts

baut man dann die pppd-Verbindung auf. That’s it. :-)

Bei einem ‘apt-get update’-Lauf hatte ich 32.9kB/s, die Latency ist aber doch ziemlich hoch (via ssh tippt es sich nicht wirklich rund), wie ein mtr-Lauf schön visualisiert:

mtr via umts screenshot

Alle notwendigen Tools und Kernelmodule sind auf der grml clt06-Edition zu finden, obiges habe ich grad im Live-CD-Modus durchgeführt. Vielleicht gibt es für grml 0.7 dann ja sogar ein grml-vodafone-Skript. ;-)

Übrigens: am Wochenende geht es Richtung Chemnitzer Linuxtage und wir möchten da auf der Fahrt von Graz bis zur deutschen Grenze die Brauchbarkeit von UMTS/GPRS mit Vodafone während der Autofahrt testen. Wir sind uns noch nicht sicher, wie wir das messen werden. Falls da jemand Ideen und Anregungen hat: bitte her damit. Falls es sich dann realisieren lässt, wird das Resulat natürlich hier gebloggt. Und falls noch jemand eine Mitfahrgelegenheit Richtung Chemnitz sucht: melde dich rasch bei mir, es ist vielleicht noch eine Mitfahrgelegenheit vorhanden.

Raising Skinny Elephants Is Utterly Boring

February 27th, 2006

http://en.wikipedia.org/wiki/Raising_Skinny_Elephants_Is_Utterly_Boring

Danke für den Pointer, Wernfried ‘amne’ Haas. Ich hab bisher meistens Alt + SysRq S, U, B verwendet (bzw. O für Poweroff), jetzt hab’ ich aber einen Spruch für das nächste Shirt. :-)

Open-Source-Software Asterisk wirbelt Telefonmarkt durcheinander

February 27th, 2006

[…] Die Asterisk-Platformen seien zudem mit eigenen Zusätzen schier beliebig zu erweitern. Einer der Entwickler der freien Telefonsoftware habe sich etwa eine Routine eingerichtet, die jeden Anruf der Ex-Freundin automatisch an den Anrufbeantworter schickt.

http://heise.de/newsticker/meldung/70086

Via PCI angebundene Hardware mit Linux >=2.6.14

February 26th, 2006

Netter Titel, ich weiss. Mich hat pcibios_assign_all_busses gerade Nerven gekostet. Wer sowas wie:

kernel: PCI: Bus #07 (-#0a) may be hidden behind transparent bridge #06 (-#06) (try 'pci=assign-busses')

in dmesg sieht, sollte das möglichst nicht überlesen, wenn es Probleme mit Hardware gibt. Auf meinem Samsung X20 Laptop hat bisher alles tadellos funktioniert. Die alten 16bit PCMCIA-WLAN-Karten laufen ohne Probleme. Aber mit einer 32bit Vodafone-Karte hat’s jetzt auf einmal nicht geklappt. Einstecken, Module laden – alles kein Problem. Nur die /dev/ttyUSB-Devices sind einfach nicht gekommen. Hmpf. Verschiedene Kernelversionen probiert. pcmciautils und udev als Fehlerquelle ausgeschlossen. Tests mit weiteren 32bit-Karten haben ein gleiches Problem gezeigt. Oha. Nach dem Lesen von Linux Kernel 2.6 PCMCIA und einem:

# lspci -v | grep subordinate

habe ich es mit ‘pci=assign-busses’ als Kernelcmdline probiert und das 32bit-PCMCIA-Problem war keines mehr.

Die diversen Howtos zu den Samsung-Notebooks haben übrigens auch gar nichts gebracht. Bei den meisten steht “PCMCIA: not yet tested” oder es wurde nur mit älteren Kerneln getestet. Ich habe den Hint daher auch in mein Samsung X20 Debian/grml Howto gesteckt, in der Hoffnung, dass sich andere Leute Ärger ersparen.