Introduction
This is a tutorial for building and installing the latest release
version (0.7.3 as of writing) of «ZFS on Linux» on a Raspberry Pi 3
running Raspbian Stretch. Specifically, we’ll be building the dkms
version of ZoL, which saves you the hassle of re-compiling the kernel
modules after every kernel update. Even though ZoL added support for
building dkms packages for debian in version 0.7.3, the build process on
a Raspberry Pi 3 is not quite straight-forward. Hopefully, these
instructions will make it easier.
Steps
- Install the build dependencies.
$ sudo apt-get update $ sudo apt-get install build-essential autoconf libtool gawk alien fakeroot $ sudo apt-get install dkms zlib1g-dev uuid-dev libattr1-dev libblkid-dev libselinux-dev libudev-dev libssl-dev parted lsscsi wget ksh
You’ll also need the kernel headers. Running apt-get upgrade will take care of both installation and upgradation.
$ sudo apt-get upgrade raspberrypi-kernel raspberrypi-kernel-headers
- Download the source.
Download the latest release tarballs for zfs and spl from this page and extract them.
$ wget https://github.com/zfsonlinux/zfs/releases/download/zfs-0.7.3/spl-0.7.3.tar.gz && tar -xzf spl-0.7.3.tar.gz $ wget https://github.com/zfsonlinux/zfs/releases/download/zfs-0.7.3/zfs-0.7.3.tar.gz && tar -xzf zfs-0.7.3.tar.gz
- Compile and install spl.
$ cd spl-0.7.3/ $ autoreconf --install --force $ ./configure
You need to make a small edit to the Makefile
generated by configure
before you proceed.
$ sed -E 's/(^RPMBUILD = rpmbuild.*)/\1 --target=armhf/' -i Makefile $ make pkg-utils deb-dkms $ for deb in *.deb; do sudo dpkg -i "$deb"; done
The final step will take some time as dkms builds spl modules for each kernel version installed in your system.
- Compile and install zfs.
The build process for zfs is the same as spl, albeit with an extra option --with-config=srpm
in ./configure
$ cd ../zfs-0.7.3/ $ autoreconf --install --force $ ./configure --with-config=srpm $ sed -E 's/(^RPMBUILD = rpmbuild.*)/\1 --target=armhf/' -i Makefile $ make pkg-utils deb-dkms $ for deb in *.deb; do sudo dpkg -i "$deb"; done
The zfs source is much bigger than spl’s and hence the build time will also be much longer.
- Reboot and Enjoy. 🙂
Sources
- The ZoL Wiki
- rpdom on this thread
root@rp01:/home/pi# dpkg-reconfigure zfs-dkms
Removing old zfs-0.7.11 DKMS files…
Deleting module version: 0.7.11
completely from the DKMS tree.
Done.
Loading new zfs-0.7.11 DKMS files…
It is likely that 4.14.71-v7+ belongs to a chroot’s host
Building for 3.6-trunk-rpi, 4.14.71+ and 4.14.71-v7+
Building initial module for 3.6-trunk-rpi
configure: error: in /var/lib/dkms/zfs/0.7.11/build':
configure: error: SHUT 'ER DOWN CLANCY, SHE'S PUMPIN' MUD!
See
config.log’ for more details
Error! Bad return status for module build on kernel: 3.6-trunk-rpi (armv7l)
Consult /var/lib/dkms/zfs/0.7.11/build/make.log for more information.
[edit #2]
Managed to compile the kernel module after getting rid of the old 3.6-trunk-rpi! Hooray!
apt remove linux-headers-3.6-trunk
apt remove linux-kbuild-3.6