<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Das Rootserver-Experiment</title>
	<atom:link href="http://blog.rootserverexperiment.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rootserverexperiment.de</link>
	<description>Erlebnisse eines Rootserver (Beinahe-) Neulings</description>
	<lastBuildDate>Sat, 02 Mar 2013 15:42:25 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Bootfähigen USB-Stick für UEFI Secure Boot erstellen &#8211; 1. PreLoader der Linux-Foundation plus Gummiboot</title>
		<link>http://blog.rootserverexperiment.de/2013/03/02/bootfahigen-usb-stick-fur-uefi-secure-boot-erstellen/</link>
		<comments>http://blog.rootserverexperiment.de/2013/03/02/bootfahigen-usb-stick-fur-uefi-secure-boot-erstellen/#comments</comments>
		<pubDate>Sat, 02 Mar 2013 14:01:51 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[UEFI Secure Boot]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=907</guid>
		<description><![CDATA[Disclaimer: Dieses kleine Tutorial richtet sich an all jene, die entweder einen Admin-Stick mit verschiedenen Installern und Notfallsystemen erstellen wollen oder einfach eine Fingerübung suchen, um den Bootvorgang von UEFI Secure Boot besser nachvollziehen zu können. Die anfängliche Installation von LessLinux Search and Rescue kann nach und nach um weitere Linuxe erweitert werden. Als Bootloader [...]]]></description>
			<content:encoded><![CDATA[<p><i><b>Disclaimer:</b> Dieses kleine Tutorial richtet sich an all jene, die entweder einen Admin-Stick mit verschiedenen Installern und Notfallsystemen erstellen wollen oder einfach eine Fingerübung suchen, um den Bootvorgang von UEFI Secure Boot besser nachvollziehen zu können. Die anfängliche Installation von <a href="http://blog.lesslinux.org/">LessLinux Search and Rescue</a> kann nach und nach um weitere Linuxe erweitert werden. Als Bootloader verwende ich zunächst den unkomplizierten PreLoader.efi der Linux-Foundation in Kombination mit Gummiboot, möglicherweise folgt demnächst eine auf Shim (mit MOK) angepasste Anleitung. Auf den EFI-Boot von 32-Bit-Systemen möchte ich nicht eingehen, weil praktisch nur ältere Apple iBooks und MacMinis (CoreDuo, nicht Core2Duo) mit einem 32-Bit-EFI ausgeliefert wurden. Die paar Netbooks von Asus, die ebenfalls 32-Bit-EFI an Bord haben, sind in der Regel auf das CSM eingestellt (Compatibility Support Module = BIOS-Emulation zum Boot von MBR-Medien).</i></p>
<p><i><b>Hinweis:</b> Auf dieses Tutorial folgt ein weiteres, das die hier gezeigte Konfiguration um GRUB erweitert (um 32-Bit-Systeme booten zu können) und eines, das erklärt, wie schließlich ein hybrider Stick entsteht, der auf MBR- und UEFI-Systemen startet. Wer aus dem dritten Tutorial das Optimum herausholen möchte, sollte eine dritte, 100 bis 200MB große, leere FAT32-Partition einplanen. </i></p>
<h3>Wie bootet UEFI sicher vom Stick?</h3>
<p>Der Vorgang von USB ist etwas einfacher als von Festplatte, zumindest wenn es sich um einen GPT partitionierten Stick mit einer einzigen FAT32-Partition handelt. In diesem Fall genügt es, eine Ordnerstruktur &#8220;BOOT/EFI&#8221; anzulegen, die den Bootloader &#8220;BOOTX64.EFI&#8221; enthält. Hintergrund dieser Vereinfachung ist wohl, dass es ermöglicht werden soll, alleine durch das Entpacken eines Zips mit den Bootdateien einen Stick bootfähig zu machen &#8211; aber das ist Spekulation, weder habe ich nachgeprüft welche UEFI-Implementierungen den einfachen Start unterstützen, noch habe ich getestet, ob in nennenswerten Stückzahlen USB-Sticks am Markt sind, die sowohl GPT als auch BIOS-MBR aufweisen.<span id="more-907"></span></p>
<p>In diesem Tutorial möchte ich mit dem simpelsten Bootmechanismus mit dem PreLoader.efi der LinuxFoundation als erste Stufe und Gummiboot als zweiter Stufe zum Start zum Start von 64-Bit-EFI-Kerneln beginnen. Zum Start von 32-Bit-Kerneln muss ein zwischengeschalteter GRUB genutzt werden, dafür wird es ein Follow-Up geben. Der Stick bekommt zwei Partitionen: Eine EXT4-Partition für die ISO-Images vorne und eine kleine Bootpartition, die Kernel, Initramfs und EFI-Boot-Dateien aufnehmen muss, hinten. Beachten Sie, dass die Bootdateien für ein LessLinux rund 50MB groß sind, die für ein Ubuntu etwas über 20MB &#8211; für zweimal LessLinux, zweimal Ubuntu und die EFI-Boot-dateien sind demnach 150MB einzuplanen.</p>
<h3>Die Partitionierung</h3>
<p>Zunächst gilt es, den Stick zu partitionieren. Damit keine Spuren von MBR, Partitionstabelle, GPT und möglicherweise alten Partitionsanfängen vorhanden sind, sollten die ersten vier Megabyte komplett genullt werden:</p>
<pre>
USBSTICK=/dev/sdx
dd if=/dev/zero bs=1M count=4 of=$USBSTICK
</pre>
<p>Zur Partitionierung kommt &#8220;parted&#8221; auf der Kommandozeile zum Einsatz:</p>
<pre>
parted $USBSTICK
</pre>
<p>Sie befinden sich nun in der Shell von Parted, hier gilt es, eine GUID Partition Table anzulegen:</p>
<pre>Willkommen zu GNU Parted! Geben Sie 'help' ein, um eine Liste der verfügbaren Kommados zu erhalten.
(parted) mklabel gpt                                                      
(parted) print                                                            
Modell: Kingston DataTraveler 2.0 (scsi)
Festplatte  /dev/sde:  4039MB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: gpt

Nummer  Anfang  Ende  Größe  Dateisystem  Name  Flags

(parted)</pre>
<p>Als erste Partition erstelle ich eine einfache Linux-Partition, die der Gesamtgröße minus 150 MB entspricht, sie soll später Daten aufnehmen:</p>
<pre>
(parted) mkpart primary ext4 0 3890M
</pre>
<p>Inkorrektes Alignment kann man beim USB-Stick zumeist ignorieren (sollte man aber nicht bei SSDs und schnellen Platten). Es folgt die Bootpartition fürs EFI, diese muss FAT12/16/32 sein:</p>
<pre>
(parted) mkpart primary fat32 3890M 4039M
</pre>
<p>Diese zweite Partition bekommt jetzt das Bootflag gesetzt (eigentlich heisst dies bei GPT, dass der Typ auf EF00 gesetzt wird), danach betrachten wir das Ergebnis und schreiben die Partitionstabelle: </p>
<pre>(parted) set 2 boot on                                                    
(parted) print                                                            
Modell: Kingston DataTraveler 2.0 (scsi)
Festplatte  /dev/sde:  4039MB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: gpt

Nummer  Anfang  Ende    Größe   Dateisystem  Name     Flags
 1      17,4kB  3890MB  3890MB               primary
 2      3890MB  4038MB  148MB                primary  boot

(parted) quit</pre>
<p>Die Prüfung mit</p>
<pre>
gdisk -l $USBSTICK
</pre>
<p>offenbart etwas mehr als &#8220;parted&#8221; (ich verwende parted, weil es sich auch gut scripten lässt):</p>
<pre>GPT fdisk (gdisk) version 0.8.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sde: 7888896 sectors, 3.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): E12939B9-C620-435B-9E9B-27312CCBF9BC
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 7888862
Partitions will be aligned on 2-sector boundaries
Total free space is 2438 sectors (1.2 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34         7597656   3.6 GiB     0700  primary
   2         7598080         7886847   141.0 MiB   EF00  primary</pre>
<p>Jetzt noch beide Partitionen formatieren und die Vorbereitung ist abgeschlossen:</p>
<pre>mkfs.ext4 ${USBSTICK}1
mkfs.msdos -F32 ${USBSTICK}2</pre>
<h3>Installation des (Pre-)Bootloaders</h3>
<p>Zunächst erstelle ich zwei Mountpoints für die Datenpartition und die Bootpartition und mounte beide. Wieder kommen Variablen zum Einsatz:</p>
<pre>USBDATA=/tmp/usbdata
USBBOOT=/tmp/usbboot
mkdir -p ${USBDATA}
mkdir -p ${USBBOOT}
mount ${USBSTICK}1 ${USBDATA}
mount ${USBSTICK}2 ${USBBOOT}</pre>
<p>Auf der Bootpartition entsteht nun die Ordnerstruktur für den Start unter EFI:</p>
<pre>mkdir -p ${USBBOOT}/EFI/BOOT</pre>
<p>In diesen Ordner installieren wir nun <a href="http://blog.hansenpartnership.com/linux-foundation-secure-boot-system-released/">PreLoader.efi (als BOOTX64.EFI) und HashTool.efi der Linuxfoundation</a>. Beide Binaries müssen signiert sein, bei diesen kommt demnach kein Selbstbau in Frage:</p>
<pre>wget -O ${USBBOOT}/EFI/BOOT/BOOTX64.EFI http://blog.hansenpartnership.com/wp-uploads/2013/PreLoader.efi
wget -O ${USBBOOT}/EFI/BOOT/HASHTOOL.EFI http://blog.hansenpartnership.com/wp-uploads/2013/HashTool.efi</pre>
<p>Wer möchte kann auch noch das KeyTool.efi installieren, ich findes es ganz praktisch, um MOKs (Machine Owner Keys zu verwalten. Ein Binary befindet sich im <a href="http://blog.hansenpartnership.com/wp-uploads/2013/sb-usb.img">USB-Image von James Bottomley</a>, ich habe es extrahiert:</p>
<pre>wget -O ${USBBOOT}/EFI/BOOT/KEYTOOL.EFI http://cdprojekte.mattiasschlenker.de/Public/UEFI-Secure-Boot/keytool.efi</pre>
<p>Im Prinzip würde der so erstellte Stick bereits booten, wenn auch nur bis zur Hash-Verwaltung.</p>
<h3>Gummiboot als Loader</h3>
<p>Als Loader der zweiten Stufe habe ich mich für Gummiboot entschieden, weil er 64-Bit-Linux-EFI-Kernel direkt starten, aber auch andere EFI-Binaries aufrufen kann. Ich habe versucht, Gummiboot auf einem Ubuntu 12.10 gegen die mitgelieferte und eine aktuelle Version der gnu-efi-Bibliothek zu kompilieren und bin gescheitert. Daher habe ich Gummiboot vom USB-Image von James Bottomley kopiert:</p>
<pre>wget -O ${USBBOOT}/EFI/BOOT/LOADER.EFI http://cdprojekte.mattiasschlenker.de/Public/UEFI-Secure-Boot/gummiboot-bottomley.efi</pre>
<p>Gummiboot benötigt nun einen Ordner für die Konfiguration, der die Bootmenüeinträge aufnimmt:</p>
<pre>mkdir -p ${USBBOOT}/loader/entries</pre>
<p>Die Konfigurationsdatei <tt>${USBBOOT}/loader/entries/cclessli.conf</tt> (eingerückte Zeilen gehören zur Zeile &#8220;options&#8221;, bitte die Umbrüche entfernen):</p>
<pre>title LessLinux Search and Rescue
linux    /ll64.efi
initrd   /ll64.img
options  ultraquiet=1 security=none skipcheck=1 quiet lang=de ejectonumass=1
    skipservices=|installer|xconfgui|roothash|firewall|ssh|mountdrives|
    hwid=unknown laxsudo=1 toram=0 uuid=c7e701f3-bd3c-494b-8395-1e5bdb513f41
    loop.max_loop=32 console=tty2 radeon.modeset=0 nomodeset</pre>
<p><b>Achtung:</b> Ein Bug in LessLinux erfordert es derzeit, die UUID der Partition anzugeben, auf der sich das ISO befindet (<tt>uuid=c6e...</tt>), ermitteln Sie diese mit dem Befehl <tt>blkid</tt>:</p>
<pre>blkid  -o udev ${USBSTICK}1 
ID_FS_UUID=c7e701f3-bd3c-494b-8395-1e5bdb513f41</pre>
<p>&#8230;und eine Konfigurationsdatei, um einfach das Hashtool aufrufen zu können, <tt>${USBBOOT}/loader/entries/yyhashto.conf</tt>:</p>
<pre>title Hashtool
linux    /EFI/BOOT/HASHTOOL.EFI</pre>
<p>&#8230;und schließlich eine fürs Keytool, um Hashes und Schlüssel zurückziehen zu können, <tt>${USBBOOT}/loader/entries/zzkeytoo.conf</tt>:</p>
<pre>title Keytool
linux    /EFI/BOOT/KEYTOOL.EFI</pre>
<p>Schließlich folgt noch die Konfigurationsdatei für den Gummiboot-Loader selbst, <tt>${USBBOOT}/loader/loader.conf</tt>:</p>
<pre>timeout 10
default cclessli*</pre>
<h3>Und nun das Lesslinux-Image</h3>
<p>Damit wir wirklich ein bootfähiges System bekommen, dürfen wir das System-ISO nicht vergessen. Zudem müssen Kernel und Initramfs auf die EFI-Boot-Partition kopiert werden:</p>
<pre>LESSLINUX=lesslinux-search-and-rescue-uluru-20130226-123741.iso
wget -O ${USBDATA}/${LESSLINUX} http://download.lesslinux.org/testing/lesslinux-search-and-rescue/${LESSLINUX} 
mkdir /tmp/lliso
mount -o loop ${USBDATA}/${LESSLINUX} /tmp/lliso
cp /tmp/lliso/boot/isolinux/l3800sf ${USBBOOT}/ll64.efi
cat /tmp/lliso/boot/isolinux/{initram,i3800sf}.img > ${USBBOOT}/ll64.img
umount /tmp/lliso</pre>
<h3>Der erste Start</h3>
<p>Bitte nicht vergessen, den Stick zu unmounten:</p>
<pre>umount $USBDATA
umount $USBBOOT</pre>
<p>Nun wird es spannend: Stöpseln Sie den Stick an einen UEFI-PC mit aktiviertem Secure Boot an und starten Sie diesen. Wie bei BIOS-rechnern führt in der Regel F10, F12 oder ESC zum Bootmenü, Lenovo- (und wohl einige Medion-) Notebooks schalten Sie über die kleine Taste (&#8220;OneKey Rescue&#8221;) neben dem Powerbutton an. Der als BOOTX64.EFI abgelegte PreLoader.efi findet keinen hinterlegten Hash für &#8220;LOADER.EFI&#8221;, und startet &#8220;HashTool.efi&#8221;. Wählen Sie hier den zuerst den Hash des als &#8220;LOADER.EFI&#8221; abgelegten Gummiboots und dann den Hash des Linux-Kernels &#8220;ll64.efi&#8221; zur Aufnahme aus. Anschließend rebooten Sie das System und starten erneut vom Stick, jetzt erscheint das einfache Bootmenü von Gummiboot, in dem Sie LessLinux, HashTool.efi oder KeyTool.efi (um Hashes zurückzuziehen) auswählen können.</p>
<p>Uffz, geschafft. Bottomleys Gummiboot startet leider nicht Ubuntus signierte Kernel, hierfür muss als zweite Stufe ein GRUB her, doch dazu später mehr&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2013/03/02/bootfahigen-usb-stick-fur-uefi-secure-boot-erstellen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Das Gespenst UEFI Secure Boot</title>
		<link>http://blog.rootserverexperiment.de/2013/03/01/das-gespenst-uefi-secure-boot/</link>
		<comments>http://blog.rootserverexperiment.de/2013/03/01/das-gespenst-uefi-secure-boot/#comments</comments>
		<pubDate>Fri, 01 Mar 2013 16:06:33 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[UEFI Secure Boot]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=896</guid>
		<description><![CDATA[In den letzten Tagen hatte ich etwas Gelegenheit, mich mit UEFI Secure Boot näher zu beschäftigen: Ich erstelle bekanntlich die Notfall-CDs für einige Computerzeitschriften oder arbeite intensiv daran mit (von Computer Bild bis desinfec&#8217;t gibt es einige). Ziel war, alle aktuellen, von Microsoft signierten EFI-Loader unter die Lupe zu nehmen und auf ihre Praktikabilität abzuklopfen. [...]]]></description>
			<content:encoded><![CDATA[<p>In den letzten Tagen hatte ich etwas Gelegenheit, mich mit UEFI Secure Boot näher zu beschäftigen: Ich erstelle bekanntlich die Notfall-CDs für einige Computerzeitschriften oder arbeite intensiv daran mit (von Computer Bild bis desinfec&#8217;t gibt es einige). Ziel war, alle aktuellen, von Microsoft signierten EFI-Loader unter die Lupe zu nehmen und auf ihre Praktikabilität abzuklopfen. Die gute Nachricht vorweg: Wer Ubuntu oder Fedora verwendet und keine Kernel selbst kompiliert, muss sich nicht mit dem Schlüsselmanagement herumärgern. Beide Distributionen verwenden einen von Microsoft signierten Loader (auf Basis von Shim), der wenigstens sicherstellt, dass GRUB2 und der anschließend geladene Kernel &#8220;vertrauenswürdig&#8221; ist. Zu Funktionsweise, Unterschieden und Restriktionen der verwendeten gepatchten GRUB2-Varianten hat sich <a href="http://www.heise.de/artikel-archiv/ct/2013/05/170_Gesichtskontrolle">Thorsten Leemhuis in der c&#8217;t 5/2013</a> zur Genüge ausgelassen. Wirklich spannend ist die Thematik aber für den Start selbst kompilierter Kernel, für kleine Distributionen, die verteilt und schnell entwickelt werden und für Administratoren, die Linux basierte Deployment- und Notfall-Systeme per Netz oder vom Wechseldatenträger starten wollen.</p>
<p>In diesem Beitrag möchte ich die eher theoretischen Hintergründe erläutern und Entscheidungshilfen geben, demnächst folgen dann Beiträge zur praktischen Umsetzung von Secure Boot eigener Kernel auf USB-Sticks, optischen Datenträgern und via Netzwerk. <span id="more-896"></span></p>
<h3>Microsoft als Gatekeeper?</h3>
<p>Ein großer &#8211; nicht von der Hand zu weisender &#8211; Kritikpunkt war Microsofts Rolle als Gatekeeper für den gesamten Bootprozess. Zwar war von vorneherein klar, dass UEFI mit Secure Boot (zunächst) abschaltbar und prinzipiell (immer) offen für alle Betriebssystemhersteller sein sollte. Wie dies in der Praxis aussehen sollte, war aber bis Herbst 2012 unklar. Eine totale Kontrolle der Hardware durch Microsoft wäre schon an kartellrechtlichen Bedenken gescheitert, so dass früh klar war, dass die Kontrolle der Schlüssel letztlich beim Eigentümer der Hardware verbleiben sollte. Das hätte in der Praxis aber auch ein striktes &#8220;entweder oder&#8221; bedeuten können: Ohne Microsofts Kooperation hätten Linux-Distributoren selbst Plattform-Schlüssel bereitstellen müssen. Der Anwender hätte seinen Rechner zur Installation in den &#8220;Setup Mode&#8221; versetzt und dann recht umständlich die Plattformschlüssel ausgetauscht. Der PC wäre mit allen Vorteilen des UEFI Secure Boot unter Linux gelaufen. Nur ein Dual Boot wäre unmöglich geworden &#8211; ein Szenario, mit dem Firmen, die Linux auf Thinclients oder Servern betreiben, durchaus leben können, das jedoch für den ambitionierten Anwender zuhause enorme Restriktionen bedeutet hätte. Der Einsatz von Live-CDs hätte hier immer vorausgesetzt, Secure Boot temporär zu deaktivieren &#8211; was keinesfalls standardisiert ist und möglicherweise irgendwann wegfällt.</p>
<p>Kritik erntet auch Microsofts Ansatz, Schlüssel und Hashwerte von Bootdateien auf eine schwarze Liste setzen zu können. Doch um diese schwarze Liste aktualisieren zu können, muss Windows laufen und Verbindungen ins Internet aufbauen können. Mittelfristig ist auch denkbar, dass Linux-Distributoren nach Absprache mit Microsoft Listen mit zurückgezogenen Schlüsseln und Hashes verteilen. Ich sehe hier durchaus Vorteile, beispielsweise wenn eine bestimmte Kernel- oder Bootloaderversion anfällig fürs Einschleußen von Rootkits ist. Unterm Strich bleibt aber die Freiheit, sowohl um Microsoft als auch um die großen Distributoren einen Bogen machen zu können und dennoch mit Microsofts Schlüsseln im NVRAM ein komfortables und (relativ sicheres) System nutzen zu können.</p>
<h3>GRUB als Sicherheitsrisiko?</h3>
<p>Derzeit existieren zwei Ansätze, einen komfortablen Linux-Start mit Secure Boot gewährleisten zu können: Bei beiden handelt es sich um kleine, vorgeschaltete Bootloader, die erst in der zweiten Stufe den eigentlichen Bootloader starten, der dann wiederum Kernel und Initramfs lädt, sowie Parameter übergibt. Aus Gründen der Konsistenz verwende ich derzeit einen selbst gebauten GRUB2 als zweite Stufe, der selbst keinerlei Prüfung durchführt, demnach theoretisch auch einen modifizierten Windows-Kernel mit darunter geschobenem Hypervisor-Rootkit starten kann. Das macht die Anwesenheit eines solchen GRUB und die Hinterlegung seines Hashes zu einem gewissen Sicherheitsrisiko.</p>
<h3>Der Ansatz der Linux Foundation</h3>
<p>Die Linux-Foundation bietet mit PreLoader.efi und HashTool.efi einen Bootloader und ein kleines Werkzeug zum Verwalten von Hashes. Die Kombination ist recht nutzerfreundlich umgesetzt: Der Anwender bootet Stick oder CD und startet damit den von Microsoft signierten PreLoader.efi. Findet der keinen Eintrag in der Liste erlaubter Hashes, startet er das ebenfalls signierte HashTool.efi. Mit diesem wählt der Anwender ein Binary, dessen Hash zur Liste erlaubter hinzugefügt werden soll &#8211; die beispielsweise die nach loader.efi umbenannte GRUB-Version, die beliebige Kernel booten kann. Nach einem Neustart startet PreLoader.efi den nun auf der weissen Liste stehenden Bootloader ohne weitere Nachfrage. PreLoader.efi ist recht simpel umgesetzt und wie bereits erklärt ziemlich nutzerfreundlich: Programmierer müssen Bootloader der zweiten Stufe nicht mit Zertifikaten versehen, stattdessen erklärt der Anwender beim Start, dass er einem bestimmten Binary vertraut. Ein großer Nachteil dieser Lösung ist, dass bei Änderungen am Bootloader der zweiten Stufe eine lokale Bestätigung des Hashes notwendig ist. Für Administratoren in großen Unternehmen mit weit verzweigten Standorten kann dies äußerst unpraktisch sein&#8230;</p>
<h3>Signaturen statt Hashes: Shim mit MOKs</h3>
<p>Shim ist ein etwas aufwendigerer Loader, der derzeit sowohl von Fedora als auch von Ubuntu genutzt wird und in seiner freien Variante auf MOKs &#8211; Machine Owner Keys &#8211; aufsetzt. Shim 0.2 wird mit einem ebenfalls von Microsoft signierten Binary MokManager.efi ausgeliefert, der es es erlaubt, eigene Signaturschlüssel für vertrauenswürdige Binaries ins NVRAM zu laden. Mit diesen signierte Bootloader führt Shim aus. Im Falle eines Bootloader-Updates muss lediglich der neue Bootloader mit dem gleichen Schlüssel wie der alte signiert werden. Der Vorteil dieses Ansatzes liegt ganz klar in der leichteren Remote-Administration und vereinfachten Updates. </p>
<p>Ein denkbares Szenario für die Vorteile des Shim-Einsatzes ist ein per PXE gebootetes Linux, das als Deployment- und Notfall-System dient: Um aus dem PXE-Boot kein Einfallstor für Schad- und Spionagesoftware zu machen, ist es möglich, die gesamte Boot-Kette vom Bootloader der zweiten Stufe, der nur signierte Kernel und Initrds lädt, über eine prüfende Initrd, die wiederum die Signatur des Root-Images checkt, zu booten. Ein derartiges System könnte für jeden Kunden mit einem eigenen &#8220;Machine Owner Key&#8221; signiert werden. Der Administrator muss vor dem Deployment eines PCs lediglich den MOK ins NVRAM aufnehmen. So ist auch ein sicherer Start von Thin-Client-Systemen möglich &#8211; vor Secure Boot konnte beim PXE-Boot niemand sicherstellen, dass kein korrupter Bootserver Systeme mit integriertem Keylogger ausliefert. </p>
<h3>Einigung in Sicht</h3>
<p>Ein Kritikpunkt an Shim war die hier implementierte Duplikation von Funktionalität: Shim implementiert ein eigenes Schlüsselmanagement und eigene Prüfungen. Dennoch bietet das Prinzip der Machine Owner Keys wie oben dargelegt viele Vorteile, insbesondere erlaubt es die Nutzung einer kompletten Secure Boot Kette, ohne dass eigene Binaries von Microsoft signiert werden müssen, stattdessen reicht es, auf jeder Machine einmal einen öffentlichen Schlüssel als vertraulich zu importieren. Matthew Garret, der Shim entwickelt, möchte den Code der Linux Foundation deshalb in Shim übernehmen um so die Vorteile beider Loader kombinieren zu können.</p>
<h3>Bootloader mit Verfallsdatum?</h3>
<p>Mich stört, dass UEFI keinen Mechanismus bereitstellt, einen gewhitelisteten Hashwert oder Schlüssel verfallen zu lassen. Beim Einsatz von Live-Systemen zur Rettung wäre es von großem Vorteil, maximal fünf Mal oder maximal 24 Stunden mit einem Hash booten zu können, bevor dieser automatisch verfällt. So muss der Anwender selbst darauf achten, nicht mehr benötigte Hashes selbst zu löschen, damit ein allzu liberal agierender Bootloader (der alles lädt) nicht als Einfallstor für Schadsoftware mißbraucht werden kann.</p>
<h3>Mein Fazit</h3>
<p>Als normaler Anwender sollte man keine Angst vor Secure Boot haben und UEFI Secure Boot nach Möglichkeit aktiviert lassen. Beim Testen eigener Kernel oder dem Remastern von Live-Medien wird vielen Anwendern aber nichts anderes übrig bleiben als zu experimentieren: Zu klein ist die Erfahrung in der Community mit UEFI Secure Boot noch und zu klein ist das Angebot an Hardware (und UEFI-Implementierungen), um alle potentiellen Bugs zu kennen. Zudem ist Abwärtskompatibilität nun ein Thema: Gerade Live-Medien wie USB-Sticks oder CDs sollen möglichst auf UEFI- und BIOS-Systemen gleichermaßen bootfähig sein. Das ist möglich, erfordert aber gelegentlich Verrenkungen und zumeist doppelte Konfigurationsdateien: Je eine für den UEFI-Bootloader und den BIOS-Bootloader.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2013/03/01/das-gespenst-uefi-secure-boot/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>DVD nach MKV rippen</title>
		<link>http://blog.rootserverexperiment.de/2012/12/31/dvd-nach-mkv-rippen/</link>
		<comments>http://blog.rootserverexperiment.de/2012/12/31/dvd-nach-mkv-rippen/#comments</comments>
		<pubDate>Mon, 31 Dec 2012 17:20:24 +0000</pubDate>
		<dc:creator>mattias</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tips und Tricks]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=871</guid>
		<description><![CDATA[Dieser Blogpost soll in erster Linie eine Notiz für mich selbst sein, wie man eine DVD in eine MKV mit H.264-Video, Untertiteln und mehreren Audiospuren umwandelt. Ich verwende Stereo-Audio im MP3 kodiert &#8211; einfach weil an keinem unserer Abspielgeräte 5.1 Audio angeschlossen ist. Wer 5.1 haben möchte, kann gerne die rohen AC3-Spuren übernehmen. Die Beispiele [...]]]></description>
			<content:encoded><![CDATA[<p>Dieser Blogpost soll in erster Linie eine Notiz für mich selbst sein, wie man eine DVD in eine MKV mit H.264-Video, Untertiteln und mehreren Audiospuren umwandelt. Ich verwende Stereo-Audio im MP3 kodiert &#8211; einfach weil an keinem unserer Abspielgeräte 5.1 Audio angeschlossen ist. Wer 5.1 haben möchte, kann gerne die rohen AC3-Spuren übernehmen. Die Beispiele legen alle Dateien im aktuellen Arbeitsverzeichnis ab. Daher empfehle ich, einen neuen Ordner anzulegen, der nach dem Merge von Audio- und Videospuren gelöscht werden kann.</p>
<h3>DVD kopieren</h3>
<p>Als allererstes kopiere ich die DVD mittels dvdbackup. Damit das mit CSS verschlüsselten DVDs funktioniert, muss eine entsprechende Version der libdvdcss installiert sein. Irgendwo unterhalb von /usr/share/doc gibt es ein Shell-Script, welches dies erledigt:</p>
<pre>find /usr/share/doc -name '*css*.sh'</pre>
<p>Üblicherweise kopiere ich die ganze DVD und nicht nur das Main-Feature. Das erledigt der Schalter &#8220;-M&#8221; wie &#8220;Mirror&#8221;, daneben sind Eingabegerät und Zielordner notwendig:<span id="more-871"></span></p>
<pre>dvdbackup --verbose -M -i /dev/sr0 -o ./</pre>
<p>Es entsteht ein Ordner mit dem Namen des Volumes. Das kann &#8220;DVD_VOLUME&#8221; sein oder &#8220;VIDEO_TS&#8221; oder &#8220;NAME_DES_FILMS&#8221;. Wieder mit &#8220;dvdbackup&#8221; erfahren Sie einiges über die ID des Main Features und Blickwinkel sowie Tonspuren:</p>
<pre>dvdbackup --verbose -I -i VIDEO_TS</pre>
<p>Die Ausgabe sieht etwa so aus:</p>
<pre>Hauptfilm:
        Titelzusammenstellung, die den Hauptfilm enthält, ist 5
        Das Seitenverhältnis des Hauptfilms ist 16:9
        Der Hauptfilm hat 1 Blickwinkel
        Der Hauptfilm hat 4 Tonspuren
        Der Hauptfilm hat 6 Unterbildkanäle
        Der Hauptfilm hat maximal 37 Kapitel pro Titel
        Der Hauptfilm hat maximal 6 Audiokanäle pro Titel</pre>
<p>Oft wichtig ist, ob Titelzusammenstellung 5 weitere Titel enthält:</p>
<pre>Titelzusammenstellung 5
                Das Seitenverhältnis der Titelzusammenstellung 5 ist 16:9
                Titelzusammenstellung 5 hat 1 Blickwinkel
                Titelzusammenstellung 5 hat 4 Tonspuren
                Titelzusammenstellung 5 hat 6 Unterbildkanäle

                Der in Titelzusammenstellung 5 enthaltene Titel ist
                        Titel 1:
                                Titel 1 hat 37 Kapitel
                                Titel 1 hat 6 Audiokanäle</pre>
<p>Beim Encodieren mit mencoder ist demnach &#8220;dvd://5&#8243; oder &#8220;dvd://1&#8243; später die Titelangabe, für dvdxchap ist &#8220;-t 5&#8243; oder &#8220;-t 1&#8243; anzugeben.</p>
<h3>Chapter auslesen</h3>
<p>Während die DVD im Laufwerk liegt, lesen Sie noch die Chapter aus:</p>
<pre>dvdxchap -t 1 /dev/sr0 > chapters.txt</pre>
<p>Anschließend kann die DVD aus dem Laufwerk genommen und beiseite gelegt werden.</p>
<h3>Encodierung des Videos</h3>
<p>Das Video encodiere ich im Twopass-Verfahren. Beim ersten Lauf erkennt mencoder die Stellen, die höhere Bitraten erfordern, beim zweiten Lauf wird die eigentliche Transkodierung erledigt. Das Audio schalte ich in beiden Durchläufen komplett ab, ebenso Untertitel:</p>
<pre>mencoder -dvd-device VIDEO_TS dvd://1 -nosub -vf harddup -nosound \
    -ovc x264 -x264encopts \
    bitrate=1500:subq=5:bframes=3:b_pyramid=normal:weight_b:turbo=1:threads=auto:pass=1 \
    -o /dev/null</pre>
<p>mencoder zeigt beim Start einige Hinweise auf Tonspuren und verfügbare Untertitel an. Diese sollten Sie per Copy and Paste für später sichern:</p>
<pre>audio stream: 0 format: ac3 (5.1) language: en aid: 128.
audio stream: 1 format: ac3 (5.1) language: de aid: 129.
audio stream: 2 format: dts (5.1) language: de aid: 138.
audio stream: 3 format: ac3 (stereo) language: en aid: 131.
number of audio channels on disk: 4.
subtitle ( sid ): 1 language: en
subtitle ( sid ): 3 language: de
subtitle ( sid ): 5 language: de
subtitle ( sid ): 7 language: tr
subtitle ( sid ): 9 language: de
subtitle ( sid ): 11 language: de
number of subtitles on disk: 6</pre>
<p>Und nun zum zweiten Durchlauf. Hier entsteht eine AVI-Datei, welche lediglich die H.264 kodierte Videospur enthält &#8211; das Containerformat ist zunächst noch AVI:</p>
<pre>mencoder -dvd-device VIDEO_TS dvd://1 -nosub -vf harddup -nosound \
    -ovc x264 -x264encopts \
    bitrate=1500:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b:threads=auto:pass=2 \
    -o video.avi</pre>
<h3>Audio transcodieren</h3>
<p>Das Audio extrahiere und konvertiere ich in AVI-Dateien, die wiederum nur eine Audiospur und eine Videospur mit Dummy-Codec &#8220;frameno&#8221; enthalten. Zuerst Englisch, hier mit ID 128:</p>
<pre>mencoder -dvd-device VIDEO_TS dvd://1 -oac mp3lame -lameopts abr:br=192 -aid 128 -ovc frameno -o audio_en.avi</pre>
<p>Deutsch mit Audio ID 129:</p>
<pre>mencoder -dvd-device VIDEO_TS dvd://1 -oac mp3lame -lameopts abr:br=192 -aid 129 -ovc frameno -o audio_de.avi</pre>
<h3>Untertitel extrahieren</h3>
<p>Auch Untertitel kann mencoder extrahieren. Audio ignorieren wir und die Videoframes kopieren wir &#8211; nach /dev/null. Die SIDs entnehmen wir der Ausgabe oben. Zuerst Englisch:</p>
<pre>mencoder -dvd-device VIDEO_TS dvd://1 -nosound -sid 1 -vobsubout subs_en -ovc copy -o /dev/null</pre>
<p>Dann Deutsch:</p>
<pre>mencoder -dvd-device VIDEO_TS dvd://1 -nosound -sid 3 -vobsubout subs_de -ovc copy -o /dev/null</pre>
<p>Oft finden sich mehrere Untertitelspuren einer Sprache auf der DVD, in der Regel handelt es sich dann um Spuren mit zusätzlicher Beschreibung der Hintergrundgeräusche &#8211; &#8220;Deutsch für Hörgeschädigte&#8221; o.ä., ganz praktisch wenn man ein Video ansehen will, wenn ein Baby im Zimmer schläft.</p>
<h3>Alles zusammenfügen</h3>
<p>Mittels &#8220;mkvmerge&#8221; füge ich nun Videospur, beide Tonspuren und die Untertitel zusammen. In diesem Fall besagt &#8220;-A -S video.avi&#8221;, dass von dieser Datei keine Audiospur und keine Subtitel übernommen werden sollen. &#8220;-D -S audio_de.avi&#8221; bedeutet, dass diese Datei keine Videospur und keine Untertitel mitbringt, unterschlägt man &#8220;-D&#8221;, wird die Pseudo-Videospur mit Codec &#8220;frameno&#8221; übernommen:</p>
<pre>mkvmerge --title 'Name des Films' -o Dateiname.mkv \
    --chapters chapters.txt \
    -A -S video.avi \
    -D -S audio_de.avi -D -S audio_en.avi \
    subs_de.idx subs_en.idx</pre>
<p><b>Fertig!</b> Ergänzungsbedarf gibt es möglicherweise beim Cropping (21:9-Material wird mit schwarzen Balken ausgeliefert) oder bei den Audioformaten. Zum Start sollte die beschriebene Vorgehensweise aber genügen und zu ganz guten Ergebnissen führen. Anregungen gerne in den Kommentaren.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2012/12/31/dvd-nach-mkv-rippen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ubuntu 12.10 und VMware Workstation 9 oder Player 5</title>
		<link>http://blog.rootserverexperiment.de/2012/11/02/ubuntu-12-10-und-vmware-workstation-9-oder-player-5/</link>
		<comments>http://blog.rootserverexperiment.de/2012/11/02/ubuntu-12-10-und-vmware-workstation-9-oder-player-5/#comments</comments>
		<pubDate>Fri, 02 Nov 2012 18:46:59 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tips und Tricks]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=860</guid>
		<description><![CDATA[Die Kernelmodule von VMware greifen reicht stark in die Speicherverwaltung ein, beziehungsweise sind allergisch auf Änderungen an den APIs der Netzwerktreiber. Kommt ein Kernel nach Fertigstellung von VMwares Treiberpaket auf den Markt, gibt es lange Gesichter: VMware-Module lassen sich nicht kompilieren oder kompilieren und nicht laden oder VMware &#8211; und schlimmstenfalls der Kernel &#8211; stürzen [...]]]></description>
			<content:encoded><![CDATA[<p>Die Kernelmodule von VMware greifen reicht stark in die Speicherverwaltung ein, beziehungsweise sind allergisch auf Änderungen an den APIs der Netzwerktreiber. Kommt ein Kernel nach Fertigstellung von VMwares Treiberpaket auf den Markt, gibt es lange Gesichter: VMware-Module lassen sich nicht kompilieren oder kompilieren und nicht laden oder VMware &#8211; und schlimmstenfalls der Kernel &#8211; stürzen ab. Für Nutzer von VMware Workstation 9 oder Player 5 gibt es hier Abhilfe:</p>
<p><a href="http://communities.vmware.com/servlet/JiveServlet/download/2103172-94260/vmware9_kernel35_patch.tar.bz2">http://communities.vmware.com/servlet/JiveServlet/download/2103172-94260/vmware9_kernel35_patch.tar.bz2</a></p>
<p>Um den Patch anzuwenden, gegebenenfalls zunächst auf Ubuntu 12.10 aktualisieren, dann die VMware-Dienste stoppen:</p>
<pre>service vmware stop</pre>
<p>Anschließend den Patch entpacken und das enthaltene Script anwenden:</p>
<pre>tar xvjf vmware9_kernel35_patch.tar.bz2
cd vmware9_kernel3.5_patch
bash patch-modules_3.5.0.sh</pre>
<p>Jetzt noch die Dienste neu starten, dann klappt es wieder mit dem VMware Player&#8230;</p>
<pre>service vmware restart
vmplayer</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2012/11/02/ubuntu-12-10-und-vmware-workstation-9-oder-player-5/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ubuntu 12.04 auf GPT &#8220;debootstrappen&#8221;</title>
		<link>http://blog.rootserverexperiment.de/2012/08/05/ubuntu-12-04-auf-gpt-debootstrappen/</link>
		<comments>http://blog.rootserverexperiment.de/2012/08/05/ubuntu-12-04-auf-gpt-debootstrappen/#comments</comments>
		<pubDate>Sun, 05 Aug 2012 15:28:23 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=844</guid>
		<description><![CDATA[Ein neuer Hetzner-Server &#8211; der wieder dank Xen fast 30 Linux-Instanzen aufnehmen wird &#8211; machte es erstmalig erforderlich, ein Linux remote auf einer großen Platte (größer als 2TB) zu installieren. Statt dem im Büronetz eingesetzten PXE-Netinstaller musste hier &#8220;debootstrap&#8221; zum Einsatz kommen &#8211; und es klappte fast auf Anhieb. Grund für die Neuinstallation war &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Ein neuer Hetzner-Server &#8211; der wieder dank Xen fast 30 Linux-Instanzen aufnehmen wird &#8211; machte es erstmalig erforderlich, ein Linux remote auf einer großen Platte (größer als 2TB) zu installieren. Statt dem im Büronetz eingesetzten PXE-Netinstaller musste hier &#8220;debootstrap&#8221; zum Einsatz kommen &#8211; und es klappte fast auf Anhieb. Grund für die Neuinstallation war &#8211; mal wieder &#8211; der Wunsch, ein eigenes Partitionslayout vergeben zu können, eine Flexbilität, die Hetzner natürlich für das Standardimage nicht bieten kann. Ich entschied mich daher dafür, den Server mit aktiviertem Rettungssystem zu übernehmen. Das ist bei Hetzner Debian basiert, so dass &#8220;debootstrap&#8221; in Ubuntus Version mit wenigen Handgriffen installiert werden kann. Der einzige Haken: Festplatten über zwei Terabyte erfordern entweder eine GUID Partition Table (&#8220;GPT&#8221;) oder eben, dass man damit lebt, dass rund ein Drittel der Plattenkapazität nicht erhältlich ist. Ich entschied mich für ersteres.<span id="more-844"></span></p>
<h3>Partitionierung</h3>
<p>Ungewohnt ist die Partitionierung: GPT kennt keine primären, erweiterten und logischen Partitionen, sondern nur &#8230; Partitionen. Maximal 128 derer. Die Partitionstabelle muss daher auch nicht innerhalb der ersten 512 Bytes der Platte residieren, sondern darf etwas mehr Platz beanspruchen, eine Backup-Partitionstabelle wird am Ende der Platte untergebracht, worauf ich im Detail aber erst in einem separaten Beitrag eingehen möchte.</p>
<p>Die Partitionierung erfordert zwingend eine kleine Partition vom Typ <tt>ef02</tt>, wenn der Rechner ein klassisches BIOS nutzt oder eine Partitition vom Typ <tt>ef01</tt> für einen EFI-Rechner. Dahinter werden System- und Swap-Partition angelegt. Zum Einsatz kommt <tt>gdisk</tt>, welches sich verhält wie das altbekannte <tt>fdisk</tt>:</p>
<pre>gdisk /dev/sda</pre>
<p>Das Ergebnis sieht so aus:</p>
<pre>Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          133119   64.0 MiB    EF02  BIOS boot partition
   2          133120        16910335   8.0 GiB     8200  Linux swap
   3        16910336       226625535   100.0 GiB   0700  Linux/Windows data</pre>
<h3>Installation des Grundsystems</h3>
<p>Die Systempartition wird jetzt formatiert und gemountet:</p>
<pre>mkdir -p /tmp/minibuntu
mkfs.ext4 /dev/sda3
mount /dev/sda3 /tmp/minibuntu</pre>
<p>Auf Hetzners Rettungssystem war ein Debain-Debootstrap installiert. Ich muss es vom <a href="http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/">Ubuntu-Mirror herunterladen</a>  und mit dpkg installieren:</p>
<pre>dpkg -i debootstrap_1.0.41ubuntu1_all.deb</pre>
<p>Die Installation des Grundsystems geht dann recht flink mit:</p>
<pre>debootstrap --arch amd64 precise /tmp/minibuntu http://archive.ubuntu.com/ubuntu</pre>
<h3>Nachbereitung des Systems</h3>
<p>Nun sind einige Anpassungen vorzunehmen. Zunächst editieren Sie die <tt>/etc/hostname</tt>, die <tt>/etc/default/locale</tt>, die <tt>/etc/network/interfaces</tt>, die <tt>/etc/fstab</tt> und gegebenenfalls die <tt>/etc/apt/sources.list</tt> des frisch installierten Systemes. Mounten Sie dann einige spezielle Dateisysteme:</p>
<pre>mount -t proc none /tmp/minibuntu/proc
mount --bind /sys /tmp/minibuntu/sys
mount --bind /dev /tmp/minibuntu/dev
mount -t devpts none /tmp/minibuntu/dev/pts</pre>
<p>Nun fehlen noch Kernel, Rootpasswort und eine Möglichkeit zur Fernwartung, wechseln Sie per Chroot in das frisch installierte System und nehkmen Sie die notwendigen Änderungen vor:</p>
<pre>chroot /tmp/minibuntu
shadowconfig on
passwd
apt-get update
apt-get install linux-image-generic ssh</pre>
<p>Mit dem Linux-Kernel wird als Abhängigkeit GRUB installiert. Dieser fragt nach dem Installationsort für den Bootloader, an dieser Stelle ist <tt>/dev/sda</tt> anzugeben. GRUB schreibt nun einen Kompatibilitäts-MBR, packt seine Binärdateien aber auf die BIOS-Boot-Partition. Jetzt noch einmal die <tt>/etc/network/interfaces</tt> und <tt>/etc/fstab</tt> prüfen, dann den Chroot verlassen und rebooten:</p>
<pre>exit
reboot</pre>
<p>Viel Spaß damit auf dem eigenen Server!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2012/08/05/ubuntu-12-04-auf-gpt-debootstrappen/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>USB-Geräte im Netz durchreichen</title>
		<link>http://blog.rootserverexperiment.de/2012/07/16/usb-gerate-im-netz-durchreichen/</link>
		<comments>http://blog.rootserverexperiment.de/2012/07/16/usb-gerate-im-netz-durchreichen/#comments</comments>
		<pubDate>Mon, 16 Jul 2012 11:18:07 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Thinclient]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=827</guid>
		<description><![CDATA[Für einen Kunden arbeite ich gerade an einem Thin-Client-Netzwerk: Dünne, unter Linux laufende Clients sollen per RDP-Client auf Windows-7-Pro-Instanzen zugreifen, die gesammelt auf einem Xen-Host ausgeführt werden. Für die Nicht-Verwendung von Windows Server 2008 mit Terminaldiensten gibt es den simplen Grund, dass einige der eingesetzten Anwendungen nicht in Terminalserverumgebungen lauffähig sind. Der Haken an der [...]]]></description>
			<content:encoded><![CDATA[<p>Für einen Kunden arbeite ich gerade an einem Thin-Client-Netzwerk: Dünne, unter Linux laufende Clients sollen per RDP-Client auf Windows-7-Pro-Instanzen zugreifen, die gesammelt auf einem Xen-Host ausgeführt werden. Für die Nicht-Verwendung von Windows Server 2008 mit Terminaldiensten gibt es den simplen Grund, dass einige der eingesetzten Anwendungen nicht in Terminalserverumgebungen lauffähig sind. Der Haken an der Geschichte: Es muss ein komfortabler Zugriff auf lokale USB-Geräte &#8211; Speichersticks, Chipkartenleser und ähnliches &#8211; möglich sein.</p>
<p>Wir haben daher zunächst mit USB-Servern fürs Netz experimentiert, derartige Geräte gibt es für netto 30 Euro (Ein-Port-Versionen mit unbekanntem chinesischen Hersteller, <a href="http://www.conrad.de/ce/de/product/972161/?insert=U1&#038;hk=WW2&#038;utm_source=epro&#038;utm_medium=seosite&#038;utm_campaign=link&#038;WT.mc_id=epro">z.B. bei Conrad</a>) bis 300 Euro (zwei oder vier Ports, Hutschienenmontage, Industriequalität, PoE, <a href="http://www.wut.de/e-53641-ww-dade-000.php">z.B. bei WuT</a>). Mir gefiel aber nicht, neben dem Thinclient ein weiteres Gerät mit eigenem Netzteil (günstige Geräte können kein PoE) am Arbeitsplatz zu haben und habe daher nach Softwarelösungen für Linux gesucht. Gestoßen bin ich zunächst auf die kommerzielle Software <a href="http://www.incentivespro.com/compare-editions.html">USB Redirector</a>, die jedoch für unser Szenario mit 75 oder 89US$ je Arbeitsplatz zu Buche schlagen würde. Gelandet bin ich schließlich beim freien Projekt <a href="http://usbip.sourceforge.net/">USBIP</a>, das jedoch nicht ganz trivial zur Zusammenarbeit zu bewegen ist. Geschafft habe ich es dennoch, Testsystem ist ein Ubuntu 12.04, die im nachfolgenden Text beschriebenen Schritte dürften so auch auf andere Systeme mit Kernel 3.1 oder höher anzuwenden sein. Als Client habe ich bislang nur Windows probiert über meine Erfahrungen mit Linux werde ich ggf. später berichten.<br />
<span id="more-827"></span></p>
<h3>Auf der Serverseite</h3>
<p>Mich machte bereits stutzig, dass das Projekt seit 2009 keine Aktualisierungen für Linux veröffentlicht hat. Dennoch gibt es einen recht aktuellen Client für Windows und Screenshots, die diesen bei der Arbeit zeigen. Ich ging daher davon aus, dass die Version 0.1.7 stabil und erprobt war (USB- in IP-Pakete zu kapseln ist schließlich so aufwendig nicht). Zumal usbip 0.1.7 in den Repositories von Ubuntu 12.04 enthalten ist. Ich installierte es und stieß bereits beim Start des Daemons auf Fehlermeldungen:</p>
<pre>    root@caesium:~# usbipd --debug
    usbipd: symbol lookup error: usbipd: undefined symbol: stub_driver</pre>
<p>Den Grund zu finden erforderte eine ausgiebige Suche: Tatsächlich wird der Quellcode des USB-IP-Projektes seit einer Weile im  Git-Repository des Linux-Kernels gepflegt &#8211; und das gilt auch für die Userlandwerkzeuge. Warum Ubuntu das veraltete Paket mitbringt, welches zwar unter neueren Kernel kompiliert, aber darüber hinaus nicht nutzbar ist, ist mir nicht ganz klar. Also: usbip-0.1.7-3 wieder deinstalliert und zurück auf Los.</p>
<p>Ubuntu 12.04 verwendet Linux 3.2 mit eigener Minor-Versionierung. Ich entschied mich daher für 3.2.23, natürlich können Sie auch Ubuntus Quellen verwenden. Entpacken Sie den Kernel und wechseln Sie in das Verzeichnis mit den Userland-Tools und bereiten Sie dort die Kompilation vor:</p>
<pre>tar xvjf linux-3.2.23.tar.bz2
cd linux-3.2.23/drivers/staging/usbip/userspace
bash autogen.sh
./configure --prefix=/usr --sysconfdir=/etc</pre>
<h3>Kleine Anpassungen erforderlich</h3>
<p>Möchte man den Windows-Client 0.2.0.0 zusammen mit einem Kernel &gt;3.0 verwenden, ist es gegebenenfalls erforderlich, die Protokollversion anzupassen: Aktuelle Linuxe sind derzeit bei 0&#215;111, der Windows-Treiber kommuniziert nur mit 0&#215;106. Ich habe daher die <tt>config.h</tt> abgeändert:</p>
<pre>sed -i 's%USBIP_VERSION 0x00000111%USBIP_VERSION 0x00000106%g' config.h</pre>
<p>Nehmen Sie diese Änderung nur vor, wenn Sie ausschließlich mit Windows-Clients der Version 0.2.0.0 auf den USB-IP-Server zugreifen wollen! Ich vermute, dass bald Windows-Clients erscheinen, welche diese Anpassung nicht erfordern.</p>
<p>Jetzt wird gebaut und installiert:</p>
<pre>make &#038;&#038; make install</pre>
<h3>Start des Daemons</h3>
<p>Startet man den Daemon, gibt er möglicherweise eine Fehlermeldung aus:</p>
<pre>root@caesium:~# usbipd --debug
libusbip: debug: usbip_host_driver.c:244:[open_sysfs_host_driver] sysfs_open_driver_path failed
usbipd: error: please load usbip-core.ko and usbip-host.ko!</pre>
<p>Die erforderlichen Module aus dm Staging-Zweig müssen natürlich vorhanden sein (sind sie bei Ubuntu), im Zweifel mal nach USBIP in der Kernel-Config greppen:</p>
<pre>root@caesium:~# modprobe -v usbip-host
insmod /lib/modules/3.2.0-24-generic/kernel/drivers/staging/usbip/usbip-core.ko 
insmod /lib/modules/3.2.0-24-generic/kernel/drivers/staging/usbip/usbip-host.ko 
root@caesium:~# usbipd --debug &#038;
libusbip: debug: usbip_host_driver.c:189:[refresh_exported_devices] bind usbip-host.ko to a usb device to be exportable!
usbipd: info: starting usbipd (usbip-utils 1.1.1)
usbipd: info: listening on 0.0.0.0:3240
usbipd: debug: usbipd.c:394:[listen_all_addrinfo] listening on 1 address</pre>
<p>Lassen wir uns lokale Geräte anzeigen&#8230;</p>
<pre>root@caesium:~# usbip list -l
Local USB devices
=================
 - busid 2-4 (0951:1603)
         2-4:1.0 -> usb-storage

 - busid 4-1 (0a12:0001)
         4-1:1.0 -> btusb
         4-1:1.1 -> btusb
         4-1:1.2 -> unknown</pre>
<p>&#8230;und exportieren dann einen USB-Stick (den sollte man vorher übrigens unmounten):</p>
<pre>root@caesium:~# usbip bind -b 2-4 
bind device on busid 2-4: complete</pre>
<h3>Und nun der Windows-Client</h3>
<p>Nun werden die Treiber gemäß der im Zip enthaltenen Installationsanleitung eingerichtet. Zum Verbinden mit dem Server dient das Programm <tt>usbip.exe</tt>, welches im Zip beiliegt, Caesium hat die IP 10.76.23.55, schauen wir mal nach den freigegebenen Geräten&#8230;</p>
<p><center><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20120716_usbip1.png" /></center></p>
<p>&#8230;und verbinden dann mit dem USB-Stick:</p>
<p><center><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20120716_usbip2.png" /></center></p>
<h3>Kommando zurück: Verbindung trennen</h3>
<p>Trennen erfordert etwas mehr Aufwand, zunächst muss unter Windows die Hardware sicher entfernt werden, dann folgt das Lösen der Verbindung zum Server (1 ist die virtuelle Portnummer, welche im zweiten screen beim Verbinden angezeigt wird):</p>
<pre>    usbip.exe -d 1</pre>
<p>Auf Serverseite ist das Gerät noch verbunden:</p>
<pre>root@caesium:~# usbip list -l
Local USB devices
=================
 - busid 2-4 (0951:1603)
         2-4:1.0 -> usbip-host</pre>
<p>Es folgt die Trennung:</p>
<pre>root@caesium:~# usbip unbind -b 2-4
unbind device on busid 2-4: complete
root@caesium:~# usbip list -l
Local USB devices
=================
 - busid 2-4 (0951:1603)
         2-4:1.0 -> usb-storage</pre>
<p>Trennt man nicht, verabschiedet sich Windows beim Shutdown möglicherweise mit einem Bluescreen. Dass USB-Fernzugriff zwischen Linux und Windows möglich ist, wäre damit bewiesen. In meinen kleinen Tests war die Verbindung stets zuverlässig. Wie sich Webcams und DVB-T-Sicks verhalten, probiere ich noch aus. Der weit aufwendigere Teil steht uns allerdings noch vor: Scripting und evtl. Erstellung eines Daemons für Windows, der neu an den Thinclient angeschlossene USB-Geräte, welche keine Drucker, Tastaturen und Mäuse sind, automatisch im Windows verfügbar macht, ohne das der Nutzer allzuviel interagieren muss.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2012/07/16/usb-gerate-im-netz-durchreichen/feed/</wfw:commentRss>
		<slash:comments>180</slash:comments>
		</item>
		<item>
		<title>Windows 7 oder Server 2008 als Xen domU (HVM)</title>
		<link>http://blog.rootserverexperiment.de/2012/05/04/windows-7-oder-server-2008-als-xen-domu-hvm/</link>
		<comments>http://blog.rootserverexperiment.de/2012/05/04/windows-7-oder-server-2008-als-xen-domu-hvm/#comments</comments>
		<pubDate>Fri, 04 May 2012 21:54:46 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=798</guid>
		<description><![CDATA[Mit der besseren Integration von Xen in die aktuelle LTS Version von Ubuntu bietet es sich an, als Virtualisierungslösung auf den freien Xen zu setzen, wenn es darum geht, einen Windows TS (Terminal Services) oder RDS (Remote Desktop Services) Server im kleinen SOHO Netzwerk zu virtualisieren. Dieser Workshop setzt einen funktionierenden Xen-Host voraus, d.h. eine [...]]]></description>
			<content:encoded><![CDATA[<p>Mit der besseren Integration von Xen in die aktuelle LTS Version von Ubuntu bietet es sich an, als Virtualisierungslösung auf den freien Xen zu setzen, wenn es darum geht, einen Windows TS (Terminal Services) oder RDS (Remote Desktop Services) Server im kleinen SOHO Netzwerk zu virtualisieren. Dieser Workshop setzt einen funktionierenden Xen-Host voraus, d.h. eine paravirtualisierte domU konnte bereits erfolgreich gestartet werden. <span id="more-798"></span></p>
<h3>Voraussetzungen prüfen</h3>
<p>Um Windows auf Xen laufen lassen zu können, muss die &#8220;Hardware Virtual Machine&#8221; ran. Die sollten moderne Prozessoren beherrschen, tun sie aber nicht immer. Ein guter Ansatz ist es. den Inhalt von <tt>/proc/cpuinfo</tt> nach <i>vm</i> zu durchsuchen. Taucht hier <i>vme</i> oder <i>svm</i> auf, schaut es gut aus. Wenn nicht: Zuerst ins BIOS schauen und dort Hardwarevirtualisierung aktivieren &#8211; ggf. einen Blick ins Xen-Wiki werfen:  <a href="http://wiki.xensource.com/xenwiki/HVM_Compatible_Processors" target="_blank">wiki.xensource.com/xenwiki/HVM_Compatible_Processors</a>.</p>
<pre>grep vm /proc/cpuinfo</pre>
<h3>Installations-ISO besorgen</h3>
<p>Für die Installation benötigen wir ein Verzeichnis für die VM und das Installations-ISO. Legen wir das Verzeichnis und eine leere Festplatte als Sparse File an:</p>
<pre>WIN2008DIR=/usr/local/xendomains/win2008
mkdir -p $WIN2008DIR
dd if=/dev/zero bs=1M count=1 of=$WIN2008DIR/xvda.img seek=39999</pre>
<p>Das ISO des Windows besorge ich mir von <a href="http://technet.microsoft.com/en-us/evalcenter/dd459137.aspx" target="_blank">technet.microsoft.com/en-us/evalcenter/dd459137.aspx</a> und kopiere es nach <tt>$WIN2008DIR/win2008.iso</tt>.</p>
<h3>Konfigurationsdatei für die Installation</h3>
<p>Meine Konfigurationsdatei <tt>/usr/local/xendomains/win2008/xen.cfg</tt> für die Installation sieht folgendermaßen aus:</p>
<pre>kernel = '/usr/lib/xen-default/boot/hvmloader'
builder='hvm'
memory = 1024
xen_platform_pci=1
# Should be at least 2KB per MB of domain memory, plus a few MB per vcpu.
shadow_memory = 16
name = "win2008"
vif = [ 'type=ioemu, bridge=xenbr0, mac=00:16:17:12:23:01, model=e1000' ]
acpi = 1
apic = 1
disk = [ 'file:/usr/local/xendomains/win2008/xvda.img,xvda,w', 
         'file:/usr/local/xendomains/win2008/win2008.iso,xvdc:cdrom,r' ]
device_model = '/usr/lib/xen-default/bin/qemu-dm'
# boot on floppy (a), hard disk (c) or CD-ROM (d) 
# default: hard disk, cd-rom, floppy
boot="dc"
sdl=0
vnc=1
vncconsole=1
vncpasswd=''
serial='pty'
usbdevice='tablet'</pre>
<h3>Der erste Start</h3>
<p>Nun geht es an den ersten Start: </p>
<pre>xm create /usr/local/xendomains/win2008/xen.cfg</pre>
<p>Lautet die Ausgabe <tt>Error: Domain 'win2008' does not exist.</tt> ist ein Blick in die Logdatei <tt>/var/log/xen/qemu-dm-win2008.log</tt> angeraten. Steht dort etwas wie <tt>Could not read keymap file: '/usr/share/qemu/keymaps/en-us'</tt> hilft meist ein Softlink:</p>
<pre>ln -sf /usr/share/qemu-linaro /usr/share/qemu</pre>
<p>Lautet die Ausgabe: <tt>Started domain win2008 (id=4)</tt> können Sie lokal mit dem VNC Viewer mit der Domain verbinden:</p>
<pre>vncviewer localhost</pre>
<p>In meinem Fall handelte es sich um einem kopflosen Server. Da musste ich mir den SSH-Port zunächst per Port-Weiterleitung auf den lokalen Rechner holen. 10.76.23.55 ist der Server, auf dem Xen läuft und die DomU eingerichtet werden soll:</p>
<pre>ssh -L 5900:localhost:5900 root@10.76.23.55</pre>
<p>In einem anderen Terminal kann ich dann auf dem PC, der die SSH-Verbindung initiiert hat die VNC Konsole öffnen: <tt>vncviewer localhost</tt>. Und bitte keine Panik, wenn während der Installation die VNC-Verbindung mal abreisst. Bei Reboots oder Änderungen der Grafikauflösung ist das normal.</p>
<h3>Installation der PV-Treiber</h3>
<p>Eine deutlich bessere Performance von Netzwerk und virtuellen Festplatten erhalten Sie nach Installation der GPL PV-Treiber. Sie finden diese unter <a href="http://www.meadowcourt.org/downloads/">www.meadowcourt.org/downloads/</a> Laden Sie das aktuellste <tt>gplpv*</tt>-Paket für Ihr Windows und installieren Sie dieses. Ist die Installation abgeschlossen, fahren Sie das Windows herunter und ändern Sie die Konfigurationsdatei:</p>
<pre>
vif = [ 'type=ioemu, bridge=xenbr0, mac=00:16:17:12:23:02, type=paravirtualized' ]
# default: hard disk, cd-rom, floppy
boot="c"</pre>
<h3>Feintuning zum Schluss</h3>
<p>Ist der Windows-Server fertig eingerichtet und das Login mittels <tt>rdesktop</tt> funktioniert, kann die lokale Serverkonsole per VNC deaktiviert werden:</p>
<pre>vnc=0
vncconsole=0</pre>
<p>Im Falle eines Falles (Server vergisst Netzwerkeinstellungen o.ä.) muss die betreffende Domain dann natürlich abgewürgt werden und die beiden Parameter müssen wieder auf 1 gesetzt werden. Aus Sicherheitsgründen ist es aber nicht ratsam, die VNC-Konsole dauerhaft zugreifbar zu haben.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2012/05/04/windows-7-oder-server-2008-als-xen-domu-hvm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 12.04 LTS als Xen Dom0 einrichten</title>
		<link>http://blog.rootserverexperiment.de/2012/05/04/ubuntu-12-04-lts-als-xen-dom0-einrichten/</link>
		<comments>http://blog.rootserverexperiment.de/2012/05/04/ubuntu-12-04-lts-als-xen-dom0-einrichten/#comments</comments>
		<pubDate>Fri, 04 May 2012 19:25:13 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=762</guid>
		<description><![CDATA[Bislang habe ich Ubuntu immer mit den Vanilla-Sourcen von Xen eingerichtet, einfach weil der Support für Dom0 (priviligierte Domain) teils fehlte, teils veraltet und instabil war. 12.04 ist die erste LTS-Version, die sich zufriedenstellend &#8220;out of the box&#8221; als Domain 0 einrichten lässt. Mit verantwortlich ist, dass sich Kernel ab Version 3.0 auf dem Hypervisor [...]]]></description>
			<content:encoded><![CDATA[<p>Bislang habe ich Ubuntu immer mit den Vanilla-Sourcen von Xen eingerichtet, einfach weil der Support für Dom0 (priviligierte Domain) teils fehlte, teils veraltet und instabil war. 12.04 ist die erste LTS-Version, die sich zufriedenstellend &#8220;out of the box&#8221; als Domain 0 einrichten lässt. Mit verantwortlich ist, dass sich Kernel ab Version 3.0 auf dem Hypervisor Xen starten lassen, gepatchte spezielle Kernel sind heute überflüssig. Die Einrichtung ist recht geradlinig, lediglich einige Kleinigkeiten sind zu beachten.</p>
<p>Weniger geradlinig ist noch immer der Betrieb: Der Einsatz von HVM-Gästen benötigt VME- bzw. SVM-Erweiterungen des Prozessors (in billigen PCs hart per BIOS deaktiviert) und einige Grafikkarten mit KMS bereiten Ärger, genauso wie die proprietären Grafiktreiber von AMD und nVidia. Um schnell ein Demo-Virtualisierungssystem einzurichten, taugt Xen nicht (dafür sind VMware Player oder VirtualBox viel besser geeignet). Wer dagegen extrem flexible Servervirtualisierung mit geringem Overhead und hoher Flexibilität sucht, wird mit Xen jedoch fündig. <span id="more-762"></span></p>
<h3>Software-Installation</h3>
<p>Installiert wird Xen über das Paket <i>xen-hypervisor-4.1-amd64</i>, alle Abhängigkeiten werden dann nachgezogen. <tt>kpartx</tt> wird für die Einrichtung der domUs benötigt:</p>
<pre>sudo apt-get install xen-hypervisor-4.1-amd64 kpartx</pre>
<p>Während der Installation fügt Ubuntu einen Bootmenüeintrag &#8220;Xen 4.1-amd64&#8243; hinzu, über den Sie in einem Untermenü landen. Das ist ein guter Ansatz, solange mit den Bootoptionen herumzuspielen (<tt>vga=normal nomodeset</tt> usw.) bis der Server sauber hochfährt und sich stabil benutzen lässt.</p>
<h3>GRUB-Konfiguration anpassen</h3>
<p>Ich habe mich für eine etwas unorthodoxe GRUB-Konfiguration entschieden. Ein Script <tt>/etc/grub.d/98xen</tt> sucht den letzten Linux-Kernel und sein Initramfs und fügt für diesen einen Eintrag in der obersten Ebene des GRUB-Menüs ein. Anzupassen sind UUID und Parameter der Module-Zeile. Bitte nach Änderungen das Script einmal im Terminal ausführen, um zu sehen, ob die Ausgabe plausibel ist. Wer bessere Ideen hat, maile mir diese:</p>
<pre>#!/bin/sh

LINUXKERNEL=` ls /boot/vmlinuz-3.2* | tail -n1 `
INITRAMFS=` echo $LINUXKERNEL | sed 's/vmlinuz/initrd.img/g' ` 
XENKERNEL=` ls /boot/xen-4.1* | tail -n1 `  
UUID=eb7a7f54-291f-420f-9f26-7d753c857a3d

exec tail -n +15 $0 | sed 's%XENKERNEL%'${XENKERNEL}'%g' | \
        sed 's%LINUXKERNEL%'${LINUXKERNEL}'%g' | \
        sed 's%INITRAMFS%'${INITRAMFS}'%g' | \
        sed 's%ROOTUUID%'${UUID}'%g' | \
        sed 's%^#%%g'

# Now the template - starting in line 15 - # will be removed
#menuentry "Xen+PVOPS" {
#        insmod ext2
#        set root=(hd0,1)
#        search --no-floppy --fs-uuid --set=root ROOTUUID
#        multiboot XENKERNEL dummy=dummy
#        module LINUXKERNEL root=UUID=ROOTUUID ro nomodeset vga=normal
#        module INITRAMFS dummy=dummy
#}</pre>
<p>Damit das ganze funktioniert muss das Script ausführbar sein:</p>
<pre>chmod 0755 /etc/grub.d/98xen</pre>
<p>nun noch in der Datei <tt>/etc/default/grub</tt> den Standard ändern:</p>
<pre># GRUB_DEFAULT=0
GRUB_DEFAULT='Xen+PVOPS'</pre>
<p>Nach einem </p>
<pre>sudo update-grub</pre>
<p>und dem folgenden obligatorischen Reboot sollte das Kommando <tt>xm dmesg</tt> zeigen, dass unterhalb von Linux Xen 4.1 läuft. Das war die halbe Miete.</p>
<h3>Netzwerk für Xen einrichten</h3>
<p>Xen benötigt eine Netzwerkbrücke. Die MAC-Adressen der unpriviligierten Domains werden dabei an ein bestimmtes Netzwerkinterface gebunden &#8211; in Heimnetzwerken und Büronetzen, in denen Sie die Kontrolle haben, ist das die Standardeinstellung. Alternativ gibt es die Möglichkeit, zu den unpriviligierten Domains zu routen (das behandle ich an dieser Stelle nicht). Passen wir also unsere <tt>/etc/network/interfaces</tt> an:</p>
<pre># The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

auto xenbr0
iface xenbr0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0</pre>
<p>Alternativ gerne mit fester IP, Adresse, Gateway und Maske werden vom primären Interface kopiert:</p>
<pre># The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static

auto xenbr0
iface xenbr0 inet static
    address 10.76.23.55
    netmask 255.255.255.0
    gateway 10.76.23.252 
    dns-nameservers 8.8.8.8 10.76.23.252
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0</pre>
<p>Danach bitte nochmal Reboot oder wenigstens Neustart des Dienstes Networking.</p>
<h3>Meine erste DomU</h3>
<p>Meine DomUs (unpriviligierte Domains) liegen unter <tt>/usr/local/xendomains</tt>. Die zum Testen aufgesetzte unter <tt>/usr/localxendomains/12.04ltstest</tt>. Sie verwendet den Netinstaller von Ubuntu:</p>
<pre>DOMUDIR=/usr/local/xendomains/12.04ltstest
mkdir -p $DOMUDIR
wget -O $DOMUDIR/kernel-install.img http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-amd64/current/images/netboot/xen/vmlinuz
wget -O $DOMUDIR/initrd-install.img http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-amd64/current/images/netboot/xen/initrd.gz
dd if=/dev/zero bs=1M count=1 seek=16383 of=$DOMUDIR/xvda.img</pre>
<p>Das Image <tt>xvda.img</tt> ist ein Sparse File. Es erscheint zwar 16GB groß, nimmt diesen Platz aber zunächst nicht ein. Jetzt noch ne Configdatei <tt>$DOMUDIR/xen.cfg</tt>:</p>
<pre>kernel = "/usr/local/xendomains/12.04ltstest/kernel-install.img"
ramdisk = "/usr/local/xendomains/12.04ltstest/initrd-install.img"
memory = 512
vcpus = 1
name = "ltstest"
vif = [ 'mac=00:16:00:00:42:23' ]
disk = [ 'file:/usr/local/xendomains/12.04ltstest/xvda.img,xvda,w'  ]
root = ""
extra = "console=hvc0 ro xencons=tty"</pre>
<p>Nun wird die DomU gestartet. Wichtig ist das <tt>-c</tt>, denn damit wird die Xen-Konsole aufs laufende Terminal geschaltet:</p>
<pre>xm create -c $DOMUDIR/xen.cfg</pre>
<p>Während der Installation sollte man noch darauf achten, das Paket <tt>openssh-server</tt> zu installieren, denn die Xen-Konsole ist äußerst unpraktisch (kennt nur 80&#215;25 etc.). Nach der Installation rebootet das System. Dummerweise mit dem Installationskernel. Würgen wir es ab:</p>
<pre>xm destroy ltstest</pre>
<h3>Eine dauerhafte DomU</h3>
<p>Es gibt Möglichkeiten, den Kernel und seine Ramdisk vom Festplattenimage zu laden. Diese gefallen mir jedoch nicht, weil sie gute Einfallspunkte für Rootkits sind. Ich kopiere daher Kernel und Initrd. Zunächst erstelle ich ein Loop-Device für das Festplattenimage (die DomU darf nicht mehr laufen!), wofür wir ein freies Loopdevice brauchen (hier wurde <tt>/dev/loop0</tt> gefunden):</p>
<pre>losetup -f
losetup /dev/loop0 $DOMUDIR/xvda.img</pre>
<p>Linux kommt mit Partitionen auf Loopdevices auf Anhieb nicht so toll klar. Hier kommt der Device-Mapper ins Spiel, der Partitionen auf Loop-Devices erkennt:</p>
<pre>kpartx -a /dev/loop0
mkdir -p /tmp/xen-domU
mount /dev/mapper/loop0p1 /tmp/xen-domU</pre>
<p>Nun kopieren wir den Kernel und das Initramfs:</p>
<pre>cp -v /tmp/xen-domU/boot/vmlinuz-3.2.0-24-generic $DOMUDIR/kernel.img
cp -v /tmp/xen-domU/boot/initrd.img-3.2.0-24-generic $DOMUDIR/initrd.img</pre>
<p>Zum Abschluss gilt es noch, die Konfiguration der domU anzupassen:</p>
<pre>kernel = "/usr/local/xendomains/12.04ltstest/kernel.img"
ramdisk = "/usr/local/xendomains/12.04ltstest/initrd.img"
# ...
# Je nach Partitionierung ist die root-Zeile ggf. anzupassen!
root="/dev/xvda1"
</pre>
<p>Dann kann das Loopdevice ausgehängt und aufgelöst werden &#8211; ich lasse erst alle Devices anzeigen und löse dann von hinten nach vorn:</p>
<pre>umount /tmp/xen-domU
ls -lah /dev/mapper/loop0*
dmsetup --remove /dev/mapper/loop0p5
dmsetup --remove /dev/mapper/loop0p2
dmsetup --remove /dev/mapper/loop0p1
losetup -d /dev/loop0</pre>
<p>Nun steht dem Start der DomU mit &#8220;produktivem&#8221; Kernel nichts mehr im Wege. Dieses Mal ohne <tt>-c</tt>:</p>
<pre>xm create $DOMUDIR/xen.cfg</pre>
<p>In den nächsten Tagen werde ich mal auf eine Windows Server 2008 DomU eingehen (keine Angst, kostet nix, kann man 240 Tage am Stück gratis nutzen), was ein guter Einsatz für einen Xen-Host ist, der mit Samba Dateidienste für Windows und Linux anbietet und dank Windows Server 2008 auch Terminalserverdienste anbieten kann. Viel Spaß wünscht Mattias Schlenker!</p>
<p><b>PS: Autoren gesucht!</b> Wer sich zutraut, einigermaßen geordnet zu schreiben, darf sich gerne bei <a href="mailto:ms@mattiasschlenker.de">mir melden</a>. Ich betreue derzeit die LINUX INTERN von Data Becker als &#8220;Projektleiter&#8221; und bin für diese Zeitschrift auf die Suche nach Autoren. Eure Schreibe muss nicht &#8220;schön&#8221; im schriftstellerischen Sinne sein, aber man muss erkennen, dass Ihr strukturiert denkt. Honorar gibt es natürlich auch.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2012/05/04/ubuntu-12-04-lts-als-xen-dom0-einrichten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Asus x101 &#8211; wieder ein echter Eee PC?</title>
		<link>http://blog.rootserverexperiment.de/2011/08/31/asus-x101-wieder-ein-echter-eee-pc/</link>
		<comments>http://blog.rootserverexperiment.de/2011/08/31/asus-x101-wieder-ein-echter-eee-pc/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 11:54:10 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=734</guid>
		<description><![CDATA[Seit einigen Tagen liefert Asus den Eee PC x101 aus. Die Eckdaten &#8211; vorinstalliertes Linux als Betriebssystem, extrem abgespeckte Hardware, 8GB Solid State Drive &#8211; erinnern an den ersten Eee PC, den 701. Aber auch der daraus resultierende Preis von 25% bis 30% unter der bisherigen Untergrenze und das geringe Gewicht von etwa 950 Gramm [...]]]></description>
			<content:encoded><![CDATA[<p>Seit einigen Tagen liefert Asus den Eee PC x101 aus. Die Eckdaten &#8211; vorinstalliertes Linux als Betriebssystem, extrem abgespeckte Hardware, 8GB Solid State Drive &#8211; erinnern an den ersten Eee PC, den 701. Aber auch der daraus resultierende Preis von 25% bis 30% unter der bisherigen Untergrenze und das geringe Gewicht von etwa 950 Gramm lassen Erinnerungen wach werden. Und 169€ brutto sind schwer zu unterbieten.</p>
<div align="center"><a href="http://blog.rootserverexperiment.de/wp-content/uploads/2011/08/ASUS_EeePC_X101_4_med.jpg"><img src="http://blog.rootserverexperiment.de/wp-content/uploads/2011/08/ASUS_EeePC_X101_4_sml.jpg" alt="" title="ASUS_EeePC_X101_4_sml" width="360" height="305" class="aligncenter size-full wp-image-746" /></a></div>
<p><span id="more-734"></span></p>
<h3>Paket voller Kompromisse</h3>
<p>Da Asus noch kein Testgerät liefern konnte, kaufte ich einen x101 auf mein Unternehmen. Die dahinterstehende Kalkulation war, dass selbst bei einem Weiterverkauf mit 25% Wertverlust kein allzu großer Schaden eintreten würde. Allerdings habe ich derzeit einen Eee PC 1015B mit Zweikern AMD zur Hand, der für Fotos herhalten muss und als Vergleichsobjekt hinsichtlich der Verarbeitungsqualität.</p>
<p>Was sofort auffällt ist die dünne Bauform und das relativ leichte Gewicht. Das Gewicht ist nicht nur dem Wegfall der Festplatte, sondern auch dem vergleichsweise kleinen Akku geschuldet, der mit drei Zellen und 28Wh rund vier Stunden durchhält. Das ist meiner Erfahrung nach ausreichend, da ich längere Zugfahrten meide und sogar auf der Argentinienreise der alte Eee PC 701 als elektronisches Reisetagebuch auf langen Busfahrten genug durchhielt.</p>
<p>Schaut man sich das x101 näher an, stellt man eine Reihe weiterer Kompromisse fest:</p>
<ul>
<li>
<p><b>Tastatur:</b> Die F-Tastenreihe fehlt. Um überhaupt USB-Anschlüsse unterbringen zu können, mussten diese an den dicksten Teil des Gehäuses rutschen, der Platz reichte dort dennoch nicht für darüber angebrachte Tasten. Die F-Tasten wurden kurzerhand gespart und die Tiefe der Tasten reduziert. Auch der Hub fällt geringer aus, so lässt sich gerade noch flüssig tippen.</p>
</li>
<li>
<p><b>Ethernet:</b> Gibt es nicht, es musste schon beim 1015B in einer Klapplösung umgesetzt werden. Fürs Netz gibt es nur WLAN.</p>
</li>
<li>
<p><b>VGA/HDMI:</b> Gibt es nicht, es war schlichtweg kein Platz für den Port da.</p>
</li>
<li>
<p><b>USB:</b> Zwei Ports müssen genügen, USB 3.0 und eSATA fehlt.</p>
</li>
<li>
<p><b>Kartenleser:</b> Statt SD ist MicroSD eingebaut &#8211; der hat unter der Tastatur Platz.</p>
</li>
<li>
<p><b>Audio In/Out:</b> Es gibt nur einen kombinierten Port, beispielsweise zur Verwendung mit typischen Handy-Headsets.</p>
</li>
</ul>
<p>Gut zu erkennen &#8211; die F-Tastenreihe wurde geopfert, ansonsten hätte kein USB-Port Platz gehabt:</p>
<div align="center"><a href="http://blog.rootserverexperiment.de/wp-content/uploads/2011/08/x101_tastatur_med.jpg"><img src="http://blog.rootserverexperiment.de/wp-content/uploads/2011/08/x101_tastatur_sml.jpg" alt="" title="x101_tastatur_sml" width="360" height="223" class="aligncenter size-full wp-image-757" /></a></div>
<p>Die Dicke im direkten Vergleich mit dem Eee PC 1015B &#8211; dieser sieht plötzlich klobig aus:</p>
<div align="center"><a href="http://blog.rootserverexperiment.de/wp-content/uploads/2011/08/x101_dicke_med.jpg"><img src="http://blog.rootserverexperiment.de/wp-content/uploads/2011/08/x101_dicke_sml.jpg" alt="" title="x101_dicke_sml" width="360" height="168" class="aligncenter size-full wp-image-755" /></a></div>
<h3>Software</h3>
<p>Vorinstalliert ist MeeGo in Version 1.1. Die ist schon etwas älter und weist einige Lücken bei der Lokalisierung auf. Ich habe daher nach einer halben Stunde rumprobieren Ubuntu 11.04 (in der 32 Bit Variante) mit Unity als Desktop installiert. Auf MeeGo 1.2 werde ich an anderer Stelle eingehen, ich sehe ein recht großes Potential für viele typische Netbook-Nutzer.</p>
<p>Zurück zu Ubuntu: Dank für Desktopeffekte brauchbar umgesetzter Hardwarebeschleunigung des Intel GMA 3150 läuft Unity schonmal reibungslos. Sowohl Sound, WLAN als auch ACPI (Helligkeit, rfkill) funktionieren einwandfrei. Anwendungen sind merklich träger als bei einem Dual-Core Atom oder AMD C-Serie, aber noch absolut im Bereich des gut Nutzbaren. Meine Ubuntu-Installation umfasste eine Root-Partition mit vier Gigabyte, eine Home-Partition mit deren drei und ein GB Swap. Eine meiner Ansicht nach bessere Partitionierung mit <tt>/usr</tt> auf einem SquashFS-Container werde ich demnächst separat vorstellen.</p>
<h3>Fazit</h3>
<p>Die eingegangenen Kompromisse sind spürbar, aber nicht schmerzhaft. Die F-Tastenreihe dürfte einigen Powerusern fehlen, mir fiel die umständliche Zugänglichkeit der Textkonsole (Strg+Alt+Fn+2) oder des oft in regulären Ausdrücken benötigten &#8220;^&#8221; auf. Abgesehen davon ist die Tastatur um längen besser als bei den Neunzöllern von vor drei oder vier Jahren. Als mobiles Admin- und Präsentationstool eignet sich das x101 dagegen nur eingeschränkt: Muss man eine Präsentation halten, ist ein USB-VGA-Adapter nötig, der nicht immer einfach einzurichten ist. Gleiches gilt für die Netzwerkwartung, wo ich gerne mit einem TFTP-Bootserver auf dem Notebook herumlaufe, der aber einen Ethernetport erfordert &#8211; da werde ich wohl weiterhin Lenovos  x100e mitnehmen (und dieses mittelfristig durch ein x121e ersetzen).</p>
<p>Im angepeilten Einsatzbereich &#8211; Social Media, Schreibmaschine für Unterwegs und Internet Client trifft Asus die Zielgruppe fast punktgenau und überzeugt hier mit dem leichten Gewicht und dem schnellen Start. Den günstigen Preis muss ich etwas relativieren, mittlerweile haben Speicherriegel (11€ für 2GB) und Micro-SDHC-Karte (20€ für 16GB) den Preis auf genau 200€ hochgetrieben &#8211; das liegt über dem eines besser ausgestatteten Acer Aspire One D525 mit fast doppelter Akkulaufzeit und 250GB Festplatte &#8211; aber eben 300 Gramm mehr und einem klobigeren Netzteil (188€ derzeit bei Media Markt Krefeld). </p>
<p>Einziges Ärgernis ist nur den Verzicht auf Bluetooth, weil eben noch nicht jeder ein Handy mit AP-Funktion hat und eben auch viele BT-Mäuse im Umlauf sind. Nach den ersten Tagen mit dem x101 kann ich jedenfalls ziemlich sicher sagen, dass ich wieder häufiger mit Netbook unterwegs sein werde und hoffe insgeheim, dass Asus den wiedergefundenen &#8220;wahren Netbook-Pfad&#8221; nicht verlässt und stattdessen vielleicht eine Luxus-Variante des x101 auflegt &#8211; wie wäre es mit einem Dual-Core Atom, zwei GB RAM, 32GB SSD und Bluetooth im gleichen Gehäuse mit gleicher oder möglicherweise etwas besserer Akkulaufzeit?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2011/08/31/asus-x101-wieder-ein-echter-eee-pc/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Linux zieht OS X um</title>
		<link>http://blog.rootserverexperiment.de/2011/08/15/linux-zieht-os-x-um/</link>
		<comments>http://blog.rootserverexperiment.de/2011/08/15/linux-zieht-os-x-um/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 12:32:25 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[Tips und Tricks]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=728</guid>
		<description><![CDATA[Wir haben noch ein altes Powerbook (Unibody, 2008), bei dem die serienmäßige 160GB-Platte arg klein geworden ist. Die sollte nun gegen eine Momentus-Hybrid-Platte ausgetauscht werden. Geplant war, die Platte mit &#8220;dd&#8221; zu klonen und anschließend mit dem &#8220;diskutil&#8221; oder dem Festplattendienstprogramm zu strecken. Ging nicht, weil das Festplattendienstprogramm irritiert davon ist, dass die Schattenkopie der [...]]]></description>
			<content:encoded><![CDATA[<p>Wir haben noch ein altes Powerbook (Unibody, 2008), bei dem die serienmäßige 160GB-Platte arg klein geworden ist. Die sollte nun gegen eine Momentus-Hybrid-Platte ausgetauscht werden. Geplant war, die Platte mit &#8220;dd&#8221; zu klonen und anschließend mit dem &#8220;diskutil&#8221; oder dem Festplattendienstprogramm zu strecken. Ging nicht, weil das Festplattendienstprogramm irritiert davon ist, dass die Schattenkopie der GPT nicht am Ende der Platte liegt.</p>
<p>Ich bin dann so vorgegangen:</p>
<ol>
<li>
<p>Beide Platten mit einem SATA2USB-Adapter an den Linux-Desktop-Rechner angeschlossen</p>
</li>
<li>
<p>Mit<br /><tt>dd if=/dev/sdx of=/dev/sdy bs=1M</tt><br />die alte (sdx) auf die neue (sdy) Platte geklont</p>
</li>
<li>
<p>Mit<br /><tt>gdisk /dev/sdy</tt><br />die Platte im GPT-Partitionierungstool geöffnet und eine Partition vom Typ <tt>0700</tt> auf dem Rest der Platte angelegt, mit <tt>w</tt> bestätigt &#8211; das korrigiert die Position der Backup-GPT</p>
</li>
<li>
<p>Die Platte abgestöpselt und in den Mac eingebaut</p>
</li>
<li>
<p>Den Mac gebootet und dort im Festplattendienstprogramm die leere Partition gelöscht und die OS X Partition etwas gestreckt</p>
</li>
</ol>
<p>Klappte prima und erspart mir eine Neuinstallation von OS X. Ich habe jetzt noch Platz, um demnächst Ubuntu drauf unterzubringen. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2011/08/15/linux-zieht-os-x-um/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
