<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>/devices/pseudo/bitbucket@0,0:pseudo (Posts about Infrastructure)</title><link>https://www.jmcpdotcom.com/blog/</link><description></description><atom:link href="https://www.jmcpdotcom.com/blog/categories/infrastructure.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2022 &lt;a href="mailto:blogadmin@jmcpdotcom.com"&gt;jmcp&lt;/a&gt; </copyright><lastBuildDate>Thu, 21 Apr 2022 02:58:36 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Long Fat Networks</title><link>https://www.jmcpdotcom.com/blog/posts/2017-07-14-long-fat-networks/</link><dc:creator>jmcp</dc:creator><description>&lt;p&gt;Living in Australia generally means that you're on the end of a Long Fat
Network (LFN), internet-wise. That's a &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Long_fat_network"&gt;serious technical term&lt;/a&gt; which
is important to the networking stack when determining optimal data
transfer sizes.&lt;/p&gt;
&lt;p&gt;Two of my colleagues down in Melbourne are also with
&lt;a class="reference external" href="https://www.aussiebroadband.com.au"&gt;Aussie Broadband&lt;/a&gt; and using the top (100Mbit down, 40Mbit up) NBN speed tier. We also
have company-issued hardware vpn units because we work from home
fulltime. I was delighted at the bandwidth available from Aussie for our
connections to work systems in the SF Bay Area, and when I had cause to
update my systems to a new build I observed that it now took about 55
minutes on our &lt;a class="reference external" href="https://www.jmcpdotcom.com/blog/2014/05/31/building-a-new-system-to-run-solaris/"&gt;media server&lt;/a&gt;, rather than the 80-90 minutes it took
with the &lt;a class="reference external" href="https://www.skymesh.net.au"&gt;SkyMesh&lt;/a&gt; connection.&lt;/p&gt;
&lt;p&gt;There was a fly in the ointment, however, because my colleagues and I
calculated that while we should be getting 1Mb/s or more as a sustained
transfer rate from the internal pkg server, we'd often get around
400kb/s. Since networking is supposed to be something &lt;a class="reference external" href="http://www.oracle.com/technetwork/server-storage/solaris11/overview/index.html"&gt;Solaris&lt;/a&gt; is
good at, we started digging.&lt;/p&gt;
&lt;p&gt;The first thing we looked at was the receive buffer size, which defaults
to 1Mb. Greg found &lt;a class="reference external" href="https://fasterdata.es.net/host-tuning/other/"&gt;https://fasterdata.es.net/host-tuning/other/&lt;/a&gt; so
we changed that for tcp, udp and sctp. While fasterdata document talked
about using &lt;code class="docutils literal"&gt;/usr/sbin/ndd&lt;/code&gt;, the Proper Way(tm) to do this in
Solaris 11.x is with &lt;code class="docutils literal"&gt;/usr/sbin/ipadm&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_30cee43e91e6406e9dec55fc030fbdfd-1" name="rest_code_30cee43e91e6406e9dec55fc030fbdfd-1"&gt;&lt;/a&gt; &lt;span class="c1"&gt;# for pp in tcp udp sctp; do ipadm show-prop -p max-buf $pp; done&lt;/span&gt;
&lt;a id="rest_code_30cee43e91e6406e9dec55fc030fbdfd-2" name="rest_code_30cee43e91e6406e9dec55fc030fbdfd-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_30cee43e91e6406e9dec55fc030fbdfd-3" name="rest_code_30cee43e91e6406e9dec55fc030fbdfd-3"&gt;&lt;/a&gt;PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
&lt;a id="rest_code_30cee43e91e6406e9dec55fc030fbdfd-4" name="rest_code_30cee43e91e6406e9dec55fc030fbdfd-4"&gt;&lt;/a&gt;tcp   max-buf               rw   &lt;span class="m"&gt;1048576&lt;/span&gt;      --           &lt;span class="m"&gt;1048576&lt;/span&gt;      &lt;span class="m"&gt;1048576&lt;/span&gt;-1073741824
&lt;a id="rest_code_30cee43e91e6406e9dec55fc030fbdfd-5" name="rest_code_30cee43e91e6406e9dec55fc030fbdfd-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_30cee43e91e6406e9dec55fc030fbdfd-6" name="rest_code_30cee43e91e6406e9dec55fc030fbdfd-6"&gt;&lt;/a&gt;PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
&lt;a id="rest_code_30cee43e91e6406e9dec55fc030fbdfd-7" name="rest_code_30cee43e91e6406e9dec55fc030fbdfd-7"&gt;&lt;/a&gt;udp   max-buf               rw   &lt;span class="m"&gt;2097152&lt;/span&gt;      --           &lt;span class="m"&gt;2097152&lt;/span&gt;      &lt;span class="m"&gt;65536&lt;/span&gt;-1073741824
&lt;a id="rest_code_30cee43e91e6406e9dec55fc030fbdfd-8" name="rest_code_30cee43e91e6406e9dec55fc030fbdfd-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_30cee43e91e6406e9dec55fc030fbdfd-9" name="rest_code_30cee43e91e6406e9dec55fc030fbdfd-9"&gt;&lt;/a&gt;PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
&lt;a id="rest_code_30cee43e91e6406e9dec55fc030fbdfd-10" name="rest_code_30cee43e91e6406e9dec55fc030fbdfd-10"&gt;&lt;/a&gt;sctp  max-buf               rw   &lt;span class="m"&gt;1048576&lt;/span&gt;      --           &lt;span class="m"&gt;1048576&lt;/span&gt;      &lt;span class="m"&gt;102400&lt;/span&gt;-1073741824
&lt;/pre&gt;&lt;p&gt;To effect a quick and persistent change, we uttered:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_ee8e688b9d394c9cb20a7c889a1168b3-1" name="rest_code_ee8e688b9d394c9cb20a7c889a1168b3-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# for pp in tcp udp sctp; do ipadm set-prop -p max-buf=1073741824 $pp; done&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;While that did seem to make a positive difference, transferring a
&lt;a class="reference external" href="http://ftp.mozilla.org/pub/mozilla/VMs/CentOS5-ReferencePlatform.tar.bz2"&gt;sample large file&lt;/a&gt; from across the Pacific still cycled up and down
in the transfer rate. The cycling was &lt;em&gt;really&lt;/em&gt; annoying. We kept
digging.&lt;/p&gt;
&lt;p&gt;The next thing we investigated was the congestion window, which is where
the afore-mentioned &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Long_fat_network"&gt;LFN&lt;/a&gt; comes in to play. That property is &lt;em&gt;cwnd-max&lt;/em&gt;:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_acad642bd896459f88a8da510f809907-1" name="rest_code_acad642bd896459f88a8da510f809907-1"&gt;&lt;/a&gt; &lt;span class="c1"&gt;# for pp in tcp sctp; do ipadm show-prop -p cwnd-max $pp; done&lt;/span&gt;
&lt;a id="rest_code_acad642bd896459f88a8da510f809907-2" name="rest_code_acad642bd896459f88a8da510f809907-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_acad642bd896459f88a8da510f809907-3" name="rest_code_acad642bd896459f88a8da510f809907-3"&gt;&lt;/a&gt;PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
&lt;a id="rest_code_acad642bd896459f88a8da510f809907-4" name="rest_code_acad642bd896459f88a8da510f809907-4"&gt;&lt;/a&gt;tcp   cwnd-max              rw   &lt;span class="m"&gt;1048576&lt;/span&gt;      --           &lt;span class="m"&gt;1048576&lt;/span&gt;      &lt;span class="m"&gt;128&lt;/span&gt;-1073741824
&lt;a id="rest_code_acad642bd896459f88a8da510f809907-5" name="rest_code_acad642bd896459f88a8da510f809907-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_acad642bd896459f88a8da510f809907-6" name="rest_code_acad642bd896459f88a8da510f809907-6"&gt;&lt;/a&gt;PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
&lt;a id="rest_code_acad642bd896459f88a8da510f809907-7" name="rest_code_acad642bd896459f88a8da510f809907-7"&gt;&lt;/a&gt;sctp  cwnd-max              rw   &lt;span class="m"&gt;1048576&lt;/span&gt;      --           &lt;span class="m"&gt;1048576&lt;/span&gt;      &lt;span class="m"&gt;128&lt;/span&gt;-1073741824
&lt;/pre&gt;&lt;p&gt;Figuring that if it was worth doing, it was worth overdoing, we bumped
that parameter up too:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_51ae3e7d75da43b08dd0f5764ffc4166-1" name="rest_code_51ae3e7d75da43b08dd0f5764ffc4166-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# for pp in tcp sctp; do ipadm set-prop -p cwnd-max=1073741824 $pp; done&lt;/span&gt;
&lt;/pre&gt;&lt;pre class="code shell"&gt;&lt;a id="rest_code_de02b201fa4f4e1e980ee1b979e1b84b-1" name="rest_code_de02b201fa4f4e1e980ee1b979e1b84b-1"&gt;&lt;/a&gt;$ curl -o moz.bz2 http://ftp.mozilla.org/pub/mozilla/VMs/CentOS5-ReferencePlatform.tar.bz2
&lt;a id="rest_code_de02b201fa4f4e1e980ee1b979e1b84b-2" name="rest_code_de02b201fa4f4e1e980ee1b979e1b84b-2"&gt;&lt;/a&gt;  % Total    % Received % Xferd  Average Speed   Time    Time     Time Current
&lt;a id="rest_code_de02b201fa4f4e1e980ee1b979e1b84b-3" name="rest_code_de02b201fa4f4e1e980ee1b979e1b84b-3"&gt;&lt;/a&gt;                                 Dload  Upload   Total   Spent    Left  Speed
&lt;a id="rest_code_de02b201fa4f4e1e980ee1b979e1b84b-4" name="rest_code_de02b201fa4f4e1e980ee1b979e1b84b-4"&gt;&lt;/a&gt;  &lt;span class="m"&gt;3&lt;/span&gt; 3091M    &lt;span class="m"&gt;3&lt;/span&gt;  102M    &lt;span class="m"&gt;0&lt;/span&gt;     &lt;span class="m"&gt;0&lt;/span&gt;  4542k      &lt;span class="m"&gt;0&lt;/span&gt;  &lt;span class="m"&gt;0&lt;/span&gt;:11:36  &lt;span class="m"&gt;0&lt;/span&gt;:00:23  &lt;span class="m"&gt;0&lt;/span&gt;:11:13 5747k^C
&lt;/pre&gt;&lt;p&gt;While that speed cycled around a lot, it mostly remained above 5MB/s.&lt;/p&gt;
&lt;p&gt;Another large improvement. Yay!&lt;/p&gt;
&lt;p&gt;However... we still saw the cycling. Intriguingly, the period was about
20 seconds, so there was still something else to twiddle.&lt;/p&gt;
&lt;p&gt;In the meantime, however, I decided to update our &lt;a class="reference external" href="https://www.jmcpdotcom.com/blog/2014/05/31/building-a-new-system-to-run-solaris/"&gt;media server&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was blown away.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;23 minutes 1 second&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not bad at all, even considering that when pkg(1) is transferring lots
of small files it's difficult to keep the pipes filled.&lt;/p&gt;
&lt;p&gt;Now that both Greg and I had several interesting data points to
consider, I asked some of our network gurus for advice on what else we
could look at. N suggested looking at the actual congestion algorithm in
use, and pointed me to this article on &lt;a class="reference external" href="http://www.networkworld.com/article/2314587/tech-primers/high-speed-tcp-eases-wan-congestion.html"&gt;High speed TCP&lt;/a&gt;.&lt;/p&gt;
&lt;!--  --&gt;
&lt;blockquote&gt;
&lt;p&gt;High-speed TCP (HS-TCP ). HS-TCP is an update of TCP that reacts better when using large congestion windows on high-bandwidth, high-latency networks.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Solaris default is the &lt;em&gt;newreno&lt;/em&gt; algorithm:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_874c8350b32e4aa6825781d224bf2e19-1" name="rest_code_874c8350b32e4aa6825781d224bf2e19-1"&gt;&lt;/a&gt; &lt;span class="c1"&gt;# ipadm show-prop -p cong-default,cong-enabled tcp&lt;/span&gt;
&lt;a id="rest_code_874c8350b32e4aa6825781d224bf2e19-2" name="rest_code_874c8350b32e4aa6825781d224bf2e19-2"&gt;&lt;/a&gt;PROTO PROPERTY              PERM CURRENT      PERSISTENT   DEFAULT      POSSIBLE
&lt;a id="rest_code_874c8350b32e4aa6825781d224bf2e19-3" name="rest_code_874c8350b32e4aa6825781d224bf2e19-3"&gt;&lt;/a&gt;tcp   cong-default          rw   newreno      --           newreno      newreno,cubic,
&lt;a id="rest_code_874c8350b32e4aa6825781d224bf2e19-4" name="rest_code_874c8350b32e4aa6825781d224bf2e19-4"&gt;&lt;/a&gt;                                                                        dctcp,
&lt;a id="rest_code_874c8350b32e4aa6825781d224bf2e19-5" name="rest_code_874c8350b32e4aa6825781d224bf2e19-5"&gt;&lt;/a&gt;                                                                        highspeed,
&lt;a id="rest_code_874c8350b32e4aa6825781d224bf2e19-6" name="rest_code_874c8350b32e4aa6825781d224bf2e19-6"&gt;&lt;/a&gt;                                                                        vegas
&lt;a id="rest_code_874c8350b32e4aa6825781d224bf2e19-7" name="rest_code_874c8350b32e4aa6825781d224bf2e19-7"&gt;&lt;/a&gt;tcp   cong-enabled          rw   newreno,     newreno,     newreno      newreno,cubic,
&lt;a id="rest_code_874c8350b32e4aa6825781d224bf2e19-8" name="rest_code_874c8350b32e4aa6825781d224bf2e19-8"&gt;&lt;/a&gt;                                 cubic,dctcp, cubic,dctcp,              dctcp,
&lt;a id="rest_code_874c8350b32e4aa6825781d224bf2e19-9" name="rest_code_874c8350b32e4aa6825781d224bf2e19-9"&gt;&lt;/a&gt;                                 highspeed,   highspeed,                highspeed,
&lt;a id="rest_code_874c8350b32e4aa6825781d224bf2e19-10" name="rest_code_874c8350b32e4aa6825781d224bf2e19-10"&gt;&lt;/a&gt;                                 vegas        vegas                     vegas
&lt;/pre&gt;&lt;p&gt;Changing that was easy:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_2faac66463364085984e034ea0d56d75-1" name="rest_code_2faac66463364085984e034ea0d56d75-1"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# for pp in tcp sctp ; do ipadm set-prop -p cong-default=highspeed $pp; done&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;Off to pull down that bz2 from mozilla.org again:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_9e1f21db4afc4fe691b4798e445ce0b3-1" name="rest_code_9e1f21db4afc4fe691b4798e445ce0b3-1"&gt;&lt;/a&gt; $ curl -o blah.tar.bz2 http://ftp.mozilla.org/pub/mozilla/VMs/CentOS5-ReferencePlatform.tar.bz2
&lt;a id="rest_code_9e1f21db4afc4fe691b4798e445ce0b3-2" name="rest_code_9e1f21db4afc4fe691b4798e445ce0b3-2"&gt;&lt;/a&gt;  % Total    % Received % Xferd  Average Speed   Time    Time     Time Current
&lt;a id="rest_code_9e1f21db4afc4fe691b4798e445ce0b3-3" name="rest_code_9e1f21db4afc4fe691b4798e445ce0b3-3"&gt;&lt;/a&gt;                                 Dload  Upload   Total   Spent    Left  Speed
&lt;a id="rest_code_9e1f21db4afc4fe691b4798e445ce0b3-4" name="rest_code_9e1f21db4afc4fe691b4798e445ce0b3-4"&gt;&lt;/a&gt;&lt;span class="m"&gt;100&lt;/span&gt; 3091M  &lt;span class="m"&gt;100&lt;/span&gt; 3091M    &lt;span class="m"&gt;0&lt;/span&gt;     &lt;span class="m"&gt;0&lt;/span&gt;  5866k      &lt;span class="m"&gt;0&lt;/span&gt;  &lt;span class="m"&gt;0&lt;/span&gt;:08:59  &lt;span class="m"&gt;0&lt;/span&gt;:08:59 --:--:-- 8684k
&lt;/pre&gt;&lt;p&gt;For a more local test (within Australia) I made use of Internode's facility:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_9f4e30949a9d4e43b914ee641266afe0-1" name="rest_code_9f4e30949a9d4e43b914ee641266afe0-1"&gt;&lt;/a&gt;$ curl -o t.test http://mirror.internode.on.net/pub/test/1000meg.test
&lt;a id="rest_code_9f4e30949a9d4e43b914ee641266afe0-2" name="rest_code_9f4e30949a9d4e43b914ee641266afe0-2"&gt;&lt;/a&gt;  % Total    % Received % Xferd  Average Speed   Time    Time     Time Current
&lt;a id="rest_code_9f4e30949a9d4e43b914ee641266afe0-3" name="rest_code_9f4e30949a9d4e43b914ee641266afe0-3"&gt;&lt;/a&gt;                                 Dload  Upload   Total   Spent    Left  Speed
&lt;a id="rest_code_9f4e30949a9d4e43b914ee641266afe0-4" name="rest_code_9f4e30949a9d4e43b914ee641266afe0-4"&gt;&lt;/a&gt;&lt;span class="m"&gt;100&lt;/span&gt;  953M  &lt;span class="m"&gt;100&lt;/span&gt;  953M    &lt;span class="m"&gt;0&lt;/span&gt;     &lt;span class="m"&gt;0&lt;/span&gt;  &lt;span class="m"&gt;10&lt;/span&gt;.0M      &lt;span class="m"&gt;0&lt;/span&gt;  &lt;span class="m"&gt;0&lt;/span&gt;:01:35  &lt;span class="m"&gt;0&lt;/span&gt;:01:35 --:--:-- &lt;span class="m"&gt;11&lt;/span&gt;.0M
&lt;/pre&gt;&lt;p&gt;And finally, updating my global zone.&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-1" name="rest_code_81003e2d6d504553817adafae3119e02-1"&gt;&lt;/a&gt; &lt;span class="c1"&gt;# time pkg update --be-name $NEWBE core-os@$version *incorporation@$version&lt;/span&gt;
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-2" name="rest_code_81003e2d6d504553817adafae3119e02-2"&gt;&lt;/a&gt;            Packages to update: &lt;span class="m"&gt;291&lt;/span&gt;
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-3" name="rest_code_81003e2d6d504553817adafae3119e02-3"&gt;&lt;/a&gt;       Create boot environment: Yes
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-4" name="rest_code_81003e2d6d504553817adafae3119e02-4"&gt;&lt;/a&gt;Create backup boot environment:  No
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-5" name="rest_code_81003e2d6d504553817adafae3119e02-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-6" name="rest_code_81003e2d6d504553817adafae3119e02-6"&gt;&lt;/a&gt;DOWNLOAD                                PKGS         FILES    XFER &lt;span class="o"&gt;(&lt;/span&gt;MB&lt;span class="o"&gt;)&lt;/span&gt;   SPEED
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-7" name="rest_code_81003e2d6d504553817adafae3119e02-7"&gt;&lt;/a&gt;Completed                            &lt;span class="m"&gt;291&lt;/span&gt;/291     &lt;span class="m"&gt;2025&lt;/span&gt;/2025  &lt;span class="m"&gt;116&lt;/span&gt;.9/116.9  317k/s
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-8" name="rest_code_81003e2d6d504553817adafae3119e02-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-9" name="rest_code_81003e2d6d504553817adafae3119e02-9"&gt;&lt;/a&gt;PHASE                                          ITEMS
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-10" name="rest_code_81003e2d6d504553817adafae3119e02-10"&gt;&lt;/a&gt;Removing old actions                       &lt;span class="m"&gt;1544&lt;/span&gt;/1544
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-11" name="rest_code_81003e2d6d504553817adafae3119e02-11"&gt;&lt;/a&gt;Installing new actions                     &lt;span class="m"&gt;1552&lt;/span&gt;/1552
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-12" name="rest_code_81003e2d6d504553817adafae3119e02-12"&gt;&lt;/a&gt;Updating modified actions                  &lt;span class="m"&gt;2358&lt;/span&gt;/2358
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-13" name="rest_code_81003e2d6d504553817adafae3119e02-13"&gt;&lt;/a&gt;Updating package state database                 Done
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-14" name="rest_code_81003e2d6d504553817adafae3119e02-14"&gt;&lt;/a&gt;Updating package cache                       &lt;span class="m"&gt;291&lt;/span&gt;/291
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-15" name="rest_code_81003e2d6d504553817adafae3119e02-15"&gt;&lt;/a&gt;Updating image state                            Done
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-16" name="rest_code_81003e2d6d504553817adafae3119e02-16"&gt;&lt;/a&gt;Creating fast lookup database                   Done
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-17" name="rest_code_81003e2d6d504553817adafae3119e02-17"&gt;&lt;/a&gt;Reading search index                            Done
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-18" name="rest_code_81003e2d6d504553817adafae3119e02-18"&gt;&lt;/a&gt;Building new search index                  &lt;span class="m"&gt;1932&lt;/span&gt;/1932
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-19" name="rest_code_81003e2d6d504553817adafae3119e02-19"&gt;&lt;/a&gt;
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-20" name="rest_code_81003e2d6d504553817adafae3119e02-20"&gt;&lt;/a&gt;A clone of &lt;span class="nv"&gt;$oldbe&lt;/span&gt; exists and has been updated and activated.
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-21" name="rest_code_81003e2d6d504553817adafae3119e02-21"&gt;&lt;/a&gt;On the next boot the Boot Environment be://rpool/&lt;span class="nv"&gt;$newbe&lt;/span&gt; will be
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-22" name="rest_code_81003e2d6d504553817adafae3119e02-22"&gt;&lt;/a&gt;mounted on &lt;span class="s1"&gt;'/'&lt;/span&gt;.  Reboot when ready to switch to this updated BE.
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-23" name="rest_code_81003e2d6d504553817adafae3119e02-23"&gt;&lt;/a&gt;
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-24" name="rest_code_81003e2d6d504553817adafae3119e02-24"&gt;&lt;/a&gt;
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-25" name="rest_code_81003e2d6d504553817adafae3119e02-25"&gt;&lt;/a&gt;real    12m30.391s
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-26" name="rest_code_81003e2d6d504553817adafae3119e02-26"&gt;&lt;/a&gt;user    4m4.173s
&lt;a id="rest_code_81003e2d6d504553817adafae3119e02-27" name="rest_code_81003e2d6d504553817adafae3119e02-27"&gt;&lt;/a&gt;sys     0m21.496s
&lt;/pre&gt;&lt;p&gt;I think that's sufficient.&lt;/p&gt;</description><category>bandwidth</category><category>hfc</category><category>Infrastructure</category><category>LFN aka Long Fat Network</category><category>tcp</category><category>Troubleshooting</category><guid>https://www.jmcpdotcom.com/blog/posts/2017-07-14-long-fat-networks/</guid><pubDate>Fri, 14 Jul 2017 19:00:00 GMT</pubDate></item><item><title>Weeeee – nbnco HFC and a new ISP!</title><link>https://www.jmcpdotcom.com/blog/posts/2016-12-23-weeeee-nbnco-hfc-and-a-new-isp/</link><dc:creator>jmcp</dc:creator><description>&lt;p&gt;A few weeks ago we received a nice little letter from &lt;a class="reference external" href="https://www.nbnco.com.au"&gt;nbnco&lt;/a&gt;, advising that we would soon be able to get an
HFC connection installed.&lt;/p&gt;
&lt;p&gt;I was disappointed to discover that &lt;a class="reference external" href="https://www.internode.on.net"&gt;Internode&lt;/a&gt; was not going to offer either static IPv4 or
an IPv6 service, let alone their Professional pack with NBN connections, and
cast around for another ISP. Word of mouth got me to &lt;a class="reference external" href="https://www.skymesh.net.au"&gt;Skymesh&lt;/a&gt; and guineapig status (since they haven't
formally started accepting HFC connections).&lt;/p&gt;
&lt;p&gt;Since we're quite happy with the functionality of the &lt;a class="reference external" href="https://www.jmcpdotcom.com/blog/2016/03/25/success-mikrotik-and-ipv6-config/"&gt;Mikrotik
CRS109-8G-1S-2HnD-IN&lt;/a&gt;,
I declined purchasing a new modem; the nbnco installer provided the
Blessed Arris cablemodem and all I needed then was for the connection to be
activated.&lt;/p&gt;
&lt;p&gt;Once it was, I very quickly reconfigured the mtik to do what I needed. Since
Skymesh is using IPoE, I disabled the pppoe client activity. I also needed to
change my firewall rules a little, to reflect that actions should be occurring
on a different physical port (which I had to remember to take out of the
bridge). Finally, a bunch of mucking around with IPv6 address assignment got
me to the point where &lt;a class="reference external" href="http://tracceroute6.net"&gt;traceroute6.net&lt;/a&gt; was able to
ping my server's designated public address. Yay!&lt;/p&gt;
&lt;p&gt;While Skymesh doesn't offer PTR records, I'm still able to get A, AAAA, CNAME
and MX records setup, courtesy of the free service at &lt;a class="reference external" href="https://www.dynu.com"&gt;https://www.dynu.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now that we're back up and running with a shiny new connection, I'm really
pleased to see that &lt;a class="reference external" href="http://beta.speedtest.net/result/5894030060"&gt;http://beta.speedtest.net/result/5894030060&lt;/a&gt; is pretty much
what we get for both uploads and downloads on wired connections. Last week I
celebrated that by having an hour-long video chat with a colleague down in
Melbourne. With the 720p camera in my mbp, over the wireless connection. No
dropouts, no blockiness :-)&lt;/p&gt;
&lt;p&gt;I need to set up &lt;a class="reference external" href="http://oss.oetiker.ch/smokeping/index.en.html"&gt;Smokeping&lt;/a&gt;, and see about a few other analytics things I can get going, but in general
it's been a seamless transition.&lt;/p&gt;</description><category>Hardware</category><category>hfc</category><category>Infrastructure</category><category>mtm</category><category>nbnco</category><guid>https://www.jmcpdotcom.com/blog/posts/2016-12-23-weeeee-nbnco-hfc-and-a-new-isp/</guid><pubDate>Thu, 22 Dec 2016 16:33:07 GMT</pubDate></item><item><title>We’ve got a new pool</title><link>https://www.jmcpdotcom.com/blog/posts/2015-11-27-weve-got-a-new-pool/</link><dc:creator>jmcp</dc:creator><description>&lt;p&gt;One of the features we looked for when we bought our house was an
in-ground pool. As the kids have grown up and their confidence has
increased, we've spent more and more time using the pool - last
swimming season went from September 2014 to April 2015, with almost
daily swims that stretched to being 2-3 hours long over the weekends in
summer.&lt;/p&gt;
&lt;p&gt;One aspect of our pool that we really did not like was the slate tiles
around the side. While I'm sure they looked beautiful when installed, by
the time we moved in (2007) they were looking tired and starting to
shed. By the middle of this year we'd actually lost most of them,
leaving some rather ugly concrete. The underwater surface was also
starting to loosen, so the &lt;a class="reference external" href="http://www.zodiac.com.au/mx8-suction-pool-cleaner"&gt;Barracuda&lt;/a&gt; would frequently
pull bits up and leave them in the skimmer box.&lt;/p&gt;
&lt;p&gt;We had to get it fixed.&lt;/p&gt;
&lt;p&gt;It's been surprisingly difficult to get people to come and quote on a
renovation job, and of those who did quote, some of them were more than
the cost of a new pool. That didn't seem quite right. Eventually, J
found Mark and his team at &lt;a class="reference external" href="http://www.sunseekerpools.com.au/"&gt;Sunseeker Pools&lt;/a&gt;,
who not only quoted within our
range, but helped us pick tiles and stone as well. He was also able to
start within the next 3 weeks and estimated that it would take about 3
weeks to complete the whole job.&lt;/p&gt;
&lt;p&gt;We had been umming and aahing about whether to get the pavers removed
and replaced with tiles, thinking that would significantly add to the
cost, however Mark's quote included that from the start so we were very
happy. During construction we talked with him about our retaining wall,
and he offered to build up the edge of the pool with a reinforced besser
brick layer. This added about another 10% to the cost, but was very well
worth it.&lt;/p&gt;
&lt;p&gt;After a week's delay caused by the &lt;a class="reference external" href="https://www.health.qld.gov.au/news-alerts/news/150901-flu-brisbane-strain.asp"&gt;Brisbane Flu&lt;/a&gt;
work started in earnest, with emptying the pool. That took about 24
hours, and showed just how bad a pool can get when you leave it unloved
for a few months:&lt;/p&gt;
&lt;img alt="/images/2015/11/20150831_110501_IMG_2482.jpg" src="https://www.jmcpdotcom.com/blog/images/2015/11/20150831_110501_IMG_2482.jpg"&gt;
&lt;p&gt;The next stage was to remove the pavers (we're planning on using them
for some followup work in the rest of our outdoor area), jackhammer off
the slate and the existing pool surface.&lt;/p&gt;
&lt;p&gt;A day's worth of putting in formwork was quickly followed by the
concrete truck (and pump), which delivered 3 cubic metres in about 45
minutes. That volume needed 3 days to cure, and then the tiles started
going on. Mark and his team were very careful and precise in laying and
cutting them all out, and then grouted them all at once. We went away to
Ballandean (in the heart of Queensland's wine country) for a few days
with friends, and when we came back the new pebblecrete had been laid,
the waterline tiles and white river stone splashback had been installed
and we just needed the acid wash.&lt;/p&gt;
&lt;p&gt;The day after we got back, the acid wash subcontractor arrived and got
to work - it took about 30 minutes to complete his task, and then
we filled the pool. We've got about 40kL, and using town water from the
hosepipe it took almost 24 hours to get up to the right level and it was
time to put in chemicals. The chemical balance of Brisbane's town water
is generally pretty close to what we need for a pool, so the only major
concern that our &lt;a class="reference external" href="http://www.poolsmartcentenary.com.au/"&gt;pool shop&lt;/a&gt;
had was that we add a lot of calcium. Apparently new pools can leach
calcium, and it's nigh-on impossible to get back.&lt;/p&gt;
&lt;p&gt;And with that, we have a new pool which we've been enjoying almost every
day. It's nice to look at from the kitchen bench, too!&lt;/p&gt;
&lt;p&gt;Thankyou very, very much to Mark and his team from &lt;a class="reference external" href="http://www.sunseekerpools.com.au/"&gt;Sunseeker Pools&lt;/a&gt;, and to Wayne and the gang at
&lt;a class="reference external" href="http://www.poolsmartcentenary.com.au/"&gt;pool shop&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you've got a suitable media-enabled browser, here's &lt;a class="reference external" href="https://goo.gl/photos/3Y9QRoAvWzqruhJU7"&gt;a video of the
pool now&lt;/a&gt; - we &lt;em&gt;really&lt;/em&gt;
love the shimmery sparkly effect.&lt;/p&gt;


&lt;div id="gallery_container"&gt;&lt;/div&gt;
&lt;div class="row"&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/MG_4679.jpg" class="thumbnail image-reference" title="How it looked when we purchased the house in 2007"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/MG_4679.thumbnail.jpg" alt="How it looked when we purchased the house in 2007"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150831_072928_IMG_2476.jpg" class="thumbnail image-reference" title="A bit forlorn, all shut down for winter"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150831_072928_IMG_2476.thumbnail.jpg" alt="A bit forlorn, all shut down for winter"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150831_073012_IMG_2480.jpg" class="thumbnail image-reference" title="20150831_073012_IMG_2480.jpg"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150831_073012_IMG_2480.thumbnail.jpg" alt="20150831_073012_IMG_2480.jpg"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150831_110501_IMG_2482.jpg" class="thumbnail image-reference" title="Pools go green when you ignore them. Also, pumps are great for getting rid of everything below the skimmer box line"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150831_110501_IMG_2482.thumbnail.jpg" alt="Pools go green when you ignore them. Also, pumps are great for getting rid of everything below the skimmer box line"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150831_145638_IMG_2492.jpg" class="thumbnail image-reference" title="Almost empty"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150831_145638_IMG_2492.thumbnail.jpg" alt="Almost empty"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150901_150836_IMG_2503.jpg" class="thumbnail image-reference" title="Jack-hammered!"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150901_150836_IMG_2503.thumbnail.jpg" alt="Jack-hammered!"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150902_123400_IMG_2517.jpg" class="thumbnail image-reference" title="Rubbish cleaned out"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150902_123400_IMG_2517.thumbnail.jpg" alt="Rubbish cleaned out"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150903_111213_IMG_2528.jpg" class="thumbnail image-reference" title="The waterline tiles"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150903_111213_IMG_2528.thumbnail.jpg" alt="The waterline tiles"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150904_111215_IMG_2535.jpg" class="thumbnail image-reference" title="Not a view you get too often"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150904_111215_IMG_2535.thumbnail.jpg" alt="Not a view you get too often"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150904_122411_IMG_2539.jpg" class="thumbnail image-reference" title="20150904_122411_IMG_2539.jpg"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150904_122411_IMG_2539.thumbnail.jpg" alt="20150904_122411_IMG_2539.jpg"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150909_123014_IMG_2558.jpg" class="thumbnail image-reference" title="Somebody was rather excited at seeing the concrete pump truck"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150909_123014_IMG_2558.thumbnail.jpg" alt="Somebody was rather excited at seeing the concrete pump truck"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150909_123614_IMG_2575.jpg" class="thumbnail image-reference" title="Laying the concrete"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150909_123614_IMG_2575.thumbnail.jpg" alt="Laying the concrete"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150909_132612_IMG_2581.jpg" class="thumbnail image-reference" title="All poured and starting to set"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20150909_132612_IMG_2581.thumbnail.jpg" alt="All poured and starting to set"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20151002_150842_IMG_4064.jpg" class="thumbnail image-reference" title="Ready for the acid wash"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20151002_150842_IMG_4064.thumbnail.jpg" alt="Ready for the acid wash"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20151002_151007_IMG_4068.jpg" class="thumbnail image-reference" title="Waterline tiles"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20151002_151007_IMG_4068.thumbnail.jpg" alt="Waterline tiles"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20151004_082304_IMG_4156.jpg" class="thumbnail image-reference" title="Almost full!"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/20151004_082304_IMG_4156.thumbnail.jpg" alt="Almost full!"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="col-xs-6 col-md-3"&gt;
        &lt;a href="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/DSC_0030_2.jpg" class="thumbnail image-reference" title="We're enjoying it already"&gt;
            &lt;img src="https://www.jmcpdotcom.com/blog/galleries/home/new_pool/DSC_0030_2.thumbnail.jpg" alt="We're enjoying it already"&gt;
        &lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;</description><category>House</category><category>Infrastructure</category><category>pool</category><category>renovations</category><guid>https://www.jmcpdotcom.com/blog/posts/2015-11-27-weve-got-a-new-pool/</guid><pubDate>Thu, 26 Nov 2015 15:01:25 GMT</pubDate></item><item><title>A recipe for running your pkg.depotd(1) server with SSL and Apache 2.4</title><link>https://www.jmcpdotcom.com/blog/posts/2015-11-26-a-recipe-for-running-your-pkg-depotd1-server-with-ssl-and-apache-2-4/</link><dc:creator>jmcp</dc:creator><description>&lt;p&gt;As part of my contribution to the &lt;a class="reference external" href="http://www.darktable.org"&gt;darktable&lt;/a&gt; community, I provide the
Solaris packages needed to run the application via a locally-hosted pkg
repo. You can&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_3ec5fbc583d34be58db505466f8a6c64-1" name="rest_code_3ec5fbc583d34be58db505466f8a6c64-1"&gt;&lt;/a&gt;# pkg set-publisher -g https://www.jmcpdotcom.com/packages/packages JMCP
&lt;/pre&gt;&lt;p&gt;and then install the bits very easily.&lt;/p&gt;
&lt;p&gt;What was a little non-obvious (to me at least) was how to get the pkg.depotd
process to only listen on a secured port.&lt;/p&gt;
&lt;p&gt;If you look at the SMF properties for &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;svc:/application/pkg/server&lt;/span&gt;&lt;/code&gt;, you
will observe these two likely-looking candidates:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_1b4f684294ad42fc8a5ea9b1cbd3740b-1" name="rest_code_1b4f684294ad42fc8a5ea9b1cbd3740b-1"&gt;&lt;/a&gt;pkg/ssl_key_file
&lt;a id="rest_code_1b4f684294ad42fc8a5ea9b1cbd3740b-2" name="rest_code_1b4f684294ad42fc8a5ea9b1cbd3740b-2"&gt;&lt;/a&gt;pkg/ssl_cert_file
&lt;/pre&gt;&lt;p&gt;They are not, however, what you need. Running &lt;code class="docutils literal"&gt;pkg/server&lt;/code&gt; outside of
&lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;svc:/application/pkg/depot&lt;/span&gt;&lt;/code&gt; is actually restricted to plain http because
the backing framework here is &lt;a class="reference external" href="http://cherrypy.org"&gt;CherryPy&lt;/a&gt; – and the version which pkg.depotd
uses apparently has some issues with https.&lt;/p&gt;
&lt;p&gt;Hmmph.&lt;/p&gt;
&lt;p&gt;So I asked &lt;a class="reference external" href="https://blogs.oracle.com/lianep"&gt;a&lt;/a&gt; &lt;a class="reference external" href="https://timsfoster.wordpress.com/"&gt;few&lt;/a&gt; &lt;a class="reference external" href="https://blogs.oracle.com/srw/"&gt;colleagues&lt;/a&gt; who have worked on our packaging
system for assistance. &lt;a class="reference external" href="https://blogs.oracle.com/lianep/"&gt;Liane&lt;/a&gt; pointed me at
&lt;a class="reference external" href="https://docs.oracle.com/cd/E23824_01/html/E21803/apache-config.html"&gt;https://docs.oracle.com/cd/E23824_01/html/E21803/apache-config.html&lt;/a&gt;,
which was an excellent place to start. I did, however, need some handholding
from &lt;a class="reference external" href="https://timsfoster.wordpress.com/"&gt;Tim&lt;/a&gt; and eventually wound up with the following configuration which
works with Apache v2.4.&lt;/p&gt;
&lt;p&gt;Firstly, &lt;code class="docutils literal"&gt;/etc/apache2/2.4/httpd.conf&lt;/code&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Follow the Apache docs for enabling ssl&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you’ve settled on the port to run your pkg.depotd on, add a
&lt;code class="docutils literal"&gt;ReWriteRule&lt;/code&gt; like this:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_bf335f53bb7e4b2eac649afeb19babea-1" name="rest_code_bf335f53bb7e4b2eac649afeb19babea-1"&gt;&lt;/a&gt;RewriteEngine On
&lt;a id="rest_code_bf335f53bb7e4b2eac649afeb19babea-2" name="rest_code_bf335f53bb7e4b2eac649afeb19babea-2"&gt;&lt;/a&gt;RewriteRule ^/packages$ https://%{SERVER_NAME}:83 [R,L]
&lt;/pre&gt;&lt;p&gt;Secondly, &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;svc:/application/pkg/depot:default&lt;/span&gt;&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_c94acd3311e94112ae8c8f9f247f4495-1" name="rest_code_c94acd3311e94112ae8c8f9f247f4495-1"&gt;&lt;/a&gt;# svccfg -s application/pkg/depot:default
&lt;a id="rest_code_c94acd3311e94112ae8c8f9f247f4495-2" name="rest_code_c94acd3311e94112ae8c8f9f247f4495-2"&gt;&lt;/a&gt;svc:/application/pkg/depot:default&amp;gt; setprop config/port = 83
&lt;a id="rest_code_c94acd3311e94112ae8c8f9f247f4495-3" name="rest_code_c94acd3311e94112ae8c8f9f247f4495-3"&gt;&lt;/a&gt;svc:/application/pkg/depot:default&amp;gt; setprop config/ssl_ca_cert_file = "/path/to/your/SSL CA cert bundle"
&lt;a id="rest_code_c94acd3311e94112ae8c8f9f247f4495-4" name="rest_code_c94acd3311e94112ae8c8f9f247f4495-4"&gt;&lt;/a&gt;svc:/application/pkg/depot:default&amp;gt; setprop config/ssl_cert_file = "/path/to/your/SSL cert file"
&lt;a id="rest_code_c94acd3311e94112ae8c8f9f247f4495-5" name="rest_code_c94acd3311e94112ae8c8f9f247f4495-5"&gt;&lt;/a&gt;svc:/application/pkg/depot:default&amp;gt; setprop config/ssl_key_file = "/path/to/your/SSL key file"
&lt;a id="rest_code_c94acd3311e94112ae8c8f9f247f4495-6" name="rest_code_c94acd3311e94112ae8c8f9f247f4495-6"&gt;&lt;/a&gt;svc:/application/pkg/depot:default&amp;gt; refresh
&lt;a id="rest_code_c94acd3311e94112ae8c8f9f247f4495-7" name="rest_code_c94acd3311e94112ae8c8f9f247f4495-7"&gt;&lt;/a&gt;svc:/application/pkg/depot:default&amp;gt; quit
&lt;/pre&gt;&lt;p&gt;Thirdly, &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;svc:/application/pkg/server&lt;/span&gt;&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-1" name="rest_code_40004b0566c5445cad931da32d5032b7-1"&gt;&lt;/a&gt;# svccfg -s application/pkg/server add packages
&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-2" name="rest_code_40004b0566c5445cad931da32d5032b7-2"&gt;&lt;/a&gt;# svccfg -s application/pkg/server:packages addpg pkg application
&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-3" name="rest_code_40004b0566c5445cad931da32d5032b7-3"&gt;&lt;/a&gt;# svccfg -s application/pkg/server:packages
&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-4" name="rest_code_40004b0566c5445cad931da32d5032b7-4"&gt;&lt;/a&gt;svc:/application/pkg/server:packages&amp;gt;addprop pkg/proxy_base = astring: "https://your.ssl.url.here/packages"
&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-5" name="rest_code_40004b0566c5445cad931da32d5032b7-5"&gt;&lt;/a&gt;svc:/application/pkg/server:packages&amp;gt;addprop pkg/inst_root = astring: "/path/to/your/REPO/on/disk"
&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-6" name="rest_code_40004b0566c5445cad931da32d5032b7-6"&gt;&lt;/a&gt;svc:/application/pkg/server:packages&amp;gt;addprop pkg/readonly = boolean: true
&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-7" name="rest_code_40004b0566c5445cad931da32d5032b7-7"&gt;&lt;/a&gt;svc:/application/pkg/server:packages&amp;gt;addprop pkg/log_access = astring: "/path/to/access/logfile"
&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-8" name="rest_code_40004b0566c5445cad931da32d5032b7-8"&gt;&lt;/a&gt;svc:/application/pkg/server:packages&amp;gt;addprop pkg/log_errors = astring: "/path/to/error/logfile"
&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-9" name="rest_code_40004b0566c5445cad931da32d5032b7-9"&gt;&lt;/a&gt;svc:/application/pkg/server:packages&amp;gt;addprop pkg/standalone = boolean: false
&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-10" name="rest_code_40004b0566c5445cad931da32d5032b7-10"&gt;&lt;/a&gt;svc:/application/pkg/server:packages&amp;gt;refresh
&lt;a id="rest_code_40004b0566c5445cad931da32d5032b7-11" name="rest_code_40004b0566c5445cad931da32d5032b7-11"&gt;&lt;/a&gt;svc:/application/pkg/server:packages&amp;gt;quit
&lt;/pre&gt;&lt;p&gt;Once you’ve got those steps completed, it’s time to enable the services and
add the publisher:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_b20d0c1c0a564a888775b18d0cc6d75c-1" name="rest_code_b20d0c1c0a564a888775b18d0cc6d75c-1"&gt;&lt;/a&gt;# svcadm enable pkg/server:packages pkg/depot:default
&lt;a id="rest_code_b20d0c1c0a564a888775b18d0cc6d75c-2" name="rest_code_b20d0c1c0a564a888775b18d0cc6d75c-2"&gt;&lt;/a&gt;# pkg set-publisher -g https://your.ssl.url.here/packages/packages yourpublishername
&lt;/pre&gt;&lt;p&gt;Pretty simple (now that you know how).&lt;/p&gt;</description><category>darktable</category><category>Infrastructure</category><category>Photography</category><category>Release Engineering</category><category>Software</category><category>Solaris</category><guid>https://www.jmcpdotcom.com/blog/posts/2015-11-26-a-recipe-for-running-your-pkg-depotd1-server-with-ssl-and-apache-2-4/</guid><pubDate>Thu, 26 Nov 2015 00:00:00 GMT</pubDate></item><item><title>Building a new system to run Solaris 12</title><link>https://www.jmcpdotcom.com/blog/posts/2014-05-31-building-a-new-system-to-run-solaris/</link><dc:creator>jmcp</dc:creator><description>&lt;p&gt;Several years ago I wrote about &lt;a class="reference external" href="https://www.jmcpdotcom.com/blog/2006/10/25/ive-cut-over-to-my-new-ultra20-m2/"&gt;migrating my personal webserver from work's Ultra20 to my own Ultra20 M2&lt;/a&gt;. Sadly, that Ultra20 M2 (dual-core opterons, 2Gb ram) has just about given up being able to cope with what I need it to do.&lt;/p&gt;
&lt;p&gt;Externally, I run the www.jmcpdotcom.com web and mail (client and server) services on it. Internally it's our media server, sharing out our collection of music, photos, movies and TV via NFS to the rpi. I just don't have enough ram in the U20M2 to do the needful, to the extent that when I've needed to transcode media files I do it from my workstation (Lenovo quad-core, 32Gb ram) across the gigabit backbone we're running. Ok, so that's a physical distance of about 1.5m, but it has still meant that I manually schedule intensive tasks for later at night when the family's asleep. That includes &lt;cite&gt;pkg update&lt;/cite&gt; to whatever the latest available build is, since it regularly takes about 3 hours on the U20M2 rather than 15 minutes on my kernel zone or the laptop.&lt;/p&gt;
&lt;p&gt;So... I had to built a new box.&lt;/p&gt;
&lt;p&gt;I did a reasonable amount of research into what I could get, with the general provision that I should be able to bump the cpu and ram up with minimal effort. A high priority (but not mandatory) desire was for an onboard Intel gigabit nic ' they appear to me to be the most robust solution on Solaris today. I also wanted to migrate from the &lt;cite&gt;mpt(7d)&lt;/cite&gt; SAS HBA to an &lt;cite&gt;mpt_sas&lt;/cite&gt; if I could find one cheap enough. What I ended up with was this:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://www.asrock.com/mb/Intel/Fatal1ty%20H87%20Performance/"&gt;ASRock Fatal1ty H87-Performance&lt;/a&gt; motherboard&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://www.intel.com/support/processors/corei3/sb/CS-031170.htm?wapkw=bx80646i34150"&gt;Intel Core I3-4150 (Haswell refresh, BX80646I34150)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;16Gb DDR3 1600MHz ram&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://www.redbooks.ibm.com/abstracts/tips0776.html"&gt;IBM 6 Gb SAS Host Bus Adapter for System x [46M0907]&lt;/a&gt; (an &lt;cite&gt;mpt_sas&lt;/cite&gt; card)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://www.coolermaster.com/case/mid-tower/centurion6/"&gt;Cooler Master Centurion 6'&lt;/a&gt; case&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://www.corsair.com/en/hx-series-hx650-power-supply-650-watt-80-plus-gold-certified-modular-psu"&gt;Corsair HX650 psu (80PLUS Gold)&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="http://www.auscompcomputers.com/index.php?nav=1&amp;amp;cpath=productinfo&amp;amp;pid=II17993&amp;amp;catpath=0_10_180"&gt;Pioneer Blu-Ray combo drive&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'll comment on the specific features of the motherboard and case a little later.&lt;/p&gt;
&lt;p&gt;This motherboard is UEFI, so I couldn't just take the disks out of the U20M2
and boot up the new system straight away. I pulled down the most recent
Solaris 12 text installer usb image, booted and installed a basic bootable
image. The cpio stage (the final stage) took a shade over 2 minutes to blat
the image onto the disk. While it would have been really nice to then &lt;cite&gt;zfs send | zfs recv&lt;/cite&gt;
a snapshot of the U20M2 current BE across to the new box and
try to boot it, I figured I had too many tweaks to make. I do so like
customising my systems, y'see.&lt;/p&gt;
&lt;p&gt;Still, it was very easy to copy across my cyrus-imap, mysql, exim, squid,
privoxy and apache configurations. I also performed the rather simplistic
operation of grabbing the list of installed packages from the U20M2 then
uttering &lt;cite&gt;pkg install $LIST&lt;/cite&gt; in the new system. Since most of them were in my
local cache, that was a fairly quick operation to complete.&lt;/p&gt;
&lt;p&gt;The service which caused me most annoyance was my dhcp server. I run this as a
convenience for the hardware we have (and which visitors might bring) and
while I do manual address assignment for certain systems, it's mostly
completely automatic. After copying the old config files into place and
creating &lt;cite&gt;/var/db/dhcpd.leases&lt;/cite&gt; I thought I'd remembered everything. However,
I'd missed one thing:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-1" name="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-1"&gt;&lt;/a&gt;May &lt;span class="m"&gt;30&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;:14:57 orrery dhcpd: &lt;span class="o"&gt;[&lt;/span&gt;ID &lt;span class="m"&gt;702911&lt;/span&gt; local7.error&lt;span class="o"&gt;]&lt;/span&gt; No subnet declaration &lt;span class="k"&gt;for&lt;/span&gt; ext0 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="m"&gt;192&lt;/span&gt;.168.2.30&lt;span class="o"&gt;)&lt;/span&gt;.
&lt;a id="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-2" name="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-2"&gt;&lt;/a&gt;May &lt;span class="m"&gt;30&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;:14:57 orrery dhcpd: &lt;span class="o"&gt;[&lt;/span&gt;ID &lt;span class="m"&gt;702911&lt;/span&gt; local7.error&lt;span class="o"&gt;]&lt;/span&gt; ** Ignoring requests on ext0.  If this is not what
&lt;a id="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-3" name="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-3"&gt;&lt;/a&gt;May &lt;span class="m"&gt;30&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;:14:57 orrery dhcpd: &lt;span class="o"&gt;[&lt;/span&gt;ID &lt;span class="m"&gt;702911&lt;/span&gt; local7.error&lt;span class="o"&gt;]&lt;/span&gt;    you want, please write a subnet declaration
&lt;a id="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-4" name="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-4"&gt;&lt;/a&gt;May &lt;span class="m"&gt;30&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;:14:57 orrery dhcpd: &lt;span class="o"&gt;[&lt;/span&gt;ID &lt;span class="m"&gt;702911&lt;/span&gt; local7.error&lt;span class="o"&gt;]&lt;/span&gt;    &lt;span class="k"&gt;in&lt;/span&gt; your dhcpd.conf file &lt;span class="k"&gt;for&lt;/span&gt; the network segment
&lt;a id="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-5" name="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-5"&gt;&lt;/a&gt;May &lt;span class="m"&gt;30&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;:14:57 orrery dhcpd: &lt;span class="o"&gt;[&lt;/span&gt;ID &lt;span class="m"&gt;702911&lt;/span&gt; local7.error&lt;span class="o"&gt;]&lt;/span&gt;    to which interface ext0 is attached. **
&lt;a id="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-6" name="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-6"&gt;&lt;/a&gt;May &lt;span class="m"&gt;30&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;:14:57 orrery dhcpd: &lt;span class="o"&gt;[&lt;/span&gt;ID &lt;span class="m"&gt;702911&lt;/span&gt; local7.error&lt;span class="o"&gt;]&lt;/span&gt;
&lt;a id="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-7" name="rest_code_fda5da1574b74c71ba57fab11b9fd9a0-7"&gt;&lt;/a&gt;May &lt;span class="m"&gt;30&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;:15:04 orrery dhcpd: &lt;span class="o"&gt;[&lt;/span&gt;ID &lt;span class="m"&gt;702911&lt;/span&gt; local7.error&lt;span class="o"&gt;]&lt;/span&gt; setsockopt: IP_PKTINFO: Bad file number
&lt;/pre&gt;&lt;p&gt;I've got two interfaces on this box, one physical, one vnic:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_867ff718c3164d9aa9a4492aa345e146-1" name="rest_code_867ff718c3164d9aa9a4492aa345e146-1"&gt;&lt;/a&gt;$ dladm show-phys&lt;span class="p"&gt;;&lt;/span&gt; dladm show-vnic &lt;span class="p"&gt;;&lt;/span&gt; dladm show-ether
&lt;a id="rest_code_867ff718c3164d9aa9a4492aa345e146-2" name="rest_code_867ff718c3164d9aa9a4492aa345e146-2"&gt;&lt;/a&gt;LINK              MEDIA                STATE      SPEED  DUPLEX    DEVICE
&lt;a id="rest_code_867ff718c3164d9aa9a4492aa345e146-3" name="rest_code_867ff718c3164d9aa9a4492aa345e146-3"&gt;&lt;/a&gt;net0              Ethernet             up         &lt;span class="m"&gt;1000&lt;/span&gt;   full      e1000g0
&lt;a id="rest_code_867ff718c3164d9aa9a4492aa345e146-4" name="rest_code_867ff718c3164d9aa9a4492aa345e146-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_867ff718c3164d9aa9a4492aa345e146-5" name="rest_code_867ff718c3164d9aa9a4492aa345e146-5"&gt;&lt;/a&gt;LINK              OVER              SPEED  MACADDRESS        MACADDRTYPE VIDS
&lt;a id="rest_code_867ff718c3164d9aa9a4492aa345e146-6" name="rest_code_867ff718c3164d9aa9a4492aa345e146-6"&gt;&lt;/a&gt;ext0              net0              &lt;span class="m"&gt;1000&lt;/span&gt;   &lt;span class="m"&gt;2&lt;/span&gt;:8:20:6e:f5:f5   fixed       &lt;span class="m"&gt;0&lt;/span&gt;
&lt;a id="rest_code_867ff718c3164d9aa9a4492aa345e146-7" name="rest_code_867ff718c3164d9aa9a4492aa345e146-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_867ff718c3164d9aa9a4492aa345e146-8" name="rest_code_867ff718c3164d9aa9a4492aa345e146-8"&gt;&lt;/a&gt;LINK              PTYPE    STATE    AUTO  SPEED-DUPLEX                    PAUSE
&lt;a id="rest_code_867ff718c3164d9aa9a4492aa345e146-9" name="rest_code_867ff718c3164d9aa9a4492aa345e146-9"&gt;&lt;/a&gt;net0              current  up       yes   1G-f                            bi
&lt;/pre&gt;&lt;p&gt;(The U20M2 has two physical nge interfaces; I'd like to get another physical
gig-E nic for this new system at some point).&lt;/p&gt;
&lt;p&gt;The thing I'd forgotten to do was tell the dhcp server which interfaces to
listen on. I don't want it to listen on ext0, just net0.&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_c9aef950beca4e88ac3888d2f493e23b-1" name="rest_code_c9aef950beca4e88ac3888d2f493e23b-1"&gt;&lt;/a&gt;$ sudo svccfg -s dhcp/server:ipv4
&lt;a id="rest_code_c9aef950beca4e88ac3888d2f493e23b-2" name="rest_code_c9aef950beca4e88ac3888d2f493e23b-2"&gt;&lt;/a&gt;Password:
&lt;a id="rest_code_c9aef950beca4e88ac3888d2f493e23b-3" name="rest_code_c9aef950beca4e88ac3888d2f493e23b-3"&gt;&lt;/a&gt;svc:/network/dhcp/server:ipv4&amp;gt; listprop config/listen_ifnames
&lt;a id="rest_code_c9aef950beca4e88ac3888d2f493e23b-4" name="rest_code_c9aef950beca4e88ac3888d2f493e23b-4"&gt;&lt;/a&gt;config/listen_ifnames astring
&lt;a id="rest_code_c9aef950beca4e88ac3888d2f493e23b-5" name="rest_code_c9aef950beca4e88ac3888d2f493e23b-5"&gt;&lt;/a&gt;svc:/network/dhcp/server:ipv4&amp;gt;
&lt;/pre&gt;&lt;p&gt;This, fortunately, is a very easy thing to fix:&lt;/p&gt;
&lt;pre class="code shell"&gt;&lt;a id="rest_code_e8de80d96ac8416eb61b88076465c422-1" name="rest_code_e8de80d96ac8416eb61b88076465c422-1"&gt;&lt;/a&gt;svc:/network/dhcp/server:ipv4&amp;gt; setprop config/listen_ifnames &lt;span class="o"&gt;=&lt;/span&gt; net0
&lt;a id="rest_code_e8de80d96ac8416eb61b88076465c422-2" name="rest_code_e8de80d96ac8416eb61b88076465c422-2"&gt;&lt;/a&gt;svc:/network/dhcp/server:ipv4&amp;gt; refresh
&lt;a id="rest_code_e8de80d96ac8416eb61b88076465c422-3" name="rest_code_e8de80d96ac8416eb61b88076465c422-3"&gt;&lt;/a&gt;svc:/network/dhcp/server:ipv4&amp;gt; end
&lt;a id="rest_code_e8de80d96ac8416eb61b88076465c422-4" name="rest_code_e8de80d96ac8416eb61b88076465c422-4"&gt;&lt;/a&gt;svc:/network/dhcp/server:ipv4&amp;gt; quit
&lt;a id="rest_code_e8de80d96ac8416eb61b88076465c422-5" name="rest_code_e8de80d96ac8416eb61b88076465c422-5"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# svcadm refresh dhcp/server:ipv4 ; svcadm restart dhcp/server:ipv4&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;And off we went.&lt;/p&gt;
&lt;p&gt;The next phase was to power down both old and new systems, and transfer
disks. The IBM &lt;a class="reference external" href="http://www.redbooks.ibm.com/abstracts/tips0776.html"&gt;mpt_sas card&lt;/a&gt; only has one external
SFF-8088 interface, but has four internal SATA connectors. I took four disks
out of the 8disk &lt;a class="reference external" href="http://eshop.macsales.com/item/Sans%20Digital/TR8XPLUS/"&gt;Sans Digital TowerRAID TR8X+&lt;/a&gt;  (an 8 Bay SAS/SATA
JBOD) and installed them
inside the Cooler Master case, then booted up again.&lt;/p&gt;
&lt;p&gt;All the ZFS pools imported without any hassles,
apache/squid/exim/dhcp/cyrus-imap all came up immediately.. ALL GOOD!&lt;/p&gt;
&lt;p&gt;Since one aspect of the zpool import was automatic enabling of the various nfs and smb shares, the new system was then declared to Be Sufficient(tm) and have WAF &amp;gt; 0.&lt;/p&gt;
&lt;p&gt;Phew!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A note on the case&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Having worked in on and around Sun (now Oracle)-designed hardware for quite a few years now, I'm delighted to see that concepts like disk sled rails have trickled down to the consumer end of the market. That said, why would you advertise a case as accepting 7 3.5" internal disks, but only supply rails for 4 disks? Also, I found it a bit difficult to get the SATA power and data cables connected to the internal disks without taking off the back side of the case as well. This is an area where a &lt;a class="reference external" href="http://www.memoryten.com/p/2003036.htm"&gt;SATA disk backplane&lt;/a&gt;&lt;/p&gt;
&lt;img alt="http://www.nessales.com/ebay/20507/Sun%20Ultra%2020%20TF-PWA%20SAS%20SATA%20Disk%20Backplane%20373-0057-01%20Pic%202.jpg" src="http://www.nessales.com/ebay/20507/Sun%20Ultra%2020%20TF-PWA%20SAS%20SATA%20Disk%20Backplane%20373-0057-01%20Pic%202.jpg"&gt;
&lt;p&gt;comes in handy. I'd pay another AUD30 on top of the case price for a feature like that. Just sayin'.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A note on the motherboard&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While I'd really like to have two onboard Intel gigE nics, I'm fine with just one. There's plenty of headroom for adding a PCI-E x1 (or even a PCI) card to handle that. There are the standard 4 DDR3 slots, currently populated with 4Gb dimms ' seems like plenty, at least for the moment. There's a serial port header if I want to get that set up (meh.... maybe), and the only niggle I have is that the Intel HD Audio doesn't seem to be supported by &lt;cite&gt;audiohd&lt;/cite&gt; at the moment. I'll log a bug for that but really, who needs audio output capabilities on a server?&lt;/p&gt;
&lt;p&gt;For El Goog: here's the output of &lt;cite&gt;prtconf -v&lt;/cite&gt; for the board: &lt;a class="reference external" href="https://www.jmcpdotcom.com/~jmcp/ASRock_Fatal1ty_H87-prtconf-v.txt"&gt;ASRock_Fatal1ty_H87-prtconf-v.txt&lt;/a&gt;. I don't have &lt;cite&gt;lspci&lt;/cite&gt;, but I do have &lt;cite&gt;scanpci&lt;/cite&gt; output: &lt;a class="reference external" href="https://www.jmcpdotcom.com/~jmcp/ASRock_Fatal1ty_H87-scanpci.txt"&gt;ASRock_Fatal1ty_H87-scanpci.txt&lt;/a&gt; and &lt;a class="reference external" href="https://www.jmcpdotcom.com/~jmcp/ASRock_Fatal1ty_H87-scanpci-v.txt"&gt;ASRock_Fatal1ty_H87-scanpci-v.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I hope you find it useful.&lt;/p&gt;</description><category>"It Just Works"</category><category>ASRock</category><category>Hardware</category><category>Infrastructure</category><category>mpt_sas</category><category>prtconf</category><category>scanpci</category><category>Software</category><category>Solaris</category><guid>https://www.jmcpdotcom.com/blog/posts/2014-05-31-building-a-new-system-to-run-solaris/</guid><pubDate>Sat, 31 May 2014 03:03:06 GMT</pubDate></item><item><title>A collection of laziness</title><link>https://www.jmcpdotcom.com/blog/posts/2013-02-16-a-collection-of-laziness/</link><dc:creator>jmcp</dc:creator><description>&lt;p&gt;In preparation for my trip to Wellington next week, to present at the &lt;a class="reference external" href="http://www.multicoreworld.com"&gt;Multicore World 2013&lt;/a&gt; &lt;a class="reference external" href="http://multicoreworld.com/public/conferences/1/schedConfs/2/program-en_US.pdf"&gt;conference&lt;/a&gt;, I’ve been building up a new vbox instance on my laptop.&lt;/p&gt;
&lt;p&gt;To my great annoyance, I have to run Microsoft Windows 7 (x64) on my laptop, for three reasons: $EMPLOYER uses Cisco IP Communicator as a VoIP solution (no Solaris version), when I travel OS I call J and the kids every day using skype video calling, and the Intel HD graphics support in Xorg on Solaris is somewhat flaky.&lt;/p&gt;
&lt;p&gt;So I run Solaris inside vbox, in seamless mode, and do all my coding and sysadminning tasks using Proper Editors(tm) and other interfaces.&lt;/p&gt;
&lt;p&gt;Here’s the first bit of laziness: installations.&lt;/p&gt;
&lt;p&gt;Two weeks ago I took delivery of a new workstation (a Lenovo M82, which promptly received a memory, disk and graphics upgrade) to replace the aging, hot and noisy Ultra40 M2 I’ve had since 2007. I downloaded the latest (at that point) USB live image from the internal site and happily booted + installed what I needed to… before remembering that the installer blats over any existing disk partitioning you’ve got. That was rather annoying, since I like to use raw slices for swap and dump devices (an old habit) rather than zvols. In order to keep my existing configurations, I cheated. Just a little (ok, rather a lot).&lt;/p&gt;
&lt;p&gt;Technically, I should have setup an AI server and gone through my list of installed packages and made sure that I had them listed, blah blah blah. However, what I chose to do was zfs snap my current BE, boot the new box using the liveusb image (with livessh mode enabled), create my desired rpool config, then zfs send|zfs recv the snapshot… and mount the snapshot, make appropriate edits, install the bootloader and then reboot.&lt;/p&gt;
&lt;p&gt;Simple!&lt;/p&gt;
&lt;p&gt;It took about 25 minutes to transfer the snapshot from the Ultra 40 M2 to the Lenovo M82 (I’ve got a 16 port cheap-o gigE switch to connect the home systems), and about another 5 to go through the specific changes I needed in /etc (apart from those for &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;svc:/system/identity:node&lt;/span&gt;&lt;/code&gt; and &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;svc:/system/identity:domain&lt;/span&gt;&lt;/code&gt;. Installing the bootloader (grub2) was easy, but I had a weird problem getting the new system’s boot menu figured out. I ended up needing to remove &lt;code class="docutils literal"&gt;/etc/zfs/zpool.cache&lt;/code&gt; and then recreating it (by running zpool status; zpool list would have done just as well). The SMF changes were done while I had the liveusb stick booted. To do this, after importing the new rpool I uttered&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_12e036dd3483464ab2026ab50f138379-1" name="rest_code_12e036dd3483464ab2026ab50f138379-1"&gt;&lt;/a&gt;# svccfg
&lt;a id="rest_code_12e036dd3483464ab2026ab50f138379-2" name="rest_code_12e036dd3483464ab2026ab50f138379-2"&gt;&lt;/a&gt;svc:&amp;gt;  repository /mnt/etc/svc/repository.db
&lt;/pre&gt;&lt;p&gt;and then selected the services I needed and edited them.&lt;/p&gt;
&lt;p&gt;Prior to getting this Lenovo, I’d been using a non-global zone in the Ultra 40 M2 to serve out my webserver and handle mail. Part of this reconfiguration involved getting a miniSAS-connected jbod (from Other World Computing, shipped via Borderlinx) and physically moving my media and scratch pool disks into it. Then I attached the jbod to my Ultra 20 M2, and I just had to bring that up to date. So I snap’d the zone BE on the Ultra 40 M2, and send|recv’d it to the rpool on the Ultra 20 M2 – same liveusb+livessh sneakiness, same svccfg activities … and all done in under 30 minutes.&lt;/p&gt;
&lt;p&gt;The longest part of the physical downtime was swapping the screws on the disk caddies when I removed them from the Ultra 40 M2 and inserted them into the jbod.&lt;/p&gt;
&lt;p&gt;The second bit of laziness is not really laziness. I had a filesystem on the old box which I wanted to transfer to the new, and tried using rsync to move it. I’m a big fan of rsync, it does its job pretty well… mostly. However, this time it just wasn’t performing at all. I had about 8Gb to transfer, and after 30 minutes not only had I only seen 1.5Gb go across the wire, but trying to do any interactive work on the console of the other box was impossible. And I do mean, impossible – I got no response to keystrokes unless I paused the rsync. Then, having kicked myself because I really did just want the filesystem which happened to be on its own dataset, I snap’d it and kicked off a zfs send | zfs recv. All data then completely transferred in about 12 minutes. And with interactive performance going very nicely as well.&lt;/p&gt;
&lt;p&gt;Now for the final bit of laziness:&lt;/p&gt;
&lt;p&gt;Cut to yesterday, when I remembered that I really should get a new Vbox instance cons’d up on the laptop in preparation for my trips (I’ve got WLG next week, and SCA in mid-March). I still had the build 13 liveusb stick image, and I just could not be bothered downloading the equivalent ISO image so that I could boot the vbox with it. Running &lt;code class="docutils literal"&gt;strings&lt;/code&gt; on an older Solaris 11 update 1 ISO showed the mkisofs command line that Release Engineering used to create it. So, I figured I would copy their example.&lt;/p&gt;
&lt;p&gt;Firstly, I needed to mount the USB image in the filesystem:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_84e692d578cd4931be3718e66797da3a-1" name="rest_code_84e692d578cd4931be3718e66797da3a-1"&gt;&lt;/a&gt;# lofiadm -a /path/to/liveusb.img
&lt;a id="rest_code_84e692d578cd4931be3718e66797da3a-2" name="rest_code_84e692d578cd4931be3718e66797da3a-2"&gt;&lt;/a&gt;/dev/lofi/1
&lt;a id="rest_code_84e692d578cd4931be3718e66797da3a-3" name="rest_code_84e692d578cd4931be3718e66797da3a-3"&gt;&lt;/a&gt;# fstyp /dev/lofi/1
&lt;a id="rest_code_84e692d578cd4931be3718e66797da3a-4" name="rest_code_84e692d578cd4931be3718e66797da3a-4"&gt;&lt;/a&gt;ufs
&lt;a id="rest_code_84e692d578cd4931be3718e66797da3a-5" name="rest_code_84e692d578cd4931be3718e66797da3a-5"&gt;&lt;/a&gt;# mount -F ufs -o rw /dev/lofi/1 /mnt
&lt;/pre&gt;&lt;p&gt;Great… UFS. Ugh. Now to create a bootable ISO from it:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_dab943ab3d5948e0b92e445325cd23d5-1" name="rest_code_dab943ab3d5948e0b92e445325cd23d5-1"&gt;&lt;/a&gt;# mkisofs -v -R -J -o /tmp/bootable.iso -c .catalog -b boot/bios.img -no-emul-boot -boot-load-size 4 \
&lt;a id="rest_code_dab943ab3d5948e0b92e445325cd23d5-2" name="rest_code_dab943ab3d5948e0b92e445325cd23d5-2"&gt;&lt;/a&gt;    -boot-info-table -eltorito-platform efi -eltorito-alt-boot -b boot/uefi.img -no-emul-boot \
&lt;a id="rest_code_dab943ab3d5948e0b92e445325cd23d5-3" name="rest_code_dab943ab3d5948e0b92e445325cd23d5-3"&gt;&lt;/a&gt;    -N -l -R -U -allow-multidot -no-iso-translate -cache-inodes -d -D  /mnt
&lt;/pre&gt;&lt;p&gt;This commandline gave me exactly what I needed, so I moved the resulting ISO image across to the fileserver, fired up VirtualBox on the laptop and attached the image to my new vbox instance, and started installing.&lt;/p&gt;
&lt;p&gt;Easy (and rather quick, too).&lt;/p&gt;</description><category>Engineering</category><category>Infrastructure</category><category>OpenSolaris</category><category>Software</category><category>Solaris</category><category>Status</category><category>Travel</category><category>ZFS</category><guid>https://www.jmcpdotcom.com/blog/posts/2013-02-16-a-collection-of-laziness/</guid><pubDate>Sat, 16 Feb 2013 00:00:00 GMT</pubDate></item><item><title> Notes to self: getting a ripped DVD image to play on the Beyonwiz</title><link>https://www.jmcpdotcom.com/blog/posts/2012-06-26-notes-to-self-getting-a-ripped-dvd-image-to-play-on-the-beyonwiz/</link><dc:creator>jmcp</dc:creator><description>&lt;p&gt;Over the last few months I’ve been ripping our dvd collection[1] to files, so we can play them over the network on our PVR (&lt;a class="reference external" href="http://www.beyonwiz.com.au"&gt;Beyonwiz&lt;/a&gt; &lt;a class="reference external" href="http://www.beyonwiz.com.au/products.php?id=6"&gt;DP-P2&lt;/a&gt;) in a much more convenient fashion &lt;em&gt;for us&lt;/em&gt; than finding the dvd and mucking around with the dvd player. C has been particularly enamoured of our &lt;a class="reference external" href="http://www.pixar.com"&gt;Pixar&lt;/a&gt; collection: Toy Story; Toy Story 2; Monsters, Inc; Finding Nemo; (we have others, but she’s too young to watch them yet).&lt;/p&gt;
&lt;p&gt;One aspect of this which has made things painful for J and I is that when we’re playing these &lt;a class="reference external" href="https://en.wikipedia.org/wiki/Matroska"&gt;Matroska&lt;/a&gt; files, the audio is out of sync with the video. The problem starts at the start of playback, and over the course of a movie gets to the state where the difference is 3 to 4 &lt;em&gt;seconds&lt;/em&gt;. Most definitely headache-inducing stuff for us, but C doesn’t appear to notice or care – for now!&lt;/p&gt;
&lt;p&gt;I did a bit of digging over the last day or so (you can see its relative importance in my stack of tasks!) and discovered that there are two components to the problem. Firstly, the Beyonwiz doesn’t seem to cope with Matroska files that have embedded chapter entities. Secondly, the Beyonwiz doesn’t seem to cope with more than one audio track (aac and ac3, for these) embedded in a Matroska file.&lt;/p&gt;
&lt;p&gt;To fix this, I made a copy of my original Matroska file because when we upgrade our playback capabilities (to something with more grunt, and using either &lt;a class="reference external" href="http://www.xbmc.org"&gt;xbmc&lt;/a&gt; or &lt;a class="reference external" href="http://www.plexapp.com"&gt;Plex&lt;/a&gt;), this won’t be a problem. I used &lt;a class="reference external" href="http://www.bunkus.org/videotools/mkvtoolnix"&gt;mkvpropedit&lt;/a&gt; to remove the chapter markers from the copy, and then used &lt;a class="reference external" href="http://www.ffmpeg.org"&gt;ffmpeg&lt;/a&gt; to transcode the copy to an mp4 and generally fix everything else.&lt;/p&gt;
&lt;p&gt;Command-line wise, it went like this:&lt;/p&gt;
&lt;pre class="code text"&gt;&lt;a id="rest_code_9fd0f85474b84dfcbd1fc38bac05b720-1" name="rest_code_9fd0f85474b84dfcbd1fc38bac05b720-1"&gt;&lt;/a&gt;$ cp Toy_Story.mkv TS_1.mkv
&lt;a id="rest_code_9fd0f85474b84dfcbd1fc38bac05b720-2" name="rest_code_9fd0f85474b84dfcbd1fc38bac05b720-2"&gt;&lt;/a&gt;$ mkvpropedit -c "" TS_1.mkv
&lt;a id="rest_code_9fd0f85474b84dfcbd1fc38bac05b720-3" name="rest_code_9fd0f85474b84dfcbd1fc38bac05b720-3"&gt;&lt;/a&gt;$ ffmpeg -i TS_1.mkv -vcodec libx264 -acodec copy -ab 160 Toy_Story.mp4
&lt;/pre&gt;&lt;p&gt;Both ffmpeg and mkvpropedit came from the OpenIndiana SFE repos (&lt;a class="reference external" href="http://pkg.openindiana.org/sfe"&gt;http://pkg.openindiana.org/sfe&lt;/a&gt; and &lt;a class="reference external" href="http://pkg.openindiana.org/sfe-encumbered"&gt;http://pkg.openindiana.org/sfe-encumbered&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Now the only problem I have to work around on the Beyonwiz is that it seems to have a memory leak with playing mkv or mp4 files, so if I try to play one and get the ‘Unsupported format’ error a reboot of the appliance is required. Tedious, but simple. Wish I had the source…..&lt;/p&gt;
&lt;p&gt;[1] NOTE: this is our own, we-paid-hard-cash-for-the-disks DVD collection.&lt;/p&gt;</description><category>family</category><category>Hardware</category><category>Infrastructure</category><category>OpenSolaris</category><category>Software</category><category>Solaris</category><guid>https://www.jmcpdotcom.com/blog/posts/2012-06-26-notes-to-self-getting-a-ripped-dvd-image-to-play-on-the-beyonwiz/</guid><pubDate>Tue, 26 Jun 2012 00:00:00 GMT</pubDate></item><item><title> Some shuffling of deckchairs</title><link>https://www.jmcpdotcom.com/blog/posts/2012-06-16-some-shuffling-of-deckchairs/</link><dc:creator>jmcp</dc:creator><description>&lt;p&gt;I’ve moved off the homeunix.com subdomain I’ve been using for the past few years. It seems that not only did I not read the email from &lt;a class="reference external" href="http://www.dyndns.org"&gt;DynDNS.org&lt;/a&gt; in June 2010, but that requesting an AAAA record for jmcp.homeunix.com was sufficient of a change to take that subdomain out of the grandfathered list and &lt;em&gt;also&lt;/em&gt; turn off domain wildcarding.&lt;/p&gt;
&lt;p&gt;Boo.&lt;/p&gt;
&lt;p&gt;I figured that I might as well go for a proper vanity domain, so here it is: jmcpdotcom.com.&lt;/p&gt;
&lt;p&gt;I think I’ve fixed up most of the links in various posts, but if you find one that’s still pointed incorrectly I’d appreciate a comment or email to advise.&lt;/p&gt;</description><category>General</category><category>Infrastructure</category><category>Status</category><guid>https://www.jmcpdotcom.com/blog/posts/2012-06-16-some-shuffling-of-deckchairs/</guid><pubDate>Sat, 16 Jun 2012 00:00:00 GMT</pubDate></item><item><title> Xpra 0.3.0 Solaris 11 package (x86) now available</title><link>https://www.jmcpdotcom.com/blog/posts/2012-05-23-xpra-0-3-0-solaris-11-package-x86-now-available/</link><dc:creator>jmcp</dc:creator><description>&lt;p&gt;Antoine made &lt;a class="reference external" href="http://lists.devloop.org.uk/pipermail/shifter-users/2012-May/000193.html"&gt;the announcement&lt;/a&gt; about Xpra getting the bump to 0.3.0 overnight. I’ve now built an x86 package of it, and it’s available &lt;a class="reference external" href="http://www.jmcpdotcom.com/Packages/Xpra.0.3.0.p5p.gz"&gt;from my usual package location&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I built it with &lt;code class="docutils literal"&gt;&lt;span class="pre"&gt;CFLAGS="-xlibmil&lt;/span&gt; &lt;span class="pre"&gt;-xlibmopt&lt;/span&gt; &lt;span class="pre"&gt;-xO5"&lt;/span&gt;&lt;/code&gt; using the &lt;a class="reference external" href="http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index-jsp-141149.html"&gt;Oracle Solaris Studio 12.3 compiler&lt;/a&gt;, but again, without vpx or x264.&lt;/p&gt;</description><category>Infrastructure</category><category>OpenSolaris</category><category>Software</category><category>Solaris</category><guid>https://www.jmcpdotcom.com/blog/posts/2012-05-23-xpra-0-3-0-solaris-11-package-x86-now-available/</guid><pubDate>Wed, 23 May 2012 00:00:00 GMT</pubDate></item><item><title> Solaris 11 package for Xpra (x86)</title><link>https://www.jmcpdotcom.com/blog/posts/2012-05-08-solaris-11-package-for-xpra-x86/</link><dc:creator>jmcp</dc:creator><description>&lt;p&gt;A while ago I &lt;a class="reference external" href="http://www.jmcpdotcom.com/blog/2012/02/13/cool-utility-of-the-week-xpra"&gt;mentioned&lt;/a&gt; that I had stumbled upon &lt;a class="reference external" href="http://xpra.org"&gt;Xpra&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’ve started building a Solaris 11 x86 package of &lt;a class="reference external" href="http://xpra.org"&gt;Xpra&lt;/a&gt;, purely because
it’s useful to me and I hope others might find it useful too. I’ll try to get
the manifest and build script included in the Xpra svn repo, but in the
meantime you may grab a copy &lt;a class="reference external" href="http://www.jmcpdotcom.com/~jmcp/Xpra_ips.tar"&gt;Xpra_ips.tar&lt;/a&gt; at your leisure.&lt;/p&gt;
&lt;p&gt;I haven’t included the vpx or x264 support options since they require codecs
which I haven’t built and I’m not interested in having to worry about their
legalities.&lt;/p&gt;
&lt;p&gt;Apart from that, it’s a vanilla build.&lt;/p&gt;
&lt;p&gt;The gzipped p5p is &lt;a class="reference external" href="http://www.jmcpdotcom.com/Packages/Xpra.783.p5p.gz"&gt;available here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please let me know if you have problems with it – especially any missing dependencies.&lt;/p&gt;</description><category>Infrastructure</category><category>OpenSolaris</category><category>Software</category><category>Solaris</category><guid>https://www.jmcpdotcom.com/blog/posts/2012-05-08-solaris-11-package-for-xpra-x86/</guid><pubDate>Tue, 08 May 2012 00:00:00 GMT</pubDate></item></channel></rss>