tags/netNico Schotteliushttps://www.nico.schottelius.org//tags/net/Nico Schotteliusikiwiki2021-04-06T20:32:54ZThe Nodejs in IPv6 only networks problemhttps://www.nico.schottelius.org//blog/nodejs-and-ipv6-only-networks/2021-01-23T08:48:31Z2021-01-23T08:48:31Z
<p>For some years I have been seeing problems of nodejs based
applications that do not work in IPv6 only networks.
More recently, <a href="https://twitter.com/NicoSchottelius/status/1352243030368116739">I again found a situation in which a nodejs based
application does not even
install</a>,
if you try to install it in an IPv6 only network.</p>
<p>As the situation is not just straight forward, I started to collect
information about it on this website.</p>
<h2>The starting point</h2>
<p>I wanted to install
<a href="https://github.com/ether/etherpad-lite">etherpad-lite</a> and it failed
with the following error:</p>
<pre><code>174 error request to https://registry.npmjs.org/express-session/-/express-session-1.17.1.tgz failed, reason: connect EHOSTUNREACH 104.16.25.35:443
</code></pre>
<p>The message <strong>connect EHOSTUNREACH 104.16.25.35:443</strong> already cleary
points to the problem: npm is trying to connect via IPv4 on an IPv6
only VM. This cleary cannot work.</p>
<h2>A bug in NPM?</h2>
<p>My first suspicion was that it <a href="https://github.com/npm/cli/issues/2519">must be a bug in
npm</a>. But on Twitter
<a href="https://twitter.com/A1bi/status/1352574621594300416">I was told that npm should work in IPv6 only
networks</a>. That's
strange.
However it turns out that <a href="https://github.com/npm/cli/issues/348#issuecomment-751143040">somebody else had this problem
before</a>
and it seems to be specific to using npm on <a href="https://alpinelinux.org/">Alpine
Linux</a>.</p>
<h2>A bug in Alpine Linux?</h2>
<p>Alpine Linux is currently the main distribution that I use. Not
because of the <a href="https://musl.libc.org/">small libc called musl</a>, but
because the whole system works straight forward. Correct. And easy to
use. But what does that have to do with etherpad-lite failing to
install in an IPv6 only network?</p>
<p>It turns out that there is
<a href="https://github.com/libuv/libuv/issues/2225">a difference between musl and glibc in the default behaviour of
getaddrinfo()</a>, which is
used to retrieve DNS results from the operating system.</p>
<h2>A bug in musl libc?</h2>
<p>I got in touch with the developers of musl and the statement is rather
easy: musl <a href="https://pubs.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html">is behaving according to the
spec</a>
and the caller, in this
context nodejs, cannot just use the <strong>first</strong> result, but has to
potentially try <strong>all results</strong>.</p>
<h2>A DNS or a design bug?</h2>
<p>And at this stage the problem gets tricky. Let's revise again what I
wanted to do and why we are so deep into the rabbit hole.</p>
<p>I wanted to install etherpad-lite, which uses resources from
registry.npmjs.org. So npm wants to connect via HTTPS to
registry.npmjs.org and download a file. To achieve this, npm has to
find out which IP address registry.npmjs.org has. And for this it is
doing a DNS lookup.</p>
<p>So far, so good. Now the trouble begins:</p>
<pre><code>A DNS lookup can contain 0, 1 or many answers.
</code></pre>
<p><strong>And in case of the libc call getaddrinfo, the result is a list of IPv6
and IPv4 addresses, potentially 0 to many of each.</strong></p>
<p>So an application that "just wants to connect somewhere", cannot just
take the first result.</p>
<h2>A bug in nodejs?</h2>
<p>The assumption at this point is that nodejs only takes the first
result from DNS and tries to connect to it. However so far I have not
been able to spot the exact source code location to support that
claim.</p>
<p>Stay tuned...</p>
Added fgallery to the list of static image gallery generatorshttps://www.nico.schottelius.org//blog/added-fgallery-to-static-gallery-generators/2016-07-04T09:31:40Z2016-07-04T09:13:03Z
<p>For those of y$ou who enjoy static gallery generators,
there is a new item on the
<a href="https://www.nico.schottelius.org//docs/static-image-gallery-generator-comparison/">list of static image gallery generators</a>:
It's called <a href="https://www.thregr.org/~wavexx/software/fgallery/">fgallery</a> and has a fresh
design.</p>
<p>Check it out on <a href="https://www.nico.schottelius.org//docs/static-image-gallery-generator-comparison/">the list</a> or
<a href="https://www.thregr.org/~wavexx/software/fgallery/">give it a try directly</a>.</p>
creaturehttps://www.nico.schottelius.org//software/creature/2016-02-25T13:34:26Z2015-02-03T14:47:49Z
<p>creature - manage virtual machines</p>
<h2>What's creature?</h2>
<p>Easy virtual machine management with support for machines, pools, storages and supervisors.
It is intended to be a frontend for different supervisors, but the focus for the initial
release is on qemu/kvm.</p>
<h2>Requirements</h2>
<ul>
<li>posix shell</li>
<li>the used supervisor</li>
</ul>
<h2>Download</h2>
<h3>Via git</h3>
<p>Clone it via</p>
<pre><code>git clone git://github.com/telmich/creature.git
</code></pre>
<p>Or browse on <a href="http://github.com/telmich/creature">github</a></p>
<h2>See also</h2>
<ul>
<li><a href="http://code.google.com/p/ganeti/">ganeti</a></li>
<li><a href="http://libvirt.org/">libvirt</a></li>
</ul>
ceofhttps://www.nico.schottelius.org//software/ceof/2016-02-25T13:34:26Z2015-02-03T14:47:45Z
<h2>Introduction</h2>
<p>ceof is the implementation and documentation
of <strong><em>EOF</em></strong> (Eris Onion Forwarding),
the secure, peer-to-peer (p2p), decentralised anonymous chat network.</p>
<p>You can read the
<a href="http://git.schottelius.org/?p=ceof;a=blob;f=doc/thesis.pdf">bachelor thesis</a>,
which describes the motivation and goals or you
can view <a href="http://git.schottelius.org/?p=ceof;a=blob;f=doc/appendix/poster.pdf">the poster that was used on the presentation</a>.</p>
<h2>Dependencies</h2>
<ul>
<li>python3</li>
<li>python-gnupg (the package python3-gnupg exists for Debian)</li>
<li>virtualenv (optional, if isolating the environment for ceof)</li>
</ul>
<h2>Installation</h2>
<ul>
<li><p>Clone the git repo</p>
<p> git clone git://git.schottelius.org/ceof</p></li>
</ul>
<p>It is mirrored on github: git@github.com:telmich/ceof.git</p>
<h3>When the distro does not ship a Package for python3-gnupg</h3>
<ul>
<li><p>Create an isolated python environment</p>
<p>virtualenv -p /usr/bin/python3 python-env</p></li>
<li><p>Activate the python environment and install gnupg</p>
<p>. ./python-env/bin/activate
pip install python-gnupg</p></li>
</ul>
<h2>Usage preparation</h2>
<h3>Create public/private key pair</h3>
<p>This may take some time, try to keep your computer busy so you can gather
more entropy.</p>
<pre><code>cd ceof
./src/bin/ceof crypto -g --name "Nico@Tee" --email-address nico-ceof@tee.schottelius.org
</code></pre>
<p>Verify that everything worked fine:</p>
<pre><code>./src/bin/ceof crypto --show
</code></pre>
<h3>Prepare a peer to chat with</h3>
<p>Do the following commands on your host and tell your friend
to do the same vice versa:</p>
<p>Show the fingerprint of your PGP key</p>
<pre><code>./src/bin/ceof crypto --fingerprint
</code></pre>
<p>Show your public key for export</p>
<pre><code>./src/bin/ceof crypto --export
</code></pre>
<p>Once you have retrieved the public key, import it</p>
<pre><code>./src/bin/ceof crypto -i < public-key-file
</code></pre>
<p>Create your friend as a peer using a name and its fingerprint</p>
<pre><code>./src/bin/ceof peer --add yourfriend --fingerprint CF7F9EE965AFA1B5A4D1D4D1385D23177A80B7B0
</code></pre>
<p>Add an address of your peer:</p>
<pre><code>./src/bin/ceof peer apic --add-address tcp://192.168.90.251:42342
</code></pre>
<p><strong><em>Warning</em></strong> You need at least 6 peers for ceof to work.
6 peers is the minimum number of peers required by the protocol to function
safely.</p>
<h3>Prepare noise</h3>
<p>ceof sends regulary noise to prevent people from recognising when you
send messages. To do so, ceof requires input for noise. You can use any kind
files, but for debugging purpose text files are recommened.</p>
<p>For example, you could use the content of /usr/share/doc as a base:</p>
<pre><code>mkdir -p ~/.ceof/noise
find /usr/share/doc -name \*.gz -exec zcat {} \; > ~/.ceof/noise/usr-share-doc
</code></pre>
<p>(abort after a minute or so)</p>
<p>Test that ceof can use the noise:</p>
<pre><code>./src/bin/ceof noise
</code></pre>
<h3>Prepare addresses to listen on</h3>
<p>Add one tcp address to listen on</p>
<pre><code>./src/bin/ceof listener --add tcp://0.0.0.0:42342
</code></pre>
<p>Show enabled listeners:</p>
<pre><code>./src/bin/ceof listener --list
</code></pre>
<h3>Start the server</h3>
<pre><code>./src/bin/ceof server
</code></pre>
<h2>Support</h2>
<p>There are two IRC (!) channels, in which development takes places:</p>
<ul>
<li><a href="irc://IRCNet/!eof">!eof</a> - German</li>
<li><a href="irc://irc.freenode.org/#cstar">#cstar</a> - Multi language (German/English)</li>
</ul>
<p>You can subscribe to the
<a href="http://l.schottelius.org/mailman/listinfo/eof">!eof mailinglist</a>.
You can also <a href="https://www.nico.schottelius.org//about/">contact me directly</a>.</p>
News archive / Neuigkeitenarchivhttps://www.nico.schottelius.org//news/2016-02-25T13:34:30Z2015-02-03T14:47:44Z
<p>This archive contains news from both the <a href="https://www.nico.schottelius.org//blog/">blog</a> and <a href="https://www.nico.schottelius.org//neuigkeiten/">neuigkeiten</a>.</p>
<p>Dieses Archiv enthält die
<a href="https://www.nico.schottelius.org//blog/">Englischen</a> und <a href="https://www.nico.schottelius.org//neuigkeiten/">Deutschen</a> Neuigkeiten.</p>
<div class="feedlink">
<a class="feedbutton" type="application/rss+xml" rel="alternate" title="Nico Schottelius (RSS feed)" href="https://www.nico.schottelius.org//news/index.rss">RSS</a>
<a class="feedbutton" type="application/atom+xml" rel="alternate" title="Nico Schottelius (Atom feed)" href="https://www.nico.schottelius.org//news/index.atom">Atom</a>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/k8s-ipv6-only-cluster/">Building an IPv6 only kubernetes cluster</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun Jun 6 18:11:50 2021</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/do-not-rely-on-systemd/">Do not make your software rely on systemd</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun May 23 11:36:38 2021</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/nodejs-and-ipv6-only-networks/">The Nodejs in IPv6 only networks problem</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Jan 23 09:48:31 2021</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/my-notebook-firewall-36c3/">My notebook firewall for the 36c3</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Dec 23 18:23:43 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/support-fiascos/dell-3am-call.png">dell-3am-call.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Dec 5 11:04:54 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/support-fiascos/">List of support fiascos</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Nov 26 17:41:26 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/alpine-linux-on-the-hp-x360-1040-g5-notebook/">Alpine Linux on the HP X360 1040 G5</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue May 14 19:10:49 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.11.1-released/">Cdist 4.11.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Apr 22 21:14:37 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.11.0-released/">Cdist 4.11.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Apr 20 17:16:55 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.11-released/">Cdist 4.10.11 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Apr 13 19:57:39 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.10-released/">Cdist 4.10.10 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Apr 11 14:49:55 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.9-released/">Cdist 4.10.9 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Apr 9 22:49:38 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.8-released/">Cdist 4.10.8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Apr 6 10:55:05 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.7-released/">Cdist 4.10.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Mar 30 19:14:04 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.6-released/">Cdist 4.10.6 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Feb 15 20:48:09 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.5-released/">Cdist 4.10.5 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Dec 21 22:26:35 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.4-released/">Cdist 4.10.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Nov 3 19:26:23 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.3-released/">Cdist 4.10.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun Sep 23 12:07:12 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.2-released/">Cdist 4.10.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Sep 6 07:13:12 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.1-released/">Cdist 4.10.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Jun 21 08:39:10 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.0-released/">Cdist 4.10.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun Jun 17 11:03:59 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.9.1-released/">Cdist 4.9.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed May 30 19:48:45 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.9.0-released/">Cdist 4.9.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu May 17 16:17:38 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.8.4-released/">Cdist 4.8.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Apr 20 14:35:11 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/linux-users-light-on-horizon/">Linux, UNIX and FOSS users: there is light on the horizon</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Mar 30 16:29:12 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.8.3-released/">Cdist 4.8.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Mar 16 19:21:41 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.8.2-released/">Cdist 4.8.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Mar 10 23:54:12 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.8.1-released/">Cdist 4.8.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Mar 9 17:30:38 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.8.0-released/">Cdist 4.8.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed Feb 14 20:14:38 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.7.3-released/">Cdist 4.7.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Nov 10 21:23:11 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.7.2-released/">Cdist 4.7.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun Oct 22 16:21:26 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.7.1-released/">Cdist 4.7.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun Oct 1 11:16:00 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.7.0-released/">Cdist 4.7.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Sep 22 21:26:31 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.6.1-released/">Cdist 4.6.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed Aug 30 22:44:28 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.6.0-released/">Cdist 4.6.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Aug 25 11:06:07 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.5.0-released/">Cdist 4.5.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Jul 20 20:51:56 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.4.4-released/">Cdist 4.4.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Jun 16 12:52:22 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.4.3-released/">Cdist 4.4.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Jun 13 22:18:44 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.4.2-released/">Cdist 4.4.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed Mar 8 19:37:50 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ctt-1.1-released/">ctt 1.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Feb 16 08:30:20 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.4.1-released/">Cdist 4.4.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Dec 17 09:47:36 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.4.0-released/">Cdist 4.4.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Dec 3 09:54:17 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/linux-on-macbook-pro-2016/">How to install Linux on a Macbook Pro 2016</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed Nov 9 14:49:21 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.3.2-released/">Cdist 4.3.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Oct 13 18:53:05 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.3.1-released/">Cdist 4.3.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Aug 22 18:51:24 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.3.0-released/">Cdist 4.3.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Aug 19 21:27:51 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.2.2-released/">Cdist 4.2.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Jul 26 07:52:17 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.2.1-released/">Cdist 4.2.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Jul 18 20:36:40 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.2.0-released/">Cdist 4.2.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Jul 16 08:41:17 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/added-fgallery-to-static-gallery-generators/">Added fgallery to the list of static image gallery generators</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Jul 4 11:13:03 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.1.0-released/">Cdist 4.1.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri May 27 07:28:12 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.0.0-released/">Cdist 4.0.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed May 4 12:29:47 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/change-colour-for-ls-to-work-with-bright-terminal-background/">How to change the colour of ls to work with bright terminal backgrounds</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Jun 1 20:24:23 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/change-colour-for-ls-to-work-with-bright-terminal-background/urxvt-after.png">urxvt-after.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Jun 1 20:24:23 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/change-colour-for-ls-to-work-with-bright-terminal-background/urxvt-before.png">urxvt-before.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Jun 1 20:24:23 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.13-released/">Cdist 3.1.13 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat May 16 17:54:59 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.12-released/">Cdist 3.1.12 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Mar 19 10:23:50 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/glusterfs-foss-development-is-awesome/">Gluster FOSS development is awesome</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Mar 7 09:00:20 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.11-released/">Cdist 3.1.11 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Feb 27 14:47:11 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-access-gluster-from-multiple-networks/">How to access gluster from multiple networks</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Feb 13 11:34:42 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-show-the-latest-git-tag/">How to show the latest git tag</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed Feb 11 11:21:16 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.10-released/">Cdist 3.1.10 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 10 23:01:54 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/lernende-organisationen-importiert/">Artikel über lernende Organisationen importiert</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/matrizen-vektoren-komplexe-zahlen/">Matrizen, Vektoren und komplexe Zahlen</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/neue-fotos-aus-rheinfelden/">Neue Fotos aus Rheinfelden</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/panter-sucht-ruby-und-java-coder/">Panter sucht Ruby on Rails und Java Coder (WERBUNG)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/praesentation-id-dns-schnittstelle-sexy/">Bericht über die skriptbare DNS-Schnittstelle der ID und Kurzvorstellung sexy</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/puppet-e-post-verteiler/">Neuer E-Post-Verteiler zum Thema Puppet an der ETH</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/reisen-im-flugzeug-mit-dem-slalombrett/">Reisen im Flugzeug mit dem Slalombrett</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/sans-dienstliste-veroeffentlicht/">Sans-Veröffentlichung: Liste von interessanten Diensten</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/sans-timeserver-hinzugefuegt/">Neu: Timeserver auf Sans-Veröffentlichung: Liste von interessanten Diensten</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/sans-und-id-zusammenarbeit-dns-schnittstelle/">Skriptbare DNS-Schnittstelle an der ETH: Zusammenarbeit von Sans und der ID</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/thilos-grandiose-pflanzenseite/">Eine riesige Pflanzenbildersammlung von Thilo Schottelius</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/verschiebung-der-rechner-von-inf.ethz.ch-nach-ethz.ch/">Verschiebung der Rechner von inf.ethz.ch nach ethz.ch</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/jiu-jitsu-lehrgang-wasserkuppe-2010/wasserkuppe_2010.pdf">wasserkuppe 2010.pdf</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/wikiversity-die-virtuelle-universitaet-im-internet/">Wikiversity - die virtuelle Universität im Internet</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/bellevue-firmware-download/">Firmware-Aktualisierung am Bellevue</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/der-eof-planet-lebt/">Der !eof-Planet lebt!</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/ein-blick-auf-die-sprache/">Ein Blick auf die Sprache</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/elektrotechnik-hilfe-elektronik-kompendium.de/">Elektrotechnik-Hilfe auf Elektronik-Kompendium.de</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/erster-inhalt-im-deutschen-bereich/">Erster Inhalt im deutschsprachigem Bereich</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/eth-blog-importiert-rss-feeds/">ETH blogs unterstützen RSS-Feed import</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/eth-geraeteboerse/">Die ETH-Gerätebörse - ein Versuch</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/eth-geraeteboerse-funktioniert/">Die ETH-Gerätebörse funktioniert</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/eth-sans-projekt-und-puppet-veroeffentlicht/">Sans- und Puppet an der ETH</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/ethz_dinfk_network-puppet-modul-veroeffentlicht/">Puppet Module ethz_dinfk_network veröffentlicht</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/facharbeit-mathematik-veroeffentlicht/">Facharbeit Mathematik aus der Schulzeit veröffentlicht</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/ihk-dokumentation-importiert/">IHK Arbeit, Webzugriff auf eine Datenbank via PHP, importiert</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/import-des-monotone-arch-artikels/">Import des Linux-Magazin Artikels über Monotone und Arch</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/je-tiefer-man-graebt-praktikumsbericht-magrathea/">Je tiefer man gräbt - der Magrathea-Praktikumsbericht</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/jiu-jitsu-lehrgang-wasserkuppe-2010/">Jiu-Jitsu-Lehrgang: Wasserkuppe (20.-24. Oktober 2010)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//neuigkeiten/bellevue-firmware-download/photo-firmware-bellevue.jpg">photo-firmware-bellevue.jpg</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:43 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/about-init-dependencies/">About init dependencies</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/accept-returns-0/">What went wrong, if accept(2) returns 0?</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/adobe-source-code-pro-font-not-for-small-sizes/">Adobe Source Code Pro font - Nice to read, but not on small sizes</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/android-backup-and-restore-without-google/">Backup and Restore Android Devices without Google</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/announced-first-sans-meeting/">Announced first ETH sysadmin meeting</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/archlinux-single-authentication-database/">Archlinux: One way to create one account for all systems</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/attitude-of-the-foss-community-a-matter-of-perspective/">Attitude of the FOSS community - a matter of perspective</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/automated-unix-installations/">Automated Unix Installations</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/my-bash-and-zsh-prompt/bash-zsh-prompt-screenshot-20111125.png">bash-zsh-prompt-screenshot-20111125.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/buy-pirated-game-no-time-to-explain/">I buy No Time To Explain, because I don't need to</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ccollect-0.8-many-changes-quiet-if-down/">ccollect 0.8 includes many changes like quiet_if_down</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ccollect-0.8-rpm-available/">RPM for ccollect 0.8 available</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ccollect-0.8-to-be-released-soon/">ccollect 0.8 will soon be released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-performance-2.0.0-rc4/cdist-2.0.0-rc4-graph.png">cdist-2.0.0-rc4-graph.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.1-released/">Subject: Cdist 2.0.1 released ...</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.10-released/">Cdist 2.0.10 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.11-security-bugfix-release/">Cdist 2.0.11 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.12-released/">Cdist 2.0.12 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.13-released/">Cdist 2.0.13 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.14-released/">Cdist 2.0.14 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.5-released/">Cdist 2.0.5 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.6-released/">Cdist 2.0.6 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.7-released/">Cdist 2.0.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.8-released/">Cdist 2.0.8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.9-released/">Cdist 2.0.9 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.1.0-released/">Cdist 2.1.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.1.0pre7-released/">Cdist 2.1.0pre7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.1.0pre8-released/">Cdist 2.1.0pre8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.1.1-released/">Cdist 2.1.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.1.2-released/">Cdist 2.1.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.2.0-released/">Cdist 2.2.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.0-released/">Cdist 2.3.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.1-released/">Cdist 2.3.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.2-released/">Cdist 2.3.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.3-released/">Cdist 2.3.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.4-released/">Cdist 2.3.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.5-released/">Cdist 2.3.5 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.6-released/">Cdist 2.3.6 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.7-released/">Cdist 2.3.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.0-released/">Cdist 3.0.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.1-released/">Cdist 3.0.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.2-released/">Cdist 3.0.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.3-released/">Cdist 3.0.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.4-released/">Cdist 3.0.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.5-released/">Cdist 3.0.5 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.6-released/">Cdist 3.0.6 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.7-released/">Cdist 3.0.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.8-released/">Cdist 3.0.8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.9-released/">Cdist 3.0.9 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.0-released/">Cdist 3.1.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.1-released/">Cdist 3.1.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.2-released/">Cdist 3.1.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.3-released/">Cdist 3.1.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.4-released/">Cdist 3.1.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.5-released/">Cdist 3.1.5 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.6-released/">Cdist 3.1.6 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.7-released/">Cdist 3.1.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.8-released/">Cdist 3.1.8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.9-released/">Cdist 3.1.9 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.0.0pre1-released/">Cdist 4.0.0pre1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.0.0pre2-released/">Cdist 4.0.0pre2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.0.0pre3-released/">Cdist 4.0.0pre3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-hint-apply-single-object/">Cdist: How to apply a single object</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-performance-2.0.0-rc4/">Performance of cdist 2.0.0-rc4</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-python-3.2-requirement/">cdist: Why we require Python 3.2 on the source host</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-shell-scripts-functions-local-variables/">Cdist: The scripts vs. functions and local variables problem</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-transfer-files-recursively/">Cdist: How to copy a folder recursively</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ceofhack-qt4-ui/">QT4 user interface prototype added to ceofhack</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ceofhack-ui-support-1/">Introducing first code for user interfaces in ceofhack</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-0.3pre15-released/">Cinit 0.3pre15 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-0.3pre16-released/">Cinit 0.3pre16 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-0.3pre17-released/">Cinit 0.3pre17 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-0.3pre18-released/">Cinit 0.3pre18 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-0.3pre19-released/">Cinit 0.3pre19 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-alive-and-being-migrated/">Cinit is alive - and being migrated</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-migrated/">Cinit migrated to www.nico.schottelius.org</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/clinux-migrating-to-cstar/">Moving on: Migrating from #cLinux to #cstar</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/comic-qemu-tap-bridge-bond-lacp-arista-network-loop/">(Virtual) Network loop powered by Qemu, Bonding, Bridging and Arista</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/comic-qemu-tap-bridge-bond-lacp-arista-network-loop/comic.png">comic.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/configuration-installation-server-bootstrap/">Bootstrapping configuration and installation servers</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/control-and-shutdown-qemu-kvm-vm-via-unix-socket/">How to control (shutdown) Virtual machines from Qemu/KVM via commandline</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/created-photo-website/">Created photo website: photo.nico.schottelius.org</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ctt-0.4-released/">Ctt 0.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ctt-0.7-released/">ctt 0.7 released: new format option</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ctt-0.8-released/">ctt 0.8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ctt-0.9-released/">ctt 0.9 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/debian-ubuntu-fsck-skip-on-battery-bug/">Ubuntu and Debian skip fsck on battery - a bug</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/debian-with-ldap-forgets-users/">Debian with LDAP forgets about its users</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-empties-new-and-existing-files/debuglog">debuglog</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/dell-r815-hands-on-with-linux/">Linux on the Dell R815</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-touchpad-keyboard-correct-screen-resolution/dot-config">dot-config</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/dot-gitconfig-with-git-lo-lco-lpo-lpco-m-pl/">Added new short commands to .gitconfig (lo, lco, lpc, lpco, m, pl)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/find-emails-in-git-log-for-notification/">Find e-mail adresses of people in git log output</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/firefox-middlemouse-scrolling-paste/">How to scroll and paste with the middle mouse button in Firefox</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/first-version-of-fui-released/">First release of fui</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/adobe-source-code-pro-font-not-for-small-sizes/fixed.png">fixed.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/format-sd-card-usb-stick-under-linux-for-canon-cp800-printer/">How to format and partition a SD-Card (USB-Stick) under Linux for the Canon CP800 printer</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/fui-0.2-released/">Released fui-0.2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/fui-0.3-released/">Released fui-0.3</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/generic-automatic-linux-installation-for-different-distributions/">Generic automatic installation for different Linux distributions</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/gpm-1.20.7-released/">GPM 1.20.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/gpm2-published/">Published gpm2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/great-rails-hosting-a-symlink-for-an-app/">Great Rails Hosting: A symlink for an app</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/guide-for-it-bosses/">A guide for IT bosses</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-cronie-anacron-cron-hourly-daily-weekly-work/">Anacron and cronie: How cron.hourly, cron.daily and cron.weekly work</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-add-private-puppet-modules-to-a-public-puppet-repository/">How to add private information to a public puppet repository</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-backup-the-piratebay-and-its-content/">How to backup The Piratebay and its content</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-extract-your-amazon-ebooks-from-the-android-kindle-app/">How to extract your Amazon ebooks from the Android Kindle App</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-find-and-execute-stuff-on-all-hosts/">How to find and execute stuff on all hosts?</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-generate-crypted-md5-password-shadow/">How to generate a /etc/shadow compatible md5 password</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-inform-people-about-better-solutions/">How to inform people about better solutions?</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/i-want-a-decentralised-bugtracker/">I want a decentralised bugtracker</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ikiwiki-has-been-slow/">Ikiwiki has been slow, but it is fast now!</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ikiwiki-is-slow/">Ikiwiki is slow</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/introducing-simple-universal-time/">Introducing Simple Universal Time (SUT)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/iptables-distribution-independent-powered-by-cdist-sponsored-by-panter/">Linux distribution independent iptables setup powered by cdist sponsored by panter</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/kvm-vms-with-cdist-at-local.ch/kvm-setup-local.ch-overview.png">kvm-setup-local.ch-overview.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/kvm-vms-with-cdist-at-local.ch/">KVM Virtual Machines managed with cdist and sexy @ local.ch</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/lenovo-x201-with-linux/">Linux on the Lenovo X201</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/libpr0n-the-internet-is-for-porn/">libpr0n: an image rendering library for Mozilla</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/lighttpd-plone-rewrite-redirect/">Mixing redirects and rewrites with lighttpd and Plone</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/linux-cannot-ping-self/">Linux cannot ping itself, but others can ping the box</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/linux-virtual-machines-a-real-pain/">Linux virtual machine software is a real pain</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/lxc-insecure-since-2011/">LXC still insecure (since 2011)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-archlinux/">Installing Linux on a Macbook Air (4,2)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-correcting-multimedia-key-mapping-and-status/">Correcting the multimedia keys mapping on the MacBook Air 4,2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-linux-status-report/">Status of Linux on the MacBook Air 4,2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-touchpad-click-and-move-fixed/">MacBook Air 4,2: Xorg/Synaptics touchpad click and move fixed</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-touchpad-keyboard-correct-screen-resolution/">Getting the keyboard, touchpad and correct screen resolution working on the MacBook Air 4,2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/managing-custom-software-with-environment-modules-in-the-systems-group/">Managing custom software with environment modules in the Systems Group</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/maybe-systemd-is-not-the-best-idea/">Maybe systemd is not the best idea</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migrate-ubuntu-to-cinit/">Migrate Ubuntu to cinit</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migrated-nico.schotteli.us/">Migrated nico.schotteli.us</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migrated-tech.schottelius.org/">Migrated tech.schottelius.org</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migrated-unix.schottelius.org/">Migrated unix.schottelius.org</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migrating-away-from-puppet-to-cdist/">Migrating away from puppet to cdist</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migration-1-configs/">Configuration files migrated and updated</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migration-2-freebsd-raid-monitoring-foss/">Migrated FreeBSD raid monitoring and FOSS article</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migration-3-ccollect/">Migrated ccollect</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migration-4-gpm/">Migrated gpm</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migration-5-gpgme-introduction/">Migrated small introduction to gpgme</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/mozilla-conkeror-change-tempdir/">How to change the tempdir for Mozilla (general) and conkeror</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/news-2013-01-22/msad.jpg">msad.jpg</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/my-bash-and-zsh-prompt/">My Bash and Zsh prompt</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/my-photo-publishing-approach/">My photo publishing approach</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/new-comments-about-ccollect/">New comments about ccollect published</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/new-wireless-gigabit-linux-router-for-ungleich-office/">New Linux wireless gigabit Linux router for ungleich office</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/news-2013-01-22/">News 2013-01-22</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/nginx-prioritise-x-accel-before-regular-expressions/">Nginx: Use X-Accel with conflicting regular expressions</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/nscd-bugs/">Known bugs of nscd with LDAP</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/offlineimap-and-hpodder-need-a-maintainer/">Searching for a maintainer for offlineimap and hpodder</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/openssh-6.2-add-callback-functionality-using-dynamic-remote-port-forwarding/">OpenSSH 6.2: Add callback functionality (using dynamic remote port forwarding)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/openssh-6.2-add-callback-functionality-using-dynamic-remote-port-forwarding/openssh-6.2p1-expose-remote-port-forwarding.diff">openssh-6.2p1-expose-remote-port-forwarding.diff</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-ceofhack/">Published ceofhack</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-creature/">Published creature</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-efsh-puppet-module/">Published puppet module for efsh</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-java-prayer-webmail-collectd-puppet-modules/">Published puppet modules: Collectd, Java, Prayer and ns_webmail_proxy</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-list-of-projects/">Published list of projects</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-machine-booking-system-mbs-eth-zurich/">Published mbs: A machine booking system for the ETH Zurich</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-openntpd-ethz-puppet-module/">Published puppet module for openntpd including ETHZ integration</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-postgresql-puppet-module/">Published puppet module for postgresql</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-smtp_logger/">Published smtp_logger</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-static-image-gallery-generator-comparison/">Published Static image gallery generator comparison</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-xorg-terminal-emulator-fonts/">Published Xorg terminal emulator font list</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-bugs-motivation-for-migration-and-cdist/">Puppet bugs that motivated me to migrate away from puppet and write cdist</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-duplicate-definition-on-the-same-line/">Puppet: Duplicate definition - on the same line!</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-empties-new-and-existing-files/">Puppet empties new and existing files</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-name-is-not-as-expected-but-classname/">In puppet, $name is not always what you expect</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-sometimes-loads-a-class/">Puppet: The quantum effect when loading classes</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/new-wireless-gigabit-linux-router-for-ungleich-office/rb2011uas2hnd-in.jpg">rb2011uas2hnd-in.jpg</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/reboot-linux-if-task-blocked-for-more-than-n-seconds/">Reboot Linux if task blocked for more than n seconds</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/released-ccollect-0.8/">Released ccollect 0.8</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/released-ceofhack-0.6/">Released ceofhack 0.6</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/released-efsh-0.2/">Released efsh 0.2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/remote-management-names-rmm-drac-ilom-imm-ilo/">Names of remote management systems (rmm, drac, ilom, imm, ilo)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/replaced-pgp-key-9885188C-with-31877DF0/">Replaced old PGP key 9885188C with 31877DF0</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/restart-to-write-news/">Started to write news again</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ruby-ncurses-ceofhack-fui/">Take ruby, ncurses and ceofhack, get fui</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ruby-on-rails-fix-hostname-does-not-match-the-server-certificate/">Ruby on Rails: Fix the hostname does not match the server certificate error</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sans-puppet-meeting-20100825/">Next /sans/ meeting with puppet as main topic</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/adobe-source-code-pro-font-not-for-small-sizes/scp.png">scp.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/searching-notebook-for-a-digital-nomad/">Searching a notebook for a digital nomad</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-and-cdist-at-local.ch/">Sexy and cdist @ local.ch</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-backend-change-dns-support/">Sexy example: Small backend change and you are managing DNS</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-and-cdist-at-local.ch/sexy-backends-local.ch.png">sexy-backends-local.ch.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-and-cdist-at-local.ch/sexy-cdist-interaction-local.ch.png">sexy-cdist-interaction-local.ch.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-cdist-interaction-sexy-chooses-cdist-configures/">Sexy and cdist interaction: Sexy chooses hosts, cdist configures</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-and-cdist-at-local.ch/sexy-database-overview.png">sexy-database-overview.png</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-is-being-renamed-to-cinv/">Sexy is being renamed to cinv</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-network-bootstrap/">Bootstrapping a network with sexy</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/solution-proposal-for-the-io-select-poll-problem/">Solution proposal for the io select/poll problem</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/started-archive.schottelius.org/">Started Archive.Schottelius.Org</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/static-nameserver-and-search-path-with-dhcpcd/">Setting static nameserver and search path with dhcpcd</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/stdin-here-documents-templating-in-cdist/">How to use stdin and here documents for templating in cdist</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sysadmin-bootstrap-1/">Sysadmin bootstrap - the beginning</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sysadmin-bootstrap-2/">Sysadmin bootstrap - seek for information</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/the-power-of-vim-mail-editing/">The power of vim: mail editing</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/treat-virtual-machines-like-hardware/">Treat Virtual Machines like Hardware</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/tunneling-qemu-kvm-unix-socket-via-ssh/">Tunneling the qemu or kvm vnc unix socket via ssh</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ungleich-blog/">ungleich is blogging</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/update-puppetmaster-before-puppet-clients/">Puppet: Update the puppetmaster before the puppet clients</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/urxvt-change-font-dynamically/">How to change the font in urxvt (rxvt-unicode) dynamically</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/use-smart-passphrases-stop-enforcing-weak-and-complicated-passwords/">Use smart passphrases - stop enforcing weak and complicated passwords</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/volume-keys-on-lenovo-x200-x201-xbindkeys/">How to use the volume keys on the Lenovo X200 and X201</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/what-is-configuration-management/">What is configuration management?</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/why-centos-does-not-stop-your-init-script/">Why CentOS does not stop your init script</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/xorg-disable-touchpad-with-xinput/">How to disable the touchpad in Xorg with xinput</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/postfix-postgres-sasl-error-authentication-failed-authentication-failure/">Solution for Postfix with Postgres: SASL error: authentication failed: authentication failure</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Oct 7 00:00:00 2008</span>
</span>
</div>
Softwarehttps://www.nico.schottelius.org//software/2016-02-25T13:34:24Z2015-02-03T14:47:44Z
<div class="feedlink">
<a class="feedbutton" type="application/rss+xml" rel="alternate" title="Nico Schottelius (RSS feed)" href="https://www.nico.schottelius.org//software/index.rss">RSS</a>
<a class="feedbutton" type="application/atom+xml" rel="alternate" title="Nico Schottelius (Atom feed)" href="https://www.nico.schottelius.org//software/index.atom">Atom</a>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/Hted/">Hted</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/ccollect/">ccollect</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/cconf/">cconf</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/cdist/">cdist - usable configuration management - moved to https://www.cdi.st on 2019-05-05</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:44 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/ceof/">ceof</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:45 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/cinit/">cinit</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:45 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/cinv/">cinv - the Swiss Army Knife for inventory management</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:49 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/creature/">creature</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:49 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/ctt/">ctt - time tracking for geeks</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:49 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/cuc/">cuc - manage a UNIX company</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:49 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/cuni/">cuni</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:49 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/fui/">fui</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:49 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/gpm/">gpm - general purpose mouse</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:49 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/gpm2/">gpm2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:48:08 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/mbs/">Machine Booking System (mbs)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:48:08 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/mini-lpd/">mini-lpd</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:48:08 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/sexy/">Sexy has been renamed to cinv</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:48:08 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//software/smtp_logger/">smtp logger</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:48:08 2015</span>
</span>
</div>
Firmware-Aktualisierung am Bellevuehttps://www.nico.schottelius.org//neuigkeiten/bellevue-firmware-download/2016-02-25T13:34:32Z2015-02-03T14:47:43Z
<p>Zu sehen heute morgen am Bellevue in Zürich:</p>
<p><img src="https://www.nico.schottelius.org//tags/net/photo-firmware-bellevue.jpg" title="Firmware download Bellevue" alt="firmware download" /></p>
Elektrotechnik-Hilfe auf Elektronik-Kompendium.dehttps://www.nico.schottelius.org//neuigkeiten/elektrotechnik-hilfe-elektronik-kompendium.de/2016-02-25T13:34:32Z2015-02-03T14:47:43Z
<p>Da ich mich demnächst im Studium etwas mit
<a href="https://ssl.hsz-t.ch/drupal/ebs/node/54?id_occasion=82">Elektrotechnik</a>
beschäftigen werde und im Vorkurs mir ein paar offene Fragen geblieben
sind, habe ich heute ein bißchen im Internet nach einer guten Erklärung
zu den
<a href="http://de.wikipedia.org/wiki/Kirchhoffsche_Regeln">kirchhoffschen Regeln</a>
gesucht.</p>
<p><a href="http://www.elektronik-kompendium.de/sites/grd/0608011.htm">Fündig</a>
bin ich auf
<a href="http://www.elektronik-kompendium.de">Elektronik-Kompendium.de</a> geworden.</p>
<p><a href="http://www.elektronik-kompendium.de/service/impressum.htm">Patrick Schnabel</a>
bittet um einen Verweis, wenn man die Netzseite gut findet, dem ich
hiermit gerne nachkomme.</p>
<p>Das ist für mich wieder ein Fall, bei dem ich froh wäre, wenn es eine
gescheite
<a href="http://de.wikipedia.org/wiki/Micropayment">Mikrozahlungsmöglichkeit</a>
geben würde, denn ich hätte dem Autor gerne 50 Rappen für den Artikel
gezahlt.</p>
u2u: unix 2 unixhttps://www.nico.schottelius.org//net/u2u/2016-02-25T13:34:32Z2015-02-03T14:47:43Z
<h2>unix 2 unix</h2>
<p>the "bring unices together" technical and social project</p>
<hr />
<h2>Motivation</h2>
<p>There are many different Unix versions ("Unices") out there today.
As a
<a href="http://nico.schottelius.org/documentations/foss/the-term-foss/">FOSS</a>
developer I interact with many different developers, who, like me, use many
different versions of Unix.
Many parts of each Unix are being reinvented over and over again, which is not
bad in general (things are beeing improved).
The question is:
<b>Why should one Unix not use the advantages another Unix has?</b>
The other motivation is to reduce the gap between different Unices: So
a Unix admin can easily use and hack for Unix B, if she only knows Unix A.
Thus, if she creates a cool feature for Unix A to speedup the boot process
to last only 0.5 seconds, she can submit it to developers of Unix C to Z.</p>
<h2>Ideas</h2>
<p>There are already many ongoing efforts in this direction (see below
for examples), but this is a different idea: It's a platform for Unixers</p>
<ul>
<li>to exchange their ideas and code,
<li>to improve their Unix,
<li>to share cool ideas,
<li>to propose standards to be used among Unices,
</ul>
<p><i>independently of the Unix (they|you) are using!</i></p>
<p><p>As most Unixers like easy to use interfaces, I chose to create
a new <a href="http://l.schottelius.org/mailman/listinfo/u2u">mailing list</a>
(just because I think that newsreaders suck more than MUAs).
The difference to existing projects is, that it is <b>not</b> focussed
<ul></p>
<p> <li>on a specific feature,
<li>a specific version
<li>or a specific area.
</ul>
Nor is the idea of this project to create a
<ul>
<li>feature rich, fast development (<b>Linux</b>),
<li>everywhere running (<b>NetBSD</b>),
<li>fast (<b>FreeBSD</b>),
<li>secure (<b>OpenBSD</b>)
<li>and commercially supported (<b>Solaris</b>)</p>
<p></ul>
<i>Unix</i>.
What this project may possibly be able to do is
<ul>
<li>to bring people together,
<li>to create a spring board into the Unix scene,
<li>to prevent you from making the same mistakes others did before
<li>and to let people create real projects somewhere else.
</ul></p>
<h2>Status</h2>
<ul>
<li><strong><em>Calling people</em></strong></li>
</ul>
<p>To make progress and bring Unixers together, there is a need to be known,
so more people join and discuss their ideas.</p>
<p>Remember: This website is just a plattform - you're the one who has to act.</p>
<ul>
<li><a href="http://l.schottelius.org/mailman/listinfo/u2u">Subscribe to the mailing list</a>,</li>
</ul>
<p>Otherwise, you may also just</p>
<ul>
<li>blame me for this website,</li>
<li>tell me that it is (unecessary|has already been done|<<i>insert flame|praise here</i>>)</li>
<li>and then let others know, what cool ideas you've in your mind.</li>
<li>Or visit the <a href="http://l.schottelius.org/pipermail/u2u/">archive</a>.</li>
</ul>
<h2>Examples</h2>
<p><p>Some projects I'm aware of, which bring together Unices:
<ul>
<li><a href="http://wiki.x.org/">Xorg</a> - Which Unix does not have it?
<li><a href="http://www.gnu.org">GNU</a> - Although they are not Unix
<li><a href="http://www.bsd.org/">The BSDs</a> The fast, secure and portable operating systems
<li><a href="http://nico.schottelius.org/documentations/specifications/efsh/">EFSH</a> -
Nico Schottelius' proposal of a generic easy filesystem hierarchy
(this is <b>not</b> related to LSB
<li><a href="http://nico.schotteli.us/papers/linux/cconfig/">cconfig</a> -
Nico Schottelius' proposal of a configuration format</p>
<p></ul>
Do you know about more projects? I would be happy, if you let me know!</p>
Adobe Source Code Pro font - Nice to read, but not on small sizeshttps://www.nico.schottelius.org//blog/adobe-source-code-pro-font-not-for-small-sizes/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>A friend of mine pointed me to the
release of the
<a href="https://blogs.adobe.com/typblography/2012/09/source-code-pro.html">Source Code Pro font</a>
from Adobe, which can be found on
<a href="https://github.com/adobe/Source-Code-Pro">github</a>.</p>
<p>I told urxvt to use the font using the escape sequence</p>
<pre><code>printf '\33]50;%s\007' "xft:Source Code Pro"
</code></pre>
<p>which looks like this:</p>
<p><a href="https://www.nico.schottelius.org//blog/adobe-source-code-pro-font-not-for-small-sizes/scp.png"><img src="https://www.nico.schottelius.org//blog/adobe-source-code-pro-font-not-for-small-sizes/scp.png" width="713" height="434" alt="Source Code Pro in a terminal" class="img" /></a></p>
<p>(this required a new urxvt instance to be started, because urxvtd seems
not to pickup font additions during run)</p>
<p>As the resolution on the MacBook Air is "only" 1440x900, I am normally
using the <strong>fixed</strong> font to have a lot of space for the text. This
is how it looks like:</p>
<p><a href="https://www.nico.schottelius.org//blog/adobe-source-code-pro-font-not-for-small-sizes/fixed.png"><img src="https://www.nico.schottelius.org//blog/adobe-source-code-pro-font-not-for-small-sizes/fixed.png" width="665" height="438" alt="Source Code Pro in a terminal" class="img" /></a></p>
<p>Putting both terminals side by side, I am loosing 12 rows from the size
different.</p>
<p>As the
<a href="https://github.com/adobe/Source-Code-Pro/issues/28">Source Code Pro font is not designed for this small size</a>
I happily continue to use fixed for now.</p>
<p>Besides being to large for my use case, Source Code Pro could become a quite
interesting font for coders.</p>
<p>If you are interested in more usable fonts for terminals,
have a look at the
<a href="https://www.nico.schottelius.org//docs/xorg-terminal-emulator-fonts/">Xorg terminal emulator font list</a>.</p>
Attitude of the FOSS community - a matter of perspectivehttps://www.nico.schottelius.org//blog/attitude-of-the-foss-community-a-matter-of-perspective/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>It is a sunny day in the mountains,
<a href="https://www.google.ch/maps/place/Glarus/@46.9998482,9.0581153,21037m/data=!3m1!1e3!4m2!3m1!1s0x4785318a3a76c851:0x823354d3ed5144b2?hl=en">Glarus</a>.
I am on the train, reading what is going on in the Internet.
Reading my private, self aggregated "newspaper".
<a href="https://plus.google.com/app/basic/stream/z13rdjryqyn1xlt3522sxpugoz3gujbhh04">Lennart is complaining</a>
about how bad the FOSS community is [to him], which made me feel sad
for him. This blog post is devoted for him and everyone who
is feeling being traited unjust in the FOSS community.</p>
<h2>A short word about me</h2>
<p>You may have not heard much about me, as I used to keep out of public
discussions for a long time, especially when they are not
<a href="http://en.wiktionary.org/wiki/fruitful">fruitful (2nd meaning)</a>.</p>
<p>I am the maintainer or author of
<a href="https://www.nico.schottelius.org//software/gpm/">gpm</a>, an <a href="https://www.nico.schottelius.org//software/cinit/">init system</a>,
a <a href="https://www.nico.schottelius.org//software/ccollect/">backup utility</a>,
a <a href="https://www.nico.schottelius.org//software/cdist/">configuration management system</a> and
some <a href="https://www.nico.schottelius.org//software/">more software</a>. I am the CEO of
<a href="http://www.ungleich.ch">ungleich</a> and have been active in the FOSS community since 1998.</p>
<p>People who use my software have shining eyes, usually
contribute the software in form of ideas, code or even
better: in form of praise, which motivates any FOSS coder.</p>
<p>In short: I love the FOSS community, because they do good to me.</p>
<h2>The FOSS community</h2>
<p>In my opinion the FOSS community is very friendly, open minded
and helpful. It consists of many geeky people,
introverted and extroverted, developers, sysadmins and
also the users.</p>
<p>There are many great tools being developed, beer being drunken
and also heated discussions led, when it comes to
<strong>personal opinions</strong>.</p>
<h3>How I experience the FOSS communit</h3>
<p>I receive pull requests for the software I have written on a daily basis,
discuss how to integrate them, into which direction we should develop.
(Virtual) friends pass interesting links to me, we compare software and
find out which architecture is superior in which regards to another.</p>
<p>Questions from newbies are mostly answered by the community around
me and our newbies turn into gurus and begin to answer questions to
newbies (read <a href="http://www.catb.org/esr/faqs/hacker-howto.html">How To Become A Hacker</a> and <a href="http://www.catb.org/esr/faqs/smart-questions.html">How To Ask Questions The Smart Way</a>
to understand how it works).</p>
<p>The alert reader may have noticed I am not talking about
the Linux community as Lennart does. Why not?
Because in my opinion there is <strong>much more than just Linux</strong>
in the FOSS community.</p>
<h2>Linux is a small part of the existing FOSS</h2>
<p>Linux is one successful FOSS project, but everyone being in the
FOSS community knows that there is much more than just Linux.
The BSDs are developing pretty cool architectures and great
software (like <a href="http://www.openssh.com/">OpenSSH</a>) and in my opinion there is a
great potential to work more closely together. I am not going to name
all great software here, however if you are coming from a Linux only world,
it may be helpful to know there are other worlds that form the FOSS community.</p>
<p>Everytime I develop software, I have take care of how to make it portable
to other Unices. I think it is rather closed minded to focus on Linux
only software, especially when a great standard
(<a href="http://pubs.opengroup.org/onlinepubs/9699919799/">The Open Group Base Specifications Issue 7</a>) exists that allows us to easily write portable software.</p>
<p>So in short, if you consider Linux being the only plattform
to develop for and do not respect the work of others (there is
a reason for Posix), people may not respect you either.</p>
<h2>What goes around, comes around</h2>
<p>You probably have heard of the idiom <strong>What goes around, comes around</strong>,
it is rather old (wikipedians: cite needed) and it means "the way
you behave towards other people will be reflected by them and it is how
they behave towards you".</p>
<p>So if you are yelling at someone, trying to force someone to do something
or rant about other's software, you are likely to experience this as well.</p>
<h2>A question of life and attitude</h2>
<p>Dear reader, did you ever have a (car) accident? Or have you watched one?
Maybe you will have noticed that the two involved parties usually have a
completly different picture of what just happened.
This is true for every situation in life, how you see a situation depends
on your point of view, on your situation. So a lot of how your world <em>is</em>
depends on your view.
It is also important to note that
<strong>there are two sides to every question</strong> and it is about you, your
attitude and experience to see the right side.</p>
<h2>A pinch of spirituality and scout behaviour</h2>
<p>I will not go into beliefs here, but if you have met spiritual people in
your life you may have noticed a lot of them being positively. You may
have asked yourself if it is it because of drugs or the way the live?</p>
<p>If you have been a scout, you may remember the maxim
<strong>do a good deed every day</strong> - imagine everyone does this, there is a high
chance somebody will do something good to you, every day.</p>
<h2>Summary and suggestions</h2>
<p>So why do people love software I have written and don't collect money
for hitman to go after me? Maybe I am brilliant and they have fallen
so deep in love with the software I wrote that they don't think about it -
or maybe it is because I treat people with respect.
I think being able to to learn from critics is also very helpful and
to <strong>expect the best, prepare for the worst</strong> when you are communicating
can change your life to experience it very positively.</p>
<p>So anyone who is unhappy with how you are treated (by the FOSS community),
here are some suggestions for you:</p>
<ul>
<li>Be friendly - and the echo will be the same</li>
<li>Have an opinion, but don't force it to someone else</li>
<li>Think twice about what you write, especially if it can be interpreted offensive</li>
<li>Don't be ignorant, treat people with respect</li>
</ul>
<h2>Comments</h2>
<p>If you want to add some suggestions or have other improvement ideas,
you can either leave a comment on
<a href="https://news.ycombinator.com/item?id=8417176">hackernews</a> or
<a href="https://twitter.com/NicoSchottelius">@NicoSchottelius</a>.</p>
Nico Schottelius' Bloghttps://www.nico.schottelius.org//blog/2016-02-25T13:34:30Z2015-02-03T14:47:26Z
<p>Looking for <a href="https://www.nico.schottelius.org//blog-archive/">old news</a>? Jump directly to the
<a href="https://www.nico.schottelius.org//blog-archive/">news archive</a>!</p>
<div class="feedlink">
<a class="feedbutton" type="application/rss+xml" rel="alternate" title="Nico Schottelius (RSS feed)" href="https://www.nico.schottelius.org//blog/index.rss">RSS</a>
<a class="feedbutton" type="application/atom+xml" rel="alternate" title="Nico Schottelius (Atom feed)" href="https://www.nico.schottelius.org//blog/index.atom">Atom</a>
</div>
<div class="inlinepage">
<div class="inlineheader">
<span class="header">
<a href="https://www.nico.schottelius.org//blog/k8s-ipv6-only-cluster/">Building an IPv6 only kubernetes cluster</a>
</span>
</div>
<div class="inlinecontent">
<h2>Introduction</h2>
<p>For a few weeks I am working on my pet project to create a production
ready kubernetes cluster that runs in an IPv6 only environment.</p>
<p>As the complexity and challenges for this project are rather
interesting, I decided to start documenting them in this blog post.</p>
<p>The
<a href="https://code.ungleich.ch/ungleich-public/ungleich-k8s">ungleich-k8s</a>
contanins all snippets and latest code.</p>
<h2>Objective</h2>
<p>The kubernetes cluster should support the following work loads:</p>
<ul>
<li>Matrix Chat instances (Synapse+postgres+nginx+element)</li>
<li>Virtual Machines (via kubevirt)</li>
<li>Provide storage to internal and external consumers using Ceph</li>
</ul>
<h2>Components</h2>
<p>The following is a list of components that I am using so far. This
might change on the way, but I wanted to list already what I selected
and why.</p>
<h3>OS: Alpine Linux</h3>
<p>The operating system of choice to run the k8s cluster is
<a href="https://www.alpinelinux.org/">Alpine Linux</a> as it is small, stable
and supports both docker and cri-o.</p>
<h3>Container management: docker</h3>
<p>Originally I started with <a href="https://cri-o.io/">cri-o</a>. However using
cri-o together with kubevirt and calico results in an overlayfs placed
on / of the host, which breaks the full host functionality (see below
for details).</p>
<p>Docker, while being deprecated, allows me to get kubevirt generally
speaking running.</p>
<h3>Networking: IPv6 only, calico</h3>
<p>I wanted to go with <a href="https://cilium.io/">cilium</a> first, because it
goes down the eBPF route from the get go. However cilium does not yet
contain native and automated BGP peering with the upstream
infrastructure, so managing nodes / ip network peering becomes a
tedious, manual and error prone task. Cilium is on the way to improve
this, but is not there yet.</p>
<p><a href="https://www.projectcalico.org/">Calico</a> on the other hand still
relies on ip(6)tables and kube-proxy for forwarding traffic, but has
for a long time proper BGP support. Calico also aims to add eBPF
support, however at the moment it does not support IPv6 yet (bummer!).</p>
<h3>Storage: rook</h3>
<p><a href="https://rook.io/">Rook</a> seems to be the first choice if you search
who is doing what storage providers in the k8s world. It looks rather
proper, even though some knobs are not yet clear to me.</p>
<p>Rook, in my opinion, is a direct alternative of running cephadm, which
requires systemd running on your hosts. Which, given Alpine Linux,
will never be the case.</p>
<h3>Virtualisation</h3>
<p><a href="https://kubevirt.io/">Kubevirt</a> seems to provide a good
interface. Mid term, kubevirt is projected to replace
<a href="https://opennebula.io/">OpenNebula</a> at
<a href="https://ungleich.ch">ungleich</a>.</p>
<h2>Challenges</h2>
<h3>cri-o + calico + kubevirt = broken host</h3>
<p>So this is a rather funky one. If you deploy cri-o and calico,
everything works. If you then deploy kubevirt, the <strong>virt-handler</strong>
pod fails to come up with the error message</p>
<pre><code> Error: path "/var/run/kubevirt" is mounted on "/" but it is not a shared mount.
</code></pre>
<p>In the Internet there are two recommendations to fix this:</p>
<ul>
<li>Fix the systemd unit for docker: Obviously, using neither of them,
this is not applicable...</li>
<li>Issue <strong>mount --make-shared /</strong></li>
</ul>
<p>The second command has a very strange side effect: Issueing that, the
contents of a calico pod are mounted as an overlayfs <strong>on / of the
host</strong>. This covers /proc and thus things like <strong>ps</strong>, <strong>mount</strong> and
co. fail and basically the whole system becomes unusable until reboot.</p>
<p>This is fully reproducible. I first suspected the tmpfs on / to be the
issue, used some disks instead of booting over network to check it and
even a regular ext4 on / causes the exact same problem.</p>
<h3>docker + calico + kubevirt = other shared mounts</h3>
<p>Now, given that cri-o + calico + kubevirt does not lead to the
expected result, what does the same setup with docker look like? The
calico node pods with docker fail to come up, if /sys is not
shared mounted, the virt-handler pods fail if /run is not shared
mounted.</p>
<p>Two funky findings:</p>
<p>Issueing the following commands makes both work:</p>
<pre><code>mount --make-shared /sys
mount --make-shared /run
</code></pre>
<p>The paths are totally different between docker and cri-o, even though
the mapped hostpaths in the pod description are the same. And why is
having /sys not being shared not a problem for calico in cri-o?</p>
<h2>Log</h2>
<h3>Status 2021-06-07</h3>
<p>Today I have updated the ceph cluster definition in rook to</p>
<ul>
<li>check hosts every 10 minutes instead of 60m for new disks</li>
<li>use IPv6 instead of IPv6</li>
</ul>
<p>The succesful ceph -s output:</p>
<pre><code>[20:42] server47.place7:~/ungleich-k8s/rook# kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph -s
cluster:
id: 049110d9-9368-4750-b3d3-6ca9a80553d7
health: HEALTH_WARN
mons are allowing insecure global_id reclaim
services:
mon: 3 daemons, quorum a,b,d (age 75m)
mgr: a(active, since 74m), standbys: b
osd: 6 osds: 6 up (since 43m), 6 in (since 44m)
data:
pools: 2 pools, 33 pgs
objects: 6 objects, 34 B
usage: 37 MiB used, 45 GiB / 45 GiB avail
pgs: 33 active+clean
</code></pre>
<p>The result is a working ceph clusters with RBD support. I also applied
the cephfs manifest, however RWX volumes (readwritemany) are not yet
spinning up. It seems that test <a href="https://artifacthub.io/">helm charts</a>
often require RWX instead of RWO (readwriteonce) access.</p>
<p>Also the ceph dashboard does not come up, even though it is
configured:</p>
<pre><code>[20:44] server47.place7:~# kubectl -n rook-ceph get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
csi-cephfsplugin-metrics ClusterIP 2a0a:e5c0:13:e2::760b <none> 8080/TCP,8081/TCP 82m
csi-rbdplugin-metrics ClusterIP 2a0a:e5c0:13:e2::482d <none> 8080/TCP,8081/TCP 82m
rook-ceph-mgr ClusterIP 2a0a:e5c0:13:e2::6ab9 <none> 9283/TCP 77m
rook-ceph-mgr-dashboard ClusterIP 2a0a:e5c0:13:e2::5a14 <none> 7000/TCP 77m
rook-ceph-mon-a ClusterIP 2a0a:e5c0:13:e2::c39e <none> 6789/TCP,3300/TCP 83m
rook-ceph-mon-b ClusterIP 2a0a:e5c0:13:e2::732a <none> 6789/TCP,3300/TCP 81m
rook-ceph-mon-d ClusterIP 2a0a:e5c0:13:e2::c658 <none> 6789/TCP,3300/TCP 76m
[20:44] server47.place7:~# curl http://[2a0a:e5c0:13:e2::5a14]:7000
curl: (7) Failed to connect to 2a0a:e5c0:13:e2::5a14 port 7000: Connection refused
[20:45] server47.place7:~#
</code></pre>
<p>The ceph mgr is perfectly reachable though:</p>
<pre><code>[20:45] server47.place7:~# curl -s http://[2a0a:e5c0:13:e2::6ab9]:9283/metrics | head
# HELP ceph_health_status Cluster health status
# TYPE ceph_health_status untyped
ceph_health_status 1.0
# HELP ceph_mon_quorum_status Monitors in quorum
# TYPE ceph_mon_quorum_status gauge
ceph_mon_quorum_status{ceph_daemon="mon.a"} 1.0
ceph_mon_quorum_status{ceph_daemon="mon.b"} 1.0
ceph_mon_quorum_status{ceph_daemon="mon.d"} 1.0
# HELP ceph_fs_metadata FS Metadata
</code></pre>
<h3>Status 2021-06-06</h3>
<p>Today is the first day of publishing the findings and this blog
article will lack quite some information. If you are curious and want
to know more that is not yet published, you can find me on Matrix
in the <strong>#hacking:ungleich.ch</strong> room.</p>
<h4>What works so far</h4>
<ul>
<li>Spawing pods IPv6 only</li>
<li>Spawing IPv6 only services works</li>
<li>BGP Peering and ECMP routes with the upstream infrastructure works</li>
</ul>
<p>Here's an output of the upstream bird process for the routes from k8s:</p>
<pre><code>bird> show route
Table master6:
2a0a:e5c0:13:e2::/108 unicast [place7-server1 23:45:21.589] * (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:3554 on eth0
unicast [place7-server3 2021-06-05] (100) [AS65534i]
via 2a0a:e5c0:13:0:224:81ff:fee0:db7a on eth0
unicast [place7-server4 2021-06-05] (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:3564 on eth0
unicast [place7-server2 2021-06-05] (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:38cc on eth0
2a0a:e5c0:13:e1:176b:eaa6:6d47:1c40/122 unicast [place7-server1 23:45:21.589] * (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:3554 on eth0
unicast [place7-server4 23:45:21.591] (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:3564 on eth0
unicast [place7-server3 23:45:21.591] (100) [AS65534i]
via 2a0a:e5c0:13:0:224:81ff:fee0:db7a on eth0
unicast [place7-server2 23:45:21.589] (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:38cc on eth0
2a0a:e5c0:13:e1:e0d1:d390:343e:8480/122 unicast [place7-server1 23:45:21.589] * (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:3554 on eth0
unicast [place7-server3 2021-06-05] (100) [AS65534i]
via 2a0a:e5c0:13:0:224:81ff:fee0:db7a on eth0
unicast [place7-server4 2021-06-05] (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:3564 on eth0
unicast [place7-server2 2021-06-05] (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:38cc on eth0
2a0a:e5c0:13::/48 unreachable [v6 2021-05-16] * (200)
2a0a:e5c0:13:e1:9b19:7142:bebb:4d80/122 unicast [place7-server1 23:45:21.589] * (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:3554 on eth0
unicast [place7-server3 2021-06-05] (100) [AS65534i]
via 2a0a:e5c0:13:0:224:81ff:fee0:db7a on eth0
unicast [place7-server4 2021-06-05] (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:3564 on eth0
unicast [place7-server2 2021-06-05] (100) [AS65534i]
via 2a0a:e5c0:13:0:225:b3ff:fe20:38cc on eth0
bird>
</code></pre>
<h4>What doesn't work</h4>
<ul>
<li>Rook does not format/spinup all disks</li>
<li>Deleting all rook components fails (<strong>kubectl delete -f cluster.yaml
hangs</strong> forever)</li>
<li>Spawning VMs fails with <strong>error: unable to recognize "vmi.yaml": no matches for kind "VirtualMachineInstance" in version "kubevirt.io/v1"</strong></li>
</ul>
</div>
<div class="inlinefooter">
<span class="pagedate">
Posted <span class="date">Sun Jun 6 18:11:50 2021</span>
</span>
<span class="tags">
Tags:
<a href="https://www.nico.schottelius.org//tags/ipv6/" rel="tag">ipv6</a>
<a href="https://www.nico.schottelius.org//tags/kubernetes/" rel="tag">kubernetes</a>
</span>
</div>
</div>
<div class="inlinepage">
<div class="inlineheader">
<span class="header">
<a href="https://www.nico.schottelius.org//blog/do-not-rely-on-systemd/">Do not make your software rely on systemd</a>
</span>
</div>
<div class="inlinecontent">
<h2>TL;DR</h2>
<pre><code>Do not make your software rely on systemd.
</code></pre>
<h2>Introduction</h2>
<p>There is some software out there that is leaning towards requiring
systemd. This will render that software unusable on non-systemd Linux
distributions. If you develop software, I urge you to not rely on
systemd features, because there are many situations in which you
cannot use systemd.</p>
<h2>The Open Source community</h2>
<p>While for many of you systemd might be something you use on a daily
basis, there is a big part of the Open Source community that does not
use systemd, for a variety of reasons. Without going into detail,
systemd does not exist in a variety of Linux distributions like
<a href="https://alpinelinux.org/">Alpine Linux</a>,
<a href="https://www.devuan.org/">Devuan</a> or <a href="https://openwrt.org/">OpenWrt</a>
nor on the BSDs.</p>
<p>However, even if it existed, people might choose to opt-out of the
systemd ecosystem because of compatibility, security, stability
or any other kind of reason.</p>
<h2>Why are we building Open Source Software?</h2>
<p>The Open Source / FOSS movement originated many years (decades!) ago
with the goal of creating usable systems. Systems that are not locked
in, systems that allow you to freely modify software and eventually:
support a wider audience, be more inclusive.</p>
<h2>Majority is not the right argument</h2>
<p>If you assume that everyone has a systemd environment, I need to raise
a flag here: you are not the majority. If you are using that line of
argument, I will answer with: the majority of systems is running
Microsoft Windows, so all software should be written only with Windows
in mind. And that is problematic, because you are fully dependent on a
single vendor with an ecosystem that one cannot change.</p>
<p>Now, you can argue that systemd is Open Source and it could be
modified. While in theory this is true, the systemd authors do have
strong opinions that conflict (details omitted here intentionally)
with others. In this regard, systemd is similar to a closed ecosystem,
because it does not make everyone benefit from it.</p>
<h2>Problematic direction</h2>
<p>Recently I see some software that assumes the existence of systemd by
default. Either by using it as a cgroupdriver or by relying on
systemctl. While <em>some</em> software can be patched, the <em>notion in the
documenation</em> inclines towards "systemd only support". And that is the
reason why I am writing this blog</p>
<h2>systemd is not for everyone</h2>
<p>You can argue for hours or days whether feature x of systemd is good
or not. However it is a fact that systemd is not for everyone and it
is not suitable for every situation that Open Source software usually
operates in.</p>
<pre><code>Forcing systemd on users does not work (and is not even realistic).
</code></pre>
<p>Even if you had the means to try forcing people into systemd, it
simply does not work, because it is not suited for running on embedded
systems for instance.</p>
<h2>Call for action</h2>
<p>I am aware that generations of hackers have changed, that Open Source
has become much more accessible and that not everyone using Open
Source is a hacker anymore. That is not a problem, but actually a
significant achievement of the Open Source community. But it also
means that we have more diversity and a broader audience.</p>
<p>However we shall not forget our roots and why Open Source Software
actually works: it is because we work together and respect different
approaches and we try to be inclusive. In terms of systems, as well as
humans. That said, I really urge you:</p>
<pre><code>Respect diversity, do not rely on systemd in your software.
</code></pre>
</div>
<div class="inlinefooter">
<span class="pagedate">
Posted <span class="date">Sun May 23 11:36:38 2021</span>
</span>
<span class="tags">
Tags:
<a href="https://www.nico.schottelius.org//tags/foss/" rel="tag">foss</a>
<a href="https://www.nico.schottelius.org//tags/systemd/" rel="tag">systemd</a>
<a href="https://www.nico.schottelius.org//tags/unix/" rel="tag">unix</a>
</span>
</div>
</div>
<div class="inlinepage">
<div class="inlineheader">
<span class="header">
<a href="https://www.nico.schottelius.org//blog/nodejs-and-ipv6-only-networks/">The Nodejs in IPv6 only networks problem</a>
</span>
</div>
<div class="inlinecontent">
<p>For some years I have been seeing problems of nodejs based
applications that do not work in IPv6 only networks.
More recently, <a href="https://twitter.com/NicoSchottelius/status/1352243030368116739">I again found a situation in which a nodejs based
application does not even
install</a>,
if you try to install it in an IPv6 only network.</p>
<p>As the situation is not just straight forward, I started to collect
information about it on this website.</p>
<h2>The starting point</h2>
<p>I wanted to install
<a href="https://github.com/ether/etherpad-lite">etherpad-lite</a> and it failed
with the following error:</p>
<pre><code>174 error request to https://registry.npmjs.org/express-session/-/express-session-1.17.1.tgz failed, reason: connect EHOSTUNREACH 104.16.25.35:443
</code></pre>
<p>The message <strong>connect EHOSTUNREACH 104.16.25.35:443</strong> already cleary
points to the problem: npm is trying to connect via IPv4 on an IPv6
only VM. This cleary cannot work.</p>
<h2>A bug in NPM?</h2>
<p>My first suspicion was that it <a href="https://github.com/npm/cli/issues/2519">must be a bug in
npm</a>. But on Twitter
<a href="https://twitter.com/A1bi/status/1352574621594300416">I was told that npm should work in IPv6 only
networks</a>. That's
strange.
However it turns out that <a href="https://github.com/npm/cli/issues/348#issuecomment-751143040">somebody else had this problem
before</a>
and it seems to be specific to using npm on <a href="https://alpinelinux.org/">Alpine
Linux</a>.</p>
<h2>A bug in Alpine Linux?</h2>
<p>Alpine Linux is currently the main distribution that I use. Not
because of the <a href="https://musl.libc.org/">small libc called musl</a>, but
because the whole system works straight forward. Correct. And easy to
use. But what does that have to do with etherpad-lite failing to
install in an IPv6 only network?</p>
<p>It turns out that there is
<a href="https://github.com/libuv/libuv/issues/2225">a difference between musl and glibc in the default behaviour of
getaddrinfo()</a>, which is
used to retrieve DNS results from the operating system.</p>
<h2>A bug in musl libc?</h2>
<p>I got in touch with the developers of musl and the statement is rather
easy: musl <a href="https://pubs.opengroup.org/onlinepubs/9699919799/functions/getaddrinfo.html">is behaving according to the
spec</a>
and the caller, in this
context nodejs, cannot just use the <strong>first</strong> result, but has to
potentially try <strong>all results</strong>.</p>
<h2>A DNS or a design bug?</h2>
<p>And at this stage the problem gets tricky. Let's revise again what I
wanted to do and why we are so deep into the rabbit hole.</p>
<p>I wanted to install etherpad-lite, which uses resources from
registry.npmjs.org. So npm wants to connect via HTTPS to
registry.npmjs.org and download a file. To achieve this, npm has to
find out which IP address registry.npmjs.org has. And for this it is
doing a DNS lookup.</p>
<p>So far, so good. Now the trouble begins:</p>
<pre><code>A DNS lookup can contain 0, 1 or many answers.
</code></pre>
<p><strong>And in case of the libc call getaddrinfo, the result is a list of IPv6
and IPv4 addresses, potentially 0 to many of each.</strong></p>
<p>So an application that "just wants to connect somewhere", cannot just
take the first result.</p>
<h2>A bug in nodejs?</h2>
<p>The assumption at this point is that nodejs only takes the first
result from DNS and tries to connect to it. However so far I have not
been able to spot the exact source code location to support that
claim.</p>
<p>Stay tuned...</p>
</div>
<div class="inlinefooter">
<span class="pagedate">
Posted <span class="date">Sat Jan 23 09:48:31 2021</span>
</span>
<span class="tags">
Tags:
<a href="https://www.nico.schottelius.org//tags/ipv6/" rel="tag">ipv6</a>
<span class="selflink">net</span>
<a href="https://www.nico.schottelius.org//tags/nodejs/" rel="tag">nodejs</a>
</span>
</div>
</div>
<div class="inlinepage">
<div class="inlineheader">
<span class="header">
<a href="https://www.nico.schottelius.org//blog/my-notebook-firewall-36c3/">My notebook firewall for the 36c3</a>
</span>
</div>
<div class="inlinecontent">
<p>It's time for the
<a href="https://events.ccc.de/congress/2019/wiki/index.php/Main_Page">36c3</a>
and to verify that some things are in place where they should be.</p>
<p>As some of you might know, I am using
<a href="https://ipv6onlyhosting.com">IPv6 extensively</a> to provide
services anywhere on anything, so you will see quite some IPv6 related
rules in my configuration.</p>
<p>This post should serve two purpose:</p>
<ul>
<li>Inspire others to verify their network settings prior to the
congress</li>
<li>Get feedback from anyone spotting a huge mistake in my config :-)</li>
</ul>
<h2>The firewall rules</h2>
<p>I am using
<a href="https://ungleich.ch/en-us/cms/blog/2018/09/11/introduction-to-nftables/">nftables</a>
on my notebook and the full ruleset is shown below.</p>
<pre><code>table ip6 filter {
chain input {
type filter hook input priority 0;
policy drop;
iif lo accept
ct state established,related accept
icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-request, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept
tcp dport { 22, 80, 443 } accept
}
chain forward {
type filter hook forward priority 0;
policy drop;
ct state established,related accept
ip6 daddr 2a0a:e5c1:137:b00::/64 jump container
ip6 daddr 2a0a:e5c1:137:cafe::/64 jump container
}
chain container {
icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-request, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept
tcp dport { 22, 80, 443 } accept
drop
}
chain output {
type filter hook output priority 0;
policy accept;
}
}
table ip filter {
chain input {
type filter hook input priority 0;
policy drop;
iif lo accept
ct state established,related accept
tcp dport { 22 } accept
tcp dport { 51820 } accept
}
chain forward {
type filter hook forward priority 0;
policy drop;
}
chain output {
type filter hook output priority 0;
policy accept;
}
}
</code></pre>
<h2>The firewall explained: IPv6</h2>
<p>Let's have a look at the IPv6 part first. In nftables we can freely
define chains, what is important is is the <strong>hook</strong> that we use in it.</p>
<pre><code> chain input {
type filter hook input priority 0;
...
</code></pre>
<p>The policy has the same meaning as in iptables and basically specifies
what to do with unmatched packets.</p>
<p>IPv6 uses quite some ICMP6 messages to control and also to establish
communication in the first place, so the list for accepting is quite
long.</p>
<pre><code> icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-request, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept
</code></pre>
<p>As we are dealing with traffic that comes to my notebook ("hook
input"), I want to allow any incoming packets that belong to one of
the connections that I initiated:</p>
<pre><code> ct state established,related accept
</code></pre>
<p>And finally, I allow port 22, to be able to ssh into my notebook,
port 80 to get letsencrypt certificates and port 443 for serving
https. When I am online, my notebook is reachable at
<a href="https://nico.plays.ipv6.games">nico.plays.ipv6.games</a>, so I need the
web ports to be open.</p>
<p>As I run quite some test on my notebook with docker and lxc, I created
a /64 IPv6 network for each of them. When matching on those specific
networks, I jump into a chain that allows specific configurations for
containers:</p>
<pre><code> ip6 daddr 2a0a:e5c1:137:b00::/64 jump container
ip6 daddr 2a0a:e5c1:137:cafe::/64 jump container
</code></pre>
<p>The <strong>chain container</strong> consists at the moment of the same rule set as
the input chain, however this changes occasionally when testing
applications in containers.</p>
<p>And for the output chain, I trust that the traffic my notebook emits
is what I wanted it to emit (but also allows malware to send out data,
if I had some installed).</p>
<h2>The firewall explained: IPv4</h2>
<p>In the IPv4 irea ("<strong>table ip filter</strong>*) things are quite similar with
some small differences:</p>
<ul>
<li>I don't provides services on IPv4 besides ssh and wireguard (port 22
and 51820)</li>
<li>There is nothing to be forwarded for IPv4, all containers use IPv6</li>
<li>Same logic for the output as in IPv6</li>
</ul>
<h2>Safe or not safe?</h2>
<p>Whether this ruleset is safe or not depends a bit on your degree of
paranoia. I allow access to port 443 on which an nginx runs which then
again proxies to a self written flask application, which
might-or-might-not be safe.</p>
<p>Some people argue to limit outgoing traffic and while this is
certainly possible (whitelist ports?), often this does is rendered
useless, as any command and control server can be reached on port 80
and you probably don't want to block outgoing port 80 traffic.</p>
<p>If you have any comments about it, I'm interested in hearing your
feedback on <a href="http://chat.with.ungleich.ch">the ungleich chat</a>,
<a href="https://twitter.com/NicoSchottelius">twitter</a> or IRC (telmich).</p>
<h2>Update 2019-12-24</h2>
<p>I forgot to allow loopback traffic in the original version, which
breaks some local networking.</p>
</div>
<div class="inlinefooter">
<span class="pagedate">
Posted <span class="date">Mon Dec 23 18:23:43 2019</span>
</span>
<span class="tags">
Tags:
<a href="https://www.nico.schottelius.org//tags/ccc/" rel="tag">ccc</a>
<a href="https://www.nico.schottelius.org//tags/firewall/" rel="tag">firewall</a>
<a href="https://www.nico.schottelius.org//tags/ipv6/" rel="tag">ipv6</a>
<a href="https://www.nico.schottelius.org//tags/nftables/" rel="tag">nftables</a>
</span>
</div>
</div>
<div class="inlinepage">
<div class="inlineheader">
<span class="header">
<a href="https://www.nico.schottelius.org//blog/support-fiascos/">List of support fiascos</a>
</span>
</div>
<div class="inlinecontent">
<h2>Introduction</h2>
<p>Dealing with a lot of hardware (in the sense of moving/maintaining)
involves some support from vendors. Sometimes vendors are doing a
particular bad job. This blog page is dedicated to vendor screwups and
document real stories.</p>
<h2>The support for a Dell XPS 13 2-in-1 (2019-12-19 - 2020-04-06)</h2>
<p>10 days after the repair the space bar inhibts the same behaviour and
hangs / does not produce a sign. I cannot open a service request on
the website, as the previous request is still open. Additionally now
the rubber from the screen falls off. The overall impression of the
device is like a cheap 50$ notebook that you buy on shady electronics
market, significantly below standard of regular notebooks.</p>
<p>Again a list of "mysterious" calls can be seen in the Dell website,
but nobody ever responds on the Dell own website. Meanwhile the
support on Twitter tells me to take pictures and a video of the space
on Twitter. After I sent all of it, I am asked to reboot the system
and try if the space bar still doesn't work in the bootloader.</p>
<p>Updates from this particular Dell fiasco:</p>
<ul>
<li>2019-12-20: The exchange is confirmed., it should be done in 2-3
work days</li>
<li>2019-12-28: The necessary part (unclear which) is not available, the
exchange is postponed to 2020-01-12.</li>
<li>2019-12-31: I get an offer to the the system replaced by a
refurbished system. That does not make any sense as the device is
almost brand new and a refurbished one has been returned (probably
for a good reason).</li>
<li>2020-01-03: I request a statement to how Dell understands "Next
business day" support, as the problem has been open for
weeks. Again.</li>
<li>2020-01-04: another key ("d") now also gets stuck. It seems the
keyboard was never tested to be used in reality to me.</li>
<li>2020-01-06: Dell informs me that the repair is delayed until
2020-01-28.</li>
<li>2020-01-07: I inform Dell that their behaviour is breaking the
contract and that I want to have a refund, a replacement or a repair
by end of week. This is still significantly longer than "next
business day".</li>
<li>2020-01-08: Dell re-informs me that they can exchange with a
refurbished device, which I decline before.</li>
<li>2020-01-10: Dell re-informs me that the repair is delayed until
2020-01-28</li>
<li>2020-01-16: Dell informs me that the repair is delayed until
2020-02-24. This makes it an <strong>at least 2 months repair time</strong>.</li>
<li>2020-01-16: I re-inform Dell that they can refund and pickup the
device and that I expect it to be done by 2020-01-24</li>
<li>2020-01-21: Instead of replacing the notebook with a used notebook,
Dell today suggest to replace it with a new one. I accept the
proposal and now wait for a replacement device.</li>
<li>2020-01-22: I am asked to take a picture of the notebook with the
serial tag and to provide the following information: 1. Service
request number, 2. Registered Owner's name, 3. Current date and time
and 4. Current Location. However the device does not have a sticker
and all information is already present at Dell.</li>
<li>2020-01-28: While the replacement notebook should be on the way
(according to the tracking it isn't - but then again nothing in the
support system of Dell is up-to-date), the current notebook is
slowly dying: The screen has become wobbly-wobbly and makes funny
noise when opening, closing or even moving the notebook while the
display is open. If this notebook was about 7 years old, I'd say
it's a typical worn-off problem. However it is about 3 months old
now. My hope: it's only this particular model, it's not an issue of
the whole XPS 13 series. My fear: it actually looks to be designed
rather fragile, compared to a thinkpad. Also note: more random keys
get stuck half the way and make it impossible to type text
correctly, because a key may-or-may not function on the first hit.</li>
<li>2020-01-31: The date for the replacement is set to be 2020-02-14.</li>
<li>2020-01-31: The notebook begins to further fall apart: the
keyboard/lower part slowly disconnects from the screen on the right
side. This might also explain the wobbly behaviour. Furthermore the
notebook freezes now with some disk I/O. The latter could be a
software bug, the former could be a mis-repair (screw lose?). So
clearly, if you need to rely on a computer, neither the XPS nor Dell
is something to choose.</li>
<li>2020-02-02: The audio jack is now loose and headphones only get
partial connectivity. This is probably related to the right part of
the screen falling off.</li>
<li>2020-02-03: Can't believe it, but now the touchpad also gets
stuck. It is about 0.3mm down on the left side, making it impossible
to issue a left click.</li>
<li>2020-02-11: The replacement notebook arrived.</li>
<li>2020-02-16: The replacement notebook gets hand-burning hot at the
bottom. Problem reported via Twitter.</li>
<li>2020-02-17: Dell says the hot temperatures are normal, even though I
advise Dell that it has potential to burn my skin.</li>
<li>2020-02-19: On the replacement notebook the "c" key gets stuck from
time to time.</li>
<li>2020-02-25: The power supply of the replacement notebook is
broken. It stops charging after some time, the led on the charger
turns off. It works again, if it is disconnected from the power
outlet for some hours.</li>
<li>2020-02-26: Running diagnosistics confirms that the charger is
broken. This amount of time spent for debugging this notebook series
is beyond ridiculous. Dell so far refuses a full refund even though
they clearly ship unusable hardware.</li>
<li>2020-02-26: The "h" and "u" keys are now als exhibiting partial
stuck behaviour.</li>
<li>2020-02-26: The system gets very slow (mouse pointer lagging
slow). I reboot. The system gets stuck in the Dell logo
state. Turning it off hard. Turning it on again. It stays stuck with
the Dell logo.</li>
<li>2020-04-20: The system has been sent back and refunded.</li>
</ul>
<p>Summary: <strong>Dell is fully incapable of repairing a device</strong> and
<strong>upholding a contract</strong>. I assumed I bought a notebook with next business
day service. What I got is a computer which has
frequent hardware failures and no support within any sensible amount
of time.</p>
<h2>The support for a Dell XPS 13 2-in-1 (2019-11-16 - 2019-12-09)</h2>
<p>I ordered this particular notebook on 2019-09-19 and it arrived around
2019-09-27. So far so good. However shortly after starting to use it,
I managed to get a somewhat-stuck key (the "p key"), which
more-or-less randomly hangs/does not produce a character. As some of
my passwords contain a p, this led to very frustrating login failures.</p>
<p>Having a stuck key like this after less than 2 months of use is really
not showing good quality, so I reported this issue with Dell on
2019-11-16. With the device I bought the so called
"Complete Care Service" and "Premium Support". In theory reachable
24x7.</p>
<p>In practice, after opening the support request on 2019-11-16, I did
not receive a real reply on the following Monday. So I reached out
again and got a reply on Tuesday, already being late if it was only
next business day (NBD) support.</p>
<p>After reporting that issue additionally the rubber below that keeps
the notebook stable on the table began to detach itself from the
notebook. Only another minor problem, but clearly nothing to expect
from a quality device.</p>
<p>After a long forth-and-back via Twitter DM about the device heat and
whether the p key still occasionally is stuck (yes!) there was
eventually a replacement scheduled for the 26th of November.</p>
<p>However - you can guess it - nobody showed up. The log at Dell says
that somebody tried to reach me, however there was no missed calls on
any of my numbers. And no email or no direct message. So even if
somebody tried to call, they did not bother sending an email.</p>
<p>Until I reached out again, after I got a message that the phone number
is forwarded. It continues "funny" like that: on 26th there was no
further communication from Dell. No message, no call, no email.</p>
<p>However when logging in to the Dell portal, Dell rescheduled the
appointment for Thursday, 28th, 0800.</p>
<p>Independently on how the story evolves from here, the amount of time
spent into the support, waiting, replanning locations, etc. is already
exceeding the worth of the product. So I can clearly disrecommend
buying this device/support combination, if you want to professionally
work with it.</p>
<p>And it continued on 2019-11-27 at around 2230 in the evening when the
Dell technician called me by accident. "I just wanted to save your
number". Then asking me on the phone where Glarus is in detail. I
guess Dell doesn't have a navigation software...
Then eventually telling me that he
might or might not come tomorrow (the 28th), but he will certainly
contact me in the morning.</p>
<p>2019-11-28, around 1400. No call, no message, no nothing. Reaching
out via Twitter DM. Again. My phone number is confirmed, I get as an
answer. So yet another day where Dell scheduled the support (not me),
does not appear, does not reach out nor gives any suitable answer.</p>
<p>2019-11-29. The technician just wrote an email that he comes Monday
1200. That is yet another week after Dell originally announced the
repair and yet another time that Dell unilaterally decides on a new
repair date without even trying to confirm the date.</p>
<p>But it gets worse: later in the evening I received a twitter message
that the case is closed. Without ever having seen a technician,
without having gotten it repaired. And a bit later it gets confirmed
on the "service request" page of Dell.</p>
<p>So in a summary:</p>
<ul>
<li>Waited for nothing to happen for two weeks</li>
<li>Multiple support appointments scheduled without ever showing up</li>
<li>Claims of trying to reach me by phone without any missed call (and
other calls that I received the same day)</li>
<li>Wasted many hours in communication</li>
<li>No support executed at all</li>
<li>Support cased closed without doing anything</li>
</ul>
<p>The story continues: 2019-12-04. I got a message saying that the
techincian is coming tomorrow. Again without confirmation from my side
and with less than 24h to react.</p>
<p>2019-12-05: because so far nobody ever showed up, I send a message via
Twitter to @DellHilft, asking about the technician. Answer is that I
should wait. The third day. I also check the support center, which
claims to have called me at 3 am GMT. 3 am. Seriously, which company
does that?</p>
<p><a href="https://www.nico.schottelius.org//blog/support-fiascos/dell-3am-call.png"><img src="https://www.nico.schottelius.org//blog/support-fiascos/300x-dell-3am-call.png" width="300" height="60" class="img" /></a></p>
<p>GMT is actually behind Swiss time, so the actual call happend around 2am.
Besides all of that, I obviously did not receive a call.</p>
<p>BUT things can get worse with Dell. Since the 5th, my messages in the
dell support website don't show up anymore. It basically looks as follows:</p>
<pre><code>Dell: we are calling you
Me: I don't see a call, this is my number:
Dell: we are calling you
Me: Hello? Did you see my message?
Dell: We will just silently drop your messages now
</code></pre>
<p>Since 2019-12-05 the "." key is also stuck from time to
time. Basically the notebook is falling apart within 2 months of use
and the only thing you get is false claims of a technician showing up.</p>
<p>2019-12-06: the technician is calling around 0830. He starts by asking
where I live and then tells me it is far away and he doesn't have time
for me. He has many other customers. He also sounds very drunk.
He tells me he might come on Monday, but cannot tell a time yet.</p>
<p>Also on the same day: I get a note from Dell telling me the technician
could not reach me. Not sure how many WTFs can be produced within one
day, but Dell is really pushing it to the limits.</p>
<p>2018-12-09: the technician called at 0900, arrived by 1230 and fixed
the notebook around 1500.</p>
<ul>
<li>Roughly 4 weeks waiting time</li>
<li>Roughly 80+ messages exchanged with Dell</li>
<li>4 working days invested to get it fixed</li>
</ul>
</div>
<div class="inlinefooter">
<span class="pagedate">
Posted <span class="date">Tue Nov 26 17:41:26 2019</span>
</span>
<span class="tags">
Tags:
<a href="https://www.nico.schottelius.org//tags/hardware/" rel="tag">hardware</a>
<a href="https://www.nico.schottelius.org//tags/support/" rel="tag">support</a>
</span>
</div>
</div>
<div class="inlinepage">
<div class="inlineheader">
<span class="header">
<a href="https://www.nico.schottelius.org//blog/alpine-linux-on-the-hp-x360-1040-g5-notebook/">Alpine Linux on the HP X360 1040 G5</a>
</span>
</div>
<div class="inlinecontent">
<h2>Overview</h2>
<p>Due to RAM limitations in most notebooks (16G maximum) I have recently
switched to the HP X360 1040 G5, more or less the 14" HP equivalent of
the Lenovo X1 Carbon. Some tech specs for the geeks under us:</p>
<ul>
<li>Resolution 3840x2160</li>
<li>1 TB SSD / NVMe</li>
<li>32GB RAM</li>
</ul>
<p>This article is work in progress, currently more to be seen as a todo
list for myself.</p>
<h2>Alpine</h2>
<p>My backup notebooks are currently running Arch Linux and Devuan. As I
find Alpine an interesting project (it resembles most of what I think
how Linux should be), I thought about giving it a try.</p>
<p>Some things that are a bit special in alpine Linux:</p>
<ul>
<li>Does not come with shadow by default</li>
<li>Uses musl libc instead of glibc (yeah!)</li>
</ul>
<p>Besides that, some things that are instant benefits of Alpine:</p>
<ul>
<li>easy to use package manager</li>
<li>easy to write package format</li>
<li>VERY fast package installations (because they are fast)</li>
<li>The sound is GREAT (especially compared to the X1 Carbon that does
not really have speakers)</li>
</ul>
<h2>What is working on alpine + X360 1040</h2>
<p>Almost everything. C'mon, it's 2019 and as long as xorg + i3 is
running, what is there more that you want?
Some things to emphasise of either:</p>
<ul>
<li>The keyboard is quite nice (actually nicer then Gen6 X1 Carbon)</li>
<li>You can run startx via ssh and there is no stupid config that stops you from it!</li>
<li>Suspend works even with playing sound, just using pm-suspend + acpid</li>
<li>beauty!</li>
</ul>
<h2>What is currently not working on alpine + X360 1040</h2>
<p>There are a few
minor hiccups that I still need to solve in the next days:</p>
<ul>
<li>create a package for mu4e 1.2 (currently installed in /usr/local)
<ul>
<li>needs fix for /usr/bin/sh reference</li>
<li>PR created by eu at https://github.com/alpinelinux/aports/pull/7881/files</li>
<li>local install: works!</li>
</ul>
</li>
<li>-create a package for magit-
<ul>
<li>M-x package-install magit</li>
</ul>
</li>
<li>create a package for vym</li>
<li>create a package for openconnect</li>
<li>create a package for kismet</li>
<li>checkout why the shotwell package is broken</li>
<li>checkout why the firefox package is broken</li>
<li>hotkeys don't send the right key events => might be a kernel issue</li>
<li>xrandr does not show screen connected via usb-c (have to test other outputs)</li>
<li>automate lid handling in cdist
<ul>
<li>Currently just created /etc/acpi/LID/0000080 with pm-suspend in it => works</li>
</ul>
</li>
<li>The device has a very high frequency sound that varies over time
<ul>
<li>Seems to be unrelated to power plugged in or out</li>
<li>Seems to be related to the fan: fan on => no audible high frequency sound</li>
<li>The sound is louder than music played at "regular" volume</li>
<li>The sounds is directly related to screen brigthness: 100% => no sound</li>
<li>The lower the brightness, the stronger the sound</li>
</ul>
</li>
</ul>
<h2>What has been fixed</h2>
<ul>
<li>xbacklight
<ul>
<li>Need to load / install the intel video driver (modesetting does not work atm)</li>
</ul>
</li>
</ul>
</div>
<div class="inlinefooter">
<span class="pagedate">
Posted <span class="date">Tue May 14 19:10:49 2019</span>
</span>
<span class="tags">
Tags:
<a href="https://www.nico.schottelius.org//tags/linux/" rel="tag">linux</a>
<a href="https://www.nico.schottelius.org//tags/notebook/" rel="tag">notebook</a>
<a href="https://www.nico.schottelius.org//tags/unix/" rel="tag">unix</a>
</span>
</div>
</div>
<div class="inlinepage">
<div class="inlineheader">
<span class="header">
<a href="https://www.nico.schottelius.org//blog/cdist-4.11.1-released/">Cdist 4.11.1 released</a>
</span>
</div>
<div class="inlinecontent">
<p>Here's a short overview about the changes found in version 4.11.1:</p>
<pre><code>* Core: Improve explorer error reporting (Darko Poljak)
* Type __directory: explorer stat: add support for Solaris (Ander Punnar)
* Type __file: explorer stat: add support for Solaris (Ander Punnar)
* Type __ssh_authorized_keys: Remove legacy code (Ander Punnar)
* Explorer disks: Bugfix: do not break config in case of unsupported OS
which was introduced in 4.11.0, print message to stderr and empty disk list
to stdout instead (Darko Poljak)
</code></pre>
<p>For more information visit the <a href="https://www.nico.schottelius.org//software/cdist/">cdist homepage</a>.</p>
</div>
<div class="inlinefooter">
<span class="pagedate">
Posted <span class="date">Mon Apr 22 21:14:37 2019</span>
</span>
<span class="tags">
Tags:
<a href="https://www.nico.schottelius.org//tags/cdist/" rel="tag">cdist</a>
<a href="https://www.nico.schottelius.org//tags/config/" rel="tag">config</a>
<a href="https://www.nico.schottelius.org//tags/unix/" rel="tag">unix</a>
</span>
</div>
</div>
<div class="inlinepage">
<div class="inlineheader">
<span class="header">
<a href="https://www.nico.schottelius.org//blog/cdist-4.11.0-released/">Cdist 4.11.0 released</a>
</span>
</div>
<div class="inlinecontent">
<p>Here's a short overview about the changes found in version 4.11.0:</p>
<pre><code>* Type __package: Add __package_apk support (Nico Schottelius)
* Type __directory: Add alpine support (Nico Schottelius)
* Type __file: Add alpine support (Nico Schottelius)
* Type __hostname: Add alpine support (Nico Schottelius)
* Type __locale: Add alpine support (Nico Schottelius)
* Type __start_on_boot: Add alpine support (Nico Schottelius)
* Type __timezone: Add alpine support (Nico Schottelius)
* Type __start_on_boot: gentoo: check all runlevels in explorer (Nico Schottelius)
* New type: __package_apk (Nico Schottelius)
* Type __acl: Add support for ACL mask (Dimitrios Apostolou)
* Core: Fix circular dependency for CDIST_ORDER_DEPENDENCY (Darko Poljak)
* Type __acl: Improve the type (Ander Punnar)
* Explorer interfaces: Simplify code, be more compatible (Ander Punnar)
* Explorer disks: Remove assumable default/fallback, for now explicitly support only Linux and BSDs (Ander Punnar, Darko Poljak)
</code></pre>
<p>For more information visit the <a href="https://www.nico.schottelius.org//software/cdist/">cdist homepage</a>.</p>
</div>
<div class="inlinefooter">
<span class="pagedate">
Posted <span class="date">Sat Apr 20 17:16:55 2019</span>
</span>
<span class="tags">
Tags:
<a href="https://www.nico.schottelius.org//tags/cdist/" rel="tag">cdist</a>
<a href="https://www.nico.schottelius.org//tags/config/" rel="tag">config</a>
<a href="https://www.nico.schottelius.org//tags/unix/" rel="tag">unix</a>
</span>
</div>
</div>
<div class="inlinepage">
<div class="inlineheader">
<span class="header">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.11-released/">Cdist 4.10.11 released</a>
</span>
</div>
<div class="inlinecontent">
<p>Here's a short overview about the changes found in version 4.10.11:</p>
<pre><code>* Core: Fix broken quiet mode (Darko Poljak)
* Build: Add version.py into generated raw source archive (Darko Poljak)
* Explorer disks: Fix detecting disks, fix/add support for BSDs (Ander Punnar)
* Type __file: Fix stat explorer for BSDs (Ander Punnar)
* Type __directory: Fix stat explorer for BSDs (Ander Punnar)
</code></pre>
<p>For more information visit the <a href="https://www.nico.schottelius.org//software/cdist/">cdist homepage</a>.</p>
</div>
<div class="inlinefooter">
<span class="pagedate">
Posted <span class="date">Sat Apr 13 19:57:39 2019</span>
</span>
<span class="tags">
Tags:
<a href="https://www.nico.schottelius.org//tags/cdist/" rel="tag">cdist</a>
<a href="https://www.nico.schottelius.org//tags/config/" rel="tag">config</a>
<a href="https://www.nico.schottelius.org//tags/unix/" rel="tag">unix</a>
</span>
</div>
</div>
<div class="inlinepage">
<div class="inlineheader">
<span class="header">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.10-released/">Cdist 4.10.10 released</a>
</span>
</div>
<div class="inlinecontent">
<p>Here's a short overview about the changes found in version 4.10.10:</p>
<pre><code>* New types: __ufw and __ufw_rule (Mark Polyakov)
* Type __link: Add messaging (Ander Punnar)
* Debugging: Rename debug-dump.sh to cdist-dump (Darko Poljak)
* Documentation: Add cdist-dump man page (Darko Poljak)
</code></pre>
<p>For more information visit the <a href="https://www.nico.schottelius.org//software/cdist/">cdist homepage</a>.</p>
</div>
<div class="inlinefooter">
<span class="pagedate">
Posted <span class="date">Thu Apr 11 14:49:55 2019</span>
</span>
<span class="tags">
Tags:
<a href="https://www.nico.schottelius.org//tags/cdist/" rel="tag">cdist</a>
<a href="https://www.nico.schottelius.org//tags/config/" rel="tag">config</a>
<a href="https://www.nico.schottelius.org//tags/unix/" rel="tag">unix</a>
</span>
</div>
</div>
Blog archivehttps://www.nico.schottelius.org//blog-archive/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<div class="feedlink">
<a class="feedbutton" type="application/rss+xml" rel="alternate" title="Nico Schottelius (RSS feed)" href="https://www.nico.schottelius.org//blog-archive/index.rss">RSS</a>
<a class="feedbutton" type="application/atom+xml" rel="alternate" title="Nico Schottelius (Atom feed)" href="https://www.nico.schottelius.org//blog-archive/index.atom">Atom</a>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/k8s-ipv6-only-cluster/">Building an IPv6 only kubernetes cluster</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun Jun 6 18:11:50 2021</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/do-not-rely-on-systemd/">Do not make your software rely on systemd</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun May 23 11:36:38 2021</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/nodejs-and-ipv6-only-networks/">The Nodejs in IPv6 only networks problem</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Jan 23 09:48:31 2021</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/my-notebook-firewall-36c3/">My notebook firewall for the 36c3</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Dec 23 18:23:43 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/support-fiascos/">List of support fiascos</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Nov 26 17:41:26 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/alpine-linux-on-the-hp-x360-1040-g5-notebook/">Alpine Linux on the HP X360 1040 G5</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue May 14 19:10:49 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.11.1-released/">Cdist 4.11.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Apr 22 21:14:37 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.11.0-released/">Cdist 4.11.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Apr 20 17:16:55 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.11-released/">Cdist 4.10.11 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Apr 13 19:57:39 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.10-released/">Cdist 4.10.10 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Apr 11 14:49:55 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.9-released/">Cdist 4.10.9 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Apr 9 22:49:38 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.8-released/">Cdist 4.10.8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Apr 6 10:55:05 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.7-released/">Cdist 4.10.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Mar 30 19:14:04 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.6-released/">Cdist 4.10.6 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Feb 15 20:48:09 2019</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.5-released/">Cdist 4.10.5 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Dec 21 22:26:35 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.4-released/">Cdist 4.10.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Nov 3 19:26:23 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.3-released/">Cdist 4.10.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun Sep 23 12:07:12 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.2-released/">Cdist 4.10.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Sep 6 07:13:12 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.1-released/">Cdist 4.10.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Jun 21 08:39:10 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.10.0-released/">Cdist 4.10.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun Jun 17 11:03:59 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.9.1-released/">Cdist 4.9.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed May 30 19:48:45 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.9.0-released/">Cdist 4.9.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu May 17 16:17:38 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.8.4-released/">Cdist 4.8.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Apr 20 14:35:11 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/linux-users-light-on-horizon/">Linux, UNIX and FOSS users: there is light on the horizon</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Mar 30 16:29:12 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.8.3-released/">Cdist 4.8.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Mar 16 19:21:41 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.8.2-released/">Cdist 4.8.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Mar 10 23:54:12 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.8.1-released/">Cdist 4.8.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Mar 9 17:30:38 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.8.0-released/">Cdist 4.8.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed Feb 14 20:14:38 2018</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.7.3-released/">Cdist 4.7.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Nov 10 21:23:11 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.7.2-released/">Cdist 4.7.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun Oct 22 16:21:26 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.7.1-released/">Cdist 4.7.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sun Oct 1 11:16:00 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.7.0-released/">Cdist 4.7.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Sep 22 21:26:31 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.6.1-released/">Cdist 4.6.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed Aug 30 22:44:28 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.6.0-released/">Cdist 4.6.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Aug 25 11:06:07 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.5.0-released/">Cdist 4.5.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Jul 20 20:51:56 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.4.4-released/">Cdist 4.4.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Jun 16 12:52:22 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.4.3-released/">Cdist 4.4.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Jun 13 22:18:44 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.4.2-released/">Cdist 4.4.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed Mar 8 19:37:50 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ctt-1.1-released/">ctt 1.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Feb 16 08:30:20 2017</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.4.1-released/">Cdist 4.4.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Dec 17 09:47:36 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.4.0-released/">Cdist 4.4.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Dec 3 09:54:17 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/linux-on-macbook-pro-2016/">How to install Linux on a Macbook Pro 2016</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed Nov 9 14:49:21 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.3.2-released/">Cdist 4.3.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Oct 13 18:53:05 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.3.1-released/">Cdist 4.3.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Aug 22 18:51:24 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.3.0-released/">Cdist 4.3.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Aug 19 21:27:51 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.2.2-released/">Cdist 4.2.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Jul 26 07:52:17 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.2.1-released/">Cdist 4.2.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Jul 18 20:36:40 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.2.0-released/">Cdist 4.2.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Jul 16 08:41:17 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/added-fgallery-to-static-gallery-generators/">Added fgallery to the list of static image gallery generators</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Jul 4 11:13:03 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.1.0-released/">Cdist 4.1.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri May 27 07:28:12 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.0.0-released/">Cdist 4.0.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed May 4 12:29:47 2016</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/change-colour-for-ls-to-work-with-bright-terminal-background/">How to change the colour of ls to work with bright terminal backgrounds</a><br />
<span class="archivepagedate">
Posted <span class="date">Mon Jun 1 20:24:23 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.13-released/">Cdist 3.1.13 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat May 16 17:54:59 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.12-released/">Cdist 3.1.12 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Thu Mar 19 10:23:50 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/glusterfs-foss-development-is-awesome/">Gluster FOSS development is awesome</a><br />
<span class="archivepagedate">
Posted <span class="date">Sat Mar 7 09:00:20 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.11-released/">Cdist 3.1.11 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Feb 27 14:47:11 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-access-gluster-from-multiple-networks/">How to access gluster from multiple networks</a><br />
<span class="archivepagedate">
Posted <span class="date">Fri Feb 13 11:34:42 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-show-the-latest-git-tag/">How to show the latest git tag</a><br />
<span class="archivepagedate">
Posted <span class="date">Wed Feb 11 11:21:16 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.10-released/">Cdist 3.1.10 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 10 23:01:54 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/about-init-dependencies/">About init dependencies</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/accept-returns-0/">What went wrong, if accept(2) returns 0?</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/adobe-source-code-pro-font-not-for-small-sizes/">Adobe Source Code Pro font - Nice to read, but not on small sizes</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/android-backup-and-restore-without-google/">Backup and Restore Android Devices without Google</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/announced-first-sans-meeting/">Announced first ETH sysadmin meeting</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/archlinux-single-authentication-database/">Archlinux: One way to create one account for all systems</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/attitude-of-the-foss-community-a-matter-of-perspective/">Attitude of the FOSS community - a matter of perspective</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/automated-unix-installations/">Automated Unix Installations</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/buy-pirated-game-no-time-to-explain/">I buy No Time To Explain, because I don't need to</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ccollect-0.8-many-changes-quiet-if-down/">ccollect 0.8 includes many changes like quiet_if_down</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ccollect-0.8-rpm-available/">RPM for ccollect 0.8 available</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ccollect-0.8-to-be-released-soon/">ccollect 0.8 will soon be released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.1-released/">Subject: Cdist 2.0.1 released ...</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.10-released/">Cdist 2.0.10 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.11-security-bugfix-release/">Cdist 2.0.11 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.12-released/">Cdist 2.0.12 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.13-released/">Cdist 2.0.13 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.14-released/">Cdist 2.0.14 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.5-released/">Cdist 2.0.5 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.6-released/">Cdist 2.0.6 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.7-released/">Cdist 2.0.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.8-released/">Cdist 2.0.8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.0.9-released/">Cdist 2.0.9 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.1.0-released/">Cdist 2.1.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.1.0pre7-released/">Cdist 2.1.0pre7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.1.0pre8-released/">Cdist 2.1.0pre8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.1.1-released/">Cdist 2.1.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.1.2-released/">Cdist 2.1.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.2.0-released/">Cdist 2.2.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.0-released/">Cdist 2.3.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.1-released/">Cdist 2.3.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.2-released/">Cdist 2.3.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.3-released/">Cdist 2.3.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.4-released/">Cdist 2.3.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.5-released/">Cdist 2.3.5 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.6-released/">Cdist 2.3.6 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-2.3.7-released/">Cdist 2.3.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.0-released/">Cdist 3.0.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.1-released/">Cdist 3.0.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.2-released/">Cdist 3.0.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.3-released/">Cdist 3.0.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.4-released/">Cdist 3.0.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.5-released/">Cdist 3.0.5 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.6-released/">Cdist 3.0.6 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.7-released/">Cdist 3.0.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.8-released/">Cdist 3.0.8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.0.9-released/">Cdist 3.0.9 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.0-released/">Cdist 3.1.0 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.1-released/">Cdist 3.1.1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.2-released/">Cdist 3.1.2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.3-released/">Cdist 3.1.3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.4-released/">Cdist 3.1.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.5-released/">Cdist 3.1.5 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.6-released/">Cdist 3.1.6 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.7-released/">Cdist 3.1.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.8-released/">Cdist 3.1.8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-3.1.9-released/">Cdist 3.1.9 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.0.0pre1-released/">Cdist 4.0.0pre1 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.0.0pre2-released/">Cdist 4.0.0pre2 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-4.0.0pre3-released/">Cdist 4.0.0pre3 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-hint-apply-single-object/">Cdist: How to apply a single object</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-performance-2.0.0-rc4/">Performance of cdist 2.0.0-rc4</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-python-3.2-requirement/">cdist: Why we require Python 3.2 on the source host</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-shell-scripts-functions-local-variables/">Cdist: The scripts vs. functions and local variables problem</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cdist-transfer-files-recursively/">Cdist: How to copy a folder recursively</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ceofhack-qt4-ui/">QT4 user interface prototype added to ceofhack</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ceofhack-ui-support-1/">Introducing first code for user interfaces in ceofhack</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-0.3pre15-released/">Cinit 0.3pre15 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-0.3pre16-released/">Cinit 0.3pre16 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-0.3pre17-released/">Cinit 0.3pre17 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-0.3pre18-released/">Cinit 0.3pre18 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-0.3pre19-released/">Cinit 0.3pre19 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-alive-and-being-migrated/">Cinit is alive - and being migrated</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/cinit-migrated/">Cinit migrated to www.nico.schottelius.org</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/clinux-migrating-to-cstar/">Moving on: Migrating from #cLinux to #cstar</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/comic-qemu-tap-bridge-bond-lacp-arista-network-loop/">(Virtual) Network loop powered by Qemu, Bonding, Bridging and Arista</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/configuration-installation-server-bootstrap/">Bootstrapping configuration and installation servers</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/control-and-shutdown-qemu-kvm-vm-via-unix-socket/">How to control (shutdown) Virtual machines from Qemu/KVM via commandline</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/created-photo-website/">Created photo website: photo.nico.schottelius.org</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ctt-0.4-released/">Ctt 0.4 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ctt-0.7-released/">ctt 0.7 released: new format option</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ctt-0.8-released/">ctt 0.8 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ctt-0.9-released/">ctt 0.9 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/debian-ubuntu-fsck-skip-on-battery-bug/">Ubuntu and Debian skip fsck on battery - a bug</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/debian-with-ldap-forgets-users/">Debian with LDAP forgets about its users</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/dell-r815-hands-on-with-linux/">Linux on the Dell R815</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/dot-gitconfig-with-git-lo-lco-lpo-lpco-m-pl/">Added new short commands to .gitconfig (lo, lco, lpc, lpco, m, pl)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/find-emails-in-git-log-for-notification/">Find e-mail adresses of people in git log output</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/firefox-middlemouse-scrolling-paste/">How to scroll and paste with the middle mouse button in Firefox</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/first-version-of-fui-released/">First release of fui</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/format-sd-card-usb-stick-under-linux-for-canon-cp800-printer/">How to format and partition a SD-Card (USB-Stick) under Linux for the Canon CP800 printer</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/fui-0.2-released/">Released fui-0.2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/fui-0.3-released/">Released fui-0.3</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/generic-automatic-linux-installation-for-different-distributions/">Generic automatic installation for different Linux distributions</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/gpm-1.20.7-released/">GPM 1.20.7 released</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/gpm2-published/">Published gpm2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/great-rails-hosting-a-symlink-for-an-app/">Great Rails Hosting: A symlink for an app</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/guide-for-it-bosses/">A guide for IT bosses</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-cronie-anacron-cron-hourly-daily-weekly-work/">Anacron and cronie: How cron.hourly, cron.daily and cron.weekly work</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-add-private-puppet-modules-to-a-public-puppet-repository/">How to add private information to a public puppet repository</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-backup-the-piratebay-and-its-content/">How to backup The Piratebay and its content</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-extract-your-amazon-ebooks-from-the-android-kindle-app/">How to extract your Amazon ebooks from the Android Kindle App</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-find-and-execute-stuff-on-all-hosts/">How to find and execute stuff on all hosts?</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-generate-crypted-md5-password-shadow/">How to generate a /etc/shadow compatible md5 password</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/how-to-inform-people-about-better-solutions/">How to inform people about better solutions?</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/i-want-a-decentralised-bugtracker/">I want a decentralised bugtracker</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ikiwiki-has-been-slow/">Ikiwiki has been slow, but it is fast now!</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ikiwiki-is-slow/">Ikiwiki is slow</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/introducing-simple-universal-time/">Introducing Simple Universal Time (SUT)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/iptables-distribution-independent-powered-by-cdist-sponsored-by-panter/">Linux distribution independent iptables setup powered by cdist sponsored by panter</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/kvm-vms-with-cdist-at-local.ch/">KVM Virtual Machines managed with cdist and sexy @ local.ch</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/lenovo-x201-with-linux/">Linux on the Lenovo X201</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/libpr0n-the-internet-is-for-porn/">libpr0n: an image rendering library for Mozilla</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/lighttpd-plone-rewrite-redirect/">Mixing redirects and rewrites with lighttpd and Plone</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/linux-cannot-ping-self/">Linux cannot ping itself, but others can ping the box</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/linux-virtual-machines-a-real-pain/">Linux virtual machine software is a real pain</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/lxc-insecure-since-2011/">LXC still insecure (since 2011)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-archlinux/">Installing Linux on a Macbook Air (4,2)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-correcting-multimedia-key-mapping-and-status/">Correcting the multimedia keys mapping on the MacBook Air 4,2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-linux-status-report/">Status of Linux on the MacBook Air 4,2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-touchpad-click-and-move-fixed/">MacBook Air 4,2: Xorg/Synaptics touchpad click and move fixed</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-touchpad-keyboard-correct-screen-resolution/">Getting the keyboard, touchpad and correct screen resolution working on the MacBook Air 4,2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/managing-custom-software-with-environment-modules-in-the-systems-group/">Managing custom software with environment modules in the Systems Group</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/maybe-systemd-is-not-the-best-idea/">Maybe systemd is not the best idea</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migrate-ubuntu-to-cinit/">Migrate Ubuntu to cinit</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migrated-nico.schotteli.us/">Migrated nico.schotteli.us</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migrated-tech.schottelius.org/">Migrated tech.schottelius.org</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migrated-unix.schottelius.org/">Migrated unix.schottelius.org</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migrating-away-from-puppet-to-cdist/">Migrating away from puppet to cdist</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migration-1-configs/">Configuration files migrated and updated</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migration-2-freebsd-raid-monitoring-foss/">Migrated FreeBSD raid monitoring and FOSS article</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migration-3-ccollect/">Migrated ccollect</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migration-4-gpm/">Migrated gpm</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/migration-5-gpgme-introduction/">Migrated small introduction to gpgme</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/mozilla-conkeror-change-tempdir/">How to change the tempdir for Mozilla (general) and conkeror</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/my-bash-and-zsh-prompt/">My Bash and Zsh prompt</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/my-photo-publishing-approach/">My photo publishing approach</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/new-comments-about-ccollect/">New comments about ccollect published</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/new-wireless-gigabit-linux-router-for-ungleich-office/">New Linux wireless gigabit Linux router for ungleich office</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/news-2013-01-22/">News 2013-01-22</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/nginx-prioritise-x-accel-before-regular-expressions/">Nginx: Use X-Accel with conflicting regular expressions</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/nscd-bugs/">Known bugs of nscd with LDAP</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/offlineimap-and-hpodder-need-a-maintainer/">Searching for a maintainer for offlineimap and hpodder</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/openssh-6.2-add-callback-functionality-using-dynamic-remote-port-forwarding/">OpenSSH 6.2: Add callback functionality (using dynamic remote port forwarding)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-ceofhack/">Published ceofhack</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-creature/">Published creature</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-efsh-puppet-module/">Published puppet module for efsh</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-java-prayer-webmail-collectd-puppet-modules/">Published puppet modules: Collectd, Java, Prayer and ns_webmail_proxy</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-list-of-projects/">Published list of projects</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-machine-booking-system-mbs-eth-zurich/">Published mbs: A machine booking system for the ETH Zurich</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-openntpd-ethz-puppet-module/">Published puppet module for openntpd including ETHZ integration</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-postgresql-puppet-module/">Published puppet module for postgresql</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-smtp_logger/">Published smtp_logger</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-static-image-gallery-generator-comparison/">Published Static image gallery generator comparison</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/published-xorg-terminal-emulator-fonts/">Published Xorg terminal emulator font list</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-bugs-motivation-for-migration-and-cdist/">Puppet bugs that motivated me to migrate away from puppet and write cdist</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-duplicate-definition-on-the-same-line/">Puppet: Duplicate definition - on the same line!</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-empties-new-and-existing-files/">Puppet empties new and existing files</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-name-is-not-as-expected-but-classname/">In puppet, $name is not always what you expect</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/puppet-sometimes-loads-a-class/">Puppet: The quantum effect when loading classes</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/reboot-linux-if-task-blocked-for-more-than-n-seconds/">Reboot Linux if task blocked for more than n seconds</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/released-ccollect-0.8/">Released ccollect 0.8</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/released-ceofhack-0.6/">Released ceofhack 0.6</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/released-efsh-0.2/">Released efsh 0.2</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/remote-management-names-rmm-drac-ilom-imm-ilo/">Names of remote management systems (rmm, drac, ilom, imm, ilo)</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/replaced-pgp-key-9885188C-with-31877DF0/">Replaced old PGP key 9885188C with 31877DF0</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/restart-to-write-news/">Started to write news again</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ruby-ncurses-ceofhack-fui/">Take ruby, ncurses and ceofhack, get fui</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ruby-on-rails-fix-hostname-does-not-match-the-server-certificate/">Ruby on Rails: Fix the hostname does not match the server certificate error</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sans-puppet-meeting-20100825/">Next /sans/ meeting with puppet as main topic</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/searching-notebook-for-a-digital-nomad/">Searching a notebook for a digital nomad</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-and-cdist-at-local.ch/">Sexy and cdist @ local.ch</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-backend-change-dns-support/">Sexy example: Small backend change and you are managing DNS</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-cdist-interaction-sexy-chooses-cdist-configures/">Sexy and cdist interaction: Sexy chooses hosts, cdist configures</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-is-being-renamed-to-cinv/">Sexy is being renamed to cinv</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sexy-network-bootstrap/">Bootstrapping a network with sexy</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/solution-proposal-for-the-io-select-poll-problem/">Solution proposal for the io select/poll problem</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/started-archive.schottelius.org/">Started Archive.Schottelius.Org</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/static-nameserver-and-search-path-with-dhcpcd/">Setting static nameserver and search path with dhcpcd</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/stdin-here-documents-templating-in-cdist/">How to use stdin and here documents for templating in cdist</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sysadmin-bootstrap-1/">Sysadmin bootstrap - the beginning</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/sysadmin-bootstrap-2/">Sysadmin bootstrap - seek for information</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/the-power-of-vim-mail-editing/">The power of vim: mail editing</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/treat-virtual-machines-like-hardware/">Treat Virtual Machines like Hardware</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/tunneling-qemu-kvm-unix-socket-via-ssh/">Tunneling the qemu or kvm vnc unix socket via ssh</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/ungleich-blog/">ungleich is blogging</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/update-puppetmaster-before-puppet-clients/">Puppet: Update the puppetmaster before the puppet clients</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/urxvt-change-font-dynamically/">How to change the font in urxvt (rxvt-unicode) dynamically</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/use-smart-passphrases-stop-enforcing-weak-and-complicated-passwords/">Use smart passphrases - stop enforcing weak and complicated passwords</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/volume-keys-on-lenovo-x200-x201-xbindkeys/">How to use the volume keys on the Lenovo X200 and X201</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/what-is-configuration-management/">What is configuration management?</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/why-centos-does-not-stop-your-init-script/">Why CentOS does not stop your init script</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/xorg-disable-touchpad-with-xinput/">How to disable the touchpad in Xorg with xinput</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//blog/postfix-postgres-sasl-error-authentication-failed-authentication-failure/">Solution for Postfix with Postgres: SASL error: authentication failed: authentication failure</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Oct 7 00:00:00 2008</span>
</span>
</div>
I buy No Time To Explain, because I don't need tohttps://www.nico.schottelius.org//blog/buy-pirated-game-no-time-to-explain/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>I've just decided to buy the game
<a href="http://tinybuildgames.com/no-time-to-explain-ost-out-now">No Time To Explain</a>,
because I don't need to. Tinybuildgames just put up
a
<a href="http://thepiratebay.org/torrent/6617784/No_Time_To_Explain_Windows_tinyBuildGAMES">modified, "pirated" version of their game on Piratebay</a>. So I can download and play it
for free.</p>
<p>And because Tinybuildgames gives me the freedom to decide whether or not
to buy the game, I will buy it.</p>
<p>Following up my mail to Tinybuildgames:</p>
<pre><code>From: Nico -telmich- Schottelius <>
To: CONTACT -at- TINYBUILDGAMES -dot- COM
Subject: Pirated version - the reason to buy the game
Good day TINYBUILDGAMES-Team,
I haven't bought a game for years, I am not very much interested in
getting a new game anymore (other interests are higher priority),
but making your own "pirated" release of the game on Piratebay
conviced me of spending some money to you.
Thus I'm heading over to your shop, buy the game, just to sign you,
and hopefully others, that this is exactly the right approach:
You do not even skip DRM, but present the users freedom to choose
where to get the game from and whether to spend money to you or not.
Thanks for being a pioneer in software selling.
Cheers,
Nico
</code></pre>
computershttps://www.nico.schottelius.org//about/computers/2021-04-06T20:32:54Z2015-02-03T14:47:26Z
<p>As every computer geek, I also have a long history of used computers,
which I publish here, to be able to look back what I used once.</p>
<p>This document also explains the origin of most computer names I have been using.</p>
<p>This site was originally know as <strong>tech.schottelius.org</strong>.</p>
<h2>Servers</h2>
<h3>suppe.schottelius.org</h3>
<p>First, in 1998, there was <strong>suppe.schottelius.org</strong>. It was my first
webserver, dns-server and mail-server. I recieved it as a gift
from a kindergarten, because it was too slow for them.
The name is derived from the German phrase "suppelte herum",
which means "is still working, but may break if you look at it
too strong".</p>
<p>You actually should have seen it, it consisted of the following hardware:</p>
<pre><code>Chassis: Midi-Tower
Processor: Intel Pentium 120Mhz
RAM: 48 MiB (16+16+8+8)
Harddisk: 2 GiB IDE (PIO mode/16Bit ;)
NIC: Some 3Com PCI 10Mbit (3c509?)
CDROM: Something like that appeared to be installed
Floppy 1x3,5" , 2x5,25"
</code></pre>
<ul>
<li>Productive use: 2000 - 2003</li>
</ul>
<h3>bruehe.schottelius.org</h3>
<p>Later, in 2003, <strong>suppe</strong> was replaced by <strong>bruehe</strong>. One day, broth ran
into the <strong>bruehe</strong>, and <strong>bruehe</strong> is the German word for broth.</p>
<p>The first version of <strong>bruehe</strong> had the following technical features:</p>
<pre><code>Chassis: Midi-Tower
Processor: Pentium3 550Mhz
RAM: 640 MB (256+128+128+128)
Harddisk (scsi): 3* 4 GB scsi-3 (raid 1, one spare disk)
Harddisk (ide): 3* 40 GB ide/udma100 (raid 1, one spare disk)
NIC (lan): 3Com Corporation 3c905 100BaseTX [Boomerang]
NIC (dmz): 3Com Corporation 3c905 100BaseTX [Boomerang]
NIC (inet): Realtek Semiconductor Co., Ltd. RTL-8029(AS)
NIC (wlan): Global Sun Technology Inc
Optical drive: IDE DVD(+/-, R/RW,RAM) -Burner (old: 32x IDE)
Floppy: removed (was: 1x3,5")
</code></pre>
<p>Later the one scsi and one ide drive was removed due to problems
with the power supply. And an additional NIC was put into.</p>
<p>At the time <strong>bruehe</strong> was replaced by <strong>creme</strong> (see below) it became
the firewall for the lan at home.</p>
<ul>
<li>Productive use: 2003 - 2006</li>
</ul>
<p>Bruehe is actually still in use, but only as a table below my desk.</p>
<h3>creme.schottelius.org</h3>
<p>Because a customer of me broke a contract, I had to keep
a very nice dual Xeon server back. This one became
<strong>creme.schottelius.org</strong>. The name comes from "creme de la creme"
which means "one of the best".</p>
<pre><code>Chassis: 2U
Processor: Dual Single core Xeon 2.40 Ghz
RAM: 1024 MB (2*512)
Harddisk: 2* 80 GB ide/udma (raid1)
NIC: 2* Intel(R) PRO/1000
CDROM: Slim line IDE 52x DVD
</code></pre>
<ul>
<li>Productive use: 2005 - 2008</li>
</ul>
<h3>tee.schottelius.org</h3>
<p>After creme, I bought a smaller 1U server with remote access.
As it is smaller and thinner then creme, it was named tee.
Here are the specs:</p>
<pre><code>Chassis: Intel S5000PAL
Processor: Quad Core Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
RAM: 20 GiB (2*2 GiB, 4*4 GiB)
Harddisk: 2* 500 GB sata (raid1)
Raid: ARC-1210 4-Port PCI-Express to SATA RAID Controller
NIC: 2* Intel 80003ES2LAN (Gigabit)
CDROM: Available
</code></pre>
<ul>
<li>Productive use: 2008 - 2015</li>
</ul>
<h3>Data Center Light</h3>
<p>Running servers for myself only was too easy. So in 2015 I started the
<a href="https://datacenterlight.ch">Data Center Light project</a> to offer
a sustainable alternative to regular hostings for myself. And for everyone
else who is interested in the future of our planet.</p>
<h2>Notebooks</h2>
<h3>flapp.intern.schottelius.org</h3>
<p>Flapp was my first notebook, a Acer Travelmate 524TEV.
Quite a nice machine, bought with the first money I made.</p>
<pre><code>Processor: Intel Pentium III 650 Mhz with Speedstep
Ram: 64MB (max: 512MB)
HD: 10 GB, UDMA 33: IBM-DJSA-210
CD: 24x CD / 6x DVD: MATSHITADVD-ROM SR-8175
USB: ALi M5237
Network: Intel Ethernet Pro 100
VGA: ATI 3D Rage P/M Mobility AGP 2x
PCMCIA: O2 Micro OZ6933
IDE: ALi M5229
Sound: ALi 5451
Touchpad: Synaptics
Modem: Lucent SoftModem Version 3.1.66
Infrared: Ali Fast Infrared
Display: 13.3" TFT
</code></pre>
<ul>
<li>Productive use: 1998 - 2003</li>
</ul>
<h3>scice.intern.schottelius.org</h3>
<p>After <strong>flapp</strong> died in 2003 (because tea ran into it), I bought
<strong>scice</strong>. <strong>Scice</strong> is combined of "scientific" and "silence".</p>
<p>Scice has a Transmeta TM5400 processor and no active cooling. It
was produced by ECS under the name of "A530".</p>
<pre><code>Processor: Transmeta(tm) Crusoe(tm) Processor TM5600, 600Mhz
RAM: 128MiB (upgraded to 384MiB later)
Optical drive: DVD-ROM / CD-RW
Display: 14" TFT
Mouse input: Touchpad
Other: 4x USB2.0
</code></pre>
<ul>
<li>Productive use: 2003 - 2005</li>
</ul>
<h3>ei.intern.schottelius.org</h3>
<p>Was an IBook G3. Background light broke / screen was unusable in
2005. It was able to suspend to RAM running Linux for weeks.</p>
<pre><code>Processor: Power PC
RAM: 320 MB
</code></pre>
<ul>
<li>Productive use: 2004 - 2005</li>
</ul>
<h3>hydrogenium.intern.schottelius.org</h3>
<p>When the battery of <strong>scice</strong> ended its life time about one year after
I bought it, I decided to buy a used Compaq Evo N400C.</p>
<pre><code>Processor: Pentium III (Coppermine) 850 Mhz
Display: 12" TFT
</code></pre>
<ul>
<li>Productive use: 2005 - 2008</li>
</ul>
<h3>wasserstoff.intern.schottelius.org</h3>
<p>To be more precise, when I bought <strong>hydrogenium</strong>, I also bought
<strong>wasserstoff</strong>, which is also a used Compaq Evo N400C. <strong>Wasserstoff</strong>
is simply there to spend parts, when <strong>hydrogenium</strong> needs to have
them replaced.</p>
<h3>ast.intern.schottelius.org</h3>
<p>Pentium 1 notebook. Never really used it productively,
was thought to be a terminal. It also had the alias "alzheimer"
as the main and the bios battery were both broken.</p>
<pre><code>Processor: Pentium 1, 75 Mhz
RAM: ?
HD: 30 GB (yes, not originally and Bios sees only 8 GB ;-)
Vendor: AST
</code></pre>
<h3>denkbrett.intern.schottelius.org</h3>
<p>An IBM T60.</p>
<pre><code>Processor: Dual Core ..?
RAM: 3 GiB
HD: 80 GB
Wireless-lan: Intel(R) PRO/Wireless 3945ABG
</code></pre>
<ul>
<li>Productive use: 2007 - 2008</li>
</ul>
<h3>ikn.intern.schottelius.org</h3>
<p>A Lenovo Thinkpad X200. The name is derived from its
main use in ETH Zürich, "Informatikkoordinator Nico".</p>
<pre><code>Processor: Dual Core Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz
RAM: 4 GiB
HD: 250 GB SATA
Graphics card: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller
Wireless-lan: Intel Corporation Wireless WiFi Link 5300
Ethernet: Intel Corporation 82567LM Gigabit
Display: 12"
</code></pre>
<ul>
<li>Productive use: 2008 - 2010</li>
</ul>
<h3>kobold.intern.schottelius.org</h3>
<p>An IBM X31 running as wireless access point, router,
firewall, fileserver (three usb harddrives connected,
running raid5 under the crypt layer) and video player.</p>
<pre><code>Processor: Intel(R) Pentium(R) M processor 1600MHz
RAM: 1 GiB
HD: 40 GB
Graphics card: ATI Radeon Mobility M6 LY (AGP)
Wireless-lan: Atheros AR5212 802.11abg
Ethernet: Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
</code></pre>
<ul>
<li>Productive use: 2009 - 2011</li>
</ul>
<h3>kr.intern.schottelius.org</h3>
<p>A Lenovo Thinkpad X201. The name is an abreviation for
"klapprechner", the German translation for "notebook".</p>
<pre><code>Processor: Dual Core Intel(R) Core(TM) i5 CPU M 520 @ 2.40GHz (4 threads)
RAM: 4 GiB
HD: 500 GB SATA
Graphics card: Intel Corporation Core Processor Integrated Graphics Controller
Wireless-lan: Intel Corporation WiFi Link 6000 Series
Ethernet: Intel Corporation 82577LM Gigabit Network
Display: 12", LED backlight
</code></pre>
<ul>
<li>Productive use: 2010 - 2011</li>
</ul>
<h3>tablett.intern.schottelius.org</h3>
<p>A Lenovo T60. Used for putting glasses on it. Changed in 2020 to be
used as a NAT64 translator.</p>
<ul>
<li>Productive use: 2011 - now</li>
</ul>
<h3>fernseher.intern.schottelius.org</h3>
<p>A Lenovo T6?.</p>
<ul>
<li>Productive use: unknown</li>
</ul>
<h3>kino.intern.schottelius.org</h3>
<p>A Lenovo T61p.</p>
<ul>
<li>Productive use: unknown</li>
</ul>
<h3>brief.intern.schottelius.org</h3>
<p>An Apple Mac Book Air 4,2 given to me by my
employer. The name is the German name for "letter". Similar to "ei", I
was running Linux on this computer. However compared to the original
iBook, this computer was way harder to get properly running under
Linux due to a custom EFI implementation and lack of stable drivers
for the wifi card.</p>
<pre><code>Processor: Dual Core Intel(R) Core(TM) i7-2677M CPU @ 1.80GHz (4 threads)
RAM: 4 GiB
HD: 256 GB SSD
Graphics card: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
Wireless-lan: Broadcom Corporation BCM43224 802.11a/b/g/n (rev 01)
Ethernet: No ethernet
Display: 13", LED backlight, 1440x900
</code></pre>
<ul>
<li>Productive use: 2011 - 2013</li>
</ul>
<h3>matte.intern.schottelius.org</h3>
<p>I got a Dell System XPS L321X as a present from Dell after
some almost failed negotiations. As its exterior is matt grey and
as an ultrabook it is pretty slim, it was named <strong>matte</strong> (German for "mat").</p>
<pre><code>Processor: Dual Core Intel(R) Core(TM) i5-2467M CPU @ 1.60GHz
RAM: 4 GiB
HD: 128 GB SSD
Graphics card: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
Wireless-lan: Intel Corporation Centrino Advanced-N 6230 [Rainbow Peak] (rev 34)
Ethernet: No ethernet
Display: 13", LED backlight
</code></pre>
<ul>
<li>Productive use: 2012 - 2012</li>
</ul>
<h3>bento.intern.schottelius.org</h3>
<p>Lenovo X1 Carbon, 1st gen. Very small SSD. Used together with a HUGE
SD card to store pictures on, which disconnected on suspend to ram...</p>
<pre><code>Processor: Intel Core i7Â3667U (Dual Core)
RAM: 8 GiB
HD: 256GB SSD
HD: 256GB SD card (very slow)
Graphics card: Intel HD Graphics 4000
Display: 14.0", 1600 x 900
</code></pre>
<ul>
<li>Productive use: 2013 - 2014</li>
</ul>
<h3>artist.intern.schottelius.org</h3>
<p>A Lenovo Yoga 2 Pro. The mainboard died within a few months and there
was no replacement or repair available. Lenovo gave a full refund.</p>
<pre><code>Display: 13", 3200x1800, touch screen
</code></pre>
<ul>
<li>Productive use: 2014 - 2014</li>
</ul>
<h3>gold.intern.schottelius.org</h3>
<p>This was a Dell E7440 test device.
Various problems with the speaker, even headset almost inaudible.</p>
<pre><code>Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
Intel Corporation Wireless 7260 (rev 73)
</code></pre>
<ul>
<li>Non productive use: 2014 - 2014</li>
</ul>
<h3>freiheit.intern.schottelius.org</h3>
<p>This was an X240 with an impressive run time with an internal and
external battery that could be exchanged. With 3 batteries, it
achieved the 13h+ run time. No charger required during the day.</p>
<pre><code>CPU: Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz (4 cores)
RAM: 8GB
HD: 1TB SSD
00:00.0 Host bridge: Intel Corporation Haswell-ULT DRAM Controller (rev 0b)
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
00:03.0 Audio device: Intel Corporation Haswell-ULT HD Audio Controller (rev 0b)
00:14.0 USB controller: Intel Corporation 8 Series USB xHCI HC (rev 04)
00:16.0 Communication controller: Intel Corporation 8 Series HECI #0 (rev 04)
00:19.0 Ethernet controller: Intel Corporation Ethernet Connection I218-LM (rev 04)
00:1b.0 Audio device: Intel Corporation 8 Series HD Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 6 (rev e4)
00:1c.1 PCI bridge: Intel Corporation 8 Series PCI Express Root Port 3 (rev e4)
00:1d.0 USB controller: Intel Corporation 8 Series USB EHCI #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation 8 Series LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation 8 Series SATA Controller 1 [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 8 Series SMBus Controller (rev 04)
02:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5227 PCI Express Card Reader (rev 01)
03:00.0 Network controller: Intel Corporation Wireless 7260 (rev 83)
</code></pre>
<ul>
<li>Productive use: 2014 - now</li>
</ul>
<h3>wurzel.intern.schottelius.org</h3>
<p>This was a Lenovo X1 Carbon, 3rd gen. Died first time in November 2015.</p>
<pre><code>Processor: i7-5500U, 2.4 / 3.0 GHz
RAM: 8GB
HD: 512 GB SSD
Display: 14", 2560 x 1440
Graphics card: Intel HD 5500
</code></pre>
<ul>
<li>Productive use: 2015 - 2017</li>
</ul>
<h3>manager.intern.schottelius.org</h3>
<p>A Dell Latitude 5285, basically a tablet with quite-okay keyboard.
Always almost fell from my lap once using in the train. Replaced for
sanity with an X1 Carbon afterwards. First device with 16GB RAM.</p>
<p> RAM: 16 GB
SSD: 512GB</p>
<ul>
<li>Productive use: 2017 - 2018</li>
</ul>
<h3>line.intern.schottelius.org</h3>
<p>A Lenovo X1 Carbon 6th generation. Works ok, until too many browsers
are open. Loud speakers almost existent.</p>
<pre><code>Processor: Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz (4C / 8C hyperthreading)
RAM: 16 GiB
HD: 512GB SSD
Graphics card: Intel Corporation UHD Graphics 620 (rev 07)
Wireless lan: Intel Corporation Wireless 8265 / 8275 (rev 78)
Ethernet: Intel Corporation Ethernet Connection (4) I219-LM (rev 21)
(needs a dongle)
Display: 14"
</code></pre>
<ul>
<li>Productive use: 2018 - 2020</li>
</ul>
<h3>snow.intern.schottelius.org</h3>
<p>A HP EliteBook x360 1040 G5.
High frequency sound when display brightness was not 0 or 100%.
Had to return because of the annoying noise.</p>
<pre><code>CPU: i7-8650U
RAM: 32GB
HD: SSD PCIe 1TB
Display: 14", UHD, touch
</code></pre>
<ul>
<li>Non-productive use: 2019 - 2019</li>
</ul>
<h3>diamond.intern.schottelius.org</h3>
<p>A Dell XPS 13 2-in-1. First device with 32GB RAM. Returned in 2020 due
to massive keyboard problems.</p>
<p> CPU: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz (8 threads)
RAM: 32 GiB
HD: 1 TB SSD
Display: 13.4", 3840x2400 resolution</p>
<p> [14:17] diamond:~% lspci | grep -i -e net -e vga
00:02.0 VGA compatible controller: Intel Corporation Device 8a52 (rev 07)
00:14.3 Network controller: Intel Corporation Device 34f0 (rev 30)</p>
<ul>
<li>Productive use: 2019 - 2020</li>
</ul>
<h3>bridge.intern.schottelius.org</h3>
<p>A Lenovo T490s. An in-between device ("bridge") as there is no high-DPI
resolution computer available that is light enough.</p>
<p> CPU: Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz
RAM: 32 GiB
HD: 512 GB SSD
Display: 14", 1920x1080 resolution</p>
<ul>
<li>Production use: 2020 - now</li>
</ul>
<h3>hike.intern.schottelius.org</h3>
<p>A GPD Pocket 2 for hiking. Small enough to fit into any bag/pocket for hiking.</p>
<p> RAM: 8GB
SSD: 256GB
Display: 7 Inch
CPU: Intel Celeron 3965Y</p>
<ul>
<li>Production use: 2020 - now</li>
</ul>
<h3>nb1.intern.schottelius.org</h3>
<p>This is a bit funny - it's an older Lenovo X1 Carbon, Gen 1. I bought
it to compensate the frequent failures of the T490s and use it while
the T490s is in repair. The SSD is not an NVMe, but connected via
SATA.</p>
<p> RAM: 8GB
SSD: 256GB
Display: 14", 1600x900
CPU: Intel(R) Core(TM) i5-3427U CPU @ 1.80GHz</p>
<p>Also the first noteboot to deviate from the naming scheme.</p>
<ul>
<li>Production use: 2021 - now</li>
</ul>
<h3>nb2.intern.schottelius.org</h3>
<p>A Lenovo T490s. As the bridge notebook (see above) broke already
shortly after buying it (including a repair shortly afterwards) I
added another T490s to the pool as a backup for the T490s.
This one surprisingly came with a touch screen, which unfortunately is
rather dimm.</p>
<p> CPU: Intel(R) Core(TM) i5-8365U CPU @ 1.60GHz
RAM: 16 GiB
HD: 512 GB SSD
Display: 14", 1920x1080 resolution, touch screen</p>
<ul>
<li>Production use: 2021 - now</li>
</ul>
<h3>nb3.intern.schottelius.org</h3>
<p>This is a first gen Lenovo X1 Nano with only 2 USB-C ports. Primary
usage for working outside, as it has a bright display and is light
(sub 1kg). Surprisingly the keyboard is superior to both X1 carbon as
well as T490s.</p>
<p> RAM: 16GB
SSD: 1TB
Display: 13", 2160 x 1350, "up to 450 nit"
CPU: Intel(R) Core(TM) i7-1160G7 @ 1.20GHz</p>
<ul>
<li>Production use: 2021 - now</li>
</ul>
<h2>Workstations/Desktops</h2>
<p>Systems I used as workstations:</p>
<h3>ozean.intern.schottelius.org</h3>
<p>My first own computer was a Pentium 1 bought from Aldi.
Before that I used my father's computer.
The case of that computer was painted blue with
penguins on it by a friend of mine. That case
actually become the case of bruehe later. Currently
I do not even remember the naem I gave that box.</p>
<pre><code>Processor: Pentium 1, 166 Mhz
Harddisk: 700 MB + 1 GB SCSI (exchanged the 4 GB IDE HD that came with it)
RAM: around 16 MiB
Graphics card: ATI with 2 MiB
CD-ROM: Single speed SCSI with caddy running at triple speed
* Productive use: ???? - ~2000
</code></pre>
<h3>eiche.intern.schottelius.org</h3>
<p>Then my father gave me his old computer for present, which was
named <strong>eiche</strong> (oak in English), because it has a big-tower case.</p>
<pre><code>Processor: Intel Pentium IV (mostly running at 80 C)
</code></pre>
<h3>buche.intern.schottelius.org</h3>
<p><strong>buche</strong> replaced <strong>eiche</strong> on 2006-06-10, because the mainboard
of <strong>eiche</strong> had some problems with the Promise IDE controller.
<strong>buche</strong> should now be the file and backup server for the people
living in our home.</p>
<pre><code>Processor: AMD Athlon(tm) Processor, 800Mhz
RAM: 1152MiB
Optical drive: DVD-RAM (CD-RW, DVD+/-R/RW)
NIC: 3Com Corporation 3c905B 100BaseTX [Cyclone]
IDE: 2x onboard, 4x on Promise PDC20270 (TX4)
Other: 4x USB2.0, 4xUSB1.1
* Productive use: at least in 2007
</code></pre>
<h3>dosinux.intern.schottelius.org</h3>
<p>Midi tower used for gaming. Name is a combination of "dos on unix",
because I used dosbox to run old games on it. The case was
bought from Dicks Computer Dienst, with a blue handle.</p>
<h3>grauerstar.intern.schottelius.org</h3>
<p>Nice workstations from HP, a
<a href="https://www.nico.schottelius.org//about/computers/hpJ6000datasheet.pdf">HP J6000</a> featured with
a HPPA processsor. I was running it with both Debian and Gentoo.</p>
<pre><code>Processor: Dual PA8600 (PCX-W+), 552 Mhz
HD: 18 GiB SCSI (SCA)
</code></pre>
<ul>
<li>Used: ~2006 - ~2008 (unclear)</li>
<li>No real productive use, just played around with it.</li>
</ul>
<h3>grauerklon.intern.schottelius.org</h3>
<p>Same machine as grauerstar. Just bought two of them, you never
know how many HPPAs you need, don't you?</p>
<h3>loch.intern.schottelius.org</h3>
<p>A fileserver that contains 6x 3.5" HDs.</p>
<pre><code>Processor: AMD E-350
RAM: 8GB
Disk original: 6x1TB (upgraded to 6x6TB over the years)
</code></pre>
<ul>
<li>Production use: ca. 2012 - now</li>
</ul>
<h2>Embedded</h2>
<h3>zwerg.schottelius.org</h3>
<p>My first embedded device to play around with. Data mostly
copied from www.soekris.com:</p>
<pre><code>266 Mhz NSC SC1100 single chip processor
256 Mbyte SDRAM, soldered on board
4 Mbit BIOS/BOOT Flash
CompactFLASH Type I/II socket
UltraDMA-33 interface with 44 pins connector for 2.5" Hard Drive
3 10/100 Mbit Ethernet ports, RJ-45
2 Serial ports, DB9 and 10 pins header
USB 1.1 interface
Power LED, Activity LED, Error LED
Mini-PCI type III socket. (t.ex for optional hardware encryption.)
PCI Slot, right angle 3.3V signaling only, dual PCI slot option planned.
12 bit general purpose I/O, 20 pins header
Temperature and voltage monitor
Hardware watchdog
Board size 5.2" x 5.7"
Power using external power supply is 6-20V DC, max 15 Watt
Option for 5V supply using internal connector
Operating temperature 0-60 °C
</code></pre>
<h3>katze.schottelius.org</h3>
<p>After a flash of lightning, zwerg died and was replaced by katze,
a Soekris Net5501. Data again mostly copied and edited from Soekris.com:</p>
<pre><code>500 Mhz AMD Geode LX single chip processor with CS5536 companion chip
512 Mbyte DDR-SDRAM, soldered on board
4 Mbit BIOS/BOOT Flash
CompactFLASH Type I/II socket.
UltraDMA-100 interface with 44 pins connector for 2.5" Hard Drive
Serial ATA 1.0 interface for Hard Drive, with +5V and +12V power header
1-4 VIA VT6105M 10/100 Mbit Auto MDIX Ethernet ports, RJ-45, protected to 700W/40A Surge
2 Serial ports, DB9 and 10 pins internal header
USB 2.0 interface, one internal, one external port
Power LED, Disk LED, Error LED, Network LED's
Mini-PCI type III socket. (for t.ex. hardware encryption or wireless controller)
PCI Slot, right angle 3.3V signaling only, dual PCI slot option
12 bit general purpose I/O, 20 pins header
Temperature and voltage monitor
Hardware watchdog
Board size 6.3" x 6.5"
Power using external power supply is 6-25V DC, max 20 Watt, protected with TVS
Option for 5V supply using internal connector
Operating temperature 0-60 °C
</code></pre>
Created photo website: photo.nico.schottelius.orghttps://www.nico.schottelius.org//blog/created-photo-website/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>I created a new photo website,
<a href="http://photo.nico.schottelius.org">photo.nico.schottelius.org</a>,
which contains latest photos taken. The old galleries may get
imported later.</p>
<p><a href="https://www.nico.schottelius.org//about/">Let me know</a>, if you find an interesting photo on it!</p>
How to scroll and paste with the middle mouse button in Firefoxhttps://www.nico.schottelius.org//blog/firefox-middlemouse-scrolling-paste/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>If you're like me and use firefox with a trackpoint (i.e. no scroll "buttons"),
you're probably also happy with these settings:</p>
<h2>middlemouse.paste=true</h2>
<p>This adds pasting from the x clipboard.</p>
<h2>middlemouse.contentLoadURL=false</h2>
<p>Do not try to load website from content in clipboard.</p>
<h2>general.autoScroll=true</h2>
<p>Enable scrolling using the middle mouse button.</p>
<p>Now firefox behaves similar to <a href="http://conkeror.org/">conkeror</a>,
which is my default browser currently.</p>
Nico Schottelius and Free and Open Source Software (FOSS)https://www.nico.schottelius.org//about/foss/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h3>Why did I become a FOSS developer?</h3>
<p>In 1998 I was running Windows 95 on my brand new computer (Pentium
1, 166Mhz) and it randomly crashed. This was very frustrating. So I
asked my father, whether there is something else available.
And his father gave me a set of SCO Unixware floppys and cds and a
packet labeled "Suse Linux 11/94". The SCO package had a blue/white
cd box and looked nicer, so I began to install Unixware my computer.
But it did not work, because SCO did not support IDE disks and the
computer had only an IDE disk builtin.</p>
<p>After about two weeks trying around with SCO, I gave up.
Frustrated I continued to use the old operating system.</p>
<p>About one week later he was again extremly frustrated, that this
operating system was crashing so often and he remembered, that there
was another cd set (one source code, one install cd) to try out. After
about 4 hours I had Linux running. That was really really easy
compared to SCO. It felt strange, so new, so fast. And it contains only
text. Strange, like DOS before Windos, I thought.</p>
<p>On the next day I read in the book that there is something called
"X11" available, which can destroy the display, when wrongly
configured. I were shocked, but still tried to do it the correct. I
searched for vertical and horizontal refresh rates and found them after
some hours searching in the handbook (they were labeled differently
compared to the SuSE Linux handbook). Created the configuration and
typed in "X<enter>". Wow, it works. But why is it grey and black?
Really gross. But after typing 'startx' it looked much better.</p></p>
<p><p>The next confusing thing was that there were no drivers for the
cdrom. Nothing to load. After about two weeks I found out that they
are already integrated into the kernel and that one simply needs to
"mount" them. And after that experience, I was totally convinced by
FOSS, because the FOSS people solved the driver issue much cleaner than
the cdrom vendor or Windos itself. The whole system has been running
very stable and it has been really easy to change things (like
/etc/issues), it has been open.</p>
Great Rails Hosting: A symlink for an apphttps://www.nico.schottelius.org//blog/great-rails-hosting-a-symlink-for-an-app/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>As <a href="http://www.ungleich.ch">ungleich</a> focusses on educated customers,
we meet pretty cool infrastructures from time to time.
In some sense I count <a href="http://www.local.ch">local.ch</a>
as a customer: they supported me with one day off
per week so I was able to found <a href="http://www.ungleich.ch">ungleich</a>
and acquire first customers.
This article is dedicated to <a href="http://www.local.ch">local.ch</a> and describes
a very elegant solution for Ruby on Rails hosting.</p>
<h2>Overview</h2>
<p>The setup consists of the following services, glued
together in an elegant way:</p>
<ul>
<li><a href="http://nginx.org/">nginx</a></li>
<li><a href="http://unicorn.bogomips.org/">unicorn</a></li>
<li><a href="https://www.isc.org/downloads/bind/">ISC Bind</a></li>
<li><a href="https://github.com/capistrano/capistrano/wiki">Capistrano</a></li>
<li>Symlinks</li>
</ul>
<h2>Nginx</h2>
<p>The great trick of the setup is that nginx is used to forward requests
to a unix socket that depends on the <strong>hostname</strong>, which is
exposed as <strong>$host</strong> by nginx. The following
configuration snippet contains the important parts:</p>
<pre><code>server {
listen 80;
location @error_page {
root /var/nginx/$host/current/public;
internal;
[...]
location ~ "^/assets/.*-[a-z0-9]{32}.\w+" {
root /var/nginx/$host/current/public;
[...]
location ~ ^/assets/ {
root /var/nginx/$host/current/public;
[...]
root /var/nginx/$host/current/public;
location @unicorn {
proxy_pass http://unix:/var/nginx/$host/unicorn.sock;
# Forward original host name to be seen in unicorn
proxy_set_header Host $host;
# Server name and address like being available in PHP
proxy_set_header SERVER_NAME $server_name;
proxy_set_header SERVER_ADDR $server_addr;
# The real client IP address - header has ben setup by Zeus
proxy_set_header X-Real-IP $http_x_cluster_client_ip;
# Needed second header for rails - See SYS-1587
proxy_set_header X_FORWARDED_FOR $http_x_cluster_client_ip;
</code></pre>
<p>As you can see, all paths are dependent on the actual hostname
as setup by nginx.</p>
<h2>Application Deployment</h2>
<p>Applications are deployed under their project name below
<strong>/var/nginx</strong>
(like <strong>ws-locomotive.dev-deploy</strong> or <strong>ws-locomotive.master</strong>).
As you can see from the naming, developers can deploy one application
from different branches easily (dev-deploy and master branches is this
case).
Developers can use <a href="https://github.com/capistrano/capistrano/wiki">Capistrano</a> to deploy their applications
and don't need to interact (reload/restart) with nginx, as it is
already configured to accept any hostname.</p>
<h2>Name Server Configuration</h2>
<p>As you can imagine, it would be quite cumbersome for developers to
reach a host named <strong>ws-locomotive.dev-deploy</strong>.
That is why a wildcard domain is configured to point
to the host running nginx:</p>
<pre><code>*.play.intra.local.ch. CNAME rails-dev-vm-snr01.intra.local.ch.
</code></pre>
<h2>Give the application a name</h2>
<p>A new hostname can be assigned to an application simply by symlinking
it to the application:</p>
<pre><code>% cd /var/nginx
% ln -s ws-locomotive.dev-deploy my-fancy-name.play.intra.local.ch
</code></pre>
<p>This way, developers can use <strong>any name</strong> below
play.intra.local.ch for their application. Some applications
actually behave differently depending on the name they are accessed
with:</p>
<pre><code>info.ws-locomotive.master.play.intra.local.ch -> ws-locomotive.master
hp.ws-locomotive.master.play.intra.local.ch -> ws-locomotive.master
</code></pre>
<h2>Conclusions</h2>
<p>The setup is pretty elegant, because it allows developers to
create new development environments without interacting with any
sysadmin to configure nginx, bind or whatsoever.
There is a security drawback though:
An attacker could try to use hostnames like
<strong>../../../../etc/</strong> and request the file <strong>passwd</strong>.
That is the reasion why this service is not exposed
to the outside world directly, but all external requests
are filtered (whitelisting) by a load balancer in front
of the rails hosts.</p>
A guide for IT bosseshttps://www.nico.schottelius.org//blog/guide-for-it-bosses/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>You are an IT boss. Your job is to manage the
<a href="https://en.wikipedia.org/wiki/The_IT_Crowd">IT crowd</a>.
Depending on your skills and knowledge you may find this
job more easy or hard.</p>
<p>This guide is created by those who you try to manage: The IT crowd.</p>
<h2>Background</h2>
<p>I am a System Engineer currently working 80%
for <a href="http://www.local.ch">local.ch (Swiss Phonebook)</a> and 20% for
<a href="http://www.ungleich.ch">ungleich (Unix/Linux infrastructure company)</a>.</p>
<p>On a daily basis I see how employees and bosses are acting and I spent time
on analysing the behaviour of both parties (for fun - not profit).
As I often see common mistakes and behaviour patterns, which make
good or bad bosses, the idea was born to create a guide for IT bosses.</p>
<h2>Guidelines</h2>
<h3>Be honest</h3>
<p>Not a special requirement in regards of IT, but if you want your
employees to respect you, you definitely need to be honest.</p>
<p>Don't even think about playing tricks on them, they will find out and
everybody will lose the respect for you. Guaranteed.</p>
<h3>Be available</h3>
<p>Your job involves a lot of meetings and coordination.
Your employees understand that and may even be very thankful you took that job.
Still, as you are the boss, communicate straightly when you are available, so
people can bring their questions and problems to you.</p>
<p>If you see there is too less time to be available for your team, it's probably
good time to split up the team or to move on to another position
and promote somebody else for being the head of IT crowd.</p>
<h3>Give freedom</h3>
<p>More important than in probably most other areas is the amount of freedom you
give: IT professionals are usually bright people who understand their job very
well. The learn on the job (which includes getting side tracked from time to time),
they are keen to touch the latest and newest technologies and have a high motivation.</p>
<p>Adding artifical borders to the way the work makes them less productive, less motivated and
in the worst case leave your workplace.</p>
<p>Pay even more attention on this topic, if you have some technical background.
You may know (or think you know!) what the best solution or technical choice is,
but you hired those people to do a good job, not just to execute your thoughts, did you?</p>
<h3>Don't assume</h3>
<p>Don't try to enhance the working situation
of your employees with stuff you assume could be good for them.</p>
<p>You will most likely be wrong.</p>
<p>Instead listen to your employees or ask them about your idea.
Spending an hour or day discussing is probably more worth than throwing away your
shiny new invention.</p>
<h3>Give tools</h3>
<p>Have you ever seen a good craftsman working with broken tools? Probably not. Take the same
approach for your IT professionals: If they request specific tools
(software, notebook, mobile phone, screen, etc.), they probably have a good reason for it.</p>
<p>Don't hesitate to question the request ("Why do you need this / how does it make you more
efficient?"), but also don't hesitate to let them buy the right tools afterwards.</p>
<p>Denying to give good tools makes your employees less motivated, less productive and
indicate you don't value their work.</p>
<p>Regarding value: Did you consider that the 3000 USD notebook,
even if it is not better than the employees current computer,
is worth the motivation you gain from it?</p>
<h3>Plan, assist and communicate objectives</h3>
<p>Your key competence as an IT boss is probably planning and communication.
Use this power to <strong>assist (!)</strong> your IT crowd: Aid them in planning their work,
show them how to plan and communicate what you expect from them.</p>
<p>Don't try to squeeze them into a specific way of working. Better: Let your employees know
what the objectives are (expected results, date of delivery).
They probably
figure better out how to reach it than you. Always remember:
IT guys are different,
some of them love to work in the night,
some of them cannot concentrate in open plan offices
and some of them want to work under high pressure (do all the work in one night).</p>
<h3>Consider the difference</h3>
<p>Compared to many other professions, IT people are behaving a <strong>bit</strong> differently
(that's why sysadmins have their own
<a href="http://www.amazon.com/Management-System-Administrators-Thomas-Limoncelli/dp/0596007833/">time management</a>
book, for example). This may require special treatments from your side: For instance
the usual motivation factors may not work as expected. If you listen carefully, you
may hear "weird" requests like "I'd like to start working at 14:00 until the night".
If possible, try to honour these requests: They don't cost a lot of ressources, but
they require an open minded leader.</p>
<h3>Set values in relation</h3>
<p>IT projects are quite often expensive and there are various reasons for it.
One of them being a future orientated market requires using latest high
technology equipment. IT guys are used to carrying around computers worth
a car or a bigger house. Thus IT guys are aware of the money that is being
spent on IT equipment.</p>
<p>As stated before, your IT guys may have special requirements, not only in terms
of working time, but also their choice of tools may be non standard.</p>
<p>Instead of denying to buy simple tools for your IT guys, include those costs into
the project budget. Also consider reading
<a href="https://en.wikipedia.org/wiki/Parkinson%27s_Law_of_Triviality">Parkinson's law of triviality</a>.</p>
<h2>See also</h2>
<p>The following resources may be of interest for you as well:</p>
<pre><code>* [The Hacker FAQ](http://www.seebs.net/faqs/hacker.html)
* [Managing Humans: Biting and Humorous Tales of a Software Engineering Manager](http://www.amazon.com/Managing-Humans-Humorous-Software-Engineering/dp/1430243147/ref=sr_1_1?ie=UTF8&qid=1366379157&sr=8-1)
* [How to Work with Software Engineers](https://www.kennethnorton.com/essays/how-to-work-with-software-engineers.html)
</code></pre>
<h2>More to come</h2>
<p>This article is work in progress and is being enhanced by input
from other IT professionals (thanks for all the great comments!).</p>
<p>If you want to contribute,
you can add a comment on <a href="https://news.ycombinator.com/item?id=5575419">Hackernews</a>,<br />
<a href="http://www.reddit.com/r/sysadmin/comments/1co3y5/a_guide_for_it_bosses/">reddit</a>
or <a href="https://www.nico.schottelius.org//about/">contact me directly</a>.</p>
How to backup The Piratebay and its contenthttps://www.nico.schottelius.org//blog/how-to-backup-the-piratebay-and-its-content/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>If you haven't seen <a href="http://watch.tpbafk.tv/">TPB - AFK</a>, it's a good time
to do so now.</p>
<h2>Introduction<sup>2</sup></h2>
<p>Imagine you want to support TPB and create a P2P backup of
TPB (and all of its torrents and the referenced content from the torrents).
This post describes some ideas to do that.</p>
<h2>Backup Destination</h2>
<p>For every backup you need a destination: some space to store the
content and some network bandwidth to pull and push the data.</p>
<p>In this post I assume that the backup destination is "a [big]
number of volunteers". I chose this one, because it is harder to
bring down a huge number of hosts than it is to bring down some
datacenters.</p>
<h2>Problem: You may not upload some kind of content</h2>
<p>Some countries have restrictions that disallow people to <strong>upload</strong>
some kind of content, but allow them to download it.</p>
<p>Some people may also not want to upload specific content.</p>
<p>To make life easier for volunteers, we may want to make them unaware
of which content they are backing up and providing for restore.</p>
<h2>Solution: Hide what the volunteer serves</h2>
<p>Assume that there is a torrent serving funny cat pics I have taken over the
last years. One of the volunteers likes dogs and hates cat and would thus
never serve the content of this torrent, if she know it contains cat pictures.</p>
<p>But: If she doesn't know - she doesn't care.</p>
<h2>Technical Solution</h2>
<p>So this volunteer, let's call her Alice, wants to offer 10 Gigabyte
of her hard disk, 1 Mbit/s of her upstream and 5 Mbit/s of her downstream
to backup data.
John wants to backup his cat pictures, which he is seeding.</p>
<p>Let's see how Alice can share the cat pictures, without knowing she does.</p>
<ul>
<li>Alice registers at a <strong>backup tracker</strong></li>
<li>John creates an <strong>encrypted torrent</strong> that contains
<strong> a private and public key pair
</strong> references to the data blocks, which are encryped using the above key
(like a normal torrent - just all the content is encrypted
with the public key which is included into the torrent)
<strong> references to the regular tracker(s)
</strong> and references to the backup tracker(s)</li>
<li>John also creates a <strong>plain torrent</strong> that does <strong>not</strong> contain the private and public key</li>
<li>John submits the <strong>encrypted torrent</strong> to a regular tracker -
everybody who wants to download the cat pictures (and decrypt them) can do so</li>
<li>John submits the <strong>plain torrent</strong> (withouth the keys) to the backup tracker</li>
<li>Alice modified torrent client picks up latest torrents from the backup tracker until
her space or network bandwidth exceeds</li>
<li>Alice cannot decrypt the content, as she does not have the private key</li>
</ul>
<h2>The result</h2>
<ul>
<li>Alice is happy, because she aids in supporting a more robust internet</li>
<li>John is happy, because his cat pictures are still available, although his computer may be offline</li>
<li>Bob is happy, because he can download the awesome cat pictures, although John is away</li>
</ul>
<h2>Future Work</h2>
<p>This is just a short and quick hack to do a backup of TPB.
There are probably many more variants available and further optimisations
could be done (for instance rewarding those serving backup with higher
download rate).</p>
I want a decentralised bugtrackerhttps://www.nico.schottelius.org//blog/i-want-a-decentralised-bugtracker/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>I have about 50 different website accounts for submitting and reading
bugs. I use about 4 different bugtrackers regulary
(bugzilla, launchpad, ditz, Debians reportbug).</p>
<p>And I do not want to create another account at a different site
again. No. What I want is different:</p>
<p>I want to have one tool, that</p>
<ul>
<li>allows me to track bugs of different projects with different systems
(similar to <a href="http://www.launchpad.net">launchpad</a>)</li>
<li>to mirror the information locally, including history
(like most <a href="http://en.wikipedia.org/wiki/Revision_control">version control systems (VCS)</a>)</li>
<li>to add or search a bug, while being offline
(like <a href="http://git-scm.com/">git</a>)</li>
<li>has a usable command line interface
(like <a href="http://www.zsh.org">zsh</a>)</li>
</ul>
<p>So in practise, it should look something like this:</p>
<pre><code>% tool
tool> init-bug-db /path/to/somewhere
tool> bug-source add project1 bugzilla://where-it-is
tool> bug-source add project2 ditz://where-it-is
tool> bug-source list
project1
project2
tool> bug-source show project2
* can submit
* url
tool> bug query project1 a-search-string
tool> bug add project1
[either ask for input or add them after the project name]
tool> bug pull project1 # get latest bugs
tool> bug push project1 # submit latest bug (-changes)
</code></pre>
<p>Of course all the commands should also be available on the command line as
options. If you have already created such a tool or are interested in creating
such a tool, do not hesitate to <a href="https://www.nico.schottelius.org//about/">contact</a> me!</p>
Ikiwiki has been slow, but it is fast now!https://www.nico.schottelius.org//blog/ikiwiki-has-been-slow/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>As I reported before, <a href="https://www.nico.schottelius.org//blog/ikiwiki-is-slow/">ikiwiki is slow</a>.
That's not true anymore: I received an e-mail from
<a href="http://kitenet.net/~joey/">Joey Hess</a> that contained a
<a href="http://git.schottelius.org/?p=netzseiten/www.nico.schottelius.org;a=commit;h=9ad0b7ba4763f3fe6773427326bcc32dbe332a01">patch to my website</a> and an answer to my problem:
He used a copy of
<a href="http://git.schottelius.org/?p=netzseiten/www.nico.schottelius.org;a=summary">the source of my website</a>
to reproduce the problems I had, which even took <strong><em>68 minutes</em></strong> on his computer!</p>
<p>So I grabbed the latest version of ikiwiki from git today and found out:</p>
<pre><code>ikiwiki exits with exit status 0, but does not produce a website!
</code></pre>
<p>I reported it to Joey on <a href="irc://irc.freenode.net/#ikiwiki">IRC</a>, who fixed
that some hours later in commit
<a href="http://git.ikiwiki.info/?p=ikiwiki;a=commit;h=587e0c3d21dfbde052e0fd71a7ed0e33e09e757f">587e0c3d21dfbde052e0fd71a7ed0e33e09e757f</a>. Now comes the interesting part:
I added some timing information to
<a href="http://git.schottelius.org/?p=nsbin;a=blob;f=ikiwikitest.sh;hb=HEAD">ikiwikitest.sh</a>,
which allows me to run the latest ikiwiki version, without installing it.
And here are the results:</p>
<pre><code>no-refresh, no changes: ~70 seconds
no-refresh, created one new file: ~70 seconds
--refresh, no changes: ~5 seconds
--refresh, changes to one file: ~10 seconds
--refresh, adding a new tag: ~10 seconds
</code></pre>
<p>The tests were done using ikiwiki <strong>3.20091017-22-gba682e0</strong>
(from git describe). To summarise:</p>
<ul>
<li>Updating my website using ikiwiki now takes less than 30 seconds.</li>
<li>Joey did a great job.</li>
<li>I owe him something.</li>
</ul>
<h2>I think I should send Joey some money.</h2>
<p>I want to emphasise this very much, because he's a
<a href="https://www.nico.schottelius.org//docs/the-term-foss/">FOSS developer</a>, like <a href="https://www.nico.schottelius.org//about/foss/">me</a>.
He has spent a lot of time developing and maintaining ikiwiki
and will probably continue to do so. Besides that he does a great
job in supporting his users.</p>
<pre><code>Everything for free.
</code></pre>
<p>I think just writing here about him and telling everybody that
he does a great job does not fill his stomach, nor gives him the
ability to enjoy a coffee in the early afternoon.</p>
<p>When you read this article, Joey will already know about it and
also knows, that I would like to have his
<a href="http://en.wikipedia.org/wiki/International_Bank_Account_Number">IBAN</a>,
to submit him some money.</p>
<p>I encourage you to do the same when you realise that you enjoy using
some software (or reading some documentation).</p>
Ikiwiki is slowhttps://www.nico.schottelius.org//blog/ikiwiki-is-slow/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>As you probably know, this <a href="https://www.nico.schottelius.org//about/websites/">website</a> is generated
by <a href="http://www.ikiwiki.info/">ikiwiki</a>, which does a pretty nice
job for people who like to write their websites without a fancy GUI,
but still do not want to write HTML or XHTML directly.</p>
<p>As I <a href="https://www.nico.schottelius.org//blog/migration-1-configs/">migrated</a>
<a href="https://www.nico.schottelius.org//blog/migration-2-freebsd-raid-monitoring-foss/">some</a>
<a href="https://www.nico.schottelius.org//blog/migration-3-ccollect/">parts</a>
of <a href="https://www.nico.schottelius.org//blog/cinit-migrated/">my other websites</a>
<a href="https://www.nico.schottelius.org//blog/migration-4-gpm/">into this one</a>,
I realised that ikiwiki becomes slower and slower.</p>
<p>A normal run with</p>
<pre><code>ikiwiki --setup ikiwiki.setup
</code></pre>
<p>takes about <strong><em>15</em></strong> minutes!
If I run it with</p>
<pre><code>ikiwiki --setup ikiwiki.setup --refresh
</code></pre>
<p>it still takes about <strong><em>1-2</em></strong> minutes. I clearly understand that
my site is not the smallest anymore (</p>
<pre><code>[16:38] ikn:nicoweb% find . -type f | wc -l
31015
[16:38] ikn:nicoweb% find . -type d | wc -l
3092
</code></pre>
<p>), but I still think that it should be possible to (re-)generate
it in less than 30 seconds. I know that the author,
<a href="http://kitenet.net/~joey/">Joey Hess</a>, is very open to feedback
and does a great job, but as I always regenerate the website before a public
release and that costs my time, it motivated me to write this article.</p>
<pre><code>Dear Joey, keep up the good work, but speedup ikiwiki, please!
</code></pre>
Introducing Simple Universal Time (SUT)https://www.nico.schottelius.org//blog/introducing-simple-universal-time/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>For some time I've been discussing this idea with some friends:
One simple time format that simplifies our lifes:
<strong>Simple Universal Time (SUT)</strong>.</p>
<p>Instead of relying on time zones, it simplifies life by
reducing life to the max: It skips time zones.
Instead of using 24 hours, 60 minutes and 60 seconds
scheme, it is a metric centric time: Simple Universal
Time knows about 10 hours a day, with 100 minutes
and 100 seconds.</p>
<p>Thanks to <strong>Stefanos Kornilios Mitsis Poiitidis</strong>
you can see the
<a href="http://telmich.github.io/sut">current time in SUT</a>.
The <a href="https://www.nico.schottelius.org//docs/sut/">Simple Universal Time page</a> shows in detail
how it works.</p>
<p>Make your life easier by switching to SUT - your brain and
your phone partners will be thankful!</p>
Linux distribution independent iptables setup powered by cdist sponsored by panterhttps://www.nico.schottelius.org//blog/iptables-distribution-independent-powered-by-cdist-sponsored-by-panter/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>As a sysadmin, you may have encountered several different
Linux distributions in your life. You may also have found
out that configuring <a href="http://www.netfilter.org/">iptables</a>
permanently differs from distribution to distribution.</p>
<p>Fortunately you can stop caring about this problem:
In the <a href="https://www.nico.schottelius.org//software/cdist/">cdist</a> source tree you find
two new types to handle this problem universally, independent
of the Linux distribution.</p>
<p>These types are a result of work done at <a href="http://www.ungleich.ch">ungleich</a>
for our customer <a href="http://www.panter.ch">panter</a>. Panter does not only
allow us to publish the code freely, but also encourages
us to do so - many thanks!</p>
<h2>How to use it</h2>
<p>First of all, ensure you have cdist installed on your source host.
Then create the directory ~/.cdist/manifest and then the file
~/.cdist/manifest/init with the following content:</p>
<pre><code>case "$__target_host" in
insert-your-target-host-name-here)
__iptables_rule policy-in --rule "-P INPUT DROP"
__iptables_rule policy-out --rule "-P OUTPUT ACCEPT"
__iptables_rule policy-fwd --rule "-P FORWARD DROP"
__iptables_rule established --rule "-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT"
__iptables_rule http --rule "-A INPUT -p tcp --dport 80 -j ACCEPT"
__iptables_rule ssh --rule "-A INPUT -p tcp --dport 22 -j ACCEPT"
;;
esac
</code></pre>
<p>Running</p>
<pre><code>% cdist config insert-your-target-host-name-here
</code></pre>
<p>applies the configuration. That's it, really! Log on to your
server and do <strong><em>iptables -L -n</em></strong> to see the result!</p>
<h2>What did cdist do?</h2>
<p>The cdist types __iptables_rule and __iptables_apply
take care of the necessary steps. In detail they</p>
<ul>
<li>create the necessary files and directory</li>
<li>create and setup an init-script that loads / unloads the rules</li>
<li>apply the rules</li>
</ul>
KVM Virtual Machines managed with cdist and sexy @ local.chhttps://www.nico.schottelius.org//blog/kvm-vms-with-cdist-at-local.ch/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>This article describes the KVM setup of <a href="http://www.local.ch">local.ch</a>, which is
managed by <a href="https://www.nico.schottelius.org//software/sexy/">sexy</a> and configured by <span class="createlink">cdist</span>.</p>
<p>If you haven't so far, you may want to have a look at the
<a href="https://www.nico.schottelius.org//blog/sexy-and-cdist-at-local.ch/">Sexy and cdist @ local.ch</a>
article before continuing to read this one.</p>
<h2>KVM Host configuration</h2>
<p>The KVM hosts are Dell R815 with CentOS 6.x installed. Why Dell? Because they
offered a good price/value combination. Why CentOS? Historical
reasons. The hosts got a minimal set of BIOS tuning to support the VM performance:</p>
<ul>
<li>Enable the usual virtualisation flags (don't forget to enable the IOMMU!)</li>
<li>Change the power profile to <strong>Maximum Perforamnce</strong></li>
</ul>
<p>Furthermore, as the CentOS kernel is pretty old (2.6.32-279) and
conservatively configured, the kernel needs the following
command line option to enable the IOMMU:</p>
<pre><code>amd_iommu=on
</code></pre>
<p>Not enabling this option degrades the performance.
In our case, enabling it reduced the latency of the
application running in the VM by a factor of 10.</p>
<p>One big design consideration of the the KVM setup at local.ch is to make the
KVM hosts as independent as possible and sensibly fault tolerant. That said,
VMs are stored on local storage and hosts are always redundantly connected
to two switches use <a href="https://en.wikipedia.org/wiki/Link_aggregation">LACP</a>.</p>
<h2>KVM Host Network Configuration</h2>
<p><a href="https://www.nico.schottelius.org//blog/kvm-vms-with-cdist-at-local.ch/kvm-setup-local.ch-overview.png"><img src="https://www.nico.schottelius.org//blog/kvm-vms-with-cdist-at-local.ch/kvm-setup-local.ch-overview.png" width="770" height="620" alt="Overview of KVM setup at local.ch" class="img" /></a></p>
<p>As can be seen in the picture above, every KVM host is connected to two
<strong>10G Arista switches (7050T-52-R)</strong> using LACP. Besides being capable
of running 10G, the Arista switches are actually pretty neat for the Unix geek,
because they are Linux based with a
<a href="https://en.wikipedia.org/wiki/Field-programmable_gate_array">FPGA</a>
attached. Furthermore you can easily
gain access to a shell by typing <strong>enable</strong> followed by <strong>bash</strong>.</p>
<p>The Arista switches are connected together with 2x 10G links, over which LACP+MLAG
is configured. This gives us the ability to connect every KVM host with LACP to two
<strong>different</strong> switches: They use MLAG to synchronise their LACP states.</p>
<p>On the KVM host, the network is configured as follows:</p>
<p>The dual Port 10G card (Intel Corporation 82599EB) is bonded together into bond0.</p>
<pre><code>[root@kvm-hw-inx01 network-scripts]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 0
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: slow
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 3
Number of ports: 2
Actor Key: 33
Partner Key: 30
Partner Mac Address: 02:1c:73:1b:f5:b2
Slave Interface: eth4
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 68:05:ca:0b:5b:6a
Aggregator ID: 3
Slave queue ID: 0
Slave Interface: eth5
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 68:05:ca:0b:5b:6b
Aggregator ID: 3
Slave queue ID: 0
</code></pre>
<p>The following configuration is used to create the bond0 device:</p>
<pre><code>[root@kvm-hw-inx01 network-scripts]# cat ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS="mode=802.3ad"
ONBOOT=yes
MTU=9000
[root@kvm-hw-inx01 sysconfig]# cat network-scripts/ifcfg-eth4
DEVICE="eth4"
NM_CONTROLLED="yes"
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
[root@kvm-hw-inx01 sysconfig]# cat network-scripts/ifcfg-eth5
DEVICE="eth5"
NM_CONTROLLED="yes"
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
</code></pre>
<p>The MTU of the 10G cards has been set to 9000, as the Arista switches support
<a href="https://en.wikipedia.org/wiki/Jumbo_frame">Jumbo Frames</a>.</p>
<p>Every VM is attached to two different networks:</p>
<ul>
<li>PZ: presentation zone (for general traffic) (10.18x.0.0/22 network)</li>
<li>FZ: filer zone (for NFS and database traffic) (10.18x.64.0/22 network)</li>
</ul>
<p>Both networks are seperated using the VLAN tags 2 (pz) and 3 (fz), which result
in <strong>bond0.2</strong> and <strong>bond0.3</strong>:</p>
<pre><code>[root@kvm-hw-inx01 network-scripts]# ip l | grep bond
6: eth4: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9000 qdisc mq master bond0 state UP qlen 1000
7: eth5: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 9000 qdisc mq master bond0 state UP qlen 1000
8: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP
139: bond0.2@bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP
140: bond0.3@bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP
</code></pre>
<p>To keep things simple, the two vlan tagged (bonded) interfaces are added to a bridge each,
to which the VMs are attached later on. The configuration looks like this:</p>
<pre><code>[root@kvm-hw-inx01 network-scripts]# cat ifcfg-bond0.2
DEVICE="bond0.2"
ONBOOT=yes
VLAN=yes
BRIDGE=brpz
[root@kvm-hw-inx01 network-scripts]# cat ifcfg-brpz
DEVICE=brpz
TYPE=Bridge
ONBOOT=yes
DELAY=0
NM_CONTROLLED=no
MTU=9000
</code></pre>
<p>This is how a bridge looks like in production (with about 70 lines stripped):</p>
<pre><code>[root@kvm-hw-inx01 network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
brfz 8000.024db29ca91f no bond0.3
tap13
tap73
[...]
brpz 8000.02f6742800b2 no bond0.2
tap0
tap1
[...]
</code></pre>
<p>Summarised, the network configuration of a KVM host looks like this:</p>
<pre><code>arista1 arista2
| |
[eth4 + eth5] -> bond0
|
|
/ \
bond0.2 bond0.3
/ \
brpz brfz
\ /
tap1 tap2
\ /
VM
</code></pre>
<h2>VM configuration</h2>
<p>The VM configuration can be found below <strong>/opt/local.ch/sys/kvm</strong>
on every KVM host. Every VM is stored below
<strong>/opt/local.ch/sys/kvm/vm/</strong> and contains the following
files:</p>
<pre><code>[root@kvm-hw-inx03 jira-vm-inx01.intra.local.ch]# ls
monitor pid start start-on-boot system-disk vnc
</code></pre>
<ul>
<li>monitor: socket to the monitor from KVM</li>
<li>pid: the pid of the VM</li>
<li>start: the script to start the VM (see below for an example)</li>
<li>start-on-boot: if this file exists, the VM will be started on boot</li>
<li>system-disk: the qcow2 image of the system disk</li>
<li>vnc: socket to the screen of the VM</li>
</ul>
<p>With the exception of monitor, pid and vnc are all files generated by cdist.
The start script of a VM looks like this:</p>
<pre><code>[root@kvm-hw-inx03 jira-vm-inx01.intra.local.ch]# cat start
#!/bin/sh
# Generated shell script - do not modify
#
/usr/libexec/qemu-kvm \
-name jira-vm-inx01.intra.local.ch \
-enable-kvm \
-m 8192 \
-drive file=/opt/local.ch/sys/kvm/vm/jira-vm-inx01.intra.local.ch/system-disk,if=virtio \
-vnc unix:/opt/local.ch/sys/kvm/vm/jira-vm-inx01.intra.local.ch/vnc \
-cpu host \
-boot order=nc \
-pidfile "/opt/local.ch/sys/kvm/vm/jira-vm-inx01.intra.local.ch/pid" \
-monitor "unix:/opt/local.ch/sys/kvm/vm/jira-vm-inx01.intra.local.ch/monitor,server,nowait" \
-net nic,macaddr=00:16:3e:02:00:ab,model=virtio,vlan=200 \
-net tap,script=/opt/local.ch/sys/kvm/bin/ifup-pz,downscript=/opt/local.ch/sys/kvm/bin/ifdown,vlan=200 \
-net nic,macaddr=00:16:3e:02:00:ac,model=virtio,vlan=300 \
-net tap,script=/opt/local.ch/sys/kvm/bin/ifup-fz,downscript=/opt/local.ch/sys/kvm/bin/ifdown,vlan=300 \
-smp 4
</code></pre>
<p>Most parameter values depend on output of sexy,
which uses the cdist type <strong>__localch_kvm_vm</strong>,
which in turn assembles this start script.
The above script may be useful for one or more of my readers,
as it includes a lot of tuning we have done to KVM.</p>
<h2>Automatic startup of VMs</h2>
<p>The virtual machines are brought up by an init script located at
<strong><em>/etc/init.d/kvm-vms</em></strong>. As every VM contains its own startup script
and is marked whether it should be started at boot, the init script
is pretty simple:</p>
<pre><code>basedir=/opt/local.ch/sys/kvm/vm
broken_lock_file_for_centos=/var/lock/subsys/kvm-vms
case "$1" in
start)
cd "$basedir"
# Specific VM given
if [ "$2" ]; then
vm_list=$2
else
vm_list=$(ls)
fi
for vm in $vm_list; do
vm_base_dir="$basedir/$vm"
start_script="$vm_base_dir/start"
# Skip start of machines which should not start
if [ ! -f "$vm/start-on-boot" ]; then
continue
fi
echo "Starting VM $vm ..."
logger -t kvm-vms "Starting VM $vm ..."
screen -d -m -S "$vm" "$start_script"
done
touch "$broken_lock_file_for_centos"
;;
</code></pre>
<p>As you can see, every VM is started in its own
<a href="http://www.gnu.org/software/screen/">screen</a> - so if screen decides to
hang up, only one VM is affected.
Furthermore screen supports only a limited number of windows it can server.
The process listing for a running virtual machine looks like this:</p>
<pre><code>root 64611 0.0 0.0 118840 852 ? Ss Mar11 0:00 SCREEN -d -m -S binarypool-vm-inx02.intra.local.ch /opt/local.ch/sys/kvm/vm/binarypool-vm-inx02.intra.local.ch/start
root 64613 0.0 0.0 106092 1180 pts/22 Ss+ Mar11 0:00 /bin/sh /opt/local.ch/sys/kvm/vm/binarypool-vm-inx02.intra.local.ch/start
root 64614 2.9 2.2 9106828 5819748 pts/22 Sl+ Mar11 5221:41 /usr/libexec/qemu-kvm -name binarypool-vm-inx02.intra.local.ch -enable-kvm -m 8192 -drive file=/opt/local.ch/sys/kvm/vm/binarypool-vm-inx02.intra.local.ch/system-disk,if=virtio -vnc unix:/opt/local.ch/sys/kvm/vm/binarypool-vm-inx02.intra.local.ch/vnc -cpu host -boot order=nc -pidfile /opt/local.ch/sys/kvm/vm/binarypool-vm-inx02.intra.local.ch/pid -monitor unix:/opt/local.ch/sys/kvm/vm/binarypool-vm-inx02.intra.local.ch/monitor,server,nowait -net nic,macaddr=00:16:3e:02:00:7f,model=virtio,vlan=200 -net tap,script=/opt/local.ch/sys/kvm/bin/ifup-pz,downscript=/opt/local.ch/sys/kvm/bin/ifdown,vlan=200 -net nic,macaddr=00:16:3e:02:00:80,model=virtio,vlan=300 -net tap,script=/opt/local.ch/sys/kvm/bin/ifup-fz,downscript=/opt/local.ch/sys/kvm/bin/ifdown,vlan=300 -smp 4
</code></pre>
<h2>Common Tasks</h2>
<p>The following sections show you how to do regular maintenance
tasks on the KVM infrastructure.</p>
<h3>Create a VM</h3>
<p>VMs can easily be created using the script <strong>vm/create-vm</strong> from the sysadmin-logs repository
(local.ch internally), which looks like this:</p>
<pre><code>sexy host add --type vm $fqdn
sexy host vm-host-set --vm-host $vmhost $fqdn
sexy host disk-add --size $disksize $fqdn
sexy host memory-set --memory $memory $fqdn
sexy host cores-set --cores $cores $fqdn
mac_pz=$(sexy mac generate)
mac_fz=$(sexy mac generate)
sexy host nic-add $fqdn -m $mac_pz -n pz
sexy host nic-add $fqdn -m $mac_fz -n fz
sexy net-ipv4 host-add "$net_pz" -m "$mac_pz" -f "$fqdn"
sexy net-ipv4 host-add "$net_fz" -m "$mac_fz" -f "$fz_fqdn"
echo "Updating git / github ..."
cd ~/.sexy
git add db
git commit -m "Added host $fqdn"
git pull
git push
# Apply changes: first network, so dhcp & dns are ok, then create VM
cat << eof
Todo for apply:
sexy net-ipv4 apply --all
sexy host apply --all
Start VM on $vmhost: ssh $vmhost /opt/local.ch/sys/kvm/vm/$fqdn/start
eof
</code></pre>
<h3>Delete a VM</h3>
<p>Run the script <strong>remove-host</strong>, which essentially does the following:</p>
<ul>
<li>Remove various monitoring / backup configurations</li>
<li>Detect if it is a VM, if so</li>
<li>Stop it</li>
<li>Remove it from the host</li>
<li>Add mac address to the list of free mac addresses</li>
<li>Delete host from the networks</li>
<li>Delete host from sexy database</li>
</ul>
<h3>Move VM to another server</h3>
<p>To move one VM to another host, the following steps are necessary:</p>
<ul>
<li>sexy host vm-host-set ... # to new host</li>
<li>stop vm</li>
<li>scp/rsync directory from old host to new host</li>
<li>sexy host apply --all # record db change</li>
<li>start vm on new host</li>
</ul>
Linux Virtual Machine Overviewhttps://www.nico.schottelius.org//docs/linux-virtual-machines/2016-02-25T13:34:24Z2015-02-03T14:47:26Z
<p>This document is <strong><em>WORK IN PROGRESS</em></strong></p>
<h2>Introduction</h2>
<p>This article tries to summarise Linux Virtual Machine
methods and is in its early stage. It does not focus
on different types of hypervisors, but more on the
issues and features you get with each hypervisor.</p>
<h3>Host Kernel</h3>
<p>Some supervisors need their own (modified Linux) kernel
to operate, whereas others work with any Linux kernel.
Though some of them again need some configurations
to be turned on in the stock kernel.</p>
<h3>VM Installation</h3>
<p>Depending on the hypervisor, there are different requirements
and methods for the installation:</p>
<ul>
<li>Installation can be done within the VM for completly isolated machines</li>
<li>Installation must be done outside / on the host for systems without own kernel</li>
</ul>
<p>Some hypervisors can boot from the network, whereas others just
create a very lightweight isolation and boot an installed system
only.</p>
<h3>Guest OS changes</h3>
<p>Some hypervisors require changes to the virtual machines, to be able
to run successfully. Others allow a original OS version to be
installed.</p>
<h3>Network configuration</h3>
<p>Whether the VM is attached to a bridge, a tun/tap device, treated
as a normal process, there may be a lot of different configurations.
Furthermore, firewall (masquerade/nat) configurations may be necessary.</p>
<p>Additionally, some of the hypervisors support dynamic allocation
of mac or even ip addresses.</p>
<h3>Templates</h3>
<p>Some hypervisors support reusage of installations.</p>
<h3>Management</h3>
<p>Most hypervisors contain some minor collection of utilities
to manage virtual machines. Some libraries / frameworks
try to integrate those utilities, to abstract the different
implementations.</p>
<p>Typical issues are:</p>
<ul>
<li>Autostart machines on startup / autostop on shutdown</li>
<li>Creation of new VMs / including template handling</li>
<li>Manual start/stop of VMs</li>
<li>Listing of running / existing VMs</li>
</ul>
<h3>Automated usage</h3>
<p>Especially interesting for a sysadmin is, how easy a system can
be automated, which steps need to be taken to get a new image
or copy of an existing one. This aspect is one focus of this
document.</p>
<h2>Hypervisors</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th> Host Kernel</th>
<th> Guest OS changes</th>
<th> Installation</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="http://wiki.qemu.org/">QEMU</a></td>
<td> Original</td>
<td> no</td>
<td> inside</td>
</tr>
<tr>
<td><a href="http://www.linux-kvm.org/">KVM</a></td>
<td> Original w/KVM</td>
<td> no</td>
<td> inside</td>
</tr>
<tr>
<td><a href="http://lguest.ozlabs.org/">Lguest</a></td>
<td> Original w/Lguest</td>
<td> ?</td>
<td> ?</td>
</tr>
<tr>
<td><a href="http://lxc.sourceforge.net/">Linux Containers</a></td>
<td> Original w/Containers</td>
<td> yes</td>
<td> outside</td>
</tr>
<tr>
<td><a href="http://linux-vserver.org">Linux VServer</a></td>
<td> Own</td>
<td> ?</td>
<td> ?</td>
</tr>
<tr>
<td><a href="http://user-mode-linux.sourceforge.net/">User Mode Linux</a></td>
<td> Original</td>
<td> ?</td>
<td> outside</td>
</tr>
<tr>
<td><a href="http://wiki.openvz.org/Main_Page">OpenVZ</a></td>
<td> Own</td>
<td> ?</td>
<td> ?</td>
</tr>
<tr>
<td><a href="http://www.virtualbox.org/">Virtualbox</a></td>
<td> Original+Modules</td>
<td> no</td>
<td> inside</td>
</tr>
<tr>
<td><a href="http://www.vmware.com/">VMWare</a></td>
<td> Original+Modules / Own</td>
<td> no</td>
<td> inside</td>
</tr>
<tr>
<td><a href="http://www.xen.org/">Xen</a></td>
<td> Own</td>
<td> ?</td>
<td> ?</td>
</tr>
</tbody>
</table>
<h3>lxc</h3>
<p>Some hints on lxc:</p>
<ul>
<li>Helper scripts existent (lxc-debian, lxc-fedora, ...)</li>
<li>adjust init. change dev. do not run udev (why?)</li>
<li>Root open in the filesystem</li>
<li>No network specified = all from host accessible!</li>
</ul>
<h2>Management Libraries / Frameworks</h2>
<table>
<thead>
<tr>
<th>Name</th>
<th> Hints</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="2">Ganetti</td>
</tr>
<tr>
<td colspan="2">Libvirt</td>
</tr>
</tbody>
</table>
<h2>Poor man's management</h2>
<p>This sections describes typical vm management tasks, done with
easy commands.</p>
<h3>Creating a new (sparse) image file</h3>
<pre><code>dd if=/dev/zero of=<filename> bs=1 count=0 seek=<gigabytes>G
</code></pre>
Correcting the multimedia keys mapping on the MacBook Air 4,2https://www.nico.schottelius.org//blog/macbook-air-42-correcting-multimedia-key-mapping-and-status/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>The mapping of the multimedia keys of the MacBook Air 4,2 (probably earlier
ones as well) was
<a href="https://lkml.org/lkml/2011/10/17/326">slightly off by one and had the Eject key mapped</a>,
although the MBA does not have an optical drive.</p>
<h2>Two trees available with fixes</h2>
<p>The patch against <a href="http://git.kernel.org/?p=linux/kernel/git/jikos/hid.git;a=summary">Jiris for-next branch of the hid-tree</a> can be found
in <a href="http://git.schottelius.org/?p=foreign/linux-jiri-hid;a=summary">my <strong>mba42-fixes</strong> branch</a>.</p>
<p>The second tree is the one I use to run with the
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-touchpad-keyboard-correct-screen-resolution/">correct keyboard mapping and screen resolultion patches</a>, which contains the change in the
<a href="http://git.schottelius.org/?p=foreign/linux-keith-jiri-mba;a=summary"><strong>keyboardmappingfix</strong> branch</a>.</p>
<h2>General status / todo list</h2>
<p>The notebook is pretty good usable with the current patches applied. There are
some gotchas, though, which I'll try to fix in the next time:</p>
<ul>
<li><a href="https://lkml.org/lkml/2011/10/18/145">network process hang issue in the <strong>brcmsmac</strong> driver</a></li>
<li>The mouse pointer does not move when the mouse button is pressed (probably a configuration problem of the synaptics touchpad)</li>
<li>Brightness is not adjusted in xorg when pressing FN-F1 (but can be done via <strong>echo VALUE > /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness</strong>)</li>
<li>Display is not switched off when lid is closed (acpi reports the lid event, though) (probably related to the previous problem)</li>
<li>Incorrect representation when using a Mini-Display-Port to HDMI adapter on external screen</li>
<li>No output on external monitor when using a Mini-Display-Port to DVI adapter</li>
<li>I'm not sure how to adjust the keyboard backlight correctly:</li>
<li>Correct map the ambient light values (0-255) to the keyboard light brightness (0-255)</li>
<li> Straight brightness=255-ambient_light does not look good</li>
<li>Probably off, when the lid is closed</li>
<li>See <a href="http://git.schottelius.org/?p=kbsd;a=summary">kbsd</a> for an early idea of what can
be done</li>
</ul>
Status of Linux on the MacBook Air 4,2https://www.nico.schottelius.org//blog/macbook-air-42-linux-status-report/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>Following up my
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-correcting-multimedia-key-mapping-and-status/">recent</a>
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-touchpad-keyboard-correct-screen-resolution/">posts</a>
<a href="https://www.nico.schottelius.org//blog/macbook-air-42-archlinux/">about the MacBook Air 4,2</a> with Linux,
here's a status report of what works and what is still missing.</p>
<p>This report is based on <strong><em>Linux 3.2.0-rc5</em></strong>.</p>
<h2>Screen Resolution and external screens</h2>
<p>Great news, Linus' tree merged patches necessary for full screen resolution
and external screens work as well:</p>
<pre><code>Screen 0: minimum 320 x 200, current 2560 x 2340, maximum 8192 x 8192
eDP1 connected 1440x900+0+1440 (normal left inverted right x axis y axis) 30mm x 179mm
1440x900 60.0*+
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected 2560x1440+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
HDMI2 disconnected (normal left inverted right x axis y axis)
HDMI3 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP3 disconnected (normal left inverted right x axis y axis)
2560x1440 (0xb2) 241.5MHz
h: width 2560 start 2608 end 2640 total 2720 skew 0 clock 88.8KHz
v: height 1440 start 1443 end 1448 total 1481 clock 60.0Hz
</code></pre>
<p>An external monitor was tested via Mini-DP-to-HDMI adapter and Mini-DP-to-DVI
adapter with resolutions from 1920x1080 (24" Samsung) up to 2560x1440 (27" Dell).</p>
<h2>Keyboard/Multimedia Keys (FN+F1..F12)</h2>
<p>With the current kernel all multimedia keys match correctly.</p>
<h2>Keyboard/Backlight</h2>
<p>Keyboard backlight can be controlled using
<a href="http://git.schottelius.org/?p=kbsd;a=summary">kbsd</a>. This works fine,
but it could be improved to react on the light sensor.
The question simply is, how to map the light sensor values to keyboard
backlight settings. If you've got a good table or function to apply,
drop me a mail, so I can include it.</p>
<h2>Touchpad</h2>
<p>The touchpad works almost completly, the only
problem left is that
the mouse pointer does not move when the mouse button is pressed.
This may be a configuration problem of the synaptics touchpad, but
I haven't found a fix for this.</p>
<h2>Screen backlight</h2>
<p>The nice utility <strong>xbacklight</strong> still does not work,</p>
<pre><code>[11:14] brief:~% xbacklight
No outputs have backlight property
</code></pre>
<p>but dimming works manually via echo:</p>
<pre><code>[21:15] brief:~# echo 2200 > /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/intel_backlight/brightness
</code></pre>
<p>And the display is not switched off when lid is closed.
ACPI reports the lid event, though. Probably a related problem.</p>
<h2>WLAN / brcmsmac / Broadcom BCM43224</h2>
<p>This used to be fixed in my own patched kernel, but since I've got
a new macbook air 4,2, it does suffers the
<a href="https://lkml.org/lkml/2011/10/18/145">network process hang issue in the <strong>brcmsmac</strong> driver</a>
again. Iterating over several different kernels did not yet fix this problem.</p>
<p>Though interestingly after 2 suspend and resume cycles it works, until the 4th of 5th
suspend cycle, at which all network processes hang again, if the connection to the
AP is lost.</p>
<h2>Current problem summary</h2>
<ul>
<li>Clicking and moving the mouse pointer does not work</li>
<li>xbacklight does not recognise backlight controls</li>
<li>Display is not switched off on lid close</li>
<li>Network processes hang when the connection to the AP is lost/cannot be established</li>
</ul>
MacBook Air 4,2: Xorg/Synaptics touchpad click and move fixedhttps://www.nico.schottelius.org//blog/macbook-air-42-touchpad-click-and-move-fixed/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>For some time when you pressed button 1 on the Mac Book Air 4,2 under Linux/Xorg
and moved the finger (classic <strong>select</strong> something on the screen behaviour),
a button 3 (right click) even was emitted.</p>
<h2>Current status</h2>
<p>As reported on <a href="https://bugs.freedesktop.org/show_bug.cgi?id=45396">bugzilla</a>,
it seems Peter Hutterer
<a href="http://cgit.freedesktop.org/xorg/driver/xf86-input-synaptics/commit/?id=6c457c0c61a0834361f45a073148db7b4c9be40b">merged the relevant fixes</a>
into the master tree, which were submitted by
Chase Douglas in the patches
<a href="http://patchwork.freedesktop.org/patch/9210/">9210</a> until
<a href="http://patchwork.freedesktop.org/patch/9219/">9219</a>
(<a href="http://patchwork.freedesktop.org/patch/9214/">9214</a> and
<a href="http://patchwork.freedesktop.org/patch/9215/">9215</a> seem
to be the relevant ones)</p>
<p>I haven't tested it so far, but the commits around the merge look good!</p>
Getting the keyboard, touchpad and correct screen resolution working on the MacBook Air 4,2https://www.nico.schottelius.org//blog/macbook-air-42-touchpad-keyboard-correct-screen-resolution/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>If you are running Linux on the MacBook Air 4,2 and have any of the following problems,
this article is for you:</p>
<ul>
<li>FN key not working / modifying keys</li>
<li>Touchpad not working in Multitouch mode</li>
<li>Resolution is 1280x800 instead of 1440x900</li>
</ul>
<h2>Touchpad and Keyboard</h2>
<p>In Jiris <a href="http://git.kernel.org/?p=linux/kernel/git/jikos/hid.git;a=summary">for-next branch</a>
of the hid tree the keyboard and touchpad issues have been solved.</p>
<h2>Screen resolution</h2>
<p>Keith fixed the screen resolution issues in his tree that you can retrieve:</p>
<pre><code>git clone -b fix-edp-vdd-power git://people.freedesktop.org/~keithp/linux
</code></pre>
<h2>Getting both fixes</h2>
<p>Until the changes are merged into Linus' tree, I've setup a tree that merged the
two previous ones:</p>
<ul>
<li><a href="http://git.schottelius.org/?p=foreign/linux-keith-jiri-mba;a=summary">gitweb</a></li>
<li>git://git.schottelius.org/foreign/linux-keith-jiri-mba</li>
</ul>
<p>I've used the config.gz from Archlinux as base for .config and added the
new config options, which resulted in a
<a href="https://www.nico.schottelius.org//tags/net/dot-config">working .config for the MacBook Air</a>.</p>
Maybe systemd is not the best ideahttps://www.nico.schottelius.org//blog/maybe-systemd-is-not-the-best-idea/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<pre><code>[189135.535385] systemd[515]: segfault at 7f75cc68a160 ip 00007f75cf24782d sp 00007fff0ad54040 error 4 in systemd[7f75cf20f000+123000]
</code></pre>
<p>Maybe, an init system should be small and robust and focus on
<strong><em>initialising</em></strong> the operating system.</p>
<p>I have plans for a change - just follow this blog for updates.</p>
Migrated nico.schotteli.ushttps://www.nico.schottelius.org//blog/migrated-nico.schotteli.us/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>The content of <strong>nico.schotteli.us</strong> has been migrated into this site.</p>
<p>If you are missing any software or documentation that used
to be on <strong>nico.schotteli.us</strong>, do not hesitate to contact me.</p>
Migrated tech.schottelius.orghttps://www.nico.schottelius.org//blog/migrated-tech.schottelius.org/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>The small and mostly static site
<strong>tech.schottelius.org</strong> has been merged into
this site at <a href="https://www.nico.schottelius.org//about/computers/">computers</a>.</p>
Migrated unix.schottelius.orghttps://www.nico.schottelius.org//blog/migrated-unix.schottelius.org/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>All bigger projects of <strong>unix.schottelius.org</strong> have been
moved to this site already. With <a href="https://www.nico.schottelius.org//software/cconf/">cconf</a>, the
last "interesting" bits have been moved.
I did not migrate decr-f, because it needs a major cleanup
anyway.</p>
<p>If you are missing any software or documentation that used
to be on <strong>unix.schottelius.org</strong> or
<strong>linux.schottelius.org</strong>, do not hesitate to contact me.</p>
How to change the tempdir for Mozilla (general) and conkerorhttps://www.nico.schottelius.org//blog/mozilla-conkeror-change-tempdir/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>Some weeks ago I got a good hint from
<a href="https://www.nico.schottelius.org//dokumentationen/axel-stefan-beckert/">Axel Stefan Beckert</a>, to try <a href="http://conkeror.org/">conkeror</a>
as an alternative for the
<a href="http://www.mozilla.com/en-US/firefox/firefox.html">Firefox</a> browser.</p>
<p>Although I am not used to the <a href="http://en.wikipedia.org/wiki/Emacs">emacs</a>
shortcuts, it is very good usable with the keyboard only.</p>
<p>In the last few days I have been missing one important feature,
one of the most important features of a browser:</p>
<pre><code>to be able to edit a textbox with an external editor
</code></pre>
<p>I often edit large wiki pages and rearange them, which is a pain
without a real editor.</p>
<p>Conkeror supports <a href="http://conkeror.org/ExternalEditing">external editing</a>,
but defaults to</p>
<ul>
<li>$VISUAL</li>
<li>$EDITOR</li>
<li>or emacs</li>
</ul>
<p>None of the is usable for me, because <strong>$VISUAL</strong> and <strong>$EDITOR</strong>
are set to <a href="http://www.vim.org/">vim</a> and vim requires a terminal.</p>
<p>After I was told on <a href="irc://irc.freenode.org/#conkeror">#conkeror</a>
to modify <strong><em>~/.conkerorrc/init.js</em></strong> to include</p>
<pre><code>editor_shell_command = "urxvt -e vim";
</code></pre>
<p>it worked like a charm (besides debugging it for some others days,
until I found out that there was always one instance of conkeror
running, so it never re-read the configuration file). I can now
edit textboxes in conkeror with vim!</p>
<p>But then I noticed, that conkeror creates a temporary file below
<strong><em>/tmp</em></strong>, which I do not like, because all my data should be
put on my <a href="http://code.google.com/p/cryptsetup/">encrypted home directory</a>,
not on the unencrypted root partition.</p>
<p>So I started to search for a configuration variable in the
<a>configuration window</a>, but did not find any hint.</p>
<p>As I am running conkeror from the git source, I began to dig through it
and started in <strong>modules/external-editor.js</strong>, where I found the
function <strong>open_with_external_editor()</strong>:</p>
<pre><code>76 function open_with_external_editor (lspec) {
77 keywords(arguments);
78 let [file, temp] = yield download_as_temporary(lspec);
79 yield open_file_with_external_editor(file, $line = arguments.$line, $temporary = temp);
80 }
</code></pre>
<p>Ok, what is <strong>download_as_temporary()</strong> doing? The file <strong>modules/save.js</strong> helped
me:</p>
<pre><code>228 function download_as_temporary (lspec) {
243 var file = get_temporary_file(suggest_file_name(lspec));
</code></pre>
<p>Well, well, so what's about the <strong>get_temporary_file()</strong> function? The file
<strong>modules/utils.js</strong> contains it:</p>
<pre><code>799 function get_temporary_file (name) {
800 if (name == null)
801 name = "temp.txt";
802 var file = file_locator.get("TmpD", Ci.nsIFile);
803 file.append(name);
804 // Create the file now to ensure that no exploits are possible
805 file.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0600);
806 return file;
807 }
</code></pre>
<p>Searching for <strong>Ci.nsIFile</strong> in conkerors source did not reveal
many information, so I got back to my <strong>seoc</strong> (search engine of choice) and
found some hints on the <a href="https://developer.mozilla.org">mozilla developer center</a>
about <a href="https://developer.mozilla.org/en/nsIFile">nsIFile</a> and
<a href="https://developer.mozilla.org/en/Code_snippets/File_I%2F%2FO">TmpD</a>
and a reference to the IRC channel <a href="irc://irc.mozilla.org/extdev">#extdev</a>.</p>
<p>After I described my problem in that IRC channel,
<a href="http://www.kaply.com/weblog/about/">Michael Kaply</a>
told me the answer to the question
"<a href="http://mxr.mozilla.org/mozilla1.9.2/source/xpcom/io/SpecialSystemDirectory.cpp#568">What defines or where is the TmpD variable defined?</a>":</p>
<p>The temporary directory is OS specific and in my case (unix) defined by the
environment variables</p>
<ul>
<li>$TMPDIR</li>
<li>$TMP</li>
<li>$TEMP (tried in that order)</li>
</ul>
<p>After I set</p>
<pre><code>TMP=~/.tmp
</code></pre>
<p>and restarted conkeror, pressed C-i in a textbox, the file is eventually saved
in the temporary directory <strong>.tmp</strong> in my home directory!</p>
My photo publishing approachhttps://www.nico.schottelius.org//blog/my-photo-publishing-approach/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>During a discussion about image management software like
<a href="http://live.gnome.org/gthumb">gthumb</a>,
<a href="http://f-spot.org/">f-spot</a> or <a href="http://yorba.org/shotwell/">shotwell</a>,
we came up with the question how far a management software should go.
Should it provide basic image manipulation? Publishing to the web?
Creation of static web albums?</p>
<p>For me the feature "create static webalbum" is very important,
as I don't want to publish my images/photos on sites like
<a href="http://picasaweb.google.com/">picasa</a> or
<a href="http://www.flickr.com/">flickr</a>, because I don't want to depend
on these companies. I especially do not want to recreate
all the albums, if one of those companies stops providing the service.</p>
<p>One of the main questions is, which program should handle the gallery
creation process:</p>
<ul>
<li>the image viewing / managing utility (most likely with a gui)</li>
<li>an external command line utility</li>
</ul>
<p>After some time, I think there are some key points:</p>
<ul>
<li>a special designed command line utility may be better suited for the job</li>
<li>a gui may be very good suited to actually select the right images</li>
</ul>
<h2>How I create and publish static photo galleries</h2>
<p>So in the end, I decided for the following setup:</p>
<ul>
<li>Use shotwell to organise photos</li>
<li>Use shotwell to export downscaled version of photos to a directory
(one per event)</li>
<li>Create a Makefile, which utilises llgal to (re-)create the whole website</li>
</ul>
<p>Thus I can change the gui, but do not need to change the gallery format.
You can find the result at
<a href="http://photo.nico.schottelius.org">photo.nico.schottelius.org</a>.</p>
<h2>SEE ALSO</h2>
<ul>
<li><a href="https://www.nico.schottelius.org//docs/static-image-gallery-generator-comparison/">static-image-gallery-generator-comparison</a></li>
</ul>
New Linux wireless gigabit Linux router for ungleich officehttps://www.nico.schottelius.org//blog/new-wireless-gigabit-linux-router-for-ungleich-office/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p><a href="https://www.nico.schottelius.org//blog/new-wireless-gigabit-linux-router-for-ungleich-office/rb2011uas2hnd-in.jpg"><img src="https://www.nico.schottelius.org//blog/new-wireless-gigabit-linux-router-for-ungleich-office/rb2011uas2hnd-in.jpg" width="798" height="372" alt="Mikrotik RB2011UAS-2HnD-IN" class="img" /></a></p>
<h2>Introduction</h2>
<p>We are getting a new 150Mbit/s (down) Internet connection
in the <a href="http://www.ungleich.ch">ungleich office</a> in August 2013.
Unfortunately, our current router <strong>katze</strong>, a
<a href="http://soekris.com/products/net5501.html">Soekris net5501</a>,
is not able to process 150 Mbit/s, as it contains only
Fast Ethernet interfaces.</p>
<p>So it's time for a geeky replacement.</p>
<h2>Searching for available products</h2>
<p>What's the best plattform to search for a Linux based
router that is probably good supported by FOSS?</p>
<p>I started to cross match devices from the local
vendor <a href="http://www.digitec.ch">digitec</a> with the list
of <a href="http://wiki.openwrt.org/toh/start">supported device of OpenWRT</a>.</p>
<p>Essentially I was looking for devices with</p>
<ul>
<li>high cpu speed (to be able to handle gigabit traffic)</li>
<li>some memory to flash an open image like OpenWRT on it</li>
<li>support for hardware already in the Linux kernel</li>
<li>support for at least 802.11n, 802.11ac optional</li>
</ul>
<h2>Selecting a router</h2>
<p>After digging into the specs of many routers, the
<a href="http://www.tp-link.com.de/products/details/?categoryid=2872&model=Archer+C7">TP-Link Archer C7</a> looked pretty well and even supports 802.11ac.
Drawback: It has only 8 MiB of flash attached
and its <a href="https://forum.openwrt.org/viewtopic.php?id=44201">OpenWRT and 802.11ac support</a> is still work in progress.</p>
<p>Given that all our clients support 802.11n only currently,
I was considering other routers as well. Remembering that
I've recently installed a
<a href="http://routerboard.com/RB750GL">RB750GL</a>
at <a href="http://www.panter.ch">panter</a> and seen some
Mikrotik devices on the OpenWRT page, I also checked out
their website, which brings me to the router I chose:
<a href="http://routerboard.com/RB2011UAS-2HnD-IN">RB2011UAS-2HnD-IN</a>:</p>
<ul>
<li>Gigabit, 802.11n supported</li>
<li>Should be OpenWRT supported using nand flash</li>
<li>Geeky LCD</li>
<li>11W power consumption</li>
</ul>
<p>As <a href="http://www.mikrotik.com/">Mikrotik</a>
seems to produce a lot of cool devices, the decision
was also made to support this company instead of the usual
big ones.</p>
OpenSSH 6.2: Add callback functionality (using dynamic remote port forwarding)https://www.nico.schottelius.org//blog/openssh-6.2-add-callback-functionality-using-dynamic-remote-port-forwarding/2016-03-18T08:08:35Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>This article describes a patch to OpenSSH 6.2 that I wrote to enable
<strong>ssh callback</strong> using dynamic ports. This is rather useful to have
for various types of software, including <a href="https://www.nico.schottelius.org//software/cdist/">cdist</a>
and <a href="https://www.nico.schottelius.org//software/ccollect/">ccollect</a>.</p>
<h2>Background</h2>
<p>Assume you have two hosts:</p>
<ul>
<li>A <strong>target host</strong></li>
<li>A <strong>control host</strong>
(backup server in case of <a href="https://www.nico.schottelius.org//software/ccollect/">ccollect</a>,
configuration server in case of <a href="https://www.nico.schottelius.org//software/cdist/">cdist</a>)</li>
</ul>
<p>Assume further that the target host can directly reach the control
host, but the control host cannot connect to the target host directly.</p>
<p>For instance, it's the case,
when the target host is hidden by NAT
or protected by a firewall.</p>
<h2>Approaches</h2>
<h3>Create a tunnel from the target host to the control host</h3>
<p>A very simple solution is to create a static tunnel
from the target host to the control host, which allows
the control host to connect back:</p>
<pre><code>targethost% ssh -R 42523:localhost:22 controlhost
controlhost% ssh -p 42523 localhost
</code></pre>
<p>The drawback is that the remote port needs to be defined
beforehand and both sides needs to know about it.</p>
<p>This is especially nasty, if you have a lot of
target hosts that need to be backed up / configured.</p>
<h3>Use dynamic port allocation</h3>
<p>The <a href="http://www.openssh.com/">OpenSSH</a> developers seem to have
spotted this problem and include an option to use a random
free port: If port 0 is chosen as the remote
forwarding port, the port is dynamically chosen by the
ssh server, which in our case runs on the controlhost.</p>
<p>Even better, the port information is also displayed on stdout:</p>
<pre><code>targethost% ssh -R 0:localhost:22 controlhost
Allocated port 59818 for remote forward to localhost:22
</code></pre>
<p>The problem here is: The shell on the remote side does not
know which port was chosen, as it is only printed on stdout
by the <strong>ssh client</strong>.</p>
<h3>Expose remote forwarding ports</h3>
<p><a href="https://www.nico.schottelius.org//blog/openssh-6.2-add-callback-functionality-using-dynamic-remote-port-forwarding/openssh-6.2p1-expose-remote-port-forwarding.diff">This patch</a>
against OpenSSH 6.2p1 creates a new environment variable
<strong><em>SSH_REMOTE_FORWARDING_PORTS</em></strong>, which contains all ports
that are used for remote forwarding:</p>
<pre><code>targethost % ssh -R 1234:localhost:22 controlhost
controlhost % echo $SSH_REMOTE_FORWARDING_PORTS
1234
</code></pre>
<p>As this works for all remotely forwarded ports, this can
also be used for dynamic port assignments:</p>
<pre><code>targethost % ssh -R 0:localhost:22 controlhost
controlhost % echo $SSH_REMOTE_FORWARDING_PORTS
54294
</code></pre>
<p>If more than one port forwarding definition is given, they are listed
space separated:</p>
<pre><code>targethost % ssh -R 0:localhost:22 -R 1234:localhost:22 controlhost
controlhost % echo $SSH_REMOTE_FORWARDING_PORTS
59056 1234
</code></pre>
<h3>Use socat</h3>
<p>Adapted from a proposal of
<a href="http://lists.mindrot.org/pipermail/openssh-unix-dev/2013-May/031350.html">Philipp Marek</a>.</p>
<p>A different approach is using socat like this:</p>
<pre><code>targethost% socat TCP:localhost:22,retry=forever "EXEC:ssh controlhost"
controlhost% cat .ssh/authorized_keys
command="~/myscript 1224" ssh-rsa ...
controlhost% cat ~/myscript
socat - TCP-LISTEN:1234 &
ssh -p 1234 ...
</code></pre>
<p>The drawback with this solution is to use pre-defined ports
as well as socat on the targethost exiting after the
first connection has been closed. It works for a single shot
callback, though.</p>
<h3>Use ProxyCommand with stdin/stdout</h3>
<p>As proposed by
<a href="http://lists.mindrot.org/pipermail/openssh-unix-dev/2013-May/031353.html">Darren Tucker</a> (some parts are copied & pasted from his original mail):</p>
<pre><code># Create fifo/named pipe for sshd
targethost% mkfifo sshd_in sshd_out
# Start ssh on the controlhost from the targethost
# and create a control socket. Use ProxyCommand=-
# to make use of stdin/stdout for proxying packets through.
targethost$ ssh <sshd_in >sshd_out -T -y controlhost "ssh -y -N -T -MS/tmp/ctl -oProxyCommand=- targethost" &
# Start a new sshd on the client, which listens on the newly
# created fifos
targethost$ /usr/sbin/sshd -i -f < sshd_in > sshd_out
# on the server, use the control socket to talk to the
# sshd running on the targethost
controlhost% ssh -S /tmp/ctl targethost
</code></pre>
<p>Drawback: Quite complicated setup required, thus probably error prone on day-to-day use.
Advantage: Very beautiful use of FIFOs, ssh, controlsockets and proxycommand. A setup
every geek must love.</p>
<h2>Limitations</h2>
<p>The given patch has some known limitations:</p>
<ul>
<li>The destination of the remote forwarding is not shown.
Debugging the ssh server shows that this information was present
in ssh1, but is absent in ssh2.</li>
<li>The number of listed ports is limited by the buffer size of 256 characters</li>
<li>Includes only remote port forwardings specified at startup, not the ones added later</li>
</ul>
<h2>Future</h2>
<p>The patch
<a href="http://lists.mindrot.org/pipermail/openssh-unix-dev/2013-May/031337.html">has been submitted</a>
to the
<a href="https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev">openssh-unix-dev mailinglist</a> for discussion.</p>
Press articleshttps://www.nico.schottelius.org//about/press/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>The following is an incomplete list of news and articles about my projects and those I wrote:</p>
<ul>
<li>October 2009:
<a href="http://blog.radiotux.de">RadioTux</a> recommends to use
<a href="https://www.nico.schottelius.org//software/ccollect/">ccollect</a> in the
<a href="https://www.nico.schottelius.org//dokumentationen/radiotux-horads-76/">RadioTux@HoRadS #76 edition</a></li>
<li>September 2009:
The German magazine <a href="http://www.linux-magazin.de/">Linux-Magazin</a>
contains the article
<a href="https://www.nico.schottelius.org//dokumentationen/linuxmagazin-clevere-datensicherung-mit-ccollect/">Clevere Datensicherung mit Ccollect</a> about <a href="https://www.nico.schottelius.org//software/ccollect/">ccollect</a>.</li>
<li>August 2009:
The German magazine <a href="http://www.linuxuser.de/">Linux User</a>
writes about <a href="https://www.nico.schottelius.org//software/ccollect/">ccollect</a> in the
<a href="http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2009/08">2009/08 edition</a>.</li>
<li>February 2005: The German magazine
<a href="http://www.linux-magazin.de/">Linux-Magazin</a> contains my article
<a href="https://www.nico.schottelius.org//dokumentationen/linux-magazin-monotone-gnu-arch-tla/">about monotone and gnu arch (tla)</a>.</li>
<li>26. August 2004:
The Russian newssite <a href="http://www.opennet.ru">OpenNET</a>
<a href="http://www.opennet.ru/opennews/art.shtml?num=4285">writes about</a>
the <a href="http://unix.schottelius.org/blacksheep">blacksheep</a> project.</li>
<li>9. July 2004:
The German newssite <a href="http://www.pro-linux.de">Pro-Linux</a> writes about the
<a href="http://www.pro-linux.de/news/2004/7019.html">LinuxDistributionen Wiki</a>
(which was located at
https://wiki.schottelius.org/usemod/cgi-bin/wiki.pl?LinuxDistributionen).</li>
<li>14. April 2004:
<a href="http://www.tldp.org/ldpwn/20040414.html">The Linux Documentation Project</a>
about the document explaining
<a href="http://nico.schotteli.us/papers/linux/cryptoloop-partial-security">why cryptoloops offer only partial security</a></li>
<li>22. August 2003:
<a href="http://newsvac.newsforge.com/newsvac/03/08/22/134259.shtml">Newsforge</a>
about the <a href="http://unix.schottelius.org/blacksheep">blacksheep</a> project</li>
<li>31. July 2003:
<a href="http://www.pro-linux.de/news/2003/5794.html">Pro-Linux</a>
about the <a href="http://unix.schottelius.org/blacksheep">blacksheep</a> project</li>
</ul>
<p>Please <span class="createlink">notify me</span>, if you find an article not listed here.</p>
Projectshttps://www.nico.schottelius.org//about/projects/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>The following is an incomplete list of projects I'm working on:</p>
<ul>
<li><a href="http://git.schottelius.org/?p=cLinux/carbon.git">carbon / corpus</a>: Package management</li>
<li><a href="http://unix.schottelius.org/cconf/">cconf / chamelon</a>: autoconf replacements</li>
<li><a href="https://www.nico.schottelius.org//software/cdist/">cdist</a>: a usable configuration management system</li>
<li><a href="https://www.nico.schottelius.org//software/ceof/">ceof</a>: the secure, peer-to-peer (p2p), decentralised anonymous chat network</li>
<li><a href="http://unix.schottelius.org/ccollaborate/">ccollaborate</a>: web application framework</li>
<li><a href="http://unix.schottelius.org/cinit/">cinit</a>:
a fast, small and simple init with support for profiles.</li>
<li>cLinux: communities Linux distribution</li>
<li>cnp: create new project (assistant for new FOSS projects)</li>
<li><a href="https://www.nico.schottelius.org//software/ccollect/">ccollect</a>:
(pseudo) incremental backup with different exclude lists using hardlinks and rsync</li>
<li><a href="http://git.schottelius.org/?p=cLinux/corein">corein</a>:
Complete remote, automatic installation and configuration</li>
<li>cvoktrainer: vocabulary trainer</li>
<li>cvpn: manage vpns</li>
<li>crassh: Encrypted, easy-to-use user authentification for Unix systems</li>
<li>decr-f: packet description format</li>
<li><a href="http://unix.schottelius.org/dmp3find/">dmp3find</a>: find doubled mp3s</li>
<li>ecml: Encrypted mailinglist</li>
<li>EOF / ceof / ceofhack</li>
<li>fsdb: filesystem database</li>
<li><a href="http://unix.schottelius.org/gpm">gpm</a>: general purpose mouse</li>
<li>id3tagger: tag mp3s with ID3 tags</li>
<li>intsize: reliable print intsizes</li>
<li>mini-lpd</li>
<li>nsdocuments</li>
<li>nsfortunes</li>
<li>rlmanager</li>
<li><a href="http://home.schottelius.org/~nico/schwanz3/">schwanz3</a></li>
<li>shcl: Small helper c library</li>
<li><a href="http://git.schottelius.org/?p=smtp_logger">smtp_logger</a>:
Logs smtp sessions</li>
<li>ssa2: server side admin</li>
<li>tcpserver_blocker</li>
<li>unix_installer</li>
<li><a href="https://www.nico.schottelius.org//net/u2u/">u2u</a></li>
<li>urm: unix raid monitor</li>
</ul>
<p>A lot of those projects are just ideas, most of them have some code
or documentation and some are even implemented and working.</p>
<p>Most of the projects, which have code or documentation, can be found on
<a href="http://git.schottelius.org/">git.schottelius.org</a>.</p>
<p>You can see on which projects I am currently working on
in the <a href="http://l.schottelius.org/pipermail/commits/">archive</a>
of the <a href="http://l.schottelius.org/mailman/listinfo/commits">commits mailing list</a>.</p>
Published ceofhackhttps://www.nico.schottelius.org//blog/published-ceofhack/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>Yesterday I published the first version of <span class="createlink">ceofhack</span>,
the p2p onion routing chat program.</p>
<p>With this version other developers can begin to implement their own fancy
stuff to be used in the EOF network. For instance, it is possible to
create transport protocols that (mis-)use DNS, HTTP, SMTP, ...</p>
<p>Before the release we had a testing night at the
<a href="http://www.ccczh.ch/Events/Chaosdock/2009/">Chaosdock</a>, which revealed
something quite interesting:</p>
<pre><code>Mac OS X does not have a proper poll implementation.
</code></pre>
<p>The poll() call on Mac OS X lead to an infinite loop, setting revents to
<strong><em>POLLNVAL</em></strong> on a file deskriptor used for reading.</p>
<p>But there is a <a href="http://www.clapper.org/software/poll/">poll emulation routine</a>
available.</p>
<p>(This issue was reported and debugged by ballessay.)</p>
Published list of projectshttps://www.nico.schottelius.org//blog/published-list-of-projects/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>The day before yesterday I was hacking on <a href="https://www.nico.schottelius.org//software/ccollect/">ccollect</a>
and finished a lot of things to be done for version 0.8.</p>
<p>When I was done, I was sitting in the train and thought:</p>
<pre><code>Which project to hack on, after this release?
</code></pre>
<p>There are a lot of projects I started, many of them not nearly finished.
And even more ideas, what I <strong>could</strong> work on
(a lot of my ideas can be found in the
<a href="http://git.schottelius.org/?p=nsdocuments">nsdocuments</a> repository).</p>
<p>A listing of my project directory shows over 30 different projects.
To get an overview of what I am working on already, I used the listing
as a base to create the new <a href="https://www.nico.schottelius.org//about/projects/">project list page</a>.</p>
<p>I'm now cleaning up the projects directory and may also publish some
(already finished) projects, which never made it to the public.</p>
<p>And until <strong>ccollect</strong> 0.8 is released, I will continue to think about
the next interesting project to work on.</p>
Published smtp_loggerhttps://www.nico.schottelius.org//blog/published-smtp_logger/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>Some days ago I cleaned up my
<a href="https://www.nico.schottelius.org//about/projects/">project directory</a> and found
<a href="https://www.nico.schottelius.org//software/smtp_logger/">smtp logger</a>, a SMTP debug utility.</p>
<p>I cleaned it a bit up and made it compile with <strong>-Werror</strong>.</p>
<p>So, another piece of <span class="createlink">free and open source software</span>
released, have fun with it!</p>
Published Static image gallery generator comparisonhttps://www.nico.schottelius.org//blog/published-static-image-gallery-generator-comparison/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>As I tested some static image gallery generators,
I wrote down my notes and
published a
<a href="https://www.nico.schottelius.org//docs/static-image-gallery-generator-comparison/">small comparison of static image gallery generators</a>.</p>
Released ceofhack 0.6https://www.nico.schottelius.org//blog/released-ceofhack-0.6/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>A new version of <span class="createlink">ceofhack</span> has been released,
which includes a clean UI interface.</p>
<p>It also includes a "sample UI", <strong>ui-cmd</strong>, which can be used
on the command line for testing.</p>
<p>In theory, all new commands can be handled asynchronously,
the implementation is still synchronised though.</p>
<p>Have fun with it and let me know, whether it works for you or not!</p>
Replaced old PGP key 9885188C with 31877DF0https://www.nico.schottelius.org//blog/replaced-pgp-key-9885188C-with-31877DF0/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>As the old key 9885188C expired some time ago, I replaced it.
The <a href="https://www.nico.schottelius.org//about/pgp-key-31877DF0.txt">new key</a> has the following
fingerprint</p>
<pre><code>7ED9 F7D3 6B10 81D7 0EC5 5C09 D7DC C8E4 3187 7DF0
</code></pre>
<p>and is signed by the previous one. Please resign the new one,
if you signed the previous one.</p>
Ruby on Rails: Fix the hostname does not match the server certificate errorhttps://www.nico.schottelius.org//blog/ruby-on-rails-fix-hostname-does-not-match-the-server-certificate/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>The problem</h2>
<p>If you encounter this problem when running Ruby on Rails:</p>
<pre><code>OpenSSL::SSL::SSLError (hostname "localhost" does not match the server certificate)
</code></pre>
<p>it is likely due to
<a href="http://api.rubyonrails.org/classes/ActionMailer/Base.html">ActionMailer</a>
using the <strong>smtp</strong> as the <strong><em>delivery_method</em></strong> and
your local mail server supporting TLS/SSL,
but not having a correct/valid certificate.</p>
<h2>The solution</h2>
<p>You can add a valid certificate, but if the server is just used
for sending out mails, this may not be suited.
In that case, you can change the <strong><em>delivery_method</em></strong> to
<strong>sendmail</strong>, which makes ActionMailer use the sendmail
binary directly.</p>
Searching a notebook for a digital nomadhttps://www.nico.schottelius.org//blog/searching-notebook-for-a-digital-nomad/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Who I am</h2>
<p>Dear reader of this post, my name is Nico Schottelius, I am digital nomad searching
for a great notebook.
My requirements are (in my opinion) simple, but I struggle to find any vendor marketing
a notebook that fulfills my needs.</p>
<h2>What I search</h2>
<p>It is as easy as this:</p>
<ul>
<li>12 to 14 inch screen
<ul>
<li>Preferred something that does not have senseless big borders</li>
<li>Size should be less or equal than 30cm x 17cm</li>
</ul>
</li>
<li>Resolution at least 1600x900
<ul>
<li>1600x900 allows three terminals next to each other</li>
<li>3200x1800 is ok as well, but needs some high dpi tunings under Linux</li>
</ul>
</li>
<li>Screen should be readable in sun light
<ul>
<li>Bright enough</li>
<li>Not reflecting too much (like the Lenovo Yoga 2 Pro!)</li>
</ul>
</li>
<li>At least 8G RAM
<ul>
<li>16 GiB RAM is ok as well</li>
</ul>
</li>
<li>At least 512 GB SSD
<ul>
<li>1TB ok as well</li>
<li>I store pictures on the notebook</li>
</ul>
</li>
<li>Battery lifetime >= 6h
<ul>
<li>Real 6 hours, not vendor claimed 6 hours</li>
<li>Preferred 12+ hours, so I can stay without power a day long</li>
</ul>
</li>
<li>Linux supported
<ul>
<li>Not needed to be certified, but Linux should be easily installable to it</li>
<li>Reference distributions: Archlinux and Debian</li>
</ul>
</li>
<li>Good keyboard
<ul>
<li>I know, very subjective, but something that let's me type hours without problems in my hands</li>
<li>Thinkpads are usually fine, Mac stuff usually as well</li>
</ul>
</li>
<li>Weight: Less than 2 KG (4.4 lbs)
<ul>
<li>Would be great to be in the range of 1.0 KG (2.2 lbs)</li>
</ul>
</li>
</ul>
<h2>Suitable devices</h2>
<p>none so far</p>
<h2>Unsuitable devices (tested)</h2>
<ul>
<li>Mac Book Air 13"
<ul>
<li>Resolution is 1400x900</li>
</ul>
</li>
<li>Lenovo X1 Carbon
<ul>
<li>Broken keyboard, no capslock key
<ul>
<li>I need capslock for the <a href="http://neo-layout.org/index_en.html">Neo Keyboard Layout</a></li>
</ul>
</li>
<li>Old Models: SSD up to 256G only</li>
</ul>
</li>
<li>Lenovo Yoga 2 Pro
<ul>
<li>Unreadable in sun light</li>
<li>Poor keyboard</li>
</ul>
</li>
</ul>
<h2>Call for help</h2>
<p>If you know or own any device that may fit the given description, please
<a href="https://www.nico.schottelius.org//about/">contact me</a> or leave a comment on
<a href="https://news.ycombinator.com/item?id=7911658">hackernews</a>.</p>
Sexy example: Small backend change and you are managing DNShttps://www.nico.schottelius.org//blog/sexy-backend-change-dns-support/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>This previous article about
<a href="https://www.nico.schottelius.org//blog/sexy-network-bootstrap/">bootstrapping a network with sexy</a>
explained in detail how to manage a network and how to configure
it with cdist.</p>
<p>This article shows you what needs to be changed to support DNS resolution
in addition to the configured DHCP service.</p>
<h2>Background</h2>
<p>I am using <a href="http://www.thekelleys.org.uk/dnsmasq/doc.html">dnsmasq</a> on my
router, which can act as a DNS and DHCP server. DNS A entries can be added
to the configuration using the <strong>host-record</strong> command.</p>
<h2>The change</h2>
<p>Taking the previously net-ipv4 backend,
<a href="http://git.schottelius.org/?p=sexy-database;a=commit;h=e7f45dccc1feace042bec1549079f073aa476739">the required change is very small</a>:</p>
<pre><code>- line="dhcp-host=${mac},$ipv4a,$hostname"
- echo "${line}" >> "${tmp}"
+ echo "dhcp-host=${mac},$ipv4a,$hostname" >> "${tmp}"
+ echo "host-record=$hostname,$fqdn,$ipv4a" >> "${tmp}"
</code></pre>
<p>Thanks to the modular configuration and the easiness of both sexy and cdist,
this change and a call to <strong>sexy net-ipv4 apply --all</strong> is everything that is needed
to make dnsmasq serve internal DNS names.</p>
<h2>The result</h2>
<p>What this article should show is that whatever you do in the backend, sexy is not affected
at all and you can dramatically change whatever happens on <strong>sexy net-ipv4 apply --all</strong>.</p>
<p>You can browse
<a href="http://git.schottelius.org/?p=sexy-database;a=summary">the sexy database</a>
as well as
the <a href="http://git.schottelius.org/?p=cdist-nico;a=summary">cdist configuration</a>.</p>
Sexy and cdist interaction: Sexy chooses hosts, cdist configureshttps://www.nico.schottelius.org//blog/sexy-cdist-interaction-sexy-chooses-cdist-configures/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>Version 2 of <a href="https://www.nico.schottelius.org//software/sexy/">sexy</a>,
the Swiss Army Knife for inventory management, is already
<strong>using</strong> and <strong>usable</strong> from <span class="createlink">cdist</span>.</p>
<p>This is the first blog post of a series showing examples of
using sexy and cdist.</p>
<h2>Example</h2>
<p>Cdist is executed with a list of hosts to operate on:</p>
<pre><code>% cdist config
usage: cdist config [-h] [-d] [-v] [-c CDIST_HOME] [-i MANIFEST] [-p] [-s]
[--remote-copy REMOTE_COPY] [--remote-exec REMOTE_EXEC]
host [host ...]
</code></pre>
<p>Sexy in turn is able to manage hosts, mac addresses and networks:</p>
<pre><code>% sexy
usage: sexy [-h] [-d] [-v] [-V] {net-ipv4,host,mac} ...
sexy: error: too few arguments
</code></pre>
<p>Sexy knows about a command to list hosts, named <strong>host list</strong>.
So I can use sexy to tell cdist which hosts to configure. For instance
all dhcp servers:</p>
<pre><code>% sexy host list | grep dhcp
dhcp-vm-inx01.intra.local.ch
dhcp-vm-inx02.intra.local.ch
dhcp-vm-snr01.intra.local.ch
dhcp-vm-snr02.intra.local.ch
% ./bin/cdist config -vp $(sexy host list | grep dhcp)
INFO: dhcp-vm-inx01.intra.local.ch: Running global explorers
INFO: dhcp-vm-snr01.intra.local.ch: Running global explorers
INFO: dhcp-vm-snr02.intra.local.ch: Running global explorers
INFO: dhcp-vm-inx02.intra.local.ch: Running global explorers
...
</code></pre>
<p>Sexy, isn't it?</p>
Sexy is being renamed to cinvhttps://www.nico.schottelius.org//blog/sexy-is-being-renamed-to-cinv/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>You may have noticed that searching
for the magnificent tool named <strong>sexy</strong> on a search engine of your
choice did not easily lead you to the Swiss Army Knife for inventory management.</p>
<p>To fix this problem, sexy is currently being renamed to
<a href="https://www.nico.schottelius.org//software/cinv/">cinv</a>.</p>
Bootstrapping a network with sexyhttps://www.nico.schottelius.org//blog/sexy-network-bootstrap/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>This article explains how to begin to manage a network
with <a href="https://www.nico.schottelius.org//software/sexy/">sexy</a>. Because I just moved house,
I take my home network as an example.</p>
<h2>Prerequisites</h2>
<p>First of all, you need to have sexy installed, as described on
the <a href="https://www.nico.schottelius.org//software/sexy/">sexy homepage</a>. Secondly, if you already played
around with sexy, you should empty the sexy database, which is located
at <strong>~/.sexy</strong>:</p>
<pre><code>% rm -rf ~/.sexy
</code></pre>
<p>Or, if you are using <strong>git</strong> to manage your ~/.sexy directory, create a fresh
branch, which does not contain any files:</p>
<pre><code>% cd ~/.sexy
% git checkout -b network_bootstrap
# Ensure all (committed and non-committed) files are gone
% rm -rf db/ backend/
% git rm -r db/ backend/
% git commit -m "Empty sexy database"
</code></pre>
<h2>Add the first host</h2>
<p>First of all, let us add a host. Sexy wants to know its type (virtual machine
or hardware). Sexy expects all names as fully qualified domain names (FQDNs):</p>
<pre><code>% sexy host add -t hw katze.intern.schottelius.org
</code></pre>
<p><strong>Hint:</strong> You can use the <strong>-h</strong> flag to get help for any command.
Using <strong>host list</strong>, we can verify the host has been added:</p>
<pre><code>% sexy host list
katze.intern.schottelius.org
</code></pre>
<p>Now we can network cards to this host:</p>
<pre><code>% sexy host nic-add -m 00:00:24:c8:da:bc -n eth0 katze.intern.schottelius.org
% sexy host nic-add -m 00:00:24:c8:da:bd -n eth1 katze.intern.schottelius.org
</code></pre>
<h2>Add the network</h2>
<p>Currently, sexy only allows you to manage IPv4 based networks
- IPv6 may be added in future releases. So the command to remember for now, is
<strong>net-ipv4</strong>:</p>
<pre><code>% sexy net-ipv4 add --mask 22 192.168.24.0
% sexy net-ipv4 list
192.168.24.0
</code></pre>
<p>Now we created the network 192.168.24.0/22.</p>
<h2>Add a host to a network</h2>
<p>In sexy, the host and net-ipv4 areas are disconnected: You can use sexy to manage
only hosts, to manage only networks or to manage both. To allow this flexibility,
the network part does not know about any information from the host part.
Luckily enough, you don't need to re-enter the information, but you can retrieve
them from the database.</p>
<p>The previously added host, <strong>katze.intern.schottelius.org</strong>, is the router of
my home network and it should use the first IPv4 address in the network.
The <strong>net-ipv4 host-add</strong> command can be used to add a host:</p>
<pre><code>% sexy net-ipv4 host-add
usage: sexy net-ipv4 host-add [-h] [-d] [-v] -m MAC_ADDRESS -f FQDN
[-i IPV4_ADDRESS]
network
</code></pre>
<p>So adding the host to a network requires giving in at least the mac address,
which we entered before. So we can use the following line to add the host to
our new network:</p>
<pre><code>% host=katze.intern.schottelius.org
% mac=$(sexy host nic-addr-get -n eth0 $host)
% sexy net-ipv4 host-add -m $mac -f $host 192.168.24.0
</code></pre>
<p>Sexy will be default use the next free address and as this is the first host in
the network, it used .1:</p>
<pre><code>% sexy net-ipv4 host-ipv4-address-get 192.168.24.0 -f katze.intern.schottelius.org
192.168.24.1
</code></pre>
<h2>Making use of the entered information</h2>
<p>Sexy does not know which DNS or DHCP server you may be using.
To implement changes to your architecture (probably using
a software like <a href="https://www.nico.schottelius.org//software/cdist/">cdist</a>), sexy supports
<strong>backends</strong> to do the change.</p>
<p>For my home network, I am going to use
<a href="http://www.thekelleys.org.uk/dnsmasq/doc.html">dnsmasq</a>, because the
router is a small <a href="http://soekris.com/net5501.htm">Soekris net5501</a>.</p>
<p>The backends are stored in <strong>~/.sexy/backend</strong> and for this
example tutorial, I will create <strong>~/.sexy/backend/net-ipv4/apply</strong>:</p>
<pre><code>% cat ~/.sexy/backend/net-ipv4/apply
#!/bin/sh -e
cdist_base="/home/users/nico/p/cdist/nico"
cdist_bin="$cdist_base/bin/cdist"
dst_dir="$cdist_base/conf/type/__nico_router/files/dnsmasq.d"
tmp=$(mktemp /tmp/foooooo.XXXXXXXXXXXXXXXX)
for network in "$@"; do
dstfile="${dst_dir}/${network}-dhcp.conf"
cat << eof > "$tmp"
# WARNING: sexy generated file, do *not* edit directly.
eof
for fqdn in $(sexy net-ipv4 host-list $network); do
mac=$(sexy net-ipv4 host-mac-address-get -f "$fqdn" "$network")
ipv4a=$(sexy net-ipv4 host-ipv4-address-get -f "$fqdn" "$network")
hostname=$(echo $fqdn | sed 's/\..*//')
line="dhcp-host=${mac},$ipv4a,$hostname"
echo "${line}" >> "${tmp}"
done
mv "${tmp}" "${dstfile}"
done
cd "${dst_dir}"
git add .
git commit -m "Update Sexy generated network configuration" -o -- . 2>/dev/null || true
echo "Transferring changes to git remote"
git pull --quiet
git push --quiet
"$cdist_bin" config -v zuhause.schottelius.org
</code></pre>
<p>In essence this backend creates the dnsmasq configuration and executes cdist afterwards
to apply the changes. I personally prefer a backend to be shell script, but it can be
any kind of executable.</p>
<h2>Adding more hosts</h2>
<p>To make this tutorial useful and my router actually provide a dhcp
server, I'll add my notebook and the fileserver to sexy:</p>
<pre><code>% sexy host add -t hw loch.intern.schottelius.org
% sexy host nic-add -m f4:6d:04:71:c5:ce loch.intern.schottelius.org
% sexy net-ipv4 host-add -m $(sexy host nic-addr-get -n nic0 loch.intern.schottelius.org) -f loch.intern.schottelius.org 192.168.24.0
% sexy host add -t hw brief.intern.schottelius.org
% sexy host nic-add -m b8:8d:12:15:fd:fa brief.intern.schottelius.org
% sexy net-ipv4 host-add -m $(sexy host nic-addr-get -n nic0 brief.intern.schottelius.org) -f brief.intern.schottelius.org 192.168.24.0
</code></pre>
<p>As you can see, if I do not specify the name of the nic, sexy automatically uses <strong>nic0</strong>
for the first nic. This decision was made, as network device names vary between
operating systems and even operating system versions.</p>
<h2>Applying the configuration</h2>
<p>The previously created backend will get executed with all existing networks,
if you run the apply command with the <strong>--all</strong> parameter:</p>
<pre><code>% sexy net-ipv4 apply --all
</code></pre>
<h2>The result</h2>
<p>Using only the steps above, I've created a sexy maintained network,
<strong>192.168.24.0/22</strong>, which calls <a href="https://www.nico.schottelius.org//software/cdist/">cdist</a> to configure
the router with dnsmasq.</p>
<p>You can browse
<a href="http://git.schottelius.org/?p=sexy-database;a=summary">the real sexy database</a>
created during this tutorial, as well as
the <a href="http://git.schottelius.org/?p=cdist-nico;a=summary">cdist configuration</a>
that is used to configure the router.</p>
Started Archive.Schottelius.Orghttps://www.nico.schottelius.org//blog/started-archive.schottelius.org/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>After a long time running websites, I decided to take some websites
of mine down and to migrate the interesting parts into this website.</p>
<p>The unmodified versions have now a place to rest until I stop
running websites: <a href="http://archive.schottelius.org">archive.schottelius.org</a>
(and also the German version <a href="http://archiv.schottelius.org">archiv.schottelius.org</a>)
is the new home for my old websites.</p>
Setting static nameserver and search path with dhcpcdhttps://www.nico.schottelius.org//blog/static-nameserver-and-search-path-with-dhcpcd/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>If you're changing networks a lot, but want to keep a some static
settings, this is <strong>one</strong> way to do it.</p>
<h2>Motivation</h2>
<p>As most wireless networks are featured with unreliable and slow connections,
I'm running my own (caching only) dns server on my notebook, to keep the
answers in my local cache. Thus I always want to have</p>
<pre><code>nameserver 127.0.0.1
</code></pre>
<p>as the first entry in my <strong><em>resolv.conf</em></strong>.</p>
<p>Additionally, I always want to have <strong>schottelius.org</strong> and <strong>ethz.ch</strong>
in my search path, resulting in</p>
<pre><code>search schottelius.org ethz.ch
</code></pre>
<p>Thus I am always able to type only the hostname, independent of my location.</p>
<h2>Implementation</h2>
<p>I am currently using <a href="http://roy.marples.name/projects/dhcpcd/">dhcpcd</a>,
which is shipped with <a href="http://www.archlinux.org/">archlinux</a> by default.</p>
<p>The package contains <strong>/usr/lib/dhcpcd/dhcpcd-hooks/20-resolv.conf</strong>,
which takes <strong><em>/etc/resolv.conf.head</em></strong> and <strong><em>/etc/resolv.conf.tail</em></strong>
into account.</p>
<p>According to <strong>resolv.conf(5)</strong>, if multiple nameservers are specified,
they will be asked in the order listed, so</p>
<pre><code>echo nameserver 127.0.0.1 > /etc/resolv.conf.head
</code></pre>
<p>ensures that my local nameserver is asked firstly. As the <strong>domain</strong> and
<strong>search</strong> field override each other, the last entry wins:</p>
<pre><code>echo search schottelius.org ethz.ch > /etc/resolv.conf.tail
</code></pre>
<h2>Further information</h2>
<p>The same can easily be done with other modular dhcp-clients, like udhcpc
(part of <a href="http://www.busybox.net/">busybox</a>).</p>
<p>The behaviour of your resolver library may be different, be sure to
check your local system documentation.</p>
<p>There are a lot of small caching nameservers available. I have good
experiences with <a href="http://cr.yp.to/djbdns/dnscache.html">dnscache</a>,
<a href="http://www.thekelleys.org.uk/dnsmasq/">dnsmasq</a> and
<a href="http://www.unbound.net/">unbound</a>.</p>
System specificationshttps://www.nico.schottelius.org//docs/sys-specs/2016-02-25T13:34:24Z2015-02-03T14:47:26Z
<p>Tech specs of systems I had in my hands.</p>
<div class="feedlink">
<a class="feedbutton" type="application/rss+xml" rel="alternate" title="Nico Schottelius (RSS feed)" href="https://www.nico.schottelius.org//docs/sys-specs/index.rss">RSS</a>
<a class="feedbutton" type="application/atom+xml" rel="alternate" title="Nico Schottelius (Atom feed)" href="https://www.nico.schottelius.org//docs/sys-specs/index.atom">Atom</a>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//docs/sys-specs/get-sysinfo.sh.dell-r815.log">get-sysinfo.sh.dell-r815.log</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
<div class="archivepage">
<a href="https://www.nico.schottelius.org//docs/sys-specs/get-sysinfo.sh.supermicro-X8DTT-H.log">get-sysinfo.sh.supermicro-X8DTT-H.log</a><br />
<span class="archivepagedate">
Posted <span class="date">Tue Feb 3 15:47:26 2015</span>
</span>
</div>
The power of vim: mail editinghttps://www.nico.schottelius.org//blog/the-power-of-vim-mail-editing/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<p>In this article I will show you some of the mappings I use within
vim for mail editing.</p>
<h2>Background</h2>
<p>I am a console centric person, using
<a href="http://www.mutt.org/">mutt</a> and
<a href="http://www.vim.org/">vim</a> for mails.
I use one e-mail address per person or situation
(i.e. you can reach me at nico-thepowerofvim at schottelius.org).
to be able to filter or delete e-mail addresses easily.</p>
<h2>Macros / Mappings</h2>
<p>One of the really nice things of vim is being able to use macros
(<a href="http://vimdoc.sourceforge.net/htmldoc/usr_05.html#05.3">map</a> in
vim slang).</p>
<h3>Replace Mail Address (static)</h3>
<p>Many times I would like to replace the mail address mutt selected
for sending with my company address. For this I use a mapping assigned to F2:</p>
<pre><code>map <F2> G$/^From:<CR>/<<CR>lc/><CR>nico.schottelius --AT-- ungleich.ch<ESC>/^$<CR>
</code></pre>
<p>This essentially finds the first From: line, removes everything betwenn < and > and inserts my company mail address.</p>
<h3>Replace Mail Address (dynamic)</h3>
<p>In most cases however, I use a mail address in the style
<strong>nico-something@schottelius.org</strong> (there is no catch all, if you were thinking about this). I have mutt setup to use
<strong>nico-something@schottelius.org</strong> as the from address and have a
macro mapped to F3 that allows me to replace the part after
<strong>nico-</strong> until the <strong>@</strong> easily:</p>
<pre><code><F3> G$/^From:<CR>/<nico-<CR>wwlc/@<CR>
</code></pre>
<h3>Replace everything until the signature</h3>
<p>Quite often I am done with replying to an email, but have
leftovers from the original mail. To be able to delete everything
easily until the end of the mail (i.e. until -- and a space),
I use F4:</p>
<pre><code>map <F4> c/^-- <CR>
</code></pre>
Use smart passphrases - stop enforcing weak and complicated passwordshttps://www.nico.schottelius.org//blog/use-smart-passphrases-stop-enforcing-weak-and-complicated-passwords/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>As a <a href="http://en.wikipedia.org/wiki/Netizen">netizen</a>
you may have defined one or more passwords for several situations.
As a sysadmin you may have to setup password policies for your infrastructure.
Sometimes you will encounter the requirement to use
lower case characteres, capitalisation, numbers and special characters
or various combinations of the previous.</p>
<p>I urge you both to drop this behaviour <strong>now</strong>. This article explains
why it is more sensible to use passphrases instead of complicated
passwords.</p>
<h2>Passphrase vs. Passwords</h2>
<p>A <a href="http://en.wikipedia.org/wiki/Passphrase">passphrase</a> is a combination
of <strong>words</strong> that is used to secure access:</p>
<pre><code>iamathepassphrasedefinedbydaniel
</code></pre>
<p>A <a href="http://en.wikipedia.org/wiki/Password">password</a> on the other hand
is usually a combination of <strong>characters</strong>:</p>
<pre><code>7z/+tt38
</code></pre>
<p>There are at least 4 very simple reasons to prefer passhprases over passwords:</p>
<ul>
<li>passphrases are easier to remember (try yourself with the previous examples)</li>
<li>passphrases are more secure</li>
<li>passphrases can be typed faster than passwords (and thus enhance security even more)</li>
<li>passphrases are easier to type on foreign keyboards</li>
</ul>
<h2>How secure are passphrases really?</h2>
<p>Let's take the common constraints of passwords:</p>
<ul>
<li>Upper and lower case (26+26 characters)</li>
<li>Number (10 characters)</li>
<li>Special characters (some - depends on how you count)</li>
<li>Length about 8-10 characters</li>
</ul>
<p>Let us assume we have 128 possibilities for each character.
With 10 characters this would result in 128<sup>10</sup> possible passwords:</p>
<pre><code>1180591620717411303424 (1.18059e+21)
</code></pre>
<p>Let us take a look at the possible combination of passphrases.
Passphrases are a bit more difficult to define, as it is
<a href="http://en.wikipedia.org/wiki/English_language#Number_of_words_in_English">not strictly defined how many words the English language knows about</a>. I will use 600000 as one of the lower numbers given in the linked article,
which gives us the following number of possibilities:</p>
<pre><code>1 word = 600000
2 words = 360000000000 (3.6e+11)
3 words = 216000000000000000 (2.16e+17)
4 words = 129600000000000000000000 (1.296e+23)
5 words = 77760000000000000000000000000 (7.776e+28)
6 words = 46656000000000000000000000000000000 (4.6656e+34)
7 words = 27993600000000000000000000000000000000000 (2.79936e+40)
</code></pre>
<p>As you can easily see, <em>when you use only 4 words, your passphrase is
more secure than most passwords</em>. The passphrase example above counted
7 words and is still easy to remember.</p>
<h2>What now</h2>
<p>Let us make the world easier.</p>
<p>If you are user and you have to create weak and complicated passwords
due to some policy, give the provider a link to this article so she
can understand why changing their policy is sensible.</p>
<p>If you are a sysadmin or provider you can change your password policy
to require 15 ore more characters, which would result in
931322574615478515625 or 1.67726e+21 possibilities - even more
than in your previous policy.</p>
<h2>For the geeks</h2>
<p>I am aware of <a href="http://en.wikipedia.org/wiki/Unicode">Unicode</a>,
but most characters are not found on common keyboards - at least
the ones I use do not exceed 200 keys. Even if you could
enter all Unicode characters
(for instance using <a href="http://en.wikipedia.org/wiki/Unicode_input">ISO 14755</a>),
it still remains questionable
<a href="http://www.fileformat.info/info/unicode/char/1f3e9/index.htm">whether the application accepts all unicode characters</a>.</p>
<p>If that wasn't enough: You can also use other languages to write
your passphrase. Learned a sentence on your last holidays?
Use it (as a base) for your passphrase.</p>
<p>Yes, there are some words that are more common in languages. On the
other hand, if fantasy words that only you know about are included,
the attacker is required to guess the full string, which is quite
a lot of guesses, even if she assumes all characters are lower case..</p>
<p>...by the way, if you consider
the example passphrase from above as a string of 32 lower case
characters,
it would give you 1901722457268488241418827816020396748021170176
or 1.90172e+45 possible passwords.</p>
<p><a href="http://xkcd.com/936/">XKCD</a> also has a nice cartoon describing
this solution.</p>
Why CentOS does not stop your init scripthttps://www.nico.schottelius.org//blog/why-centos-does-not-stop-your-init-script/2016-02-25T13:34:32Z2015-02-03T14:47:26Z
<h2>Introduction</h2>
<p>If you created a simple init script below <strong>/etc/init.d</strong>, which
gets started, but not stopped on reboot or system halt, this
article is for you.</p>
<h2>Background</h2>
<p>I assume you ensured that the <strong>chkconfig</strong> information in the
script is correct and that you ran chkconfig $name on. The output
of chkconfig should look like this:</p>
<pre><code>[root@kvm-hw-snr01 ~]# chkconfig --list | grep kvm-vms
kvm-vms 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@kvm-hw-snr01 ~]#
</code></pre>
<p>Although this looks correct, there is a small block in <strong>/etc/rc.d/rc</strong>
that prevents your init script from being called on stop:</p>
<pre><code># First, run the KILL scripts.
for i in /etc/rc$runlevel.d/K* ; do
# Check if the subsystem is already up.
subsys=${i#/etc/rc$runlevel.d/K??}
[ -f /var/lock/subsys/$subsys -o -f /var/lock/subsys/$subsys.init ] || continue
check_runlevel "$i" || continue
# Bring the subsystem down.
[ -n "$UPSTART" ] && initctl emit --quiet stopping JOB=$subsys
$i stop
[ -n "$UPSTART" ] && initctl emit --quiet stopped JOB=$subsys
done
</code></pre>
<p>So only if your script creates
/var/lock/subsys/<strong>yourscriptname</strong> or /var/lock/subsys/<strong>yourscriptname</strong>.init,
it will be called on stop.</p>
<h2>Solution</h2>
<p>You can include the following three lines into your script to get
your script stopped:</p>
<pre><code>broken_lock_file_for_centos=/var/lock/subsys/kvm-vms
# In the start block
touch "$broken_lock_file_for_centos"
# In the stop block
rm -f "$broken_lock_file_for_centos"
</code></pre>
Solution for Postfix with Postgres: SASL error: authentication failed: authentication failurehttps://www.nico.schottelius.org//blog/postfix-postgres-sasl-error-authentication-failed-authentication-failure/2016-02-25T13:34:32Z2008-10-06T22:00:00Z
<p>It took me some hours to find the origin of the error,
so I'll documentate some hints here for you.
I am running postfix with postgresql on Debian.
But it should apply more or less to MySQL and FreeBSD and other OS, too.</p>
<p>Some error messages you may have seen:</p>
<pre><code>Oct 7 18:01:38 tee postfix/smtpd[7741]: warning: SASL authentication failure: no secret in database
Oct 7 18:01:38 tee postfix/smtpd[7741]: warning: ikn.inf.ethz.ch[129.132.130.3]: SASL DIGEST-MD5 authentication failed: authentication failure
</code></pre>
<p>or on the client side postfix:</p>
<pre><code>Oct 7 17:56:39 ikn postfix/smtp[30807]: 777134113A: to=<nicosc@inf.ethz.ch>, relay=mx3.schottelius.org[77.109.138.221]:25, delay=0.08, delays=0.02/0/0.06/0, dsn=4.7.8, status=deferred (SASL authentication failed; server mx3.schottelius.org[77.109.138.221] said: 535 5.7.8 Error: authentication failed: authentication failure)
</code></pre>
<p>Some hints and at the end my final solution:</p>
<ul>
<li>make sure postfx can connect to the postgresql database</li>
<li>check one, two and three times that <strong><em>pg_hba.conf</em></strong> is right</li>
<li>try to login manually via psql</li>
<li>check postgresql logs, raise debuglevels,
add <strong><em>log_connections = on</em></strong> and <strong><em>log_statement = 'all'</em></strong></li>
<li>make sure you do not have whitespaces at the end of
<strong><em>/etc/postfix/sasl/smtpd.conf</em></strong> (that was my problem here, due to copy and paste!)</li>
<li><p>You are missing <strong><em>sasl/smtpd.conf</em></strong>, if you get the following infamous error (i.e. cyrus-sasl has no config found):</p>
<p> warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory</p></li>
</ul>
<p>For reference, here are the important parts of my working configuration:</p>
<p><strong><em>main.cf:</em></strong></p>
<pre><code>smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_use_tls=yes
smtpd_tls_cert_file=/etc/ssl/mx3.schottelius.org.crt
smtpd_tls_key_file=/etc/ssl/mx3.schottelius.org.key
smtpd_sasl_auth_enable = yes
smtpd_sasl2_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = no
smtpd_tls_auth_only = yes
#smtpd_sasl_path = smtpd # not needed
smtpd_client_restrictions = permit_mynetworks
permit_sasl_authenticated
</code></pre>
<p><strong><em>sasl/smtpd.conf:</em></strong></p>
<pre><code>pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login cram-md5 digest-md5
sql_engine: pgsql
sql_hostnames: 127.0.0.1
sql_user: postfix
sql_passwd: thepassword
sql_database: mail
sql_select: select password from mailboxes where name='%u' and domain='%r' and smtp_enabled=1
</code></pre>
ttp - tiny transfer protocolhttps://www.nico.schottelius.org//docs/ttp/2016-02-25T13:34:24Z2003-10-13T05:42:23Z
<pre><code>ttp is a small and fast protocol.
it is used within environments where people forget the 'h' before the url,
like chats, mails, etc.
it doesn't transfer any data.
it doesn't have any overhead.
it doesn't have any sense.
it is ttp.
</code></pre>
<h2>Submission to the Journal of Universal Rejection (JofUR)</h2>
<p>ttp was submitted to <a href="http://www.universalrejection.org/">JofUR</a>
and rejected on 2011-03-04.</p>
<h2>Irssi transformation plugin</h2>
<p>Ville Likitalo hosts a
<a href="http://koti.kapsi.fi/~liki/irssi/ttp.pl">ttp irssi plugin</a>
that hypertransforms ttp and ttps (not described here) to
http and https.</p>