Today i will show you how to boot a Gentoo LiveCD via PXE (aka network boot).

  1. Download a minimal install iso
  2. Prepare a TFTP Server 
  3. Mount the ISO file as a loopback device (mount -o loop /path/to/install-x86-minimal-20100216.iso /mnt/cdrom/)
  4. Copy the Kernel (/mnt/cdrom/isolinux/gentoo) to your TFTP-Root
  5. Copy the InitramFS and the squash'ed root fs to a temp dir (/mnt/cdrom/isolinux/gentoo.igz and /mnt/cdrom/image.squashfs)
  6. Unpack the initramfs (gunzip -c gentoo.igz | cpio -idv)
  7. Patch the init script with this patch
  8. Copy the RootFS to mnt/cdrom inside the initramfs (mkdir -p mnt/cdrom; cp image.squashfs mnt/cdrom/)
  9. Repack the initramfs (find . -print | cpio -o -H newc |gzip -9 -c - > /path/to/tftp/root/initramfs.gz)
  10. Edit your pxelinux.cfg/default file:
kernel gentoo
append initrd=initramfs.gz root=/dev/ram0 init=/linuxrc loop=/image.squashfs looptype=squashfs cdroot=1 real_root=/

Bevor man das nächste Mal stundenlang rumprobiert, warum der Root-Alias nicht richtig funktioniert, sollte man in die /etc/mail.rc schauen!

Ich habe mich ein wenig mit PXE-Boot und initramfs auseinander gesetzt, und ich muss sagen: das macht echt Spass!

Damit ich das nicht wieder vergesse, hier eine Step-by-Step-Anleitung wie man einen Rechner mit einem selbstgebauten Kernel und initramfs per PXE booten lässt:

Kernel-Konfiguration

Diese Konfiguration bezieht sich auf den Kernel der über das Netzwerk geladen und auf dem Client gestartet wird. Der Kernel muss alle Treiber beinhalten, die der Client zum booten und laden des initramfs braucht. Die Treiber müssen dabei einkompiliert werden; Module können zu diesem Zeitpunkt logischerweise noch nicht verwendet werden.

Die einzig wichtige Option in dem Kernel ist:

General Setup
--> Initial RAM filesystem and RAM disk (initramfs/initrd) support (=y)

Weiterlesen...

Thanks to the incredible pyparsing module it is really easy to parse arbitrary files without the hassle of regular expressions.

The following code parses a standard syslog-ng logfile:

from pyparsing import Word, alphas, Suppress, Combine, nums, string, Optional, Regex

month = Word(string.uppercase, string.lowercase, exact=3)
integer = Word(nums)
serverDateTime = Combine(month + " " + integer + " " + integer + ":" + integer + ":" + integer)
hostname = Word(alphas + nums + "_" + "-")
daemon = Word(alphas + "/" + "-" + "_") + Optional(Suppress("[") + integer + Suppress("]")) + Suppress(":")
message = Regex(".*")
bnf = serverDateTime + hostname + daemon + message

with open('/path/to/logfile') as syslogFile:
	for line in syslogFile:
		fields = bnf.parseString(line)
		print fields

Wenn die Autocompletion in Bash per PageUp nicht mehr funktioniert, hat das i.d.R. nichts mit den X-Treibern oder der keymap zu tun: Dann wird die /etc/inputrc nicht verarbeitet.

Wenn man eine ~/.inputrc hat, dann wird die globale in /etc/ auch nicht verwendet - hier müssen also alle Befehle kopiert, oder die global angepasst werden

Hier ein paar nützliche Befehle um den libvirtd in meinem neuen KVM/Qemu/libvirtd-Setup von der Console aus zu steuern (hauptsächlich für mich als Erinnerung):

virsh define <vm-xml>: Neuladen oder Hinzufügen einer VM ohne den libvirtd neustarten zu müssen
virsh undefine <vm-xml>: Entfernen einer VM ohne den libvirtd neustarten zu müssen
virsh pool-refresh <storage-name>: Neuladen eines Storage-Pools

Wenn man eine VM-Definition (=XML-Datei) kopiert muss man die uuid anpassen, da die Datei sonst nicht vom libvirtd verwendet werden kann, wenn die uuid kollidiert. Eine neue UUID kann man sich mittels uuidgen aus sys-apps/util-linux generieren.

Um ein lokales Verzeichnis per Rsync über SSH auf einen anderen Rechner zu pusten, kann man dem rsync Kommando einen Tunnel mitgeben:

rsync -r -v -z --progress -t -e "ssh -i <YOUR-PRIVATE-KEYFILE> -l <REMOTEUSER>" 
<LOCAL-DIR> <REMOTE-USER>@<REMOTE-HOST>:<REMOTE-DIR>
INSERT INTO <tabelle> (spalte1, spalte2, spalte3) VALUES('a','b', 'c')
ON DUPLICATE KEY UPDATE spalte2='blah';

Siehe auch:

In ~/.subversion/config unter

[miscellany]
enable-auto-props = yes

setzen und unter

[auto-props]
*.java = svn:eol-style=native;svn:keywords=Id
*.php = svn:eol-style=native;svn:keywords=Id

eintragen. Dann wird bei jedem svn add auch die Properties auf *.java gesetzt.