NetBSD on a Raspberry Pi

Last edited

Install NetBSD 6 on Raspberry Pi

Although images of complete installation of NetBSD can be downloaded for the NetBSD I choose to do a fresh install.

A fresh installation won't take much time

I don't need X on this board and by doing a install you can choose what to install.

On are daily builds where install images can be downloaded. The image containes only a few files to start the installer.

I downloaded the rpi_inst.img from

Check the directory for the latest version.

Write the image to a SD-card

The install image is downloaded in zipped format. On my Linux box I did the following.

gunzip rpi_inst.img.gz 
dd if=rpi_inst.img of=/dev/mmcblk0

Be sure that you don't write to your harddisk, this will leave you with a broken system.

Start the installations with sysinst

Put the SD card in the Raspberry Pi and power it up. The install image gets loaded into memory. Type sysinst to start the installation.

Choose for a installation on the hard disk and choose for the full hard disk. Accept the default sectors and accept the partitioning scheme. Don't bother abouth the VFAT partition, the installer will take care of it.

Install from the internet

You can download all the files to your local network and install from there. However the installation won't take that much time, so you can just as well install directly from the internet.

I did choose for http to get the sets with the path

Again choose a current directory tree.

Choose what to install

There are three options:

  • full install
  • install without X
  • minimal install

For starters I did choose for a installation without X. This will end up in about 584Mb on your SD card.

Add a user

In the last part of the installation proces, add a user that is part of the group wheel. Choose a strong password.

Protect your SD card

Aftert the installation is done, reboot into the fresh NetBSD system.

Now we have to do some post installation configuration.

To protect the SD card we have to minimize the number of writes to it.

Edit /etc/fstab to set mount options to the root filesystem:

/dev/ld0a    /    ffs     rw,noatime,nodevmtime 1 1

Edit /etc/rc.conf and add the following lines:

fsck_flags="-P -p -y"

as adviced on Mat@Home blog.

Other measures:

  • Put /var/log and /var/run into a ramdisk (tmpfs).
  • Don't use dhcp but choose a static ip address.
  • Put home on ramdisk
  • Put swap on NFS

Put /var/log and /var/run into a ramdisk (tmpfs).

On NetBSD tmpfs can grow and shrink as needed.

A nice script to let /var/run and /var/log be populated can be found at Mat@Home blog.

Entries in /etc/fstab for this could be something like the following.

tmpfs            /var/log    tmpfs    rw,-sram%10
tmpfs            /var/run    tmpfs    rw,-sram%1

The last part (-sram%x) indicates the size we allow. This can be set both in Mb as well as in a percentage of total RAM.

home on tmpfs

Many applications use and write to files in the home directory. By putting home into tmpfs we will reduce the writing to disc.

Setup a disk based version of your $HOME

mv /home/matto /home/mattoskel
mkdir /home/matto

Now /home/mattoskel contains the contents of the $HOME directory, with all the dot-files and other configuration files. We will use this to populate the $HOME at boot time. When in future we want changes to our configuration files we have to edit the files in the /home/mattoskel directory on the SD card.

Edit /etc/fstab for tmpfs $HOME

tmpfs           /home/matto     tmpfs   rw,-sram%10

On boot copy files to tmpfs in rc.local

I use a file /usr/local/bin/ for this and run that at boot time through /etc/rc.local.


cd /home/mattomfs
cp -r ./ /home/matto/
chown -r matto:users /home/matto

This will populate our tmpfs $HOME dir so after a login we will have our environment comfortable configured. The ./ after cp -r is to make sure the dot-files are copied too.

Decide where swap will live

One option for swap is to use tmpfs, however this will reduce the amount of available memory. With NetBSD it is not very hard to mount swap over nfs. This off course is a lot slower compared to tmpfs but it will leave our RAM to our system.

Create swap file on the NFS-server

dd if=/dev/zero of=/path/to/nfs-exports/swap.<ip-number> bs=4000k count=40

This will create a swap-file of 160 Mb. The filename of the swapfile is swap.ip-number, so something like swap. - this will help to understand which swap file is used by which system.

Make sure the settings in /etc/exports on the NFS server are OK, also for /etc/hosts.allow and /etc/hosts.deny.

Setup /etc/fstab on the Raspberry Pi to mount swap over NFS

First, create a directory /swap as a mountpoint. Now we can add a line to /etc/fstab:

NFSSERVER:/path/to/nfs-exports/swap.<ip-number> none    swap    sw,nfsmntpt=/swap

After a reboot we should see that /swap is mounted over NFS. Also this can be seen in meminfo:

cat /proc/meminfo
    total:    used:    free:  shared: buffers: cached:
Mem:  509812736 55328768 454483968        0 26099712 41574400
Swap: 163840000        0 163840000
MemTotal:    497864 kB
MemFree:     443832 kB
MemShared:        0 kB
Buffers:      25488 kB
Cached:       40600 kB
SwapTotal:   160000 kB
SwapFree:    160000 kB

Secure ssh

Don't forget to harden your sshd. At minimal add the following to lines to your /etc/ssh/sshd_config:

AllowGroups wheel
PermitRootLogin no

Even better is to disable password login at all and only allow ssh key authentication.

Prepare installation of packages

pkg_add pkgin
vi /usr/pkg/etc/pkgin/repositories.conf
pkgin update
pkgin install gnupg

Set the repository to$arch/6.1/All. The last line above (the installation of GnuPG) is just an example, choose the packages you need.

Complete system configuration

Do things like set your timezone et cetera,

ln -s /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime

See man afterboot and some other of the excellent NetBSD man pages.