Installing Ubuntu 19.10 on Raspberry Pi

Upgrading the OS to Ubuntu 19.10

kubernetes plus raspberrypi

Following up on my post of “Kubernetes Running on Raspberry Pi” well it should have been day two ops. The configuration and set up of your Kubernetes cluster. But in doing so I realized that I was limited in some of the easy ways to do somethings. Like using Helm to help install RabbitMq. So upgrading the OS became a higher priority.

There are a few different 64-bit OS’s for the Pi. But I settled on the one from Ubuntu. They had a server version and for my Kubernetes running on Raspberry Pi project it made more sense than using a desktop version.

This came with directions on how to install but there was some stuff missing I had to configure. One of the bigger differences was the fact you need to log in to the physical machine itself to configure the OS. So you will need a monitor, keyboard and a Micro HDMI to HDMI cable.

From my previous post “Kubernetes Running on Raspberry Pi” I am still using the Verbatim 32GB microSDHC cards I had. As much as possible I am just upgrading these in place.

Prepping the microSDHC Cards

I prepped up the microSDHC cards. Opened up disk utility (for us Mac users) and erase and format the microSDHC cards make sure the format is MS-DOS (FAT). They should be in this format and have nothing on them if you just purchased them.

Once the microSDHC cards are ready we need to flash the OS on to them. Because I have had to do this a few times I scripted this out.

#!/bin/sh

# unmount disk
diskutil unmountdisk /dev/disk2

# flash sd card
sudo dd if=ubuntu-19.10-preinstalled-server-arm64+raspi3.img of=/dev/disk2 bs=2m

This is almost verbatim from my previous post. The big difference is the operating system. I downloaded the lasted linked here from Ubuntu.

When the dd command is done you should see something like:

1479+1 records in
1479+1 records out
3102821376 bytes transferred in 769.989419 secs (4029694 bytes/sec)

I added another step to this:

sync /dev/disk2

I didn’t do this in my original post and in testing one of my worker node I realized there was some issues with the install. The sync command make sure everything is done executing before you unmount the drive.

So at this point we have our install on our microSDHC card.

Next we need to modify the usercfg.txt so open up the system-boot mount and it will be in the root directory. This file should look something like this:

# Place "config.txt" changes (dtparam, dtoverlay, disable_overscan, etc.) in
# this file. Please refer to the README file for a description of the various
# configuration files on the boot partition.

Add the following line to the end of this file:

total_mem=3072

Unmount the drive and we are done prepping the microSDCH card. Insert the card in to one of your Pi’s hook up your monitor and keyboard and power it up. Keep in mind that there is no GUI so be ready for everyting done via a terminal. Also the initial boot up takes a few mins, it will ask for you to log in give it another minute to finish booting then log in.

After you log in and change your password. We need to do some updating so run the following commands:

sudo apt update
sudo apt upgrade

Note: you need to be connected to the internet via ethernet cable.

Configuring the Networking

Now with Raspian setting up the network was fairly easy. In my previous post it was a few lines of code. But Ubuntu is a production level OS. Now we use netplan so find the configuration file located here /etc/netplan/50-cloud-init.yaml.

The command to run is:

sudo nano 50-cloud-init.yaml

The file should look something like this:

network:
    ethernets:
        eth0:
        addresses: []
        dhcp4: true
    version: 2

Now we need to set a static IP address:

network:
    ethernets:
        eth0:
            addresses: [192.168.1.5x/24] # note the x here is supposed to be a number I masked it in my example
            gateway4: 192.168.1.1
            nameservers:
              addresses: [8.8.8.8,8.8.4.4]
            dhcp4: no
    version: 2

So let’s break down what is in here:

addresses: [192.168.1.5x/24] # note the x here is supposed to be a number I masked it in my example

This is the static IP address you want to set for this machine. It’s a good idea to check your router and make sure the address you selected isn’t in use.

gateway4: 192.168.1.1

Finally we need to set the dhcp4 flag to no:

dhcp4: no

We need to apply our changes in order for us to do so we need to run the following command:

sudo netplan try

If the yaml is in the correct format and the address are not taken then hit the ENTER key to commit these changes.

To make my life a little easier I changed the host name of the pi. So in the /etc/hostname I changed the name to something different than ubuntu. That wraps up on what we needed to change on the networking side.

Next to figure out how to get docker running on this version of Ubuntu. At the time of writing this Docker CE isn’t supported on this version of Ubuntu.