<?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>netz-guru blog &#187; Usefull Things</title>
	<atom:link href="http://www.netz-guru.de/category/usefull-things/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.netz-guru.de</link>
	<description>Webtechniken, Sicherheit und Interessantes...</description>
	<lastBuildDate>Fri, 18 Jun 2010 16:17:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>XTC Xt-Commerce Fix für Multihomed Mailserver</title>
		<link>http://www.netz-guru.de/2009/04/06/xtc-xt-commerce-fix-fur-multihomed-mailserver/</link>
		<comments>http://www.netz-guru.de/2009/04/06/xtc-xt-commerce-fix-fur-multihomed-mailserver/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 09:00:45 +0000</pubDate>
		<dc:creator>Florian Wiessner</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Usefull Things]]></category>
		<category><![CDATA[Webtechniken]]></category>
		<category><![CDATA[class smtp]]></category>
		<category><![CDATA[cluster server]]></category>
		<category><![CDATA[mail cluster]]></category>
		<category><![CDATA[xt-commerce]]></category>
		<category><![CDATA[xtc]]></category>

		<guid isPermaLink="false">http://www.netz-guru.de/?p=104</guid>
		<description><![CDATA[Bei vielen Shop-Systemen wird XT-Commerce eingesetzt, da es vielseitig und flexibel ist um den meisten Anforderungen gerecht zu werden. Will man XTC jedoch in einer Cluster-Umgebung einsetzen, und hat einen Mailserver-Cluster zur Verfügung, gibt es ein Problem sobald XTC versucht, einen Connect zu einem Mailserver aufzubauen, der gerade nicht erreichbar ist. Obwohl weitere Server des [...]]]></description>
			<content:encoded><![CDATA[<p>Bei vielen Shop-Systemen wird XT-Commerce eingesetzt, da es vielseitig und flexibel ist um den meisten Anforderungen gerecht zu werden. Will man XTC jedoch in einer Cluster-Umgebung einsetzen, und hat einen Mailserver-Cluster zur Verfügung, gibt es ein Problem sobald XTC versucht, einen Connect zu einem Mailserver aufzubauen, der gerade nicht erreichbar ist. Obwohl weitere Server des Mailserver-Clusters verfügbar sind, gibt XTC nach einmaligem Versuch auf.</p>
<p>Hier ein kleiner Fix für XTC, damit zu einem Hostname alle verfügbaren IP-Adressen zum versenden von Mail durchprobiert werden:</p>
<p>In Zeile 106 in</p>
<pre>/includes/classes/class.smtp.php</pre>
<p>einfügen:</p>
<pre>		// retry connections
<span class="moz-txt-citetags"> </span>		$hosts = gethostbynamel($host);
<span class="moz-txt-citetags"> </span>		while ((empty($this-&gt;smtp_conn)) &amp;&amp; (count($hosts) &gt; 0)) {
<span class="moz-txt-citetags"> </span>       	$this-&gt;smtp_conn = fsockopen(array_pop($hosts), #<span class="moz-txt-citetags"> </span>server
<span class="moz-txt-citetags"> </span>                                     $port,    # the port to use
<span class="moz-txt-citetags"> </span>                                     $errno,   # error number if any
<span class="moz-txt-citetags"> </span>                                     $errstr,  # error message if any
<span class="moz-txt-citetags"> </span>                                     $tval);   # give up after ? secs
<span class="moz-txt-citetags"> </span>		}</pre>
<p>Damit versucht nun XTC mehrmals Mails zuzustellen, wenn der erstmalige Connect zu einem MTA fehlschlägt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netz-guru.de/2009/04/06/xtc-xt-commerce-fix-fur-multihomed-mailserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Verteiltes Dateisystem GlusterFS</title>
		<link>http://www.netz-guru.de/2009/01/15/clusterdateisystem-glusterfs/</link>
		<comments>http://www.netz-guru.de/2009/01/15/clusterdateisystem-glusterfs/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 11:39:30 +0000</pubDate>
		<dc:creator>Florian Wiessner</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Usefull Things]]></category>
		<category><![CDATA[Webtechniken]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[clusterfs]]></category>
		<category><![CDATA[distributed filesystem]]></category>
		<category><![CDATA[filesystem]]></category>
		<category><![CDATA[glusterfs]]></category>
		<category><![CDATA[verteiltes dateisystem]]></category>

		<guid isPermaLink="false">http://www.netz-guru.de/?p=65</guid>
		<description><![CDATA[Durch den Post vom vom 12.01.2009 / http://www.netz-guru.de/2009/01/12/die-ultimative-e-mail-losung-the-ultimate-e-mail-solution/ und die Kommentare darauf angeregt, habe ich versucht das gleiche Setup auch ohne dbmail zu versuchen. Sirko hatte in seinem Kommentar erwähnt, dass man mit einem verteilten Filesystem auch so einen Mailcluster betreiben kann. Bis zu diesem Zeitpunkt war mir eigentlich nur DRBD als einziges Filesystem bekannt, [...]]]></description>
			<content:encoded><![CDATA[<p>Durch den Post vom vom 12.01.2009 / <a href="http://www.netz-guru.de/2009/01/12/die-ultimative-e-mail-losung-the-ultimate-e-mail-solution/" target="_blank">http://www.netz-guru.de/2009/01/12/die-ultimative-e-mail-losung-the-ultimate-e-mail-solution/</a> und die Kommentare darauf angeregt, habe ich versucht das gleiche Setup auch ohne dbmail zu versuchen. <a href="http://www.datenklause.de/blog/" target="_blank">Sirko</a> hatte in seinem Kommentar erwähnt, dass man mit einem verteilten Filesystem auch so einen Mailcluster betreiben kann. Bis zu diesem Zeitpunkt war mir eigentlich nur DRBD als einziges Filesystem bekannt, welches maximal 2 Nodes zu einer Art Netzwerk-RAID1 verbindet.</p>
<p>Gänzlich unbekannt war mir bis heute jedoch GlusterFS, welches ebenfalls ein verteiltes Filesystem über das fuse-Modul bereitstellt. Hier hat man jedoch keine Limitierung auf max. 2 Nodes. GlusterFS bietet Automatic File Replication auch über mehr als 2 Nodes. Weiterhin kann man mit Unify mehrere RAID1-Knoten zu einem einzigen FS zusammenfassen. GlusterFS bietet noch mehr Möglichkeiten, hier mal ein Überblick:</p>
<ul>
<li> <strong><a title="NFS Like Standalone Storage Server" href="http://www.gluster.org/docs/index.php/NFS_Like_Standalone_Storage_Server">Standalone Storage (NFS Like)</a></strong></li>
<li> <strong><a title="Hash Across Four Storage Servers" href="http://www.gluster.org/docs/index.php/Hash_Across_Four_Storage_Servers">Distributed Storage</a></strong></li>
</ul>
<ul>
<li> <strong><a title="Automatic File Replication (Mirror) across Two Storage Servers" href="http://www.gluster.org/docs/index.php/Automatic_File_Replication_%28Mirror%29_across_Two_Storage_Servers">Replicated Storage</a></strong></li>
<li> <strong><a title="Mixing DHT and AFR" href="http://www.gluster.org/docs/index.php/Mixing_DHT_and_AFR">Distributed Replicated Storage</a></strong></li>
</ul>
<ul>
<li> <strong><a title="Striping Across Four Storage Servers" href="http://www.gluster.org/docs/index.php/Striping_Across_Four_Storage_Servers">Striped Storage</a></strong></li>
</ul>
<ul>
<li> <strong><a title="NUFA with single process" href="http://www.gluster.org/docs/index.php/NUFA_with_single_process">Cloud/HPC Storage</a></strong></li>
</ul>
<ul>
<li> <strong><a title="NFS Like Standalone Storage Server-2" href="http://www.gluster.org/docs/index.php/NFS_Like_Standalone_Storage_Server-2">NFS Like Standalone Storage Server-2</a></strong></li>
<li> <strong><a title="Aggregating Three Storage Servers with Unify" href="http://www.gluster.org/docs/index.php/Aggregating_Three_Storage_Servers_with_Unify">Aggregating Three Storage Servers with Unify</a></strong></li>
</ul>
<p>Mit einem Setup wie unter &#8220;Distributed Replicated Storage&#8221; beschrieben, lässt sich so ein gemeinsammes /var/spool für die Mailserver generieren. Die Konfiguration der Server kann man dann entweder in einer Datenbank oder LDAP ablegen, oder man verwendet die vom MTA vorgegebenen Konfig-Files, diese kann man auch auf einem verteiltem Filesystem speichern.</p>
<p>Den Source für GlusterFS kann man sich hier downloaden:</p>
<p><a href="http://europe.gluster.org/glusterfs/2.0/LATEST/" target="_blank">http://europe.gluster.org/glusterfs/2.0/LATEST/</a></p>
<p>Die Entwickler empfehlen ausserdem ein gepatchtes fuse-Kernel-Modul, welches GlusterFS erheblich beschleunigen soll:</p>
<p><a href="http://europe.gluster.org/glusterfs/fuse/" target="_blank">http://europe.gluster.org/glusterfs/fuse/</a></p>
<p>Das Setup an sich ist relativ einfach. Unter Debian Etch fuse-Source entpacken, ./configure &#8211;enable-kernel-module &#8211;prefix=/usr  &amp;&amp; make &amp;&amp; make install &amp;&amp; ldconfig</p>
<p>Dann glusterfs entpacken und ./configure &#8211;with-fuse=/usr/src/pfadzufuser &amp;&amp;  make &amp;&amp; make install</p>
<p>Konfigurationsbeispiele gibt es unter www.gluster.org. Es sind auch kombinierte AFR,Stripe,Unify Filesysteme möglich, allerdings ist das Setup dann etwas komplizierter.</p>
<p>Weiterhin bietet GlusterFS neben normalem TCP/IP  auch direkte Verbindung über Infini-Band an. Auch redundante Verbindungen zur Storage werden unterstützt. Die Maximale Größe des Filesystems kann bis zu mehrere Petabytes betragen.</p>
<p>Möchte man viele kleine Dateien in glusterfs speichern, so kann glusterfs diese im DBD Berkeley DB Format speichern.</p>
<p>GlusterFS ist unter der GNU GPL v3 lizenziert.</p>
<p>Weitere Infos zu <a href="http://de.wikipedia.org/wiki/GlusterFS" target="_blank">GlusterFS </a> gibts auch bei der <a href="http://de.wikipedia.org/wiki/Wikipedia:Hauptseite" target="_blank">Wikipedia</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netz-guru.de/2009/01/15/clusterdateisystem-glusterfs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Nach einem Datenbank Crash fix alle mysql DBs/Tabellen reparieren</title>
		<link>http://www.netz-guru.de/2008/08/12/nach-einem-datenbank-crash-fix-alle-mysql-dbstabellen-reparieren/</link>
		<comments>http://www.netz-guru.de/2008/08/12/nach-einem-datenbank-crash-fix-alle-mysql-dbstabellen-reparieren/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 06:47:34 +0000</pubDate>
		<dc:creator>Florian Wiessner</dc:creator>
				<category><![CDATA[Usefull Things]]></category>
		<category><![CDATA[datenbank]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[repair]]></category>
		<category><![CDATA[reparieren]]></category>
		<category><![CDATA[tabelle]]></category>
		<category><![CDATA[table]]></category>

		<guid isPermaLink="false">http://www.netz-guru.de/?p=37</guid>
		<description><![CDATA[Es kann schon mal vorkommen, dass nach einem Reboot oder Hard-Reset eines Servers der mysql-Server meldet, dass einige Tabellen defekt sind. Die Datenbank startet dann zwar ganz normal, einige Queries auf defekte/korrupte Tabellen können dann jedoch nicht mehr ausgeführt werden.
Um diese defekten Tabellen zu reparieren, kann man z.B. myisamchk mit den Optionen -rf im Datenverzeichnis [...]]]></description>
			<content:encoded><![CDATA[<p>Es kann schon mal vorkommen, dass nach einem Reboot oder Hard-Reset eines Servers der mysql-Server meldet, dass einige Tabellen defekt sind. Die Datenbank startet dann zwar ganz normal, einige Queries auf defekte/korrupte Tabellen können dann jedoch nicht mehr ausgeführt werden.</p>
<p>Um diese defekten Tabellen zu reparieren, kann man z.B. myisamchk mit den Optionen -rf im Datenverzeichnis von mySQL (unter Debian /var/lib/mysql) die Datenbanken reparieren. Alternativ kann man dies jedoch auch direkt mit mySQL erledigen, der Syntax lautet dann REPAIR TABLE &lt;tabellenname&gt;.</p>
<p><span id="more-37"></span></p>
<p>Dies jedoch manuell über alle Tabellen auszuführen, ist lästig, weshalb ich hier einen Code-Schnipsel bereitstelle, der alle Tabellen in allen Datenbanken repariert &#8211; dies funktioniert jedoch nur mit der Datenbank Engine MYISAM:</p>
<blockquote><p><span><span>&lt;?php</span></span></p>
<p><span><span>$db=mysql_connect(&#8220;localhost&#8221;,&#8221;root&#8221;,&#8221;&lt;passwort&gt;&#8221;);</span></span></p>
<p><span><span>$sql = &#8220;show databases;&#8221;;</span></span></p>
<p><span><span>$res_db = mysql_query($sql,$db);</span></span></p>
<p><span><span>while ($dat_db = mysql_fetch_array($res_db)) {</span></span></p>
<p><span><span> $datab = $dat_db["Database"];</span></span></p>
<p><span><span> mysql_select_db($datab,$db);</span></span></p>
<p><span><span> $sql = &#8220;show tables;&#8221;;</span></span></p>
<p><span><span> $res = mysql_query($sql,$db);</span></span></p>
<p><span><span> while ($dat = mysql_fetch_array($res)) {</span></span></p>
<p><span><span> $table = $dat[0];</span></span></p>
<p><span><span> $sql2 = &#8220;repair table $table&#8221;;</span></span></p>
<p><span><span> $res2 = mysql_query($sql2,$db);</span></span></p>
<p><span><span> }</span></span></p>
<p><span><span>}</span></span></p>
<p><span><span>?&gt;</span></span></p></blockquote>
<p>Man kann dieses Script speichern, die Modes auf executable setzen und es am Ende in /etc/init.d/mysql anfügen, damit die Tabellen automatisch nach jedem Start von mysql repariert werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netz-guru.de/2008/08/12/nach-einem-datenbank-crash-fix-alle-mysql-dbstabellen-reparieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>apache2, virtualdocumentroot und Logfiles in verschiedene Files</title>
		<link>http://www.netz-guru.de/2008/05/21/apache2-virtualdocumentroot-und-logfiles-in-verschiedene-files/</link>
		<comments>http://www.netz-guru.de/2008/05/21/apache2-virtualdocumentroot-und-logfiles-in-verschiedene-files/#comments</comments>
		<pubDate>Wed, 21 May 2008 19:18:05 +0000</pubDate>
		<dc:creator>Florian Wiessner</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Usefull Things]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[logfiles]]></category>
		<category><![CDATA[mass virtual hosting]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[virtualdocumentroot]]></category>

		<guid isPermaLink="false">http://www.netz-guru.de/?p=24</guid>
		<description><![CDATA[Wieder mal ein spezifisches Problem:
Wer mit apache2 einfaches Massenhosting betreiben will, der will nicht für jeden Virtualhost einen VirtualHost-Container in seiner Apache Konfiguration anlegen, denn ab ca. 500 Domains als VHostContainer wird zum einen die Konfiguration sehr unübersichtlich und ausserdem wird der Indianer dadurch langsamer, aufgrund von vielen offenen Filehandles. Muss man ja auch nicht, [...]]]></description>
			<content:encoded><![CDATA[<p>Wieder mal ein spezifisches Problem:</p>
<p>Wer mit apache2 einfaches Massenhosting betreiben will, der will nicht für jeden Virtualhost einen VirtualHost-Container in seiner Apache Konfiguration anlegen, denn ab ca. 500 Domains als VHostContainer wird zum einen die Konfiguration sehr unübersichtlich und ausserdem wird der Indianer dadurch langsamer, aufgrund von vielen offenen Filehandles. Muss man ja auch nicht, schliesslich gibt es das vhost_alias Modul, mit welchem man ein VirtualDocumentRoot konfigurieren kann, dass dann das DocumentRoot anhand des übermittelten ServerName oder HTTP-Host Headers auswertet.</p>
<p>In der Apache Konfiguration sieht das dann z.B. so aus:<br />
<code><br />
&lt;VirtualHost *&gt;<br />
UseCanonicalName Off<br />
Options Indexes Includes FollowSymLinks MultiViews<br />
VirtualDocumentRoot /domains/%0/www<br />
VirtualScriptAlias  /domains/%0/cgi-bin/<br />
CustomLog access_log vcommon<br />
&lt;Directory /domains/%0/www&gt;<br />
AllowOverride All<br />
&lt;/Directory&gt;<br />
&lt;/VirtualHost&gt;<br />
</code><br />
Das Problem ist nun, dass alle Logs in ein einziges File &#8220;access_log&#8221; geloggt werden, und es schwierig ist, hier für die einzelnen gehosteten Domains Statistiken zu erzeugen etc.</p>
<p>Man kann nun aber um dieses Problem zu umgehen Folgendes tun:<br />
Man erzeugt in /etc/apache2 ein Script welches die Ausgabe des Logfiles aufteilt und in mehrere Dateien speichert:</p>
<p><code><br />
</code><code><span style="#000000;"> #!/usr/bin/php<br />
<span style="#0000bb;">&lt;?php</span></span></code></p>
<p>$path <span style="#007700;">= </span><span style="#dd0000;">&#8220;/var/log/apache2&#8243;</span><span style="#007700;">;<br />
</span><span style="#0000bb;">$fh_timeout </span><span style="#007700;">= </span><span style="#0000bb;">30</span><span style="#007700;">; </span><span style="#ff8000;">// 30 sek.</span></p>
<p><span style="#0000bb;">$fd </span><span style="#007700;">= </span><span style="#0000bb;">fopen</span><span style="#007700;">(</span><span style="#dd0000;">&#8220;php://stdin&#8221;</span><span style="#007700;">, </span><span style="#dd0000;">&#8220;r&#8221;</span><span style="#007700;">);</span></p>
<p>while(!<span style="#0000bb;">feof</span><span style="#007700;">(</span><span style="#0000bb;">$fd</span><span style="#007700;">)) {</span></p>
<p><span style="#0000bb;">$row </span><span style="#007700;">= </span><span style="#0000bb;">fgets</span><span style="#007700;">(</span><span style="#0000bb;">$fd</span><span style="#007700;">);</span></p>
<p>list(<span style="#0000bb;">$vhost</span><span style="#007700;">,</span><span style="#0000bb;">$h</span><span style="#007700;">,</span><span style="#0000bb;">$l</span><span style="#007700;">,</span><span style="#0000bb;">$u</span><span style="#007700;">,</span><span style="#0000bb;">$t</span><span style="#007700;">,</span><span style="#0000bb;">$r</span><span style="#007700;">,</span><span style="#0000bb;">$s</span><span style="#007700;">,</span><span style="#0000bb;">$b</span><span style="#007700;">,</span><span style="#0000bb;">$referrer</span><span style="#007700;">,</span><span style="#0000bb;">$ua</span><span style="#007700;">) = </span><span style="#0000bb;">explode</span><span style="#007700;">(</span><span style="#dd0000;">&#8220;;&#8221;</span><span style="#007700;">,</span><span style="#0000bb;">$row</span><span style="#007700;">,</span><span style="#0000bb;">10</span><span style="#007700;">);</span></p>
<p>if (!${<span style="#0000bb;">$vhost</span><span style="#007700;">}) { ${</span><span style="#0000bb;">$vhost</span><span style="#007700;">} = </span><span style="#0000bb;">fopen</span><span style="#007700;">(</span><span style="#0000bb;">$path</span><span style="#007700;">.</span><span style="#dd0000;">&#8220;/&#8221;</span><span style="#007700;">.</span><span style="#0000bb;">$vhost</span><span style="#007700;">.</span><span style="#dd0000;">&#8220;_access.log&#8221;</span><span style="#007700;">,</span><span style="#dd0000;">&#8220;a+&#8221;</span><span style="#007700;">); }<br />
</span><span style="#0000bb;">$lastwrite</span><span style="#007700;">[</span><span style="#0000bb;">$vhost</span><span style="#007700;">] = </span><span style="#0000bb;">time</span><span style="#007700;">();<br />
</span><span style="#0000bb;">fputs </span><span style="#007700;">(${</span><span style="#0000bb;">$vhost</span><span style="#007700;">},</span><span style="#dd0000;">&#8220;$h $l $u $t $r $s $b $referrer $ua&#8221;</span><span style="#007700;">);</span></p>
<p>foreach (<span style="#0000bb;">$lastwrite </span><span style="#007700;">as </span><span style="#0000bb;">$vhost </span><span style="#007700;">=&gt; </span><span style="#0000bb;">$time</span><span style="#007700;">) {<br />
if ((</span><span style="#0000bb;">time</span><span style="#007700;">() &#8211; (</span><span style="#0000bb;">$time</span><span style="#007700;">+</span><span style="#0000bb;">30</span><span style="#007700;">))  &gt;=</span><span style="#0000bb;">0</span><span style="#007700;">) {<br />
</span><span style="#0000bb;">fclose</span><span style="#007700;">(${</span><span style="#0000bb;">$vhost</span><span style="#007700;">});<br />
unset(${</span><span style="#0000bb;">$vhost</span><span style="#007700;">});<br />
unset(</span><span style="#0000bb;">$lastwrite</span><span style="#007700;">[</span><span style="#0000bb;">$vhost</span><span style="#007700;">]);<br />
}<br />
}<br />
}<br />
</span><span style="#0000bb;">?&gt;</span></p>
<p>Nun müssen wir in der apache2 Konfiguration noch das Logformat ändern und die Ausgabe des Logfiles an unser Script durchpipen:<br />
<code><br />
LogFormat "%V;%h;%l;%u;%t;\"%r\";%&gt;s;%b;\"%{Referer}i\";\"%{User-agent}i\"" vcommon<br />
CustomLog "|/etc/apache2/splitlogs.php" vcommon</code></p>
<p>Dann Apache einmal neu starten und künftig werden pro Host separate Logfiles erstellt.</p>
<p>Edit: Fast hätte ich es vergessen! Das Script braucht natuerlich eXecutable-Flag also am besten chmod  755 /etc/apache2/splitlogs.php ausführen!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netz-guru.de/2008/05/21/apache2-virtualdocumentroot-und-logfiles-in-verschiedene-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Festplatten sicher löschen mit DBAN</title>
		<link>http://www.netz-guru.de/2008/04/12/festplatten-sicher-loschen-mit-dban/</link>
		<comments>http://www.netz-guru.de/2008/04/12/festplatten-sicher-loschen-mit-dban/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 12:26:09 +0000</pubDate>
		<dc:creator>Florian Wiessner</dc:creator>
				<category><![CDATA[Usefull Things]]></category>
		<category><![CDATA[festplatte daten löschen disk wipe]]></category>

		<guid isPermaLink="false">http://www.netz-guru.de/?p=23</guid>
		<description><![CDATA[Wer seine Daten wirklich sicher löschen will, z.B. weil die Festplatte bei EBAY verkauft werden soll, oder eben einfach nur damit die Daten auch 100%ig weg sind, der sollte sich mal Darik&#8217;s Boot and Nuke (DBAN) anschauen.
]]></description>
			<content:encoded><![CDATA[<p>Wer seine Daten wirklich sicher löschen will, z.B. weil die Festplatte bei EBAY verkauft werden soll, oder eben einfach nur damit die Daten auch 100%ig weg sind, der sollte sich mal <a title="Darik's Boot and Nuke" href="http://dban.sourceforge.net/">Darik&#8217;s Boot and Nuke (DBAN)</a> anschauen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netz-guru.de/2008/04/12/festplatten-sicher-loschen-mit-dban/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>viele Bilder auf einmal skalieren mit Gimp</title>
		<link>http://www.netz-guru.de/2008/04/10/viele-bilder-auf-einmal-skalieren-mit-gimp/</link>
		<comments>http://www.netz-guru.de/2008/04/10/viele-bilder-auf-einmal-skalieren-mit-gimp/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 13:20:18 +0000</pubDate>
		<dc:creator>Florian Wiessner</dc:creator>
				<category><![CDATA[Usefull Things]]></category>
		<category><![CDATA[Webtechniken]]></category>
		<category><![CDATA[gimp batch mode scale skalieren vergrößern verkleinern]]></category>

		<guid isPermaLink="false">http://www.netz-guru.de/?p=22</guid>
		<description><![CDATA[Welcher Webdesigner hat das Problem nicht schon einmal gehabt? Man bekommt viele Bilder in hoher Auflösung und soll diese skaliert in ein Forum oder eine Galerie einstellen. Im Photoshop gibt es dafür eine Batch-Funktion, wohl dem, der es sich leisten kann. Wer allerdings kein Vermögen für Photoshop ausgeben will, kann dies auch mit dem GNU [...]]]></description>
			<content:encoded><![CDATA[<p>Welcher Webdesigner hat das Problem nicht schon einmal gehabt? Man bekommt viele Bilder in hoher Auflösung und soll diese skaliert in ein Forum oder eine Galerie einstellen. Im Photoshop gibt es dafür eine Batch-Funktion, wohl dem, der es sich leisten kann. Wer allerdings kein Vermögen für Photoshop ausgeben will, kann dies auch mit dem GNU Image Manipulation Programm GIMP erledigen.</p>
<p>Alles was dazu benötigt wird, ist ein Plugin <a href="http://members.ozemail.com.au/~hodsond/dbp.html">DBP</a> (David&#8217;s Batch Programm) und <a href="http://www.gimp.org/">GIMP</a> in einer aktuellen Version (ab 2.0).</p>
<p>Zuerst wird GIMP mit allen Standardeinstellungen installiert, anschliessend holen wir uns <a href="http://members.ozemail.com.au/~hodsond/dbp.html">DBP</a> und installieren dies im Plugins Pfad von GIMP:<br />
<code>bei w32: GIMP-2.0\lib\gimp\2.0\plug-ins</code></p>
<p>Anschliessend startet man GIMP und wählt nun Menü &#8220;Extras&#8221; &#8220;Batch Process&#8230;&#8221; aus.</p>
<p>Hier kann man jetzt Bilder hinzufügen und diese dann mittels Resize neu skalieren. Es sei angemerkt, dass man damit die Bilder auch drehen kann und weitere Effekte auf die Bilder anwenden kann.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netz-guru.de/2008/04/10/viele-bilder-auf-einmal-skalieren-mit-gimp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysqlfs mit mySQL NDB Cluster als verteiltes Dateisystem</title>
		<link>http://www.netz-guru.de/2008/04/03/mysqlfs-mit-mysql-ndb-cluster-als-verteiltes-dateisystem/</link>
		<comments>http://www.netz-guru.de/2008/04/03/mysqlfs-mit-mysql-ndb-cluster-als-verteiltes-dateisystem/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 11:32:43 +0000</pubDate>
		<dc:creator>Florian Wiessner</dc:creator>
				<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Usefull Things]]></category>
		<category><![CDATA[Webtechniken]]></category>
		<category><![CDATA[cluster]]></category>
		<category><![CDATA[cluster dateisystem]]></category>
		<category><![CDATA[clusterfs]]></category>
		<category><![CDATA[dateisystem]]></category>
		<category><![CDATA[fs]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql cluster]]></category>
		<category><![CDATA[mysqlfs]]></category>
		<category><![CDATA[shared nothing]]></category>
		<category><![CDATA[shared nothing filesystem]]></category>

		<guid isPermaLink="false">http://www.netz-guru.de/?p=20</guid>
		<description><![CDATA[Jeder der kritische Anwendungen über das Web laufen hat, wie z.B. einen Onlineshop, stellt sich irgendwann, bei hinreichend großem Umsatz, die Frage, wie man das System noch ausfallsicherer machen kann.
Meist wird dann hierzu ein Loadbalancer (ob Hardware oder Software ist erst mal egal) aufgesetzt, welcher die Anfragen an mehrer Server verteilt, welche sich einen gemeinsammen [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder der kritische Anwendungen über das Web laufen hat, wie z.B. einen Onlineshop, stellt sich irgendwann, bei hinreichend großem Umsatz, die Frage, wie man das System noch ausfallsicherer machen kann.</p>
<p>Meist wird dann hierzu ein Loadbalancer (ob Hardware oder Software ist erst mal egal) aufgesetzt, welcher die Anfragen an mehrer Server verteilt, welche sich einen gemeinsammen Massenspeicher teilen. Dadurch ist es möglich, dass einzelne Server gewartet werden können, bzw. auch ausfallen können, ohne dass die Applikation dadurch gestört wird.</p>
<p>Leider beschränkt sich diese Variante auf nur eine Location, d.h. wird aus irgendwelchen Gründen z.B. die Internetanbindung an das System unterbrochen, ist die Applikation offline.</p>
<p>Dies kann man damit umgehen, dass man das System multihomed aufbaut, d.h. mehrere Server an unterschiedlichen Standorten betreibt, um bei einem Ausfall von einem Standort trotzdem noch erreichbar zu sein. Diese Variante hat den Nachteil, dass die Daten des Systems sehr aufwändig synchronisiert werden müssen, falls ein Standort nicht mehr erreichbar war. Weiterhin muss man auch bei Updates etc. aufpassen, dass es keine Versionskonflikte bei der Applikation gibt, denn man kann die Software nicht an beiden Standorten gleichzeitig aktualisieren.</p>
<p>Benötigt wird für so eine Lösung also zum einen eine Datenbank, welche automatisch repliziert und dies auch über mehr als einen Standort hinweg, weiterhin dazu noch ein Dateisystem, welches verteilten Host-Systemen eine gemeinsame Datenbasis bereitstellen kann.<br />
<span id="more-20"></span><br />
Zu diesem Zweck habe ich auf mehreren Test-Systemen eine solche Umgebung aufgebaut und will hier diesen Test dokumentieren. Ich habe dazu einfach 2 Systeme innerhalb eines VMware Servers erzeugt:</p>
<p>mysqlfsdevelop01 sowie mysqlfsdevelop02, mit folgender Konfiguration:</p>
<ul>
<li>2 GB HDD Space</li>
<li>Netzwerkkarte</li>
<li>256MB RAM</li>
<li>CD-ROM (mit gemountetem Disk-Image Debian-Etch 4.0)</li>
</ul>
<p>Nachdem man die Hosts in VMware angelegt hat, und Debian Etch auf diesen installiert ist, muss man noch einige Pakete nachinstallieren, mit</p>
<p><code>apt-get install build-essentials</code></p>
<p>zuerst alle benötigten Pakete installieren, damit man selbst Software kompilieren kann.</p>
<p>Weiterhin werden dann noch folgende Pakete benötigt:</p>
<p><code>apt-get install fuse-utils afuse libfuse-dev libmysqlclient15-dev libmysql++-dev glibc-dev mysql-server-5.0</code></p>
<p>Eine Liste aller installierten/benötigten Pakete gibt es <a href="http://www.netz-guru.de/downloads/mysqlfs-debian-pakete.txt" target="_blank">hier</a></p>
<p>Nachdem also unser Debian auf beiden Host-Systemen installiert ist, müssen wir noch unseren mySQL Server so konfigurieren, dass auf diesem NDB läuft. Dazu müssen auf beiden Host-Systemen Änderungen an der /etc/mysql/my.cnf vorgenommen werden:</p>
<ul>
<li>unter [mysqld] den Paramenter ndbcluster ohne Option hinzufügen</li>
<li>[MYSQL_CLUSTER] suchen und die Rauten entfernen</li>
<li>ndb-connectstring=127.0.0.1 kann beibehalten werden</li>
</ul>
<p>Dann die Datei speichern. mySQL noch nicht neu starten!</p>
<p>Dann wird in /etc/mysql/ die Datei ndb_mgmd.cnf angelegt, und folgender Inhalt eingefügt:</p>
<p><code><br />
[NDBD DEFAULT]<br />
NoOfReplicas=2</code></p>
<p>[MYSQLD DEFAULT]</p>
<p>[NDB_MGMD DEFAULT]</p>
<p>[TCP DEFAULT]</p>
<p># Section for the cluster management node<br />
[NDB_MGMD]<br />
# IP address of the management node (this system)<br />
HostName=192.168.200.40</p>
<p>#IP des ersten Nodes (mysqlfsdevelop01)</p>
<p>[NDB_MGMD]<br />
# IP address of the management node (this system)<br />
HostName=192.168.200.41</p>
<p>#IP des zweiten Nodes (mysqlfsdevelop02)</p>
<p># Section for the storage nodes<br />
[NDBD]<br />
# IP address of the first storage node<br />
HostName=192.168.200.40<br />
DataDir= /var/lib/mysql-cluster</p>
<p>[NDBD]<br />
# IP address of the second storage node<br />
HostName=192.168.200.41<br />
DataDir=/var/lib/mysql-cluster</p>
<p># one [MYSQLD] per storage node<br />
[MYSQLD]<br />
[MYSQLD]</p>
<p>Die Datei muss auf beiden Systemen angelegt werden, bei mysqlfsdevelop02 allerdings bei  [NDB_MGMD] die IP des zweiten Servers angeben, so dass auf beiden Systemen ein Management-Daemon läuft.</p>
<p>Nun starten wir zuerst den Management-Daemon, dann die NDB-Datenbank und zuletzt restarten wir mysql selbst (als API):<br />
<code><br />
/etc/init.d/mysql-ndb-mgm start</code></p>
<p>/etc/init.d/mysql-ndb start</p>
<p>/etc/init.d/mysql restart</p>
<p>Danach kann man mit ndb_mgm eine Konsole auf den NDB-Cluster öffnen. Ein &#8220;show&#8221; sollte folgenden Output erzeugen:</p>
<p><code>ndb_mgm&gt; show<br />
Connected to Management Server at: 127.0.0.1:1186<br />
Cluster Configuration<br />
---------------------<br />
[ndbd(NDB)] 2 node(s)<br />
id=3 (not connected, accepting connect from 192.168.200.40)<br />
id=4    @192.168.200.41  (Version: 5.0.32, Nodegroup: 0, Master)</code></p>
<p>[ndb_mgmd(MGM)] 2 node(s)<br />
id=1    @192.168.200.40  (Version: 5.0.32)<br />
id=2    @127.0.0.1  (Version: 5.0.32)</p>
<p>[mysqld(API)] 2 node(s)<br />
id=5    @192.168.200.40  (Version: 5.0.32)<br />
id=6    @192.168.200.41  (Version: 5.0.32)</p>
<p>Wenn dies soweit läuft, ist der erste Schritt getan.</p>
<p><!--more--><br />
Jetzt muss mysqlfs mit cvs heruntergeladen werden und übersetzt werden.</p>
<p>Dazu wechseln wir nach /usr/src und geben ein:<br />
<code><br />
cvs -d:pserver:anonymous@mysqlfs.cvs.sourceforge.net:/cvsroot/mysqlfs login<br />
</code><br />
und dann:<br />
<code><br />
cvs -z3 -d:pserver:anonymous@mysqlfs.cvs.sourceforge.net:/cvsroot/mysqlfs co -P mysqlfs<br />
</code><br />
sowie:<br />
<code><br />
./cvs-bootstrap<br />
./configure<br />
</code><br />
Falls es hier Fehler gibt, kann man mit autoreconf -i &#8211;force fehlende Teile automatisch erstellen lassen &#8211; spätestens jetzt sollte das configure ohne Probleme durchlaufen.</p>
<p>Jetzt musst allerdings noch das mysql-Schema gepatched werden &#8211; mit der Version vom CVS wird NDB-Cluster nicht unterstüzt:<br />
<code><br />
diff -Nuar mysqlfs/schema.sql mysqlfs-mrjack/schema.sql<br />
--- mysqlfs/schema.sql 2007-03-28 15:05:48.000000000 +0200<br />
+++ mysqlfs-mrjack/schema.sql   2008-03-31 22:59:06.000000000 +0200<br />
@@ -25,7 +25,7 @@<br />
`seq` int unsigned not null,<br />
`data` blob ,<br />
PRIMARY KEY  (`inode`, `seq`)<br />
-) ENGINE=MyISAM DEFAULT CHARSET=binary;<br />
+) ENGINE=NDBCLUSTER DEFAULT CHARSET=binary;</code></p>
<p>&#8211;<br />
&#8211; Table structure for table `inodes`<br />
@@ -45,7 +45,7 @@<br />
`size` bigint(20) NOT NULL default &#8216;0&#8242;,<br />
PRIMARY KEY  (`inode`),<br />
KEY `inode` (`inode`,`inuse`,`deleted`)<br />
-) ENGINE=MyISAM DEFAULT CHARSET=binary;<br />
+) ENGINE=NDBCLUSTER DEFAULT CHARSET=binary;</p>
<p>/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;<br />
DELIMITER ;;<br />
@@ -58,16 +58,16 @@<br />
&#8211;<br />
&#8211; Table structure for table `tree`<br />
&#8211;<br />
-<br />
+SET FOREIGN_KEY_CHECKS = 0;<br />
DROP TABLE IF EXISTS `tree`;<br />
CREATE TABLE `tree` (<br />
`inode` int(10) unsigned NOT NULL auto_increment,<br />
-  `parent` int(10) unsigned default NULL,<br />
+  `parent` int(10) unsigned,<br />
`name` varchar(255) NOT NULL,<br />
-  UNIQUE KEY `name` (`name`,`parent`),<br />
+  PRIMARY KEY `name` (`name`, `inode`),<br />
KEY `inode` (`inode`),<br />
KEY `parent` (`parent`)<br />
-) ENGINE=MyISAM DEFAULT CHARSET=utf8;<br />
+) ENGINE=NDBCLUSTER DEFAULT CHARSET=utf8;<br />
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;</p>
<p>/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;</p>
<p>Nun kann man mysqlfs mit make compilieren.</p>
<p>Anschliessend muss man das Schema in die mysql-Datenbank importieren.</p>
<p>Dazu zuerst die Datenbank &#8220;mysqlfs&#8221; auf beiden Servern anlegen:<br />
<code><br />
mysql&gt; CREATE DATABASE mysqlfs;<br />
mysql&gt; GRANT SELECT, INSERT, UPDATE, DELETE ON mysqlfs.* TO mysqlfs@"%" IDENTIFIED BY 'password';<br />
mysql&gt; FLUSH PRIVILEGES;<br />
</code><br />
Sowie anschliessend das Schema importieren:<br />
<code><br />
$ mysql -uroot -p mysqlfs &lt; schema.sql<br />
</code><br />
Dann einen Mountpoint anlegen, z.B. /mysqlfs mittels mkdir /mysqlfs</p>
<p>und das File-System mounten mit:</p>
<p><code> ./mysqlfs -ohost=localhost -ouser=mysqlfs -opassword=password -odatabase=mysqlfs /mysqlfs<br />
</code></p>
<p>Man kann auch in der /etc/mysql/my.cnf einen Abschnitt [mysqlfs] erzeugen und diese Daten dort hinterlegen:<br />
<code><br />
[mysqlfs]<br />
host=localhost<br />
user=mysqlfs<br />
password=password<br />
database=mysqlfs<br />
</code><br />
Nun kann man das Filesystem einfach mit ./mysqlfs /mysqlfs mounten.</p>
<p>Ein &#8220;mount&#8221; gibt nun folgende Ausgabe:<br />
<code><br />
mysqlfs on /mysqlfs type fuse (rw,nosuid,nodev)<br />
</code><br />
Man muss mysqlfs natürlich auch auf dem zweiten, bzw. jedem weiteren Server installieren!</p>
<p>Wenn man nun Dateien in /mysqlfs erzeugt werden diese instantan auch bei dem zweiten Server verfügbar.</p>
<p>Ein Nachteil von mySQL-Fs ist jedoch, dass es relativ langsam ist, da durch mysql-ndb und fuse viel Overhead erzeugt wird. Es sei noch erwähnt, dass mysqlfs kein Locking unterstützt, weshalb man davon absehen sollte, Files mehrfach von unterschiedlichen Hosts gleichzeitig zu öffnen. Insbesondere Session-Daten etc. sind in einer mySQL-DB besser aufgehoben als ein mittels mysqlfs verteiltes /tmp/.</p>
<p>Es reicht allerdings aus, um z.B. PHP-Seiten zentral abzulegen und diese auf vielen verschiedenen Servern verfügbar zu machen, um z.B. ein Loadbalancing mittels DNS-Round-Robin zu realisieren.</p>
<p>mysqlfs ist Opensource und ist bei Sourceforge gehostet:<br />
<a title="mysql fs - fuse filesystem using mysql as storage" href="http://sourceforge.net/projects/mysqlfs/">http://sourceforge.net/projects/mysqlfs/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netz-guru.de/2008/04/03/mysqlfs-mit-mysql-ndb-cluster-als-verteiltes-dateisystem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>APT- Get Error &#8211; Dynamic MMap ran out of room</title>
		<link>http://www.netz-guru.de/2008/02/13/apt-get-error-dynamic-mmap-ran-out-of-room/</link>
		<comments>http://www.netz-guru.de/2008/02/13/apt-get-error-dynamic-mmap-ran-out-of-room/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 07:17:35 +0000</pubDate>
		<dc:creator>Florian Wiessner</dc:creator>
				<category><![CDATA[Usefull Things]]></category>
		<category><![CDATA[apt-get]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[mmap]]></category>
		<category><![CDATA[of]]></category>
		<category><![CDATA[out]]></category>
		<category><![CDATA[ran]]></category>
		<category><![CDATA[room]]></category>

		<guid isPermaLink="false">http://www.netz-guru.de/2008/02/13/apt-get-error-dynamic-mmap-ran-out-of-room/</guid>
		<description><![CDATA[Wer viele Sources in seiner /etc/apt/sources.conf einträgt und ein Debian System noch aus Woody-Zeiten benutzt, bekommt früher oder später einmal die Meldung &#8220;APT- Get Error &#8211; Dynamic MMap ran out of room&#8221;, wie einige meiner VServer Kunden berichten. Bei Debian Etch ist mir das bisher noch nicht untergekommen, die Lösung des Problems ist dennoch ganz [...]]]></description>
			<content:encoded><![CDATA[<p>Wer viele Sources in seiner /etc/apt/sources.conf einträgt und ein Debian System noch aus Woody-Zeiten benutzt, bekommt früher oder später einmal die Meldung &#8220;APT- Get Error &#8211; Dynamic MMap ran out of room&#8221;, wie einige meiner <a title="Vlinux VServer" href="http://vlinux.biz" target="_blank">VServer</a> Kunden berichten. Bei Debian Etch ist mir das bisher noch nicht untergekommen, die Lösung des Problems ist dennoch ganz einfach.<br />
<span id="more-18"></span><br />
Der Apt-Cache ist per Default zu klein eingestellt um alle Pakete zu verwalten, weshalb man mit APT::Cache-Limit &#8220;141943904&#8243;; in der /etc/apt/apt.conf das Problem fix beheben kann.<br />
<!--adsense-block--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netz-guru.de/2008/02/13/apt-get-error-dynamic-mmap-ran-out-of-room/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DNS Traversal Checker</title>
		<link>http://www.netz-guru.de/2008/02/06/dns-traversal-checker/</link>
		<comments>http://www.netz-guru.de/2008/02/06/dns-traversal-checker/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 15:02:05 +0000</pubDate>
		<dc:creator>Florian Wiessner</dc:creator>
				<category><![CDATA[Usefull Things]]></category>

		<guid isPermaLink="false">http://www.netz-guru.de/2008/02/06/dns-traversal-checker/</guid>
		<description><![CDATA[Gibt es bei www.squish.net/dnscheck
]]></description>
			<content:encoded><![CDATA[<p>Gibt es bei <a href="http://www.squish.net/dnscheck" title="DNS Check">www.squish.net/dnscheck</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netz-guru.de/2008/02/06/dns-traversal-checker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rezeptesammlung Online</title>
		<link>http://www.netz-guru.de/2008/02/06/rezeptesammlung-online/</link>
		<comments>http://www.netz-guru.de/2008/02/06/rezeptesammlung-online/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 15:01:01 +0000</pubDate>
		<dc:creator>Florian Wiessner</dc:creator>
				<category><![CDATA[Usefull Things]]></category>
		<category><![CDATA[Backen]]></category>
		<category><![CDATA[Braten]]></category>
		<category><![CDATA[Kochen]]></category>
		<category><![CDATA[Rezepte]]></category>

		<guid isPermaLink="false">http://www.netz-guru.de/2008/02/06/rezeptesammlung-online/</guid>
		<description><![CDATA[Unter
www.kochen-braten-backen.de
gibt es eine Rezeptesammlung, die ständig erweitert wird.
]]></description>
			<content:encoded><![CDATA[<p>Unter</p>
<p><a href="http://www.kochen-braten-backen.de" title="Kochen, Braten, Backen">www.kochen-braten-backen.de</a></p>
<p>gibt es eine Rezeptesammlung, die ständig erweitert wird.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netz-guru.de/2008/02/06/rezeptesammlung-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
