Skip to content

Operating System

My cluster uses a modified version of Raspberry Pi OS 64-bit 🍓 because of its native support for the CM3+ and it's lightness in weight.

I decided to use the 64-bit version of the OS on my cluster because there are not that many charts that notively support the armv7 architecture and I got tired of having to build my own images and charts. The problem is that the RPiOS is only released in a full desktop version and so I had to uninstall all of the X11 related components in order to free up some disk space on the CM3+.

💾  Download

Download the latest release of the RPiOS 64-bit.

I've recently started building my own RPiOS 64-bit lite version since the official version has been stuck in beta for so long and it is only offered in the desktop/full version.

You may download the latest release by using the following:

wget https://github.com/nicholaswilde/pi-gen/releases/latest/download/raspios-buster-arm64-lite.zip

Alternatively, you can download the 32-bit Lite version that doesn't need any modifications.

Ubuntu arm64 was a bit heavy for my CM3+.

📥  Installation

Installing the operating system on the CM3+ was done using the Turing Pi using these instructions from Turing Pi using usbboot.

Alternatively, a compute module I/O board can be used to flash the CM3+.

🔧  Modification

Note

This step may be skipped if you are already using the lite version.

To rip out all of the desktop related apps in the full version, simply remove any modules that are related to X11.

(
  sudo apt --purge remove -y "x11-* lxsession"
  sudo apt --purge -y autoremove
  sudo apt update
  sudo apt upgrade -y
)

I didn't spend too much time stripping down the OS to the bare essentials because I wanted to get my cluster up and running. You may reverse engineer this guide to further clean up the OS. Suggestions are always welcome!

You can also go through the stage3, 4, & 5 folders in the official pi-gen repo and remove all of those packages as well.

Reboot if needed.

sudo reboot

⚙  Other Settings

🔡  Hostname

The hostname can be changed with the following:

sudo hostnamectl set-hostname <hostname>

🔑  SSH Key

Import your public SSH key 💻  so that you don't need to enter the dang password anymore when logging into each node.

Note

Your public key needs to exist on GiHub at https://github.com/nicholaswilde.keys

ssh-import-id-gh <username>

🐋  Docker

Last thing I need to do is install Docker on the master and each node.

(
  set -x; sudo apt-get update &&
  sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release &&
  DIST=$(lsb_release -is | tr '[:upper:]' '[:lower:]') &&
  ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(armhf\)\(64\)\?.*/\1\2hf/' -e 's/aarch64$/arm64/')" &&
  curl -fsSL "https://download.docker.com/linux/${DIST}/gpg" | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg &&
  echo "deb [arch=${ARCH} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/${DIST} $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  sudo apt update &&
  sudo apt install -y docker-ce docker-ce-cli containerd.io &&
  sudo usermod -aG docker $(whoami)
)

Be sure to reboot.

sudo reboot

Test to make sure that Docker can run without using sudo.

docker run --rm hello-world