<?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>dead fish &#187; Free Software</title>
	<atom:link href="http://www.thomaskeller.biz/blog/category/free-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thomaskeller.biz/blog</link>
	<description>only dead fish swim with the stream</description>
	<lastBuildDate>Tue, 27 Sep 2011 22:59:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Access the Android menu in VirtualBox on a Mac host</title>
		<link>http://www.thomaskeller.biz/blog/2011/07/13/access-the-android-menu-in-virtualbox-on-a-mac-host/</link>
		<comments>http://www.thomaskeller.biz/blog/2011/07/13/access-the-android-menu-in-virtualbox-on-a-mac-host/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 14:56:47 +0000</pubDate>
		<dc:creator>Thomas Keller</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Free Software]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.thomaskeller.biz/blog/?p=1067</guid>
		<description><![CDATA[If you&#8217;re desperately trying to get the Menu button in an Android x86 installation working under VirtualBox on a Mac OS X host &#8211; whose keyboard of course doesn&#8217;t have this &#8220;context&#8221; / &#8220;menu&#8221; key Windows keyboards have on the right &#8211; you might find the touch-only-device mode in Android x86 handy: Click on the [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re desperately trying to get the <code>Menu</code> button in an <a href="http://www.android-x86.org">Android x86</a> installation working under <a href="http://www.virtualbox.org">VirtualBox</a> on a Mac OS X host &#8211; whose keyboard of course doesn&#8217;t have this &#8220;context&#8221; / &#8220;menu&#8221; key Windows keyboards have on the right &#8211; you might find the touch-only-device mode in Android x86 handy:</p>

<ol>
<li>Click on the clock in the status bar to enable / disable this mode altogether</li>
<li>A swipe from the left to the right emulates the <code>Menu</code> button function</li>
<li>A swipe from right to left emulates the <code>Back</code> button function</li>
<li>Simply clicking on the status bar brings you to the <code>Home</code> screen</li>
</ol>

<p>(<a href="http://www.android-x86.org/documents/touch-only-device-howto">Source</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomaskeller.biz/blog/2011/07/13/access-the-android-menu-in-virtualbox-on-a-mac-host/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Einführung die Versionsverwaltung mit monotone</title>
		<link>http://www.thomaskeller.biz/blog/2011/07/02/einfuhrung-die-versionsverwaltung-mit-monotone/</link>
		<comments>http://www.thomaskeller.biz/blog/2011/07/02/einfuhrung-die-versionsverwaltung-mit-monotone/#comments</comments>
		<pubDate>Sat, 02 Jul 2011 21:05:00 +0000</pubDate>
		<dc:creator>Thomas Keller</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[German]]></category>
		<category><![CDATA[monotone]]></category>

		<guid isPermaLink="false">http://www.thomaskeller.biz/blog/?p=1057</guid>
		<description><![CDATA[Mathias Weidner hat eine deutschsprachige Einführung in die Versionverwaltung mit monotone veröffentlicht. Er behandelt darin die Grundlagen der verteilten Versionsverwaltung, die ersten Schritte mit monotone, sowie die täglich anfallende Arbeitspraxis mit einem Versionskontrollsystem. In späteren Kapiteln widmet sich Mathias auch erweiterten Themen, etwa wie monotone auf die individuellen Bedürfnisse des Nutzers angepasst werden kann und [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://weidner.in-bad-schmiedeberg.de/">Mathias Weidner</a> hat eine deutschsprachige Einführung in die Versionverwaltung mit monotone <a href="http://www.lulu.com/product/paperback/-/16177790">veröffentlicht</a>. Er behandelt darin die Grundlagen der verteilten Versionsverwaltung, die ersten Schritte mit monotone, sowie die täglich anfallende Arbeitspraxis mit einem Versionskontrollsystem. In späteren Kapiteln widmet sich Mathias auch erweiterten Themen, etwa wie monotone auf die individuellen Bedürfnisse des Nutzers angepasst werden kann und liefert weitere nützliche Hinweise für Ein- und Umsteiger von anderen Versionskontrollsystemen.</p>

<p>Das Buch ist <a href="http://creativecommons.org/licenses/by-sa/3.0/de/">CC BY-SA 3.0</a> lizensiert und kann als <a href="http://www.lulu.com/product/paperback/-/16177790">Paperback über lulu</a> bezogen werden. Eine <a href="http://weidner.in-bad-schmiedeberg.de/computer/rcs/monotone/drcs-monotone-brevier.html">Vorversion in PDF-Format</a> ist ebenfalls verfügbar; da der Autor die Quellen selbst in monotone verwaltet, sollten auch diese demnächst verfügbar sein.</p>

<p>Vielen Dank an Mathias für seine Bemühungen!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomaskeller.biz/blog/2011/07/02/einfuhrung-die-versionsverwaltung-mit-monotone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taxbird nun in MacPorts verfügbar</title>
		<link>http://www.thomaskeller.biz/blog/2011/06/20/taxbird-nun-in-macports-verfugbar/</link>
		<comments>http://www.thomaskeller.biz/blog/2011/06/20/taxbird-nun-in-macports-verfugbar/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 22:40:01 +0000</pubDate>
		<dc:creator>Thomas Keller</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[German]]></category>
		<category><![CDATA[MacPorts]]></category>

		<guid isPermaLink="false">http://www.thomaskeller.biz/blog/?p=1051</guid>
		<description><![CDATA[Der ein oder andere kennt Stefan Siegls kleines Programm Taxbird eventuell schon: Es erleichtert Selbstständigen unter Linux die Abgabe von Umsatzsteuervoranmeldungen gegenüber dem örtlichen Finanzamt. Mac-User blickten jedoch bislang weitesgehend in die Röhre, da der offizielle Elster-Client bis heute nur unter Windows verfügbar ist. Da die Komponenten von Taxbird (die mit Gtk geschriebene GUI und [...]]]></description>
			<content:encoded><![CDATA[<p>Der ein oder andere kennt <a href="http://blogg.brokenpipe.de/">Stefan Siegls</a> kleines Programm <a href="http://www.taxbird.de">Taxbird</a> eventuell schon: Es erleichtert Selbstständigen unter Linux die Abgabe von Umsatzsteuervoranmeldungen gegenüber dem örtlichen Finanzamt.</p>

<p>Mac-User blickten jedoch bislang weitesgehend in die Röhre, da der offizielle Elster-Client bis heute nur unter Windows verfügbar ist. Da die Komponenten von Taxbird (die mit Gtk geschriebene GUI und eine Bibliothek zum Datentransfer, die auf den passenden Namen &#8220;libgeier&#8221; hört), Standard-Bibliotheken und Tools benötigt, habe ich mich an einen Port gemacht und diesen <a href="https://trac.macports.org/browser/trunk/dports/finance/taxbird/Portfile">heute fertiggestellt</a>.</p>

<p>Wer das ausprobieren möchte, der möge einfach <code>sudo port install taxbird</code> ausführen. Beim ersten Start erkundigt sich Taxbird nach <code>html2ps</code>, welches optional zur Übersetzung des HTML-Reports in PostScript genutzt werden könnte. Ich habe hierfür bislang auf einen weiteren Port verzichtet, da html2ps weder über eine Standardinstallationsroutine verfügt und außerdem etliche weitere Abhängigkeiten mit sich bringen würde. Die HTML-Reports sollten daher vor dem Versand einfach abgespeichert werden.</p>

<p>Feedback ist willkommen!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomaskeller.biz/blog/2011/06/20/taxbird-nun-in-macports-verfugbar/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SQLite to MySQL</title>
		<link>http://www.thomaskeller.biz/blog/2011/05/26/sqlite-to-mysql/</link>
		<comments>http://www.thomaskeller.biz/blog/2011/05/26/sqlite-to-mysql/#comments</comments>
		<pubDate>Thu, 26 May 2011 12:18:47 +0000</pubDate>
		<dc:creator>Thomas Keller</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.thomaskeller.biz/blog/?p=1036</guid>
		<description><![CDATA[Migrating a database dump from SQLite to MySQL can be somewhat of a hassle. After various trials I came up with the following that worked for me quite well: echo .dump &#124; sqlite3 mydb.db &#124;\ egrep -v "\b(BEGIN TRANSACTION&#124;COMMIT&#124;PRAGMA&#124;sqlite_sequence)\b" &#124;\ perl -pe 's/^([^'\''"]*)"([^"]+)"/\1`\2`/' &#124;\ perl -pe 's/\bautoincrement\b/auto_increment/' &#124;\ mysql -uroot mydb The most important line [...]]]></description>
			<content:encoded><![CDATA[<p>Migrating a database dump from SQLite to MySQL can be somewhat of a hassle. After various trials I came up with the following that worked for me quite well:</p>

<pre><code>echo .dump | sqlite3 mydb.db |\
  egrep -v "\b(BEGIN TRANSACTION|COMMIT|PRAGMA|sqlite_sequence)\b" |\
  perl -pe 's/^([^'\''"]*)"([^"]+)"/\1`\2`/' |\
  perl -pe 's/\bautoincrement\b/auto_increment/' |\
  mysql -uroot mydb
</code></pre>

<p>The most important line is probably line 3: SQLite encapsulates all table and column names in double quotes and this is not understood by MySQL, so we&#8217;re replacing them with backticks. One must be careful here, though, because data INSERTs might also contain double quotes and to avoid having these wrongly replaced as well we only replace them until we encounter the first single quote (these are used in SQLite to encapsulate strings).</p>

<p>Line 3 might also have to be called several times in a row in case multi-column indexes are part of the schema as well, as it will only replace the very first, but no subsequent matches. (I couldn&#8217;t get zero-width lookbehind to work properly to remedy this problem; help is welcome.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomaskeller.biz/blog/2011/05/26/sqlite-to-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mtn-browse 0.72 and accompanying Perl library released</title>
		<link>http://www.thomaskeller.biz/blog/2011/03/06/mtn-browse-0-72-and-accompanying-perl-library-released/</link>
		<comments>http://www.thomaskeller.biz/blog/2011/03/06/mtn-browse-0-72-and-accompanying-perl-library-released/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 23:34:30 +0000</pubDate>
		<dc:creator>Thomas Keller</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[monotone]]></category>

		<guid isPermaLink="false">http://www.thomaskeller.biz/blog/?p=994</guid>
		<description><![CDATA[Tony Cooper announced a new release of his Monotone Browser software and also a new version of the underlying Monotone::AutomateStdio Perl library. Both packages are now compatible with the most recent version of monotone, 0.99.1. Additionally, mtn-browse also supports all the new selector functions introduced in monotone 0.99 and is able to restrict revision and [...]]]></description>
			<content:encoded><![CDATA[<p>Tony Cooper announced a new release of his <a href="http://www.coosoft.plus.com/software.html">Monotone Browser</a> software and also a new version of the underlying <a href="http://search.cpan.org/~aecooper/Monotone-AutomateStdio-0.12/lib/Monotone/AutomateStdio.pod">Monotone::AutomateStdio</a> Perl library.</p>

<p>Both packages are now compatible with the most recent version of monotone, 0.99.1. Additionally, mtn-browse also supports all the new selector functions introduced in monotone 0.99 and is able to restrict revision and file histories to specific branches.</p>

<p>Many thanks to Tony for his outstanding work! I&#8217;ll update the MacPorts packages in a few&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomaskeller.biz/blog/2011/03/06/mtn-browse-0-72-and-accompanying-perl-library-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>monotone docathon on Sunday, 18:00 UTC</title>
		<link>http://www.thomaskeller.biz/blog/2010/12/17/monotone-docathon-on-sunday-1800-utc/</link>
		<comments>http://www.thomaskeller.biz/blog/2010/12/17/monotone-docathon-on-sunday-1800-utc/#comments</comments>
		<pubDate>Thu, 16 Dec 2010 23:56:53 +0000</pubDate>
		<dc:creator>Thomas Keller</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Free Software]]></category>
		<category><![CDATA[monotone]]></category>

		<guid isPermaLink="false">http://www.thomaskeller.biz/blog/?p=943</guid>
		<description><![CDATA[The monotone team holds a &#8220;docathon&#8221; &#8211; a small documentation sprint &#8211; next Sunday, Dec 19th 2010, starting at 18:00 UTC for approx. 6hrs. During this time we meet on IRC and want to collaboratively tidy the wiki pages, further improve the manual, update INSTALL and cleanup other text-based files and more for the upcoming [...]]]></description>
			<content:encoded><![CDATA[<p>The monotone team holds a &#8220;docathon&#8221; &#8211; a small documentation sprint &#8211; next Sunday, Dec 19th 2010, starting at 18:00 UTC for approx. 6hrs. During this time we meet on IRC and want to collaboratively tidy the <a href="http://wiki.monotone.ca">wiki pages</a>, further improve the <a href="http://www.monotone.ca/docs">manual</a>, update <a href="https://code.monotone.ca/p/monotone/source/tree/h:net.venge.monotone/INSTALL">INSTALL</a> and cleanup other text-based files and more for the upcoming 1.0 release.</p>

<p>So if you want to lend a helping hand to your favourite version control system, just drop by on <a href="irc://irc.oftc.net/#monotone">IRC</a>, say hello and we&#8217;ll quickly get in contact with you <img src='http://www.thomaskeller.biz/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p>See you on Sunday!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomaskeller.biz/blog/2010/12/17/monotone-docathon-on-sunday-1800-utc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I do Open Source development</title>
		<link>http://www.thomaskeller.biz/blog/2010/11/05/why-i-do-open-source-development/</link>
		<comments>http://www.thomaskeller.biz/blog/2010/11/05/why-i-do-open-source-development/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 23:58:30 +0000</pubDate>
		<dc:creator>Thomas Keller</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Free Software]]></category>
		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.thomaskeller.biz/blog/?p=898</guid>
		<description><![CDATA[I was on a scrum master certification over the last two days, lead by Joseph Pelrine, and beside the enormous amount of knowledge on Scrum and the not lower amount of anecdotes and stories he experienced with [insert famous IT company here], he came out with one particular interesting hypothesis: &#8220;Doing Open Source software is [...]]]></description>
			<content:encoded><![CDATA[<p>I was on a scrum master certification over the last two days, lead by <a href="http://www.metaprog.com/blogs/about/">Joseph Pelrine</a>, and beside the enormous amount of knowledge on Scrum and the not lower amount of anecdotes and stories he experienced with <em>[insert famous IT company here]</em>, he came out with one particular interesting hypothesis:</p>

<blockquote>
&#8220;Doing Open Source software is like having an affair.&#8221;
</blockquote>

<p>He argued that if people would have enough fun with their daily development tasks and would identify enough with their company, they wouldn&#8217;t have the need for doing Open Source, they would not spend their valuable time developing free stuff.</p>

<p>So, am I cheating my company?</p>

<p>Certainly I love Open Source and Free Software in general. One reason why I love it that much is because I come in contact with interesting and very smart people. For example, I learnt many things from the friendly folks in the monotone community over the last couple of years, things which I did not learn or even came in contact while doing my daily business. And guess what, my company participated and profited from this many times, because I carried a lot of this knowledge back to my day job.</p>

<p>Beyond learning another major thing of Open Source for me is recognition. I don&#8217;t get a lot recognition for my daily business &#8211; either because most people like my boss just don&#8217;t care how software is manufactured and how the process works (after all, its the money that counts, eh?), or because the artifact I&#8217;m developing vanishes anyway because some marketing guru of a customer decided to &#8220;well, not go into this direction any further&#8221;. Sure, the money is ok, everything is paid, but it just plainly demotivates you if you work for the trash can.
With Open Source you work on stuff you or other people demand, you get the reward in terms of positive feedback if you help them solve their problems and you get public recognition for the source code you publish.</p>

<p>So again, am I cheating my company? I don&#8217;t think so. Open Source allows me to think outside of the box and try new things, for all of which would be no time in narrowed sprints or busy project plans, and my company profits from that.
But yes, maybe this also opens the door for new employments in the future as well, but lets face it, doing Open Source work is often the only possibility to personally get ahead in this industry today.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomaskeller.biz/blog/2010/11/05/why-i-do-open-source-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>monotone 0.99 released (Updated)</title>
		<link>http://www.thomaskeller.biz/blog/2010/10/28/monotone-0-99-released/</link>
		<comments>http://www.thomaskeller.biz/blog/2010/10/28/monotone-0-99-released/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 22:35:36 +0000</pubDate>
		<dc:creator>Thomas Keller</dc:creator>
				<category><![CDATA[Free Software]]></category>
		<category><![CDATA[monotone]]></category>

		<guid isPermaLink="false">http://www.thomaskeller.biz/blog/?p=885</guid>
		<description><![CDATA[[Update] Unfortunately some last minute changes make this release break on x86_64 &#8211; the issue has been fixed in the meantime, the patch is available here. My apologies, we&#8217;ll put out a new release shortly. [/Update] We, the monotone developers, are very proud to release version 0.99 of our distributed version control system. This release [...]]]></description>
			<content:encoded><![CDATA[<p><strong>[Update]</strong> Unfortunately some last minute changes make this release break on x86_64 &#8211; the issue has been fixed in the meantime, <a href="http://code.monotone.ca/p/monotone/source/commit/1719598391da11b01b3a574e5b96a315d3d33810/">the patch is available here</a>. My apologies, we&#8217;ll put out a new release shortly. <strong>[/Update]</strong></p>

<p>We, the monotone developers, are very proud to release version 0.99
of our distributed version control system.</p>

<p>This release contains almost countless bug fixes, changes and new
features, so I&#8217;m listing only the outstanding ones here:</p>

<ul>
<li><p>Selectors have been overhauled to support the calculation of
common sets of revisions, like e.g. differences, ancestors,
parents or children of input revisions.</p></li>
<li><p>Monotone&#8217;s URI syntax has been extended and is now the default
for all kinds of netsync actions (the old syntax remains available
until 2.0 though).</p></li>
<li><p>All netsync commands now come with a &#8220;dry-run&#8221; mode which
shows incoming and outgoing changes, such as revisions and certs.</p></li>
<li><p>The command line UI was cleaned up and improved a lot and now
supports negatable and completable options amongst other things.</p></li>
<li><p>Many automate commands have been added and existing one improved.</p></li>
<li><p>Monotone regained its manual page &#8211; automatically generated from
the command tree &#8211; which is also available localized through
the new &#8216;manpage&#8217; command.</p></li>
</ul>

<p>A complete list of changes is available in the <a href="http://www.monotone.ca/NEWS">NEWS file</a>.
The tarball can be <a href="http://www.monotone.ca/downloads.php">downloaded here</a>
- binaries are posted there as they come in.</p>

<p>Finally, this release also marks the beginning of a new version
numbering scheme, where we try to maintain stable versions up to a
certain point and add only non-breaking changes as minor releases.</p>

<p>The upcoming version 1.0 now is such a stable release, actually the
first one after more than 6 years of development. It will only contain
bug fixes and documentation improvements, but no additional new
features, and is planned in Q4 2010.</p>

<p><strong>Thank you all for your ongoing support!</strong></p>

<p>Thomas<br />
- on behalf of the monotone team.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomaskeller.biz/blog/2010/10/28/monotone-0-99-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ACLs on a jailed ZFS volume with FreeBSD</title>
		<link>http://www.thomaskeller.biz/blog/2010/08/30/acls-on-a-jailed-zfs-volume-with-freebsd/</link>
		<comments>http://www.thomaskeller.biz/blog/2010/08/30/acls-on-a-jailed-zfs-volume-with-freebsd/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 19:52:53 +0000</pubDate>
		<dc:creator>Thomas Keller</dc:creator>
				<category><![CDATA[Free Software]]></category>

		<guid isPermaLink="false">http://www.thomaskeller.biz/blog/?p=791</guid>
		<description><![CDATA[While setting up a couple of things on the new monotone server, which is bascially a FreeBSD jail on a physical server kindly provided by Lapo Luchini, I stumbled upon a quite basic use case: I needed to give one user group read and write access to files created and modified by another group. On [...]]]></description>
			<content:encoded><![CDATA[<p>While setting up a couple of things on the new monotone server, which is bascially a FreeBSD jail on a physical server kindly provided by Lapo Luchini, I stumbled upon a quite basic use case: I needed to give one user group read and write access to files created and modified by another group.</p>

<p>On a Linux system I&#8217;d have simply enabled POSIX ACLs for the volume and call</p>

<p><pre>
$ setfacl -m d:user:foo:rwx /path/to/directory
$ setfacl -m d:user:bar:rwx /path/to/directory
</pre></p>

<p>and voila, all new files and directories underknees the path would have received the default ACLs with read and write rights for the <code>foo</code> and <code>bar</code> user.</p>

<p>It turns out that on FreeBSD, which gained zfs ACL support in its 8.1 release recently, the call is quite similar &#8211; just that <code>NFSv4</code> ACLs are used instead of <code>POSIX</code> ACLs, which are a bit more powerful (read more on the <a href="http://blogs.sun.com/marks/entry/zfs_acls">topic here</a>):</p>

<p><pre>
$ setfacl -m user:foo:rwxp:fd:allow /path/to/directory
$ setfacl -m user:bar:rwxp:fd:allow /path/to/directory
</pre></p>

<p>Instead of <code>d:</code> for <code>default</code> which is used in the <code>POSIX</code> version, <code>fd</code> is used, which stands for <code>file_inherit</code> and <code>directory_inherit</code> and is exactly what we need. And while <code>POSIX</code> ACLs are add-only, you can either specify <code>:allow</code> or <code>:deny</code> to also explicitely deny access to a user or usergroup. Finally, you might have seen the little <code>p</code> which stands for the <code>append_data</code> right. This was needed for me in one case, so I added it here. It is actually one of many more rights beside the well-known <code>rwx</code> that <code>NFSv4</code> ACLs defines here &#8211; if you&#8217;re curious, just read more on the aforementioned link.</p>

<p>&#8220;So if everything works, what is the point of this blog?&#8221; you might ask. Well, unfortunately it did not all work out so nicely. One thing caused me some headaches which is actually dubbed a feature of FreeBSDs NFSv4 ACL implementation &#8211; namely that the <code>umask</code> (the create mask for new files) is taken into account on file creation, which leads to an unwanted recalculation of the default (inherited) ACLs. So if you have a file foo created by user <code>u1</code> and the ACLs should also give write access to user <code>u2</code>, then you might end up with something like this:</p>

<p><pre>
$ getfacl foo
   # file: foo
   # owner: u1
   # group: users
              user:u1:--x-----------:------:deny
              user:u1:rwxp----------:------:allow
              user:u2:rwxp----------:------:deny
              user:u2:rwxp----------:------:allow
               owner@:--x-----------:------:deny
               owner@:rw-p---A-W-Co-:------:allow
               group@:rwxp----------:------:deny
               group@:--------------:------:allow
            everyone@:rwxp---A-W-Co-:------:deny
            everyone@:------a-R-c--s:------:allow
</pre></p>

<p>The file was created with <code>rw- --- ---</code> (i.e. umask 077) which lead to a :deny rule for user <code>u2</code> and since deny rules take precendence over allow rules, <code>u2</code> gets no access to <code>foo</code>. I contacted the author of FreeBSD&#8217;s NFSv4 ACL implementation, Edward Tomasz Napierała, and thankfully he drawed a way out of the mess:</p>

<blockquote>
Your problem is umask.  When you create a file, ACL entries are inherited,
and then the new ACL is modified according to some (pretty complicated)
rules.  You probably want to disable that, so that entries are simply
inherited, without further messing and adding deny entries.  To do this,
set aclmode=passthrough and aclinherit=passthrough ZFS properties.
</blockquote>

<p>The only downside to this approach is that you cannot change these settings inside the jail, but only from the outside. Luckily, the host part is also under our control, so Lapo remounted the jail volume with the new settings, and voilá, the ACLs now work as expected.</p>

<p>You can learn something new every day.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomaskeller.biz/blog/2010/08/30/acls-on-a-jailed-zfs-volume-with-freebsd/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On monotone selectors</title>
		<link>http://www.thomaskeller.biz/blog/2010/08/10/on-monotone-selectors/</link>
		<comments>http://www.thomaskeller.biz/blog/2010/08/10/on-monotone-selectors/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 11:57:13 +0000</pubDate>
		<dc:creator>Thomas Keller</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Free Software]]></category>
		<category><![CDATA[monotone]]></category>

		<guid isPermaLink="false">http://www.thomaskeller.biz/blog/?p=750</guid>
		<description><![CDATA[This is the first post in a small series of posts which will show off some of the new functionality you can expect in the next major version of monotone. While there is no fixed release date set for it yet, we plan to release it in fall this year. If you look at the [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first post in a small series of posts which will show off some of the new functionality you can expect in the next major version of monotone. While there is no fixed release date set for it yet, we plan to release it in fall this year. If you look at the <a href="http://monotone.ca/wiki/RoadMap/">roadmap</a> you see that most things have already been implemented and merged into mainline, so we&#8217;re definitely on plan <img src='http://www.thomaskeller.biz/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p>Anyways, lets begin this little series with the selector rewrite Tim merged a couple of weeks ago. Selectors are one of the main concepts in monotone to pick revisions other than by their 40 byte long hash id and are therefor very useful to &#8220;navigate&#8221; between different development lines.</p>

<p>Monotone up until 0.48 knows already many selectors &#8211; you can select revisions by tag, by branch, by author, by custom cert values and so on. Selectors can be combined to calculate the intersection between two single sets, like &#8220;show me all revisions from author &#8216;Jon&#8217; on branch &#8216;my.project&#8217;&#8221; which would essentially look like this:
<pre>$ mtn automate select "a:jon/b:my.project"</pre>
The syntax for these selectors is all nice and simple &#8211; each selector is prefixed with a unique character and multiple selectors are concatenated with a single slash. While these old-style selectors solved many use cases, some however kept unresolved in the past and users from other DVCS like Darcs had a rather hard time figuring out how to accomplish a certain selection in monotone.</p>

<p>A particular good example is &#8220;how can I easily view the changes of a development branch since the last merge point?&#8221;. Up until now you either had to figure out manually the revision of the merge point by looking at the output of log or use some scary construct like the following:
<pre>$ mtn au common_ancestors $(mtn au select h:main.branch) \
    $(mtn au select h:) | mtn au erase_ancestors -@-</pre></p>

<h4>Enter selector functions</h4>

<p>Luckily, you don&#8217;t have to write these things anymore starting from 0.99 onwards. Give the new <em>selector functions</em> a warm applause!
<pre>$ mtn au select "lca(h:main.branch;h:feature.branch)"</pre>
In this example &#8220;lca&#8221; stands for the &#8220;least common ancestors&#8221; function which takes two arguments, i.e. two other selectors. The syntax is extra short in a workspace where an empty head selector <code>h:</code> defaults to the branch recorded in the workspace options, so if you&#8217;re in the <code>feature.branch</code> workspace, just type:
<pre>$ mtn au select "lca(h:main.branch;h:)"</pre>
Quite convenient, eh? This is not only short, but up to five times faster than the above complex command line. Of course the selector can be directly used in a call to diff or log, like so:
<pre>$ mtn diff -r "lca(h:main.branch;h:)"
$ mtn log --to children(lca(h:main.branch;h:))"</pre>
But huh, whats that nested <code>children</code> call you ask? Well, the <code>lca</code> function picks the merge point in the <em>main branch</em> and if the revision graph goes around that, log would otherwise happily log more parents (earlier revisions) on the feature branch. The call to <code>children</code> ensures that we pick the merge revision in the feature branch and therefor really stop logging at this revision.</p>

<h4>Test drive</h4>

<p>There are many more of these selector functions and explaining them all in detail is out of scope here, please have a look at &#8220;composite selectors&#8221; in the <a href="http://monotone.thomaskeller.biz/docbuild/html/Selectors.html#Selectors">nightly built manual</a>.
And if you want to have an early look at this and play around without having to compile it yourself &#8211; at least if you&#8217;re on openSUSE or Fedora &#8211; just download the binaries from <a href="http://monotone.thomaskeller.biz/autobuild/index.php">our nightly builds</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thomaskeller.biz/blog/2010/08/10/on-monotone-selectors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

