<?xml version="1.0" encoding="utf-8"?>
<!-- name="generator" content="pyblosxom/1.4.3 01/10/2008" -->
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">

<rss version="0.91">
<channel>
<title>PANIKRAUM mit PUMPGUN   </title>
<link>http://0pointer.de/blog</link>
<description>Lennart's Blog</description>
<language>en</language>
<item>
  <title>The Case for the /usr Merge</title>
  <link>http://0pointer.de/blog/projects/the-usr-merge.html</link>
  <description><![CDATA[

<p>One of the features of Fedora 17 is <a
href="https://fedoraproject.org/wiki/Features/UsrMove">the /usr merge</a>, put
forward by Harald Hoyer and Kay Sievers<sup>[1]</sup>. In the time since this
feature has been proposed repetitive discussions took place all over the various
Free Software communities, and usually the same questions were asked: what the reasons
behind this feature were, and whether it makes sense to adopt the same scheme for
distribution XYZ, too.</p>

<p>Especially in the Non-Fedora world it appears to be socially unacceptable to
actually have a look at the <a
href="https://fedoraproject.org/wiki/Features/UsrMove">Fedora feature page</a>
(where many of the questions are already brought up and answered) which is very unfortunate. To
improve the situation I spent some time today to summarize the reasons for the
/usr merge independently. I'd hence like to direct you to this new page I put
up which tries to summarize the reasons for this, with an emphasis on the
compatibility point of view:</p>

<p><a href="http://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge">The Case for the /usr Merge</a></p>

<p>Note that even though this page is in the systemd wiki, what it covers is
mostly orthogonal to systemd. systemd supports both systems with a merged /usr
and with a split /usr, and the /usr merge should be interesting for non-systemd
distributions as well.</p>

<p>Primarily I put this together to have a nice place to point all those folks
who continue to write me annoyed emails, even though I am actually not even
working on all of this...</p>

<p>Enjoy the read!</p>

<p><b><small>Footnotes:</small></b></p>

<p><small>[1] And not actually by me, I am just a supportive spectator and am
not doing any work on it. Unfortunately some tech press folks created the false
impression I was behind this. But credit where credit is due, this is all
Harald's and Kay's work.</small></p>

]]></description>
</item>

	    <item>
      <title>The Case for the /usr Merge</title>
      <link>http://0pointer.de/blog/index.rss/projects/the-usr-merge</link>
      <description>
<p>One of the features of Fedora 17 is <a
href="https://fedoraproject.org/wiki/Features/UsrMove">the /usr merge</a>, put
forward by Harald Hoyer and Kay Sievers<sup>[1]</sup>. In the time since this
feature has been proposed repetitive discussions took place all over the various
Free Software communities, and usually the same questions were asked: what the reasons
behind this feature were, and whether it makes sense to adopt the same scheme for
distribution XYZ, too.</p>

<p>Especially in the Non-Fedora world it appears to be socially unacceptable to
actually have a look at the <a
href="https://fedoraproject.org/wiki/Features/UsrMove">Fedora feature page</a>
(where many of the questions are already brought up and answered) which is very unfortunate. To
improve the situation I spent some time today to summarize the reasons for the
/usr merge independently. I'd hence like to direct you to this new page I put
up which tries to summarize the reasons for this, with an emphasis on the
compatibility point of view:</p>

<p><a href="http://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge">The Case for the /usr Merge</a></p>

<p>Note that even though this page is in the systemd wiki, what it covers is
mostly orthogonal to systemd. systemd supports both systems with a merged /usr
and with a split /usr, and the /usr merge should be interesting for non-systemd
distributions as well.</p>

<p>Primarily I put this together to have a nice place to point all those folks
who continue to write me annoyed emails, even though I am actually not even
working on all of this...</p>

<p>Enjoy the read!</p>

<p><b><small>Footnotes:</small></b></p>

<p><small>[1] And not actually by me, I am just a supportive spectator and am
not doing any work on it. Unfortunately some tech press folks created the false
impression I was behind this. But credit where credit is due, this is all
Harald's and Kay's work.</small></p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2012-01-26T21:29:35Z</dc:date>
    </item>
<item>
  <title>Plumbers Wishlist, The Third Edition, a.k.a. &quot;The Thank You Edition&quot;</title>
  <link>http://0pointer.de/blog/projects/plumbers-wishlist-3.html</link>
  <description><![CDATA[

<p>Last October <a
href="http://0pointer.de/blog/projects/plumbers-wishlist-2.html">we published a
wishlist for plumbing related features</a> we'd like to see added to the Linux
kernel. Three months later it's time to publish a short update, and explain
what has been implemented in the kernel, what people have started working on,
and what's still missing.</p>

<p>The full, updated list is <a
href="https://docs.google.com/document/pub?id=1RmJrtIoTnivkmR9KCqfJNBnEll4X9Jtu0xj5w6hFGs8">available
on Google Docs</a>.</p>

<p>In general, I must say that the list turned out to be a great success. It
shows how awesome the Open Source community is: Just ask nicely and there's a
good chance they'll fulfill your wishes! Thank you very much, Linux
community!</p>

<p>We'd like to thank everybody who worked on any of the features on that list:
Lucas De Marchi, Andi Kleen, Dan Ballard, Li Zefan, Kirill A. Shutemov,
Davidlohr Bueso, Cong Wang, Lennart Poettering, Kay Sievers.</p>

<p>Of the items on the list 5 have been fully implemented and are already part
of a released kernel, or already merged for inclusion for the next kernels
being released.</p>

<p>For 4 further items patches have been posted, and I am hoping they'll get
merged eventually. Davidlohr, Wang, Zefan, Kirill, it would be great if you'd
continue working on your patches, as we think they are following the right
approach<sup>[1]</sup> even if there was some opposition to them on LKML. So,
please keep pushing to solve the outstanding issues and thanks for your work so far!</p>

<p><b><small>Footnotes</small></b></p>

<p><small>[1] Yes, I still believe that tmpfs quota should be implemented via
resource limits, as everything else wouldn't work, as we don't want to
implement complex and fragile userspace infrastructure to racily upload complex
quota data for all current and future UIDs ever used on the system into each
tmpfs mount point at mount time.</small></p>


]]></description>
</item>

	    <item>
      <title>Plumbers Wishlist, The Third Edition, a.k.a. "The Thank You Edition"</title>
      <link>http://0pointer.de/blog/index.rss/projects/plumbers-wishlist-3</link>
      <description>
<p>Last October <a
href="http://0pointer.de/blog/projects/plumbers-wishlist-2.html">we published a
wishlist for plumbing related features</a> we'd like to see added to the Linux
kernel. Three months later it's time to publish a short update, and explain
what has been implemented in the kernel, what people have started working on,
and what's still missing.</p>

<p>The full, updated list is <a
href="https://docs.google.com/document/pub?id=1RmJrtIoTnivkmR9KCqfJNBnEll4X9Jtu0xj5w6hFGs8">available
on Google Docs</a>.</p>

<p>In general, I must say that the list turned out to be a great success. It
shows how awesome the Open Source community is: Just ask nicely and there's a
good chance they'll fulfill your wishes! Thank you very much, Linux
community!</p>

<p>We'd like to thank everybody who worked on any of the features on that list:
Lucas De Marchi, Andi Kleen, Dan Ballard, Li Zefan, Kirill A. Shutemov,
Davidlohr Bueso, Cong Wang, Lennart Poettering, Kay Sievers.</p>

<p>Of the items on the list 5 have been fully implemented and are already part
of a released kernel, or already merged for inclusion for the next kernels
being released.</p>

<p>For 4 further items patches have been posted, and I am hoping they'll get
merged eventually. Davidlohr, Wang, Zefan, Kirill, it would be great if you'd
continue working on your patches, as we think they are following the right
approach<sup>[1]</sup> even if there was some opposition to them on LKML. So,
please keep pushing to solve the outstanding issues and thanks for your work so far!</p>

<p><b><small>Footnotes</small></b></p>

<p><small>[1] Yes, I still believe that tmpfs quota should be implemented via
resource limits, as everything else wouldn't work, as we don't want to
implement complex and fragile userspace infrastructure to racily upload complex
quota data for all current and future UIDs ever used on the system into each
tmpfs mount point at mount time.</small></p>

</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2012-01-20T20:26:32Z</dc:date>
    </item>
<item>
  <title>systemd for Administrators, Part XII</title>
  <link>http://0pointer.de/blog/projects/security.html</link>
  <description><![CDATA[

<p>Here's <a href="http://0pointer.de/blog/projects/inetd.html">the</a> <a
href="http://0pointer.de/blog/projects/instances.html">twelfth</a> <a
href="http://0pointer.de/blog/projects/on-etc-sysinit.html">installment</a>
<a
href="http://0pointer.de/blog/projects/the-new-configuration-files.html">of</a>

<a href="http://0pointer.de/blog/projects/blame-game.html">my</a> <a
href="http://0pointer.de/blog/projects/changing-roots">ongoing</a> <a
href="http://0pointer.de/blog/projects/three-levels-of-off.html">series</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-4.html">on</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">systemd</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-2.html">for</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-1.html">Administrators</a>:</p>

<h4>Securing Your Services</h4>

<p>One of the core features of Unix systems is the idea of privilege separation
between the different components of the OS. Many system services run under
their own user IDs thus limiting what they can do, and hence the impact they
may have on the OS in case they get exploited.</p>

<p>This kind of privilege separation only provides very basic protection
however, since in general system services run this way can still do at least as
much as a normal local users, though not as much as root. For security purposes
it is however very interesting to limit even further what services can do, and
shut them off a couple of things that normal users are allowed to do.</p>

<p>A great way to limit the impact of services is by employing MAC technologies
such as SELinux. If you are interested to secure down your server, running
SELinux is a very good idea. systemd enables developers and administrators to
apply additional restrictions to local services independently of a MAC. Thus,
regardless whether you are able to make use of SELinux you may still enforce
certain security limits on your services.</p>

<p>In this iteration of the series we want to focus on a couple of these
security features of systemd and how to make use of them in your services.
These features take advantage of a couple of Linux-specific technologies that have
been available in the kernel for a long time, but never have been exposed in a
widely usable fashion. These systemd features have been designed to be as easy to use
as possible, in order to make them attractive to administrators and upstream
developers:</p>

<ul>
<li>Isolating services from the network</li>
<li>Service-private <tt>/tmp</tt></li>
<li>Making directories appear read-only or inaccessible to services</li>
<li>Taking away capabilities from services</li>
<li>Disallowing forking, limiting file creation for services</li>
<li>Controlling device node access of services</li>
</ul>

<p>All options described here are documented in systemd's man pages, notably <a
href="http://0pointer.de/public/systemd-man/systemd.exec.html">systemd.exec(5)</a>.
Please consult these man pages for further details.</p>

<p>All these options are available on all systemd systems, regardless if
SELinux or any other MAC is enabled, or not.</p>

<p>All these options are relatively cheap, so if in doubt use them. Even if you
might think that your service doesn't write to <tt>/tmp</tt> and hence enabling
<tt>PrivateTmp=yes</tt> (as described below) might not be necessary, due to
today's complex software it's still beneficial to enable this feature, simply
because libraries you link to (and plug-ins to those libraries) which you do
not control might need temporary files after all. Example: you never know what
kind of NSS module your local installation has enabled, and what that NSS module
does with <tt>/tmp</tt>.</p>

<p>These options are hopefully interesting both for administrators to secure
their local systems, and for upstream developers to ship their services secure
by default.  We strongly encourage upstream developers to consider using these
options by default in their upstream service units. They are very easy to make
use of and have major benefits for security.</p>

<h4>Isolating Services from the Network</h4>

<p>A very simple but powerful configuration option you may use in systemd
service definitions is <tt>PrivateNetwork=</tt>:</p>

<pre>...
[Service]
ExecStart=...
PrivateNetwork=yes
...</pre>

<p>With this simple switch a service and all the processes it consists of are
entirely disconnected from any kind of networking. Network interfaces became
unavailable to the processes, the only one they'll see is the loopback device
"lo", but it is isolated from the real host loopback. This is a very powerful
protection from network attacks.</p>

<p><b>Caveat:</b> Some services require the network to be operational. Of
course, nobody would consider using <tt>PrivateNetwork=yes</tt> on a
network-facing service such as Apache. However even for non-network-facing
services network support might be necessary and not always obvious. Example: if
the local system is configured for an LDAP-based user database doing glibc name
lookups with calls such as <tt>getpwnam()</tt> might end up resulting in network access.
That said, even in those cases it is more often than not OK to use
<tt>PrivateNetwork=yes</tt> since user IDs of system service users are required to
be resolvable even without any network around. That means as long as the only
user IDs your service needs to resolve are below the magic 1000 boundary using
<tt>PrivateNetwork=yes</tt> should be OK.</p>

<p>Internally, this feature makes use of network namespaces of the kernel. If
enabled a new network namespace is opened and only the loopback device
configured in it.</p>

<h4>Service-Private /tmp</h4>

<p>Another very simple but powerful configuration switch is
<tt>PrivateTmp=</tt>:</p>

<pre>...
[Service]
ExecStart=...
PrivateTmp=yes
...</pre>

<p>If enabled this option will ensure that the <tt>/tmp</tt> directory the
service will see is private and isolated from the host system's <tt>/tmp</tt>.
<tt>/tmp</tt> traditionally has been a shared space for all local services and
users. Over the years it has been a major source of security problems for a
multitude of services. Symlink attacks and DoS vulnerabilities due to guessable
<tt>/tmp</tt> temporary files are common. By isolating the service's
<tt>/tmp</tt> from the rest of the host, such vulnerabilities become moot.</p>

<p>For Fedora 17 a <a
href="https://fedoraproject.org/wiki/Features/ServicesPrivateTmp">feature has
been accepted</a> in order to enable this option across a large number of
services.</p>

<p><b>Caveat:</b> Some services actually misuse <tt>/tmp</tt> as a location
for IPC sockets and other communication primitives, even though this is almost
always a vulnerability (simply because if you use it for communication you need
guessable names, and guessable names make your code vulnerable to DoS and symlink
attacks) and <tt>/run</tt> is the much safer replacement for this, simply
because it is not a location writable to unprivileged processes. For example,
X11 places it's communication sockets below <tt>/tmp</tt> (which is actually
secure -- though still not ideal -- in this exception since it does so in a
safe subdirectory which is created at early boot.) Services which need to
communicate via such communication primitives in <tt>/tmp</tt> are no
candidates for <tt>PrivateTmp=</tt>. Thankfully these days only very few
services misusing <tt>/tmp</tt> like this remain.</p>

<p>Internally, this feature makes use of file system namespaces of the kernel.
If enabled a new file system namespace is opened inheritng most of the host
hierarchy with the exception of <tt>/tmp</tt>.</p>

<h4>Making Directories Appear Read-Only or Inaccessible to Services</h4>

<p>With the <tt>ReadOnlyDirectories=</tt> and <tt>InaccessibleDirectories=</tt>
options it is possible to make the specified directories inaccessible for
writing resp. both reading and writing to the service:</p>

<pre>...
[Service]
ExecStart=...
InaccessibleDirectories=/home
ReadOnlyDirectories=/var
...
</pre>

<p>With these two configuration lines the whole tree below <tt>/home</tt>
becomes inaccessible to the service (i.e. the directory will appear empty and
with 000 access mode), and the tree below <tt>/var</tt> becomes read-only.</p>

<p><b>Caveat:</b> Note that <tt>ReadOnlyDirectories=</tt> currently is not
recursively applied to submounts of the specified directories (i.e. mounts below
<tt>/var</tt> in the example above stay writable). This is likely to get fixed
soon.</p>

<p>Internally, this is also implemented based on file system namspaces.</p>

<h4>Taking Away Capabilities From Services</h4>

<p>Another very powerful security option in systemd is
<tt>CapabilityBoundingSet=</tt> which allows to limit in a relatively fine
grained fashion which kernel capabilities a service started retains:</p>

<pre>...
[Service]
ExecStart=...
CapabilityBoundingSet=CAP_CHOWN CAP_KILL
...
</pre>

<p>In the example above only the CAP_CHOWN and CAP_KILL capabilities are
retained by the service, and the service and any processes it might create have
no chance to ever acquire any other capabilities again, not even via setuid
binaries. The list of currently defined capabilities is available in <a
href="http://linux.die.net/man/7/capabilities">capabilities(7)</a>.
Unfortunately some of the defined capabilities are overly generic (such as
CAP_SYS_ADMIN), however they are still a very useful tool, in particular for
services that otherwise run with full root privileges.</p>

<p>To identify precisely which capabilities are necessary for a service to run
cleanly is not always easy and requires a bit of testing. To simplify this
process a bit, it is possible to blacklist certain capabilities that are
definitely not needed instead of whitelisting all that might be needed. Example: the
CAP_SYS_PTRACE is a particularly powerful and security relevant capability
needed for the implementation of debuggers, since it allows introspecting and
manipulating any local process on the system. A service like Apache obviously
has no business in being a debugger for other processes, hence it is safe to
remove the capability from it:</p>

<pre>...
[Service]
ExecStart=...
CapabilityBoundingSet=~CAP_SYS_PTRACE
...</pre>

<p>The <tt>~</tt> character the value assignment here is prefixed with inverts
the meaning of the option: instead of listing all capabalities the service
will retain you may list the ones it will not retain.</p>

<p><b>Caveat:</b> Some services might react confused if certain capabilities are
made unavailable to them. Thus when determining the right set of capabilities
to keep around you need to do this carefully, and it might be a good idea to talk
to the upstream maintainers since they should know best which operations a
service might need to run successfully.</p>

<p><b>Caveat 2:</b> <a
href="https://forums.grsecurity.net/viewtopic.php?f=7&amp;t=2522">Capabilities are
not a magic wand.</a> You probably want to combine them and use them in
conjunction with other security options in order to make them truly useful.</p>

<p>To easily check which processes on your system retain which capabilities use
the <tt>pscap</tt> tool from the <tt>libcap-ng-utils</tt> package.</p>

<p>Making use of systemd's <tt>CapabilityBoundingSet=</tt> option is often a
simple, discoverable and cheap replacement for patching all system daemons
individually to control the capability bounding set on their own.</p>

<h4>Disallowing Forking, Limiting File Creation for Services</h4>

<p>Resource Limits may be used to apply certain security limits on services
being run. Primarily, resource limits are useful for resource control (as the
name suggests...) not so much access control. However, two of them can be
useful to disable certain OS features: RLIMIT_NPROC and RLIMIT_FSIZE may be
used to disable forking and disable writing of any files with a size >
0:</p>

<pre>...
[Service]
ExecStart=...
LimitNPROC=1
LimitFSIZE=0
...</pre>

<p>Note that this will work only if the service in question drops privileges
and runs under a (non-root) user ID of its own or drops the CAP_SYS_RESOURCE
capability, for example via <tt>CapabilityBoundingSet=</tt> as discussed above.
Without that a process could simply increase the resource limit again thus
voiding any effect.</p>

<p><b>Caveat:</b> <tt>LimitFSIZE=</tt> is pretty brutal. If the service
attempts to write a file with a size > 0, it will immeidately be killed with
the SIGXFSZ which unless caught terminates the process. Also, creating files
with size 0 is still allowed, even if this option is used.</p>

<p>For more information on these and other resource limits, see <a
href="http://linux.die.net/man/2/setrlimit">setrlimit(2)</a>.</p>

<h4>Controlling Device Node Access of Services</h4>

<p>Devices nodes are an important interface to the kernel and its drivers.
Since drivers tend to get much less testing and security checking than the core
kernel they often are a major entry point for security hacks. systemd allows
you to control access to devices individually for each service:</p>

<pre>...
[Service]
ExecStart=...
DeviceAllow=/dev/null rw
...</pre>

<p>This will limit access to <tt>/dev/null</tt> and only this device node,
disallowing access to any other device nodes.</p>

<p>The feature is implemented on top of the <tt>devices</tt> cgroup controller.</p>

<h4>Other Options</h4>

<p>Besides the easy to use options above there are a number of other security
relevant options available. However they usually require a bit of preparation
in the service itself and hence are probably primarily useful for upstream
developers. These options are <tt>RootDirectory=</tt> (to set up
<tt>chroot()</tt> environments for a service) as well as <tt>User=</tt> and
<tt>Group=</tt> to drop privileges to the specified user and group. These
options are particularly useful to greatly simplify writing daemons, where all
the complexities of securely dropping privileges can be left to systemd, and
kept out of the daemons themselves.</p>

<p>If you are wondering why these options are not enabled by default: some of
them simply break seamntics of traditional Unix, and to maintain compatibility
we cannot enable them by default. e.g. since traditional Unix enforced that
<tt>/tmp</tt> was a shared namespace, and processes could use it for IPC we
cannot just go and turn that off globally, just because <tt>/tmp</tt>'s role in
IPC is now replaced by <tt>/run</tt>.</p>

<p>And that's it for now. If you are working on unit files for upstream or in
your distribution, please consider using one or more of the options listed
above. If you service is secure by default by taking advantage of these options
this will help not only your users but also make the Internet a safer
place.</p>

]]></description>
</item>

	    <item>
      <title>systemd for Administrators, Part XII</title>
      <link>http://0pointer.de/blog/index.rss/projects/security</link>
      <description>
<p>Here's <a href="http://0pointer.de/blog/projects/inetd.html">the</a> <a
href="http://0pointer.de/blog/projects/instances.html">twelfth</a> <a
href="http://0pointer.de/blog/projects/on-etc-sysinit.html">installment</a>
<a
href="http://0pointer.de/blog/projects/the-new-configuration-files.html">of</a>

<a href="http://0pointer.de/blog/projects/blame-game.html">my</a> <a
href="http://0pointer.de/blog/projects/changing-roots">ongoing</a> <a
href="http://0pointer.de/blog/projects/three-levels-of-off.html">series</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-4.html">on</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">systemd</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-2.html">for</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-1.html">Administrators</a>:</p>

<h4>Securing Your Services</h4>

<p>One of the core features of Unix systems is the idea of privilege separation
between the different components of the OS. Many system services run under
their own user IDs thus limiting what they can do, and hence the impact they
may have on the OS in case they get exploited.</p>

<p>This kind of privilege separation only provides very basic protection
however, since in general system services run this way can still do at least as
much as a normal local users, though not as much as root. For security purposes
it is however very interesting to limit even further what services can do, and
shut them off a couple of things that normal users are allowed to do.</p>

<p>A great way to limit the impact of services is by employing MAC technologies
such as SELinux. If you are interested to secure down your server, running
SELinux is a very good idea. systemd enables developers and administrators to
apply additional restrictions to local services independently of a MAC. Thus,
regardless whether you are able to make use of SELinux you may still enforce
certain security limits on your services.</p>

<p>In this iteration of the series we want to focus on a couple of these
security features of systemd and how to make use of them in your services.
These features take advantage of a couple of Linux-specific technologies that have
been available in the kernel for a long time, but never have been exposed in a
widely usable fashion. These systemd features have been designed to be as easy to use
as possible, in order to make them attractive to administrators and upstream
developers:</p>

<ul>
<li>Isolating services from the network</li>
<li>Service-private <tt>/tmp</tt></li>
<li>Making directories appear read-only or inaccessible to services</li>
<li>Taking away capabilities from services</li>
<li>Disallowing forking, limiting file creation for services</li>
<li>Controlling device node access of services</li>
</ul>

<p>All options described here are documented in systemd's man pages, notably <a
href="http://0pointer.de/public/systemd-man/systemd.exec.html">systemd.exec(5)</a>.
Please consult these man pages for further details.</p>

<p>All these options are available on all systemd systems, regardless if
SELinux or any other MAC is enabled, or not.</p>

<p>All these options are relatively cheap, so if in doubt use them. Even if you
might think that your service doesn't write to <tt>/tmp</tt> and hence enabling
<tt>PrivateTmp=yes</tt> (as described below) might not be necessary, due to
today's complex software it's still beneficial to enable this feature, simply
because libraries you link to (and plug-ins to those libraries) which you do
not control might need temporary files after all. Example: you never know what
kind of NSS module your local installation has enabled, and what that NSS module
does with <tt>/tmp</tt>.</p>

<p>These options are hopefully interesting both for administrators to secure
their local systems, and for upstream developers to ship their services secure
by default.  We strongly encourage upstream developers to consider using these
options by default in their upstream service units. They are very easy to make
use of and have major benefits for security.</p>

<h4>Isolating Services from the Network</h4>

<p>A very simple but powerful configuration option you may use in systemd
service definitions is <tt>PrivateNetwork=</tt>:</p>

<pre>...
[Service]
ExecStart=...
PrivateNetwork=yes
...</pre>

<p>With this simple switch a service and all the processes it consists of are
entirely disconnected from any kind of networking. Network interfaces became
unavailable to the processes, the only one they'll see is the loopback device
"lo", but it is isolated from the real host loopback. This is a very powerful
protection from network attacks.</p>

<p><b>Caveat:</b> Some services require the network to be operational. Of
course, nobody would consider using <tt>PrivateNetwork=yes</tt> on a
network-facing service such as Apache. However even for non-network-facing
services network support might be necessary and not always obvious. Example: if
the local system is configured for an LDAP-based user database doing glibc name
lookups with calls such as <tt>getpwnam()</tt> might end up resulting in network access.
That said, even in those cases it is more often than not OK to use
<tt>PrivateNetwork=yes</tt> since user IDs of system service users are required to
be resolvable even without any network around. That means as long as the only
user IDs your service needs to resolve are below the magic 1000 boundary using
<tt>PrivateNetwork=yes</tt> should be OK.</p>

<p>Internally, this feature makes use of network namespaces of the kernel. If
enabled a new network namespace is opened and only the loopback device
configured in it.</p>

<h4>Service-Private /tmp</h4>

<p>Another very simple but powerful configuration switch is
<tt>PrivateTmp=</tt>:</p>

<pre>...
[Service]
ExecStart=...
PrivateTmp=yes
...</pre>

<p>If enabled this option will ensure that the <tt>/tmp</tt> directory the
service will see is private and isolated from the host system's <tt>/tmp</tt>.
<tt>/tmp</tt> traditionally has been a shared space for all local services and
users. Over the years it has been a major source of security problems for a
multitude of services. Symlink attacks and DoS vulnerabilities due to guessable
<tt>/tmp</tt> temporary files are common. By isolating the service's
<tt>/tmp</tt> from the rest of the host, such vulnerabilities become moot.</p>

<p>For Fedora 17 a <a
href="https://fedoraproject.org/wiki/Features/ServicesPrivateTmp">feature has
been accepted</a> in order to enable this option across a large number of
services.</p>

<p><b>Caveat:</b> Some services actually misuse <tt>/tmp</tt> as a location
for IPC sockets and other communication primitives, even though this is almost
always a vulnerability (simply because if you use it for communication you need
guessable names, and guessable names make your code vulnerable to DoS and symlink
attacks) and <tt>/run</tt> is the much safer replacement for this, simply
because it is not a location writable to unprivileged processes. For example,
X11 places it's communication sockets below <tt>/tmp</tt> (which is actually
secure -- though still not ideal -- in this exception since it does so in a
safe subdirectory which is created at early boot.) Services which need to
communicate via such communication primitives in <tt>/tmp</tt> are no
candidates for <tt>PrivateTmp=</tt>. Thankfully these days only very few
services misusing <tt>/tmp</tt> like this remain.</p>

<p>Internally, this feature makes use of file system namespaces of the kernel.
If enabled a new file system namespace is opened inheritng most of the host
hierarchy with the exception of <tt>/tmp</tt>.</p>

<h4>Making Directories Appear Read-Only or Inaccessible to Services</h4>

<p>With the <tt>ReadOnlyDirectories=</tt> and <tt>InaccessibleDirectories=</tt>
options it is possible to make the specified directories inaccessible for
writing resp. both reading and writing to the service:</p>

<pre>...
[Service]
ExecStart=...
InaccessibleDirectories=/home
ReadOnlyDirectories=/var
...
</pre>

<p>With these two configuration lines the whole tree below <tt>/home</tt>
becomes inaccessible to the service (i.e. the directory will appear empty and
with 000 access mode), and the tree below <tt>/var</tt> becomes read-only.</p>

<p><b>Caveat:</b> Note that <tt>ReadOnlyDirectories=</tt> currently is not
recursively applied to submounts of the specified directories (i.e. mounts below
<tt>/var</tt> in the example above stay writable). This is likely to get fixed
soon.</p>

<p>Internally, this is also implemented based on file system namspaces.</p>

<h4>Taking Away Capabilities From Services</h4>

<p>Another very powerful security option in systemd is
<tt>CapabilityBoundingSet=</tt> which allows to limit in a relatively fine
grained fashion which kernel capabilities a service started retains:</p>

<pre>...
[Service]
ExecStart=...
CapabilityBoundingSet=CAP_CHOWN CAP_KILL
...
</pre>

<p>In the example above only the CAP_CHOWN and CAP_KILL capabilities are
retained by the service, and the service and any processes it might create have
no chance to ever acquire any other capabilities again, not even via setuid
binaries. The list of currently defined capabilities is available in <a
href="http://linux.die.net/man/7/capabilities">capabilities(7)</a>.
Unfortunately some of the defined capabilities are overly generic (such as
CAP_SYS_ADMIN), however they are still a very useful tool, in particular for
services that otherwise run with full root privileges.</p>

<p>To identify precisely which capabilities are necessary for a service to run
cleanly is not always easy and requires a bit of testing. To simplify this
process a bit, it is possible to blacklist certain capabilities that are
definitely not needed instead of whitelisting all that might be needed. Example: the
CAP_SYS_PTRACE is a particularly powerful and security relevant capability
needed for the implementation of debuggers, since it allows introspecting and
manipulating any local process on the system. A service like Apache obviously
has no business in being a debugger for other processes, hence it is safe to
remove the capability from it:</p>

<pre>...
[Service]
ExecStart=...
CapabilityBoundingSet=~CAP_SYS_PTRACE
...</pre>

<p>The <tt>~</tt> character the value assignment here is prefixed with inverts
the meaning of the option: instead of listing all capabalities the service
will retain you may list the ones it will not retain.</p>

<p><b>Caveat:</b> Some services might react confused if certain capabilities are
made unavailable to them. Thus when determining the right set of capabilities
to keep around you need to do this carefully, and it might be a good idea to talk
to the upstream maintainers since they should know best which operations a
service might need to run successfully.</p>

<p><b>Caveat 2:</b> <a
href="https://forums.grsecurity.net/viewtopic.php?f=7&amp;t=2522">Capabilities are
not a magic wand.</a> You probably want to combine them and use them in
conjunction with other security options in order to make them truly useful.</p>

<p>To easily check which processes on your system retain which capabilities use
the <tt>pscap</tt> tool from the <tt>libcap-ng-utils</tt> package.</p>

<p>Making use of systemd's <tt>CapabilityBoundingSet=</tt> option is often a
simple, discoverable and cheap replacement for patching all system daemons
individually to control the capability bounding set on their own.</p>

<h4>Disallowing Forking, Limiting File Creation for Services</h4>

<p>Resource Limits may be used to apply certain security limits on services
being run. Primarily, resource limits are useful for resource control (as the
name suggests...) not so much access control. However, two of them can be
useful to disable certain OS features: RLIMIT_NPROC and RLIMIT_FSIZE may be
used to disable forking and disable writing of any files with a size >
0:</p>

<pre>...
[Service]
ExecStart=...
LimitNPROC=1
LimitFSIZE=0
...</pre>

<p>Note that this will work only if the service in question drops privileges
and runs under a (non-root) user ID of its own or drops the CAP_SYS_RESOURCE
capability, for example via <tt>CapabilityBoundingSet=</tt> as discussed above.
Without that a process could simply increase the resource limit again thus
voiding any effect.</p>

<p><b>Caveat:</b> <tt>LimitFSIZE=</tt> is pretty brutal. If the service
attempts to write a file with a size > 0, it will immeidately be killed with
the SIGXFSZ which unless caught terminates the process. Also, creating files
with size 0 is still allowed, even if this option is used.</p>

<p>For more information on these and other resource limits, see <a
href="http://linux.die.net/man/2/setrlimit">setrlimit(2)</a>.</p>

<h4>Controlling Device Node Access of Services</h4>

<p>Devices nodes are an important interface to the kernel and its drivers.
Since drivers tend to get much less testing and security checking than the core
kernel they often are a major entry point for security hacks. systemd allows
you to control access to devices individually for each service:</p>

<pre>...
[Service]
ExecStart=...
DeviceAllow=/dev/null rw
...</pre>

<p>This will limit access to <tt>/dev/null</tt> and only this device node,
disallowing access to any other device nodes.</p>

<p>The feature is implemented on top of the <tt>devices</tt> cgroup controller.</p>

<h4>Other Options</h4>

<p>Besides the easy to use options above there are a number of other security
relevant options available. However they usually require a bit of preparation
in the service itself and hence are probably primarily useful for upstream
developers. These options are <tt>RootDirectory=</tt> (to set up
<tt>chroot()</tt> environments for a service) as well as <tt>User=</tt> and
<tt>Group=</tt> to drop privileges to the specified user and group. These
options are particularly useful to greatly simplify writing daemons, where all
the complexities of securely dropping privileges can be left to systemd, and
kept out of the daemons themselves.</p>

<p>If you are wondering why these options are not enabled by default: some of
them simply break seamntics of traditional Unix, and to maintain compatibility
we cannot enable them by default. e.g. since traditional Unix enforced that
<tt>/tmp</tt> was a shared namespace, and processes could use it for IPC we
cannot just go and turn that off globally, just because <tt>/tmp</tt>'s role in
IPC is now replaced by <tt>/run</tt>.</p>

<p>And that's it for now. If you are working on unit files for upstream or in
your distribution, please consider using one or more of the options listed
above. If you service is secure by default by taking advantage of these options
this will help not only your users but also make the Internet a safer
place.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2012-01-20T01:26:51Z</dc:date>
    </item>
<item>
  <title>PulseAudio vs. AudioFlinger</title>
  <link>http://0pointer.de/blog/projects/aruns-numbers.html</link>
  <description><![CDATA[

<p><a
href="http://arunraghavan.net/2012/01/pulseaudio-vs-audioflinger-fight/">Arun
put an awesome article up</a>, detailing how PulseAudio compares to Android's
AudioFlinger in terms of power consumption and suchlike. Suffice to say,
PulseAudio rocks, but go and read the whole thing, it's worth it.</p>

<p>Apparently, AudioFlinger is a great choice if you want to shorten your
battery life.</p>

]]></description>
</item>

	    <item>
      <title>PulseAudio vs. AudioFlinger</title>
      <link>http://0pointer.de/blog/index.rss/projects/aruns-numbers</link>
      <description>
<p><a
href="http://arunraghavan.net/2012/01/pulseaudio-vs-audioflinger-fight/">Arun
put an awesome article up</a>, detailing how PulseAudio compares to Android's
AudioFlinger in terms of power consumption and suchlike. Suffice to say,
PulseAudio rocks, but go and read the whole thing, it's worth it.</p>

<p>Apparently, AudioFlinger is a great choice if you want to shorten your
battery life.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2012-01-16T15:31:57Z</dc:date>
    </item>
<item>
  <title>Introducing the Journal</title>
  <link>http://0pointer.de/blog/projects/the-journal.html</link>
  <description><![CDATA[

<p>In the past weeks we have been working on a major new addition to systemd
that will hopefully positively change the Linux ecosystem in a number of ways.
But see for yourself, check out the full explanation on what we have
implemented on the <a
href="https://docs.google.com/document/pub?id=1IC9yOXj7j6cdLLxWEBAGRL6wl97tFxgjLUEHIX3MSTs">design
document we put up on Google Docs</a>.</p>

]]></description>
</item>

	    <item>
      <title>Introducing the Journal</title>
      <link>http://0pointer.de/blog/index.rss/projects/the-journal</link>
      <description>
<p>In the past weeks we have been working on a major new addition to systemd
that will hopefully positively change the Linux ecosystem in a number of ways.
But see for yourself, check out the full explanation on what we have
implemented on the <a
href="https://docs.google.com/document/pub?id=1IC9yOXj7j6cdLLxWEBAGRL6wl97tFxgjLUEHIX3MSTs">design
document we put up on Google Docs</a>.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-11-18T15:28:45Z</dc:date>
    </item>
<item>
  <title>Kernel Hackers Panel</title>
  <link>http://0pointer.de/blog/projects/linuxcon-kernel-panel.html</link>
  <description><![CDATA[

<p>At LinuxCon Europe/ELCE I had the chance to moderate the <a href="https://events.linuxfoundation.org/events/linuxcon-europe/kernel-panel">kernel hackers
panel with Linus Torvalds, Alan Cox, Paul McKenney and Thomas Gleixner on
stage</a>. I like to believe it went quite well, but check it out for yourself, as
a video recording is now available online:</p>

<video width="800" height="450" controls="1">
  <source src="http://free-electrons.com/pub/video/2011/elce/elce-2011-torvalds-cox-gleixner-mackenney-kernel-developer-panel-450p.webm"/>
</video>

<p>For me personally I think the most notable topic covered was Control Groups,
and the clarification that they are something that is needed even though their
implementation right now is in many ways less than perfect. But in the end there is no
reasonable way around it, and much like SMP, technology that complicates things
substantially but is ultimately unavoidable.</p>

<p><a href="http://free-electrons.com/blog/elce-2011-videos/">Other videos from ELCE are online now, too.</a></p>

]]></description>
</item>

	    <item>
      <title>Kernel Hackers Panel</title>
      <link>http://0pointer.de/blog/index.rss/projects/linuxcon-kernel-panel</link>
      <description>
<p>At LinuxCon Europe/ELCE I had the chance to moderate the <a href="https://events.linuxfoundation.org/events/linuxcon-europe/kernel-panel">kernel hackers
panel with Linus Torvalds, Alan Cox, Paul McKenney and Thomas Gleixner on
stage</a>. I like to believe it went quite well, but check it out for yourself, as
a video recording is now available online:</p>

<video width="800" height="450" controls="1">
  <source src="http://free-electrons.com/pub/video/2011/elce/elce-2011-torvalds-cox-gleixner-mackenney-kernel-developer-panel-450p.webm"/>
</video>

<p>For me personally I think the most notable topic covered was Control Groups,
and the clarification that they are something that is needed even though their
implementation right now is in many ways less than perfect. But in the end there is no
reasonable way around it, and much like SMP, technology that complicates things
substantially but is ultimately unavoidable.</p>

<p><a href="http://free-electrons.com/blog/elce-2011-videos/">Other videos from ELCE are online now, too.</a></p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-11-07T15:53:02Z</dc:date>
    </item>
<item>
  <title>libabc</title>
  <link>http://0pointer.de/blog/projects/libabc.html</link>
  <description><![CDATA[

<p>At the Kernel Summit in Prague last week Kay Sievers and I lead a session on
developing shared userspace libraries, for kernel hackers. More and more
userspace interfaces of the kernel (for example many which deal with storage,
audio, resource management, security, file systems or a number of other
subsystems) nowadays rely on a dedicated userspace component. As people who
work primarily in the plumbing layer of the Linux OS we noticed over and over
again that these libraries written by people who usually are at home on the
kernel side of things make the same mistakes repeatedly, thus making life for
the users of the libraries unnecessarily difficult. In our session we tried to
point out a number of these things, and in particular places where the usual
kernel hacking style translates badly into userspace shared library hacking.
Our hope is that maybe a few kernel developers have a look at our list of
recommendations and consider the points we are raising.</p>

<p>To make things easy we have put together an example skeleton library we
dubbed <tt>libabc</tt>, whose <a
href="https://git.kernel.org/?p=linux/kernel/git/kay/libabc.git;a=blob_plain;f=README">README</a>
file includes all our points in terse form. It's available on kernel.org:</p>

<p><a href="https://git.kernel.org/?p=linux/kernel/git/kay/libabc.git">The git repository</a> and the <a href="https://git.kernel.org/?p=linux/kernel/git/kay/libabc.git;a=blob_plain;f=README">README</a>.</p>

<p>This list of recommendations draws inspiration from David Zeuthen's and
Ulrich Drepper's well known papers on the topic of writing shared libraries. In
the README linked above we try to distill this wealth of information into a
terse list of recommendations, with a couple of additions and with a strict
focus on a kernel hacker background.</p>

<p>Please have a look, and even if you are not a kernel hacker there might be
something useful to know in it, especially if you work on the lower layers of
our stack.</p>

<p>If you have any questions or additions, just ping us, or comment below!</p>

]]></description>
</item>

	    <item>
      <title>libabc</title>
      <link>http://0pointer.de/blog/index.rss/projects/libabc</link>
      <description>
<p>At the Kernel Summit in Prague last week Kay Sievers and I lead a session on
developing shared userspace libraries, for kernel hackers. More and more
userspace interfaces of the kernel (for example many which deal with storage,
audio, resource management, security, file systems or a number of other
subsystems) nowadays rely on a dedicated userspace component. As people who
work primarily in the plumbing layer of the Linux OS we noticed over and over
again that these libraries written by people who usually are at home on the
kernel side of things make the same mistakes repeatedly, thus making life for
the users of the libraries unnecessarily difficult. In our session we tried to
point out a number of these things, and in particular places where the usual
kernel hacking style translates badly into userspace shared library hacking.
Our hope is that maybe a few kernel developers have a look at our list of
recommendations and consider the points we are raising.</p>

<p>To make things easy we have put together an example skeleton library we
dubbed <tt>libabc</tt>, whose <a
href="https://git.kernel.org/?p=linux/kernel/git/kay/libabc.git;a=blob_plain;f=README">README</a>
file includes all our points in terse form. It's available on kernel.org:</p>

<p><a href="https://git.kernel.org/?p=linux/kernel/git/kay/libabc.git">The git repository</a> and the <a href="https://git.kernel.org/?p=linux/kernel/git/kay/libabc.git;a=blob_plain;f=README">README</a>.</p>

<p>This list of recommendations draws inspiration from David Zeuthen's and
Ulrich Drepper's well known papers on the topic of writing shared libraries. In
the README linked above we try to distill this wealth of information into a
terse list of recommendations, with a couple of additions and with a strict
focus on a kernel hacker background.</p>

<p>Please have a look, and even if you are not a kernel hacker there might be
something useful to know in it, especially if you work on the lower layers of
our stack.</p>

<p>If you have any questions or additions, just ping us, or comment below!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-11-01T00:46:33Z</dc:date>
    </item>
<item>
  <title>Prague</title>
  <link>http://0pointer.de/blog/projects/linuxcon-europe.html</link>
  <description><![CDATA[

<p>If you make it to Prague the coming week for the LinuxCon/ELCE/GStreamer/Kernel Summit/... superconference, make sure not to miss:</p>

<ul>

<li>The Linux Audio BoF with numerous Linux audio hackers, 5pm, on Sunday (23rd, i.e. today).</li>

<li><a
href="http://gstreamer.freedesktop.org/conference/speakers.html#raghavan">Latest
developments in PulseAudio</a> by Arun Raghavan. 4pm, on Tuesday, GStreamer
Summit</li>

<li><a
href="https://events.linuxfoundation.org/events/linuxcon-europe/kernel-panel">Linux
Kernel Developer Panel</a>, a shared session of LinuxCon and ELCE. Panelists
are Linus Torvalds, Alan Cox, Thomas Gleixner and Paul McKenney. Moderated by
yours truly. 9:30am, on Wednesday</li>

<li><a
href="https://events.linuxfoundation.org/events/linuxcon-europe/poettering-sievers">systemd
Administration in the Enterprise</a> by Kay Sievers and yours truly. 4:15pm, on
Wednesday, LinuxCon</li>

<li><a
href="https://events.linuxfoundation.org/events/embedded-linux-conference-europe/kooi">Integrating
systemd: Booting Userspace in Less Than 1 Second</a> by Koen Kooi. 11:15am, on
Friday, ELCE</li>

</ul>

<p>All of that at the Clarion Hotel. See you in Prague!</p>

]]></description>
</item>

	    <item>
      <title>Prague</title>
      <link>http://0pointer.de/blog/index.rss/projects/linuxcon-europe</link>
      <description>
<p>If you make it to Prague the coming week for the LinuxCon/ELCE/GStreamer/Kernel Summit/... superconference, make sure not to miss:</p>

<ul>

<li>The Linux Audio BoF with numerous Linux audio hackers, 5pm, on Sunday (23rd, i.e. today).</li>

<li><a
href="http://gstreamer.freedesktop.org/conference/speakers.html#raghavan">Latest
developments in PulseAudio</a> by Arun Raghavan. 4pm, on Tuesday, GStreamer
Summit</li>

<li><a
href="https://events.linuxfoundation.org/events/linuxcon-europe/kernel-panel">Linux
Kernel Developer Panel</a>, a shared session of LinuxCon and ELCE. Panelists
are Linus Torvalds, Alan Cox, Thomas Gleixner and Paul McKenney. Moderated by
yours truly. 9:30am, on Wednesday</li>

<li><a
href="https://events.linuxfoundation.org/events/linuxcon-europe/poettering-sievers">systemd
Administration in the Enterprise</a> by Kay Sievers and yours truly. 4:15pm, on
Wednesday, LinuxCon</li>

<li><a
href="https://events.linuxfoundation.org/events/embedded-linux-conference-europe/kooi">Integrating
systemd: Booting Userspace in Less Than 1 Second</a> by Koen Kooi. 11:15am, on
Friday, ELCE</li>

</ul>

<p>All of that at the Clarion Hotel. See you in Prague!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-10-22T23:31:19Z</dc:date>
    </item>
<item>
  <title>Plumbers Wishlist, The Second Edition</title>
  <link>http://0pointer.de/blog/projects/plumbers-wishlist-2.html</link>
  <description><![CDATA[

<p>Two weeks ago we published a <a
href="http://0pointer.de/blog/projects/plumbers-wishlist.html">Plumber's
Wishlist for Linux</a>. So far, this has already created lively discussions in
the community (as reported on LWN among others), and patches for a few of the
items listed have already been posted (thanks a lot to those who worked on
this, your contributions are much appreciated!).</p>

<p><a
href="https://docs.google.com/document/pub?id=1RmJrtIoTnivkmR9KCqfJNBnEll4X9Jtu0xj5w6hFGs8">We
have now prepared a second version of the wish list.</a> It includes a number
of additions (tmpfs quota! hostname change notifications! and more!) and
updates to the previous items, including links to patches, and references to
other interesting material.</p>

<p>We hope to update this wishlist from time, so stay tuned!</p>

<p><a href="https://docs.google.com/document/pub?id=1RmJrtIoTnivkmR9KCqfJNBnEll4X9Jtu0xj5w6hFGs8">And now, go and read the new wishlist!</a></p>

]]></description>
</item>

	    <item>
      <title>Plumbers Wishlist, The Second Edition</title>
      <link>http://0pointer.de/blog/index.rss/projects/plumbers-wishlist-2</link>
      <description>
<p>Two weeks ago we published a <a
href="http://0pointer.de/blog/projects/plumbers-wishlist.html">Plumber's
Wishlist for Linux</a>. So far, this has already created lively discussions in
the community (as reported on LWN among others), and patches for a few of the
items listed have already been posted (thanks a lot to those who worked on
this, your contributions are much appreciated!).</p>

<p><a
href="https://docs.google.com/document/pub?id=1RmJrtIoTnivkmR9KCqfJNBnEll4X9Jtu0xj5w6hFGs8">We
have now prepared a second version of the wish list.</a> It includes a number
of additions (tmpfs quota! hostname change notifications! and more!) and
updates to the previous items, including links to patches, and references to
other interesting material.</p>

<p>We hope to update this wishlist from time, so stay tuned!</p>

<p><a href="https://docs.google.com/document/pub?id=1RmJrtIoTnivkmR9KCqfJNBnEll4X9Jtu0xj5w6hFGs8">And now, go and read the new wishlist!</a></p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-10-20T18:41:41Z</dc:date>
    </item>
<item>
  <title>Google doesn&apos;t like my name</title>
  <link>http://0pointer.de/blog/projects/google-doesnt-like-my-name.html</link>
  <description><![CDATA[

<p>Nice one, Google suspended my Google+ account because I created it under,
well, my name, which is "Lennart Poettering", and Google+ thinks that wasn't my
name, even though it says so in my passport, and almost every document I own
and I was never aware I had any other name. This is ricidulous. Google, give me
my name back! This is a really uncool move.</p>

]]></description>
</item>

	    <item>
      <title>Google doesn't like my name</title>
      <link>http://0pointer.de/blog/index.rss/projects/google-doesnt-like-my-name</link>
      <description>
<p>Nice one, Google suspended my Google+ account because I created it under,
well, my name, which is "Lennart Poettering", and Google+ thinks that wasn't my
name, even though it says so in my passport, and almost every document I own
and I was never aware I had any other name. This is ricidulous. Google, give me
my name back! This is a really uncool move.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-10-17T16:50:57Z</dc:date>
    </item>
<item>
  <title>Your Questions for the Kernel Developer Panel at LinuxCon in Prague</title>
  <link>http://0pointer.de/blog/projects/kernel-hacker-panel.html</link>
  <description><![CDATA[

<p><a href="https://plus.google.com/115547683951727699051/posts/SuTUvbcJ6p9">I
am currently collecting</a> questions for the <a
href="https://events.linuxfoundation.org/events/linuxcon-europe/kernel-panel">kernel
developer panel at LinuxCon in Prague</a>. If there's something you'd like the
panelists to respond to, please post it on <a
href="https://plus.google.com/115547683951727699051/posts/SuTUvbcJ6p9">the
thread</a>, and I'll see what I can do. Thank you!</p>

]]></description>
</item>

<item>
  <title>A Big Loss</title>
  <link>http://0pointer.de/blog/projects/a-big-loss.html</link>
  <description><![CDATA[

<p><a
href="http://googleblog.blogspot.com/2011/10/fall-sweep.html">Google
announced today that they'll be shutting down Google Code Search in
January</a>. I am quite sure that this would be a massive loss for the Free
Software community.  The ability to learn from other people's code is a key
idea of Free Software.  There's simply no better way to do that than with a
source code search engine.  The day Google Code Search will be shut down will
be a sad day for the Free Software community.</p>

<p>Of course, there are a couple of alternatives around, but they all have one
thing in common: they, uh, don't even remotely compare to the completeness,
performance and simplicity of the Google Code Search interface, and have
serious usability issues. (For example: koders.com is really really slow, and
splits up identifiers you search for at underscores, which kinda makes it
useless for looking for almost any kind of code.)</p>

<p>I think it must be of genuine interest to the Free Software community to
have a capable replacement for Google Code Search, for the day it is turned
off. In fact, it probably should be something the various foundations which
promote Free Software should be looking into, like the FSF or the Linux
Foundation. There are very few better ways to get Free Software into the heads
and minds of engineers than by examples -- examples consisting of real life
code they can find with a source code search engine. I believe a source code
search engine is probably among the best vehicles to promote Free Software
towards engineers. In particular if it itself was Free Software (in contrast to
Google Code Search).</p>

<p>Ideally, all software available on web sites like SourceForge, Freshmeat, or
github should be indexed. But there's also a chance for distributions here:
indexing the sources of all packages a distribution like Debian or Fedora
include would be a great tool for developers. In fact, a distribution offering
this functionality might benefit from such functionality, as it attracts
developer interest in the distribution.</p>

<p>It's sad that Google Code Search will be gone soon. But maybe there's
something positive in the bad news here, and a chance to create something better,
more comprehensive, that is free, and promotes our ideals better than Google
ever could. Maybe there's a chance here for the Open Source foundations, for
the distributions and for the communities to create a better replacement!</p>

]]></description>
</item>

	    <item>
      <title>A Big Loss</title>
      <link>http://0pointer.de/blog/index.rss/projects/a-big-loss</link>
      <description>
<p><a
href="http://googleblog.blogspot.com/2011/10/fall-sweep.html">Google
announced today that they'll be shutting down Google Code Search in
January</a>. I am quite sure that this would be a massive loss for the Free
Software community.  The ability to learn from other people's code is a key
idea of Free Software.  There's simply no better way to do that than with a
source code search engine.  The day Google Code Search will be shut down will
be a sad day for the Free Software community.</p>

<p>Of course, there are a couple of alternatives around, but they all have one
thing in common: they, uh, don't even remotely compare to the completeness,
performance and simplicity of the Google Code Search interface, and have
serious usability issues. (For example: koders.com is really really slow, and
splits up identifiers you search for at underscores, which kinda makes it
useless for looking for almost any kind of code.)</p>

<p>I think it must be of genuine interest to the Free Software community to
have a capable replacement for Google Code Search, for the day it is turned
off. In fact, it probably should be something the various foundations which
promote Free Software should be looking into, like the FSF or the Linux
Foundation. There are very few better ways to get Free Software into the heads
and minds of engineers than by examples -- examples consisting of real life
code they can find with a source code search engine. I believe a source code
search engine is probably among the best vehicles to promote Free Software
towards engineers. In particular if it itself was Free Software (in contrast to
Google Code Search).</p>

<p>Ideally, all software available on web sites like SourceForge, Freshmeat, or
github should be indexed. But there's also a chance for distributions here:
indexing the sources of all packages a distribution like Debian or Fedora
include would be a great tool for developers. In fact, a distribution offering
this functionality might benefit from such functionality, as it attracts
developer interest in the distribution.</p>

<p>It's sad that Google Code Search will be gone soon. But maybe there's
something positive in the bad news here, and a chance to create something better,
more comprehensive, that is free, and promotes our ideals better than Google
ever could. Maybe there's a chance here for the Open Source foundations, for
the distributions and for the communities to create a better replacement!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-10-14T21:05:59Z</dc:date>
    </item>
<item>
  <title>Dresden, California, Poznan</title>
  <link>http://0pointer.de/blog/photos/california.html</link>
  <description><![CDATA[

<p><a href="http://0pointer.de/static/dresden.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/dresden-small.jpeg" width="1024" height="291" alt="Hofkirche, Dresden, Saxony, Germany"/></a></p>

<p><i>Hofkirche, Dresden, Saxony, Germany</i></p>

<p><a href="http://0pointer.de/static/bastei.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/bastei-small.jpeg" width="1024" height="260" alt="Bastei, Saxon Switzerland, Saxony, Germany"/></a></p>

<p><i>Bastei, Saxon Switzerland, Saxony, Germany</i></p>

<p><a href="http://0pointer.de/static/dresden2.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/dresden2-small.jpeg" width="1024" height="370" alt="F&uuml;rstenzug, Dresden, Saxony, Germany"/></a></p>

<p><i>F&uuml;rstenzug, Dresden, Saxony, Germany</i></p>

<p><a href="http://0pointer.de/static/california.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/california-small.jpeg" width="1024" height="120" alt="Near California State Route 46, California, USA"/></a></p>

<p><i>Near California State Route 46, California, USA</i></p>

<p><a href="http://0pointer.de/static/california2.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/california2-small.jpeg" width="1024" height="122" alt="Near Generals Highway, California, USA"/></a></p>

<p><i>Near Generals Highway, California, USA</i></p>

<p><a href="http://0pointer.de/static/california3.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/california3-small.jpeg" width="1024" height="230" alt="Near Generals Highway, California, USA"/></a></p>

<p><i>Near Generals Highway, California, USA</i>, a bit further down the road.</p>

<p><a href="http://0pointer.de/static/poznan.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/poznan-small.jpeg" width="1024" height="183" alt="Parish Church in Poznan, Poland"/></a></p>

<p><i>Parish Church in Poznan, Poland</i></p>



]]></description>
</item>

	    <item>
      <title>Dresden, California, Poznan</title>
      <link>http://0pointer.de/blog/index.rss/photos/california</link>
      <description>
<p><a href="http://0pointer.de/static/dresden.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/dresden-small.jpeg" width="1024" height="291" alt="Hofkirche, Dresden, Saxony, Germany"/></a></p>

<p><i>Hofkirche, Dresden, Saxony, Germany</i></p>

<p><a href="http://0pointer.de/static/bastei.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/bastei-small.jpeg" width="1024" height="260" alt="Bastei, Saxon Switzerland, Saxony, Germany"/></a></p>

<p><i>Bastei, Saxon Switzerland, Saxony, Germany</i></p>

<p><a href="http://0pointer.de/static/dresden2.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/dresden2-small.jpeg" width="1024" height="370" alt="F&uuml;rstenzug, Dresden, Saxony, Germany"/></a></p>

<p><i>F&uuml;rstenzug, Dresden, Saxony, Germany</i></p>

<p><a href="http://0pointer.de/static/california.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/california-small.jpeg" width="1024" height="120" alt="Near California State Route 46, California, USA"/></a></p>

<p><i>Near California State Route 46, California, USA</i></p>

<p><a href="http://0pointer.de/static/california2.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/california2-small.jpeg" width="1024" height="122" alt="Near Generals Highway, California, USA"/></a></p>

<p><i>Near Generals Highway, California, USA</i></p>

<p><a href="http://0pointer.de/static/california3.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/california3-small.jpeg" width="1024" height="230" alt="Near Generals Highway, California, USA"/></a></p>

<p><i>Near Generals Highway, California, USA</i>, a bit further down the road.</p>

<p><a href="http://0pointer.de/static/poznan.html"><img style="border: 10px solid #232729; background-color: #6b6c6; padding: 1px; -moz-border-radius: 7px; margin: 0.5cm" src="http://0pointer.de/static/poznan-small.jpeg" width="1024" height="183" alt="Parish Church in Poznan, Poland"/></a></p>

<p><i>Parish Church in Poznan, Poland</i></p>


</description>
      <category domain="http://www.sauria.com">photos</category>
      <dc:date>2011-10-09T19:32:56Z</dc:date>
    </item>
<item>
  <title>A Plumber&apos;s Wish List for Linux</title>
  <link>http://0pointer.de/blog/projects/plumbers-wishlist.html</link>
  <description><![CDATA[

<p>Here's a <a href="http://thread.gmane.org/gmane.linux.kernel/1200272">mail
we just sent to LKML</a>, for your consideration. Enjoy:</p>

<pre><b>Subject: A Plumber’s Wish List for Linux</b>

We’d like to share our current wish list of plumbing layer features we
are hoping to see implemented in the near future in the Linux kernel and
associated tools. Some items we can implement on our own, others are not
our area of expertise, and we will need help getting them implemented.

Acknowledging that this wish list of ours only gets longer and not
shorter, even though we have implemented a number of other features on
our own in the previous years, we are posting this list here, in the
hope to find some help.

If you happen to be interested in working on something from this list or
able to help out, we’d be delighted. Please ping us in case you need
clarifications or more information on specific items.

Thanks,
Kay, Lennart, Harald, in the name of all the other plumbers


An here’s the wish list, in no particular order:

* (ioctl based?) interface to query and modify the label of a mounted
FAT volume:
A FAT labels is implemented as a hidden directory entry in the file
system which need to be renamed when changing the file system label,
this is impossible to do from userspace without unmounting. Hence we’d
like to see a kernel interface that is available on the mounted file
system mount point itself. Of course, bonus points if this new interface
can be implemented for other file systems as well, and also covers fs
UUIDs in addition to labels.

* CPU modaliases in /sys/devices/system/cpu/cpuX/modalias:
useful to allow module auto-loading of e.g. cpufreq drivers and KVM
modules. Andy Kleen has a patch to create the alias file itself. CPU
‘struct sysdev’ needs to be converted to ‘struct device’ and a ‘struct
bus_type cpu’ needs to be introduced to allow proper CPU coldplug event
replay at bootup. This is one of the last remaining places where
automatic hardware-triggered module auto-loading is not available. And
we’d like to see that fix to make numerous ugly userspace work-arounds
to achieve the same go away.

* expose CAP_LAST_CAP somehow in the running kernel at runtime:
Userspace needs to know the highest valid capability of the running
kernel, which right now cannot reliably be retrieved from header files
only. The fact that this value cannot be detected properly right now
creates various problems for libraries compiled on newer header files
which are run on older kernels. They assume capabilities are available
which actually aren’t. Specifically, libcap-ng claims that all running
processes retain the higher capabilities in this case due to the
“inverted” semantics of CapBnd in /proc/$PID/status.

* export ‘struct device_type fb/fbcon’ of ‘struct class graphics’
Userspace wants to easily distinguish ‘fb’ and ‘fbcon’ from each other
without the need to match on the device name.

* allow changing argv[] of a process without mucking with environ[]:
Something like setproctitle() or a prctl() would be ideal. Of course it
is questionable if services like sendmail make use of this, but otoh for
services which fork but do not immediately exec() another binary being
able to rename this child processes in ps is of importance.

* module-init-tools: provide a proper libmodprobe.so from
module-init-tools:
Early boot tools, installers, driver install disks want to access
information about available modules to optimize bootup handling.

* fork throttling mechanism as basic cgroup functionality that is
available in all hierarchies independent of the controllers used:
This is important to implement race-free killing of all members of a
cgroup, so that cgroup member processes cannot fork faster then a cgroup
supervisor process could kill them. This needs to be recursive, so that
not only a cgroup but all its subgroups are covered as well.

* proper cgroup-is-empty notification interface:
The current call_usermodehelper() interface is an unefficient and an
ugly hack. Tools would prefer anything more lightweight like a netlink,
poll() or fanotify interface.

* allow user xattrs to be set on files in the cgroupfs (and maybe
procfs?)

* simple, reliable and future-proof way to detect whether a specific pid
is running in a CLONE_NEWPID container, i.e. not in the root PID
namespace. Currently, there are available a few ugly hacks to detect
this (for example a process wanting to know whether it is running in a
PID namespace could just look for a PID 2 being around and named
kthreadd which is a kernel thread only visible in the root namespace),
however all these solutions encode information and expectations that
better shouldn’t be encoded in a namespace test like this. This
functionality is needed in particular since the removal of the the ns
cgroup controller which provided the namespace membership information to
user code.

* allow making use of the “cpu” cgroup controller by default without
breaking RT. Right now creating a cgroup in the “cpu” hierarchy that
shall be able to take advantage of RT is impossible for the generic case
since it needs an RT budget configured which is from a limited resource
pool. What we want is the ability to create cgroups in “cpu” whose
processes get an non-RT weight applied, but for RT take advantage of the
parent’s RT budget. We want the separation of RT and non-RT budget
assignment in the “cpu” hierarchy, because right now, you lose RT
functionality in it unless you assign an RT budget. This issue severely
limits the usefulness of “cpu” hierarchy on general purpose systems
right now.

* Add a timerslack cgroup controller, to allow increasing the timer
slack of user session cgroups when the machine is idle.

* An auxiliary meta data message for AF_UNIX called SCM_CGROUPS (or
something like that), i.e. a way to attach sender cgroup membership to
messages sent via AF_UNIX. This is useful in case services such as
syslog shall be shared among various containers (or service cgroups),
and the syslog implementation needs to be able to distinguish the
sending cgroup in order to separate the logs on disk. Of course stm
SCM_CREDENTIALS can be used to look up the PID of the sender followed by
a check in /proc/$PID/cgroup, but that is necessarily racy, and actually
a very real race in real life.

* SCM_COMM, with a similar use case as SCM_CGROUPS. This auxiliary
control message should carry the process name as available
in /proc/$PID/comm.</pre>

]]></description>
</item>

	    <item>
      <title>A Plumber's Wish List for Linux</title>
      <link>http://0pointer.de/blog/index.rss/projects/plumbers-wishlist</link>
      <description>
<p>Here's a <a href="http://thread.gmane.org/gmane.linux.kernel/1200272">mail
we just sent to LKML</a>, for your consideration. Enjoy:</p>

<pre><b>Subject: A Plumber’s Wish List for Linux</b>

We’d like to share our current wish list of plumbing layer features we
are hoping to see implemented in the near future in the Linux kernel and
associated tools. Some items we can implement on our own, others are not
our area of expertise, and we will need help getting them implemented.

Acknowledging that this wish list of ours only gets longer and not
shorter, even though we have implemented a number of other features on
our own in the previous years, we are posting this list here, in the
hope to find some help.

If you happen to be interested in working on something from this list or
able to help out, we’d be delighted. Please ping us in case you need
clarifications or more information on specific items.

Thanks,
Kay, Lennart, Harald, in the name of all the other plumbers


An here’s the wish list, in no particular order:

* (ioctl based?) interface to query and modify the label of a mounted
FAT volume:
A FAT labels is implemented as a hidden directory entry in the file
system which need to be renamed when changing the file system label,
this is impossible to do from userspace without unmounting. Hence we’d
like to see a kernel interface that is available on the mounted file
system mount point itself. Of course, bonus points if this new interface
can be implemented for other file systems as well, and also covers fs
UUIDs in addition to labels.

* CPU modaliases in /sys/devices/system/cpu/cpuX/modalias:
useful to allow module auto-loading of e.g. cpufreq drivers and KVM
modules. Andy Kleen has a patch to create the alias file itself. CPU
‘struct sysdev’ needs to be converted to ‘struct device’ and a ‘struct
bus_type cpu’ needs to be introduced to allow proper CPU coldplug event
replay at bootup. This is one of the last remaining places where
automatic hardware-triggered module auto-loading is not available. And
we’d like to see that fix to make numerous ugly userspace work-arounds
to achieve the same go away.

* expose CAP_LAST_CAP somehow in the running kernel at runtime:
Userspace needs to know the highest valid capability of the running
kernel, which right now cannot reliably be retrieved from header files
only. The fact that this value cannot be detected properly right now
creates various problems for libraries compiled on newer header files
which are run on older kernels. They assume capabilities are available
which actually aren’t. Specifically, libcap-ng claims that all running
processes retain the higher capabilities in this case due to the
“inverted” semantics of CapBnd in /proc/$PID/status.

* export ‘struct device_type fb/fbcon’ of ‘struct class graphics’
Userspace wants to easily distinguish ‘fb’ and ‘fbcon’ from each other
without the need to match on the device name.

* allow changing argv[] of a process without mucking with environ[]:
Something like setproctitle() or a prctl() would be ideal. Of course it
is questionable if services like sendmail make use of this, but otoh for
services which fork but do not immediately exec() another binary being
able to rename this child processes in ps is of importance.

* module-init-tools: provide a proper libmodprobe.so from
module-init-tools:
Early boot tools, installers, driver install disks want to access
information about available modules to optimize bootup handling.

* fork throttling mechanism as basic cgroup functionality that is
available in all hierarchies independent of the controllers used:
This is important to implement race-free killing of all members of a
cgroup, so that cgroup member processes cannot fork faster then a cgroup
supervisor process could kill them. This needs to be recursive, so that
not only a cgroup but all its subgroups are covered as well.

* proper cgroup-is-empty notification interface:
The current call_usermodehelper() interface is an unefficient and an
ugly hack. Tools would prefer anything more lightweight like a netlink,
poll() or fanotify interface.

* allow user xattrs to be set on files in the cgroupfs (and maybe
procfs?)

* simple, reliable and future-proof way to detect whether a specific pid
is running in a CLONE_NEWPID container, i.e. not in the root PID
namespace. Currently, there are available a few ugly hacks to detect
this (for example a process wanting to know whether it is running in a
PID namespace could just look for a PID 2 being around and named
kthreadd which is a kernel thread only visible in the root namespace),
however all these solutions encode information and expectations that
better shouldn’t be encoded in a namespace test like this. This
functionality is needed in particular since the removal of the the ns
cgroup controller which provided the namespace membership information to
user code.

* allow making use of the “cpu” cgroup controller by default without
breaking RT. Right now creating a cgroup in the “cpu” hierarchy that
shall be able to take advantage of RT is impossible for the generic case
since it needs an RT budget configured which is from a limited resource
pool. What we want is the ability to create cgroups in “cpu” whose
processes get an non-RT weight applied, but for RT take advantage of the
parent’s RT budget. We want the separation of RT and non-RT budget
assignment in the “cpu” hierarchy, because right now, you lose RT
functionality in it unless you assign an RT budget. This issue severely
limits the usefulness of “cpu” hierarchy on general purpose systems
right now.

* Add a timerslack cgroup controller, to allow increasing the timer
slack of user session cgroups when the machine is idle.

* An auxiliary meta data message for AF_UNIX called SCM_CGROUPS (or
something like that), i.e. a way to attach sender cgroup membership to
messages sent via AF_UNIX. This is useful in case services such as
syslog shall be shared among various containers (or service cgroups),
and the syslog implementation needs to be able to distinguish the
sending cgroup in order to separate the logs on disk. Of course stm
SCM_CREDENTIALS can be used to look up the PID of the sender followed by
a check in /proc/$PID/cgroup, but that is necessarily racy, and actually
a very real race in real life.

* SCM_COMM, with a similar use case as SCM_CGROUPS. This auxiliary
control message should carry the process name as available
in /proc/$PID/comm.</pre>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-10-06T23:22:40Z</dc:date>
    </item>
<item>
  <title>What You Need to Know When Becoming a Free Software Hacker</title>
  <link>http://0pointer.de/blog/projects/hinter-den-kulissen.html</link>
  <description><![CDATA[

<p>Earlier today I gave a presentation at the Technical University Berlin about
things you need to know, things you should expect and things you shouldn't
expect when your are aspiring to become a successful Free Software Hacker.</p>

<p>I have put my slides up on Google Docs in case you are interested, either
because you are the target audience (i.e. a university student) or because you
need inspiration for a similar talk about the same topic.</p>

<p>The first two slides are in German language, so skip over them. The
interesting bits are all in English. I hope it's quite comprehensive (though of
course terse). Enjoy:</p>

<iframe src="https://docs.google.com/present/embed?id=dd4d9j2z_1r8fjkqc7" frameborder="0" width="410" height="342"></iframe>

<p>In case your feed reader/planet messes this up, <a href="https://docs.google.com/present/view?id=dd4d9j2z_1r8fjkqc7">here's the non-embedded version</a>.</p>

<p>Oh, and thanks to everybody who <a href="https://plus.google.com/115547683951727699051/posts/UqNgFiV3qTx">reviewed and suggested additions to the the slides on +</a>.</p>

]]></description>
</item>

	    <item>
      <title>What You Need to Know When Becoming a Free Software Hacker</title>
      <link>http://0pointer.de/blog/index.rss/projects/hinter-den-kulissen</link>
      <description>
<p>Earlier today I gave a presentation at the Technical University Berlin about
things you need to know, things you should expect and things you shouldn't
expect when your are aspiring to become a successful Free Software Hacker.</p>

<p>I have put my slides up on Google Docs in case you are interested, either
because you are the target audience (i.e. a university student) or because you
need inspiration for a similar talk about the same topic.</p>

<p>The first two slides are in German language, so skip over them. The
interesting bits are all in English. I hope it's quite comprehensive (though of
course terse). Enjoy:</p>

<iframe src="https://docs.google.com/present/embed?id=dd4d9j2z_1r8fjkqc7" frameborder="0" width="410" height="342"></iframe>

<p>In case your feed reader/planet messes this up, <a href="https://docs.google.com/present/view?id=dd4d9j2z_1r8fjkqc7">here's the non-embedded version</a>.</p>

<p>Oh, and thanks to everybody who <a href="https://plus.google.com/115547683951727699051/posts/UqNgFiV3qTx">reviewed and suggested additions to the the slides on +</a>.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-10-06T20:05:32Z</dc:date>
    </item>
<item>
  <title>PulseAudio 1.0</title>
  <link>http://0pointer.de/blog/projects/pa-one-dot-zero.html</link>
  <description><![CDATA[

<p><a href="http://www.freedesktop.org/wiki/Software/PulseAudio/Notes/1.0">PulseAudio 1.0 is out now.</a> It's awesome. Get it while it is hot!</p>

<p>I'd like to thank Colin Guthrie and Arun Raghavan (and all the others involved) for getting this release out of the door!</p>

]]></description>
</item>

<item>
  <title>systemd for Administrators, Part XI</title>
  <link>http://0pointer.de/blog/projects/inetd.html</link>
  <description><![CDATA[

<p>Here's the <a
href="http://0pointer.de/blog/projects/instances.html">eleventh</a> <a
href="http://0pointer.de/blog/projects/on-etc-sysinit.html">installment</a>
<a
href="http://0pointer.de/blog/projects/the-new-configuration-files.html">of</a>
<a href="http://0pointer.de/blog/projects/blame-game.html">my</a> <a
href="http://0pointer.de/blog/projects/changing-roots">ongoing</a> <a
href="http://0pointer.de/blog/projects/three-levels-of-off.html">series</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-4.html">on</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">systemd</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-2.html">for</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-1.html">Administrators</a>:</p>

<h4>Converting inetd Services</h4>

<p><a
href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">In a
previous episode of this series</a> I covered how to convert a SysV
init script to a systemd unit file. In this story I hope to explain
how to convert inetd services into systemd units.</p>

<p>Let's start with a bit of background. inetd has a long tradition as
one of the classic Unix services. As a superserver it listens on
an Internet socket on behalf of another service and then activate that
service on an incoming connection, thus implementing an on-demand
socket activation system. This allowed Unix machines with limited
resources to provide a large variety of services, without the need to
run processes and invest resources for all of them all of the
time. Over the years a number of independent implementations of inetd
have been shipped on Linux distributions. The most prominent being the
ones based on BSD inetd and xinetd. While inetd used to be installed
on most distributions by default, it nowadays is used only for very
few selected services and the common services are all run
unconditionally at boot, primarily for (perceived) performance
reasons.</p>

<p>One of the core feature of systemd (and Apple's launchd for the
matter) is socket activation, a scheme pioneered by inetd, however
back then with a different focus. Systemd-style socket activation focusses on
local sockets (AF_UNIX), not so much Internet sockets (AF_INET), even
though both are supported. And more importantly even, socket
activation in systemd is not primarily about the on-demand aspect that
was key in inetd, but more on increasing parallelization (socket
activation allows starting clients and servers of the socket at the
same time), simplicity (since the need to configure explicit
dependencies between services is removed) and robustness (since
services can be restarted or may crash without loss of connectivity of the
socket). However, systemd can also activate services on-demand when
connections are incoming, if configured that way.</p>

<p>Socket activation of any kind requires support in the services
themselves. systemd provides a very simple interface that services may
implement to provide socket activation, built around <a
href="http://0pointer.de/public/systemd-man/sd_listen_fds.html">sd_listen_fds()</a>. <a
href="http://0pointer.de/blog/projects/socket-activation.html">As such
it is already a very minimal, simple scheme</a>. However, the
traditional inetd interface is even simpler. It allows passing only a
single socket to the activated service: the socket fd is simply
duplicated to STDIN and STDOUT of the process spawned, and that's
already it. In order to provide compatibility systemd optionally
offers the same interface to processes, thus taking advantage of the
many services that already support inetd-style socket activation, but not yet
systemd's native activation.</p>

<p>Before we continue with a concrete example, let's have a look at
three different schemes to make use of socket activation:</p>

<ol>

<li><b>Socket activation for parallelization, simplicity,
robustness:</b> sockets are bound during early boot and a singleton
service instance to serve all client requests is immediately started
at boot. This is useful for all services that are very likely used
frequently and continously, and hence starting them early and in
parallel with the rest of the system is advisable. Examples: D-Bus,
Syslog.</li>

<li><b>On-demand socket activation for singleton services:</b> sockets
are bound during early boot and a singleton service instance is
executed on incoming traffic. This is useful for services that are
seldom used, where it is advisable to save the resources and time at
boot and delay activation until they are actually needed. Example: CUPS.</li>

<li><b>On-demand socket activation for per-connection service
instances:</b> sockets are bound during early boot and for each
incoming connection a new service instance is instantiated and the
connection socket (and not the listening one) is passed to it. This is
useful for services that are seldom used, and where performance is not
critical, i.e. where the cost of spawning a new service process for
each incoming connection is limited. Example: SSH.</li>

</ol>

<p>The three schemes provide different performance characteristics. After
the service finishes starting up the performance provided by the first two
schemes is identical to a stand-alone service (i.e. one that is
started without a super-server, without socket activation), since the
listening socket is passed to the actual service, and code paths from
then on are identical to those of a stand-alone service and all
connections are processes exactly the same way as they are in a
stand-alone service. On the other hand, performance of the third scheme
is usually not as good: since for each connection a new service needs
to be started the resource cost is much higher. However, it also has a
number of advantages: for example client connections are better
isolated and it is easier to develop services activated this way.</p>

<p>For systemd primarily the first scheme is in focus, however the
other two schemes are supported as well. (In fact, the blog story <a
href="http://0pointer.de/blog/projects/socket-activation2.html">I
covered the necessary code changes for systemd-style socket activation
in</a> was about a service of the second type, i.e. CUPS). inetd
primarily focusses on the third scheme, however the second scheme is
supported too. (The first one isn't. Presumably due the focus on the
third scheme inetd got its -- a bit unfair -- reputation for being
"slow".)</p>

<p>So much about the background, let's cut to the beef now and show an
inetd service can be integrated into systemd's socket
activation. We'll focus on SSH, a very common service that is widely
installed and used but on the vast majority of machines probably not
started more often than 1/h in average (and usually even much
less). SSH has supported inetd-style activation since a long time,
following the third scheme mentioned above. Since it is started only
every now and then and only with a limited number of connections at
the same time it is a very good candidate for this scheme as the extra
resource cost is negligble: if made socket-activatable SSH is
basically free as long as nobody uses it. And as soon as somebody logs
in via SSH it will be started and the moment he or she disconnects all
its resources are freed again. Let's find out how to make SSH
socket-activatable in systemd taking advantage of the provided inetd
compatibility!</p>

<p>Here's the configuration line used to hook up SSH with classic inetd:</p>

<pre>ssh stream tcp nowait root /usr/sbin/sshd sshd -i</pre>

<p>And the same as xinetd configuration fragment:</p>

<pre>service ssh {
        socket_type = stream
        protocol = tcp
        wait = no
        user = root
        server = /usr/sbin/sshd
        server_args = -i
}</pre>

<p>Most of this should be fairly easy to understand, as these two
fragments express very much the same information. The non-obvious
parts: the port number (22) is not configured in inetd configuration,
but indirectly via the service database in <tt>/etc/services</tt>: the
service name is used as lookup key in that database and translated to
a port number. This indirection via <tt>/etc/services</tt> has been
part of Unix tradition though has been getting more and more out of
fashion, and the newer xinetd hence optionally allows configuration
with explicit port numbers. The most interesting setting here is the
not very intuitively named <tt>nowait</tt> (resp. <tt>wait=no</tt>)
option. It configures whether a service is of the second
(<tt>wait</tt>) resp. third (<tt>nowait</tt>) scheme mentioned
above. Finally the <tt>-i</tt> switch is used to enabled inetd mode in
SSH.</p>

<p>The systemd translation of these configuration fragments are the
following two units. First: <tt>sshd.socket</tt> is a unit encapsulating
information about a socket to listen on:</p>

<pre>[Unit]
Description=SSH Socket for Per-Connection Servers

[Socket]
ListenStream=22
Accept=yes

[Install]
WantedBy=sockets.target
</pre>

<p>Most of this should be self-explanatory. A few notes:
<tt>Accept=yes</tt> corresponds to <tt>nowait</tt>. It's hopefully
better named, referring to the fact that for <tt>nowait</tt> the
superserver calls <tt>accept()</tt> on the listening socket, where for
<tt>wait</tt> this is the job of the executed
service process. <tt>WantedBy=sockets.target</tt> is used to ensure that when
enabled this unit is activated at boot at the right time.</p>

<p>And here's the matching service file <tt>sshd@.service</tt>:</p>

<pre>
[Unit]
Description=SSH Per-Connection Server

[Service]
ExecStart=-/usr/sbin/sshd -i
StandardInput=socket
</pre>

<p>This too should be mostly self-explanatory. Interesting is
<tt>StandardInput=socket</tt>, the option that enables inetd
compatibility for this service. <tt>StandardInput=</tt> may be used to
configure what STDIN of the service should be connected for this
service (see <a
href="http://0pointer.de/public/systemd-man/systemd.exec.html">the man
page for details</a>). By setting it to <tt>socket</tt> we make sure
to pass the connection socket here, as expected in the simple inetd
interface. Note that we do not need to explicitly configure
<tt>StandardOutput=</tt> here, since by default the setting from
<tt>StandardInput=</tt> is inherited if nothing else is
configured. Important is the "-" in front of the binary name. This
ensures that the exit status of the per-connection sshd process is
forgotten by systemd. Normally, systemd will store the exit status of
a all service instances that die abnormally. SSH will sometimes die
abnormally with an exit code of 1 or similar, and we want to make sure
that this doesn't cause systemd to keep around information for
numerous previous connections that died this way (until this
information is forgotten with <tt>systemctl reset-failed</tt>).</p>

<p><tt>sshd@.service</tt> is an instantiated service, as described <a
href="http://0pointer.de/blog/projects/instances.html">in the preceeding
installment of this series</a>. For each incoming connection systemd
will instantiate a new instance of <tt>sshd@.service</tt>, with the
instance identifier named after the connection credentials.</p>

<p>You may wonder why in systemd configuration of an inetd service
requires two unit files instead of one. The reason for this is that to
simplify things we want to make sure that the relation between live
units and unit files is obvious, while at the same time we can order
the socket unit and the service units independently in the dependency
graph and control the units as independently as possible. (Think: this
allows you to shutdown the socket independently from the instances,
and each instance individually.)</p>

<p>Now, let's see how this works in real life. If we drop these files
into <tt>/etc/systemd/system</tt> we are ready to enable the socket and
start it:</p>

<pre># systemctl enable sshd.socket
ln -s '/etc/systemd/system/sshd.socket' '/etc/systemd/system/sockets.target.wants/sshd.socket'
# systemctl start sshd.socket
# systemctl status sshd.socket
sshd.socket - SSH Socket for Per-Connection Servers
	  Loaded: loaded (/etc/systemd/system/sshd.socket; enabled)
	  Active: active (listening) since Mon, 26 Sep 2011 20:24:31 +0200; 14s ago
	Accepted: 0; Connected: 0
	  CGroup: name=systemd:/system/sshd.socket
</pre>

<p>This shows that the socket is listening, and so far no connections
have been made (<tt>Accepted:</tt> will show you how many connections
have been made in total since the socket was started,
<tt>Connected:</tt> how many connections are currently active.)</p>

<p>Now, let's connect to this from two different hosts, and see which services are now active:</p>

<pre>
$ systemctl --full | grep ssh
sshd@172.31.0.52:22-172.31.0.4:47779.service  loaded active running       SSH Per-Connection Server
sshd@172.31.0.52:22-172.31.0.54:52985.service loaded active running       SSH Per-Connection Server
sshd.socket                                   loaded active listening     SSH Socket for Per-Connection Servers
</pre>

<p>As expected, there are now two service instances running, for the
two connections, and they are named after the source and destination
address of the TCP connection as well as the port numbers. (For
AF_UNIX sockets the instance identifier will carry the PID and UID of
the connecting client.) This allows us to invidiually introspect or
kill specific sshd instances, in case you want to terminate the
session of a specific client:</p>

<pre># systemctl kill sshd@172.31.0.52:22-172.31.0.4:47779.service</pre>

<p>And that's probably already most of what you need to know for
hooking up inetd services with systemd and how to use them afterwards.</p>

<p>In the case of SSH it is probably a good suggestion for most
distributions in order to save resources to default to this kind of
inetd-style socket activation, but provide a stand-alone unit file to
sshd as well which can be enabled optionally. I'll soon file a
wishlist bug about this against our SSH package in Fedora.</p>

<p>A few final notes on how xinetd and systemd compare feature-wise,
and whether xinetd is fully obsoleted by systemd. The short answer
here is that systemd does not provide the full xinetd feature set and
that is does not fully obsolete xinetd. The longer answer is a bit
more complex: if you look at the <a
href="http://linux.die.net/man/5/xinetd.conf">multitude of options</a>
xinetd provides you'll notice that systemd does not compare. For
example, systemd does not come with built-in <tt>echo</tt>,
<tt>time</tt>, <tt>daytime</tt> or <tt>discard</tt> servers, and never
will include those. TCPMUX is not supported, and neither are RPC
services. However, you will also find that most of these are either
irrelevant on today's Internet or became other way out-of-fashion. The
vast majority of inetd services do not directly take advantage of
these additional features. In fact, none of the xinetd services
shipped on Fedora make use of these options. That said, there are a
couple of useful features that systemd does not support, for example
IP ACL management. However, most administrators will probably agree
that firewalls are the better solution for these kinds of problems and
on top of that, systemd supports ACL management via tcpwrap for those
who indulge in retro technologies like this. On the other hand systemd
also provides numerous features <tt>xinetd</tt> does not provide,
starting with the individual control of instances shown above, or the
more expressive configurability of the <a
href="http://0pointer.de/public/systemd-man/systemd.exec.html">execution
context for the instances</a>. I believe that what systemd provides is
quite comprehensive, comes with little legacy cruft but should provide
you with everything you need. And if there's something systemd does
not cover, <tt>xinetd</tt> will always be there to fill the void as
you can easily run it in conjunction with <tt>systemd</tt>. For the
majority of uses systemd should cover what is necessary, and allows
you cut down on the required components to build your system from. In
a way, systemd brings back the functionality of classic Unix inetd and
turns it again into a center piece of a Linux system.</p>

<p>And that's all for now. Thanks for reading this long piece. And
now, get going and convert your services over! Even better, do this
work in the individual packages upstream or in your distribution!</p>

]]></description>
</item>

	    <item>
      <title>systemd for Administrators, Part XI</title>
      <link>http://0pointer.de/blog/index.rss/projects/inetd</link>
      <description>
<p>Here's the <a
href="http://0pointer.de/blog/projects/instances.html">eleventh</a> <a
href="http://0pointer.de/blog/projects/on-etc-sysinit.html">installment</a>
<a
href="http://0pointer.de/blog/projects/the-new-configuration-files.html">of</a>
<a href="http://0pointer.de/blog/projects/blame-game.html">my</a> <a
href="http://0pointer.de/blog/projects/changing-roots">ongoing</a> <a
href="http://0pointer.de/blog/projects/three-levels-of-off.html">series</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-4.html">on</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">systemd</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-2.html">for</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-1.html">Administrators</a>:</p>

<h4>Converting inetd Services</h4>

<p><a
href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">In a
previous episode of this series</a> I covered how to convert a SysV
init script to a systemd unit file. In this story I hope to explain
how to convert inetd services into systemd units.</p>

<p>Let's start with a bit of background. inetd has a long tradition as
one of the classic Unix services. As a superserver it listens on
an Internet socket on behalf of another service and then activate that
service on an incoming connection, thus implementing an on-demand
socket activation system. This allowed Unix machines with limited
resources to provide a large variety of services, without the need to
run processes and invest resources for all of them all of the
time. Over the years a number of independent implementations of inetd
have been shipped on Linux distributions. The most prominent being the
ones based on BSD inetd and xinetd. While inetd used to be installed
on most distributions by default, it nowadays is used only for very
few selected services and the common services are all run
unconditionally at boot, primarily for (perceived) performance
reasons.</p>

<p>One of the core feature of systemd (and Apple's launchd for the
matter) is socket activation, a scheme pioneered by inetd, however
back then with a different focus. Systemd-style socket activation focusses on
local sockets (AF_UNIX), not so much Internet sockets (AF_INET), even
though both are supported. And more importantly even, socket
activation in systemd is not primarily about the on-demand aspect that
was key in inetd, but more on increasing parallelization (socket
activation allows starting clients and servers of the socket at the
same time), simplicity (since the need to configure explicit
dependencies between services is removed) and robustness (since
services can be restarted or may crash without loss of connectivity of the
socket). However, systemd can also activate services on-demand when
connections are incoming, if configured that way.</p>

<p>Socket activation of any kind requires support in the services
themselves. systemd provides a very simple interface that services may
implement to provide socket activation, built around <a
href="http://0pointer.de/public/systemd-man/sd_listen_fds.html">sd_listen_fds()</a>. <a
href="http://0pointer.de/blog/projects/socket-activation.html">As such
it is already a very minimal, simple scheme</a>. However, the
traditional inetd interface is even simpler. It allows passing only a
single socket to the activated service: the socket fd is simply
duplicated to STDIN and STDOUT of the process spawned, and that's
already it. In order to provide compatibility systemd optionally
offers the same interface to processes, thus taking advantage of the
many services that already support inetd-style socket activation, but not yet
systemd's native activation.</p>

<p>Before we continue with a concrete example, let's have a look at
three different schemes to make use of socket activation:</p>

<ol>

<li><b>Socket activation for parallelization, simplicity,
robustness:</b> sockets are bound during early boot and a singleton
service instance to serve all client requests is immediately started
at boot. This is useful for all services that are very likely used
frequently and continously, and hence starting them early and in
parallel with the rest of the system is advisable. Examples: D-Bus,
Syslog.</li>

<li><b>On-demand socket activation for singleton services:</b> sockets
are bound during early boot and a singleton service instance is
executed on incoming traffic. This is useful for services that are
seldom used, where it is advisable to save the resources and time at
boot and delay activation until they are actually needed. Example: CUPS.</li>

<li><b>On-demand socket activation for per-connection service
instances:</b> sockets are bound during early boot and for each
incoming connection a new service instance is instantiated and the
connection socket (and not the listening one) is passed to it. This is
useful for services that are seldom used, and where performance is not
critical, i.e. where the cost of spawning a new service process for
each incoming connection is limited. Example: SSH.</li>

</ol>

<p>The three schemes provide different performance characteristics. After
the service finishes starting up the performance provided by the first two
schemes is identical to a stand-alone service (i.e. one that is
started without a super-server, without socket activation), since the
listening socket is passed to the actual service, and code paths from
then on are identical to those of a stand-alone service and all
connections are processes exactly the same way as they are in a
stand-alone service. On the other hand, performance of the third scheme
is usually not as good: since for each connection a new service needs
to be started the resource cost is much higher. However, it also has a
number of advantages: for example client connections are better
isolated and it is easier to develop services activated this way.</p>

<p>For systemd primarily the first scheme is in focus, however the
other two schemes are supported as well. (In fact, the blog story <a
href="http://0pointer.de/blog/projects/socket-activation2.html">I
covered the necessary code changes for systemd-style socket activation
in</a> was about a service of the second type, i.e. CUPS). inetd
primarily focusses on the third scheme, however the second scheme is
supported too. (The first one isn't. Presumably due the focus on the
third scheme inetd got its -- a bit unfair -- reputation for being
"slow".)</p>

<p>So much about the background, let's cut to the beef now and show an
inetd service can be integrated into systemd's socket
activation. We'll focus on SSH, a very common service that is widely
installed and used but on the vast majority of machines probably not
started more often than 1/h in average (and usually even much
less). SSH has supported inetd-style activation since a long time,
following the third scheme mentioned above. Since it is started only
every now and then and only with a limited number of connections at
the same time it is a very good candidate for this scheme as the extra
resource cost is negligble: if made socket-activatable SSH is
basically free as long as nobody uses it. And as soon as somebody logs
in via SSH it will be started and the moment he or she disconnects all
its resources are freed again. Let's find out how to make SSH
socket-activatable in systemd taking advantage of the provided inetd
compatibility!</p>

<p>Here's the configuration line used to hook up SSH with classic inetd:</p>

<pre>ssh stream tcp nowait root /usr/sbin/sshd sshd -i</pre>

<p>And the same as xinetd configuration fragment:</p>

<pre>service ssh {
        socket_type = stream
        protocol = tcp
        wait = no
        user = root
        server = /usr/sbin/sshd
        server_args = -i
}</pre>

<p>Most of this should be fairly easy to understand, as these two
fragments express very much the same information. The non-obvious
parts: the port number (22) is not configured in inetd configuration,
but indirectly via the service database in <tt>/etc/services</tt>: the
service name is used as lookup key in that database and translated to
a port number. This indirection via <tt>/etc/services</tt> has been
part of Unix tradition though has been getting more and more out of
fashion, and the newer xinetd hence optionally allows configuration
with explicit port numbers. The most interesting setting here is the
not very intuitively named <tt>nowait</tt> (resp. <tt>wait=no</tt>)
option. It configures whether a service is of the second
(<tt>wait</tt>) resp. third (<tt>nowait</tt>) scheme mentioned
above. Finally the <tt>-i</tt> switch is used to enabled inetd mode in
SSH.</p>

<p>The systemd translation of these configuration fragments are the
following two units. First: <tt>sshd.socket</tt> is a unit encapsulating
information about a socket to listen on:</p>

<pre>[Unit]
Description=SSH Socket for Per-Connection Servers

[Socket]
ListenStream=22
Accept=yes

[Install]
WantedBy=sockets.target
</pre>

<p>Most of this should be self-explanatory. A few notes:
<tt>Accept=yes</tt> corresponds to <tt>nowait</tt>. It's hopefully
better named, referring to the fact that for <tt>nowait</tt> the
superserver calls <tt>accept()</tt> on the listening socket, where for
<tt>wait</tt> this is the job of the executed
service process. <tt>WantedBy=sockets.target</tt> is used to ensure that when
enabled this unit is activated at boot at the right time.</p>

<p>And here's the matching service file <tt>sshd@.service</tt>:</p>

<pre>
[Unit]
Description=SSH Per-Connection Server

[Service]
ExecStart=-/usr/sbin/sshd -i
StandardInput=socket
</pre>

<p>This too should be mostly self-explanatory. Interesting is
<tt>StandardInput=socket</tt>, the option that enables inetd
compatibility for this service. <tt>StandardInput=</tt> may be used to
configure what STDIN of the service should be connected for this
service (see <a
href="http://0pointer.de/public/systemd-man/systemd.exec.html">the man
page for details</a>). By setting it to <tt>socket</tt> we make sure
to pass the connection socket here, as expected in the simple inetd
interface. Note that we do not need to explicitly configure
<tt>StandardOutput=</tt> here, since by default the setting from
<tt>StandardInput=</tt> is inherited if nothing else is
configured. Important is the "-" in front of the binary name. This
ensures that the exit status of the per-connection sshd process is
forgotten by systemd. Normally, systemd will store the exit status of
a all service instances that die abnormally. SSH will sometimes die
abnormally with an exit code of 1 or similar, and we want to make sure
that this doesn't cause systemd to keep around information for
numerous previous connections that died this way (until this
information is forgotten with <tt>systemctl reset-failed</tt>).</p>

<p><tt>sshd@.service</tt> is an instantiated service, as described <a
href="http://0pointer.de/blog/projects/instances.html">in the preceeding
installment of this series</a>. For each incoming connection systemd
will instantiate a new instance of <tt>sshd@.service</tt>, with the
instance identifier named after the connection credentials.</p>

<p>You may wonder why in systemd configuration of an inetd service
requires two unit files instead of one. The reason for this is that to
simplify things we want to make sure that the relation between live
units and unit files is obvious, while at the same time we can order
the socket unit and the service units independently in the dependency
graph and control the units as independently as possible. (Think: this
allows you to shutdown the socket independently from the instances,
and each instance individually.)</p>

<p>Now, let's see how this works in real life. If we drop these files
into <tt>/etc/systemd/system</tt> we are ready to enable the socket and
start it:</p>

<pre># systemctl enable sshd.socket
ln -s '/etc/systemd/system/sshd.socket' '/etc/systemd/system/sockets.target.wants/sshd.socket'
# systemctl start sshd.socket
# systemctl status sshd.socket
sshd.socket - SSH Socket for Per-Connection Servers
	  Loaded: loaded (/etc/systemd/system/sshd.socket; enabled)
	  Active: active (listening) since Mon, 26 Sep 2011 20:24:31 +0200; 14s ago
	Accepted: 0; Connected: 0
	  CGroup: name=systemd:/system/sshd.socket
</pre>

<p>This shows that the socket is listening, and so far no connections
have been made (<tt>Accepted:</tt> will show you how many connections
have been made in total since the socket was started,
<tt>Connected:</tt> how many connections are currently active.)</p>

<p>Now, let's connect to this from two different hosts, and see which services are now active:</p>

<pre>
$ systemctl --full | grep ssh
sshd@172.31.0.52:22-172.31.0.4:47779.service  loaded active running       SSH Per-Connection Server
sshd@172.31.0.52:22-172.31.0.54:52985.service loaded active running       SSH Per-Connection Server
sshd.socket                                   loaded active listening     SSH Socket for Per-Connection Servers
</pre>

<p>As expected, there are now two service instances running, for the
two connections, and they are named after the source and destination
address of the TCP connection as well as the port numbers. (For
AF_UNIX sockets the instance identifier will carry the PID and UID of
the connecting client.) This allows us to invidiually introspect or
kill specific sshd instances, in case you want to terminate the
session of a specific client:</p>

<pre># systemctl kill sshd@172.31.0.52:22-172.31.0.4:47779.service</pre>

<p>And that's probably already most of what you need to know for
hooking up inetd services with systemd and how to use them afterwards.</p>

<p>In the case of SSH it is probably a good suggestion for most
distributions in order to save resources to default to this kind of
inetd-style socket activation, but provide a stand-alone unit file to
sshd as well which can be enabled optionally. I'll soon file a
wishlist bug about this against our SSH package in Fedora.</p>

<p>A few final notes on how xinetd and systemd compare feature-wise,
and whether xinetd is fully obsoleted by systemd. The short answer
here is that systemd does not provide the full xinetd feature set and
that is does not fully obsolete xinetd. The longer answer is a bit
more complex: if you look at the <a
href="http://linux.die.net/man/5/xinetd.conf">multitude of options</a>
xinetd provides you'll notice that systemd does not compare. For
example, systemd does not come with built-in <tt>echo</tt>,
<tt>time</tt>, <tt>daytime</tt> or <tt>discard</tt> servers, and never
will include those. TCPMUX is not supported, and neither are RPC
services. However, you will also find that most of these are either
irrelevant on today's Internet or became other way out-of-fashion. The
vast majority of inetd services do not directly take advantage of
these additional features. In fact, none of the xinetd services
shipped on Fedora make use of these options. That said, there are a
couple of useful features that systemd does not support, for example
IP ACL management. However, most administrators will probably agree
that firewalls are the better solution for these kinds of problems and
on top of that, systemd supports ACL management via tcpwrap for those
who indulge in retro technologies like this. On the other hand systemd
also provides numerous features <tt>xinetd</tt> does not provide,
starting with the individual control of instances shown above, or the
more expressive configurability of the <a
href="http://0pointer.de/public/systemd-man/systemd.exec.html">execution
context for the instances</a>. I believe that what systemd provides is
quite comprehensive, comes with little legacy cruft but should provide
you with everything you need. And if there's something systemd does
not cover, <tt>xinetd</tt> will always be there to fill the void as
you can easily run it in conjunction with <tt>systemd</tt>. For the
majority of uses systemd should cover what is necessary, and allows
you cut down on the required components to build your system from. In
a way, systemd brings back the functionality of classic Unix inetd and
turns it again into a center piece of a Linux system.</p>

<p>And that's all for now. Thanks for reading this long piece. And
now, get going and convert your services over! Even better, do this
work in the individual packages upstream or in your distribution!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-09-26T18:46:25Z</dc:date>
    </item>
<item>
  <title>systemd for Administrators, Part X</title>
  <link>http://0pointer.de/blog/projects/instances.html</link>
  <description><![CDATA[

<p>Here's the tenth <a
href="http://0pointer.de/blog/projects/on-etc-sysinit.html">installment</a>
<a
href="http://0pointer.de/blog/projects/the-new-configuration-files.html">of</a>
<a href="http://0pointer.de/blog/projects/blame-game.html">my</a> <a
href="http://0pointer.de/blog/projects/changing-roots">ongoing</a> <a
href="http://0pointer.de/blog/projects/three-levels-of-off.html">series</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-4.html">on</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">systemd</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-2.html">for</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-1.html">Administrators</a>:</p>

<h4>Instantiated Services</h4>

<p>Most services on Linux/Unix are <i>singleton</i> services: there's
usually only one instance of Syslog, Postfix, or Apache running on a
specific system at the same time. On the other hand some select
services may run in multiple instances on the same host. For example,
an Internet service like the Dovecot IMAP service could run in
multiple instances on different IP ports or different local IP
addresses. A more common example that exists on all installations is
<i>getty</i>, the mini service that runs once for each TTY and
presents a login prompt on it. On most systems this service is
instantiated once for each of the first six virtual consoles
<tt>tty1</tt> to <tt>tty6</tt>. On some servers depending on
administrator configuration or boot-time parameters an additional
getty is instantiated for a serial or virtualizer console. Another
common instantiated service in the systemd world is <i>fsck</i>, the
file system checker that is instantiated once for each block device
that needs to be checked. Finally, in systemd socket activated
per-connection services (think classic inetd!) are also implemented
via instantiated services: a new instance is created for each incoming
connection. In this installment I hope to explain a bit how systemd
implements instantiated services and how to take advantage of them as
an administrator.</p>

<p>If you followed the previous episodes of this series you are
probably aware that services in systemd are named according to the
pattern <tt><i>foobar</i>.service</tt>, where <i>foobar</i> is an
identification string for the service, and <tt>.service</tt> simply a
fixed suffix that is identical for all service units. The definition files
for these services are searched for in <tt>/etc/systemd/system</tt>
and <tt>/lib/systemd/system</tt> (and possibly other directories) under this name. For
instantiated services this pattern is extended a bit: the service name becomes
<tt><i>foobar</i>@<i>quux</i>.service</tt> where <i>foobar</i> is the
common service identifier, and <i>quux</i> the instance
identifier. Example: <tt>serial-getty@ttyS2.service</tt> is the serial
getty service instantiated for <tt>ttyS2</tt>.</p>

<p>Service instances can be created dynamically as needed. Without
further configuration you may easily start a new getty on a serial
port simply by invoking a <tt>systemctl start</tt> command for the new
instance:</p>

<pre># systemctl start serial-getty@ttyUSB0.service</pre>

<p>If a command like the above is run systemd will first look for a
unit configuration file by the exact name you requested. If this
service file is not found (and usually it isn't if you use
instantiated services like this) then the instance id is removed from
the name and a unit configuration file by the resulting
<i>template</i> name searched. In other words, in the above example,
if the precise <tt>serial-getty@ttyUSB0.service</tt> unit file cannot
be found, <tt>serial-getty@.service</tt> is loaded instead. This unit
template file will hence be common for all instances of this
service. For the serial getty we ship a template unit file in systemd
(<tt>/lib/systemd/system/serial-getty@.service</tt>) that looks
something like this:</p>

<pre>[Unit]
Description=Serial Getty on %I
BindTo=dev-%i.device
After=dev-%i.device systemd-user-sessions.service

[Service]
ExecStart=-/sbin/agetty -s %I 115200,38400,9600
Restart=always
RestartSec=0
</pre>

<p>(Note that the unit template file we actually ship along with
systemd for the serial gettys is a bit longer. If you are interested,
have a look at the <a
href="http://cgit.freedesktop.org/systemd/plain/units/serial-getty@.service.m4">actual
file</a> which includes additional directives for compatibility with
SysV, to clear the screen and remove previous users from the TTY
device. To keep things simple I have shortened the unit file to the
relevant lines here.)</p>

<p>This file looks mostly like any other unit file, with one
distinction: the specifiers <tt>%I</tt> and <tt>%i</tt> are used at
multiple locations. At unit load time <tt>%I</tt> and <tt>%i</tt> are
replaced by systemd with the instance identifier of the service. In
our example above, if a service is instantiated as
<tt>serial-getty@ttyUSB0.service</tt> the specifiers <tt>%I</tt> and
<tt>%i</tt> will be replaced by <tt>ttyUSB0</tt>. If you introspect
the instanciated unit with <tt>systemctl status
serial-getty@ttyUSB0.service</tt> you will see these replacements
having taken place:</p>

<pre>$ systemctl status serial-getty@ttyUSB0.service
serial-getty@ttyUSB0.service - Getty on ttyUSB0
	  Loaded: loaded (/lib/systemd/system/serial-getty@.service; static)
	  Active: active (running) since Mon, 26 Sep 2011 04:20:44 +0200; 2s ago
	Main PID: 5443 (agetty)
	  CGroup: name=systemd:/system/getty@.service/ttyUSB0
		  └ 5443 /sbin/agetty -s ttyUSB0 115200,38400,9600
</pre>

<p>And that is already the core idea of instantiated services in
systemd. As you can see systemd provides a very simple templating
system, which can be used to dynamically instantiate services as
needed. To make effective use of this, a few more notes:</p>

<p>You may instantiate these services <i>on-the-fly</i> in
<tt>.wants/</tt> symbolic links in the file system. For example, to
make sure the serial getty on <tt>ttyUSB0</tt> is started
automatically at every boot, create a symlink like this:</p>

<pre># ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@<b>ttyUSB0</b>.service</pre>

<p>systemd will instantiate the symlinked unit file with the
instance name specified in the symlink name.</p>

<p>You cannot instantiate a unit template without specifying an
instance identifier. In other words <tt>systemctl start
serial-getty@.service</tt> will necessarily fail since the instance
name was left unspecified.</p>

<p>Sometimes it is useful to <i>opt-out</i> of the generic template
for one specific instance. For these cases make use of the fact that
systemd always searches first for the full instance file name before
falling back to the template file name: make sure to place a unit file
under the fully instantiated name in <tt>/etc/systemd/system</tt> and
it will override the generic templated version for this specific
instance.</p>

<p>The unit file shown above uses <tt>%i</tt> at some places and
<tt>%I</tt> at others. You may wonder what the difference between
these specifiers are. <tt>%i</tt> is replaced by the exact characters
of the instance identifier. For <tt>%I</tt> on the other hand the
instance identifier is first passed through a simple unescaping
algorithm. In the case of a simple instance identifier like
<tt>ttyUSB0</tt> there is no effective difference. However, if the
device name includes one or more slashes ("<tt>/</tt>") this cannot be
part of a unit name (or Unix file name). Before such a device name can
be used as instance identifier it needs to be escaped so that "/"
becomes "-" and most other special characters (including "-") are
replaced by "\xAB" where AB is the ASCII code of the character in
hexadecimal notation<sup>[1]</sup>. Example: to refer to a USB serial port by its
bus path we want to use a port name like
<tt>serial/by-path/pci-0000:00:1d.0-usb-0:1.4:1.1-port0</tt>. The
escaped version of this name is
<tt>serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0</tt>. <tt>%I</tt>
will then refer to former, <tt>%i</tt> to the latter. Effectively this
means <tt>%i</tt> is useful wherever it is necessary to refer to other
units, for example to express additional dependencies. On the other
hand <tt>%I</tt> is useful for usage in command lines, or inclusion in
pretty description strings. Let's check how this looks with the above unit file:</p>

<pre># systemctl start 'serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.service'
# systemctl status 'serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.service'
serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.service - Serial Getty on serial/by-path/pci-0000:00:1d.0-usb-0:1.4:1.1-port0
	  Loaded: loaded (/lib/systemd/system/serial-getty@.service; static)
	  Active: active (running) since Mon, 26 Sep 2011 05:08:52 +0200; 1s ago
	Main PID: 5788 (agetty)
	  CGroup: name=systemd:/system/serial-getty@.service/serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0
		  └ 5788 /sbin/agetty -s serial/by-path/pci-0000:00:1d.0-usb-0:1.4:1.1-port0 115200 38400 9600
</pre>

<p>As we can see the while the instance identifier is the escaped
string the command line and the description string actually use the
unescaped version, as expected.</p>

<p>(Side note: there are more specifiers available than just
<tt>%i</tt> and <tt>%I</tt>, and many of them are actually
available in all unit files, not just templates for service
instances. For more details see the <a
href="http://0pointer.de/public/systemd-man/systemd.unit.html">man
page</a> which includes a full list and terse explanations.)</p>

<p>And at this point this shall be all for now. Stay tuned for a
follow-up article on how instantiated services are used for
<tt>inetd</tt>-style socket activation.</p>

<p><small><b>Footnotes</b></small></p>

<p><small>[1] Yupp, this escaping algorithm doesn't really result in
particularly pretty escaped strings, but then again, most escaping
algorithms don't help readability. The algorithm we used here is
inspired by what udev does in a similar case, with one change. In the
end, we had to pick something. If you'll plan to comment on the
escaping algorithm please also mention where you live so that I can
come around and paint your bike shed yellow with blue stripes. Thanks!</small></p>

]]></description>
</item>

	    <item>
      <title>systemd for Administrators, Part X</title>
      <link>http://0pointer.de/blog/index.rss/projects/instances</link>
      <description>
<p>Here's the tenth <a
href="http://0pointer.de/blog/projects/on-etc-sysinit.html">installment</a>
<a
href="http://0pointer.de/blog/projects/the-new-configuration-files.html">of</a>
<a href="http://0pointer.de/blog/projects/blame-game.html">my</a> <a
href="http://0pointer.de/blog/projects/changing-roots">ongoing</a> <a
href="http://0pointer.de/blog/projects/three-levels-of-off.html">series</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-4.html">on</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">systemd</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-2.html">for</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-1.html">Administrators</a>:</p>

<h4>Instantiated Services</h4>

<p>Most services on Linux/Unix are <i>singleton</i> services: there's
usually only one instance of Syslog, Postfix, or Apache running on a
specific system at the same time. On the other hand some select
services may run in multiple instances on the same host. For example,
an Internet service like the Dovecot IMAP service could run in
multiple instances on different IP ports or different local IP
addresses. A more common example that exists on all installations is
<i>getty</i>, the mini service that runs once for each TTY and
presents a login prompt on it. On most systems this service is
instantiated once for each of the first six virtual consoles
<tt>tty1</tt> to <tt>tty6</tt>. On some servers depending on
administrator configuration or boot-time parameters an additional
getty is instantiated for a serial or virtualizer console. Another
common instantiated service in the systemd world is <i>fsck</i>, the
file system checker that is instantiated once for each block device
that needs to be checked. Finally, in systemd socket activated
per-connection services (think classic inetd!) are also implemented
via instantiated services: a new instance is created for each incoming
connection. In this installment I hope to explain a bit how systemd
implements instantiated services and how to take advantage of them as
an administrator.</p>

<p>If you followed the previous episodes of this series you are
probably aware that services in systemd are named according to the
pattern <tt><i>foobar</i>.service</tt>, where <i>foobar</i> is an
identification string for the service, and <tt>.service</tt> simply a
fixed suffix that is identical for all service units. The definition files
for these services are searched for in <tt>/etc/systemd/system</tt>
and <tt>/lib/systemd/system</tt> (and possibly other directories) under this name. For
instantiated services this pattern is extended a bit: the service name becomes
<tt><i>foobar</i>@<i>quux</i>.service</tt> where <i>foobar</i> is the
common service identifier, and <i>quux</i> the instance
identifier. Example: <tt>serial-getty@ttyS2.service</tt> is the serial
getty service instantiated for <tt>ttyS2</tt>.</p>

<p>Service instances can be created dynamically as needed. Without
further configuration you may easily start a new getty on a serial
port simply by invoking a <tt>systemctl start</tt> command for the new
instance:</p>

<pre># systemctl start serial-getty@ttyUSB0.service</pre>

<p>If a command like the above is run systemd will first look for a
unit configuration file by the exact name you requested. If this
service file is not found (and usually it isn't if you use
instantiated services like this) then the instance id is removed from
the name and a unit configuration file by the resulting
<i>template</i> name searched. In other words, in the above example,
if the precise <tt>serial-getty@ttyUSB0.service</tt> unit file cannot
be found, <tt>serial-getty@.service</tt> is loaded instead. This unit
template file will hence be common for all instances of this
service. For the serial getty we ship a template unit file in systemd
(<tt>/lib/systemd/system/serial-getty@.service</tt>) that looks
something like this:</p>

<pre>[Unit]
Description=Serial Getty on %I
BindTo=dev-%i.device
After=dev-%i.device systemd-user-sessions.service

[Service]
ExecStart=-/sbin/agetty -s %I 115200,38400,9600
Restart=always
RestartSec=0
</pre>

<p>(Note that the unit template file we actually ship along with
systemd for the serial gettys is a bit longer. If you are interested,
have a look at the <a
href="http://cgit.freedesktop.org/systemd/plain/units/serial-getty@.service.m4">actual
file</a> which includes additional directives for compatibility with
SysV, to clear the screen and remove previous users from the TTY
device. To keep things simple I have shortened the unit file to the
relevant lines here.)</p>

<p>This file looks mostly like any other unit file, with one
distinction: the specifiers <tt>%I</tt> and <tt>%i</tt> are used at
multiple locations. At unit load time <tt>%I</tt> and <tt>%i</tt> are
replaced by systemd with the instance identifier of the service. In
our example above, if a service is instantiated as
<tt>serial-getty@ttyUSB0.service</tt> the specifiers <tt>%I</tt> and
<tt>%i</tt> will be replaced by <tt>ttyUSB0</tt>. If you introspect
the instanciated unit with <tt>systemctl status
serial-getty@ttyUSB0.service</tt> you will see these replacements
having taken place:</p>

<pre>$ systemctl status serial-getty@ttyUSB0.service
serial-getty@ttyUSB0.service - Getty on ttyUSB0
	  Loaded: loaded (/lib/systemd/system/serial-getty@.service; static)
	  Active: active (running) since Mon, 26 Sep 2011 04:20:44 +0200; 2s ago
	Main PID: 5443 (agetty)
	  CGroup: name=systemd:/system/getty@.service/ttyUSB0
		  └ 5443 /sbin/agetty -s ttyUSB0 115200,38400,9600
</pre>

<p>And that is already the core idea of instantiated services in
systemd. As you can see systemd provides a very simple templating
system, which can be used to dynamically instantiate services as
needed. To make effective use of this, a few more notes:</p>

<p>You may instantiate these services <i>on-the-fly</i> in
<tt>.wants/</tt> symbolic links in the file system. For example, to
make sure the serial getty on <tt>ttyUSB0</tt> is started
automatically at every boot, create a symlink like this:</p>

<pre># ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@<b>ttyUSB0</b>.service</pre>

<p>systemd will instantiate the symlinked unit file with the
instance name specified in the symlink name.</p>

<p>You cannot instantiate a unit template without specifying an
instance identifier. In other words <tt>systemctl start
serial-getty@.service</tt> will necessarily fail since the instance
name was left unspecified.</p>

<p>Sometimes it is useful to <i>opt-out</i> of the generic template
for one specific instance. For these cases make use of the fact that
systemd always searches first for the full instance file name before
falling back to the template file name: make sure to place a unit file
under the fully instantiated name in <tt>/etc/systemd/system</tt> and
it will override the generic templated version for this specific
instance.</p>

<p>The unit file shown above uses <tt>%i</tt> at some places and
<tt>%I</tt> at others. You may wonder what the difference between
these specifiers are. <tt>%i</tt> is replaced by the exact characters
of the instance identifier. For <tt>%I</tt> on the other hand the
instance identifier is first passed through a simple unescaping
algorithm. In the case of a simple instance identifier like
<tt>ttyUSB0</tt> there is no effective difference. However, if the
device name includes one or more slashes ("<tt>/</tt>") this cannot be
part of a unit name (or Unix file name). Before such a device name can
be used as instance identifier it needs to be escaped so that "/"
becomes "-" and most other special characters (including "-") are
replaced by "\xAB" where AB is the ASCII code of the character in
hexadecimal notation<sup>[1]</sup>. Example: to refer to a USB serial port by its
bus path we want to use a port name like
<tt>serial/by-path/pci-0000:00:1d.0-usb-0:1.4:1.1-port0</tt>. The
escaped version of this name is
<tt>serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0</tt>. <tt>%I</tt>
will then refer to former, <tt>%i</tt> to the latter. Effectively this
means <tt>%i</tt> is useful wherever it is necessary to refer to other
units, for example to express additional dependencies. On the other
hand <tt>%I</tt> is useful for usage in command lines, or inclusion in
pretty description strings. Let's check how this looks with the above unit file:</p>

<pre># systemctl start 'serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.service'
# systemctl status 'serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.service'
serial-getty@serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0.service - Serial Getty on serial/by-path/pci-0000:00:1d.0-usb-0:1.4:1.1-port0
	  Loaded: loaded (/lib/systemd/system/serial-getty@.service; static)
	  Active: active (running) since Mon, 26 Sep 2011 05:08:52 +0200; 1s ago
	Main PID: 5788 (agetty)
	  CGroup: name=systemd:/system/serial-getty@.service/serial-by\x2dpath-pci\x2d0000:00:1d.0\x2dusb\x2d0:1.4:1.1\x2dport0
		  └ 5788 /sbin/agetty -s serial/by-path/pci-0000:00:1d.0-usb-0:1.4:1.1-port0 115200 38400 9600
</pre>

<p>As we can see the while the instance identifier is the escaped
string the command line and the description string actually use the
unescaped version, as expected.</p>

<p>(Side note: there are more specifiers available than just
<tt>%i</tt> and <tt>%I</tt>, and many of them are actually
available in all unit files, not just templates for service
instances. For more details see the <a
href="http://0pointer.de/public/systemd-man/systemd.unit.html">man
page</a> which includes a full list and terse explanations.)</p>

<p>And at this point this shall be all for now. Stay tuned for a
follow-up article on how instantiated services are used for
<tt>inetd</tt>-style socket activation.</p>

<p><small><b>Footnotes</b></small></p>

<p><small>[1] Yupp, this escaping algorithm doesn't really result in
particularly pretty escaped strings, but then again, most escaping
algorithms don't help readability. The algorithm we used here is
inspired by what udev does in a similar case, with one change. In the
end, we had to pick something. If you'll plan to comment on the
escaping algorithm please also mention where you live so that I can
come around and paint your bike shed yellow with blue stripes. Thanks!</small></p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-09-26T03:11:54Z</dc:date>
    </item>
<item>
  <title>Boot/Init LPC MC Summary at LWN</title>
  <link>http://0pointer.de/blog/projects/lwn-lpc-2011.html</link>
  <description><![CDATA[

<p>Make sure to read the summary of the <a
href="http://lwn.net/SubscriberLink/458789/3ae00c9827889929/">Boot &amp; Init
Microconf at the Linux Plumbers Conference 2011 In Santa Rosa, CA</a>. It was a
fantastic conference (at the social event we took busses from the appetizers to
the mains...), and this summary should give you quite a good idea what
we discussed there. Highly recommended read.</p>

]]></description>
</item>

	    <item>
      <title>Boot/Init LPC MC Summary at LWN</title>
      <link>http://0pointer.de/blog/index.rss/projects/lwn-lpc-2011</link>
      <description>
<p>Make sure to read the summary of the <a
href="http://lwn.net/SubscriberLink/458789/3ae00c9827889929/">Boot &amp; Init
Microconf at the Linux Plumbers Conference 2011 In Santa Rosa, CA</a>. It was a
fantastic conference (at the social event we took busses from the appetizers to
the mains...), and this summary should give you quite a good idea what
we discussed there. Highly recommended read.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-09-17T15:56:05Z</dc:date>
    </item>
<item>
  <title>systemd US Tour Dates</title>
  <link>http://0pointer.de/blog/projects/us-tour-dates.html</link>
  <description><![CDATA[

<p>Kay Sievers, Harald Hoyer and I will tour the US in the next weeks. If you
have any questions on systemd, udev or dracut (or any of the related
technologies), then please do get in touch with us on the following occasions:</p>

<blockquote><p>Linux Plumbers Conference, Santa Rosa, CA, Sep 7-9th<br/>
Google, Googleplex, Mountain View, CA, Sep 12th<br/>
Red Hat, Westford, MA, Sep 13-14th</p></blockquote>

<p>As usual LPC is going to rock, so make sure to be there!</p>

]]></description>
</item>

	    <item>
      <title>systemd US Tour Dates</title>
      <link>http://0pointer.de/blog/index.rss/projects/us-tour-dates</link>
      <description>
<p>Kay Sievers, Harald Hoyer and I will tour the US in the next weeks. If you
have any questions on systemd, udev or dracut (or any of the related
technologies), then please do get in touch with us on the following occasions:</p>

<blockquote><p>Linux Plumbers Conference, Santa Rosa, CA, Sep 7-9th<br/>
Google, Googleplex, Mountain View, CA, Sep 12th<br/>
Red Hat, Westford, MA, Sep 13-14th</p></blockquote>

<p>As usual LPC is going to rock, so make sure to be there!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-09-01T13:37:17Z</dc:date>
    </item>
<item>
  <title>How to Write syslog Daemons Which Cooperate Nicely With systemd</title>
  <link>http://0pointer.de/blog/projects/syslog.html</link>
  <description><![CDATA[

<p>I just finished putting together a text on the systemd wiki explaining what
to do to write a syslog service that is nicely integrated with systemd, and
does all the right things. It's supposed to be a checklist for all syslog
hackers:</p>

<p><a href="http://www.freedesktop.org/wiki/Software/systemd/syslog">Read it now</a>.</p>

<p>rsyslog already implements everything on this list afaics, and that's
pretty cool. If other implementations want to catch up, please consider
following these recommendations, too.</p>

<p>I put this together since I have changed systemd 35 to set
<tt>StandardOutput=syslog</tt> as default, so that all stdout/stderr of all
services automatically ends up in syslog. And since that change requires some
(minimal) changes to all syslog implementations I decided to document this all
properly (if you are curious: they need to set <tt>StandardOutput=null</tt> to
opt out of this default in order to avoid logging loops).</p>

<p>Anyway, please have a peek and comment if you spot a mistake or
something I forgot. Or if you have questions, just ask.</p>

]]></description>
</item>

	    <item>
      <title>How to Write syslog Daemons Which Cooperate Nicely With systemd</title>
      <link>http://0pointer.de/blog/index.rss/projects/syslog</link>
      <description>
<p>I just finished putting together a text on the systemd wiki explaining what
to do to write a syslog service that is nicely integrated with systemd, and
does all the right things. It's supposed to be a checklist for all syslog
hackers:</p>

<p><a href="http://www.freedesktop.org/wiki/Software/systemd/syslog">Read it now</a>.</p>

<p>rsyslog already implements everything on this list afaics, and that's
pretty cool. If other implementations want to catch up, please consider
following these recommendations, too.</p>

<p>I put this together since I have changed systemd 35 to set
<tt>StandardOutput=syslog</tt> as default, so that all stdout/stderr of all
services automatically ends up in syslog. And since that change requires some
(minimal) changes to all syslog implementations I decided to document this all
properly (if you are curious: they need to set <tt>StandardOutput=null</tt> to
opt out of this default in order to avoid logging loops).</p>

<p>Anyway, please have a peek and comment if you spot a mistake or
something I forgot. Or if you have questions, just ask.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-08-30T21:14:25Z</dc:date>
    </item>
<item>
  <title>How to Behave Nicely in the cgroup Trees</title>
  <link>http://0pointer.de/blog/projects/pax-cgroups.html</link>
  <description><![CDATA[

<p>The Linux cgroup hierarchies of the various kernel controllers are a shared
resource. Recently many components of Linux userspace started making use of these
hierarchies. In order to avoid that the various programs step on each others
toes while manipulating this shared resource we have put together a list of
recommendations. Programs following these guidelines should work together
nicely without interfering with other users of the hierarchies.</p>

<p><a
href="http://www.freedesktop.org/wiki/Software/systemd/PaxControlGroups">These
guidelines are available in the systemd wiki.</a> I'd be very interested in
feedback, and would like to ask you to ping me in case we forgot something or left something too vague.</p>

<p>And please, if you are writing software that interfaces with the cgroup
tree consider following these recommendations. Thank you.</p>

]]></description>
</item>

	    <item>
      <title>How to Behave Nicely in the cgroup Trees</title>
      <link>http://0pointer.de/blog/index.rss/projects/pax-cgroups</link>
      <description>
<p>The Linux cgroup hierarchies of the various kernel controllers are a shared
resource. Recently many components of Linux userspace started making use of these
hierarchies. In order to avoid that the various programs step on each others
toes while manipulating this shared resource we have put together a list of
recommendations. Programs following these guidelines should work together
nicely without interfering with other users of the hierarchies.</p>

<p><a
href="http://www.freedesktop.org/wiki/Software/systemd/PaxControlGroups">These
guidelines are available in the systemd wiki.</a> I'd be very interested in
feedback, and would like to ask you to ping me in case we forgot something or left something too vague.</p>

<p>And please, if you are writing software that interfaces with the cgroup
tree consider following these recommendations. Thank you.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-08-19T14:25:40Z</dc:date>
    </item>
<item>
  <title>The Desktop Summit Wiki Is Full Of Interesting Stuff</title>
  <link>http://0pointer.de/blog/projects/ds-wiki.html</link>
  <description><![CDATA[

<p>Just wanted to draw your attention to the <a
href="http://wiki.desktopsummit.org/Main_Page">Desktop Summit Wiki</a>. If you
are attending the Desktop Summit in Berlin you might find some
interesting information in the Wiki.</p>

<ul> 

<li>If you are arriving by plane and want to share a ride (even
S-Bahn trains/bus) from ether of the two airports, consider adding your name to <a
href="http://wiki.desktopsummit.org/Attendee_Arrival_Dates">this list.</a> It's
still a bit empty (since I just set it up 3min ago) but that'll hopefully
change quickly.</li>

<li><a href="http://wiki.desktopsummit.org/Getting_around">Some information on getting around in Berlin</a> (i.e. which public transport tickets to buy)</li>

<li><a href="http://wiki.desktopsummit.org/Pre-paid_SIM">Where to get a SIM card for your phone</a></li>

<li><a href="http://wiki.desktopsummit.org/Sight-seeing">Some sights to see</a></li>

<li><a href="http://wiki.desktopsummit.org/Going_out">Where to get wasted</a></li>

<li><a href="http://wiki.desktopsummit.org/Food">Where to eat</a></li>

</ul>

<p><a href="http://wiki.desktopsummit.org/Main_Page">Go to the main page of
the Wiki here.</a> You are welcome to edit and add additional information to
the Wiki. To edit the Wiki authenticate with the same credentials you used to
sign up for the conference at the Desktop Summit web site.</p>

<p>See you on friday!</p>


]]></description>
</item>

	    <item>
      <title>The Desktop Summit Wiki Is Full Of Interesting Stuff</title>
      <link>http://0pointer.de/blog/index.rss/projects/ds-wiki</link>
      <description>
<p>Just wanted to draw your attention to the <a
href="http://wiki.desktopsummit.org/Main_Page">Desktop Summit Wiki</a>. If you
are attending the Desktop Summit in Berlin you might find some
interesting information in the Wiki.</p>

<ul> 

<li>If you are arriving by plane and want to share a ride (even
S-Bahn trains/bus) from ether of the two airports, consider adding your name to <a
href="http://wiki.desktopsummit.org/Attendee_Arrival_Dates">this list.</a> It's
still a bit empty (since I just set it up 3min ago) but that'll hopefully
change quickly.</li>

<li><a href="http://wiki.desktopsummit.org/Getting_around">Some information on getting around in Berlin</a> (i.e. which public transport tickets to buy)</li>

<li><a href="http://wiki.desktopsummit.org/Pre-paid_SIM">Where to get a SIM card for your phone</a></li>

<li><a href="http://wiki.desktopsummit.org/Sight-seeing">Some sights to see</a></li>

<li><a href="http://wiki.desktopsummit.org/Going_out">Where to get wasted</a></li>

<li><a href="http://wiki.desktopsummit.org/Food">Where to eat</a></li>

</ul>

<p><a href="http://wiki.desktopsummit.org/Main_Page">Go to the main page of
the Wiki here.</a> You are welcome to edit and add additional information to
the Wiki. To edit the Wiki authenticate with the same credentials you used to
sign up for the conference at the Desktop Summit web site.</p>

<p>See you on friday!</p>

</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-08-02T20:56:59Z</dc:date>
    </item>
<item>
  <title>Desktop Summit Announcements, Part II</title>
  <link>http://0pointer.de/blog/projects/desktop-summit-announce2.html</link>
  <description><![CDATA[

<p><a
href="http://0pointer.de/blog/projects/desktop-summit-announce.html">Read
the first part of the announcements.</a></p>

<p>And now there are more exciting announcements:</p>

<ul>

<li><a
href="https://desktopsummit.org/news/copyright-assignment-panel">The
Panel on Copyright Assignement</a> has been announced, featuring SUSE's <b>Michael Meeks</b>,
Canonical's <b>Mark Shuttleworth</b> and
<b>Bradley Kuhn</b> from the Software Freedom Conservancy. This
session will be moderated by GNOME's <b>Karen Sandler</b>.</li>

<li><a href="https://desktopsummit.org/interviews/nick-richards">The
fifth and final keynote Interview</a> has been published, with Nick
Richards from Intel.</li>

<li><a
href="https://desktopsummit.org/news/conference-attendee-policy-published">The
conference attendee policy</a> as been published.</li>

</ul>

<p>Only 5 days are now left to beginning of the conference. The <a href="https://desktopsummit.org/program/pre-registration">first event</a>
will already take place on <b>Friday August 5th</b>, at <b><a
href="http://www.c-base.org/">c-base</a> at U/S Jannowitzbr&uuml;cke</b>,
starting at 4pm. The conference programme itself will begin on <b>Saturday August
6th, 10am</b> (though do come earlier, for registration, if you didn't register at
the c-base event already!). Note that the primary entrance to the Desktop
Summit is in the <b>north-eastern corner</b> of the main building of Humboldt
University. That's on Dorotheenstr./Hegelplatz, and <i>not</i> on Unter den
Linden.</p>

<p>See you on Friday at c-base!</p>

]]></description>
</item>

	    <item>
      <title>Desktop Summit Announcements, Part II</title>
      <link>http://0pointer.de/blog/index.rss/projects/desktop-summit-announce2</link>
      <description>
<p><a
href="http://0pointer.de/blog/projects/desktop-summit-announce.html">Read
the first part of the announcements.</a></p>

<p>And now there are more exciting announcements:</p>

<ul>

<li><a
href="https://desktopsummit.org/news/copyright-assignment-panel">The
Panel on Copyright Assignement</a> has been announced, featuring SUSE's <b>Michael Meeks</b>,
Canonical's <b>Mark Shuttleworth</b> and
<b>Bradley Kuhn</b> from the Software Freedom Conservancy. This
session will be moderated by GNOME's <b>Karen Sandler</b>.</li>

<li><a href="https://desktopsummit.org/interviews/nick-richards">The
fifth and final keynote Interview</a> has been published, with Nick
Richards from Intel.</li>

<li><a
href="https://desktopsummit.org/news/conference-attendee-policy-published">The
conference attendee policy</a> as been published.</li>

</ul>

<p>Only 5 days are now left to beginning of the conference. The <a href="https://desktopsummit.org/program/pre-registration">first event</a>
will already take place on <b>Friday August 5th</b>, at <b><a
href="http://www.c-base.org/">c-base</a> at U/S Jannowitzbr&uuml;cke</b>,
starting at 4pm. The conference programme itself will begin on <b>Saturday August
6th, 10am</b> (though do come earlier, for registration, if you didn't register at
the c-base event already!). Note that the primary entrance to the Desktop
Summit is in the <b>north-eastern corner</b> of the main building of Humboldt
University. That's on Dorotheenstr./Hegelplatz, and <i>not</i> on Unter den
Linden.</p>

<p>See you on Friday at c-base!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-08-01T16:08:29Z</dc:date>
    </item>
<item>
  <title>Desktop Summit Announcements</title>
  <link>http://0pointer.de/blog/projects/desktop-summit-announce.html</link>
  <description><![CDATA[

<p>In case you missed them, there have been a couple of exciting announcements
around the Desktop Summit in Berlin, Germany.</p>

<ul>
<li><a href="https://desktopsummit.org/program/keynotes">The three keynotes have been announced</a>.</li>

<li>Interviews with the keynote speakers have been published: <a
href="https://desktopsummit.org/interviews/thomas-thwaite">Thomas Twaite</a>,
<a href="https://desktopsummit.org/interviews/claire-rowland">Claire
Rowland</a>, <a href="https://desktopsummit.org/interviews/dirk-hohndel">Dirk
Hohndel</a>, <a
href="https://desktopsummit.org/%20interviews/stuart-jarvis">Stuart
Jarvis</a>.</li>

<li><a href="https://desktopsummit.org/news/t-shirt-design-chosen">The Desktop
Summit T-Shirt design has been announced.</a></li>

<li><a
href="http://blixtra.org/blog/2011/07/21/desktop-summit-the-social-events/">The
Desktop Summit social events have been announced.</a> One is on an island! In the river Spree! In summer! In Berlin! How awesome is that?</li>

<li><a href="https://desktopsummit.org/program/workshops-bofs">The BoF and workshop schedule has been published.</a></li>
</ul>

<p>And there will be more exciting announcements coming!</p>

<p>See you in 14 days! Oh, and if you still haven't registered, <a href="https://desktopsummit.org/register">do so now</a>. It's free, and if you don't register you might not get on the WLAN at the conference right-away.</p>

]]></description>
</item>

	    <item>
      <title>Desktop Summit Announcements</title>
      <link>http://0pointer.de/blog/index.rss/projects/desktop-summit-announce</link>
      <description>
<p>In case you missed them, there have been a couple of exciting announcements
around the Desktop Summit in Berlin, Germany.</p>

<ul>
<li><a href="https://desktopsummit.org/program/keynotes">The three keynotes have been announced</a>.</li>

<li>Interviews with the keynote speakers have been published: <a
href="https://desktopsummit.org/interviews/thomas-thwaite">Thomas Twaite</a>,
<a href="https://desktopsummit.org/interviews/claire-rowland">Claire
Rowland</a>, <a href="https://desktopsummit.org/interviews/dirk-hohndel">Dirk
Hohndel</a>, <a
href="https://desktopsummit.org/%20interviews/stuart-jarvis">Stuart
Jarvis</a>.</li>

<li><a href="https://desktopsummit.org/news/t-shirt-design-chosen">The Desktop
Summit T-Shirt design has been announced.</a></li>

<li><a
href="http://blixtra.org/blog/2011/07/21/desktop-summit-the-social-events/">The
Desktop Summit social events have been announced.</a> One is on an island! In the river Spree! In summer! In Berlin! How awesome is that?</li>

<li><a href="https://desktopsummit.org/program/workshops-bofs">The BoF and workshop schedule has been published.</a></li>
</ul>

<p>And there will be more exciting announcements coming!</p>

<p>See you in 14 days! Oh, and if you still haven't registered, <a href="https://desktopsummit.org/register">do so now</a>. It's free, and if you don't register you might not get on the WLAN at the conference right-away.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-07-22T19:15:40Z</dc:date>
    </item>
<item>
  <title>systemd for Administrators, Part IX</title>
  <link>http://0pointer.de/blog/projects/on-etc-sysinit.html</link>
  <description><![CDATA[

<p>Here's the ninth installment 
<a href="http://0pointer.de/blog/projects/the-new-configuration-files.html">of</a>
<a
href="http://0pointer.de/blog/projects/blame-game.html">my</a>
<a
href="http://0pointer.de/blog/projects/changing-roots">ongoing</a>
<a
href="http://0pointer.de/blog/projects/three-levels-of-off.html">series</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-4.html">on</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">systemd</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-2.html">for</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-1.html">Administrators</a>:</p>

<h4>On /etc/sysconfig and /etc/default</h4>

<p>So, here's a bit of an opinion piece on the <tt>/etc/sysconfig/</tt> and
<tt>/etc/default</tt> directories that exist on the various distributions in
one form or another, and why I believe their use should be faded out.  Like
everything I say on this blog what follows is just my personal opinion, and not
the gospel and has nothing to do with the position of the Fedora project or my
employer. The topic of <tt>/etc/sysconfig</tt> has been coming up in
discussions over and over again. I hope with this blog story I can explain a
bit what we as systemd upstream think about these files.</p>

<p>A few lines about the historical context: I wasn't around when
/etc/sysconfig was introduced -- suffice to say it has been around on Red Hat
and SUSE distributions since a long long time. Eventually /etc/default was
introduced on Debian with very similar semantics. Many other distributions know
a directory with similar semantics too, most of them call it either one or the
other way.  In fact, even other Unix-OSes sported a directory like this. (Such
as SCO. If you are interested in the details, I am sure a Unix greybeard of
your trust can fill in what I am leaving vague here.) So, even though a
directory like this has been known widely on Linuxes and Unixes, it never has
been standardized, neither in POSIX nor in LSB/FHS. These directories very much
are something where distributions distuingish themselves from each other.</p>

<p>The semantics of <tt>/etc/default</tt> and <tt>/etc/sysconfig</tt> are very
losely defined only. What almost all files stored in these directories have in common
though is that they are sourcable shell scripts which primarily consist of
environment variable assignments. Most of the files in these directories are
sourced by the SysV init scripts of the same name. The <a
href="http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit">Debian
Policy Manual (9.3.2)</a> and the <a
href="http://fedoraproject.org/wiki/Packaging:SysVInitScript">Fedora Packaging
Guidelines</a> suggest this use of the directories, however both distributions
also have files in them that do not follow this scheme, i.e. that do not have a
matching SysV init script -- or not even are shell scripts at all.</p>

<p>Why have these files been introduced? On SysV systems services are started
via init scripts in <tt>/etc/rc.d/init.d</tt> (or a similar directory).
<tt>/etc/</tt> is (these days) considered the place where system configuration
is stored. Originally these init scripts were subject to customization by the
administrator. But as they grew and become complex most distributions no longer
considered them true configuration files, but more just a special kind of programs.
To make customization easy and guarantee a safe upgrade path the customizable
bits hence have been moved to separate configuration files, which the init
scripts then source.</p>

<p>Let's have a quick look what kind of configuration you can do with these
files. Here's a short incomprehensive list of various things that can be
configured via environment settings in these source files I found browsing
through the directories on a Fedora and a Debian machine:</p>

<ul>
<li>Additional command line parameters for the daemon binaries</li>
<li>Locale settings for a daemon</li>
<li>Shutdown time-out for a daemon</li>
<li>Shutdown mode for a daemon</li>
<li>System configuration like system locale, time zone information, console keyboard</li>
<li>Redundant system configuration, like whether the RTC is in local timezone</li>
<li>Firewall configuration data, not in shell format (!)</li>
<li>CPU affinity for a daemon</li>
<li>Settings unrelated to boot, for example including information how to install a new kernel package, how to configure nspluginwrap or whether to do library prelinking</li>
<li>Whether a specific service should be started or not</li>
<li>Networking configuration</li>
<li>Which kernel modules to statically load</li>
<li>Whether to halt or power-off on shutdown</li>
<li>Access modes for device nodes (!)</li>
<li>A description string for the SysV service (!)</li>
<li>The user/group ID, umask to run specific daemons as</li>
<li>Resource limits to set for a specific daemon</li>
<li>OOM adjustment to set for a specific daemon</li>
</ul>

<p>Now, let's go where the beef is: what's wrong with <tt>/etc/sysconfig</tt>
(resp. <tt>/etc/default</tt>)? Why might it make sense to fade out use of these
files in a systemd world?</p>

<ul> 

<li>For the majority of these files the reason for having them simply does not
exist anymore: systemd unit files are not programs like SysV init scripts
were. Unit files are simple, declarative descriptions, that usually do not consist of more
than 6 lines or so. They can easily be generated, parsed without a Bourne
interpreter and understood by the reader. Also, they are very easy to modify:
just copy them from <tt>/lib/systemd/system</tt> to
<tt>/etc/systemd/system</tt> and edit them there, where they will not be
modified by the package manager. The need to separate code and configuration
that was the original reason to introduce these files does not exist anymore,
as systemd unit files do not include code. These files hence now are a solution
looking for a problem that no longer exists.</li>

<li>They are inherently distribution-specific. With systemd we hope to encourage
standardization between distributions. Part of this is that we want that unit files are
supplied with upstream, and not just added by the packager -- how it has usually
been done in the SysV world. Since the location of the directory and the
available variables in the files is very different on each distribution,
supporting <tt>/etc/sysconfig</tt> files in upstream unit files is not
feasible. Configuration stored in these files works against de-balkanization of
the Linux platform.</li>

<li>Many settings are fully redundant in a systemd world. For example, various
services support configuration of the process credentials like the user/group
ID, resource limits, CPU affinity or the OOM adjustment settings. However, these settings are
supported only by some SysV init scripts, and often have different names if
supported in multiple of them. OTOH in systemd, all these settings are
available equally and uniformly for all services, with the same configuration
option in unit files.</li>

<li>Unit files know a large number of easy-to-use process context settings,
that are more comprehensive than what most <tt>/etc/sysconfig</tt> files offer.</li>

<li>A number of these settings are entirely questionnabe. For example, the
aforementiond configuration option for the user/group ID a service runs as is
primarily something the distributor has to take care of. There is little to win
for administrators to change these settings, and only the distributor has the
broad overview to make sure that UID/GID and name collisions do not
happen.</li>

<li>The file format is not ideal. Since the files are usually sourced as shell
scripts, parse errors are very hard to decypher and are not logged along the
other configuration problems of the services. Generally, unknown variable
assignments simply have no effect but this is not warned about. This makes
these files harder to debug than necessary.</li>

<li>Configuration files sources from shell scripts are subject to the execution
parameters of the interpreter, and it has many: settings like IFS or LANG tend
to modify drastically how shell scripts are parsed and understood. This makes
them fragile.</li>

<li>Interpretation of these files is slow, since it requires spawning of a
shell, which adds at least one process for each service to be spawned at boot.</li>

<li>Often, files in <tt>/etc/sysconfig</tt> are used to "fake" configuration
files for daemons which do not support configuration files natively. This is
done by glueing together command line arguments from these variable assignments
that are then passed to the daemon. In general proper, native configuration
files in these daemons are the much prettier solution however. Command line
options like "-k", "-a" or "-f" are not self-explanatory and have a very
cryptic syntax. Moreover the same switches in many daemons have (due to the
limited vocabulary) often very much contradicting effects. (On one daemon
<tt>-f</tt> might cause the daemon to daemonize, while on another one this
option turns exactly this behaviour off.) Command lines generally cannot include
sensible comments which most configuration files however can.</li>

<li>A number of configuration settings in <tt>/etc/sysconfig</tt> are entirely
redundant: for example, on many distributions it can be controlled via
<tt>/etc/sysconfig</tt> files whether the RTC is in UTC or local time. Such an
option already exists however in the 3rd line of the <tt>/etc/adjtime</tt>
(which is known on all distributions). Adding a second, redundant,
distribution-specific option overriding this is hence needless and complicates
things for no benefit.</li>

<li>Many of the configuration settings in <tt>/etc/sysconfig</tt> allow
disabling services. By this they basically become a second level of
enabling/disabling over what the init system already offers: when a service is
enabled with <tt>systemctl enable</tt> or <tt>chkconfig on</tt> these settings
override this, and turn the daemon of even though the init system was
configured to start it. This of course is very confusing to the
user/administrator, and brings virtually no benefit.</li>

<li>For options like the configuration of static kernel modules to load: there
are nowadays usually much better ways to load kernel modules at boot. For
example, most modules may now be autoloaded by udev when the right hardware is
found.  This goes very far, and even includes ACPI and other high-level
technologies.  One of the very few exceptions where we currently do not do
kernel module autoloading is CPU feature and model based autoloading which
however will be supported soon too. And even if your specific module cannot be
auto-loaded there's usually a better way to statically load it, for example by
sticking it in <tt>/etc/load-modules.d</tt> so that the administrator can check
a standardized place for all statically loaded modules.</li>

<li>Last but not least, /etc already is intended to be the place for system
configuration ("Host-specific system configuration" according to FHS). A
subdirectory beneath it called <tt>sysconfig</tt> to place system configuration
in is hence entirely redundant, already on the language level.</li>

</ul>

<p>What to use instead? Here are a few recommendations of what to do with these
files in the long run in a systemd world:</p>

<ul>

<li>Just drop them without replacement. If they are fully redundant (like the
local/UTC RTC setting) this is should be a relatively easy way out (well,
ignoring the need for compatibility). If systemd natively supports an
equivalent option in the unit files there is no need to duplicate these
settings in <tt>sysconfig</tt> files. For a list of execution options you may
set for a service check out the respective man pages: <a
href="http://0pointer.de/public/systemd-man/systemd.exec.html">systemd.exec(5)</a>
and <a
href="http://0pointer.de/public/systemd-man/systemd.service.html">systemd.service(5)</a>.
If your setting simply adds another layer where a service can be disabled,
remove it to keep things simple. There's no need to have multiple ways to
disable a service.</li>

<li>Find a better place for them. For configuration of the system locale or
system timezone we hope to gently push distributions into the right direction,
for more details see <a
href="http://0pointer.de/blog/projects/the-new-configuration-files.html">previous
episode of this series</a>.</li>

<li>Turn these settings into native settings of the daemon. If necessary add
support for reading native configuration files to the daemon. Thankfully, most
of the stuff we run on Linux is Free Software, so this can relatively easily be
done.</li>

</ul>

<p>Of course, there's one very good reason for supporting these files for a bit
longer: compatibility for upgrades. But that's is really the only one I could
come up with. It's reason enough to keep compatibility for a while, but I think
it is a good idea to phase out usage of these files at least in new packages.</p>

<p>If compatibility is important, then systemd will still allow you to read
these configuration files even if you otherwise use native systemd unit files.
If your <tt>sysconfig</tt> file only knows simple options
<tt>EnvironmentFile=-/etc/sysconfig/foobar</tt> (<a href="http://0pointer.de/public/systemd-man/systemd.exec.html">See systemd.exec(5) for more information about this option.</a>) may be used to import the
settings into the environment and use them to put together command lines. If
you need a programming language to make sense of these settings, then use a
programming language like shell. For example, place an short shell script in
<tt>/usr/lib/<i>&lt;your package&gt;</i>/</tt> which reads these files for
compatibility, and then <tt>exec</tt>'s the actual daemon binary. Then spawn
this script instead of the actual daemon binary with <tt>ExecStart=</tt> in the
unit file.</p>

<p>And this is all for now. Thank you very much
for your interest.</p>

]]></description>
</item>

	    <item>
      <title>systemd for Administrators, Part IX</title>
      <link>http://0pointer.de/blog/index.rss/projects/on-etc-sysinit</link>
      <description>
<p>Here's the ninth installment 
<a href="http://0pointer.de/blog/projects/the-new-configuration-files.html">of</a>
<a
href="http://0pointer.de/blog/projects/blame-game.html">my</a>
<a
href="http://0pointer.de/blog/projects/changing-roots">ongoing</a>
<a
href="http://0pointer.de/blog/projects/three-levels-of-off.html">series</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-4.html">on</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">systemd</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-2.html">for</a>
<a
href="http://0pointer.de/blog/projects/systemd-for-admins-1.html">Administrators</a>:</p>

<h4>On /etc/sysconfig and /etc/default</h4>

<p>So, here's a bit of an opinion piece on the <tt>/etc/sysconfig/</tt> and
<tt>/etc/default</tt> directories that exist on the various distributions in
one form or another, and why I believe their use should be faded out.  Like
everything I say on this blog what follows is just my personal opinion, and not
the gospel and has nothing to do with the position of the Fedora project or my
employer. The topic of <tt>/etc/sysconfig</tt> has been coming up in
discussions over and over again. I hope with this blog story I can explain a
bit what we as systemd upstream think about these files.</p>

<p>A few lines about the historical context: I wasn't around when
/etc/sysconfig was introduced -- suffice to say it has been around on Red Hat
and SUSE distributions since a long long time. Eventually /etc/default was
introduced on Debian with very similar semantics. Many other distributions know
a directory with similar semantics too, most of them call it either one or the
other way.  In fact, even other Unix-OSes sported a directory like this. (Such
as SCO. If you are interested in the details, I am sure a Unix greybeard of
your trust can fill in what I am leaving vague here.) So, even though a
directory like this has been known widely on Linuxes and Unixes, it never has
been standardized, neither in POSIX nor in LSB/FHS. These directories very much
are something where distributions distuingish themselves from each other.</p>

<p>The semantics of <tt>/etc/default</tt> and <tt>/etc/sysconfig</tt> are very
losely defined only. What almost all files stored in these directories have in common
though is that they are sourcable shell scripts which primarily consist of
environment variable assignments. Most of the files in these directories are
sourced by the SysV init scripts of the same name. The <a
href="http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit">Debian
Policy Manual (9.3.2)</a> and the <a
href="http://fedoraproject.org/wiki/Packaging:SysVInitScript">Fedora Packaging
Guidelines</a> suggest this use of the directories, however both distributions
also have files in them that do not follow this scheme, i.e. that do not have a
matching SysV init script -- or not even are shell scripts at all.</p>

<p>Why have these files been introduced? On SysV systems services are started
via init scripts in <tt>/etc/rc.d/init.d</tt> (or a similar directory).
<tt>/etc/</tt> is (these days) considered the place where system configuration
is stored. Originally these init scripts were subject to customization by the
administrator. But as they grew and become complex most distributions no longer
considered them true configuration files, but more just a special kind of programs.
To make customization easy and guarantee a safe upgrade path the customizable
bits hence have been moved to separate configuration files, which the init
scripts then source.</p>

<p>Let's have a quick look what kind of configuration you can do with these
files. Here's a short incomprehensive list of various things that can be
configured via environment settings in these source files I found browsing
through the directories on a Fedora and a Debian machine:</p>

<ul>
<li>Additional command line parameters for the daemon binaries</li>
<li>Locale settings for a daemon</li>
<li>Shutdown time-out for a daemon</li>
<li>Shutdown mode for a daemon</li>
<li>System configuration like system locale, time zone information, console keyboard</li>
<li>Redundant system configuration, like whether the RTC is in local timezone</li>
<li>Firewall configuration data, not in shell format (!)</li>
<li>CPU affinity for a daemon</li>
<li>Settings unrelated to boot, for example including information how to install a new kernel package, how to configure nspluginwrap or whether to do library prelinking</li>
<li>Whether a specific service should be started or not</li>
<li>Networking configuration</li>
<li>Which kernel modules to statically load</li>
<li>Whether to halt or power-off on shutdown</li>
<li>Access modes for device nodes (!)</li>
<li>A description string for the SysV service (!)</li>
<li>The user/group ID, umask to run specific daemons as</li>
<li>Resource limits to set for a specific daemon</li>
<li>OOM adjustment to set for a specific daemon</li>
</ul>

<p>Now, let's go where the beef is: what's wrong with <tt>/etc/sysconfig</tt>
(resp. <tt>/etc/default</tt>)? Why might it make sense to fade out use of these
files in a systemd world?</p>

<ul> 

<li>For the majority of these files the reason for having them simply does not
exist anymore: systemd unit files are not programs like SysV init scripts
were. Unit files are simple, declarative descriptions, that usually do not consist of more
than 6 lines or so. They can easily be generated, parsed without a Bourne
interpreter and understood by the reader. Also, they are very easy to modify:
just copy them from <tt>/lib/systemd/system</tt> to
<tt>/etc/systemd/system</tt> and edit them there, where they will not be
modified by the package manager. The need to separate code and configuration
that was the original reason to introduce these files does not exist anymore,
as systemd unit files do not include code. These files hence now are a solution
looking for a problem that no longer exists.</li>

<li>They are inherently distribution-specific. With systemd we hope to encourage
standardization between distributions. Part of this is that we want that unit files are
supplied with upstream, and not just added by the packager -- how it has usually
been done in the SysV world. Since the location of the directory and the
available variables in the files is very different on each distribution,
supporting <tt>/etc/sysconfig</tt> files in upstream unit files is not
feasible. Configuration stored in these files works against de-balkanization of
the Linux platform.</li>

<li>Many settings are fully redundant in a systemd world. For example, various
services support configuration of the process credentials like the user/group
ID, resource limits, CPU affinity or the OOM adjustment settings. However, these settings are
supported only by some SysV init scripts, and often have different names if
supported in multiple of them. OTOH in systemd, all these settings are
available equally and uniformly for all services, with the same configuration
option in unit files.</li>

<li>Unit files know a large number of easy-to-use process context settings,
that are more comprehensive than what most <tt>/etc/sysconfig</tt> files offer.</li>

<li>A number of these settings are entirely questionnabe. For example, the
aforementiond configuration option for the user/group ID a service runs as is
primarily something the distributor has to take care of. There is little to win
for administrators to change these settings, and only the distributor has the
broad overview to make sure that UID/GID and name collisions do not
happen.</li>

<li>The file format is not ideal. Since the files are usually sourced as shell
scripts, parse errors are very hard to decypher and are not logged along the
other configuration problems of the services. Generally, unknown variable
assignments simply have no effect but this is not warned about. This makes
these files harder to debug than necessary.</li>

<li>Configuration files sources from shell scripts are subject to the execution
parameters of the interpreter, and it has many: settings like IFS or LANG tend
to modify drastically how shell scripts are parsed and understood. This makes
them fragile.</li>

<li>Interpretation of these files is slow, since it requires spawning of a
shell, which adds at least one process for each service to be spawned at boot.</li>

<li>Often, files in <tt>/etc/sysconfig</tt> are used to "fake" configuration
files for daemons which do not support configuration files natively. This is
done by glueing together command line arguments from these variable assignments
that are then passed to the daemon. In general proper, native configuration
files in these daemons are the much prettier solution however. Command line
options like "-k", "-a" or "-f" are not self-explanatory and have a very
cryptic syntax. Moreover the same switches in many daemons have (due to the
limited vocabulary) often very much contradicting effects. (On one daemon
<tt>-f</tt> might cause the daemon to daemonize, while on another one this
option turns exactly this behaviour off.) Command lines generally cannot include
sensible comments which most configuration files however can.</li>

<li>A number of configuration settings in <tt>/etc/sysconfig</tt> are entirely
redundant: for example, on many distributions it can be controlled via
<tt>/etc/sysconfig</tt> files whether the RTC is in UTC or local time. Such an
option already exists however in the 3rd line of the <tt>/etc/adjtime</tt>
(which is known on all distributions). Adding a second, redundant,
distribution-specific option overriding this is hence needless and complicates
things for no benefit.</li>

<li>Many of the configuration settings in <tt>/etc/sysconfig</tt> allow
disabling services. By this they basically become a second level of
enabling/disabling over what the init system already offers: when a service is
enabled with <tt>systemctl enable</tt> or <tt>chkconfig on</tt> these settings
override this, and turn the daemon of even though the init system was
configured to start it. This of course is very confusing to the
user/administrator, and brings virtually no benefit.</li>

<li>For options like the configuration of static kernel modules to load: there
are nowadays usually much better ways to load kernel modules at boot. For
example, most modules may now be autoloaded by udev when the right hardware is
found.  This goes very far, and even includes ACPI and other high-level
technologies.  One of the very few exceptions where we currently do not do
kernel module autoloading is CPU feature and model based autoloading which
however will be supported soon too. And even if your specific module cannot be
auto-loaded there's usually a better way to statically load it, for example by
sticking it in <tt>/etc/load-modules.d</tt> so that the administrator can check
a standardized place for all statically loaded modules.</li>

<li>Last but not least, /etc already is intended to be the place for system
configuration ("Host-specific system configuration" according to FHS). A
subdirectory beneath it called <tt>sysconfig</tt> to place system configuration
in is hence entirely redundant, already on the language level.</li>

</ul>

<p>What to use instead? Here are a few recommendations of what to do with these
files in the long run in a systemd world:</p>

<ul>

<li>Just drop them without replacement. If they are fully redundant (like the
local/UTC RTC setting) this is should be a relatively easy way out (well,
ignoring the need for compatibility). If systemd natively supports an
equivalent option in the unit files there is no need to duplicate these
settings in <tt>sysconfig</tt> files. For a list of execution options you may
set for a service check out the respective man pages: <a
href="http://0pointer.de/public/systemd-man/systemd.exec.html">systemd.exec(5)</a>
and <a
href="http://0pointer.de/public/systemd-man/systemd.service.html">systemd.service(5)</a>.
If your setting simply adds another layer where a service can be disabled,
remove it to keep things simple. There's no need to have multiple ways to
disable a service.</li>

<li>Find a better place for them. For configuration of the system locale or
system timezone we hope to gently push distributions into the right direction,
for more details see <a
href="http://0pointer.de/blog/projects/the-new-configuration-files.html">previous
episode of this series</a>.</li>

<li>Turn these settings into native settings of the daemon. If necessary add
support for reading native configuration files to the daemon. Thankfully, most
of the stuff we run on Linux is Free Software, so this can relatively easily be
done.</li>

</ul>

<p>Of course, there's one very good reason for supporting these files for a bit
longer: compatibility for upgrades. But that's is really the only one I could
come up with. It's reason enough to keep compatibility for a while, but I think
it is a good idea to phase out usage of these files at least in new packages.</p>

<p>If compatibility is important, then systemd will still allow you to read
these configuration files even if you otherwise use native systemd unit files.
If your <tt>sysconfig</tt> file only knows simple options
<tt>EnvironmentFile=-/etc/sysconfig/foobar</tt> (<a href="http://0pointer.de/public/systemd-man/systemd.exec.html">See systemd.exec(5) for more information about this option.</a>) may be used to import the
settings into the environment and use them to put together command lines. If
you need a programming language to make sense of these settings, then use a
programming language like shell. For example, place an short shell script in
<tt>/usr/lib/<i>&lt;your package&gt;</i>/</tt> which reads these files for
compatibility, and then <tt>exec</tt>'s the actual daemon binary. Then spawn
this script instead of the actual daemon binary with <tt>ExecStart=</tt> in the
unit file.</p>

<p>And this is all for now. Thank you very much
for your interest.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-07-17T22:34:40Z</dc:date>
    </item>
<item>
  <title>Wake up!</title>
  <link>http://0pointer.de/blog/projects/ds-wake-up-call.html</link>
  <description><![CDATA[

<p>If you plan to attend Desktop Summit in Berlin this year, then please <a
href="https://desktopsummit.org/register">REGISTER NOW!</a></p>

<p>If you do not register, then this means you will have to wait in the signup
queue at the conference for substantially longer and might miss a talk or two.
You will <b>not get onto the conference WLAN</b> right from the beginning of
the conference (access is authenticated and personalized, only people who sign
up will get access credentials). Your personal badge will not be ready
right-away. If not enough people register we will also have to <b>cut down on
the available catering and the parties</b>. We rely on the registration numbers
to plan, and if you come but don't sign up before you make it very hard for us
to plan. Registration is free, so what are you waiting for?</p>

<p>I am pretty sure you want to avoid all of this right? For your own benefit
and for the benefit of everybody else attending the conference, go and register
for the conference <a
href="https://desktopsummit.org/register">right-away</a>!</p>

<p>Also, we are still looking for more volunteers for session chairs and
runners at the conference. This is your chance to introduce your favourite Open
Source hacker on stage! Please consider volunteering and <a
href="https://desktopsummit.org/news/call-for-volunteers">read the Call for
Volunteers</a>. Add yourself to <a
href="http://wiki.desktopsummit.org/Volunteers">the list on the wiki page</a>,
today. If you sign up you'll earn yourself the gratitude of the GNOME and KDE
communities, and you'll receive the exclusive team T-shirts!</p>

<p>Thank you!</p>

]]></description>
</item>

	    <item>
      <title>Wake up!</title>
      <link>http://0pointer.de/blog/index.rss/projects/ds-wake-up-call</link>
      <description>
<p>If you plan to attend Desktop Summit in Berlin this year, then please <a
href="https://desktopsummit.org/register">REGISTER NOW!</a></p>

<p>If you do not register, then this means you will have to wait in the signup
queue at the conference for substantially longer and might miss a talk or two.
You will <b>not get onto the conference WLAN</b> right from the beginning of
the conference (access is authenticated and personalized, only people who sign
up will get access credentials). Your personal badge will not be ready
right-away. If not enough people register we will also have to <b>cut down on
the available catering and the parties</b>. We rely on the registration numbers
to plan, and if you come but don't sign up before you make it very hard for us
to plan. Registration is free, so what are you waiting for?</p>

<p>I am pretty sure you want to avoid all of this right? For your own benefit
and for the benefit of everybody else attending the conference, go and register
for the conference <a
href="https://desktopsummit.org/register">right-away</a>!</p>

<p>Also, we are still looking for more volunteers for session chairs and
runners at the conference. This is your chance to introduce your favourite Open
Source hacker on stage! Please consider volunteering and <a
href="https://desktopsummit.org/news/call-for-volunteers">read the Call for
Volunteers</a>. Add yourself to <a
href="http://wiki.desktopsummit.org/Volunteers">the list on the wiki page</a>,
today. If you sign up you'll earn yourself the gratitude of the GNOME and KDE
communities, and you'll receive the exclusive team T-shirts!</p>

<p>Thank you!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-07-12T22:49:12Z</dc:date>
    </item>
<item>
  <title>Yet another interview</title>
  <link>http://0pointer.de/blog/projects/linuxfr.html</link>
  <description><![CDATA[

<p><a
href="http://linuxfr.org/news/un-entretien-avec-lennart-poettering">Here's
yes another interview with yours truly.</a> It's on LinuxFR, so I hope
you understand some fr_FR.</p>

]]></description>
</item>

	    <item>
      <title>Yet another interview</title>
      <link>http://0pointer.de/blog/index.rss/projects/linuxfr</link>
      <description>
<p><a
href="http://linuxfr.org/news/un-entretien-avec-lennart-poettering">Here's
yes another interview with yours truly.</a> It's on LinuxFR, so I hope
you understand some fr_FR.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-07-05T13:28:57Z</dc:date>
    </item>
<item>
  <title>systemd for Developers II</title>
  <link>http://0pointer.de/blog/projects/socket-activation2.html</link>
  <description><![CDATA[

<p>It has been way to long since I posted the <a
href="http://0pointer.de/blog/projects/socket-activation.html">first
episode</a> of my <i>systemd for Developers</i> series. Here's finally the
second part. Make sure you read the first episode of the series before
you start with this part since I'll assume the reader grokked the wonders
of socket activation.</p>

<h4>Socket Activation, Part II</h4>

<p>This time we'll focus on adding socket activation support to real-life
software, more specifically the CUPS printing server. Most current Linux
desktops run CUPS by default these days, since printing is so basic that it's a
must have, and must just work when the user needs it. However, most desktop
CUPS installations probably don't actually see more than a handful of print
jobs each month. Even if you are a busy office worker you'll unlikely to
generate more than a couple of print jobs an hour on your PC. Also, printing is
not time critical.  Whether a job takes 50ms or 100ms until it reaches the
printer matters little.  As long as it is less than a few seconds the user
probably won't notice.  Finally, printers are usually peripheral hardware: they
aren't built into your laptop, and you don't always carry them around plugged
in. That all together makes CUPS a perfect candidate for lazy activation:
instead of starting it unconditionally at boot we just start it on-demand, when
it is needed.  That way we can save resources, at boot and at runtime. However,
this kind of activation needs to take place transparently, so that the user
doesn't notice that the print server was not actually running yet when he tried
to access it. To achieve that we need to make sure that the print server is
started as soon at least one of three conditions hold:</p>

<ol> <li>A local client tries to talk to the print server, for example because
a GNOME application opened the printing dialog which tries to enumerate
available printers.</li>

<li>A printer is being plugged in locally, and it should be configured and
enabled and then optionally the user be informed about it.</li>

<li>At boot, when there's still an unprinted print job lurking in the queue.</li>
</ol>

<p>Of course, the desktop is not the only place where CUPS is used. CUPS can be
run in small and big print servers, too. In that case the amount of print jobs
is substantially higher, and CUPS should be started right away at boot. That
means that (optionally) we still want to start CUPS unconditionally at boot and
not delay its execution until when it is needed.</p>

<p>Putting this all together we need four kind of activation to make CUPS work
well in all situations at minimal resource usage: socket based activation (to
support condition 1 above), hardware based activation (to support condition 2),
path based activation (for condition 3) and finally boot-time activation (for
the optional server usecase). Let's focus on these kinds of activation in more
detail, and in particular on socket-based activation.</p>

<h5>Socket Activation in Detail</h5>

<p>To implement socket-based activation in CUPS we need to make sure that when
sockets are passed from systemd these are used to listen on instead of binding
them directly in the CUPS source code. Fortunately this is relatively easy to
do in the CUPS sources, since it already supports launchd-style socket
activation, as it is used on MacOS X (note that CUPS is nowadays an Apple
project). That means the code already has all the necessary hooks to add
systemd-style socket activation with minimal work.</p>

<p>To begin with our patching session we check out the CUPS sources.
Unfortunately CUPS is still stuck in unhappy Subversion country and not using
git yet. In order to simplify our patching work our first step is to use
<tt>git-svn</tt> to check it out locally in a way we can access it with the
usual git tools:</p>

<pre>git svn clone http://svn.easysw.com/public/cups/trunk/ cups</pre>

<p>This will take a while. After the command finished we use the wonderful
<tt>git grep</tt> to look for all occurences of the word "launchd", since
that's probably where we need to add the systemd support too. This reveals <a
href="http://svn.easysw.com/public/cups/trunk/scheduler/main.c">scheduler/main.c</a>
as main source file which implements launchd interaction.</p>

<p>Browsing through this file we notice that two functions are primarily
responsible for interfacing with launchd, the appropriately named
<tt>launchd_checkin()</tt> and <tt>launchd_checkout()</tt> functions. The
former acquires the sockets from launchd when the daemon starts up, the latter
terminates communication with launchd and is called when the daemon shuts down.
systemd's socket activation interfaces are much simpler than those of launchd.
Due to that we only need an equivalent of the <tt>launchd_checkin()</tt> call,
and do not need a checkout function. Our own function
<tt>systemd_checkin()</tt> can be implemented very similar to
<tt>launchd_checkin()</tt>: we look at the sockets we got passed and try to map
them to the ones configured in the CUPS configuration. If we got more sockets
passed than configured in CUPS we implicitly add configuration for them. If the
CUPS configuration includes definitions for more listening sockets those will
be bound natively in CUPS. That way we'll very robustly listen on all ports
that are listed in either systemd or CUPS configuration.</p>

<p>Our function <tt>systemd_checkin()</tt> uses <tt>sd_listen_fds()</tt> from
<tt>sd-daemon.c</tt> to acquire the file descriptors. Then, we use
<tt>sd_is_socket()</tt> to map the sockets to the right listening configuration
of CUPS, in a loop for each passed socket. The loop corresponds very closely to
the loop from <tt>launchd_checkin()</tt> however is a lot simpler. <a href="http://0pointer.de/public/cups-patch-core.txt">Our patch so far looks like this.</a></p>

<p>Before we can test our patch, we add <a
href="http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.c">sd-daemon.c</a>
and <a
href="http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.h">sd-daemon.h</a>
as drop-in files to the package, so that <tt>sd_listen_fds()</tt> and
<tt>sd_is_socket()</tt> are available for use. After a few minimal changes to
the <tt>Makefile</tt> we are almost ready to test our socket activated version
of CUPS. The last missing step is creating two unit files for CUPS, one for the
socket (<a href="http://0pointer.de/public/cups.socket">cups.socket</a>), the
other for the service (<a
href="http://0pointer.de/public/cups.service">cups.service</a>). To make things
simple we just drop them in <tt>/etc/systemd/system</tt> and make sure systemd
knows about them, with <tt>systemctl daemon-reload</tt>.</p>

<p>Now we are ready to test our little patch: we start the socket with
<tt>systemctl start cups.socket</tt>. This will bind the socket, but won't
start CUPS yet. Next, we simply invoke <tt>lpq</tt> to test whether CUPS is
transparently started, and yupp, this is exactly what happens. We'll get the
normal output from <tt>lpq</tt> as if we had started CUPS at boot already, and
if we then check with <tt>systemctl status cups.service</tt> we see that CUPS
was automatically spawned by our invocation of <tt>lpq</tt>. Our test
succeeded, socket activation worked!</p>

<h5>Hardware Activation in Detail</h5>

<p>The next trigger is hardware activation: we want to make sure that CUPS is
automatically started as soon as a local printer is found, regardless whether
that happens as <i>hotplug</i> during runtime or as <i>coldplug</i> during
boot. Hardware activation in systemd is done via udev rules. Any udev device
that is tagged with the <tt>systemd</tt> tag can pull in units as needed via
the <tt>SYSTEMD_WANTS=</tt> environment variable. In the case of CUPS we don't
even have to add our own udev rule to the mix, we can simply hook into what
systemd already does out-of-the-box with rules shipped upstream. More
specifically, it ships a udev rules file with the following lines:</p>

<pre>SUBSYSTEM=="printer", TAG+="systemd", ENV{SYSTEMD_WANTS}="printer.target"
SUBSYSTEM=="usb", KERNEL=="lp*", TAG+="systemd", ENV{SYSTEMD_WANTS}="printer.target"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", TAG+="systemd", ENV{SYSTEMD_WANTS}="printer.target"</pre>

<p>This pulls in the target unit <tt>printer.target</tt> as soon as at least
one printer is plugged in (supporting all kinds of printer ports). All we now
have to do is make sure that our CUPS service is pulled in by
<tt>printer.target</tt> and we are done. By placing <tt>WantedBy=printer.target
</tt> line in the <tt>[Install]</tt> section of the service file, a
<tt>Wants</tt> dependency is created from <tt>printer.target</tt> to
<tt>cups.service</tt> as soon as the latter is enabled with <tt>systemctl
enable</tt>. The indirection via <tt>printer.target</tt> provides us with a
simple way to use <tt>systemctl enable</tt> and <tt>systemctl disable</tt> to
manage hardware activation of a service.</p>

<h5>Path-based Activation in Detail</h5>

<p>To ensure that CUPS is also started when there is a print job still queued
in the printing spool, we write a simple <a
href="http://0pointer.de/public/cups.path"><tt>cups.path</tt></a> that
activates CUPS as soon as we find a file in <tt>/var/spool/cups</tt>.</p>

<h5>Boot-based Activation in Detail</h5>

<p>Well, starting services on boot is obviously the most boring and well-known
way to spawn a service. This entire excercise was about making this unnecessary,
but we still need to support it for explicit print server machines. Since those
are probably the exception and not the common case we do not enable this kind
of activation by default, but leave it to the administrator to add it in when
he deems it necessary, with a simple command (<tt>ln -s
/lib/systemd/system/cups.service
/etc/systemd/system/multi-user.target.wants/</tt> to be precise).</p>

<p>So, now we have covered all four kinds of activation. To finalize our patch
we have a closer look at the <tt>[Install]</tt> section of <a
href="http://0pointer.de/public/cups.service"><tt>cups.service</tt></a>, i.e.
the part of the unit file that controls how <tt>systemctl enable
cups.service</tt> and <tt>systemctl disable cups.service</tt> will hook the
service into/unhook the service from the system. Since we don't want to start
cups at boot we do not place <tt>WantedBy=multi-user.target</tt> in it like we
would do for those services. Instead we just place an <tt>Also=</tt> line that
makes sure that <a
href="http://0pointer.de/public/cups.path"><tt>cups.path</tt></a> and <a
href="http://0pointer.de/public/cups.socket"><tt>cups.socket</tt></a> are
automatically also enabled if the user asks to enable <tt>cups.service</tt>
(they are enabled according to the <tt>[Install]</tt> sections in those unit
files).</p>

<p>As last step we then integrate our work into the build system. In contrast
to SysV init scripts systemd unit files are supposed to be distribution
independent. Hence it is a good idea to include them in the upstream tarball.
Unfortunately CUPS doesn't use Automake, but Autoconf with a set of handwritten
Makefiles. This requires a bit more work to get our additions integrated, but
is not too difficult either. <a
href="http://0pointer.de/public/cups-0001-systemd-add-systemd-socket-activation-and-unit-files.patch">And
this is how our final patch looks like</a>, after we commited our work and ran
<tt>git format-patch -1</tt> on it to generate a pretty git patch.</p>

<p>The next step of course is to get this patch integrated into the upstream
and Fedora packages (or whatever other distribution floats your boat). To make
this easy I have prepared <a
href="http://0pointer.de/public/cups-0001-Add-socket-activation-patch.patch">a
patch for Tim that makes the necessary packaging changes for Fedora 16</a>, and
includes the patch intended for upstream linked above. Of course, ideally the
patch is merged upstream, however in the meantime we can already include it in
the Fedora packages.</p>

<p>Note that CUPS was particularly easy to patch since it already supported
launchd-style activation, patching a service that doesn't support that yet is
only marginally more difficult. (Oh, and we have no plans to offer the complex
launchd API as compatibility kludge on Linux. It simply doesn't translate very
well, so don't even ask... ;-))</p>

<p>And that finishes our little blog story. I hope this quick walkthrough how to add
socket activation (and the other forms of activation) to a package were
interesting to you, and will help you doing the same for your own packages. If you
have questions, our IRC channel <tt>#systemd</tt> on freenode and
our <a
href="http://lists.freedesktop.org/mailman/listinfo/systemd-devel">mailing
list</a> are available, and we are always happy to help!</p>

]]></description>
</item>

	    <item>
      <title>systemd for Developers II</title>
      <link>http://0pointer.de/blog/index.rss/projects/socket-activation2</link>
      <description>
<p>It has been way to long since I posted the <a
href="http://0pointer.de/blog/projects/socket-activation.html">first
episode</a> of my <i>systemd for Developers</i> series. Here's finally the
second part. Make sure you read the first episode of the series before
you start with this part since I'll assume the reader grokked the wonders
of socket activation.</p>

<h4>Socket Activation, Part II</h4>

<p>This time we'll focus on adding socket activation support to real-life
software, more specifically the CUPS printing server. Most current Linux
desktops run CUPS by default these days, since printing is so basic that it's a
must have, and must just work when the user needs it. However, most desktop
CUPS installations probably don't actually see more than a handful of print
jobs each month. Even if you are a busy office worker you'll unlikely to
generate more than a couple of print jobs an hour on your PC. Also, printing is
not time critical.  Whether a job takes 50ms or 100ms until it reaches the
printer matters little.  As long as it is less than a few seconds the user
probably won't notice.  Finally, printers are usually peripheral hardware: they
aren't built into your laptop, and you don't always carry them around plugged
in. That all together makes CUPS a perfect candidate for lazy activation:
instead of starting it unconditionally at boot we just start it on-demand, when
it is needed.  That way we can save resources, at boot and at runtime. However,
this kind of activation needs to take place transparently, so that the user
doesn't notice that the print server was not actually running yet when he tried
to access it. To achieve that we need to make sure that the print server is
started as soon at least one of three conditions hold:</p>

<ol> <li>A local client tries to talk to the print server, for example because
a GNOME application opened the printing dialog which tries to enumerate
available printers.</li>

<li>A printer is being plugged in locally, and it should be configured and
enabled and then optionally the user be informed about it.</li>

<li>At boot, when there's still an unprinted print job lurking in the queue.</li>
</ol>

<p>Of course, the desktop is not the only place where CUPS is used. CUPS can be
run in small and big print servers, too. In that case the amount of print jobs
is substantially higher, and CUPS should be started right away at boot. That
means that (optionally) we still want to start CUPS unconditionally at boot and
not delay its execution until when it is needed.</p>

<p>Putting this all together we need four kind of activation to make CUPS work
well in all situations at minimal resource usage: socket based activation (to
support condition 1 above), hardware based activation (to support condition 2),
path based activation (for condition 3) and finally boot-time activation (for
the optional server usecase). Let's focus on these kinds of activation in more
detail, and in particular on socket-based activation.</p>

<h5>Socket Activation in Detail</h5>

<p>To implement socket-based activation in CUPS we need to make sure that when
sockets are passed from systemd these are used to listen on instead of binding
them directly in the CUPS source code. Fortunately this is relatively easy to
do in the CUPS sources, since it already supports launchd-style socket
activation, as it is used on MacOS X (note that CUPS is nowadays an Apple
project). That means the code already has all the necessary hooks to add
systemd-style socket activation with minimal work.</p>

<p>To begin with our patching session we check out the CUPS sources.
Unfortunately CUPS is still stuck in unhappy Subversion country and not using
git yet. In order to simplify our patching work our first step is to use
<tt>git-svn</tt> to check it out locally in a way we can access it with the
usual git tools:</p>

<pre>git svn clone http://svn.easysw.com/public/cups/trunk/ cups</pre>

<p>This will take a while. After the command finished we use the wonderful
<tt>git grep</tt> to look for all occurences of the word "launchd", since
that's probably where we need to add the systemd support too. This reveals <a
href="http://svn.easysw.com/public/cups/trunk/scheduler/main.c">scheduler/main.c</a>
as main source file which implements launchd interaction.</p>

<p>Browsing through this file we notice that two functions are primarily
responsible for interfacing with launchd, the appropriately named
<tt>launchd_checkin()</tt> and <tt>launchd_checkout()</tt> functions. The
former acquires the sockets from launchd when the daemon starts up, the latter
terminates communication with launchd and is called when the daemon shuts down.
systemd's socket activation interfaces are much simpler than those of launchd.
Due to that we only need an equivalent of the <tt>launchd_checkin()</tt> call,
and do not need a checkout function. Our own function
<tt>systemd_checkin()</tt> can be implemented very similar to
<tt>launchd_checkin()</tt>: we look at the sockets we got passed and try to map
them to the ones configured in the CUPS configuration. If we got more sockets
passed than configured in CUPS we implicitly add configuration for them. If the
CUPS configuration includes definitions for more listening sockets those will
be bound natively in CUPS. That way we'll very robustly listen on all ports
that are listed in either systemd or CUPS configuration.</p>

<p>Our function <tt>systemd_checkin()</tt> uses <tt>sd_listen_fds()</tt> from
<tt>sd-daemon.c</tt> to acquire the file descriptors. Then, we use
<tt>sd_is_socket()</tt> to map the sockets to the right listening configuration
of CUPS, in a loop for each passed socket. The loop corresponds very closely to
the loop from <tt>launchd_checkin()</tt> however is a lot simpler. <a href="http://0pointer.de/public/cups-patch-core.txt">Our patch so far looks like this.</a></p>

<p>Before we can test our patch, we add <a
href="http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.c">sd-daemon.c</a>
and <a
href="http://cgit.freedesktop.org/systemd/plain/src/sd-daemon.h">sd-daemon.h</a>
as drop-in files to the package, so that <tt>sd_listen_fds()</tt> and
<tt>sd_is_socket()</tt> are available for use. After a few minimal changes to
the <tt>Makefile</tt> we are almost ready to test our socket activated version
of CUPS. The last missing step is creating two unit files for CUPS, one for the
socket (<a href="http://0pointer.de/public/cups.socket">cups.socket</a>), the
other for the service (<a
href="http://0pointer.de/public/cups.service">cups.service</a>). To make things
simple we just drop them in <tt>/etc/systemd/system</tt> and make sure systemd
knows about them, with <tt>systemctl daemon-reload</tt>.</p>

<p>Now we are ready to test our little patch: we start the socket with
<tt>systemctl start cups.socket</tt>. This will bind the socket, but won't
start CUPS yet. Next, we simply invoke <tt>lpq</tt> to test whether CUPS is
transparently started, and yupp, this is exactly what happens. We'll get the
normal output from <tt>lpq</tt> as if we had started CUPS at boot already, and
if we then check with <tt>systemctl status cups.service</tt> we see that CUPS
was automatically spawned by our invocation of <tt>lpq</tt>. Our test
succeeded, socket activation worked!</p>

<h5>Hardware Activation in Detail</h5>

<p>The next trigger is hardware activation: we want to make sure that CUPS is
automatically started as soon as a local printer is found, regardless whether
that happens as <i>hotplug</i> during runtime or as <i>coldplug</i> during
boot. Hardware activation in systemd is done via udev rules. Any udev device
that is tagged with the <tt>systemd</tt> tag can pull in units as needed via
the <tt>SYSTEMD_WANTS=</tt> environment variable. In the case of CUPS we don't
even have to add our own udev rule to the mix, we can simply hook into what
systemd already does out-of-the-box with rules shipped upstream. More
specifically, it ships a udev rules file with the following lines:</p>

<pre>SUBSYSTEM=="printer", TAG+="systemd", ENV{SYSTEMD_WANTS}="printer.target"
SUBSYSTEM=="usb", KERNEL=="lp*", TAG+="systemd", ENV{SYSTEMD_WANTS}="printer.target"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", TAG+="systemd", ENV{SYSTEMD_WANTS}="printer.target"</pre>

<p>This pulls in the target unit <tt>printer.target</tt> as soon as at least
one printer is plugged in (supporting all kinds of printer ports). All we now
have to do is make sure that our CUPS service is pulled in by
<tt>printer.target</tt> and we are done. By placing <tt>WantedBy=printer.target
</tt> line in the <tt>[Install]</tt> section of the service file, a
<tt>Wants</tt> dependency is created from <tt>printer.target</tt> to
<tt>cups.service</tt> as soon as the latter is enabled with <tt>systemctl
enable</tt>. The indirection via <tt>printer.target</tt> provides us with a
simple way to use <tt>systemctl enable</tt> and <tt>systemctl disable</tt> to
manage hardware activation of a service.</p>

<h5>Path-based Activation in Detail</h5>

<p>To ensure that CUPS is also started when there is a print job still queued
in the printing spool, we write a simple <a
href="http://0pointer.de/public/cups.path"><tt>cups.path</tt></a> that
activates CUPS as soon as we find a file in <tt>/var/spool/cups</tt>.</p>

<h5>Boot-based Activation in Detail</h5>

<p>Well, starting services on boot is obviously the most boring and well-known
way to spawn a service. This entire excercise was about making this unnecessary,
but we still need to support it for explicit print server machines. Since those
are probably the exception and not the common case we do not enable this kind
of activation by default, but leave it to the administrator to add it in when
he deems it necessary, with a simple command (<tt>ln -s
/lib/systemd/system/cups.service
/etc/systemd/system/multi-user.target.wants/</tt> to be precise).</p>

<p>So, now we have covered all four kinds of activation. To finalize our patch
we have a closer look at the <tt>[Install]</tt> section of <a
href="http://0pointer.de/public/cups.service"><tt>cups.service</tt></a>, i.e.
the part of the unit file that controls how <tt>systemctl enable
cups.service</tt> and <tt>systemctl disable cups.service</tt> will hook the
service into/unhook the service from the system. Since we don't want to start
cups at boot we do not place <tt>WantedBy=multi-user.target</tt> in it like we
would do for those services. Instead we just place an <tt>Also=</tt> line that
makes sure that <a
href="http://0pointer.de/public/cups.path"><tt>cups.path</tt></a> and <a
href="http://0pointer.de/public/cups.socket"><tt>cups.socket</tt></a> are
automatically also enabled if the user asks to enable <tt>cups.service</tt>
(they are enabled according to the <tt>[Install]</tt> sections in those unit
files).</p>

<p>As last step we then integrate our work into the build system. In contrast
to SysV init scripts systemd unit files are supposed to be distribution
independent. Hence it is a good idea to include them in the upstream tarball.
Unfortunately CUPS doesn't use Automake, but Autoconf with a set of handwritten
Makefiles. This requires a bit more work to get our additions integrated, but
is not too difficult either. <a
href="http://0pointer.de/public/cups-0001-systemd-add-systemd-socket-activation-and-unit-files.patch">And
this is how our final patch looks like</a>, after we commited our work and ran
<tt>git format-patch -1</tt> on it to generate a pretty git patch.</p>

<p>The next step of course is to get this patch integrated into the upstream
and Fedora packages (or whatever other distribution floats your boat). To make
this easy I have prepared <a
href="http://0pointer.de/public/cups-0001-Add-socket-activation-patch.patch">a
patch for Tim that makes the necessary packaging changes for Fedora 16</a>, and
includes the patch intended for upstream linked above. Of course, ideally the
patch is merged upstream, however in the meantime we can already include it in
the Fedora packages.</p>

<p>Note that CUPS was particularly easy to patch since it already supported
launchd-style activation, patching a service that doesn't support that yet is
only marginally more difficult. (Oh, and we have no plans to offer the complex
launchd API as compatibility kludge on Linux. It simply doesn't translate very
well, so don't even ask... ;-))</p>

<p>And that finishes our little blog story. I hope this quick walkthrough how to add
socket activation (and the other forms of activation) to a package were
interesting to you, and will help you doing the same for your own packages. If you
have questions, our IRC channel <tt>#systemd</tt> on freenode and
our <a
href="http://lists.freedesktop.org/mailman/listinfo/systemd-devel">mailing
list</a> are available, and we are always happy to help!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-07-04T22:46:26Z</dc:date>
    </item>
<item>
  <title>Another interview</title>
  <link>http://0pointer.de/blog/projects/developerworks-brasil.html</link>
  <description><![CDATA[

<p><a
href="https://www.ibm.com/developerworks/mydeveloperworks/blogs/752a690f-8e93-4948-b7a3-c060117e8665/entry/_entrevista_lennart_poettering">Here's
another interview with yours truly.</a> It's on IBM developerWorks Brasil, so I hope
you understand some pt_BR.</p>

]]></description>
</item>

	    <item>
      <title>Another interview</title>
      <link>http://0pointer.de/blog/index.rss/projects/developerworks-brasil</link>
      <description>
<p><a
href="https://www.ibm.com/developerworks/mydeveloperworks/blogs/752a690f-8e93-4948-b7a3-c060117e8665/entry/_entrevista_lennart_poettering">Here's
another interview with yours truly.</a> It's on IBM developerWorks Brasil, so I hope
you understand some pt_BR.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-07-03T14:33:13Z</dc:date>
    </item>
<item>
  <title>Reminder!</title>
  <link>http://0pointer.de/blog/projects/reminder.html</link>
  <description><![CDATA[

<p>GNOMErs, the Desktop Summit in Berlin, Germany is approaching quickly!</p>

<p><a href="https://desktopsummit.org/program/workshops-bofs">Submit your BoF for the Desktop Summit BoF days NOW!</a> Deadline is <b>July 3rd</b>, this sunday!</p>

<p><a href="https://desktopsummit.org/news/call-for-volunteers">Sign up as a volunteer for the Desktop Summit NOW!</a> Deadline is <b>July 18th</b>!</p>

]]></description>
</item>

	    <item>
      <title>Reminder!</title>
      <link>http://0pointer.de/blog/index.rss/projects/reminder</link>
      <description>
<p>GNOMErs, the Desktop Summit in Berlin, Germany is approaching quickly!</p>

<p><a href="https://desktopsummit.org/program/workshops-bofs">Submit your BoF for the Desktop Summit BoF days NOW!</a> Deadline is <b>July 3rd</b>, this sunday!</p>

<p><a href="https://desktopsummit.org/news/call-for-volunteers">Sign up as a volunteer for the Desktop Summit NOW!</a> Deadline is <b>July 18th</b>!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-06-29T21:20:16Z</dc:date>
    </item>
<item>
  <title>Impressions of Japan, Thailand and India</title>
  <link>http://0pointer.de/blog/photos/india-bangkok-japan.html</link>
  <description><![CDATA[

<p>It has been a while since I blogged photos of my various travels, although I
have visited quite a number of countries in the past 12 months, and travelled
overland in a number of them. Here are a few selected shots from three: India
(November/December), Thailand (January), Japan (June).</p>

<p>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=955"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-955.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1289"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1289.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=258"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-258.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=203"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-203.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=630"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-630.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=707"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-707.jpg" alt="Japan" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=795"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-795.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1038"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1038.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=616"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-616.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=769"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-769.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=53"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-53.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=681"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-681.jpg" alt="Japan" width="120" height="80"/></a>
</p>

<p>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1268"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1268.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=125"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-125.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1198"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1198.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1132"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1132.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=983"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-983.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=874"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-874.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=387"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-387.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=751"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-751.jpg" alt="Japan" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=721"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-721.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1242"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1242.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=692"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-692.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=632"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-632.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=377"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-377.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=815"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-815.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=163"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-163.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=146"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-146.jpg" alt="Japan" width="80" height="120"/></a>
</p>

<p>These pictures are from Kyoto, Nara and Takayama in Honshu, Japan.</p>

<p>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=821"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-821.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=236"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-236.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=722"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-722.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=717"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-717.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=455"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-455.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=163"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-163.jpg" alt="Thailand" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=261"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-261.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=256"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-256.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=805"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-805.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=547"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-547.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=669"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-669.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=402"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-402.jpg" alt="Thailand" width="120" height="80"/></a>
</p>
<p>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=794"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-794.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=785"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-785.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=771"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-771.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=763"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-763.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=753"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-753.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=776"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-776.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=726"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-726.jpg" alt="Thailand" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=708"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-708.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=200"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-200.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=657"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-657.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=599"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-599.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=613"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-613.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=381"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-381.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=562"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-562.jpg" alt="Thailand" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=441"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-441.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=368"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-368.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=316"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-316.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=687"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-687.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=208"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-208.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=90"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-90.jpg" alt="Thailand" width="80" height="120"/></a>
</p>

<p>All this is Bangkok, Thailand. Particular interest deserve the gold-based patterns used widely to adorn Thai architecture:</p>

<p>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=714"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-714.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=103"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-103.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=693"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-693.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=677"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-677.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=580"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-580.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=699"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-699.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=350"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-350.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=325"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-325.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=269"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-269.jpg" alt="Thailand" width="80" height="120"/></a>
</p>

<p>And finally India (one picture NSFW!):</p>

<p>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=108"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-108.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=206"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-206.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=245"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-245.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=274"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-274.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=487"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-487.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=335"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-335.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=428"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-428.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=491"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-491.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=244"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-244.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=689"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-689.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=655"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-655.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=938"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-938.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3600"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3600.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1042"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1042.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1146"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1146.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1248"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1248.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1339"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1339.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1386"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1386.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1380"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1380.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1509"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1509.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1799"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1799.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1871"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1871.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2336"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2336.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2415"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2415.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3403"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3403.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2660"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2660.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2675"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2675.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2715"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2715.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3197"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3197.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2986"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2986.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3064"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3064.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3098"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3098.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3191"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3191.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3234"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3234.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3254"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3254.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2804"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2804.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=977"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-977.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2612"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2612.jpg" alt="India" width="120" height="80"/></a>
</p>
<p>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1406"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1406.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1411"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1411.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=167"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-167.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=181"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-181.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=419"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-419.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=198"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-198.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=192"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-192.jpg" alt="India" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=221"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-221.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=399"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-399.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3185"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3185.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=443"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-443.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3775"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3775.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=494"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-494.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=188"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-188.jpg" alt="India" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1485"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1485.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1544"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1544.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1743"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1743.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3552"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3552.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1828"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1828.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2170"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2170.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2422"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2422.jpg" alt="India" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2440"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2440.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2488"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2488.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2502"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2502.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2623"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2623.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2721"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2721.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2875"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2875.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3000"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3000.jpg" alt="India" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3009"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3009.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3101"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3101.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3157"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3157.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=270"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-270.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3223"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3223.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3400"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3400.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3412"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3412.jpg" alt="India" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1749"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1749.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3576"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3576.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3716"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3716.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=823"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-823.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3825"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3825.jpg" alt="India" width="80" height="120"/></a>
</p>

<p>This is Mumbai, Ellora, Ajanta, Aurangabad (in Maharashtra); Mandu, Sanchi, Gwalior, Khajuraho (Madhya Pradesh); Orchha, Varanasi (Uttar Pradesh); Bangalore, Mysore (Karnataka).</p>

]]></description>
</item>

	    <item>
      <title>Impressions of Japan, Thailand and India</title>
      <link>http://0pointer.de/blog/index.rss/photos/india-bangkok-japan</link>
      <description>
<p>It has been a while since I blogged photos of my various travels, although I
have visited quite a number of countries in the past 12 months, and travelled
overland in a number of them. Here are a few selected shots from three: India
(November/December), Thailand (January), Japan (June).</p>

<p>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=955"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-955.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1289"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1289.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=258"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-258.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=203"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-203.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=630"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-630.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=707"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-707.jpg" alt="Japan" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=795"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-795.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1038"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1038.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=616"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-616.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=769"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-769.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=53"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-53.jpg" alt="Japan" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=681"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-681.jpg" alt="Japan" width="120" height="80"/></a>
</p>

<p>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1268"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1268.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=125"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-125.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1198"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1198.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1132"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1132.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=983"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-983.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=874"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-874.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=387"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-387.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=751"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-751.jpg" alt="Japan" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=721"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-721.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=1242"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-1242.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=692"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-692.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=632"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-632.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=377"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-377.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=815"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-815.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=163"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-163.jpg" alt="Japan" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Japan%202011-06&amp;photo=146"><img src="http://0pointer.de/photos/galleries/Japan%202011-06/thumbs/img-146.jpg" alt="Japan" width="80" height="120"/></a>
</p>

<p>These pictures are from Kyoto, Nara and Takayama in Honshu, Japan.</p>

<p>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=821"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-821.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=236"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-236.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=722"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-722.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=717"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-717.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=455"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-455.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=163"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-163.jpg" alt="Thailand" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=261"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-261.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=256"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-256.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=805"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-805.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=547"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-547.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=669"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-669.jpg" alt="Thailand" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=402"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-402.jpg" alt="Thailand" width="120" height="80"/></a>
</p>
<p>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=794"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-794.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=785"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-785.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=771"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-771.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=763"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-763.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=753"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-753.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=776"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-776.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=726"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-726.jpg" alt="Thailand" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=708"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-708.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=200"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-200.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=657"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-657.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=599"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-599.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=613"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-613.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=381"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-381.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=562"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-562.jpg" alt="Thailand" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=441"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-441.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=368"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-368.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=316"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-316.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=687"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-687.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=208"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-208.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=90"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-90.jpg" alt="Thailand" width="80" height="120"/></a>
</p>

<p>All this is Bangkok, Thailand. Particular interest deserve the gold-based patterns used widely to adorn Thai architecture:</p>

<p>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=714"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-714.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=103"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-103.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=693"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-693.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=677"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-677.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=580"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-580.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=699"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-699.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=350"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-350.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=325"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-325.jpg" alt="Thailand" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=Thailand%202011-01&amp;photo=269"><img src="http://0pointer.de/photos/galleries/Thailand%202011-01/thumbs/img-269.jpg" alt="Thailand" width="80" height="120"/></a>
</p>

<p>And finally India (one picture NSFW!):</p>

<p>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=108"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-108.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=206"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-206.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=245"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-245.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=274"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-274.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=487"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-487.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=335"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-335.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=428"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-428.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=491"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-491.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=244"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-244.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=689"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-689.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=655"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-655.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=938"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-938.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3600"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3600.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1042"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1042.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1146"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1146.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1248"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1248.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1339"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1339.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1386"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1386.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1380"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1380.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1509"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1509.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1799"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1799.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1871"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1871.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2336"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2336.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2415"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2415.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3403"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3403.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2660"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2660.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2675"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2675.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2715"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2715.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3197"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3197.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2986"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2986.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3064"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3064.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3098"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3098.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3191"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3191.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3234"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3234.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3254"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3254.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2804"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2804.jpg" alt="India" width="120" height="80"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=977"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-977.jpg" alt="India" width="120" height="80"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2612"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2612.jpg" alt="India" width="120" height="80"/></a>
</p>
<p>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1406"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1406.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1411"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1411.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=167"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-167.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=181"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-181.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=419"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-419.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=198"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-198.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=192"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-192.jpg" alt="India" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=221"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-221.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=399"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-399.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3185"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3185.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=443"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-443.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3775"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3775.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=494"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-494.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=188"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-188.jpg" alt="India" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1485"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1485.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1544"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1544.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1743"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1743.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3552"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3552.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1828"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1828.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2170"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2170.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2422"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2422.jpg" alt="India" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2440"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2440.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2488"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2488.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2502"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2502.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2623"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2623.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2721"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2721.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=2875"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-2875.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3000"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3000.jpg" alt="India" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3009"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3009.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3101"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3101.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3157"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3157.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=270"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-270.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3223"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3223.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3400"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3400.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3412"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3412.jpg" alt="India" width="80" height="120"/></a>
<br/>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=1749"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-1749.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3576"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3576.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3716"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3716.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=823"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-823.jpg" alt="India" width="80" height="120"/></a>
<a href="http://0pointer.de/photos/?gallery=India%202010-11&amp;photo=3825"><img src="http://0pointer.de/photos/galleries/India%202010-11/thumbs/img-3825.jpg" alt="India" width="80" height="120"/></a>
</p>

<p>This is Mumbai, Ellora, Ajanta, Aurangabad (in Maharashtra); Mandu, Sanchi, Gwalior, Khajuraho (Madhya Pradesh); Orchha, Varanasi (Uttar Pradesh); Bangalore, Mysore (Karnataka).</p>
</description>
      <category domain="http://www.sauria.com">photos</category>
      <dc:date>2011-06-25T17:09:23Z</dc:date>
    </item>
<item>
  <title>Call For Volunteers</title>
  <link>http://0pointer.de/blog/projects/call-for-volunteers.html</link>
  <description><![CDATA[

<p><i>The Desktop Summit 2011 in Berlin, Germany Needs Your Help!</i></p>

<p>Are you attending the Desktop Summit? Are you interested in helping the GNOME and KDE communities organize this year's Summit? Do you want to work with other Free Software enthusiasts to make the Desktop Summit rock? Would you like to own one of the exclusive Desktop Summit Team T-Shirts?</p>

<p>If so, please sign up as a volunteer for the Desktop Summit!</p>

<p><a href="https://www.desktopsummit.org/news/call-for-volunteers">Read the full <b>Call For Volunteers</b>!</a></p>

<p><a href="http://psconboard.blogspot.com/2011/06/desktop-summit-2011-call-for-volunteers.html">Read Patricia's original announcement.</a></p>

<p><a href="http://wiki.desktopsummit.org/Volunteers">Or go directly and sign up as a volunteer.</a></p>

]]></description>
</item>

	    <item>
      <title>Call For Volunteers</title>
      <link>http://0pointer.de/blog/index.rss/projects/call-for-volunteers</link>
      <description>
<p><i>The Desktop Summit 2011 in Berlin, Germany Needs Your Help!</i></p>

<p>Are you attending the Desktop Summit? Are you interested in helping the GNOME and KDE communities organize this year's Summit? Do you want to work with other Free Software enthusiasts to make the Desktop Summit rock? Would you like to own one of the exclusive Desktop Summit Team T-Shirts?</p>

<p>If so, please sign up as a volunteer for the Desktop Summit!</p>

<p><a href="https://www.desktopsummit.org/news/call-for-volunteers">Read the full <b>Call For Volunteers</b>!</a></p>

<p><a href="http://psconboard.blogspot.com/2011/06/desktop-summit-2011-call-for-volunteers.html">Read Patricia's original announcement.</a></p>

<p><a href="http://wiki.desktopsummit.org/Volunteers">Or go directly and sign up as a volunteer.</a></p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-06-23T15:32:44Z</dc:date>
    </item>
<item>
  <title>Desktop Summit Workshops and BoFs Call for Participation</title>
  <link>http://0pointer.de/blog/projects/dsbofcfp.html</link>
  <description><![CDATA[

<p>The Desktop Summit <a href="https://desktopsummit.org/program">schedule for
the talks and presentations</a> has been published a couple of weeks ago. Now it
is time to open the 2nd Call for Participation, this time for Workshops and BoFs.</p>

<p>If you'd like to run a workshop, BoF, hack session or training/teaching
session, then please <a
href="https://desktopsummit.org/program/workshops-bofs">submit it here</a>. If
you do it will appear in the printed schedule and get a prominent time slot
assigned. BoFs, workshops, hack sessions and training/teaching sessions can
also be added after <b>the deadline of July 3rd</b>, and even be registered
ad-hoc at the conference, but if you register your slot in advance we can make
sure people will find it in the printed schedule, will know about it, can plan
to attend it and we can do everything to make sure a lot of people show up.</p>

<p>Note that BoF/workshop proposals are unrestricted, i.e. there is no program
committee that will accept or reject submissions: we have a lot of room and
we'll accept liberally what is submitted.</p>

<p>For GNOMErs: this part of the conference is supposed to be much like the
Boston GNOME summit, but with a printed schedule. So please be welcome to
submit your sessions like you'd want to have them take place at the GNOME
summit as well.</p>

<p>Also see <a href="http://www.jonnor.com/2011/06/registration-open-for-workshops-bofs-at-the-desktopsummit-2011/">Jonnor's original announcement</a>.</p>

<p>So, hurry, <a href="https://desktopsummit.org/program/workshops-bofs">file your session
request right-away</a> and before <b>July 3rd</b>!</p>

]]></description>
</item>

	    <item>
      <title>Desktop Summit Workshops and BoFs Call for Participation</title>
      <link>http://0pointer.de/blog/index.rss/projects/dsbofcfp</link>
      <description>
<p>The Desktop Summit <a href="https://desktopsummit.org/program">schedule for
the talks and presentations</a> has been published a couple of weeks ago. Now it
is time to open the 2nd Call for Participation, this time for Workshops and BoFs.</p>

<p>If you'd like to run a workshop, BoF, hack session or training/teaching
session, then please <a
href="https://desktopsummit.org/program/workshops-bofs">submit it here</a>. If
you do it will appear in the printed schedule and get a prominent time slot
assigned. BoFs, workshops, hack sessions and training/teaching sessions can
also be added after <b>the deadline of July 3rd</b>, and even be registered
ad-hoc at the conference, but if you register your slot in advance we can make
sure people will find it in the printed schedule, will know about it, can plan
to attend it and we can do everything to make sure a lot of people show up.</p>

<p>Note that BoF/workshop proposals are unrestricted, i.e. there is no program
committee that will accept or reject submissions: we have a lot of room and
we'll accept liberally what is submitted.</p>

<p>For GNOMErs: this part of the conference is supposed to be much like the
Boston GNOME summit, but with a printed schedule. So please be welcome to
submit your sessions like you'd want to have them take place at the GNOME
summit as well.</p>

<p>Also see <a href="http://www.jonnor.com/2011/06/registration-open-for-workshops-bofs-at-the-desktopsummit-2011/">Jonnor's original announcement</a>.</p>

<p>So, hurry, <a href="https://desktopsummit.org/program/workshops-bofs">file your session
request right-away</a> and before <b>July 3rd</b>!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-06-20T07:59:34Z</dc:date>
    </item>
<item>
  <title>Two Articles In c&apos;t</title>
  <link>http://0pointer.de/blog/projects/ct.html</link>
  <description><![CDATA[

<p>If you are into computers and live in Germany I am sure you know the c't
computer magazine. <a href="http://www.heise.de/ct/inhalt/2011/13/172/">The
current edition 13/2011 (p. 172) contains two articles contributed by Thorsten
Leemhuis, Kay Sievers and yours truly on the topic of systemd</a>. Awesome
read.  Now, run to your local kiosk and grab a c't and study the two articles.
Go now, quick!</p>

]]></description>
</item>

	    <item>
      <title>Two Articles In c't</title>
      <link>http://0pointer.de/blog/index.rss/projects/ct</link>
      <description>
<p>If you are into computers and live in Germany I am sure you know the c't
computer magazine. <a href="http://www.heise.de/ct/inhalt/2011/13/172/">The
current edition 13/2011 (p. 172) contains two articles contributed by Thorsten
Leemhuis, Kay Sievers and yours truly on the topic of systemd</a>. Awesome
read.  Now, run to your local kiosk and grab a c't and study the two articles.
Go now, quick!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-06-13T09:45:04Z</dc:date>
    </item>
<item>
  <title>Video Interview</title>
  <link>http://0pointer.de/blog/projects/golem-video.html</link>
  <description><![CDATA[

<p><a href="http://www.golem.de/1105/83785.html">Golem.de has an interview with
yours truly.</a> When I watched I learned so much! If you understand the German
language then you might too! (and only then because it is in Goethe's tongue).</p>

<object width="480" height="270">
<param name="movie" value="http://video.golem.de/player/videoplayer.swf?id=4823&amp;autoPl=false"/>
<param name="allowFullScreen" value="true"/>
<param name="AllowScriptAccess" value="always"/>
<embed src="http://video.golem.de/player/videoplayer.swf?id=4823&amp;autoPl=false" type="application/x-shockwave-flash" allowfullscreen="true" AllowScriptAccess="always" width="480" height="270"/>
</object>

<div style="width:480px; text-align:center; font-family:verdana,sans-serif;
font-size:0.8em;"><a
href="http://video.golem.de/oss/4823/interview-mit-lennart-poettering-entwickler-systemd.html">Video:
Interview mit Lennart Poettering, Entwickler Systemd</a>&nbsp;(7:14)</div>

]]></description>
</item>

	    <item>
      <title>Video Interview</title>
      <link>http://0pointer.de/blog/index.rss/projects/golem-video</link>
      <description>
<p><a href="http://www.golem.de/1105/83785.html">Golem.de has an interview with
yours truly.</a> When I watched I learned so much! If you understand the German
language then you might too! (and only then because it is in Goethe's tongue).</p>

<object width="480" height="270">
<param name="movie" value="http://video.golem.de/player/videoplayer.swf?id=4823&amp;autoPl=false"/>
<param name="allowFullScreen" value="true"/>
<param name="AllowScriptAccess" value="always"/>
<embed src="http://video.golem.de/player/videoplayer.swf?id=4823&amp;autoPl=false" type="application/x-shockwave-flash" allowfullscreen="true" AllowScriptAccess="always" width="480" height="270"/>
</object>

<div style="width:480px; text-align:center; font-family:verdana,sans-serif;
font-size:0.8em;"><a
href="http://video.golem.de/oss/4823/interview-mit-lennart-poettering-entwickler-systemd.html">Video:
Interview mit Lennart Poettering, Entwickler Systemd</a>&nbsp;(7:14)</div>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-05-27T20:02:48Z</dc:date>
    </item>
<item>
  <title>systemd Documentation</title>
  <link>http://0pointer.de/blog/projects/systemd-docs.html</link>
  <description><![CDATA[

<p><a href="https://fedoraproject.org/get-fedora">Fedora 15 is out.</a> Get it
while it is hot! It is probably the biggest distribution release of a all time
with being first in shipping both <a href="http://gnome3.org/">GNOME 3</a> and <a href="http://www.freedesktop.org/wiki/Software/systemd">systemd</a>.</p>

<p>Since this is the first distribution release based on systemd, it might be interesting to
read up on what it is all about. Here's a little compilation of the available
documentation for systemd.</p>

<h4>The Manual Pages</h4>

<ul>

<li><a href="http://0pointer.de/public/systemd-man/systemd.html">systemd(1)</a>, covering general concepts of systemd.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemctl.html">systemctl(1)</a>, covering the client control utility of systemd.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd-cgls.html">systemd-cgls(1)</a>, on a tool to show the systemd cgroup tree.</li>

<li><a
href="http://0pointer.de/public/systemd-man/systemd.unit.html">systemd.unit(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.exec.html">systemd.exec(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.service.html">systemd.service(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.socket.html">systemd.socket(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.target.html">systemd.target(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.timer.html">systemd.timer(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.swap.html">systemd.swap(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.snapshot.html">systemd.snapshot(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.path.html">systemd.path(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.mount.html">systemd.mount(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.device.html">systemd.device(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.automount.html">systemd.automount(5)</a>,
for writing systemd unit files.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd-nspawn.html">systemd-nspawn(1)</a>, on a tool for running simple containers.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd-notify.html">systemd-notify(1)</a>, on a tool for sending notifications to systemd.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd.special.html">systemd.special(5)</a>, with a list of systemd's special units.</li>

<li><a href="http://0pointer.de/public/systemd-man/daemon.html">daemon(7)</a>, on writing daemons.</li>

<li><a href="http://0pointer.de/public/systemd-man/pam_systemd.html">pam_systemd(8)</a>, on configuring user session settings.</li>

<li><a href="http://0pointer.de/public/systemd-man/sd-daemon.html">sd-daemon(7)</a>, <a href="http://0pointer.de/public/systemd-man/sd_listen_fds.html">sd_listen_fds(3)</a>, <a href="http://0pointer.de/public/systemd-man/sd_notify.html">sd_notify(3)</a>, <a href="http://0pointer.de/public/systemd-man/sd_is_fifo.html">sd_is_fifo(3)</a>, <a href="http://0pointer.de/public/systemd-man/sd_booted.html">sd_booted(3)</a>, <a href="http://0pointer.de/public/systemd-man/sd-readahead.html">sd-readahead(7)</a>, <a href="http://0pointer.de/public/systemd-man/sd_readahead.html">sd_readahead(3)</a>, covering the systemd API.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd-ask-password.html">systemd-ask-password(1)</a>, describing a tool for querying system passwords.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd-tmpfiles.html">systemd-tmpfiles(8)</a>, describing a tool for creating, deleting and cleaning up volatile and temporary files and directories.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd.conf.html">systemd.conf(5)</a>, describing the systemd main configuration file.</li>

<li><a href="http://0pointer.de/public/systemd-man/binfmt.d.html">binfmt.d(5)</a>, <a href="http://0pointer.de/public/systemd-man/hostname.html">hostname(5)</a>, <a href="http://0pointer.de/public/systemd-man/locale.conf.html">locale.conf(5)</a>, <a href="http://0pointer.de/public/systemd-man/machine-id.html">machine-id(5)</a>, <a href="http://0pointer.de/public/systemd-man/machine-info.html">machine-info(5)</a>, <a href="http://0pointer.de/public/systemd-man/modules-load.d.html">modules-load.d(5)</a>, <a href="http://0pointer.de/public/systemd-man/os-release.html">os-release(5)</a>, <a href="http://0pointer.de/public/systemd-man/sysctl.d.html">sysctl.d</a>, <a href="http://0pointer.de/public/systemd-man/tmpfiles.d.html">tmpfiles.d(5)</a>, <a href="http://0pointer.de/public/systemd-man/vconsole.conf.html">vconsole.conf(5)</a>, for the configuration files systemd standardizes.</li>

<li><a href="http://0pointer.de/public/systemd-man/halt.html">halt(8)</a>, <a href="http://0pointer.de/public/systemd-man/runlevel.html">runlevel(8)</a>, <a href="http://0pointer.de/public/systemd-man/shutdown.html">shutdown(8)</a>, <a href="http://0pointer.de/public/systemd-man/telinit.html">telinit(8)</a>, covering the SysV compatibility tools.</li>

</ul>

<p><a href="http://0pointer.de/public/systemd-man/">Here's the full list of all man pages.</a></p>

<h4>The Blog Stories</h4>

<ul>

<li><a href="http://0pointer.de/blog/projects/systemd.html">The original announcement blog story</a>, lining out the ideas of systemd in much detail.</li>

<li><a href="http://0pointer.de/blog/projects/systemd-update.html">The two status updates</a> <a href="http://0pointer.de/blog/projects/systemd-update-2.html">since then</a>.</li>

<li><a href="http://0pointer.de/blog/projects/systemd-for-admins-1.html">systemd for Administrators #1: Verifying Bootup</a></li>

<li><a href="http://0pointer.de/blog/projects/systemd-for-admins-2.html">systemd for Administrators #2: Which Service Owns Which Processes?</a></li>

<li><a href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">systemd for Administrators #3: How Do I Convert A SysV Init Script Into A systemd Service File?</a></li>

<li><a href="http://0pointer.de/blog/projects/systemd-for-admins-4.html">systemd for Administrators #4: Killing Services</a></li>

<li><a href="http://0pointer.de/blog/projects/three-levels-of-off">systemd for Administrators #5: The Three Levels of "Off"</a></li>

<li><a href="http://0pointer.de/blog/projects/changing-roots.html">systemd for Administrators #6: Changing Roots</a></li>

<li><a href="http://0pointer.de/blog/projects/blame-game.html">systemd for Administrators #7: The Blame Game</a></li>

<li><a href="http://0pointer.de/blog/projects/the-new-configuration-files">systemd for Administrators #8: The New Configuration Files</a></li>

<li><a href="http://0pointer.de/blog/projects/why.html">Why systemd?</a>, exploring why distributions should choose (and are choosing) systemd.</li>

<li><a href="http://0pointer.de/blog/projects/socket-activation.html">systemd for Developers #1: Socket Activation</a></li>

</ul>

<p><a href="http://wiki.opennet.ru/Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2">Some of the systemd for Administrators blog posts are available in Russian language, too.</a></p>

<h4>Other Documentation</h4>

<ul>

<li><a href="http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks">Tips &amp; Tricks</a></li>

<li><a href="http://www.freedesktop.org/wiki/Software/systemd/FrequentlyAskedQuestions">Frequently Asked Questions</a></li>

<li><a href="http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise">Interface Stability Promise</a>, covering what you need to know when developing against systemd interfaces.</li>

<li><a href="http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents">Writing Password Agents</a>, in case you want to add a systemd compatible password agent to the desktop of your preference.</li>

<li><a href="http://www.freedesktop.org/wiki/Software/systemd/hostnamed">On hostnamed</a>, in case you want to add hostname changing UIs to your favourite desktop environment.</li>

</ul>

<h4>Fedora Documentation</h4>

<ul>

<li><a href="http://fedoraproject.org/wiki/Systemd">General Overview</a></li>

<li><a href="http://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet">SysVInit to systemd Cheatsheet</a></li>

<li><a href="http://fedoraproject.org/wiki/How_to_debug_Systemd_problems">How to Debug systemd Problems</a></li>

<li><a href="https://fedoraproject.org/wiki/Packaging:Guidelines:Systemd">systemd Packaging Guidelines</a></li>

</ul>

<h4>In The Press</h4>

<ul>

<li><a href="http://lwn.net/Articles/389149/">The original LWN article</a></li>

<li><a href="https://www.ibm.com/developerworks/mydeveloperworks/blogs/752a690f-8e93-4948-b7a3-c060117e8665/entry/systemd_parte_1?lang=pt_br">B&#xea;-&#xe1;-b&#xe1; do systemd</a></li>

<li><a href="http://0pointer.de/blog/projects/systemd-in-the-news.html">Press articles after the original announcement</a></li>

</ul>

<h4>Other Distributions' Documentation</h4>

<ul>

<li><a href="http://en.opensuse.org/SDB:Systemd">OpenSUSE</a></li>

<li><a href="http://wiki.debian.org/systemd">Debian</a></li>

<li><a href="https://wiki.ubuntu.com/systemd">Ubuntu</a></li>

<li><a href="http://en.gentoo-wiki.com/wiki/Systemd">Gentoo</a></li>

<li><a href="https://wiki.archlinux.org/index.php/Systemd">Arch</a></li>

</ul>

<p>And, if you still have questions after all of this, <a
href="http://lists.freedesktop.org/mailman/listinfo/systemd-devel">please join
our mailing list</a>, or our IRC channel <tt>#systemd</tt> on
<tt>irc.freenode.org</tt>. Alternatively, if you are looking for paid
consulting services for systemd <a href="http://profusion.mobi/">contact our
friends at ProFUSION</a>.</p>

]]></description>
</item>

	    <item>
      <title>systemd Documentation</title>
      <link>http://0pointer.de/blog/index.rss/projects/systemd-docs</link>
      <description>
<p><a href="https://fedoraproject.org/get-fedora">Fedora 15 is out.</a> Get it
while it is hot! It is probably the biggest distribution release of a all time
with being first in shipping both <a href="http://gnome3.org/">GNOME 3</a> and <a href="http://www.freedesktop.org/wiki/Software/systemd">systemd</a>.</p>

<p>Since this is the first distribution release based on systemd, it might be interesting to
read up on what it is all about. Here's a little compilation of the available
documentation for systemd.</p>

<h4>The Manual Pages</h4>

<ul>

<li><a href="http://0pointer.de/public/systemd-man/systemd.html">systemd(1)</a>, covering general concepts of systemd.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemctl.html">systemctl(1)</a>, covering the client control utility of systemd.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd-cgls.html">systemd-cgls(1)</a>, on a tool to show the systemd cgroup tree.</li>

<li><a
href="http://0pointer.de/public/systemd-man/systemd.unit.html">systemd.unit(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.exec.html">systemd.exec(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.service.html">systemd.service(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.socket.html">systemd.socket(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.target.html">systemd.target(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.timer.html">systemd.timer(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.swap.html">systemd.swap(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.snapshot.html">systemd.snapshot(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.path.html">systemd.path(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.mount.html">systemd.mount(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.device.html">systemd.device(5)</a>,
<a
href="http://0pointer.de/public/systemd-man/systemd.automount.html">systemd.automount(5)</a>,
for writing systemd unit files.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd-nspawn.html">systemd-nspawn(1)</a>, on a tool for running simple containers.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd-notify.html">systemd-notify(1)</a>, on a tool for sending notifications to systemd.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd.special.html">systemd.special(5)</a>, with a list of systemd's special units.</li>

<li><a href="http://0pointer.de/public/systemd-man/daemon.html">daemon(7)</a>, on writing daemons.</li>

<li><a href="http://0pointer.de/public/systemd-man/pam_systemd.html">pam_systemd(8)</a>, on configuring user session settings.</li>

<li><a href="http://0pointer.de/public/systemd-man/sd-daemon.html">sd-daemon(7)</a>, <a href="http://0pointer.de/public/systemd-man/sd_listen_fds.html">sd_listen_fds(3)</a>, <a href="http://0pointer.de/public/systemd-man/sd_notify.html">sd_notify(3)</a>, <a href="http://0pointer.de/public/systemd-man/sd_is_fifo.html">sd_is_fifo(3)</a>, <a href="http://0pointer.de/public/systemd-man/sd_booted.html">sd_booted(3)</a>, <a href="http://0pointer.de/public/systemd-man/sd-readahead.html">sd-readahead(7)</a>, <a href="http://0pointer.de/public/systemd-man/sd_readahead.html">sd_readahead(3)</a>, covering the systemd API.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd-ask-password.html">systemd-ask-password(1)</a>, describing a tool for querying system passwords.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd-tmpfiles.html">systemd-tmpfiles(8)</a>, describing a tool for creating, deleting and cleaning up volatile and temporary files and directories.</li>

<li><a href="http://0pointer.de/public/systemd-man/systemd.conf.html">systemd.conf(5)</a>, describing the systemd main configuration file.</li>

<li><a href="http://0pointer.de/public/systemd-man/binfmt.d.html">binfmt.d(5)</a>, <a href="http://0pointer.de/public/systemd-man/hostname.html">hostname(5)</a>, <a href="http://0pointer.de/public/systemd-man/locale.conf.html">locale.conf(5)</a>, <a href="http://0pointer.de/public/systemd-man/machine-id.html">machine-id(5)</a>, <a href="http://0pointer.de/public/systemd-man/machine-info.html">machine-info(5)</a>, <a href="http://0pointer.de/public/systemd-man/modules-load.d.html">modules-load.d(5)</a>, <a href="http://0pointer.de/public/systemd-man/os-release.html">os-release(5)</a>, <a href="http://0pointer.de/public/systemd-man/sysctl.d.html">sysctl.d</a>, <a href="http://0pointer.de/public/systemd-man/tmpfiles.d.html">tmpfiles.d(5)</a>, <a href="http://0pointer.de/public/systemd-man/vconsole.conf.html">vconsole.conf(5)</a>, for the configuration files systemd standardizes.</li>

<li><a href="http://0pointer.de/public/systemd-man/halt.html">halt(8)</a>, <a href="http://0pointer.de/public/systemd-man/runlevel.html">runlevel(8)</a>, <a href="http://0pointer.de/public/systemd-man/shutdown.html">shutdown(8)</a>, <a href="http://0pointer.de/public/systemd-man/telinit.html">telinit(8)</a>, covering the SysV compatibility tools.</li>

</ul>

<p><a href="http://0pointer.de/public/systemd-man/">Here's the full list of all man pages.</a></p>

<h4>The Blog Stories</h4>

<ul>

<li><a href="http://0pointer.de/blog/projects/systemd.html">The original announcement blog story</a>, lining out the ideas of systemd in much detail.</li>

<li><a href="http://0pointer.de/blog/projects/systemd-update.html">The two status updates</a> <a href="http://0pointer.de/blog/projects/systemd-update-2.html">since then</a>.</li>

<li><a href="http://0pointer.de/blog/projects/systemd-for-admins-1.html">systemd for Administrators #1: Verifying Bootup</a></li>

<li><a href="http://0pointer.de/blog/projects/systemd-for-admins-2.html">systemd for Administrators #2: Which Service Owns Which Processes?</a></li>

<li><a href="http://0pointer.de/blog/projects/systemd-for-admins-3.html">systemd for Administrators #3: How Do I Convert A SysV Init Script Into A systemd Service File?</a></li>

<li><a href="http://0pointer.de/blog/projects/systemd-for-admins-4.html">systemd for Administrators #4: Killing Services</a></li>

<li><a href="http://0pointer.de/blog/projects/three-levels-of-off">systemd for Administrators #5: The Three Levels of "Off"</a></li>

<li><a href="http://0pointer.de/blog/projects/changing-roots.html">systemd for Administrators #6: Changing Roots</a></li>

<li><a href="http://0pointer.de/blog/projects/blame-game.html">systemd for Administrators #7: The Blame Game</a></li>

<li><a href="http://0pointer.de/blog/projects/the-new-configuration-files">systemd for Administrators #8: The New Configuration Files</a></li>

<li><a href="http://0pointer.de/blog/projects/why.html">Why systemd?</a>, exploring why distributions should choose (and are choosing) systemd.</li>

<li><a href="http://0pointer.de/blog/projects/socket-activation.html">systemd for Developers #1: Socket Activation</a></li>

</ul>

<p><a href="http://wiki.opennet.ru/Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2">Some of the systemd for Administrators blog posts are available in Russian language, too.</a></p>

<h4>Other Documentation</h4>

<ul>

<li><a href="http://www.freedesktop.org/wiki/Software/systemd/TipsAndTricks">Tips &amp; Tricks</a></li>

<li><a href="http://www.freedesktop.org/wiki/Software/systemd/FrequentlyAskedQuestions">Frequently Asked Questions</a></li>

<li><a href="http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise">Interface Stability Promise</a>, covering what you need to know when developing against systemd interfaces.</li>

<li><a href="http://www.freedesktop.org/wiki/Software/systemd/PasswordAgents">Writing Password Agents</a>, in case you want to add a systemd compatible password agent to the desktop of your preference.</li>

<li><a href="http://www.freedesktop.org/wiki/Software/systemd/hostnamed">On hostnamed</a>, in case you want to add hostname changing UIs to your favourite desktop environment.</li>

</ul>

<h4>Fedora Documentation</h4>

<ul>

<li><a href="http://fedoraproject.org/wiki/Systemd">General Overview</a></li>

<li><a href="http://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet">SysVInit to systemd Cheatsheet</a></li>

<li><a href="http://fedoraproject.org/wiki/How_to_debug_Systemd_problems">How to Debug systemd Problems</a></li>

<li><a href="https://fedoraproject.org/wiki/Packaging:Guidelines:Systemd">systemd Packaging Guidelines</a></li>

</ul>

<h4>In The Press</h4>

<ul>

<li><a href="http://lwn.net/Articles/389149/">The original LWN article</a></li>

<li><a href="https://www.ibm.com/developerworks/mydeveloperworks/blogs/752a690f-8e93-4948-b7a3-c060117e8665/entry/systemd_parte_1?lang=pt_br">B&#xea;-&#xe1;-b&#xe1; do systemd</a></li>

<li><a href="http://0pointer.de/blog/projects/systemd-in-the-news.html">Press articles after the original announcement</a></li>

</ul>

<h4>Other Distributions' Documentation</h4>

<ul>

<li><a href="http://en.opensuse.org/SDB:Systemd">OpenSUSE</a></li>

<li><a href="http://wiki.debian.org/systemd">Debian</a></li>

<li><a href="https://wiki.ubuntu.com/systemd">Ubuntu</a></li>

<li><a href="http://en.gentoo-wiki.com/wiki/Systemd">Gentoo</a></li>

<li><a href="https://wiki.archlinux.org/index.php/Systemd">Arch</a></li>

</ul>

<p>And, if you still have questions after all of this, <a
href="http://lists.freedesktop.org/mailman/listinfo/systemd-devel">please join
our mailing list</a>, or our IRC channel <tt>#systemd</tt> on
<tt>irc.freenode.org</tt>. Alternatively, if you are looking for paid
consulting services for systemd <a href="http://profusion.mobi/">contact our
friends at ProFUSION</a>.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-05-24T14:54:02Z</dc:date>
    </item>
<item>
  <title>Desktop Summit Programme Published</title>
  <link>http://0pointer.de/blog/projects/desktop-summit-schedule.html</link>
  <description><![CDATA[

<p>The Paper Committee of the Desktop Summit 2011, in Berlin, Germany is happy
to announce that the conference programme is now published.</p>

<p><a href="https://www.desktopsummit.org/program">Go directly to the schedule.</a></p>

<p><a href="https://www.desktopsummit.org/press/program-announcement">Read the full announcement.</a></p>

<p>And yes, it is an absolutely rocking programme.</p>

<p>See you in Berlin!</p>

]]></description>
</item>

	    <item>
      <title>Desktop Summit Programme Published</title>
      <link>http://0pointer.de/blog/index.rss/projects/desktop-summit-schedule</link>
      <description>
<p>The Paper Committee of the Desktop Summit 2011, in Berlin, Germany is happy
to announce that the conference programme is now published.</p>

<p><a href="https://www.desktopsummit.org/program">Go directly to the schedule.</a></p>

<p><a href="https://www.desktopsummit.org/press/program-announcement">Read the full announcement.</a></p>

<p>And yes, it is an absolutely rocking programme.</p>

<p>See you in Berlin!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-05-20T15:08:18Z</dc:date>
    </item>
<item>
  <title>Plumbers Conference 2011</title>
  <link>http://0pointer.de/blog/projects/lpc2011.html</link>
  <description><![CDATA[

<p><a href="http://www.linuxplumbersconf.org/2011/">The Linux Plumbers
Conference 2011 in Santa Rosa, CA, USA</a> is coming nearer (Sep. 7-9).
Together with Kay Sievers I am running the Boot&amp;Init track, and together with
Mark Brown the Audio track.</p>

<p>For both tracks we still need proposals. So if you haven't submitted
anything yet, please consider doing so. And that quickly. i.e. if you can
arrange for it, last sunday would be best, since that was actually the final
deadline. However, the submission form is still open, so if you submit
something really, really quickly we'll ignore the absence of time travel and the calendar for a bit. So, go,
submit something.  Now.</p>

<p>What are we looking for? Well, here's what I just posted on the <a
href="https://tango.0pointer.de/pipermail/pulseaudio-discuss/2011-May/010191.html">audio
related mailing lists</a>:</p>

<pre>
So, please consider submitting something if you haven't done so yet. We
are looking for all kinds of technical talks covering everything audio
plumbing related: audio drivers, audio APIs, sound servers, pro audio,
consumer audio. If you can propose something audio related -- like talks
on media controller routing, on audio for ASOC/Embedded, submit
something! If you care for low-latency audio, submit something. If you
care about the Linux audio stack in general, submit something.

LPC is probably the most relevant technical conference on the general
Linux platform, so be sure that if you want your project, your work,
your ideas to be heard then this is the right forum for everything
related to the Linux stack. And the Audio track covers everything in our
Audio Stack, regardless whether it is pro or consumer audio.
</pre>

<p>And here's what I posted to the <a
href="http://lists.freedesktop.org/archives/systemd-devel/2011-May/002428.html">init
related lists</a>:</p>

<pre>So, please consider submitting something if you haven't done so yet. We
are looking for all kinds of technical talks covering everything from
the BIOS (i.e. CoreBoot and friends), over boot loaders (i.e. GRUB and
friends), to initramfs (i.e. Dracut and friends) and init systems
(i.e. systemd and friends). If you have something smart to say about any
of these areas or maybe about related tools (i.e. you wrote a fancy new
tool to measure boot performance) or fancy boot schemes in your
favourite Linux based OS (i.e. the new Meego zero second boot ;-)) then
don't hesitate to submit something on the LPC web site, in the Boot&amp;Init
track!</pre>

<p>And now, quickly, go to <a href="http://www.linuxplumbersconf.org/2011/">the
LPC website</a> and post your session proposal in the Audio resp. Boot&Init track! Thank you!</p>

]]></description>
</item>

	    <item>
      <title>Plumbers Conference 2011</title>
      <link>http://0pointer.de/blog/index.rss/projects/lpc2011</link>
      <description>
<p><a href="http://www.linuxplumbersconf.org/2011/">The Linux Plumbers
Conference 2011 in Santa Rosa, CA, USA</a> is coming nearer (Sep. 7-9).
Together with Kay Sievers I am running the Boot&amp;Init track, and together with
Mark Brown the Audio track.</p>

<p>For both tracks we still need proposals. So if you haven't submitted
anything yet, please consider doing so. And that quickly. i.e. if you can
arrange for it, last sunday would be best, since that was actually the final
deadline. However, the submission form is still open, so if you submit
something really, really quickly we'll ignore the absence of time travel and the calendar for a bit. So, go,
submit something.  Now.</p>

<p>What are we looking for? Well, here's what I just posted on the <a
href="https://tango.0pointer.de/pipermail/pulseaudio-discuss/2011-May/010191.html">audio
related mailing lists</a>:</p>

<pre>
So, please consider submitting something if you haven't done so yet. We
are looking for all kinds of technical talks covering everything audio
plumbing related: audio drivers, audio APIs, sound servers, pro audio,
consumer audio. If you can propose something audio related -- like talks
on media controller routing, on audio for ASOC/Embedded, submit
something! If you care for low-latency audio, submit something. If you
care about the Linux audio stack in general, submit something.

LPC is probably the most relevant technical conference on the general
Linux platform, so be sure that if you want your project, your work,
your ideas to be heard then this is the right forum for everything
related to the Linux stack. And the Audio track covers everything in our
Audio Stack, regardless whether it is pro or consumer audio.
</pre>

<p>And here's what I posted to the <a
href="http://lists.freedesktop.org/archives/systemd-devel/2011-May/002428.html">init
related lists</a>:</p>

<pre>So, please consider submitting something if you haven't done so yet. We
are looking for all kinds of technical talks covering everything from
the BIOS (i.e. CoreBoot and friends), over boot loaders (i.e. GRUB and
friends), to initramfs (i.e. Dracut and friends) and init systems
(i.e. systemd and friends). If you have something smart to say about any
of these areas or maybe about related tools (i.e. you wrote a fancy new
tool to measure boot performance) or fancy boot schemes in your
favourite Linux based OS (i.e. the new Meego zero second boot ;-)) then
don't hesitate to submit something on the LPC web site, in the Boot&amp;Init
track!</pre>

<p>And now, quickly, go to <a href="http://www.linuxplumbersconf.org/2011/">the
LPC website</a> and post your session proposal in the Audio resp. Boot&Init track! Thank you!</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-05-19T21:30:32Z</dc:date>
    </item>
<item>
  <title>Thanks</title>
  <link>http://0pointer.de/blog/projects/thanks.html</link>
  <description><![CDATA[

<p>As some of you might know Fedora 15 went Gold a couple of days ago. The
first big distribution based on systemd will be released 2011-05-24. Mark the date!</p>

<p>In little over a year systemd went from nowhere to became a core piece of
Fedora. This wasn't possible without the numerous folks who worked with us on
getting systemd right, supplied patches, chased bugs, tested releases and posted
comments and generally made sure everything was in shape for the big
release.</p>

<p>At this point we'd like to thank everybody who contributed and a few folks in
particular:</p>

<p><i>A. Costa
Adrian Spinu
Alexey Shabalin
Andreas Jaeger
Andrew Edmunds
Andrey Borzenkov
Bill Nottingham
Brandon Philips
Brendan Jones
Brett Witherspoon
Chris E Ferron
Christian Ruppert
Conrad Meyer
Daniel J Walsh
Dave Reisner
Eric Paris
Fabian Henze
Fabiano Fid&ecirc;ncio
Florian Kriener
Franz Dietrich
Greg Kroah-Hartman
Gustavo Sverzut Barbieri
Harald Hoyer
James Laska
Jan Engelhardt
Jeff Mahoney
Jesse Zhang
J&oacute;hann B. Gu&eth;mundsson
Karel Zak
Koen Kooi
Lucas De Marchi
Ludwig Nussel
Luis Felipe Strano Moraes
Maarten Lankhorst
Malcolm Studd
Marc-Antoine Perennou
Martin Mikkelsen
Matthew Miller
Matthias Clasen
Matthias Schiffer
Michael Biebl
Michael Olbrich
Michael Tremer
Micha&#322; Piotrowski
Michal Schmidt
Mike Kazantsev
Mike Kelly
Miklos Vajna
Milan Broz
Ozan &Ccedil;a&#287;layan
Paul Menzel
Pavol Rusnak
Rahul Sundaram
Rainer Gerhards
Ran Benita
Ray Strode
Robert Gerus
Sedat Dilek
Tero Roponen
Thierry Reding
Tollef Fog Heen
Tomasz Torcz
Tom Callaway
Tom Gundersen
Toshio Kuratomi
William Jon McCann
Wulf C. Krueger
Zbigniew J&#281;drzejewski-Szmek</i></p>

<p>And everybody else who I (or git shortlog) forgot.</p>

<p>Thank you!</p>

<p>Lennart and Kay</p>

<p>BTW, the <a href="http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise">interface stability promise</a> is valid now.</p>

]]></description>
</item>

	    <item>
      <title>Thanks</title>
      <link>http://0pointer.de/blog/index.rss/projects/thanks</link>
      <description>
<p>As some of you might know Fedora 15 went Gold a couple of days ago. The
first big distribution based on systemd will be released 2011-05-24. Mark the date!</p>

<p>In little over a year systemd went from nowhere to became a core piece of
Fedora. This wasn't possible without the numerous folks who worked with us on
getting systemd right, supplied patches, chased bugs, tested releases and posted
comments and generally made sure everything was in shape for the big
release.</p>

<p>At this point we'd like to thank everybody who contributed and a few folks in
particular:</p>

<p><i>A. Costa
Adrian Spinu
Alexey Shabalin
Andreas Jaeger
Andrew Edmunds
Andrey Borzenkov
Bill Nottingham
Brandon Philips
Brendan Jones
Brett Witherspoon
Chris E Ferron
Christian Ruppert
Conrad Meyer
Daniel J Walsh
Dave Reisner
Eric Paris
Fabian Henze
Fabiano Fid&ecirc;ncio
Florian Kriener
Franz Dietrich
Greg Kroah-Hartman
Gustavo Sverzut Barbieri
Harald Hoyer
James Laska
Jan Engelhardt
Jeff Mahoney
Jesse Zhang
J&oacute;hann B. Gu&eth;mundsson
Karel Zak
Koen Kooi
Lucas De Marchi
Ludwig Nussel
Luis Felipe Strano Moraes
Maarten Lankhorst
Malcolm Studd
Marc-Antoine Perennou
Martin Mikkelsen
Matthew Miller
Matthias Clasen
Matthias Schiffer
Michael Biebl
Michael Olbrich
Michael Tremer
Micha&#322; Piotrowski
Michal Schmidt
Mike Kazantsev
Mike Kelly
Miklos Vajna
Milan Broz
Ozan &Ccedil;a&#287;layan
Paul Menzel
Pavol Rusnak
Rahul Sundaram
Rainer Gerhards
Ran Benita
Ray Strode
Robert Gerus
Sedat Dilek
Tero Roponen
Thierry Reding
Tollef Fog Heen
Tomasz Torcz
Tom Callaway
Tom Gundersen
Toshio Kuratomi
William Jon McCann
Wulf C. Krueger
Zbigniew J&#281;drzejewski-Szmek</i></p>

<p>And everybody else who I (or git shortlog) forgot.</p>

<p>Thank you!</p>

<p>Lennart and Kay</p>

<p>BTW, the <a href="http://www.freedesktop.org/wiki/Software/systemd/InterfaceStabilityPromise">interface stability promise</a> is valid now.</p>
</description>
      <category domain="http://www.sauria.com">projects</category>
      <dc:date>2011-05-19T12:01:43Z</dc:date>
    </item>
</channel>
</rss>

