Building a kernel module on SLES 11 SP3
In this example I am using zncryptfs kernel module from Cloudera/Gazzang repo.
[root@hive-1 ~]# zypper install zncrypt-kernel-module
This will ask you to install a kernel module that doesn’t have the ‘dkms’ dependency, we will install the kernel module breaking that dependency:
Problem: nothing provides dkms needed by zncrypt-kernel-module-3.4.2_SLES11-1024.x86_64
Solution 1: do not install zncrypt-kernel-module-3.4.2_SLES11-1024.x86_64
Solution 2: break zncrypt-kernel-module-3.4.2_SLES11-1024.x86_64 by ignoring some of its dependencies
Choose from above solutions by number or cancel [1/2/c] (c): 2
Select option 2.
3.1.2 Update to the latest kernel module
Update the kernel:
hive-ne-SLES-1:~ # zypper install -y kernel-default
…
Several operations
…
Then reboot; the kernel version should be updated after reboot.
hive-ne-SLES-1:~ # uname -r
3.0.101-0.40-default
kernel module needs to be build manually
then:
First requirement to build the kernel module is to have the kernel headers installed, to install them check the kernel version and install its kernel headers accordingly:
hive-ne-SLES-1:~ #zypper install -y kernel-default-devel
…..
Several operations
….
Once the kernel headers are installed you will see the include files at /usr/src/linux-3.0.101-0.40/include; then go to the zncrypt kernel module source code directory to build it.
hive-ne-SLES-1:~ # cd /usr/src/zncryptfs-3.4.2/
You may have the following error message:
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # make
Searching known bugs on kernel...
make -C /lib/modules/3.0.101-0.40-default/build M=/usr/src/zncryptfs-3.4.2 modules
make: *** /lib/modules/3.0.101-0.40-default/build: No such file or directory. Stop.
make: *** [all] Error 2
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 #
To fix previous error create a symlink from /lib/modules/$(uname -r)/build to the x86_64 obj headers directory, then execute again make
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # ln -s /usr/src/linux-3.0.101-0.40-obj/x86_64/default/ /lib/modules/$(uname -r)/build
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # make
Searching known bugs on kernel...
make -C /lib/modules/3.0.101-0.40-default/build M=/usr/src/zncryptfs-3.4.2 modules
make[1]: Entering directory `/usr/src/linux-3.0.101-0.40-obj/x86_64/default'
make -C ../../../linux-3.0.101-0.40 O=/usr/src/linux-3.0.101-0.40-obj/x86_64/default/. modules
CC [M] /usr/src/zncryptfs-3.4.2/main.o
CC [M] /usr/src/zncryptfs-3.4.2/hooks.o
CC [M] /usr/src/zncryptfs-3.4.2/messaging.o
CC [M] /usr/src/zncryptfs-3.4.2/auth.o
CC [M] /usr/src/zncryptfs-3.4.2/acl.o
CC [M] /usr/src/zncryptfs-3.4.2/profile.o
CC [M] /usr/src/zncryptfs-3.4.2/stats.o
CC [M] /usr/src/zncryptfs-3.4.2/procfs.o
CC [M] /usr/src/zncryptfs-3.4.2/timeconv.o
CC [M] /usr/src/zncryptfs-3.4.2/debug.o
LD [M] /usr/src/zncryptfs-3.4.2/zncryptfs.o
Building modules, stage 2.
MODPOST 1 modules
CC /usr/src/zncryptfs-3.4.2/zncryptfs.mod.o
LD [M] /usr/src/zncryptfs-3.4.2/zncryptfs.ko
make[1]: Leaving directory `/usr/src/linux-3.0.101-0.40-obj/x86_64/default'
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 #
At this point the kernel module is build you can see it at /usr/src/zncryptfs-3.4.2/zncryptfs.ko
3.1.3 Load the module
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # depmod -a
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # modprobe zncryptfs
FATAL: Module zncryptfs not found.
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 #
That error means that the kernel module is not part of the modules of the current kernel $(uname -r).
To fix that a symlink needs to be created to point to this kernel module or it can be copied.
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # ln -s /usr/src/zncryptfs-3.4.2/zncryptfs.ko /lib/modules/$(uname -r)/
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # depmod -a
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # modprobe zncryptfs
FATAL: module '/lib/modules/3.0.101-0.8-default/zncryptfs.ko' is unsupported
Use --allow-unsupported or set allow_unsupported_modules to 1 in
/etc/modprobe.d/unsupported-modules
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 #
This is the last error we might see, it refers that the policy to allow unsupported modules, just change the variable of the config file as indicated (set allow_unsupported_modules to 1) :
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # vi /etc/modprobe.d/unsupported-modules
Then run:
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # depmod -a
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # modprobe zncryptfs
hive-ne-SLES-1:/usr/src/zncryptfs-3.4.2 # lsmod | grep zncrypt
zncryptfs 82143 0
The module is loaded and ready to be used
Enjoy!
P.S. There is a Queen that has her own flag
No hay comentarios:
Publicar un comentario