<?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>Simlau.net Blog &#187; Linux</title>
	<atom:link href="http://blog.simlau.net/category/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.simlau.net</link>
	<description>Gedanken, Impressionen und Technikkrams</description>
	<lastBuildDate>Thu, 15 Mar 2012 07:23:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Zone-Transfer von PowerDNS zu BIND9</title>
		<link>http://blog.simlau.net/zone-transfer-von-powerdns-zu-bind9.html</link>
		<comments>http://blog.simlau.net/zone-transfer-von-powerdns-zu-bind9.html#comments</comments>
		<pubDate>Wed, 14 Mar 2012 21:57:51 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.simlau.net/?p=2405</guid>
		<description><![CDATA[DNS-Verwaltung ist immer so eine Sache. Ich baue meine Setups mittlerweile mit PowerDNS und BIND9 zusammen. PowerDNS dient als &#8220;versteckter&#8221; Master, der an sich nicht auf externe Anfragen antwortet. Die BIND9 Server beziehen ihre Zonen via Zonetransfer vom PowerDNS. Dazu kommt dann noch PowerAdmin. Somit hat man ein DNS-Setup mit Webinterface (und MySQL-Backend) und alle [...]]]></description>
			<content:encoded><![CDATA[<p>DNS-Verwaltung ist immer so eine Sache. Ich baue meine Setups mittlerweile mit PowerDNS und BIND9 zusammen. PowerDNS dient als &#8220;versteckter&#8221; Master, der an sich nicht auf externe Anfragen antwortet. Die BIND9 Server beziehen ihre Zonen via Zonetransfer vom PowerDNS. Dazu kommt dann noch <a href="https://www.poweradmin.org/trac/">PowerAdmin</a>. Somit hat man ein DNS-Setup mit Webinterface (und MySQL-Backend) und alle Vorteile in Sachen Geschwindigkeit von BIND9 bleiben erhalten.</p>
<p>Irgendwie muss die Slave-Config auf die BIND9-Slave Maschinen kommen. Hierzu ein kleines, simples PHP-Script.
<pre class="brush: php; title: ; notranslate">#!/usr/bin/php
&lt;?php
/**
 * Generiert eine BIND9 Slave Konfiguration aus
 * der PowerDNS-Master Datenbank.
 *
 * @author Simon Lauger &lt;simon@lauger.name&gt;
 * @date   11.06.2011
 */

$dsn    = 'mysql:dbname=pdns;host=127.0.0.1';
$user   = 'root';
$pass   = 'password';
$master = '127.0.0.1';

try {
    $dbh = new PDO($dsn, $user, $pass);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e-&gt;getMessage();
    exit;
}

$result = $dbh-&gt;query('SELECT name FROM domains;');

foreach ($result as $row):
echo 'zone &quot;'.$row['name'].'&quot; {
	type slave;
	file &quot;'.$row['name'].'.hosts&quot;;
	masters {
		'.$master.';
	};
};';
echo &quot;\n&quot;;
endforeach;

?&gt;</pre>
<p>Diese Konfiguration wird komplett via Puppet auf unsere BIND9 Slaves verteilt.</p>
<pre class="brush: bash; title: ; notranslate">class bind9 {
...
        file { &quot;/etc/bind/named.conf.local&quot;:
                mode =&gt; 640,
                owner =&gt; root,
                group =&gt; bind,
                ensure =&gt; file,
                source =&gt; &quot;puppet:///modules/bind9/named.conf.local&quot;,
        }
...
}</pre>
<p>Um auch Konfigurationsänderungen zu berücksichtigen sollte zudem noch ein Reload des BIND9s via Cronjob eingerichtet werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simlau.net/zone-transfer-von-powerdns-zu-bind9.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Datenbank revisonieren</title>
		<link>http://blog.simlau.net/mysql-datenbank-revisonieren.html</link>
		<comments>http://blog.simlau.net/mysql-datenbank-revisonieren.html#comments</comments>
		<pubDate>Tue, 07 Feb 2012 22:08:59 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.simlau.net/?p=2377</guid>
		<description><![CDATA[Ich bin derzeit dabei eine einfache Entwicklungsumgebung aufzubauen. Dabei habe ich nach einer vernünftigen Möglichkeit gesucht um Datenbankänderungen zu revisionieren, sprich alle Änderungen in der Struktur festzuhalten. Niemand möchte alle SQL-Befehle für Strukturänderungen manuell dokumentieren. Ein kleiner Lebensretter ist hier das Perl Script &#8220;mysqldiff&#8221;. Das Tool kann mehrere Datenbanken miteinander vergleichen und gibt die Änderungen [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bin derzeit dabei eine einfache Entwicklungsumgebung aufzubauen. Dabei habe ich nach einer vernünftigen Möglichkeit gesucht um Datenbankänderungen zu revisionieren, sprich alle Änderungen in der Struktur festzuhalten.</p>
<p>Niemand möchte alle SQL-Befehle für Strukturänderungen manuell dokumentieren. Ein kleiner Lebensretter ist hier das Perl Script &#8220;mysqldiff&#8221;. Das Tool kann mehrere Datenbanken miteinander vergleichen und gibt die Änderungen als SQL-Befehle zurück. Das bedeutet natürlich nicht, das man dadurch eine saubere Softwaredokumentation ersetzen kann.</p>
<pre class="brush: plain; title: ; notranslate">wget http://adamspiers.org/computing/mysqldiff/MySQL-Diff-0.30.tar.gz
tar -xf MySQL-Diff-0.30.tar.gz
cd MySQL-Diff-0.30
perl ./Makefile.PL
make
make install</pre>
<p>Zudem wird noch das Paket Class::MakeMethods::Template::Hash aus dem CPAN benötigt.</p>
<pre class="brush: plain; title: ; notranslate">cpan Class::MakeMethods::Template::Hash</pre>
<p>Gehen wir von der folgenden Situation aus: eine Datenbank &#8220;live&#8221; mit den Live-Daten sowie eine Datenbank &#8220;staging&#8221; mit Test-Daten. In der Tabelle &#8220;test_1&#8243; in der Staging-Datenbank wurde das zusätzliche Feld &#8220;id&#8221; hinzugefügt.</p>
<pre class="brush: sql; title: ; notranslate">CREATE DATABASE live;
CREATE TABLE live.test_1 (
  id int (11)
);

CREATE DATABASE staging;
CREATE TABLE staging.test_1 (
  id int (11),
  id2 int(11)
);</pre>
<p>Nun können wir mittels mysqldiff die beiden Datenbanken miteinander vergleichen lassen. Zurück bekommen wir eine Liste mit SQL-Queries, um die Live-Datenbank auf den aktuellen Stand zu bringen.</p>
<pre class="brush: plain; title: ; notranslate">root@dev01:~# mysqldiff -h localhost -u root -p gX8AmLuO8hWpqau3 live staging
## mysqldiff 0.30
##
## run on Tue Feb  7 22:48:32 2012
##
## ---   db: live (host=localhost user=root)
## +++   db: staging (host=localhost user=root)

ALTER TABLE `test_1` ADD COLUMN `id2` int(11) DEFAULT NULL;</pre>
<p>Bestenfalls lässt man das ganze nun automatisiert in ein GIT/SVN Repository laufen. Zum überspielen der Änderungen bietet das Tool auch die Möglichkeit die Änderungen direkt (mittels &#8211;apply) auf die Live-Datenbank zu überspielen, jeweils mit einer Abfrage vor dem Absetzen jedes einzelnen SQL-Querys.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simlau.net/mysql-datenbank-revisonieren.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configure Parameter für PHP 5.3.6</title>
		<link>http://blog.simlau.net/configure-fuer-php-5-3-6.html</link>
		<comments>http://blog.simlau.net/configure-fuer-php-5-3-6.html#comments</comments>
		<pubDate>Wed, 29 Jun 2011 18:29:17 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.simlau.net/?p=2333</guid>
		<description><![CDATA[Etwas, an dem ich auch schon etwas länger sitze. Die optimale Konfiguration von PHP. Ich gebe zu, auch mit dem Hintergedanken zur Zend Certified Engineer Zertifizierung, die ich durchstarten werde, sobald ich wieder etwas Luft habe. Man lernt eben beim stöbern im Manual immer mal wieder was neues. Sicherlich nicht perfekt, aber ich denke ein [...]]]></description>
			<content:encoded><![CDATA[<p>Etwas, an dem ich auch schon etwas länger sitze. Die optimale Konfiguration von PHP. Ich gebe zu, auch mit dem Hintergedanken zur Zend Certified Engineer Zertifizierung, die ich durchstarten werde, sobald ich wieder etwas Luft habe. Man lernt eben beim stöbern im Manual immer mal wieder was neues.</p>
<p>Sicherlich nicht perfekt, aber ich denke ein guter Anfang. Folgendes Setup läuft derzeit produktiv auf einem Ubuntu 8.04 LTS mit Lighttpd bei HostEurope (und warscheinlich in Zukunft auch auf einigen weiteren unserer Webserver):</p>
<pre class="brush: plain; title: ; notranslate">'./configure' \
'--prefix=/usr' \
'--with-config-file-path=/etc/php5/cgi/' \
'--with-config-file-scan-dir=/etc/php5/cgi/conf.d/' \
'--mandir=/usr/share/man' \
'--disable-debug' \
'--with-regex=php' \
'--disable-rpath' \
'--disable-static' \
'--with-pic' \
'--with-layout=GNU' \
'--with-pear=/usr/share/php' \
'--enable-calendar' \
'--enable-sysvsem' \
'--enable-sysvshm' \
'--enable-sysvmsg' \
'--enable-bcmath=shared' \
'--with-bz2=shared' \
'--enable-ctype=shared' \
'--without-gdbm' \
'--with-iconv=shared' \
'--enable-exif=shared' \
'--enable-ftp=shared' \
'--with-gettext=shared' \
'--enable-mbstring=shared' \
'--enable-mbregex' \
'--with-pcre-regex=/usr' \
'--enable-shmop=shared' \
'--enable-sockets' \
'--enable-wddx=shared' \
'--with-libxml-dir=/usr' \
'--with-zlib' \
'--with-kerberos=shared,/usr' \
'--with-openssl=/usr' \
'--enable-soap=shared' \
'--enable-zip=shared' \
'--with-exec-dir=/usr/local/php/bin' \
'--without-mm' \
'--with-curl=shared,/usr' \
'--with-zlib-dir=/usr' \
'--with-gd=shared,/usr' \
'--with-gmp=shared,/usr' \
'--with-jpeg-dir=/usr' \
'--with-xpm-dir=/usr/X11R6' \
'--with-png-dir=/usr' \
'--with-freetype-dir=/usr' \
'--with-t1lib=shared,/usr' \
'--with-ldap=shared,/usr' \
'--with-ldap-sasl' \
'--with-mhash=shared' \
'--with-mysql=mysqlnd' \
'--with-mysqli=mysqlnd' \
'--with-pspell=shared,/usr' \
'--with-xsl=shared,/usr' \
'--with-snmp=shared,/usr' \
'--with-sqlite=shared,/usr' \
'--with-mssql=shared,/usr' \
'--with-tidy=shared,/usr' \
'--with-xmlrpc=shared' \
'--with-pgsql=shared,/usr' \
'--enable-gd-native-ttf' \
'--with-openssl-dir=/usr' \
'--enable-gd-jis-conv' \
'--enable-json' \
'--with-mcrypt=shared,/usr' \
'--enable-pcntl=shared' \
'--enable-pdo' \
'--with-pdo-mysql=mysqlnd' \
'--with-pdo-sqlite' \
'--with-pdo-pgsql=shared,/usr' \
'--enable-xmlreader=shared' \
'--with-tsrm-pthreads' \
'--with-recode=shared' \
'--disable-phar' \
'--disable-posix' \
'--disable-short-tags' \
'--enable-fast-install'</pre>
<p>Und nun die Gedanken dahinter:</p>
<ul>
<li>Grundsätzlich erstmal ein möglichst schlanker Core, indem unnötiges entfernt wird</li>
<li>CGI/FastCGI, da das System mit Lighttpd und mod_fastcgi betrieben wird</li>
<li>SQLite und MySQL/MySQLi werden als meistbenutzte Datenbankinterfaces fest implementiert</li>
<li>Ebenso die PDO-Datenbanktreiber für MySQL und SQLite</li>
<li>Für die MySQL/MySQLi-Funktionen sowie für PDO werden die neuen, nativen &#8220;mysqlnd&#8221; Treiber verwandt. Diese bieten eine verbesserte Performance und sind Ressourcenschonender als libmysql</li>
<li>Aus Sicherheitsgründen werden die Posix-Funktionen deaktiviert, die PCNTL-Funktionen  als Shared gebaut (für CLI-Zwecke)</li>
<li>PHAR wird deaktiviert. Ist zwar eine schöne Idee, aber auf Produktiv-Systemen nicht zu gebrauchen</li>
<li>Zum Rest: Was ansonsten nicht auf allen Webseiten/virtuellen Hosts gebraucht wird und somit nicht direkt im Core einkompiliert sein muss, wird als Shared Module kompiliert</li>
</ul>
<p>Gebaut wird das ganze für Debian/Ubuntu folgendermaßen:</p>
<pre class="brush: plain; title: ; notranslate">cd /usr/src
wget http://de.php.net/distributions/php-5.3.6.tar.gz
tar -vxf php-5.3.6.tar.gz
cd php*
./configure...
make
checkinstall -D --install=no --fstrans=no --maintainer=cmon2k@sysadmin.local --reset-uids=yes --nodoc --pkgname=php5 --pkgversion=5.3.6 --pkgrelease=t4e-`date +%Y%m%d%H%M` --arch=amd64
dpkg -i php5_*.deb
</pre>
<p>Abschließend noch einige PEAR-Pakete, einige PECL-Extensions (APC usw.) nachinstallieren und man hat schon ein recht nettes PHP-Setup. Natürlich sollte man vor allen Arbeiten nicht vergessen die alten PHP-Pakete aus den Distributions-Repositorys zu deinstallieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simlau.net/configure-fuer-php-5-3-6.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP 5.3 und PHP 6.0 auf Debian Lenny 5.0</title>
		<link>http://blog.simlau.net/php-5-3-und-php-6-0-auf-debian-lenny-5-0.html</link>
		<comments>http://blog.simlau.net/php-5-3-und-php-6-0-auf-debian-lenny-5-0.html#comments</comments>
		<pubDate>Thu, 24 Sep 2009 08:00:36 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Debian]]></category>

		<guid isPermaLink="false">http://blog.simlau.net/?p=1599</guid>
		<description><![CDATA[PHP 5.3 und PHP 6.0 enthalten viele Neuerungen, die vorallem im Bereich der Objektorientierung teilweise recht praktisch sind. So wurden mit PHP 5.3 Beispielweise Namespaces und Late Static Bindings integriert. In PHP 6.0 werden überflüssige Funktionen wie register_globals, magic_quotes, register_long_arrays und der safe_mode abgeschafft, dafür gibt es einen vollständigen Unicode Support. Leider kommt man bei [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://php.net/"><img src="http://blog.simlau.net/wp-files/PHP_Logo.png" alt="PHP Logo" title="PHP Logo" width="145" height="77" class="alignright size-full wp-image-1604" style="float: right;" /></a>PHP 5.3 und PHP 6.0 enthalten viele Neuerungen, die vorallem im Bereich der Objektorientierung teilweise recht praktisch sind.</p>
<p>So wurden mit PHP 5.3 Beispielweise Namespaces und Late Static Bindings integriert. In PHP 6.0 werden überflüssige Funktionen wie register_globals, magic_quotes, register_long_arrays und der safe_mode abgeschafft, dafür gibt es einen vollständigen Unicode Support.</p>
<p>Leider kommt man bei diversen Linux Distributionen als PHP Entwickler immer nur mit recht viel Geduld zum Genuss der teilweise recht praktischen Neuerungen.<br />
Deshalb gibt es die Möglichkeit PHP manuell aus dem Quellcode heraus zu installieren, bzw. sich selbst ein kleines .deb-Paket zu basteln.</p>
<p>Das ganze wurde auf einem Debian Lenny getestet, sollte sich aber mit kleineren Änderungen (ggf. andere Paketnamen bei den Abhängigkeiten) auch auf ähnliche Systeme wie Ubuntu übertragen lassen.</p>
<p><span id="more-1599"></span></p>
<p><strong>Vorarbeiten</strong><br />
Vor einer manuellen Installation sollten alle Pakete von PHP komplett entfernt werden.</p>
<blockquote><p><code>apt-get --purge remove php5 php5-* libapache2-mod-php5</code></p></blockquote>
<p>Der folgende Prozess erstellt ein &#8220;All-in-One&#8221; Paket, welches bereits alle zusätzlichen Erweiterungen (wie php5-curl, php5-mysql usw.) enthält.</p>
<p>Aufgrund dessen kann es eventuell zu mehren Abhänigkeitsproblemen bei Applikationen wie phpMyAdmin und anderen aus den Repositorys installieren Paketen kommen. Als Workaround kann man diese Pakete mit mittels &#8211;force Parameter installieren, oder aber sie einfach nur mehr komplett per Hand pflegen.</p>
<p><strong>Bau des Paketes</strong><br />
Um PHP kompilieren zu können, werden für die Abhängigkeiten zunächst einige Pakete benötigt. </p>
<blockquote><p><code>apt-get install gcc automake make checkinstall libjpeg62-dev libpng12-dev apache2-prefork-dev libbz2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libxpm-dev libxft-dev libt1-dev libgd2-xpm-dev libgmp3-dev libsasl2-dev freetds-dev libmysqlclient15-dev unixodbc-dev libpspell-dev librecode-dev libsnmp-dev libsqlite0-dev libtidy-dev libxslt1-dev x11proto-core-dev libxau-dev libpthread-stubs0 libpthread-stubs0-dev libxdmcp-dev libxcb1-dev libxcb-xlib0-dev x11proto-input-dev x11proto-kb-dev xtrans-dev libx11-dev libxpm-dev libexpat1-dev libfreetype6-dev pkg-config libfontconfig1-dev apache2-mpm-prefork apache2-utils apache2.2-common comerr-dev libapr1 libapr1-dev libaprutil1 libaprutil1-dev libaspell-dev freetds-common libdb4.6-dev libgmpxx4ldbl libice-dev libidn11-dev libkadm55 libkrb5-dev libldap2-dev libodbcinstq1c2 libpcre3-dev libpq-dev libsensors-dev libsm-dev libsnmp-perl libsqlite3-dev libssl-dev libsybdb5 libt1-5 libtidy-0.99-0 libwrap0-dev libxaw7-dev libxaw7-dev libxext-dev libxmu-dev libxmu-headers libxrender-dev libxt-dev uuid-dev x11proto-render-dev x11proto-xext-dev libmcrypt4 libmcrypt-dev libmhash-dev</code></p></blockquote>
<p>Zusätzlich, wenn PHP6 installiert wird ist noch das folgende Paket von nöten:</p>
<blockquote><p><code>apt-get install libicu-dev</code></p></blockquote>
<p>Nun kann man den Sourcecode von PHP 5.3 herunterladen und entpacken.</p>
<blockquote><p><code>cd /usr/src &#038;&#038; wget http://de3.php.net/get/php-5.3.0.tar.gz/from/de.php.net/mirror<br />
tar xf php-5.3.0.tar.gz &#038;&#038; cd php-5.3.0</code></p></blockquote>
<p>Bzw. wenn man PHP 6.0 aus den täglichen Snapshots installieren möchte:</p>
<blockquote><p><code>cd /usr/src &#038;&#038; wget http://snaps.php.net/php6.0-latest.tar.gz<br />
tar xf php6.0-latest.tar.gz &#038;&#038; cd php6.0-*/</code></p></blockquote>
<p>Nun ist es Zeit für das configure Script. Für PHP 5.3 führt man hier folgendes aus:</p>
<blockquote><p><code>./configure --prefix=/usr --with-apxs2=/usr/bin/apxs2 --with-config-file-path=/etc/php5/apache2 --with-config-file-scan-dir=/etc/php5/apache2/conf.d --mandir=/usr/share/man --disable-debug --with-regex=php --disable-rpath --disable-static --with-pic --with-layout=GNU --with-pear=/usr/share/php --enable-calendar --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-bcmath --with-bz2 --enable-ctype --with-db4 --without-gdbm --with-iconv --enable-exif --enable-ftp --with-gettext --enable-mbstring --with-pcre-regex=/usr --enable-shmop --enable-sockets --enable-wddx --with-libxml-dir=/usr --with-zlib --with-kerberos=/usr --with-openssl=/usr --enable-soap --enable-zip --with-exec-dir=/usr/lib/php5/libexec --without-mm --with-curl=shared,/usr --with-zlib-dir=/usr --with-gd=shared,/usr --enable-gd-native-ttf --with-gmp=shared,/usr --with-jpeg-dir=shared,/usr --with-xpm-dir=shared,/usr/X11R6 --with-png-dir=shared,/usr --with-freetype-dir=shared,/usr --with-t1lib=shared,/usr --with-ldap=shared,/usr --with-ldap-sasl=/usr --with-mhash=shared,/usr --with-mysql=shared,/usr --with-mysqli=shared,/usr/bin/mysql_config --with-pspell=shared,/usr --with-unixODBC=shared,/usr --with-xsl=shared,/usr --with-snmp=shared,/usr --with-sqlite=shared,/usr --with-mssql=shared,/usr --with-tidy=shared,/usr --with-xmlrpc=shared --with-pgsql=shared,/usr --enable-gd-native-ttf --enable-dba=shared --with-openssl-dir=shared,/usr --enable-gd-jis-conv --enable-json --with-mcrypt=shared,/usr --enable-pcntl --with-pdo-mysql --with-pdo-odbc=unixODBC,/usr --with-pdo-pgsql=shared,/usr --with-pdo-sqlite --enable-xmlreader --with-tsrm-pthreads</code></p></blockquote>
<p>Für PHP 6.0, mit minimalen Änderungen:</p>
<blockquote><p><code>./configure --prefix=/usr --with-apxs2=/usr/bin/apxs2 --with-config-file-path=/etc/php6/apache2 --with-config-file-scan-dir=/etc/php6/apache2/conf.d --mandir=/usr/share/man --disable-debug --with-regex=php --disable-rpath --disable-static --with-pic --with-layout=GNU --enable-calendar --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-bcmath --with-bz2 --enable-ctype --with-db4 --without-gdbm --with-iconv --enable-exif --enable-ftp --with-gettext --enable-mbstring --with-pcre-regex=/usr --enable-shmop --enable-sockets --enable-wddx --with-libxml-dir=/usr --with-zlib --with-kerberos=/usr --with-openssl=/usr --enable-soap --enable-zip --libexecdir=/usr/lib/php6/libexec --without-mm --with-curl=shared,/usr --with-zlib-dir=/usr --with-gd --enable-gd-native-ttf --with-gmp=shared,/usr --with-jpeg-dir=shared,/usr --with-xpm-dir=shared,/usr/X11R6 --with-png-dir=shared,/usr --with-freetype-dir=shared,/usr --with-t1lib=shared,/usr --with-ldap=shared,/usr --with-ldap-sasl=/usr --with-mhash=shared,/usr --with-mysql=shared,/usr --with-mysqli=shared,/usr/bin/mysql_config --with-pspell=shared,/usr --with-unixODBC=shared,/usr --with-xsl=shared,/usr --with-snmp=shared,/usr --with-sqlite=shared,/usr --enable-sqlite-utf8 --with-mssql=shared,/usr --with-tidy=shared,/usr --with-xmlrpc=shared --with-pgsql=shared,/usr --enable-gd-native-ttf --with-icu-dir=/usr --enable-dba=shared --with-openssl-dir=shared,/usr --enable-gd-jis-conv --enable-json --with-mcrypt=shared,/usr --enable-pcntl --with-pdo-mysql --with-pdo-odbc=unixODBC,/usr --with-pdo-pgsql=shared,/usr --with-pdo-sqlite --enable-xmlreader --with-tsrm-pthreads</code></p></blockquote>
<p>Jetzt kann man den make Befehl ausführen. Hat man einen Dualcore/Quadcore Prozessor, kann man den Prozess mittels dem Parameter -jX (X für die Anzahl an Kernen) beschleunigen.</p>
<blockquote><p><code>make -j2</code></p></blockquote>
<p>Um im letzten Schritt das Debian Paket zu erstellen, gibt man für PHP 5.3 den folgenden Befehl ein:</p>
<blockquote><p><code>checkinstall -D --install=no --fstrans=no --maintainer=root@example.org --reset-uids=yes --nodoc --pkgname=php5 --pkgversion=5.3.0 --pkgrelease=`date +%Y%m%d%H%M` --arch=amd64</code></p></blockquote>
<p>Oder für Version 6.0:</p>
<blockquote><p><code>sudo checkinstall -D --install=no --fstrans=no --maintainer=root@example.org --reset-uids=yes --nodoc --pkgname=php6 --pkgversion=6.0.0-dev --pkgrelease=`date +%Y%m%d%H%M` --arch=amd64</code></p></blockquote>
<p>Sollte man kein 64 Bit Debian/Ubuntu betreiben, so muss man &#8211;arch=amd64 entsprechend anpassen (auf i386, i486 oder i586 usw.). Der Switch &#8211;maintainer sollte auch noch an die eigene E-Mail Adresse angepasst werden.</p>
<p>checkinstall frägt auch noch nach einer Beschreibung des Paketes und zusätzlichen Infos. Dies kann man aber alles getrost ignorieren und mit Enter bestätigen. </p>
<p><strong>Fehler bei checkinstall</strong><br />
Bricht checkinstall mit einem Fehler ala &#8220;Error: At least one `LoadModule&#8217; directive already has to exist&#8230;&#8221;, liegt das daran, dass die httpd.conf des Apache2 Webservers leer ist. Hier gibt es einen kleinen Workaround:</p>
<blockquote><p><code>echo "#LoadModule directive to aid module installations" >> /etc/apache2/httpd.conf<br />
echo "#LoadModule dummy_module /usr/lib/apache2/modules/mod_dummy.so" >> /etc/apache2/httpd.conf</code></p></blockquote>
<p>Anschließend checkinstall erneut ausführen.</p>
<p><strong>Installation und Test</strong><br />
Ist der Prozess abgeschlossen befindet sich im aktuellen Verzeichnis ein Paket, welches man wie folgt installieren kann:</p>
<blockquote><p><code>dpkg -i *.deb</code></p></blockquote>
<p>Um zu testen ob PHP korrekt installiert wurde kann man in der Shell den Befehl &#8220;php -v&#8221; ausführen. Angezeigt werden sollte die entsprechende Version und das Build Datum, z. B. &#8220;PHP 5.3.0 (cli) (built: Sep 23 2009 00:00:00)&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simlau.net/php-5-3-und-php-6-0-auf-debian-lenny-5-0.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Kon-Boot &#8211; Windows/Linux Login umgehen</title>
		<link>http://blog.simlau.net/kon-boot-windowslinux-login-umgehen.html</link>
		<comments>http://blog.simlau.net/kon-boot-windowslinux-login-umgehen.html#comments</comments>
		<pubDate>Thu, 30 Jul 2009 20:32:32 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.simlau.net/?p=1548</guid>
		<description><![CDATA[Kon-Boot ist eine gerade mal 8 Kilobyte große Live Disc mit der man Passwortabfragen bei Windows und Linux Systemen komplett umgehen kann. Das besondere: das Passwort wird nicht zurückgesetzt, es wird Live per Speichermodifzierung umgangen. Hier ein Video von der Website des Entwicklers, das die Funktionalität von Kon-Boot auf einem Debian Linux demonstriert (vermutlich ein [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.simlau.net/wp-files/debiansmall.png"><img src="http://blog.simlau.net/wp-files/debiansmall.png" alt="Debian" title="Debian" width="70" height="86" class="alignright size-full wp-image-1109" /></a><a href="http://www.piotrbania.com/all/kon-boot/">Kon-Boot</a> ist eine gerade mal 8 Kilobyte große Live Disc mit der man Passwortabfragen bei Windows und Linux Systemen komplett umgehen kann. Das besondere: das Passwort wird nicht zurückgesetzt, es wird Live per Speichermodifzierung umgangen.</p>
<p>Hier ein Video von der Website des Entwicklers, das die Funktionalität von Kon-Boot auf einem Debian Linux demonstriert (vermutlich ein Etch):</p>
<div style="text-align: center; margin: auto"><object type="application/x-shockwave-flash" style="width:425px; height:344px;" data="http://www.youtube.com/v/jTZX_ldU1MQ"><param name="movie" value="http://www.youtube.com/v/jTZX_ldU1MQ" /></object></div>
<p>Das System wird mittels der KonBoot Live Disc gestartet und normal gebootet. Beim Login Prompt gibt man einfach den Usernamen &#8220;kon-usr&#8221; ein und hat direkt Root-Zugriff. Hilfreich wenn beispielsweise ein Passwort für den GRUB Bootloader vergeben wurde und so ein init=/bin/bash nicht direkt klappt.</p>
<p>Bei einem <a href="http://www.youtube.com/watch?v=NTimALz5kRA">Windows System</a> entfällt das Login Prompt komplett und man landet ohne weiteres mucksen direkt auf dem Desktop, natürlich als Administrator.</p>
<p>Kon-Boot unterstützt, wie schon angesprochen viele Systeme von Windows Server 2008 über Windows XP bis hin zu Windows 7 und nahezu alle verfügbaren Linux Distributionen. Leider ausschließlich 32 Bit Systeme.</p>
<p>Was mich absolut an diesem Programm fasziniert ist die Einfachheit. CD einlegen und fertig. Mehr ist nicht zu tun. Schützen kann man sich dagegen nicht wirklich. Der einzige wirksame Schutz, und das gilt sowieso generell: Die wichtigen und privaten Daten verschlüsseln (z. B. mittels DM-Crypt oder TrueCrypt).</p>
<p>Herunterladen kann man das ganze auf <a href="http://www.piotrbania.com/all/kon-boot/">piotrbania.com</a>, wahlweiße als Disketten-Image oder CD.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simlau.net/kon-boot-windowslinux-login-umgehen.html/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Teeworlds (Teewars)</title>
		<link>http://blog.simlau.net/teeworlds-teewars.html</link>
		<comments>http://blog.simlau.net/teeworlds-teewars.html#comments</comments>
		<pubDate>Sun, 24 May 2009 16:44:25 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Gaming]]></category>

		<guid isPermaLink="false">http://blog.simlau.net/?p=1113</guid>
		<description><![CDATA[Teeworlds ist ein OpenSource Spiel, dass etwas an ein Jump and Run Spiel erinnert. Betrachtet man das Spiel näher, stellt man aber fest, dass es außerdem Look and Feel fast gar nichts mit einem klassischen Jump &#8216;n Run Spiel gemeinsam hat. Es geht darum, mit seinem kleinen &#8220;Tee&#8221; &#8211; einer Figur die im ersten Moment [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.simlau.net/wp-files/splashtee.png" alt="Teeworlds (Teewars)" style="float: right;" />Teeworlds ist ein OpenSource Spiel, dass etwas an ein Jump and Run Spiel erinnert. Betrachtet man das Spiel näher, stellt man aber fest, dass es außerdem Look and Feel fast gar nichts mit einem klassischen Jump &#8216;n Run Spiel gemeinsam hat.</p>
<p>Es geht darum, mit seinem kleinen &#8220;Tee&#8221; &#8211; einer Figur die im ersten Moment aussieht wie ein kleiner Ball &#8211; andere Gegner mit verschiedenen Waffen in die Schlucht zu Schlagen. Dabei existieren 3 Spielmodi: Deathmatch, Team Death Match und Capture the Flag.</p>
<p>Als Waffen existieren dabei als &#8220;Grundwaffen&#8221; eine Pistole und ein Hammer. Im Lauf des Spiels lassen sich auf den Maps aber auch andere Waffen wie wie einen Raketenwerfer, eine Laser oder ein Ninja Schwert einsammeln.</p>
<p>Gesteuert wird das Spiel mit Maus und Tastatur. Während man mit der linken Hand den &#8220;Tee&#8221; mit dem gewohnter W/A/S/D durch die Welt steuert, wird mit der Maus gezielt und geschossen.<br />
<span id="more-1113"></span></p>
<p><a href="http://blog.simlau.net/wp-files/teeworlds1.png" rel="lightbox"><img src="http://blog.simlau.net/wp-files/teeworlds1-300x225.png" alt="Teeworlds" title="Teeworlds" width="300" height="225" class="aligncenter size-medium wp-image-1111" /></a> <a href="http://blog.simlau.net/wp-files/teeworlds2.png" rel="lightbox"><img src="http://blog.simlau.net/wp-files/teeworlds2-300x225.png" alt="Teeworlds" title="Teeworlds" width="300" height="225" class="aligncenter size-medium wp-image-1110" /></a></p>
<p>Teeworlds hat eine sehr große Community, die fleißig Mods und neue Maps erstellt. Nicht zuletzt ist es Opensource (und somit frei erhältlich). Für mich ist es ein sehr schönes Spiel, für die kurze Langeweile zwischendurch.</p>
<p><strong>Download</strong><br />
Das Spiel ist sowohl für Windows, als auch für Linux und Mac OS X verfügbar. Benutzer von Debian und Ubuntu können Teeworlds direkt via apt Installiren. Die betreffenden Pakete heißen teeworlds und teeworlds-data für den Client, sowie teeworlds-server für den Server.</p>
<p>Alle anderen können Teeworlds direkt von der <a href="http://teeworlds.com/">offiziellen Projektseite</a> herunterladen.</p>
<p><strong>Aufsetzen eines Teeworlds-Servers</strong><br />
Der Teeworlds Server ist im offiziellen Paket mit dabei und nennt sich (im Linux-Build) teeworlds_srv. Die Konfiguration eines Server läuft über eine einzige Konfigurationsdatei ab. Hier eine Beispieldatei, für einen Death Match Server:</p>
<blockquote><p><code>sv_register 1 # Server beim Mastserver anmelden<br />
sv_name My Server - Death Match # Name des Servers<br />
sv_map dm2 # Map zum Start des Servers<br />
sv_maprotation dm1 dm2 dm6 dm7 dm8 dm9 # Maps für die Maprotation<br />
sv_scorelimit 20 # Maximale Punkezahl, danach wird die Map gewechselt<br />
sv_timelimit 10 # Zeitlimit in Minuten, danach wird die Map gewechselt<br />
sv_gametype dm # Spieltyp entweder dm, tdm oder ctf<br />
sv_rcon_password secret # rcon "Administrator" Passwort<br />
sv_motd Welcome on my server. # MOTD<br />
sv_port 8304 # Port<br />
sv_max_clients 20 # Slots für Spieler<br />
sv_spectator_slots 0 # Slots für Zuschauer<br />
</code></p></blockquote>
<p>Will man mehrere Server auf einem System betreiben müssen diese natürlich mit der Konfigurationsvariable sv_port an verschiedene Ports gebunden werden. Anschließend kann man den Server in einer Screen Session starten.</p>
<blockquote><p><code>root@server02:~# ./teeworlds_srv -f server-dm.cfg</code></p></blockquote>
<p>Viel Spaß beim spielen und testen! <img src='http://blog.simlau.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simlau.net/teeworlds-teewars.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Linux-Tools: Cowsay und Cowthink</title>
		<link>http://blog.simlau.net/linux-tools-cowsay-und-cowthink.html</link>
		<comments>http://blog.simlau.net/linux-tools-cowsay-und-cowthink.html#comments</comments>
		<pubDate>Thu, 21 May 2009 12:30:04 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.simlau.net/?p=1051</guid>
		<description><![CDATA[Cowsay ist ein nettes Programm, dass ein ASCII-Art Bild mit einer Kuh und einer Sprechblase generiert. Mit den sogennanten &#8220;cow files&#8221; ist es auch möglich andere Tiere und Bilder ausgeben zu lassen (einen Tux, ein Schaf etc.). Derartige ASCII-Arts lassen sich z. B. sehr gut zur Verschönerung des Logins bei einem SSH-Server als &#8220;Message of [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.simlau.net/wp-files/terminal.png" alt="Linux Terminal" style="float: right;" />Cowsay ist ein nettes Programm, dass ein ASCII-Art Bild mit einer Kuh und einer Sprechblase generiert. Mit den sogennanten &#8220;cow files&#8221; ist es auch möglich andere Tiere und Bilder ausgeben zu lassen (einen Tux, ein Schaf etc.).</p>
<p>Derartige ASCII-Arts lassen sich z. B. sehr gut zur Verschönerung des Logins bei einem SSH-Server als &#8220;Message of the Day&#8221; in die Datei /etc/motd eintragen.</p>
<p>Cowsay und Cowthink unterscheiden sich nur in einer kleinen Sache. Cowsay generiert eine Sprechblase, Cowthink hingegen logischerweiße eine Gedankenblase. Der Syntax ist bei beiden vollkommen identisch.<br />
<span id="more-1051"></span></p>
<p><strong>Installation</strong><br />
Da sich das Programm sowohl bei Debian als auch bei Ubuntu in den offiziellen Repos befndet, kann es direkt daraus installiert werden.</p>
<blockquote><p><code>apt-get install cowsay</code></p></blockquote>
<p><strong>Benutzung</strong><br />
Cowsay bzw. Cowsay hat ein paar interessanter Switches, die es ermöglichen das ausgegebene Bild auf jede Situation anzupassen. <img src='http://blog.simlau.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<ul>
<li><strong>-e</strong> ändert die Standardmäßigen Augen, z. B. -e &#8220;>< ".</li>
</li>
<li><strong>-f</strong> definiert ein cow file (wie sie in /usr/share/cowsay/cows liegen), z. B. tux, ren oder turtle.</li>
<li><strong>-T</strong> definiert ein zusätzliches Kinn, z. B. &#8220;oo&#8221;.</li>
</ul>
<p><strong>Beispiele</strong><br />
Nachfolgend noch eine Beispielaufrufe von Cowsay und deren Ausgabe.<br />
<blockquote>
<pre>root@server02: ~
&lt;0> # fortune | cowsay -f tux
 _______________________________________
/ Q: What's tiny and yellow and very,   \
| very, dangerous? A: A canary with the |
\ super-user password.                  /
 ---------------------------------------
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/
&nbsp;

root@server02: ~
&lt;0> # cat /etc/hostname | xargs echo Welcome on | cowsay -e ">< " -f sodomized
 _____________________
< Welcome on server02 >
 ---------------------
      \                _
       \              (_)
        \   ^__^       / \
         \  (>< )\_____/_\ \
            (__)\       ) /
                ||----w ((
                ||     ||>>
&nbsp;
</pre>
</blockquote>
<p>Möchte man eine Gedankenblase ausgegeben haben, muss man wie oben angedeutet den Befehl cowthink benutzen. Alles weitere findet man in der man page von cowsay (man cowsay).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simlau.net/linux-tools-cowsay-und-cowthink.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CD Images unter Linux konvertieren</title>
		<link>http://blog.simlau.net/cd-images-unter-linux-konvertieren.html</link>
		<comments>http://blog.simlau.net/cd-images-unter-linux-konvertieren.html#comments</comments>
		<pubDate>Sun, 17 May 2009 08:00:05 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.simlau.net/?p=64</guid>
		<description><![CDATA[CD/DVD-Images sind Dateien, die das genaue Abbild eines optischen Datenträgers wie einer DVD oder einer CD enthalten. Diese Images lassen sich entweder auf CD/DVD brennen oder als Datenträger einhängen. Im letzteren Fall befindet sich die Image-Datei auf der Festplatte, man kann jedoch auf das Image zugreifen, so als wäre die abgebildete CD eingelegt. Es existieren [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.simlau.net/wp-files/techrohni.png" alt="CD Images konvertieren" style="float: right; padding-left: 10px; paddint-bottom: 5px;" />CD/DVD-Images sind Dateien, die das genaue Abbild eines optischen Datenträgers wie einer DVD oder einer CD enthalten. Diese Images lassen sich entweder auf CD/DVD brennen oder als Datenträger einhängen. Im letzteren Fall befindet sich die Image-Datei auf der Festplatte, man kann jedoch auf das Image zugreifen, so als wäre die abgebildete CD eingelegt. Es existieren verschiedene Formen von Images, für die verschiedene Vorgehensweisen angeraten sind.</p>
<p>Oftmals möchte man nun unter Linux CD Images von einem Format in ein ISO9660 Konformes &#8220;ISO-Image&#8221; konvertieren, da die Möglichkeiten zum brennen der &#8220;Exoten&#8221; meist eher beschränkt sind. Die mittlerweile vielen verschiedenen Formate auf dem Markt machen einen ordentlichen Überblick aber teilweise schwierig. Deshalb möchte ich hier eine kleine Übersicht erstellen.<br />
<span id="more-64"></span></p>
<p><strong>Das Format DMG</strong><br />
Hierbei handelt es sich um ein von Apple entwickeltes Abbild eines Speichermediums (eben z. B. eine CD). Das MAC-Format DMG lässt sich mithilfe des Perl Scriptes dmg2iso in eine ISO-Datei konvertieren. Das Script kann man <a href="http://vu1tur.eu.org/tools/">hier</a> herunterladen.</p>
<p>Benutzung: perl dmg2iso.pl input.dmg output.iso</p>
<p><strong>Das BIN-Format</strong><br />
Hier findet man in der Regel immer noch eine CUE-Datei beiliegend. Zum konvertieren kann man hier das Programm bchunk verwenden, welches sich in den universe Quellen befindet (apt-get install bchunk).</p>
<p>Benutzung: bchunk input.bin input.cue output .iso</p>
<p><strong>Das Format NRG</strong><br />
NRG sollte vom Windows Programm Nero bekannt sein. Auch hier gibt es eine schöne Lösung, welche sich nrg2iso nennt. Das Programm befindet sich bei Ubuntu in den universe Quellen und kann direkt daraus installiert werden (apt-get install nrg2iso).<br />
Eine Alternative bietet <a href="http://code.google.com/p/nrg4iso/">nrg4iso</a>, welches neuer ist und besser funktionieren soll.</p>
<p>Benutzung: nrg2iso input.nrg output.iso</p>
<p><strong>Das Format MDF</strong><br />
Auch hier findet sich ein nettes Tool in den universe Quellen von Ubuntu. Es heißt, wer hätte es gedacht, mdf2iso und kann ebenfalls direkt per apt-get installiert werden (apt-get install mdf2iso).</p>
<p>Benutzung: mdf2iso input.mdf output.iso</p>
<p><strong>Allgemeines Tool IAT</strong><br />
Ein weiteres nettes Tool, welches ich vor kurzer Zeit endeckt habe nennt sich <a href="http://iat.berlios.de/">IAT</a>. Das Projekt wird aber leider, zumindest soweit ich das gesehen habe, nicht mehr weiterentwickelt. IAT kann Formate von Disk Images automatisch erkennen und entsprechend in ein ISO 9660 konformes Image konvertieren. Das macht viele nervige Suche nach Konvertern unnötig. </p>
<p>Das schöne ist auch, dass es sogar einen Port für Microsoft Windows gibt.</p>
<p><strong>Selbst ein ISO-Image von einer CD erstellen</strong><br />
Hierfür kann man das Tool &#8220;dd&#8221; verwenden, welches ein Medium ebenfalls bitweiße kopiert. Um von einer eingelegten CD ein Image zu erstellen könnte die Zeile etwa so aussehen:</p>
<p>dd if=/dev/cdrom of=/tmp/cd-image.iso </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simlau.net/cd-images-unter-linux-konvertieren.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>vServer Administration mit libvirt</title>
		<link>http://blog.simlau.net/administration-mit-libvirt.html</link>
		<comments>http://blog.simlau.net/administration-mit-libvirt.html#comments</comments>
		<pubDate>Fri, 15 May 2009 13:02:44 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[libvirt]]></category>
		<category><![CDATA[vserver]]></category>

		<guid isPermaLink="false">http://blog.simlau.net/?p=692</guid>
		<description><![CDATA[Vor kurzem hatte ich von den Virtualisierungsmöglichkeiten von kvm berichtet. Nun möchte ich das ganze etwas erweitern, und zwar mit libvirt. libvirt-bin ist ein kleines Tool, welches eine &#8220;Mini-Shell&#8221; für die einfache Administration von virtuellen Servern auf einem Hostsystem ermöglicht. Die Konfiguration der virtuellen Systeme läuft dabei über XML Dateien ab, welche durch den Daemon [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.simlau.net/wp-files/libvirtlogo2.png" alt="libvirt-bin" style="float: right;" />Vor kurzem hatte ich von den Virtualisierungsmöglichkeiten von <a href="http://blog.simlau.net/2009/04/08/virtualisierung-mit-kvm/">kvm</a> berichtet. Nun möchte ich das ganze etwas erweitern, und zwar mit libvirt.</p>
<p>libvirt-bin ist ein kleines Tool, welches eine &#8220;Mini-Shell&#8221; für die einfache Administration von virtuellen Servern auf einem Hostsystem ermöglicht.</p>
<p>Die Konfiguration der virtuellen Systeme läuft dabei über XML Dateien ab, welche durch den Daemon geparst werden. Darin wird ganz normal angegeben, welche Virtualisierungssoftware, wie viel RAM, wie viel bzw. welche virtuelle Disk und wie viel Kerne die virtuelle CPU bekommt.</p>
<p>Der Vorteil liegt hier klar in der Hand: libvirt übernimmt das komplette Managment. Man kann sich bei mehren, gleichzeitig auf einem Server betrieben virtuellen Servern alle Parameter für den Start des Gasts via kvm sparen. Bei einem Reboot besteht die Möglichkeit, libvirt vorzugeben, ob und welche Gäste automatisch wieder gestartet werden.<br />
<span id="more-692"></span></p>
<p><strong>Installation</strong><br />
libvirt kann bei Debian und Ubuntu-Systemen direkt aus den Paketquellen installiert werden. </p>
<blockquote><p><code>apt-get install libvirt-bin</code></p></blockquote>
<p><strong>Konfiguration</strong><br />
Standardmäßig startet libvirt-bin bei einem Systemstart mit. Wer das verhindern möchte, sollte den Dienst via `rcconf` direkt aus dem entsprechenden Runlevel entfernen.</p>
<p>Zunächst empfiehlt es sich die Datei /etc/libvirt/qemu.conf den Wünschen entsprechend anzupassen. Interessant ist vorallem der VNC Listenport.</p>
<blockquote><p><code>vnc_listen = "0.0.0.0"</code></p></blockquote>
<p>Wenn man VNC nicht dauernd braucht, empfiehlt es sich den Listenport auf localhost (127.0.0.1) zu binden, und bei Bedarf des VNC Servers lokal auf SSH-Portforwarding zurückzugreifen, denn libvirt-bin unterstützt (zumindest nach meinen Tests) keine funktionierende Passwortauthentifikation für die VNC Erweiterung für kvm.</p>
<p>Man kann zwar durchaus ein Passwort in der vServer Konfiguration angebenen, aber das wird dann entsprechend ignoriert. Was natürlich dazu führt, dass man dann einen nach außen hin offenen, ohne Passwort gesicherten VNC-Rootserver im Netz stehen hat. Wie lang dieser dann überlebt, ist wohl nur eine Frage der Zeit.</p>
<p>Wie angesprochen läuft die komplette Konfiguration der Gastsysteme über XML Files statt. Diese werden in /etc/libvirt/qemu/ abgelegt. Eine komplette Beschreibung aller Features würde hier wohl zu weit gehen. Ich verweiße an dieser Stelle auf <a href="http://libvirt.org/formatdomain.html">die libvirt Dokumentation</a> und gebe hier nur eine kurze Beispielkonfiguration an, die ihr euch <a href="http://blog.simlau.net/wp-files/config.xml">hier</a> ansehen könnt.</p>
<p>Dort sind alle wichtigen Parameter angegeben. Einige sind auch gar nicht nötig, da diese von libvirt-bin selbst generiert werden. Eine &#8220;saubere&#8221; XML kann man sich nach dem Import in libvirt per `virsh dumpxml server` erstellen lassen.</p>
<p><strong>Steuerung der vServer</strong><br />
Gestartet, gestoppt und alles andere wird mit dem Kommando &#8220;virsh&#8221;. Hier gibt es zwei Möglichkeiten: gibt man den Befehl ohne Parameter an, so landet man in einer Mini-Shell, in der man mehrere Kommandos schnell hintereinander eingeben kann. Das ganze funktioniert aber auch mit einem Parameter (start, destroy) direkt aus der Bash heraus.</p>
<p>Wichtig ist die Bennenung. `virsh start server03` entspricht dem Server, so wie er in der Konfiguration in der Datei /etc/libvirt/qemu/server03.xml angegeben ist.</p>
<blockquote><p><code>virsh help # Alle Kommandos im Überblick<br />
virsh start server01 # Startet den vServer<br />
virsh shutdown server01 # Fährt den vServer sauber herunter<br />
virsh destroy server01 # Stoppt den vServer sofort (abwürgen)<br />
virsh reboot server01 # Rebootet den Server (Neustart)</code></p></blockquote>
<p><strong>libvirt-bin aus den Debian Backports</strong><br />
Installiert man libvirt-bin aus den Debian Backports, so hat man einen sehr großen Vorteil: die Version von backports.org ist um einiges neuer als die in den offiziellen Debian Lenny Quellen und hat somit den Bug nicht, der dazu führt, dass eigentlich angeschaltete Systeme in der virsh Shell, nach einem reload des libvirt-bin Dienstes als &#8220;off&#8221; angezeigt werden. Das ist manchmal etwas verwirrend.</p>
<p>Außerdem kann man mit dieser Version im laufenden Betrieb neue virtuelle Systeme hinzufügen oder löschen, ohne den kompletten libvirt Daemon neuzustarten. Das ist auch ein Problem der veralteten Version: um ein weiteres System hinzuzufügen müssen so erst alle Systeme heruntergefahren und anschließend neu &#8220;gebootet&#8221; werden &#8211; was äußerst umständlich ist.</p>
<p>Die Installation aus den Backports gestaltet sich als einfach:</p>
<blockquote><p><code>echo "" >> /etc/apt/sources.list<br />
echo "deb http://www.backports.org/debian lenny-backports main contrib non-free" >> /etc/apt/sources.list<br />
apt-get update<br />
apt-get -t lenny-backports install libvirt-bin</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.simlau.net/administration-mit-libvirt.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Virtualisierung mit kvm</title>
		<link>http://blog.simlau.net/virtualisierung-mit-kvm.html</link>
		<comments>http://blog.simlau.net/virtualisierung-mit-kvm.html#comments</comments>
		<pubDate>Wed, 08 Apr 2009 08:00:59 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[kvm]]></category>
		<category><![CDATA[virtualisierung]]></category>

		<guid isPermaLink="false">http://blog.simlau.net/?p=616</guid>
		<description><![CDATA[Die Kernel-based Virtual Machine (oder kurz KVM) ist eine Softwaremäßige Hardware-Virtualisierungstechnik und wurde im Oktober 2006 veröffentlicht. Als Gastsysteme unterstützt KVM Linux (32 und 64 Bit), Windows (32 Bit), ReactOS, FreeDOS, Solaris und diverse BSD-Derivate sowie einige weitere. Ab dem Kernel 2.6.20 ist KVM Standardmäßig im Linux-Kernel enthalten. Für mich hat kvm gegenüber seinen Konkurrenten [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://uploads.simlau.net/files/simon/openlogo-100.png" alt="Debian Logo" style="float: right;" />Die Kernel-based Virtual Machine (oder kurz <strong>KVM</strong>) ist eine Softwaremäßige Hardware-Virtualisierungstechnik und wurde im Oktober 2006 veröffentlicht. Als Gastsysteme unterstützt KVM Linux (32 und 64 Bit), Windows (32 Bit), ReactOS, FreeDOS, Solaris und diverse BSD-Derivate sowie einige weitere. Ab dem Kernel 2.6.20 ist KVM Standardmäßig im Linux-Kernel enthalten. </p>
<p>Für mich hat kvm gegenüber seinen Konkurrenten wie XEN folgende Vorteile:</p>
<ul>
<li>Kein spezieller Kernel des Hostsystems wie bei XEN benötigt</li>
<li>Alle Gastsysteme haben so ihre &#8220;eigenen Kernel&#8221;</li>
<li>KVM ist im Standard Kernel von Debian enthalten</li>
<li>Extrem einfache Administration</li>
<li>Es werden sehr viele unterschiedliche Gastsysteme unterstützt</li>
</ul>
<p><strong>Installation</strong><br />
Zu allererst muss für KVM wie für XEN auch die BIOS Einstellung <strong>Virtualization Technology</strong> aktiviert sein. Sollte ja eigentlich logisch sein. <img src='http://blog.simlau.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> <span id="more-616"></span></p>
<p>Unter Debian und/oder Ubuntu muss nun das Paket <strong>kvm</strong> installiert werden. Zusätzlich benötigten wir noch das Paket <strong>bridge-utils</strong>. Das ist nötig um das Network Interface eth0 zu &#8220;bridgen&#8221;, sprich um eine &#8220;Netzwerk-Brücke&#8221; zu den Gastsystemen zu bauen und ihnen so Zugang zum Netz (falls gewünscht) zu ermöglichen. Wer lediglich ein einfaches System ohne Netzwerkanbindung benötigt, kann das Paket einfach weg lassen.</p>
<blockquote><p><code>root@server01 ~ $ apt-get install kvm bridge-utils</code></p></blockquote>
<p>Alle Abhängigkeiten werden dabei wie immer automatisch mitinstalliert.</p>
<p>Nun ist eine kleine Änderung an der Datei <strong>/etc/network/interfaces</strong> nötig, um die Bridge zu aktivieren. Aus dem Standard Interface eth0&#8230;</p>
<blockquote><p><code># The primary network interface<br />
auto eth0<br />
iface eth0 inet static<br />
&nbsp;&nbsp;address 192.168.168.100<br />
&nbsp;&nbsp;netmask 255.255.255.0<br />
&nbsp;&nbsp;gateway 192.168.168.1<br />
&nbsp;&nbsp;network 192.168.168.0<br />
&nbsp;&nbsp;broadcast 192.168.168.255</code></p></blockquote>
<p>wird ein bridged Interface br0&#8230;</p>
<blockquote><p><code># The primary network interface<br />
auto br0<br />
iface br0 inet static<br />
&nbsp;&nbsp;bridge_ports eth0<br />
&nbsp;&nbsp;address 192.168.168.100<br />
&nbsp;&nbsp;netmask 255.255.255.0<br />
&nbsp;&nbsp;gateway 192.168.168.1<br />
&nbsp;&nbsp;network 192.168.168.0<br />
&nbsp;&nbsp;broadcast 192.168.168.255</code></p></blockquote>
<p>Wie man sieht wird hier einfach nur jeweils eth0 durch br0 getauscht und die Zeile &#8220;bridge_ports eth0&#8243; hinzugefügt.</p>
<p>Als Gastsystem werde ich hier als Beispiel mal ein Debian Lenny 5.0 installieren. Eine Installation von einem Windows, ReactOS oder sonstigen unterscheidet sich aber nur sehr geringfügig. Dazu brauchen wir zunächst einmal das entsprechende Installationsmedium als ISO: </p>
<blockquote><p><code>root@server01 ~ $ wget -O debian.iso http://cdimage.debian.org/debian-cd/5.0.0/i386/iso-cd/debian-500-i386-businesscard.iso</code></p></blockquote>
<p>Nun generieren wir uns eine virtuelle Festplatte, hier mit 10 Gigabyte Speicher:</p>
<blockquote><p><code>root@server01 ~ $ kvm-img create size 10G vserver.img</code></p></blockquote>
<p>Nun kommen wir zum eigentlich starten des virtuellen Systems. Dazu benötigten wir noch einige Informationen:</p>
<ul>
<li>Wie viele virtuelle CPUs soll der Gast bekommen?</li>
<li>Wie viel virtuellen RAM bekommt der Gast?</li>
<li>Zusätzlich eine eindeutige MAC-Adresse (am besten erdacht)</li>
</ul>
<p>Soweit so gut, hat man das kann man die Maschine auch schon starten. Ich habe hier mal nur die wichtigsten Parameter angegeben. kvm unterstützt noch einige mehr. Diese schlägt man am besten ebenfalls einmal in den man Pages nach.</p>
<blockquote><p><code>kvm \<br />
&nbsp;&nbsp;&nbsp;&nbsp;-name vserver \ # Der "Name" des Systems (optional)<br />
&nbsp;&nbsp;&nbsp;&nbsp;-smp 2 \ # Die Anzahl der virtuellen CPUs<br />
&nbsp;&nbsp;&nbsp;&nbsp;-m 512 \ # Wie viel Speicher bekommt das System (hier 512 MB)<br />
&nbsp;&nbsp;&nbsp;&nbsp;-hda vserver.img \ # Die Festplatte (hda) des Systems<br />
&nbsp;&nbsp;&nbsp;&nbsp;-cdrom debian.iso \ # eine CD im virtuellen Laufwerk (optional)<br />
&nbsp;&nbsp;&nbsp;&nbsp;-boot c \ # Bootsequenz: C steht für die Festplatte, D für die CD<br />
&nbsp;&nbsp;&nbsp;&nbsp;-net nic,macaddr=00:16:3B:00:00:03 \ # Die MAC-Adresse des vServers<br />
&nbsp;&nbsp;&nbsp;&nbsp;-net tap \ # Für das bridged Network Interface<br />
&nbsp;&nbsp;&nbsp;&nbsp;-vnc :0 \ # Der VNC-Server mitstarten (:0 entspricht dem Port 5900)<br />
&nbsp;&nbsp;&nbsp;&nbsp;-pidfile /var/run/vserver.pid \ # Ein Pidfile in dem die Prozess-ID geschrieben wird<br />
&nbsp;&nbsp;&nbsp;&nbsp;-daemonize # Parameter für das starten als des Servers als Deamon</code></p></blockquote>
<p>Nun ist der Server gestartet und man kann sich per VNC über die IP des Hostsystems (hier 192.168.168.100) und des entsprechenden VNC-Ports (hier 5900) anmelden. Per VNC installiert man die Maschine nun einmalig, klatscht noch direkt einen SSH-Server nach und voila, fertig! <img src='http://blog.simlau.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><img src="http://uploads.simlau.net/files/simon/kvm-pre.png" alt="KVM over VNC" style="display: block; position: relative;;" /></p>
<p><strong>Zusammenfassend</strong><br />
kvm wirkt recht stabil und läuft flüssig. Allerdings setze ich es noch nicht weiter in produktiven Projekten ein. Momentan setze ich es dazu ein, binnen von Minuten ein &#8220;sauberes&#8221; Testsystem bereit zu stellen. Dafür eignet sich kvm wohl besser als Beispielsweiße XEN.</p>
<p>Ein Problem ist mir bei meinen Tests leider aufgefallen: ich konnte mich, sobald ich kvm zusätzlich ein Passwort für den VNC-Server übergeben habe, nicht mehr per VNC auf dem Server einloggen. Möglicherweiße lag das aber an meinem Client (vncviewer). Also habe ich den VNC-Server per iptables nur für meine IP-Adresse/mein Netz freigegeben. Über Feedback zum Thema Passwort Authentifikation bei VNC/KVM wäre ich daher sehr erfreut.</p>
<p>Ein lästiges Problem bleibt allerdings trotzdem noch: die langen Startparameter. Man kann sich zwar hierfür jeweils Start- und Stopscripte basteln, allerdings gibt es auch eine schönere Lösung. Diese heißt <strong><a href="http://libvirt.org/">libvirt</a></strong>. Darüber werde ich allerdings mehr in einem weiteren Post und in naher Zukunft schreiben. <img src='http://blog.simlau.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Für alle die noch mehr über kvm erfahren wollen kann ich die Projekt eigene <a href="http://www.linux-kvm.org/page/Main_Page">Linux KVM-Wiki</a> empfehlen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.simlau.net/virtualisierung-mit-kvm.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

