<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>florianjacob.de_</title><link href="https://florianjacob.de/" rel="alternate"></link><link href="https://florianjacob.de/feeds/all-en.atom.xml" rel="self"></link><id>https://florianjacob.de/</id><updated>2015-11-22T21:00:00+01:00</updated><subtitle></subtitle><entry><title>Switching to letsencrypt: Experiences with the closed beta program</title><link href="https://florianjacob.de/switch_to_letsencrypt.html" rel="alternate"></link><published>2015-11-22T21:00:00+01:00</published><updated>2015-11-22T21:00:00+01:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2015-11-22:/switch_to_letsencrypt.html</id><summary type="html">&lt;p&gt;Encrypt all the services, with universally trusted certificates!&amp;nbsp;\o/&lt;/p&gt;</summary><content type="html">&lt;p&gt;On 2015-11-04, I was very happy to find a Let&amp;#8217;s Encrypt closed beta invitation in my inbox - only to find out that you
had to add in every subdomain separately, and  I only registered my top-level domains and &lt;code&gt;www&lt;/code&gt;. &amp;gt;.&amp;lt; It only took a
week to get my subdomains whitelisted, too,&amp;nbsp;though.&lt;/p&gt;
&lt;h2 id="experiences"&gt;Experiences&lt;/h2&gt;
&lt;p&gt;So then I could finally get &lt;em&gt;all&lt;/em&gt; my certificates! Which is, in theory, as simple as downloading the Let&amp;#8217;s Encrypt
script and&amp;nbsp;executing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;./letsencrypt-auto --agree-dev-preview --server https://acme-v01.api.letsencrypt.org/directory auth
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;which generates your certificates in &lt;code&gt;/etc/letsencrypt&lt;/code&gt;. You need to shortly disable your web server though, as the
script binds to the http port for the domain&amp;nbsp;verification.&lt;/p&gt;
&lt;p&gt;Also, the script depends on python packages in versions from Debian Jessie. As my main server is still running Wheezy
for reasons™, I had to upgrade many python related packages to Jessie for the script to work. Not very nice, I should
really do the full upgrade to Jessie soon. Then, I was on to changing each and every config file of all the services to
use the letsencrypt certificates instead of my old CAcert&amp;nbsp;ones.&lt;/p&gt;
&lt;p&gt;The next problem I ran into was that the certificates are only root-accessible by default, but prosody and mumble try to
get user-level acces. I fixed that by changing the group of &lt;code&gt;/etc/letsencrypt&lt;/code&gt; to &lt;code&gt;ssl-certs&lt;/code&gt;, intended by Debian
for that, and made it sticky so this hopefully will survive certificate renewals. Maybe the installer will do that by
default in the&amp;nbsp;future.&lt;/p&gt;
&lt;p&gt;After a few days of testing, I activated nginx forwards to &lt;code&gt;https://&lt;/code&gt; for all sites hosted here, and enabled
&lt;a href="https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security"&gt;&lt;span class="caps"&gt;HSTS&lt;/span&gt;&lt;/a&gt;, because I&amp;#8217;m quite sure now Let&amp;#8217;s Encrypt will work out for me. If you can read this, everything is still fine.&amp;nbsp;;)&lt;/p&gt;
&lt;h2 id="the-future"&gt;The&amp;nbsp;future?&lt;/h2&gt;
&lt;p&gt;I decided against &lt;a href="https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning"&gt;&lt;span class="caps"&gt;HPKP&lt;/span&gt;&lt;/a&gt;, because I&amp;#8217;m not sure what
would be the right thing here as the certificates are only valid for 90 days, and I don&amp;#8217;t think one can get spare ones
for the future currently. I&amp;#8217;ll wait until there&amp;#8217;s a recommended way of doing that with Let&amp;#8217;s Encrypt. Maybe the only
thing that really makes sense is to pin it to the main and backup Let&amp;#8217;s Encrypt CAs and not my actual&amp;nbsp;keys?&lt;/p&gt;
&lt;p&gt;Also, &lt;a href="https://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities"&gt;&lt;span class="caps"&gt;DANE&lt;/span&gt;&lt;/a&gt; (combined with &lt;a href="https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning"&gt;&lt;span class="caps"&gt;DNSSEC&lt;/span&gt;&lt;/a&gt;) would more or less eliminate the need for &lt;span class="caps"&gt;HPKP&lt;/span&gt; and also work for other
protocolls than http. The problem here is similar, but not as hard: How to automatically update the keys of my &lt;span class="caps"&gt;DNS&lt;/span&gt; zone?
This will probably be much easier when I host my own authoritative &lt;span class="caps"&gt;DNS&lt;/span&gt; server, or maybe Let&amp;#8217;s Encrypt will come up with
a standard way to automate that, too. But in any case, I&amp;#8217;ll have wait for my &lt;span class="caps"&gt;DNS&lt;/span&gt; registrar to fully support &lt;span class="caps"&gt;DNSSEC&lt;/span&gt; -
which will happen soon,&amp;nbsp;hopefully.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Get your Let&amp;#8217;s Encrypt certificates today! \o/ (By which I mean, wait until the end of next week, when the &lt;a href="https://letsencrypt.org/2015/11/12/public-beta-timing.html"&gt;public
beta&lt;/a&gt; starts on 2015-12-03.) It&amp;#8217;s really simple if you don&amp;#8217;t still run Wheezy, it&amp;#8217;s much less hassle than having your
own &lt;span class="caps"&gt;CA&lt;/span&gt; or copy&amp;amp;pasting certificate signing requests like with ”regular CAs“ as CAcert, and the certificates are accepted
by each and every device in the world or so (and it also &lt;a href="http://googlewebmastercentral.blogspot.de/2014/08/https-as-ranking-signal.html"&gt;makes the GoogleBot happy&lt;/a&gt; – &lt;a href="/forward_indexhtml_to_dir_with_nginx_and_apache.html"&gt;&lt;em&gt;even more ;)&lt;/em&gt;&lt;/a&gt;&amp;nbsp;).&lt;/p&gt;</content></entry><entry><title>How to rewrite and forward .*/index.html to .*/ with nginx and Apache</title><link href="https://florianjacob.de/forward_indexhtml_to_dir_with_nginx_and_apache.html" rel="alternate"></link><published>2015-09-27T16:00:00+02:00</published><updated>2015-09-27T16:00:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2015-09-27:/forward_indexhtml_to_dir_with_nginx_and_apache.html</id><summary type="html">&lt;p&gt;How to clean up your all your index.html urls and directory listings by forwarding to one unique url, the path with a trailing /, for all subfolders. For less ambiguity and to make the GoogleBot&amp;nbsp;happy.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Recently, I decided to clean up my index urls. I had &lt;code&gt;.*/index.html&lt;/code&gt; files, directory listings at &lt;code&gt;.*/&lt;/code&gt;,
indirect serving of index.html to &lt;code&gt;.*/&lt;/code&gt;, many times with the index being reachable via two urls without forwards.
It&amp;#8217;s good practice to have only one &lt;span class="caps"&gt;URL&lt;/span&gt; for a specific page (and it also &lt;a href="https://support.google.com/webmasters/answer/66359"&gt;makes the GoogleBot happy&lt;/a&gt;), so I looked into forwards
and redirects with Apache and&amp;nbsp;nginx.&lt;/p&gt;
&lt;p&gt;First, you need to decide whether you prefer &lt;code&gt;.*/&lt;/code&gt; or &lt;code&gt;.*/index.html&lt;/code&gt;. I&amp;#8217;m in for the former, because I wanted
to have a coherent scheme with directory listings, too, and it doesn&amp;#8217;t make sense to have a webserver-generated
directory listing at the location of a file. Also, it seems to me like it&amp;#8217;s the more semantically correct url.
My requirement was to have the forward for &lt;em&gt;all&lt;/em&gt; directories and index.html
files, not only for the top level &lt;code&gt;/index.html&lt;/code&gt;. The usual examples don&amp;#8217;t cover that and / or use two regexes, but I
found an easy way to do it with a single&amp;nbsp;one.&lt;/p&gt;
&lt;h2 id="nginx"&gt;nginx&lt;/h2&gt;
&lt;p&gt;For nginx, you need the &lt;a href="http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite"&gt;rewrite directive&lt;/a&gt; and a small&amp;nbsp;workaround:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# forward all index.html files to their parent directories for having unique urls
rewrite ^(.*/)index.html$ $1 permanent;

# The default index directive, &amp;quot;index index.html;&amp;quot;, reacts on .*/
# with an internal redirect to .*/index.html, which is then affected
# by the rewrite, resulting in an infinite redirect loop.
# This location directive breaks the loop by bypassing the index directive
# and directly trying to serve index.html.
location ~ ^(.*)/$ {
    try_files $1/index.html =404;
}
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;index index.html&lt;/code&gt; directive works with an internal redirect, which seems to get caught in the rewrite rule
again, endlessly. &lt;code&gt;try_files&lt;/code&gt; also does an internal redirect like the &lt;code&gt;index
directive&lt;/code&gt;, but as it&amp;#8217;s enclosed in a location block, it doesn&amp;#8217;t reach the rewrite above anymore
(At least I think that&amp;#8217;s the reason… drop me an email if you know more about or a better way to do&amp;nbsp;this).&lt;/p&gt;
&lt;h2 id="apache"&gt;Apache&lt;/h2&gt;
&lt;p&gt;For Apache, you need the &lt;a href="http://httpd.apache.org/docs/2.2/de/mod/mod_rewrite.html#rewriterule"&gt;RewriteRule directive&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;RewriteEngine on
# forward all index.html files to their parent directories for having unique urls
RewriteRule ^(.*/)index\.html$ $1 [redirect=301,last]
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;No workaround needed for apache, the rule just works as expected. But don&amp;#8217;t forget&amp;nbsp;a&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo a2enmod rewrite
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;if you don&amp;#8217;t have &lt;code&gt;mod_rewrite&lt;/code&gt; already&amp;nbsp;enabled.&lt;/p&gt;
&lt;p&gt;Have&amp;nbsp;fun!&lt;/p&gt;</content></entry><entry><title>SSH Tips &amp; Tricks: On killing &amp; multiplexing Sessions, and checking Host Keys</title><link href="https://florianjacob.de/ssh-tips-tricks-killing-sessions-visualhostkeys-multiplexing.html" rel="alternate"></link><published>2015-08-07T16:20:00+02:00</published><updated>2015-08-07T16:20:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2015-08-07:/ssh-tips-tricks-killing-sessions-visualhostkeys-multiplexing.html</id><summary type="html">&lt;p&gt;Recently, I found out that none of my friends with own servers knew about these three ssh configuration options, so I decided to collect them, add some explanation around it and share them with everyone.&amp;nbsp;:)&lt;/p&gt;</summary><content type="html">&lt;p&gt;Recently, I found out that none of my friends with own servers knew about these three ssh configuration
options, so I decided to collect them and share them with everyone.&amp;nbsp;:)&lt;/p&gt;
&lt;h2 id="kill-a-hung-ssh-sessions-without-closing-the-terminal"&gt;Kill a hung &lt;span class="caps"&gt;SSH&lt;/span&gt; Sessions without closing the&amp;nbsp;Terminal&lt;/h2&gt;
&lt;p&gt;I used to close hung up ssh sessions by closing the full terminal or terminal tab, too, but a few years ago, I found out
there&amp;#8217;s a much better alternative. The ssh command line client actually has an escape sequence and then a few commands
to control it! The magic key presses to close a session are:  “&lt;strong&gt;⏎~.&lt;/strong&gt;” (enter-tilde-dot).
“&lt;strong&gt;⏎~&lt;/strong&gt;” is the escape sequence, “&lt;strong&gt;.&lt;/strong&gt;” is the command to terminate the session, and “&lt;strong&gt;⏎~?&lt;/strong&gt;” shows all other
available&amp;nbsp;commands.&lt;/p&gt;
&lt;h2 id="check-your-ssh-fingerprints-with-ease-using-visualhostkeys"&gt;Check your &lt;span class="caps"&gt;SSH&lt;/span&gt; Fingerprints with ease using&amp;nbsp;VisualHostKeys&lt;/h2&gt;
&lt;p&gt;One should compare one&amp;#8217;s &lt;span class="caps"&gt;SSH&lt;/span&gt; host key fingerprints, but most of the time, one just assume it&amp;#8217;s probably all right or
checks the first and the last few characters, as comparing the fingerprint character by character is just too much
work. Humans are much better at comparing visual patterns, though. Ever wondered what those „This is the key&amp;#8217;s random
art“ with a strange &lt;span class="caps"&gt;ASCII&lt;/span&gt; art image when you generate a key are all about? Only recently I found out that they are a
visual representation of the fingerprint intended for easy comparison by&amp;nbsp;humans.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# Show random art of the host key on every login
VisualHostKey yes
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;If you add this option globally to your &lt;code&gt;.ssh/config&lt;/code&gt;, ssh will show you the &lt;span class="caps"&gt;SSH&lt;/span&gt; host key fingerprint as random art
every time you log in to a server. This will train you to the pattern, and after a few weeks, you&amp;#8217;d notice that the
pattern is different&amp;nbsp;immediately.&lt;/p&gt;
&lt;h2 id="multiplex-ssh-sessions-for-more-performance"&gt;Multiplex &lt;span class="caps"&gt;SSH&lt;/span&gt; Sessions for more&amp;nbsp;Performance&lt;/h2&gt;
&lt;p&gt;You can easily boost the performance of transfers of many small files by adding this as a global options to your
&lt;code&gt;.ssh/config&lt;/code&gt;. (Of course you could apply them to a few hosts only, too, but why should you?) This builds up only a
single &lt;span class="caps"&gt;SSH&lt;/span&gt; connection to the target host and multiplexes all other ssh sessions to the same host over it. This also
means that opening a second ssh session is almost&amp;nbsp;instant.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;# multiplex the connection when possible
Controlmaster auto
# location of the socket files
Controlpath ~/.ssh/ssh-%r@%h:%p.sock
# persist multiplex socket for 60 seconds when idle
Controlpersist 60
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;In case the full session hung up, you need to delete &lt;code&gt;~/.ssh/ssh-&amp;lt;username&amp;gt;@&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;.sock&lt;/code&gt; though, or wait 60
seconds for the idle timer to time&amp;nbsp;out.&lt;/p&gt;</content></entry><entry><title>CAcert certificates everywhere!</title><link href="https://florianjacob.de/cacert-introduction.html" rel="alternate"></link><published>2014-09-24T22:59:00+02:00</published><updated>2014-09-24T22:59:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2014-09-24:/cacert-introduction.html</id><summary type="html">&lt;p&gt;Since a few months ago, I&amp;#8217;ve been using CAcert certificates instead of self-signed ones, and I became a CAcert assurer. Still no &lt;span class="caps"&gt;DNSSEC&lt;/span&gt;,&amp;nbsp;though.&lt;/p&gt;</summary><content type="html">&lt;p&gt;All my servers (including this site) are reachable via &lt;span class="caps"&gt;TLS&lt;/span&gt; and show certificates issued by &lt;a href="http://www.cacert.org/"&gt;CAcert&lt;/a&gt; since a few months
ago, instead of the self-signed certificates of a custom &lt;span class="caps"&gt;CA&lt;/span&gt; I had&amp;nbsp;before.&lt;/p&gt;
&lt;p&gt;CAcert.org is a community-driven Certificate Authority that issues free class 3 certificates after a first-hand verification
through the&amp;nbsp;community.&lt;/p&gt;
&lt;p&gt;For others running servers: I am a CAcert assurer now, so I can assure you in case we meet in person, but you&amp;#8217;ll need
other assures as&amp;nbsp;well.&lt;/p&gt;
&lt;p&gt;To contact this site or my servers via https without warnings, you can either store the certificate as before or import
the &lt;a href="http://www.cacert.org/index.php?id=3"&gt;CAcert certificates&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.cacert.org/certs/root.crt"&gt;Root&amp;nbsp;Certificate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cacert.org/certs/class3.crt"&gt;Intermediate&amp;nbsp;Certificate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bonus: If everything worked out, you now can visit e.g. the &lt;a href="https://ccc.de/"&gt;Chaos Computer Club&lt;/a&gt; via https without a warning,&amp;nbsp;too.&lt;/p&gt;
&lt;h3 id="dnssec-dane"&gt;&lt;span class="caps"&gt;DNSSEC&lt;/span&gt; / &lt;span class="caps"&gt;DANE&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;d love to enable &lt;a href="http://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions"&gt;&lt;span class="caps"&gt;DNSSEC&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/DNS-based_Authentication_of_Named_Entities"&gt;&lt;span class="caps"&gt;DANE&lt;/span&gt;&lt;/a&gt;, but my domain registrar only supports &lt;span class="caps"&gt;DNSSEC&lt;/span&gt; in case you run your own
authoritative &lt;span class="caps"&gt;DNS&lt;/span&gt; server instead of theirs. :/ (See the knowledge base of inwx, &lt;a href="http://kb.inwx.com/index.php?action=artikel&amp;amp;cat=3&amp;amp;id=22&amp;amp;artlang=de"&gt;Can I use &lt;span class="caps"&gt;DNSSEC&lt;/span&gt;?&lt;/a&gt;). But I&amp;#8217;ll
try to set one up when I find the&amp;nbsp;time.&lt;/p&gt;</content></entry><entry><title>How to tunnel IPv4 internet through tinc</title><link href="https://florianjacob.de/tinc-ipv4-internet.html" rel="alternate"></link><published>2014-04-14T16:50:00+02:00</published><updated>2014-04-14T16:50:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2014-04-14:/tinc-ipv4-internet.html</id><summary type="html">&lt;p&gt;This describes the setup I use to allow computers in my tinc &lt;span class="caps"&gt;VPN&lt;/span&gt; to tunnel their internet traffic through tinc by making tinc dual stack and setting up a &lt;span class="caps"&gt;NAT&lt;/span&gt; with&amp;nbsp;shorewall.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;
For a description of the setup I use to connect all my computers via &lt;a href="http://tinc-vpn.org"&gt;tinc&lt;/a&gt; in the first place,
see &lt;a href="/tinc-vpn-with-ipv6-and-iproute2.html"&gt;How to set up a small tinc &lt;span class="caps"&gt;VPN&lt;/span&gt; using IPv6 payloads over IPv4 and iproute2&lt;/a&gt;.
&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After I had my tinc network up and running, I wondered how I could tunnel my internet traffic from the peer nodes
to the entry node through tinc to replace my old OpenVPN&amp;nbsp;setup.&lt;/p&gt;
&lt;p&gt;As the internet is more or less still based on IPv4 connectivity, the easiest way I found
was to make tinc dual stack on the affected nodes and route the traffic outwards through a standard IPv4 &lt;span class="caps"&gt;NAT&lt;/span&gt; on the
entry&amp;nbsp;node.&lt;/p&gt;
&lt;h2 id="choosing-an-ipv4-subnet"&gt;Choosing an IPv4&amp;nbsp;Subnet&lt;/h2&gt;
&lt;p&gt;I&amp;#8217;d recommend using a random IPv4 private subnet instead of 10.0.0.X or the like, see the &lt;a href="/tinc-vpn-with-ipv6-and-iproute2.html#choosing-an-ipv6-subnet"&gt;Choosing an IPv6 Subnet&lt;/a&gt;
section of my first tinc post for my&amp;nbsp;reasons.&lt;/p&gt;
&lt;p&gt;So let&amp;#8217;s get started by rolling the dice for our IPv4 subnet. This time we only need 16bit of random information instead
of 40, or a 2-digit hexadecimal number insdead of the 10-digit we needed for IPv6. Shows quite drastically how short
IPv4 addresses&amp;nbsp;are.&lt;/p&gt;
&lt;p&gt;And as one usually writes IPv4 in decimal notation, you can enter this in your shell to generate your address range in&amp;nbsp;python:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;random&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;10.{}.{}.X&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Rolling the dice by hand is a valid approach, too. ;)
For me, this resulted in &lt;code&gt;10.88.24.X&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;h3 id="entry-node-configuration"&gt;Entry Node&amp;nbsp;Configuration&lt;/h3&gt;
&lt;p&gt;I&amp;#8217;ll list the whole, but modified, versions of the config files from &lt;a href="/tinc-vpn-with-ipv6-and-iproute2.html"&gt;my first tinc article&lt;/a&gt; in this guide to put
everything into&amp;nbsp;context.&lt;/p&gt;
&lt;p&gt;As a reminder, &lt;code&gt;$STATIC_IP&lt;/code&gt; is
the public static (presumably IPv4) &lt;span class="caps"&gt;IP&lt;/span&gt; of your entry node, and &lt;code&gt;$INTERFACE&lt;/code&gt; will be replaced by tinc itself, so no
need for yourself to do it. The remaining variables should be self-explanatory, but you can read about them in the first
tinc article,&amp;nbsp;too.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s get started with &lt;code&gt;/etc/tinc/$VPN_NAME/hosts/$ENTRY_NODE_NAME&lt;/code&gt;, you have to add another &lt;code&gt;Subnet&lt;/code&gt; line with
the tinc-internal IPv4 address of the entry&amp;nbsp;node:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;Address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$STATIC_IP&lt;/span&gt;
&lt;span class="nv"&gt;Subnet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; fde3:b35d:dadf::1/128
&lt;span class="nv"&gt;Subnet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;.88.24.1/32
&lt;span class="c1"&gt;# make this node the default gateway for the network&lt;/span&gt;
&lt;span class="nv"&gt;Subnet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;.0.0.0/0
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;em&gt;Thanks to &lt;a href="http://bernhard.scheirle.de"&gt;Bernhard&lt;/a&gt; for pointing out the missing Subnet = 0.0.0.0/0&amp;nbsp;part.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And then, assign the new address to the tinc interface brought up by &lt;code&gt;/etc/tinc/$VPN_NAME/tinc-up&lt;/code&gt;:&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2
3
4&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;
ip link &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt; up
ip addr add fde3:b35d:dadf::1/64 dev &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt;
ip addr add &lt;span class="m"&gt;10&lt;/span&gt;.88.24.1/24 dev &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;h3 id="peer-node-configuration"&gt;Peer Node&amp;nbsp;Configuration&lt;/h3&gt;
&lt;p&gt;The same needs to be done to each peer node that needs to access the internet through tinc - with an individual
IPv4 address per node, of&amp;nbsp;course.&lt;/p&gt;
&lt;p&gt;First, in &lt;code&gt;/etc/tinc/$VPN_NAME/hosts/$NODE_NAME&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;Subnet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; fde3:b35d:dadf::X/128
&lt;span class="nv"&gt;Subnet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;.88.24.X/32
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;And then, in &lt;code&gt;/etc/tinc/$VPN_NAME/tinc-up&lt;/code&gt;:&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2
3
4&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;
ip link &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt; up
ip addr add fde3:b35d:dadf::X/64 dev &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt;
ip addr add &lt;span class="m"&gt;10&lt;/span&gt;.88.24.X/24 dev &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;h3 id="nat-on-the-entry-node"&gt;&lt;span class="caps"&gt;NAT&lt;/span&gt; on the entry&amp;nbsp;node&lt;/h3&gt;
&lt;p&gt;If you haven&amp;#8217;t done it already, you need to enable IPv4 forwarding in &lt;code&gt;/etc/sysctl.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;net.ipv4.ip_forward&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;I use &lt;a href="http://shorewall.net/"&gt;shorewall&lt;/a&gt; on all my servers as a frontend to iptables. Everything is in a few config files and actually
nice and easy to use, in contrast to iptables. Shorewall can be used as a simple one-interface firewall, but also supports more complex setups,
like the one we need&amp;nbsp;here.&lt;/p&gt;
&lt;p&gt;In case you prefer to use raw iptables, I expect you to know what to do anyway.&amp;nbsp;;)&lt;/p&gt;
&lt;p&gt;The situation for our tinc setup is exactly like the two-interfaces example that comes with shorewall, in Debian it&amp;#8217;s located
at &lt;code&gt;/usr/share/doc/shorewall/examples/two-interfaces&lt;/code&gt;. The only thing you need to adjust is that the tinc network is
interface &lt;code&gt;$VPNNAME&lt;/code&gt; and not eth1 - the change of the zone name from &lt;code&gt;loc&lt;/code&gt; to &lt;code&gt;tinc&lt;/code&gt; is purely&amp;nbsp;cosmetic.&lt;/p&gt;
&lt;p&gt;Change the example eth1 interface to your tinc interface in &lt;code&gt;/etc/shorewall/interfaces&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;...
&lt;span class="c1"&gt;# replaced&lt;/span&gt;
&lt;span class="c1"&gt;# loc     eth1            tcpflags,nosmurfs,routefilter,logmartians&lt;/span&gt;
&lt;span class="c1"&gt;# with&lt;/span&gt;
tinc     &lt;span class="nv"&gt;$VPNNAME&lt;/span&gt;         tcpflags,nosmurfs,routefilter,logmartians
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;And then change the name in &lt;code&gt;/etc/shorewall/zones&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# replaced&lt;/span&gt;
&lt;span class="c1"&gt;# loc ipv4&lt;/span&gt;
&lt;span class="c1"&gt;# with&lt;/span&gt;
tinc ipv4
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Then adjust the rest of shorewall to your needs. ;) The documentation is excellent in my opinion, so I won&amp;#8217;t repeat
it&amp;nbsp;here.&lt;/p&gt;
&lt;p&gt;Switching from ufw to shorewall was a great relief for me - even for simple one-interface firewalling, I&amp;#8217;d recommend to use&amp;nbsp;shorewall.&lt;/p&gt;
&lt;h2 id="tunnel-in-operation"&gt;Tunnel in&amp;nbsp;Operation&lt;/h2&gt;
&lt;h3 id="enabling-the-tunnel"&gt;Enabling the&amp;nbsp;Tunnel&lt;/h3&gt;
&lt;p&gt;This is a bit cumbersome, I have to admit. One could automate this with a script, or maybe even a convenient netctl
unit on Arch Linux, but as I need the tunneling not all to often, I didn&amp;#8217;t take the time for it. In case you hack something
together, I&amp;#8217;d be happy to hear from&amp;nbsp;you.&lt;/p&gt;
&lt;p&gt;First, you need to find out the &lt;span class="caps"&gt;IP&lt;/span&gt; of your router and the name of the interface the router is on, let&amp;#8217;s call
them &lt;code&gt;$ROUTER_IP&lt;/code&gt; and &lt;code&gt;$ROUTER_INTERFACE&lt;/code&gt;. Both will be needed to disable the tunnel again, so keep a&amp;nbsp;note!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ip route show to &lt;span class="m"&gt;0&lt;/span&gt;/0
&lt;span class="c1"&gt;# output: default via 192.168.178.1 dev enp0s25&lt;/span&gt;
&lt;span class="c1"&gt;# of the form: default via $ROUTER_IP dev $ROUTER_INTERFACE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Aditionally, you&amp;#8217;ll need your &lt;code&gt;$STATIC_IP&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Add a static route to the entry node via the router&lt;/span&gt;
&lt;span class="c1"&gt;# so that the entry node can still be reached when you change your default route&lt;/span&gt;
sudo ip route add &lt;span class="nv"&gt;$STATIC_IP&lt;/span&gt; via &lt;span class="nv"&gt;$ROUTER_IP&lt;/span&gt; dev enp0s25
&lt;span class="c1"&gt;# route all internet trafic through the tinc interface&lt;/span&gt;
sudo ip route change default via &lt;span class="m"&gt;10&lt;/span&gt;.84.82.X dev &lt;span class="nv"&gt;$VPN_NAME&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;If you resolve &lt;span class="caps"&gt;DNS&lt;/span&gt; against your local &lt;code&gt;$ROUTER_IP&lt;/code&gt;, you probably want to change
that as long as the tunnel is up to prevent your &lt;span class="caps"&gt;DNS&lt;/span&gt; queries leaking.
If you don&amp;#8217;t do this, the router you are connected to (and the internet provider behind it)
will see your &lt;span class="caps"&gt;DNS&lt;/span&gt; queries as&amp;nbsp;plaintext.&lt;/p&gt;
&lt;p&gt;You need an alternative &lt;span class="caps"&gt;DNS&lt;/span&gt; server, e.g. from the &lt;a href="http://www.orsn.org/de/tech/pubdns/"&gt;Open Root Server Network&lt;/a&gt; or &lt;a href="http://www.ccc.de/de/censorship/dns-howto"&gt;&lt;span class="caps"&gt;CCC&lt;/span&gt; and the like&lt;/a&gt;.
You &lt;em&gt;can&lt;/em&gt; use &lt;code&gt;8.8.8.8&lt;/code&gt; - in case you want to report every site you visit to Google instead of the other&amp;nbsp;options.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;/etc/resolv.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Comment out this line:&lt;/span&gt;
&lt;span class="c1"&gt;# nameserver $ROUTER_IP&lt;/span&gt;
&lt;span class="c1"&gt;# add this line with the DNS server of your choice,&lt;/span&gt;
&lt;span class="c1"&gt;# here: dnscache.berlin.ccc.de&lt;/span&gt;
nameserver &lt;span class="m"&gt;213&lt;/span&gt;.73.91.35
&lt;/pre&gt;&lt;/div&gt;


&lt;h3 id="disabling-the-tunnel"&gt;Disabling the&amp;nbsp;Tunnel&lt;/h3&gt;
&lt;p&gt;To disable the tunnel, we need to reverse the steps from&amp;nbsp;above:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# change the default route back to route traffic to the router&lt;/span&gt;
sudo ip route change default via &lt;span class="nv"&gt;$ROUTER_IP&lt;/span&gt; dev &lt;span class="nv"&gt;$ROUTER_INTERFACE&lt;/span&gt;
&lt;span class="c1"&gt;# delete the explicit route to your entry node&amp;#39;s $STATIC_IP - this is optional&lt;/span&gt;
&lt;span class="c1"&gt;# as it doesn&amp;#39;t do anything anymore, and will vanish on next reboot.&lt;/span&gt;
sudo ip route del &lt;span class="nv"&gt;$STATIC_IP&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;In &lt;code&gt;/etc/resolv.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# comment out this line again&lt;/span&gt;
&lt;span class="c1"&gt;# nameserver 213.73.91.35&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;h2 id="next-steps"&gt;Next&amp;nbsp;Steps&lt;/h2&gt;
&lt;p&gt;This setup still lacks IPv6 connectivity, which would be nice especially when you&amp;#8217;re behind an IPv4 only internet&amp;nbsp;connection.&lt;/p&gt;
&lt;p&gt;One could provide that by more shorewall and public static IPv6 addresses for each tinc, or by &lt;a href="http://en.wikipedia.org/wiki/Radvd"&gt;radvd&lt;/a&gt;
handing out the &lt;code&gt;/64&lt;/code&gt; prefix you probably got with your server and enable the IPv6 Privacy Extension on the clients,
which would be the IPv6 equivalent of a &lt;span class="caps"&gt;NAT&lt;/span&gt; to make connections&amp;nbsp;indistinguishable.&lt;/p&gt;
&lt;p&gt;But as most hosts I need to reach via IPv6 are actually my own, and therefore, they already are inside my tinc network,
so I skipped this step for&amp;nbsp;now.&lt;/p&gt;
&lt;h2 id="other-options"&gt;Other&amp;nbsp;Options&lt;/h2&gt;
&lt;h3 id="4in6"&gt;4in6&lt;/h3&gt;
&lt;p&gt;Another option is to use &lt;a href="http://en.wikipedia.org/wiki/4in6"&gt;4in6&lt;/a&gt; tunnels which can be created with &lt;code&gt;ip -6 tunnel add mode ipip6 ...&lt;/code&gt; in tinc-up and tinc-down,
but this is functionally the same as making tinc dual stack, but much more hassle to configure as you end up
with a separate interface for each peer&amp;nbsp;node.&lt;/p&gt;
&lt;h3 id="nat64"&gt;&lt;span class="caps"&gt;NAT64&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;A third option would be &lt;a href="http://en.wikipedia.org/wiki/NAT64"&gt;&lt;span class="caps"&gt;NAT64&lt;/span&gt;&lt;/a&gt; combined with &lt;span class="caps"&gt;DNS64&lt;/span&gt; to translate all A records to simulated &lt;span class="caps"&gt;AAAA&lt;/span&gt; records and then
establish IPv6 only connections to the &lt;span class="caps"&gt;NAT&lt;/span&gt; which then translates the requests transparently to&amp;nbsp;IPv4.&lt;/p&gt;
&lt;p&gt;This would allow to have all tinc nodes IPv6 only, at the cost of running a full &lt;span class="caps"&gt;DNS&lt;/span&gt; server, an advanced &lt;span class="caps"&gt;NAT&lt;/span&gt; setup and
a servere interference in the client&amp;#8217;s traffic - but well, you need a &lt;span class="caps"&gt;NAT&lt;/span&gt;&amp;nbsp;anyway..&lt;/p&gt;
&lt;p&gt;I might try it someday following this guide, but I don&amp;#8217;t think it&amp;#8217;s worth the effort compared to the above IPv4 setup
if you don&amp;#8217;t care whether your network is IPv6-only or not:
&lt;a href="https://dellaert.org/2012/09/23/how-to-setup-an-ipv6-only-network-with-nat64-dns64-and-shorewall/"&gt;How to setup an IPv6-only network with &lt;span class="caps"&gt;NAT64&lt;/span&gt;, &lt;span class="caps"&gt;DNS64&lt;/span&gt; and&amp;nbsp;Shorewall&lt;/a&gt;&lt;/p&gt;</content></entry><entry><title>Brace your bonsai, winter is there!</title><link href="https://florianjacob.de/2013-bonsai-report.html" rel="alternate"></link><published>2014-01-11T17:30:00+01:00</published><updated>2014-01-11T17:30:00+01:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2014-01-11:/2013-bonsai-report.html</id><summary type="html">&lt;p&gt;Let me introduce you to my bonsai! I&amp;#8217;m sure he&amp;#8217;d be pleased to meet&amp;nbsp;you.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Let me introduce you to my bonsai! I&amp;#8217;m sure he&amp;#8217;d be pleased to meet you.
&lt;img class="bordered flexible" src="/images/bonsai2013.jpg" alt="My bonsai, end of 2013, ready for winter" /&gt;&lt;/p&gt;
&lt;p&gt;He&amp;#8217;s a Japanese white pine (Mädchenkiefer in German), and I adopted him in March 2012 when he was just a sapling
from a tree&amp;nbsp;nursery.&lt;/p&gt;
&lt;p&gt;The photo is from the beginning of December, just after I wrapped his pot in bast fiber in order to protect him from
the cold (he needs to stay outside all&amp;nbsp;year).&lt;/p&gt;
&lt;p&gt;If you take a closer look, you can see that his branches are freshly wired and brought in shape from the last time we
were at our &lt;a href="http://www.bonsai-gakko-en.de/"&gt;bonsai school&lt;/a&gt; in mid-November. Everything prepared for a good development next&amp;nbsp;year!&lt;/p&gt;
&lt;p&gt;Oh, and don&amp;#8217;t tell him, but he might get a companion next spring.&amp;nbsp;;)&lt;/p&gt;</content></entry><entry><title>How to set up a small tinc VPN using IPv6 payloads over IPv4 and iproute2</title><link href="https://florianjacob.de/tinc-vpn-with-ipv6-and-iproute2.html" rel="alternate"></link><published>2013-12-01T20:30:00+01:00</published><updated>2013-12-06T22:40:00+01:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2013-12-01:/tinc-vpn-with-ipv6-and-iproute2.html</id><summary type="html">&lt;p&gt;This describes the setup I use to connect my computers at home, on the road, my home server and virtual server with [tinc][],
„a Virtual Private Network (&lt;span class="caps"&gt;VPN&lt;/span&gt;) daemon that uses tunnelling and encryption to create a secure private network between hosts on the&amp;nbsp;Internet”.&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;em&gt;Follow-Up: &lt;a href="/tinc-ipv4-internet.html"&gt;How to tunnel IPv4 internet through&amp;nbsp;tinc&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Correction: In the first version, I had the tinc host configuration &lt;code&gt;Subnet&lt;/code&gt; variables have a &lt;code&gt;/64&lt;/code&gt; network prefix. This was
a copy mistake from the tinc-up scripts, it needs to be &lt;code&gt;/128&lt;/code&gt;. Thanks to Miguel for the&amp;nbsp;hint.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This describes the setup I use to connect my computers at home, on the road, my home server and virtual server with &lt;a href="http://tinc-vpn.org/"&gt;tinc&lt;/a&gt;,
„a Virtual Private Network (&lt;span class="caps"&gt;VPN&lt;/span&gt;) daemon that uses tunnelling and encryption to create a secure private network between hosts on the&amp;nbsp;Internet”.&lt;/p&gt;
&lt;p&gt;Additionally, I explain the setup for interconnecting mutliple tinc VPNs at the end of this&amp;nbsp;article.&lt;/p&gt;
&lt;p&gt;I used an IPv6 &lt;span class="caps"&gt;ULA&lt;/span&gt; subnet (Unique Local Address, &lt;a href="http://tools.ietf.org/html/rfc4193"&gt;&lt;span class="caps"&gt;RFC4193&lt;/span&gt;&lt;/a&gt;) and iproute2 for this. A single always-on machine
with a static IPv4 address and which is not behind a &lt;span class="caps"&gt;NAT&lt;/span&gt; is handy as a central entry and discovery node for all other machines,
but not required (I use my virtual server for this).
Port forwarding (per default port 665, needed for both &lt;span class="caps"&gt;TCP&lt;/span&gt; and &lt;span class="caps"&gt;UDP&lt;/span&gt;) and dynamic &lt;span class="caps"&gt;DNS&lt;/span&gt; should work,&amp;nbsp;too.&lt;/p&gt;
&lt;p&gt;All other nodes can be behind a &lt;span class="caps"&gt;NAT&lt;/span&gt;, tinc will use &lt;span class="caps"&gt;UDP&lt;/span&gt; hole punching. If it&amp;#8217;s possible, two peer nodes behind a &lt;span class="caps"&gt;NAT&lt;/span&gt;
can communicate directly after an initial discovery using the entry node. This means the entry node relays the traffic
between two peer nodes only when it&amp;#8217;s&amp;nbsp;needed.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you prefer IPv4 and ifconfig, check out Marex&amp;#8217; at least equally good howto over at &lt;a href="https://execfoo.de/blog/setup-vpn-using-tinc.html"&gt;execfoo.de&lt;/a&gt;.
His article was a great help for me (and he was&amp;nbsp;first).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This &lt;a href="http://www.tty1.net/blog/2010/ifconfig-ip-comparison_en.html"&gt;ifconfig / iproute2 comparison&lt;/a&gt; helped me a lot with converting ifconfig to iproute2&amp;nbsp;commands.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="choosing-an-ipv6-subnet"&gt;Choosing an IPv6&amp;nbsp;Subnet&lt;/h2&gt;
&lt;p&gt;With IPv6, there&amp;#8217;s nothing like &lt;code&gt;192.168.X.X&lt;/code&gt;, as everything is intended to have a globally unique address.
Not all addresses need to be &lt;em&gt;routed&lt;/em&gt; globally though - for that purpose, there are ULAs.
If you have a spare global /64-Subnet, even better, then you
could even route your internet traffic through your &lt;span class="caps"&gt;VPN&lt;/span&gt; leaving for the rest of the internet e.g. at your entry&amp;nbsp;node.&lt;/p&gt;
&lt;p&gt;But I&amp;#8217;ll explain how to get a &lt;span class="caps"&gt;ULA&lt;/span&gt; net here. First, you need to get 40bit of random information (a random 10-digit hexadecimal number)
for your global &lt;span class="caps"&gt;ID&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;If you don&amp;#8217;t want to roll the dice by hand (which is a recommended exercise :P ), you can get a prefix generated
at &lt;a href="http://unique-local-ipv6.com/"&gt;unique-local-ipv6.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s say you rolled a &lt;code&gt;e3b35ddadf&lt;/code&gt; (I&amp;#8217;d count that as 4 ones in a row if you manage to roll that in my &lt;span class="caps"&gt;DSA&lt;/span&gt; round)
and you want to use that as your global &lt;span class="caps"&gt;ID&lt;/span&gt;. You then need to add &amp;#8220;fd&amp;#8221; as
prefix for ULAs, resulting in the IPv6&amp;nbsp;net&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;fde3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;b35d&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;dadf&lt;/span&gt;&lt;span class="o"&gt;::/&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;under your&amp;nbsp;control.&lt;/p&gt;
&lt;p&gt;From this, we take „zero”st /64-Subnet from this for our &lt;span class="caps"&gt;VPN&lt;/span&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;fde3&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;b35d&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;dadf&lt;/span&gt;&lt;span class="o"&gt;::/&lt;/span&gt;&lt;span class="mi"&gt;64&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;If you&amp;#8217;re one of the „IPv6 addresses are soo long! I can memorize &lt;code&gt;192.168.0.0/32&lt;/code&gt; much better!“ people - well, that&amp;#8217;s because
you &lt;em&gt;and everyone else&lt;/em&gt; uses those few subnets in &lt;code&gt;192.168.X.X&lt;/code&gt; and &lt;code&gt;10.X.X.X&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Imagine you use &lt;code&gt;192.168.178.0/32&lt;/code&gt; at your home
&lt;span class="caps"&gt;LAN&lt;/span&gt;, and you take &lt;code&gt;192.168.0.0/32&lt;/code&gt; for your tinc &lt;span class="caps"&gt;VPN&lt;/span&gt;. Then you are at your friend&amp;#8217;s house, want to connect to your &lt;span class="caps"&gt;VPN&lt;/span&gt;,
but nothing works, because &lt;em&gt;they already use&lt;/em&gt; &lt;code&gt;192.168.0.0/32&lt;/code&gt; for &lt;em&gt;their&lt;/em&gt; &lt;span class="caps"&gt;LAN&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Or let&amp;#8217;s say you and your friend think tinc is so cool that want to interconnect your
VPNs, and you both chose &lt;code&gt;192.168.0.0/32&lt;/code&gt; when you created your tinc VPNs some time ago? &lt;strong&gt;Baaamm&lt;/strong&gt;, address clashes,
one of you two has to reconfigure all their&amp;nbsp;machines.&lt;/p&gt;
&lt;p&gt;All this won&amp;#8217;t happen with IPv6 and proper random global IDs. And if you don&amp;#8217;t want to memorize them, just put some
entries in your &lt;code&gt;/etc/hosts&lt;/code&gt; file. I find plain host names much more convenient than typing &lt;em&gt;any&lt;/em&gt; numerical&amp;nbsp;address.&lt;/p&gt;
&lt;p&gt;But now, onward to the actual configuration. This assumes you already installed&amp;nbsp;tinc.&lt;/p&gt;
&lt;h2 id="entry-node-configuration"&gt;Entry Node&amp;nbsp;Configuration&lt;/h2&gt;
&lt;p&gt;Chose a &lt;a href="http://xkcd.com/910/"&gt;$VPN_NAME&lt;/a&gt; to identify your &lt;span class="caps"&gt;VPN&lt;/span&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo mkdir -p /etc/tinc/&lt;span class="nv"&gt;$VPN_NAME&lt;/span&gt;/hosts
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Then, write into &lt;code&gt;/etc/tinc/$VPN_NAME/tinc.conf:&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$ENTRY_NODE_NAME&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;$ENTRY_NODE_NAME&lt;/code&gt; can be any name to identify the entry node. Using your hostname (entering &lt;code&gt;hostname&lt;/code&gt; in a terminal
returns it) is a good idea. The name may only consist of alphanumeric and underscore&amp;nbsp;characters.&lt;/p&gt;
&lt;p&gt;Next file is &lt;code&gt;/etc/tinc/$VPN_NAME/hosts/$ENTRY_NODE_NAME&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;Address&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$STATIC_IP&lt;/span&gt;
&lt;span class="nv"&gt;Subnet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; fde3:b35d:dadf::1/128
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;Subnet&lt;/code&gt; variable specifies which subnet is assigned to that tinc node. We only assign a single IPv6 address to every
node, so we set it to the address we want to assign and &lt;code&gt;/128&lt;/code&gt; prefix&amp;nbsp;length.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$STATIC_IP&lt;/code&gt; is the static IPv4 address I mentioned earlier. You can specify multiple address statements, e.g. the first
one for IPv6 and, if that can&amp;#8217;t be reached, the second one for&amp;nbsp;IPv4.&lt;/p&gt;
&lt;p&gt;I don&amp;#8217;t do that, because only then tinc can
make direct connections between all node pairs when they&amp;#8217;re needed even in case one sits behind an IPv4 only internet access.
(It would still work, but then all traffic will be relayed over you entry&amp;nbsp;node).&lt;/p&gt;
&lt;p&gt;Read the docs if you want to use a &lt;span class="caps"&gt;DNS&lt;/span&gt;&amp;nbsp;name.&lt;/p&gt;
&lt;p&gt;After that you generate the public/private key pair for your entry&amp;nbsp;node:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo tincd -n &lt;span class="nv"&gt;$VPN_NAME&lt;/span&gt; -K4096
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Leave everything at the defaults. This conveniently appends the public key to your host configuration file, we&amp;#8217;ll need
that on the other hosts&amp;nbsp;later.&lt;/p&gt;
&lt;p&gt;To finish the entry node configuration, we need two scripts for setting up and tearing down the &lt;span class="caps"&gt;VPN&lt;/span&gt;&amp;nbsp;connection:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/tinc/$VPN_NAME/tinc-up&lt;/code&gt;:&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2
3&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;
ip link &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt; up
ip addr add fde3:b35d:dadf::1/64 dev &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;&lt;code&gt;/etc/tinc/$VPN_NAME/tinc-down&lt;/code&gt;:&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;
ip link &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt; down
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;No need to replace &lt;code&gt;$INTERFACE&lt;/code&gt; here, it will be replaced by tinc with the virtual network device it uses for your &lt;span class="caps"&gt;VPN&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;The IPv6 address above needs to be the one you configured in the &lt;code&gt;Subnet&lt;/code&gt; variable in your host configuration and is the address used for
the virtual tinc network interface. But in contrast to the &lt;code&gt;Subnet&lt;/code&gt; variable, the &lt;code&gt;/64&lt;/code&gt; subnet prefix length here specifies
which subnet you are connected to &lt;em&gt;via&lt;/em&gt; tinc, so this should be the &lt;code&gt;/64&lt;/code&gt; subnet you take your IPv6 addresses from
for your tinc &lt;span class="caps"&gt;VPN&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Think of the subnet prefix length here as &amp;#8220;which addresses can be reached directly in one hop, without going through a&amp;nbsp;router?&amp;#8221;.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s an IPv6 best practice to use only subnets of &lt;code&gt;/64&lt;/code&gt; size, with the exception of &lt;code&gt;/128&lt;/code&gt; for a single address and
&lt;code&gt;/127&lt;/code&gt; for a point to point connection. See &lt;a href="http://tools.ietf.org/html/rfc5375#section-3"&gt;Section 3 of &lt;span class="caps"&gt;RFC5375&lt;/span&gt;&lt;/a&gt; for more explanation&amp;nbsp;why.&lt;/p&gt;
&lt;p&gt;Many features like Router Advertisement, Stateless Link Addres
Autoconfiguration and more rely on &lt;code&gt;/64&lt;/code&gt; subnets, but you &lt;em&gt;can&lt;/em&gt; use prefixes longer than &lt;code&gt;/64&lt;/code&gt; e.g. when assigning
addresses manually. But you need to avoid some special addresses, see &lt;a href="http://tools.ietf.org/html/rfc5375#appendix-B.2"&gt;Appendix B2 of &lt;span class="caps"&gt;RFC5375&lt;/span&gt;&lt;/a&gt;, „Considerations for Subnet Prefixes Longer than /64“ for more&amp;nbsp;details.&lt;/p&gt;
&lt;p&gt;Make the scripts&amp;nbsp;executable:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo chmod +x tinc-up tinc-down
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;And you&amp;#8217;re done configuring your entry&amp;nbsp;node!&lt;/p&gt;
&lt;h2 id="peer-node-configuration"&gt;Peer Node&amp;nbsp;Configuration&lt;/h2&gt;
&lt;p&gt;The peer node configuration is very similar. You need to pick a &lt;code&gt;$NODE_NAME&lt;/code&gt; (again your &lt;code&gt;hostname&lt;/code&gt; makes sense) and
a different X for each node for the &lt;span class="caps"&gt;IP&lt;/span&gt;&amp;nbsp;addresses.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo mkdir -p /etc/tinc/&lt;span class="nv"&gt;$VPN_NAME&lt;/span&gt;/hosts
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;/etc/tinc/$VPN_NAME/tinc.conf&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;Name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$NODE_NAME&lt;/span&gt;
&lt;span class="nv"&gt;ConnectTo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$ENTRY_NODE_NAME&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;code&gt;/etc/tinc/$VPN_NAME/hosts/$NODE_NAME&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;Subnet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; fde3:b35d:dadf::X/128
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Generate the public/private key pair for your this&amp;nbsp;node:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo tincd -n &lt;span class="nv"&gt;$VPN_NAME&lt;/span&gt; -K4096
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;The setup/teardown scripts are exactly the same, except the &lt;span class="caps"&gt;IP&lt;/span&gt; address in the tinc-up&amp;nbsp;script:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/tinc/$VPN_NAME/tinc-up&lt;/code&gt;:&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2
3&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;
ip link &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt; up
ip addr add fde3:b35d:dadf::X/64 dev &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;&lt;code&gt;/etc/tinc/$VPN_NAME/tinc-down&lt;/code&gt;:&lt;/p&gt;
&lt;table class="highlighttable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;
ip link &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt; down
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Don&amp;#8217;t forget to make them&amp;nbsp;executable:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo chmod +x tinc-up tinc-down
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;As already mentioned, then transfer &lt;code&gt;/etc/tinc/$VPN_NAME/hosts/$ENTRY_NODE&lt;/code&gt; to your local &lt;code&gt;/etc/tinc/$VPN_NAME/hosts/&lt;/code&gt; folder, and
the &lt;code&gt;/etc/tinc/$VPN_NAME/hosts/$NODE_NAME&lt;/code&gt; to your entry node&amp;#8217;s &lt;code&gt;/etc/tinc/$VPN_NAME/hosts/&lt;/code&gt; folder.&lt;/p&gt;
&lt;p&gt;No need to copy peer node host configuration files around between each other, they&amp;#8217;ll find each other over the entry
node without any additional configuration. Yay, tinc magic!&amp;nbsp;\o/&lt;/p&gt;
&lt;h2 id="enable-your-tinc-vpn-on-system-startup"&gt;Enable your tinc &lt;span class="caps"&gt;VPN&lt;/span&gt; on system&amp;nbsp;startup&lt;/h2&gt;
&lt;p&gt;Start your tinc engines on your entry node and all peer nodes, and test your &lt;span class="caps"&gt;VPN&lt;/span&gt;!&lt;/p&gt;
&lt;p&gt;For systems using&amp;nbsp;systemd:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; tincd@&lt;span class="nv"&gt;$VPN_NAME&lt;/span&gt;
sudo systemctl start tincd@&lt;span class="nv"&gt;$VPN_NAME&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;For systems using SystemV-style init (=&amp;gt; Debian, because it&amp;#8217;s still the only one ancient enough for them)
or upstart (=&amp;gt; Ubuntu, because they&amp;#8217;re Ubuntu), that&amp;nbsp;is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;cat &lt;span class="nv"&gt;$VPN_NAME&lt;/span&gt; &amp;gt;&amp;gt; /etc/tinc/nets.boot
service tinc start
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Your connection will need some time after startup until it&amp;#8217;s established. Test it&amp;nbsp;with&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ping6 fde3:b35d:dadf::1
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and have&amp;nbsp;fun!&lt;/p&gt;
&lt;h2 id="interconnecting-tinc-networks"&gt;Interconnecting tinc&amp;nbsp;networks&lt;/h2&gt;
&lt;p&gt;If you want to connect you tinc network to the tinc network of that friend mentioned earlier, not much work is&amp;nbsp;left.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s say they rolled&amp;nbsp;a&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;fde3:b35d:dadf::/48
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and use the&amp;nbsp;subnet&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;fde3:b35d:dadf::/64
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;for their tinc&amp;nbsp;network.&lt;/p&gt;
&lt;p&gt;Then, to everey &lt;code&gt;tinc-up&lt;/code&gt; script on your nodes, you have to add a line&amp;nbsp;saying:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;ip route add fde3:b35d:dadf::/64 dev &lt;span class="nv"&gt;$INTERFACE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Again, &lt;code&gt;$INTERFACE&lt;/code&gt; is replaced by tinc, no need to do it&amp;nbsp;yourself.&lt;/p&gt;
&lt;p&gt;Next, you need to copy their entry node host configuration file to your
&lt;code&gt;/etc/tinc/$VPN_NAME/hosts/&lt;/code&gt; on your entry&amp;nbsp;node.&lt;/p&gt;
&lt;p&gt;Now the entry node knows the details about the friend&amp;#8217;s entry node. You then need to add another line to the
&lt;code&gt;/etc/tinc/$VPN_NAME/tinc.conf&lt;/code&gt; on your entry&amp;nbsp;node:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nv"&gt;ConnectTo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$ENTRY_NODE_NAME_OF_FRIEND&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;and you&amp;#8217;re done! (Don&amp;#8217;t forget to restart tinc, though. ;)&amp;nbsp;)&lt;/p&gt;</content></entry><entry><title>New Language Feeds</title><link href="https://florianjacob.de/new-language-feeds.html" rel="alternate"></link><published>2013-11-09T22:59:00+01:00</published><updated>2013-11-09T22:59:00+01:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2013-11-09:/new-language-feeds.html</id><summary type="html">&lt;p&gt;I have two new feeds available (which might caused duplicate entries in your feed reader, sorry for that). In case you want only my English or only my German articles, read on.&amp;nbsp;;)&lt;/p&gt;</summary><content type="html">&lt;p&gt;As you might have noticed, my last two posts were in&amp;nbsp;German.&lt;/p&gt;
&lt;p&gt;In the future, I think I&amp;#8217;ll have more topics on which I want to write in my
first language, or which are only relevant to a German audience. So besides the &amp;#8220;All Articles&amp;#8221; feed you&amp;#8217;re used to,
I now generate additional &amp;#8220;All English Articles&amp;#8221; and &amp;#8220;Alle deutschen Artikel&amp;#8221;&amp;nbsp;feeds.&lt;/p&gt;
&lt;p&gt;You can find them on the right, watch out for my new shiny feed icons.&amp;nbsp;;)&lt;/p&gt;</content></entry><entry><title>lavabit.com has shut down, wolkenplanet.de has started up</title><link href="https://florianjacob.de/lavabit-shutdown-wolkenplanet-startup.html" rel="alternate"></link><published>2013-10-03T19:11:00+02:00</published><updated>2013-10-03T19:11:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2013-10-03:/lavabit-shutdown-wolkenplanet-startup.html</id><summary type="html">&lt;p&gt;On the 8th of August, the email provider of me and, among many others, some guy called Edward J. Snowden has
decided to close its doors instead of giving all their data to the &lt;span class="caps"&gt;NSA&lt;/span&gt;.&lt;/p&gt;</summary><content type="html">&lt;h2 id="tldr"&gt;&lt;span class="caps"&gt;TL&lt;/span&gt;;&lt;span class="caps"&gt;DR&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Edward Snowden was using lavabit, so the only choices left for the owner were to give all of the user&amp;#8217;s data to the &lt;span class="caps"&gt;NSA&lt;/span&gt;
or to shut down the service. He chose the latter, but isn&amp;#8217;t allow to say anything about what has actually happened.
And let me say that I am quite happy he did&amp;nbsp;so.&lt;/p&gt;
&lt;p&gt;This means that the privacy of 400 000 lavabit customers who didn&amp;#8217;t do anything wrong would have been compromised
if Ladar hadn&amp;#8217;t shut down lavabit in beforehand. This also means that no cloud provider located in the &lt;span class="caps"&gt;US&lt;/span&gt; can keep
their promises concerning the security of the data you hand over to&amp;nbsp;them.&lt;/p&gt;
&lt;p&gt;As a consequence, I now run my own mail server for a month, and you can reach me at briefe {ÄT} florianjacob [Punkt] de
or my private address that I gave you in case I know you in person.&amp;nbsp;;)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://posteo.de/"&gt;posteo&lt;/a&gt; is a good german mail&amp;nbsp;provider.&lt;/p&gt;
&lt;h2 id="how-i-found-lavabit"&gt;How I found&amp;nbsp;lavabit&lt;/h2&gt;
&lt;p&gt;Many years ago, I was in search of a new email provider, as my first one provided me with no more than &lt;span class="caps"&gt;12MB&lt;/span&gt; of space
for years and didn&amp;#8217;t offer &lt;span class="caps"&gt;IMAP&lt;/span&gt;&amp;nbsp;acces.&lt;/p&gt;
&lt;p&gt;I didn&amp;#8217;t want to use Google Mail, because even at that time they were somewhat suspicious to me. So I searched for
alternatives, and found lavabit, a provider with the defined goal to be better than Google Mail, but with privacy and even
encrypted mail boxes - at that time, I didn&amp;#8217;t even know what that&amp;nbsp;meant.&lt;/p&gt;
&lt;h2 id="what-has-happened"&gt;What has&amp;nbsp;happened&lt;/h2&gt;
&lt;p&gt;On the 8th of August, I noticed that I couldn&amp;#8217;t connect to my post boxes anymore - at first I thought my mail client had
problems, or that it was just a temporary outage, but the problem persisted for a day, and on lavabit.com, I found this&amp;nbsp;explanation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;My Fellow Users,

I have been forced to make a difficult decision: to become complicit in crimes against the American people or walk away from nearly ten years of hard work by shutting down Lavabit. After significant soul searching, I have decided to suspend operations. I wish that I could legally share with you the events that led to my decision. I cannot. I feel you deserve to know what’s going on--the first amendment is supposed to guarantee me the freedom to speak out in situations like this. Unfortunately, Congress has passed laws that say otherwise. As things currently stand, I cannot share my experiences over the last six weeks, even though I have twice made the appropriate requests.

What’s going to happen now? We’ve already started preparing the paperwork needed to continue to fight for the Constitution in the Fourth Circuit Court of Appeals. A favorable decision would allow me resurrect Lavabit as an American company.

This experience has taught me one very important lesson: without congressional action or a strong judicial precedent, I would _strongly_ recommend against anyone trusting their private data to a company with physical ties to the United States.

Sincerely,
Ladar Levison
Owner and Operator, Lavabit LLC
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;At this point, I was very glad that I did a few months ago what I wanted to do for a long time, but always thought I
could delay until I had my own mail server: I created an unattended backup system for my mail boxes. So remember: Don&amp;#8217;t
delay your backup system, it might get important sooner than you&amp;nbsp;think.&lt;/p&gt;
&lt;p&gt;Additionally, now I know for sure that my mail provider, even if located in the &lt;span class="caps"&gt;USA&lt;/span&gt;, would even go as far as to shut down
everything they worked on in the last decade when it&amp;#8217;s their only option left for protecting their&amp;nbsp;users.&lt;/p&gt;
&lt;p&gt;It was indeed quite shocking how, suddenly, I was directly affected by the impact of what Snowden&amp;#8217;s publications have
shown the&amp;nbsp;world.&lt;/p&gt;
&lt;h2 id="research"&gt;Research&lt;/h2&gt;
&lt;p&gt;As he stated above, Levison isn&amp;#8217;t allow to say anything about what has happened, even to his lawyer he can&amp;#8217;t say everything.
So Levison has to rely on the public and the media to find out what happened by&amp;nbsp;themselves.&lt;/p&gt;
&lt;p&gt;I found out that the mail address used by Edward Snowden for entering the Moscow Airport
and sending the invitations to the human rights activits for the meeting he had there was edsnowden@lavabit.com. Well,
that explains a&amp;nbsp;lot.&lt;/p&gt;
&lt;p&gt;With that in mind, „the last six weeks” in the announcement have a meaning: This was
exactly the time since the Snowden Leaks. So I came to the conclusion that I was using Edward Snowden&amp;#8217;s email provider of choice
for the last years without even knowing that until six weeks after the world knows his name, and now,
the &lt;span class="caps"&gt;NSA&lt;/span&gt; wanted to have everything lavabit had stored about&amp;nbsp;anybody.&lt;/p&gt;
&lt;p&gt;The following video is an interview with Lewison and his lawyer, which shows very impressively in what absurd consequences
those gag orders actually result in. He has to describe everything hypothetically and indirectly, he can&amp;#8217;t say
what they actually wanted from him, he has to say things like &amp;#8220;I always said, the only way someone could do eavesdropping
on lavabit is to force me to give them my private &lt;span class="caps"&gt;SSL&lt;/span&gt; keys or to modify the software I&amp;#8217;m running on the servers, and I
thought that this was something that&amp;#8217;ll never gonna happen.&amp;#8221; - or he is committing a crime he could and would be convicted&amp;nbsp;for.&lt;/p&gt;
&lt;iframe width="560" height="315" src="//www.youtube.com/embed/Ui3KpztUzVg" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Today, court documents were unsealed which showed what really happened and how Ladar Levison was fighting by all available
means: You can read the full articles at &lt;a href="http://www.wired.com/threatlevel/2013/10/lavabit_unsealed/"&gt;wired&lt;/a&gt; or &lt;a href="http://www.golem.de/news/verschluesselter-e-mail-provider-warum-lavabit-schliessen-musste-1310-101949.html"&gt;golem&lt;/a&gt; (german). After he was forced to give out the keys,
he even did so when he had no legal choice left - in the form of 11 printed pages in 4 point font size,
which a person would have to type in manually, character by character,
with even a single incorrect keystroke rendering the key completely useless.
Hats off for such epic&amp;nbsp;trolling!&lt;/p&gt;
&lt;p&gt;But as those printed keys were indeed useless, at the 6th of August, he was forced to hand out an electronic copy,
with a 5000$ fine for every day until he hands over the keys. At the 8th of August, lavabit closed its&amp;nbsp;doors.&lt;/p&gt;
&lt;p&gt;This court decision means that the privacy of 400 000 lavabit customers who didn&amp;#8217;t do anything wrong would have been compromised
if Ladar hadn&amp;#8217;t shut down lavabit in beforehand. This also means that no cloud provider located in the &lt;span class="caps"&gt;US&lt;/span&gt; can keep
their promises concerning the security of the data you hand over to&amp;nbsp;them.&lt;/p&gt;
&lt;p&gt;Ladar was even willing to provide the authorities, which could show a judicial order, with the mails of Snowden, as he
is legally obliged to. But the agents wanted access to all the data and all the mails of every customer, and Ladar
didn&amp;#8217;t betray his&amp;nbsp;promises.&lt;/p&gt;
&lt;h2 id="one-upside"&gt;One&amp;nbsp;upside&lt;/h2&gt;
&lt;h3 id="i-now-have-my-own-mail-server-running-at-wolkenplanetde"&gt;I now have my own mail server running at&amp;nbsp;wolkenplanet.de&lt;/h3&gt;
&lt;p&gt;While I have planned it for about two years, but didn&amp;#8217;t do it because lavabit was so convenient,
I was finally forced now to set up my own mail server. But just after the day that I heard that lavabit is no more, I went on
vacation and had no time to set it&amp;nbsp;up.&lt;/p&gt;
&lt;p&gt;This resulted in a whole month without checking mail, with the knowledge that
no pile of mail wil be waiting for me after that. Quite an interesting and liberating experience, but nothing that
could stay this way for a longer&amp;nbsp;time.&lt;/p&gt;
&lt;p&gt;Now I have postfix + dovecot running for a month, and so far, no problems did arise. :)
Maybe I&amp;#8217;ll write about my setup in a separate blog post&amp;nbsp;later.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s a really tedious work to go to every webservice you ever registered an account with, and change your mail addresses.
Actually I feel a little sad when I have to delete my old addresses, as I got quite used to them in the last&amp;nbsp;years.&lt;/p&gt;
&lt;p&gt;But as as I have my mail addresses on my own domains, I can be sure I&amp;#8217;ll never have to change them in the future, even
if I switch servers or go back to a&amp;nbsp;provider.&lt;/p&gt;
&lt;h3 id="recommending-posteo"&gt;Recommending&amp;nbsp;posteo&lt;/h3&gt;
&lt;p&gt;By the way, I still have a backup mail address for emergencies from a provider I found in a recent edition of c&amp;#8217;t, probably
the most influental german computer magazine:
It&amp;#8217;s called &lt;a href="https://posteo.de/"&gt;posteo&lt;/a&gt; and was the  one of the few providers that had &lt;a href="https://en.wikipedia.org/wiki/Perfect_forward_secrecy"&gt;perfect forward secrecy&lt;/a&gt; enabled for everything -
this means that even if someone steals their private key, they can&amp;#8217;t decrypt recordings of your communication
with posteo - So no &amp;#8220;intercept now, decrypt later&amp;#8221; here, thanks to the Diffie-Hellman key&amp;nbsp;exchange.&lt;/p&gt;
&lt;p&gt;The one feature I miss is the usage of own domains, but if they would allow that, they would need to store your name and
post address in their inventory data which they then would need to forward to security agencies - so they don&amp;#8217;t want to
have that data in the first place. But that beside, they have everything you&amp;nbsp;want.&lt;/p&gt;
&lt;h3 id="final-thoughts"&gt;Final&amp;nbsp;thoughts&lt;/h3&gt;
&lt;p&gt;Of course one could call me a hipster for being the only one on the usual course mailing lists whose provider isn&amp;#8217;t
one of the usual: Google Mail, gmx, web.de and maybe Hotmail and t-online (which make up &amp;gt;95% of german email addresses), but for
me, it was a sign of resistance, showing that there are decent alternatives out&amp;nbsp;there.&lt;/p&gt;
&lt;p&gt;Somehow that feeling is very similar to the feeling of showing, explaining or defending the usage of Linux.
Somehow the fact that Edward Snowden used lavabit makes me feel justified in front of others for using such a
&amp;#8220;strange mail provider&amp;#8221; in their&amp;nbsp;eyes.&lt;/p&gt;
&lt;p&gt;Now, there&amp;#8217;s only one step left to complete independence in the mail area - moving the mailserver from my rented vServer
to my server at home under my&amp;nbsp;desk.&lt;/p&gt;</content></entry><entry><title>Learning Japanese: Second Semester</title><link href="https://florianjacob.de/japanese_s2.html" rel="alternate"></link><published>2013-08-12T16:42:00+02:00</published><updated>2013-08-12T16:42:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2013-08-12:/japanese_s2.html</id><summary type="html">&lt;p class="first last"&gt;My second semester of learning Japanese is over. Adjectives are quite&amp;nbsp;useful!&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Another semester has passed, and again we watched Japanese animes with subtitles in the last lesson,
we watched the short film &lt;a class="reference external" href="http://en.wikipedia.org/wiki/The_Garden_of_Words"&gt;The Garden of Words&lt;/a&gt; and the first episode of &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Psycho-Pass"&gt;Psycho-Pass&lt;/a&gt; series.
The Garden of Words has a very sentimental ending, and Psycho-Pass is quite turned in, but still I liked&amp;nbsp;both.&lt;/p&gt;
&lt;p&gt;At home I watched My Neighbour Totoro again, like I intended to do half a year ago. The most notable progress was that in the meantime,
we learned the most basic adjectives, which made quite a difference - I actually understood a few short sentences.&amp;nbsp;\(^_^)/&lt;/p&gt;
&lt;p&gt;Let me give you two example sentences as a showcase of what I learned this&amp;nbsp;semester:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;たんじょうび は かのじょう に あおい トトロ を あげましあ。
トトロ は とても かわいい そして いちご が いちばん すき です。

Tanjoubi wa kanojou ni aoi totoro wo agemashita.
Totoro wa totemo kawaii soshite ichigo ga ichiban suki desu.

For my girlfriend&amp;#39;s birthday, I gave her a blue Totoro.
Totoro is very cute and his favourite dish is strawberries.
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Interestingly, to like and to disklike are adjectives in the Japanese&amp;nbsp;language.&lt;/p&gt;
&lt;p&gt;What else happened? In a c&amp;#8217;t article from this semester on online ressources for learning Japanese, titled
„Monkey Apple Carbeurator“ - which is, as I then remembered, a quotation from a very humoristic article about learning
Japanese that I read years and years ago. And now after actually having learned a year of Japanese, that article is even more funny
than it was when I first read it - you can find it here: &lt;a class="reference external" href="http://www.enemieslist.net/japanese/"&gt;So You Want To Learn Japanese&lt;/a&gt; (or read the german translation:
&lt;a class="reference external" href="http://www.thomas-golnik.de/japan/04.html"&gt;Soso, du willst also Japanisch lernen..&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Additionally, in this semester, I had the opportunity to try sashimi, sushi and some wakame salad for the first time, which were quite good, but still something you have to get used to. Before that, I fortunately learned how to eat with chopsticks,
this was the youtube video which finally made me understand:
&lt;a class="reference external" href="http://www.youtube.com/watch?v=RkLMZF8Ufhg"&gt;The Answer Book: Guide to mastering the chopsticks within 5 minutes (How to hold&amp;nbsp;chopsticks)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After several views and several urges to throw them against the next wall, but then, it finally sunk in. (^_^)
I can recommend tortellini as test objects. Have fun&amp;nbsp;trying!&lt;/p&gt;
&lt;p&gt;Until next month, また&amp;nbsp;らいげつ。&lt;/p&gt;
</content></entry><entry><title>mezamashi - めざまし</title><link href="https://florianjacob.de/mezamashi.html" rel="alternate"></link><published>2013-06-17T19:15:00+02:00</published><updated>2013-06-17T19:15:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2013-06-17:/mezamashi.html</id><summary type="html">&lt;p class="first last"&gt;Today I pushed mezamashi to github. It&amp;#8217;s a terminal alarm clock written in&amp;nbsp;python.&lt;/p&gt;
</summary><content type="html">&lt;div class="section" id="a-terminal-alarm-clock-written-in-python"&gt;
&lt;h2&gt;A Terminal Alarm Clock written in&amp;nbsp;Python&lt;/h2&gt;
&lt;p&gt;No, this is not the &amp;#8220;learning japanese - 2nd semester&amp;#8221; post, despite one could think that at first glance.
But that will be coming soon, too.&amp;nbsp;;)&lt;/p&gt;
&lt;p&gt;This is the result of some of the few times where I had time to code a little during the last semester, and as some
friends showed interest, I&amp;#8217;ve decided to publish what started as my apprentice piece with &lt;a class="reference external" href="http://pythonhosted.org/scriptine/intro.html"&gt;scriptine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Instead of repeating what I wrote in my readme, let me just quote&amp;nbsp;it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Regular alarm clocks have the disadvantage of not turning off your computer when it&amp;#8217;s time to sleep, they just beep
when it&amp;#8217;s time to get&amp;nbsp;up.&lt;/p&gt;
&lt;p&gt;To prevent you from finishing &amp;#8220;just this little thing&amp;#8221; and getting to bed too late, you can set up mezamashi to shut down
your computer at a specific time beforehand, e.g. in 2 hours, and to wake you up with a nice song in your media player or anything else
you can steer from the command&amp;nbsp;line.&lt;/p&gt;
&lt;p&gt;But the crucial point is that it turns on your computer when it&amp;#8217;s time to get up and lets you know that - so it uses
the force that keeps you at your computer and out of bed at bedtime to get you out of bed (and, unfortunately, at the computer
again) when it&amp;#8217;s time to get&amp;nbsp;up.&lt;/p&gt;
&lt;p&gt;The only thing left for you is to get out of the house in time, but at least your early-morning sleapyness shouldn&amp;#8217;t
make you stay in bed anymore.&amp;nbsp;;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The code can be found on &lt;a class="reference external" href="https://github.com/florianjacob/mezamashi"&gt;github&lt;/a&gt; and is licensed under&amp;nbsp;GPLv3.&lt;/p&gt;
&lt;p&gt;Let me show you some example&amp;nbsp;calls:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# set a wakeup alarm to 8 o&amp;#39;clock&lt;/span&gt;
&amp;gt;./mezamashi.py &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="m"&gt;8&lt;/span&gt;:00
&lt;span class="c1"&gt;# show the current alarm&lt;/span&gt;
&amp;gt;./mezamashi.py show
&lt;span class="c1"&gt;# disable the current alarm&lt;/span&gt;
&amp;gt;./mezamashi.py &lt;span class="nb"&gt;unset&lt;/span&gt;
&lt;span class="c1"&gt;# set a wakeup alarm in 7 hours and a half&lt;/span&gt;
&amp;gt;./mezamashi.py &lt;span class="nb"&gt;set&lt;/span&gt; 7h30
&lt;span class="c1"&gt;# go to sleep in 20 minutes. you need to use this command to suspend to run your alarm_shcommand at next startup.&lt;/span&gt;
&amp;gt;./mezamashi.py sleep 0h20
&lt;span class="c1"&gt;# there&amp;#39;s an alias if you want to suspend immediatly&lt;/span&gt;
&amp;gt;./mezamashi.py sleep now
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Most of the work was done with &lt;a class="reference external" href="http://pythonhosted.org/scriptine/intro.html"&gt;scriptine&lt;/a&gt;, it&amp;#8217;s a nice library providing a simple interface for all the shell scripting
stuff like exececuting commands and doing file system operations. On top of that, it has a really nice way of defining
commands and options in your shellscript, which saves you from repeating more or less the same OptionParser stuff for
every shell script you&amp;nbsp;write.&lt;/p&gt;
&lt;p&gt;Scriptine really is a great help for shell scripting in python, and from
now on, whenever I&amp;#8217;m writing a shell script that consists of more than just some rows of commands to be executed, I think I&amp;#8217;ll
save myself from writing bash if statements (I think I&amp;#8217;ve never managed to write one without copying the syntax from somewhere
and &lt;em&gt;slightly&lt;/em&gt; modifying it) by converting everything to Python + scriptine.&amp;nbsp;:)&lt;/p&gt;
&lt;div class="section" id="the-name"&gt;
&lt;h3&gt;The&amp;nbsp;Name&lt;/h3&gt;
&lt;p&gt;mezamashi is, as you might have guessed, the japanese word for alarm clock. &amp;#8216;wecker&amp;#8217;, the german word, was already taken,
so I chose mezamashi to make me remember a vocable without doing anything for it.&amp;nbsp;;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content></entry><entry><title>End of Semester - alaCarte released</title><link href="https://florianjacob.de/alaCarte-0.2.1.html" rel="alternate"></link><published>2013-04-10T23:46:00+02:00</published><updated>2013-04-10T23:46:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2013-04-10:/alaCarte-0.2.1.html</id><summary type="html">&lt;p class="first last"&gt;Today we published alaCarte, our student lab course project we worked countless hours on in the last semester,
as open source&amp;nbsp;software.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;As last official act of the last semester, we finally could publish our map renderer as &lt;span class="caps"&gt;AGPL&lt;/span&gt;-licensed
open source software.&amp;nbsp;Yay!&lt;/p&gt;
&lt;div class="section" id="what-is-alacarte"&gt;
&lt;h2&gt;What is&amp;nbsp;alaCarte?&lt;/h2&gt;
&lt;img alt="alaCarte screenshot" src="https://florianjacob.de/images/alacarte_screenshot.png" /&gt;
&lt;p&gt;Let me just quote the release announcement we sent to the OpenStreetMap talk-de mailing&amp;nbsp;list:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;alaCarte is a tile renderer for OpenStreetMap data written in C++11, using Cairo for rendering and Boost-Spirit for MapCSS&amp;nbsp;parsing.&lt;/p&gt;
&lt;p&gt;The rendered tiles are served over &lt;span class="caps"&gt;HTTP&lt;/span&gt; using the Slippy map tilename convention. (As you can see on the&amp;nbsp;right.)&lt;/p&gt;
&lt;p&gt;To compute which data is needed for rendering a tile, alaCarte uses a variant of a&amp;nbsp;kd-Tree.&lt;/p&gt;
&lt;p&gt;alaCarte was designed with medium dataset size in mind. On a typical machine with at leat &lt;span class="caps"&gt;8GB&lt;/span&gt; &lt;span class="caps"&gt;RAM&lt;/span&gt;, alaCarte can handle a unfiltered export from the federal state of Baden-Wuerttemberg&amp;nbsp;(Germany).&lt;/p&gt;
&lt;p&gt;alaCarte was developed as part of a student software project at &lt;span class="caps"&gt;KIT&lt;/span&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We have a &lt;a class="reference external" href="http://studwww.ira.uni-karlsruhe.de/~s_scheir/alacarte/"&gt;live demo&lt;/a&gt;, you can check out the code at &lt;a class="reference external" href="https://github.com/alacarte-maps/alacarte"&gt;github&lt;/a&gt; and if you speak German you can view the slides of the
&lt;a class="reference external" href="http://studwww.ira.uni-karlsruhe.de/~s_scheir/alacarte/abschlusspraesentation"&gt;finishing presentation&lt;/a&gt; of the project I held together with&amp;nbsp;Simon.&lt;/p&gt;
&lt;p&gt;I must say I&amp;#8217;m glad that we had this specific project. Not only that I learned much about C++ (and why to value Qt), as
most other projects were written in Java, this is also one of the very few projects which ended in a result that
I can explain or just &lt;em&gt;show&lt;/em&gt; to non-technical&amp;nbsp;people.&lt;/p&gt;
&lt;p&gt;And finally, the project is, in a way, something that&amp;#8217;s actually &lt;em&gt;useful&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Just now after the release, most of us take their time to work on another project
of theirs as there was barely time to do that during the last semester, but I&amp;#8217;m sure some of us will return to alaCarte
and continue to work on&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;Additionally, there&amp;#8217;s a similar student lab course module in a few semesters, when we go four our master&amp;nbsp;degree.&lt;/p&gt;
&lt;p&gt;Chances are that we take it again and do alaCarte &lt;em&gt;right&lt;/em&gt; with all the lessons from the first implementation and all
new algorithms and data structures we will have learned by then,
reduce the memory footprint and speed it up by an order of magnitude, like our supervisors said. Let&amp;#8217;s see!&amp;nbsp;:)&lt;/p&gt;
&lt;/div&gt;
</content></entry><entry><title>Learning Japanese: First Semester</title><link href="https://florianjacob.de/japanese_s1.html" rel="alternate"></link><published>2013-02-12T16:42:00+01:00</published><updated>2013-02-12T16:42:00+01:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2013-02-12:/japanese_s1.html</id><summary type="html">&lt;p class="first last"&gt;My first semester of learning Japanese is over. Won&amp;#8217;t be the last.&amp;nbsp;(^_^)&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Tired of University lectures? Want to feel like you&amp;#8217;re in 5th grade again, or whenever it was when you started to learn
your second language? In that case, I can warmly recommend attending the courses for a completely new one,
it feels exactly the same as back then.&amp;nbsp;(^-~)&lt;/p&gt;
&lt;p&gt;Well, at least I was very reminded of the first english classes I had ten years ago. Classes of 20-30 people, the
teacher brings a &lt;span class="caps"&gt;CD&lt;/span&gt; player to class, from which some people speak incredibly fast gibberish, and
you start with learning the „Hello World” equivalent of &lt;strong&gt;actual&lt;/strong&gt;&amp;nbsp;languages:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;こんにちは。わたしはフロリアンです。カールスルーエのだいがくのがくせいです。
Konnichiwa. Watashi wa Furorian desu. Kaarusuruue no daigaku no gakusei desu.
Hello, I&amp;#39;m Florian. I&amp;#39;m a student from the University of Karlsruhe.
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Well, but at that point, one can spot the differences. Ten years ago, I hadn&amp;#8217;t to learn two whole new syllabaries to write that down in
English. (&amp;#64;_&amp;#64;) This has the interesting effect that understanding spoken Japanese is actually easier than reading and
understanding the&amp;nbsp;subtitles.&lt;/p&gt;
&lt;p&gt;Ok, „understanding” spoken Japanese is exaggerated. Last friday, I watched „My Neighbour Totoro” in Japanese
with German subtitles (it&amp;#8217;s an old Studio Ghibli movie for children, actually), and while the language of it is
relatively simple, I sat there and every minute or so I was happy to hear, somewhere in a sentence, a word I actally
knew: ‘yesterday’, ‘thank you’, ‘hospital’, ‘university’ and&amp;nbsp;similar.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ll watch that movie after every semester from now on, hoping to see some&amp;nbsp;progress!&lt;/p&gt;
&lt;p&gt;Another strange fact: Not only my friend and myself, but about half of the other attendees seemed to be informatics students. (^_^;)
Coincidence? I think&amp;nbsp;not.&lt;/p&gt;
&lt;p&gt;And what would informatics students try when they learn a new writing system? They try to type it on their beloved keyboard! So did I.
But switching to Japanese input methods turned out to be much harder than expected (read „I didn&amp;#8217;t get it to work &lt;strong&gt;at all&lt;/strong&gt;&amp;nbsp;”).&lt;/p&gt;
&lt;p&gt;I found a viable alternative (which also serves as a nice segueway to get a tech topic in this post after all):
A nice vim snippet you can put in your .vimrc to enable toggling your usual keymap
with the kana keymap by pressing&amp;nbsp;F3:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&amp;quot; switch between kana and normal keymap
let b:keymap_kana_switcher=0
function! ToggleKeymap()
    if b:keymap_kana_switcher==0
        set keymap=kana
        let b:keymap_kana_switcher=1
    else
        set keymap=
        let b:keymap_kana_switcher=0
    endif
endfunction

nnoremap &amp;lt;F3&amp;gt; :call ToggleKeymap()&amp;lt;CR&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As you &lt;em&gt;might&lt;/em&gt; see, this is self-written, and I have no idea how to properly write vim scripts, but hey, it works! \(^_^)/
With the kana keymap, you just write the phonetical transformation of the kanas, and depending on your shift key, it&amp;#8217;ll
make hiragana or katakana out of what you&amp;nbsp;typed.&lt;/p&gt;
&lt;p&gt;Of course, this only works inside vim, but text input of any kind &lt;em&gt;without&lt;/em&gt; vim? &lt;a class="reference external" href="http://xkcd.com/619/"&gt;Who uses that?&lt;/a&gt;&amp;nbsp;(ô_ó)&lt;/p&gt;
&lt;p&gt;And here, I present you my closing word as a final unicode test for your browser:&amp;nbsp;さようなら。&lt;/p&gt;
</content></entry><entry><title>tmux - a terminal multiplexer</title><link href="https://florianjacob.de/tmux.html" rel="alternate"></link><published>2013-01-16T18:17:00+01:00</published><updated>2013-01-16T18:17:00+01:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2013-01-16:/tmux.html</id><summary type="html">&lt;p class="first last"&gt;Most people know that there&amp;#8217;s screen to leave scripts running when you disconnect from your server.
But in case it&amp;#8217;s yourself administering your server and not just some script running, tmux is a viable&amp;nbsp;alternative.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Desktop terminal emulators usually have the feature of tabbed terminals. tmux does something similar on the server side,
it&amp;#8217;s a terminal &amp;#8220;window manager&amp;#8221; where you can create and close new windows, and especially leave them open and running
when you disconnect from the&amp;nbsp;server.&lt;/p&gt;
&lt;p&gt;You should try to work inside a tmux window on the server, so when you get interrupted,
you can always just detach the window and log off while e.g. upgrades, compiles, backups or other long-lasting
operations still keep&amp;nbsp;running.&lt;/p&gt;
&lt;p&gt;More than once I damned myself for not starting something inside tmux, so I needed to leave my laptop online for
the whole night doing nothing, just to keep the ssh session running.&amp;nbsp;xD&lt;/p&gt;
&lt;p&gt;But when you just run tmux without configuring it, you can&amp;#8217;t scroll up with your terminal emulator&amp;#8217;s scrollbar, which
I find really annoying. The following fixes&amp;nbsp;this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Create or edit the tmux configuration file at ~/.tmux.conf&lt;/span&gt;
vim ~/.tmux.conf
&lt;span class="c1"&gt;# and enter:&lt;/span&gt;

&lt;span class="c1"&gt;# Sane scrolling&lt;/span&gt;
&lt;span class="c1"&gt;# alternatively scroll inside tmux with CTRL+B [&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; -g terminal-overrides &lt;span class="s1"&gt;&amp;#39;xterm*:smcup@:rmcup@&amp;#39;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Psst! In case you&amp;#8217;re a fan of solarized, there&amp;#8217;s a tmux color scheme for it:
&lt;a class="reference external" href="https://github.com/seebi/tmux-colors-solarized/"&gt;https://github.com/seebi/tmux-colors-solarized/&lt;/a&gt;
But beware of problems with colors in tmux over ssh, I never managed to really convince tmux to
use 16 colors for true solarized instead of 8 or&amp;nbsp;256.&lt;/p&gt;
&lt;p&gt;Now to the minimum tmux commands one needs to know to work inside&amp;nbsp;tmux:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# start a new tmux session with a single window&lt;/span&gt;
tmux
&lt;span class="c1"&gt;# tmux is controled via single key commands entered after you pressed CTRL+B&lt;/span&gt;
&lt;span class="c1"&gt;# create a new window&lt;/span&gt;
CTRL+B C
&lt;span class="c1"&gt;# switch to next window&lt;/span&gt;
CTRL+B N
&lt;span class="c1"&gt;# switch to previous window&lt;/span&gt;
CTRL+B P
&lt;span class="c1"&gt;# close a window (no CTRL+B in front, just like you&amp;#39;d close a virtual terminal)&lt;/span&gt;
&lt;span class="c1"&gt;# By closing the last window, you&amp;#39;ll close the tmux session, too.&lt;/span&gt;
CTRL+D

&lt;span class="c1"&gt;# If you want to keep your windows open and running, &amp;quot;detach&amp;quot; your session with&lt;/span&gt;
CTRL+B D
&lt;span class="c1"&gt;# You can now savely disconnect from your server.&lt;/span&gt;
&lt;span class="c1"&gt;# Reattach your last tmux session with&lt;/span&gt;
tmux attach
&lt;span class="c1"&gt;# just entering &amp;quot;tmux&amp;quot; without &amp;quot;attach&amp;quot; will create a new session.&lt;/span&gt;
&lt;span class="c1"&gt;# Closing it with CTRL+D and then entering &amp;quot;tmux attach&amp;quot;&lt;/span&gt;
&lt;span class="c1"&gt;# will bring back your old session&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;tmux also supports named sessions and windows. I used named sessions for a while to have the irssi irc client
always running on my server and then attached the specific irssi session from my laptop, but I&amp;#8217;m much happier now with
&lt;a class="reference external" href="/znc-setup.html"&gt;&lt;span class="caps"&gt;ZNC&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The above commands should be enough to use tmux for administration tasks, but tmux is much more powerfull
than that - some of that power might come in handy for whatever you want to have running on your&amp;nbsp;server.&lt;/p&gt;
</content></entry><entry><title>How to set up ZNC, an advanced IRC Bouncer</title><link href="https://florianjacob.de/znc-setup.html" rel="alternate"></link><published>2012-12-18T23:31:00+01:00</published><updated>2012-12-18T23:31:00+01:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2012-12-18:/znc-setup.html</id><summary type="html">&lt;p class="first last"&gt;Do you want to know everything that&amp;#8217;s spoken in an irc channel, do you want to receive every query even if you&amp;#8217;re not in front of your computers?
Do you dream of idling 24 hours per day, 7 days per week? With your server, &lt;span class="caps"&gt;ZNC&lt;/span&gt; and your regular irc client, you can do exactly that.&amp;nbsp;;)&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Well, an &lt;span class="caps"&gt;IRC&lt;/span&gt; bouncer is similar to a web proxy - all your requests and answers are transmitted via your server in the middle.
For &lt;span class="caps"&gt;IRC&lt;/span&gt;, that means that the bouncer is connected to your &lt;span class="caps"&gt;IRC&lt;/span&gt; networks all day instead of&amp;nbsp;you.&lt;/p&gt;
&lt;p&gt;It opens a port for your &lt;span class="caps"&gt;IRC&lt;/span&gt; clients to connect (the bouncer just acts like a real &lt;span class="caps"&gt;IRC&lt;/span&gt; server) but it&amp;#8217;ll replay all the queries and messages from your&amp;nbsp;channels.&lt;/p&gt;
&lt;p&gt;I used to have irssi (a popular terminal-based &lt;span class="caps"&gt;IRC&lt;/span&gt; client) running on my server in bouncer mode and another irssi on my computers,
but a week ago I couldn&amp;#8217;t bear with this setup any more. (ok, actually, it broke because of perl updates in&amp;nbsp;Chakra).&lt;/p&gt;
&lt;p&gt;All that old perl plugins you had to have to extend irssi in a way to make it usable as a bouncer.. all that old perl plugins you had to have to make irssi usable at _all_..
Well, I liked the full keyboard interface, but you even need a plugin to show named channel windows. Really? Come&amp;nbsp;on!&lt;/p&gt;
&lt;p&gt;So I looked through the wikipedia list of &lt;span class="caps"&gt;IRC&lt;/span&gt; bouncers, and the only one that was actually packaged for debian squeeze was &lt;a class="reference external" href="http://wiki.znc.in/ZNC"&gt;&lt;span class="caps"&gt;ZNC&lt;/span&gt;&lt;/a&gt;,
which turned out to be great. (of course, after all that perl in irssi, python support convinced me ;)&amp;nbsp;).&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s my&amp;nbsp;setup:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;su
aptitude install znc
^D
&lt;span class="c1"&gt;# do this as your personal user&lt;/span&gt;
&lt;span class="c1"&gt;# this will start a configuration wizard&lt;/span&gt;
&lt;span class="c1"&gt;# you&amp;#39;ll need to create a separate user for each irc network you&amp;#39;re on&lt;/span&gt;
&lt;span class="c1"&gt;# hint for generating random passwords:&lt;/span&gt;
&lt;span class="c1"&gt;# genpw &amp;lt;length&amp;gt;&lt;/span&gt;
&lt;span class="c1"&gt;# activate usefull modules like chansaver, nickserv and simple_away&lt;/span&gt;
znc --makeconf
&lt;span class="c1"&gt;# starts znc as a backgound job of your private user.&lt;/span&gt;
znc
&lt;span class="c1"&gt;# znc doesn&amp;#39;t get restarted on boot or after crashes, one way around this is a cronjob trying to start znc every 10 minutes.&lt;/span&gt;
&lt;span class="c1"&gt;# Nothing harmfull will be done if it&amp;#39;s already running. If you don&amp;#39;t like that, consider running znc as system daemon: http://wiki.znc.in/Running_ZNC_as_a_system_daemon&lt;/span&gt;
crontab -e
&lt;span class="c1"&gt;# add the line&lt;/span&gt;
&lt;span class="c1"&gt;# */10 * * * *   /usr/bin/znc &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Short and sweet,&amp;nbsp;huh?&lt;/p&gt;
&lt;p&gt;Then it&amp;#8217;s time to connect your local &lt;span class="caps"&gt;IRC&lt;/span&gt; client:
The server&amp;#8217;s password is the &amp;#8220;username:password&amp;#8221; combination you created with the makeconf&amp;nbsp;script.&lt;/p&gt;
&lt;p&gt;After that, the only thing left to do is to tell the nickserv plugin about your password for auto-identify with your &lt;span class="caps"&gt;IRC&lt;/span&gt; network&amp;#8217;s nickserv,
and to set your away message. Per default, you&amp;#8217;ll be away one minute after every client disconnected, as well as you&amp;#8217;ll be back again
if a client is connected for a&amp;nbsp;minute.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;/msg *nickserv &lt;span class="nb"&gt;set&lt;/span&gt; &amp;lt;passwort&amp;gt;
/msg *simple_away Reason Hi there, raignarok&lt;span class="s1"&gt;&amp;#39;s server speaking. He&amp;#39;&lt;/span&gt;s disconnected, but I&lt;span class="s1"&gt;&amp;#39;m recording for him what you&amp;#39;&lt;/span&gt;re saying.
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As you can see, you&amp;#8217;re controlling &lt;span class="caps"&gt;ZNC&lt;/span&gt; over special users prefixed with a &amp;#8216;*&amp;#8217;, the general user for &lt;span class="caps"&gt;ZNC&lt;/span&gt; is &amp;#8220;*status&amp;#8221;
and additionally, every module has it&amp;#8217;s own user. &amp;#8220;/msg *&amp;lt;user&amp;gt; help&amp;#8221; prints the lists of available options and&amp;nbsp;commands.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s it for this month, but at least it&amp;#8217;s something at all after I skipped November.
Happy idling, and see you on&amp;nbsp;freenode!&lt;/p&gt;
</content></entry><entry><title>tent.io, a new hope for open &amp; federated social networking?</title><link href="https://florianjacob.de/tentio-new-hope.html" rel="alternate"></link><published>2012-10-14T19:11:00+02:00</published><updated>2012-10-14T19:11:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2012-10-14:/tentio-new-hope.html</id><summary type="html">&lt;p class="first last"&gt;This post is about tent.io, the new protocol for social networking
compared to Diaspora* and&amp;nbsp;status.net&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Last week, Jan Wildeboer posted something that caught my&amp;nbsp;attention:&lt;/p&gt;
&lt;blockquote&gt;
Let&amp;#8217;s try to connect tent.is to my G+ stream. Do you know tent.is? It&amp;#8217;s decentralized. Open. Check it out. I am jwildeboer.tent.is for the moment and will run it on my own server soon.&lt;/blockquote&gt;
&lt;p&gt;Huh, what? tent.is? At that time, I never heard of it, despite the project existed for a few months already.
As I then found out, tent.is is only the first microblogging app for tent.io, the part which is actually&amp;nbsp;important.&lt;/p&gt;
&lt;p&gt;Well, the facts are that tent.io is a decentralized, federated and open protocol for social networking and tent.is is a tent.io app providing a microblogging service over the tent.io protocol.
But didn&amp;#8217;t we heard that many times in the past?
All those federated social networks, status.net, Diaspora*, friendica, and what else might be lurking somewhere on the internet, don&amp;#8217;t they already do&amp;nbsp;this?&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s right to some degree, but tent.io is something else. Actually, it&amp;#8217;s the only federated social network out there which has the potential to really fulfill what
I expect from a social network. To make it clear why tent.io has this potential to be great, I&amp;#8217;ll first point out the flaws of Diaspora and status.net,
the biggest federated social networks existing and the networks I&amp;#8217;m still using&amp;nbsp;today.&lt;/p&gt;
&lt;div class="section" id="diaspora"&gt;
&lt;h2&gt;Diaspora*&lt;/h2&gt;
&lt;p&gt;In April 2010, Diaspora*, of great kickstarter fame, actually was the new hope for many to be &amp;#8220;the new facebook&amp;#8221;, at least the facebook for tech people.
In August 2012, the founders abandoned, &lt;em&gt;ahem&lt;/em&gt;, handed over the project to the community, to create something like a bad meme generator called makr.io
to unleash the creativity of their users. Or something&amp;nbsp;similar.&lt;/p&gt;
&lt;p&gt;On the one hand, this could be the death of the project in case there&amp;#8217;s no one in the community who will step up, write code and make&amp;nbsp;decisions.&lt;/p&gt;
&lt;p&gt;On the other hand, as mean as it sounds, but when you look at makr.io, couldn&amp;#8217;t it be &lt;cite&gt;good&lt;/cite&gt; that they&amp;#8217;re&amp;nbsp;gone?&lt;/p&gt;
&lt;p&gt;As great as Diaspora* looked in the beginning, there are three main problems it currently&amp;nbsp;faces.&lt;/p&gt;
&lt;p&gt;The first is that they never managed to create a working native client for any platform &lt;cite&gt;at all&lt;/cite&gt;. Many people say a web interface is enough,
but at least I still insist on a real native app for my phone and my&amp;nbsp;computer.&lt;/p&gt;
&lt;p&gt;But it&amp;#8217;s not only that they never finished a documented protocol on how a client could connect to Diaspora. The second problem is
that they never managed to document and to finalize the protocol Diaspora pods use for server to server communication &lt;cite&gt;either&lt;/cite&gt;. Therefore, in theory, nobody
could write something like a gateway between Diaspora and for example status.net. Right? But wasn&amp;#8217;t that the promise of federated networking?
That I could talk to status.net users from&amp;nbsp;Diaspora?&lt;/p&gt;
&lt;p&gt;Well, friendica actually &lt;em&gt;implemented&lt;/em&gt; the protocol in php, despite it could have changed at any given time, wasn&amp;#8217;t documented at all and
a complete redesign of the protocol was actually announced. But so far, that never happened and the friendica implementation works astonishingly&amp;nbsp;well.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s the third problem: From an external (-&amp;gt;my) point of view, the development of Diaspora has stalled. The last noticeable change was in February 2012,
they added an &amp;#8220;artistic view&amp;#8221; of your posts, with one single central post per page, the posted image in the background, and comments and likes somewhere at the bottom.
To unleash creativity and give the users artistic expression in their posts. From the current viewpoint, after makr.io was released, this has to be seen as the first sign of them&amp;nbsp;leaving.&lt;/p&gt;
&lt;p&gt;Maybe the community will actually take up the development of Diaspora. But creating and specifying protocols for server to server and and client to server communication is a huge task
and much more challenging than sending in patches for bugs and cleaning up code. That needs a vision, and the courage and time to implement them. Now after the complete core team does something else,
I don&amp;#8217;t expect that to happen anymore. I was a big fan of Diaspora from the start, but today, I&amp;#8217;m disillusioned and disappointed with the&amp;nbsp;development.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="status-net"&gt;
&lt;h2&gt;Status.net&lt;/h2&gt;
&lt;p&gt;Status.net stepped up to be a drop-in replacement for twitter, to be fully api-compatible.
&amp;#8220;A twitter client only needs to change the url from twitter.com to identi.ca or whatever status.net provider the user has an account for&amp;#8221;, that&amp;#8217;s the promise of status.net.
And that&amp;#8217;s exactly what they fulfilled. I fail to understand how people complaining over twitter can deny&amp;nbsp;that.&lt;/p&gt;
&lt;p&gt;You can argue about the quality of the web interface, but because of the api-compability, most open source twitter clients can be used for status.net, too - no need for the web interface.
Maybe that&amp;#8217;s the reason why status.net seems to be the most widely used federated network in the open source&amp;nbsp;community.&lt;/p&gt;
&lt;p&gt;Because it&amp;#8217;s written in php it&amp;#8217;s not that hard to setup your own server, there&amp;#8217;s a twitter gateway plugin to enable you to send and receive messages from twitter, and the
protocols are documented. What else could one demand, except more&amp;nbsp;users?&lt;/p&gt;
&lt;p&gt;From the development side, status.net has reached it&amp;#8217;s goals. The last fundamental change in status.net was the redesign of the web interface, which went along with the introduction
of polls and bookmarks. Nothing left to do than this, as fundemantally new features would break the twiter compatibility.
(üAThis was the time when I needed to leave the !linux group, because the &amp;#8220;Which distro do you use?&amp;#8221;-Pollspam was unbearable.) Status.net is essentially&amp;nbsp;finished.&lt;/p&gt;
&lt;p&gt;The problem of status.net isn&amp;#8217;t something the code can handle. For many, it&amp;#8217;s about the community, it&amp;#8217;s just that it has to few users. And even large parts of the open source community are moving to
Google+ lately, it seems like Fabian Scherschel set a trend in that regard. For me, microblogging feels limiting, too, 140characters are usualy about the half of the shortest posts I want to made,
and I end up crippling words and punctuation to make it fit in. In that regard, Diaspora (and Google+, as in the past, they were not that different) are a lot easier for&amp;nbsp;me.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="tent-io"&gt;
&lt;h2&gt;tent.io&lt;/h2&gt;
&lt;p&gt;In my opinion, &lt;a class="reference external" href="http://tent.io/"&gt;tent.io&lt;/a&gt; has the potential to be the open source, open and federated pendant to the recenctly hyped app.net.
tent.io is nothing more than a protocol for client to server and server to server communication for decentralized and federated social data.
In the protocol, a post can currently be of the type status message (256characters, finally enough for me &lt;em&gt;yay&lt;/em&gt;), essay (the equivalent to a diaspora/g+ post), image or image album. Groups and moving between
servers is already&amp;nbsp;specified.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s the complete opposite of Diaspora - they first implemented their network and then wanted to specify the protocol &lt;cite&gt;later&lt;/cite&gt;. tent.io does it the way it should be,
design a protocol and have a reference implementation for each part. The server reference implementation is called tentd, and the client reference implementation is the web-based tent.is, essentially a twitter clone supporting
only status posts at the moment. Noticed something? The server and the web interface are decoupled, instead of being meld together in one big thing like with Diaspora or&amp;nbsp;status.net.&lt;/p&gt;
&lt;p&gt;The default web interface for tent.io is &lt;em&gt;just an application&lt;/em&gt;. The client to server protocol is in there and used from the beginning. Even the account settings and oauth approval page is just an app called tent-admin and in
no way bundled with the tentd server. Now isn&amp;#8217;t that great a great&amp;nbsp;design?&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="conclusion"&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The beauty of tent.io is that it&amp;#8217;s really just a general protocol that can be used to build social networks in which all users can communicate with each other.
After a few months of development, tent.io managed to be more in this regard than Diaspora ever was. It&amp;#8217;s what I hoped to happen with Diaspora, but what I don&amp;#8217;t believe that will happen&amp;nbsp;anymore.&lt;/p&gt;
&lt;p&gt;I hope that one day, I can use tent.io to send and receive posts from and to status.net and Google+, the networks that matter to me most. I hope that there&amp;#8217;ll be gateways between tent.io and these networks, similar to jabber-icq gateways. I hope that there&amp;#8217;ll be tent.io clients for every platform that I use. I hope that I can provide tent.io accounts on my server for my close friends, like I do with&amp;nbsp;jabber.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s why I&amp;#8217;ll invest time &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; energy in&amp;nbsp;tent.io.&lt;/p&gt;
&lt;p&gt;To come to an end (by the way, thanks for actually reading this huge post ;) ): As long as I don&amp;#8217;t have my own tentd running, I&amp;#8217;m &lt;a class="reference external" href="https://florianjacob.tent.is"&gt;https://florianjacob.tent.is&lt;/a&gt;. Freetards,&amp;nbsp;unite!&lt;/p&gt;
&lt;/div&gt;
</content></entry><entry><title>How to sync your N9 with your ownCloud calendars and adress books</title><link href="https://florianjacob.de/how-to-sync-your-n9.html" rel="alternate"></link><published>2012-09-14T13:37:00+02:00</published><updated>2015-09-30T11:25:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2012-09-14:/how-to-sync-your-n9.html</id><summary type="html">&lt;p class="first last"&gt;This post explains how one can sync an N9 via SyncEvolution with your ownCloud - on the command&amp;nbsp;line!&lt;/p&gt;
</summary><content type="html">&lt;p&gt;&lt;em&gt;Update: Wassili tried this in May 2014 with SyncEvolution 1.3 against ownCloud 6.0 and found out that the shell commands
changed a little since I wrote this guide back in 2012. With his hints, I tried it myself again and updated the article accordingly. Thanks alot for sharing your&amp;nbsp;results!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This post reformats and enhances the knowledge that N770-Freak shared at &lt;a class="reference external" href="http://talk.maemo.org/archive/index.php/t-85394.html"&gt;talk.maemo.org&lt;/a&gt;, and is mostly some documentation for myself what I
actually did to get the synchronization to work. Thanks for making me able to sync my phone again!&amp;nbsp;;)&lt;/p&gt;
&lt;p&gt;(For N900 users: Thomas Tanghus wrote a guide on &lt;a class="reference external" href="http://tanghus.net/2012/07/syncing-your-n900-with-owncloud-an-update/"&gt;how to sync the N900&lt;/a&gt; with your ownCloud and&amp;nbsp;SyncEvolution.)&lt;/p&gt;
&lt;p&gt;Syncing the N9 with ownCloud wasn&amp;#8217;t possible until &lt;a class="reference external" href="http://wiki.meego.com:/User:Ovek"&gt;Ovek&lt;/a&gt; managed to package syncevolution with CalDAV / CardDAV support at &lt;a class="reference external" href="http://people.debian.org/~ovek/harmattan/"&gt;http://people.debian.org/~ovek/harmattan/&lt;/a&gt;.
Great to see that people are still working on stuff for the N9, but again it shows that a Maemo-Extras equivalent for the N9 is really missing. :/
(&lt;strong&gt;Update&lt;/strong&gt;: Two years later, we got &lt;a class="reference external" href="https://openrepos.net/"&gt;https://openrepos.net/&lt;/a&gt; for exactly this, a great place to revive your N9 with some new or updated&amp;nbsp;apps!)&lt;/p&gt;
&lt;p&gt;This guide is written for the &lt;strong&gt;syncevolution_1.3-1_armel.deb&lt;/strong&gt; package from that page and &lt;strong&gt;ownCloud 6.0.3&lt;/strong&gt;, but
reported to still work with &lt;strong&gt;ownCloud 8.1.1&lt;/strong&gt; (thanks to&amp;nbsp;Sean).&lt;/p&gt;
&lt;p&gt;If you don&amp;#8217;t feel &lt;em&gt;very&lt;/em&gt; lucky, you should create a backup of your calendar and addressbook data, both of your ownCloud and your N9. For me, it was a struggle
to get both databases really in sync, I had both doubled contacts and corrupted&amp;nbsp;data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Wassili found out that with syncevolution 1.3, if your ownCloud calendar already contains events,
there are problems with the initial sync (with &amp;#8212;sync slow).
The calendar entries that already existed in ownCloud will be transfered to the N9, but for some reason, they won&amp;#8217;t be displayed in the calendar&amp;nbsp;app.&lt;/p&gt;
&lt;p&gt;Creating a new, empty calendar to sync in ownCloud in beforehand and import your data after the intial sync works, though,
so &lt;strong&gt;to be safe, set up the sync with empty calendars first and import the data after the initial sync worked&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="section" id="fundament"&gt;
&lt;h2&gt;fundament&lt;/h2&gt;
&lt;p&gt;All of these commands are a single line, the line wraps are not on purpose.
If you have developer mode activated on your N9, you can enter all of this conveniently over&amp;nbsp;ssh.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hint&lt;/strong&gt;: Michael pointed out that all paths and names are case-sensitive, like it&amp;#8217;s usually the case on Linux.
Additionally, the &lt;strong&gt;syncevolution &amp;#8212;print-databases&lt;/strong&gt; command can come in handy for&amp;nbsp;troubleshooting.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# For some reason, downloading the package with the N9 browser and installing it&lt;/span&gt;
&lt;span class="c1"&gt;# from the downloads menu didn&amp;#39;t work for me.&lt;/span&gt;
&lt;span class="c1"&gt;# So I installed the package on the terminal, too:&lt;/span&gt;
&lt;span class="c1"&gt;# (default password is rootme)&lt;/span&gt;
devel-su
wget http://people.debian.org/~ovek/harmattan/syncevolution_1.3-1_armel.deb
dpkg -i syncevolution_1.3-1_armel.deb
&lt;span class="nb"&gt;exit&lt;/span&gt;

&lt;span class="c1"&gt;# Fill in your ownCloud logindata and ownCloud url here.&lt;/span&gt;
&lt;span class="c1"&gt;# It should be of the form http[s]://sub.domain.tld&lt;/span&gt;
&lt;span class="c1"&gt;# or http[s]://domain.tdl/owncloud if you have ownCloud installed in a subdirectory.&lt;/span&gt;
&lt;span class="c1"&gt;# @owncloud is the local configuration identifier for SyncEvolution.&lt;/span&gt;
&lt;span class="c1"&gt;# You can name the configuration anyway you like.&lt;/span&gt;
syncevolution --configure --template WebDAV &lt;span class="nv"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;username&amp;gt; &lt;span class="nv"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;password&amp;gt; target-config@owncloud
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="caldav-sync"&gt;
&lt;h2&gt;CalDAV&amp;nbsp;sync:&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# mycalendar is the identifier for this caldav sync.&lt;/span&gt;
&lt;span class="c1"&gt;# Again, name it anyway you like or just stay with mycalendar.&lt;/span&gt;
syncevolution --configure &lt;span class="nv"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;owncloudurl&amp;gt;/remote.php/caldav/calendars/&amp;lt;username&amp;gt;/&amp;lt;calendarname&amp;gt;/ &lt;span class="nv"&gt;backend&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;caldav target-config@owncloud mycalendar
&lt;span class="c1"&gt;# If you are using ssl access with a selfsigned certificate, you&amp;#39;ll have to add the SSLVerifyServer=0 option to deactivate certificate checks:&lt;/span&gt;
syncevolution --configure &lt;span class="nv"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;owncloudurl&amp;gt;/remote.php/caldav/calendars/&amp;lt;username&amp;gt;/&amp;lt;calendarname&amp;gt;/ &lt;span class="nv"&gt;backend&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;caldav &lt;span class="nv"&gt;SSLVerifyServer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt; target-config@owncloud mycalendar

&lt;span class="c1"&gt;# Don&amp;#39;t enter any credentials here! username/password must be empty.&lt;/span&gt;
&lt;span class="c1"&gt;# owncloud is the SyncEvolution configuration identifier again.&lt;/span&gt;
syncevolution --configure --template SyncEvolution_Client &lt;span class="nv"&gt;sync&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;none &lt;span class="nv"&gt;syncURL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;local://@owncloud &lt;span class="nv"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; owncloud

&lt;span class="c1"&gt;# N9calendar should be replaced with the calendarname of your local N9 calendar,&lt;/span&gt;
&lt;span class="c1"&gt;# leave it empty to use the default calendar.&lt;/span&gt;
syncevolution --configure &lt;span class="nv"&gt;sync&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;two-way &lt;span class="nv"&gt;backend&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;calendar &lt;span class="nv"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;N9calendar owncloud mycalendar

&lt;span class="c1"&gt;# For the first sync, sync with:&lt;/span&gt;
syncevolution --sync slow owncloud mycalendar
&lt;span class="c1"&gt;# If you run into problems with inconsistent databases, you can try&lt;/span&gt;
&lt;span class="c1"&gt;# other (more destructive! you made that backup, right?) sync methods:&lt;/span&gt;
&lt;span class="c1"&gt;# --sync [refresh-from-local, refresh-from-remote, one-way-from-local, one-way-from-remote]&lt;/span&gt;

&lt;span class="c1"&gt;# Later on this is enough to start the synchronization:&lt;/span&gt;
syncevolution owncloud mycalendar
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="carddav-sync"&gt;
&lt;h2&gt;CardDAV&amp;nbsp;sync:&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# myaddressbook is the identifier for this carddav sync.&lt;/span&gt;
&lt;span class="c1"&gt;# Again, name it anyway you like or just stay with myaddressbook.&lt;/span&gt;
syncevolution --configure &lt;span class="nv"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;owncloudurl&amp;gt;/remote.php/carddav/addressbooks/&amp;lt;username&amp;gt;/&amp;lt;addressbookname&amp;gt;/ &lt;span class="nv"&gt;backend&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;carddav target-config@owncloud myaddressbook
&lt;span class="c1"&gt;# Again, if you are using ssl access with a selfsigned certificate, you&amp;#39;ll have to add the SSLVerifyServer=0 option to deactivate certificate checks:&lt;/span&gt;
syncevolution --configure &lt;span class="nv"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;owncloudurl&amp;gt;/remote.php/carddav/addressbooks/&amp;lt;username&amp;gt;/&amp;lt;addressbookname&amp;gt;/ &lt;span class="nv"&gt;backend&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;carddav &lt;span class="nv"&gt;SSLVerifyServer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt; target-config@owncloud myaddressbook

&lt;span class="c1"&gt;# This one command can be skipped if done already for caldav sync:&lt;/span&gt;
&lt;span class="c1"&gt;# Don&amp;#39;t enter any credentials here! username/password must be empty.&lt;/span&gt;
&lt;span class="c1"&gt;# owncloud is the SyncEvolution configuration identifier again.&lt;/span&gt;
syncevolution --configure --template SyncEvolution_Client &lt;span class="nv"&gt;sync&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;none &lt;span class="nv"&gt;syncURL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;local://@owncloud &lt;span class="nv"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; owncloud

syncevolution --configure &lt;span class="nv"&gt;sync&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;two-way &lt;span class="nv"&gt;backend&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;addressbook &lt;span class="nv"&gt;database&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; owncloud myaddressbook

&lt;span class="c1"&gt;# For the first sync, sync with:&lt;/span&gt;
syncevolution --sync slow owncloud myaddressbook
&lt;span class="c1"&gt;# If you run into problems with inconsistent databases, you can try&lt;/span&gt;
&lt;span class="c1"&gt;# other (more destructive! you made that backup, right?) sync methods:&lt;/span&gt;
&lt;span class="c1"&gt;# --sync [refresh-from-local, refresh-from-remote, one-way-from-local, one-way-from-remote]&lt;/span&gt;

&lt;span class="c1"&gt;# Later on this is enough to start the synchronization:&lt;/span&gt;
syncevolution owncloud myaddressbook
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="section" id="making-synchronization-more-easy"&gt;
&lt;h2&gt;Making synchronization more&amp;nbsp;easy&lt;/h2&gt;
&lt;p&gt;I set up any &lt;span class="caps"&gt;GUI&lt;/span&gt; stuff for syncevolution. There&amp;#8217;s a &lt;span class="caps"&gt;GUI&lt;/span&gt; for starting syncs floating around in the web, but the configuration part has to be done on the command line anyway.
As I don&amp;#8217;t sync that often, I only made a script name sync.sh in the MyDocs-directory&amp;nbsp;containing&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;syncevolution owncloud mycalendar
syncevolution owncloud myaddressbook
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;and then I fire up &lt;a class="reference external" href="http://hqh.unlink.org/harmattan/"&gt;finger term&lt;/a&gt;, enter &amp;#8220;./sync.sh&amp;#8221; and watch for progress and problems. ;) Good&amp;nbsp;luck!&lt;/p&gt;
&lt;/div&gt;
</content></entry><entry><title>First things first: Setting up your working environment</title><link href="https://florianjacob.de/first-things-first.html" rel="alternate"></link><published>2012-08-14T18:17:00+02:00</published><updated>2012-08-14T18:17:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2012-08-14:/first-things-first.html</id><summary type="html">&lt;p class="first last"&gt;What&amp;#8217;s the most important service on a linux box, the one you never should risk breaking?
Right, it&amp;#8217;s ssh. Therefore the first entry in the server guide is on configuring
ssh and your working environment for what will come&amp;nbsp;next.&lt;/p&gt;
</summary><content type="html">&lt;p&gt;This is the first post of my emerging server guide. The guide will show you how to reproduce
my server setup, what decisions I made and why I made them (in case it&amp;#8217;s not just based on personal taste, or, well, maybe even then ;) ).
This should serve as a reference for you, just because it seemed right for me doesn&amp;#8217;t mean it&amp;#8217;s right for you, too. Don&amp;#8217;t
shut down your brain when following this. Read my comments, and the comments in the config files.
Still, this guide is written for, well, maybe not Linux beginners but for beginners starting to be intermediates
on the command line, who see themselves confronted with managing a system solely &lt;em&gt;by&lt;/em&gt; the command line.
If you don&amp;#8217;t understand something, read about it on the web! For basic stuff, I&amp;#8217;ll only tell you what to do, but in case commands or
terms I use are new to you, stop reading and learn about them. Try to understand what you actually do there,
if you don&amp;#8217;t you&amp;#8217;ll end up wit a system you can&amp;#8217;t handle. Chances are you&amp;#8217;ll get hacked and held accountable
for all that spam sent out from your server. You&amp;#8217;re&amp;nbsp;warned.&lt;/p&gt;
&lt;p&gt;Before you get any service running, you need a solid foundation to work with.
This entry covers the basics of how to set up your working environment on the server,
and some tricks &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; hints to ease your future&amp;nbsp;work.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s assume you just installed Debian Squeeze on your server machine or just got the root
password from your provider and logged in.. Do you feel the power? ;) First thing is to make
sure the door you just entered through gets closed, so no one can follow&amp;nbsp;you.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Change your root password! And make sure you remember it,&lt;/span&gt;
&lt;span class="c1"&gt;# resetting the root password is unnecessary work. You&amp;#39;ve better things to do!&lt;/span&gt;
passwd

&lt;span class="c1"&gt;# Change the sources.list at the bottom to include squeeze-backports (for a newer tmux version)&lt;/span&gt;
vi /etc/apt/sources.list
&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;
&lt;span class="c1"&gt;# backports for tmux&lt;/span&gt;
deb http://backports.debian.org/debian-backports squeeze-backports &lt;span class="nv"&gt;main&lt;/span&gt;
&lt;span class="o"&gt;=&lt;/span&gt;&amp;gt;
&lt;span class="c1"&gt;# Debian Squeeze is quite old now. (Maybe not in Debian scales..)&lt;/span&gt;
&lt;span class="c1"&gt;# A lot of security holes in the shipped software got fixed by then,&lt;/span&gt;
&lt;span class="c1"&gt;# so upgrading will take time, but still, as always, get all upgrades immediately.&lt;/span&gt;
aptitude update
aptitude upgrade
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Well, so far it was trivial.
Next step is to install the tools you&amp;nbsp;need.&lt;/p&gt;
&lt;dl class="docutils"&gt;
&lt;dt&gt;vim&lt;/dt&gt;
&lt;dd&gt;Well, my favourite editor. If you never used any editor on the terminal, you might want to
give nano or pico a try, and read &lt;a class="reference external" href="http://www.rudism.com/s/vimcreep"&gt;http://www.rudism.com/s/vimcreep&lt;/a&gt;&amp;nbsp;.&lt;/dd&gt;
&lt;dt&gt;zsh (seperate&amp;nbsp;post)&lt;/dt&gt;
&lt;dd&gt;My favourite shell. If you just used bash (the standard shell) so far, just follow
what I write here and you&amp;#8217;ll end up with a shell with amazing autocompletion&amp;nbsp;features.&lt;/dd&gt;
&lt;dt&gt;git&lt;/dt&gt;
&lt;dd&gt;Last point in the favourites line-up, git is the distributed version control system I use most.
etckeeper works with mercurial and bazaar, too, so you can install whatever you&amp;nbsp;like.&lt;/dd&gt;
&lt;dt&gt;htop&lt;/dt&gt;
&lt;dd&gt;This is the terminal equivalent of your graphical process monitor on your desktop. Start it up,
and you&amp;#8217;ll see the cpu and memory usage of the machine and all running processes sorted by their cpu&amp;nbsp;usage.&lt;/dd&gt;
&lt;dt&gt;tmux (seperate&amp;nbsp;post)&lt;/dt&gt;
&lt;dd&gt;Desktop terminal emulators usually have the feature of tabbed terminals. tmux does something similar on the server side,
it&amp;#8217;s a terminal window manager where you can create, switch and close windows, and especially leave them open and running when
you disconnect from the server. You should try to work inside a tmux window on the server, so when you get interrupted,
you can always just detach the window and log off while e.g. upgrades, compiles, backups or other long-lasting
operations still keep&amp;nbsp;running.&lt;/dd&gt;
&lt;dt&gt;etckeeper (seperate&amp;nbsp;post)&lt;/dt&gt;
&lt;dd&gt;etckeeper is a tool to get all of your config files beneath /etc under a version control repository.
If you use it from the beginning, you can always get back to any revision of your config files in case something goes wrong,
and it even creates an automatic revision if you install something with&amp;nbsp;aptitude.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Oh, and by the way, I like to make notes on paper or in a text file to record what and how I configure a server
(actually I do that for desktop / laptop installations, too) to keep track of the problems I ran into and how one can solve them.
Very handy if you have to reproduce your setup after a fresh install, and as you might have guessed now, this guide is actually based
on the notes I made for the latest server.&amp;nbsp;;)&lt;/p&gt;
&lt;p&gt;From now on, when I put something in &amp;lt;pointy brackets&amp;gt;, that&amp;#8217;s the stuff you have to replace with your own&amp;nbsp;parameters.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Install your favourite tools to work  with the server&lt;/span&gt;
aptitude install vim zsh git htop etckeeper
aptitude -t squeeze-backports install tmux
&lt;span class="c1"&gt;# One shouldn&amp;#39;t be logged in and work as root if one doesn&amp;#39;t need to. Create a normal user for yourself, later we&amp;#39;ll even forbid root logins.&lt;/span&gt;
adduser &amp;lt;username&amp;gt;
&lt;span class="nb"&gt;logout&lt;/span&gt;

&lt;span class="c1"&gt;# reconnect as the newly-created user&lt;/span&gt;
ssh &amp;lt;username&amp;gt;@&amp;lt;host&amp;gt;
&lt;span class="c1"&gt;# Now we start to secure the ssh daemon. Open the sshd config file:&lt;/span&gt;
su
vim /etc/ssh/sshd_config
&lt;span class="c1"&gt;# Find the line saying PermitRootLogin Yes, and change it to&lt;/span&gt;
PermitRootLogin No
&lt;span class="c1"&gt;# For now, you should use your own random port for ssh, choose a number between 10000 and 65000&lt;/span&gt;
&lt;span class="c1"&gt;# You can leave it at 22 though, in case you want to use ss(l)h later on. (will be a separate post again. ;) )&lt;/span&gt;
Port &amp;lt;port&amp;gt;
&lt;span class="c1"&gt;# Close your editor again, and restart the ssh server. Hope that everything you entered was right.&lt;/span&gt;
service ssh restart

&lt;span class="c1"&gt;# You installed etckeeper already. We just made the first change to a config file in etc, so we&lt;/span&gt;
&lt;span class="c1"&gt;# commit the changes and create a new revision.&lt;/span&gt;
&lt;span class="c1"&gt;# There&amp;#39;ll be a seperate post on that, too.&lt;/span&gt;
git add /etc/ssh
git commit -m &lt;span class="s2"&gt;&amp;quot;Changed ssh port and prohibited root login.&amp;quot;&lt;/span&gt;
&lt;span class="nb"&gt;logout&lt;/span&gt;


&lt;span class="c1"&gt;# On your local machine again, you can create a config file for ssh.&lt;/span&gt;
&lt;span class="c1"&gt;# This will enable auto completion for ssh hosts on zsh,&lt;/span&gt;
&lt;span class="c1"&gt;# and ssh &amp;lt;hostname&amp;gt; will be enough to connect in the future.&lt;/span&gt;
vim ~/.ssh/config
&lt;span class="c1"&gt;# Add these lines&lt;/span&gt;
Host &amp;lt;host&amp;gt;
    User &amp;lt;username&amp;gt;
    Port &amp;lt;port&amp;gt;
&lt;span class="c1"&gt;# and close the editor again&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class="section" id="ssh-public-private-key-authentication"&gt;
&lt;h2&gt;ssh public private key&amp;nbsp;authentication&lt;/h2&gt;
&lt;p&gt;Especially when using Port 22 as the ssh port for your machine,
you&amp;#8217;ll notice automatic bots hammering against your ssh login&amp;nbsp;soon.&lt;/p&gt;
&lt;p&gt;This should make you aware that everybody who can guess your username and your password owns your machine.
There&amp;#8217;s a much more secure alternative to logging in with passwords, ssh supports logging in with public
private key pairs, the very same concept used with &lt;span class="caps"&gt;PGP&lt;/span&gt;&amp;nbsp;etc.&lt;/p&gt;
&lt;p&gt;Combined with an ssh-agent, this has the advantage of not needing to type a password anymore for logging in
to your remote machines, so go for it!&amp;nbsp;;)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# Generate a new rsa key pair in ~/.ssh/&lt;/span&gt;
&lt;span class="c1"&gt;# id_rsa is your private key. If you don&amp;#39;t enter a passphrase while generating the key,&lt;/span&gt;
&lt;span class="c1"&gt;# everybody who has this key file can login to every server you allowed it to. No passphrase&lt;/span&gt;
&lt;span class="c1"&gt;# makes sense for automatic login in scripts, but for your personal use, you should enter one.&lt;/span&gt;
&lt;span class="c1"&gt;# id_rsa.pub is your public key file, this can be safely shared with anybody.&lt;/span&gt;
ssh-keygen -t rsa

&lt;span class="c1"&gt;# This copies your public key file as an authorized key to the specified machine. Afterwards,&lt;/span&gt;
&lt;span class="c1"&gt;# you can log in using the private key.&lt;/span&gt;
ssh-copy-id -i ~/.ssh/id_rsa.pub &amp;lt;username&amp;gt;@&amp;lt;host&amp;gt;

&lt;span class="c1"&gt;# Try to log in, you should be asked to enter the passphrase for your key instead of the password.&lt;/span&gt;
ssh &amp;lt;username&amp;gt;@&amp;lt;host&amp;gt;
&lt;span class="nb"&gt;logout&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now to the ssh-agent. If you are a  &lt;span class="caps"&gt;KDE&lt;/span&gt; user like me, you can install ksshaskpass to get that integrated into KWallet.
Create the file ~/.kde4/Autostart/ksshaskpass and enter the following in&amp;nbsp;there:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="ch"&gt;#!/bin/sh&lt;/span&gt;

&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;SSH_ASKPASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/bin/ksshaskpass
ssh-add &amp;lt;/dev/null
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And you&amp;#8217;re done! Next time you log in to your local machine, the usualy KWallet authorization dialogue should pop up, and after you
entered your passphrase next time you log in to your remote server, it&amp;#8217;ll never ask again.&amp;nbsp;:)&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="c1"&gt;# console tip:&lt;/span&gt;
&lt;span class="c1"&gt;# You can find out the absolute path of any binary, e.g. ksshaskpass, with&lt;/span&gt;
which ksshaskpass
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Concerning other desktop environments or the usage of ssh-agent without any additional program - I know it &lt;em&gt;does&lt;/em&gt; work,
(e.g. there&amp;#8217;s gnome-ssh-askpass, I guess this does the same as ksshaskpass but for the gnome keyring) but I have no idea&amp;nbsp;how.&lt;/p&gt;
&lt;p&gt;The places your search engine of least distrust will take you will have much better explanations to this than everything I can provide. Good&amp;nbsp;luck!&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="why-i-chose-debian"&gt;
&lt;h2&gt;Why I chose&amp;nbsp;Debian&lt;/h2&gt;
&lt;p&gt;The biggest advantage of Debian for personal servers is that nearly &lt;em&gt;everyone&lt;/em&gt; uses Debian for their servers,
so most documentation and tutorials are written for Debian / Ubuntu Server in mind, especially if you want
to set up a service on a single, small server with very moderate usage. (For a high-traffic failover server cluster,
CentOS or whatever might be better&amp;nbsp;suited.)&lt;/p&gt;
&lt;p&gt;But while I appreciate Canonical&amp;#8217;s plans to get out on phones and TVs, I&amp;#8217;m not a big fan of Ubuntu, so I chose Debian.&amp;nbsp;;)&lt;/p&gt;
&lt;p&gt;One year ago I was tired of the old software you get with debian stable and updated to testing, but then I learned why
you actually want to have a stable distribution for your server: Your setup doesn&amp;#8217;t break with updates. No new features
being added to the installed software, no new versions but only security fixes in the repositories means that your setup which works now
will almost definitely work after the update, too, and you only have the hassle of updating once in about two years, when a new
Debian gets to&amp;nbsp;stable.&lt;/p&gt;
&lt;p&gt;And in case you need newer software than provided with Debian stable, there might be an official backport and many projects have their
own repository for debian where they ship the latest stable&amp;nbsp;version.&lt;/p&gt;
&lt;div class="section" id="why-i-use-aptitude-and-not-apt-get-apt-cache"&gt;
&lt;h3&gt;Why I use aptitude and not apt-get &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;apt-cache&lt;/h3&gt;
&lt;p&gt;Mainly because I prefer to have one command for searching, installing and managing packages. :D
But as far as I know, aptitude has its own database for dependencies between your installed packages and is able
to purge a dependency when there&amp;#8217;s no program installed anymore that pulled in the dependency. That database is the reason
why you should choose betwen apt-get and aptitude and then stay with your choice,&amp;nbsp;too.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="section" id="debian-mailing-lists"&gt;
&lt;h3&gt;Debian mailing&amp;nbsp;lists&lt;/h3&gt;
&lt;p&gt;As soon as you running a Debian server, you should subscribe to the debian-announce and debian-security-announce
mailing list to get announcement mails for new debian releases and security&amp;nbsp;fixes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;a class="reference external" href="http://lists.debian.org/debian-announce/"&gt;http://lists.debian.org/debian-announce/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="reference external" href="http://lists.debian.org/debian-security-announce/"&gt;http://lists.debian.org/debian-security-announce/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Next post will be a shorter one about tmux. I hope to get this out, soon. :)&amp;nbsp;:wq&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</content></entry><entry><title>Hallo Welt</title><link href="https://florianjacob.de/hallo-welt.html" rel="alternate"></link><published>2012-07-14T23:46:00+02:00</published><updated>2012-07-14T23:46:00+02:00</updated><author><name>Florian Jacob</name></author><id>tag:florianjacob.de,2012-07-14:/hallo-welt.html</id><summary type="html">&lt;p class="first last"&gt;Hello! Welcome to my new blog. This is just a short post for me to have at least one article
while I&amp;#8217;m getting used to pelican and designing the site. But actually there&amp;#8217;s more than just this teaser.&amp;nbsp;;)&lt;/p&gt;
</summary><content type="html">&lt;p&gt;Well, I&amp;#8217;m Florian Jacob, an avid Linux user and free software enthusiast in general.
Let&amp;#8217;s see what I&amp;#8217;ll actually end up posting about - I won&amp;#8217;t promise to write about any (tech?) topics in specific,
but as I&amp;#8217;m up to reconfigure my virtual private server from scratch, so I guess the next posts will
be on how to self-host your own website, jabber &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; mail server, ownCloud instance and similar kind of&amp;nbsp;stuff.&lt;/p&gt;
&lt;p&gt;I strive to get a replacement for all that services one usually gets from whatever service provider
or &amp;#8220;the cloud&amp;#8221; these days running on my own server. Later on my own hardware, if I can afford it.
I&amp;#8217;ll report the troubles I run in, and write guides on how to set up those services. So if in the end
no one will actually read this blog, at least I sat down and documented why and how I did everything,
as I&amp;#8217;m sure I won&amp;#8217;t remember anything when the server setup needs to be fixed in the future.&amp;nbsp;;)&lt;/p&gt;
&lt;p&gt;Other topics I hope to write about include the great ownCloud project (maybe writing that sentence
makes me contributing to the project more often again, I didn&amp;#8217;t do anything in the last months
I have to admit. :/ ), (game-) programming, and maybe even some gardening or tales from the
newly-created pen&amp;amp;paper role playing group I set up with my fellow students a few days ago. Let&amp;#8217;s see.&amp;nbsp;:)&lt;/p&gt;
&lt;p&gt;Florian Jacob&amp;nbsp;:wq&lt;/p&gt;
</content></entry></feed>