<?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>Journal « Raphael Kallensee &#187; WebDevelopment</title>
	<atom:link href="http://raphael.kallensee.name/journal/category/webdevelopment/feed/" rel="self" type="application/rss+xml" />
	<link>http://raphael.kallensee.name/journal</link>
	<description>Web, Mobile, Design, Music.</description>
	<lastBuildDate>Sun, 08 Jan 2012 18:00:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://rkallensee.superfeedr.com/" />
	<atom:link rel="hub" href="http://pubsubhubbub.appspot.com/" />
			<item>
		<title>Installation von Etherpad Lite auf Ubuntu 10.04 Server und Apache als Reverse-Proxy + Upstart</title>
		<link>http://raphael.kallensee.name/journal/etherpad-lite-auf-ubuntu-server-apache-upstart/</link>
		<comments>http://raphael.kallensee.name/journal/etherpad-lite-auf-ubuntu-server-apache-upstart/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 19:48:30 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[FLOSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://raphael.kallensee.name/journal/?p=347</guid>
		<description><![CDATA[Etherpad Lite ist eine Neuentwicklung des kollaborativen Real-Time-Texteditors Etherpad in Node.js. Ausprobiert werden kann Etherpad Lite beispielsweise unter beta.etherpad.org. Die ursprüngliche Etherpad-Software ist enorm ressourcenhungrig und die Codebase sehr umfangreich &#8211; insbesondere die hohen Anforderungen an den Arbeitsspeicher (im laufenden Betrieb wohl ca. 1 GB!) hielten mich von der Installation auf meinem Server ab. Etherpad [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://raphael.kallensee.name/journal/wp-content/uploads/2011/09/etherpad-lite.png"><img src="http://raphael.kallensee.name/journal/wp-content/uploads/2011/09/etherpad-lite-300x138.png" alt="Screenshot von Etherpad Lite, einem kollaborativen Texteditor" title="Etherpad Lite" width="300" height="138" class="alignleft size-medium wp-image-358" /></a><a href="http://etherpad.org/">Etherpad Lite</a> ist eine <a href="http://etherpad.org/2011/08/22/major-release-etherpad-lite-v1/">Neuentwicklung</a> des kollaborativen Real-Time-Texteditors Etherpad in <a href="http://nodejs.org/">Node.js</a>. Ausprobiert werden kann Etherpad Lite beispielsweise unter <a href="http://beta.etherpad.org/">beta.etherpad.org</a>.</p>
<p>Die ursprüngliche Etherpad-Software ist enorm ressourcenhungrig und die Codebase sehr umfangreich &#8211; insbesondere die hohen Anforderungen an den Arbeitsspeicher (im laufenden Betrieb wohl ca. 1 GB!) hielten mich von der Installation auf meinem Server ab. Etherpad Lite hingegen begnügt sich nach eigenen Angaben im laufenden Betrieb mit <a href="https://github.com/Pita/etherpad-lite#readme">rund 30 MB Arbeitsspeicher</a>.</p>
<p>Diese Anleitung beschreibt die Installation von Node.js, NPM und Etherpad Lite auf Ubuntu 10.04 Server. Da in den meisten Fällen auf Port 80 eines bestehenden Servers bereits ein Webserver (in meinem Fall Apache) läuft, wird Etherpad Lite hinter Apache als Reverse-Proxy (via mod_proxy) installiert. Sicherlich nicht die beste Lösung, eine &#8220;<a href="http://nodejs.org/jsconf.pdf">non-blocking</a>&#8221; Node.js-Applikation hinter einem &#8220;blocking&#8221; Apache-Server zu installieren &#8211; <a href="http://de.wikipedia.org/wiki/Nginx">Nginx</a> wäre hier sicherlich eine bessere Wahl. Aber vorerst soll Apache als Reverse-Proxy genügen. Des weiteren richten wir eine Upstart-Konfiguration ein, die Etherpad Lite nach jedem Reboot automatisch startet.</p>
<h3>Installation von Node.js</h3>
<p>Zunächst installieren wir Node.js auf dem Server. Die Version in den Ubuntu-Paketquellen ist deutlich zu alt, deshalb müssen wir selbst kompilieren. Da wir Node.js, den Node-Paketmanager NPM und die Applikation aus Sicherheitsgründen unter einem eigenen User installieren möchten, legen wir diesen zunächst an:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">groupadd nodejs
useradd <span style="color: #660033;">-g</span> nodejs <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">bash</span> <span style="color: #660033;">-d</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nodejs nodejs
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nodejs
<span style="color: #c20cb9; font-weight: bold;">chown</span> nodejs:nodejs <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nodejs</pre></div></div>

<p>Nun wurde der User nodejs angelegt, sein Home-Verzeichnis ist /var/lib/nodejs. Nun bereiten wir den User für die Installation von Node.js und NPM vor &#8211; wir wechseln in den User nodejs:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">su</span> nodejs
<span style="color: #7a0874; font-weight: bold;">cd</span> ~</pre></div></div>

<p>Der folgende Inhalt muss in die Datei /var/lib/nodejs/.npmrc:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">root =    <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nodejs<span style="color: #000000; font-weight: bold;">/</span>.node_modules
binroot = <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nodejs<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin
manroot = <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nodejs<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">man</span></pre></div></div>

<p>Die entsprechenden Ordner müssen nun noch angelegt werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>share
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>share<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">man</span></pre></div></div>

<p>Nun fügen wir den Ordner ~/local/bin noch zum PATH hinzu &#8211; die folgende Zeile muss zum einen in die Datei /var/lib/nodejs/.bashrc, zum anderen einmal in der Shell eingegeben werden:</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;">PATH</span>=<span style="color: #007800;">$HOME</span><span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #007800;">$PATH</span></pre></div></div>

<p>Jetzt installieren wir die notwendigen Abhängigkeiten über apt / aptitude:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> build-essential python libssl-dev git-core libsqlite3-dev <span style="color: #c20cb9; font-weight: bold;">gzip</span> curl</pre></div></div>

<p>Nun kann Node.js heruntergeladen und kompiliert werden. Dazu &#8220;klonen&#8221; wir das Git-Repository und checken die letzte stabile Version aus &#8211; was spätere Updates erleichtert.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>src
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>src
<span style="color: #c20cb9; font-weight: bold;">git</span> clone <span style="color: #c20cb9; font-weight: bold;">git</span>:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>joyent<span style="color: #000000; font-weight: bold;">/</span>node.git
<span style="color: #7a0874; font-weight: bold;">cd</span> node
<span style="color: #c20cb9; font-weight: bold;">git</span> checkout v0.4.12
.<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--prefix</span>=<span style="color: #007800;">$HOME</span><span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">make</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>

<h3>Installation von NPM</h3>
<p>Jetzt ist Node.js installiert &#8211; wir benötigen aber noch den Node.js-Paketmanager NPM. Den installieren wir ebenfalls aus den GIT-Quellen:</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: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>src
<span style="color: #c20cb9; font-weight: bold;">git</span> clone https:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>isaacs<span style="color: #000000; font-weight: bold;">/</span>npm.git
<span style="color: #7a0874; font-weight: bold;">cd</span> npm
<span style="color: #c20cb9; font-weight: bold;">git</span> checkout v1.0.30
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre></div></div>

<p>Zu guter letzt legen wir noch einen Symlink an, damit NPM später das Verzeichnis für die Node-Module findet, das wir weiter oben bereits konfiguriert haben:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> ~<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>node_modules ~<span style="color: #000000; font-weight: bold;">/</span>.node_modules</pre></div></div>

<h3>Installation von Etherpad Lite</h3>
<p>Nun sind endlich die Voraussetzungen gegeben, um Etherpad Lite zu installieren. Dies tun wir ebenfalls aus den GIT-Quellen. Danach rufen wir ein Shell-Script auf, um die Abhängigkeiten zu installieren.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>node-apps
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>node-apps
<span style="color: #c20cb9; font-weight: bold;">git</span> clone <span style="color: #c20cb9; font-weight: bold;">git</span>:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>Pita<span style="color: #000000; font-weight: bold;">/</span>etherpad-lite.git
<span style="color: #7a0874; font-weight: bold;">cd</span> etherpad-lite
.<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>installDeps.sh</pre></div></div>

<p>Jetzt kann die Konfiguration angepasst werden, die sich in der Datei <code>/var/lib/nodejs/node-apps/etherpad-lite/settings.json</code> befindet. Da ich das Etherpad mit MySQL als Datenbank betreiben möchte, kommentiere ich die vorhandene SQLite-Konfiguration aus und füge den MySQL-Benutzer und den Datenbank-Namen hinzu, die ich beide vorher angelegt habe. Den &#8220;loglevel&#8221; setze ich außerdem auf &#8220;WARN&#8221;, um nicht zu viele unnötige Log-Meldungen zu schreiben.</p>
<p>Jetzt legen wir gleich eine Upstart-Konfiguration an, um sicherzustellen, dass das Etherpad nach jedem System-Neustart automatisch gestartet wird. Für eine regelmäßige Überwachung und ggf. Neustart des Etherpads im Fehlerfalle bietet sich <a href="http://mmonit.com/monit/">Monit</a> an &#8211; was aber nicht Teil dieses Artikels sein soll.</p>
<p>Wir legen nun die Datei <code>/etc/init/etherpad-lite.conf</code> mit folgendem Inhalt an (auf Grundlage <a href="https://github.com/Pita/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service">dieser Quelle</a>):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">description <span style="color: #ff0000;">&quot;etherpad-lite&quot;</span>
&nbsp;
start on started networking
stop on runlevel <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000; font-weight: bold;">!</span><span style="color: #000000;">2345</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">env</span> <span style="color: #007800;">NODEBIN</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nodejs<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>node
<span style="color: #c20cb9; font-weight: bold;">env</span> <span style="color: #007800;">EPHOME</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>nodejs<span style="color: #000000; font-weight: bold;">/</span>node-apps<span style="color: #000000; font-weight: bold;">/</span>etherpad-lite
<span style="color: #c20cb9; font-weight: bold;">env</span> <span style="color: #007800;">EPLOGS</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>etherpad-lite
<span style="color: #c20cb9; font-weight: bold;">env</span> <span style="color: #007800;">EPUSER</span>=nodejs
&nbsp;
pre-start script
    chdir <span style="color: #007800;">$EPHOME</span>
    <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #007800;">$EPLOGS</span>                              <span style="color: #000000; font-weight: bold;">||</span><span style="color: #c20cb9; font-weight: bold;">true</span>
    <span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #007800;">$EPUSER</span>:admin <span style="color: #007800;">$EPLOGS</span>                <span style="color: #000000; font-weight: bold;">||</span><span style="color: #c20cb9; font-weight: bold;">true</span>
    <span style="color: #c20cb9; font-weight: bold;">chmod</span> 0755 <span style="color: #007800;">$EPLOGS</span>                         <span style="color: #000000; font-weight: bold;">||</span><span style="color: #c20cb9; font-weight: bold;">true</span>
    <span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-R</span> <span style="color: #007800;">$EPUSER</span>:admin <span style="color: #007800;">$EPHOME</span><span style="color: #000000; font-weight: bold;">/</span>var         <span style="color: #000000; font-weight: bold;">||</span><span style="color: #c20cb9; font-weight: bold;">true</span>
<span style="color: #666666; font-style: italic;">#    exec su -s /bin/bash -c 'exec &quot;$0&quot; &quot;$@&quot;' $EPUSER $EPHOME/bin/installDeps.sh &gt;&gt; $EPLOGS/error.log || { stop; exit 1; }</span>
end script
&nbsp;
script
  <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$EPHOME</span><span style="color: #000000; font-weight: bold;">/</span>node
  <span style="color: #7a0874; font-weight: bold;">exec</span> <span style="color: #c20cb9; font-weight: bold;">su</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">bash</span> <span style="color: #660033;">-c</span> <span style="color: #ff0000;">'exec &quot;$0&quot; &quot;$@&quot;'</span> <span style="color: #007800;">$EPUSER</span> <span style="color: #007800;">$NODEBIN</span> server.js \
                        <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #007800;">$EPLOGS</span><span style="color: #000000; font-weight: bold;">/</span>access.log \
                        <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&gt;</span> <span style="color: #007800;">$EPLOGS</span><span style="color: #000000; font-weight: bold;">/</span>error.log
end script</pre></div></div>

<p><em>(Diese Upstart-Konfiguration ist noch nicht optimal &#8211; spontan gelang es mir nicht, das Shell-Script <code>installDeps.sh</code> im pre-start erfolgreich auszuführen. Deshalb muss man daran denken, dieses Script nach einem Etherpad-Update manuell auszuführen.)</em></p>
<p>Jetzt kann Etherpad ganz einfach mittels</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">start etherpad-lite</pre></div></div>

<p>gestartet werden.</p>
<h3>Einrichtung des Apache Reverse-Proxys</h3>
<p>Nun richten wir Apache ein, damit Etherpad auf Port 80 erreichbar ist. Dafür verwenden wir z.B. die Subdomain etherpad.example.lit &#8211; und folgende virtuelle Host-Konfiguration (beispielsweise in der Datei /etc/apache2/sites-available/etherpad.example.lit):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span>virtualhost <span style="color: #000000; font-weight: bold;">*</span>:<span style="color: #000000;">80</span><span style="color: #000000; font-weight: bold;">&gt;</span>
        ServerName etherpad.example.lit
&nbsp;
        ServerAdmin webmaster<span style="color: #000000; font-weight: bold;">@</span>localhost
&nbsp;
        <span style="color: #000000; font-weight: bold;">&lt;</span>ifmodule mod_proxy.c<span style="color: #000000; font-weight: bold;">&gt;</span>
            ProxyVia On
            ProxyRequests Off
            ProxyPass <span style="color: #000000; font-weight: bold;">/</span> http:<span style="color: #000000; font-weight: bold;">//</span>localhost:<span style="color: #000000;">9001</span><span style="color: #000000; font-weight: bold;">/</span>
            ProxyPassReverse <span style="color: #000000; font-weight: bold;">/</span> http:<span style="color: #000000; font-weight: bold;">//</span>localhost:<span style="color: #000000;">9001</span><span style="color: #000000; font-weight: bold;">/</span>
            ProxyPreserveHost on
            <span style="color: #000000; font-weight: bold;">&lt;</span>proxy <span style="color: #000000; font-weight: bold;">*&gt;</span>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
            <span style="color: #000000; font-weight: bold;">&lt;/</span>proxy<span style="color: #000000; font-weight: bold;">&gt;</span>
        <span style="color: #000000; font-weight: bold;">&lt;/</span>ifmodule<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
        ErrorLog <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>etherpad-lite<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>error.log
&nbsp;
        <span style="color: #666666; font-style: italic;"># Possible values include: debug, info, notice, warn, error, crit,</span>
        <span style="color: #666666; font-style: italic;"># alert, emerg.</span>
        LogLevel warn
&nbsp;
        CustomLog <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>etherpad-lite<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>access.log combined
        ServerSignature Off
<span style="color: #000000; font-weight: bold;">&lt;/</span>virtualhost<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Wichtig: das Verzeichnis <code>/var/log/etherpad-lite/apache2/</code> für die Apache-Logs muss angelegt werden!</p>
<p>Daraufhin kann der oben angelegte virtuelle Apache-Host aktiviert werden. Außerdem müssen die Apache-Module mod_proxy und mod_proxy_http aktiviert sein, danach kann die Apache-Konfiguration neu geladen werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">a2ensite etherpad.example.lit
a2enmod proxy proxy_http
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 reload</pre></div></div>

<p>Nun sollte das Etherpad unter http://etherpad.example.lit erreichbar sein!</p>
<h3>Konfiguration von Logrotate</h3>
<p>Wir haben nun einige Log-Dateien unterhalb von <code>/var/log/etherpad-lite/</code>, die schnell sehr groß werden können. Deshalb konfigurieren wir Logrotate so, dass diese Dateien wöchentlich rotiert und gepackt und für acht Wochen vorgehalten werden. Dazu fügen wir einfach folgende Zeilen zur <code>/etc/logrotate.conf</code> hinzu &#8211; oder legen eine <code>/etc/logrotate.d/etherpadlite</code> mit dem folgenden Inhalt an:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># rotate etherpad lite logs</span>
<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>etherpad-lite<span style="color: #000000; font-weight: bold;">/*</span>.log <span style="color: #7a0874; font-weight: bold;">&#123;</span>
        weekly
        missingok
        rotate <span style="color: #000000;">8</span>
        compress
        notifempty
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log<span style="color: #000000; font-weight: bold;">/</span>etherpad-lite<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/*</span>.log <span style="color: #7a0874; font-weight: bold;">&#123;</span>
        weekly
        missingok
        rotate <span style="color: #000000;">8</span>
        compress
        notifempty
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<h3>Installation von Abiword für Import/Export (optional)</h3>
<p>Für den erweiterten Import/Export muss die Textverarbeitungs-Software <a href="http://www.abisource.com/">Abiword</a> installiert werden &#8211; deren Binaries benutzt Etherpad zum Lesen und Schreiben von Dokumenten. In Ubuntu 10.04 ist Abiword in den Paketquellen vorhanden, deshalb reicht ein:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> abiword</pre></div></div>

<p>Daraufhin muss in der <code>/var/lib/nodejs/node-apps/etherpad-lite/settings.json</code> der Pfad zum Abiword-Binary angepasst werden:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">/* This is the path to the Abiword executable. Setting it to null, disables abiword.
     Abiword is needed to enable the import/export of pads*/</span>
  <span style="color: #3366CC;">&quot;abiword&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;/usr/bin/abiword&quot;</span><span style="color: #339933;">,</span></pre></div></div>

<p>Nach einem Neustart mittels</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">stop etherpad-lite
start etherpad-lite</pre></div></div>

<p>stehen die erweiterten Import-/Export-Funktionen zur Verfügung &#8211; dann kann ein Pad beispielsweise auch als PDF exportiert werden.</p>
<h3>Abschluss</h3>
<p>Etherpad Lite ist meiner Meinung nach ein sehr nützliches Tool, um gemeinsam Dokumente zu bearbeiten, Protokolle und To-Do-Listen zu erstellen usw. &#8211; was durch die Export-Funktion in viele Formate sehr gut ergänzt wird. Es existieren auch bereits viele Bibliotheken und Plugins, welche die HTTP-API von Etherpad nutzen, um Etherpads in eigenen Applikationen bequem einzubinden &#8211; Libraries für <a href="https://github.com/jhollinger/ruby-etherpad-lite">Ruby</a>, <a href="https://github.com/tomnomnom/etherpad-lite-client">PHP</a>, ein <a href="https://github.com/johnyma22/etherpad-lite-jquery-plugin">jQuery-Plugin</a>, ein <a href="http://drupal.org/sandbox/webflo/1255474">Drupal-Modul</a> (im Entwicklungsstadium) und viele mehr.</p>
<p>Ein Hinweis zum Schluss: diese Anleitung stellt sicher kein Optimum dar &#8211; jedoch war es mir wichtig, Node.JS sowie NPM nicht als <code>root</code>-User zu installieren. Deshalb weicht diese Anleitung zum Teil von den meisten im Netz zu findenden Anleitungen ab. Verbesserungsvorschläge nehme ich gern per Kommentar oder E-Mail entgegen!</p>
<p>Quellen und weiterführende Links:</p>
<ul>
<li><a href="http://mrtopf.de/blog/de/ein-besseres-etherpad-dank-etherpad-lite/">Ein besseres Etherpad dank Etherpad Lite!</a></li>
<li><a href="https://github.com/joyent/node/wiki/Installation">Building and Installing Node.js</a></li>
<li><a href="https://github.com/Pita/etherpad-lite#readme">Etherpad Lite Readme</a></li>
<li><a href="http://tnovelli.net/blog/blog.2011-08-27.node-npm-user-install.html">Node.js HOWTO: Install NPM as user (not root)</a></li>
<li><a href="http://mclear.co.uk/2011/08/01/install-etherpad-lite-on-ubuntu/">Install Etherpad Lite on Ubuntu and Debian</a></li>
<li><a href="http://stackoverflow.com/questions/6514621/npm-install-locally">npm install locally</a></li>
<li><a href="https://github.com/Pita/etherpad-lite/wiki/How-to-put-Etherpad-Lite-behind-a-reverse-Proxy">How to put Etherpad Lite behind a reverse Proxy</a></li>
<li><a href="http://howtonode.org/deploying-node-upstart-monit">Deploying Node.js With Upstart and Monit</a></li>
<li><a href="http://kevin.vanzonneveld.net/techblog/article/run_nodejs_as_a_service_on_ubuntu_karmic/">Run Node.js as a Service on Ubuntu</a></li>
<li><a href="https://github.com/Pita/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service">How to deploy Etherpad Lite as a service</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/etherpad-lite-auf-ubuntu-server-apache-upstart/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PRODROMUS, ein minimaler JavaScript-XMPP-Client</title>
		<link>http://raphael.kallensee.name/journal/prodromus-ein-minimaler-javascript-xmpp-client/</link>
		<comments>http://raphael.kallensee.name/journal/prodromus-ein-minimaler-javascript-xmpp-client/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 01:01:12 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[FLOSS]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[libre]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://raphael.kallensee.name/journal/?p=297</guid>
		<description><![CDATA[Auf meiner Kontakt-Seite befindet sich schon eine Weile mein XMPP-MiniChat-Client &#8220;PRODROMUS&#8221;. Nun habe ich ihn endlich unter der AGPL veröffentlicht. &#8220;Prodromus&#8221; steht lateinisch für &#8220;Eilbote&#8221;. PRODROMUS ist ein simpler XMPP-Client, der vollständig in JavaScript geschrieben ist. Er benutzt die großartige Bibliothek Strophe.js von Jack Moffit, um sich zu einem XMPP-Server zu verbinden und ermöglicht es [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://raphael.kallensee.name/journal/wp-content/uploads/2010/08/prodromus_de.png"><img src="http://raphael.kallensee.name/journal/wp-content/uploads/2010/08/prodromus_de-280x300.png" alt="PRODROMUS Mini-XMPP-Client" title="prodromus_de" width="280" height="300" class="alignleft size-medium wp-image-298" /></a>Auf meiner <a href="/kontakt">Kontakt</a>-Seite befindet sich schon eine Weile mein XMPP-MiniChat-Client &#8220;PRODROMUS&#8221;. Nun habe ich ihn endlich unter der <a href="http://de.wikipedia.org/wiki/GNU_Affero_General_Public_License">AGPL</a> <a href="http://forge.webpresso.net/projects/prodromus">veröffentlicht</a>. &#8220;Prodromus&#8221; steht lateinisch für &#8220;Eilbote&#8221;.</p>
<p>PRODROMUS ist ein simpler <a href="http://de.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol">XMPP</a>-Client, der vollständig in JavaScript geschrieben ist. Er benutzt die großartige Bibliothek <a href="http://code.stanziq.com/strophe/">Strophe.js</a> von <a href="http://metajack.im/">Jack Moffit</a>, um sich zu einem XMPP-Server zu verbinden und ermöglicht es somit dem Besucher, mit einer vorkonfigurierten Person via XMPP zu kommunizieren. PRODROMUS ist als Ergänzung zu einem Kontaktformular gedacht &#8211; er lässt sich in bestehende Websites einbinden und erweitert die Kontaktmöglichkeiten um Echtzeit-Kommunikation.</p>
<p>Eine kurze Installationsanleitung sowie die erforderlichen Voraussetzungen gibt es <a href="http://forge.webpresso.net/projects/prodromus/wiki">im Wiki</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/prodromus-ein-minimaler-javascript-xmpp-client/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FrOSCon-Programm-App für WebOS</title>
		<link>http://raphael.kallensee.name/journal/froscon-programm-app-fur-webos/</link>
		<comments>http://raphael.kallensee.name/journal/froscon-programm-app-fur-webos/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 21:41:41 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[palm pre]]></category>
		<category><![CDATA[web os]]></category>

		<guid isPermaLink="false">http://raphael.kallensee.name/journal/?p=269</guid>
		<description><![CDATA[Wer am kommenden Wochenende zur FrOSCon nach St. Augustin fährt, kann die Programmpunkte, die er besuchen möchte, bequem auf seinem Palm WebOS-Gerät planen. Ich habe meine ursprünglich für die FOSDEM geschriebene WebOS-Anwendung erweitert und um eine Favoriten-Funktion ergänzt. Die Anwendung habe ich zur Prüfung an Palm übermittelt &#8211; sie wird hoffentlich noch rechtzeitig bis zum [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://raphael.kallensee.name/journal/wp-content/uploads/2010/08/froscon_de_20100814-01.png"><img src="http://raphael.kallensee.name/journal/wp-content/uploads/2010/08/froscon_de_20100814-01-200x300.png" alt="" title="froscon_de_20100814-01" width="200" height="300" class="alignleft size-medium wp-image-271" /></a>Wer am kommenden Wochenende zur <a href="http://froscon.org/">FrOSCon</a> nach St. Augustin fährt, kann die Programmpunkte, die er besuchen möchte, bequem auf seinem Palm WebOS-Gerät planen.</p>
<p>Ich habe meine ursprünglich für die FOSDEM geschriebene <a href="http://raphael.kallensee.name/journal/fosdem-2010-schedule-application-for-webos/">WebOS-Anwendung</a> erweitert und um eine Favoriten-Funktion ergänzt.</p>
<p>Die Anwendung habe ich zur Prüfung an Palm übermittelt &#8211; sie wird hoffentlich noch rechtzeitig bis zum Wochenende veröffentlicht. Wer sie bereits testen möchte, findet die Anwendung im <a href="http://developer.palm.com/appredirect/?packageid=net.webpresso.froscon2010">Palm Beta feed</a> &#8211; einfach diesen Link über das WebOS-Smartphone öffnen, dann kann die Anwendung einfach installiert werden.</p>
<p>Die Anwendung ist freie Software und steht unter der <a href="http://www.gnu.org/licenses/gpl.html">GPLv3</a>, der Quelltext ist <a href="http://forge.webpresso.net/projects/fosdem-webos">hier verfügbar</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/froscon-programm-app-fur-webos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installation von Redmine und Git unter Ubuntu</title>
		<link>http://raphael.kallensee.name/journal/installation-von-redmine-und-git-unter-ubuntu/</link>
		<comments>http://raphael.kallensee.name/journal/installation-von-redmine-und-git-unter-ubuntu/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 20:55:52 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[FLOSS]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://raphael.kallensee.name/journal/?p=241</guid>
		<description><![CDATA[Auf der Suche nach einer Alternative zur Software-Projektverwaltungssoftware Trac landete ich bei Redmine, einer in Ruby bzw. mit Hilfe von Rails geschriebenen Software. Die Features lassen sich sehen &#8211; vor allem die Multiprojekt-Unterstützung, Kalender und Gantt-Diagramm, Zeiterfassung und gute Unterstützung für Git sind im Vergleich zur Trac herausragend. Wie sich während der Installation herausstellte, ist [...]]]></description>
			<content:encoded><![CDATA[<p>Auf der Suche nach einer Alternative zur Software-Projektverwaltungssoftware <a href="http://trac.edgewall.org/">Trac</a> landete ich bei <a href="http://www.redmine.org/">Redmine</a>, einer in Ruby bzw. mit Hilfe von Rails geschriebenen Software. Die <a href="http://www.redmine.org/wiki/redmine/Features">Features</a> lassen sich sehen &#8211; vor allem die Multiprojekt-Unterstützung, Kalender und Gantt-Diagramm, Zeiterfassung und gute Unterstützung für <a href="http://git-scm.com/">Git</a> sind im Vergleich zur Trac herausragend. Wie sich während der Installation herausstellte, ist auch das Authentifizierungs-Feature für SVN und Git via WebDAV absolut praktisch &#8211; über die Rechte der Projektteilnehmer in Redmine wird automatisch auch der Lese- und Schreibzugriff im Versionskontrollsystem gesteuert, die Benutzer müssen also nur an einer Stelle gepflegt werden.</p>
<p>Für alle, die Redmine installieren möchten, hier ein paar meiner Erfahrungen. Die Installation erfolgte auf einem System mit Ubuntu 9.10 Server, es wird ein Apache-HTTP-Server und MySQL vorausgesetzt. Es gibt viele Möglichkeiten, eine Ruby/Rails-Anwendung zu installieren &#8211; ich habe mich für die Variante mit Apache und <a href="http://www.modrails.com">Passenger</a> (mod_rails) entschieden. </p>
<p>Damit Ruby/Rails-Anwendungen via Apache ausgeführt werden können, wird Passenger (&#8220;mod_rails&#8221;) installiert. Passenger ist auch in den Paketquellen von Ubuntu zu finden<del datetime="2010-08-13T21:22:37+00:00">, jedoch will apt für die Installation den bei mir installierten apache2-mpm-prefork sowie php5 deinstallieren</del>.</p>
<p><strong>Update:</strong> Da seit Ubuntu 10.04 das in den Paketquellen enthaltene Passenger-Modul auch mit dem apache2-mpm-prefork kompatibel ist (der für PHP5 notwendig ist), kann das Modul nun auch direkt über die Paketquellen installiert werden &#8211; was die Installation erheblich verkürzt. Siehe den entsprechenden Abschnitt unten.</p>
<h3>Installation von Passenger und weiteren Dependencies unter Ubuntu 9.10</h3>
<p>Zuerst werden die für Redmine benötigten Pakete installiert.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">aptitude</span> <span style="color: #c20cb9; font-weight: bold;">install</span> ruby rails rubygems ruby1.8-dev libgemplugin-ruby libgemplugin-ruby1.8 libruby-extras libruby1.8-extras rubygems1.8 rake apache2-threaded-dev libapache-dbi-perl libapache2-mod-perl2 libdigest-sha1-perl libopenssl-ruby build-essential</pre></div></div>

<p><em>Hinweis: bei mir wurde die über die Paketverwaltung installierte Version von Rails später nicht erkannt &#8211; und generell sollte man Rails möglichst nur auf eine Art und Weise installieren, entweder via Paketverwaltung oder gem. Deshalb sollte &#8220;rails&#8221; eventuell lieber gleich weggelassen werden. Installation via gem siehe unten.</em></p>
<p>Dann wird ein virtueller Apache-Host angelegt, dazu wird z.B. das Verzeichnis /var/www/redmine.example.lit/redmine angelegt.</p>
<p>Unter Ubuntu 9.10 ist das in den Paketquellen enthaltene Passenger-Apache-Modul nicht mit dem apache2-mpm-prefork kompatibel &#8211; der wiederum ist für PHP5 erforderlich. Deshalb habe ich mich für die Installation via <a href="http://de.wikipedia.org/wiki/RubyGems">gem</a> entschieden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> passenger</pre></div></div>

<p>Nach der Installation muss das Apache-Modul kompiliert werden, die benötigten Pakete sollten alle bereits installiert sein. Um das Modul zu erstellen, wird folgendes ausgeführt:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.8</span><span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>passenger-install-apache2-module</pre></div></div>

<p>Nun wird man durch den Kompiliervorgang des Moduls geführt, eventuell fehlende Abhängigkeiten werden beschrieben und notwendige Schritte erläutert. Danach ist das apache2-Modul kompiliert und muss noch aktiviert werden. Dazu wird die Datei /etc/apache2/mods-available/passenger.load mit folgendem Inhalt angelegt:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;"><span style="color: #00007f;">LoadModule</span> passenger_module /var/lib/gems/<span style="color: #ff0000;">1.8</span>/gems/passenger-2.2.9/ext/apache2/mod_passenger.so</pre></div></div>

<p>Nun wird noch die Modul-Konfigurationsdatei (/etc/apache2/mods-available/passenger.conf) mit folgendem Inhalt angelegt:</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">PassengerRoot /var/lib/gems/<span style="color: #ff0000;">1.8</span>/gems/passenger-2.2.9
PassengerRuby /usr/bin/ruby1.8</pre></div></div>

<p><em>(Die Pfade können bei neueren Versionen oder anderen Distributionen abweichen.)</em></p>
<p>Nun muss das Modul noch aktiviert und Apache neu gestartet werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> a2enmod passenger
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 restart</pre></div></div>

<h3>Installation von Passenger ab Ubuntu 10.04</h3>
<p>Ab Ubuntu 10.04 können fast alle Abhängigkeiten (inkl. Passenger) direkt über die Paketverwaltung installiert werden:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">aptitude</span> <span style="color: #c20cb9; font-weight: bold;">install</span> ruby rails rubygems ruby1.8-dev libgemplugin-ruby libgemplugin-ruby1.8 libruby-extras libruby1.8-extras rubygems1.8 rake libapache-dbi-perl libapache2-mod-perl2 libdigest-sha1-perl libopenssl-ruby libapache2-mod-passenger</pre></div></div>

<p><em>Hinweis: bei mir wurde die über die Paketverwaltung installierte Version von Rails später nicht erkannt &#8211; und generell sollte man Rails möglichst nur auf eine Art und Weise installieren, entweder via Paketverwaltung oder gem. Deshalb sollte &#8220;rails&#8221; eventuell lieber gleich weggelassen werden. Installation via gem siehe unten.</em></p>
<h3>Installation von Redmine</h3>
<p>Jetzt kann Redmine heruntergeladen werden. Für einfache spätere Updates wird das Auschecken des stable-Branchs via SVN oder git empfohlen. Dann reicht später ein Update über das Versionskontrollsystem zur Aktualisierung. <em>Wem die Installation via Paketverwaltung lieber ist, kann Redmine seit Ubuntu 10.04 auch direkt aus den Paketquellen installieren, hat ggf. aber nicht die aktuellste Version. Dafür reicht ein &#8220;aptitude install redmine redmine-mysql&#8221; (für die Verwendung mit MySQL als Datenbank). Mehr im <a href="http://www.redmine.org/wiki/redmine/HowTo_Install_Redmine_in_Ubuntu#Ubuntu-104-using-Passenger">offiziellen How-To</a>.</em></p>
<p>Für die Installation via SVN wird der aktuelle stabile Zweig ausgecheckt:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> <span style="color: #c20cb9; font-weight: bold;">co</span> http:<span style="color: #000000; font-weight: bold;">//</span>redmine.rubyforge.org<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>branches<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">0.9</span>-stable<span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>redmine.example.lit<span style="color: #000000; font-weight: bold;">/</span>redmine<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Nach dem Checkout sollte der Besitzer dieses Verzeichnisses und aller Unterordner/Dateien geändert werden. Entweder wird ein eigener Benutzer für Redmine angelegt oder es wird der Benutzer des Webservers (&#8220;www-data&#8221;) verwendet. Hintergrund: Passenger führt die Anwendung später mit diesem Benutzer aus! Deshalb sollte dies keinesfalls root sein.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-R</span> www-data:www-data <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>redmine.example.lit<span style="color: #000000; font-weight: bold;">/</span>redmine<span style="color: #000000; font-weight: bold;">/</span></pre></div></div>

<p>Ich habe mich für MySQL als Datenbank entschieden, es steht aber unter anderem auch SQLite zur Verfügung. Vorbereitend wird nun eine Datenbank (z.B. via phpMyAdmin) erstellt, ggf. mit eigenem DB-Benutzer:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">CREATE DATABASE <span style="color: #000000; font-weight: bold;">`</span>redmine<span style="color: #000000; font-weight: bold;">`</span> DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;</pre></div></div>

<p>Dann muss eine DB-Konfigurationsdatei aus der Beispieldatei erstellt und im Bereich &#8220;production&#8221; die richtigen DB-Verbindungsdaten angegeben 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: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>redmine.example.lit<span style="color: #000000; font-weight: bold;">/</span>redmine<span style="color: #000000; font-weight: bold;">/</span>config<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">cp</span> database.yml.example database.yml
<span style="color: #c20cb9; font-weight: bold;">nano</span> database.yml</pre></div></div>

<p>Anschließend wird der Mailversand konfiguriert:</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: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>redmine.example.lit<span style="color: #000000; font-weight: bold;">/</span>redmine<span style="color: #000000; font-weight: bold;">/</span>config<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">cp</span> email.yml.example email.yml
<span style="color: #c20cb9; font-weight: bold;">nano</span> email.yml</pre></div></div>

<p>Dort muss bei Verwendung von sendmail nur folgendes eingetragen werden:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">production:
  delivery_method: <span style="color:#ff3333; font-weight:bold;">:sendmail</span></pre></div></div>

<p>Bei der verwendeten SVN-Version muss noch ein Session-secret erzeugt werden, dies ist wohl bei den &#8220;richtigen Releases&#8221; nicht notwendig:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rake generate_session_store</pre></div></div>

<p>Nun wird die Datenbankstruktur erzeugt und die Standard-Konfiguration in die Datenbank geschrieben. Dazu wird folgendes (im Wurzelverzeichnis der Installation) aufgerufen:</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: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>redmine.example.lit<span style="color: #000000; font-weight: bold;">/</span>redmine<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> rake db:migrate <span style="color: #007800;">RAILS_ENV</span>=<span style="color: #ff0000;">&quot;production&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> rake redmine:load_default_data <span style="color: #007800;">RAILS_ENV</span>=<span style="color: #ff0000;">&quot;production&quot;</span></pre></div></div>

<p>Sollte die folgende folgende Fehlermeldung erscheinen:</p>
<blockquote><p>Missing the Rails 2.3.5 gem. Please `gem install -v=2.3.5 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.</p></blockquote>
<p>oder die folgende:</p>
<blockquote><p>The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql. rake aborted!</p></blockquote>
<p>muss Rails (wie oben erwähnt) oder der MySQL-Treiber für Rails noch wie beschrieben installiert werden. Außerdem muss ruby-openid installiert sein, damit das OpenID-Feature genutzt werden kann.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #660033;">-v</span>=2.3.5 rails
<span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> mysql
<span style="color: #c20cb9; font-weight: bold;">sudo</span> gem <span style="color: #c20cb9; font-weight: bold;">install</span> ruby-openid</pre></div></div>

<p>Nun kann der virtuelle Apache-Host nach folgendem Muster konfiguriert werden (z.B. /etc/apache2/sites-available/redmine.example.lit):</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">   &lt;<span style="color: #000000; font-weight:bold;">virtualhost</span> *:<span style="color: #ff0000;">80</span>&gt;
      <span style="color: #00007f;">ServerName</span> redmine.example.lit
      <span style="color: #00007f;">DocumentRoot</span> /var/www/redmine.example.lit/redmine/public
      &lt;<span style="color: #000000; font-weight:bold;">directory</span> /var/www/redmine.example.lit/redmine/public&gt;
         <span style="color: #00007f;">AllowOverride</span> <span style="color: #0000ff;">all</span>
         <span style="color: #00007f;">Options</span> -MultiViews
      &lt;/<span style="color: #000000; font-weight:bold;">directory</span>&gt;
   &lt;/<span style="color: #000000; font-weight:bold;">virtualhost</span>&gt;</pre></div></div>

<p>Nach dem Aktivieren des virtuellen Hosts und dem Neuladen der Apache-Konfiguration mittels</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> a2ensite redmine.example.lit
<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>apache2 reload</pre></div></div>

<p>ist Redmine über die entsprechende (Sub-)Domain erreichbar. Nun kann Redmine über die Oberfläche konfiguriert werden. Die Administrator-Zugangsdaten sind admin/admin (und sollten gleich geändert werden).</p>
<h3>Einrichten eines öffentlich lesbaren GIT-Repositorys via HTTP/WebDAV mit Redmine als Zugriffskontrolle</h3>
<p>Nach dem Anlegen einiger Projekte habe ich für diese ein Git-Repository angelegt. Git wird der Einfachheit halber für die Nutzung via HTTP/WebDAV konfiguriert, auch wenn dies deutlich weniger performant als die anderen zur Verfügung stehenden Varianten ist. Ein weiterer Vorteil ist die Erreichbarkeit auch aus Umgebungen mit restriktiven Firewalls. Außerdem kann so die anfangs erwähnte Authentifizierung via Redmine genutzt werden.</p>
<p>Falls noch nicht vorhanden, muss git installiert werden.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">aptitude</span> <span style="color: #c20cb9; font-weight: bold;">install</span> git-core</pre></div></div>

<p>Von einem installierten Apache2 mit mod_dav wird ausgegangen. Zuerst wird &#8211; am Besten außerhalb der DocumentRoot &#8211; ein Verzeichnis für das Repository angelegt. Danach wird ein git-Repository in diesem Ordner erstellt, das durch die Option &#8211;bare nicht mit einer Arbeitskopie in Verbindung steht. Anschließend wird der Benutzer und die Gruppe des Webservers als Eigentümer des Verzeichnisses gesetzt, bei Debian und Ubuntu ist dies &#8220;www-data&#8221;.</p>
<p>Wichtig ist, dass der Name des Repository-Ordners mit dem existierenden GIT-Projekt-Identifier übereinstimmt, damit Redmine später die Zuordnung gelingt.</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: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>redmine.example.lit<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #c20cb9; font-weight: bold;">git</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #c20cb9; font-weight: bold;">git</span>
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> example-project
<span style="color: #7a0874; font-weight: bold;">cd</span> example-project
<span style="color: #c20cb9; font-weight: bold;">git</span> <span style="color: #660033;">--bare</span> init
<span style="color: #7a0874; font-weight: bold;">cd</span> ..
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chown</span> <span style="color: #660033;">-R</span> www-data:www-data example-project</pre></div></div>

<p>Nun wird die Zugriffskontrolle via Redmine eingerichtet. Dazu wird erst einmal mod_perl, mod_dav und weitere Abhängigkeiten installiert und die erforderlichen Module aktiviert. Redmine stellt zur Authentifizierung ein Perl-Modul bereit.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">aptitude</span> <span style="color: #c20cb9; font-weight: bold;">install</span> libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl libdigest-sha1-perl
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">sudo</span> a2enmod dav
<span style="color: #c20cb9; font-weight: bold;">sudo</span> a2enmod dav_fs
<span style="color: #c20cb9; font-weight: bold;">sudo</span> a2enmod <span style="color: #c20cb9; font-weight: bold;">perl</span></pre></div></div>

<p>Dann wird das Redmine-Perl-Modul an die richtige Stelle verlinkt:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ln</span> <span style="color: #660033;">-s</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>redmine.example.lit<span style="color: #000000; font-weight: bold;">/</span>redmine<span style="color: #000000; font-weight: bold;">/</span>extra<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>Redmine.pm <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>perl5<span style="color: #000000; font-weight: bold;">/</span>Apache<span style="color: #000000; font-weight: bold;">/</span>Redmine.pm</pre></div></div>

<p>Nun muss ein virtueller Apache-Host für den Zugriff konfiguriert werden. Dazu wird z.B. ein neuer virtueller Apache-Host nach folgendem Muster konfiguriert (im unteren Teil den Namen sowie die Zugangsdaten für die Datenbank einsetzen). Das Verzeichnis, das als DocumentRoot angegeben ist, sollte existieren.</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">   &lt;<span style="color: #000000; font-weight:bold;">virtualhost</span> *:<span style="color: #ff0000;">80</span>&gt;
      <span style="color: #00007f;">ServerName</span> code.example.lit
      <span style="color: #00007f;">DocumentRoot</span> /var/www/redmine.example.lit/code
&nbsp;
      PerlLoadModule Apache::Redmine
&nbsp;
      <span style="color: #00007f;">Alias</span> /git /var/www/redmine.example.lit/git
&nbsp;
      &lt;<span style="color: #000000; font-weight:bold;">location</span> /git&gt;
          <span style="color: #00007f;">DAV</span> <span style="color: #0000ff;">on</span>
&nbsp;
          <span style="color: #00007f;">AuthType</span> Basic
          <span style="color: #00007f;">Require</span> valid-<span style="color: #00007f;">user</span>
          <span style="color: #00007f;">AuthName</span> <span style="color: #7f007f;">&quot;Git&quot;</span>
&nbsp;
          <span style="color: #00007f;">Options</span> +<span style="color: #0000ff;">Indexes</span> -ExecCGI -<span style="color: #0000ff;">Includes</span>
&nbsp;
          PerlAccessHandler Apache::Authn::Redmine::access_handler
          PerlAuthenHandler Apache::Authn::Redmine::authen_handler
&nbsp;
          RedmineDSN <span style="color: #7f007f;">&quot;DBI:mysql:database=redmine;host=localhost&quot;</span>
          RedmineDbUser <span style="color: #7f007f;">&quot;username&quot;</span>
          RedmineDbPass <span style="color: #7f007f;">&quot;password&quot;</span>
      &lt;/<span style="color: #000000; font-weight:bold;">location</span>&gt;
   &lt;/<span style="color: #000000; font-weight:bold;">virtualhost</span>&gt;</pre></div></div>

<p>Anschließend ist das Git-Repository des Projekts &#8220;example-project&#8221; &#8211; jedenfalls laut Beispielkonfiguration &#8211; unter code.example.lit/git/example-project erreichbar. Falls das Projekt in Redmine auf &#8220;öffentlich&#8221; geschaltet ist, kann jeder auf dieses Repository lesend zugreifen. Schreibzugriffe haben alle Redmine-Benutzer, die dem Projekt als Mitglied zugeordnet sind.</p>
<p>Damit der Repository-Browser von Redmine das Repository findet, kann es eventuell nötig sein, in der Projektkonfiguration für das Repository &#8220;Git&#8221; auszuwählen und den (lokalen!) Pfad anzugeben, z.B. /var/www/redmine.example.lit/git/example-project</p>
<p>Sollte beim Anzeigen des Repositories in Redmine ein Fehler auftreten, kann dies daran liegen, dass es noch keinen Commit gab.</p>
<p>Weiterführende Hinweise finden sich auf folgenden Seiten: </p>
<ul>
<li><a href="http://www.redmine.org/wiki/redmine/RedmineInstall">http://www.redmine.org/wiki/redmine/RedmineInstall</a></li>
<li><a href="http://www.modrails.com/documentation/Users%20guide.html">http://www.modrails.com/documentation/Users%20guide.html</a></li>
<li><a href="http://wiki.ousli.org/index.php/RedmineUbuntu">http://wiki.ousli.org/index.php/RedmineUbuntu</a></li>
<li><a href="http://www.redmine.org/wiki/redmine/HowTo_Install_Redmine_in_Ubuntu">http://www.redmine.org/wiki/redmine/HowTo_Install_Redmine_ in_Ubuntu</a></li>
<li><a href="https://help.ubuntu.com/community/RubyOnRails">https://help.ubuntu.com/community/RubyOnRails</a></li>
<li><a href="http://www.railsgarden.com/2008/04/12/configurating-passenger-mod_rails-on-slicehost-with-ubuntu-710/">http://www.railsgarden.com/2008/04/12/configurating-passenger-mod_rails-on-slicehost-with-ubuntu-710/</a></li>
<li><a href="http://library.linode.com/development/project-management/redmine/ubuntu-9.10.txt">http://library.linode.com/development/project-management/redmine/ubuntu-9.10.txt</a></li>
<li><a href="http://www.kernel.org/pub/software/scm/git/docs/howto/setup-git-server-over-http.txt">http://www.kernel.org/pub/software/scm/git/docs/howto/setup-git-server-over-http.txt</a></li>
<li><a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#setting-up-a-public-repository">http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#setting-up-a-public-repository</a></li>
<li><a href="http://www.redmine.org/wiki/1/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl">http://www.redmine.org/wiki/1/Repositories_access_control_ with_apache_mod_dav_svn_and_mod_perl</a></li>
<li><a href="http://www.redmine.org/wiki/redmine/RedmineRepositories">http://www.redmine.org/wiki/redmine/RedmineRepositories</a></li>
<li><a href="http://www.simonecarletti.com/blog/2009/07/configuring-git-repository-with-redmine/">http://www.simonecarletti.com/blog/2009/07/configuring-git-repository-with-redmine/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/installation-von-redmine-und-git-unter-ubuntu/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>XMPP und OneSocialWeb &#8211; Ausgabe 26 des OpenWebPodcasts</title>
		<link>http://raphael.kallensee.name/journal/xmpp-und-onesocialweb-ausgabe-26-des-openwebpodcasts/</link>
		<comments>http://raphael.kallensee.name/journal/xmpp-und-onesocialweb-ausgabe-26-des-openwebpodcasts/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 00:03:09 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[social web]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://raphael.kallensee.name/journal/?p=236</guid>
		<description><![CDATA[Eine neue Episode des OpenWebPodcasts ist online: in dieser Folge geht es um XMPP und OneSocialWeb, ein Forschungsprojekt von Vodafone, das ein freies, dezentrales Social Network auf Basis von XMPP und anderen Web-Standards entwerfen will. Zu Gast: ich! Da dies mein erster Podcast ist, bitte ich, eventuell auftretende Nervosität zu entschuldigen&#8230; Hier der Link zur [...]]]></description>
			<content:encoded><![CDATA[<p>Eine neue Episode des <a href="http://www.openwebpodcast.de/">OpenWebPodcasts</a> ist online: in dieser Folge geht es um <a href="http://de.wikipedia.org/wiki/Xmpp">XMPP</a> und <a href="http://onesocialweb.org/">OneSocialWeb</a>, ein Forschungsprojekt von Vodafone, das ein freies, dezentrales Social Network auf Basis von XMPP und anderen Web-Standards entwerfen will.</p>
<p>Zu Gast: <a href="http://raphael.kallensee.name">ich</a>! Da dies mein erster Podcast ist, bitte ich, eventuell auftretende Nervosität zu entschuldigen&#8230;</p>
<p>Hier der Link zur Episode:<br />
<a href="http://blog.openwebpodcast.de/308/episode-26-xmpp-und-onesocialweb/">Blog-Beitrag mit Zusammenfassung und Links</a></p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/xmpp-und-onesocialweb-ausgabe-26-des-openwebpodcasts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installation des Palm Mojo SDK 1.3.5 für WebOS unter Ubuntu 9.10</title>
		<link>http://raphael.kallensee.name/journal/installation-des-palm-mojo-sdk-1-3-5-fur-webos-unter-ubuntu-9-10/</link>
		<comments>http://raphael.kallensee.name/journal/installation-des-palm-mojo-sdk-1-3-5-fur-webos-unter-ubuntu-9-10/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 13:55:41 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[palm pre]]></category>
		<category><![CDATA[web os]]></category>

		<guid isPermaLink="false">http://raphael.kallensee.name/journal/?p=203</guid>
		<description><![CDATA[Zur Entwicklung von Anwendungen für WebOS benötigt man das Mojo-SDK von Palm. Im Folgenden eine kurze Beschreibung der Installation für die aktuelle Ubuntu-Version 9.10 (Karmic Koala). Obwohl zum aktuellen Zeitpunkt für europäische Palm Pre-Geräte noch die Firmware 1.3.1 aktuell ist, installiere ich bereits das SDK 1.3.5, da es sich bis zur Veröffentlichung der neuen Firmware [...]]]></description>
			<content:encoded><![CDATA[<p>Zur Entwicklung von Anwendungen für WebOS benötigt man das Mojo-SDK von Palm. Im Folgenden eine kurze Beschreibung der Installation für die aktuelle Ubuntu-Version 9.10 (Karmic Koala). Obwohl zum aktuellen Zeitpunkt für europäische Palm Pre-Geräte noch die Firmware 1.3.1 aktuell ist, installiere ich bereits das SDK 1.3.5, da es sich bis zur Veröffentlichung der neuen Firmware in Europa (hoffentlich) nur um Tage handeln kann&#8230;</p>
<p>Für den Emulator des SDK wird die Virtualisierungssoftware VirtualBox von Sun benötigt. Eine aktuelle Version von VirtualBox erhält man am Besten, indem man das offizielle VirtualBox-Repository zu den Paketquellen hinzufügt. Dies kann man sowohl in der /etc/apt/sources.list direkt als auch in der Gnome-Anwendung &#8220;Software-Paketquellen&#8221; (System > Systemverwaltung > Software-Paketquellen) vornehmen. In ersterem Fall wird die folgende Zeile einfach an eine geeignete Stelle der Datei eingefügt, im zweiten Fall wechselt man in den Reiter &#8220;Andere Software&#8221; und fügt dieselbe Zeile über &#8220;Hinzufügen&#8221; der Liste hinzu:</p>
<p><code>deb http://download.virtualbox.org/virtualbox/debian karmic non-free</code></p>
<p>Um den Key der neuen Paketquelle zu importieren, muss in der Konsole folgendes ausgeführt werden:</p>
<p><code>wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -</code></p>
<p>Nun kann nach einem Update der verfügbaren Pakete das Java Runtime Environment von Sun sowie VirtualBox installiert werden (Die freie Standard-Java-Runtime von Ubuntu, GCJ ist wohl mit dem SDK nicht kompatibel):</p>
<p><code>sudo apt-get update<br />
sudo apt-get install sun-java6-jre<br />
sudo apt-get install virtualbox-3.0</code></p>
<p>Auf 64bit-Systemen muss wohl noch folgendes Paket installiert werden:</p>
<p><code>sudo apt-get install ia32-libs</code></p>
<p>Dann kann es bereits an die Installation des Novacom-Service (wird benötigt) und des SDK gehen, das bequem als .deb-Paket von Palm heruntergeladen werden kann:</p>
<p><a href="https://cdn.downloads.palm.com/sdkdownloads/1.3.5.368/sdkBinaries/palm-novacom_1.0.46_i386.deb">palm-novacom_1.0.46_i386.deb</a><br />
<a href="https://cdn.downloads.palm.com/sdkdownloads/1.3.5.368/sdkBinaries/palm-sdk_1.3.5-svn234138-sdk117-pho368_i386.deb">palm-sdk_1.3.5-svn234138-sdk117-pho368_i386.deb</a></p>
<p>Die beiden Pakete können in Ubuntu einfach durch Doppelklick oder auf der Konsole via dpkg -i [Dateiname] installiert werden. Achtung: die Novacom-Version scheint seit dem SDK 1.3.5 erneuert worden zu sein &#8211; eine eventuell bestehende Novacom-Installation (z.B. für <a href="/journal/palm-pre-installation-von-preware/">WebOS Quick Install</a>) sollte also aktualisiert werden.</p>
<p>Fertig! Nun kann zum Test der Emulator mittels</p>
<p><code>palm-emulator</code></p>
<p>gestartet werden. <strong>Update</strong>: Leider erhalte ich die Fehlermeldung, dass Novacom nicht läuft. </p>
<blockquote><p>
<strong>Novacom Not Running</strong><br />
In order to install or debug applications in the Palm Emulator, the novacom service must be running on your desktop. Please verify that you have the latest Palm SDK installed correctly.
</p></blockquote>
<p>Dieser Fehler, der mit Upstart von Ubuntu Karmic zusammenhängt, sollte laut <a href="http://developer.palm.com/distribution/viewtopic.php?f=31&#038;t=2939">Palm-Developer-Forum</a> eigentlich in der aktuellen Novacom-Version behoben sein. Offensichtlich ist dennoch Handarbeit nötig, das Anlegen der Datei /etc/init/novacomd.conf &#8211; mit dem der Start von novacomd funktionieren soll &#8211; ist <a href="http://zefanjas.de/2009/11/17/palm-webos-emulator-unter-ubuntu-9-04/">hier beschrieben</a>. Vorübergehend lässt sich Novacom aber auch manuell wie folgt starten:</p>
<p><code>sudo /opt/Palm/novacom/novacomd start</code></p>
<p><strong>Update 2</strong>: Nachdem ich im Emulator-Fenster zur Auswahl der Systeme (Pre/Pixi) nach dem Start von <code>palm-emulator</code> auf &#8220;Start Emulator&#8221; klicke, passiert nichts &#8211; mttels Doppelklick auf das entsprechende System startet der Emulator allerdings problemlos.</p>
<p>Die Installationsschritte können auch direkt bei <a href="http://developer.palm.com/index.php?option=com_content&#038;view=article&#038;id=1585">Palm</a> noch einmal nachgelesen werden.</p>
<p>Ein guter und einfacher Einstieg in die ersten Schritte mit dem SDK ist Palms <a href="http://developer.palm.com/index.php?option=com_content&#038;view=article&#038;id=1758">Hello World</a>-Tutorial. Viel Erfolg mit dem SDK!</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/installation-des-palm-mojo-sdk-1-3-5-fur-webos-unter-ubuntu-9-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2.7 &#8220;Coltrane&#8221; ist fertig</title>
		<link>http://raphael.kallensee.name/journal/wordpress-27-coltrane-ist-fertig/</link>
		<comments>http://raphael.kallensee.name/journal/wordpress-27-coltrane-ist-fertig/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 23:33:29 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.kallensee.info/journal/?p=136</guid>
		<description><![CDATA[Die lang erwartete neue WordPress-Version 2.7 &#8220;Coltrane&#8221; ist heute veröffentlicht worden. Vor allem das Backend wurde komplett neu gestaltet &#8211; ich poste gerade aus dem neuen QuickPress-Widget auf dem Dashboard. Allen WordPress-Nutzern sei also das Upgrade wärmstens empfohlen!]]></description>
			<content:encoded><![CDATA[<p>Die lang erwartete neue WordPress-Version 2.7 &#8220;Coltrane&#8221; ist heute <a href="http://wordpress.org/development/2008/12/coltrane/">veröffentlicht worden</a>. Vor allem das Backend wurde komplett neu gestaltet &#8211; ich poste gerade aus dem neuen QuickPress-Widget auf dem Dashboard. Allen WordPress-Nutzern sei also das Upgrade wärmstens empfohlen!</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/wordpress-27-coltrane-ist-fertig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Defender spielen &#8211; im Favicon</title>
		<link>http://raphael.kallensee.name/journal/defender-spielen-im-favicon/</link>
		<comments>http://raphael.kallensee.name/journal/defender-spielen-im-favicon/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 16:41:58 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[spiele]]></category>

		<guid isPermaLink="false">http://www.kallensee.info/journal/?p=94</guid>
		<description><![CDATA[Ein Spiel &#8211; und das komplett in den 16&#215;16 Pixeln des Favicons! Funktioniert in Opera und Firefox. Gleich mal ausprobieren!]]></description>
			<content:encoded><![CDATA[<p>Ein Spiel &#8211; und das komplett in den 16&#215;16 Pixeln des Favicons! Funktioniert in Opera und Firefox. <a href="http://www.p01.org/releases/DHTML_contests/files/DEFENDER_of_the_favicon/">Gleich mal ausprobieren</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/defender-spielen-im-favicon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2.6 und Permalink-Problem</title>
		<link>http://raphael.kallensee.name/journal/wordpress-26-und-permalink-problem/</link>
		<comments>http://raphael.kallensee.name/journal/wordpress-26-und-permalink-problem/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 19:41:39 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.kallensee.info/journal/?p=88</guid>
		<description><![CDATA[Zuerst: WordPress 2.6 ist da! Mit tollen neuen Features (Revisionierung von Beiträgen!), aber leider auch Bugs. Nach meinem Upgrade konnte ich leider Permalinks zu Artikeln nicht mehr erreichen (das offizielle Theme gibt eine 404er-Fehlermeldung), die Übersicht samt Paging und Permalinks zu Kategorien und Tags sowie &#8220;Seiten&#8221; waren erreichbar. Zur Erklärung: ich verwendete keine mod_rewrite-Permalinks, sondern [...]]]></description>
			<content:encoded><![CDATA[<p>Zuerst: <a href="http://wordpress.org/development/2008/07/wordpress-26-tyner/">WordPress 2.6 ist da</a>! Mit tollen neuen Features (Revisionierung von Beiträgen!), aber leider auch Bugs.</p>
<p>Nach meinem Upgrade konnte ich leider Permalinks zu Artikeln nicht mehr erreichen (das offizielle Theme gibt eine 404er-Fehlermeldung), die Übersicht samt Paging und Permalinks zu Kategorien und Tags sowie &#8220;Seiten&#8221; waren erreichbar.</p>
<p>Zur Erklärung: ich verwendete keine mod_rewrite-Permalinks, sondern die PATHINFO-Permalinks im Stil</p>
<blockquote><p>http://www.kallensee.info/journal/<b>index.php</b>/2008/08/22/test-beitrag</p></blockquote>
<p>Nur bei diesen Permalinks, in denen die index.php vorkommt, tritt auch der Fehler auf.</p>
<p>Das Problem ist auch bereits <a href="http://wordpress.org/support/topic/189058">bekannt</a>. Ein Workaround wäre, in der Konfiguration unter Permalinks für Tags und Kategorien eine &#8220;Basis&#8221; einzutragen (ganz unten). Dadurch ändern sich allerdings Links zu Tags und Kategorien.</p>
<p>Ich habe den Bug gleich dazu genutzt, meine Permalinks auf die mod_rewrite-Variante umzustellen und von unnötigen Informationen zu bereinigen. Der <a href="http://seo2.0.onreact.com/top-10-fatal-url-design-mistakes">SEO Blog</a> brachte mich auf den Gedanken, dass die Datumsangabe in der URL ziemlich unnötig ist.</p>
<p>Das neue Permalink-Schema für Artikel ist deutlich schlanker als zuvor:</p>
<blockquote><p>http://www.kallensee.info/journal/test-beitrag</p></blockquote>
<p>Jetzt ist es natürlich an der Zeit, sich um die alten URLs zu kümmern. Alle Links &#8211; bis auf die Beitrags-Permalinks &#8211; werden von WordPress automatisch vom alten Format auf die neue Link-Struktur umgeleitet &#8211; Tags, Archive usw. Wichtig sind natürlich aber vor allem die Beitrags-Permalinks &#8211; die ja bei Google und anderen Blogs noch im alten Permalink-Format vorliegen. Damit die nicht auf einer Fehlerseite landen, habe ich in meine Apache-Konfiguration für den entsprechenden Host eine RedirectMatch-Direktive eingefügt:</p>
<blockquote><p>
RedirectMatch permanent ^/journal/index.php/200(6|7|8)/[0-9][0-9]/[0-9][0-9]/([A-Za-z0-9-/#]*) http://www.kallensee.info/journal/$2
</p></blockquote>
<p>Diese Direktive leitet alle Anfragen auf Beiträge des alten URL-Formats auf das neue Format um. Im Test werden aber alle URL&#8217;s korrekt umgeleitet. Wichtig: durch den Parameter &#8220;permanent&#8221; erfolgt die Weiterleitung mit dem HTTP-Statuscode 301, auf Deutsch: dem Anfragenden wird neben der neuen Adresse mitgeteilt, dass die Seite permanent &#8220;verzogen&#8221; ist. Für Suchmaschinen äußerst wichtig zu wissen.</p>
<p>Für Verbesserungsvorschläge bin ich jederzeit offen &#8211; zumindest optimieren kann man den regulären Ausdruck mit Sicherheit&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/wordpress-26-und-permalink-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User-centered services</title>
		<link>http://raphael.kallensee.name/journal/user-centered-services/</link>
		<comments>http://raphael.kallensee.name/journal/user-centered-services/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 19:35:34 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://www.kallensee.info/journal/?p=85</guid>
		<description><![CDATA[Mit identi.ca ist ein weiterer Offener Service an den Start gegangen &#8211; das war jedoch mit Sicherheit nicht der letzte Schritt in Richtung dezentralisierte, offene und User-zentrierte Services. Auf der Website von Evan Prodromou, &#8220;Erfinder&#8221; von identi.ca, finden sich Gedanken zu offenen sozialen Netzwerken. Es wird wirklich Zeit für offene Alternativen zu studiVZ, Facebook und [...]]]></description>
			<content:encoded><![CDATA[<p>Mit <a href="http://www.kallensee.info/journal/index.php/2008/07/08/identica-offenes-microblogging/">identi.ca</a> ist ein weiterer <a href="http://opendefinition.org/osd">Offener Service</a> an den Start gegangen &#8211; das war jedoch mit Sicherheit nicht der letzte Schritt in Richtung dezentralisierte, offene und <a href="http://www.atomique.org/blog/service-centered-vs-user-centered/">User-zentrierte</a> Services. Auf der Website von Evan Prodromou, &#8220;Erfinder&#8221; von identi.ca, finden sich <a href="http://evan.prodromou.name/Open_relationships">Gedanken zu offenen sozialen Netzwerken</a>. Es wird wirklich Zeit für offene Alternativen zu studiVZ, Facebook und co.!</p>
<p>Unter den Internet-Nutzern findet langsam ein Umdenken statt, wie eine kürzliche <a href="http://www.tecchannel.de/kommunikation/news/1765252/index.html">Erhebung feststellte</a>. Wichtig ist auch weiterhin die Aufklärung im Bereich Datenschutz. Mit Sicherheit wissen beispielsweise die wenigsten Nutzer der gängigen Instant-Messaging-Services, wozu sie <a href="http://www.jabber-server.de/ueber/#warum-jabber-nutzen">in den Nutzungsbedingungen zugestimmt haben</a> &#8211; und tauschen trotzdem persönlichste Informationen über diese Netzwerke aus. Eine unwahrscheinlich gute Alternative im Bereich Instant Messaging ist <a href="http://www.jabber.org">Jabber</a> bzw. XMPP. Dazu gibt es aber demnächst noch einen detaillierteren Artikel.</p>
<p>Einen passenden Artikel gegen &#8220;walled gardens&#8221; und für Dezentralisierung von Services findet man im Blog von <a href="http://chriscar.com/blog/2007/07/04/decentralize-twitter-decentralize-flickr-decentralize-facebook/">Christian Car</a>.</p>
<p><strong>Update:</strong> Das <a href="http://www.flickr.com/photos/dgen/2647715394/sizes/l/">Zitat von Evan</a> passt einfach zu gut, um es nicht zu verlinken.</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/user-centered-services/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>identi.ca &#8211; offenes Microblogging</title>
		<link>http://raphael.kallensee.name/journal/identica-offenes-microblogging/</link>
		<comments>http://raphael.kallensee.name/journal/identica-offenes-microblogging/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 23:12:27 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[jabber]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xmpp]]></category>

		<guid isPermaLink="false">http://www.kallensee.info/journal/?p=84</guid>
		<description><![CDATA[In den letzten Tagen startete identi.ca, ein sehr vielversprechender Microblogging-Service im Twitter-Stil. Allerdings viel interessanter: die zugrundeliegende Software, laconi.ca, ist Open Source. Durch die Spezifikation OpenMicroBlogging hat jeder die Möglichkeit, die Software auf seinem Webserver selbst zu installieren und mit anderen Installationen zu vernetzen. Außerdem existiert bereits eine Jaber/XMPP-Integration sowie OpenID-Suport. Die Software ist noch [...]]]></description>
			<content:encoded><![CDATA[<p>In den letzten Tagen startete <a href="http://identi.ca">identi.ca</a>, ein sehr vielversprechender Microblogging-Service im Twitter-Stil. Allerdings viel interessanter: die zugrundeliegende Software, <a href="http://laconi.ca">laconi.ca</a>, ist Open Source. Durch die Spezifikation OpenMicroBlogging hat jeder die Möglichkeit, die Software auf seinem Webserver selbst zu installieren und mit anderen Installationen zu vernetzen. Außerdem existiert bereits eine Jaber/XMPP-Integration sowie OpenID-Suport.</p>
<p>Die Software ist noch in einem recht frühen Stadium, die weitere Entwicklung bleibt auf jeden Fall spannend.</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/identica-offenes-microblogging/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Internet Explorer unter Linux</title>
		<link>http://raphael.kallensee.name/journal/internet-explorer-unter-linux/</link>
		<comments>http://raphael.kallensee.name/journal/internet-explorer-unter-linux/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 22:14:30 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.kallensee.info/journal/?p=83</guid>
		<description><![CDATA[Obwohl der Internet Explorer nicht unbedingt der beste Browser da draußen ist, benötigt man ihn dennoch &#8211; nämlich zum Testen von Websites. Durch meinen Wechsel zu Ubuntu Linux musste ich mir eine neue Lösung suchen. Da ich Windows XP noch auf einer Partition installiert habe, kann ich zwar zum Testen Windows booten &#8211; aber es [...]]]></description>
			<content:encoded><![CDATA[<p>Obwohl der Internet Explorer nicht unbedingt der beste Browser da draußen ist, benötigt man ihn dennoch &#8211; nämlich zum Testen von Websites. Durch meinen Wechsel zu <a href="http://www.ubuntu.com/">Ubuntu Linux</a> musste ich mir eine neue Lösung suchen. Da ich Windows XP noch auf einer Partition installiert habe, kann ich zwar zum Testen Windows booten &#8211; aber es geht noch besser.</p>
<p>Dank <a href="http://www.winehq.org/">Wine</a> kann man Windows-Software unter Linux laufen lassen. Und dank einem weiteren Projekt, <a href="http://www.tatanka.com.br/ies4linux/page/Main_Page">IEs4Linux</a>, wird die Installation von Internet Explorer 5, 5.5, 6 und 7 zum Kinderspiel.</p>
<p>Zuerst muss Wine und cabextract installiert werden. Das geht dank vorhandener Pakete unter Ubuntu mit</p>
<blockquote><p>sudo aptitude install wine cabextract</p></blockquote>
<p>Danach lädt man sich das aktuelle Archiv von IEs4Linux, entpackt es und startet die Installation:</p>
<blockquote><p>wget http://www.tatanka.com.br/ies4linux/downloads/ies4linux-latest.tar.gz<br />
 tar xvfz ies4linux-latest.tar.gz<br />
 cd ies4linux-*<br />
 ./ies4linux</p></blockquote>
<p>Im weiteren Verlauf kann man auswählen, welche Versionen man installiert haben möchte. Dann werden die Installationspakete vom Microsoft-Server geladen und automatisch unter Wine installiert.</p>
<p>Die Browser funktionieren bei mir &#8211; allerdings mit einigen Ecken und Kanten. Aber zum Testen sollte es allemal reichen.</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/internet-explorer-unter-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gedit als Quelltexteditor</title>
		<link>http://raphael.kallensee.name/journal/gedit-als-quelltexteditor/</link>
		<comments>http://raphael.kallensee.name/journal/gedit-als-quelltexteditor/#comments</comments>
		<pubDate>Thu, 22 May 2008 19:53:57 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.kallensee.info/journal/?p=82</guid>
		<description><![CDATA[Im Ausgangszustand hat der Standard-Texteditor von Gnome nicht alle Features, die man von einem Quelltexteditor erwartet. Der Tipp: einfach das Paket &#8220;gedit-plugins&#8221; installieren. Dann hat man unter anderem in den Einstellungen die Möglichkeit, Spaces statt Tabs zu verwenden, eine Markierung oder Zeilennummern anzuzeigen, Klammern zu markieren, automatischen Einzug und sehr vieles mehr. Damit ersetzt er [...]]]></description>
			<content:encoded><![CDATA[<p>Im Ausgangszustand hat der Standard-Texteditor von <a href="http://www.gnome.org/">Gnome</a> nicht alle Features, die man von einem Quelltexteditor erwartet. Der Tipp: einfach das Paket &#8220;gedit-plugins&#8221; installieren. Dann hat man unter anderem in den Einstellungen die Möglichkeit, Spaces statt Tabs zu verwenden, eine Markierung oder Zeilennummern anzuzeigen, Klammern zu markieren, automatischen Einzug und sehr vieles mehr. Damit ersetzt er nun ganz gut mein <a href="http://notepad-plus.sourceforge.net/">Notepad++</a>, was ich unter Windows gern verwendet habe.</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/gedit-als-quelltexteditor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Midori: ein minimaler WebKit-Browser für Gnome</title>
		<link>http://raphael.kallensee.name/journal/midori-ein-minimaler-webkit-browser-fur-gnome/</link>
		<comments>http://raphael.kallensee.name/journal/midori-ein-minimaler-webkit-browser-fur-gnome/#comments</comments>
		<pubDate>Sun, 18 May 2008 13:41:20 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.kallensee.info/journal/?p=81</guid>
		<description><![CDATA[Gerade habe ich auf der Suche nach einem WebKit-Browser für Linux etwas interessantes gefunden: Midori. Ein minimaler GTK-Browser, der aber trotzdem überraschenderweise sehr praktische Funktionen mitbringt: beispielsweise einen Papierkorb für geschlossene Tabs und eine recht gute Suchmaschinenverwaltung mit Keywords! Obwohl er noch in einer Alpha-Version vorliegt, ein sehr interessanter Browser, zumindest zum Testen von Websites [...]]]></description>
			<content:encoded><![CDATA[<p>Gerade habe ich auf der Suche nach einem WebKit-Browser für Linux etwas interessantes gefunden: <a href="http://software.twotoasts.de/?page=midori">Midori</a>. Ein minimaler GTK-Browser, der aber trotzdem überraschenderweise sehr praktische Funktionen mitbringt: beispielsweise einen Papierkorb für geschlossene Tabs und eine recht gute Suchmaschinenverwaltung mit Keywords! Obwohl er noch in einer Alpha-Version vorliegt, ein sehr interessanter Browser, zumindest zum Testen von Websites &#8211; und er ist auch in den Ubuntu-Paketquellen verfügbar.</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/midori-ein-minimaler-webkit-browser-fur-gnome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache-Fehler: pcfg_openfile: unable to check htaccess file</title>
		<link>http://raphael.kallensee.name/journal/apache-fehler-pcfg_openfile-unable-to-check-htaccess-file/</link>
		<comments>http://raphael.kallensee.name/journal/apache-fehler-pcfg_openfile-unable-to-check-htaccess-file/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 12:59:00 +0000</pubDate>
		<dc:creator>Raphael Kallensee</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[WebDevelopment]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.kallensee.info/journal/?p=77</guid>
		<description><![CDATA[Nachdem aus unerklärlichen Gründen ein Teil meines Webservers nicht mehr erreichbar war und der Browser immer meldete, dass der Zugriff auf das Verzeichnis nicht möglich sei, habe ich in den Apache-Error-Logs folgendes gefunden: (13)Permission denied: /var/www/[...]/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable Kam mir unbekannt vor &#8211; und obwohl die Fehlermeldung [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem aus unerklärlichen Gründen ein Teil meines Webservers nicht mehr erreichbar war und der Browser immer meldete, dass der Zugriff auf das Verzeichnis nicht möglich sei, habe ich in den Apache-Error-Logs folgendes gefunden:</p>
<blockquote><p>(13)Permission denied: /var/www/[...]/.htaccess pcfg_openfile: unable to check htaccess file, ensure it is readable</p></blockquote>
<p>Kam mir unbekannt vor &#8211; und obwohl die Fehlermeldung recht aussagekräftig war, kam ich erst <a href="http://wolf-u.li/693/apache-fehler-pcfg_openfile-fehler-13-beheben/">hier</a> auf die Spur: das Verzeichnis (bzw. schon ein Verzeichnis einige Ebenen tiefer) war für den Apache-User einfach nicht lesbar&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://raphael.kallensee.name/journal/apache-fehler-pcfg_openfile-unable-to-check-htaccess-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

