various minor fixes; bump archlive to nov 2021 use dkms in live Signed-off-by: Maurice Zhou <jasper@apvc.uk>
140 lines
4.1 KiB
ReStructuredText
140 lines
4.1 KiB
ReStructuredText
.. highlight:: sh
|
|
|
|
zfs-dkms
|
|
============
|
|
|
|
.. contents:: Table of Contents
|
|
:local:
|
|
|
|
``zfs-dkms`` package provides Dynamic Kernel Module Support.
|
|
It will automatically build ZFS kernel modules for compatible
|
|
kernels.
|
|
|
|
However, there are several disadvantages:
|
|
|
|
- slow to build
|
|
- little warning when DKMS build fails
|
|
|
|
``zfs-dkms`` is required for users who are using custom kernels or
|
|
do not accept delays for kernel updates. This package is also required for derivative
|
|
distros such as `Artix Linux <https://artixlinux.org>`__.
|
|
|
|
Installation
|
|
~~~~~~~~~~~~
|
|
|
|
#. Check kernel variant::
|
|
|
|
INST_LINVAR=$(sed 's|.*linux|linux|' /proc/cmdline | sed 's|.img||g' | awk '{ print $1 }')
|
|
|
|
If you are using live image, use the hard-coded value::
|
|
|
|
#INST_LINVAR=linux
|
|
|
|
#. Check kernel version::
|
|
|
|
INST_LINVER=$(pacman -Qi ${INST_LINVAR} | grep Version | awk '{ print $3 }')
|
|
|
|
#. Install kernel headers::
|
|
|
|
if [ "${INST_LINVER}" = \
|
|
"$(pacman -Si ${INST_LINVAR}-headers | grep Version | awk '{ print $3 }')" ]; then
|
|
pacman -S --noconfirm --needed ${INST_LINVAR}-headers
|
|
else
|
|
pacman -U --noconfirm --needed \
|
|
https://archive.archlinux.org/packages/l/${INST_LINVAR}-headers/${INST_LINVAR}-headers-${INST_LINVER}-x86_64.pkg.tar.zst
|
|
fi
|
|
|
|
#. Install zfs-dkms::
|
|
|
|
pacman -Sy --needed --noconfirm zfs-dkms glibc
|
|
|
|
If pacman output contains the following error message,
|
|
then the kernel needs a `downgrade <#zfs-dkms-compatible-kernel>`__,
|
|
or you can try ``zfs-dkms-git`` package::
|
|
|
|
(3/4) Install DKMS modules
|
|
==> dkms install --no-depmod -m zfs -v 2.0.4 -k 5.12.0-rc5-1-git-00030-gd19cc4bfbff1
|
|
configure: error:
|
|
*** None of the expected "capability" interfaces were detected.
|
|
*** This may be because your kernel version is newer than what is
|
|
*** supported, or you are using a patched custom kernel with
|
|
*** incompatible modifications.
|
|
***
|
|
*** ZFS Version: zfs-2.0.4-1
|
|
*** Compatible Kernels: 3.10 - 5.11
|
|
|
|
#. Ignore kernel package from updates::
|
|
|
|
sed -i 's/#IgnorePkg/IgnorePkg/' /etc/pacman.conf
|
|
sed -i "/^IgnorePkg/ s/$/ ${INST_LINVAR} ${INST_LINVAR}-headers/" /etc/pacman.conf
|
|
|
|
#. Load kernel module::
|
|
|
|
modprobe zfs
|
|
|
|
Update kernel
|
|
~~~~~~~~~~~~~
|
|
#. Check kernel variant::
|
|
|
|
INST_LINVAR=$(sed 's|.*linux|linux|' /proc/cmdline | sed 's|.img||g' | awk '{ print $1 }')
|
|
|
|
#. Install zfs-dkms::
|
|
|
|
pacman -Sy --needed $INST_LINVAR $INST_LINVAR-headers zfs-dkms glibc
|
|
|
|
If pacman output contains the following error message,
|
|
then the kernel needs a `downgrade <#zfs-dkms-compatible-kernel>`__,
|
|
or you can try ``zfs-dkms-git`` package::
|
|
|
|
(3/4) Install DKMS modules
|
|
==> dkms install --no-depmod -m zfs -v 2.0.4 -k 5.12.0-rc5-1-git-00030-gd19cc4bfbff1
|
|
configure: error:
|
|
*** None of the expected "capability" interfaces were detected.
|
|
*** This may be because your kernel version is newer than what is
|
|
*** supported, or you are using a patched custom kernel with
|
|
*** incompatible modifications.
|
|
***
|
|
*** ZFS Version: zfs-2.0.4-1
|
|
*** Compatible Kernels: 3.10 - 5.11
|
|
|
|
Install compatible kernel
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
If the installed kernel is not
|
|
compatible with ZFS, a kernel downgrade
|
|
is needed.
|
|
|
|
#. Choose kernel variant. Available variants are:
|
|
|
|
* linux
|
|
* linux-lts
|
|
* linux-zen
|
|
* linux-hardened
|
|
|
|
::
|
|
|
|
INST_LINVAR=linux
|
|
|
|
#. Install kernels available when the package was built. Check build date::
|
|
|
|
DKMS_DATE=$(pacman -Syi zfs-dkms \
|
|
| grep 'Build Date' \
|
|
| sed 's/.*: //' \
|
|
| LC_ALL=C xargs -i{} date -d {} -u +%Y/%m/%d)
|
|
|
|
#. Check kernel version::
|
|
|
|
INST_LINVER=$(curl https://archive.archlinux.org/repos/${DKMS_DATE}/core/os/x86_64/ \
|
|
| grep \"${INST_LINVAR}-'[0-9]' \
|
|
| grep -v sig \
|
|
| sed "s|.*$INST_LINVAR-||" \
|
|
| sed "s|-x86_64.*||")
|
|
|
|
#. Install compatible kernel and headers::
|
|
|
|
pacman -U \
|
|
https://archive.archlinux.org/packages/l/${INST_LINVAR}/${INST_LINVAR}-${INST_LINVER}-x86_64.pkg.tar.zst \
|
|
https://archive.archlinux.org/packages/l/${INST_LINVAR}-headers/${INST_LINVAR}-headers-${INST_LINVER}-x86_64.pkg.tar.zst
|
|
|
|
#. Continue from `installation <#installation>`__.
|