<?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>Code V.igoro.us - Sysadmin</title>
    <link>http://code.v.igoro.us/</link>
    <description>Dustin J. Mitchell</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.6 - http://www.s9y.org/</generator>
    <pubDate>Fri, 18 Nov 2011 18:53:15 GMT</pubDate>

    <image>
        <url>http://code.v.igoro.us/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Code V.igoro.us - Sysadmin - Dustin J. Mitchell</title>
        <link>http://code.v.igoro.us/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>IT and Community</title>
    <link>http://code.v.igoro.us/archives/70-IT-and-Community.html</link>
            <category>mozilla</category>
            <category>Sysadmin</category>
    
    <comments>http://code.v.igoro.us/archives/70-IT-and-Community.html#comments</comments>
    <wfw:comment>http://code.v.igoro.us/wfwcomment.php?cid=70</wfw:comment>

    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://code.v.igoro.us/rss.php?version=2.0&amp;type=comments&amp;cid=70</wfw:commentRss>
    

    <author>nospam@example.com (Dustin J. Mitchell)</author>
    <content:encoded>
    &lt;p&gt;Mozilla&#039;s IT team is pivoting to a more community-focused approach.  Our director of IT, mrz, has been &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/blog.mozilla.com/mrz/2011/10/06/my-job-after-5-558-years/&#039;]);&quot;  href=&quot;http://blog.mozilla.com/mrz/2011/10/06/my-job-after-5-558-years/&quot;&gt;writing&lt;/a&gt; &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/blog.mozilla.com/mrz/2011/10/12/step-1-community-it/&#039;]);&quot;  href=&quot;http://blog.mozilla.com/mrz/2011/10/12/step-1-community-it/&quot;&gt;extensively&lt;/a&gt; &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/blog.mozilla.com/mrz/2011/10/28/step-1-01-mozilla-it-mozcamp/&#039;]);&quot;  href=&quot;http://blog.mozilla.com/mrz/2011/10/28/step-1-01-mozilla-it-mozcamp/&quot;&gt;about&lt;/a&gt; &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/htmlpad.org/community-IT-slides/#&#039;]);&quot;  href=&quot;http://htmlpad.org/community-IT-slides/#&quot;&gt;it&lt;/a&gt; over the last few weeks.&lt;/p&gt;

&lt;p&gt;As you can imagine, the difficult part of this is to balance security with accessibility.  We&#039;d like to be open, but we can&#039;t give the keys to the kingdom out to anyone who promises to help.  The approach we&#039;re taking is to treat volunteers as we would part-time employees - post positions, interview, and then supervise to gain trust.  This is a fairly common model, actually, for any organization with volunteers and a need for security.  Youth programs, for example, generally do an interview and background check with new volunteers, and those volunteers will be paired with senior volunteers or staff for a while.&lt;/p&gt;

&lt;p&gt;However, it&#039;s a bit cumbersome, both for Mozilla and for potential volunteers.  We must design entire positions - ongoing tasks or roles that a volunteer can work on for an extended period of time - and then select a limited number of volunteers to fill those roles.  For potential volunteers, an application and interview can mean a long time (weeks?) before they get to do anything hands-on.  It also carries the risk that we&#039;d have to turn a qualified volunteer away due to lack of suitable positions.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;So what to do?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;We need a more fluid way of interacting with potential contributors.  Since our bug database is public, we can begin by simply tagging a few bugs that are appropriate for newcomers -- things that don&#039;t require sensitive access and are well-encapsulated so they can be completed without extensive knowledge of Mozilla&#039;s infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/bit.ly/tTsnix&#039;]);&quot;  href=&quot;http://bit.ly/tTsnix&quot;&gt;Here&#039;s the list.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It&#039;s a bit short right now.  There are a few things that may help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We can get better about identifying appropriate tasks and projects and making bugs out of them.
&lt;li&gt;We can identify a means of giving limited or sandboxed access to a new volunteer.
&lt;li&gt;Consumers of Mozilla&#039;s IT resources can begin tagging bugs, where Mozilla can provide the resources and volunteers can do the heavy lifting - got any ideas?
&lt;/ul&gt; 
 
    </content:encoded>

    <pubDate>Wed, 16 Nov 2011 23:05:24 -0600</pubDate>
    <guid isPermaLink="false">http://code.v.igoro.us/archives/70-guid.html</guid>
    
</item>
<item>
    <title>Subscribe to a google group with a different address?</title>
    <link>http://code.v.igoro.us/archives/67-Subscribe-to-a-google-group-with-a-different-address.html</link>
            <category>Sysadmin</category>
    
    <comments>http://code.v.igoro.us/archives/67-Subscribe-to-a-google-group-with-a-different-address.html#comments</comments>
    <wfw:comment>http://code.v.igoro.us/wfwcomment.php?cid=67</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://code.v.igoro.us/rss.php?version=2.0&amp;type=comments&amp;cid=67</wfw:commentRss>
    

    <author>nospam@example.com (Dustin J. Mitchell)</author>
    <content:encoded>
    &lt;p&gt;Google Groups is one place where, IMHO, Google pushes its hegemony too far, making it difficult to use.  I wanted to subscribe to puppet-users with my Mozilla address, but since I have a Google account, Groups assumes I want to subscribe with that address.  No!&lt;/p&gt;

&lt;p&gt;I found the fix with a bit of Googling (some irony there).  It involves editing a URL:&lt;/p&gt;

&lt;blockquote&gt;http://groups.google.com/group/puppet-users/boxsubscribe?email=email@domain.com&lt;/blockquote&gt;

&lt;p&gt;where you&#039;d substitute the name of the group you want for &lt;i&gt;puppet-users&lt;/i&gt; and add your email at the end. &lt;/p&gt;
 
    </content:encoded>

    <pubDate>Fri, 02 Sep 2011 15:04:00 -0500</pubDate>
    <guid isPermaLink="false">http://code.v.igoro.us/archives/67-guid.html</guid>
    
</item>
<item>
    <title>Nagios NSCA from Python</title>
    <link>http://code.v.igoro.us/archives/69-Nagios-NSCA-from-Python.html</link>
            <category>Code</category>
            <category>mozilla</category>
            <category>Sysadmin</category>
    
    <comments>http://code.v.igoro.us/archives/69-Nagios-NSCA-from-Python.html#comments</comments>
    <wfw:comment>http://code.v.igoro.us/wfwcomment.php?cid=69</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://code.v.igoro.us/rss.php?version=2.0&amp;type=comments&amp;cid=69</wfw:commentRss>
    

    <author>nospam@example.com (Dustin J. Mitchell)</author>
    <content:encoded>
    &lt;p&gt;I&#039;ve been working on improving the monitoring of the build slaves at Mozilla.  As part of this project, I needed to be able to submit passive check results to the Nagios servers via &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/community.nagios.org/2009/06/11/nagios-setting-up-the-nsca-addon-for-passive-checks/&#039;]);&quot;  href=&quot;http://community.nagios.org/2009/06/11/nagios-setting-up-the-nsca-addon-for-passive-checks/&quot;&gt;NSCA&lt;/a&gt; during system startup.  I&#039;m doing this from a Python script that needs to run on a wide array of systems using whatever random Python is available.  We run some oddball stuff, so the common denominator is Python 2.4.&lt;/p&gt;

&lt;p&gt;It turns out that there&#039;s no Python NSCA library, although there is &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/search.cpan.org/dist/Net-Nsca/lib/Net/Nsca.pm&#039;]);&quot;  href=&quot;http://search.cpan.org/dist/Net-Nsca/lib/Net/Nsca.pm&quot;&gt;Net::Nsca&lt;/a&gt; in Perl.  So, I wrote one, and put it on github: &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/github.com/djmitche/pynsca&#039;]);&quot;  href=&quot;https://github.com/djmitche/pynsca&quot;&gt;https://github.com/djmitche/pynsca&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At the moment, this only knows XOR, and only does service checks.  That&#039;s all I need, but hopefully it can be easily expanded to cover other purposes.  The one thing I want to avoid is adding mandatory requirements -- this should work, at least in plain-text and XOR modes, on a plain-vanilla Python installation.&lt;/p&gt;

&lt;p&gt;By the way, the startup script I&#039;m working on is &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/hg.mozilla.org/build/puppet-manifests/file/tip/modules/buildslave/files/runslave.py&#039;]);&quot;  href=&quot;http://hg.mozilla.org/build/puppet-manifests/file/tip/modules/buildslave/files/runslave.py&quot;&gt;runslave.py&lt;/a&gt;, which includes a modified copy of &lt;i&gt;pynsca&lt;/i&gt; and does a number of other housekeeping jobs as well.  More on that in a subsequent post. &lt;/p&gt;
 
    </content:encoded>

    <pubDate>Fri, 20 May 2011 16:55:11 -0500</pubDate>
    <guid isPermaLink="false">http://code.v.igoro.us/archives/69-guid.html</guid>
    
</item>
<item>
    <title>IPv6 and Amanda</title>
    <link>http://code.v.igoro.us/archives/61-IPv6-and-Amanda.html</link>
            <category>amanda</category>
            <category>Sysadmin</category>
    
    <comments>http://code.v.igoro.us/archives/61-IPv6-and-Amanda.html#comments</comments>
    <wfw:comment>http://code.v.igoro.us/wfwcomment.php?cid=61</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://code.v.igoro.us/rss.php?version=2.0&amp;type=comments&amp;cid=61</wfw:commentRss>
    

    <author>nospam@example.com (Dustin J. Mitchell)</author>
    <content:encoded>
    &lt;p&gt;Amanda joined the IPv6 revolution in November 2006 - all of the BSD-style authentication mechanisms can support IPv6 endpoints.  However, it&#039;s generally agreed that this was a mistake, and in this post I will talk about why that&#039;s the case. First, a bit of background on how Amanda&#039;s networking code works, and what had to change to support IPv6.  Amanda supports security mechanisms called BSD (the oldest), BSDUDP, and BSDTCP.  These all authenticate (if you can call it that) using the same sorts of checks that rsh uses.  The incoming connection is accepted if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it is from a &quot;reserved&quot; port (less than 1024);&lt;/ii&gt;
&lt;li&gt;the address of the initiator has complementary forward and reverse DNS records in place; and&lt;/li&gt;
&lt;li&gt;the initiator&#039;s hostname is in &lt;tt&gt;.amandahosts&lt;/tt&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During a backup operation, the Amanda server contacts each client host.  When using the BSD authentications, this triggers &lt;tt&gt;amandad&lt;/tt&gt;, which checks the above restrictions before beginning communication with the server.  This initial connection is packet-based, and can be carried out over UDP (for BSD and BSDUDP) or TCP (BSDTCP).  When a dump begins, several &quot;streams&quot; are opened to transmit the data, index, and metadata.  For BSD and BSDUDP, each stream is implemented as a distinct TCP connection, where the client sends a port number to the server and the server connects to that port.  BSDTCP multiplexes all streams over a single TCP connection using a basic type/length packet encapsulation.&lt;/p&gt;

&lt;p&gt;The first challenge in adding IPv6 support was to deal properly with IPv6 addresses when querying the DNS.  That meant switching to getaddrinfo and getnameinfo, as suggested by &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.kame.net/newsletter/19980604/&#039;]);&quot;  href=&quot;http://www.kame.net/newsletter/19980604/&quot;&gt;Jun-ichiro itojun Itoh&lt;/a&gt;. These functions bring their own compatibility problems, but Amanda uses &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.gnu.org/software/gnulib/&#039;]);&quot;  href=&quot;http://www.gnu.org/software/gnulib/&quot;&gt;gnulib&lt;/a&gt;, which provides compatibile implementations on systems where they are not available, minimizing the difficulty.&lt;/p&gt;

&lt;p&gt;We had a lot of trouble from systems such as RHEL3 possessing IPv6 support in the compiler environment but not in the kernel.  On such systems, code using constants like AF_INET6 or AI_V4MAPPED would compile without problems, but fail at runtime.  We added a WORKING_IPV6 preprocessor conditional, without which all references to IPv6-related symbols were removed.  At configure time, Amanda tries to create an IPv6 socket, and sets this conditional to true if it succeeds.  The &lt;tt&gt;--without-ipv6&lt;/tt&gt; configure option forcibly disables IPv6 support.&lt;/p&gt;

&lt;p&gt;The sockaddr structures and API for IPv6 are fairly difficult to use, particularly if it&#039;s not known in advance what sort of address they will contain.  We added a set of macros and utility functions in &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/github.com/zmanda/amanda/blob/master/common-src/sockaddr-util.c&#039;]);&quot;  href=&quot;http://github.com/zmanda/amanda/blob/master/common-src/sockaddr-util.c&quot;&gt;sockaddr-util.c&lt;/a&gt; and &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/github.com/zmanda/amanda/blob/master/common-src/sockaddr-util.h&#039;]);&quot;  href=&quot;http://github.com/zmanda/amanda/blob/master/common-src/sockaddr-util.h&quot;&gt;sockaddr-util.h&lt;/a&gt;.  Using these macros throughout Amanda removed a significant amount of code that was conditionalized on both compile-time support and runtime address family, and centralized that logic in one easily-maintained place.&lt;/p&gt;

&lt;p&gt;On our build systems, we had to deal with different levels of support in the compile environment and the kernel.  This is fine: most Amanda users install binary packages that are produced on roughly the same OS distribution and version as was used for the build, so the kernel support is generally the same.  However, a third variable has tripped up lots of Amanda users: system configuration.  In particular, several newer Linux distributions have shipped with &lt;tt&gt;localhost&lt;/tt&gt; resolving to ::1 vi &lt;tt&gt;/etc/hosts&lt;/tt&gt;, but without enough interface configuration to actually utilize a socket bound to that address.  Amanda uses localhost sockets for inter-process communication, so this misconfiguration causes backup operations to fail.  The solution is to either finish configuring IPv6 on the host, remove the reference to ::1 in &lt;tt&gt;/etc/hosts&lt;/tt&gt;, or build Amanda with &lt;tt&gt;--without-ipv6&lt;/tt&gt;.&lt;/p&gt;

&lt;p&gt;I have not yet heard of an Amanda installation where IPv6 communication is in use.  But I have heard from countless IPv4 users whose Amanda installations have failed due to bad IPv6 support.  At the moment, then, I feel that adding IPv6 support to Amanda has been a net negative for the project.  Although there is doubtless room for improvement, I will not entertain patches for better IPv6 support, for fear they will introduce new bugs for our exclusively IPv4 userbase.&lt;/p&gt;

&lt;p&gt;Of course, all of this may change as dual-stack networks grow more prevalent and are replaced by pure IPv6 networks!&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Fri, 16 Jul 2010 22:04:00 -0500</pubDate>
    <guid isPermaLink="false">http://code.v.igoro.us/archives/61-guid.html</guid>
    
</item>
<item>
    <title>SSH With Snow Leopard</title>
    <link>http://code.v.igoro.us/archives/60-SSH-With-Snow-Leopard.html</link>
            <category>Sysadmin</category>
    
    <comments>http://code.v.igoro.us/archives/60-SSH-With-Snow-Leopard.html#comments</comments>
    <wfw:comment>http://code.v.igoro.us/wfwcomment.php?cid=60</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://code.v.igoro.us/rss.php?version=2.0&amp;type=comments&amp;cid=60</wfw:commentRss>
    

    <author>nospam@example.com (Dustin J. Mitchell)</author>
    <content:encoded>
    &lt;p&gt;I just upgraded my Macbook to Snow Leopard, and the upgrade has changed the way SSH authentication works.  I have set up a system I like quite a bit, now, and thought I would share. My usage pattern is that I do most of my work via &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.gnu.org/software/screen/&#039;]);&quot;  href=&quot;http://www.gnu.org/software/screen/&quot;&gt;GNU screen&lt;/a&gt; running on my login server, &lt;tt&gt;euclid&lt;/tt&gt;.  So I want a simple procedure that will connect me to that screen session, with a proper SSH agent set up.&lt;/p&gt;

&lt;p&gt;Snow Leopard automatically starts an &lt;tt&gt;ssh-agent&lt;/tt&gt; process at login.  This is great, but does not interoperate with &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/sshkeychain.sourceforge.net/&#039;]);&quot;  href=&quot;http://sshkeychain.sourceforge.net/&quot;&gt;SSHKeychain&lt;/a&gt;.  Dropping SSHKeychain is OK with me - I don&#039;t use SSH tunnels, so it really only acted as a GUI for passphrase entry.  It also ate CPU occasionally, which of course causes the macbook to become more painfully hot than usual.&lt;/p&gt;

&lt;p&gt;So I have three problems to solve: 1. automatically add my key to ssh-agent; 2. automatically expire the key at appropriate times (at my paranoia level, that&#039;s at system sleep); and 3. make multiple agent instances usable from the same shell session on the server.&lt;/p&gt;

&lt;h1&gt;Adding the Key at Connection Time&lt;/h1&gt;

&lt;p&gt;Adding the key is relatively straightforward.  I wrote a short script that Terminal runs when I hit ⌘-N or ⌘-T:&lt;/p&gt;

&lt;pre&gt;
#! /bin/bash

# does ssh-agent not have a key?
if ! ssh-add -l; then
    ssh-add ~/.ssh/dustin || exit 1
fi

exec ssh -x -t euclid.r.igoro.us bin/startscreen
&lt;/pre&gt;

&lt;p&gt;This will prompt me for the passphrase when there is not already a key active, but proceed directly to the ssh invocation if the key situation is OK.  The &lt;tt&gt;-x&lt;/tt&gt; option to &lt;tt&gt;ssh&lt;/tt&gt; is there to turn off X11 forwarding; without this option, SSH will helpfully start the X11 app.  I think this is a great feature, but I don&#039;t use X11 apps very often, so I&#039;ve disabled it.&lt;/p&gt;

&lt;h1&gt;Expiring the Key Automatically&lt;/h1&gt;

&lt;p&gt;Mac OS has a nicely designed system in place to allow applications to get notified when the system is changing power states.  However, I wasn&#039;t interested in writing a full OS X app for this particular project.  Enter &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.bernhard-baehr.de/&#039;]);&quot;  href=&quot;http://www.bernhard-baehr.de/&quot;&gt;sleepwatcher&lt;/a&gt;.  This is a beautifully simple program that just executes scripts on particular power events.  I set this up to run via launchd, as directed in the README, and to run &lt;tt&gt;~/.ssh/sleep&lt;/tt&gt; on sleep.  That script contains:&lt;/p&gt;

&lt;pre&gt;
#! /bin/bash

# first, don&#039;t inherit a socket (sleepwatcher doesn&#039;t get the user&#039;s env)
SSH_AUTH_SOCK=

# find some sockets
echo &quot;.ssh/sleep:&quot; `id`
for sock in /tmp/launch-*/Listeners; do
    if [ -w $sock ]; then
        echo &quot;Trying to remove .ssh/dustin from socket $sock&quot;
        SSH_AUTH_SOCK=$sock /opt/local/bin/ssh-add -d ~/.ssh/dustin
    else
        echo &quot;Skipping unwritable socket $sock&quot;
    fi  
done
&lt;/pre&gt;

&lt;p&gt;The for loop is required because a script run from sleepwatcher doesn&#039;t inherit the &lt;tt&gt;SSH_AUTH_SOCK&lt;/tt&gt; variable that points to the running SSH agent.  The loop simply searches for a writable SSH socket of the pattern used by the system&#039;s agent.&lt;/p&gt;

&lt;h1&gt;SSH Agent and Screen&lt;/h1&gt;

&lt;p&gt;If you naïvely set up an SSH agent, connect to a remote system, and start screen there, things will work great - until you disconnect from the screen session.  When you connect to the remote system, SSH forwards the agent connection for you, and sets &lt;tt&gt;SSH_AUTH_SOCK&lt;/tt&gt; on the remote system to point to this forwarded socket.  Screen passes this variable along blindly, so it appears in all of the shells opened in screen windows, and things work as you&#039;d expect.  When that SSH connection is removed, and a new one established, the forwarded agent appears at a new socket.  But those shells running in screen windows are still pointing to the old name, and will no longer be able to connect.&lt;/p&gt;

&lt;p&gt;The fix is to create a socket with a well-known name that will not change from connection to connection.  The following script takes care of it.  WARNING: this script is vulnerable to /tmp race conditions.  I am the only user on my servers, so this doesn&#039;t bother me, but fixing it should be relatively straightforward.&lt;/p&gt;

&lt;pre&gt;
#! /bin/bash
# hard-link the SSH socket to one with a fixed name on the local
# machine, and set SSH_AUTH_SOCK to point to that fixed name.  Later
# invocations of this script will change the link, but the name will
# remain valid, allowing existing shells to continue to function.
setup_fixed_socket() {
  local old_socket=&quot;$SSH_AUTH_SOCK&quot;
  local socket_dir=&quot;/tmp/$(uname -n)-$(id -u)&quot;
  local socket_file=$socket_dir/agent

  # set up the directory and permissions
  [ -e $socket_dir ] || mkdir -p $socket_dir
  chmod 700 $socket_dir

  # remove an existing link
  [ -e $socket_file ] &amp;&amp;amp; rm $socket_file

  # hard-link in the new one
  ln $old_socket $socket_file

  # return the new socket
  echo $socket_file
}

# this variable will be exported to every shell opened by this
# invocation of screen -- even subsequent connections to it.  This
# variable may live for days or weeks.
export SSH_AUTH_SOCK=$(setup_fixed_socket)

# finally, fire up screen.  Try reattaching to a running
# session; otherwise start up a new one
screen -R -DD ${@} || screen
&lt;/pre&gt;
 
    </content:encoded>

    <pubDate>Sat, 10 Jul 2010 14:27:00 -0500</pubDate>
    <guid isPermaLink="false">http://code.v.igoro.us/archives/60-guid.html</guid>
    
</item>
<item>
    <title>IPv6 Configuration</title>
    <link>http://code.v.igoro.us/archives/57-IPv6-Configuration.html</link>
            <category>Sysadmin</category>
    
    <comments>http://code.v.igoro.us/archives/57-IPv6-Configuration.html#comments</comments>
    <wfw:comment>http://code.v.igoro.us/wfwcomment.php?cid=57</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://code.v.igoro.us/rss.php?version=2.0&amp;type=comments&amp;cid=57</wfw:commentRss>
    

    <author>nospam@example.com (Dustin J. Mitchell)</author>
    <content:encoded>
    &lt;p&gt;&lt;div style=&quot;float:right&quot;&gt;&lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/ipv6.he.net/certification/scoresheet.php?pass_name=djmitche&#039;]);&quot;  href=&quot;http://ipv6.he.net/certification/scoresheet.php?pass_name=djmitche&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ipv6.he.net/certification/create_badge.php?pass_name=djmitche&amp;amp;badge=3&quot; width=229 height=137 border=0 alt=&quot;IPv6 Certification Badge for djmitche&quot;&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;I&#039;ve been meaning to get IPv6 set up on my local network for some time.  My only practical reason is that &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/amanda.org&#039;]);&quot;  href=&quot;http://amanda.org&quot;&gt;Amanda&lt;/a&gt; supports IPv6 and I should test that support.  It was also a good chance to re-immerse myself in network configuration, and Hurricane Electric has a neat &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/ipv6.he.net/certification&#039;]);&quot;  href=&quot;http://ipv6.he.net/certification&quot;&gt;certification process&lt;/a&gt; to add some motivation. I began by getting local IPv6 connectivity set up over the HE tunnel, using my Gentoo systems.  This was fairly straightforward, as the Gentoo net scripts natively support IPv6.  The firewall system I use (&lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.shorewall.net/&#039;]);&quot;  href=&quot;http://www.shorewall.net/&quot;&gt;Shorewall&lt;/a&gt;) does not support IPv6 directly.  Instead, there&#039;s a parallel &lt;tt&gt;shorewall6&lt;/tt&gt; package to install.  Aside from the annoyance of setting up two separate firewalls, this did not cause appreciable difficulties.  With all of this in place, I was at the &quot;Explorer&quot; level.&lt;/p&gt;

&lt;p&gt;The next task was to set up a working IPv6 desktop.  My home network uses 802.1q VLAN tagging to layer both an external, publicly routable IPv4 network (99.89.149.16/29 on VLAN 20) and an internal, NAT&#039;d IPv4 network (172.16.1/24 on VLAN 10).  I wanted to make VLAN 10 a dual-stack network, rather than invent a new VLAN for my IPv6 network.  Initially, I didn&#039;t realize that HE uses, in my case, 2001:470:1f10:826::0/64 just for the tunnel (yes, two addresses out of 2&lt;sup&gt;64&lt;/sup&gt; used -- maybe we&#039;ll need IPv8 sooner than we think!).  I assumed that the /64 I was allocated was to be used for all of my nodes, and tried to subnet it locally, using 2001:470:1f10:826::0/112 for the tunnel and 2001:470:1f10::1/112 for the internal network.  This worked with manual configuration, but &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.litech.org/radvd/&#039;]);&quot;  href=&quot;http://www.litech.org/radvd/&quot;&gt;radvd&lt;/a&gt; seemed to always want to advertise a /64.  A little reading about the RA protocol showed this to be correct: RA provides the high 64 bits (the network portion), and the clients provide the low 64 bits using EUI-64.  I was stymied until I looked at the tunnel details again and noticed that the &quot;Routed IPv6 Prefixes&quot; section listed a different prefix (2001:470:1f11:826/64).&lt;/p&gt;

&lt;p&gt;With this in place, the subnet and firewall setup was a breeze.  Using a manual configuration on my MacBook, I was able to communicate via IPv6.  However, the stateless autoconfiguration didn&#039;t work.  I briefly tried DHCPv6, but Macs do not support it.  The RA client correctly combines the network and EUI-64 components to create a full address, and it correctly copies the link-local address of the router, but it does not set up a default route using that router, making the whole thing fairly useless.  A trip to #ipv6 confirmed that Macs are, indeed, broken this way, so I stopped worrying about it.&lt;/p&gt;

&lt;p&gt;The remainder of the certification process involved getting Apache, Postfix, and Bind speaking IPv6, none of which was very difficult.  I did discover that BIND&#039;s $ORIGIN didn&#039;t work correctly.  A zonefile with&lt;/p&gt;

&lt;pre&gt;
$ORIGIN 6.2.8.0.1.1.f.1.0.7.4.0.1.0.0.2.ip6.arpa.
8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR knuth.r.igoro.us.
&lt;/pre&gt;

&lt;p&gt;didn&#039;t work, but spelling out the entire reversed address did.  I&#039;m sure this was due to a typo, but several checks didn&#039;t reveal anything.&lt;/p&gt;

&lt;p&gt;However, I&#039;m now stuck at the Guru level until GoDaddy starts supporting IPv6 glue for the &lt;tt&gt;.us&lt;/tt&gt; TLD.  I feel cheated, somehow!&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sun, 27 Jun 2010 16:27:12 -0500</pubDate>
    <guid isPermaLink="false">http://code.v.igoro.us/archives/57-guid.html</guid>
    
</item>
<item>
    <title>Open-Source Support?</title>
    <link>http://code.v.igoro.us/archives/9-Open-Source-Support.html</link>
            <category>IP</category>
            <category>Sysadmin</category>
    
    <comments>http://code.v.igoro.us/archives/9-Open-Source-Support.html#comments</comments>
    <wfw:comment>http://code.v.igoro.us/wfwcomment.php?cid=9</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://code.v.igoro.us/rss.php?version=2.0&amp;type=comments&amp;cid=9</wfw:commentRss>
    

    <author>nospam@example.com (Dustin J. Mitchell)</author>
    <content:encoded>
    &lt;p&gt;I saw an &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/svn.haxx.se/tsvn/archive-2007-06/0114.shtml&#039;]);&quot;  href=&quot;http://svn.haxx.se/tsvn/archive-2007-06/0114.shtml&quot;&gt;interesting post on the Subversion development list&lt;/a&gt; a while ago.  In part:&lt;/p&gt;

&lt;blockquote&gt;
This note is to inform you that the Shell Group will be migrating from Windows 2000 to Microsoft&#039;s new operating system known as Windows Vista with effect from Q1 2008, and to seek your assistance and support in minimising disruption to users and applications during and after the migration.
&lt;/blockquote&gt;

&lt;p&gt;The note goes on to request some fairly specific information about the upgrade path for TortiseSVN, the Windows Subversion client.  They are the sorts of questions that all IT shops would love to ask all of their vendors, with the expectation of a full and well-researched answer.  &lt;/p&gt;

&lt;p&gt;&lt;p&gt;As an admin at a small K-12 school, questions of this sort were met with blank stares from vendors.  At best, we could get a demo unit, but any sort of analysis of the potential fit of a product (besides the &quot;analysis&quot; the salesmen would do) was simply out of the question for an account of our size.  On the other hand, I could usually count on honest assessments from open-source software mailing lists, even if they didn&#039;t represent full-scale implementation analyses.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;The Shell Group request turns the situation around.  Shell Group is a very large client and is probably accustomed to contacting peers like Dell, Aramark, or HBN-AMRO with requests like this.  Yet here they are making these requests of a gaggle of developers, &lt;i&gt;none&lt;/i&gt; of whom want to be &quot;the main liaison for ALL matters pertaining to Vista compatibility.&quot;  There were no on-list responses, so I can&#039;t say what became of the request.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;There&#039;s clearly a business need here, but it&#039;s not the typical &quot;sell support for open source software&quot; niche.  Rather, Shell Group wants a business entity with which they can have a more contractual relationship: one that can get the software certified by Microsoft, make projections as to deliverable dates, and so on.  An entity that can answer support calls but does not have significant control of the development community is simply not capable of these things, but neither is a development community without a legally representative organization.&lt;/p&gt;

&lt;p&gt;&lt;p&gt;I&#039;m interested to see if this kind of request occurs more often, and what effect it has on the landscape of adoption of OSS in big business. &lt;h3&gt;Fact-Checking&lt;/h3&gt;
Some basic googling for other messages like this turned up nothing.  It&#039;s quite possible that this is a hoax.  If so, I&#039;m sorry for promoting it, but I think the points it brought up are interesting nonetheless.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sat, 16 Jun 2007 14:01:08 -0500</pubDate>
    <guid isPermaLink="false">http://code.v.igoro.us/archives/9-guid.html</guid>
    
</item>
<item>
    <title>&quot;Teaching Problem Solving: You Can and You Should&quot; (Elizabeth Zwicky)</title>
    <link>http://code.v.igoro.us/archives/2-Teaching-Problem-Solving-You-Can-and-You-Should-Elizabeth-Zwicky.html</link>
            <category>Education</category>
            <category>Sysadmin</category>
    
    <comments>http://code.v.igoro.us/archives/2-Teaching-Problem-Solving-You-Can-and-You-Should-Elizabeth-Zwicky.html#comments</comments>
    <wfw:comment>http://code.v.igoro.us/wfwcomment.php?cid=2</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://code.v.igoro.us/rss.php?version=2.0&amp;type=comments&amp;cid=2</wfw:commentRss>
    

    <author>nospam@example.com (Dustin J. Mitchell)</author>
    <content:encoded>
    &lt;p&gt;Mrs. Zwicky gave a really excellent talk that balanced real research in education, in problem solving, and in systems administration.  She teaches systems administration to Navy recruits for a defense contractor, in a tutoring setting.  The talk addressed the common belief that problem solving skills are essentially innate and can&#039;t be taught.  She discussed the problem-solving process in general, using lots of examples (well, &quot;war stories&quot;) from systems admin.  Finally, she talked about some of the techniques and skills needed to teach problem solving (or anything, really).&lt;/p&gt;

&lt;p&gt;These techniques included scaffolding -- building the learners&#039; conceptual understanding by presenting the right tasks, offering the right support, and convincing the learner to talk about the concepts, not just &quot;what do I type&quot;.  Also included was &quot;spotting&quot;, which I assume comes from sports -- the idea here is to make sure that the learner doesn&#039;t suffer any horrible consequences from making mistakes. This topic was interesting to me, as someone who bridges education, systems administration, and development.  I think it&#039;s important for well-trained, intelligent people to think about and participate in education -- systems administrators included (for the record, I&#039;m happy with the NSF&#039;s requirement that scientists do some sort of &quot;community service&quot; as a part of their work for a grant).&lt;/p&gt;

&lt;p&gt;I found it relevant to me in two ways.  First, the person who replaced me at my previous job is a very green admin.  He&#039;s been doing basic IT legwork for a few years -- repairing computers, user support, etc.  Now he&#039;s in charge of a heterogenous Linux/Windows shop with a bunch of web services, funky applications, and so on.  Since he&#039;s in a production environment, questions are always &quot;how do I do XYZ?&quot; rather than &quot;how does SSL work.&quot;  That makes it hard to concentrate on teaching the problem-solving that underlies all of this.&lt;/p&gt;

&lt;p&gt;I have also tried to teach varoius IT-related things to a bunch of students (programming, administration, etc.).  For most, the motivation was missing, and I never figured out how to get around that.  For one, though, I found that spotting was an effective way to motivate her to actually try to solve a problem, rather than just requesting and following steps.  I asked her to add a printer to a Windows network, but said I wouldn&#039;t answer any questions, but would fix anything that broke while she was working on it.  It took a few iterations of the assurances before she started, and it took her a while to work through the process, but she now reflects on this as the best learning experience of our time working together.&lt;/p&gt;

&lt;p&gt;During the Q&amp;amp;A session for this talk, I was somewhat disappointed that all of the questions focused on Problem Solving / System Administration -- horror stories, &quot;what kind of problem solving is this&quot;, etc. -- nobody was interested in the teaching of these skills.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Wed, 06 Dec 2006 10:06:49 -0600</pubDate>
    <guid isPermaLink="false">http://code.v.igoro.us/archives/2-guid.html</guid>
    
</item>
<item>
    <title>USENIX LISA</title>
    <link>http://code.v.igoro.us/archives/1-USENIX-LISA.html</link>
            <category>Sysadmin</category>
    
    <comments>http://code.v.igoro.us/archives/1-USENIX-LISA.html#comments</comments>
    <wfw:comment>http://code.v.igoro.us/wfwcomment.php?cid=1</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://code.v.igoro.us/rss.php?version=2.0&amp;type=comments&amp;cid=1</wfw:commentRss>
    

    <author>nospam@example.com (Dustin J. Mitchell)</author>
    <content:encoded>
    &lt;p&gt;So what better time to inagurate this blog than now, during the &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.usenix.org/events/lisa06/tech/#keynote&#039;]);&quot;  href=&quot;http://www.usenix.org/events/lisa06/tech/#keynote&quot;&gt;keynote&lt;/a&gt; to the &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.usenix.org/events/lisa06/index.html&#039;]);&quot;  href=&quot;http://www.usenix.org/events/lisa06/index.html&quot;&gt;LISA (Large Installation Systems Administration)&lt;/a&gt; conference.  It&#039;s an interesting general talk about one of the many pressing non-technical issues in this community: DRM and restrictive licensing.  &lt;/p&gt;

&lt;p&gt;He&#039;s boiled it down nicely: in the traditional crypto challenge, Alice talking to Bob, with Carol trying to eavesdrop, Carol has the ciphertext and the cipher, but not the key -- that&#039;s the feature that differentiates Carol from Bob, allowing Bob, but not Carol, to decrypt it.  But under DRM and other legal challenges Carol and Bob are the same person.  Companies are sending cyphertext to Carol/Bob, with the restriction that they can use it in one capacity (as Bob, the consumer) but not in another (as Carol, the same consumer who wants to watch the DVD on her computer).  Obviously, the only technical way to make this work is to control the cipher (the algorithm).  It&#039;s easy to build a cipher to do what they want.  It&#039;s technically impossible to prevent others from building ciphers that don&#039;t.  So they turn to the law.&lt;/p&gt;

&lt;p&gt;This all reminds me of the &quot;good old days&quot; of the Apple II and crazy technical copy-protection schemes -- schemes which faded in popularity, and seem to have come back in the last decade.  Doctrow&#039;s answer was, to put it simply, DMCA. DMCA gave these companies the legal muscle they needed.&lt;/p&gt;

&lt;p&gt;This keynote highlights what I&#039;d like to talk about on this site -- I&#039;m not much interested in posting code samples, or kvetching about this language or that language.  I&#039;d rather talk about these much more important issues.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Wed, 06 Dec 2006 09:17:41 -0600</pubDate>
    <guid isPermaLink="false">http://code.v.igoro.us/archives/1-guid.html</guid>
    
</item>

</channel>
</rss>
