showfeede({"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","xmlns$georss":"http://www.georss.org/georss","xmlns$thr":"http://purl.org/syndication/thread/1.0","id":{"$t":"tag:blogger.com,1999:blog-998418780028044861"},"updated":{"$t":"2010-07-09T17:42:42.313+02:00"},"title":{"type":"text","$t":"On the brink"},"subtitle":{"type":"html","$t":"Technical blog (Gunnar Wrobel)"},"link":[{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/posts/default"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default?alt\u003djson-in-script\u0026orderby\u003dpublished"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/"},{"rel":"hub","href":"http://pubsubhubbub.appspot.com/"},{"rel":"next","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default?alt\u003djson-in-script\u0026start-index\u003d26\u0026max-results\u003d25\u0026orderby\u003dpublished"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"}}],"generator":{"version":"7.00","uri":"http://www.blogger.com","$t":"Blogger"},"openSearch$totalResults":{"$t":"42"},"openSearch$startIndex":{"$t":"1"},"openSearch$itemsPerPage":{"$t":"25"},"entry":[{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-774520260922748316"},"published":{"$t":"2010-06-14T14:30:00.000+02:00"},"updated":{"$t":"2010-06-14T14:30:26.893+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab gentoo openpkg gentoo-prefix"}],"title":{"type":"text","$t":"Kolab2GentooPrefix"},"content":{"type":"html","$t":"\u003cp\u003e\nLast time I experimented with \u003ca href\u003d\"http://www.gentoo.org/proj/en/gentoo-alt/prefix/\"\u003eGentoo-Prefix\u003c/a\u003e is about half a year ago. I don't know what type of problems I had back then but I remember I did not get far enough. Now - as I'm finally having a tiny bit of spare time for \u003ca href\u003d\"www.kolab.org\"\u003eKolab\u003c/a\u003e/\u003ca href\u003d\"www.horde.org\"\u003eHorde\u003c/a\u003e again - I did actually get it to compile and run. Nothing more than the base install. But I didn't see anything that would prevent me from trying to get a Kolab server running in such a prefix.\n\u003c/p\u003e\n\u003cp\u003e\nCombine that with the fact that the Kolab server is currently searching for a replacement for OpenPKG... ah, a tiny tiny little wee bit of hope. I don't think it will work out as I would like it to but at least I'm trying.\n\u003cp/\u003e\n\u003cp\u003e\nI believe the Kolab crowd will prefer a native installation method as their next primary platform. But \u003ca href\u003d\"www.openpkg.com\"\u003eOpenPKG\u003c/a\u003e had some significant advantages - even though nobody liked the distribution itself.\n\u003cp/\u003e\n\u003cp\u003e\n\u003cli\u003eIt can be installed on many distributions.\u003c/li\u003e\n\u003cli\u003eIt only needs to be tested once and will have this tested stability independent of the distribution it is installed on.\u003c/li\u003e\n\u003cli\u003eIt is a self contained system and the admins know they should keep changes in there to a minimum if they don't want to risk breaking the server.\u003c/li\u003e\n\u003cp/\u003e\n\u003cp\u003e\nGentoo Prefix would allow us to retain these advantages. Ah, back to playing around...\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-774520260922748316?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/774520260922748316/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2010/06/kolab2gentooprefix.html#comment-form","title":"1 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/774520260922748316"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/774520260922748316"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2010/06/kolab2gentooprefix.html","title":"Kolab2GentooPrefix"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"1"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-107671116065926335"},"published":{"$t":"2010-06-14T09:08:00.000+02:00"},"updated":{"$t":"2010-06-14T09:08:01.108+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ubuntu mobile internet wvdial rfcomm bluetooth howto"}],"title":{"type":"text","$t":"Connecting to the net via a bluetooh mobile..."},"content":{"type":"html","$t":"... using the command line on Ubuntu. These are just the core bluetooth commands and the hint does not deal with specific mobile devices or the settings for your specific provider. It is basically a reminder for myself.\n\nFirst you need to identify the bluetooth address and the channel using \u003ctt\u003esdptool\u003c/tt\u003e:\n\n\u003cpre\u003esdptool search DUN\nInquiring ...\n\nSearching for DUN on 00:23:F1:21:63:0F ...\nService Name: Dial-up Networking\nService RecHandle: 0x2008003\nService Class ID List:\n  \"Dialup Networking\" (0x1103)\n  \"Generic Networking\" (0x1201)\nProtocol Descriptor List:\n  \"L2CAP\" (0x0100)\n  \"RFCOMM\" (0x0003)\n    Channel: 1\nProfile Descriptor List:\n  \"Dialup Networking\" (0x1103)\n    Version: 0x0101\n\u003c/pre\u003e\n\nThe modem device can now be added with \u003ctt\u003erfcomm\u003c/tt\u003e:\n\n\u003cpre\u003esudo rfcomm connect DUN 00:23:F1:21:63:0F 1\nConnected /dev/rfcomm0 to 00:23:F1:21:63:0F on channel 1\nPress CTRL-C for hangup\n\u003c/pre\u003e\n\nThe tool reports that the modem device can now be used at \u003ctt\u003e/dev/rfcomm0\u003c/tt\u003e. This can now be set in \u003ctt\u003e/etc/wvdial.conf\u003c/tt\u003e to connect to the provider.\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-107671116065926335?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/107671116065926335/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2010/06/connecting-to-net-via-bluetooh-mobile.html#comment-form","title":"1 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/107671116065926335"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/107671116065926335"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2010/06/connecting-to-net-via-bluetooh-mobile.html","title":"Connecting to the net via a bluetooh mobile..."}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"1"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-1739895158081502562"},"published":{"$t":"2009-12-02T08:54:00.001+01:00"},"updated":{"$t":"2009-12-02T08:56:53.791+01:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"latex"},{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"layman"},{"scheme":"http://www.blogger.com/atom/ns#","term":"book"}],"title":{"type":"text","$t":"A parting gift"},"content":{"type":"html","$t":"\u003cp\u003e\nI have become increasingly unreliable concerning my activities within\nthe Gentoo developer community during the last year. Now I finally\narrived at the point where I consider the only reasonable solution to\nleave the Gentoo team. The final drop has been the fact that I\npromised Sebastian the next layman release. But week after week I did\nnot find the time to work on the next version thus failing the\npromise.\n\u003c/p\u003e\n\u003cp\u003e\nWith my commercial endeavours within the \u003ca href\u003d\"http://www.kolab.org\"\u003eKolab\u003c/a\u003e\nand \u003ca href\u003d\"http://www.horde.org\"\u003eHorde\u003c/a\u003e communities thriving I have to be\nrealistic: The workload won't suddenly fade during the next\nyear(s?). I would have liked to include Gentoo into the portfolio I\nget paid for but I was unable to achieve that. Chances are that I\nwould be even less responsive concerning Gentoo in the future.\n\u003c/p\u003e\n\u003cp\u003e\nThis is no easy decision for me as I do like Gentoo and feel strongly\nfor some of the stuff I did for Gentoo. It is not easy to drop these\nprojects. I would have made the choice earlier in order to clarify the\nsituation if I would not care that much about Gentoo. But I left\npeople with an unresponsive maintainer this way and I'm sorry for\nthat.\n\u003c/p\u003e\n\u003cp\u003e\nThere is one final thing I'd like to leave as a parting gift to the\nGentoo community.\n\u003c/p\u003e\n\u003cp\u003e\nAs some of you may know I wrote a german book about Gentoo. When I\ninitially started the project I asked the publisher if there would be\nany possibility to produce a free version of that book, too. Writing\nabout free software feels strange to me if the things I write are not\nfree. But books are not software and I had to accept the commercial\nrealities of the project at that time.\n\u003c/p\u003e\n\u003cp\u003e\nBut I mentioned above that things for my little one-man-company are\ngoing well and so I did buy the rights to my book back. It has now\nbeen published under a free license and is available for \u003ca href\u003d\"http://www.fosdoc.de/downloads/OSP_wrobel_gentoo.pdf\"\u003edownload\nhere\u003c/a\u003e. The latex source for the book is \u003ca href\u003d\"http://github.com/wrobel/book-gentoo/tree/\"\u003ehere\u003c/a\u003e.\n\u003c/p\u003e\n\u003cp\u003e\nTime to say goodbye. Sigh...\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-1739895158081502562?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/1739895158081502562/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2009/12/parting-gift.html#comment-form","title":"19 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/1739895158081502562"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/1739895158081502562"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2009/12/parting-gift.html","title":"A parting gift"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"19"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-7569952508994512863"},"published":{"$t":"2009-10-12T15:49:00.000+02:00"},"updated":{"$t":"2009-10-12T15:49:04.241+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"layman"}],"title":{"type":"text","$t":"layman moves from subversion to git"},"content":{"type":"html","$t":"In preparation for layman-1.2.4 the repository has been converted from subversion to git.\n\nThe new repository can be found at\n\n \u003ctt\u003egit://layman.git.sourceforge.net/gitroot/layman/layman\u003c/tt\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-7569952508994512863?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/7569952508994512863/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2009/10/layman-moves-from-subversion-to-git.html#comment-form","title":"1 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/7569952508994512863"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/7569952508994512863"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2009/10/layman-moves-from-subversion-to-git.html","title":"layman moves from subversion to git"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"1"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-2730516127186485732"},"published":{"$t":"2009-01-01T08:47:00.000+01:00"},"updated":{"$t":"2009-01-01T08:52:14.712+01:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"layman"},{"scheme":"http://www.blogger.com/atom/ns#","term":"release"},{"scheme":"http://www.blogger.com/atom/ns#","term":"python"}],"title":{"type":"text","$t":"layman-1.2.3 is out"},"content":{"type":"html","$t":"The next \u003ca href\u003d\"http://layman.sourceforge.net\"\u003elayman\u003c/a\u003e version has been released and fixes a few minor bugs:\n\u003cul\u003e\n \u003cli\u003eSupport setting the terminal screen width (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d253016\"\u003e#253016\u003c/a\u003e)\u003c/li\u003e\n \u003cli\u003elayman -S fetches each overlay twice (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d253241\"\u003e#253241\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\nI can't seem to get layman bug free these days. I already wanted to mark the newer version stable months ago. Let's hope there'll be a longer bug free period now ;)\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-2730516127186485732?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/2730516127186485732/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2009/01/layman-123-is-out.html#comment-form","title":"3 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2730516127186485732"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2730516127186485732"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2009/01/layman-123-is-out.html","title":"layman-1.2.3 is out"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"3"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-8605447572883872347"},"published":{"$t":"2008-12-28T23:53:00.001+01:00"},"updated":{"$t":"2008-12-28T23:58:11.169+01:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"layman"},{"scheme":"http://www.blogger.com/atom/ns#","term":"release"},{"scheme":"http://www.blogger.com/atom/ns#","term":"python"}],"title":{"type":"text","$t":"layman-1.2.2 is out"},"content":{"type":"html","$t":"The next \u003ca href\u003d\"http://layman.sourceforge.net\"\u003elayman\u003c/a\u003e version has been released and fixes a few minor bugs:\n\u003cul\u003e\n \u003cli\u003elayman -L: better use of screen real estate for source URLs (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d251032\"\u003e#251032\u003c/a\u003e, submitted by Martin von Gagern)\u003c/li\u003e\n \u003cli\u003eExecute subprocesses in a shell. (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d247792\"\u003e#235165\u003c/a\u003e)\u003c/li\u003e\n \u003cli\u003elayman/overlays/git.py (GitOverlay.sync): app-portage/layman - 'layman -S --quiet' yields \"git: 'pull-q' is not a git-command.\" (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d247964\"\u003e#247964\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\nThanks to all the contributers!\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-8605447572883872347?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/8605447572883872347/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/12/layman-122-is-out.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/8605447572883872347"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/8605447572883872347"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/12/layman-122-is-out.html","title":"layman-1.2.2 is out"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-4345185499702465181"},"published":{"$t":"2008-11-15T11:15:00.000+01:00"},"updated":{"$t":"2008-11-15T11:27:57.438+01:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"layman"},{"scheme":"http://www.blogger.com/atom/ns#","term":"release"},{"scheme":"http://www.blogger.com/atom/ns#","term":"python"}],"title":{"type":"text","$t":"layman-1.2.1 is out"},"content":{"type":"html","$t":"The next \u003ca href\u003d\"http://layman.sourceforge.net\"\u003elayman\u003c/a\u003e version has been released and fixes a few minor bugs:\n\u003cul\u003e\n \u003cli\u003eFixes for python-2.6 (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d237625\"\u003e#237625\u003c/a\u003e, submitted by Mike Auty)\u003c/li\u003e\n \u003cli\u003eBetter locale support (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d235165\"\u003e#235165\u003c/a\u003e, submitted by A. F. T. Arahesis)\u003c/li\u003e\n \u003cli\u003eHandle git+ssh://, ssh:// correctly (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d230702\"\u003e#230702\u003c/a\u003e, submitted by Donnie Berkholz)\u003c/li\u003e\n \u003cli\u003eDo not remove directories if adding an overlay failed (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d236945\"\u003e#236945\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\nIn addition there is a feature enhancement:\n\n\u003cul\u003e\n \u003cli\u003ePass --quiet flag down to the version control system (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d236165\"\u003e#236165\u003c/a\u003e, submitted by A. F. T. Arahesis).\u003c/li\u003e\n\u003c/ul\u003e\n\nThanks to all the contributers!\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-4345185499702465181?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/4345185499702465181/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/11/layman-121-is-out.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/4345185499702465181"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/4345185499702465181"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/11/layman-121-is-out.html","title":"layman-1.2.1 is out"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-352115873020431463"},"published":{"$t":"2008-08-06T16:15:00.000+02:00"},"updated":{"$t":"2008-08-06T16:25:14.277+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo layman linuxmag article writing book"}],"title":{"type":"text","$t":"Distributed burden"},"content":{"type":"html","$t":"\u003cp\u003e\nI just found my \u003ca href\u003d\"http://www.linux-magazin.de/heft_abo/ausgaben/2006/11/verteilte_last\"\u003eold layman article\u003c/a\u003e is available for free. It probably has been accessible for a while already but I didn't know, so I thought I mention it here. It has been written for the \u003ca href\u003d\"http://www.linux-magazin.de\"\u003eGerman Linux Magazin\u003c/a\u003e so it is available in German only.\n\u003c/p\u003e\n\u003cp\u003e\nAs a response to this little article I got a short e-mail about a week later. \u003ca href\u003d\"http://www.trish.de/\"\u003ePatricia Jung\u003c/a\u003e asked me whether I'd be interested in writing \u003ca href\u003d\"http://www.amazon.de/gp/product/3937514341?ie\u003dUTF8\u0026tag\u003daufkant-21\u0026linkCode\u003das2\u0026camp\u003d1638\u0026creative\u003d6742\u0026creativeASIN\u003d3937514341\"\u003ea whole book about Gentoo\u003c/a\u003e. And I was. As people probably know...\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-352115873020431463?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/352115873020431463/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/08/distributed-burden.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/352115873020431463"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/352115873020431463"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/08/distributed-burden.html","title":"Distributed burden"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-2279343027411650617"},"published":{"$t":"2008-07-30T14:15:00.001+02:00"},"updated":{"$t":"2008-07-30T14:18:12.596+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"blog"}],"title":{"type":"text","$t":"Editing posts in blogger.com without getting them in the RSS again?"},"content":{"type":"html","$t":"\u003cp\u003e\nSorry for spamming planet.gentoo.org with old stuff. I simply edited labels on old posts which apparently modified the last edit date and pushed them into the RSS feed again. Any hint on how I can prevent such a thing when blogging via blogger.com?\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-2279343027411650617?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/2279343027411650617/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/07/editing-posts-in-bloggercom-without.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2279343027411650617"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2279343027411650617"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/07/editing-posts-in-bloggercom-without.html","title":"Editing posts in blogger.com without getting them in the RSS again?"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-8139096534923854355"},"published":{"$t":"2008-07-29T16:27:00.002+02:00"},"updated":{"$t":"2008-07-29T16:53:17.892+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"horde"},{"scheme":"http://www.blogger.com/atom/ns#","term":"release"},{"scheme":"http://www.blogger.com/atom/ns#","term":"programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"php"},{"scheme":"http://www.blogger.com/atom/ns#","term":"pear"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab"}],"title":{"type":"text","$t":"Horde_Kolab_Server-0.1.0 and Horde_Kolab_Format-0.1.1 have been released!"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://flickr.com/photos/wrobel/574034157/\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;\" src\u003d\"http://farm2.static.flickr.com/1006/574034157_527a3c7232_m_d.jpg\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\u003cp\u003e\nThe Horde project released the second PHP PEAR package representing a small subpart of the Kolab functionality within the Horde framework: \u003ca href\u003d\"http://pear.horde.org/index.php?package\u003dHorde_Kolab_Server\"\u003eHorde_Kolab_Server\u003c/a\u003e.\n\u003c/p\u003e\n\u003cp\u003e\nThe package allows to access the Kolab LDAP database. Some examples are being given \u003ca href\u003d\"http://wiki.kolab.org/index.php/Horde_Kolab_Server\"\u003eon a page in the Kolab wiki\u003c/a\u003e.\n\u003c/p\u003e\n\u003cp\u003e\nThe package is the second in a series of five packages that will be released over the next few months. The full set of packages will allow you to easily deal with data stored on a Kolab server within your own web applications.\n\u003c/p\u003e\n\u003cp\u003e\nIn addition the \u003ca href\u003d\"http://pear.horde.org/index.php?package\u003dHorde_Kolab_Format\u0026release\u003d0.1.1\u0026downloads\"\u003eHorde_Kolab_Format-0.1.1\u003c/a\u003e has been released. This is a bug fix release.\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-8139096534923854355?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/8139096534923854355/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/07/hordekolabserver-010-and.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/8139096534923854355"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/8139096534923854355"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/07/hordekolabserver-010-and.html","title":"Horde_Kolab_Server-0.1.0 and Horde_Kolab_Format-0.1.1 have been released!"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-7123162260880910472"},"published":{"$t":"2008-07-16T17:14:00.002+02:00"},"updated":{"$t":"2008-07-16T17:21:20.779+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"horde"},{"scheme":"http://www.blogger.com/atom/ns#","term":"programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"php"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab"}],"title":{"type":"text","$t":"Kolab on Gmail"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://flickr.com/photos/wrobel/574034157/\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;\" src\u003d\"http://farm2.static.flickr.com/1006/574034157_527a3c7232_m_d.jpg\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\u003cp\u003e\nIn the recent weeks the Kolab specific code in Horde has been\nsignificantly restructured to make it more developer-friendly. This\ncleanup also made it easy to add a small hack that allows you to run\nHorde with a standard IMAP server that provides no support for\nfolder annotations as a back end.\n\u003c/p\u003e\n\u003cp\u003e\nThe Kolab concept is based on IMAP folder annotations but so far the\nfeature is only being provided by the Cyrus IMAP server. In addition\nthe Kolab Server uses some patches in that area which means that you\nalways need a full Kolab Server as a basis for Kolab specific\ndevelopment.\n\u003c/p\u003e\n\u003cp\u003e\nFor Horde this means that the other developers have no chance to test\nthe Kolab specific code sections even if they sometimes need to touch\nthese areas. But installing a Kolab server is too much of a hurdle.\n\u003c/p\u003e\n\u003cp\u003e\nSo I always wanted to allow running the Kolab code on a plain IMAP\nserver. And ever since Gmail started providing IMAP access I\nconsidered the idea of Horde/Kolab on Gmail as a back end a nice toy thing.\n\u003c/p\u003e\n\u003cp\u003e\nToday the code that allows this went into Horde CVS. It is far from\nfinished but it is sufficient to provide you with \u003ca href\u003d\"http://hordeongmail.pardus.de\"\u003ea demo installation\u003c/a\u003e.\n\u003c/p\u003e\n\u003cp\u003e\nYou can use standard Gmail credentials there. But please be aware that\nI could grab these credentials! So you should only use a dummy account\nin your own best interest.\n\u003c/p\u003e\n\u003cp\u003e\nYou'll certainly find many bugs or things that are not working yet but\nit is of course just a demonstration.\n\u003c/p\u003e\n\u003cp\u003e\nThis line of coding is something I won't invest too much time\ninto. It will never get any support from Kolab (as using annotations\nis the better solution) and I don't guarantee you that the format I'm\nusing stays the same. So if you'd start using the code in a production\nenvironment the next upgrade might prevent access to the old data.\n\u003c/p\u003e\n\u003cp\u003e\nThe main intention of this is to ease access to the code and allow\nmore people to play with it.\n\u003c/p\u003e\n\u003cp\u003e\nThe way things work at the moment is a special Kolab XML format for\nstoring annotations. Each folder gets a single message in this format\nthat carries the UID \"1\". This message holds all annotation values\nyou'd usually store as folder metadata.\n\u003c/p\u003e\n\u003cp\u003e\nIf you want to configure a Horde CVS installation specifically for\nGmail you will still need to \u003ca href\u003d\"http://hg.pardus.de/cgi-bin/hg.cgi/horde/HORDE/file/tip/framework/HK-GW-Gmail.patch\"\u003epatch\u003c/a\u003e some IMAP parts. For other IMAP servers this might not be necessary.\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-7123162260880910472?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/7123162260880910472/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/07/kolab-on-gmail.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/7123162260880910472"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/7123162260880910472"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/07/kolab-on-gmail.html","title":"Kolab on Gmail"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-2739098159873876562"},"published":{"$t":"2008-07-11T16:14:00.003+02:00"},"updated":{"$t":"2008-07-11T16:19:16.593+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"mobile"},{"scheme":"http://www.blogger.com/atom/ns#","term":"horde"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolabkonsortium"},{"scheme":"http://www.blogger.com/atom/ns#","term":"syncml"},{"scheme":"http://www.blogger.com/atom/ns#","term":"programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab"}],"title":{"type":"text","$t":"First part of SyncML concluded"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://farm3.static.flickr.com/2026/2319768962_2190d14eb2_m_d.jpg\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;\" src\u003d\"http://farm3.static.flickr.com/2026/2319768962_2190d14eb2_m_d.jpg\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\u003cp\u003e\np@rdus completed coding on SyncML for Kolab a while ago and after some serious testing \u003ca href\u003d\"http://www.univention.de/\"\u003eUnivention\u003c/a\u003e uses the code in production.\n\u003c/p\u003e\n\u003cp\u003e\nIn addition a short press release has been issued \u003ca href\u003d\"http://www.univention.com/pm_syncml.html\"\u003eon\u003c/a\u003e \u003ca href\u003d\"http://kolab.org/pipermail/kolab-announce/2008/000073.html\"\u003eseveral\u003c/a\u003e \u003ca href\u003d\"http://www.linux-magazin.de/news/kolab_bekommt_syncml_anschluss_fuer_mobilgeraete\"\u003echannels\u003c/a\u003e.\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-2739098159873876562?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/2739098159873876562/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/07/first-part-of-syncml-concluded.html#comment-form","title":"2 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2739098159873876562"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2739098159873876562"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/07/first-part-of-syncml-concluded.html","title":"First part of SyncML concluded"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"2"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-6698088831343666394"},"published":{"$t":"2008-07-11T15:52:00.004+02:00"},"updated":{"$t":"2008-07-11T16:12:46.692+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"horde"},{"scheme":"http://www.blogger.com/atom/ns#","term":"release"},{"scheme":"http://www.blogger.com/atom/ns#","term":"programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"php"},{"scheme":"http://www.blogger.com/atom/ns#","term":"pear"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab"}],"title":{"type":"text","$t":"Horde_Kolab_Format-0.1.0 has been released!"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://flickr.com/photos/wrobel/574034157/\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;\" src\u003d\"http://farm2.static.flickr.com/1006/574034157_527a3c7232_m_d.jpg\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\u003cp\u003e\nThe Horde project released a first PHP PEAR package representing a small subpart of the Kolab functionality within the Horde framework: \u003ca href\u003d\"http://pear.horde.org/index.php?package\u003dHorde_Kolab_Format\"\u003eHorde_Kolab_Format\u003c/a\u003e.\n\u003c/p\u003e\n\u003cp\u003e\nThe package allows you to read and write the Kolab XML format. The XML data is converted from or to a data array within PHP. Some examples are being given \u003ca href\u003d\"http://wiki.kolab.org/index.php/Horde_Kolab_Format\"\u003eon a page in the Kolab wiki\u003c/a\u003e.\n\u003c/p\u003e\n\u003cp\u003e\nThe package is the first in a series of five packages that will be released over the next few months. The full set of packages will allow you to easily deal with data stored on a Kolab server within your own web applications.\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-6698088831343666394?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/6698088831343666394/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/07/hordekolabformat-010-has-been-released.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/6698088831343666394"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/6698088831343666394"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/07/hordekolabformat-010-has-been-released.html","title":"Horde_Kolab_Format-0.1.0 has been released!"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-1253844302972598053"},"published":{"$t":"2008-07-09T15:43:00.004+02:00"},"updated":{"$t":"2008-07-30T13:54:26.738+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"package management"},{"scheme":"http://www.blogger.com/atom/ns#","term":"horde"},{"scheme":"http://www.blogger.com/atom/ns#","term":"unit testing"},{"scheme":"http://www.blogger.com/atom/ns#","term":"wiki"},{"scheme":"http://www.blogger.com/atom/ns#","term":"php"},{"scheme":"http://www.blogger.com/atom/ns#","term":"pear"}],"title":{"type":"text","$t":"Generating a PEAR test environment for releasing PEAR packages"},"content":{"type":"html","$t":"\u003cp\u003e\nAs a developer you will often have a high number of different libraries installed. This will usually not match the users situation that will be nearer to the minimal number of required libraries. This may turn out to be a problem when releasing packages as missing dependencies can be easily overlooked.\n\u003c/P\u003e\n\u003cp\u003e\nFor releasing PHP PEAR packages it makes sense to get a separate PEAR environment for testing if the package to be release has a correct set of dependencies. If PEAR is already installed on the system, the steps for that are straight forward.\n\u003c/p\u003e\n\u003ch3\u003eSetup the new repository\u003c/h3\u003e\n\u003cp\u003e\nCreate the test environment with\n\u003c/p\u003e\n\u003cpre\u003e\n# mkdir ~/pear-test\n\u003c/pre\u003e\n\u003cp\u003e\nA separate PEAR configuration will be needed there:\n\u003c/p\u003e\n\u003cpre\u003e\n# pear config-create ~/pear-test ~/pear-test/.pearrc\n\nCONFIGURATION (CHANNEL PEAR.PHP.NET):\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n...\n\u003c/pre\u003e\n\u003cp\u003e\nAll that is required to complete the test environment is the installation of PEAR itself:\n\u003c/p\u003e\n\u003cpre\u003e\n# pear -c ~/pear-test/.pearrc install -o PEAR\n\nWARNING: channel \"pear.php.net\" has updated its protocols, use \"channel-update pear.php.net\" to update\nDid not download optional dependencies: pear/XML_RPC, use --alldeps to download automatically\npear/PEAR can optionally use package \"pear/XML_RPC\" (version \u003e\u003d 1.4.0)\ndownloading PEAR-1.7.2.tgz ...\nStarting to download PEAR-1.7.2.tgz (302,744 bytes)\n..........................done: 302,744 bytes\ndownloading Archive_Tar-1.3.2.tgz ...\nStarting to download Archive_Tar-1.3.2.tgz (17,150 bytes)\n...done: 17,150 bytes\ndownloading Structures_Graph-1.0.2.tgz ...\nStarting to download Structures_Graph-1.0.2.tgz (30,947 bytes)\n...done: 30,947 bytes\ndownloading Console_Getopt-1.2.3.tgz ...\nStarting to download Console_Getopt-1.2.3.tgz (4,011 bytes)\n...done: 4,011 bytes\ninstall ok: channel://pear.php.net/Archive_Tar-1.3.2\ninstall ok: channel://pear.php.net/Structures_Graph-1.0.2\ninstall ok: channel://pear.php.net/Console_Getopt-1.2.3\ninstall ok: channel://pear.php.net/PEAR-1.7.2\nPEAR: Optional feature webinstaller available (PEAR's web-based installer)\nPEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)\nPEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)\nPEAR: To install optional features use \"pear install pear/PEAR#featurename\"\n\u003c/pre\u003e\n\u003ch3\u003eA real example\u003c/h3\u003e\n\u003cp\u003e\nAs I am currently working on releasing the Kolab modules in Horde as PEAR packages I'll provide this process as an example.\n\u003c/p\u003e\n\u003cp\u003e\nIn order to wrap a PEAR package the appropriate channel needs to be known for \u003cb\u003epear\u003c/b\u003e. For horde packages this is \u003cb\u003epear.horde.org\u003c/b\u003e. This channel needs to be discovered first:\n\u003c/p\u003e\n\u003cpre\u003e\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc channel-discover pear.horde.org\nAdding Channel \"pear.horde.org\" succeeded\nDiscovery of channel \"pear.horde.org\" succeeded\n\u003c/pre\u003e\n\u003cp\u003e\nThe initial package to be released will be \u003cb\u003eKolab_Format\u003c/b\u003e. PEAR packaging happens with\n\u003c/p\u003e\n\u003cpre\u003e\n# cd Kolab_Format\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc package package.xml\n\nAnalyzing lib/Horde/Kolab/Format/XML/contact.php\nAnalyzing lib/Horde/Kolab/Format/XML/distributionlist.php\nAnalyzing lib/Horde/Kolab/Format/XML/event.php\nAnalyzing lib/Horde/Kolab/Format/XML/hprefs.php\nAnalyzing lib/Horde/Kolab/Format/XML/note.php\nAnalyzing lib/Horde/Kolab/Format/XML/task.php\nAnalyzing lib/Horde/Kolab/Format/Date.php\nAnalyzing lib/Horde/Kolab/Format/XML.php\nAnalyzing lib/Horde/Kolab/Format.php\nPackage Horde_Kolab_Format-0.9.0.tgz done\nTag the released code with `pear cvstag package.xml'\n(or set the CVS tag RELEASE_0_9_0 by hand)\n\u003c/pre\u003e\n\u003cp\u003e\nAs most Horde PEAR packages have not yet been marked stable PEAR will still refuse to install the new package:\n\u003c/p\u003e\n\u003cpre\u003e\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc  install Horde_Kolab_Format-0.9.0.tgz \n\nFailed to download horde/Horde_DOM within preferred state \"stable\", latest release is version 0.1.0, stability \"alpha\", use \"channel://pear.horde.org/Horde_DOM-0.1.0\" to install\nFailed to download horde/Horde_NLS within preferred state \"stable\", latest release is version 0.0.2, stability \"alpha\", use \"channel://pear.horde.org/Horde_NLS-0.0.2\" to install\nFailed to download horde/Horde_Util within preferred state \"stable\", latest release is version 0.0.2, stability \"alpha\", use \"channel://pear.horde.org/Horde_Util-0.0.2\" to install\nDid not download optional dependencies: horde/Horde_Prefs, use --alldeps to download automatically\nhorde/Horde_Kolab_Format requires package \"horde/Horde_DOM\" (version \u003e\u003d 0.1.0)\nhorde/Horde_Kolab_Format requires package \"horde/Horde_NLS\"\nhorde/Horde_Kolab_Format requires package \"horde/Horde_Util\"\nhorde/Horde_Kolab_Format can optionally use package \"horde/Horde_Prefs\"\nNo valid packages found\ninstall failed\n\u003c/pre\u003e\n\u003cp\u003e\nThe required packages must be installed manually first:\n\u003c/p\u003e\n\u003cpre\u003e\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc  install channel://pear.horde.org/Horde_DOM-0.1.0\n\ndownloading Horde_DOM-0.1.0.tgz ...\nStarting to download Horde_DOM-0.1.0.tgz (4,256 bytes)\n.....done: 4,256 bytes\ninstall ok: channel://pear.horde.org/Horde_DOM-0.1.0\n\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc  install channel://pear.horde.org/Horde_Util-0.0.2\n\nDid not download optional dependencies: horde/Horde_Browser, use --alldeps to download automatically\nhorde/Horde_Util can optionally use package \"horde/Horde_Browser\"\ndownloading Horde_Util-0.0.2.tgz ...\nStarting to download Horde_Util-0.0.2.tgz (16,603 bytes)\n......done: 16,603 bytes\ninstall ok: channel://pear.horde.org/Horde_Util-0.0.2\n\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc  install channel://pear.horde.org/Horde_NLS-0.0.2\n\ndownloading Horde_NLS-0.0.2.tgz ...\nStarting to download Horde_NLS-0.0.2.tgz (75,779 bytes)\n.................done: 75,779 bytes\ninstall ok: channel://pear.horde.org/Horde_NLS-0.0.2\n\u003c/pre\u003e\n\u003cp\u003e\nThis time installation should suceed:\n\u003c/p\u003e\n\u003cpre\u003e\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc  install Horde_Kolab_Format-0.9.0.tgz \n\nDid not download optional dependencies: horde/Horde_Prefs, use --alldeps to download automatically\nhorde/Horde_Kolab_Format can optionally use package \"horde/Horde_Prefs\"\ninstall ok: channel://pear.horde.org/Horde_Kolab_Format-0.9.0\n\u003c/pre\u003e\n\u003cp\u003e\nAll that is missing now is to tell PEAR that it should provide PHP only with one include directory: the one we just setup. Ensure that you replace \u003ci\u003eUSER\u003c/i\u003e with the name of the current user.\n\u003c/p\u003e\n\u003cpre\u003e\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc config-set php_bin \"`~/pear-test/pear/pear -c ~/pear-test/.pearrc config-get php_bin` -d include_path\u003d/home/USER/pear-test/pear/php\"\n\n\u003c/pre\u003e\n\u003cp\u003e\nAfter installation succeeded the unit tests should be run in order to validate the dependencies. If the tests are based on PHPUnit then this tool will have to be installed first:\n\u003c/p\u003e\n\u003cpre\u003e\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc channel-discover pear.phpunit.de\n\nAdding Channel \"pear.phpunit.de\" succeeded\nDiscovery of channel \"pear.phpunit.de\" succeeded\n\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc install phpunit/PHPUnit\n\u003c/pre\u003e\n\u003cp\u003e\nAnd now we can finally run the last check before releasing the PEAR package:\n\u003c/p\u003e\n\u003cpre\u003e\n# cd ~/pear-test/pear/tests/Horde_Kolab_Format/Horde/Kolab/Format/\n# ~/pear-test/pear/pear -c ~/pear-test/.pearrc run-tests -u \n\u003c/pre\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-1253844302972598053?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/1253844302972598053/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/07/generating-pear-test-environment-for.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/1253844302972598053"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/1253844302972598053"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/07/generating-pear-test-environment-for.html","title":"Generating a PEAR test environment for releasing PEAR packages"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-1455633696304669981"},"published":{"$t":"2008-07-09T15:21:00.004+02:00"},"updated":{"$t":"2008-07-09T15:36:56.238+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"writing"},{"scheme":"http://www.blogger.com/atom/ns#","term":"opensourcepress"},{"scheme":"http://www.blogger.com/atom/ns#","term":"book"}],"title":{"type":"text","$t":"\"Gentoo Linux\" as an e-book"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://www.opensourcepress.de/index.php?26\u0026\u0026tt_products\u003d241\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;\" src\u003d\"https://www.opensourcepress.de/typo3temp/pics/3b9e94653d.png\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\u003cp\u003e\nThe book is now available as an e-book, too. \n\u003c/p\u003e\n\u003cp\u003e\nIn a way I'm still unhappy that it is not available as a free PDF. But on the other side that would be unfair to the amount of work invested by the publisher. It actually helps a technical guy like me to get the message across if there are people knowledgeable about writing helping in the process. I'm at least not that much into code that I am unable to judge the quality difference between what I can write and what I got back from OpenSourcePress.\n\u003c/p\u003e\n\u003cp\u003e\nStill, I retain the hope that it will be as free as the software I write at some point in the future.\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-1455633696304669981?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/1455633696304669981/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/07/gentoo-linux-as-e-book.html#comment-form","title":"5 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/1455633696304669981"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/1455633696304669981"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/07/gentoo-linux-as-e-book.html","title":"\"Gentoo Linux\" as an e-book"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"5"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-6989995755292381474"},"published":{"$t":"2008-07-03T11:53:00.003+02:00"},"updated":{"$t":"2008-07-30T13:54:58.418+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"wiki"},{"scheme":"http://www.blogger.com/atom/ns#","term":"howto"},{"scheme":"http://www.blogger.com/atom/ns#","term":"programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"php"},{"scheme":"http://www.blogger.com/atom/ns#","term":"pear"}],"title":{"type":"text","$t":"Installing PEAR packages from CVS"},"content":{"type":"html","$t":"\u003cp\u003e\nA short note illustrating how to install PEAR packages from CVS:\n\u003c/p\u003e\n\u003cpre\u003e\ncvs -d :pserver:cvsread@cvs.php.net:/repository login\n(PASS: \"phpfi\")\n\ncvs -d :pserver:cvsread@cvs.php.net:/repository checkout pear/PEAR_Command_Packaging\n\npear package package.xml\n\npear install PEAR_Command_Packaging-0.13.tgz\n\u003c/pre\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-6989995755292381474?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/6989995755292381474/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/07/installing-pear-packages-from-cvs.html#comment-form","title":"2 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/6989995755292381474"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/6989995755292381474"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/07/installing-pear-packages-from-cvs.html","title":"Installing PEAR packages from CVS"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"2"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-6258818337276810247"},"published":{"$t":"2008-06-05T08:21:00.001+02:00"},"updated":{"$t":"2008-06-05T08:23:29.088+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"wiki"},{"scheme":"http://www.blogger.com/atom/ns#","term":"note"},{"scheme":"http://www.blogger.com/atom/ns#","term":"programming"},{"scheme":"http://www.blogger.com/atom/ns#","term":"cvs"}],"title":{"type":"text","$t":"Diffing between branches using CVS"},"content":{"type":"html","$t":"\u003cp\u003e\nSince I had to search a little bit to find the correct line of code to get a sane diff between branches when using CVS I better note it down here:\n\u003cpre\u003e\ncvs diff -kk -r BRANCH -r HEAD\n\u003c/pre\u003e\nThe main point was to avoid the keyword substitution here.\n\u003c/P\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-6258818337276810247?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/6258818337276810247/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/06/diffing-between-branches-using-cvs.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/6258818337276810247"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/6258818337276810247"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/06/diffing-between-branches-using-cvs.html","title":"Diffing between branches using CVS"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-2663905943207458824"},"published":{"$t":"2008-06-02T18:27:00.011+02:00"},"updated":{"$t":"2008-06-02T19:11:25.132+02:00"},"title":{"type":"text","$t":"layman-1.2.0 has been released"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://flickr.com/photos/wrobel/235802357/in/set-72157594243333381/\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;\" src\u003d\"http://farm1.static.flickr.com/83/235802357_59ce8e7a10_m_d.jpg\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\n\u003cP\u003e\nFinally another layman release. The list of open bugs accumulated during the past half year was rather small. So there is not much to say about it.\n\u003c/P\u003e\n\u003cP\u003e\nThe most notable change is probably the changed default storage location. It has been switched from \u003cb\u003e/usr/portage/local/layman\u003c/b\u003e to \u003cb\u003e/usr/local/portage/layman\u003c/b\u003e. \u003cb\u003e/usr/portage/local\u003c/b\u003e was an older location for overlays and using \u003cb\u003e/usr/local/portage\u003c/b\u003e is advised nowadays.\n\u003c/p\u003e\n\u003cP\u003e\nThe complete list of resolved bugs:\n\u003cul\u003e\n\u003cli\u003eAdded use flags for pulling in version control systems as a dependency (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d168203\"\u003e#168203\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdded umask handling (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d186819\"\u003e#186819\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eModified storage location and provided empty default make.conf (\u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d219786\"\u003e#219786\u003c/a\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/p\u003e\n\u003cP\u003e\nAnd somebody provided an \u003ca href\u003d\"http://bugs.gentoo.org/show_bug.cgi?id\u003d224273\"\u003eebuild for layman bash completion\u003c/a\u003e. I'm going to take a look at that one soon.\n\u003c/P\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-2663905943207458824?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/2663905943207458824/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/06/layman-120-has-been-released.html#comment-form","title":"5 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2663905943207458824"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2663905943207458824"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/06/layman-120-has-been-released.html","title":"layman-1.2.0 has been released"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"5"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-2948144297857229399"},"published":{"$t":"2008-05-18T07:28:00.006+02:00"},"updated":{"$t":"2008-05-18T10:26:07.822+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"system administration"},{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"masking"},{"scheme":"http://www.blogger.com/atom/ns#","term":"modules"},{"scheme":"http://www.blogger.com/atom/ns#","term":"howto"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab2gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"puppet"},{"scheme":"http://www.blogger.com/atom/ns#","term":"keywords"},{"scheme":"http://www.blogger.com/atom/ns#","term":"use flags"},{"scheme":"http://www.blogger.com/atom/ns#","term":"ruby"},{"scheme":"http://www.blogger.com/atom/ns#","term":"sysadmin"},{"scheme":"http://www.blogger.com/atom/ns#","term":"portage"},{"scheme":"http://www.blogger.com/atom/ns#","term":"pardalys"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab"}],"title":{"type":"text","$t":"Using puppet on Gentoo"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://www.flickr.com/photos/wrobel/2493776447/\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;\" src\u003d\"http://farm4.static.flickr.com/3208/2493776447_6e6f234e00_m_d.jpg\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\u003cp\u003e\n\u003ca href\u003d\"http://puppet.reductivelabs.com/\"\u003ePuppet\u003c/a\u003e is a tool for managing your system configuration. It provides a complete language for expressing and realizing system settings. After some introductory words this post will focus on a Gentoo specific puppet module for managing package installations.\n\u003c/p\u003e\n\u003cp\u003e\nIf you have no clue about puppet you might wish to read the introduction if you are interested in managing the configurations of your system in an efficient way. The discussion about the gentoo specific module will only be of interest to you if you already know the basics of writing puppet modules.\n\u003c/p\u003e\n\u003ch5\u003eIntroduction\u003c/h5\u003e\n\u003cp\u003e\nWhat are the advantages of using puppet rather than editing all files in \u003cem\u003e/etc\u003c/em\u003e by hand?\n\u003cul\u003e\n\u003cli\u003eUsing puppet means you create a repository of your configuration knowledge\u003c/li\u003e\n\u003cli\u003eYou can replicate all of or part of the settings to another host\u003c/li\u003e\n\u003cli\u003eIn addition you can version control and share your knowledge in a repository\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/p\u003e\n\u003cp\u003e\nMind you: If you are only managing a single host you might not find much value in the items listed above. Indeed puppet only becomes useful if you really wish to apply a complex configuration over many hosts.\n\u003c/p\u003e\n\u003cp\u003e\nBut of course this is true for any groupware server and in particular the \u003ca href\u003d\"http://www.kolab.org\"\u003eKolab Server\u003c/a\u003e. Porting \u003ca href\u003d\"http://www.gentoo.org/proj/en/kolab\"\u003eKolab to Gentoo\u003c/a\u003e is a project I have been working on for more than three years now.\n\u003c/p\u003e\n\u003cp\u003e\nThe initial version (Kolab2/Gentoo-2.1) failed to make me really happy. One central reason for that has been the configuration tool provided by Kolab. While it works fine for the original version of the Kolab Server it simply fails to cope with the amount of options users have on Gentoo.\n\u003c/p\u003e\n\u003cp\u003e\nI always wanted to \u003ca href\u003d\"http://log.onthebrink.de/2007/12/polymeraze-time-for-merging.html\"\u003emerge my own crappy tool for configuration management\u003c/a\u003e with the code from the Kolab Server. But a kind anonymous voice answered to the blog post linked in the previous setence, telling me that this is a stupid idea and I should use puppet. He was right.\n\u003c/p\u003e\n\u003cp\u003e\nSo I'm establishing the \u003ca href\u003d\"http://github.com/wrobel/pardalys/tree/master\"\u003eKolab2/Gentoo groupware server configuration\u003c/a\u003e based on puppet at the moment. As this includes generating some Gentoo specific modules for puppet it is now time to stop the introductory words and get down to some puppet code.\n\u003c/p\u003e\n\u003ch5\u003eInstalling packages for generic distributions\u003c/h5\u003e\n\u003cp\u003e\nIn order to tell puppet that you wish to have a single package installed you would use a construct like this:\n\u003c/p\u003e\n\u003cpre\u003e\npackage { openldap:\n  ensure   \u003d\u003e 'latest',\n}\n\u003c/pre\u003e\n\u003cp\u003e\nThis works fine on most distributions but on Gentoo you might ask about support for use flags, keywords and masking.\n\u003c/p\u003e\n\u003ch5\u003eInstalling packages on Gentoo\u003c/h5\u003e\n\u003cp\u003e\nMy solution is \u003ca href\u003d\"http://github.com/wrobel/pardalys/tree/master/pardalys/modules/os_gentoo\"\u003ethe puppet module  \u003cspan style\u003d\"font-weight:bold;\"\u003eos_gentoo\u003c/span\u003e\u003c/a\u003e.\n\u003c/p\u003e\n\u003cp\u003e\nThis module is mainly concerned with management of the files/directories you find at \u003cem\u003e/etc/portage/package.*\u003c/em\u003e in your Gentoo system. In order for puppet to manage these paths it makes sense to convert these into directories.\n\u003c/p\u003e\n\u003cp\u003e\nThe module provides four central parts:\n\u003col\u003e\n\u003cli\u003eBackup of the original contents of \u003cem\u003e/etc/portage/package.*\u003c/em\u003e if these were files.\u003c/li\u003e\n\u003cli\u003eConverting the paths into directories.\u003c/li\u003e\n\u003cli\u003eRestoring the original file contents as \u003cem\u003e/etc/portage/package.*/package.*.original\u003c/em\u003e.\u003c/li\u003e\n\u003cli\u003eProviding functions to easily manage use flags, keywords and masking for other packages.\u003c/li\u003e\n\u003c/ol\u003e\n\u003c/p\u003e\n\u003ch5\u003eBackup of \u003cem\u003e/etc/portage/package.*\u003c/em\u003e\u003c/h5\u003e\n\u003cp\u003e\nIf the user managed \u003cem\u003e/etc/portage/package.*\u003c/em\u003e as files we need to grab the content and store it. Puppet provides the \u003cb\u003efile()\u003c/b\u003e function for that but that function will fail if it sees a directory. So we need to determine if the path already is a directory. We need to write some ruby code at this point and create a new \u003cb\u003efact\u003c/b\u003e:\n\u003c/p\u003e\n\u003cpre\u003e\n# Determine if these are regular files\n \npackage_use \u003d '/etc/portage/package.use'\n \nFacter.add('use_isfile') do\n  setcode do\n    if FileTest.file?(package_use)\n      true\n    else\n      false\n    end\n  end\nend\n\n...\n\u003c/pre\u003e\n\u003cp\u003e\n\u003cb\u003eFacts\u003c/b\u003e are little pieces of system information that puppet determines automatically using the tool \u003cem\u003edev-ruby/facter\u003c/em\u003e. The code given above checks if \u003cem\u003e/etc/portage/package.use\u003c/em\u003e is a file and places that information in the variable \u003cb\u003euse_isfile\u003c/b\u003e. We will shortly meet that variable again.\n\u003c/p\u003e\n\u003cp\u003e\nThis \u003cb\u003efact\u003c/b\u003e is something we \u003ca href\u003d\"http://github.com/wrobel/pardalys/tree/master/pardalys/modules/os_gentoo/plugins/facter/portage_dirs.rb\"\u003estore as a plugin at \u003cem\u003eos_gentoo/plugins/facter/portage_dirs.rb\u003c/em\u003e within the module\u003c/a\u003e.\n\u003c/p\u003e\n\u003cp\u003e\nThe code actually performing the backup is packaged in a \u003ca href\u003d\"http://github.com/wrobel/pardalys/tree/master/pardalys/modules/os_gentoo/manifests/init.pp\"\u003epuppet class\u003c/a\u003e:\n\u003c/p\u003e\n\u003cpre\u003e\n# Class gentoo::etc::portage::backup\n#\n# Stores user settings in the /etc/portage/package.* files.\n#\n# @author Gunnar Wrobel \u003cp@rdus.de\u003e\n# @version 1.0\n# @package os_gentoo\n#\nclass gentoo::etc::portage::backup\n{\n  if $use_isfile {\n    $use \u003d file('/etc/portage/package.use')\n  } else {\n    $use \u003d false\n  }\n  if $keywords_isfile {\n    $keywords \u003d file('/etc/portage/package.keywords')\n  } else {\n    $keywords \u003d false\n  }\n  if $mask_isfile {\n    $mask \u003d file('/etc/portage/package.mask')\n  } else {\n    $mask \u003d false\n  }\n  if $unmask_isfile {\n    $unmask \u003d file('/etc/portage/package.unmask')\n  } else {\n    $unmask \u003d false\n  }\n}\n\u003c/pre\u003e\n\u003cp\u003e\nHere we meet the variables again. In case \u003cb\u003e$use_isfile\u003c/b\u003e is \u003cb\u003etrue\u003c/b\u003e the file contents will be parsed into \u003cb\u003e$use\u003c/b\u003e. Otherwise the variable is set to \u003cb\u003efalse\u003c/b\u003e. We return to our backup two sections further down.\n\u003c/p\u003e\n\u003ch5\u003eConverting \u003cem\u003e/etc/portage/package.*\u003c/em\u003e into directories\u003c/h5\u003e\n\u003cp\u003e\nNow that we have saved the file contents we can safely convert the files into directories. Puppet would not destroy the original files but instead store them in an archive. But recovering them from there would be cumbersome for the user. Automating the conversion seems to be a better solution.\n\u003c/p\u003e\n\u003cp\u003e\nRequiring a path to be a directory is easy in puppet:\n\u003c/p\u003e\n\u003cpre\u003e\n# Class gentoo::etc::portage\n#\n# Ensure that all /etc/portage/package.* locations are actually\n# handled as directories. This allows to easily manage the package\n# specific settings for Gentoo.\n#\n# @author Gunnar Wrobel \u003cp@rdus.de\u003e\n# @version 1.0\n# @package os_gentoo\n#\nclass gentoo::etc::portage\n{\n  # Check that we are able to handle /etc/portage/package.* as\n  # directories\n \n  file { 'package.use::directory':\n    path \u003d\u003e '/etc/portage/package.use',\n    ensure \u003d\u003e 'directory',\n    tag \u003d\u003e 'buildhost'\n  }\n \n  file { 'package.keywords::directory':\n    path \u003d\u003e '/etc/portage/package.keywords',\n    ensure \u003d\u003e 'directory',\n    tag \u003d\u003e 'buildhost'\n  }\n \n  file { 'package.mask::directory':\n    path \u003d\u003e '/etc/portage/package.mask',\n    ensure \u003d\u003e 'directory',\n    tag \u003d\u003e 'buildhost'\n  }\n \n  file { 'package.unmask::directory':\n    path \u003d\u003e '/etc/portage/package.unmask',\n    ensure \u003d\u003e 'directory',\n    tag \u003d\u003e 'buildhost'\n  }\n}\n\u003c/pre\u003e\n\u003cp\u003e\nAgain the four actions have been packaged into a single puppet class. The different actions all have a \u003cb\u003ebuildhost\u003c/b\u003e tag. This is only required if you really use a build host structure with your servers and plays no role otherwise.\n\u003c/p\u003e\n\u003ch5\u003eRestoring the original \u003cem\u003e/etc/portage/package.*\u003c/em\u003e\u003c/h5\u003e\n\u003cp\u003e\nNow that puppet converted \u003cem\u003e/etc/portage/package.*\u003c/em\u003e to directories we lost the original file contents. Another class will rescue them:\n\u003c/p\u003e\n\u003cpre\u003e\n# Class gentoo::etc::portage::restore\n#\n# Restores user settings from the /etc/portage/package.* files.\n#\n# @author Gunnar Wrobel \u003cp@rdus.de\u003e\n# @version 1.0\n# @package os_gentoo\n#\nclass gentoo::etc::portage::restore\n{\n  if $gentoo::etc::portage::backup::use {\n    file { '/etc/portage/package.use/package.use.original':\n      content \u003d\u003e $gentoo::etc::portage::backup::use,\n      tag \u003d\u003e 'buildhost'\n    }\n  }\n  if $gentoo::etc::portage::backup::keywords {\n    file { '/etc/portage/package.keywords/package.keywords.original':\n      content \u003d\u003e $gentoo::etc::portage::backup::keywords,\n      tag \u003d\u003e 'buildhost'\n    }\n  }\n  if $gentoo::etc::portage::backup::mask {\n    file { '/etc/portage/package.mask/package.mask.original':\n      content \u003d\u003e $gentoo::etc::portage::backup::mask,\n      tag \u003d\u003e 'buildhost'\n    }\n  }\n  if $gentoo::etc::portage::backup::unmask {\n    file { '/etc/portage/package.unmask/package.unmask.original':\n      content \u003d\u003e $gentoo::etc::portage::backup::unmask,\n      tag \u003d\u003e 'buildhost'\n    }\n  }\n}\n\u003c/pre\u003e\n\u003cp\u003e\nFor each of the four paths the original backup variable (e.g. \u003cb\u003e$gentoo::etc::portage::backup::use\u003c/b\u003e) is checked for content. We need to use the full class path here to access the variable content. If it contains content  it will be written to the corresponding new path (e.g. \u003cem\u003e/etc/portage/package.use/package.use.original\u003c/em\u003e).\n\u003c/p\u003e\n\u003ch5\u003eHandling \u003cem\u003e/etc/portage/package.*\u003c/em\u003e with puppet\u003c/h5\u003e\n\u003cp\u003e\nNow the management of \u003cem\u003e/etc/portage/package.*\u003c/em\u003e becomes easy as puppet can place new files for every package or set of packages that requires special use flags, keywords or masking.\n\u003c/p\u003e\n\u003cp\u003e\nThis is an example for the use flags:\n\u003c/p\u003e\n\u003cpre\u003e\n# Function gentoo_use_flags\n#\n# Specify use flags for a package.\n#\n# @param context A unique context for the package\n# @param package The package atom\n# @param use The use flags to apply\n#\ndefine gentoo_use_flags ($context \u003d '',\n                         $package \u003d '',\n                         $use \u003d '')\n{\n \n  file { \"/etc/portage/package.use/${context}\":\n    content \u003d\u003e \"$package $use\",\n    require \u003d\u003e File['package.use::directory'],\n    tag \u003d\u003e 'buildhost'\n  }\n \n}\n\u003c/pre\u003e\n\u003cp\u003e\nThe function takes a context which must be unique and will be used as path component. In addition the package atom needs to be specified including the use flags to be set. Puppet will then create a new file within \u003cem\u003e/etc/portage/package.use\u003c/em\u003e using the \u003cb\u003efile\u003c/b\u003e type (This is something different than the \u003cb\u003efile\u003c/b\u003e function mentioned above).\n\u003c/p\u003e\n\u003cp\u003e\nThe only new thing here is the \u003cb\u003erequire\u003c/b\u003e argument that specifies that puppet must ensure that the file operation with the name \u003cb\u003epackage.use::directory\u003c/b\u003e has been executed before creating this new file. In other words we ensure that \u003cem\u003e/etc/portage/package.use\u003c/em\u003e is indeed a directory.\n\u003cp\u003e\n\u003ch5\u003eManaging package installations on Gentoo\u003c/h5\u003e\n\u003cp\u003e\nTaking \u003ca href\u003d\"http://github.com/wrobel/pardalys/tree/master/pardalys/modules/os_gentoo/manifests/init.pp\"\u003eall these definitions\u003c/a\u003e together we can now express a package installation in the following way:\n\u003c/p\u003e\n\u003cpre\u003e\n# Package installation\n  case $operatingsystem {\n    gentoo:\n    {\n      gentoo_unmask { openldap:\n        context \u003d\u003e 'service_openldap',\n        package \u003d\u003e '\u003dnet-nds/openldap-2.4.7',\n        tag \u003d\u003e 'buildhost'\n      }\n      gentoo_keywords { openldap:\n        context \u003d\u003e 'service_openldap',\n        package \u003d\u003e '\u003dnet-nds/openldap-2.4.7',\n        keywords \u003d\u003e \"~$keyword\",\n        tag \u003d\u003e 'buildhost'\n      }\n      gentoo_use_flags { openldap:\n        context \u003d\u003e 'service_openldap',\n        package \u003d\u003e 'net-nds/openldap',\n        use \u003d\u003e 'berkdb crypt overlays perl ssl syslog -sasl',\n        tag \u003d\u003e 'buildhost'\n      }\n      package { openldap:\n        category \u003d\u003e 'net-nds',\n        ensure \u003d\u003e 'latest',\n        require \u003d\u003e [ Gentoo_unmask['openldap'],\n                       Gentoo_keywords['openldap'],\n                       Gentoo_use_flags['openldap'] ],\n        tag \u003d\u003e 'buildhost'\n      }\n    }\n    default:\n    {\n      package { openldap:\n        ensure \u003d\u003e 'installed',\n      }\n    }\n  }\n}\n\u003c/pre\u003e\n\u003cp\u003e\nThe example installs the experimental \u003cb\u003enet-nds/openldap-2.4.7\u003c/b\u003e package. We differentiate between Gentoo and other distributions using the \u003cb\u003e$operatingsystem\u003c/b\u003e variable automatically provided by puppet.\n\u003c/p\u003e\n\u003cp\u003e\nOf course the Gentoo installation looks much more complex than the standard installation on other systems but we have a lot more flexibility on Gentoo. And the idea of the module is to allow us to use this flexibility within puppet.\n\u003c/p\u003e\n\u003cp\u003e\nThe first three sections (\u003cb\u003egentoo_unmask\u003c/b\u003e,\u003cb\u003egentoo_keywords\u003c/b\u003e, and \u003cb\u003egentoo_use_flags\u003c/b\u003e) handle the settings in \u003cem\u003e/etc/portage/package.*\u003c/em\u003e and the actual installation happens in the fourth section. We use the standard \u003cb\u003epackage\u003c/b\u003e type here but require that all the settings in \u003cem\u003e/etc/portage/package.*\u003c/em\u003e have been executed before puppet runs \u003cb\u003eemerge\u003c/b\u003e\n\u003c/p\u003e\n\u003cp\u003e\nA final note on the variable \u003cb\u003e$keyword\u003c/b\u003e that is being used in the section above. This is another \u003ca href\u003d\"http://github.com/wrobel/pardalys/tree/master/pardalys/modules/os_gentoo/plugins/facter/keyword.rb\"\u003e\u003cb\u003efact\u003c/b\u003e \u003c/a\u003e that prevents us from specifying keywords like \u003cb\u003e~x86\u003c/b\u003e while we actually want \u003cb\u003e~amd64\u003c/b\u003e. It simply reads \u003cb\u003eACCEPT_KEYWORDS\u003c/b\u003e and assumes that the user has the stable keyword selected there. This probably still needs fixing.\n\u003c/p\u003e\n\u003ch5\u003eConclusion\u003c/h5\u003e\n\u003cp\u003e\nIt is not too difficult to map the full power of package installations on Gentoo into the puppet way of installing packages. I'm pretty certain that some of the methods I implemented in \u003cb\u003eos_gentoo\u003c/b\u003e are still bound to evolve and do not yet represent the best way of handling installations on Gentoo. The module does for example not solve any of the issues mentioned on the \u003ca href\u003d\"http://reductivelabs.com/trac/puppet/wiki/PuppetGentoo\"\u003eGentoo page in the puppet wiki\u003c/a\u003e. So there is still work to be done.\n\u003c/p\u003e\n\u003cp\u003e\nBut for now I'm happy to have the central aspects of use flags, keywords and masking available within puppet.\n\u003c/p\u003e\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-2948144297857229399?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/2948144297857229399/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/05/using-puppet-on-gentoo.html#comment-form","title":"5 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2948144297857229399"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2948144297857229399"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/05/using-puppet-on-gentoo.html","title":"Using puppet on Gentoo"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"5"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-1189031877663654589"},"published":{"$t":"2008-05-15T11:14:00.003+02:00"},"updated":{"$t":"2008-05-15T12:17:48.777+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"ruby"},{"scheme":"http://www.blogger.com/atom/ns#","term":"system administration"},{"scheme":"http://www.blogger.com/atom/ns#","term":"unit testing"},{"scheme":"http://www.blogger.com/atom/ns#","term":"configuration"},{"scheme":"http://www.blogger.com/atom/ns#","term":"puppet"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab2gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"ldap"},{"scheme":"http://www.blogger.com/atom/ns#","term":"patch"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab"}],"title":{"type":"text","$t":"A first positive experience with ruby: Patching puppet"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://www.flickr.com/photos/wrobel/2493776447/\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;\" src\u003d\"http://farm4.static.flickr.com/3208/2493776447_6e6f234e00_m_d.jpg\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\u003cp\u003e\nSo far I didn't have much experience with ruby. The few lines of code I've written in that language reminded me too much of perl. And I'm not really a fan of the perl syntax. But today ruby managed to convince me in the area of unit testing.\n\u003c/p\u003e\n\u003ch5\u003eThe problem\u003c/h5\u003e\n\u003cp\u003e\nI'm bound to stick to ruby as I decided that ruby-based \u003ca href\u003d\"http://reductivelabs.com/projects/puppet/\"\u003epuppet\u003c/a\u003e will provide a central element of the next \u003ca href\u003d\"http://www.gentoo.org/proj/en/kolab\"\u003eKolab2/Gentoo\u003c/a\u003e version. While it provides some nice LDAP integration features these are not quite sufficient for Kolab. Puppet can grab some host parameters from LDAP and integrate these into the host configuration. The problem for Kolab2/Gentoo is the limitation to \u003cspan style\u003d\"font-weight:bold;\"\u003esome\u003c/span\u003e LDAP parameters. Actually these have to be real LDAP attributes that have been defined in a schema. \n\u003c/p\u003e\n\u003cp\u003e\nAs I have already \u003ca href\u003d\"http://kolab.org/pipermail/kolab-devel/2008-April/008934.html\"\u003eargued on the Kolab mailing list\u003c/a\u003e it does not make much sense to define attributes in a schema if you want to use such parameters for configuration of a large set of possible applications (postfic, openldap, cyrus, ...). In this case it makes more sense to use the approach also used by the Horde LDAP schema: specifying a single attribute that uses a string value to specify parameters with arbitrary names. E.g. ldapAttribute:\"one\u003dtwo\" in order to define parameter \"one\". Only the \"ldapAttribute\" will have to be defined in a schema while the code using this parameter handles converting the string into the final paramter.\n\u003c/p\u003e\n\u003cp\u003e\nI wrote a \u003ca href\u003d\"http://reductivelabs.com/trac/puppet/ticket/1179\"\u003eshort patch\u003c/a\u003e for puppet to implement this. After a short while I got a positive response but the patch was considered insufficient as it lacked any tests.\n\u003c/p\u003e\n\u003ch5\u003eA simple solution\u003c/h5\u003e\n\u003cp\u003e\nI admit I was slightly worried because learning to handle just another test framework in a language I have nearly no clue about was something I did not fancy at all. And that was the first really positive surprise about ruby: Using the test framework and successfully writing unit tests in it was a matter of half an hour. Even though it required mocking the LDAP connection. \n\u003c/p\u003e\n\u003cp\u003e\nThe testing allowed me to reconsider my expectations concerning the patch and to fix a problem of my initial version. I submitted the new version shortly afterwards and hope it will find its way into the repository now. \n\u003c/p\u003e\n\u003cp\u003e\nWell done, ruby. Let me see what else you can do in order to convince me that you are indeed a good thing...\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-1189031877663654589?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/1189031877663654589/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/05/first-positive-experience-with-ruby.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/1189031877663654589"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/1189031877663654589"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/05/first-positive-experience-with-ruby.html","title":"A first positive experience with ruby: Patching puppet"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-2133762188928856038"},"published":{"$t":"2008-05-14T22:03:00.005+02:00"},"updated":{"$t":"2008-05-15T11:16:45.661+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"puppet"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab2gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"pardalys"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab2gentoonews"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab"}],"title":{"type":"text","$t":"app-admin/pardalys was created in the Kolab overlay"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://flickr.com/photos/wrobel/264813687/\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;\" src\u003d\"http://farm1.static.flickr.com/103/264813687_5ebd3b95b7_m_d.jpg\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\n\u003cP\u003e\nIf you look at the current ebuild you might wonder what the fuss might be about... It is a pretty empty package.\n\u003c/p\u003e\n\u003cP\u003e\nBut the \u003ca href\u003d\"http://pardalys.sourceforge.net/\"\u003ep@rdalys project\u003c/a\u003e will form the core for Kolab2/Gentoo-2.2. It will certainly replace net-mail/kolabd and might include some other packages, too.\n\u003c/p\u003e\n\u003cP\u003e\nThe idea is to allow you to install Kolab2/Gentoo-2.2 with two simple steps:\n\u003c/p\u003e\n\u003cPre\u003e\nemerge app-admin/pardalys\npardalys\n\u003c/pre\u003e\n\u003cP\u003e\nOf course there is still a certain way to go until it will actually work that way. And this easy setup is actually just meant as a nice side effect and is not the main point of starting the project. I'll start explaining this package in greater detail once I push more code into it.\n\u003c/p\u003e\n\u003cP\u003e\nFor now the link to \u003ca href\u003d\"http://pardalys.sourceforge.net/\"\u003ethe project page\u003c/a\u003e will be all I can provide.\n\u003c/p\u003e\n\u003cP\u003e\nCurrently it might not be clear what the package will actually be about but if people wish to contribute to the project at a later time point you should go visit the \u003ca href\u003d\"http://github.com/wrobel/pardalys\"\u003egit repository on GitHub\u003c/a\u003e. This git repository should serve as a scratch repository used for easy sharing and patching of the code. \u003ca href\u003d\"http://pardalys.svn.sourceforge.net/viewvc/pardalys/\"\u003eThe reference repository\u003c/a\u003e on the other hand will be kept in subversion on SourceForge and will be used for packaging. \n\u003c/p\u003e\n\u003cP\u003e\nMore on the whole story once there is more code.\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-2133762188928856038?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/2133762188928856038/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/05/app-adminpardalys-was-created-in-kolab.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2133762188928856038"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2133762188928856038"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/05/app-adminpardalys-was-created-in-kolab.html","title":"app-admin/pardalys was created in the Kolab overlay"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-6790041445241786513"},"published":{"$t":"2008-04-30T10:06:00.008+02:00"},"updated":{"$t":"2008-07-30T13:56:04.239+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"linux"},{"scheme":"http://www.blogger.com/atom/ns#","term":"wiki"},{"scheme":"http://www.blogger.com/atom/ns#","term":"howto"},{"scheme":"http://www.blogger.com/atom/ns#","term":"vserver"},{"scheme":"http://www.blogger.com/atom/ns#","term":"virtual server"}],"title":{"type":"text","$t":"Gentoo on a 1\u00261 vServer"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://flickr.com/photos/wrobel/229904945/\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;\" src\u003d\"http://farm1.static.flickr.com/69/229904945_2b04aadcfe_m_d.jpg\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\u003ch5\u003eLast update: 2008/04/30\u003c/h5\u003e                                                                                                                                                                  \n                                                                                                                                                                             \u003cp\u003e\nCompanies like \u003ca href\u003d\"http://www.1und1.de\"\u003e1and1\u003c/a\u003e and \u003ca href\u003d\"http://strato.de/\"\u003eStrato\u003c/a\u003e offer virtual                               \nservers based on the \u003ca href\u003d\"http://www.swsoft.com\"\u003eVirtuozzo\u003c/a\u003e virtualization technology. While these                                                                          \nmachines are quite cheap and provide a full linux work environment                                                                                                                 \nthey run \u003ca href\u003d\"http://www.suse.de\"\u003eSUSE\u003c/a\u003e by default. Not my favorite linux distribution...\n\u003c/p\u003e                                                                               \n\u003cp\u003e\nI was pretty certain that I could also switch the server to \u003ca href\u003d\"http://www.gentoo.org\"\u003eGentoo\u003c/a\u003e.                                                                         \nBut when I asked the customer support they told me that they have no                                                                                                               \none running Gentoo on any of these machines. And that they would have                                                                                                              \nno clue if that could work.\n\u003c/p\u003e                                                                                                                                                    \n                                                                                                                                                                                  \u003cp\u003e\nSo I tried and it is definitely possible. Just in case there are                                                                                                                \nothers who would like to have a Gentoo vserver on a Virtuozzo system                                                                                                               \nthis HowTo will provide some instructions on how to achieve that.\n\u003c/p\u003e                                                                                                              \n                                                                                                                                                                                  \u003cp\u003e\nDo I need to give the usual warnings? You'll completely wipe the old                                                                                                            \nsystem and if something does not work, you will have to reinitialize                                                                                                               \nthe server. If you don't want to take that risk, \u003cstrong\u003edo not continue\u003c/strong\u003e.\n\u003c/p\u003e\n\n\u003ch4\u003eCleaning up\u003c/h4\u003e                                                                                                                                                                  \n                                                                                                                                                                                \u003cp\u003e\nFirst you will have to log into your \u0026quot;Virtuozzo Power Panel\u0026quot; in order                                                                                   \nto switch the system into repair mode. The original system now                                                                                                                     \nresides in \u003cem\u003e/repair\u003c/em\u003e and you work in a safety mode.\n\u003c/p\u003e                                                                                                                     \n                                                                                                                                                                                  \u003cp\u003e\nNow log into your system via \u003cem\u003essh\u003c/em\u003e and make a backup copy the old                                                                                                        \n\u003cem\u003e/etc/mtab\u003c/em\u003e (this helps to have a working \u003cem\u003edf\u003c/em\u003e command at a later time                                                                                               \npoint, reported by Gian):\n\u003c/p\u003e                                                                                                                                                      \n                                                                                                                                                                                   \n\u003cpre\u003e     \ncp /repair/etc/mtab /root/mtab.old                                                                                                                                                 \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                  \n\u003cp\u003e\nNow remove the old suse system:\n\u003c/p\u003e                                                                                                                                             \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \ncd /repair                                                                                                                                                                         \nrm -rf *                                                                                                                                                                           \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003e\nIn case this results in a failure your repair directory might be                                                                                                                \nmounted as read-only (reported by Ulrich):\n\u003c/p\u003e                                                                                                                                     \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \nmount -o remount,rw /repair                                                                                                                                                        \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n                                                                                                                                                                                   \n\u003ch4\u003eInstall the basic Gentoo system\u003c/h4\u003e                                                                                                                                               \n                                                                                                                                                                                  \n\u003cp\u003e\nNow (still in \u003cem\u003e/repair\u003c/em\u003e) start to download the stage and a portage                                                                                         \nsnapshot from your nearest \u003ca href\u003d\"http://www.gentoo.org/main/en/mirrors.xml\"\u003emirror\u003c/a\u003e:\n\u003c/p\u003e                                                                                     \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \nwget ftp://linux.rz.ruhr-uni-bochum.de/gentoo-mirror/experimental/x86/vserver/stage3-i686-20060317.tar.bz2\nwget ftp://linux.rz.ruhr-uni-bochum.de/gentoo-mirror/snapshots/portage-latest.tar.bz2\ntar xvjpf stage3-*.tar.bz2                                                                                                                                                         \ntar xvjf portage-*.tar.bz2 -C /repair/usr                                                                                                                                          \nrm stage3-*.tar.bz2 portage-*.tar.bz2                                                                                                                                              \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003eThe basic tools are now in place. Next we need the original network                                                                                                             \ninformation:\u003c/p\u003e                                                                                                                                                                   \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \ncp /etc/resolv.conf /repair/etc/                                                                                                                                                   \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003eIn addition copy the original mtab back into place:\u003c/p\u003e                                                                                                                         \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \ncp /root/mtab.old /repair/etc/mtab\n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003eAnd now we can \u003cem\u003echroot\u003c/em\u003e into the new Gentoo environment:\u003c/p\u003e                                                                                                             \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \nmount -t proc proc /repair/proc/\nmount -o bind /dev /repair/dev\nchroot /repair                                                                                                                                                                     \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003eTime to fix the timezone information and sync the portage tree:\u003c/p\u003e                                                                                                             \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \nenv-update                                                                                                                                                                         \nsource /etc/profile                                                                                                                                                                \nexport PS1\u003d\u0026quot;(chroot) $PS1\u0026quot;                                                                                                                                               \ncp /usr/share/zoneinfo/Europe/Berlin /etc/localtime                                                                                                                                \nemerge --sync                                                                                                                                                                      \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003eSet a root password:\u003c/p\u003e                                                                                                                                                        \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \npasswd                                                                                                                                                                             \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003e\n\u003cstrong\u003ePlease note that this password becomes your new master password for                                                                                                     \nthe server!\u003c/strong\u003e\n\u003c/p\u003e                                                                                                                                                           \n\n\u003ch4\u003eOptional: Configure a build host\u003c/h4\u003e                                                                                                                                          \n\n\u003cp\u003e\nThe vServers are not the most powerful machines and they definitely benefit from pulling packages from a central build host. If you have such a machine you should complete your \u003cspan style\u003d\"font-weight:bold;\"\u003e/etc/make.conf\u003c/span\u003e with the following variables:\n\u003c/p\u003e\n\n\u003cpre\u003e\nPORTAGE_BINHOST\u003d\"http://buildhost.example.com/packages/i686/All\"\nSYNC\u003d\"rsync://buildhost.example.com/portage\"\nEMERGE_DEFAULT_OPTS\u003d\" --usepkg --getbinpkg --getbinpkgonly\"\n\u003c/pre\u003e\n                                                                                                                                                                                 \u003ch4\u003eMove to baselayout2\u003c/h4\u003e                                                                                                                                          \n\n\u003cp\u003e\nThe old \u003cspan style\u003d\"font-weight:bold;\"\u003ebaselayout-vserver\u003c/span\u003e probably still works but the newer baselayout2 also copes for vServers and I recommend to use it.\n\u003c/p\u003e\n\n\u003cp\u003e\nFirst we should ensure that we link to the current Gentoo profile:\n\u003c/p\u003e\n\n\u003cpre\u003e                                                                                                                                                              \nrm /etc/make.profile\nln -s ../usr/portage/profiles/default-linux/x86/2007.0 /etc/make.profile\n\u003c/pre\u003e                                                                                                                                                                             \n\n\u003cp\u003e\nNow we unmask the newer baselayout and the OpenRC package:\n\u003c/p\u003e\n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \necho \"sys-apps/baselayout ~x86\" \u003e\u003e /etc/portage/package.keywords\necho \"sys-apps/openrc ~x86\" \u003e\u003e /etc/portage/package.keywords\n\u003c/pre\u003e                                                                                                                                                                             \n\n\u003cp\u003eIn case the kernel of the system underlying your virtual server is                                                                                                              \nsomewhat older, you should also ensure that you do not use the newer                                                                                                                 \nglibc-2.4 and that \u003cspan style\u003d\"font-weight:bold;\"\u003enptl\u003c/span\u003e is disabled:\u003c/p\u003e                                                                                                                                              \n\n\u003cpre\u003e                                                                                                                                                              \necho \"\u003esys-libs/glibc-2.5-r4\" \u003e\u003e /etc/portage/package.mask\necho \"sys-libs/glibc -nptl -nptlonly\" \u003e\u003e /etc/portage/package.use\n\u003c/pre\u003e                                                                                                                                                                             \n\nTime to update the system:\n\n\u003cpre\u003e\nemerge -uND world\n\u003c/pre\u003e\n                                                                                                                                                                                   \n\u003ch4\u003eConfigure Gentoo as a virtual server\u003c/h4\u003e                                                                                                                                          \n                                                                                                                                                                                   \n\u003cp\u003e\nNow you can configure the network:\n\u003c/p\u003e                                                                                                                            \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \nemerge iproute2                                                                                                                                                                    \ncd /etc/init.d                                                                                                                                                                     \nrm net.eth0                                                                                                                                                                        \nln -s net.lo net.venet0                                                                                                                                                            \nrc-update add net.venet0 default                                                                                                                                                   \nrc-update add net.lo default                                                                                                                                                       \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003e\nYou will need to provide a static definition of your network                                                                                                                    \nparameters in \u003cem\u003e/etc/conf.d/net\u003c/em\u003e. In order to determine the necessary                                                                                                        \nparameters, follow the steps below:\n\u003c/p\u003e                                                                                                                                            \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \n# ip addr                                                                                                                                                                          \n326: lo: \u0026lt;LOOPBACK,UP\u0026gt; mtu 16436 qdisc noqueue                                                                                                                               \n    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00                                                                                                                          \n    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo                                                                                                                             \n327: venet0: \u0026lt;BROADCAST,POINTOPOINT,NOARP,UP\u0026gt; mtu 1500 qdisc noqueue                                                                                                         \n    link/void                                                                                                                                                                      \n    inet 127.0.0.1/32 scope host venet0                                                                                                                                            \n    inet 87.123.45.123/32 scope global venet0:0                                                                                                                                    \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003e\nFrom the output note the ip of the \u003cem\u003evenet0\u003c/em\u003e adapter. Here it is \u003cstrong\u003e87.123.45.123\u003c/strong\u003e.\n\u003c/p\u003e                                                                      \n                                                                                                                                                                                   \n\u003cp\u003e\nNow you need the routing information:\n\u003c/p\u003e                                                                                                                                       \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \n# ip route                                                                                                                                                                         \n191.255.255.0/24 dev venet0  scope link                                                                                                                                            \n127.0.0.0/8 dev lo  scope link                                                                                                                                                     \ndefault via 191.255.255.1 dev venet0                                                                                                                                               \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003e\nThe necessary parameters are the first netmask and the default gateway                                                                                                          \n(\u003cstrong\u003e191.255.255.0/24\u003c/strong\u003e and \u003cstrong\u003e191.255.255.1\u003c/strong\u003e).\n\u003c/p\u003e                                                                                                        \n                                                                                                                                                                                   \n\u003cp\u003e\nAdapt the following settings to your specific parameters and echo it                                                                                                            \ninto your network configuration file:\n\u003c/p\u003e                                                                                                                                          \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \necho '                                                                                                                                                                             \nmodules\u003d\"iproute2\"\nmodules\u003d\"!ifconfig\"\n\nconfig_venet0\u003d\"87.123.45.123 netmask 255.255.255.0 broadcast 0.0.0.0\"\n\nroutes_venet0\u003d\"191.255.255.0/24 scope link\n               default via 191.255.255.1\"\n\n' \u0026gt;\u0026gt; /etc/conf.d/net                                                                                                                                                         \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n\u003cp\u003e\nI am not an expert on the network settings and the proper routing on a                                                                                                          \nvserver but these settings did work for me. Please send me a mail if                                                                                                               \nyou have suggestions on how to improve the configuration.\n\u003c/p\u003e                                                                                                                      \n                                                                                                                                                                                   \n\u003cp\u003e\n\u003cspan style\u003d\"text-decoration: underline;\"\u003eAnother comment by Ulrich:\u003c/span\u003e\n\u003c/p\u003e                                                                                                 \n                                                                                                                                                                                   \n\u003cblockquote\u003e                                                                                                                                                                       \nI did put spaces between the config_venet0, routes_venet0 and the                                                                                                \nequal sign. It's not allowed to do so. Adding this as a \u003cstrong\u003edon't\u003c/strong\u003e to your                                                                                             \nexplanation might save an hour or two to some guys out there.                                                                                                               \n\u003c/blockquote\u003e                                                                                  \n\n                                                                                                                                                                                   \n\u003cp\u003e\nFinally you need to add the ssh server to the default services so that                                                                                                          \nyou will be able to log into the system:\n\u003c/p\u003e                                                                                                                                       \n                                                                                                                                                                                   \n\u003cpre\u003e                                                                                                                                                              \nrc-update add sshd default                                                                                                                                                         \n\u003c/pre\u003e                                                                                                                                                                             \n                                                                                                                                                                                   \n                                                                                                                                                                                   \n\u003ch4\u003eReboot into Gentoo\u003c/h4\u003e                                                                                                                                                            \n                                                                                                                                                                                   \n\u003cp\u003e\nNow you should be able to end the repair mode. Log into your Virtuozzo                                                                                            \nPower Panel, select \u0026quot;Finish repair\u0026quot; and try to log into your vserver                                                                                                     \nvia ssh a short while later.\n\u003c/p\u003e                                                                                                                                                   \n\n\u003ch4\u003eChangeLog\u003c/h4\u003e\n\n\u003cp\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan style\u003d\"font-weight:bold;\"\u003e2008/04/30\u003c/span\u003e: Included moving to baselayout2\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-6790041445241786513?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/6790041445241786513/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/04/gentoo-on-1-vserver.html#comment-form","title":"10 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/6790041445241786513"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/6790041445241786513"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/04/gentoo-on-1-vserver.html","title":"Gentoo on a 1\u00261 vServer"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"10"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-8764321264018519278"},"published":{"$t":"2008-04-29T19:27:00.004+02:00"},"updated":{"$t":"2008-04-29T19:36:42.051+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"openrc"},{"scheme":"http://www.blogger.com/atom/ns#","term":"baselayout"},{"scheme":"http://www.blogger.com/atom/ns#","term":"linux"},{"scheme":"http://www.blogger.com/atom/ns#","term":"init"}],"title":{"type":"text","$t":"Moving to baselayout2"},"content":{"type":"html","$t":"\u003cp\u003e\nI finally took the time to move my configuration to \u003ca href\u003d\"http://www.gentoo.org/doc/en/openrc-migration.xml\"\u003ebaselayout2 and openrc\u003c/a\u003e. It was about time since I was still using the old baselayout-vserver packages on my vservers. I admit I was afraid the move would hurt so I waited for a while.\n\u003c/P\u003e\n\u003cp\u003e\nBut it was really, really smooth.\n\u003c/P\u003e\n\u003cp\u003e\nI made only one mistake and did not notice that my link to net.lo vanished in the upgrade process. So I was subsequently wondering why ping responded with \u003cspan style\u003d\"font-weight:bold;\"\u003econnect: invalid argument\u003c/span\u003e when pinging my own machine. Easy enough to fix.\n\u003c/P\u003e\n\u003cp\u003e\nExcellent work from the baselayout and OpenRC devs. Nice.\n\u003c/P\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-8764321264018519278?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/8764321264018519278/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/04/moving-to-baselayout2.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/8764321264018519278"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/8764321264018519278"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/04/moving-to-baselayout2.html","title":"Moving to baselayout2"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-1758429239832563689"},"published":{"$t":"2008-04-25T10:01:00.007+02:00"},"updated":{"$t":"2008-04-25T11:20:34.646+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"pardus"},{"scheme":"http://www.blogger.com/atom/ns#","term":"gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"buch"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab2gentoo"},{"scheme":"http://www.blogger.com/atom/ns#","term":"opensourcepress"},{"scheme":"http://www.blogger.com/atom/ns#","term":"horde"},{"scheme":"http://www.blogger.com/atom/ns#","term":"email"},{"scheme":"http://www.blogger.com/atom/ns#","term":"groupware"},{"scheme":"http://www.blogger.com/atom/ns#","term":"sysadmin"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab2gentoonews"},{"scheme":"http://www.blogger.com/atom/ns#","term":"opensourcescool"},{"scheme":"http://www.blogger.com/atom/ns#","term":"book"}],"title":{"type":"text","$t":"The OpenSourceSchool opens its doors"},"content":{"type":"html","$t":"\u003ca onblur\u003d\"try {parent.deselectBloggerImageGracefully();} catch(e) {}\" href\u003d\"http://www.opensourceschool.de/\"\u003e\u003cimg style\u003d\"float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 79px;\" src\u003d\"http://www.opensourceschool.de/fileadmin/images/logo.gif\" border\u003d\"0\" alt\u003d\"\" /\u003e\u003c/a\u003e\n\u003cp\u003e\nMy \u003ca href\u003d\"http://www.opensourcepress.de\"\u003epublisher\u003c/a\u003e started with his next endeavor in bringing knowledge to the masses: The \u003ca href\u003d\"http://www.opensourceschool.de\"\u003eOpenSourceSchool\u003c/a\u003e. This time it is about spoken words - or courses - rather than written pages bound as books. Many \u003ca href\u003d\"http://www.opensourcepress.de\"\u003eOpenSourcePress\u003c/a\u003e authors are offering seminars there.\n\u003c/p\u003e\n\u003cp\u003e\nI would definitely have liked to offer a course about \u003ca href\u003d\"http://www.gentoo.org\"\u003eGentoo\u003c/a\u003e there. But I had to agree with them that this would probably not raise enough interest from paying customers. Or am I wrong about that?\n\u003c/p\u003e\n\u003cp\u003e\nBut of course there was room for the second topic dear to my heart: \u003ca href\u003d\"http://www.gentoo.org/proj/en/kolab/\"\u003eKolab\u003c/a\u003e. \u003ca href\u003d\"http://www.opensourceschool.de/index.php?id\u003d15\u0026tx_ttproducts_pi1[backPID]\u003d13\u0026tx_ttproducts_pi1[product]\u003d33\u0026cHash\u003d0e8d3864a9\"\u003eThe course\u003c/a\u003e will take five days and touch all major topics of the Kolab Server. Central components such as postfix, openldap, cyrus imap will provide the core components but I'll certainly also include a chapter about getting \u003ca href\u003d\"http://www.horde.org\"\u003ethe Horde web client\u003c/a\u003e successfully installed. So we will hopefully have a new batch of Kolab experts in October.\n\u003c/p\u003e\n\u003cp\u003e\nAnd hopefully the preparations for the course will also help in laying the groundwork for a book about Kolab. This is the only book I still want to write after going through the pain of writing \u003ca href\u003d\"http://www.amazon.de/gp/product/3937514341?ie\u003dUTF8\u0026tag\u003daufkant-21\u0026linkCode\u003das2\u0026camp\u003d1638\u0026creative\u003d6742\u0026creativeASIN\u003d3937514341\"\u003ethe Gentoo book\u003c/a\u003e.\n\u003c/p\u003e\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-1758429239832563689?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/1758429239832563689/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/04/opensourceschool-opens-its-doors.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/1758429239832563689"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/1758429239832563689"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/04/opensourceschool-opens-its-doors.html","title":"The OpenSourceSchool opens its doors"}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}},{"id":{"$t":"tag:blogger.com,1999:blog-998418780028044861.post-2482205407364385305"},"published":{"$t":"2008-04-24T16:28:00.002+02:00"},"updated":{"$t":"2008-04-24T16:39:04.475+02:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"horde"},{"scheme":"http://www.blogger.com/atom/ns#","term":"wiki"},{"scheme":"http://www.blogger.com/atom/ns#","term":"kolab"}],"title":{"type":"text","$t":"Another round of Horde bugs..."},"content":{"type":"html","$t":"I'm back to Horde bug fixes and while their CVS server vanished in some kind of limbo I took the time to create a \u003ca href\u003d\"http://wiki.horde.org/Project/Kolab\"\u003eHorde/Kolab\u003c/a\u003e project page. Maybe it is a useful overview to the people interested in Horde. I definitely have to update the \u003ca href\u003d\"http://wiki.kolab.org/index.php/Horde_development\"\u003eKolab wiki\u003c/a\u003e, too. But that might still take a while.\u003cdiv class\u003d\"blogger-post-footer\"\u003e\u003cimg width\u003d'1' height\u003d'1' src\u003d'https://blogger.googleusercontent.com/tracker/998418780028044861-2482205407364385305?l\u003dlog.onthebrink.de' alt\u003d'' /\u003e\u003c/div\u003e"},"link":[{"rel":"replies","type":"application/atom+xml","href":"http://log.onthebrink.de/feeds/2482205407364385305/comments/default","title":"Post Comments"},{"rel":"replies","type":"text/html","href":"http://log.onthebrink.de/2008/04/another-round-of-horde-bugs.html#comment-form","title":"0 Comments"},{"rel":"edit","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2482205407364385305"},{"rel":"self","type":"application/atom+xml","href":"http://www.blogger.com/feeds/998418780028044861/posts/default/2482205407364385305"},{"rel":"alternate","type":"text/html","href":"http://log.onthebrink.de/2008/04/another-round-of-horde-bugs.html","title":"Another round of Horde bugs..."}],"author":[{"name":{"$t":"Gunnar Wrobel"},"uri":{"$t":"http://www.blogger.com/profile/05751776969338923853"},"email":{"$t":"noreply@blogger.com"},"gd$extendedProperty":{"xmlns$gd":"http://schemas.google.com/g/2005","name":"OpenSocialUserId","value":"11408879373635975321"}}],"thr$total":{"$t":"0"}}]}});