<?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>Think open !</title>
	<atom:link href="http://blog.deuse-online.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.deuse-online.de</link>
	<description>Open source tipps for open minds</description>
	<lastBuildDate>Sun, 03 Jul 2011 12:44:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>JAXBContext und Message-driven Beans</title>
		<link>http://blog.deuse-online.de/2011/07/jaxbcontext-und-message-driven-beans/</link>
		<comments>http://blog.deuse-online.de/2011/07/jaxbcontext-und-message-driven-beans/#comments</comments>
		<pubDate>Sun, 03 Jul 2011 12:42:41 +0000</pubDate>
		<dc:creator>ronny</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[j2ee]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jms]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://blog.deuse-online.de/?p=351</guid>
		<description><![CDATA[Na sowas! Da gelingt es, via JMS einen Task zu parallelisieren, schon springt mir JAXB ins Kreuz mit einer seltsam anmutenden Fehlermeldung: FWK005 parse may not be called while parsing Laut java.net u.a. sieht es so aus, als wäre der XML Parser nicht so wirklich Thread-safe und damit für JMS mehr oder weniger schwierig einzusetzen. &#8230; </p><p><a class="more-link block-button" href="http://blog.deuse-online.de/2011/07/jaxbcontext-und-message-driven-beans/">Weiterlesen &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Na sowas! Da gelingt es, via JMS einen Task zu parallelisieren, schon springt mir JAXB ins Kreuz mit einer seltsam anmutenden Fehlermeldung:</p>
<pre>FWK005 parse may not be called while parsing</pre>
<p>Laut <a title="Artikel auf java.net" href="http://java.net/projects/jaxb/lists/users/archive/2008-01/message/65" target="_blank">java.net</a> u.a. sieht es so aus, als wäre der XML Parser nicht so wirklich Thread-safe und damit für JMS mehr oder weniger schwierig einzusetzen.<span id="more-351"></span></p>
<p>Grund ist das folgende Stück Code für die Initialisierung und das Unmarshalling des XML-Fragments:</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> Unmarshaller unmarshaller<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">static</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    JAXBContext ctx <span style="color: #339933;">=</span> JAXBContext.<span style="color: #006633;">newInstance</span><span style="color: #009900;">&#40;</span>MyObj.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    unmarshaller <span style="color: #339933;">=</span> ctx.<span style="color: #006633;">createUnmarshaller</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>JAXBException ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ExceptionInInitializerError</span><span style="color: #009900;">&#40;</span>ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> MyObj unmarshal<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> data<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">IOException</span>, JAXBException <span style="color: #009900;">&#123;</span>
  <span style="color: #003399;">ByteArrayInputStream</span> bis <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ByteArrayInputStream</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">GZIPInputStream</span> gzis <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">GZIPInputStream</span><span style="color: #009900;">&#40;</span>bis<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>MyObj<span style="color: #009900;">&#41;</span> unmarshaller.<span style="color: #006633;">unmarshal</span><span style="color: #009900;">&#40;</span>gzis<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">finally</span> <span style="color: #009900;">&#123;</span>
      gzis.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">finally</span> <span style="color: #009900;">&#123;</span>
    bis.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Weil die Initialisierung so teuer ist, wurde eine Art Singleton umgesetzt um den Parser zwischen allen Instanzen der Klasse zu teilen. Klappt auf dem Desktop im Standalone-Betrieb auch wunderbar. Nur wenn mehrere parallel laufende Threads gleichzeitig darauf zugreifen, wird es hektisch (siehe Fehlermeldung oben). Was nun?</p>
<p>Eine Möglichkeit wäre natürlich, die JMS Message-driven Bean via @ActivationConfig auf nur eine Instanz zu beschränken:</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@ActivationConfigProperty<span style="color: #009900;">&#40;</span>propertyName <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;maxSession&quot;</span>, propertyValue <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;1&quot;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Das funktioniert prima und die Fehlermeldung taucht zunächst mal nicht mehr auf. Der Task kann damit zwar noch asynchron ausgeführt werden, leider aber nicht mehr parallel. Die Sache hat noch einen weiteren Haken: Gewöhnliche Session Beans laufen ggf. auch parallel und wenn nun beispielsweise zwei Threads gleichzeitig auf denselben JAXB Marshaller zugreifen wollen, knallts erneut.</p>
<p>Abhilfe scheint hier zunächst einmal nur ein synchronize() um den Marshaller-Zugriff herum zu machen. Als Schlüssel für das Nadelöhr wurde das Marshaller-Objekt selbst benutzt. Diese Lösung läßt für den Zugriff auf das Mashaller-Objekt zu jedem Zeitpunkt nur noch einen Thread zu:</p>
<p>&nbsp;</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">synchronize<span style="color: #009900;">&#40;</span> unmarshaller <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>MyObj<span style="color: #009900;">&#41;</span> unmarshaller.<span style="color: #006633;">unmarshal</span><span style="color: #009900;">&#40;</span>gzis<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Übrigens: So richtig cool wäre hier eine Singleton-Implementierung mit einem Pool aus N Marshaller-Objekten. Damit werde ich mich zu gegebener Zeit einmal auseinandersetzen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deuse-online.de/2011/07/jaxbcontext-und-message-driven-beans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kirschen pflücken und Projektmanagement</title>
		<link>http://blog.deuse-online.de/2011/06/kirschen-pflucken-und-projektmanagement/</link>
		<comments>http://blog.deuse-online.de/2011/06/kirschen-pflucken-und-projektmanagement/#comments</comments>
		<pubDate>Sun, 05 Jun 2011 13:40:28 +0000</pubDate>
		<dc:creator>ronny</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[projectmanagement]]></category>

		<guid isPermaLink="false">http://blog.deuse-online.de/?p=343</guid>
		<description><![CDATA[Kirschen pflücken und Projektmanagement haben auf den ersten Blick natürlich nix gemein. Doch beim Pflücken hat man sehr viel Zeit, kommt etwas ins Grübeln und dabei erschließen sich einem gar revolutionäre Analogien. Aber lest selbst&#8230; Verkorkster Projektstart Läuft mir die Nachbarin, eine nette alte Dame, am Freitag Abend über den Weg. Sie meint, dass ihr &#8230; </p><p><a class="more-link block-button" href="http://blog.deuse-online.de/2011/06/kirschen-pflucken-und-projektmanagement/">Weiterlesen &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Kirschen pflücken und Projektmanagement haben auf den ersten Blick natürlich nix gemein. Doch beim Pflücken hat man sehr viel Zeit, kommt etwas ins Grübeln und dabei erschließen sich einem gar revolutionäre Analogien. Aber lest selbst&#8230;<span id="more-343"></span></p>
<h3>Verkorkster Projektstart</h3>
<p>Läuft mir die Nachbarin, eine nette alte Dame, am Freitag Abend über den Weg. Sie meint, dass ihr Kirschbaum schon ganz schön unter der Last der Früchte ächzt, sie aber selbst zu alt sei, die Kirschen abzuernten. Ich denk mir nix weiter dabei – nur, dass es sicher eine nette Beschäftigung an der frischen Luft für mich und meine kleine Tochter wäre. Es wird sich an dem langen Wochenende sicher eine freie Lücke finden um das zu erledigen. Ich sage schließlich zu, mich darum zu kümmern.</p>
<p>Das Wochenende ist eigentlich schon seit einiger Zeit vollkommen verplant. Aber daran denkt in dem Augenblick des Gesprächs jedenfalls keiner.</p>
<h3>Planung und Analyse</h3>
<p>Ich höre mich noch fragen, ob genügend Körbe und eine große Leiter vor Ort sind. „Natürlich“, meint sie und ich geh meiner Wege. Kurz und knackig, so mag ich das. Bloß nicht zuviel drüber nachgrübeln und sich in stundenlangen Diskussionen ergehen (nix für ungut, aber die Gespräche mit der netten alten Dame ufern nur allzu leicht aus). Es geht doch nur ums Kirschen pflücken! Und schließlich ist auch Freitag Abend. Da hat man andere Dinge im Kopf als die vor einem liegende Arbeit.</p>
<p>Für die Durchführung wurde der Sonntag Vormittag reserviert. 3 Stunden sollten doch eigentlich genügen.</p>
<h3>Entwurf</h3>
<p>Da das Wochenende nun bis über beide Ohren mit Aufgaben vollgepackt war, blieb natürlich nicht viel Zeit um über die vor uns liegende Aufgabe zu reflektieren. Warum auch? Die Kirschen pflücken sich doch fast von alleine und so eine Arbeit hat man ja bereits als Knirps X-mal gemacht. Man kennt doch schließlich alle Anforderungen, Herausforderungen und Risiken. Also wozu sich den Kopf mit solchen Gedanken schwer machen?</p>
<h3>Umsetzung und (Überraschung!) neue Anforderungen</h3>
<p>Sonntag Vormittag &#8211; es ist soweit, also direkt an die Arbeit. Mit dem Töchterchen und 2 leeren Schüsseln (Frau und Schwiegermutter machten kurzfristig Eigenbedarf geltend) im Handgepäck ging es zum Garten der Nachbarin.</p>
<p>Beim Aufstellen der Stehleiter machte sich direkt Ernüchterung breit. Das Werkzeug war zwar brauchbar aber hatte so seine Ecken und Kanten. Mit anderen Worten: die Leiter war so alt wie der Baum, wankte und wackelte wie ein Lämmerschwanz. Anstatt nun mit beiden Händen die Früchte abzuernten, viel eine Hand aus um mir die nötige Stabilität zu verschaffen. Das wiederum verlangsamte die Arbeit nicht unwesentlich. Dem Krümelchen machte die Arbeit irre viel Spaß. Natürlich war sie nicht zu 100% für das Projekt einzusetzen. Es war viel Aufwand für die Einarbeitung nötig und nicht jede Kirsche fand ihren Weg in den Korb. Wir stellten dann auch sehr schnell fest, dass unsere Ausrüstung unvollständig war. Der Kleinen fiel ein, dass sie ebenfalls auf eine Leiter klettern wollte und so mußte kurzfristig noch eine weitere Stehleiter herbeigeschafft werden. Und die Körbe benötigten Haken, um sie an den Leitern befestigen zu können.</p>
<h3>Projekt Abschluß und Review</h3>
<p>Nach nunmehr 5 Stunden war die Arbeit getan. Etwas über der veranschlagten Zeit aber ganz zufrieden mit unserem Tagwerk waren wir dennoch. Nur der Kunde war aufgrund der Verspätung etwas ungehalten (weil das Mittagessen warten mußte).</p>
<p>Ein Review fand natürlich nicht statt!</p>
<h3>Und die Moral der Geschichte ist&#8230;</h3>
<p>Es ist sicher nur eine Frage der Zeit, bis Projektmanagement Seminare auf Kirschplantagen stattfinden. <img src='http://blog.deuse-online.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deuse-online.de/2011/06/kirschen-pflucken-und-projektmanagement/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Miniserver im Handgepäck</title>
		<link>http://blog.deuse-online.de/2011/05/miniserver-im-handgepack/</link>
		<comments>http://blog.deuse-online.de/2011/05/miniserver-im-handgepack/#comments</comments>
		<pubDate>Mon, 30 May 2011 18:43:38 +0000</pubDate>
		<dc:creator>ronny</dc:creator>
				<category><![CDATA[Tuxbox]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.deuse-online.de/?p=327</guid>
		<description><![CDATA[Vor kurzem war ich auf der Suche nach einer schnellen aber eleganten Debug-Lösung zum Testen des Email-Versands. Natürlich lässt sich so ein Dienst auch ganz fix von Hand schreiben (der Autor überlässt das kurzerhand dem Leser zur Übung). Aber wer will das schon? Insbesondere dann, wenn es mal wieder schnell gehen muss! Hier springt Python &#8230; </p><p><a class="more-link block-button" href="http://blog.deuse-online.de/2011/05/miniserver-im-handgepack/">Weiterlesen &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Vor kurzem war ich auf der Suche nach einer schnellen aber eleganten Debug-Lösung zum Testen des Email-Versands. Natürlich lässt sich so ein Dienst auch ganz fix von Hand schreiben (der Autor überlässt das kurzerhand dem Leser zur Übung). Aber wer will das schon? Insbesondere dann, wenn es mal wieder schnell gehen muss!<span id="more-327"></span></p>
<p>Hier springt Python in die Bresche. Mit der Klasse DebuggingServer aus dem Modul smtpd stellt es einen solchen Debugging-Mailserver in null-komma-nix auf die Beine. Host und Port lassen sich auf der Kommandozeile festlegen. Hier ein Beispielaufruf:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">python <span style="color: #660033;">-m</span> smtpd <span style="color: #660033;">-n</span> <span style="color: #660033;">-c</span> DebuggingServer localhost:<span style="color: #000000;">1025</span></pre></div></div>

<p>Der Prozess lümmelt dann auf der Konsole herum bis er über Port 1025 eine Nachricht empfängt. Diese wird prompt auf der Konsole ausgegeben, was dann beispielsweise so aussieht:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">---------- MESSAGE FOLLOWS ----------
Date: Mon, 30 May 2011 12:07:07 +0000 (GMT)
From: sender@myhost.de
Reply-To: sender@myhost.de
To: receiver@anotherhost.de
Message-ID: &amp;lt;145994206.01306757227256.JavaMail.user@hostname&amp;gt;
Subject: Hallo Welt
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
X-Peer: 127.0.0.1 
&nbsp;
Etwas Demo-Text...
------------ END MESSAGE ------------</pre></div></div>

<p>Eigentlich alles, was das Debugger-Herz begehrt, oder? Weitere Infos dazu gibt die <a title="Python Dokumentation smtpd" href="http://docs.python.org/library/smtpd.html" target="_blank">Python Dokumentation</a> her.</p>
<p>Übrigens ist der SMTP Server nicht alleine unterwegs. Im Handgepäck von Python befindet sich u.a. auch noch ein minimaler HTTP Server, um auf die Schnelle ein lokales Verzeichnis für andere Nutzer verfügbar zu machen. Aufgerufen wird der Dienst wieder über die Konsole:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">python <span style="color: #660033;">-m</span> SimpleHTTPServer</pre></div></div>

<p>Das bindet den Prozess an die IP 0.0.0.0, Port 8000. Ruft man die URL über den Browser auf, mutet die Server-Antwort zwar etwas spartanisch an, erfüllt aber voll und ganz ihren Zweck:</p>
<p><a href="http://blog.deuse-online.de/wp-content/uploads/2011/05/DirectoryListing.png"><img class="aligncenter size-medium wp-image-328" title="SimpleHTTPServer Dateiliste" src="http://blog.deuse-online.de/wp-content/uploads/2011/05/DirectoryListing-300x196.png" alt="" width="300" height="196" /></a><br />
Der Prozess gibt auf der Konsole das Access-Log des Servers aus. Wie schon vorhin sei auch in diesem Fall auf die <a title="Python Dokumentation SimpleHTTPServer" href="http://docs.python.org/library/simplehttpserver.html" target="_blank">Python Dokumentation</a> verwiesen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deuse-online.de/2011/05/miniserver-im-handgepack/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Eingefroren doch längst nicht tot</title>
		<link>http://blog.deuse-online.de/2010/12/eingefroren-doch-langst-nicht-tot/</link>
		<comments>http://blog.deuse-online.de/2010/12/eingefroren-doch-langst-nicht-tot/#comments</comments>
		<pubDate>Tue, 28 Dec 2010 19:57:34 +0000</pubDate>
		<dc:creator>ronny</dc:creator>
				<category><![CDATA[Tuxbox]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://blog.deuse-online.de/?p=286</guid>
		<description><![CDATA[Beim Basteln an der X-Server Konfiguration (/etc/X11/xorg.conf) ist an manchen Stellen der Herzinfarkt gewissermaßen vorprogrammiert. Bei einer fehlerhaften Einstellung genügt ein einfaches &#8216;startx&#8217; und plötzlich geht nix mehr. Denjenigen, die nun das System wenigstens noch kontrolliert herunterfahren wollen, kann geholfen werden. Die Rettung erscheint in Form der &#8216;SysRq&#8217; Taste. &#8216;Alt&#8217; + &#8216;SysRq&#8217; zusammen mit einer &#8230; </p><p><a class="more-link block-button" href="http://blog.deuse-online.de/2010/12/eingefroren-doch-langst-nicht-tot/">Weiterlesen &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Beim Basteln an der X-Server Konfiguration (/etc/X11/xorg.conf) ist an manchen Stellen der Herzinfarkt gewissermaßen vorprogrammiert. Bei einer fehlerhaften Einstellung genügt ein einfaches &#8216;startx&#8217; und plötzlich geht nix mehr. Denjenigen, die nun das System wenigstens noch kontrolliert herunterfahren wollen, kann geholfen werden. Die Rettung erscheint in Form der &#8216;SysRq&#8217; Taste. &#8216;Alt&#8217; + &#8216;SysRq&#8217; zusammen mit einer anderen Taste bietet die Möglichkeit, Kontrollsequenzen an den Kernel zu senden. Eine vollständige Liste dieser Sequenzen liefert u.a. die <a title="Wikipedia Artikel" href="http://en.wikipedia.org/wiki/Magic_SysRq_key" target="_blank">englische Wikipedia</a>.</p>
<p>Die für einen sauberen Neustart notwendigen Tasten kann man sich leicht über die Eselsbrücke &#8220;<span style="text-decoration: underline;"><strong>R</strong></span>eboot <span style="text-decoration: underline;"><strong>E</strong></span>ven <span style="text-decoration: underline;"><strong>I</strong></span>f <span style="text-decoration: underline;"><strong>S</strong></span>ystem <span style="text-decoration: underline;"><strong>U</strong></span>tterly <span style="text-decoration: underline;"><strong>B</strong></span>roken&#8221; einprägen. Diese Tasten lösen folgende Aktionen aus:</p>
<table>
<tbody>
<tr>
<th>Taste</th>
<th>Bedeutung</th>
</tr>
<tr>
<td>R</td>
<td>Tastatur aus dem Raw-Mode zurückholen</td>
</tr>
<tr>
<td>E</td>
<td>beendet (freundlich) alle Prozesse außer init</td>
</tr>
<tr>
<td>I</td>
<td>tötet alle übrigen Prozesse (die, welche sich beim SIGTERM taub stellten) außer init</td>
</tr>
<tr>
<td>S</td>
<td>Synchronisation aller eingehängten Dateisysteme</td>
</tr>
<tr>
<td>U</td>
<td>alle eingehängten Dateisysteme nur-lesend einhängen</td>
</tr>
<tr>
<td>B</td>
<td>Neustart des Systems</td>
</tr>
</tbody>
</table>
<p>Damit das oben beschriebene funktionieren kann, muß das Feature allerdings erst noch im Kernel aktiviert sein. Dafür ist der Kernel mit der Option &#8216;CONFIG_MAGIC_SYSRQ&#8217; zu kompilieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deuse-online.de/2010/12/eingefroren-doch-langst-nicht-tot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>/etc/motd</title>
		<link>http://blog.deuse-online.de/2010/07/etc-motd/</link>
		<comments>http://blog.deuse-online.de/2010/07/etc-motd/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 19:39:43 +0000</pubDate>
		<dc:creator>ronny</dc:creator>
				<category><![CDATA[Tuxbox]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://blog.deuse-online.de/?p=254</guid>
		<description><![CDATA[Da liegt diese Datei herum und man weiß einfach nix vernünftiges damit anzufangen. Zur Erinnerung: sie wird bei jedem erfolgreichen User-Login auf der Konsole ausgegeben. Naja&#8230; Auf unseren Servern tummelt sich eine ganze Reihe von Leuten mit mehr oder weniger Erfahrung aber umso mehr administrativen Berechtigungen. Was liegt da näher, als den lieben User zu &#8230; </p><p><a class="more-link block-button" href="http://blog.deuse-online.de/2010/07/etc-motd/">Weiterlesen &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { so-language: zxx } -->Da liegt diese Datei herum und man weiß einfach nix vernünftiges damit anzufangen. Zur Erinnerung: sie wird bei jedem erfolgreichen User-Login auf der Konsole ausgegeben. Naja&#8230; Auf unseren Servern tummelt sich eine ganze Reihe von Leuten mit mehr oder weniger Erfahrung aber umso mehr administrativen Berechtigungen. Was liegt da näher, als den lieben User zu fortwährender Aufmerksamkeit bei seinem Tun zu ermahnen?!? <img src='http://blog.deuse-online.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<pre>                                              ,-._.-._.-._.-._.-.
                                              `-.             ,-'
       .--------------------------------.       |             |
      |                                  |     ,';".________.-.
      |  great power always accompanies  |     ;';_'         )]
      |  with great responsibility       |    ;             `-|
      |                                  `.    `T-            |
       `--------------------------------._ \    |___          |
                                          `-;   |             |
                                                |..________..-|
                                               /\/ |________..|
                                          ,'`./  &gt;,(           |
                                          \_.-|_/,-/   ii  |   |
                                           `."' `-/  .-"""||    |
                                            /`^"-;   |    ||____|
                                           /     /   `.__/  | ||
                                                /           | ||</pre>
<p>Schick verpackt in etwas ASCII-Art sorgt die Mahnung nebenbei noch für etwas Frohsinn bei der Arbeit! Die Grafik hab ich mir übrigens bei <a title="Chris' Homepage" href="http://www.chris.com/ascii/index.php" target="_blank">chris.com</a> ausgeliehen, wo es übrigens noch viel mehr derartige Kunst zu finden gibt. Heißen Dank an dieser Stelle!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deuse-online.de/2010/07/etc-motd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL als JBoss DefaultDS</title>
		<link>http://blog.deuse-online.de/2010/06/postgresql-als-jboss-defaultds/</link>
		<comments>http://blog.deuse-online.de/2010/06/postgresql-als-jboss-defaultds/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 10:50:35 +0000</pubDate>
		<dc:creator>ronny</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jpa]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://blog.deuse-online.de/?p=260</guid>
		<description><![CDATA[Wenn man weiß, an welchen Stellen man schrauben muß, ist der Austausch der Hypersonic DB durch eine PostgreSQL DB als DefaultDS des JBoss gar nicht so kompliziert. Leider kann man aber aufgrund der teils doch recht unübersichtlichen Konfigurations-Dateien des JBoss dabei einiges übersehen. Darum habe ich die wichtigsten Schritte hier nochmal zusammengefaßt. JBROOT und JBSERVER &#8230; </p><p><a class="more-link block-button" href="http://blog.deuse-online.de/2010/06/postgresql-als-jboss-defaultds/">Weiterlesen &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Wenn man weiß, an welchen Stellen man schrauben muß, ist der Austausch der Hypersonic DB durch eine PostgreSQL DB als DefaultDS des JBoss gar nicht so kompliziert. Leider kann man aber aufgrund der teils doch recht unübersichtlichen Konfigurations-Dateien des JBoss dabei einiges übersehen. Darum habe ich die wichtigsten Schritte hier nochmal zusammengefaßt.<span id="more-260"></span></p>
<p><strong>JBROOT und JBSERVER</strong></p>
<p>Für die Lesbarkeit wurden die Bezeichnungen des JBoss Installationsverzeichnis durch <strong>$JBROOT</strong> und der verwendeten JBoss Konfiguration durch <strong>$JBSERVER</strong> ersetzt. Ausgehend von einer JBoss-Installation in <em>/opt/jboss-5.1.0.ga</em> und der Verwendung der default-Konfiguration gilt also:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">JBROOT</span>=<span style="color: #ff0000;">&quot;/opt/jboss-5.1.0.ga&quot;</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">JBSERVER</span>=<span style="color: #ff0000;">&quot;<span style="color: #007800;">$JBROOT</span>/server/default&quot;</span></pre></div></div>

<p><strong>Datasource anlegen</strong></p>
<p>Natürlich muß die Datenbank erstmal angelegt werden. In der <em>psql</em> Shell ist das schnell getan:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">DATABASE</span> jboss <span style="color: #993333; font-weight: bold;">WITH</span> owner<span style="color: #66cc66;">=</span>jboss encoding<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'UTF-8'</span> template<span style="color: #66cc66;">=</span>template0;</pre></div></div>

<p>Hier ist <em>jboss</em> ein zuvor angelegter Datenbank User-Account für die Authentifizierung des JBoss Prozesses. Als nächstes sollte man diese Datenbank dem JBoss bekannt machen. Bisher residierte die HSQL Datasource Konfiguration in <em>$JBSERVER/deploy/hsqldb-ds.xml</em>. Diese Datei kann man ersetzen durch <em>$JBSERVER/deploy/default-ds.xml</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;datasources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;local-tx-datasource<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #808080; font-style: italic;">&lt;!-- JNDI mapping name --&gt;</span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;jndi-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>DefaultDS<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/jndi-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #808080; font-style: italic;">&lt;!-- database connection info --&gt;</span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;connection-url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jdbc:postgresql://localhost:5432/jboss<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/connection-url<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;driver-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>org.postgresql.ds.PGPoolingDataSource<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/driver-class<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;user-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>jboss<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/user-name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;password<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>mypw<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/password<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #808080; font-style: italic;">&lt;!-- connection pool ranges --&gt;</span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;min-pool-size<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/min-pool-size<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;max-pool-size<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>100<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/max-pool-size<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #808080; font-style: italic;">&lt;!-- time for a thread to wait for a requested DB-connection --&gt;</span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;blocking-timeout-millis<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>30000<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/blocking-timeout-millis<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #808080; font-style: italic;">&lt;!-- time to wait before freeing idle connections --&gt;</span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;idle-timeout-minutes<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>5<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/idle-timeout-minutes<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #808080; font-style: italic;">&lt;!-- prepared-statement cache config --&gt;</span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;prepared-statement-cache-size<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>20<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/prepared-statement-cache-size<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;share-prepared-statements</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #808080; font-style: italic;">&lt;!-- SQL dialect --&gt;</span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;metadata<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;type-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>PostgreSQL<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/type-mapping<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/metadata<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/local-tx-datasource<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/datasources<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Damit der JBoss mit dieser Datasource etwas anfangen kann, sollte man auch das Archiv mit dem passenden PostgreSQL JDBC Treiber nach <em>$JBSERVER/lib</em> kopieren.</p>
<p><strong>JMS Persistence Provider einrichten</strong></p>
<p>Nun ist es soweit, dem JBoss JMS Provider die neue Datasource etwas schmackhafter zu machen. Die bisherige, auf HSQL basierende, Konfiguration in <em>$JBSERVER/deploy/messaging/hsqldb-persistence-service.xml</em> kann durch eine Kopie des PostgreSQL Templates in <em>$JBROOT/docs/examples/jms</em> ersetzt werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$JBSERVER</span><span style="color: #000000; font-weight: bold;">/</span>deploy<span style="color: #000000; font-weight: bold;">/</span>messaging <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> \
    <span style="color: #c20cb9; font-weight: bold;">rm</span> hsqldb-persistence-service.xml
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$JBROOT</span><span style="color: #000000; font-weight: bold;">/</span>docs<span style="color: #000000; font-weight: bold;">/</span>examples<span style="color: #000000; font-weight: bold;">/</span>jms <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> \
    <span style="color: #c20cb9; font-weight: bold;">cp</span> postgresql-persistence-service.xml <span style="color: #007800;">$JBSERVER</span><span style="color: #000000; font-weight: bold;">/</span>deploy<span style="color: #000000; font-weight: bold;">/</span>messaging</pre></div></div>

<p>Das Template ist schon recht gut auf unsere Bedürfnisse zugeschnitten. Lediglich zwei Anpassungen sind ggf. noch nötig insofern man bei seiner JMS Lösung noch nicht auf Clustering angewiesen ist: Das Flag &#8221;Clustered&#8221; sollte den Wert &#8221;false&#8221; haben und die Dependency zur &#8221;ChannelFactory&#8221; ist zu entfernen/auszukommentieren:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;attribute</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;Clustered&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
  false
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/attribute<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #808080; font-style: italic;">&lt;!--</span>
<span style="color: #808080; font-style: italic;">&lt;depends</span>
<span style="color: #808080; font-style: italic;">    optional-attribute-name=&quot;ChannelFactoryName&quot;&gt;</span>
<span style="color: #808080; font-style: italic;">  jboss.jgroups:service=ChannelFactory</span>
<span style="color: #808080; font-style: italic;">&lt;/depends&gt;</span>
<span style="color: #808080; font-style: italic;">--&gt;</span></pre></div></div>

<p><strong>Hintergrund</strong></p>
<p>HSQL ist für die Dauer der Entwicklung ein feines und unkompliziertes Werkzeug. Für den Live-Betrieb des JBoss &#8211; insbesondere wenn JMS im Spiel ist &#8211; kann es dann aber doch ganz schön auf die Bremse drücken. Aufgrund der &#8220;<em>guaranteed delivery</em>&#8221; Zusicherung des JMS Providers werden alle zu übertragenen JMS Nachrichten vor ihrem Versand &#8211; gewöhnlich in der Default Datasource &#8211; gespeichert (neudeutsch &#8220;<em>persistiert</em>&#8220;). Dieser Ansatz skaliert nicht besonders gut. Ein Austausch des RDBMS im Live-Betrieb wird schon in der JBoss Dokumentation dringend ans Herz gelegt.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deuse-online.de/2010/06/postgresql-als-jboss-defaultds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Backups mit rsync</title>
		<link>http://blog.deuse-online.de/2010/06/backups-mit-rsync/</link>
		<comments>http://blog.deuse-online.de/2010/06/backups-mit-rsync/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 12:14:04 +0000</pubDate>
		<dc:creator>ronny</dc:creator>
				<category><![CDATA[Tuxbox]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.deuse-online.de/?p=236</guid>
		<description><![CDATA[Sicherst Du schon oder betest Du noch? Als vor einiger Zeit mein Rechner damit anfing, seltsame Geräusche von sich zu geben, mußte ich spontan daran oder an was ähnliches denken. Verdrängung vielleicht. Jedenfalls mußte schnellstens eine Backup-Strategie her&#8230; Irgendeine! Denn jedes noch so einfach gestrickte Backup ist besser als gar keins, gell? Für den denkbar &#8230; </p><p><a class="more-link block-button" href="http://blog.deuse-online.de/2010/06/backups-mit-rsync/">Weiterlesen &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Sicherst Du schon oder betest Du noch? Als vor einiger Zeit mein Rechner damit anfing, seltsame Geräusche von sich zu geben, mußte ich spontan daran oder an was ähnliches denken. Verdrängung vielleicht. Jedenfalls mußte schnellstens eine Backup-Strategie her&#8230; Irgendeine! Denn jedes noch so einfach gestrickte Backup ist besser als gar keins, gell? Für den denkbar einfachsten Fall, eine 1:1 Spiegelung der Daten, ist rsync ein ganz brauchbares Werkzeug.<span id="more-236"></span></p>
<p>Wie der Name (&#8220;<em>remote synchronize</em>&#8220;) schon sagt, kann es auch remote Kopien anlegen. Bei mir kommen allerdings nur ein via CIFS gemounteter Netzwerk-Share und eine mit Ext4 formatierte externe Platte zum Einsatz. Beide werden lokal eingebunden. Im Normalfall würde sich rsync genauso verhalten wie cp und nur eine Kopie aller Daten anlegen. Stattet man den Aufruf aber mit geeigneten Parametern aus, dann ist auch eine inkrementelle Sicherung basierend auf dem <em>modification-timestamp</em> der Dateien möglich. rsync ist sogar so tough, dass es nicht mal die ganze Datei überträgt. Es zerlegt sie in Blöcke, vergleicht die Prüfsummen jedes einzelnen Blocks und überträgt so ausschließlich die geänderten Bestandteile. Richtig groß zahlt sich das erst bei einer remote-Sicherung übers Internet aus. Lokal über USB 2.0 bringt es aber sicherlich auch etwas Performance.</p>
<p>Jetzt zum praktischen Teil. Ein paar Beispiele sind &#8211; wie fast immer &#8211; besser als tausend Worte.</p>
<p><strong>Beispiel 1</strong>: Einfacher Dateitransfer</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rsync <span style="color: #660033;">-rt</span> QUELLE ZIEL</pre></div></div>

<p>Hierbei werden die Dateien aus QUELLE mit denen in ZIEL synchronisiert. Während <strong>-r</strong> (&#8220;<em>recursive</em>&#8220;) bewirkt, dass nicht nur das Verzeichnis QUELLE sondern auch dessen Inhalt in den Abgleich einbezogen wird, sorgt <strong>-t</strong> (&#8220;<em>timestamp</em>&#8220;) dafür, dass eine Aktualisierung der Dateien in ZIEL nur dann erfolgt, wenn die Datei in QUELLE einen neueren Änderungs-Zeitstempel hat.</p>
<p>Es spielt durchaus eine gewichtige Rolle, ob QUELLE mit oder ohne Slash am Ende angegeben wird. Ein Aufruf ohne Slash bewirkt, dass im ZIEL-Ordner ebenfalls das Verzeichnis QUELLE angelegt wird und die Dateien darin gespeichert werden. Kurz: Das Wurzelverzeichnis bleibt erhalten. Bei einem Slash am Ende von QUELLE wird stattdessen die Wurzel einfach weggelassen.<strong></strong></p>
<p><strong>Beispiel 2</strong>: Datenarchivierung</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rsync <span style="color: #660033;">-av</span> <span style="color: #660033;">--stats</span> QUELLE ZIEL</pre></div></div>

<p>Der Parameter <strong>-a</strong> (&#8220;<em>archive</em>&#8220;) ist die Zusammenfassung weiterer üblicher Parameter für eine Archivierung der Inhalte von QUELLE:</p>
<ul>
<li><strong>-r</strong> (&#8220;<em>recursive</em>&#8220;): QUELLE wird rekursiv gesichert</li>
<li><strong>-l</strong> (&#8220;<em>links</em>&#8220;): symbolische Links (keine Hardlinks !) werden als solche gespeichert</li>
<li><strong>-p</strong> (&#8220;<em>permissions</em>&#8220;): die in den Dateien und Verzeichnissen eingestellten Berechtigungen bleiben auch in der Kopie erhalten</li>
<li><strong>-t</strong> (&#8220;<em>timestamp</em>&#8220;): der Änderungs-Zeitstempel wird gesichert, so dass zukünftige Abgleiche nur seitdem geänderte Dateien übertragen</li>
<li><strong>-g</strong> (&#8220;<em>group</em>&#8220;): die GID (&#8220;<em>group-ID</em>&#8220;) bleibt erhalten</li>
<li><strong>-o</strong> (&#8220;<em>owner</em>&#8220;): die UID (&#8220;<em>user-ID</em>&#8220;) wird in der Kopie gespeichert</li>
<li><strong>-D</strong> (&#8220;<em>devices</em>&#8220;): Gerätedateien, Fifos u.a. sog. &#8220;<em>special files</em>&#8221; werden als solche in der Kopie abgelegt</li>
</ul>
<p>Nach der ersparten Schreibarbeit wird rsync durch das <strong>-v</strong> (&#8220;<em>verbose</em>&#8220;) noch etwas gesprächiger und gibt eine Liste der übertragenen Dateien und Verzeichnisse auf STDOUT aus. Das abschließende <strong>&#8211;stats</strong> sorgt noch für ein Statistik-Summary am Ende der Übertragung.</p>
<p><strong>Beispiel 3</strong>: Aufräumen, Teil 1 &#8211; die Axt-Variante</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rsync <span style="color: #660033;">-av</span> <span style="color: #660033;">--delete</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>-n<span style="color: #7a0874; font-weight: bold;">&#93;</span> QUELLE ZIEL</pre></div></div>

<p>Im Normalfall werden Dateien, die in QUELLE gelöscht wurden, nicht automatisch in ZIEL entfernt. Mit <strong>&#8211;delete</strong> erfolgt die Anweisung, eben genau das zu tun. Weil das Kommando aber mit Vorsicht zu genießen ist, sollte man vorher zur Sicherheit eine Trockenübung fahren: <strong>-n</strong> (&#8220;<em>dry-run</em>&#8220;) ist ein solcher Testlauf. In Verbindung mit <strong>-v</strong> sieht man eine Liste der Änderungen ohne das tatsächlich irgendwelche Dateien angefaßt werden. Ist man mit dem Ergebnis einverstanden, läßt man beim nächsten Aufruf einfach das -n weg.</p>
<p><strong>Beispiel 4</strong>: Aufräumen, Teil 2 &#8211; die sanfte Tour</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rsync <span style="color: #660033;">-avz</span> <span style="color: #660033;">--delete</span> <span style="color: #660033;">-b</span> <span style="color: #660033;">--suffix</span>=SFX <span style="color: #660033;">--backup-dir</span>=BKPDIR QUELLE ZIEL</pre></div></div>

<p>Anstelle der oben beschriebenen Axt-Lösung, kann mit <strong>-b</strong> (&#8220;<em>backup</em>&#8220;) auch auf die sanftere Variante verfahren werden: eine Kopie der zu löschenden Dateien anstatt sie direkt von der Platte zu putzen. Per default werden die Dateien nun in ZIEL umbenannt und ein Tilde-Symbol (~) an den Dateinamen rangehängt. Mit <strong>&#8211;suffix</strong> kann ein alternativer Suffix gewählt werden. Über die Option <strong>&#8211;backup-dir</strong> ist es sogar möglich, eine Art <em>Mülleimer</em>-Funktion anzuwenden: die Dateien werden dann in diesen Ordner verschoben.</p>
<p><strong>Beispiel 5</strong>: Unnötiges vom Backup ausschließen</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rsync <span style="color: #660033;">-av</span> <span style="color: #660033;">--exclude-from</span>=FILENAME <span style="color: #660033;">--stats</span> QUELLE ZIEL</pre></div></div>

<p>Über die Option <strong>&#8211;exclude-from</strong> kann eine Datei mit Dateinamens-Mustern angegeben werden, die vom Backup auszuschließen sind.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deuse-online.de/2010/06/backups-mit-rsync/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android in der Box</title>
		<link>http://blog.deuse-online.de/2010/06/android-in-der-box/</link>
		<comments>http://blog.deuse-online.de/2010/06/android-in-der-box/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 20:49:28 +0000</pubDate>
		<dc:creator>ronny</dc:creator>
				<category><![CDATA[Tuxbox]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[virtualbox]]></category>

		<guid isPermaLink="false">http://blog.deuse-online.de/?p=229</guid>
		<description><![CDATA[Android ist weit verbreitet auf mobilen Geräten. Mit der ebenfalls bei Google gehosteten x86 Live-CD Live Android können nun auch Anwender ohne Android-Handy in den Genuß dieser Plattform kommen und sie nach Herzenslust ausprobieren. Freilich kann man das heruntergeladene Image auch auf CD brennen und damit den Rechner neustarten. Mit VirtualBox steht allerdings eine &#8211; &#8230; </p><p><a class="more-link block-button" href="http://blog.deuse-online.de/2010/06/android-in-der-box/">Weiterlesen &#187;</a>]]></description>
			<content:encoded><![CDATA[<p><a title="Android Projekt-Homepage" href="http://www.android.com" target="_blank">Android</a> ist weit verbreitet auf mobilen Geräten. Mit der ebenfalls bei Google gehosteten x86 Live-CD <a title="Live-Android Projekt-Homepage" href="http://code.google.com/p/live-android" target="_blank">Live Android</a> können nun auch Anwender ohne Android-Handy in den Genuß dieser Plattform kommen und sie nach Herzenslust ausprobieren. Freilich kann man das heruntergeladene Image auch auf CD brennen und damit den Rechner neustarten. Mit <a title="VirtualBox Projekt-Homepage" href="http://www.virtualbox.org" target="_blank">VirtualBox</a> steht allerdings eine &#8211; wie ich finde &#8211; viel elegantere Alternative zur Verfügung.</p>
<p><span id="more-229"></span></p>
<p>Beginnen wir mit dem Download und dem Zusammenschrauben der zwei Teile des Images:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>live-android.googlecode.com<span style="color: #000000; font-weight: bold;">/</span>files<span style="color: #000000; font-weight: bold;">/</span>liveandroidv0.3.iso.001
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>live-android.googlecode.com<span style="color: #000000; font-weight: bold;">/</span>files<span style="color: #000000; font-weight: bold;">/</span>liveandroidv0.3.iso.002
<span style="color: #c20cb9; font-weight: bold;">cat</span> liveandroidv0.3.iso.001 liveandroidv0.3.iso.002 <span style="color: #000000; font-weight: bold;">&gt;</span> liveandroidv0.3.iso</pre></div></div>

<p>Alles übrige geht mit der VBoxManage-Schnittstelle von VirtualBox recht zügig von der Hand:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">VBoxManage createvm <span style="color: #660033;">--name</span> AndroidOS <span style="color: #660033;">--ostype</span> Linux26 <span style="color: #660033;">--register</span>
VBoxManage createhd <span style="color: #660033;">--filename</span> AndroidOS.vdi <span style="color: #660033;">--size</span> <span style="color: #000000;">512</span> <span style="color: #660033;">--variant</span> Fixed
VBoxManage modifyvm AndroidOS \
    <span style="color: #660033;">--memory</span> <span style="color: #000000;">128</span> <span style="color: #660033;">--vram</span> <span style="color: #000000;">16</span> <span style="color: #660033;">--hda</span> AndroidOS.vdi \
    <span style="color: #660033;">--dvd</span> <span style="color: #007800;">$HOME</span><span style="color: #000000; font-weight: bold;">/</span>liveandroidv0.3.iso
VBoxManage startvm AndroidOS <span style="color: #660033;">--type</span> sdl</pre></div></div>

<p>Zur Erklärung: Android basiert auf einem Linux-Kern in der Version 2.6+. Für die HDD genügen eigentlich 512 MB und Hauptspeicher sowie Video-RAM sind mit 126 MB bzw. 16 MB auch ausreichend bestückt. Gebootet wird direkt vom Live-CD Image, das zuvor ins Home-Verzeichnis heruntergeladen wurde.</p>
<p><a href="http://blog.deuse-online.de/wp-content/uploads/2010/06/AndroidOS.png"><img class="aligncenter size-medium wp-image-231" title="AndroidOS" src="http://blog.deuse-online.de/wp-content/uploads/2010/06/AndroidOS-300x233.png" alt="" width="300" height="233" /></a></p>
<p>Im Projekt-eigenen <a title="Live-Android Projekt-Wiki" href="http://code.google.com/p/live-android/w/list" target="_blank">Wiki</a> finden sich noch mehr Informationen zum Thema Konfiguration, Installation von Apps usw..</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deuse-online.de/2010/06/android-in-der-box/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ein Portscanner für die Bash</title>
		<link>http://blog.deuse-online.de/2010/06/ein-portscanner-fur-die-bash/</link>
		<comments>http://blog.deuse-online.de/2010/06/ein-portscanner-fur-die-bash/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 19:12:35 +0000</pubDate>
		<dc:creator>ronny</dc:creator>
				<category><![CDATA[Tuxbox]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.deuse-online.de/?p=206</guid>
		<description><![CDATA[Einfach nicht zu fassen, was dieses Tool alles kann! Im Funktionsumfang der Bash enthalten sind auch 2 Pseudo-Devices für die Kommunikation via TCP oder UDP: /dev/tcp/HOSTNAME/PORT und /dev/udp/HOSTNAME/PORT Beim Aufrufen der Devices sollte es sich bei HOSTNAME um einen validen (im Sinne von via DNS auflösbar) Hostnamen oder eine IP handeln. Klar eigentlich. Und PORT &#8230; </p><p><a class="more-link block-button" href="http://blog.deuse-online.de/2010/06/ein-portscanner-fur-die-bash/">Weiterlesen &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Einfach nicht zu fassen, was dieses Tool alles kann! Im Funktionsumfang der Bash enthalten sind auch 2 Pseudo-Devices für die Kommunikation via TCP oder UDP:</p>
<ul>
<li>/dev/tcp/HOSTNAME/PORT und</li>
<li>/dev/udp/HOSTNAME/PORT</li>
</ul>
<p>Beim Aufrufen der Devices sollte es sich bei HOSTNAME um einen validen (im Sinne von via DNS auflösbar) Hostnamen oder eine IP handeln. Klar eigentlich. Und PORT ist wohl auch selbsterklärend. Ausgestattet mit diesen Werkzeugen läßt sich daraus nun ein prima Portscanner, der für jeden gegebenen Port einen <a title="Begriffserklärung bei Wikipedia" href="http://de.wikipedia.org/wiki/Portscanner#TCP_connect.28.29_Scan" target="_blank">TCP connect scan</a> durchführt, bauen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">HOSTNAME</span>=<span style="color: #800000;">${1:-localhost}</span>
<span style="color: #007800;">PSTART</span>=<span style="color: #800000;">${2:-1}</span>
<span style="color: #007800;">PEND</span>=<span style="color: #800000;">${3:-1023}</span>
<span style="color: #000000; font-weight: bold;">for</span> PORT <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #007800;">$PSTART</span> <span style="color: #007800;">$PEND</span><span style="color: #000000; font-weight: bold;">`</span>; <span style="color: #000000; font-weight: bold;">do</span>
 <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000; font-weight: bold;">&gt;/</span>dev<span style="color: #000000; font-weight: bold;">/</span>tcp<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$HOSTNAME</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$PORT</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000; font-weight: bold;">&gt;/</span>dev<span style="color: #000000; font-weight: bold;">/</span>null <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$PORT</span> open&quot;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Das Skript erwartet als Parameter (in der Reihenfolge ihrer Nennung) den Namen des zu scannenden Hosts oder seine IP, den Beginn und das Ende der zu scannenden Portrange. Alle Parameter sind optional und werden ggf. durch localhost und die Ports 1-1023 ersetzt.</p>
<p>Aber immer dran denken liebe Kinder: <strong>NUR IM EIGENEN HEIM UND NICHT AUF DER STRASSE SPIELEN!!!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deuse-online.de/2010/06/ein-portscanner-fur-die-bash/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>ThinkWiki</title>
		<link>http://blog.deuse-online.de/2010/05/thinkwiki/</link>
		<comments>http://blog.deuse-online.de/2010/05/thinkwiki/#comments</comments>
		<pubDate>Fri, 28 May 2010 18:55:32 +0000</pubDate>
		<dc:creator>ronny</dc:creator>
				<category><![CDATA[Tuxbox]]></category>
		<category><![CDATA[Weiterlesen]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[sysadmin]]></category>

		<guid isPermaLink="false">http://blog.deuse-online.de/?p=200</guid>
		<description><![CDATA[Beim Basteln auf der Tuxbox, und insbesondere während der Installation von Gentoo, sind detaillierte Informationen über die Hardware-Komponenten des Rechners absolut unerläßlich. Da führt der erste Weg natürlich zur Hersteller-Seite. Zumindest was die Thinkpads angeht, bin ich da vor kurzem auf eine weitere interessante Informationsquelle gestoßen: ThinkWiki. Hier findet man eine Fülle an Infos zur &#8230; </p><p><a class="more-link block-button" href="http://blog.deuse-online.de/2010/05/thinkwiki/">Weiterlesen &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>Beim Basteln auf der Tuxbox, und insbesondere während der Installation von Gentoo, sind detaillierte Informationen über die Hardware-Komponenten des Rechners absolut unerläßlich. Da führt der erste Weg natürlich zur Hersteller-Seite.</p>
<p>Zumindest was die Thinkpads angeht, bin ich da vor kurzem auf eine weitere interessante Informationsquelle gestoßen: <a title="ThinkWiki Homepage" href="http://www.thinkwiki.org" target="_blank">ThinkWiki</a>. Hier findet man eine Fülle an Infos zur Hardware-Spezifikation verschiedener Thinkpad-Modelle. Das wird ergänzt durch detaillierte Erfahrungsberichte über die Installation verschiedener Linux-Distributionen und eine Menge Beispiel-Skripte bzgl. Einrichtung, Start und Tweaking von diversen Komponenten, z.B. Thinklight, Fingerprint-Sensor und viele andere.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deuse-online.de/2010/05/thinkwiki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

