<?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 debian)</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, 19 Apr 2020 21:47:27 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>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>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>LCA2015 - Debian Miniconf &amp; nz2015 Debian mini-DebConf</title>
    <link>https://blog.etc.gen.nz/archives/127-LCA2015-Debian-Miniconf-nz2015-Debian-mini-DebConf.html</link>
            <category>catalyst</category>
            <category>family</category>
    
    <comments>https://blog.etc.gen.nz/archives/127-LCA2015-Debian-Miniconf-nz2015-Debian-mini-DebConf.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=127</wfw:comment>

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

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    &lt;strong&gt;nz2015 mini-DebConf&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Already attending &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&lt;/a&gt;? Come a couple of days earlier and attend the mini-DebConf too! There will be a day of talks with a strong focus on the Debian project and a bug squashing day.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Debian Miniconf&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
After 5 years, the Debian Miniconf is back! Run as part of linux.conf.au 2015, this event will attract speakers talking on topics that suit the broader audience attending LCA. The Debian Miniconf has been one of the largest miniconfs in the history of linux.conf.au.&lt;br /&gt;
&lt;br /&gt;
For more information about both these events which I&#039;m organising, head over to: &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/nz2015.mini.debconf.org&#039;]);&quot;  href=&quot;http://nz2015.mini.debconf.org&quot;&gt;nz2015.mini.debconf.org&lt;/a&gt;! 
    </content:encoded>

    <pubDate>Tue, 02 Dec 2014 00:08:13 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/127-guid.html</guid>
    <category>catalyst</category>
<category>debian</category>
<category>family</category>
<category>lca2015</category>
<category>linux.conf.au</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>Debian Maintainer</title>
    <link>https://blog.etc.gen.nz/archives/82-Debian-Maintainer.html</link>
            <category>catalyst</category>
    
    <comments>https://blog.etc.gen.nz/archives/82-Debian-Maintainer.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=82</wfw:comment>

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

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    Well, as of debian-maintainers version 1.39 (uploaded on 2008-07-08) I&#039;m now a Debian Maintainer.&lt;br /&gt;
&lt;br /&gt;
w00t!&lt;br /&gt;
&lt;br /&gt;
Francois will upload a new version of &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.etc.gen.nz/projects/mythtv/mythtv-status.html&#039;]);&quot;  href=&quot;http://www.etc.gen.nz/projects/mythtv/mythtv-status.html&quot;&gt;MythTV Status&lt;/a&gt; soonish which amongst other things adds the magic fu required to allow me to upload it directly.  Oh, and I&#039;ve changed MythTV Status to be GPLv3.&lt;br /&gt;
&lt;br /&gt;
More w00t! 
    </content:encoded>

    <pubDate>Tue, 22 Jul 2008 00:49:07 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/82-guid.html</guid>
    <category>catalyst</category>
<category>debian</category>
<category>geek</category>
<category>mythtv</category>
<category>mythtv-status</category>

</item>
<item>
    <title>(almost) Whole House Audio</title>
    <link>https://blog.etc.gen.nz/archives/62-almost-Whole-House-Audio.html</link>
            <category>catalyst</category>
            <category>house</category>
    
    <comments>https://blog.etc.gen.nz/archives/62-almost-Whole-House-Audio.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=62</wfw:comment>

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

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    In our house we have a server that does a number of tasks, one of which is playing a jukebox (using &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.musicpd.org/&#039;]);&quot;  href=&quot;http://www.musicpd.org/&quot;&gt;MusicPD&lt;/a&gt;) it is hooked up to an amp that has speakers in our study and in our family room.  This rocks, turn on the amp, have continuous music that we want to listen to and no chatter.&lt;br /&gt;
&lt;br /&gt;
Unfortunately this doesn&#039;t extend to the lounge.  Which means that if you sit in the lounge you can only just hear the music (unless you turn it up too loud).  I&#039;ve thought off and on (mostly off) about extending the jukebox to the lounge, the other week Susanne asked about having this, which meant it was finally time for me to really look into possible solutions.&lt;br /&gt;
&lt;br /&gt;
Warning, geeky bits follow...&lt;br /&gt;
&lt;br /&gt;
Since we used to use Icecast2 to stream the jukebox to Susanne&#039;s computer in our old flat I tried that first.   We have a PC in the lounge that is a &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.mythtv.org&#039;]);&quot;  href=&quot;http://www.mythtv.org&quot;&gt;MythTV&lt;/a&gt; frontend that we could play the stream on, so that aspect is covered.  Unfortunately the 5 second lag which was acceptable when Susanne&#039;s computer was a long way away from the main jukebox in our old flat was too annoying when the speakers were only a room apart (yes, I could have reduced the buffers, but it would never have been quite right).  &lt;br /&gt;
&lt;br /&gt;
So fall back to plan B, stick another soundcard in the jukebox computer and run line level audio to the amp in the lounge.  We managed to dig up an old soundcard in the good junk pile (every geek should have a good junk pile), stuck it in the computer and then proceeded to try and configure ALSA to drive it.  The plan was to duplicate the same audio stream out to both soundcards.  After a bit of researching and a bit of tinkering with &lt;tt&gt;asound.conf&lt;/tt&gt; and it not working  I decided not to waste any more time on that path.&lt;br /&gt;
&lt;br /&gt;
I vaguely recalled that &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.pulseaudio.org&#039;]);&quot;  href=&quot;http://www.pulseaudio.org&quot;&gt;PulseAudio&lt;/a&gt; was incredibly flexible and allowed all sorts of things.  A quick &lt;tt&gt;apt-get install pulseaudio pulseaudio-module-hal&lt;/tt&gt; and bit of reading, and I found that adding the following line to &lt;tt&gt;/etc/pulse/default.pa&lt;/tt&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;tt&gt;load-module module-combine master=&amp;lt;sound card 1&amp;gt; slaves=&amp;lt;sound card 2&amp;gt; set-default-sink combined&lt;/tt&gt;&lt;br /&gt;
&lt;br /&gt;
Would create a new virtual soundcard output (PulseAudio refers to this as a sink) called &quot;combined&quot; that would replicate the audio to both soundcards.  Awesome.  (The master and slaves settings were determed by using &lt;tt&gt;paman&lt;/tt&gt; to inspect the PulseAudio devices.)&lt;br /&gt;
&lt;br /&gt;
Then after recompiling MusicPD (to add PulseAudio support, the version in Debian unstable already has it, but stable doesn&#039;t), telling it to use that sink and voila, both soundcards are playing the jukebox.&lt;br /&gt;
&lt;br /&gt;
To actually get the line level audio to the lounge I&#039;ve used  some Cat5 we already have running there (with suitable audio flyleads) and we have the jukebox playing in the lounge, in sync with the family room.  The sound quality is pretty good, so I won&#039;t worry about balanced audio or anything else fancy like that.  Gotta love structured cabling.&lt;br /&gt;
&lt;br /&gt;
Another benefit of PulseAudio is we will be able to configure our Linux workstations to use the jukebox soundcards as audio sinks as well, which will mean no more tinny little monitor speakers.  w00t!&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt; Say which file to add the load-module line to, and fix a typo. 
    </content:encoded>

    <pubDate>Sun, 08 Jul 2007 21:25:07 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/62-guid.html</guid>
    <category>audio</category>
<category>catalyst</category>
<category>debian</category>
<category>geek</category>
<category>house</category>

</item>
<item>
    <title>Debian Etch released!</title>
    <link>https://blog.etc.gen.nz/archives/45-Debian-Etch-released!.html</link>
            <category>catalyst</category>
    
    <comments>https://blog.etc.gen.nz/archives/45-Debian-Etch-released!.html#comments</comments>
    <wfw:comment>https://blog.etc.gen.nz/wfwcomment.php?cid=45</wfw:comment>

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

    <author>andrew@etc.gen.nz (Andrew Ruthven)</author>
    <content:encoded>
    w00t!&lt;br /&gt;
&lt;br /&gt;
&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; Etch is &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/lists.debian.org/debian-announce/debian-announce-2007/msg00002.html&#039;]);&quot;  href=&quot;http://lists.debian.org/debian-announce/debian-announce-2007/msg00002.html&quot;&gt;released&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
Now it is time to perform the ritual upgrade dance on a bunch of machines that weren&#039;t already running Etch while it was the testing distribution.  And also I&#039;ll need to decide if the boxes that were already running it should move to lenny (which will is the name for the next stable release).  I think I&#039;ll defer that decision a few months though... 
    </content:encoded>

    <pubDate>Mon, 09 Apr 2007 05:39:52 +0000</pubDate>
    <guid isPermaLink="false">https://blog.etc.gen.nz/archives/45-guid.html</guid>
    <category>debian</category>
<category>geek</category>
<category>oss</category>

</item>

</channel>
</rss>
