Somehow I figured out that I needed to run the ip/ipconfig command; I think I was looking for ifconfig (per other UNIX-like systems) and came across the man page for ip/ipconfig instead. However, even though the interface was clearly up, and the DNS was configured to use my local router, and I could ping Google’s DNS server at 8.8.8.8 successfully, name resolution still wasn’t working.

Through some creative web searching I discovered an article holding the key to Plan 9 name server configuration (which also happened to mention the video settings I described in my previous post). Setting the DNSSERVER environment variable before launching ndb/dns -r did the trick. (By the way, all environment variables are visible within the /env directory; Plan 9 takes the “everything is a file” approach to an extreme.)

Patching the SSL/TLS library

Since there is no official binary release of Go for Plan 9, I needed to build it from source. Typically one would run git clone https://github.com/golang/go or some such, but as Git isn’t available for Plan 9 (a clever hack described below notwithstanding), we can instead fetch a tarball of the sources at a tagged version directly from GitHub using Plan 9’s hget program (analogous to wget or curl on other Unices), in this case Go 1.4.2:

term% hget -o go1.4.2.tar.gz https://github.com/golang/go/archive/go1.4.2.tar.gz
tlsClient: tls: local invalid x509/rsa certificate
[...snip repeated errors...]
hget: too many errors with no progress fd out of range or not open

So the Go compiler and libraries built successfully, and all the tests passed…except the final multithreaded runtime test, which deadlocked and aborted after four minutes. Oh well, can’t have everything. I went ahead and set up the GOPATH and path environment variables and verified that the go tool was accessible (haven’t figured out what the equivalent to $HOME/.bashrc is for the rc shell yet):

Bear in mind, however, this clone contains the master branch, not a stable release, which is what is needed to run the continuous integration servers. Hence, we built Go earlier using the tarball for version 1.4.2. (Still, later I may build this version and see if the deadlock in the runtime test goes away.)

With both the git script and the go binary in place, now we’re ready to run go get to fetch a bunch of helpful tools:

What’s next?

So I’ve managed to reach my goal of building and executing the oauth2_proxy tests on Plan 9. What else am I to do with Plan 9 now?

There’s nothing imminently practical for me to do, but I do love noodling about with different operating systems to see what tools are available, what design philosophies shaped the environment, and how easy (or not) they are to use. In the short term, I’m fascinated by the acme terminal/window manager/text editor. It seems a powerful tool that I’ve yet to fully appreciate, and may give me a new way of looking at things.

Funny thing is, I don’t necessarily need to run Plan 9 to try acme, thanks to the Plan 9 from User Space project. In fact, it’s even available via Homebrew for OS X. Fun!