Planet Exherbo

December 31, 2018

Danilo Spinella

Announcing Exherbo subreddit

I am delighted to announce the opening of the unofficial Exherbo subreddit1! You can discuss topic relavant to the distro, take up any problem that you have encountered or share your thoughts and setups. Note that Exherbo development takes place on our Gitlab instance2 and the critical discussions still happen on #exherbo IRC channel on Freenode3. Furthermore, distro documentation4 is currently under reorganisation, and we encourage you to open an issue (or even better a Merge Request!

December 31, 2018 03:00 PM

June 13, 2018

Mike Kelly

Wunderground Datacollection in OpenNMS

I’ve become a fan of OpenNMS as a general purpose monitoring and datacollection platform.

It has a lot of “enterprise” features that I don’t need for most of my personal stuff, but (IMHO) it does a better job of doing basic service monitoring, performance metric collection, etc than things like Nagios (or other hacks I’ve made in the past).

One thing I’ve done with it is start to collect my local weather data, so that I can graph it side-by-side with data pulled from my thermostat, etc.

Unfortunately, the Weather Underground API is no longer free (“as in beer”), but hopefully this serves as an example of the sort of stuff you can do with OpenNMS.

OpenNMS is able to collect data from a number of sources, including SNMP, and basically anything you get fetch over HTTP.

To get data from Wunderground, we’ll use the XmlCollector. Despite its name, it can also work with JSON, though in this case, Wunderground gives us XML anyways.

We need to update collectd-configuration.xml with two new parts:

   <package name="wunderground-conditions" remote="false">
      <filter>IPADDR != ''</filter>
      <include-range begin="" end=""/>
      <include-range begin="::1" end="ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"/>
      <service name="Wunderground-Conditions" interval="300000" user-defined="true" status="on">
         <parameter key="collection" value="wunderground_conditions_home"/>
         <parameter key="handler-class" value="org.opennms.protocols.xml.collector.DefaultXmlCollectionHandler"/>
   <!-- ... -->
   <collector service="Wunderground-Conditions" class-name="org.opennms.protocols.xml.collector.XmlCollector"/>

This tells OpenNMS that, if we have a node configured with the “Wunderground-Conditions” service, it should trigger this datacollection.

Next, we need to add some specific configuration for the XmlCollector, in xml-datacollection-config.xml:

    <xml-collection name="wunderground_conditions_home">
        <rrd step="300">
        <xml-source url="">

Here, the “name” of the collection matches up with the paramter we defined in the Collectd config.

If you’re lucky enough to still have a Wunderground API key, you just need to put it in place of YOURAPIKEY above, and change the rest of the query to be something like /conditions/q/NY/New_York.xml.

That tells OpenNMS where to get the data from, but we still need one more file to tell it how to parse the data, and decide what to store. We put that in xml-datacollection/wunderground.xml (the import-groups entry above):

   <xml-group name="wunderground_conditions" resource-type="node" resource-xpath="/response/current_observation">
      <xml-object name="temp_c" type="GAUGE" xpath="temp_c"/>
      <xml-object name="temp_f" type="GAUGE" xpath="temp_f"/>
      <xml-object name="UV" type="GAUGE" xpath="UV"/>
      <xml-object name="dewpoint_c" type="GAUGE" xpath="dewpoint_c"/>
      <xml-object name="dewpoint_f" type="GAUGE" xpath="dewpoint_f"/>
      <xml-object name="feelslike_c" type="GAUGE" xpath="feelslike_c"/>
      <xml-object name="feelslike_f" type="GAUGE" xpath="feelslike_f"/>
      <xml-object name="heat_index_c" type="GAUGE" xpath="heat_index_c"/>
      <xml-object name="heat_index_f" type="GAUGE" xpath="heat_index_f"/>
      <xml-object name="precip_1hr_in" type="GAUGE" xpath="precip_1hr_in"/>
      <xml-object name="precip_1hr_metric" type="GAUGE" xpath="precip_1hr_metric"/>
      <xml-object name="precip_today_in" type="GAUGE" xpath="precip_today_in"/>
      <xml-object name="precip_today_metric" type="GAUGE" xpath="precip_today_metric"/>
      <xml-object name="pressure_in" type="GAUGE" xpath="pressure_in"/>
      <xml-object name="pressure_mb" type="GAUGE" xpath="pressure_mb"/>
      <xml-object name="visibility_km" type="GAUGE" xpath="visibility_km"/>
      <xml-object name="visibility_mi" type="GAUGE" xpath="visibility_mi"/>
      <xml-object name="wind_degrees" type="GAUGE" xpath="wind_degrees"/>
      <xml-object name="wind_gust_kph" type="GAUGE" xpath="wind_gust_kph"/>
      <xml-object name="wind_gust_mph" type="GAUGE" xpath="wind_gust_mph"/>
      <xml-object name="wind_kph" type="GAUGE" xpath="wind_kph"/>
      <xml-object name="wind_mph" type="GAUGE" xpath="wind_mph"/>
      <xml-object name="windchill_c" type="GAUGE" xpath="windchill_c"/>
      <xml-object name="windchill_f" type="GAUGE" xpath="windchill_f"/>

      <xml-object name="display_location" type="String" xpath="display_location/full"/>

That should “just work” for any Wundergroud location, and should tell OpenNMS to hold on to basically all of the numeric values I saw in the results. All of that get stored in your time series database of choice (JRobin, RRDtool, or Newts).

It also holds onto the “display_location” string (just the latest value), which you can use to help give a more meaningful label to your graphs.

Finally, we’ll want to build a pretty graph to show that our datacollection is working:

report.wunderground.conditions.temp.command=--title="Temperature" \
  --vertical-label="Degrees F" \
  DEF:temp_f={rrd1}:temp_f:AVERAGE \
  DEF:feelslike_f={rrd2}:feelslike_f:AVERAGE \
  DEF:dewpoint_f={rrd3}:dewpoint_f:AVERAGE \
  LINE2:temp_f#00ff00:"Temperature " \
  GPRINT:temp_f:AVERAGE:"Avg \\: %10.2lf" \
  GPRINT:temp_f:MIN:"Min \\: %10.2lf" \
  GPRINT:temp_f:MAX:"Max \\: %10.2lf\\n" \
  LINE2:feelslike_f#ee42f4:"Feels Like  " \
  GPRINT:feelslike_f:AVERAGE:"Avg \\: %10.2lf" \
  GPRINT:feelslike_f:MIN:"Min \\: %10.2lf" \
  GPRINT:feelslike_f:MAX:"Max \\: %10.2lf\\n" \
  LINE2:dewpoint_f#42e8f4:"Dewpoint    " \
  GPRINT:dewpoint_f:AVERAGE:"Avg \\: %10.2lf" \
  GPRINT:dewpoint_f:MIN:"Min \\: %10.2lf" \
  GPRINT:dewpoint_f:MAX:"Max \\: %10.2lf\\n"

That gets you a pretty little graph, like this:

Sample Weather Graph

by pioto at June 13, 2018 12:54 AM

May 27, 2018

Ali Polatel

alip's exherbo shortlog 20180527

Here is a summary of my recent Exherbo activity:

May 27, 2018 12:00 AM

January 30, 2018

Danilo Spinella

Termish = malloc(255 * size)

This is the preface for a series of post on terminal apps, called Termish. But why? I love staying in the terminal. A lot of things are faster to do and I don’t have to move my hands away from keyboard every now and then. The problem is: we don’t always have the right tool to use. Plus, a lot of goodies don’t have visibility. We will explore these programs covering a great range of categories, including a usage example for each one.

January 30, 2018 11:07 PM

January 13, 2017

Ali Polatel

Shell Meditation

Seek your music. As you please.

    while true; do
        (( z = ${RANDOM} % 100 ))
        (( a = $z % 10 ))
        mpc seek $z% &
        sleep $a
        kill $!

January 13, 2017 12:00 AM

Bright Side of the Moon

Quick Update: I have a flat! My German was barely enough to make it. Und zwar komisch. You get a flat on your birthday. Hard to say how it could get any fucking better than that.

Oh: Ev buldum lan. Na aşağıdaki! #direnkigülsünyüzün. Yolu düşen gelsin. Yoksa. Ayıp. Olur. Bana. Bak. Manifestolâmin.

Ay gidiyor

Last and least. Here is a poem and a song that describes everything so far. Life. is. just. pregnant.

Çağırın! Güneşin zaptı yakın! #martılaraselam #petşişeistemezük.



Hayali Ali, Çengelköy

drawing curtains
hiding fetus
behind venus
all Night long
let it flow
into snow
crystals in a row
mothers will bow
and swallow
their unborn babies!

Do the Evolution:

January 13, 2017 12:00 AM

January 03, 2017

Ali Polatel

Endgame Tricks

Chess endgames often look deceptively simple. Reduced number of pieces on the board brings reduced alertness to the player. Thus, it is not uncommon for the adversary to come up with sneaky ways to take advantage of this relaxed state. Thinking in terms of psychology, the most important feature of this relaxed state is the reduced feeling of danger which in turn leads to reluctance to justify moves with concrete variations. Even though, schematic thinking is an important feature of endgame technique, it has a psychological danger where player's reliance upon natural moves rather than logical ones can lead h/er to trouble when there exists a non-obvious nuisance in the position which establishes a significant distinction between the natural and the logical. At the end of the day chess is purely mathematics and the term natural is nothing but pattern recognition. Yet, no pattern is exactly the same.

One form of blunder which is very common to such a frame of mind is quiescence errors where the player is decepted by the natural aesthetics of a seemingly winning move sequence and fails to spot a trap which is no further than half a move away. The main reason of the blunder is psychological, the sudden change of excitement coupled with the reduced sense of danger literally blinds the player who could otherwise easily spot the problem with the move sequence at hand. Below is a simple, illustrative example of such an error. This is an online blitz game where I had the white pieces.

January 03, 2017 12:00 AM

December 27, 2016

Ali Polatel

Envtag 0.6

Envtag-0.6 has been released.

  • Fix alt_getopt and envutils for Lua-5.2 and newer.

tarball: envtag-0.6.tar.bz2
sha1sum: e1e1179198cab15717daea986f0a27cbe3a0e963

December 27, 2016 12:00 AM

December 26, 2016

Ali Polatel

Envtag 0.5

Envtag-0.5 has been released.

  • Add support for Lua-5.2 and newer.
  • Fix –delimiter option of get-xiph and set-xiph commands
  • Update alt_getopt to 0.7
  • Follow symlinks when determining filetype information using libmagic

tarball: envtag-0.5.tar.bz2
sha1sum: 04a8fb00cadd452899620bd168d36a6015b6b772

December 26, 2016 12:00 AM

September 16, 2016

Mike Kelly

First Post in Foreverz

It’s been a while since I’ve made any blog posts…

Here’s a quick update since the last time:

  • I've changed jobs twice.
  • I've had a bunch of kids.

I also switched everything (both blog and website) over to a Jekyll site about… 2 years ago.

I don’t have the time to contribute as much to open source as I used to, but here’s a little tidbit.

Deploying a Jekyll Blog to a Traditional Web Host, using GitLab CI

I’ve been using GitLab at work for a while now, and it’s grown on me. I’ve recently managed to get my entire website fully deployed by GitLab, both to a staging area with their Pages tool, and to my ‘ole reliable pair Networks hosting account.

I still have to audit my repo before I can make it fully public, but here’s the .gitlab-ci.yml I’m using:

# This file is a template, and might need editing before it works on your project.
# Full project:
image: ruby:2.3.1

  - bundle install

  stage: test
  - bundle exec jekyll build -d test
    - test
  - master

  stage: deploy
  environment: staging
  - bundle exec jekyll build -b /pioto-org -d public
    - public
  - master

  stage: deploy
  environment: production
  when: manual
    JEKYLL_ENV: production
  - bundle install
  - apt-get update && apt-get install -y rsync
  - umask 0077 && mkdir -p /root/.ssh
  - umask 0047 && echo "${PROD_KNOWN_HOSTS}" >> /root/.ssh/known_hosts
  - umask 0077 && echo "${PROD_DEPLOY_KEY}" > /root/.ssh/id_rsa
  - bundle exec jekyll build -d public
  - rsync -crvz --delete-after --delete-excluded public/ "${PROD_USERNAME}@${PROD_HOSTNAME}:"
    - public
  - master

Here’s basically how this works:

  • There’s a basic “test” job, which just confims that everything can actually be built.
  • There’s a “pages” job, which is how things get deployed to GitLab Pages. Every commit on the master branch goes there automatically.
  • There’s a “production” job, which is where the magic happens to deploy my site live:
    • Before the build, we make sure we have rsync, and set up the ssh keys needed for the deploy. The contents of the key files are stored as secure variables.
    • We build with the correct baseurl setting.
    • We build with JEKYLL_ENV=production, so that things like Google Analytics get wired in.
    • We use rsync (with rrsync set up on the other end) to deploy the site.

by pioto at September 16, 2016 05:59 AM

March 13, 2016

Wulf C. Krueger

Gerrit updated to 2.12.2 / Jenkins updated to 1.652

I’ve updated Gerrit from 2.11.5 to the latest release 2.12.2. These are the user-visible highlights:

  • New Submit Whole Topic setting: All changes belonging to the same topic will be submitted at the same time. Currently disabled because it’s still experimental but I will enable this once it’s considered stable.
  • Support for GPG Keys and signed pushes. You can add your GPG key in Gerrit and git push –signed to use this. This should work right now – but doesn’t for me at least. If you have more success, let me know. 🙂
  • New search operators, e. g. author:, committer:, commentby: and a few others.
  • Your preferences for editing and diff presentation can now be configured in your user settings.
  • Gerrit’s in-line editor has now support for Emacs and Vim key maps.
  • There are several new API calls available for those using their own Gerrit clients (yes, I’m looking at you, Kylie McClain! 😉 ).

You can find the complete release notes for the Gerrit versions here:

Gerrit 2.11.6
Gerrit 2.11.7
Gerrit 2.12
Gerrit 2.12.1
Gerrit 2.12.2

As for Jenkins, I’ve updated it to 1.652 as well. Nothing spectacular there but some bug fixes in the backend mostly; including two security fixes.

The full changelog can be found here.

P. S.: If you’re from Germany, specifically from Baden-Württemberg, Rheinland-Pfalz or Sachsen-Anhalt: STOP READING THIS AND GO TO CAST YOUR VOTE. I did.

P. P. S.: If you (want to) vote for the AfD or other fascist parties: Please let me know. I like to know my enemies.

I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂


    by krueger at March 13, 2016 03:11 PM

    October 27, 2015

    Wulf C. Krueger

    “Where have you been?!”

    As many of you will have noticed, I’ve been “gone” for almost two months. To some of you, I’ve explained my absence but I’d like to present a “compact” version here as well.

    As many of you know, I’ve been the head of my department at work last year. Due to problematic circumstances beyond my control, I decided it best for me to formally resign from said position effective December, 31st 2014.

    Fast-forward to mid 2015: A new head of department has been installed. Naturally, I’m her deputy. The “problematic circumstances” mentioned above have gone even more “challenging” by now. Both my new team lead and I do all we can for everyone involved.

    Mid September 2015 – things get rougher for a lot of reasons. The team lead goes on extended holidays and I’m taking over. There are lots of things to do and way too few hours in a day to work on them – even for a highly skilled and systematically working professional like myself.

    I’m working very long each week (I won’t mention how long exactly to avoid all kinds of trouble 🙂 ) and, thus, have to cut down on all other activities and since Exherbo is the most time-consuming one, it’s the first (but not the last) to suffer from that.

    By now, I have a few effective methods (and professional help) to avoid a burn-out, etc. and so, now that my team lead is back at work, things should slowly be going back to normal. Which – as you can see – effectively means: I’m back. 🙂

    I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂


    by krueger at October 27, 2015 01:52 PM

    September 01, 2015

    Wulf C. Krueger

    Jenkins updated to 1.627

    Another quick news blurb: I’ve updated Jenkins to 1.627. It has a few bugfixes but nothing really spectacular.

    The full changelog can be found here.


    I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂


    by krueger at September 01, 2015 12:29 AM

    August 30, 2015

    Wulf C. Krueger

    Gerrit updated to 2.11.3 / Jenkins updated to 1.626

    I’ve just updated Gerrit to the latest release 2.11.3. These are the user-visible highlights:

    • When you choose a user (e. g. to add a reviewer) inactive accounts are not suggested anymore.
    • If you use side-by-side diffs (why ever would you?!), their performance has been improved
    • If your browser supports the JavaScript clipboard API (e. g. Chromium does) that’s preferred over the old Flash widget.
    • Quite a few bug fixes.

    You can find the complete release notes for Gerrit 2.11.3 here.

    As for Jenkins, I’ve updated it from 1.623 to 1.626 as well. Nothing spectacular there but some bug fixes in the backend mostly.

    The full changelog can be found here.

    I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂

    by krueger at August 30, 2015 02:06 PM

    August 08, 2015

    Wulf C. Krueger

    Jenkins updated to 1.623

    Quick news blurb: I’ve updated Jenkins to 1.623. It has quite few bugfixes but nothing really spectacular.

    The full changelog can be found here.


    I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂


    by krueger at August 08, 2015 09:37 AM

    July 14, 2015

    Wulf C. Krueger

    Gerrit updated to 2.11.2 / Jenkins updated to 1.620

    This morning, I’ve updated Gerrit to the latest release 2.11.2. These are the user-visible highlights:

    • Automatic suggestions in the search box work again.
    • Several issues that could potentially cause data loss have been fixed.
    • Newer jgit version

    You can find the complete release notes for Gerrit 2.11.2 here.

    As for Jenkins, I’ve updated it from 1.617 to 1.620 as well. Lots of bugfixes were implemented the most interesting of which concerned the console (log) output that could get truncated.

    The full changelog can be found here.

    I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂


    by krueger at July 14, 2015 03:03 PM

    June 13, 2015

    Wulf C. Krueger

    Gerrit updated to 2.11.1

    I’ve just finished updating Gerrit to the latest release 2.11.1. These are the highlights:

    • You can now link accounts to each other (Settings / Identities / Link Another Identity). This means, if you want to be able to use both Github and Google, just use that button.
      Furthermore, if you accidentally create a new account (you’ll know it happened if you can’t +2 changes for your own repository anymore), you can now just link both yourself.
      If things still somehow go wrong, just let me know and I’ll link your accounts manually.
    • Performance improvements for pushing changes to Gerrit and some other areas
    • Newer jgit version
    • Lots of bugfixes

    You can find the complete release notes for Gerrit 2.11 here.


    I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂


    by krueger at June 13, 2015 09:15 AM

    May 08, 2015

    Wulf C. Krueger

    Gerrit updated to 2.11 – being in-line, changing change screens and the return of the king!

    I’ve just finished updating Gerrit to the latest release 2.11. This gives us some amazingly cool new features to play with:

    • The Return of The King or: The Empire strikes back! Authentication using Google’s Oauth2 is supported now. When logging in, you can choose between github (the preferred supplier) or Google.
      (This is going to change once more this year and then hopefully never again. User accounts have been preserved now, though, and will be preserved when I’m done with the authentication changes I’m preparing.)
    • Gerrit is now back where it belongs – in Tomcat. That makes it faster and more reliable.

    You can find the complete release notes for Gerrit 2.11 here.


    I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂

    by krueger at May 08, 2015 05:06 PM

    May 07, 2015

    Wulf C. Krueger

    Great Article about Exherbo’s MultiArch is online!

    Here’s a great article about Exherbo’s MultiArch!

    You’ll find it on these sites as well (please up-vote it if you like it!):




    Others will hopefully follow. I’ll update this post accordingly.

    I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂

    by krueger at May 07, 2015 08:42 PM

    Gerrit update tomorrow

    Just a short heads-up: I’m going to update our Gerrit installation tomorrow so please expect some downtime.


    I am and have been working on quite a few F/OSS projects:
  • Exherbo (Nick: Philantrop)
  • Gentoo (Nick: Philantrop)
  • Calibre plugin iOS reader applications
  • Calibre plugin Marvin XD
  • chroot-manager
  • stuff on github
  • Lots of other projects
  • If you like my work, feel free to donate. 🙂

    by krueger at May 07, 2015 05:23 PM

    April 04, 2015

    Ciaran McCreesh

    Paludis 2.4.0 Released

    Paludis 2.4.0 has been released:

    • Bug fixes.
    • We now use Ruby 2.2, unless –with-ruby-version is specified.

    by Ciaran McCreesh at April 04, 2015 11:55 AM

    October 01, 2014

    Ciaran McCreesh

    Paludis 2.2.0 Released

    Paludis 2.2.0 has been released:

    • Bug fixes.
    • Compilation fixes for Clang.
    • Added ‘cave resolve –chroot-path’.
    • Removed the “breaks Portage” feature.

    by Ciaran McCreesh at October 01, 2014 06:05 PM

    February 23, 2014

    Bryan Østergaard

    So I was dox'ed yesterday

    and nobody gives a fuck.

    Here's the associated spam:
    14:53 < ~dd0sb0ss> rip
    14:53 < ~dd0sb0ss> PARTY AT Vølundsgade 31, 3. th. 2200 København N
    14:53 < ~zsasz> ur unicode is broken dd0sb0ss
    14:53 < ~dd0sb0ss> fuq
    14:54 < ~dd0sb0ss> THE OFFICIAL FREENODE PARTYLINE IS REACHABLE AT +4533137886
    14:54 -!- dd0sb0ss was kicked from #freenode by kloeri_ [dd0sb0ss]

    Ignoring the broken unicode that's actually the correct information. Well done on finding this information that has been publically available (by my own choice) for several years.

    It's never been hard to find me and that's not changing in the future just because of some silly kids either. Unlike these kids I'm actually proud of what I do and I'm more than happy to stand by my actions with my real name and even address widely available.

    And for all those sensible people out there just shaking your heads at this sillyness - you're welcome to visit, especially if you are interested in open source software or need a consultant on some project :) I'd suggest contacting me by email first though.

    PS. Thanks to GNAA for this obvious advertising opportunity.

    by kloeri at February 23, 2014 08:49 PM

    October 13, 2013

    Ciaran McCreesh

    September 24, 2013

    Ali Polatel

    A Study in Sydbox

    Due to the fact that sydbox is a low level tool which inspects system calls, debugging its bugs become cumbersome at times. GDB and Valgrind are two valuable tools which comes to rescue.

    I hit this bug when I was investigating Exherbo bug 369. I wrote a small C program to reproduce the problem:

    #include <errno.h>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <elf.h>
    #include <sys/auxv.h>
    #include <sys/types.h>
    int main(void)
        pid_t pid;
        int pfd[2];
        unsigned long val;
        char buf[1024];
        int auxfd;
        val = getauxval(AT_SECURE);
        fprintf(stderr, "getauxval(%lu) = %lu (errno:%d %s)\n",
            AT_SECURE, val, errno, strerror(errno));
        pid = fork();
        if (pid == 0) {
            /* 23 is AT_SECURE as defined in elf.h */
            char *const argv[] = {"sh", "-c", "od -t u8 | awk '{if ($2 == 23) print }'", NULL};
            dup2(pfd[0], STDIN_FILENO);
            execvp(argv[0], argv);
        } else {
            auxfd = open("/proc/self/auxv", O_RDONLY);
            while (read(auxfd, buf, 1024) > 0)
                write(pfd[1], buf, 1024);

    I compiled this small program with gcc and when I run it under sydbox-1 I witnessed an interesting output:

    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % ./sydbox ./a.out
    getauxval(23) = 0 (errno:0 Success)
    sydbox@1379972151: bash[26306.0:26305] sys:4|stat| PANIC_KILL

    Note there is not a prompt at the end. sydbox-1 hung right after logging PANIC_KILL. Before firing up a debugger and start to debug, let’s gather as much information as possible by checking whether verbose logging will tell us something:

    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % ./sydbox -m log/console_level:511 ./a.out
    sydbox@1379972294: [wait(-1, 0x857f) = 28848] WIFSTOPPED,sig=133|(null)|
    sydbox@1379972294: [wait(-1, 0x857f) = 28848] WIFSTOPPED,sig=133|(null)|
    sydbox@1379972294: [wait(-1, 0x857f) = 28848] WIFSTOPPED,sig=133|(null)|
    sydbox@1379972294: bash[28848.0:28847] sys:4|stat| entering system call
    sydbox@1379972294: bash[28848.0:28847] sys:4|stat| PANIC_KILL
    sydbox@1379972294: bash[28848.0:28847] sys:4|stat| trace_kill(sig:9) failed (errno:3|ESRCH| No such process)
    sydbox@1379972294: process 28848 ignored

    After a couple of wait(2) loops the stat(2) system call handler - which takes magic commands as input paniced for some reason and called the function panic() which decided to kill the traced process.

    So far so good. Although this looks unrelated to the bug at hand, it is still a good idea to fix it when you have some free time. Let’s fire up the debugger and try to do a reverse debug. I use cgdb which provides a nice curses frontend to gdb.

    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % libtool --mode=execute cgdb --args ./sydbox -m log/console_level:511 ./a.out
    GNU gdb (GDB) 7.6.1
    Copyright (C) 2013 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-unknown-linux-gnu".
    For bug reporting instructions, please see:
    Reading symbols from /home/alip/src/sydbox/sydbox-1/src/.libs/lt-sydbox...done.

    First let’s break on main(), run the program and when the breakpoint is hit set another breakpoint on sys_stat (the stat(2) system call handler function) and start [recording][recording] the program instructions and continue.

    (gdb) break main
    Breakpoint 1 at 0x419d98: file sydbox.c, line 1255.
    (gdb) run
    Starting program: /home/alip/src/sydbox/sydbox-1/src/.libs/lt-sydbox -m log/console_level:511 ./a.out
    warning: no loadable sections found in added symbol-file system-supplied DSO at
    warning: Could not load shared library symbols for
    Do you need "set solib-search-path" or "set sysroot"?
    Breakpoint 1, main (argc=4, argv=0x7fffffffd428) at sydbox.c:1255
    (gdb) record
    (gdb) break sys_stat
    Breakpoint 2 at 0x411d58: file syscall-special.c, line 150.
    (gdb) cont
    Do you want to auto delete previous execution log entries when record/replay buffer becomes full (record full stop-at-limit)?([y] or n)

    This takes some time. When the record/replay buffer is full, gdb kindly asks you whether you want to continue execution and auto-delete previous log entries or stop instantly and investigate further on. We’re not interested in the previous log entries so let’s just hit [enter] and continue.

    Process record and replay target doesn't support syscall number -1
    Process record: failed to record execution log.
    [process 8201] #1 stopped.

    This is a weird message by gdb which fortunately I have seen before. sydbox-1 makes use of some rather new system calls which gdb does not support. The newest of those are process_vm_readv and process_vm_writev which were added to Linux as of kernel version 3.2. I’ll add a small one-time tweak to the auto-generated pinktrace/system.h file telling sydbox-1 that these system calls are not supported by the system and let it use the good old ptrace(2) way of reading one long at a time:

    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % cd ../pinktrace
    alip@hayalet ~/src/sydbox/sydbox-1/pinktrace (git)-[master] % sed -i -e '/^#define PINK_HAVE_PROCESS_VM_\(READ\|WRITE\)V/s/1/0/' system.h
    alip@hayalet ~/src/sydbox/sydbox-1/pinktrace (git)-[master] % grep PINK_HAVE_PROCESS system.h
    #define PINK_HAVE_PROCESS_VM_READV      0
    alip@hayalet ~/src/sydbox/sydbox-1/pinktrace (git)-[master] % make clean && make -j

    Now let’s return to src/ and rebuild sydbox:

    alip@hayalet ~/src/sydbox/sydbox-1/pinktrace (git)-[master] % cd ../src
    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % make clean && make -j

    Let’s re-run sydbox to make sure the bug is still there:

    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % ./sydbox ./a.out
    getauxval(23) = 0 (errno:0 Success)
    0000340                   23                    0

    This is where my luck kicks in! The bug is not there anymore. Now we know the problem is actually in pinktrace, the underlying library providing thin wrappers around the ptrace(2) system call. We have also narrowed the problem down to one of process_vm_readv and process_vm_writev functions. Now let’s go back to turn the #defines on and retry with gdb:

    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % cd ../pinktrace
    alip@hayalet ~/src/sydbox/sydbox-1/pinktrace (git)-[master] % sed -i -e '/^#define PINK_HAVE_PROCESS_VM_\(READ\|WRITE\)V/s/0/1/' system.h
    alip@hayalet ~/src/sydbox/sydbox-1/pinktrace (git)-[master] % grep PINK_HAVE_PROCESS system.h
    #define PINK_HAVE_PROCESS_VM_READV      1
    alip@hayalet ~/src/sydbox/sydbox-1/pinktrace (git)-[master] % make clean && make -j
    alip@hayalet ~/src/sydbox/sydbox-1/pinktrace (git)-[master] % cd ../src
    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % make clean && make -j

    Now we will start recording only after we enter the sys_stat() function:

    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % libtool --mode=execute cgdb --args ./sydbox -m log/console_level:511 ./a.out
    GNU gdb (GDB) 7.6.1
    Copyright (C) 2013 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "x86_64-unknown-linux-gnu".
    For bug reporting instructions, please see:
    Reading symbols from /home/alip/src/sydbox/sydbox-1/src/.libs/lt-sydbox...done.
    (gdb) break sys_stat
    Breakpoint 1 at 0x411d58: file syscall-special.c, line 150.
    (gdb) run
    sydbox@1379974050: [wait(-1, 0x857f) = 31387] WIFSTOPPED,sig=133|(null)|
    sydbox@1379974050: [wait(-1, 0x857f) = 31387] WIFSTOPPED,sig=133|(null)|
    sydbox@1379974050: bash[31387.0:31386] sys:4|stat| entering system call 
    Breakpoint 1, sys_stat (current=0x62fa00) at syscall-special.c:150
    (gdb) record
    (gdb) cont
    Process record and replay target doesn't support syscall number -1
    Process record: failed to record execution log.
    [process 31382] #1 stopped.
    0x00007ffff78fa048 in process_vm_readv () from /usr/lib/

    Gdb kindly stopped where the bug is actually located. Let’s stop recording and single-step to see what error this function returns.

    (gdb) record stop
    Process record is stopped and all execution logs are deleted.
    (gdb) n
    Single stepping until exit from function process_vm_readv, which has no line number information.
    _pink_process_vm_readv (pid=31387, local_iov=0x7fffffffbe10, liovcnt=1, remote_iov=0x7fffffffbe00, riovcnt=1, flags=0) at vm.c:199
    (gdb) n
    (gdb) p r
    $1 = -1

    The function _pink_process_vm_readv is returning -1 which is the negated errno value EPERM. This makes pink_vm_cread_nul fail with -1 which in turn makes pink_read_vm_data_nul return -1 which in turn makes syd_read_string function to call panic(). Now we have a detailed information about the panic happening.

    Another valuable tool to aid in debugging system call inspection is strace. Let’s check with strace what these stat(2) system calls’ arguments are. I have not updated my strace.git tree for a while and trying to compile it I have found a problem due to an inconsistency between glibc and linux kernel headers which keruspe fixed for pinktrace with commit e1aa031 a week ago:

    alip@hayalet ~/src/strace (git)-[master] % make -j1
    gcc -DHAVE_CONFIG_H -I.  -I./linux/x86_64 -I./linux -I./linux  -Wall -Wwrite-strings -D__ALIP_WAS_HERE -g -ggdb3 -O2 -march=native -D__PINK_IS_BEHIND_THE_WALL -MT process.o -MD -MP -MF .deps/process.Tpo -c -o process.o process.c
    In file included from process.c:66:0:
    /usr/include/linux/ptrace.h:58:8: hata: 'struct ptrace_peeksiginfo_args' yeniden tanımlanmış
     struct ptrace_peeksiginfo_args {
    In file included from defs.h:169:0,
                     from process.c:37:
    /usr/include/sys/ptrace.h:191:8: bilgi: originally defined here
     struct ptrace_peeksiginfo_args

    struct ptrace_peeksiginfo_args is a recent addition to ptrace.h headers and both sys/ptrace.h of glibc-2.18 and linux/ptrace.h of Linux define it. Thus defining the same struct twice fails. Fortunately we have seen this error before with the IA64 architecture where the same happens with struct pt_all_user_regs and struct ia64_fpreg.

    Having hit another totally unrelated bug, I have prepared a patch and tested it:

    alip@hayalet ~/src/strace (git)-[master] % make
    gcc -Wall -Wwrite-strings -D__ALIP_WAS_HERE -g -ggdb3 -O2 -march=native -D__PINK_IS_BEHIND_THE_WALL   -o strace bjm.o block.o count.o desc.o file.o io.o ioctl.o ipc.o loop.o mem.o mtd.o net.o pathtrace.o process.o quota.o resource.o scsi.o signal.o sock.o strace.o stream.o syscall.o system.o term.o time.o util.o vsprintf.o  
    make[2]: `/home/alip/src/strace' dizininden çıkılıyor
    make[1]: `/home/alip/src/strace' dizininden çıkılıyor

    It compiles and runs fine. Time to prepare a git-format-patch and send to strace-devel mailing list. These git tools make it really easy to prepare patches and submit them. Here is the link to the actual mail.

    So far so good. Another bug fixed and submitted upstream. Let’s go ahead and see whether strace can make sense of those stat(2) arguments:

    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % ~/src/strace/strace -f -e stat ./a.out Process 18698 attached [pid 18697] +++ exited with 0 +++ stat(0x9db090, {…}) = 0 stat(0x485897, {…}) = 0 stat(0x485897, {…}) = 0 …

    Note the `-f` argument. Remember our panic line started with
    `bash[31387.0:31386]` this does not happen in my small program but in bash which
    is spawned right after `fork(2)`. The `-f` argument of [strace][strace] follows
    Now the question is what those hex values in the first arguments are.
    [strace][strace] usually does a good job in decoding strings so something is
    weird going on here. Let's go one step ahead and try to trace [strace][strace]
    using [strace][strace] itself. One has to be careful here not to use `-f` with
    the first [strace][strace] because *only one process may trace a process at a
    time* and we want the first [strace][strace] to only trace [strace][strace] not
    our small program `a.out`. We also use the option `-e 'signal=!all'` so that we
    filter some of the unwanted output:

    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % strace -q -e ‘process_vm_readv’ -e ‘signal=!all’ – strace -e ‘signal=!all’ -f -e stat ./a.out getauxval(23) = 0 (errno:0 Success) Process 22286 attached [pid 22285] +++ exited with 0 +++ process_vm_readv(22286, 0x7fff71faed40, 1, 0x7fff71faed50, 1, 0) = -1 EPERM (Operation not permitted) stat(0x1938070, process_vm_readv(22286, 0x7fff71fafce0, 1, 0x7fff71fafcf0, 1, 0) = -1 EPERM (Operation not permitted) {…}) = 0

    The output of the two strace processes are mixed but here we can also see that
    the system call `process_vm_readv()` returns the error condition `EPERM`.
    Consulting the [process_vm_readv(2)][man_process_vm_readv] manual page:

    EPERM The caller does not have permission to access the address space of the process pid.

    Now, why on earth is `ptrace()` is permitted but `process_vm_readv()` is not? It
    is clear that they are two different APIs. It is time to dig into the kernel
    source. Having walked through the kernel code on [lxr][lxr] for a while, I
    figured this [sydbox-1][sydbox_1] PANIC was due to the fact that I have the
    sysctl `kernel.yama.ptrace_scope` set to 1 which is [YAMA restricting
    ptrace()][yama_restricts_ptrace]. After:

    alip@hayalet ~/src/sydbox/sydbox-1/src (git)-[master] % sudo sysctl kernel.yama.ptrace_scope=0 kernel.yama.ptrace_scope = 0 ~~~

    Everything works OK and now I am aware of the fact that there is another way to restrict ptrace() and I will work on sydbox-1 to make it handle such errors gracefully (without hanging) but that’s for another night.

    Confession: I started working at Özgür Yazılım A.Ş. as a Linux system administrator and programmer and I have been using Arch Linux for a while which means I have not been configuring/compiling my own kernel. This was a nice message to me that I should stop being a slacker and return to Exherbo now.

    The Exherbo bug 369 is still not fixed, but I am working on it :-)

    September 24, 2013 12:00 AM

    September 21, 2013

    Ali Polatel

    Killing tracees on exit with sydbox-1

    As I’ve written in my blog post Recent Linux changes to help sandboxing Linux has a few new features which may aid in enhancing sydbox-1.

    One of these features is PTRACE_O_EXITKILL. This is a new ptrace option to kill tracees upon tracer exit. Quoting from ptrace(2)

    PTRACE_O_EXITKILL (since Linux 3.8)
    If a tracer sets this flag, a SIGKILL signal will be sent to every
    tracee if the tracer exits.  This option is useful for ptrace
    jailers  that want to ensure that tracees can never escape the
    tracer's control.

    This is a simple feature providing a nice enhancement. sydbox-1 had a similar feature to prevent tracees from running upon an abnormal exit. There are two options, namely core/abort/decision and core/panic/decision, which when given the value killall sends SIGKILL to all traced processes upon abnormal exit. There is also the option core/trace/exit_wait_all to make sydbox-1 wait for all tracees to exit before exiting.

    However, doing this in user-space is tricky and error-prone. Considering it’s the tracer who is dying unexpectedly, it may not always be possible to kill tracees which will then run in potentially unsafe mode. You can read this lkml thread and many more to dive into the internals of ptrace(2).

    Thus, sydbox-1 learned a new magic command with the name core/trace/exit_kill to turn this functionality on with the two commits I pushed to master today:

    One restriction is the option core/trace/exit_kill is only useful when it is set upon startup. It does not work with the magic stat() system call. ptrace(2) options are inherited from parent to children thus trying to set this on a per-tracee basis requires one to change the value of the option for the parent and all its children. Although this is possible in theory (sydbox-1 keeps track of parent<->children relationships) it would add some complexity to the program which I do not want unless I see a well-founded reason to do so.

    September 21, 2013 12:00 AM

    September 14, 2013

    Alexander Færøy

    Enhancing SSL Security for IRC: DANE Support

    September 14, 2013.

    A couple of weeks ago, I had a discussion with some of the Quakenet coders on how to add SSL support to their IRC daemon, but the discussion ended up being about the false sense of security that SSL potentially can give to the user. The Quakenet hackers have an interesting article online about their thoughts on the matter and while I do understand their points, I do not agree with it being a good enough reason to completely avoid SSL on your IRC network.

    We quickly changed the discussion to be about how the IRC clients should be able to verify that the SSL certificate, received from the server, is not a malicious certificate from someone doing MITM attacks. This was not the discussion I had hoped for, but nevertheless, it was an interesting discussion to participate in and made me spend a few days thinking about their concerns.

    Sadly, as it is today, some IRC clients, including Irssi, only do full SSL certificate validation as an opt-in option (via the -ssl_verify option for /connect in Irssi’s case) rather than having it as an opt-out option, which would be ideal. This is simply because people in the IRC community have historically not wanted to spend money on certificates from the so called “trusted” Certificate Authorities like we have seen on the web. Changing this from opt-in to opt-out is something that I would like to see happen, but it is not something that is going to be easy. We saw how many web sites got a “proper” certificate after the Mozilla guys made it slightly harder to actually mark a self-signed certificate as trusted. This was at first a very annoying move, but these days we rarely see self signed certificates when we browse around the web.

    A few days after the discussion on IRC, I was having dinner at Thomas’s place and I mentioned the discussion with the Quakenet hackers. Thomas knows a lot about security, privacy and DNS, and he is an avid Quakenet user, so it appeared more than obvious to take the discussion with him and hear what his take to the problem was. His suggestion was to take a look at DNSSEC and DANE and see if that could be used as a possible solution.

    Luckily for me, it was exactly what I was looking for.

    A few days after the dinner conversation, I pushed a patch to Irssi’s source code repository that enabled support for DANE validation of SSL certificates.

    Let’s have a look at how DANE works. This will hopefully give you enough knowledge to understand the basics of what is going on. I will document how to compile Irssi with DANE support enabled and test whether it works or not.

    What is DANE?

    DANE is an acronym for “DNS-Based Authentication of Named Entities” and comes with a protocol named TLSA. DANE is an internet standard and you can read the full technical specification of DANE in RFC6698, but hopefully, this article will give you an introduction to get started using DANE for your IRC servers right away. The concepts are totally protocol agnostic so this will work for other protocols than IRC as well, but it does require modification to the client software to work.

    DANE is a simple way of storing information about a certificate in the DNS system. Adding DNSSEC on top of the cake, gives you a very powerful way of validating certificates where the client relies on a trusted source (their ISP’s DNS server and DNSSEC) validating the information from the possibly eavesdropped IRC server.

    DANE is implemented as a new DNS resource record named TLSA. You can see an example of such record here from our test IRC server linked to the IRCsource IRC network:

    $ dig TLSA
    ; <<>> DiG 9.8.3-P1 <<>> TLSA
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38406
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 9
    ; IN TLSA
    ;; ANSWER SECTION: 3358 IN TLSA 3 0 1 9B954A014881108A9058DB80020909FFD8B4C44C6F41C8796B3A1EA4 3A444B94
    ;; AUTHORITY SECTION:      50607   IN  NS      50607   IN  NS      50607   IN  NS      50607   IN  NS      50607   IN  NS
    ;; ADDITIONAL SECTION:   7417    IN  A   36319   IN  AAAA    2a02:9d0:3002:1::2   25447   IN  A   31182   IN  A   28269   IN  AAAA    2001:678:5::6   31182   IN  A   28269   IN  AAAA    2a01:558:4000::3   25447   IN  A   28269   IN  AAAA    2001:6f8:3ad::1
    ;; Query time: 55 msec
    ;; SERVER:
    ;; WHEN: Sat Aug 10 13:16:23 2013
    ;; MSG SIZE  rcvd: 393

    Note: If your version of dig doesn’t recognize the TLSA type, you can easily replace it with TYPE52 like this: dig TYPE52.

    Notice how the port, 6697, and protocol, TCP, is part of the DNS query. This will be familiar for people who have worked with SRV DNS records.

    The interesting part of the output is the answer section where you see the following:

    3 0 1 9B954A014881108A9058DB80020909FFD8B4C44C6F41C8796B3A1EA4 3A444B94

    What does all of this mean?

    Let’s start out by looking at the format. The format for a TLSA reply is as following:

    <certificate usage> <selector> <matching type> <certificate association data>

    This means that our certificate usage field is 3, our selector is 0 and our matching type is 1. The associated data is the string "9B954A014881108A9058DB80020909FFD8B4C44C6F41C8796B3A1EA4 3A444B94".

    It is important to understand the semantics of these fields, because they will dictate how and if the client is going to do further validation of the certificate once the client has received it from the IRC daemon.

    Using 3 0 1 means that we are using a self-signed certificate and we will rely on DANE for validating the certificate only (3); that we are using the full certificate and not just the SubjectPublicKeyInfo part (0) and we will be using a hexadecimal encoded SHA256 hash of the DER-encoded certificate (1).

    To fully understand the various options available, I suggest you take a look at RFC 6698 section 2.1.

    Enable DANE Support for your IRC Server

    The first step you will have to take is to ensure that whoever runs your DNS servers supports both DNSSEC and TLSA records. In Denmark, a lot of users are using the free DNS hosting provider GratisDNS. GratisDNS supports both DNSSEC and TLSA records which makes setting this up a lot easier.

    Sadly, GratisDNS’ interface is currently only available in Danish, so you might have to look for other solutions available online.

    Once you have a DNS provider that supports DNSSEC and TLSA records, it is fairly easy to create the records. In our example, the following assumptions are made:

    1. You already have an IRC daemon running with SSL enabled on port 6697 and you have verified that it actually works as expected.

    2. Your certificate is self-signed, so you would like to rely on DANE support only for the validation. This means that the user will not see any self-signed certificate errors when connecting with certificate validation enabled.

    3. We will create a record using a SHA-256 hash of the certificate data. Feel free to use something stronger, if you are more crypto paranoid than I am.

    This means that our TLSA record will end up looking something similar to this: TLSA 3 0 1 <SHA-256 hash of the certificate data>

    This is basically going to be a description of the exact same setup that I am using for

    To find the SHA-256 value of your certificate, start by logging onto the server running the IRC daemon and find the directory that contains your certificate files. We are then going to find the SHA-256 value of the DER representation of our certificate:

    $ openssl x509 -in -outform DER | sha256sum
    9b954a014881108a9058db80020909ffd8b4c44c6f41c8796b3a1ea43a444b94  -

    This is the value we will be using in our final TLSA record, which now looks like the following: TLSA 3 0 1 9b954a014881108a9058db80020909ffd8b4c44c6f41c8796b3a1ea43a444b94

    Once you have added this record to your DNS zones, it is now time to actually test whether it works as expected.

    Building Irssi with DANE Support

    This part is tested on FreeBSD 9.2-PRERELEASE. Hopefully, it works for other people as well. Feel free to report any issues you may experience.

    1. Download the dnsval tarball from its download page. This is quite new software so I haven’t run into many distributions that have packages available, so we will assume that we have to compile it ourselves.

      $ mkdir dane
      $ cd dane
      $ fetch
      $ tar zxfv dnsval-2.0.tar.gz
      $ cd dnsval-2.0
      $ ./configure --prefix=/usr/local
      $ make
      $ sudo make install
    2. Next we will download the Irssi source code from the Git repository. We start by cloning the repository into our newly created dane directory:

      $ cd dane
      $ git clone git://
      $ cd irssi
    3. We bootstrap the build system:

      $ sh
    4. We configure our test Irssi client:

      $ CFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib" ./configure --enable-dane --with-perl=no

      Make sure that somewhere near the end of the output of the configure script contains:

      Building with DANE support ....... : yes

      Otherwise you should take a look at the config.log file and look for places where libval is mentioned and figure out why it doesn’t find the library correctly.

    5. Compile Irssi:

      $ make
    6. Fire up your new Irssi client and give it a spin:

      $ ./src/fe-text/irssi -!
    7. Try to connect to our test server,, using DANE:

      /connect -ssl -ssl_verify 6697

      If everything was done correctly, Irssi will now connect to the server, verify the signature of the certificate using TLSA and allow you to connect without seeing any self-signed certificate errors.

    DANE Enabled IRC Servers

    Here’s a list of IRC servers that supports DANE. If you are running a public IRC server and would like to see the server added here, feel free to drop me an email at with information about the server.


    IRCsource is a small network where people with a general interest in IRC hang out together to discuss and test various new concepts and ideas for IRC.

    • (SSL ports: 6697 and 9999)

    I will do my best to maintain this list of servers supporting DANE in the future.

    Next Stop?

    The next step for me is to start securing server-to-server links within the IRC networks with DANE. This will require some modifications to the IRC daemons themselves. I plan on looking into adding support for DANE in a personal feature branch of ircd-ratbox and some of its derivatives.


    I am unable to say if DANE support is what the IRC community will be adopting. The IRC community is very conservative in general so time will have to tell.

    If you believe you have found a bug in my code or have any troubles setting DANE up for your own IRC server, I will be more than happy to help. Drop me an email and I will take a look at it whenever I have time. Otherwise, feel free to poke me on IRC. My nickname is ahf and I am available on most of the “larger” IRC networks (EFnet, Freenode, IRCnet and Quakenet).

    All of this code will be available in the upcoming Irssi 0.8.16 release, but if you want to test it right away, my suggestion is to follow my guide from above and use Irssi directly from Git.

    Hopefully, we will see other IRC client and server hackers implementing DANE support in the nearby future. If you like what you have read here, please help me making this happen by spreading the word about the possibilities available for enhancing the SSL support in IRC clients as well as other SSL based online services.

    This is too easily implementable to be ignored.


    I would like to thank Thomas Steen Ramussen for being the originator of the idea and setting up the initial DNS server for testing purpose; Peter Larsen for expeditiously implementing TLSA support for GratisDNS; the guys for late night discussions about DANE; Mickey Fischer for testing the Irssi patches on Gentoo Linux with various options enabled and disabled; the DNSSEC-Tools Project for creating the libraries used and finally the rest of the Irssi team for reviewing the patches and coming with recommendations for my code.

    September 14, 2013 12:00 AM

    September 02, 2013

    Ciaran McCreesh

    Paludis 1.4.1 Released

    Paludis 1.4.1 has been released:

    • Compatibility with newer Boost.
    • Minor bug fixes and UI tweaks.

    by Ciaran McCreesh at September 02, 2013 01:00 PM

    June 27, 2013

    Ali Polatel

    Sandboxing Skype with sydbox-1

    There are various tools to provide enhanced restriction mechanisms under Linux. In case security is the major concern, these mechanisms need to be in the kernel level which in turn means specific configurations or in some cases modifications (in forms of patches etc.) to the Linux kernel. Some examples are AppArmor, Security Enhanced Linux, Tomoyo Linux, and Grsecurity. User space solutions are either not as flexible or not as secure depending on the use case scenario.

    We, at Exherbo, need a sandbox for misbehaving package builds. One should note that such misbehaviours can sometimes be rather fun (or not safe for work at times). I used the term misbehaving on purpose because this does not mean the sandbox itself can make the build environment totally secure. Linux has good old UNIX goodies like separate permissions for users, chroots and new shiny stuff like per-process namespaces to implement further restrictions.

    Exherbo’s practical solution to this issue is sydbox. With the upcoming version sydbox-1 - which is yet to be released - this solution can easily be adapted to different use cases.

    As I was browsing through Arch Linux Wiki pages I stumbled upon the Skype page which describes different approaches to restrict such close sourced applications.

    I am not claiming using sydbox-1 for this purpose is secure but it is most certainly practical. Here is my proof-of-concept attempt at sandboxing Skype using sydbox-1. Below is a sample sydbox-1 profile for use with Skype. You can also find it in sydbox-1.git under examples/ directory.

    # sydbox profile for Skype4
    # Sandboxing
    # Logging
    # /dev
    # /proc & /sys
    # nscd (glibc)
    # /etc
    # Libraries
    # Share dirs
    # Xorg/X11 & dbus
    # /tmp
    # Skype
    # Host specific configuration under /home
    # Skype specific configuration
    # Temporary files & caches
    # Networking
    # note: allow IPv4 and IPv6 by default since Skype operates on a P2P model.
    # You may further restrict access by only allowing access to SKYPENET,
    # Akamai and Microsoft Corporation together with your contact's IP
    # address.
    # Allow some external programs

    A couple of things to note:

    1. sydbox-1 is still in heavy development and the file format may change.
    2. This approach is not secure. Author claims no responsibility if Skype kills your goats.
    3. Three is the loneliest number since number two which is the loneliest number since the number one.

    Happy hacking!

    June 27, 2013 12:00 AM

    June 13, 2013

    Ali Polatel

    I Can Not Tell

    As the Garip poet Orhan Veli once wrote,

    Can you hear me if I cry,
    In my verses;
    Can you touch,
    My tears, with your hands?
    I hadn't known how songs were so lovely,
    And yet the words so inadequate
    Before I had fallen into this suffering.
    I know there is somewhere
    To say anything about which is possible;
    I am very close, I can hear;
    I can not tell...

    in his poem Anlatamıyorum (I Can Not Tell, translated by myself on 2013-06-13). Sometimes a photo may describe what we can’t describe with a thousand words.

    You know your government has failed, when your grandma starts to riot!

    Long story short, you know your government has failed, when your grandma starts to riot…

    Occupy Gezi! Diren Gezi!


    • 2013-06-14: Translation of the first quatrain was slightly modified.
    • 2013-06-16: More translation fixes.

    June 13, 2013 12:00 AM

    May 16, 2013

    Ciaran McCreesh

    Paludis 1.4.0 Released

    Paludis 1.4.0 has been released:

    • Tweaked ‘cave resolve’ output to add blank lines.
    • Support for libarchive 3.1.2.
    • Compatibility fixes for GCC 4.8.

    by Ciaran McCreesh at May 16, 2013 01:29 PM

    March 25, 2013

    Ciaran McCreesh

    Paludis 1.2.0 Released

    Paludis 1.2.0 has been released:

    • Bug fixes.
    • Dep specs can now use ‘[.key!=value]’. The behaviour of ‘<‘ and ‘>’ has changed: for key types where order comparisons don’t make sense, the match now always fails.
    • Various compiler-compatibility fixes.

    by Ciaran McCreesh at March 25, 2013 06:51 PM

    March 04, 2013

    Bryan Østergaard

    Looking for a few more volunteers

    It's that time of the year.. Only four days left before the big danish Open Source Days conference starts and we're tying up all the loose ends as quickly as possible.

    Things are looking great from my point of view but one of the things we need to sort out before the conference opens is all the different helper roles. And we're still looking for good wanting to be an active part of Open Source Days and get to know all the other great people involved.

    If you would like to take part in this you can sign up at Join Us and in return for helping out you get free entrance to the conference including the social event saturday night.

    by kloeri at March 04, 2013 11:09 PM

    February 22, 2013

    Ali Polatel

    Recent Linux changes to help sandboxing

    Linux kernel 3.8 has been released this week which reminded me to write about recent Linux kernel changes which may help in improving sydbox. Below is a short summary of new, and not so new, features merely to get myself to stop slacking and start coding again.

    Per-process namespace support

    Per-process namespace support is completed with linux-3.8. This feature provides a nice way to separate resources on a per-process basis, for example a process might see a set mountpoints, PID numbers, and network stack state, and a process in other namespace might see others. For more information see the Linux-3.8 Changes page on kernelnewbies and the Namespaces in Operation articles on LWN.


    New in linux-3.8, this ptrace(2) option makes the tracer send SIGKILL to tracees on exit. This is useful for ptrace(2) based sandboxes for which a resumed tracee is a security risk. See the related commit for more information.


    This is by far my favourite feature. Introduced with Linux kernel 3.5 and also known as seccomp mode 2 or user filters this feature lets you add basic system call filters expressed as Berkeley Packet Filter programs. Even though sydbox still has to use ptrace(2) to do more sophisticated argument checking, this feature removes the need to stop the tracee on every system call entry and exit which is a PITA especially when tracing multithreaded programs. sydbox-1 takes advantage of this feature using SECCOMP_RET_TRACE which signals the tracer with the new ptrace(2) event PTRACE_EVENT_SECCOMP.

    Here are some useful links:


    Probably even older than seccomp user filters, these ptrace requests allow the tracer to attach to tracee without trapping it or affecting its job control states. See, for more information.

    February 22, 2013 12:00 AM

    February 21, 2013

    Bryan Østergaard

    20.000 minutes

    20.000 minutes sounds like a lot but for sufficiently large projects with sharp deadlines it really isn't.

    Converted to a more manageable time scale it's roughly two weeks or roughly how much time until the Open Source Days conference opens. As some of you might know this is the second year I'm involved in organising this big open source conference.

    And just like last year it's an awesome experience but also very stressful with all the small things needing to fall into place for the conference to run smoothly. And unlike last year I haven't been sick so I'm getting to enjoy the full experience :)

    Having only two weeks left means really long hours every day while we scramble to close all the outstanding issues. But it also means we get to see a huge amount of things fall into place each day.

    Some of the things I'm excited about today:

    • Most of the talks are now announced on the website

    • The keynote talks are all confirmed. More on that later.

    • We've added several more sponsors

    The next two weeks should be very exciting and I'm sure the conference is going to be even better this year.

    See you all at the conference!

    by kloeri at February 21, 2013 11:13 PM

    February 15, 2013

    Ali Polatel

    The Wall

    As I took a sip from my tea, the room felt a bit different. Different in such a way that it enabled me to let my unconscious take over.

    The wall I was leaning against seemed to change. It was turning into a door. A door made of small curved mirrors… All paintings on the wall faded away slowly. There I was, left alone with a door to enter. Was this a question of bravery? “Temptation, temptation…” So I heard the voices sing. I must admit, I felt kind of scared. Like a baby felt giving birth to her first mother. Before I could change my mind, I quickly grabbed my book and opened the door. I was expecting a divine forest, green and huge. Quite the contrary, the door led me to another room with mirrors on all of its walls, ceiling and floor. I could see the reflection of everything in the room but not myself. The door had vanished and my book looked a lot different to me. What was it that I was to do here? What exactly did I leave behind? This thought made me smile, like a mother smiled while giving birth to her own mother…

    Leaving my book in a corner of the room, I observed the mirrors. Why was my reflection not there? In a room like this, how could I see what differences this journey might have made in me? After a couple of minutes, I was surprised to discover that I couldn’t see the reflections of the things that “touched” me. My clothes, my shoes, my earring… All became visible as I took them off. “The book!” I said, “where is it?” turning into the corner where I left it. Its reflection was still there. Looking at me and smiling like my mother smiled, giving birth to my grandmother…

    Somehow, I knew the cure was in this room but where? The endlessness, which the mirrors have formed, gave me an idea. Why was I thinking that the other side of the mirror was inaccessible to me? “Temptation, temptation…” So I heard the voices sing. I must admit, I felt kind of scared. Like a warrior felt, being slain by his new-born baby… Feeling I might have found the cure, I took a step into the mirror. There I saw my “other” self sitting in that room, looking at the wall, writing a truly odd story… I can’t say he was astonished though, seeing me standing against him, naked.

    February 15, 2013 12:00 AM

    February 02, 2013

    Ciaran McCreesh

    Paludis 1.0.0 Released

    Paludis 1.0.0 has been released:

    • EAPI 5 style subslot specs are allowed in user dependency specs.
    • We now support DWARF compression.

    by Ciaran McCreesh at February 02, 2013 03:14 PM

    November 16, 2012

    Ciaran McCreesh

    Paludis 0.82.0 Released

    Paludis 0.82.0 has been released:

    • Various EAPI 5 related fixes.

    by Ciaran McCreesh at November 16, 2012 11:46 PM

    October 23, 2012

    Ali Polatel

    Easy on the Eyes

    Writing with the intention to grow up:

    Rule 1: Stay out of the magical world. This your subconscious speaking.

    Rule 2: Never underestimate the power of goats.

    Rule 3: Pink Floyd after midnight is easy on the eyes.

    Rule ?: Numbers are bad.

    Rule: Actually they have no reason whatsoever to even exist.

    ?: No rule, no pain.

    Love: You are on the right path, Watson.

    Do not define sizeof(void *). Because in what you would call a primitive world you would only need love, pure, endless love.


    Now look at the sky, look at the river. Isn’t it good?

    If not, return to rule 3.

    October 23, 2012 12:00 AM

    October 19, 2012

    Ciaran McCreesh

    Paludis 0.80.2 Released

    Paludis 0.80.2 has been released:

    • Bug fixes.
    • Added ‘cave print-unmanaged-files’.

    by Ciaran McCreesh at October 19, 2012 02:17 PM

    October 13, 2012

    Ciaran McCreesh

    September 29, 2012

    Ali Polatel

    sydbox-1 is nearly there

    After nearly two years I began working on a sydbox replacement1 she is finally nearing completion. This post is meant both as a preliminary announcement and help request.

    sydbox-1 has been in ::arbor for sometime as sydbox-scm2 and paludis supports it since version 0.78.1. The git repository is hosted on exherbo.org3. Before going on to tell you about her I want to kindly ask you to help me with some tasks:

    • Proof read the manual page4. I am still unsure about the configuration file format and the magic command API so now is the time to share your ideas and views to help make sydbox-1 better.

    • For brave souls, unmask it and install it. Especially important is to run its tests. To do that you have to set the environment variable PALUDIS_DO_NOTHING_SANDBOXY5. You will notice that it doesn’t depend on pinktrace anymore. This is because sydbox-1 includes a rewrite of pinktrace which will eventually be released as pinktrace-1.

    • Once again for brave souls, use it on your system. I am especially interested in how it performs during the src_test phase of exhereseses so please make sure tests are enabled if you do so and report back any issues (accompanied with a poem of your choosing!). It is always a good idea to have a pbin of the package in question to easily rollback changes in case you hit a severe bug[^6].

    If you are bored, you can stop reading now. I will go on to introduce sydbox-1.


    I am not a professional programmer. However, I have gained many experiences after writing sydbox-0 and watching it perform as the default sandbox of Exherbo. sydbox-0 has many shortcomings and drawbacks which made it rather hard to maintain. Such as:

    • sydbox-0 was based on the now unmaintained catbox initially. There are many design issues which didn’t fit with our use cases for Exherbo.
    • Being GPL-2 licensed it was problematic to share code with the well-established ptrace(2) based projects like strace and truss (of FreeBSD). I have partially solved this problem by writing pinktrace - a BSD3 licensed library providing thin wrappers around certain ptrace(2) calls but this was not enough. (See below about pinktrace-easy)
    • Being a crucial part of the system set, dependencies like GLib was obviously a bad idea.
    • Over the years as sydbox-0 codebase grew there were unforeseen code maintenance problems making it difficult to add new features.

    Features of sydbox-1

    Below are main features of sydbox-1. You may consult the manual page³ for more information.

    • No external dependencies. GLib dependency is gone for good among with the ini-format configuration file. sydbox-1 uses JSON format for configuration.
    • Most of the ptrace(2) work is now abstracted by a callback-driven higher-level BSD3 licensed library called pinktrace-easy. This makes both the maintenance easier and code sharing with strace less problematic.
    • Well designed, well documented magic command API which fits in with the configuration file format and provides an easier experience during command line invocation.
    • Process dump can be obtained by sending sydbox-1 the SIGUSR1 signal (or SIGUSR2 for a more verbose dump). This makes it easier to debug sydbox hangs.
    • Better signal handling to make sydbox more immune to interrupts.
    • More powerful and configurable rsync-like pattern matching.
    • Support for secure computing mode aka seccomp[^7]. This requires Linux-3.5 or newer and CONFIG_SECCOMP=y and CONFIG_SECCOMP_FILTER=y kernel configuration options. sydbox-scm exheres has a seccomp option to pass --enable-seccomp to econf. This is one of the key features which may make sydbox-1 faster compared to sydbox-0 because in this mode sydbox only traces the sandboxed system calls. Tracing other commonly used system calls - think threaded applications calling sched_yield() - is therefore avoided.
    • Logging is easier to filter. This still needs some work though.
    • Port numbers can now be entered as service names which will be queried from the services(5) database.
    • Unsupported socket families can be whitelisted/blacklisted.
    • New magic commands exec/resume_if_match and exec/kill_if_match are added. These commands may be used to resume or kill matching binaries upon successful execution. Paludis has esandbox resume and esandbox kill commands as an interface for exheres-0 (Make sure esandbox api returns 1 before using them). See systemd.exlib as an example on how we can now restart services from within exhereseses without worrying about sandboxing.
    • Read sandboxing to prevent unwanted filesytem reads.
    • Black listing is now also supported in addition to white listing. This may be used to make an “allow by default and black list unwanted accesses” sandboxing policy.
    • Many bugs fixed, some new system calls are sandboxed.

    How can I thank you?

    Send me poems[^8]!

    be more convenient. [^6]: sydbox-1 has been tested for some time by kind people and I have heard about only one such issue so far but it is always a good idea to be cautious. [^7]: [^8]:

    1. She used to be called pandora in the early days. 

    2. Not sydbox-0-scm which is the old one. 



    5. Eventually sydbox-1 will install its tests so this phase is going to 

    September 29, 2012 12:00 AM

    September 22, 2012

    Ciaran McCreesh

    Paludis 0.80.0 Released

    Paludis 0.80.0 has been released:

    • EAPI 5 is supported.

    Filed under: paludis releases Tagged: paludis

    by Ciaran McCreesh at September 22, 2012 06:50 PM

    September 07, 2012

    Ciaran McCreesh

    Paludis 0.78.2 Released

    Paludis 0.78.2 has been released:

    • Bug fix: || ( ) dependencies under a non-enabled label are now handled sensibly.
    • Bug fix: the resolver no longer attempts to create binaries for accounts.
    • Bug fix: 0-scm is now ordered correctly.

    Filed under: paludis releases Tagged: paludis

    by Ciaran McCreesh at September 07, 2012 09:02 PM

    August 13, 2012

    Ciaran McCreesh

    Paludis 0.78.1 Released

    Paludis 0.78.1 has been released:

    • sydbox-1 is now supported.
    • Bug fix.

    Filed under: paludis releases Tagged: paludis

    by Ciaran McCreesh at August 13, 2012 10:44 AM

    March 13, 2012

    Bryan Østergaard

    Pictures from Open Source Days?

    This weekend saw yet another edition of the Open Source Days conference in Copenhagen. And despite a few small issues (most notably a large power outage taking out a big area of the city) most people really seemed to enjoy the conference.

    I also saw quite a few people taking pictures of the event and we'd love to see those pictures. Please send an email to or directly to me at if you would like to share your pictures.

    by kloeri at March 13, 2012 11:47 AM

    March 03, 2012

    Bryan Østergaard

    Looking for helpers for Open Source Days

    With the conference just a week away we're still looking for volunteers.

    Volunteering for Open Source Days means you'll get to know a lot of other open source interested people, broadening your network and you get to be an active part of the biggest open source event in Denmark.

    You'll typically have to work 2 x 3 hours at the conference but for the most part you can decide what areas you want to help with and we do our best to coordinate your shifts so they don't conflict with talks you find particularly interesting.

    As a thank you for your work we throw in conference tickets including the saturday night social event.

    Right now I'm particularly looking for people with some video experience. You don't need professional video experience but a little experience goes a long way towards making the setup go more smoothly. We will of course make sure that people on the video team gets the needed instructions so don't be afraid of signing up even if you have no prior experience. The most important thing is your interest and dedication as that's what's ultimately going to it a success.

    Besides volunteers for the video team we're also looking for a number of other people. There's too many different roles to mention them all here but we still need chairmen for example.

    Please contact me directly at if you want to volunteer for the video team. If you want to sign up for the many other roles you can do so using our sign up form.

    by kloeri at March 03, 2012 12:43 PM

    February 18, 2012

    Bryan Østergaard

    Open Source Days ticket sale now open

    The Open Source Days conference opened the ticket sale a couple days ago. You can buy tickets for the conference itself as well the many training courses we're arranging in the days before the conference.

    See for more information and pay attention to the early bird discount that ends about 5 days from now.

    Also note that while there's not that many abstracts on the website yet we're going to keep adding batches of new abstracts. There's going to be a lot of interesting talks so keep checking the website for new abstracts and other news.

    by kloeri at February 18, 2012 10:28 PM

    January 15, 2012

    Bryan Østergaard

    Open Source Days - Second call for speakers

    The second and final call for speakers just went out for the Open Source Days conference in Copenhagen, Denmark.

    Noteworthy news compared to the first call is:
    - We moved the conference a week to make sure we have plenty of room for speakers, visitors and sponsors. The conference is going to take place at march 10 and 11 with training happening on march 9.
    - We added information about conference size and being somewhat ambitious we're hoping to reach previous heights of 800-900 people.
    - Extended the deadline for talk proposals. Deadline is now january 27th.
    - User groups interested in a community booth also needs to start planning. Deadline is february 13th but you need to start thinking of activities, manning the booth and so on.

    More information and details to be found on

    Don't miss Denmarks biggest open source event!

    by kloeri at January 15, 2012 11:25 PM

    December 07, 2011

    Bryan Østergaard

    Open Source Days 2012: Call for speakers

    Open Source Days is Denmarks biggest open source conference and it's only 3 months away now. We are therefore looking for interesting speakers.

    The conference has two focus areas, namely:
    • startups (everything related to startups / small business and open source software)
    • green technology (recycling, monitoring etc.)
    Besides these two focus areas we also have several tracks with general technical talks. These tracks can cover everything from office packages to interesting new programming languages, network administration or other more technical areas.

    See for the full announcement.

    by kloeri at December 07, 2011 07:59 PM

    June 28, 2011

    Ali Polatel


    pinktrace-0.1.2 is released with a minor change to recognize Linux-3.0 and a new function pink_name_lookup_with_length()

    June 28, 2011 12:00 AM

    June 09, 2011

    Ali Polatel

    Multilingual Site using Jekyl & Liquid

    Here is a tip to make a multilingual site using Liquid templates and Jekyll relatively easily and with few duplications.

    I will be giving examples from my own experience for

    Start by specifying the language in YAML Front Matter using a custom tag like lang:

        layout: default
        title: Projelerim
        lang: tr

    Here lang is just a custom tag which we can make use via page.lang variable from within our pages.

    Next, change your _layouts/ and _includes/ to be multilingual using simple case statements:

        <h3>{% case page.lang %}{% when 'tr' %}Etiket Bulutu{% else %}Tag Cloud{% endcase %}</h3>

    Make note of the else statements which we use to specify a default language. So pages without the lang tag will be in English.

    That’s all!

    For more information, feel free to play with the source code of my blog:

    Now I’ll be writing a Turkish translation of this post and see if it works :)

    Note to self: writing literal Liquid inside Liquid requires some weird syntax mentioned here.

    June 09, 2011 12:00 AM

    January 31, 2011

    Ingmar Vanhassel

    We are going to FOSDEM!

    Like previous years, a few of the Exherbo developers will be coming to FOSDEM!

    If you’ve been dying to meet Alexander Færøy, Bo Ørsted Andresen, Bryan Østergaard (or if you really want to know what an emu using a linux computer looks like), Jochen Maes or myself, find us at the beer event, or anywhere at the conference! Feel free to hop by in #exherbo to find our whereabouts.

    See you there!

    by ingmarv at January 31, 2011 04:17 PM

    January 19, 2011

    Ali Polatel

    For Hrant

    19th January 2007 was a black day. Journalist Hrant Dink was assassinated by a Turkish nationalist. Hrant was a brave man who refused to remain silent despite threats on his life. Today - after four years - the pain is still fresh. The anger towards fascism and the will to escape from our stinking black-minded ignorance keeps growing.

    Just like other intellectuals of this land whose lives were taken away - Ahmet Taner Kışlalı, Bahriye Üçok and Uğur Mumcu to name a few - he has a place in our hearts. Their ideas and thoughts shed light on our path to peace.

    January 19, 2011 12:00 AM

    December 14, 2010

    Ali Polatel

    Doxygen and Git

    If you have a project using Doxygen for documentation and Git for source control management you may use this trick in doxygen.conf:

    FILE_VERSION_FILTER = "/bin/sh -c 'git log --pretty=\"format:%ci\" -1 \"${1}\" || echo no git'"

    This will show date of the last commit in the header:


    You can give even more useful information using git’s pretty formats:

    FILE_VERSION_FILTER = "/bin/sh -c 'git log --pretty=\"format:%ci, author:%aN <%aE>, commit:%h\" -1 \"${1}\" || echo no git'"

    This looks like:


    Note this may vastly increase runtime of Doxygen if you have lots of files to process, but I think it is a nice way to give information to project users.

    December 14, 2010 12:00 AM

    October 18, 2010

    Bryan Østergaard

    Being different

    In Exherbo we like to do things a bit differently from everybody else. And today I got inspired by some recent experiences with users not quite reading all the documentation that Exherbo developers expected them to and wanting to change our documentation in a slightly different direction than we wanted to.

    The usual solutions to such problems are either to reject patches, possibly marking them as invalid, or yell at people until they go away or start doing what you want them to. I went for a very different option though and tried to document what we expect from users (or developers as we prefer to see them) and the result of that is now added to our website.

    All the feedback I've had so far has been very positive both from very experienced Exherbo developers as well as contributors very new to the project. I hope I can refine it a bit more over the next few days so feel free to add your comments. It's supposed to help everybody no matter their level of experience as developers or with the Exherbo project so I'd like to hear from lots of people.

    by kloeri at October 18, 2010 11:07 PM

    October 02, 2010

    Ali Polatel

    Updates from pinktrace.git

    Here are some new stuff that has been cooking in pinktrace.git:

    ARM port

    I’ve ported PinkTrace to ARM. Thanks to dagger and arachnist who have given me access to their ARM boxes. If you want to know the technical details of this port, have a look at the file pink-linux-trace-arm.c.

    Haskell bindings

    I’ve started writing Haskell bindings. This is a work in progress which you can find in the haskell branch.

    Sydbox & PinkTrace

    Sydbox requires PinkTrace in the next branch. I’ll merge next to master after I’m done with testing, for which you may be of help.


    I’ve also written a TODO file and added a link to it from Exherbo’s project-ideas page.

    This is all for now!

    I’ve started a new university in a different city by the way and don’t have a stable internet connection these days. So if you’re trying to contact me via IRC and I’m not responding, try email.

    October 02, 2010 12:00 AM

    August 05, 2010

    Ali Polatel

    PinkTrace relicensed to BSD-3

    I’ve relicensed pinktrace from LGPL-2.1 to BSD-3. This should fit this project better as it uses some code from projects like strace and FreeBSD’s truss.

    August 05, 2010 12:00 AM

    July 01, 2010

    Ali Polatel

    Editing SPL playlists using VIM

    I’ve bought a Samsung YP-U4 media player recently. It can play Vorbis files, in addition to mp3 files.

    One problem I’ve faced was its weird format for playlists. To edit these files with VIM I’ve edited my .vimrc like this:

        augroup spl
        au BufRead,BufNewFile *.spl setlocal bomb ff=dos fenc=utf-16le
        augroup END " augroup spl

    Another thing to note is </tt> is used as the path separator. Here’s how a playlist looks like:

    VERSION 1.00

    July 01, 2010 12:00 AM

    June 18, 2010

    Bryan Østergaard

    Has anyone seen my pants?

    They were last seen at JFK International Airport in New York last night and I miss them already. Please contact baggage claim if you've seen them and tell them to send the pants to Rochester International Airport where JetBlue is looking for them.

    Or just bring them to FOSSCON tomorrow :)

    by kloeri at June 18, 2010 03:02 PM