<?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 &#187; Tips und Tricks</title>
	<atom:link href="http://blog.rootserverexperiment.de/category/tips-und-tricks/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rootserverexperiment.de</link>
	<description>Erlebnisse eines Rootserver (Beinahe-) Neulings</description>
	<lastBuildDate>Wed, 31 Aug 2011 11:54:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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>9</slash:comments>
		</item>
		<item>
		<title>Cross compiling uClibc and busybox</title>
		<link>http://blog.rootserverexperiment.de/2011/07/02/cross-compiling-uclibc-and-busybox/</link>
		<comments>http://blog.rootserverexperiment.de/2011/07/02/cross-compiling-uclibc-and-busybox/#comments</comments>
		<pubDate>Sat, 02 Jul 2011 10:32:17 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mini-Linux]]></category>
		<category><![CDATA[Tips und Tricks]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=625</guid>
		<description><![CDATA[There are a few articles from this blog that are old, but still known an read &#8211; even outside the small area of people speaking German. Thus this article written in English. My intention is to show how to cross compile uClibc and a BusyBox that is statically linked with this uClibc. The resulting BusyBox [...]]]></description>
			<content:encoded><![CDATA[<p>There are a few articles from this blog that are old, but still known an read &#8211; even outside the small area of people speaking German. Thus this article written in English. My intention is to show how to cross compile uClibc and a BusyBox that is statically linked with this uClibc. The resulting BusyBox can be used to build some minimal Linux system. Around three or four Megabytes if you keep it really small. Nearly five years ago I wrote <a href="http://blog.rootserverexperiment.de/2006/09/15/das-4mb-mini-linux/">a tutorial on this topic (in German)</a> on which I still receive feedback quite often. Since this tutorial is very outdated (module loading, initrd vs. initramfs, multiple initramfs), I plan to update it. This tutorial will show a quick alternative to get a working cross compiled BusyBox.</p>
<p>The content of this blog entry is partially based on the <a href="http://busybox.net/~vda/HOWTO/i486-linux-uclibc/HOWTO.txt">&#8220;semi official tutorial&#8221;</a> how to cross compile BusyBox and partially on my experience with Linux from Scratch, especially <a href=http://www.linuxfromscratch.org/lfs/view/development/chapter05/chapter05.html"">Chapter 5 &#8211; Constructing a temporary system</a>. At the time of this being written, I tried to make sure that very few patches are necessary &#8211; this will not always be the way, maybe GCC 4.7 will need more patches or BusyBox 1.19 does. uClibc 0.9.32 does not yet build cleanly on x86, thus I stay with uClibc 0.9.31.1 for this time:</p>
<h3>Needed files</h3>
<p>Sources and patches:</p>
<ul>
<li><a href="http://ftp.gnu.org/gnu/binutils/">GNU Binutils 2.21</a></p>
<li><a href="ftp://ftp.gnu.org/pub/gnu/gcc/gcc-4.6.0/">GCC 4.6.0</a> plus <a href="http://distfiles.lesslinux.org/gcc-4.6.0-cross_compile-1.patch">gcc-4.6.0-cross_compile-1.patch</a></li>
<li><a href="http://www.kernel.org/pub/linux/kernel/v2.6/">Linux sources 2.6.39.2</a></li>
<li><a href="http://www.uclibc.org/downloads/">uClibc 0.9.31.1</a></li>
<li><a href="http://www.busybox.net/downloads/">BusyBox 1.18.5</a></li>
<li><a href="ftp://ftp.gmplib.org/pub/">Gmp 5.0.2</a></li>
<li><a href="http://www.mpfr.org/mpfr-current/">Mpfr 3.0.1</a></li>
<li><a href="http://www.multiprecision.org/index.php?prog=mpc&#038;page=download">Mpc 0.9</a></li>
</ul>
<p>Configuration files:</p>
<ul>
<li><a href="http://distfiles.lesslinux.org/busybox-1.18.5.config">busybox-1.18.5.config</a></li>
<li><a href="http://distfiles.lesslinux.org/uClibc-0.9.31.1.config">uClibc-0.9.31.1.config</a></ul>
<h3>1. Setting up the environment</h3>
<p>Very few modifications to the environment are necessary. We just need three variables:</p>
<pre>
    export TGTARCH=i486
    export INSTDIR=/usr/local/crosstools
    export PATH=${INSTDIR}/bin:${PATH}
</pre>
<p><tt>$TGTARCH</tt> is the targeted architecture, it should be either <tt>i486</tt>, <tt>i586</tt>, <tt>i686</tt> or <tt>x86_64</tt>. Of course it is possible to build for several ARM or MIPS targets if you need a statically linked BusyBox for a rooted Android device or a DSL router. There is one drawback however: My configs for uClibc and BusyBox are very x86 specific. For the first build I recommend using the same target architecture as the machine you are building:</p>
<pre>
    export TGTARCH=` uname -m `
</pre>
<p><tt>$INSTDIR</tt> is the location of the resulting toolchain. When building for different target architectures, you might also include the name of the target arch into the path. This makes deinstallation easier &#8211; you just have to delete a branch in the file system. For example:</p>
<pre>
    export TGTARCH=i486
    export INSTDIR=/usr/local/uclibc-crosstools-${TGTARCH}
    export PATH=${INSTDIR}/bin:${PATH}
</pre>
<h3>2. Building binutils</h3>
<p>Unpack the binutils and create a directory <tt>binutils-build</tt> on the same level of the file system, then configure binutils:</p>
<pre>
    tar xvjf binutils-2.21.tar.bz2
    mkdir binutils-build
    cd binutils-build
    ../binutils-2.21/configure \
        --target=${TGTARCH}-linux-uclibc \
        --prefix=${INSTDIR} --disable-nls \
        --disable-werror
</pre>
<p>Now build and install binutils:</p>
<pre>
    make &#038;&#038; make install
</pre>
<h3>3. Building GCC</h3>
<p>As far as I tested, GCC needs a small patch to result in a properly working cross compiler. Besides this, GMP, MPFR and MPC must be present:</p>
<pre>
    tar xvjf gcc-4.6.0.tar.bz2
    tar xvjf mpfr-3.0.1.tar.bz2
    tar xvjf gmp-5.0.2.tar.bz2
    tar xvzf mpc-0.9.tar.gz
    mv mpfr-3.0.1 gcc-4.6.0/mpfr
    mv gmp-5.0.2 gcc-4.6.0/gmp
    mv mpc-0.9 gcc-4.6.0/mpc
    mkdir gcc-build
    cd gcc-4.6.0
    cat ../gcc-4.6.0-cross_compile-1.patch | patch -p1
    cd ../gcc-build
</pre>
<p>Now configure, build and install GCC:</p>
<pre>
    ../gcc-4.6.0/configure \
        --target=${TGTARCH}-linux-uclibc \
        --prefix=${INSTDIR} \
	--disable-nls --disable-shared --disable-multilib \
        --disable-libmudflap --disable-libssp --disable-libgomp \
        --disable-libquadmath --disable-target-libiberty \
        --disable-target-zlib --disable-decimal-float \
        --disable-threads --enable-languages=c \
	--without-ppl --without-cloog
    make &#038;&#038; make install
</pre>
<h3>4. Installing kernel headers</h3>
<p>The kernel headers used should ressemble the version you intend to run the BusyBox on. Unpack and install them &#8211; the sanitizing step is taken from Linux from Scratch:</p>
<pre>
    tar xvjf linux-2.6.39.2.tar.bz2
    cd linux-2.6.39.2
    make INSTALL_HDR_PATH=dest headers_install
    find dest/include \( -name .install -o -name ..install.cmd \) -delete
    mkdir -p ${INSTDIR}/${TGTARCH}-linux-uclibc/include
    cp -rv dest/include/* ${INSTDIR}/${TGTARCH}-linux-uclibc/include
</pre>
<p>In the next steps <tt>${INSTDIR}/${TGTARCH}-linux-uclibc</tt> will become more populated with headers, libraries and other development files for our build target.</p>
<h3>5. Installing uClibc</h3>
<p>Unpack uClibc and copy the config into the resulting directory. Since uClibc uses the same configuration scheme as the Linux kernel, some parameters in the config have to be changed with sed, and a run of <tt>make oldconfig</tt> is needed if you do not run my exact version of uClibc:</p>
<pre>
    unxz -c uClibc-0.9.31.1.tar.xz | tar xvf -
    cp uClibc-0.9.31.1.config uClibc-0.9.31.1/.config
    cd uClibc-0.9.31.1
    # This fixes the path of the linux headers
    sed -i 's%/usr/local/crosstools/i486-linux-uclibc/include%'${INSTDIR}/${TGTARCH}-linux-uclibc/include'%g' .config
    # This fixes the path to GCC and binutils:
    sed -i 's%/usr/local/crosstools/bin/i486-linux-uclibc-%'${INSTDIR}/bin/${TGTARCH}-linux-uclibc-'%g' .config
    make oldconfig
</pre>
<p>When building for x86_64 instead of i486-i686, replace the target as well:</p>
<pre>
    sed -i 's%TARGET_i386=y%#TARGET_i386 is not set%g' .config
    sed -i 's%# TARGET_x86_64 is not set%TARGET_x86_64=y%g' .config
    make oldconfig
</pre>
<p>Now build and install uClibc:</p>
<pre>
    make
    make install PREFIX=${INSTDIR}/${TGTARCH}-linux-uclibc/
</pre>
<p>Everything is in place now. In the next step we are building the statically linked BusyBox:</p>
<h3>6. Building BusyBox</h3>
<p>Our BusyBox will be statically linked. Since BusyBox also uses the configuration scheme from the Linux kernel, configuration is done by copying the .config file:</p>
<pre>
    tar xvjf busybox-1.18.5.tar.bz2
    cp busybox-1.18.5.config busybox-1.18.5/.config
    cd busybox-1.18.5
    make oldconfig CROSS_COMPILE=${TGTARCH}-linux-uclibc-
</pre>
<p>Build BusyBox and install it to the subdirectory <tt>_install</tt>:</p>
<pre>
    make CROSS_COMPILE=${TGTARCH}-linux-uclibc-
    make install CROSS_COMPILE=${TGTARCH}-linux-uclibc-
</pre>
<p>If your build system is x86_64, any i486 to i686 or x86_64 can be directly run. There will be no hassle with libraries since our binary is statically linked:</p>
<pre>
    # Should result in: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped
    file _install/bin/busybox
    # Should print the BusyBox applets contained
    ./_install/bin/busybox
</pre>
<p>That&#8217;s it. Have fun with your BusyBox. In a short time I will tell you how to configure and build a minimal Linux system that just consists of a kernel, BusyBox and Dropbear for SSH logins &#8211; that is just enough Linux to do imaging and restoring tasks.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2011/07/02/cross-compiling-uclibc-and-busybox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ubuntu 10.04 als DomU (Xen) &#8220;debootstrappen&#8221;</title>
		<link>http://blog.rootserverexperiment.de/2010/09/01/ubuntu-lucid-xen4-domu-debootstrappen/</link>
		<comments>http://blog.rootserverexperiment.de/2010/09/01/ubuntu-lucid-xen4-domu-debootstrappen/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 10:00:40 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips und Tricks]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=571</guid>
		<description><![CDATA[Nach vier Jahren ist es mal wieder Zeit für ein kleines Tutorial zur Installation von Ubuntu-domUs via debootstrap. Dank Aufnahme der pvops-DomU in den Vanilla-Kernel bringt Ubuntu einen Kernel mit, der lediglich kleine Anpassungen am Initramfs benötigt, um sauber auf einem aktuellen Xen 4.0 zu starten.
Installation von Debootstrap
Zuerst muss debootstrap vorhanden sein, am einfachsten natürlich [...]]]></description>
			<content:encoded><![CDATA[<p>Nach <a href="http://blog.rootserverexperiment.de/2006/07/22/ubuntu-als-domu-xen-debootstrappen/">vier Jahren</a> ist es mal wieder Zeit für ein kleines Tutorial zur Installation von Ubuntu-domUs via <tt>debootstrap</tt>. Dank Aufnahme der pvops-DomU in den Vanilla-Kernel bringt Ubuntu einen Kernel mit, der lediglich kleine Anpassungen am Initramfs benötigt, um sauber auf einem <a href="http://blog.rootserverexperiment.de/2010/08/30/xen-401-pvops-dom0-ubuntu1004/">aktuellen Xen 4.0</a> zu starten.</p>
<h3>Installation von Debootstrap</h3>
<p>Zuerst muss <tt>debootstrap</tt> vorhanden sein, am einfachsten natürlich mit <tt>apt-get install debootstrap</tt>. Unter Ubuntu kann mit <tt>debootstrap</tt> auch die Folgeversion installiert werden. Debian-User können das Ubuntu-Debootstrap direkt von <a href="http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/">http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/</a> herunterladen und mit <tt>dpkg -i</tt> installieren. Nutzer von RPM-Distributionen sollten ein Konvertierungstool installieren oder Debootstrap direkt aus dem <tt>.tar.gz</tt> installieren.</p>
<h3>Vorbereitung eines Images</h3>
<p>Für Xen DomUs haben Sie die Möglichkeit, physikalische Festplatten oder deren Partitionen zu nutzen oder Festplattenimages zu verwenden. Bei den Images wiederum gibt es zwei Möglichkeiten: Tap-Disks, die wachsen können und beispielsweise VMware VMDK-Format unterstützen oder &#8220;Plain-Images&#8221;, die als Loopback-Device gemountet werden können. Ich empfehle bei Testkonfigurationen grundsätzlich und bei Produktivsystemen für die Systempartitionen Images von Partitionen. Die Gründe:<span id="more-571"></span></p>
<ul>
<li>Im Gegensatz zu partitionierten Festplattenimages kann ein Partitionsimage ohne Verrenkungen vergrößert werden</li>
<li>Ein Mounten ist simpel mit <tt>mount -o loop ...</tt> möglich, es muss kein Offset errechnet und angegeben werden</li>
<li>Im Gegensatz zu VMDK-Images benötigt der Mount auf einer Xen-losen Maschine keine zusätzlichen Werkzeuge</li>
</ul>
<p>Images erstelle ich als Sparse-Images, das geht schnell und spart Plattenplatz, hat aber bei Maschinen mit vielen Xen-Instanzen deutlich spürbare Einbußen durch doppelte Fragmentierung zur Folge. Zunächst entsteht ein Image für die Systempartition. Da ich gerne auch Kernel in der Xen-Instanz baue, hier 8GB groß, das Swap-Image bekommt ein Gigabyte:</p>
<pre>dd if=/dev/zero bs=$((1024**2)) count=1 seek=8191 of=xvda1.img
dd if=/dev/zero bs=$((1024**2)) count=1 seek=1023 of=swap.img
</pre>
<p>Als nächstes entsteht eine Swap-Signatur und ein Dateisystem auf dem Image <tt>xvda1.img</tt>. Das Dateisystem mounte ich gleich auf einen noch zu erstellenden Mountpoint <tt>/tmp/minibuntu</tt>:</p>
<pre>mkswap -f swap.img
freeloop=` losetup -f `
losetup $freeloop xvda1.img
echo "loopdevice is $freeloop"
mkfs.ext3 $freeloop
mkdir /tmp/minibuntu
mount $freeloop /tmp/minibuntu</pre>
<h3>Installation des Basissystems</h3>
<p>Die Installation des Basissystems geht innerhalb weniger Minuten mit dem Befehl <tt>debootstrap</tt>. Auf einem 64-Bit Hostsystem haben Sie die Wahl, 32- oder 64-Bit-Gäste zu installieren. Bei Gästen, die keine allzu große Prozessgröße erwarten lassen, sind 32-Bit-Gäste oft einen Tick flotter und kompakter:</p>
<pre>debootstrap --arch i386 lucid /tmp/minibuntu http://archive.ubuntu.com/ubuntu</pre>
<p>oder</p>
<pre>debootstrap --arch amd64 lucid /tmp/minibuntu http://archive.ubuntu.com/ubuntu</pre>
<p>Das so installierte Ubuntu würde sich mit dem Hostkernel schon booten, darüber hinaus jedoch kaum nutzen lassen. Setzen wir einige Einstellungen:</p>
<pre>vim /tmp/minibuntu/etc/default/locale</pre>
<pre># BEGIN /etc/default/locale
LANG="POSIX"
# oder
# LANG="de_DE.UTF-8"
# END /etc/default/locale</pre>
<pre>vim /tmp/minibuntu/etc/network/interfaces</pre>
<pre># BEGIN /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
# END /etc/network/interfaces</pre>
<pre>echo '127.0.0.1 localhost' > /tmp/minibuntu/etc/hosts
echo 'lucid-domU.test' > /tmp/minibuntu/etc/hostname</pre>
<p>Auch eine vollständige <tt>/etc/apt/sources.list</tt> wird benötigt:</p>
<pre>vim /tmp/minibuntu/etc/apt/sources.list</pre>
<pre># BEGIN /etc/apt/sources.list
deb http://de.archive.ubuntu.com/ubuntu/ lucid main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ lucid main restricted
deb http://de.archive.ubuntu.com/ubuntu/ lucid-updates main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ lucid-updates main restricted
deb http://de.archive.ubuntu.com/ubuntu/ lucid universe
deb-src http://de.archive.ubuntu.com/ubuntu/ lucid universe
deb http://de.archive.ubuntu.com/ubuntu/ lucid-updates universe
deb-src http://de.archive.ubuntu.com/ubuntu/ lucid-updates universe
deb http://de.archive.ubuntu.com/ubuntu/ lucid multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ lucid multiverse
deb http://de.archive.ubuntu.com/ubuntu/ lucid-updates multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ lucid-updates multiverse
deb http://security.ubuntu.com/ubuntu lucid-security main restricted
deb-src http://security.ubuntu.com/ubuntu lucid-security main restricted
deb http://security.ubuntu.com/ubuntu lucid-security universe
deb-src http://security.ubuntu.com/ubuntu lucid-security universe
deb http://security.ubuntu.com/ubuntu lucid-security multiverse
deb-src http://security.ubuntu.com/ubuntu lucid-security multiverse
# END /etc/apt/sources.list</pre>
<p>Ohne <tt>/etc/fstab</tt> geht wenig im domU-System, die Platten heissen nicht mehr wie bei den alten dom0- und domU-Kerneln <tt>/dev/sda</tt>, sondern <tt>/dev/xvda</tt>:</p>
<pre>vim /tmp/minibuntu/etc/fstab</pre>
<pre># BEGIN /etc/fstab
proc /proc proc defaults 0 0
/dev/xvda1 / ext3 defaults 0 1
/dev/xvda2 none swap sw 0 0
# END /etc/fstab</pre>
<p>Eine Konsole für Xen. Xen nutzt <tt>/dev/hvc0</tt> als Systemkonsole, diese muss noch mit einem <tt>getty</tt> versehen werden. Das erledigen Sie durch Kopieren der Definition von <tt>tty1</tt> und entsprechende Anpassungen:</p>
<pre>cp /tmp/minibuntu/etc/init/{tty1,hvc0}.conf
sed -i 's/tty1/hvc0/g' /tmp/minibuntu/etc/init/hvc0.conf</pre>
<h3>Chroot, Passwort und Kernel</h3>
<p>Zum Abschluss der Installation und der Nachinstallation von Software müssen Sie per <tt>chroot</tt> in das frisch installierte Ubuntu wechseln. Zunächst benötigen Sie dafür einige spezielle Dateisysteme:</p>
<pre>mount -t proc none /tmp/minibuntu/proc
mount -t devpts none /tmp/minibuntu/dev/pts </pre>
<p>Wenn Host und Gast die gleiche Architektur nutzen, klappt der Chroot klassisch:</p>
<pre>LANG=C chroot /tmp/minibuntu /bin/bash</pre>
<p>Ist der Host dagegen 64 bittig und der Gast 32 bittig, ist <tt>setarch</tt> zu verwenden:</p>
<pre>LANG=C setarch i386 chroot /tmp/minibuntu /bin/bash</pre>
<p>Zunächst aktivieren wir Shadow-Passwörter und setzen ein Root-Passwort:</p>
<pre>shadowconfig on
passwd</pre>
<p>Auf 32-Bit-Gästen muss zwingend ein PAE-Kernel installiert werden. Nur dieser enthält Unterstützung für pvops. Kernel ohne PAE laufen nur auf dem &#8220;nackten Metall&#8221;. Bei 64 Bit sollten alle Kernel pvops unterstützen:</p>
<pre>apt-get install linux-image-generic-pae</pre>
<p>Da ein Bootloader bei unserer Konfiguration keinen Sinn macht, sind entsprechende Nachfragen mit <tt>[No]</tt> zu beantworten.</p>
<h3>Aufbau des Initramfs</h3>
<p>Im Gegensatz zu gängigen Dateisystemtreibern enthält Ubuntus Kernel die Frontend-Treiber für Blockdevices und das Netz nur als Module. Diese sind entsprechend zu Initramfs-Konfiguration hinzuzufügen:</p>
<pre>vim.tiny /etc/initramfs-tools/initramfs.conf</pre>
<pre>MODULES=list</pre>
<p>Diese Liste ist entsprechend anzupassen:</p>
<pre>vim.tiny /etc/initramfs-tools/modules</pre>
<pre># BEGIN /etc/initramfs-tools/modules
xen-kbdfront
xen-netfront
xen-blkfront
# END /etc/initramfs-tools/modules</pre>
<p>Und anschließend wird das Initramfs neu aufgebaut:</p>
<pre>mkinitramfs -o /boot/initrd.img-2.6.32-24-generic-pae 2.6.32-24-generic-pae</pre>
<p>Verlassen Sie nun den Chroot wieder und unmounten Sie die beiden speziellen Dateisysteme.</p>
<pre>exit
umount /tmp/minibuntu/proc
umount /tmp/minibuntu/dev/pts</pre>
<h3>Kopieren der Kernel, Aufbau der domU-Konfiguration</h3>
<p>Kopieren Sie nun Kernel und Initramfs von <tt>/tmp/minibuntu/boot</tt> in das Verzeichnis, welches Festplattenimages und später die Konfiguration enthält. Erstellen Sie dann eine Datei <tt>ubuntu.cfg</tt> mit folgendem Inhalt (selbstverständlich ist der Pfad zum Installationsverzeichnis anzupassen und Kernel sowie Initramfs umzubenennen oder zu verlinken):</p>
<pre>kernel = "/usr/local/xendomains/lucid_test/vmlinuz"
ramdisk = "/usr/local/xendomains/lucid_test/initrd.gz"
memory = 512
name = "lucid-test"
vif = [ 'mac=00:16:00:00:42:23' ]
disk = [ 'file:/usr/local/xendomains/lucid_test/xvda1.img,xvda1,w',
         'file:/usr/local/xendomains/lucid_test/swap.img,xvda2,w' ]
root = '/dev/xvda1 ro'
extra = 'console=hvc0'</pre>
<p>Jetzt nicht vergessen, das Loopback-Device zu unmounten und freizugeben:</p>
<pre>umount /tmp/minibuntu
umount $freeloop
losetup -d $freeloop</pre>
<p>Dann kann auch die neue domU gestartet werden:</p>
<pre>xm create -c ubuntu.cfg</pre>
<p>Melden Sie sich in der Konsole der domU an und installieren Sie die Xen-Version der C-Bibliothek, sowie OpenSSH nach:</p>
<pre>apt-get install ssh libc6-xen</pre>
<p>Beim nächsten Mal kann dann die Domain ohne <tt>-c</tt> gestartet und per SSH zugegriffen werden. Soll die virtuelle Festplatte vergrößert werden, kann dies nach dem Herunterfahren mit <tt>dd</tt> erfolgen:</p>
<pre>dd if=/dev/zero bs=$((1024**2)) count=1 seek=16383 of=xvda1.img
freeloop=` losetup -f`
losetup $freeloop xvda1.img
fsck.ext3 -f $freeloop
resize2fs $freeloop
losetup -d $freeloop</pre>
<p>That&#8217;s it! Soll die domU automatisch mit dem Xend des Hostes starten, die <tt>.cfg</tt> in <tt>/etc/xen/auto</tt> verlinken und darauf achten, dass das Startscript <tt>/etc/init.d/xendomains</tt> beim Systemstart unmittelbar nach <tt>xend</tt> gestartet wird. Die so erstellte Domain ist prinzipiell portabel, man sollte sich allerdings keine allzugroßen Hoffnungen auf einen Boot unter alten Xen-Versionen (vor 3.4) machen. Sind noch alte dom0s vorhanden, schafft möglicherweise Ubuntus ec2-Kernel für Amazons Elastic Computing Cloud Abhilfe.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2010/09/01/ubuntu-lucid-xen4-domu-debootstrappen/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Installation von Xen 4.0.1 mit pvops-Dom0 auf Ubuntu 10.04</title>
		<link>http://blog.rootserverexperiment.de/2010/08/30/xen-401-pvops-dom0-ubuntu1004/</link>
		<comments>http://blog.rootserverexperiment.de/2010/08/30/xen-401-pvops-dom0-ubuntu1004/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 13:35:13 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips und Tricks]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=548</guid>
		<description><![CDATA[Xen 4.0 hat einige interessante Features eingeführt. Am Auffälligsten dürfte die Umstellung des vom Xen-Projekt gepflegten Dom0-Kernels auf &#8220;pvops&#8221; sein. Es handelt sich dabei um eine Technologie, mithilfe derer ein Kernel erkennt, ob er auf &#8220;nacktem Metall&#8221; (&#8220;bare metal&#8221; = direkt auf Hardware) oder auf dem Xen-Hypervisor läuft. Für unpriviligierte Domains (domU) ist dieses Feature [...]]]></description>
			<content:encoded><![CDATA[<p>Xen 4.0 hat einige interessante Features eingeführt. Am Auffälligsten dürfte die Umstellung des vom Xen-Projekt gepflegten Dom0-Kernels auf &#8220;pvops&#8221; sein. Es handelt sich dabei um eine Technologie, mithilfe derer ein Kernel erkennt, ob er auf &#8220;nacktem Metall&#8221; (&#8220;bare metal&#8221; = direkt auf Hardware) oder auf dem Xen-Hypervisor läuft. Für unpriviligierte Domains (domU) ist dieses Feature bereits seit geraumer Zeit im Linux-Kernel enthalten, für dom0s is es neu und muss über den Kernel des Xen-Projektes installiert werden.</p>
<p>Ich habe einmal testweise ein Setup auf einer AMD64-Maschine erstellt, auf 32-Bit-Systemen sind lediglich einige Kleinigkeiten anders: Der Kernel muss PAE-Support haben und es muss zwingend ein Prozessortyp ausgewählt werden, der über Virtualisierungserweiterungen verfügt. Da heutzutage kaum Rechner als Xen-Host zum Einsatz kommen dürften, die nicht 64-Bit-tauglich sind, sollte sich die Frage nach pvops-Dom0s auf 32-Bit-Hardware kaum stellen. <span id="more-548"></span></p>
<h3>Die Vorbereitung</h3>
<p>Fürs Bauen des Kernels müssen zuerst einige Debian-Pakete nachinstalliert werden. Meine Testmaschine war ein recht blankes Netinstall, so dass diese Liste hoffentlich vollständig ist:</p>
<pre>apt-get install build-essential libncurses5-dev python-twisted \
        git-core zlib1g-dev gettext libX11-dev uuid-dev libssl-dev\
        bin86 bcc flex bison python-dev bridge-utils</pre>
<p>Auf 64-Bit-Systemen außerdem:</p>
<pre>apt-get install libc6-dev-i386</pre>
<p>Neuere Xen-Versionen benötigen Intels ACPI-Compiler. Den habe ich noch nicht in den Ubuntu-Paketlisten gefunden, stattdessen habe ich ihn aus den Quellen gebaut und mittels <tt>install</tt> installiert. Da nur ein einziges Binary benötigt wird, ist es leicht möglich, das temporäre Build-Verzeichnis in den Pfad aufzunehmen und so das System nicht zu verschmutzen. Bitte prüft vor der ACPICA-Installation, ob unter <a href="http://www.acpica.org/downloads/">http://www.acpica.org/downloads/</a> neuere Versionen bereitstehen:</p>
<pre>cd /usr/src
wget http://acpica.org/download/acpica-unix-20100806.tar.gz
tar xvzf acpica-unix-20100806.tar.gz
cd acpica-unix-20100806/compiler
make
install -m 0755 iasl /usr/bin</pre>
<h3>Bau und Boot des pvops-Kernels</h3>
<p>Wie eingangs erwähnt, ist Support für pvops-Dom0 noch nicht Teil des offiziellen Kernels. Es muss daher Jeremys 2.6.32er mit pvops-Patches ausgecheckt werden. Falls jemand abkürzen möchte, kann er <a href="http://cdprojekte.mattiasschlenker.de/Public/Xen-Kernel/vmlinuz-2.6.32.18-xen0-pvops-20100830-sources.tbz">hier die von mir verwendeten Sourcen herunterladen</a>, diese beinhalten bereits eine <tt>.config</tt>. </p>
<pre>cd /usr/src
git clone git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen
cd linux-2.6-xen
git reset --hard
git checkout -b xen/stable-2.6.32.x origin/xen/stable-2.6.32.x</pre>
<p>Beim Selbstbau dürfte es meist ganz gut passen, die Kernelconfig des Ubuntu als Basis zu verwenden und mit <tt>make oldconfig</tt> die Xen-spezifischen Punkte zu ergänzen. Wer dabei die richtigen Treiber statisch einbindet, braucht auch an der Initramfs-Konfiguration nichts zu modifizieren:</p>
<pre>cd /usr/src
cd linux-2.6-xen
cp /boot/config-` uname -r ` .config
make oldconfig</pre>
<p>Zum Vergleich hier meine Xen-spezifischen Optionen:</p>
<pre>CONFIG_XEN=y
CONFIG_XEN_MAX_DOMAIN_MEMORY=32
CONFIG_XEN_SAVE_RESTORE=y
CONFIG_SWIOTLB_XEN=y
CONFIG_MICROCODE_XEN=y
CONFIG_XEN_DOM0=y
CONFIG_XEN_PRIVILEGED_GUEST=y
CONFIG_XEN_DOM0_PCI=y
CONFIG_XEN_PCI_PASSTHROUGH=y
CONFIG_PCI_XEN=y
CONFIG_XEN_PCIDEV_FRONTEND=y
CONFIG_XEN_BLKDEV_FRONTEND=m
CONFIG_NETXEN_NIC=m
CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_KBDDEV_FRONTEND=m
CONFIG_HVC_XEN=y
CONFIG_XEN_FBDEV_FRONTEND=m
CONFIG_XEN_BALLOON=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_XEN_DEV_EVTCHN=m
CONFIG_XEN_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_XEN_BLKDEV_TAP=y
CONFIG_XEN_BLKBACK_PAGEMAP=y
CONFIG_XEN_PCIDEV_BACKEND=y
CONFIG_XEN_PCIDEV_BACKEND_VPCI=y
CONFIG_XENFS=m
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_MCE=y
CONFIG_XEN_XENBUS_FRONTEND=y
CONFIG_XEN_GNTDEV=m
CONFIG_XEN_S3=y
CONFIG_ACPI_PROCESSOR_XEN=y
CONFIG_XEN_PLATFORM_PCI=m</pre>
<p>Wer möchte, kann meine Konfiguration <a href="http://cdprojekte.mattiasschlenker.de/Public/Xen-Kernel/config-2.6.32.18-xen0-pvops-20100830-amd64">komplett</a> oder als <a href="http://cdprojekte.mattiasschlenker.de/Public/Xen-Kernel/config-2.6.32.18-xen0-pvops-20100830-amd64.diff">unified diff</a> (gegen Ubuntus 2.6.32-24 Kernel) herunterladen und diese verwenden. Das Bauen geht dann wie gewohnt, ich strippe die Kernelmodule und erstelle gleich eine GRUB-Konfiguration:</p>
<pre>make
make install
make modules_install
find /lib/modules/2.6.32.18-xen0-pvops/ -name '*.ko' -exec strip --strip-unneeded {} \;
mkinitramfs -o /boot/initrd.img-2.6.32.18-xen0-pvops 2.6.32.18-xen0-pvops
update-grub</pre>
<h3>Der erste Neustart</h3>
<p>Rebooten Sie nun den Rechner und wählen Sie den neuen pvops-Kernel als Startkernel aus. Die Maschine sollte problemlos hochfahren, tut sie das nicht, stehen die Chancen schlecht, dass dieser Kernel auch auf Xen sauber startet.</p>
<h3>Installation von Xen und den Xen-Tools</h3>
<p>Als dieses Tutorial erstellt wurde, war mit Xen 4.0.1 gerade die erste <a href="http://www.xen.org/products/xen_source.html"></a>Maintenance-Release der 4.0er-Reihe erhältlich. Falls Sie noch 3.4.x oder 4.0.0 verwenden (und damit zufrieden sind): Aktualisieren Sie auf jeden Fall auf 4.0.1, weil hier einige Bugs im Zusammenspiel von Xen und dom0-pvops-Kerneln beseitigt wurden:</p>
<pre>cd /usr/src
wget http://bits.xensource.com/oss-xen/release/4.0.1/xen-4.0.1.tar.gz
tar xvzf xen-4.0.1.tar.gz
cd xen-4.0.1
make xen
make install-xen
make tools
make install-tools PYTHON_PREFIX_ARG=</pre>
<p>Es folgt die Erstellung einer Bootloder-Konfiguration, bitte die UUID entsprechend anpassen:</p>
<pre>vim.tiny /etc/grub.d/50_xen</pre>
<pre>#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "Ubuntu 10.04 - Xen 4.0.1 - 2.6.32.18 pvops" {
        insmod ext2
        set root=(hd0,1)
        search --no-floppy --fs-uuid --set dc50c3d6-787a-45d7-951b-20836d10443c
        multiboot /boot/xen-4.0.1.gz dummy=dummy
        module /boot/vmlinuz-2.6.32.18-xen0-pvops root=UUID=dc50c3d6-787a-45d7-951b-20836d10443c ro dummy=dummy
        module /boot/initrd.img-2.6.32.18-xen0-pvops
}</pre>
<pre>chmod a+x /etc/grub.d/50_xen
vim.tiny /etc/default/grub</pre>
<pre>GRUB_DEFAULT="Ubuntu 10.04 - Xen 4.0.1 - 2.6.32.18 pvops"
GRUB_HIDDEN_TIMEOUT=30
GRUB_HIDDEN_TIMEOUT_QUIET=false</pre>
<p>Anschließend nicht vergessen, die Grub-Konfiguration noch einmal neu aufzubauen:</p>
<pre>update-grub</pre>
<p>Ein Dateisystem für Xen: Einige Scripte benäötigen das alte <tt>/proc/xen</tt>. Dieses wird durch einen Eintrag in der <tt>/etc/fstab</tt> beim nächsten Neustart gemountet:</p>
<pre>xenfs /proc/xen xenfs defaults</pre>
<p>Dann benötigen wir noch zwei Module und deren Devices &#8211; die Module sollten in die <tt>/etc/modules</tt> eingetragen werden:</p>
<pre>modprobe -v xen-evtchn
modprobe -v xen-gntdev</pre>
<pre>mkdir /dev/xen
mknod -m 0660 /dev/xen/gntdev c 10 57
mknod -m 0660 /dev/xen/evtchn c 10 58</pre>
<p>Das war es: Beim nächsten Neustart startet der eben gebootete pvops-Kernel nicht auf nacktem Metall, sondern auf dem Hypervisor. Mit pvops-Kernel sollte es auch möglich sein, die beschleunigten Grafiktreiber von AMD und nVidia zu nutzen, ausprobiert habe ich dies nicht, weil bei mir Xen nur auf dem Server eingesetzt wird.</p>
<p>Auf die Konfiguration von pvops-DomUs gehe ich in den nächsten Tagen ein: Für diese halten aktuelle Distributionen oft passende Kernel bereit, ich werde jedoch auch zeigen, wie man mit einem frischen Vanilla-Kernel 2.6.35.x ein wenig mehr herausholt.</p>
<h3>Vielen Dank an&#8230;</h3>
<ul>
<li><a href="http://blog.xen.org/index.php/2010/03/26/steps-to-try-xen-4-0-0-release-candidate-8-on-ubuntu-lucid-10-04-64-bits/">&#8230;das offizielle Xen-Blog, an dessen Anleitung ich mich grob orientiert habe</a></li>
<li><a href="http://wiki.xensource.com/xenwiki/XenParavirtOps">&#8230;die Mitarbeiter des Xen-Wikis, die viele wertvolle Informationen zu pvops zusammengetragen haben</a></li>
</ul>
<h3>Update, 31. August 2010</h3>
<ul>
<li>bridge-utils zur Paketliste hinzugefügt</li>
<li>Ergänzung zu <tt>/proc/xen</tt></li>
<li>Ergänzung zu fehlenden Devices und Modulen</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2010/08/30/xen-401-pvops-dom0-ubuntu1004/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Welchen Bootloader verwende ich?</title>
		<link>http://blog.rootserverexperiment.de/2010/08/25/welchen-bootloader-verwende-ich/</link>
		<comments>http://blog.rootserverexperiment.de/2010/08/25/welchen-bootloader-verwende-ich/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 09:11:40 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Randnotizen]]></category>
		<category><![CDATA[Tips und Tricks]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=540</guid>
		<description><![CDATA[Ich arbeite an Rootservern, bei denen die verschiedensten Bootloader installiert sind. Mal Grub 0.9x, mal Grub 2, oft Extlinux (oh, ja, ich muss mal ein Tutorial zu Syslinux 4.0 machen&#8230;). Böse ist, wenn sowohl eine extlinux.conf als auch ein Ordner /boot/grub vorhanden sind. Was tun? Einfach im MBR nachschauen:
root@caesium:~#  dd if=/dev/sda bs=448 count=1 &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>Ich arbeite an Rootservern, bei denen die verschiedensten Bootloader installiert sind. Mal Grub 0.9x, mal Grub 2, oft <a href="http://blog.rootserverexperiment.de/2006/08/01/extlinux-flexibler-bootloader-fur-den-rootserver/" target="_blank">Extlinux</a> (oh, ja, ich muss mal ein Tutorial zu Syslinux 4.0 machen&#8230;). Böse ist, wenn sowohl eine <tt>extlinux.conf</tt> als auch ein Ordner <tt>/boot/grub</tt> vorhanden sind. Was tun? Einfach im MBR nachschauen:</p>
<pre>root@caesium:~#  dd if=/dev/sda bs=448 count=1 | strings
1+0 Datensätze ein
1+0 Datensätze aus
448 Bytes (448 B) kopiert, 4,2288e-05 s, 10,6 MB/s
ZRr=
`|f
\|f1
GRUB
Geom
Hard Disk
Read
 Error</pre>
<p>Das ist wohl GRUB, beim Syslinux-MBR (Extlinux) sieht die Ausgabe so aus:</p>
<pre>RPf1
Missing operating system.
f`f1
|fRfP
Ht[y9Y[
Multiple active partitions.
Operating system load error.</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2010/08/25/welchen-bootloader-verwende-ich/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xen-Nachtrag, Setup mit Routing</title>
		<link>http://blog.rootserverexperiment.de/2010/03/19/xen-nachtrag-setup-mit-routing/</link>
		<comments>http://blog.rootserverexperiment.de/2010/03/19/xen-nachtrag-setup-mit-routing/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 07:18:09 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips und Tricks]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=494</guid>
		<description><![CDATA[Mir ist aufgefallen, dass mein gestriges Setup mit Dummy-Adapter und Vergabe der ersten IP-Adresse des Netzes auf das Interface dummy0 nicht die optimale Konfiguration darstellt: Hier wird das alte Setup mit separatem Router 1:1 nachgebaut, was zur Folge hat, dass die drei Adressen für Broadcast, Netz und Gateway nicht für Produktivsysteme nutzbar sind. Das beschriebene [...]]]></description>
			<content:encoded><![CDATA[<p>Mir ist aufgefallen, dass mein <a href="http://blog.rootserverexperiment.de/2010/03/18/vinalla-xen-und-kernel-auf-ubuntu-karmic/">gestriges Setup mit Dummy-Adapter</a> und Vergabe der ersten IP-Adresse des Netzes auf das Interface <tt>dummy0</tt> nicht die optimale Konfiguration darstellt: Hier wird das alte Setup mit separatem Router 1:1 nachgebaut, was zur Folge hat, dass die drei Adressen für Broadcast, Netz und Gateway nicht für Produktivsysteme nutzbar sind. Das beschriebene Setup ist daher nur sinnvoll, wenn ein Server in zwei Stufen von bridged auf routed umgestellt werden soll. </p>
<p>Beim Neuaufsetzen eines Servers ist es besser, gleich eine PointToPoint-Lösung mit 255.255.255.255-Maske aufzusetzen. Damit können bei einer 29-Bit-Maske (255.255.255.248) acht statt fünf IP-Adressen genutzt werden &#8212; satte 60% mehr (bei vier, fünf, oder sechs Bit Masken fällt der Gewinn natürlich kleiner aus). Die Änderungen gegenüber dem Setup von gestern sind, dass <tt>dummy0</tt> in der <tt>/etc/network/interfaces</tt> der dom0 entfällt. In der <tt>/etc/xen/xend-config.sxp</tt> wird das extern erreichbare Interface eingetragen (in der Regel <tt>eth0</tt>):</p>
<pre>(network-script 'network-route netdev=eth0')
(vif-script     'vif-route netdev=eth0')</pre>
<p>Die Netzwerkkonfiguration der domU bekommt nun die primäre IP-Adresse der dom0 als Gateway eingetragen, dazu das Schlüsselwort <tt>pointopoint</tt> (nur ein &#8216;t&#8217;!) und die &#8220;dichte&#8221; Netzmaske:</p>
<pre>auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 172.16.16.114
        netmask 255.255.255.255
        gateway 192.168.1.2
        pointopoint 192.168.1.2
        post-up ethtool -K eth0 tx off</pre>
<h3>Vielen Dank an&#8230;</h3>
<ul>
<li><a href="http://wiki.hetzner.de/index.php/Umstellung_Debian_Etch_mit_XEN_3_auf_routed">Umstellung Debian Etch mit XEN 3 auf routed</a> &#8230;die fleissigen Dokumentatoren im Hetzner-Wiki</li>
<li>&#8230;den Admin bei 1&amp;1, dessen Default-Setup mit pointopoint auf der primären IP mich dazu anregte, hier nochmal nachzuforschen</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2010/03/19/xen-nachtrag-setup-mit-routing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ein Tag mit Xen: Vanilla-Xen und -Kernel auf Ubuntu Karmic installieren</title>
		<link>http://blog.rootserverexperiment.de/2010/03/18/vinalla-xen-und-kernel-auf-ubuntu-karmic/</link>
		<comments>http://blog.rootserverexperiment.de/2010/03/18/vinalla-xen-und-kernel-auf-ubuntu-karmic/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 18:30:11 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips und Tricks]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=470</guid>
		<description><![CDATA[Bislang laufen alle unsere Dom0s entweder auf Ubuntu 8.04 oder openSUSE 11.1 oder 11.2. Für einen neuen alten Server wollte ich Ubuntu 9.10 als Basis nehmen, auch um im Mai leichter auf 10.04 wechseln zu können. Bei Ubuntu ist die Xen-Situation nicht besonders rosig: Laut halboffizieller Doku steht weder ein aktueller Xen, noch ein brauchbarer [...]]]></description>
			<content:encoded><![CDATA[<p>Bislang laufen alle unsere Dom0s entweder auf Ubuntu 8.04 oder openSUSE 11.1 oder 11.2. Für einen neuen alten Server wollte ich Ubuntu 9.10 als Basis nehmen, auch um im Mai leichter auf 10.04 wechseln zu können. Bei Ubuntu ist die Xen-Situation nicht besonders rosig: Laut halboffizieller Doku steht <a href="https://help.ubuntu.com/community/Xen">weder ein aktueller Xen, noch ein brauchbarer Kernel bereit</a>. Immerhin ein Xend (der Verwaltungsdaemon) in Version 3.3. Erfahrungen seit 3.2 haben gezeigt, dass sich die Schnittstellen kaum noch ändern, so dass der 3.3er Daemon mit dem 3.4er Xen zusammen arbeiten sollte. Denkste.</p>
<p>Ziel waren zwei Server: Ein 64-Bit-System fürs Büro und ein 32-Bit-System für einen alten (AMD Athlon XP 2000, 512MB, 80GB) Hetzner Rootie (Presse-Testsystem). Beide Systeme wurden zunächst mit einem Ubuntu Minimalsystem ausgestattet. Bei Hetzner geschah dies aus dem Notfall-System per <i>debootstrap</i> (fertige OS-Images werden nur einmal am Tag aufgespielt, was stört, wenn man nach einer abgeschossenen Installation neu aufsetzen möchte) und der Server zuhause wurde per Debian-Installer per PXE-Netboot eingerichtet. Die zwei Möglichkeiten, einen Hetzner-Server mit Ubuntu oder Debian auszustatten &#8212; debootstrap und den Debian-Installer im SSH-Modus &#8212; erkläre ich bei Gelegenheit im Detail.  <span id="more-470"></span></p>
<h3>Benötigte Pakete</h3>
<p>Mit dem folgenden Befehl sollten alle Abhängigkeiten aufgelöst werden, die zum Bau von Xen und dem Betrieb einer Dom0 benötigt werden:</p>
<pre>apt-get install rsync screen build-essential bin86 bcc libssl-dev \
      gettext libncurses-dev python python-dev pciutils-dev libx11-dev \
      pkg-config python-twisted bridge-utils gawk</pre>
<p>Unter 32 Bit-Systemen sollte man aus Performance-Gründen noch die angepasste C-Bibliothek installieren:</p>
<pre>apt-get install libc6-xen</pre>
<h3>Kernel kompilieren</h3>
<p>Ubuntu selbst bietet einen Kernel für <a href="http://aws.amazon.com/ec2/">Amazons EC2</a>, der sollte einigermaßen gut auf aktuellen Xen-Versionen laufen. Getestet habe ich es nicht. Stattdessen habe ich selbst drei Kernel kompiliert: Einen für AMD64 mit vollem Dom0-Support und vielen Treibern, einen mit stark abgespeckten Treibern (für 64Bit-DomUs) und einen i686-Kernel mit vollem Dom0-Support und der Möglichkeit, auf älteren Xen-Versionen gestartet zu werden. Die für Xen benötigten Frontend- sowie Backend-Treiber habe ich statisch integriert, was den Vorteil hat, dass an der Konfiguration des Initramfs nichts geändert werden muss. Alle Konfigurationen bieten Verbesserungspotential, beispielsweise beim Abspecken um nicht benötigte Treiber. Hier sei allerdings darauf verwiesen, dass das Entfernen vermeintlich nicht benötigter Funktionen <i>Unresolved Symbols</i> und damit Kompilationsabbrüche zur Folge haben kann.</p>
<p>Als Kernel kommt hier Gentoos 2.6.31.12 &#8212; konkret das Patchset xen-patches-2.6.31-12.tar.bz2 &#8212; zum Einsatz. Die verwendeten Patches stammen größtenteils von openSUSEs Xen-Kernel, wurden aber von SuSE-Spezifika befreit. Das macht das Bauen und die Installation einfacher. Gepflegt werden die Patches <a href="http://code.google.com/p/gentoo-xen-kernel/downloads/list">als eigenes Projekt bei Google Code</a>.</p>
<p>Meine Konfigurationsdateien:</p>
<ul>
<li><a href="http://cdprojekte.mattiasschlenker.de/Public/Xen-Kernel/config-2.6.31.12-mfs002-xen0-compat-i586">config-2.6.31.12-mfs002-xen0-compat-i586</a></li>
<li><a href="http://cdprojekte.mattiasschlenker.de/Public/Xen-Kernel/config-2.6.31.12-mfs001-xen0-amd64">config-2.6.31.12-mfs001-xen0-amd64</a></li>
<li><a href="http://cdprojekte.mattiasschlenker.de/Public/Xen-Kernel/config-2.6.31.12-mfs006-xenU-minimal-amd64">config-2.6.31.12-mfs006-xenU-minimal-amd64</a></li>
</ul>
<p>Und nun zum Bauen des Kernels, hier für AMD64:</p>
<pre>mkdir xen-patches-2.6.31-12
cd xen-patches-2.6.31-12
tar xvjf ../xen-patches-2.6.31-12.tar.bz2
cd ../linux-2.6.31
for i in ../xen-patches-2.6.31-12/*.patch1 ; do patch -p1 < $i ; done
wget -O .config http://cdprojekte.mattiasschlenker.de/Public/Xen-Kernel/config-2.6.31.12-mfs001-xen0-amd64
make oldconfig
make
make install
make modules_install</pre>
<p>Der Kernel braucht noch ein passendes Initramfs, dieses entsteht mit:</p>
<pre>mkinitramfs -o /boot/initrd.img-2.6.31.12-mfs001-xen0-amd64 2.6.31.12-mfs001-xen0-amd64</pre>
<p>Falls Sie Xen Frontend- oder Backend-Treiber in Module ausgelagert haben, müssen Sie ggf. die Modulliste des Initramfs anpassen!</p>
<h3>Xen Hypervisor installieren</h3>
<p>Ohne Xen nützt der schönste Kernel nichts, also bauen und installieren wir Xen 3.4.2 aus dem <a href="http://www.xen.org/products/xen_source.html">offiziellen Tarball von www.xen.org</a>:</p>
<pre>tar xvzf xen-3.4.2.tar.gz
cd xen-3.4.2
make xen
make install-xen</pre>
<h3>Bootloader konfigurieren</h3>
<p>Der einfachste Weg ist die Erstellung eines simplen Scriptes <tt>/etc/grub.d/50_xen</tt>, welches hart kodiert Kernelnamen, Xen-Version und Pfade (Root-Device ist hier <tt>/dev/sda4</tt>) enthält. Zweimal <tt>root=...</tt> ist kein Tippfehler, sondern als Workaround für einen kleinen Bug in den Scripten des Initramfs gedacht:</p>
<pre>#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "Ubuntu 9.10 - Xen 3.4.2 + Linux 2.6.31" {
        insmod ext2
        set root=(hd0,4)
        multiboot /boot/xen-3.4.2.gz
        module /boot/vmlinuz-2.6.31.12-mfs001-xen0-amd64 root=/dev/sda4 ro root=/dev/sda4
        module /boot/initrd.img-2.6.31.12-mfs001-xen0-amd64
}</pre>
<p>Das Script muss nun noch ausführbar gesetzt werden, sonst wird der neue Eintrag nicht in die GRUB-Konfiguration übernommen!</p>
<pre>chmod a+x /etc/grub.d/50_xen</pre>
<p>In der Datei <tt>/etc/default/grub</tt> sollten Sie den Standard-Booteintrag auf den neuen Kernel setzen:</p>
<pre>GRUB_DEFAULT="Ubuntu 9.10 - Xen 3.4.2 + Linux 2.6.31"</pre>
<p>Danach rufen Sie <tt>update-grub</tt> auf um die Bootloader-Konfiguration neu aufzubauen. Rebooten Sie jetzt den Rechner mit Xen und dem neuen Kernel.</p>
<h3>Installation der Xen-Tools</h3>
<p>Die Xen-Tools habe ich in einem frisch entpackten Xen-Tarball kompiliert. Die bei der Installation angegebene Variable ist wichtig, damit die Python-Module in den bei Ubuntu üblichen Pfaden landen. Gibt man diese Variable nicht an, ist es ggf. erforderlich eine Umgebunsvariable <tt>PYTHONPATH</tt> zu setzen und diese ggf. in das Script <tt>/etc/init.d/xend</tt> einzubauen:</p>
<pre>rm -rf xen-3.4.2
tar xvzf xen-3.4.2.tar.gz
cd xen-3.4.2
make tools
make install-tools PYTHON_PREFIX_ARG=</pre>
<p>Wenn alles geklappt hat, lässt sich der Xend starten. Läuft dieser, können die Bootmeldungen des Hypervisors ausgelesen werden.</p>
<pre>/etc/init.d/xend start
xm dmesg</pre>
<h3>Xend in den Runleveln verlinken</h3>
<p>Ich habe Xend <i>vor</i> dem SSH-Server verlinkt, den Start der domU-Instanzen danach. Grund waren Probleme mit dem SSH-Server: Upstart (oder der Xend?) versucht diesen neu zu starten, wenn neue Interfaces auftauchen. Das gelingt nicht immer, so dass ich während meiner Tests häufiger ohne SSH da stand. Auf einem Root-Server ist so etwas natürlich ganz bescheiden.</p>
<pre>update-rc.d xend start 14 2 3 4 5 . stop 80 0 1 6 .
update-rc.d xendomains start 21 2 3 4 5 . stop 79 0 1 6 .</pre>
<h3>Vorbereitung für Routing-Setup</h3>
<p><b>Achtung:</b> Siehe auch <a href="http://blog.rootserverexperiment.de/2010/03/19/xen-nachtrag-setup-mit-routing/">den Nachtrag vom 19. März</a> für ein besseres Setup!</p>
<p>Provider wie Hetzner oder Strato routen einem Server zugewiesene Subnetze auf dessen primäre IP-Adresse. Deshalb muss bei diesen Servern das Xen-Netzwerk von bridged auf routed umgestellt werden. <b>Achtung:</b> Einige Provider klemmen Server gnadenlos ab, wenn hinter einem Port des Routers bislang unbekannte MAC-Adressen auftauchen. Wer den Xend bei so einem Provider startet, ohne vorher auf routed umgestellt zu haben, fliegt aus der SSH-Verbindung raus und darf mit dem Support telefonieren!</p>
<p>Zuerst wird die Datei  <tt>/etc/modules</tt> um eine Zeile </p>
<pre>dummy</pre>
<p>für den Dummy-Netzwerk-Adapter erweitert.</p>
<p>Es folgt die statische Konfiguration der primären IP-Adresse auf <tt>eth0</tt> und der ersten nutzbaren IP-Adresse auf <tt>dummy</tt>. In diesem Fall haben wir das Subnetz <tt>172.16.16.112/ 255.255.255.248</tt> (acht Adressen von </tt>.112</tt> bis <tt>.119</tt>) zugewiesen bekommen, <tt>.112</tt> ist hier die Adresse des Netzes, <tt>.113</tt> wird auf <tt>dummy0</tt> gelegt, <tt>.114</tt> bis <tt>.118</tt> (fünf von acht Adressen) sind für die domUs nutzbar und <tt>.119</tt> ist die Broadcast-Adresse:</p>
<pre>auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        gateway 192.168.1.1

auto dummy0
iface dummy0 inet static
        address 172.16.16.113
        netmask 255.255.255.248</pre>
<p>In der Konfigurationsdatei <tt>/etc/xen/xend-config.sxp</tt> des Xend muss die Einstellung von bridged auf routed umgestellt werden. Das zu routende Device muss explizit angegeben werden:</p>
<pre># (network-script network-bridge)
# (vif-script     vif-bridge)
(network-script 'network-route netdev=dummy0')
(vif-script     'vif-route netdev=dummy0')</pre>
<p>An dieser Stelle ist ein Neustart des Xend, besser ein Reboot erforderlich. Anschließend können die domUs konfiguriert werden. Die Routing-Informationen werden hierfür in der Client-Config eingetragen:</p>
<pre>kernel = "/boot/vmlinuz-2.6.31.12-mfs006-xenU-minimal-amd64"
ramdisk = "/boot/initrd.img-2.6.31.12-mfs006-xenU-minimal-amd64"
memory = 256
name = "ubuntu-amd64-minimal"
vif = [ 'ip=172.16.16.114' , 'mac=00:16:00:00:00:27' ]
disk = [ 'file:/usr/local/xendomains/test01_64/sda1.img,sda1,w' ]
root = "/dev/sda1 ro"
extras = "console=hvc0 xencons=tty"</pre>
<p>Daneben ist es erforderlich, die IP-Konfiguration in der <tt>/etc/network/interfaces</tt> der domU einzutragen -- DHCP möchte ich an dieser Stelle nicht erklären, das würde den Rahmen sprengen.</p>
<h3>Vielen Dank an...</h3>
<ul>
<li><a href="http://www.brandonturner.net/blog/2010/01/install-xen-ubuntu/">Installing Xen on Ubuntu 9.10 -- Brandon's Blog</a> ...für die Idee mit dem Gentoo-Kernel und die GRUB-Konfiguration</li>
<li><a href="http://www.debian-administration.org/articles/360">An introduction to custom Xen networking -- Debian Administration</a> ...für die Hinweise zum Routed-Setup</li>
</ul>
<h3>Anmerkungen:</h3>
<ul>
<li>
<p><b>Nie</b> erst Ubuntus Xen-Tools 3.3 installieren und dann diese Anleitung durchführen. Das resultierende Versionsmischmasch wird garantiert kein funktionierendes Netzwerk zur Folge haben!</p>
</li>
<li>
<p>Details zur domU-Konfiguration bei Hetzner folgen</p>
</li>
<li>
<p>Details zur Ubuntu-/Debian-Installation aus Hetzners Rettungssystem folgen</p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2010/03/18/vinalla-xen-und-kernel-auf-ubuntu-karmic/feed/</wfw:commentRss>
		<slash:comments>104</slash:comments>
		</item>
		<item>
		<title>Linux auf dem Asus A52JR</title>
		<link>http://blog.rootserverexperiment.de/2010/03/01/linux-auf-dem-asus-a52jr/</link>
		<comments>http://blog.rootserverexperiment.de/2010/03/01/linux-auf-dem-asus-a52jr/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 09:04:44 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips und Tricks]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=455</guid>
		<description><![CDATA[Seit einigen Tagen steht ein Asus A52JR (konkret: das A52JR-SX109V der aktuellen Saturn-Aktion) im Büro und wartet darauf, zum &#8220;Alltagsnotebook&#8221; (und zur schnelleren Ergänzung zu den von mir so geliebten Netbooks) mit Linux beglückt zu werden, konkret soll Ubuntu 9.10 zum Einsatz kommen, vor einem selbst kompilierten Kernel und einer manuellen Installation von Grafiktreibern schrecke [...]]]></description>
			<content:encoded><![CDATA[<p>Seit einigen Tagen steht ein Asus A52JR (konkret: das A52JR-SX109V der aktuellen Saturn-Aktion) im Büro und wartet darauf, zum &#8220;Alltagsnotebook&#8221; (und zur schnelleren Ergänzung zu den von mir so geliebten Netbooks) mit Linux beglückt zu werden, konkret soll Ubuntu 9.10 zum Einsatz kommen, vor einem selbst kompilierten Kernel und einer manuellen Installation von Grafiktreibern schrecke ich nicht zurück. Bislang gibt es lediglich Teilerfolge zu berichten, diese sollten aber immerhin anderen interessierten bei der Kaufentscheidung helfen. Wegen der verwandten Innereien dürften die hier beschriebenen Vorgehensweisen auch beim A72JR, beim K52J und beim K72J sowie bei X52JR und X72JR anzuwenden sein (die K-Modelle werden über den regulären Fachhandel vertrieben und sind etwas eleganter und mit hübscherer Tastatur ausgestattet).<span id="more-455"></span></p>
<h3>Erster Bootversuch</h3>
<p>Meinen ersten Bootversuch unternahm ich mit der aktuellen <a href="http://download.lesslinux.org/testing/cbrescue/">Testversion der Computerbild-Notfall-CD 2.1</a>. Diese basiert auf &#8220;<a href="http://blog.lesslinux.org/">LessLinux</a>&#8220;, meiner eigenen LFS basierten Distribution. Da Kernel 2.6.33 einen stabilen JME-Treiber mitbringt (JMicron Gigabit Ethernet) und Unterstützung für viele Atheros-WLAN-Chips hinzufügt war ich neugierig, wie sich diese CD schlagen würde. Das Ergebnis war gar nicht schlecht:</p>
<ul>
<li><b>Ethernet:</b> nutzbar, flott, stabil</li>
<li><b>WLAN:</b> nutzbar, stabil, moderate Systemlast</li>
<li><b>Grafik:</b> VESA 1024&#215;768 statt nativer 1366&#215;768</li>
</ul>
<h3>Installation von Ubuntu 9.10</h3>
<p>Da Ubuntus 2.6.31er-Installationskernel den JME-Treiber nicht kennt, schlug die favorisierte Netzwerkinstallation über unseren &#8220;<a href="http://blog.rootserverexperiment.de/2007/09/17/der-buro-bootserver-pxelinux-im-praxiseinsatz/">Plug&amp;Install-Server</a>&#8221; leider fehl. Ich brannte also eine Xubuntu Alternate Install CD und installierte von dieser. Das folgende Update und die Nachinstallation von <tt>build-essential</tt>, <tt>m4</tt> und <tt>libncurses-dev</tt> erfolgte über einen Ralink 2561 802.11g USB-Stick. </p>
<h3>Kernelkompilierung und Segfaults</h3>
<p>Den Kernel 2.6.33 entpackte ich unter <tt>/usr/src</tt> und kopierte Ubuntus Konfigurationsdatei nach <tt>.config</tt>. Ein anschließendes <tt>make oldconfig</tt> fragt nach den neuen Treibern, die aktiviert werden sollen. Als Faustregel gilt, dass Treiber, die als Modul bereitstehen, als Modul gebaut werden sollen und ansonsten der Vorschlag befolgt werden soll.</p>
<p>Seltsames passierte beim anschließenden Lauf von <tt>make</tt>: Ich hatte mehrere Segfaults. Da diese zunächst in eher exotischen Treibern auftauchten, vermutete ich Probleme im Zusammenspiel Compiler-Kernel-Architektur. Nach mehrfachen Reboots gelang es mir jedoch, den Kernel durchzukompilieren und zu installieren. Ich wählte den nicht ganz Debian konformen Ansatz mit</p>
<pre>make
make install
make modules_install
find /lib/modules/2.6.33 -name '*.ko' -exec strip --strip-unneeded {} \;
update-initramfs -c -k 2.6.33
update-grub</pre>
<p>Nach dem Reboot mit dem Kernel 2.6.33 lief der Rechner stabil, auch zwei gleichzeitige Kernel-Kompilierungen parallel konnten ihn nicht mehr aus dem Tritt bringen. Ich tendiere nun dazu anzunehmen, dass eher Probleme von Linux 2.6.31 dem Chipsatztreiber oder dem Core i3 ursächlich für das instabile System waren. wer sich den Ärger ersparen möchte, kompiliert den Kernel auf einer anderen Maschine, erstell mit <tt>make deb-pkg</tt> ein Debian-Paket und installiert dieses anschließend auf dem A52JR.</p>
<h3>Teilerfolg und fehlende Grafiktreiber</h3>
<p>Mit Kernel 2.6.33 lädt auch Ubuntu 9.10 korrekt <tt>jme</tt> für die Gigabit-Ethernetkarte und <tt>ath9k</tt> für die WLAN-Karte, Sound geht und die Webcam funktioniert mit Cheese (das Bild steht halt Kopf). Mein nächster Versuch galt also ATIs Catalyst-Treiber 10.2 vom 16. Februar 2010. Und da verließen sie ihn&#8230;</p>
<pre>aticonfig: No supported adapters detected</pre>
<p>Eine kurze Recherche auf Atis Website ergab, dass für die Mobility Radeon HD 5470 noch keine Treiber bereitstehen &#8211; weder für Linux noch für Windows. Da die Mobilversion andere PCI-IDs verwendet als die verwandte Desktopversion, kann diese <a href="http://www.golem.de/1001/72243.html" target="_blank">erst seit Anfang des Jahres ausgelieferte Karte</a> noch nicht zufriedenstellend genutzt werden. Geht die beigelegte Treiber-DVD verloren, schauen auch Windows-Nutzer in die Röhre. Zumindest bis zum nächsten Update der Catalyst-Treiber. Sollte ASUS sich an seinen bisherigen Zyklus halten, stehen um Mitte März die Treiber für Linux bereit, zehn Tage später Windows-Versionen. Solange muss ich wohl noch mit 1024&#215;768 auskommen. <b>Fortsetzung folgt&#8230;</b></p>
<h3>Dateien</h3>
<ul>
<li><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20100301_asus_a52jr_lspci_-vv.txt" target="_blank">Ausgabe von lspci -vv</a></li>
<li><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20100301_asus_a52jr_lspci_-nn.txt" target="_blank">Ausgabe von lspci -nn</a></li>
<li><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20100301_asus_a52jr_lsusb.txt" target="_blank">Ausgabe von lsusb</a></li>
<li><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20100301_asus_a52jr_dmesg_2.6.33.txt" target="_blank">Ausgabe von dmesg (Kernel 2.6.33)</a></li>
<li><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20100301_asus_a52jr_dotconfig.txt" target="_blank">Verwendete Kernelkonfiguration für Kernel 2.6.33 (benötigt noch Feinschliff)</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2010/03/01/linux-auf-dem-asus-a52jr/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ubuntu 9.10 Karmic Koala und VMware Player</title>
		<link>http://blog.rootserverexperiment.de/2009/10/25/ubuntu-910-karmic-koala-und-vmware-player/</link>
		<comments>http://blog.rootserverexperiment.de/2009/10/25/ubuntu-910-karmic-koala-und-vmware-player/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 17:22:59 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tips und Tricks]]></category>
		<category><![CDATA[Tool der Woche]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=437</guid>
		<description><![CDATA[Ich hatte seit Wochen ein Mainboard nebst zugehörigem Quadcore-Opteron Phenom nebst 8GB RAM herumliegen. Das war ursprünglich ein Build-/Testsystem, sollte aber jetzt meinen doch schon etwas älteren (zweieinhalb Jahre) Desktop ablösen, der nun als Testsystem weiter dienen wird. Auf einen neuen Rechner installiert man natürlich ein neues OS &#8212; statt bislang Ubuntu 8.04.x sollte 9.10 [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte seit Wochen ein Mainboard nebst zugehörigem Quadcore-<strike>Opteron</strike> Phenom nebst 8GB RAM herumliegen. Das war ursprünglich ein Build-/Testsystem, sollte aber jetzt meinen doch schon etwas älteren (zweieinhalb Jahre) Desktop ablösen, der nun als Testsystem weiter dienen wird. Auf einen neuen Rechner installiert man natürlich ein neues OS &#8212; statt bislang Ubuntu 8.04.x sollte 9.10 RC zum Einsatz kommen.</p>
<p>Probleme bereitete die Installation und Nutzung des VMware-Players, den ich gerne als recht flexible Virtualisierungslösung einsetze.</p>
<p><span id="more-437"></span></p>
<h3>Das Installationsproblem</h3>
<p>Die Installation ist eigentlich simpel: Man setzt das *.bundle auf executable und startet das Paket dann mit Rootrechten. Doch ein Erfolg wollte sich nicht einstellen. Irgendwo auf halber Strecke  hängt der Installer und bewegt sich weder vor noch zurück. Greppt man die Ausgabe von <tt>ps waux</tt> nach gcc-Prozessen durch, wird man schlafende oder wartende Kompilationsvorgänge finden.</p>
<p>Warum das? Die Kompilierung der VMware-Module verursacht viele Warnungen über fehlende Symbole. Daran verschluckt sich nun der umgebende Python-Prozess und nichts geht voran. Die <a href="http://communities.vmware.com/thread/228949">Lösung hat das VMware-Forum</a> parat:</p>
<ul>
<li>Man startet die Installation in zwei Fenstern (je mit Rootrechten)</li>
<li>In einem der Fenster startet man das Bundle mit dem Parameter <tt>--ignore-errors</tt></li>
<li>Im zweiten Fenster tötet man gnadenlos alle Modul-Bauprozesse:<br/><tt>while true; do killall -9 vmware-modconfig-console; sleep 1; done</tt><br/>Die Schleife mit Strg+C abbrechen, wenn die Installation durch ist.</li>
<li>Am Ende hat man zwar eine VMware, aber keine Kernelmodule, die baut man hinterher mit<br/><tt>vmware-modconfig --console --install-all</tt></li>
<li>Nun noch den VMware-Dienst neu starten und der Player lässt sich nutzen</li>
</ul>
<h3>Das Mausproblem</h3>
<p>Schnell werdet Ihr feststellen, dass die Maus in der VMware hüpft und immer wieder aus der VMware raus oder in sie rein wechselt. Ein vernünftiges Arbeiten ist so nicht möglich.</p>
<p>Die <a href="http://www.rootloot.de/blog/vmware_in_ubuntu_karmic">Lösung des Problems hat Rootloot.de herausgefunden</a>: Eine Inkompatibilität, zwischen Ubuntus Gtk+ und dem Gtk, das die VMware erwartet. Der Trick: Einfach die VMware zwingen, das mitgelieferte Gtk+ zu nutzen, auch wenn die Darstellung nicht zu 100% mit dem Rest des Desktops kongruent sein sollte. Am besten per Export einer Umgebungsvariable. Da ich die VMware eh immer aus einer Shell starte, habe ich mich mit</p>
<p><tt>export VMWARE_USE_SHIPPED_GTK=force</tt></p>
<p>beholfen. Bingo, klappt alles!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2009/10/25/ubuntu-910-karmic-koala-und-vmware-player/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Linux: Verschlüsselte und komprimierte Backups auf DVD</title>
		<link>http://blog.rootserverexperiment.de/2009/02/04/verschlusselte-komprimierte-dvd-backups-unter-linux/</link>
		<comments>http://blog.rootserverexperiment.de/2009/02/04/verschlusselte-komprimierte-dvd-backups-unter-linux/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 18:32:07 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tips und Tricks]]></category>
		<category><![CDATA[Tool der Woche]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=294</guid>
		<description><![CDATA[Ich sichere nach wie vor geschäftsrelevante Daten auf DVD, allerdings stellte mich keine der fertigen Lösungen vollkommen zufrieden. Meine Anforderungen:


Starke Verschlüsselung: Das Backup muss sicherer sein als diese unsägliche ZIP-Verschlüsselung hinreichend sicher sein und ein statistischer Angriff soll keinen Erfolg versprechen.


Gute Komprimierung: Ich möchte in kurzer Zeit das Backup klein eindampfen können und beim Zugriff [...]]]></description>
			<content:encoded><![CDATA[<p>Ich sichere nach wie vor geschäftsrelevante Daten auf DVD, allerdings stellte mich keine der fertigen Lösungen vollkommen zufrieden. Meine Anforderungen:</p>
<ul>
<li>
<p><b>Starke Verschlüsselung</b>: Das Backup muss <strike>sicherer sein als diese unsägliche ZIP-Verschlüsselung</strike> hinreichend sicher sein und ein statistischer Angriff soll keinen Erfolg versprechen.</p>
</li>
<li>
<p><b>Gute Komprimierung</b>: Ich möchte in kurzer Zeit das Backup klein eindampfen können und beim Zugriff effizient entpacken, also nur die Dateien, die ich benötige.</p>
</li>
<li>
<p><b>Mountbares Backup</b>: Ganz ohne vorheriges Entpacken soll ein sofortiger Zugriff auf alle Dateien im Backup möglich sein.</p>
</li>
<li>
<p><b>Keine unverschlüsselten temporären Dateien</b>: Weder beim Packen noch beim Entpacken sollen unverschlüsselte temporäre Dateien anfallen, einerseits aus Sicherheitsgründen, andererseits weil eine temporäre Datei auf einem zufällig verschlüsselten Dateisystem Prozessorlast erzeugt.</p>
</li>
</ul>
<p>Bis vor kurzem habe ich einfach Archive mit Tarballs mit <a href="http://de.wikipedia.org/wiki/Twofish" target="_blank">Twofish</a> verschlüsselt (<a href="http://www.openssl.org/docs/apps/enc.html" target="_blank">openssl</a> bietet ein komfortables Subkommando) und diese auf DVD gebrannt. Neben den oben genannten Nachteilen kam das Problem dazu, dass auf einem ISO-9660-Dateisystem die Dateigrößengrenze bei 2GB lag.</p>
<p>Meine Lösung sah eine Kombination aus bekannten Technologien vor: Eine Containerdatei sollte per losetup zum blockorientierten Gerät mutieren, dort wiederum sollte mit cryptsetup ein verschlüsselter Datenträger entstehen, der wiederum ein komprimiertes Squashfs-Dateisystem aufnehmen sollte. Klingt kompliziert? Ist es aber nicht:</p>
<p>Benötigt werden die im Tutorial <a href="http://blog.rootserverexperiment.de/2008/11/05/das-perfekte-netbook-setup-heimatverzeichnis-home-reisetauglich-verschluesselt/" target="_blank">/home reisetauglich verschlüsselt</a> erwähnten Pakete und die <tt>squashfs-tools</tt> sowie SquashFS-Module für den laufenden Kernel.<span id="more-294"></span></p>
<h3>Anlegen des Containers und Befüllen mit Daten</h3>
<p>Zuerst wird ein Container angelegt, verschlüsselt und dann mit Daten gefüllt</p>
<ul>
<li>
<p><b>Erstellen des Containers:</b> Ein Sparse-File mit der maximal zulässigen Größe einer DVD5 (4700372992 Bytes oder 2295104 Blöcke &#8212; bei einer DVD9 müssten es 4150388 Blöcke sein) entsteht mit dem folgenden Befehl. Die Datei belegt am Anfang nur 2048 Byte, angezeigt wird dennoch die maximale Größe:</p>
<pre>dd if=/dev/zero bs=2048 count=1 seek=2295103 of=crypt_squash.data</pre>
</li>
<li>
<p><b>Erstellen eines  Loop-Devices:</b> Mittels <tt>losetup</tt> entsteht jetzt eine der Datei zugeordnete Blockdevice:</p>
<pre>losetup /dev/loop0 crypt_squash.data</pre>
<p>Sollte <tt>/dev/loop0</tt> bereits besetzt sein, zeigt <tt>losetup -f</tt> freie Loop-Devices.</p>
</li>
<li>
<p><b>Erstellen des Containers:</b> Auf der Loop-Datei wird nun das verschlüsselte Blockgerät vorbereitet:</p>
<pre>cryptsetup luksFormat -c aes-cbc-essiv:sha256 -s 256 -y /dev/loop0</pre>
</li>
<li>
<p><b>Öffnen des verschlüsselten Gerätes:</b> Nun wird die verschlüsselte Gerätedatei geöffnent. Das Resultat ist ein Blockdevide <tt>/dev/mapper/cryptdvd</tt> auf das geschrieben werden und von dem gelesen werden kann. Die Verschlüsselung erfogt hier komplett transparent:</p>
<pre>sudo cryptsetup luksOpen /dev/loop0 cryptdvd</pre>
</li>
<li>
<p><b>Erstellen des komprimierten Dateisystems:</b> In <tt>/dev/mapper/cryptdvd</tt> entsteht nun das komprimierte Dateisystem SquashFS. Weil wir in eine Gerätedatei schreiben,  muss explizit <tt>-noappend</tt> angegeben werden, um diese zu überschreiben. Die restlichen Parameter sind Kosmetik: Ich bevorzuge noch aus Kompatibilitätsgründen Komprimierung mit <tt>gzip</tt> und möchte nur einen Prozessor einspannen.</p>
<pre>mksquashfs Projekte WichtigeDaten /dev/mapper/cryptdvd  -nolzma -check_data -noappend -processors 1</pre>
</li>
</ul>
<h3>Test des Containers</h3>
<p>Nun ist der Test des Containers dran. Funktioniert das Backup so, wie wir es uns vorgestellt haben?</p>
<ul>
<li>
<p><b>Mounten des Containers:</b> Das Cryptdevice existiert ja noch, mounten wir es einfach:</p>
<pre>mkdir /tmp/cryptdvd
mount /dev/mapper/cryptdvd /tmp/cryptdvd/</pre>
<p>Falls ein unbekanntes Dateisystem angegeben wird, sollten Sie sicherstellen, dass das SquashFS-Modul geladen ist und gegebenenfalls den Dateisystemtyp angeben:</p>
<pre>mount -t squashfs /dev/mapper/cryptdvd /tmp/cryptdvd/</pre>
</li>
<li>
<p><b>Unmounten:</b></p>
<pre>umount /dev/mapper/cryptdvd</pre>
</li>
<li>
<p><b>Auflösen des Cryptdevices:</b></p>
<pre>cryptsetup luksClose /dev/mapper/cryptdvd</pre>
</li>
<li>
<p><b>Lösen des Loop-Devices:</b> So stellen wir sicher, dass auch alle Daten im Container gelandet sind und wir gefahrlos brennen können:</p>
<pre>losetup -d /dev/loop0</pre>
</li>
</ul>
<h3>Brennen der DVD</h3>
<ul>
<li>
<p><b>Brennen der DVD:</b> <tt>cdrecord</tt> ist es herzlich egal, was für Daten da gebrannt werden, es bannt unseren Container 1:1 auf den optischen Datenträger:</p>
<pre>cdrecord -v -speed=4 -dev=/dev/scd1 crypt_squash.data</pre>
</li>
</ul>
<h3>Test der gebrannten DVD &#8212; Mounten und Unmounten des Backups</h3>
<ul>
<li>
<p><b>Loop-Device erstellen:</b> Zunächst entsteht ein Loopdevice auf der gebrannten DVD. Es könnte eigentlich auch ohne funktionieren:</p>
<pre>losetup /dev/loop1 /dev/scd1</pre>
</li>
<li>
<p><b>Öffnen des Crypt-Devices:</b> Jetzt wird die Datei <tt>/dev/mapper/cryptdvd</tt> erzeugt, welche die Entschlüsselung transparent macht. Hier ist die Eingabe des Passwortes erforderlich:</p>
<pre>sudo cryptsetup luksOpen /dev/loop1 cryptdvd</pre>
</li>
<li>
<p><b>Mounten des Dateisystems:</b> Möglicherweise ist die Angabe des Dateisystemtyps erforderlich:</p>
<pre>mount /dev/mapper/cryptdvd /tmp/cryptdvd/</pre>
<li>
<p><b>Unmounten wie oben:</b></p>
<pre>umount /dev/mapper/cryptdvd</pre>
<li>
<p><b>Lösen des Crypt-Devices:</b></p>
<pre>cryptsetup luksClose /dev/mapper/cryptdvd</pre>
</li>
<li>
<p><b>Lösen des Loop-Devices:</b></p>
<pre>losetup -d /dev/loop1</pre>
<p>Nun kann die DVD entnommen werden.</p>
</li>
</ul>
<p>Die meisten der angegebenen Schritte lassen sich leicht automatisieren, so dass sichere Backups sehr einfach durchgeführt werden können und der Zugriff genauso einfach möglich ist. Ein Manko bleibt: Für das Hinzufügen neuer LUKS-Schlüssel muss der Container natürlich mit <tt>dd</tt> auf Festplatte transferiert und in ein Loop-Device  überführt werden, bevor er neu gebrannt wird.</p>
<p><b>Nachtrag I:</b> Ich stelle diesen Artikel hiermit unter BY-SA zur Verfügung. Wer möchte, kann ihn also per Copy und Paste ins UbuntuUsers-Wiki (oder andere Wikis) übernehmen und dort weiterbearbeiten, solange auf mich als Urheber verwiesen wird. Viel Spaß damit! <a href="http://creativecommons.org/licenses/by-sa/3.0/de/">creativecommons.org/licenses/by-sa/3.0/de/</a></p>
<p><b>Nachtrag II:</b> Da einige Community-Wikis NC-BY-SA verwenden und BY-SA nicht nach NC-BY-SA überführt werden kann, zusätzliche Bereitstellung unter NC-BY-SA. Viel Spaß damit! <a href="http://creativecommons.org/licenses/by-nc-sa/3.0/de/">creativecommons.org/licenses/by-nc-sa/3.0/de/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2009/02/04/verschlusselte-komprimierte-dvd-backups-unter-linux/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

