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

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Andrew's blog (Entries tagged as geek)</title>
    <link>https://blog.etc.gen.nz/</link>
    <description>This is a blog, it is it is.</description>
    <dc:language>en</dc:language>
    <admin:errorReportsTo rdf:resource="mailto:blog@etc.gen.nz" />
    <generator>Serendipity 2.4.0 - http://www.s9y.org/</generator>
    <pubDate>Sun, 03 Aug 2025 09:20:18 GMT</pubDate>

    <image>
    <url>https://blog.etc.gen.nz/templates/2k11/img/s9y_banner_small.png</url>
    <title>RSS: Andrew's blog - This is a blog, it is it is.</title>
    <link>https://blog.etc.gen.nz/</link>
    <width>100</width>
    <height>21</height>
</image>

<item>
    <title>Let's Encrypt with Octavia in OpenStack</title>
    <link>https://blog.etc.gen.nz/archives/135-Lets-Encrypt-with-Octavia-in-OpenStack.html</link>
    
    <comments>https://blog.etc.gen.nz/archives/135-Lets-Encrypt-with-Octavia-in-OpenStack.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=135</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=135</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    &lt;p&gt;I like using &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/catalystcloud.nz&#039;]);&quot;  href=&quot;https://catalystcloud.nz&quot;&gt;Catalyst Cloud&lt;/a&gt; to host some of my personal sites. In the past I used to use &lt;a href=&quot;https://blog.etc.gen.nz/index.php?/plugin/tag/cacert&quot;&gt;CAcert&lt;/a&gt; for my TLS certificates, but more recently I&#039;ve been using &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/letsencrypt.org/&#039;]);&quot;  href=&quot;https://letsencrypt.org/&quot;&gt;Let&#039;s Encrypt&lt;/a&gt; for my TLS certificates as they&#039;re trusted in all browsers. Currently the LoadBalancer as a Service (LBaaS) in Catalyst Cloud doesn&#039;t have built in support for Let&#039;s Encrypt. I could use an apache2/nginx proxy and handle the TLS termination there and have that manage the Let&#039;s Encrypt lifecycle, but really, I&#039;d rather use LBaaS.&lt;/p&gt;

&lt;p&gt;So I thought I&#039;d set about working out how to get Dehydrated (the Let&#039;s Encrypt client I&#039;ve been using) to drive LBaaS (known as Octavia). I figured this would be of interest to other people using Octavia with OpenStack in general, not just Catalyst Cloud.&lt;/p&gt;

&lt;p&gt;There&#039;s a few things you need to do. These instructions are specific to Debian:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Install and configure Dehydrated to create the certificates for the domain(s) you want.
    &lt;ul&gt;&lt;li&gt;&lt;tt&gt;apt install barbican&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/docs.catalystcloud.nz/load-balancer/layer-4.html&#039;]);&quot;  href=&quot;https://docs.catalystcloud.nz/load-balancer/layer-4.html&quot;&gt;Create the LoadBalancer&lt;/a&gt; (use the API, ClickOps, whatever), just forward port 80 for now (see sample Apache configs below).&lt;/li&gt;
  &lt;li&gt;Save the sample hook.sh below to &lt;tt&gt;/etc/dehydrated/hook.sh&lt;/tt&gt;, you&#039;ll probably need to customise it, mine is a bit more complicated!&lt;/li&gt;
  &lt;li&gt;Insert the UUID of your LoadBalancer in hook.sh where LB_LISTENER is set.&lt;/li&gt;
  &lt;li&gt;Create &lt;tt&gt;/etc/dehydrated/catalystcloud/password&lt;/tt&gt; as described in hook.sh&lt;/li&gt;
  &lt;li&gt;Save OpenRC file from the Catalyst Cloud dashboard as &lt;tt&gt;/etc/dehydrated/catalystcloud/openrc.sh&lt;/tt&gt;&lt;/li&gt;
  &lt;li&gt;Install jq, openssl and the openstack tools, on Debian this is:
    &lt;ul&gt;&lt;li&gt;&lt;tt&gt;apt install jq openssl python3-openstackclient python3-barbicanclient python3-octaviaclient&lt;/tt&gt;&lt;/li&gt;&lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Add &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/docs.catalystcloud.nz/load-balancer/tls-termination.html&#039;]);&quot;  href=&quot;https://docs.catalystcloud.nz/load-balancer/tls-termination.html&quot;&gt;TLS termination to your LoadBalancer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;You should be able to rename the latest certs &lt;tt&gt;/var/lib/dehydrated/certs/$DOMAIN&lt;/tt&gt; and then run &lt;tt&gt;dehydrated -c&lt;/tt&gt; to have it reissue and then deploy a cert.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As we&#039;re using &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/letsencrypt.org/docs/challenge-types/#http-01-challenge&#039;]);&quot;  href=&quot;https://letsencrypt.org/docs/challenge-types/#http-01-challenge&quot;&gt;HTTP-01 Challenge Type&lt;/a&gt; here, you need to have the LoadBalancer forwarding port 80 to your website to allow for the challenge response. It is good practice to have a redirect to HTTPS, here&#039;s an example virtual host for Apache:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;VirtualHost *:80&amp;gt;
    ServerName www.example.com
    ServerAlias example.com

    RewriteEngine On
    RewriteRule ^/.well-known/ - [L]
    RewriteRule ^/(.*)$ https://www.example.com/$1 [R=301,L]

    &amp;lt;Location /&amp;gt;
        Require all granted
    &amp;lt;/Location&amp;gt;
&amp;lt;/VirtualHost&amp;gt;
&lt;/pre&gt;

You all also need this in &lt;tt&gt;/etc/apache2/conf-enabled/letsencrypt.conf&lt;/tt&gt;:

&lt;pre&gt;
Alias /.well-known/acme-challenge /var/lib/dehydrated/acme-challenges

&amp;lt;Directory /var/lib/dehydrated/acme-challenges&amp;gt;
        Options None
        AllowOverride None

        # Apache 2.x
        &amp;lt;IfModule !mod_authz_core.c&amp;gt;
                Order allow,deny
                Allow from all
        &amp;lt;/IfModule&amp;gt;

        # Apache 2.4
        &amp;lt;IfModule mod_authz_core.c&amp;gt;
                Require all granted
        &amp;lt;/IfModule&amp;gt;
&amp;lt;/Directory&amp;gt;
&lt;/pre&gt;

&lt;p&gt;And that should be all that you need to do. Now, when Dehydrated updates your certificate, it should update your LoadBalancer as well!&lt;/p&gt;

Sample &lt;tt&gt;hook.sh&lt;/tt&gt;:

&lt;pre&gt;
deploy_cert() {
    local DOMAIN=&quot;${1}&quot; KEYFILE=&quot;${2}&quot; CERTFILE=&quot;${3}&quot; FULLCHAINFILE=&quot;${4}&quot; \
          CHAINFILE=&quot;${5}&quot; TIMESTAMP=&quot;${6}&quot;
    shift 6

    # File contents should be:
    #   export OS_PASSWORD=&#039;your password in here&#039;
    . /etc/dehydrated/catalystcloud/password

    # OpenRC file from the Catalyst Cloud dashboard
    . /etc/dehydrated/catalystcloud/openrc.sh --no-token

    # UUID of the LoadBalancer to be managed
    LB_LISTENER=&#039;xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&#039;

    # Barbican uses P12 files, we need to make one.
    P12=$(readlink -f $KEYFILE \
        | sed -E &#039;s/privkey-([0-9]+)\.pem/barbican-\1.p12/&#039;)
    openssl pkcs12 -export -inkey $KEYFILE -in $CERTFILE -certfile \
        $FULLCHAINFILE -passout pass: -out $P12

    # Keep track of existing certs for this domain (hopefully no more than 100)
    EXISTING_URIS=$(openstack secret list --limit 100 \
        -c Name -c &#039;Secret href&#039; -f json \
        | jq -r &quot;.[]|select(.Name | startswith(\&quot;$DOMAIN\&quot;))|.\&quot;Secret href\&quot;&quot;)

    # Upload the new cert
    NOW=$(date +&quot;%s&quot;)
    openstack secret store --name $DOMAIN-$TIMESTAMP-$NOW -e base64 \
        -t &quot;application/octet-stream&quot; --payload=&quot;$(base64 &lt; $P12)&quot;

    NEW_URI=$(openstack secret list --name $DOMAIN-$TIMESTAMP-$NOW \
        -c &#039;Secret href&#039; -f value) \
        || unset NEW_URI

    # Change LoadBalancer to use new cert - if the old one was the default,
    # change the default. If the old one was in the SNI list, update the
    # SNI list.
    if [ -n &quot;$EXISTING_URIS&quot; ]; then
        DEFAULT_CONTAINER=$(openstack loadbalancer listener show $LB_LISTENER \
            -c default_tls_container_ref -f value)

        for URI in $EXISTING_URIS; do
            if [ &quot;x$URI&quot; = &quot;x$DEFAULT_CONTAINER&quot; ]; then
                openstack loadbalancer listener set $LB_LISTENER \
                    --default-tls-container-ref $NEW_URI
            fi
        done

        SNI_CONTAINERS=$(openstack loadbalancer listener show $LB_LISTENER \
            -c sni_container_refs -f value | sed &quot;s/&#039;//g&quot; | sed &#039;s/^\[//&#039; \
            | sed &#039;s/\]$//&#039; | sed &quot;s/,//g&quot;)

        for URI in $EXISTING_URIS; do
            if echo $SNI_CONTAINERS | grep -q $URI; then
                SNI_CONTAINERS=$(echo $SNI_CONTAINERS | sed &quot;s,$URI,$NEW_URI,&quot;)
                openstack loadbalancer listener set $LB_LISTENER \
                    --sni-container-refs $SNI_CONTAINERS
            fi
        done

        # Remove old certs
        for URI in $EXISTING_URIS; do
            openstack secret delete $URI
        done
    fi
}

HANDLER=&quot;$1&quot;; shift
#if [[ &quot;${HANDLER}&quot; =~ ^(deploy_challenge|clean_challenge|sync_cert|deploy_cert|deploy_ocsp|unchanged_cert|invalid_challenge|request_failure|generate_csr|startup_hook|exit_hook)$ ]]; then
if [[ &quot;${HANDLER}&quot; =~ ^(deploy_cert)$ ]]; then
    &quot;$HANDLER&quot; &quot;$@&quot;
fi
&lt;/pre&gt; 
    </content:encoded>

    <pubDate>Sun, 23 Oct 2022 05:09:00 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/135-guid.html</guid>
    <category>catalystcloud</category>
<category>geek</category>
<category>linux</category>
<category>openstack</category>

</item>
<item>
    <title>Install Fedora CoreOS using FAI</title>
    <link>https://blog.etc.gen.nz/archives/134-Install-Fedora-CoreOS-using-FAI.html</link>
    
    <comments>https://blog.etc.gen.nz/archives/134-Install-Fedora-CoreOS-using-FAI.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=134</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=134</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    &lt;p&gt;I&#039;ve spent the last couple of days trying to deploy &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/getfedora.org/en/coreos/&#039;]);&quot;  href=&quot;https://getfedora.org/en/coreos/&quot;&gt;Fedora CoreOS&lt;/a&gt; to some &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/docs.fedoraproject.org/en-US/fedora-coreos/bare-metal/&#039;]);&quot;  href=&quot;https://docs.fedoraproject.org/en-US/fedora-coreos/bare-metal/&quot;&gt;physical hardware/bare metal&lt;/a&gt; for a colleague using the official PXE installer from Fedora CoreOS. It wasn&#039;t very pleasant, and just wouldn&#039;t work reliably.&lt;/p&gt;

&lt;p&gt;Maybe my expectations were to high, in that I thought I could use Ignition to prepare more of the system for me, as my colleague has been able to bare metal installs correctly. I just tried to use Ignition as documented.&lt;/p&gt;

&lt;p&gt;A few interesting aspects I encountered:

&lt;ol&gt;
  &lt;li&gt;The PXE installer for it has a 618MB initrd file. This takes quite a while to transfer via tftp!&lt;/li&gt;
  &lt;li&gt;It can&#039;t build software RAID for the main install device (and the developers have no intention of adding this), and it seems very finicky to build other RAID sets for other partitions.&lt;/li&gt;
  &lt;li&gt;And, well, I just kept having problems where the built systems would hang during boot for no obvious reason.&lt;/li&gt;
  &lt;li&gt;The time to do an installation was incredibly long.&lt;/li&gt;
  &lt;li&gt;The initrd image is really just running coreos-installer against the nominated device.&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;

&lt;p&gt;During the night I got feed up with that process and wrote a &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/fai-project.org&#039;]);&quot;  href=&quot;https://fai-project.org&quot;&gt;Fully Automatic Installer&lt;/a&gt; (FAI) profile that&#039;d install CoreOS instead. I can now use setup-storage from FAI using it&#039;s standard disk_config files. This allows me to build complicated disk configurations with software RAID and LVM easily.&lt;/p&gt;

&lt;p&gt;A big bonus is that a rebuild is a &lt;b&gt;lot&lt;/b&gt; faster, timed from typing reboot to a fresh login prompt is 10 minutes - and this is on physical hardware so includes BIOS POST and RAID controller set up, twice each.&lt;/p&gt;

&lt;p&gt;I thought this might be of interest to other people, so the FAI profile I developed for this is located here: &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/github.com/catalyst-cloud/fai-profile-fedora-coreos&#039;]);&quot;  href=&quot;https://github.com/catalyst-cloud/fai-profile-fedora-coreos&quot;&gt;https://github.com/catalyst-cloud/fai-profile-fedora-coreos&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FAI was initially developed to deploy Debian systems, it has since been extended to be able to install a number of other operating systems, however I think this is a good example of how easy it is to deploy non-Debian derived operating systems using FAI without having to modify FAI itself.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 19 Apr 2020 06:43:00 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/134-guid.html</guid>
    <category>debian</category>
<category>fai</category>
<category>fedora_coreos</category>
<category>geek</category>

</item>
<item>
    <title>linux.conf.au 2019 - Call for Proposals</title>
    <link>https://blog.etc.gen.nz/archives/133-linux.conf.au-2019-Call-for-Proposals.html</link>
            <category>catalyst</category>
    
    <comments>https://blog.etc.gen.nz/archives/133-linux.conf.au-2019-Call-for-Proposals.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=133</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=133</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    &lt;p&gt;At the start of July, the LCA2019 team announced that the Call for Proposals for linux.conf.au 2019 were open! This Call for Proposals will close on July 30. If you want to submit a proposal, you don&#039;t have much time!&lt;/p&gt;

&lt;p&gt;&lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/linux.confu.au&#039;]);&quot;  href=&quot;http://linux.confu.au&quot;&gt;linux.conf.au&lt;/a&gt; is one of the best-known community driven Free and Open Source Software conferences in the world. In 2019 we welcome you to join us in Christchurch, New Zealand on Monday 21 January through to
Friday 25 January.&lt;/p&gt;

&lt;p&gt;For full details including those not covered by this announcement visit &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/linux.conf.au/call-for-papers/&#039;]);&quot;  href=&quot;https://linux.conf.au/call-for-papers/&quot;&gt;https://linux.conf.au/call-for-papers/&lt;/a&gt;, and the full announcement is &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lists.linux.org.au/pipermail/lca-announce/2018-July/000289.html&#039;]);&quot;  href=&quot;http://lists.linux.org.au/pipermail/lca-announce/2018-July/000289.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IMPORTANT DATES&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;ul&gt;
&lt;li&gt;Call for Proposals Opens: 2 July 2018&lt;/li&gt;
&lt;li&gt;Call for Proposals Closes: 30 July 2018 (no extensions)&lt;/li&gt;
&lt;li&gt;Notifications from the programme committee: early-September 2018&lt;/li&gt;
&lt;li&gt;Conference Opens: 21st January 2019&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 23 Jul 2018 04:57:00 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/133-guid.html</guid>
    <category>catalyst</category>
<category>geek</category>
<category>lca</category>
<category>lca2019</category>
<category>linux.conf.au</category>
<category>oss</category>

</item>
<item>
    <title>Missing opkg status file on LEDE...</title>
    <link>https://blog.etc.gen.nz/archives/132-Missing-opkg-status-file-on-LEDE....html</link>
            <category>catalyst</category>
    
    <comments>https://blog.etc.gen.nz/archives/132-Missing-opkg-status-file-on-LEDE....html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=132</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=132</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    I tried to install LEDE on my home router which is running LEDE, only to be told that libc wasn&#039;t installed. Huh? What&#039;s going on?! It looked to all intents as purposes as though libc wasn&#039;t installed. And it looked like nothing was installed.&lt;br /&gt;
&lt;br /&gt;
What to do if opkg list-installed is returning nothing?&lt;br /&gt;
&lt;br /&gt;
I finally tracked down the status file it uses as being &lt;tt&gt;/usr/lib/opkg/status&lt;/tt&gt;. And it was empty. Oh dear.&lt;br /&gt;
&lt;br /&gt;
Fortunately the info directory had content. This means we can rebuild the status file. &lt;phew&gt; How? This is what I did:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;cd /usr/lib/opkg/info&lt;br /&gt;
for x in *.list; do&lt;br /&gt;
  pkg=$(basename $x .list)&lt;br /&gt;
  echo $pkg&lt;br /&gt;
  opkg info $pkg | sed &#039;s/Status: .*$/Status: install ok installed/&#039; &gt;&gt; ../status&lt;br /&gt;
done&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
And then for the special or virtual packages (such as libc and the kernel):&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;for x in *.control; do&lt;br /&gt;
  pkg=$(basename $x .control)&lt;br /&gt;
  if ! grep -q &quot;Package: $pkg&quot;  ../status&lt;br /&gt;
  then&lt;br /&gt;
    echo $pkg is missing; cat $x &gt;&gt; ../status&lt;br /&gt;
  fi&lt;br /&gt;
done&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
I then had to edit the file tidy up some newlines for the kernel and libc, and set the status lines correctly. I used &quot;install hold installed&quot;.&lt;br /&gt;
&lt;br /&gt;
Now I that I&#039;ve shaved that yak, I can install tcpdump to try and work out why a VoIP phone isn&#039;t working. Joy. 
    </content:encoded>

    <pubDate>Sun, 17 Sep 2017 11:51:56 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/132-guid.html</guid>
    <category>catalyst</category>
<category>geek</category>
<category>lede</category>

</item>
<item>
    <title>Network boot a Raspberry Pi 3</title>
    <link>https://blog.etc.gen.nz/archives/131-Network-boot-a-Raspberry-Pi-3.html</link>
            <category>catalyst</category>
    
    <comments>https://blog.etc.gen.nz/archives/131-Network-boot-a-Raspberry-Pi-3.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=131</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=131</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    &lt;p&gt;I found to make all this work I had to piece together a bunch of information from different locations. This fills in some of the blanks from the official Raspberry Pi documentation. See &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/net.md&#039;]);&quot;  href=&quot;https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/net.md&quot;&gt;here&lt;/a&gt;, &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.raspberrypi.org/blog/pi-3-booting-part-ii-ethernet-all-the-awesome/&#039;]);&quot;  href=&quot;https://www.raspberrypi.org/blog/pi-3-booting-part-ii-ethernet-all-the-awesome/&quot;&gt;here&lt;/a&gt;, and &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/net_tutorial.md&#039;]);&quot;  href=&quot;https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/net_tutorial.md&quot;&gt;here&lt;/a&gt;.&lt;p&gt;

&lt;p&gt;&lt;b&gt;Image&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Download the latest raspbian image from &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.raspberrypi.org/downloads/raspbian/&#039;]);&quot;  href=&quot;https://www.raspberrypi.org/downloads/raspbian/&quot;&gt;https://www.raspberrypi.org/downloads/raspbian/&lt;/a&gt; and unzip it. I used the lite version as I&#039;ll install only what I need later.&lt;/p&gt;

&lt;p&gt;To extract the files from the image we need to jump through some hoops. Inside the image are two partitions, we need data from each one.&lt;/p&gt;

&lt;pre&gt;
 # Make it easier to re-use these instructions by using a variable
 IMG=2017-04-10-raspbian-jessie-lite.img
 fdisk -l $IMG
&lt;/pre&gt;

&lt;p&gt;You should see some output like:&lt;/p&gt;

&lt;pre&gt;
 Disk 2017-04-10-raspbian-jessie-lite.img: 1.2 GiB, 1297862656 bytes, 2534888 sectors
 Units: sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disklabel type: dos
 Disk identifier: 0x84fa8189
 
 Device                               Boot Start     End Sectors  Size Id Type
 2017-04-10-raspbian-jessie-lite.img1       8192   92159   83968   41M  c W95 FAT32 (LBA)
 2017-04-10-raspbian-jessie-lite.img2      92160 2534887 2442728  1.2G 83 Linux
&lt;/pre&gt;

&lt;p&gt;You need to be able to mount both the boot and the root partitions. Do this by tracking the offset of each one and multiplying it by the sector size, which is given on the line saying &quot;Sector size&quot; (typically 512 bytes), for example with the 2017-04-01 image, boot has an offset of 8192, so I mount it like this (it is VFAT):&lt;/p&gt;

&lt;pre&gt;
 mount -v -o offset=$((8192 * 512)) -t vfat $IMG /mnt
 # I then copy the data off:
 mkdir -p /data/diskless/raspbian-lite-base-boot/
 rsync -xa /mnt/ /data/diskless/raspbian-lite-base-boot/
 # unmount the partition now:
 umount /mnt
&lt;/pre&gt;

&lt;p&gt;Then we do the same for the root partition:&lt;/p&gt;

&lt;pre&gt;
 mount -v -o offset=$((92160 * 512)) -t ext4 $IMG /mnt
 # copy the data off:
 mkdir -p /data/diskless/raspbian-lite-base-root/
 rsync -xa /mnt/ /data/diskless/raspbian-lite-base-root/
 # umount the partition now:
 umount /mnt
&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;DHCP&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;When I first set this up, I used &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/openwrt.org&#039;]);&quot;  href=&quot;http://openwrt.org&quot;&gt;OpenWRT&lt;/a&gt; on my router, and I had to patch &lt;tt&gt;/etc/init/dnsmasq&lt;/tt&gt; to support setting DHCP option 43. As of the writting of this article, a similar patch has been merged, but isn&#039;t in a release yet, and, well, there may never be another release of OpenWRT. I&#039;m now running &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lede-project.org/&#039;]);&quot;  href=&quot;https://lede-project.org/&quot;&gt;LEDE&lt;/a&gt;, and the the good news is it already has the patch merged (hurrah!). If you&#039;re still on OpenWRT, then here&#039;s the patch you&#039;ll need:&lt;/p&gt;

&lt;p&gt;&lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/git.lede-project.org/?p=source.git;a=commit;h=9412fc294995ae2543fabf84d2ce39a80bfb3bd6&#039;]);&quot;  href=&quot;https://git.lede-project.org/?p=source.git;a=commit;h=9412fc294995ae2543fabf84d2ce39a80bfb3bd6&quot;&gt;
https://git.lede-project.org/?p=source.git;a=commit;h=9412fc294995ae2543fabf84d2ce39a80bfb3bd6&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This lets you put the following in &lt;tt&gt;/etc/config/dnsmasq&lt;/tt&gt;, this says that any device that uses DHCP and has a MAC issued by the Raspberry PI Foundation, should have option 66 (boot server) and option 43 set as specified. Set the IP address on option 66 to the device that should be used for tftp on your network, if it&#039;s the same device that provides DHCP then it isn&#039;t required. I had to set the boot server, as my other network boot devices are using a different server (with an older tftpd-hpa, I explain the problem further down).&lt;/p&gt;

&lt;pre&gt;
 config mac &#039;rasperrypi&#039;
         option mac &#039;b8:27:eb:*:*:*&#039;
         option networkid &#039;rasperrypi&#039;
         list dhcp_option &#039;66,10.1.0.253&#039;
         list dhcp_option &#039;43,Raspberry Pi Boot&#039;
&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;tftp&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Initially I used a version of tftpd that was too old and didn&#039;t support how the RPi tried to discover if it should use the serial number based naming scheme. The version of tftpd-hpa Debian Jessie works just fine. To find out the serial number you&#039;ll probably need to increase the logging of tftpd-hpa, do so by editing &lt;tt&gt;/etc/default/tftpd-hpa&lt;/tt&gt; and adding &quot;-v&quot; to the &lt;tt&gt;TFTP_OPTIONS&lt;/tt&gt; option. It can also be useful to watch tcpdump to see the requests and responses, for example (10.1.0.203 is the IP of the RPi I&#039;m working with):&lt;/p&gt;

&lt;pre&gt;
  tcpdump -n -i eth0 host 10.1.0.203 and dst port 69
&lt;/pre&gt;

&lt;p&gt;This was able to tell me the serial number of my RPi, so I made a directory in my tftpboot directory with the same serial number and copied all the boot files into there. I then found that I had to remove the init= portion from the cmdline.txt file I&#039;m using. To ease debugging I also removed quiet. So, my current cmdline.txt contains (newlines entered for clarity, but the file has it all on one line):&lt;/p&gt;

&lt;pre&gt;
idwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/nfs
nfsroot=10.1.0.253:/data/diskless/raspbian-lite-base-root,vers=3,rsize=1462,wsize=1462
ip=dhcp elevator=deadline rootwait hostname=rpi.etc.gen.nz
&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;NFS root&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;You&#039;ll need to export the directories you created via NFS. My exports file has these lines:&lt;/p&gt;

&lt;pre&gt;
/data/diskless/raspbian-lite-base-root	10.1.0.0/24(rw,no_root_squash,sync,no_subtree_check)
/data/diskless/raspbian-lite-base-boot	10.1.0.0/24(rw,no_root_squash,sync,no_subtree_check)
&lt;/pre&gt;

&lt;p&gt;And you&#039;ll also want to make sure you&#039;re mounting those correctly during boot, so I have in &lt;tt&gt;/data/diskless/raspbian-lite-base-root/etc/fstab&lt;/tt&gt; the following lines:

&lt;pre&gt;
10.1.0.253:/data/diskless/raspbian-lite-base-root   /       nfs   rw,vers=3       0   0
10.1.0.253:/data/diskless/raspbian-lite-base-boot   /boot   nfs   vers=3,nolock   0   2
&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;Network Booting&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Now you can hopefully boot. Unless you into this &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/github.com/raspberrypi/firmware/issues/764&#039;]);&quot;  href=&quot;https://github.com/raspberrypi/firmware/issues/764&quot;&gt;bug&lt;/a&gt;, as I did. Where the RPi will sometimes fail to boot. Turns out the fix, which is mentioned on the bug report, is to put bootcode.bin (and only bootcode.bin) onto an SD card. That&#039;ll then load the fixed bootcode, and which will then boot reliably.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 02 Sep 2017 11:31:00 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/131-guid.html</guid>
    <category>catalyst</category>
<category>debian</category>
<category>geek</category>
<category>hardware</category>
<category>rpi</category>

</item>
<item>
    <title>Allow forwarding from VoiceMail to cellphones</title>
    <link>https://blog.etc.gen.nz/archives/128-Allow-forwarding-from-VoiceMail-to-cellphones.html</link>
            <category>catalyst</category>
    
    <comments>https://blog.etc.gen.nz/archives/128-Allow-forwarding-from-VoiceMail-to-cellphones.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=128</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=128</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    &lt;p&gt;Something I&#039;ve been wanting to do with our Asterisk PBX at &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.catalyst.net.nz&#039;]);&quot;  href=&quot;http://www.catalyst.net.nz&quot;&gt;Catalyst&lt;/a&gt; for a while is to allow having callers that hit VoiceMail to be forwarded the callee&#039;s cellphone if allowed. As part of an Asterisk migration we&#039;re currently carrying out I finally decided to investigate what is involved. One of the nice things about the VoiceMail application in Asterisk is that callers can hit 0 for the operator, or &amp;#42; for some other purpose. I decided to use &amp;#42; for this purpose.&lt;/p&gt;

&lt;p&gt;I&#039;m going to assume a working knowledge of Asterisk dial plans, and I&#039;m not going to try and explain how it works. Sorry.&lt;/p&gt;

&lt;p&gt;When a caller hits &amp;#42; the VoiceMail application exits and looks for a rule that matches a. Now, the simple approach looks like this within our macro for handling standard extensions:&lt;/p&gt;

&lt;pre&gt;
[macro-stdexten]
...
exten =&gt; a,1,Goto(pstn,027xxx,1)
...
&lt;/pre&gt;

&lt;p&gt;(Where I have a context called pstn for placing calls out to the PSTN).&lt;/p&gt;

&lt;p&gt;This&#039;ll work, but anyone who hits &amp;#42; will be forwarded to my cellphone. Not what I want. Instead we need to get the dialled extension into a place where we can perform extension matching on it. So instead we&#039;ll have this (the extension is passed into macro-stdexten as the first variable - ARG1):&lt;/p&gt;

&lt;pre&gt;
[macro-stdexten]
...
exten =&gt; a,1,Goto(vmfwd,${ARG1},1)
...
&lt;/pre&gt;

&lt;p&gt;Then we can create a new context called vmfwd with extension matching (my extension is 7231):&lt;/p&gt;

&lt;pre&gt;
[vmfwd]
exten =&gt; 7231,1,Goto(pstn,027xxx,1)
&lt;/pre&gt;

&lt;p&gt;I actually have a bit more in there to do some logging and set the caller ID to something our SIP provider will accept, but you get the gist of it. All I need to do is to arrange for a rule per extension that is allowed to have their VoiceMail callers be forwarded to voicemail. Fortunately I have that part automated.&lt;/p&gt;

&lt;p&gt;The only catch is for extensions that aren&#039;t allowed to be forwarded to a cellphone. If someone calling their VoiceMail hits &amp;#42; their call will be hung up and I get nasty log messages about no rule for them. How do we handle them?  Well, we send them back to VoiceMail. In the vmfwd context we add a rule like this:&lt;/p&gt;

&lt;pre&gt;
exten =&gt; _XXXX,1,VoiceMail(${EXTEN}@sip,${voicemail_option})
  same =&gt; n,Hangup
&lt;/pre&gt;

&lt;p&gt;So any extension that isn&#039;t otherwise matched hits this rule. We use ${voicemail_option} so that we can use the same mode as was used previously.&lt;/p&gt;

&lt;p&gt;Easy! Naturally this approach won&#039;t work for other people trying to do this, but given I couldn&#039;t find write ups on how to do this, I thought it be might be useful to others.&lt;/p&gt;

&lt;p&gt;Here&#039;s my macro-stdexten and vmfwd in full:&lt;/p&gt;

&lt;pre&gt;
[macro-stdexten]
exten =&gt; s,1,Progress()
exten =&gt; s,n,Dial(${ARG2},20)
exten =&gt; s,n,Goto(s-${DIALSTATUS},1)
exten =&gt; s-NOANSWER,1,Answer
exten =&gt; s-NOANSWER,n,Wait(1)
exten =&gt; s-NOANSWER,n,Set(voicemail_option=u)
exten =&gt; s-NOANSWER,n,Voicemail(${ARG1}@sip,u)
exten =&gt; s-NOANSWER,n,Hangup
exten =&gt; s-BUSY,1,Answer
exten =&gt; s-BUSY,n,Wait(1)
exten =&gt; s-BUSY,n,Set(voicemail_option=b)
exten =&gt; s-BUSY,n,Voicemail(${ARG1}@sip,b)
exten =&gt; s-BUSY,n,Hangup
exten =&gt; _s-.,1,Goto(s-NOANSWER,1)
exten =&gt; a,1,Goto(vmfwd,${ARG1},1)
exten =&gt; o,1,Macro(operator)

[vmfwd]

exten =&gt; _XXXX,1,VoiceMail(${EXTEN}@sip,${voicemail_option})
  same =&gt; n,Hangup

#include extensions-vmfwd-auto.conf
&lt;/pre&gt;

&lt;p&gt;And I then build &lt;tt&gt;extensions-vmfwd-auto.conf&lt;/tt&gt; from a script that is used to generate configuration files for defining accounts, other dial plan rule entries and phone provisioning files.&lt;/p&gt;

&lt;p&gt;With thanks to John Kiniston for the suggestion about the wildcard entry in vmfwd.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sun, 24 Jul 2016 03:22:59 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/128-guid.html</guid>
    <category>asterisk</category>
<category>catalyst</category>
<category>geek</category>
<category>voip</category>

</item>
<item>
    <title>Cloud - in New Zealand!</title>
    <link>https://blog.etc.gen.nz/archives/126-Cloud-in-New-Zealand!.html</link>
            <category>catalyst</category>
    
    <comments>https://blog.etc.gen.nz/archives/126-Cloud-in-New-Zealand!.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=126</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=126</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    I&#039;ve spent a reasonable chunk of the past year working on a project we launched last month, &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.catalyst.net.nz/what-we-offer/cloud-services&#039;]);&quot;  href=&quot;http://www.catalyst.net.nz/what-we-offer/cloud-services&quot;&gt;Catalyst Cloud&lt;/a&gt;! It is using &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.openstack.org/&#039;]);&quot;  href=&quot;http://www.openstack.org/&quot;&gt;OpenStack&lt;/a&gt; with &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/ceph.com/&#039;]);&quot;  href=&quot;http://ceph.com/&quot;&gt;Ceph&lt;/a&gt; as the object store. It has taken a lot of work, and it is now very exciting seeing the level of interest there we&#039;re receiving about this new service!&lt;br /&gt;
&lt;br /&gt;
The great part of this is that we can now offer private cloud services to our customers which provides all the flexibility that we&#039;ve come to expect with the &quot;cloud&quot;, but hosted in New Zealand by a New Zealand owned company so no concerns about jurisdiction of your data! Not only are we able to offer private cloud services on our OpenStack cluster(s), but we can also deploy OpenStack onto our customers own hardware using our &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.catalyst.net.nz/what-we-offer/cloud-services/on-premises-openstack-cloud&#039;]);&quot;  href=&quot;http://www.catalyst.net.nz/what-we-offer/cloud-services/on-premises-openstack-cloud&quot;&gt;ProdStack&lt;/a&gt; solution (I get to look directly at the Dashboard shown on that page, which is pretty cool).&lt;br /&gt;
&lt;br /&gt;
Next up is deploying another OpenStack cluster in our new data centre (which is another project I&#039;m working on). In the near future we also hope to start using &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.opencompute.org/&#039;]);&quot;  href=&quot;http://www.opencompute.org/&quot;&gt;Open Compute Project&lt;/a&gt; hardware for our clusters. 
    </content:encoded>

    <pubDate>Thu, 10 Jul 2014 22:19:05 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/126-guid.html</guid>
    <category>catalyst</category>
<category>geek</category>
<category>openstack</category>

</item>
<item>
    <title>LCA2015 - Debian Miniconf submitted</title>
    <link>https://blog.etc.gen.nz/archives/125-LCA2015-Debian-Miniconf-submitted.html</link>
            <category>catalyst</category>
            <category>family</category>
    
    <comments>https://blog.etc.gen.nz/archives/125-LCA2015-Debian-Miniconf-submitted.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=125</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=125</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    Phew, I&#039;ve submitted a proposal to run a &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.debian.org&#039;]);&quot;  href=&quot;http://www.debian.org&quot;&gt;Debian&lt;/a&gt; Miniconf at &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lca2015.linux.org.au/&#039;]);&quot;  href=&quot;http://lca2015.linux.org.au/&quot;&gt;linux.conf.au 2015&lt;/a&gt; here&#039;s hoping that it is accepted!&lt;br /&gt;
&lt;br /&gt;
The Debian Miniconf was held in 2008 in &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lca2008.linux.org.au&#039;]);&quot;  href=&quot;http://lca2008.linux.org.au&quot;&gt;Melbourne&lt;/a&gt;, so I feel it is well overdue to run it again. 
    </content:encoded>

    <pubDate>Thu, 10 Jul 2014 21:43:25 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/125-guid.html</guid>
    <category>catalyst</category>
<category>debian</category>
<category>family</category>
<category>geek</category>
<category>lca</category>
<category>lca2015</category>
<category>linux.conf.au</category>

</item>
<item>
    <title>Laptops and networks</title>
    <link>https://blog.etc.gen.nz/archives/124-Laptops-and-networks.html</link>
            <category>catalyst</category>
            <category>family</category>
    
    <comments>https://blog.etc.gen.nz/archives/124-Laptops-and-networks.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=124</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=124</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    Back in the old days, we had workstations. And only workstations. They lived on a network, and having them work in that network was simple. Printers just worked (thank you printcap), network shares just worked (thank you NFS) and life was good.&lt;br /&gt;
&lt;br /&gt;
Then along came laptops. We wanted to be more mobile, using our laptops on different networks or even without a network! No one wanted hardcoded printers anymore, or network shares defined in /etc/fstab. Using an Automounter was an option, but if you were on a different network then having the Automounter around would stall tools like nautilus and file indexers etc.&lt;br /&gt;
&lt;br /&gt;
So we need something which can start up relevant services when you connect to a network, and then stop them when you leave that network.&lt;br /&gt;
&lt;br /&gt;
To support this, a few years ago I wrote a NetworkManager dispatcher.d script to do just that. When you connect to a specific network (using the NetworkManager UUID or a specific gateway MAC) or a VPN connection then autofs is started, users GTK bookmarks have any bookmarks for their Network shares added and CUPS is restarted.&lt;br /&gt;
&lt;br /&gt;
When the connection goes away, then autofs is stopped, any GTK bookmarks for the Network shares are removed and any mounts for the Network shares are lazily unmounted.&lt;br /&gt;
&lt;br /&gt;
I&#039;m not sure if this will of use to anyone else, but if it is I&#039;d love to hear from you. You can &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/git.etc.gen.nz/cgi-bin/gitweb.cgi?p=laptop-tools.git&#039;]);&quot;  href=&quot;http://git.etc.gen.nz/cgi-bin/gitweb.cgi?p=laptop-tools.git&quot; title=&quot;gitweb&quot;&gt;browse the code&lt;/a&gt; or &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/git.etc.gen.nz/laptop-tools.git&#039;]);&quot;  href=&quot;http://git.etc.gen.nz/laptop-tools.git&quot; title=&quot;clone&quot;&gt;clone the repo&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Included are sample autofs config files, the dispatcher, and the tools for managing the GTK bookmark files. 
    </content:encoded>

    <pubDate>Tue, 28 Jan 2014 09:32:36 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/124-guid.html</guid>
    <category>catalyst</category>
<category>family</category>
<category>geek</category>
<category>laptop</category>
<category>linux</category>

</item>
<item>
    <title>linux.conf.au 2014 - Call for papers</title>
    <link>https://blog.etc.gen.nz/archives/123-linux.conf.au-2014-Call-for-papers.html</link>
            <category>catalyst</category>
            <category>family</category>
    
    <comments>https://blog.etc.gen.nz/archives/123-linux.conf.au-2014-Call-for-papers.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=123</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=123</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    &lt;p&gt;Holy crap, it&#039;s the last week of the linux.conf.au 2014 call for papers!  We&#039;ve got a bunch of great submissions, but we want &lt;b&gt;more&lt;/b&gt;!&lt;/p&gt;

&lt;p&gt;From the &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lca2014.linux.org.au/media/news/1&#039;]);&quot;  href=&quot;http://lca2014.linux.org.au/media/news/1&quot;&gt;CFP Announcement&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;The linux.conf.au 2014 papers committee is looking for a broad range of proposals, and will consider submissions on anything from programming and software, to desktop, mobile, gaming, userspace, community, government, space and education. There is only one rule:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Your proposal must be related to open source&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This year, the papers committee is going to be focused on linux on the frontier and deep technical content-- that might range from cybernetics and mobile operating environments to large astronomy projects and big data projects.&lt;/p&gt;

&lt;p&gt;However, the conference is to a large extent what the speakers make it -- if we receive many excellent submissions on a topic, then it’s sure to be represented at the conference. Here’s a few ideas to get you started:&lt;/p&gt;

&lt;p&gt;&lt;ul&gt;
&lt;li&gt;The Cloud - What is it, how can we use it and why is it running on my toaster?&lt;/li&gt;
&lt;li&gt;Kernel and core systems: file systems, embedded devices&lt;/li&gt;
&lt;li&gt;Networking: peer to peer networking, or tuning a TCP/IP stack&lt;/li&gt;
&lt;li&gt;Desktop: office and productivity applications, peripherals, support&lt;/li&gt;
&lt;li&gt;Mobile: kernel, applications, programming, challenges, user interfaces&lt;/li&gt;
&lt;li&gt;Servers: clusters and supercomputers, databases and cloud computing&lt;/li&gt;
&lt;li&gt;Embedded systems: constraints in storage/memory, real-time aspects, open hardware&lt;/li&gt;
&lt;li&gt;Virtualisation: benefits, challenges, management, kernel and application support&lt;/li&gt;
&lt;li&gt;Systems administration: maintaining large numbers of machines, disaster recovery&lt;/li&gt;
&lt;li&gt;Security: application security, network security, cryptography, malware, viruses&lt;/li&gt;
&lt;li&gt;Programming: programming languages, software engineering practices, testing, continuous integration/deployment, different development methodologies, version control&lt;/li&gt;
&lt;li&gt;Modern web technologies: Open source web browsers, HTML5, CSS3, JavaScript, web apps, accessibility&lt;/li&gt;
&lt;li&gt;Audio and video: video editing, VoIP, WebRTC, video player development, live streaming&lt;/li&gt;
&lt;li&gt;Open Community: licensing changes, patent threats, open data, open apis.&lt;/li&gt;
&lt;li&gt;Free software use: home automation, IT, education, manufacturing, research, government applications, home security&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;LCA is known for presentations and tutorials that are strongly technical in nature, but proposals for presentations on other aspects of free software and open culture, such as educational and cultural applications of open source, are welcome.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 01 Jul 2013 01:42:09 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/123-guid.html</guid>
    <category>catalyst</category>
<category>family</category>
<category>geek</category>
<category>lca2014</category>
<category>linux.conf.au</category>

</item>
<item>
    <title>linux.conf.au 2013 - Call for Proposals</title>
    <link>https://blog.etc.gen.nz/archives/122-linux.conf.au-2013-Call-for-Proposals.html</link>
            <category>catalyst</category>
            <category>family</category>
    
    <comments>https://blog.etc.gen.nz/archives/122-linux.conf.au-2013-Call-for-Proposals.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=122</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=122</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    &lt;p&gt;We are pleased to announce that the &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lca2013.linux.org.au/cfp&#039;]);&quot;  href=&quot;http://lca2013.linux.org.au/cfp&quot;&gt;Call for Proposals&lt;/a&gt; for &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lca2013.linux.org.au&#039;]);&quot;  href=&quot;http://lca2013.linux.org.au&quot;&gt;linux.conf.au 2013&lt;/a&gt; is now open!&lt;/p&gt;

&lt;p&gt;The conference will showcase the best of open source and community-driven software and hardware. It will be held in Canberra at the Australian National University from Monday 28 January to Saturday 2 February, 2013, and provides a great opportunity for open source developers, users, hackers, and makers to share their ideas and further improve their projects.&lt;/p&gt;

&lt;h2&gt;Important Dates&lt;/h2&gt;

Call for proposals opens: 1 June 2012&lt;br /&gt;
Call for proposals closes: 6 July 2012&lt;br /&gt;
Email notifications from papers committee: 28 August 2012&lt;br /&gt;
Early Bird registrations open: 1 October 2012&lt;br /&gt;
Conference dates: Monday 28 January to Saturday 2 February 2013&lt;br /&gt;

&lt;h2&gt;Information on Proposals&lt;/h2&gt;

&lt;p&gt;The linux.conf.au 2013 papers committee is looking for a broad range of proposals, and will consider submissions on anything from programming and software, to desktop, userspace, community, government, and education. There is only one rule:&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Your proposal must be related to open source.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;This year, the papers committee is going to be focused on deep technical content, and things we think are going to really matter in the future -- that might range from freedom and privacy to open source cloud systems or to energy efficient server farms of the future.&lt;/p&gt;

&lt;p&gt;However, the conference is to a large extent what the speakers make it -- if we receive many excellent submissions on a topic, then it’s sure to be represented at the conference.&lt;/p&gt;

&lt;p&gt;For more information see the &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lca2013.linux.org.au/cfp&#039;]);&quot;  href=&quot;http://lca2013.linux.org.au/cfp&quot;&gt;full call for proposals&lt;/a&gt; on the linux.conf.au 2013 website.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Thu, 07 Jun 2012 22:58:14 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/122-guid.html</guid>
    <category>catalyst</category>
<category>family</category>
<category>geek</category>
<category>lca</category>
<category>lca2013</category>

</item>
<item>
    <title>Wolrd IPv6 Day - Catalyst</title>
    <link>https://blog.etc.gen.nz/archives/120-Wolrd-IPv6-Day-Catalyst.html</link>
            <category>catalyst</category>
            <category>family</category>
    
    <comments>https://blog.etc.gen.nz/archives/120-Wolrd-IPv6-Day-Catalyst.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=120</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=120</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    Excellent, due to a little hack we now have the &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.catalyst.net.nz&#039;]);&quot;  href=&quot;http://www.catalyst.net.nz&quot;&gt;Catalyst website&lt;/a&gt; up on IPv6.  Thanks David!&lt;br /&gt;
&lt;br /&gt;
This is using the same method that we used to get another large NZ site IPv6 enabled for World IPv6 Day.&lt;br /&gt;
&lt;br /&gt;
Funnily enough we&#039;ve discovered there is a NZ company that is providing a commercial solution using the same method we&#039;re using.  Even though it is dirty, and is really, &lt;b&gt;really&lt;/b&gt; the wrong way to do it.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Note:&lt;/b&gt; It is worth noting that Catalyst&#039;s email server has been IPv6 enabled for several years now, as have our DNS servers. 
    </content:encoded>

    <pubDate>Wed, 08 Jun 2011 00:39:21 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/120-guid.html</guid>
    <category>catalyst</category>
<category>family</category>
<category>geek</category>
<category>ipv6</category>

</item>
<item>
    <title>World IPv6 Day</title>
    <link>https://blog.etc.gen.nz/archives/119-World-IPv6-Day.html</link>
            <category>catalyst</category>
            <category>family</category>
    
    <comments>https://blog.etc.gen.nz/archives/119-World-IPv6-Day.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=119</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=119</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    In the vein of &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/worldipv6day.org&#039;]);&quot;  href=&quot;http://worldipv6day.org&quot;&gt;World IPv6 Day&lt;/a&gt;, I&#039;ve finally re-enabled IPv6 for the etc.gen.nz mailserver and for our &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.etc.gen.nz&#039;]);&quot;  href=&quot;http://www.etc.gen.nz&quot;&gt;main website&lt;/a&gt; (and my &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/git.etc.gen.nz&#039;]);&quot;  href=&quot;http://git.etc.gen.nz&quot;&gt;git repo&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
These services used to have IPv6 enabled, but when I moved them from my home server to one hosted in a data centre we lost IPv6 support.  However in the last few months, our hosting company has deployed IPv6 support to their hosting facility, and I finally found time to finish setting it up on the server.&lt;br /&gt;
&lt;br /&gt;
So, we&#039;re back on IPv6, just in time for World IPv6 Day! 
    </content:encoded>

    <pubDate>Tue, 07 Jun 2011 21:30:58 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/119-guid.html</guid>
    <category>catalyst</category>
<category>family</category>
<category>geek</category>
<category>ipv6</category>

</item>
<item>
    <title>LCA2011 - We're going!</title>
    <link>https://blog.etc.gen.nz/archives/116-LCA2011-Were-going!.html</link>
            <category>family</category>
    
    <comments>https://blog.etc.gen.nz/archives/116-LCA2011-Were-going!.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=116</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=116</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    &lt;ul&gt;
 &lt;li&gt;Booked flights: check&lt;/li&gt;
 &lt;li&gt;Booked accommodation: check&lt;/li&gt;
 &lt;li&gt;Andrew Registered for LCA: check&lt;/li&gt;
 &lt;li&gt;Andrew Hacked Silly Description: check&lt;/li&gt;
 &lt;li&gt;Susanne Registered for LCA: in progress&lt;/li&gt;
 &lt;li&gt;Andrew Hacked Silly Description for Susanne: pending&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Awesome.  I&#039;ve just registered for &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lca2011.linux.org.au/&#039;]);&quot;  href=&quot;http://lca2011.linux.org.au/&quot;&gt;lca2011&lt;/a&gt;, it looks to be an awesome conference!  They have a great line up of speakers, some amazing venues (I know, I&#039;ve seen some of them already), and a fantastic group of people in one place.&lt;/p&gt;

&lt;p&gt;The reason that I&#039;ve already seen some of the venues is that Susanne and I attended the ghosts weekend that the &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lca2011.linux.org.au/about/lca2011_ninjas&#039;]);&quot;  href=&quot;http://lca2011.linux.org.au/about/lca2011_ninjas&quot;&gt;lca2011 Ninjas&lt;/a&gt; held earlier in the year.  During the ghosts weekend the current organising team bring a number of previous organisers, some people from Linux Australia and their team into one place, lock them in a room and absorb as much information as they possibly can.  They bombard us with questions, they tease out tidbits of knowledge and in exchange for that they let us into a few of their secrets and show us around.  Admittedly they show us around and then interrogate us on what we think of them.&lt;/p&gt;

&lt;p&gt;That was my first time in Brisbane, and an overnight stay is no where near long enough.  I&#039;m looking forward to spending a week in Brisbane, and hopefully getting a chance to take in a bit more of the city.  As much of a chance as you get when attending a conference that is though...&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 08 Dec 2010 09:20:44 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/116-guid.html</guid>
    <category>catalyst</category>
<category>family</category>
<category>geek</category>
<category>lca2011</category>
<category>linux.conf.au</category>

</item>
<item>
    <title>Geek Parents</title>
    <link>https://blog.etc.gen.nz/archives/108-Geek-Parents.html</link>
            <category>family</category>
    
    <comments>https://blog.etc.gen.nz/archives/108-Geek-Parents.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=108</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>https://blog.etc.gen.nz/rss.php?version=2.0&amp;type=comments&amp;cid=108</wfw:commentRss>
    

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    &lt;p&gt;There have been many things about becoming parents that have surprised us.  There are also been things from organising &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lca2010.org.nz&#039;]);&quot;  href=&quot;http://lca2010.org.nz&quot;&gt;LCA2010&lt;/a&gt; that have surprised us.  One of the more surprising things that is that Susanne has become more of a geek.&lt;/p&gt;

&lt;p&gt;Not terribly surprising really, that after co-directing one of the ultimate geek conferences that you&#039;d pick up a few things.  Not only is Susanne now an expert Inkscape user, she is now at home hacking HTML, writing using LaTeX, posting on Twitter &amp;amp; identi.ca, using request tracking systems and last but not least IRC.  IRC was vital to organising LCA, but Susanne and I have continued to use IRC now that LCA is over to chat while I&#039;m at work, and as it turns out around the house.  For example:&lt;/p&gt;

&lt;pre&gt;
&amp;lt;MadHatter&amp;gt; 16:10:54&amp;gt; Please pick up your son
&amp;lt;MadHatter&amp;gt; 16:11:05&amp;gt; now please
&amp;lt;MadHatter&amp;gt; 16:11:10&amp;gt; NOW please
&amp;lt;MadHatter&amp;gt; 16:11:12&amp;gt; NOW
&amp;lt;MadHatter&amp;gt; 16:11:18&amp;gt; NOW NOW NOW NOW NOW
&amp;lt;MadHatter&amp;gt; 16:11:28&amp;gt; I&#039;m on strike
&amp;lt;MadHatter&amp;gt; 16:11:41&amp;gt; Andrew
&amp;lt;MadHatter&amp;gt; 16:11:56&amp;gt; Andrew Graeme Ruthven!
&amp;lt;MadHatter&amp;gt; 16:12:10&amp;gt; Pick. Up. Your. Son
&amp;lt;MadHatter&amp;gt; 16:12:13&amp;gt; Please
&amp;lt;MadHatter&amp;gt; 16:12:19&amp;gt; Please!
&lt;/pre&gt;

&lt;p&gt;The funniest part was that, even though I was using my laptop, my IRC client wasn&#039;t running.  My IRC proxy was happily logging those requests, so when Susanne was cracking up with laughter (thinking I was ignoring her) I was able to catch up on what was happening...&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 29 May 2010 10:40:25 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/108-guid.html</guid>
    <category>adam</category>
<category>baby</category>
<category>family</category>
<category>geek</category>

</item>

</channel>
</rss>
