Creating a VM for compiling ZFS with RHEL6.10
As you know I created the DRAID project, based in ZFS.
One of our customers wanted a special custom version for their RHEL6.10 installation with a custom Kernel.
This post describes how to compile and install ZFS 7.x for RHEL6.
First create a VM with RHEL6.10. Myself I used Virtual Box on Ubuntu.
If you need to install a Custom Kernel matching the destination Servers, do it.
Download the source code from ZFS for Linux.
install the following packages which are required by zfs compiler:
sudo yum groupinstall "Development Tools" sudo yum install autoconf automake libtool wget libtirpc-devel rpm-build sudo yum install zlib-devel libuuid-devel libattr-devel libblkid-devel libselinux-devel libudev-devel sudo yum install parted lsscsi ksh openssl-devel elfutils-libelf-develsudo yum install kernel-devel-$(uname -r)
Steps to compile the code:
1- Make sure the zfs file exists under zfs/contrib/initramfs/scripts/local-top/
if not exists, create a file called zfs under zfs/contrib/initramfs/scripts/local-top/ and add the following to that file:
#!/bin/sh PREREQ=”mdadm mdrun multipath” prereqs() { echo “$PREREQ” } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac # # Helper functions # message() { if [ -x /bin/plymouth ] && plymouth –ping; then plymouth message –text=”$@” else echo “$@” >&2 fi return 0 } udev_settle() { # Wait for udev to be ready, see https://launchpad.net/bugs/85640 if [ -x /sbin/udevadm ]; then /sbin/udevadm settle –timeout=30 elif [ -x /sbin/udevsettle ]; then /sbin/udevsettle –timeout=30 fi return 0 } activate_vg() { # Sanity checks if [ ! -x /sbin/lvm ]; then [ “$quiet” != “y” ] && message “lvm is not available” return 1 fi # Detect and activate available volume groups /sbin/lvm vgscan /sbin/lvm vgchange -a y –sysinit return $? } udev_settle activate_vg exit 0 |
make the created zfs file executable:
chmod +x zfs/contrib/initramfs/scripts/local-top/zfs |
2- inside draid-zfs-2019-05-09 folder, execute the following commands:execute Auto generate script:
./autogen.sh |
execute configuration script:
./configure |
Please note we use this specific configuration for bettter results:
./configure –disable-pyzfs –with-spec=redhat |
create rpms:
make rpm |
remove all test rpms:
rm zfs-test*.rpm |
3- install all created rpms
yum install *x86_64* -y |
4- verify that zfs is been installed
zfs |
this command will display zfs help.
Another interesting trick I instructed my Team to do is to add a version number to zfs, with a parameter -v or –version.
So if you want to do the same, you have to edit:
zfs/cmd/zfs/zfs_main.c
Under:
cmdname = argv[1];
In my code is line 7926, then add:
/* DRAIDTEAM - added new command to display zfs version*/ if ((strcmp(cmdname, "-v") == 0) || (strcmp(cmdname, "--version") == 0)) { (void) fprintf(stdout, "0.7.0_DRAID-1.2.9.08021755\n"); return (0); }
You can check the Kernel Module info by using modinfo zfs, but I found it handy to allow to just do:
zfs -v
Rules for writing a Comment