Slackware 12 mit RAID und LVM

Juli 6, 2007

Am 2.7. ist nun Slackware die 12te erschienen. Zu dem Zeitpunkt wo ich es runtergeladen habe waren auf den FTP mirrors noch keine ISO Image verfügbar. So habe ich die „Install ISO disk 1“ mit Bittorrent heruntergeladen.

Inzwischen gibt es aber auch die iso Dateien zum Download.

z.B. hier – ftp://ftp.wh8.tu-dresden.de/pub/linux/distributions/slackware/slackware-12.0-iso

Der Server hatte bis jetzt die 11 laufen. Da ich jetzt auch den Hardware Unterbau geändert (verbessert) habe wird das System komplett neu aufgebaut.

Die zwei Festplatten laufen wieder als Raid1 Verbund. /dev/md0 ist /boot mit knapp 100 mb, /dev/md1 ist der SWAP mit 1gb und /dev/md2 ist ein Physical Volume für den LVM.

LVM habe ich deswegen gewählt, da ich Xen einrichten will und die DomU’s nicht im Loopback-Devices laufen sollen (zu langsam). Bis jetzt ist nur ein Logical Volume eingerichtet und das ist die dom0 mit Slackware 12.0.

Die Einrichtung des Raid und des LVM ging problemlos. Anschließend „setup“ ausführen und /dev/vg0/dom0 als Setup Pfad wählen. Wenn die Prozedur vorbei wird es erst richtig spannend!

Damit Slackware von einem LVM bootet muss man den Anweisungen aus der README_LVM.TXT folgen. Im genauen sind das folgende Schritte:

# mount -o bind /proc /mnt/proc

# mount -o bind /sys /mnt/sys

# chroot /mnt

# vgscan –mknodes

Als nächstes soll man mit mkinitrd eine initrd für lilo erstellen. Das Problem ist, dass bei der Standard initrd die das Skript erstellt der Raid Support fehlt. Deswegen muss man etwas Handarbeit anlegen.

Wenn wir im chroot sind wechseln wird in das Verzeichnis „/usr/share/mkinitrd/“.

# cd /usr/share/mkinitrd/

Der Befehl mkinitrd benutzt die Datei „initrd-tree.tar.gz“ um den Dateibaum (tree) der Initrd aufzubauen. Diesen editieren wir jetzt.

# mkdir newinitrd && cd newinitrd

# tar -xzvf ../initrd-tree.tar.gz

Der Ordner Inhalt sieht jetzt ungefähr so aus:

# ls
bin/ etc/ initrd-name load_kernel_modules* mnt/ rootdev sys/
dev/ init* lib/ luksdev proc/ rootfs

Wir kopieren nun die notwendigen Config-Files:

# cp -r /etc/lvm/ etc/

Wichtig ist außerdem die folgen Zeile in der lvm.conf!

md_component_detection = 1

Damit in der initrd das Raidarray wieder erstellt werden kann, wird in der „init“ der „mdadm“ Befehl eingebunden. Ein Ausschnitt (nur ein Beispiel!):

# vi init

[…]

# rebuild RAID ARRAY

/sbin/mdadm –assemble /dev/md2 /dev/hda3 /dev/hdb3
/sbin/mdadm –assemble /dev/md0 /dev/hda2 /dev/hdb2
/sbin/mdadm –assemble /dev/md1 /dev/hda1 /dev/hdb1

# Initialize LVM:
if [ -x /sbin/vgscan ]; then
/sbin/vgscan –mknodes -v –ignorelockingfailure
sleep 10
/sbin/vgchange -ay -v –ignorelockingfailure
fi

[…]

Damit ist der initrd-tree fertig es muss jetzt nur noch in das passende Archiv gepackt werden.

# mv ../initrd-tree.tar.gz ../initrd-tree.tar.gz.back

# tar -czf ../initrd-tree.tar.gz ./

Schlussendlich muss nur noch die „/sbin/mkinitrd“ angepasst werden, damit das „init“ Skript auch eine „mdadm“ Binary zum ausführen hat. Wieder ein Ausschnitt:

# vi /sbin/mkinitrd

[…]

# Include LVM support in initrd
if [ ! -z „$LVM“ ]; then
if [ -f /sbin/lvm.static ]; then
mkdir -p $SOURCE_TREE/sbin
cp /sbin/lvm.static $SOURCE_TREE/sbin/lvm.static
cp /sbin/mdadm $SOURCE_TREE/sbin/
( cd $SOURCE_TREE/sbin
ln -s lvm.static vgchange
ln -s lvm.static vgscan )
if ! echo ${MODULE_LIST} | grep -q dm-mod ; then
MODULE_LIST=“$MODULE_LIST:dm-mod“
fi
else
echo „LVM static binary is missing, LVM support isn’t installed“
fi
fi
[…]

Sichern und einfach weiter in der Anleitung!

# mkinitrd -c -k 2.6.21.5-smp -m reiserfs -f reiserfs -r /dev/vg0/dom0 -L

In „/boot/initrd-tree“ kann man prüfen ob alles seine Richtigkeit hat (/boot/initrd-tree/etc/lvm/ und /boot/initrd-tree/sbin/mdadm).

Zum Schluss dann noch die lilo.conf anpassen (initrd = /boot/initrd.gz) und lilo den MBR schreiben lassen.

# lilo

Warning: ‚/proc/partitions‘ does not match ‚/dev‘ directory structure.
Name change: ‚/dev/dm-0‘ -> ‚/dev/vg0/dom0‘
Added Linux *
The boot record of /dev/md0 has been updated.
The boot record of /dev/hda has been updated.
Warning: /dev/hdb is not on the first disk
The boot record of /dev/hdb has been updated.
2 warnings were issued.

Die Warnungen kann man getrost ignorieren! „reboot“ und viel Spaß mit Slackware 12 und Raid/LVM😉

PS: Man kann auch versuchen in der „init“ statt dem „mdadm -assemble …“ einfach „mdadm -A –scan“ zu nehmen. Damit muss man aber auch die „mdadm.conf“ der „initrd-tree.tar.gz“ anfügen!


Kampf der Sprachen

Mai 23, 2007

 


python parser

Mai 5, 2007

Leo übersetzt das Wort parser folgender maßen :

lexikalischer Analysator

Parser sind ein ziemlich spannendes Thema. Sie analysieren eine Sprache/Syntax und und ermöglichen „Maschinen“ den Zugang zu diesen. Python eignet sich besonder für solche Aufgaben.
Ein paar Beispiele für die Standard Python Library sind:

  • urlparser – Parse URLs into components
  • htmllib — A parser for HTML documents
  • sgmllib — Simple SGML parser

Eines meiner Lieblings parser ist Beautiful Soup welcher es einem schnelles und einfaches parsen von HTML bzw. XML Dokumenten erlaubt.

Beim suchen nach mehr Stoff zu dem Thema Parser und Python bin ich auf interessante Seiten gestoßen:

Außerdem habe ich den Python basierten Syslog parser Epylog entdeckt.  Er verspricht folgende Features:

  • Threaded for faster network lookups
  • Unwraps „last message repeated“ lines
  • Mails reports in either html or plain text (or both)
  • Publishes reports to a file with optional notification via email.
  • Accepts –last hour/2h/2d/2w command-line arguments
  • Handles modules written in both Python and other languages (though many „neat“ features are not available to external modules)

^M im VIM

Dezember 6, 2006

Wenn man es öfter mal mit notpad txt Datein zu tuen hat, dann wird man sich über die fehlenden Zeilenumbrüche ärgern. Stattdessen hat man ein lästiges ^M an dieser stelle.

Man kann dies umwandeln, indem man einfach folgenden Befehl eingibt:

:%s/^M/\r/g

^ muss mit Strg-V und das M muss mit Strg-M eingegeben werden.

Mehr dazu hier!


VIM: Ersetzen mit Sonderzeichen

Oktober 1, 2006

Wie wir alle wissen ist ein einfacher Suchbefehl mit „/Suchbegriff“ abzusetzen.

Interessanter wird es beim Ersetzen:

:1,5s/suchwort/ersetzen/g

Das dürfte soweit selbsterklärend sein (In Zeile 1 bis 5 werden alle Zeichenfolgen „suchwort“ durch die Zeichenfolge „ersetzen“ ersetzt. Das „g“ steht für global. Wenn das weggelassen wird dann wird jeweils nur das erster „suchwort“ in einer Zeile ersetzt.). Diese Form findet man jedoch in jeder Dokumentation.

Ein anderes Beispiel:

Wir haben einen Text zugesendet bekommen den wir als html Seite ins Internet stellen wollen. Dieser ist gespickt voller ä,ü,ö,ß u.s.w.! Manchmal bekommt man dann im Browser nur Zeichensalat. Deswegen ersetzen wir die Zeichen: http://de.selfhtml.org/html/allgemein/zeichen.htm#umlaute.
Der Kniff ist, dass vor jedem Sonderzeichen ein „\“ kommen muss! Also:

:%s/ß/&\szlig\;/g

Natürlich lässt sich das auch eleganter mit Bash Skripen bzw. sed. Es soll nur ein Beispiel sein zur Veranschaulichung.

Das ist auch ganz wichtig wenn man im Text mit dem „/“-Zeichen an sich arbeitet (z.B. bei Pfaden). Mann müsste dann „\/“ zum ersetzen verwenden. Da man das nur selten oder nie in Tutorials oder Howto’s findet erwähne ich das hier.

 

Viel Spass beim Vim’men.


Vim!

Juli 21, 2006

Vim LogoWenn man sich etwas tiefer mit Linux auseinandersetzt, dann stößt man unweigerlich auf den Konsoleneditor Vim. Er besticht durch sein Konzept alles über Tastatur zu steuern und um sich so die nervige Klickorgien zu ersparen.

Den Rest des Beitrags lesen »


APC Smart 700

Mai 17, 2006

apc-smart700-front.jpg

Ich habe eine Gebrauchte APC Smart 700 USV bekommen (im 19 Rack Format). Es sind zwar zwei Gel-Blei Akkus enthalten, die bringen jedoch keine Leistung mehr. Man bekommt zwei Panasonic 12V 7.2Ah bei Ebay schon für 29 Euro.

Die USV soll dann beim Server platz finden um einem möglichen Stromausfall bzw. Spannungsschwankungen zu überbrücken oder dann noch herunter zu fahren. Da es sich um eine ältere USV handelt hat sie noch eine Serielle Schnittstelle. Zusätzlich ist noch eine 10Base-T Ethernet Adapter (AP9605) eingebaut, über den man Status Informationen über SNMP abrufen kann.

apc-smart700-front_top.jpg

Da dieser Adapter nicht eingestellt wahr kann man nicht sofort über den Seriellen Port kommunizieren, sonder muss einer Prozedur folgen (nachzulesen unter http://www.rockhounding.net/projects/ups/apc-config.html).

Wenn man das gemacht hat kann man entweder die APC eigene Software nehmen(Java wird benötigt) oder auf das OpenSource Projekt Apcupsd (http://www.apcupsd.com/) zurückgreifen. Die Konfiguration ist sehr gut dokumentiert jedoch in Englisch.

Im Moment warte ich noch auf die neuen Akkus und kann deswegen noch keine Tests fahren. Ich bin aber echt gespannt wie lange die Akkus Überbrücken können.

apc-smart700-back.jpg


Folgen

Erhalte jeden neuen Beitrag in deinen Posteingang.