Tuesday, August 4, 2015

Building an Arch Linux Docker base image for your Raspberry Pi 2

So I wanted to toy around a bit with my Raspberry Pi 2 running some Docker containers.

I did not, however, wanted to download some ready made base image. First of all, I don't know where it has been, who made it and whether what's in there is legit. Second, the base images out there seem to be based on the Raspberry Pi 2 operating system images and about twice the size they should be (over 500MiB instead of about 250MiB).

So I set off to create my own Raspberry Pi 2 base image (armv7h) for Arch Linux. These are my notes to make this a bit easier you than it was for me.

There is this file you need to download, together with this file. Put them in a directory together. I like to edit the second one to show the correct architecture (armv7h on line 22), but that's not strictly necessary.

What *is* strictly necessary though, is to edit the first file and edit line 56, which currently reads 
set timeout 60
 and change that to something like
set timeout 300
This is because the 60 second timeout that is there by default is fine for fast disks in x86_64 machines, but will not do for your Pi 2. The timeout should accomodate for the pacstrap command to finish, which installs about 86 packages. Even with a fast SD card in your Pi 2, 60 seconds will not cut it.

If you up the timeout to 300, the process will complete nicely, giving you a proper armv7h Docker base image!

Second thing you will want to do, is to edit the file again and change line 71 where it reads
Server = https://mirrors.kernel.org/archlinux/\$repo/os/\$arch
to
Server = http://mirror.archlinuxarm.org/\$arch/\$repo
If you don't make that change, you'll never be able to install packages from the armv7h repositories.

Now go and run
./mkimage-arch.sh
Happy containering! :)

1 comment:

help in writing an essay said...

Making your own Raspberry Pi 2 base image (armv7h) for Arch Linux is beyond amazing. You are real genious guy who have solved the problems of so many people.