From the Canyon Edge -- :-Dustin

Wednesday, April 27, 2016

Canonical and IBM Webinar -- Ubuntu on POWER and LinuxOne

I'm delighted to share the slides from our joint IBM and Canonical webinar about Ubuntu on IBM POWER8 and LinuxOne servers.  You can download the PDF here, watch the recording here, or tab through the slides or watch the video embedded below.  Enjoy!


Sunday, April 24, 2016

Keep OpenStack Weird

The OpenStack Summit in Austin has already kicked off, and this time, Ubuntu is the official lanyard sponsor at OpenStack Summit Austin.

The sponsorship contract for the OpenStack Summit explicitly states that only the official lanyard sponsor may distribute lanyards. Whilst we understand the reason that clause is there, we don't agree with it. It just doesn't seem very "open" nor in the spirit of OpenStack.

Freedom of choice is an important aspect of all open source communities and one that we certainly champion, so attendees should be free to wear whatever branded lanyard they want with pride at the OpenStack Summit in Austin and we at Canonical will celebrate it.  My hometown here, Austin, prides itself on diversity, where we like to Keep Austin Weird!

So please -- partners, customers, competitors, other OpenStack Sponsors: if you want to distribute your own lanyards then please go ahead safe in the knowledge that Canonical will not complain to the conference organizers.  Let's Keep OpenStack (a little bit) Weird, too!

See you there!

Wednesday, April 20, 2016

By the numbers: Ubuntu 16.04 LTS

I happen to have a full mirror of the entire Ubuntu Xenial archive here on a local SSD, and I took the opportunity to run a few numbers...
  • 6: This is our 6th Ubuntu LTS
    • 6.06, 8.04, 10.04, 12.04, 14.04, 16.04
  • 7: With Ubuntu 16.04 LTS, we're supporting 7 CPU architectures
    • armhf, arm64, i386, amd64, powerpc, ppc64el, s390x
  • 25,671: Ubuntu 16.04 LTS is comprised of 25,671 source packages
    • main, universe, restricted, multiverse
  • 150,562+: Over 150,562 (and counting!) cloud instances of Xenial have launched to date
    • and we haven't even officially released yet!
  • 216,475: A complete archive of all binary .deb packages in Ubuntu 16.04 LTS consists of 216,475 debs.
    • 24,803 arch independent
    • 27,159 armhf
    • 26,845 arm64
    • 28,730 i386
    • 28,902 amd64
    • 27,061 powerpc
    • 26,837 ppc64el
    • 26,138 s390x
  • 1,426,792,926: A total line count of all source packages in Ubuntu 16.04 LTS using cloc yields 1,426,792,926 total lines of source code
  • 250,478,341,568: A complete archive all debs, all architectures in Ubuntu 16.04 LTS requires 250GB of disk space
Yes, that's 1.4 billion lines of source code comprising the entire Ubuntu 16.04 LTS archive.  What an amazing achievement of open source development!

Perhaps my fellow nerds here might be interested in a breakdown of all 1.4 billion lines across 25K source packages, and throughout 176 different programming languages, as measured by Al Danial's cloc utility.  Interesting data!

You can see the full list here.  What further insight can you glean?


Thursday, April 14, 2016

Docker 1.10 with Fan Networking in Ubuntu 16.04, for Every Architecture!

I'm thrilled to introduce Docker 1.10.3, available on every Ubuntu architecture, for Ubuntu 16.04 LTS, and announce the General Availability of Ubuntu Fan Networking!

That's Ubuntu Docker binaries and Ubuntu Docker images for:
  • armhf (rpi2, et al. IoT devices)
  • arm64 (Cavium, et al. servers)
  • i686 (does anyone seriously still run 32-bit intel servers?)
  • amd64 (most servers and clouds under the sun)
  • ppc64el (OpenPower and IBM POWER8 machine learning super servers)
  • s390x (IBM System Z LinuxOne super uptime mainframes)
That's Docker-Docker-Docker-Docker-Docker-Docker, from the smallest Raspberry Pi's to the biggest IBM mainframes in the world today!  Never more than one 'sudo apt install' command away.

Moreover, we now have Docker running inside of LXD!  Containers all the way down.  Application containers (e.g. Docker), inside of Machine containers (e.g. LXD), inside of Virtual Machines (e.g. KVM), inside of a public or private cloud (e.g. Azure, OpenStack), running on bare metal (take your pick).

Let's have a look at launching a Docker application container inside of a LXD machine container:

kirkland@x250:~⟫ lxc launch ubuntu-daily:x -p default -p docker
Creating magical-damion
Starting magical-damion
kirkland@x250:~⟫ lxc list | grep RUNNING
| magical-damion | RUNNING | (eth0) |      | PERSISTENT | 0         |
kirkland@x250:~⟫ lxc exec magical-damion bash
root@magical-damion:~# apt update >/dev/null 2>&1 ; apt install -y >/dev/null 2>&1 
root@magical-damion:~# docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
759d6771041e: Pull complete 
8836b825667b: Pull complete 
c2f5e51744e6: Pull complete 
a3ed95caeb02: Pull complete 
Digest: sha256:b4dbab2d8029edddfe494f42183de20b7e2e871a424ff16ffe7b15a31f102536
Status: Downloaded newer image for ubuntu:latest
root@0577bd7d5db1:/# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02  
          inet addr:  Bcast:  Mask:
          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1296 (1.2 KB)  TX bytes:648 (648.0 B)

Oh, and let's talk about networking...  We're also pleased to announce the general availability of Ubuntu Fan networking -- specially designed to connect all of your Docker containers spread across your network.  Ubuntu's Fan networking feature is an easy way to make every Docker container on your local network easily addressable by every other Docker host and container on the same network.  It's high performance, super simple, utterly deterministic, and we've tested it on every major public cloud as well as OpenStack and our private networks.

Simply installing Ubuntu's Docker package will also install the ubuntu-fan package, which provides an interactive setup script, fanatic, should you choose to join the Fan.  Simply run 'sudo fanatic' and answer the questions.  You can trivially revert your Fan networking setup easily with 'sudo fanatic deconfigure'.

kirkland@x250:~$ sudo fanatic 
Welcome to the fanatic fan networking wizard.  This will help you set
up an example fan network and optionally configure docker and/or LXD to
use this network.  See fanatic(1) for more details.
Configure fan underlay (hit return to accept, or specify alternative) []: 
Configure fan overlay (hit return to accept, or specify alternative) []: 
Create LXD networking for underlay: overlay: [Yn]: n
Create docker networking for underlay: overlay: [Yn]: Y
Test docker networking for underlay: overlay:
(NOTE: potentially triggers large image downloads) [Yn]: Y
local docker test: creating test container ...
test master: ping test ( ...
test slave: ping test ( ...
test master: ping test ... PASS
test master: short data test ( -> ...
test slave: ping test ... PASS
test slave: short data test ( -> ...
test master: short data ... PASS
test slave: short data ... PASS
test slave: long data test ( -> ...
test master: long data test ( -> ...
test master: long data ... PASS
test slave: long data ... PASS
local docker test: destroying test container ...
local docker test: test complete PASS (master=0 slave=0)
This host IP address:

I've run 'sudo fanatic' here on a couple of machines on my network -- x250 ( and masterbr (, and now I'm going to launch a Docker container on each of those two machines, obtain each IP address on the Fan (250.x.y.z), install iperf, and test the connectivity and bandwidth between each of them (on my gigabit home network).  You'll see that we'll get 900mbps+ of throughput:

kirkland@x250:~⟫ sudo docker run -it ubuntu bash
root@c22cf0d8e1f7:/#  apt update >/dev/null 2>&1 ; apt install -y iperf >/dev/null 2>&1
root@c22cf0d8e1f7:/#  ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 02:42:fa:00:2d:00  
          inet addr:  Bcast:  Mask:
          inet6 addr: fe80::42:faff:fe00:2d00/64 Scope:Link
          RX packets:6423 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4120 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:22065202 (22.0 MB)  TX bytes:227225 (227.2 KB)

root@c22cf0d8e1f7:/# iperf -c
multicast ttl failed: Invalid argument
Client connecting to, TCP port 5001
TCP window size: 45.0 KByte (default)
[  3] local port 54274 connected with port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1.05 GBytes   902 Mbits/sec

And the second machine:
kirkland@masterbr:~⟫ sudo docker run -it ubuntu bash
root@effc8fe2513d:/#  apt update >/dev/null 2>&1 ; apt install -y iperf >/dev/null 2>&1
root@effc8fe2513d:/#  ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 02:42:fa:00:08:00  
          inet addr:  Bcast:  Mask:
          inet6 addr: fe80::42:faff:fe00:800/64 Scope:Link
          RX packets:7659 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3433 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:22131852 (22.1 MB)  TX bytes:189875 (189.8 KB)

root@effc8fe2513d:/# iperf -s
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
[  4] local port 5001 connected with port 54274
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.0 sec  1.05 GBytes   899 Mbits/sec

Finally, let's have another long hard look at the image from the top of this post.  Download it in full resolution to study very carefully what's happening here, because it's pretty [redacted] amazing!

Here, we have a Byobu session, split into 6 panes (Shift-F2 5x Times, Shift-F8 6x times).  In each pane, we have an SSH session to Ubuntu 16.04 LTS servers spread across 6 different architectures -- armhf, arm64, i686, amd64, ppc64el, and s390x.  I used the Shift-F9 key to simultaneously run the same commands in each and every window.  Here are the commands I ran:

lxc launch ubuntu-daily:x -p default -p docker
lxc list | grep RUNNING
uname -a
dpkg -l | grep
sudo docker images | grep -m1 ubuntu
sudo docker run -it ubuntu bash
 apt update >/dev/null 2>&1 ; apt install -y net-tools >/dev/null 2>&1
 ifconfig eth0

That's right.  We just launched Ubuntu LXD containers, as well as Docker containers against every Ubuntu 16.04 LTS architecture.  How's that for Ubuntu everywhere!?!

Ubuntu 16.04 LTS will be one hell of a release!


Tuesday, April 12, 2016

PHP7 and Ubuntu 16.04 LTS

I feel like I sort of "grew up" on PHP!

I certainly earned some spending money in high school and beer money in college (1997-2001) through a series of side jobs, building websites in PHP and Postgres, at least one of which is still up and going strong --  So yeah, PHP sort of holds a soft spot in my heart.

One of the newest members of the Ubuntu Server Team at Canonical, Nish Aravamudan, has worked hard this cycle in merging PHP7 into Ubuntu 16.04 LTS.  In doing so, he's worked with Zend and the upstream PHP developers as well as Ondřej Surý and Debian to ensure an outstanding PHP experience in Ubuntu, as always.

In doing so, we have now comprehensively bumped all of PHP and its libraries from PHP5 to PHP7 in Xenial.  And it's available on every Ubuntu architecture -- amd64, arm64, armhf, i386, powerpc, ppc64el, s390x.

As such, PHP7 will be the only version of PHP supported in Ubuntu 16.04 LTS.

If you have a hard dependency on PHP5, then you should either remain on Ubuntu 14.04 LTS (Trusty), which is supported for another 3 years.  Or better yet, perhaps you should have a look at LXD!  Yeah, just drop your legacy PHP5 code into a LXD container running Ubuntu 14.04 LTS.  You might even be interested in the adapt package which makes this even easier for you.  Seriously, LXD is awesome for exactly this use case!

However, I suspect your experience might be very similar to mine...  You see, I have a bunch of PHP code that I wrote like 12+ years ago, that largely "just works" and I never, ever, ever have to touch.  You can find a couple of those projects packaged in Ubuntu, like Pictor and Musica.  Once Nish got all of my PHP library dependencies packaged (libapache2-mod-php, php-cli, php-imagick, php-getid3), my decade-old PHP code just worked!

I'm actually really impressed with the PHP community here.  I love that my ancient PHP code continues to "just work" with the new PHP7 engine.  [Deleted a lengthy grumble about all of my Python2.x code that had to change to run under Python3...]

And not only did it just work, it's actually faster than ever before.  PHP7 at its core is  faster than ever before.  Check out the info graphic below for more info!


p.s. And if you're looking for Drupal, Nish is hard at work, trying to get Drupal8 into Ubuntu 16.04 LTS too ;-)

Friday, April 8, 2016

Container MacCloud: Can there really only be one?

Dear Mr. Highlander aka Connor MacLeod,

Are you really sure there can only be one?  Because we're on an IBM LinuxOne right now, and there actually seems to be many, many more than one...

We're running Ubuntu 16.04 LTS here on this s390x z/VM guest and yeah, you might say "it's a kind of magic!"

In fact, we've had our own quickening, having launched thousands of Docker containers, and thousands more LXD machines, all talking to one another on this enormous mainframe.

We know you're immortal and all, born in 1518 on the shores of Loch Shiel, but I mean, even you would appreciate these machines have uptimes measured in decades, right?

And we also know that you have power beyond imagination, you feel everything and know everything, but we're fast learners too!  We're using our new Ubuntu on POWER8 with big data and applied machine learning, to try and make the world a smarter planet and a better place.

Moreover, we don't want to conceal our special gift -- we want to share it with everyone!  Ubuntu on IBM mainframes and POWER8 servers are available to all.

Anyway, we'll see one another at the Gathering, I'm sure.  I hope the prize is a brand new LinuxOne.  But I hope the Kurgan doesn't win it, as we would all hate to see mortal man suffer an eternity of darkness.  That would be a bummer.

Until then, perhaps you'll join us and learn more in this webinar!

And so now it ends...
Container MacCloud

Thursday, April 7, 2016

Throwback Thursday: 1st OpenStack Summit in Austin (July 2010)

On July 7, 2010, I received the above email.  In hindsight, this note effectively changed the landscape of cloud computing forever.  I was one of 3 Canonical employees in attendance (Nick Barcet, Neil Levine) and among a number former colleagues (Theirry Carrez, Soren Hansen, Rick Clark) at the first OpenStack Design Summit at the Omni hotel in Austin, Texas, in July of 2010.

These are the only pictures I snapped with my phone (metadata says it was an HTC Hero) of the event, which, almost unbelievably fit entirely within a single conference room :-)

The "fishbowl" round table discussion format was modeled after Ubuntu Developer Summits.

It was so much fun to see so many unfamiliar, non-Ubuntu people using the fishbowl discussion format.

Also borrowed from Ubuntu Developer Summits was the collaborative, community-sourced note taking in Etherpad-Lite.

Breakfast, in the beautiful Omni lobby.

Lots of natural light, but thankfully, air conditioned.  By the way, does anyone have pictures from the 120oF Whole Foods roof top event?

My, my, my, how far we've come in 6 short years!

This month's OpenStack Summit returns to Austin, Texas, and fills the entire Austin Convention Center, and overflows into at least two nearby hotels, with 5,000+ OpenStack developers, users, and enthusiasts!

In fact, if you're reading this post on, you're being served by Wordpress and MySQL hosted on a production Ubuntu OpenStack at Canonical.

Welcome back home, OpenStack!


Wednesday, April 6, 2016

HOWTO: Ubuntu on Windows

As announced last week, Microsoft and Canonical have worked together to bring Ubuntu's userspace natively into Windows 10.

As of today, Windows 10 Insiders can now take Ubuntu on Windows for a test drive!  Here's how...

1) You need to have a system running today's 64-bit build of Windows 10 (Build 14316).

2) To do so, you may need to enroll into the Windows Insider program here,

3) You need to notify your Windows desktop that you're a Windows Insider, under "System Settings --> Advanced Windows Update options"

4) You need to set your update ambition to the far right, also known as "the fast ring".

5) You need to enable "developer mode", as this new feature is very pointedly directed specifically at developers.

6) You need to check for updates, apply all updates, and restart.

7) You need to turn on the new Windows feature, "Windows Subsystem for Linux (Beta)".  Note (again) that you need a 64-bit version of Windows!  Without that, you won't see the new option.

8) You need to reboot again.  (Windows sure has a fetish for rebooting!)

9) You press the start button and type "bash".

10) The first time you run "bash.exe", you'll accept the terms of service, download Ubuntu, and then you're off and running!

If you screw something up, and you want to start over, simply open a Windows command shell, and run: lxrun /uninstall /full and then just run bash again.

For bonus points, you might also like to enable the Ubuntu monospace font in your console.  Here's how!

a) Download the Ubuntu monospace font, from

b) Install the Ubuntu monospace font, by opening the zip file you downloaded, finding UbuntuMono-R.ttf, double clicking on it, and then clicking Install.

c) Enable the Ubuntu monospace font for the command console in the Windows registry.  Open regedit and find this key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont and add a new string value name "000" with value data "Ubuntu Mono"

d) Edit your command console preferences to enable the Ubuntu monospace font.


Tuesday, April 5, 2016

Finally: dock your Unity launcher at the bottom of your desktop!

This makes me so incredibly happy!

Here's how...

First, start with a fully up-to-date Ubuntu 16.04 LTS desktop.

sudo apt update
sudo apt dist-upgrade -y

Then, install dconf-editor.

sudo apt install -y dconf-editor

Launch dconf-editor and find the "launcher" key and change it to "bottom".


For good measure, I triggered a reboot, to make sure my changes stuck.  And voila!  Beauty!