NetBSD on the Raspberry Pi

2014-09-25 23:57

Last spring, I finally caved in and ordered a Raspberry Pi. In fact, I had a very precise reason to do so: it makes a nice and affordable little board to run NetBSD natively.

Before starting, I recommend using a Class 10 SDHC Card as it will make the whole process of using pkgsrc faster.

Creating the SD card

As the Rapberry Pi port is still not part of the stable release, we will have to run NetBSD-current. Pre-built images can be downloaded here.

Let's fetch an image, and create the bootable media:

UPDATE: Now that images are being built for evbarm-earmv6hf, please use these instead of evbarm-earmhf ones.

wget http://nyftp.netbsd.org/pub/NetBSD-daily/HEAD/201404231000Z/evbarm-earmhf/binary/gzimg/rpi.img.gz gunzip rpi.img.gz dd if = rpi.img of = /dev/da0 bs = 4M

I used FreeBSD to create the SD card, so please set the output file accordingly when using other systems.

Booting

Switch the Raspberry Pi on and login as root , there is no password by default.

We can run uname -a to get more details about the build:

NetBSD rpi 6.99.40 NetBSD 6.99.40 ( RPI ) #1: Wed Apr 23 12:06:29 UTC 2014 builds@b8.netbsd.org:/home/builds/ab/HEAD/evbarm-earmhf/201404231000Z-obj/home/builds/ab/HEAD/src/sys/arch/evbarm/compile/RPI evbarm

And here is /etc/motd customized with my NetBSD ASCII logo:

NetBSD 6.99.40 ( RPI ) #1: Wed Apr 23 12:06:29 UTC 2014 ________ _____ _____ / / / /___ _ _ __| \ _/ ___/ / / / | _ __ / \ \ / __/ _|_______ ______/_ / / /___ / /____ \ \ \ / / / _____ / : \ _/ / _/ / \ \_ ___ \ / __/ / |__ / | \ \ \ _ _ / /___ \ \_ _/ \ \ | \ __ \_ ___ \/ / / \ \ . \ \_ __ _| / __/______/ __/_______/ __ \ \ \ / | \ \_ _ |______/ \_ ____/ \_ _____/ \ | \ _/ / __ \ \ |_|_____/ \_ __| / \ | \ | \_ _|_______/______ Cl! \_ __| / | Welcome to NetBSD/evbarm | _____/ \_ ___/_______/_ | _ _____/ | | \_ _____/ |_|______/ |___ __ _______ _ _ ___ _ __ __| This system is running a development snapshot of the NetBSD operating system, also known as NetBSD-current. It is very possible that it has serious bugs, regressions, broken features or other problems. Please bear this in mind and use the system with care. You are encouraged to test this version as thoroughly as possible. Should you encounter any problem, please report it back to the development team using the send-pr ( 1 ) utility ( requires a working MTA ) . If yours is not properly set up, use the web interface at: http://www.NetBSD.org/support/send-pr.html Thank you for helping us test and improve NetBSD.

Add a password:

passwd

Add a regular user in the wheel group:

useradd -m -G wheel username

Add a password to the newly created user:

passwd username

Growing the root file-system

As the NetBSD image written to the SD card has a fixed size, we will need to resize the file system to span the whole card.

The NetBSD Wiki has the required steps listed here: NetBSD/evbarm on Raspberry Pi.

UPDATE: Since April 2015, the partition is automatically resized during first boot.

Keeping time synchronized

As the Raspberry Pi does not include a hardware clock on board, we will need to use NTP to keep the time synchronized.

Setting time zone:

ln -fs /usr/share/zoneinfo/Europe/Warsaw /etc/localtime

After adding the ntpdate directive in rc.conf :

echo "ntpdate=YES" >> /etc/rc.conf

We can start ntpdate manually:

/etc/rc.d/ntpdate start

Using pkgsrc

To fetch and unpack the pkgsrc current branch, run:

ftp ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz tar xfz pkgsrc.tar.gz -C /usr

We can now start building:

echo "ACCEPTABLE_LICENSES+= vim-license" >> /etc/mk.conf for package in chat/irssi editors/vim misc/screen misc/tmux net/nload net/mtr net/unbound net/wget shells/zsh sysutils/mc sysutils/pv www/curl www/links www/lynx www/nginx ; do cd /usr/pkgsrc/ $package make install package clean clean-depends done

Specifying the package option when invoking make will create a binary package in /usr/pkgsrc/packages/All . As compiling can take a long time on the Pi, this is especially handy when doing reinstalls or using multiple boards.

Here is the list of packages which have been created:

ls -l /usr/pkgsrc/packages/All total 94284 -rw-r--r-- 2 root wheel 909780 Apr 24 06:18 autoconf-2.69nb4.tgz -rw-r--r-- 2 root wheel 125681 Apr 25 00:44 bsdtar-2.8.4nb1.tgz -rw-r--r-- 1 root wheel 760030 Apr 24 15:39 curl-7.36.0.tgz -rw-r--r-- 2 root wheel 7141904 Apr 24 09:53 glib2-2.38.2.tgz -rw-r--r-- 2 root wheel 512926 Apr 24 02:04 gmake-4.0.tgz -rw-r--r-- 2 root wheel 85486 Apr 24 05:56 help2man-1.45.1.tgz -rw-r--r-- 2 root wheel 43185 Apr 25 00:29 intltool-0.50.2nb2.tgz -rw-r--r-- 1 root wheel 507486 Apr 24 10:21 irssi-0.8.15nb9.tgz -rw-r--r-- 1 root wheel 442189 Apr 24 19:30 ldns-1.6.16nb3.tgz -rw-r--r-- 2 root wheel 93192 Apr 24 06:28 libelf-0.8.13.tgz -rw-r--r-- 2 root wheel 642068 Apr 24 18:29 libevent-2.0.21nb3.tgz -rw-r--r-- 2 root wheel 43643 Apr 24 07:12 libffi-3.0.13.tgz -rw-r--r-- 2 root wheel 257832 Apr 24 11:24 libidn-1.28.tgz -rw-r--r-- 2 root wheel 1229536 Apr 24 13:41 libslang2-2.2.4nb2.tgz -rw-r--r-- 2 root wheel 468947 Apr 24 01:11 libtool-base-2.4.2nb6.tgz -rw-r--r-- 1 root wheel 451896 Apr 24 21:18 links-2.8nb1.tgz -rw-r--r-- 1 root wheel 2339499 Apr 24 17:54 lynx-2.8.8.2.tgz -rw-r--r-- 2 root wheel 215882 Apr 24 06:16 m4-1.4.17.tgz -rw-r--r-- 1 root wheel 2102060 Apr 24 14:32 mc-4.7.0.10nb12.tgz -rw-r--r-- 1 root wheel 43411 Apr 24 20:23 mtr-0.85nb3.tgz -rw-r--r-- 1 root wheel 288745 Apr 24 21:54 nginx-1.4.7nb5.tgz -rw-r--r-- 1 root wheel 52094 Apr 24 12:09 nload-0.7.4.tgz -rw-r--r-- 2 root wheel 200993 Apr 25 00:27 p5-XML-Parser-2.41nb2.tgz -rw-r--r-- 2 root wheel 15613 Apr 24 05:54 p5-gettext-1.05nb9.tgz -rw-r--r-- 2 root wheel 1179041 Apr 24 07:06 pcre-8.34.tgz -rw-r--r-- 2 root wheel 15767929 Apr 24 05:49 perl-5.18.2nb1.tgz -rw-r--r-- 2 root wheel 207352 Apr 24 01:52 pkg-config-0.28.tgz -rw-r--r-- 1 root wheel 51044 Apr 24 17:10 pv-0.9.6nb1.tgz -rw-r--r-- 1 root wheel 188499 Apr 24 22:20 tmux-1.9a.tgz -rw-r--r-- 1 root wheel 976804 Apr 24 19:06 unbound-1.4.22.tgz -rw-r--r-- 1 root wheel 913978 Apr 25 00:18 vim-7.4.141.tgz -rw-r--r-- 2 root wheel 6244854 Apr 24 23:32 vim-share-7.4.141.tgz -rw-r--r-- 1 root wheel 932868 Apr 24 11:53 wget-1.15nb1.tgz -rw-r--r-- 1 root wheel 2511673 Apr 24 11:04 zsh-5.0.5.tgz

Final words

So far, running NetBSD on the Raspberry Pi has been a very positive experience and the system is very stable. I would definitely recommend anyone wanting to use BSD on the Pi to give NetBSD a try, it's well worth it.

I should probably also mention that it's smaller than a toaster :-)

Lastly, for some prebuilt images with X.Org included: ftp://ftp.netbsd.org/pub/NetBSD/misc/jun/raspberry-pi/