<?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>mal aufgeschrieben.</title>
	<atom:link href="http://fh.vc/feed/" rel="self" type="application/rss+xml" />
	<link>http://fh.vc</link>
	<description></description>
	<lastBuildDate>Tue, 15 May 2012 20:42:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Deployment mit Chef &#8211; Teil 3: Vagrant</title>
		<link>http://fh.vc/archives/2012/05/deployment-mit-chef-teil-3-vagrant/</link>
		<comments>http://fh.vc/archives/2012/05/deployment-mit-chef-teil-3-vagrant/#comments</comments>
		<pubDate>Tue, 15 May 2012 20:42:27 +0000</pubDate>
		<dc:creator>fh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://core.blogs.wnd.holzhauer.it/fh/?p=71</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
Whoops. Ein Produktlaunch und ein paar Tage fiese Erkältung später, und der letzte Beitrag hier ist schon drei Wochen vorbei. Sorry. :) Nach dem eher allgemeinen Teil 1 und Teil 2 zu Chef nun endlich zum spannenden Teil: Wie nutzt &#8230; <a href="http://fh.vc/archives/2012/05/deployment-mit-chef-teil-3-vagrant/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p>Whoops. <a href="http://de.finance.yahoo.com/nachrichten/digital-pioneers-pr%C3%A4sentiert-erstes-eigenes-102205843.html">Ein Produktlaunch</a> und ein paar Tage fiese Erkältung später, und der letzte Beitrag hier ist schon drei Wochen vorbei. Sorry. :)</p>
<p>Nach dem eher allgemeinen <a href="http://fh.vc/archives/2012/04/automatisches-deployment-fur-symfony-teil-1/">Teil 1</a> und <a href="http://fh.vc/archives/2012/04/deployment-mit-chef-teil-2-was-ist-chef/">Teil 2</a> zu Chef nun endlich zum spannenden Teil: Wie nutzt man den Kram eigentlich?</p>
<p>Wie auch die Entwicklung einer Webapp startet diese Frage bei der Entwicklungsumgebung. In den meisten Projekten, in denen ich bislang meine Nase hatte, gab es meist einen von zwei Ansätzen für die Entwicklungsumgebung: Entweder gab es ein Image für eine Virtualisierungsumgebung, das herumkopiert worde, oder es wurde direkt auf der Host-Maschine ein mehr oder weniger klassischer LAMP-Stack installiert, konfiguriert, und damit entwickelt. Ein gern gesehener Gast hier war zum Beispiel <a href="http://www.apachefriends.org/de/xampp.html">XAMPP</a>. </p>
<p>Mit Chef haben wir nun den Vorteil, dass das Setup der Server jederzeit gescripted reproduziert werden kann &#8211; und genau das nutzen wir auch für unsere Entwicklungsumgebung. Mit <a href="http://vagrantup.com/">Vagrant</a> kann vollautomatisch eine Instanz in Virtualbox initialisiert und installiert werden. Damit kann jederzeit mit drei Befehlen eine neue VM aufgesetzt werden, die im Setup und Konfiguration sehr ähnlich zur Live-Umgebung ist. Vagrant existiert für Linux, Windows, OSX und Solaris.</p>
<p>Vagrant ist sehr einfach zu installieren: Zunächst muss <a href="http://www.virtualbox.org/">Virtualbox</a> installiert werden. Virtualbox ist die eigentliche virtuelle Umgebung, in der der virtuelle Server später ausgeführt wird. Ebenfalls gebraucht wird ruby &#8211; aber ich gehe mal davon aus dass jeder Entwickler das sowieso auf seinem Server schon sauber konfiguriert hat ;) Anschliessend wird vagrant mit &#8220;gem install vagrant&#8221; installiert &#8211; alternativ kann vagrant auch mit Installationspaketen installiert werden, mehr dazu <a href="http://vagrantup.com/docs/getting-started/index.html">auf der Vagrant-Website</a>.</p>
<p>Die Konfiguration der VM von Vagrant wird in einer Datei <i>Vagrantfile</i> festgelegt. Unsere Konfiguration bei Digital Pioneers sieht in etwa so aus:<br />
<script src="https://gist.github.com/2462747.js"> </script></p>
<p>Mit dieser Datei lässt sich eigentlich der Server auch schon direkt mit <i>vagrant up</i> starten und aufsetzen. Wichtig sind hier allerdings einige Pfade, die entsprechend angepasst werden müssen:<br />
<i>chef.cookbooks_path</i> ist der Pfad zu den Chef-Cookbooks, die von Vagrant ausgeführt werden sollen. Ausserdem werden zwei Verzeichnisse mit der Host-Maschine geteilt: <i>webdev</i> ist relativ logisch: In diesem Mount befindet sich der Code der App, die wir entwickeln. <i>aptcache</i> ist dagegen ein &#8220;Hack&#8221; &#8211; die von Ubuntu heruntergeladenen Pakete werden dadurch auf der Host-Maschine gespeichert. Damit müssen bei einem zweiten Aufsetzen der Virtuellen Maschine nicht erneut alle Pakete heruntergeladen werden, sondern werden direkt aus dem Cache installiert. Bonustipp: In dem Verzeichnis muss sich das (leere) Verzeichnis &#8220;partial&#8221; befinden, sonst fällt apt auf die Nase.</p>
<p>Durch das Portforwarding kann dann mit einem Zugriff auf http://localhost:8080 der Webserver der virtuellen Maschine erreicht werden.</p>
<p>Vagrant ist relativ selbsterklärend, und auch gut erklärt &#8211; vor den ersten Schritten mit Vagrant lohnt es sich aber trotzdem, den <a href="http://vagrantup.com/docs/getting-started/index.html">&#8220;Getting started&#8221;</a>-Teil der Doku von Vagrant querzulesen, da hier die wichtigsten Kommandos vorgestellt werden.</p>
<p>Im Entwicklungsalltag bei uns hat sich gezeigt, dass Vagrant zwar durchaus seine Ecken und Kanten hat: Insbesondere die Datei-Mounts, über die Daten zwischen Hostmaschine und der VM geteilt werden können ziemlich zickig sein. Auch fehlt beispielsweise ein sinnvolles Vagrant-Plugin, mit dem direkt von aussen verschiedene Shell-Kommandos in der VM ausgeführt werden können, wie etwa Unittests oder die Generierung von Sass-Assets. </p>
<p>Allerdings sind die Vorteile von Vagrant klar überwiegend: Mit Vagrant können wir mit wenigen Kommandos die Entwicklungsumgebung wieder auf den ursprünglichen Zustand zurücksetzen, das Setup der Entwicklungsumgebung und der produktiven Server wird parallel vorangetrieben, und die Einführung in ein neues Projekt ist sehr viel weniger aufwendig. </p>
]]></content:encoded>
			<wfw:commentRss>http://fh.vc/archives/2012/05/deployment-mit-chef-teil-3-vagrant/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Deployment mit Chef &#8211; Teil 2: Was ist Chef?</title>
		<link>http://fh.vc/archives/2012/04/deployment-mit-chef-teil-2-was-ist-chef/</link>
		<comments>http://fh.vc/archives/2012/04/deployment-mit-chef-teil-2-was-ist-chef/#comments</comments>
		<pubDate>Sun, 22 Apr 2012 09:13:09 +0000</pubDate>
		<dc:creator>fh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://core.blogs.wnd.holzhauer.it/fh/?p=73</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
(Zu Teil 1) Chef ist ein Produkt von Opscode, mit dem in Ruby-Scripten die Konfiguration eines Systems definiert wird. Grob gesagt also eine Art &#8220;Template Engine für den Systemadministrator&#8221;. Ein anderes häufig genutztes Produkt für diesen Anwendungsbereich ist Puppet. Die &#8230; <a href="http://fh.vc/archives/2012/04/deployment-mit-chef-teil-2-was-ist-chef/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p>(<a href="http://fh.vc/archives/2012/04/automatisches-deployment-fur-symfony-teil-1/">Zu Teil 1</a>)</p>
<p>Chef ist ein Produkt von <a href="http://www.opscode.com/chef/">Opscode</a>, mit dem in Ruby-Scripten die Konfiguration eines Systems definiert wird. Grob gesagt also eine Art &#8220;Template Engine für den Systemadministrator&#8221;.</p>
<p>Ein anderes häufig genutztes Produkt für diesen Anwendungsbereich ist <a href="http://puppetlabs.com/">Puppet</a>. Die Diskussion, welches Tool hier nun besser ist, erinnert an die klassische <a href="http://en.wikipedia.org/wiki/Editor_war">vi vs. emacs</a>-Debatte &#8211; vor der Entscheidung für das eine oder andere Tool als am besten beides einmal näher ansehen, und das geeignetere nutzen. Wir nutzen Chef. Ymmv.</p>
<p>Chef in a nutshell sieht so aus, dass man zunächst in &#8220;cookbooks&#8221; die einzelnen Dienste und Services seiner Infrastruktur definiert, und die nötigen Schritte für die Installation und Konfiguration darin festlegt. Anschliessend können diese Cookbooks dann auf einem Server verteilt und automatisch ausgeführt werden. Für die Verteilung und Ausführung gibt es verschiedene Mechanismen und Anbieter. Teilweise <a href="http://wiki.opscode.com/display/chef/Architecture">direkt bei Opscode</a>, zum Teil auch darauf aufbauende Varianten, wie <a href="http://vagrantup.com">Vagrantup</a> und <a href="http://scalarium.com">Scalarium</a>, die wir nutzen.</p>
<p>Dies hat für uns zwei wichtige Vorteile: Das Setup der Server und auch alle Konfigurationsänderungen werden in den Cookbooks durchgeführt, die in einem Git-Repository liegen. So haben wir die Konfiguration der Server komplett in einer Versionsverwaltung, in der sofort sichtbar ist, was wann geändert wurde, und auch weshalb. Das klassische Szenario eines &#8220;Quickfix in /etc/irgendwo&#8221;, der dann vom nächsten Admin übersehen wird, sollte so nicht mehr vorkommen.<br />
Ausserdem ist das Setup so automatisiert möglich: Wenn wir einen weiteren Server für unsere Infrastruktur benötigen, reichen vier Mausklicks bei <a href="http://scalarium.com">Scalarium</a>, und zehn Minuten später steht ein fertig installierter und konfigurierter Server zur Verfügung. Gerade unter Zeitdruck erspart das viel Arbeit, und vermeidet Flüchtigkeitsfehler ( &#8211; oder eben in dem Moment, an dem der Admin nachts um halb vier aus dem Bett geklingelt wird, weil irgend etwas an die Wand gefahren ist..)</p>
<p>Wie genau Chef funktioniert, und wie Cookbooks aussehen, ist schon an vielen anderen Stellen gut beschrieben worden. Ein netter Einstieg mit Codebeispielen sind zum Beispiel <a href="http://www.slideshare.net/jaycieh23/automatisierungstechnologien-fuerdieinfrastrukturmitchef-eh2011">diese Vortragsslides vom Easterhegg 2011</a>, detaillierte Dokumentation gibt es direkt im <a href="http://wiki.opscode.com/display/chef/Home">Opscode-Wiki</a>, und eine ganze Handvoll guter Tipps und Hinweise finden sich <a href="http://till.klampaeckel.de/blog/plugin/tag/chef">bei Till</a>.</p>
<p>Bei unseren ersten Schritten mit Chef hat sich auch gezeigt, dass man Chef am schnellsten versteht, wenn man einfach mal losläuft, und ausprobiert. Sehr hilfreich ist wie so oft, da fremden Code zu lesen. Eher komplexe Beispiele hat es in den Cookbooks von <a href="https://github.com/opscode/cookbooks">Opscode</a>, viel findet sich auch <a href="https://github.com/till/easybib-cookbooks">bei easybib</a>, und erste kleine Rezepte <a href="https://github.com/digitalpioneers/public-cookbooks">auch bei uns</a>.</p>
<p>Hier wird auch ein weiterer Vorteil von Chef sichtbar: Durch die standardisierte Form der Cookbooks kann man einfach Cookbooks tauschen und weiterentwickeln. So muss man nicht ständig das Rad neu erfinden, sondern kann Hilfsscripte und das Basis-Setup von anderen erfahrenen Admins übernehmen und damit weiterarbeiten. Ein Ansatz, der Programmierern der Open Source Welt als völlig selbstverständlich vorkommen dürfte, und den ich für die Administration mindestens genauso grossartig finde.</p>
<p>Im nächsten Teil der Serie dann Schluss mit der Theorie: Wir setzen uns eine Entwickler-VM mit Chef und Vagrant auf. Wer schon einmal auf eigene Faust mit Vagrant losspielen will: <a href="https://gist.github.com/2462747">Bitte sehr.</a></p>
<p>(PS: Digital Pioneers <a href="http://digitalpioneers.de/jobs/">sucht dringend fitte Entwickler und Administratoren</a> &#8211; da gibts dann Chef jeden Tag im Büro)</p>
]]></content:encoded>
			<wfw:commentRss>http://fh.vc/archives/2012/04/deployment-mit-chef-teil-2-was-ist-chef/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatisches Deployment mit Chef &#8211; Teil 1</title>
		<link>http://fh.vc/archives/2012/04/automatisches-deployment-fur-symfony-teil-1/</link>
		<comments>http://fh.vc/archives/2012/04/automatisches-deployment-fur-symfony-teil-1/#comments</comments>
		<pubDate>Thu, 12 Apr 2012 19:59:47 +0000</pubDate>
		<dc:creator>fh</dc:creator>
				<category><![CDATA[Digital Pioneers]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://core.blogs.wnd.holzhauer.it/fh/?p=64</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
Digital Pioneers, mein Arbeitgeber, entwickelt regelmässig Prototypen von Web-Applikationen, um Business-Modelle zu evaluieren. Wenn sich abzeichnet, dass ein Produkt erfolgreich wird, wird das Projekt in ein eigenes Unternehmen ausgegründet, und dort weitergetrieben. Das hat natürlich auch Auswirkungen auf unsere Entwicklung &#8230; <a href="http://fh.vc/archives/2012/04/automatisches-deployment-fur-symfony-teil-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p><a href="http://digitalpioneers.de">Digital Pioneers</a>, mein Arbeitgeber, entwickelt regelmässig Prototypen von Web-Applikationen, um Business-Modelle zu evaluieren. Wenn sich abzeichnet, dass ein Produkt erfolgreich wird, wird das Projekt in ein eigenes Unternehmen ausgegründet, und dort weitergetrieben.</p>
<p>Das hat natürlich auch Auswirkungen auf unsere Entwicklung und Administration: Eine der Herausforderungen in diesem Ansatz liegt darin, dass wir ein neues Team in ein wachsendes erfolgreiches Startup einarbeiten müssen, und anschliessend sukzessive Betrieb und Entwicklung komplett an das Team übergeben.</p>
<p>Um hier möglichst wenig Reibungsverluste bei der Übergabe zu haben, setzen wir auf Tools und Methoden, die auch gleichzeitig als Qualitätssicherung und Dokumentation dienen. Neben automatisierten Tests ist hier vor allem unser Deployment-Setup wichtig: Alle Server werden automatisiert mit <a href="http://www.opscode.com/chef/">Chef</a> administriert. Wir haben dadurch eine ganze Menge Vorteile gegenüber der klassischen &#8220;händischen&#8221; Administration:</p>
<ul>
<li>Administration als Code: Konfiguration der Server werden als Ruby-Scripte und Templates verwaltet. Dadurch gibt es ein Versionierung, Änderungen in der Konfiguration sind so dokumentiert und können auch problemlos rückgänging gemacht werden</li>
<li>Synchrone Konfiguration: Die virtuellen Maschinen, in denen die einzelnen Entwickler programmieren, werden mit den gleichen Konfigurationen beschickt, die auch die produktive Umgebung betreiben. So gibt es hier keine unvorhersehbaren Probleme durch unterschiedliche Versionen oder Modulkonfigurationen.</li>
<li>Reproduzierbare Administration: Setup der Server findet grösstenteils automatisiert statt. Wer schon einmal nach einer Feier nachts um vier in einer Root-Shell etwas reparieren musste weiss, wieviel Sicherheit es gibt, wenn die Scripte die Detailarbeit übernehmen. Auch Setup mehrerer gleicher Server hintereinander wird einfacher und schneller.</li>
<li>Logging im Betrieb: Jedes Ausführen eines Deployments oder anderen Änderung wird protokolliert. Damit ist klar, wer wann etwas geändert hat, und warum.</li>
</ul>
<p><a href="http://fh.vc/fh/files/2012/04/Bildschirmfoto-2012-04-12-um-21.50.43.png"><img class="alignleft size-medium wp-image-65" title="Deployment Logs Scalarium" src="http://fh.vc/fh/files/2012/04/Bildschirmfoto-2012-04-12-um-21.50.43-300x142.png" alt="" width="300" height="142" /></a></p>
<p>In den nächsten Tagen werde ich kurz vorstellen, was Chef eigentlich ist, wie wir unsere Entwicklungs-Maschinen mit <a href="http://vagrantup.com/">Vagrant</a> realisieren, das produktive Setup mit <a href="http://www.scalarium.com/">Scalarium</a>, und zuletzt einmal als Beispiel das Setup einer Symfony2-Applikation näher beschreiben.</p>
<p>Einige der in den nächsten Teilen beschriebenen Cookbooks haben wir auch bereits als Open Source <a href="https://github.com/digitalpioneers/public-cookbooks">released</a> &#8211; more to follow.</p>
]]></content:encoded>
			<wfw:commentRss>http://fh.vc/archives/2012/04/automatisches-deployment-fur-symfony-teil-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hallo Hamburg!</title>
		<link>http://fh.vc/archives/2011/12/hallo-hamburg/</link>
		<comments>http://fh.vc/archives/2011/12/hallo-hamburg/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 16:13:16 +0000</pubDate>
		<dc:creator>fh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://core.blogs.wnd.holzhauer.it/fh/?p=27</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
Kurznotiz eigener Sache: Nach sechs tollen Jahren in Berlin, drei Jahren als Freelancer, und mit der Diplomarbeit in der Zielgeraden, geht es bei mir bald auf zu neuen Ufern. Ich werde am 15. Januar als &#8220;Head of Engineering&#8221; bei Digital &#8230; <a href="http://fh.vc/archives/2011/12/hallo-hamburg/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p>Kurznotiz eigener Sache: Nach sechs tollen Jahren in Berlin, drei Jahren als Freelancer, und mit der Diplomarbeit in der Zielgeraden, geht es bei mir bald auf zu neuen Ufern. Ich werde am 15. Januar als &#8220;Head of Engineering&#8221; bei <a href="http://www.digital-pioneers.net/">Digital Pioneers</a> in Hamburg anfangen, und da eine Menge spannender Dinge in einem tollen Unternehmen tun.</p>
<p>Da die Wohnungssituation in Hamburg allerdings ganz schön gruselig ist, werde ich zunächst meine Wohnung in Berlin behalten, und in Hamburg nur eine kleine möblierte Wohnung nehmen.</p>
<p>Mittelfristig werde ich dann aber komplett nach Hamburg ziehen, daher das übliche Anliegen: <a href="http://fh.vc/hamburg-wohnung-gesucht/">Ich suche eine Wohnung in Hamburg.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://fh.vc/archives/2011/12/hallo-hamburg/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XMPPd: Prosody</title>
		<link>http://fh.vc/archives/2011/11/prosody/</link>
		<comments>http://fh.vc/archives/2011/11/prosody/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 19:16:10 +0000</pubDate>
		<dc:creator>fh</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://core.blogs.wnd.holzhauer.it/fh/?p=9</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
Ich nutze für mich und ein paar andere Accounts einen privaten Jabber-Server. Die letzten Jahre habe ich hier auf ejabberd gesetzt. ejabberd funktioniert solide – allerdings ist ejabberd äusserst zickig, sobald einmal ein Problem auftritt. So sind Debug-Meldungen, falls ejabberd &#8230; <a href="http://fh.vc/archives/2011/11/prosody/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p>Ich nutze für mich und ein paar andere Accounts einen privaten Jabber-Server. Die letzten Jahre habe ich hier auf <a href="http://ejabberd.im">ejabberd</a> gesetzt. ejabberd funktioniert solide – allerdings ist ejabberd äusserst zickig, sobald einmal ein Problem auftritt. So sind Debug-Meldungen, falls ejabberd mal nicht starten möchte, <a href="http://pastebin.com/ZKz66fjJ">unglaublich selbsterklärend</a>, und verschluckt sich gern auch an Dingen, die nicht unbedingt naheliegend sind. So ist es zum Beispiel ein echtes Problem, wenn der Hostname der Maschine sich ändert. </p>
<p>Da es in der letzten Zeit für einige User nun zu Verbindungsproblemen mit Google bzw Gmail kam, und ich keine Lust mehr hatte, mich nochmal mit der Erlang-Hölle der geschweiften Klammern herumzuschlagen, habe ich mich nun nach einem Ersatz umgesehen. Dabei bin ich über den in LUA geschriebenen Jabber-Server <a href="http://prosody.im/">Prosody</a> gestolpert, und habe ihn gleich ausprobiert.<br />
<span id="more-9"></span><br />
<b>Migration</b><br />
Die Migration war verblüffend einfach. Eine Installationsanleitung findet sich <a href="http://prosody.im/doc/install">auf den Seiten von Prosody</a>. Diese Anleitung nachvollziehen, anschliessend noch die gut kommentierte Config einmal mit einem Text-Editor durchgehen, und der Jabber-Server läuft. </p>
<p>Zur Migration der User-Daten von ejabberd nach prosody sind ebenfalls nur wenige Schritte nötig. Vorher muss allerdings das Script <i>ejabberd2prosody.lua</i> noch organisiert werden: Aus mir unverständlichen Gründen hat dieses Script nicht den Weg ins Ubuntu-Paket geschafft, sondern ist nur im Source von prosody zu finden. Direktlink zum Script für prosody 0.8 ist <a href="http://hg.prosody.im/0.8/raw-file/c3f39ccc7c50/tools/ejabberd2prosody.lua">dieser hier</a>.</p>
<ul>
<li>
Zuerst der Export der ejabberd-Benutzerdatenbank: <code>ejabberdctl dump export.dump</code> (Hierfür muss ejabberd noch laufen!).
</li>
<li>Anschliessend in einem leeren Verzeichnis: <code>lua ejabberd2prosody /var/lib/ejabberd/export.dump</code> &#8211; oder wo auch immer das .dump File von ejabberd hingelegt wurde &#8211; ausführen. </li>
<li>Das ejabberd2prosody-Script baut nun zwei Dinge: Eine Art &#8220;diff&#8221; für das Prosody-Config, mit der die VirtualHosts und Einstellungen von ejabberd übernommen werden, sowie ein Verzeichnis <i>data</i>, in dem die Accounts und Metadaten liegen. Der <strong>Inhalt</strong>(*) dieses Verzeichnis muss nun nach <i>/var/lib/prosody/</i> (unter Ubuntu/Debian – das Verzeichnis könnte unter Umständen bei anderen Systemen ein anderes sein).
</li>
<li>Dann noch ein restart, und alles läuft wie gehabt.</li>
</ul>
<p><b>Erste Erfahrungswerte</b><br />
Ich bin bislang zufrieden: Configdateien, Source des Servers und selbst die Storage-Daten sind in einem Format, das man mit less und Co betrachten und auch verstehen kann. Der Umstieg war eine Sache von 10 Minuten ohne jegliche Probleme. Das Commandline-Tool <em>prosodyctl</em> ist leider sehr viel einfacher als <em>ejabberdctl</em> &#8211; aber über die Jabber Service Discovery kann man auch bei prosody eigentlich alle relevanten Einstellungen und Informationen abgreifen. Prosody bietet auch noch eine Fülle an <a href="https://code.google.com/p/prosody-modules/">Modulen</a>, mit denen man die Funktionalität erweitern kann &#8211; da LUA eine relativ einfache Sprache ist, dürfte man hier im Zweifelsfall auch seine eigene Erweiterung stricken können.</p>
<p>Prosody ist sicher nicht der Jabber-Server für jeden &#8211; gerade im &#8220;heavy duty&#8221; Bereich wird er vermutlich  nicht so gut wie ejabberd abschneiden. Stichworte wie Skalierung und Verteilung dürften für Prosody vermutlich eher Fremdworte sein. Aber gerade für meinen Einsatzbereich, die klassische Nerd-Maschine mit einer Handvoll Accounts, ist es wesentlich angenehmer zu benutzen und zu debuggen. Wenn also nicht noch irgendwann ein unerwartetes Problem auftritte, kann ich auf jeden Fall Prosody weiterempfehlen.</p>
]]></content:encoded>
			<wfw:commentRss>http://fh.vc/archives/2011/11/prosody/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello World, once again</title>
		<link>http://fh.vc/archives/2011/11/hello-world-once-again/</link>
		<comments>http://fh.vc/archives/2011/11/hello-world-once-again/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 16:28:27 +0000</pubDate>
		<dc:creator>fh</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://core.blogs.wnd.holzhauer.it/fh/?p=7</guid>
		<description><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
Irgendwann kommt der Moment, an dem man feststellt, dass man doch regelmässig Dinge (be)schreiben möchte, die nicht in 140 Zeichen passen.]]></description>
			<content:encoded><![CDATA[<style type="text/css">
#leftcontainerBox {
	float:left;
	position: fixed;
	top: 60%;
	left: 70px;
}
#leftcontainerBox .buttons {
	float:left;
	clear:both;
	margin:4px 4px 4px 4px;
	padding-bottom:2px;
}
#bottomcontainerBox {
	width: 50%;
	padding-top: 1px;
}
#bottomcontainerBox .buttons {
	float: left;
	margin: 4px 4px 4px 4px;
}
</style>
<p>Irgendwann kommt der Moment, an dem man feststellt, dass man doch regelmässig Dinge (be)schreiben möchte, die nicht in 140 Zeichen passen.</p>
]]></content:encoded>
			<wfw:commentRss>http://fh.vc/archives/2011/11/hello-world-once-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

