<?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>funkensturm. &#187; server</title>
	<atom:link href="http://funkensturm.de/category/server/feed/" rel="self" type="application/rss+xml" />
	<link>http://funkensturm.de</link>
	<description>Das funkensturm. Weblog</description>
	<lastBuildDate>Tue, 15 Nov 2011 15:04:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Nützliche Terminal&#160;Befehle</title>
		<link>http://funkensturm.de/2008/04/17/nutzliche-terminal-befehle/</link>
		<comments>http://funkensturm.de/2008/04/17/nutzliche-terminal-befehle/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 15:34:20 +0000</pubDate>
		<dc:creator>manuel</dc:creator>
				<category><![CDATA[mac os x]]></category>
		<category><![CDATA[resources]]></category>
		<category><![CDATA[schublade]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[mx record]]></category>
		<category><![CDATA[nslookup]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/?p=60</guid>
		<description><![CDATA[Hier soll eine Liste mit nützlichen Terminal Befehlen entstehen, da man so manche einfach jedes mal vergisst und dann suchen muss. Nameserver einer Domain herausfinden nslookup funkensturm.de MX Record einer Domain herausfinden nslookup -query=mx funkensturm.de DNS Cache flushen dscacheutil -flushcache Prozesse (zu einem Command) mit PID&#8217;s herausfinden ps aux &#124; grep -i ruby &#124; grep [...]]]></description>
			<content:encoded><![CDATA[<p>Hier soll eine Liste mit nützlichen Terminal Befehlen entstehen, da man so manche einfach jedes mal vergisst und dann suchen muss.</p>
<p><strong>Nameserver einer Domain herausfinden</strong><br />
nslookup funkensturm.de</p>
<p><strong>MX Record einer Domain herausfinden</strong><br />
nslookup -query=mx funkensturm.de</p>
<p><strong>DNS Cache flushen</strong><br />
dscacheutil -flushcache</p>
<p><strong>Prozesse (zu einem Command) mit PID&#8217;s herausfinden</strong><br />
ps aux | grep -i ruby<br />
| grep -i command nur wenn man die Prozesse zu einem Command haben will</p>
<p><strong>Prozesse beenden</strong><br />
kill -9 PID<br />
killall command</p>
<p>mit den zwei fang ich mal an. Wird aber immer schön erweitert. Wenn ihr welche habt einfach in die Comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2008/04/17/nutzliche-terminal-befehle/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>cap deploy &#8220;permission denied&#8221; nach upgrade auf capistrano&#160;2.1</title>
		<link>http://funkensturm.de/2008/01/09/cap-deploy-permission-denied-nach-upgrade-auf-capistrano-21/</link>
		<comments>http://funkensturm.de/2008/01/09/cap-deploy-permission-denied-nach-upgrade-auf-capistrano-21/#comments</comments>
		<pubDate>Wed, 09 Jan 2008 20:58:59 +0000</pubDate>
		<dc:creator>Captain Future</dc:creator>
				<category><![CDATA[capistrano]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[permission denied]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2008/01/09/cap-deploy-permission-denied-nach-upgrade-auf-capistrano-21/</guid>
		<description><![CDATA[Hier habe ich endlich gefunden wieso aus heiterem Himmel bei einem cap deploy mit ssh und svn (und public key authentication) immer folgender Fehler auftrat: In die /config/deploy.rb muss folgende Option mit aufgenommen werden: Wenn ihr wissen wollt wieso, müsst ihr im original Beitrag nachschauen. Es hat mit den Rechten bei der shell zu tun [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://groups.google.com/group/capistrano/browse_thread/thread/13b029f75b61c09d" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/capistrano/browse_thread/thread/13b029f75b61c09d?referer=');">Hier</a> habe ich endlich gefunden wieso aus heiterem Himmel bei einem <b>cap deploy</b> mit ssh und svn (und public key authentication) immer folgender Fehler auftrat:</p>
<p> ** [err] Permission denied, please try again.<br />
 ** [err] Permission denied, please try again.<br />
 ** [err] Permission denied (publickey,password).<br />
 ** [err] svn: Netzwerkverbindung wurde unerwartet geschlossen</p>
<p>In die <i>/config/deploy.rb</i> muss folgende Option mit aufgenommen werden:</p>
<p>   default_run_options[:pty] = true</p>
<p>Wenn ihr wissen wollt wieso, müsst ihr im <a href="http://groups.google.com/group/capistrano/browse_thread/thread/13b029f75b61c09d" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/capistrano/browse_thread/thread/13b029f75b61c09d?referer=');">original Beitrag</a> nachschauen. Es hat mit den Rechten bei der shell zu tun und jetzt werden auch die user profile auf dem server vorher geladen.</p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2008/01/09/cap-deploy-permission-denied-nach-upgrade-auf-capistrano-21/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gem1.8 install mysql (MySql Ruby C bindings) in&#160;debian</title>
		<link>http://funkensturm.de/2008/01/03/gem18-install-mysql-mysql-ruby-c-bindings-in-debian/</link>
		<comments>http://funkensturm.de/2008/01/03/gem18-install-mysql-mysql-ruby-c-bindings-in-debian/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 17:01:38 +0000</pubDate>
		<dc:creator>Captain Future</dc:creator>
				<category><![CDATA[gems]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[c bindings]]></category>
		<category><![CDATA[gem install mysql]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2008/01/03/gem18-install-mysql-mysql-ruby-c-bindings-in-debian/</guid>
		<description><![CDATA[Hier habe ich endlich gefunden, wieso genau die C Bindings für mysql nicht geklappt haben. Es fehlte noch ein apt Paket vorher (bzw. ich benutze aptitude). Hier lag des Rätsels Lösung: Und erst dann hat man die mysql_config wie folgt zur Hand: Wie gesagt, &#8220;aptitude&#8221; muss für den ein oder anderen &#8220;apt get&#8221; sein und [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.slashdotdash.net/articles/2007/02/17/install-mysql-ruby-c-bindings-on-debian" onclick="pageTracker._trackPageview('/outgoing/www.slashdotdash.net/articles/2007/02/17/install-mysql-ruby-c-bindings-on-debian?referer=');">Hier</a> habe ich endlich gefunden, wieso genau die C Bindings für mysql nicht geklappt haben. Es fehlte noch ein apt Paket vorher (bzw. ich benutze aptitude).</p>
<p>Hier lag des Rätsels Lösung:</p>
<p>aptitude install libmysqlclient15-dev</p>
<p>Und erst dann hat man die mysql_config wie folgt zur Hand:</p>
<p>gem1.8 install mysql &#8212; &#8211;with-mysql-config=/usr/bin/mysql_config</p>
<p>Wie gesagt, &#8220;aptitude&#8221; muss für den ein oder anderen &#8220;apt get&#8221; sein und wenn man nicht als root eingeloggt ist, kommt noch ein &#8220;sudo&#8221; vor jeden Befehl.</p>
<p><b>Hinweis:</b> Welches Paket man sich mit apt installieren muss (dieser Post muss ja nicht der aktuellste sein ;), kann man mit diesem Befehl herausfinden. Dann nimmt man einfach die neuste Version von dem oben genannten.</p>
<p>aptitude show libmysql</p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2008/01/03/gem18-install-mysql-mysql-ruby-c-bindings-in-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sessions aufräumen &#8211; Stale Sessions Clean&#160;Up</title>
		<link>http://funkensturm.de/2007/12/28/sessions-aufraumen-stale-sessions-clean-up/</link>
		<comments>http://funkensturm.de/2007/12/28/sessions-aufraumen-stale-sessions-clean-up/#comments</comments>
		<pubDate>Fri, 28 Dec 2007 02:48:28 +0000</pubDate>
		<dc:creator>manuel</dc:creator>
				<category><![CDATA[advanced]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[stale session clean]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/12/28/sessions-aufraumen-stale-sessions-clean-up/</guid>
		<description><![CDATA[Wenn man den ganz normalen Session Handler von Rails benutzt, dann werden die Sessions unter tmp/sessions/ abgelegt. Rails räumt dieses Session Verzeichnis aber nicht selber auf. Das kann zu einem Problem werden, wenn man plötzlich tausende von Sessionfiles in diesem Verzeichnis findet. Erst einmal wird die Application dadurch langsamer und zum Zweiten kann es auch [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man den ganz normalen Session Handler von Rails benutzt, dann werden die Sessions unter tmp/sessions/ abgelegt. Rails räumt dieses Session Verzeichnis aber nicht selber auf. Das kann zu einem Problem werden, wenn man plötzlich tausende von Sessionfiles in diesem Verzeichnis findet. Erst einmal wird die Application dadurch langsamer und zum Zweiten kann es auch das File System des Servers belasten, wenn der nämlich plötzlich keine Nodes mehr machen kann.</p>
<p>Eine einfach Lösung für dieses Problem ist ein Cron Job der das Verzeichnis regelmäßig aufräumt und alle alten (stale) Sessions löscht.</p>
<p>Hierfür habe ich ein Shell Script geschrieben, was ich in den Script Ordner meines Rails Projektes abgelegt habe. So sieht es aus:<br />
<tt>script/remove_stale_sessions.sh</tt></p>
<p>#!/bin/sh<br />
find ../tmp/sessions/ruby_sess.* -mtime +1 -print | xargs rm -rf</p>
<p>Das Script löscht alle Sessions die seit 1 Tag nicht mehr benutzt wurden. Jetzt fehlt noch der Cron Job, der das Script alle paar Minuten aufruft. Ich hab ihn mal auf alle 10 Minuten gestellt. Mit crontab -e ruft man den Cron Job Manager auf. Jetzt i drücken, damit man in den INSERT Mode kommt und in die letzte Zeile folgenden Code schreiben:</p>
<p>*/10 * * * * sh /pfad/zur/app/script/remove_stale_sessions.sh</p>
<p>esc drücken um den INSERT Mode zu verlassen und :wq zum speichern und schon sollte der neue Cron installiert sein.</p>
<p><strong>Update:</strong><br />
Ach so&#8230; vielleicht sollte man dafür gleich nen Deployment Task oder so was schreiben&#8230; irgendwas, damit man halt nicht bei jedem Projekt dran denken muss&#8230; wenn jemand Vorschläge hat&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2007/12/28/sessions-aufraumen-stale-sessions-clean-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Capistrano überschreibt meine Dateien&#160;immer!&#8221;</title>
		<link>http://funkensturm.de/2007/12/23/capistrano-uberschreibt-meine-dateien-immer/</link>
		<comments>http://funkensturm.de/2007/12/23/capistrano-uberschreibt-meine-dateien-immer/#comments</comments>
		<pubDate>Sun, 23 Dec 2007 21:16:02 +0000</pubDate>
		<dc:creator>Captain Future</dc:creator>
				<category><![CDATA[capistrano]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[tasks]]></category>
		<category><![CDATA[syslink]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/12/23/capistrano-uberschreibt-meine-dateien-immer/</guid>
		<description><![CDATA[Wer seit Neuestem mit Capistrano seine rails app deployed, der kam vielleicht auch schon dahinter, dass dann alle Dateien weg sind, die man in ein bestimmtes Verzeichnis geschrieben oder hochgeladen hat. &#8220;meinprojekt&#8221; ist im Folgenden das Verzeichnis auf dem Server, wohin deployed wurde. Standardmäßig ist das glaube ich /u/apps/meinprojekt. Also zum Beispiel meinprojekt/public/uploads wird nach [...]]]></description>
			<content:encoded><![CDATA[<p>Wer seit Neuestem mit Capistrano seine rails app deployed, der kam vielleicht auch schon dahinter, dass dann alle Dateien weg sind, die man in ein bestimmtes Verzeichnis geschrieben oder hochgeladen hat.</p>
<p>&#8220;meinprojekt&#8221; ist im Folgenden das Verzeichnis auf dem Server, wohin deployed wurde. Standardmäßig ist das glaube ich <tt>/u/apps/meinprojekt</tt>.</p>
<p>Also zum Beispiel <tt>meinprojekt/public/uploads</tt> wird nach dem deploy einfach gelöscht und alle Dateien sind weg (nicht wirklich weg, man muss nur im Verzeichnis <tt>meinprojekt/releases</tt> danach suchen ;).</p>
<p>Um das zu verhindern (<a href="http://blog.vixiom.com/2007/03/13/stop-uploaded-files-getting-deleted-with-capistrano/" onclick="pageTracker._trackPageview('/outgoing/blog.vixiom.com/2007/03/13/stop-uploaded-files-getting-deleted-with-capistrano/?referer=');">hier gefunden</a>) muss man im <tt>meinprojekt/shared</tt> Verzeichnis auf dem Server wo man es deployed hat die Verzeichnisse erstellen, die solche wichtigen Sachen enthalten.</p>
<p>Also z. B. <tt>mkdir meinprojekt/shared/public/uploads</tt>. Anschließend passt man seine deploy.rb wie folgt an:</p>
<p>task :after_update_code, :roles => :app do<br />
  run &#8220;ln -nfs #{deploy_to}/shared/public/uploads #{release_path}/public/uploads&#8221;<br />
end</p>
<p>Dadurch wird nachdem der Code deployed (also hochgeladen) wurde, ein Hardlink von dem deployten uploads-Verzeichnis auf <tt>/u/apps/meinprojekt/shared/public/uploads</tt> gemacht. Also sozusagen ein weiterverweisen auf das shared Verzeichnis.</p>
<p>Immer wenn jetzt jemand was hochläd, wird es in shared gespeichert, anstatt in current. Beim nächsten Deploy wird der Link wieder auf shared gesetzt und keine Daten gehen verloren.</p>
<p>Hier mal ein Beispiel für meine Gallery:</p>
<p>namespace :deploy do<br />
   [task :start...]<br />
   after &#8220;deploy:update_code&#8221;, :link_to_shared<br />
end</p>
<p># Create hard links to data in shared<br />
desc &#8220;Link in critical data&#8221;<br />
task :link_to_shared do<br />
  run &#8220;ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml&#8221;<br />
  run &#8220;ln -nfs #{deploy_to}/shared/backup #{release_path}/backup&#8221;<br />
  run &#8220;ln -nfs #{deploy_to}/shared/private #{release_path}/private&#8221;<br />
  run &#8220;ln -nfs #{deploy_to}/shared/public/images/gallery #{release_path}/public/images/gallery&#8221;<br />
  run &#8220;ln -nfs #{deploy_to}/shared/public/images/pending #{release_path}/public/images/pending&#8221;<br />
end</p>
<p>Super. Danke Capistrano 2, dass du das kannst :)</p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2007/12/23/capistrano-uberschreibt-meine-dateien-immer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>apache und mongrel_balancer&#160;errors</title>
		<link>http://funkensturm.de/2007/12/23/apache-und-mongrel_balancer-errors/</link>
		<comments>http://funkensturm.de/2007/12/23/apache-und-mongrel_balancer-errors/#comments</comments>
		<pubDate>Sun, 23 Dec 2007 17:14:32 +0000</pubDate>
		<dc:creator>Captain Future</dc:creator>
				<category><![CDATA[server]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[balancer]]></category>
		<category><![CDATA[errors]]></category>
		<category><![CDATA[mongrel]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/12/23/apache-und-mongrel_balancer-errors/</guid>
		<description><![CDATA[Hi, wenn du sowas hast: dann musst du in deine httpd.conf das hier reinschreiben, (weil in der /etc/apache2/mods-available/proxy.conf alles auf &#8220;deny from all&#8221; steht): und wenn du danach das hier hast: dann musst du den mod_proxy_http hinzufügen: Hat mich &#8216;ne Stunde gekostet ;)]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>wenn du sowas hast:</p>
<p>client denied by server configuration: proxy:balancer://mongrel_cluster/</p>
<p>dann musst du in deine httpd.conf das hier reinschreiben, (weil in der /etc/apache2/mods-available/proxy.conf alles auf &#8220;deny from all&#8221; steht):</p>
<proxy *>
  Order allow,deny<br />
  Allow from all
</proxy>
<p>und wenn du danach das hier hast:</p>
<p>proxy: No protocol handler was valid for the URL /. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.</p>
<p>dann musst du den mod_proxy_http hinzufügen:</p>
<p>ln /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load<br />
/etc/init.d/apache2 restart</p>
<p>Hat mich &#8216;ne Stunde gekostet ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2007/12/23/apache-und-mongrel_balancer-errors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>debian ssh key login und&#160;~/./ssh/config</title>
		<link>http://funkensturm.de/2007/12/21/debian-ssh-key-login-und-sshconfig/</link>
		<comments>http://funkensturm.de/2007/12/21/debian-ssh-key-login-und-sshconfig/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 20:29:24 +0000</pubDate>
		<dc:creator>Captain Future</dc:creator>
				<category><![CDATA[security]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[key]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[private]]></category>
		<category><![CDATA[public]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/12/21/debian-ssh-key-login-und-sshconfig/</guid>
		<description><![CDATA[Sich per SSH einzuloggen kann manchmal nervig sein. Insbesondere dann, wenn man das häufiger macht oder lange Passwörter benutzt ;) Um das zu vereinfachen habe am Debian Server aus dem vorigen Eintrag wie folgt rumgespielt. Zuerst habe ich meinen Useraccount auf dem Server namens &#8220;future&#8221; in den gleichen Usernamen geändert, den ich lokal auf meinem [...]]]></description>
			<content:encoded><![CDATA[<p>Sich per SSH einzuloggen kann manchmal nervig sein. Insbesondere dann, wenn man das häufiger macht oder lange Passwörter benutzt ;) Um das zu vereinfachen habe am Debian Server aus dem vorigen Eintrag wie folgt rumgespielt.</p>
<p>Zuerst habe ich meinen Useraccount auf dem Server namens &#8220;future&#8221; in den gleichen Usernamen geändert, den ich lokal auf meinem PowerBook benutze. Nämlich &#8220;futurec&#8221;. Das Passwort habe ich ebenfalls so angepasst, dass es auf dem Server jetzt das selbe ist wie auf meinem lokalen Rechner. Zuletzt noch das Homeverzeichnis umbenannt:</p>
<p>usermod -l futurec future<br />
passwd futurec<br />
mv /home/future /home/futurec</p>
<p>Dann habe ich auf meinem PowerBook (nach <a href="http://blog.macromates.com/2005/subversion-support-and-ssh-key-pairs/" onclick="pageTracker._trackPageview('/outgoing/blog.macromates.com/2005/subversion-support-and-ssh-key-pairs/?referer=');">dieser Anleitung</a>) folgendes eingegeben und mehrmals Return für die Abfragen eingegeben (also Standardeinstellungen):</p>
<p>ssh-keygen -t dsa</p>
<p>Anschließend habe ich mit Cyberduck und SFTP die Datei <i>~/.ssh/id_dsa.pub</i> auf den Server geladen. Dort habe ich dann (in dem Verzeichnis wo ich die Datei hochgeladen habe) folgendes eingegeben. So wurde mein SSH-Public-Key in die vom Server authorisierten Keys aufgenommen und die hochgeladene wieder Datei gelöscht:</p>
<p>cat id_dsa.pub &gt;&gt; /.ssh/authorized_keys<br />
rm id_dsa.pub</p>
<p>Dann musste ich in der Datei <i>/etc/ssh/sshd_config</i> sicherstellen, dass man sich per SSH überhaupt mit Keys einloggen darf:</p>
<p>PubkeyAuthentication yes<br />
AuthorizedKeysFile      /.ssh/authorized_keys</p>
<p>SSH neu starten:</p>
<p>/etc/init.d/ssh restart</p>
<p>Ab dann war es mir möglich, mich ohne Passwort, aber mit dem private Key <i>~/.ssh/id_dsa</i> in z. B. Cyberduck einzuloggen.</p>
<p>Lokal auf dem Laptop habe ich dann die Datei <i>~/.ssh/config</i> angelegt:</p>
<p>Host = fs<br />
HostName = 123.123.123.123<br />
User = futurec<br />
Port = 4444</p>
<p>Und schon kann ich mich jederzeit ganz einfach mit diesem Befehl per SSH auf dem Server einloggen ohne jegliches Passwort eingeben zu müssen:</p>
<p>ssh fs</p>
<p>:)</p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2007/12/21/debian-ssh-key-login-und-sshconfig/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>subversion auf debian&#160;aufgesetzt</title>
		<link>http://funkensturm.de/2007/12/21/subversion-auf-debian-aufgesetzt/</link>
		<comments>http://funkensturm.de/2007/12/21/subversion-auf-debian-aufgesetzt/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 17:08:26 +0000</pubDate>
		<dc:creator>Captain Future</dc:creator>
				<category><![CDATA[security]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/12/21/subversion-auf-debian-aufgesetzt/</guid>
		<description><![CDATA[Hi, endlich geschafft. SVN läuft und es war (im Rückblick gesehen) gar nicht so schwer. Dieser Artikel hat mir gut weitergeholfen. Nach der Installation von subversion mit aptitude hat folgende Einrichtung auf einem unserer debian server funktioniert: Verzeichnis für Repositories auf dem Server erstellen: Jetzt wird aus diesem Verzeichnis ein subversion repository gemacht: Da der [...]]]></description>
			<content:encoded><![CDATA[<p>Hi, endlich geschafft. SVN läuft und es war (im Rückblick gesehen) gar nicht so schwer. <a href="http://www.linux-fuer-alle.de/doc_show.php?docid=230&#038;catid=3" target='_blank' onclick="pageTracker._trackPageview('/outgoing/www.linux-fuer-alle.de/doc_show.php?docid=230_038_catid=3&amp;referer=');">Dieser Artikel</a> hat mir gut weitergeholfen. Nach der Installation von subversion mit aptitude hat folgende Einrichtung auf einem unserer debian server funktioniert:</p>
<p>Verzeichnis für Repositories auf dem Server erstellen:</p>
<p>mkdir /var/svn</p>
<p>Jetzt wird aus diesem Verzeichnis ein subversion repository gemacht:</p>
<p>svnadmin create /var/svn</p>
<p>Da der Server bisher nur über einen root Zugang verfügte, erstmal Benutzer anlegen, die subversion später nutzen werden:</p>
<p>useradd future<br />
useradd manuel</p>
<p>Diese bekommen dann noch schöne Passwörter verpasst. Bei Eingabe wird ein gewünschtes Passwort für den jeweiligen user abgefragt.</p>
<p>passwd future<br />
passwd manuel</p>
<p>Jetzt noch die home-verzeichnisse anlegen:</p>
<p>mkdir /home/future<br />
mkdir /home/manuel<br />
chown future:users /home/future<br />
chown manuel:users /home/manuel</p>
<p>Damit wir uns später Arbeit sparen, legen wir eine Gruppe an, und setzen die neuen User in diese Gruppe. So ist es später leichter, Rechte für die Nutzung von SVN zu vergeben.</p>
<p>adduser future subversion<br />
adduser manuel subversion</p>
<p>Jetzt bekommt die Gruppe (und somit future und manuel) Zugriff auf das vorhin erstellte svn repository. Der -R Parameter steht für rekursive, also alle Unterverzeichnisse inbegriffen (auf o. a. Artikel gibt es etwas mehr Details hierzu).</p>
<p>chgrp -R subversion /var/svn<br />
chmod -R o-rwx /var/svn<br />
chmod -R g+rw /var/svn<br />
chmod g+s /var/svn/db</p>
<p>Jetzt wird es nochmal etwas tricky. Wenn oben genannte User Dateien erstellen und so weiter, dann werden diesen Dateien bestimmte Rechte gegeben. Nun wollen wir aber sicher stellen, dass niemand aus Versehen nur Rechte für sich selbst einräumt.</p>
<p>Dafür verwenden wir den UNIX Befehl umask. Wenn wir &#8220;umask 002&#8243; aufrufen, heißt dass, dass von jetzt an bei Dateierstellung volle Rechte für die eigene Gruppe und lese und execute Rechte für alle andere gesetzt werden soll.</p>
<p>Da nicht jeder ständig diesen Befehl eingeben wird und möchte, &#8220;automatisieren&#8221; wir das ganz schlau. Nutzt jemand unser SVN repository, wird die Datei &#8220;svnserve&#8221; aufgerufen. Wir wechseln in das Verzeichnis, wo diese Datei sich befindet (&#8220;which svnserve&#8221; verrät uns wo das ist) und bennennen die Datei um! und zwar nehmen wir das letzte &#8220;e&#8221; weg:</p>
<p>cd /usr/bin<br />
mv svnserve svnserv</p>
<p>Anschließend legen wir eine bash-Datei an, die genau so heißt wie unser svnserv<b>e</b> vorher. In diese Datei schreiben wir folgendes:<br />
Inhalt von <i>/usr/bin/svnserve</i></p>
<p>#!/bin/bash<br />
umask 002<br />
/usr/bin/svnserv $* </p>
<p>Das bewirkt, dass jedes Mal wenn jemand svnserv<b>e</b> (mit oder ohne Parameter) startet, er unser kleines Progrämmchen startet, dadurch automatisch &#8220;umask 002&#8243; ausführt und dann erst das original svnserv. Schlau oder? (Den Trick habe ich übrigens <a href="http://www.linux-fuer-alle.de/doc_show.php?docid=230&#038;catid=3" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.linux-fuer-alle.de/doc_show.php?docid=230_038_catid=3&amp;referer=');">hier</a> gefunden.)</p>
<p>Jetzt befassen wir uns mit der Datei <i>/var/svn/conf/svnserve.conf</i>. Es handelt sich um die Konfiguration unseres svn repositories. In ihr passen wir ein paar Einstellungen wie folgt an:</p>
<p>[general]<br />
anon-access = none<br />
auth-access = write<br />
realm = funkensturm</p>
<p>Damit geben wir anonymen usern &#8220;none&#8221; Rechte, future und manuel &#8220;write&#8221; rechte und noch einen Namen für unser Repository.</p>
<p>Auf <a href="http://manual.sidux.com/de/ssh-de.htm" target="_blank" onclick="pageTracker._trackPageview('/outgoing/manual.sidux.com/de/ssh-de.htm?referer=');">dieser Seite</a> habe ich ein paar Einstellungen gefunden, wie man den SSH Login usw. sicherer macht. Außerdem müssen wir ja noch unserer Gruppe subversion den Login per SSH erlauben!<br />
Also ran an die Datei <i>/etc/ssh/sshd_config</i> (vorher backup machen!).<br />
Die Datei ist ziemlich lang. Worauf es ankommt sind letzten Endes diese Werte:</p>
<p>Port 4444<br />
AllowGroups subversion<br />
LoginGraceTime 30<br />
PermitRootLogin no</p>
<p>Damit haben wir den SSH Port von 22 (Standard) auf (z. B.) 4444 erhöht, damit nicht jeder Depp direkt den Port scannen kann. AllowGroups ist neu hinzugekommen, damit alle user in der Gruppe &#8220;subversion&#8221; SSH benutzen können. Die LoginGraceTime wurde auf 30 Sekunden gesetzt (Zeit zum Passwort eingeben). Da manuel und future sich jetzt einloggen können, können wir den login als root via SSH verbieten mit PermitRootLogin no.</p>
<p>Jetzt noch schnell SSH neu starten und die Änderungen sind aktiv:</p>
<p>/etc/init.d/ssh restart</p>
<p>FERTIG!</p>
<p>Ab jetzt kann man sich per SSH so auf dem Server (natürlich mit der richtigen IP und nicht 123&#8230;) einloggen:</p>
<p>ssh future@123.123.123.123 -p 4444</p>
<p>ABER!</p>
<p>Leider kapiert dein lokales svn nicht, dass er bei svn+ssh nicht den Port 22 nehmen soll, sondern unseren 4444. Dafür müssen wir LOKAL (also auf DEINEM MacBook oder PowerBook ;) folgende Datei anpassen: <i>~/.subversion/config</i></p>
<p>[tunnels]<br />
fs = /usr/bin/ssh -p 4444</p>
<p>Damit sagen wir, dass ab jetzt <i>svn+fs://</i> mit Port 4444 aufgerufen wird. (Man könnte auch anstelle &#8220;fs&#8221; auch &#8220;ssh&#8221; in die config Datei schreiben, dann würde bei <i>svn+ssh://</i> immer Port 5777 verwendet werden. Aber das will man mit an Sicherheit grenzender Wahrscheinlichkeit nicht.)</p>
<p>Wenn man sein Projekt auschecken möchte, wird für unseren Server also ab jetzt das hier benutzt:</p>
<p>svn co svn+fs://future@123.123.123.123/var/svn/projekt</p>
<p>Zum hochladen eines neuen Projektes:</p>
<p>svn import projektname svn+fs://future@123.123.123.123/var/svn/projektname -m &quot;Beschreibung der Änderung&quot;</p>
<p>YEAH BABY!</p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2007/12/21/subversion-auf-debian-aufgesetzt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BasicAuth + ProxyPath (Apache +&#160;Mongrel)</title>
		<link>http://funkensturm.de/2007/11/30/basicauth-proxypath-apache-mongrel/</link>
		<comments>http://funkensturm.de/2007/11/30/basicauth-proxypath-apache-mongrel/#comments</comments>
		<pubDate>Fri, 30 Nov 2007 00:50:04 +0000</pubDate>
		<dc:creator>manuel</dc:creator>
				<category><![CDATA[advanced]]></category>
		<category><![CDATA[rails 2.0]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[basic auth]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[proxypath]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/11/30/basicauth-proxypath-apache-mongrel/</guid>
		<description><![CDATA[Ich bin gerade dabei ein Rails Projekt mit Apache und Mongrel zum laufen zu bringen. Das ganze soll aber erst mal hinter nem htaccess Passwort Schutz sein. Ich hab nun Ewigkeiten gesucht um das hin zu bekommen, denn wenn ich es einfach in die .htaccess im public Verzeichnis meines Rails Projektes ablege, geht es natürlich [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bin gerade dabei ein Rails Projekt mit Apache und Mongrel zum laufen zu bringen.<br />
Das ganze soll aber erst mal hinter nem htaccess Passwort Schutz sein. Ich hab nun Ewigkeiten gesucht um das hin zu bekommen, denn wenn ich es einfach in die .htaccess im public Verzeichnis meines Rails Projektes ablege, geht es natürlich nicht, da die BasicAuth ja vom Apache gemacht wird und der hat die Anfrage ja schon an Mongrel übergeben&#8230;</p>
<p>Das ganze ist aber eigentlich recht einfach. Jetzt steht der BasicAuth Code im vhost drin und das sieht dann so aus:</p>
<p>&#60;proxy *&#62;<br />
AuthName &#8220;Nur mit Passwort&#8221;<br />
AuthType Basic<br />
AuthUserFile /pfad/zur/.htpasswd<br />
require valid-user<br />
&#60;/proxy&#62;</p>
<p>ProxyRequests Off<br />
ProxyPreserveHost On</p>
<p>ProxyPass / http://0.0.0.0:3000/<br />
ProxyPassReverse / http://0.0.0.0:3000/<br />
ErrorLog /pfad/zum/server.log</p>
<p>wichtig war die Direktive &#60;proxy *&#62; in der der BasicAuth Code stehen muss. Sonst wird es einfach ignoriert!</p>
<p><strong>Update:</strong><br />
Und so wird es dann in Rails 2.0 gemacht: <a href="http://railscasts.com/episodes/82" onclick="pageTracker._trackPageview('/outgoing/railscasts.com/episodes/82?referer=');">HTTP Basic Authentication</a></p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2007/11/30/basicauth-proxypath-apache-mongrel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: MySQL 5, Mongrel, Capistrano +&#160;Subversion</title>
		<link>http://funkensturm.de/2007/09/18/howto-mysql-5-mongrel-capistrano-subversion/</link>
		<comments>http://funkensturm.de/2007/09/18/howto-mysql-5-mongrel-capistrano-subversion/#comments</comments>
		<pubDate>Tue, 18 Sep 2007 00:47:07 +0000</pubDate>
		<dc:creator>manuel</dc:creator>
				<category><![CDATA[capistrano]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[introducing]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/09/18/howto-mysql-5-mongrel-capistrano-subversion/</guid>
		<description><![CDATA[Update: Bis her war ein Fehler in diesem HowTo. MySQL muss natürlich als Server Version installiert werden ($ sudo port install mysql5 +server). Das Update betrifft nur den MySQL5 Bereich. Damit wir Ruby on Rails auch wirklich nutzen können, sollten wir noch ein paar Programme, Tools und Gems installieren. Als erstes wäre da MySQL, denn [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> Bis her war ein Fehler in diesem HowTo. MySQL muss natürlich als Server Version installiert werden ($ sudo port install mysql5 +server). Das Update betrifft nur den MySQL5 Bereich.</p>
<p>Damit wir Ruby on Rails auch wirklich nutzen können, sollten wir noch ein paar Programme, Tools und Gems installieren.</p>
<p>Als erstes wäre da MySQL, denn wie wollen wir Datenbankgestütze Webentwicklung betreiben, wenn wir nicht mal einen Datenbank-Server und damit eine Datenbank haben&#8230;</p>
<p><strong>MySQL5</strong><br />
Da wir ja MacPorts installiert haben ist das ganze recht einfach. Um auf Nummer Sicher zu gehen, machen wir jedoch erst mal ein selfupdate für MacPorts und installieren erst dann MySQL5<br />
<code><br />
$ sudo port selfupdate<br />
$ sudo port install mysql5 +server<br />
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist<br />
$ sudo chown -R mysql:mysql /usr/local/macports/var/db/mysql5<br />
$ sudo -u mysql mysql_install_db5<br />
</code></p>
<p>Jetzt am besten den Mac neu starten, dann kann man gleich sehen ob das LauchItem funktioniert.</p>
<p><strong>MySQL Native Bindings Gem</strong><br />
Jetzt kommt der Teil, der mich die meiste Zeit gekostet hat (dabei sollte er doch die Geschwindigkeit der MySQL Abfragen beschleunigen) und der Grund war, warum ich bis her ohne die Nativen Bindings auskommen musste.<br />
Das MySQL Gem ist irgendwie sehr unflexible, was die Pfade angeht und dazu kommt, dass MacPorts die MySQL Installation im MacPorts Verzeichnis nicht gebündelt ablegt sondern etwas zerfledert&#8230; anstelle eines einfachen gem install mysql war hier etwas mehr Finetuning nötig. Mittels der build-flags gelang mir dann aber auch das. Hier das Ergebnis:<br />
<code><br />
sudo gem install mysql -- \<br />
--with-mysql-dir=/usr/local/macports/lib/mysql5 \<br />
--with-mysql-lib=/usr/local/macports/lib/mysql5/mysql \<br />
--with-mysql-include=/usr/local/macports/include/mysql5/mysql<br />
</code></p>
<p><strong>NACHTRAG, ab November 2008 so:</strong><br />
<code><br />
sudo env ARCHFLAGS="-arch ppc" gem install mysql -- --with-mysql-lib=/opt/local/lib/mysql5/mysql --with-mysql-include=/opt/local/include/mysql5/mysql<br />
</code></p>
<p>jetzt wird man gefragt, welche Version man für die Installation wählen will. Nehmen wir also die neuste, zum jetzigen Zeitpunkt mysql 2.7 (ruby), also drücken wir die 3 (da wir uns ja auf einem Mac befinden fallen die mswin32 Versionen für uns raus)<br />
<code><br />
Select which gem to install for your platform (i686-darwin8.10.3)<br />
 1. mysql 2.7.3 (mswin32)<br />
 2. mysql 2.7.1 (mswin32)<br />
 3. mysql 2.7 (ruby)<br />
 4. mysql 2.6 (ruby)<br />
 5. Skip this gem<br />
 6. Cancel installation<br />
</code></p>
<p>Wenn man die build-flags nicht richtig setzt bekommt man solche Fehler:<br />
<code><br />
ERROR: Failed to build gem native extension.<br />
ruby extconf.rb install mysql<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lm... yes<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lz... yes<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lsocket... no<br />
checking for mysql_query() in -lmysqlclient... no<br />
checking for main() in -lnsl... no<br />
checking for mysql_query() in -lmysqlclient... no<br />
</code><br />
und kann damit nicht so wirklich was anfangen&#8230; wie gesagt hat mich einiges an Zeit gekostet, weil auch Google dazu nicht richtig was sagt.</p>
<p>So nun sind auch die Bindings fertig und wir können uns anderen Dingen zuwenden.</p>
<p><strong>Mongrel</strong><br />
Mongrel ist der Webserver. Rails liefert zwar schon einen Webserver mit (Webrick) aber Mongrel hat für mich bis her einen sehr sehr großen Vorteil, man sieht im Development Mode alle Requests. Damit fällt das Debugging viel leichter, da man sogar die MySQL Requests mit allen Werten sieht. Also installieren wir das Mongrel Gem einfach.<br />
<code><br />
sudo gem install mongrel --include-dependencies<br />
</code><br />
es kommen wieder die von oben bekannten Abfragen zur Version und weil es Abhängigkeiten gibt, die erfüllt werden müssen, wird gleich noch fastthread installiert. Meine Versionen sind mongrel 1.0.1 (2 drücken) und fastthread 1.0 (1 drücken).<br />
<code><br />
Select which gem to install for your platform (i686-darwin8.10.3)<br />
 1. mongrel 1.0.1 (mswin32)<br />
 2. mongrel 1.0.1 (ruby)<br />
 3. mongrel 1.0 (mswin32)<br />
 4. mongrel 1.0 (ruby)<br />
 5. Skip this gem<br />
 6. Cancel installation<br />
> 2<br />
Select which gem to install for your platform (i686-darwin8.10.3)<br />
 1. fastthread 1.0 (ruby)<br />
 2. fastthread 1.0 (mswin32)<br />
 3. fastthread 0.6.4.1 (mswin32)<br />
 4. fastthread 0.6.4.1 (ruby)<br />
 5. Skip this gem<br />
 6. Cancel installation<br />
> 1<br />
</code></p>
<p>Gut damit haben wir neben dem MySQL-Server nun auch unseren Webserver. Was jetzt kommt ist erst mal nicht so wichtig aber wir installieren es mal, damit wir uns später keine Gedanken mehr drum machen müssen.</p>
<p><strong>Capistrano</strong><br />
Capistrano ist ein Deployment Tool, was einem die Arbeit des live gehens erheblich erleichtern soll. Ich hab es noch nicht benutzt und genau deshalb installiere ich es jetzt mit um es in den nächsten Tagen zu testen. Darüber wird es dann auch einen Post geben.<br />
Neben dem hoch laden der Dateien mittels SSH, kann man noch eigene Rake Tasks in Ruby schreiben, die dann z.B. einen Dump der alten Datenbank erstellen, bevor die neue eingespielt wird. Naja wie gesagt, bei mehr Erfahrungen gibt es auch dazu einen Post, jetzt erst mal die Installation:<br />
<code><br />
sudo gem install capistrano --include-dependencies<br />
</code><br />
Jetzt noch Termios, dass dafür sorgen soll, dass die Passwörter, die man in Capistrano eintippt, nicht von allen gelesen werden können. Ich weiß nicht, ob das notwendig ist aber weh tun tut es ja auch nicht also:<br />
<code><br />
sudo gem install termios --include-dependencies<br />
</code></p>
<p><strong>Subversion</strong><br />
Subversion ist auch so nen Ding, worüber alle reden, was ich aber bis zum jetzigen Zeitpunkt, außer für Plugin Installationen, nicht genutzt habe. Capistrano nutzt es auch, also installieren wir auch noch dieses Tool. Eigentlich ist es einfach eine Versionskontrolle und wird meistens eingesetzt, wenn man in einem Team programmiert (es zeigt einem Konflikte an, d.h. zwei Leute haben zur gleichen Zeit an einer Datei, den selben Teil verändert, jeder natürlich anders und die Änderungen würden verlohren gehen. Hier springt dann eben SVN ein und man kann den Konflikt auflösen.)<br />
<code><br />
sudo port install subversion<br />
</code></p>
<p>So damit haben wir eigentlich erst mal alles, was wir für die Entwicklung mit Ruby on Rails brauchen. Wenn es noch irgendwelche Sachen gibt, die man unbedingt braucht ab in die Kommentare damit.</p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2007/09/18/howto-mysql-5-mongrel-capistrano-subversion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails: TAR-Archive in einem Verzeichnis entpacken [Extract tar archives in a&#160;directory]</title>
		<link>http://funkensturm.de/2007/09/15/tar-archive-in-einem-verzeichnis-entpacken/</link>
		<comments>http://funkensturm.de/2007/09/15/tar-archive-in-einem-verzeichnis-entpacken/#comments</comments>
		<pubDate>Sat, 15 Sep 2007 21:27:07 +0000</pubDate>
		<dc:creator>Captain Future</dc:creator>
				<category><![CDATA[resources]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[directory]]></category>
		<category><![CDATA[entpacken]]></category>
		<category><![CDATA[extract]]></category>
		<category><![CDATA[tar]]></category>
		<category><![CDATA[verzeichnis]]></category>

		<guid isPermaLink="false">http://blog.funkensturm.de/2007/09/15/tar-archive-in-einem-verzeichnis-entpacken/</guid>
		<description><![CDATA[Hier eine Lösungsmöglichkeit, um in einem Verzeichnis nach allen Tar-Dateien zu suchen und die Inhalte im selbigen zu entpacken (durch leichte Modifikation natürlich anpassbar). Anschließend werden die entpackten Archive gelöscht. Da der UNIX &#8220;tar&#8221;-Befehl verwendet wird, geht das ganze nur auf UNIX Systemen. Hinweis: Bei mehr als 2000-3000 Dateien im Verzeichnis würde ich das nicht [...]]]></description>
			<content:encoded><![CDATA[<p>Hier <em>eine </em>Lösungsmöglichkeit, um in einem Verzeichnis nach allen Tar-Dateien zu suchen und die Inhalte im selbigen zu entpacken (durch leichte Modifikation natürlich anpassbar). Anschließend werden die entpackten Archive gelöscht. Da der UNIX &#8220;tar&#8221;-Befehl verwendet wird, geht das ganze nur auf UNIX Systemen. Hinweis: Bei mehr als 2000-3000 Dateien im Verzeichnis würde ich das nicht so anwenden, da zu uneffizient/langsam. Aber das ist ein anderes Thema :)</p>
<p>Wie immer sind Verbesserungsvorschläge (Kommentare) erwünscht. Aus pragmatischen Gründen wird dann der folgende Code jedes Mal entsprechend erneuert:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> ApplicationController <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ApplicationController::Base</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> untar
    result = <span style="color:#996600;">''</span>
    <span style="color:#CC00FF; font-weight:bold;">Dir</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>PATH_TO_DIR<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>file<span style="color:#006600; font-weight:bold;">|</span>
      <span style="color:#9966CC; font-weight:bold;">next</span> <span style="color:#9966CC; font-weight:bold;">if</span> file !~ <span style="color:#006600; font-weight:bold;">/</span>tar$<span style="color:#006600; font-weight:bold;">/</span>
      result <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">'Extracting '</span> <span style="color:#006600; font-weight:bold;">+</span> file <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'... '</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#CC0066; font-weight:bold;">system</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'cd '</span> <span style="color:#006600; font-weight:bold;">+</span> PATH_TO_DIR <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'; tar -xf '</span> <span style="color:#006600; font-weight:bold;">+</span> file<span style="color:#006600; font-weight:bold;">&#41;</span>
        result <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">'done!&lt;br/&gt;Deleting '</span> <span style="color:#006600; font-weight:bold;">+</span> file <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#996600;">'... '</span>
        <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#CC00FF; font-weight:bold;">FileUtils</span>::rm_r<span style="color:#006600; font-weight:bold;">&#40;</span>PATH_TO_DIR <span style="color:#006600; font-weight:bold;">+</span> file<span style="color:#006600; font-weight:bold;">&#41;</span>
          result <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">'done!&lt;br /&gt;'</span>
        <span style="color:#9966CC; font-weight:bold;">else</span>
          result <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">'error!&lt;br /&gt;'</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
      <span style="color:#9966CC; font-weight:bold;">else</span>
        result <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">'error!&lt;br /&gt;'</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
      processed = <span style="color:#0000FF; font-weight:bold;">true</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
    result <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">'&lt;br /&gt;Extraction completed!'</span>
    result = <span style="color:#996600;">'No compressed files found.'</span> <span style="color:#9966CC; font-weight:bold;">if</span> processed.<span style="color:#0000FF; font-weight:bold;">nil</span>?
    render<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:text</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> result<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>PS: Manuel, vielen Dank für dieses WP! Sehr sehr schön. Viele Plugins, schöne Bilder und einfach schön! Wie wär&#8217;s, wenn du jetzt noch GANZ SCHNELL ein Ruby-Syntax-Highlight installierst :) DANKE!</p>
]]></content:encoded>
			<wfw:commentRss>http://funkensturm.de/2007/09/15/tar-archive-in-einem-verzeichnis-entpacken/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
