<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
 xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
>

<channel>
<title>The Border Worlds Blog</title>
<link>http://borderworlds.dk/blog/</link>
<description>Like everyone else these days I need to have a blog where I can write about boring and generally uninteresting stuff.</description>
<language>en</language>
<pubDate>Fri, 02 May 2014 20:41:21 CEST</pubDate>
<lastBuildDate>Fri, 02 May 2014 20:41:21 CEST</lastBuildDate>
<managingEditor>xi@borderworlds.dk</managingEditor>
<webMaster>xi@borderworlds.dk</webMaster>

<item>
<title>Configuring IPv6 on FreeBSD 9.0</title>
<description>&#x3C;p&#x3E;
As long as I have been using IPv6 on FreeBSD (Since FreeBSD 4.x i think) IPv6 has basically been configured
the same way in rc.conf. I usually either configure my systems with a static address or use stateless
autoconfiguration.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
From FreeBSD 9.0 and forward the syntax in rc.conf has changed a bit - mostly for the autoconfiguration case.
I have made up examples of both cases with &#x22;before&#x22; and &#x22;after&#x22; configuration. By looking at these examples
it should be easy enough to convert your own configuration to the new form.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Static address&#x3C;/h2&#x3E;

&#x3C;p&#x3E;FreeBSD &#x26;le; 8:&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;ipv6_enable=&#x22;YES&#x22;
ipv6_network_interfaces=&#x22;em0&#x22;
ifconfig_em0_ipv6=&#x22;2001:470:dd78::21 prefixlen 64&#x22;
ipv6_defaultrouter=&#x22;2001:470:dd78::1&#x22;
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;FreeBSD &#x26;ge; 9:&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;ipv6_network_interfaces=&#x22;em0&#x22;
ifconfig_em0_ipv6=&#x22;inet6 2001:470:dd78::21 prefixlen 64&#x22;
ipv6_defaultrouter=&#x22;2001:470:dd78::1&#x22;
ip6addrctl_policy=&#x22;ipv6_prefer&#x22;
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;h2&#x3E;Autoconfiguration&#x3C;/h2&#x3E;

&#x3C;p&#x3E;FreeBSD &#x26;le; 8:&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;ipv6_enable=&#x22;YES&#x22;
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;FreeBSD &#x26;ge; 9:&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;ipv6_network_interfaces=&#x22;em0&#x22;
ifconfig_em0_ipv6=&#x22;inet6 accept_rtadv&#x22;
ip6addrctl_policy=&#x22;ipv6_prefer&#x22;
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20120122-00.html</guid>
<pubDate>Sun, 22 Jan 2012 17:35:00 CET</pubDate>
</item>
<item>
<title>Taking a look at Convergence</title>
<description>&#x3C;p&#x3E;
&#x3C;a href=&#x22;http://convergence.io/&#x22;&#x3E;Convergence&#x3C;/a&#x3E; is a secure replacement for the Certificate Authority System.
It verifies certificates on web sites based on what notaries located around the Internet observe without any
need for centralized validation.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The motivation for building a replacement for the existing CA trust model is quite simply that the old model
is utterly broken. The web browsers on almost all computers in the world trust a scary amount of certificate
authorities. In the recent past several of these have had security breaches and I&#x27;m quite sure that we will see
more of this in the coming years. Furthermore, the business models used by the existing CAs give them no incentive
to take security too seriously but drive the price up instead and makes it prohibitively expensive or even impossible
to use virtual hosting for SSL sites with SAN certificates.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
At the moment the only client implementation for Convergence exists as a Firefox add-on. The whole thing is still
very much a work in progress, however the basic functionality seems to work well enough at this time. Just install
the add-on and certificates for the SSL sites that you visit will be verified by Convergence rather than the built-in
list of trusted CAs.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
When convergence is active you&#x27;ll notice the difference when clicking on the left part of the address bar:
&#x3C;/p&#x3E;

&#x3C;img src=&#x22;20111113-normal.png&#x22; /&#x3E;&#x26;nbsp;&#x26;nbsp;&#x3C;img src=&#x22;20111113-convergence.png&#x22; /&#x3E;

&#x3C;p&#x3E;
&#x3C;a href=&#x22;https://www.quickdns.dk/&#x22;&#x3E;www.quickdns.dk&#x3C;/a&#x3E; uses a domain validated certificate from Equifax and the screenshot on the left shows how it is normally
presented to the user. The one on the right shows how it looks when convergence is doing the verification.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I don&#x27;t know if Convergence will take off and actually replace what is in use now. Among others the people at Google have
&#x3C;a href=&#x22;http://www.imperialviolet.org/2011/09/07/convergence.html&#x22;&#x3E;valid concerns&#x3C;/a&#x3E; regarding implementing it.
However, if it paves the way for something better than the current trust model then that is certainly great.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;The current state of the implementation&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
Having used Convergence on two of my computers for a week or so now, I have noticed a few things that are still not quite right.
I&#x27;m confident that these issues will be worked out eventually.
&#x3C;/p&#x3E;

&#x3C;h3&#x3E;No SNI support&#x3C;/h3&#x3E;

&#x3C;p&#x3E;
Web sites can generally not rely on SNI yet so this is not fatal. Hopefully that will change in the not too distant future though.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
If you are reading this using Internet Explorer on Windows XP or Android 2.x, stop doing that and get yourself a non-ancient web browser!
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
github issue: &#x3C;a href=&#x22;https://github.com/moxie0/Convergence/issues/28&#x22;&#x3E;Notary fails for sites relying on SNI&#x3C;/a&#x3E;
&#x3C;/p&#x3E;

&#x3C;h3&#x3E;No IPv6 support&#x3C;/h3&#x3E;

&#x3C;p&#x3E;
When browsing a dual stack site (like &#x3C;a href=&#x22;https://www.quickdns.dk/&#x22;&#x3E;www.quickdns.dk&#x3C;/a&#x3E;) having Convergence enabled forces IPv4 as far as
I can tell.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
github issue: &#x3C;a href=&#x22;https://github.com/moxie0/Convergence/issues/53&#x22;&#x3E;IPv6-enabled HTTPS sites don&#x27;t load when convergence is enabled&#x3C;/a&#x3E;
&#x3C;/p&#x3E;

&#x3C;h3&#x3E;Security exceptions not working&#x3C;/h3&#x3E;

&#x3C;p&#x3E;
In my development setup I have a number of sites that are not reachable by the Convergence notaries and have the wrong name in their certificates
as well. At the moment I have to disable Convergence completely to access them as i am unable to add a security exception.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
github issue: &#x3C;a href=&#x22;https://github.com/moxie0/Convergence/issues/79&#x22;&#x3E;Cert exceptions for local internal sites don&#x27;t work&#x3C;/a&#x3E;
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20111113-00.html</guid>
<pubDate>Sun, 13 Nov 2011 17:07:00 CET</pubDate>
</item>
<item>
<title>IPv6 enabled web crawlers</title>
<description>&#x3C;p&#x3E;
  For a while now I have been wondering if &#x3C;a href=&#x22;http://google.com/&#x22;&#x3E;Google&#x3C;/a&#x3E;, &#x3C;a href=&#x22;http://bing.com/&#x22;&#x3E;Bing&#x3C;/a&#x3E;, e.t.c. have crawlers that
  are IPv6 enabled. I&#x27;m fairly certain that they won&#x27;t try to access dual stacked sites using IPv6 but that doesn&#x27;t neccesarily mean that they are
  incapable of indexing IPv6 only sites.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
  As a small experiment I have created &#x3C;a href=&#x22;http://v6.borderworlds.dk/&#x22;&#x3E;v6.borderworlds.dk&#x3C;/a&#x3E; to find out. I&#x27;ll observe the access log and
  see if anything finds its way there.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
  If it doesn&#x27;t work for you, you&#x27;re probably just still stuck on &#x3C;a href=&#x22;http://en.wikipedia.org/wiki/IPv4&#x22;&#x3E;legacy IP&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20110206-00.html</guid>
<pubDate>Sun, 06 Feb 2011 19:26:00 CET</pubDate>
</item>
<item>
<title>New job</title>
<description>&#x3C;p&#x3E;
As of today, I will be working at &#x3C;a href=&#x22;http://www.safeticket.dk/&#x22;&#x3E;Safeticket ApS&#x3C;/a&#x3E;.
I will be writing code as usual for the most part.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20100701-00.html</guid>
<pubDate>Thu, 01 Jul 2010 09:39:00 CEST</pubDate>
</item>
<item>
<title>IPv6 related Firefox add-ons</title>
<description>&#x3C;p&#x3E;
Having IPv6 connectivity I found that I would like to both use it more and also know if the websites I visit are IPv6 enabled.
I found two add-ons that helps me do both.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Use IPv6 when doing google searches: &#x3C;a href=&#x22;https://addons.mozilla.org/en-US/firefox/addon/11730&#x22;&#x3E;IPv6 Google Search&#x3C;/a&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Show the IP of the website you are visiting - with custom colors indicating IPv4 or IPv6: &#x3C;a href=&#x22;https://addons.mozilla.org/en-US/firefox/addon/590&#x22;&#x3E;ShowIP&#x3C;/a&#x3E;
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20100405-00.html</guid>
<pubDate>Mon, 05 Apr 2010 18:57:00 CEST</pubDate>
</item>
<item>
<title>Enabling softupdates on the root filesystem without console access</title>
<description>&#x3C;p&#x3E;
I found myself needing to enable softupdates on the root filesystem of a FreeBSD machine where I didn&#x27;t have
console access. As this is a little tricky I wrote a small RC script that I am now sharing here.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The script is located &#x3C;a href=&#x22;softdep&#x22;&#x3E;here&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
To install it run this sequence of commands as root:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;
cd /etc/rc.d
fetch http://borderworlds.dk/blog/softdep
chmod +x softdep
shutdown -r now
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
Your system will then reboot. When it runs the script it will enable softupdates and reboot once more. After
that it should come up normally. Afterwards you can remove the script (Although it doesn&#x27;t hurt to leave it there)
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I take no responsibility if it eats your cat or sets your machine on fire. It worked for me on the two machines I
tried it on.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20090429-00.html</guid>
<pubDate>Wed, 29 Apr 2009 19:09:00 CEST</pubDate>
</item>
<item>
<title>A simple stream proxy</title>
<description>&#x3C;p&#x3E;
Occasionally I have the chance to use the nice big loudspeakers at the office without anyone being bothered.
I have a premium account for my favourite net radio station but have no desire to expose my credentials by placing
my playlist on the Windows XP machine to which the loudspeakers are connected. So I wrote a small stream proxy to
work around that small problem.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
It is quite simple to use:
&#x3C;/p&#x3E;

&#x3C;pre&#x3E;&#x3C;code&#x3E;$ pls-proxy.pl yournetradio.pls 
pls-proxy.pl 0.1
Copyright (c) 2008 Christian Laursen &#x26;lt;xi@borderworlds.dk&#x26;gt;

Playlist contains 3 entries, picking number 2
URL: http://xxxx:yyyyy@iii.iii.iii.iii:80

Waiting for client to connect on port 8020...
Client connected
Connected to iii.iii.iii.iii:80

Headers:
GET / HTTP/1.0
Host: iii.iii.iii.iii:80
User-Agent: MPlayer/1.0rc2-4.2.1
Icy-MetaData: 1
Connection: close
Authorization: Basic xxxxxxxxxxxxxxxxxx

Fri Nov 28 18:43:07 2008  Bytes received: 434176
Fri Nov 28 18:44:07 2008  Bytes received: 1900544
&#x3C;/code&#x3E;&#x3C;/pre&#x3E;

&#x3C;p&#x3E;
The proxy accepts exactly one connection, so even if you run it on a public machine without firewalling it,
as long as you connect first no one else will be able to use your stream.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Get it &#x3C;a href=&#x22;/utils/pls-proxy.pl&#x22;&#x3E;here&#x3C;/a&#x3E; and use it if you like.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20081128-00.html</guid>
<pubDate>Fri, 28 Nov 2008 18:52:00 CET</pubDate>
</item>
<item>
<title>Getting true fullscreen in Firefox 3</title>
<description>&#x3C;p&#x3E;
Firefox 3 has improved fullscreen mode to the point where it is &#x3C;strong&#x3E;almost&#x3C;/strong&#x3E; fullscreen. All that remains is the toolbar and tabbar at the top being hidden
away and ready to appear when you move your mouse to the top of the screen. Unfortunately this takes up 5 pixels of the screen height and I was looking for a way to
get rid of that too to really use the entire screen.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
It took a while to guess the right search term to find what I needed but I finally did. The &#x3C;a href=&#x22;https://addons.mozilla.org/en-US/firefox/addon/1568&#x22;&#x3E;Full Fullscreen&#x3C;/a&#x3E; add-on
enables the desired behaviour. All you have to do is enable the &#x22;Prevent navbar auto-popup&#x22; option in its preferences dialog.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20081004-00.html</guid>
<pubDate>Sat, 04 Oct 2008 23:42:30 CEST</pubDate>
</item>
<item>
<title>Restoring the display on Dell Latitude D610</title>
<description>&#x3C;p&#x3E;
I have a Dell Latitude D610 at work. I don&#x27;t use its own display very often but when I happen to
do it is a bit annoying that the display does not turn on after the lid has been closed. When
I tried to search for a solution I found a number of fixes for Linux but none for FreeBSD.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The fix on FreeBSD isn&#x27;t that complicated. The display can be turned on again using DPMS. This
requires a running X session to work.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Insert the following lines into &#x3C;code&#x3E;/etc/devd.conf&#x3C;/code&#x3E;:&#x3C;br /&#x3E;
&#x3C;code&#x3E;
notify 0 {&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;match&#x26;nbsp;&#x22;system&#x22;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x22;ACPI&#x22;;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;match&#x26;nbsp;&#x22;subsystem&#x22;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x22;Lid&#x22;;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;match&#x26;nbsp;&#x22;notify&#x22;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x22;0x01&#x22;;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;action&#x26;nbsp;&#x22;/root/bin/restore_display&#x22;;&#x3C;br /&#x3E;
};
&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Then create a file called &#x3C;code&#x3E;/root/bin/restore_display&#x3C;/code&#x3E; containing the following:&#x3C;br /&#x3E;
&#x3C;code&#x3E;
#!/bin/sh&#x3C;br /&#x3E;
&#x3C;br /&#x3E;
/usr/bin/logger Lid opened, restoring display&#x3C;br /&#x3E;
&#x3C;br /&#x3E;
export HOME=/home/cfl&#x3C;br /&#x3E;
export DISPLAY=:0&#x3C;br /&#x3E;
&#x3C;br /&#x3E;
/usr/local/bin/xset dpms force on
&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Of course you need to change the home directory to that of the user logged into X.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20071027-00.html</guid>
<pubDate>Sat, 27 Oct 2007 16:23:00 CEST</pubDate>
</item>
<item>
<title>Xinerama on Dell Latitude D610</title>
<description>&#x3C;p&#x3E;
I have a Dell Latitude D610 to do my work related stuff on. At work I have two 20&#x22; LCD monitors,
both with a resolution of 1600x1200 pixels. It took quite a bit of experimenting to get Xinerama
running, so I decided to share my X.org configuration.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x3C;a href=&#x22;20070328-00_xorg.conf&#x22;&#x3E;Here it is&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The laptop has a VGA connector and a DVI connector. The &#x22;NoDDC&#x22; option is neccesary to get the
monitor on VGA to accept 1600x1200. Without it only 1280x1024 is possible and that looks quite ugly.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20070328-00.html</guid>
<pubDate>Wed, 28 Mar 2007 17:40:00 CEST</pubDate>
</item>
<item>
<title>QEMU Clipboard synchronization</title>
<description>&#x3C;p&#x3E;
A week ago I wrote that I hadn&#x27;t been able to find any network clipboard
applications that worked well in order to allow me to share the clipboard
between the host and the QEMU guest OS. Yesterday I got a bright idea about
how this can be done in a simple way with widely used and maintained tools.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x3C;a href=&#x22;http://x2x.dottedmag.net/&#x22;&#x3E;x2x&#x3C;/a&#x3E; allows the keyboard, mouse on one X display to be used to control another X display.
It also shares X clipboards between the displays. A similar program called &#x3C;a href=&#x22;http://fredrik.hubbe.net/x2vnc.html&#x22;&#x3E;x2vnc&#x3C;/a&#x3E;
allows a host running X to control a host running a VNC server. The primary function of these two programs (controlling the other
display) is not interesting in this context. However, the clipboard sharing of both of them works very well.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Guests running X&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
Before it is possible to let x2x connect to the X server on the guest, you need to forward a port with the &#x3C;code&#x3E;-redir&#x3C;/code&#x3E;
option to QEMU. Personally I use &#x22;&#x3C;code&#x3E;-redir tcp:6042::6000&#x3C;/code&#x3E;&#x22; which will make QEMU listen on port 6042 and forward it to port 6000
in the guest.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
X on the guest needs to be started with the &#x3C;code&#x3E;-listen_tcp&#x3C;/code&#x3E; option in order to allow connections from the network. Furthermore
you need to run &#x22;&#x3C;code&#x3E;xhost +10.0.2.2&#x3C;/code&#x3E;&#x22; to allow the host to connect to it.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
When all this is taken care of it is just a question of running &#x22;&#x3C;code&#x3E;x2x -to :42&#x3C;/code&#x3E;&#x22; on the host.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Guests running something else&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
When running a guest OS using something else than X (e.g. Windows), install a VNC server inside the guest OS and run QEMU with
&#x22;&#x3C;code&#x3E;-redir tcp:5900::5900&#x3C;/code&#x3E;&#x22;.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
You can then run &#x22;&#x3C;code&#x3E;x2vnc 127.0.0.1:0&#x3C;/code&#x3E;&#x22; on the host.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20070224-00.html</guid>
<pubDate>Sat, 24 Feb 2007 21:00:00 CET</pubDate>
</item>
<item>
<title>Getting the QEMU USB tablet working with Linux as guest OS</title>
<description>&#x3C;p&#x3E;
I found out that it wasn&#x27;t actually that hard to get the emulated USB tablet
working inside my SuSE Linux guest.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I googled a bit and found what I needed to build this InputDevice section for my xorg.conf:&#x3C;br /&#x3E;
&#x3C;code&#x3E;
Section &#x22;InputDevice&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Driver &#x22;evtouch&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Identifier &#x22;Tablet&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Option &#x22;Device&#x22; &#x22;/dev/input/event3&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Option &#x22;MinX&#x22; &#x22;0&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Option &#x22;MinY&#x22; &#x22;0&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Option &#x22;MaxX&#x22; &#x22;32767&#x22;&#x3C;br /&#x3E;
&#x26;nbsp;&#x26;nbsp;Option &#x22;MaxY&#x22; &#x22;32767&#x22;&#x3C;br /&#x3E;
EndSection
&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I haven&#x27;t been able to get it going for my FreeBSD guest yet. It looks like it wants xorg-server.h which will
not be present before X.Org is updated in ports to version 7.x.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20070218-00.html</guid>
<pubDate>Sun, 18 Feb 2007 16:35:00 CET</pubDate>
</item>
<item>
<title>Integrating QEMU a bit with your desktop</title>
<description>&#x3C;p&#x3E;
Presently you have to run QEMU with a slightly lower resolution than your real desktop
or run it in full-screen mode to get a decent experience out of it. With a patch I have
written and a few tricks it can work a bit better.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Getting QEMU to occupy the entire screen&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
This is a bit tricky. I have made a patch (&#x3C;a href=&#x22;/patches/qemu-noframe.patch&#x22;&#x3E;qemu-noframe.patch&#x3C;/a&#x3E;) that
adds a &#x3C;code&#x3E;-no-frame&#x3C;/code&#x3E; option to QEMU. Apply this patch, rebuild QEMU and add &#x3C;code&#x3E;-no-frame&#x3C;/code&#x3E; to
your command line. (This patch has now been committed to QEMU CVS)
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
When you start QEMU with the &#x3C;code&#x3E;-no-frame&#x3C;/code&#x3E; option, it will open in a window without borders and window
decorations. Your window manager might have a way to let you position such a window (alt + left mouse button often
does this). Then you just have to place the window in the top left corner of the screen and configure the guest
OS to the resolution of your screen.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
If you don&#x27;t want to move the window manually every time you start QEMU, you can set the &#x3C;code&#x3E;SDL_VIDEO_WINDOW_POS&#x3C;/code&#x3E;
environment variable before starting QEMU. In a bourne shell it would look like this:&#x3C;br /&#x3E;
&#x3C;code&#x3E;export SDL_VIDEO_WINDOW_POS=0,0&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Eliminating the need for mouse grabbing&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
When running Windows as the guest OS you can instruct QEMU to emulate a USB tablet instead of the normal PS/2 mouse. This way
QEMU can use absolute coordinates to tell Windows where the pointer currently is, eliminating the need for QEMU to grab the mouse.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I haven&#x27;t had success with the tablet when using Linux or FreeBSD as guest OS but Google indicates that the &#x3C;code&#x3E;evtouch&#x3C;/code&#x3E;
driver might work for this purpose.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The USB tablet is enabled by adding &#x22;&#x3C;code&#x3E;-usb -usbdevice tablet&#x3C;/code&#x3E;&#x22; to the QEMU command line.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Guest OS tweaking&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
This part depends on your actual desktop configuration. Personally I have a single Xfce panel at the bottom of the screen, so I have
moved the windows taskbar to the top.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
If anyone can tell me how I can make an invisible bar or something like it at the bottom of the windows desktop that will prevent
windows from being maximized under my Xfce panel, it would be very nice as I haven&#x27;t found a way to do that yet. A screenshot showing
this problem is &#x3C;a href=&#x22;20070217-00_qemu.png&#x22;&#x3E;here&#x3C;/a&#x3E;.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Clipboard synchronization&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
To conveniently allow copy and paste between the host and the guest, the easiest way is to just use one of the
network based clipboard sharing programs.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I haven&#x27;t found one that works well for me. The closest thing is &#x3C;a href=&#x22;http://wolfpackally.wo.funpic.de/qemu/qgt/&#x22;&#x3E;QEMU Guest Tools&#x3C;/a&#x3E;.
It looks unmaintained but I managed to build it on my FreeBSD host and use the prebuilt windows binary on my Windows guest.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
When connecting from inside the guest you can use the IP address 10.0.2.2 to connect to the host.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20070217-00.html</guid>
<pubDate>Sat, 17 Feb 2007 16:20:00 CET</pubDate>
</item>
<item>
<title>New job</title>
<description>&#x3C;p&#x3E;
In the middle of November 2006 I contacted a recruitment agency about a
job that looked interesting. Last week, 7 weeks later I got the job. Compared
to my experience with &#x3C;a href=&#x22;20061005-00.html&#x22;&#x3E;the Google hiring
process&#x3C;/a&#x3E; this was much more pleasant.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The process was delayed a few times, partly due to my new boss being extremely
busy and partly due to the christmas holidays.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
From the 1st of March I will be working as a developer for
&#x3C;a href=&#x22;http://www.stofa.dk/&#x22;&#x3E;Telia Stofa&#x3C;/a&#x3E; located in Horsens, Denmark.
They are doing a lot of interesting stuff and I look forward to working there
a great deal.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I have been very happy working for &#x3C;a href=&#x22;http://www.pil.dk/&#x22;&#x3E;pil.dk&#x3C;/a&#x3E; for the
past 6 years and 9 months and I&#x27;m sure that I&#x27;ll miss it.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20070111-00.html</guid>
<pubDate>Thu, 11 Jan 2007 08:30:00 CET</pubDate>
</item>
<item>
<title>Trimming the FreeBSD base system</title>
<description>&#x3C;p&#x3E;
The FreeBSD base system contains everything neccesary for a minimal functional
operating system. However it contains a little more than that and since some of
the developers started talking about importing OpenLDAP into base I have been
thinking about a way to avoid installing that on my machines.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I update my machines using the traditional method of &#x3C;code&#x3E;make buildworld&#x3C;/code&#x3E;
and &#x3C;code&#x3E;make installworld&#x3C;/code&#x3E;. The build system lets me specify NO_* variables
in &#x3C;code&#x3E;/etc/make.conf&#x3C;/code&#x3E; to exclude certain parts of the system from being
built and installed. But if I add those variables after having done a standard install
of the system those parts will not be removed from my system, just not updated.
So I end up with a number of stale files that can possibly cause unpredictable
behaviour.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
To solve this problem I have written a script that builds a standard full world
as well as a world using the variables from &#x3C;code&#x3E;/etc/make.conf&#x3C;/code&#x3E;. It then
compares the list of files installed from both of them and presents a list of
files not present in the custom world.&#x3C;/p&#x3E;

&#x3C;p&#x3E; The file list is opened in the &#x3C;code&#x3E;vi&#x3C;/code&#x3E; editor and can be changed if desired.
After closing the editor you need to confirm the deletion of the files before
they are deleted.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The script takes one argument which is a path to a working directory. The directory
needs to be on a filesystem with 1 to 1.5GB of free space.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The script can be downloaded from &#x3C;a href=&#x22;/utils/freebsd-cleanup.pl&#x22;&#x3E;here&#x3C;/a&#x3E;. Enjoy.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20061021-00.html</guid>
<pubDate>Sat, 21 Oct 2006 18:50:00 CEST</pubDate>
</item>
<item>
<title>The Google Hiring Process</title>
<description>&#x3C;p&#x3E;
Three months ago I received an email from a Google recruiter containing two job
descriptions. She asked me whether they looked interesting to me. I answered that
they did and entered the Google hiring process. The first part of it went well but
the last month or so has been an experience I wouldn&#x27;t recommend to anyone.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Timeline&#x3C;/h2&#x3E;

&#x3C;table border=&#x22;1&#x22;&#x3E;
&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-07-05
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received the email mentioned above from the recruiter. We exchanged a few mails
in one of which I sent a link to my online CV and a phone interview was set up.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-07-07
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The recruiter called me for the phone interview. We talked mostly about my background
and she asked me a few technical questions. I was also asked to rate my skills on a number
of technologies.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-07-18
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
My first technical interview. Various questions and a troubleshooting scenario.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-07-25
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
My second technical interview.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-08-02
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
Every time I was called for an interview I was told that I would get some feedback
within a week. I hadn&#x27;t received feedback from the second technical interview so
I sent an email asking for it.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-08-03
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received an email with an invitation to the European headquarters of Google in Dublin.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-08-18
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I visited Google in Dublin and went through four interviews there. They were much like
the phone interviews except that I got to write some code on the white board.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-08-23
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received an email telling me that all my feedback so far had been positive and they
would like one final phone interview with a technical manager.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-08-30
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The final interview. The technical manager didn&#x27;t call me. I sent a mail requesting a
new time for the interview.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-06
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The final interview, take two. Once again the technical manager didn&#x27;t call me. I sent
a mail expressing frustration and unhappiness about the situation.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-13
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I was called by the recruiter in Dublin who apologized and promised that she would make
sure that the technical manager called me the next time.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-14
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The final interview, take three. This time the technical manager called me.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-19
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received an email with one last request for a phone interview with a senior technical
manager based in California.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-21
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The second final interview with the senior technical manager.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-26
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received an email from a recruiter based in California. I was apparently
scheduled for a final interview without being asked about possible dates first.
I replied that this was the third time I had been scheduled for a &#x22;final&#x22;
interview and requested an explanation before proceeding further.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-09-29
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The lead recruiter called me and apologized about the situation and promised me
that he would make sure that I got a quick answer after the third final interview.
He didn&#x27;t offer me an explanation of the situation.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-10-02
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
The third final interview with the same senior technical manager as the second
final interview.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;

&#x3C;tr&#x3E;
&#x3C;td&#x3E;
2006-10-05
&#x3C;/td&#x3E;
&#x3C;td&#x3E;
I received an email telling me that I was not a strong match for the position.
&#x3C;/td&#x3E;
&#x3C;/tr&#x3E;
&#x3C;/table&#x3E;

&#x3C;h2&#x3E;Conclusion&#x3C;/h2&#x3E;

&#x3C;p&#x3E;
I obviously didn&#x27;t get the job. Otherwise I would probably not be writing this.
From what I have heard my experience is not typical. However from my perspective
it doesn&#x27;t make Google look like a professional organization.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
My two main complaints are:
&#x3C;/p&#x3E;

&#x3C;ul&#x3E;
&#x3C;li&#x3E;Promising an interview to be the final one when it isn&#x27;t. Twice.&#x3C;/li&#x3E;
&#x3C;li&#x3E;Not calling at the scheduled time. Twice.&#x3C;/li&#x3E;
&#x3C;/ul&#x3E;

&#x3C;p&#x3E;
I would expect a company like Google to have this sort of stuff worked out a
long time ago. I realize that mistakes happen and human beings make mistakes.
Did they all happen to me and not to others?
&#x3C;/p&#x3E;

</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20061005-00.html</guid>
<pubDate>Thu, 05 Oct 2006 20:00:00 CEST</pubDate>
</item>
<item>
<title>Migration from ipfw to pf</title>
<description>&#x3C;p&#x3E;
For too long I have had plans to take a look af &#x3C;code&#x3E;pf(4)&#x3C;/code&#x3E; to figure out
whether I liked it or not. Today I managed to build a working &#x3C;code&#x3E;pf&#x3C;/code&#x3E;
ruleset that was not only better than the old &#x3C;code&#x3E;ipfw&#x3C;/code&#x3E; ruleset but much
shorter as well.
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Kernel support&#x3C;/h2&#x3E;
&#x3C;p&#x3E;
Since I have always been building &#x3C;code&#x3E;ipfw&#x3C;/code&#x3E; into my kernels I decided to
remove that and add &#x3C;code&#x3E;pf&#x3C;/code&#x3E; instead. That way the motivation for getting
pf to work well would be greater too.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;Adding &#x3C;code&#x3E;pf&#x3C;/code&#x3E; to the kernel is simple enough:&#x3C;br /&#x3E;
&#x3C;code&#x3E;device pf&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;The ruleset&#x3C;/h2&#x3E;
&#x3C;p&#x3E;Since the ruleset is for my laptop I need all ports to be closed and just allow
connections initiated on the host itself. I didn&#x27;t find an example that did this but
it proved easy enough to build it myself.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;Here it is:&#x3C;br /&#x3E;
set block-policy return&#x3C;br /&#x3E;
set skip on lo0&#x3C;br /&#x3E;
block in all&#x3C;br /&#x3E;
&#x3C;br /&#x3E;
pass out proto { tcp, udp } all keep state&#x3C;br /&#x3E;
&#x3C;br /&#x3E;
pass in proto {icmp,icmp6} all&#x3C;br /&#x3E;
pass out proto {icmp,icmp6} all
&#x3C;/p&#x3E;

&#x3C;h2&#x3E;Traffic shaping and NAT&#x3C;/h2&#x3E;
&#x3C;p&#x3E;The next machine to be migrated away from &#x3C;code&#x3E;ipfw&#x3C;/code&#x3E; will probably be my
workstation. To do that I need to figure out how to make &#x3C;code&#x3E;ALTQ&#x3C;/code&#x3E; do the
same as &#x3C;code&#x3E;ipfw&#x3C;/code&#x3E; pipes. The last machine will probably be my gateway which
does NAT. There are lots of examples on that so I expect it to be easy enough.
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20060713-00.html</guid>
<pubDate>Thu, 13 Jul 2006 19:10:00 CEST</pubDate>
</item>
<item>
<title>dominion.borderworlds.dk - My second soekris</title>
<description>&#x3C;p&#x3E;
After several months I finally got around to the &#x3C;a href=&#x22;http://www.soekris.com/&#x22;&#x3E;soekris&#x3C;/a&#x3E; I bought back in February.
It is now taking care of all my mail reading needs and seems to run stable and reliable.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The operating system is of course &#x3C;a href=&#x22;http://www.FreeBSD.org/&#x22;&#x3E;FreeBSD&#x3C;/a&#x3E; like
most of my other machines. However this one is different. All the software that runs on
it is built on my workstation by a script that generates two images. The first image
contains the root filesystem and the second one contains &#x3C;code&#x3E;/usr/local&#x3C;/code&#x3E; and
&#x3C;code&#x3E;/usr/X11R6&#x3C;/code&#x3E;. The reason for this split is that the soekris only has 64MB
of onboard flash.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
When the system is up and running the &#x3C;code&#x3E;df -h&#x3C;/code&#x3E; output looks like this:
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x3C;code&#x3E;
Filesystem&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;Size&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;Used&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;Avail&#x26;nbsp;Capacity&#x26;nbsp;&#x26;nbsp;Mounted&#x26;nbsp;on&#x3C;br/&#x3E;
/dev/ad0s1a&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;59M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;48M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;6.6M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;88%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/&#x3C;br/&#x3E;
devfs&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;1.0K&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;1.0K&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;0B&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;100%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/dev&#x3C;br/&#x3E;
/dev/ggate0&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;1.9G&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;826M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;994M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;45%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/home&#x3C;br/&#x3E;
/dev/ggate1p1&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;185M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;158M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;12M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;93%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/usr/local&#x3C;br/&#x3E;
/dev/ggate1p2&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;63M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;59M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;-1.7M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;103%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/usr/X11R6&#x3C;br/&#x3E;
/dev/md0&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;31M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;660K&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;28M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;2%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/var&#x3C;br/&#x3E;
/dev/md1&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;19M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;12K&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;18M&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;0%&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;&#x26;nbsp;/tmp&#x3C;br /&#x3E;
&#x3C;/code&#x3E;
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
As you can see I use ggate for accessing the image that contains &#x3C;code&#x3E;/usr/local&#x3C;/code&#x3E; and &#x3C;code&#x3E;/usr/X11R6&#x3C;/code&#x3E; as
well as the file that contains &#x3C;code&#x3E;/home&#x3C;/code&#x3E;. Both are stored on my other soekris that has a harddisk.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The image building is done by a 400 line perl script that uses a configuration file to determine how the images
should be built. The &#x3C;a href=&#x22;20060604-00_build.cfg&#x22;&#x3E;&#x3C;code&#x3E;build.cfg&#x3C;/code&#x3E; for &#x3C;code&#x3E;dominion.borderworlds.dk&#x3C;/code&#x3E;
is here&#x3C;/a&#x3E;. Most of it doesn&#x27;t need much explaining. If you know a little about the FreeBSD build process you will
recognize the buildflags as options you normally set in &#x3C;code&#x3E;/etc/make.conf&#x3C;/code&#x3E;. Portsflags does the same thing -
just for the ports instead of the base system.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
The imageloader flag indicates whether the special component called imageloader should be included in the image.
The imageloader is a small &#x3C;code&#x3E;mfsroot&#x3C;/code&#x3E; image that can be booted as the root file system and then be used
to load a new image onto the flash. If enabled the forth code in &#x3C;code&#x3E;/boot&#x3C;/code&#x3E; is modified to include a custom
command &#x22;update&#x22; that loads this &#x3C;code&#x3E;mfsroot&#x3C;/code&#x3E; image and boots with it as the root filesystem.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
I might release the build script at some point but right now some parts of it are just too ugly and too many things
are har coded. It will probably become better when I build a few more systems with it and force myself to make things
more generic.
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
Finally a picture of my infrastructure closet:
&#x3C;/p&#x3E;

&#x3C;p&#x3E;
&#x3C;img src=&#x22;20060604-00_soekris.jpg&#x22; alt=&#x22;The infrastructure closet&#x22; /&#x3E;
&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20060604-00.html</guid>
<pubDate>Sun, 04 Jun 2006 16:15:00 CEST</pubDate>
</item>
<item>
<title>The blog is online</title>
<description>&#x3C;p&#x3E;Who would have believed it? I now have a blog. My plans for it is somewhat vague at the
moment, but I&#x27;m pretty sure that I will find something to write about shortly.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The soekris I bought three months ago is almost ready to take its place in my
small &#x22;server farm&#x22; and the build system I created to build the images powering it
deserves a short story. I have plans to extend and use the same build system for
making my HTPC diskless.&#x3C;/p&#x3E;

&#x3C;p&#x3E;The blog itself is powered by the superior 238 line perl script that takes care
of generating the rest of &#x3C;a href=&#x22;http://borderworlds.dk/&#x22;&#x3E;borderworlds.dk&#x3C;/a&#x3E;.
Using one of the existing blog packages out there would increase the attack surface
and probably be slower too than having it statically generated. Furthermore it allows
me to write my stuff in emacs as usual which is nice.&#x3C;/p&#x3E;
</description>
<guid isPermaLink="true">http://borderworlds.dk/blog/20060527-00.html</guid>
<pubDate>Sun, 28 May 2006 00:04:00 CEST</pubDate>
</item>
</channel>
</rss>