Installation of NetBSD 7 on the Raspberry Pi 2
Various Linux distributions and Unix derivates support the Raspberry Pi single-board computer. NetBSD 7 is a free and open-source Unix operating system that also runs on the ARMv7 architecture of the Raspberry Pi 2.

Preparing the microSDHC Memory Card
An image file is available for download on the NetBSD servers. Fetch the compressed image and unzip it:
$ fetch http://ftp.netbsd.org/pub/NetBSD/NetBSD-7.1/evbarm-earmv7hf/binary/gzimg/armv7.img.gz $ gunzip armv7.img.gz
Just write the image to your microSDHC memory card:
$ dd if=armv7.img of=/dev/da0 bs=2m
Replace /dev/da0
with the device node of your card reader.
First Boot
After the first power-on, the disk will be enlarged to the size of the memory
card automatically. This may take some minutes. You can then login as
root
. Most likely, you want to set a password for root
now:
# passwd
Create an additional account and add the user to the group
wheel
:
# useradd -m -G wheel openadms # passwd openadms
System Configuration
It is recommended to edit /etc/rc.conf
and add some settings to
extend the life time of the memory card:
syslogd=NO manpagedb=NO savecore=NO virecover=NO fsck_flags="-P -p -y"
Slices with many write operations, like /tmp
,
/var/tmp
, /var/log
, and /var/run
, should
be better moved to the system memory using tmpfs
. Edit
/etc/fstab
and add:
tmpfs /tmp tmpfs rw,-sram%30 tmpfs /var/tmp tmpfs rw,-sram%10 tmpfs /var/log tmpfs rw,-sram%10 tmpfs /var/run tmpfs rw,-sram%1
You may want to deactive swap memory. Add to /etc/rc.conf
:
no_swap=YES
Keyboard Layout
The keyboard layout can be changed to German with:
# wsconsctl -k -w encoding=de
To make the changes permanent, edit /etc/wscons.conf
and
add:
encoding de
You may notice that the backspace key does not work. Instead, we have to
press ^H
(Ctrl
+ H
). As a workaround, you
can either use tcsh
or remap the keys with wscons
:
# wsconsctl -w map+="keycode 14 = BackSpace" > /dev/null # wsconsctl -w map+="keycode 211 = Cmd_ResetEmul Delete" > /dev/null
Add the commands to /etc/rc.local
to make them permanent.
Shell
The default shell of NetBSD is sh
. You can change it to
csh
or install tcsh
, mksh
, or any other
shell as a package:
# chsh -s /bin/csh # chsh -s /usr/pkg/bin/tcsh # chsh -s /usr/pkg/bin/mksh
Sendmail
The root
account gets syslog messages from sendmail which
can be read with mail
. If you do not wish do receive logs by mail,
disable sendmail by editing /var/cron/tabs/root
and removing |
sendmail -t
:
15 3 * * * /bin/sh /etc/daily 2>&1 | tee /var/log/daily.out #15 3 * * * /bin/sh /etc/daily 2>&1 | tee /var/log/daily.out | sendmail -t 30 4 * * 6 /bin/sh /etc/weekly 2>&1 | tee /var/log/weekly.out #30 4 * * 6 /bin/sh /etc/weekly 2>&1 | tee /var/log/weekly.out | sendmail -t
You may want to alter aliases(5)
to create an alias for the mail
account (for example, a file).
Time Zone
The system clock can be set to local time. Please be aware of time jumps if
you use a local time zone like Europe/Berlin
. To avoid the Central
European Summer Time (CEST), you can set the zone to GMT+1 instead:
# ln -fs /usr/share/zoneinfo/Etc/GMT-1 /etc/localtime
Because of the POSIX convention, Etc/GMT-1
is the name of GMT+1
on Unix. If you like to switch to daylight saving time, set:
# ln -fs /usr/share/zoneinfo/Europe/Berlin /etc/localtime
NTP
Use the Network Time Protocol (NTP) to synchronise your system clock with a
remote time server. Edit /etc/rc.conf
and add:
ntpdate=YES ntpdate_hosts="0.de.pool.ntp.org" ntpd=YES
The list of time servers can be changed in /etc/ntp.conf
. Run
ntpdate -u 0.de.pool.ntp.org
to update the time instantly.
WiFi Network
WiFi connections can be established with wpa_supplicant
. Add your
network configuration to /etc/wpa_supplicant.conf
:
ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=wheel network={ ssid="my_wifi" scan_ssid=1 key_mgmt=WPA-PSK psk="my_passphrase" }
Edit /etc/rc.conf
to activate WiFi at boot time:
dhclient=YES dhclient_flags="-nw" wpa_supplicant=YES wpa_supplicant_flags="-B -i ath0 -c /etc/wpa_supplicant.conf"
You have to change ath0
to the name of your network interface
controller. Use wpa_cli
to establish a connection:
# wpa_cli reconfigure # wpa_cli status
Packages
You can use pkgsrc to compile
applications from source code or use pre-compiled binary packages. Due to the
limited resources of the Raspberry Pi, it is recommended to use packages. NetBSD
features two tools to install packages: pkg_add
is part of the base
system and pkgin
can be used additionally.
For both tools, the path to the package repository has to be set at first:
# setenv PKG_PATH "ftp://ftp.NetBSD.org/pub/pkgsrc/packages/NetBSD/earmv7hf/7.1/All"
Add the path to /root/.cshrc
:
setenv PKG_PATH "ftp://ftp.NetBSD.org/pub/pkgsrc/packages/NetBSD/earmv7hf/7.1/All"

tmux
and htop
on NetBSD 7.1,
installed with pkgin
pkg_add
New packages can be installed with pkg_add
simply by
running:
# pkg_add mozilla-rootcerts # pkg_info # rehash # mozilla-rootcerts install
pkgin
You have to install pkgin
first:
# pkg_add pkgin
Then, add the repository, update the local database, and install your packages:
# echo ftp://ftp.NetBSD.org/pub/pkgsrc/packages/NetBSD/earmv7hf/7.1/All > /usr/pkg/etc/pkgin/repositories.conf # rehash # pkgin update # pkgin install mozilla-rootcerts vim tmux git
Please refer to the official documentation for further information.
pkgsrc
For more recent software versions, you have to use pkgsrc and compile your packages from source. You can bootstrap it with:
# cd /usr # cvs -q -z2 -d anoncvs@anoncvs.netbsd.org:/cvsroot checkout -P pkgsrc # cd pkgsrc/bootstrap # ./bootstrap
This may take some time. Set some recommended options in
~/.cvsrc
:
cvs -q -z2 checkout -P update -dP diff -upN rdiff -u release -d
Build options for make
can be added to
/etc/mk.conf
:
MKX11=no CLEANDEPENDS=yes MASTER_SORT=.de .fr .uk PYTHON_VERSION_DEFAULT=36
You need to extend your $PATH
variable:
# setenv PATH /usr/pkg/bin:/usr/pkg/sbin:$PATH
Packages can be compiled with make
:
# cd /usr/pkgsrc/lang/python36 # make install clean clean-depends
You can update pkgsrc with:
# cd /usr/pkgsrc # cvs update -dP
GPIO
A kernel module is provided to access the GPIO interface of the Raspberry Pi.
At first, edit /etc/rc.conf
and add:
gpio=YES
The GPIO pins you want to use must be defined in /etc/gpio.conf
.
For example, you can set pin 17 for input:
gpio0 17 set in pin_17
You can change pin_17
to something else, it is just a label for
the pin. Use gpioctl
to poll the state of the pin:
# gpioctl gpio0 pin_17
USB Flash Drive
USB flash memory and other external drives use the device node
/dev/sdXe
. For instance, you can mount it with:
# mount -t msdos /dev/sd0e /mnt