Add native-deb* targets to build native Debian packages

In continuation of previous #13451, this commits adds native-deb*
targets for make to build native debian packages. Github workflows
are updated to build and test native Debian packages.

Native packages only build with pre-configured paths (see the
dh_auto_configure section in contrib/debian/rules.in). While
building native packages, paths should not be configured. Initial
config flags e.g. '--enable-debug' are replaced in
contrib/debian/rules.in.

Additional packages on top of existing zfs packages required to
build native packages include debhelper-compat, dh-python, dkms,
po-debconf, python3-all-dev, python3-sphinx.

Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Umer Saleem <usaleem@ixsystems.com>
Closes #14265
This commit is contained in:
Umer Saleem 2022-12-14 06:33:05 +05:00 committed by GitHub
parent f3f5263f8a
commit e6e31dd540
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 50 additions and 92 deletions

View File

@ -6,6 +6,9 @@ bc
build-essential build-essential
curl curl
dbench dbench
debhelper-compat
dh-python
dkms
fakeroot fakeroot
fio fio
gdb gdb
@ -33,12 +36,15 @@ mdadm
nfs-kernel-server nfs-kernel-server
pamtester pamtester
parted parted
po-debconf
python3 python3
python3-all-dev
python3-cffi python3-cffi
python3-dev python3-dev
python3-packaging python3-packaging
python3-pip python3-pip
python3-setuptools python3-setuptools
python3-sphinx
rng-tools-debian rng-tools-debian
rsync rsync
samba samba

View File

@ -32,15 +32,18 @@ jobs:
./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan ./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan
- name: Make - name: Make
run: | run: |
make -j$(nproc) --no-print-directory --silent pkg-utils pkg-kmod make --no-print-directory --silent native-deb-utils native-deb-kmod
mv ../*.deb .
rm ./openzfs-zfs-dkms*.deb ./openzfs-zfs-dracut*.deb
- name: Install - name: Install
run: | run: |
sudo dpkg -i *.deb
# Update order of directories to search for modules, otherwise # Update order of directories to search for modules, otherwise
# Ubuntu will load kernel-shipped ones. # Ubuntu will load kernel-shipped ones.
sudo sed -i.bak 's/updates/extra updates/' /etc/depmod.d/ubuntu.conf sudo sed -i.bak 's/updates/extra updates/' /etc/depmod.d/ubuntu.conf
sudo depmod sudo dpkg -i *.deb
sudo modprobe zfs # Native Debian packages enable and start the services
# Stop zfs-zed daemon, as it may interfere with some ZTS test cases
sudo systemctl stop zfs-zed
# Workaround for cloud-init bug # Workaround for cloud-init bug
# see https://github.com/openzfs/zfs/issues/12644 # see https://github.com/openzfs/zfs/issues/12644
FILE=/lib/udev/rules.d/10-cloud-init-hook-hotplug.rules FILE=/lib/udev/rules.d/10-cloud-init-hook-hotplug.rules

View File

@ -28,15 +28,18 @@ jobs:
./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan ./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan
- name: Make - name: Make
run: | run: |
make -j$(nproc) --no-print-directory --silent pkg-utils pkg-kmod make --no-print-directory --silent native-deb-utils native-deb-kmod
mv ../*.deb .
rm ./openzfs-zfs-dkms*.deb ./openzfs-zfs-dracut*.deb
- name: Install - name: Install
run: | run: |
sudo dpkg -i *.deb
# Update order of directories to search for modules, otherwise # Update order of directories to search for modules, otherwise
# Ubuntu will load kernel-shipped ones. # Ubuntu will load kernel-shipped ones.
sudo sed -i.bak 's/updates/extra updates/' /etc/depmod.d/ubuntu.conf sudo sed -i.bak 's/updates/extra updates/' /etc/depmod.d/ubuntu.conf
sudo depmod sudo dpkg -i *.deb
sudo modprobe zfs # Native Debian packages enable and start the services
# Stop zfs-zed daemon, as it may interfere with some ZTS test cases
sudo systemctl stop zfs-zed
# Workaround for cloud-init bug # Workaround for cloud-init bug
# see https://github.com/openzfs/zfs/issues/12644 # see https://github.com/openzfs/zfs/issues/12644
FILE=/lib/udev/rules.d/10-cloud-init-hook-hotplug.rules FILE=/lib/udev/rules.d/10-cloud-init-hook-hotplug.rules

View File

@ -1,14 +1,17 @@
PHONY += deb-kmod deb-dkms deb-utils deb deb-local PHONY += deb-kmod deb-dkms deb-utils deb deb-local native-deb-local \
native-deb-utils native-deb-kmod native-deb
deb-local: native-deb-local:
@(if test "${HAVE_DPKGBUILD}" = "no"; then \ @(if test "${HAVE_DPKGBUILD}" = "no"; then \
echo -e "\n" \ echo -e "\n" \
"*** Required util ${DPKGBUILD} missing. Please install the\n" \ "*** Required util ${DPKGBUILD} missing. Please install the\n" \
"*** package for your distribution which provides ${DPKGBUILD},\n" \ "*** package for your distribution which provides ${DPKGBUILD},\n" \
"*** re-run configure, and try again.\n"; \ "*** re-run configure, and try again.\n"; \
exit 1; \ exit 1; \
fi; \ fi)
if test "${HAVE_ALIEN}" = "no"; then \
deb-local: native-deb-local
@(if test "${HAVE_ALIEN}" = "no"; then \
echo -e "\n" \ echo -e "\n" \
"*** Required util ${ALIEN} missing. Please install the\n" \ "*** Required util ${ALIEN} missing. Please install the\n" \
"*** package for your distribution which provides ${ALIEN},\n" \ "*** package for your distribution which provides ${ALIEN},\n" \
@ -85,3 +88,16 @@ deb-utils: deb-local rpm-utils-initramfs
$$pkg8 $$pkg9 $$pkg10 $$pkg11; $$pkg8 $$pkg9 $$pkg10 $$pkg11;
deb: deb-kmod deb-dkms deb-utils deb: deb-kmod deb-dkms deb-utils
debian:
cp -r contrib/debian debian; chmod +x debian/rules;
native-deb-utils: native-deb-local debian
cp contrib/debian/control debian/control; \
$(DPKGBUILD) -b -rfakeroot -us -uc;
native-deb-kmod: native-deb-local debian
sh scripts/make_gitrev.sh; \
fakeroot debian/rules override_dh_binary-modules;
native-deb: native-deb-utils native-deb-kmod

View File

@ -464,6 +464,7 @@ AC_DEFUN([ZFS_AC_DPKG], [
AC_SUBST(HAVE_DPKGBUILD) AC_SUBST(HAVE_DPKGBUILD)
AC_SUBST(DPKGBUILD) AC_SUBST(DPKGBUILD)
AC_SUBST(DPKGBUILD_VERSION) AC_SUBST(DPKGBUILD_VERSION)
AC_SUBST([CFGOPTS], ["$CFGOPTS"])
]) ])
dnl # dnl #

View File

@ -32,6 +32,7 @@
AC_INIT(m4_esyscmd(awk '/^Name:/ {printf $2}' META), AC_INIT(m4_esyscmd(awk '/^Name:/ {printf $2}' META),
m4_esyscmd(awk '/^Version:/ {printf $2}' META)) m4_esyscmd(awk '/^Version:/ {printf $2}' META))
CFGOPTS="$*"
AC_LANG(C) AC_LANG(C)
ZFS_AC_META ZFS_AC_META
AC_CONFIG_AUX_DIR([config]) AC_CONFIG_AUX_DIR([config])
@ -65,6 +66,7 @@ ZFS_AC_DEBUG_KMEM_TRACKING
ZFS_AC_DEBUG_INVARIANTS ZFS_AC_DEBUG_INVARIANTS
AC_CONFIG_FILES([ AC_CONFIG_FILES([
contrib/debian/rules
Makefile Makefile
include/Makefile include/Makefile
lib/libzfs/libzfs.pc lib/libzfs/libzfs.pc

1
contrib/debian/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
rules

View File

@ -2,8 +2,7 @@ Source: openzfs-linux
Section: contrib/kernel Section: contrib/kernel
Priority: optional Priority: optional
Maintainer: ZFS on Linux specific mailing list <zfs-discuss@list.zfsonlinux.org> Maintainer: ZFS on Linux specific mailing list <zfs-discuss@list.zfsonlinux.org>
Build-Depends: abigail-tools, Build-Depends: debhelper-compat (= 12),
debhelper-compat (= 12),
dh-python, dh-python,
dkms (>> 2.1.1.2-5), dkms (>> 2.1.1.2-5),
libaio-dev, libaio-dev,

View File

@ -1,6 +1,8 @@
#!/bin/sh #!/bin/sh
set -e set -e
if ! $(ldd "/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)/security/pam_zfs_key.so" | grep -q "libasan") ; then
pam-auth-update --package pam-auth-update --package
fi
#DEBHELPER# #DEBHELPER#

View File

@ -4,13 +4,6 @@ set -e
zedd="/usr/lib/zfs-linux/zed.d" zedd="/usr/lib/zfs-linux/zed.d"
etcd="/etc/zfs/zed.d" etcd="/etc/zfs/zed.d"
# enable all default zedlets that are not overridden
while read -r file ; do
etcfile="${etcd}/${file}"
[ -e "${etcfile}" ] && continue
ln -sfT "${zedd}/${file}" "${etcfile}"
done < "${zedd}/DEFAULT-ENABLED"
# remove the overrides created in prerm # remove the overrides created in prerm
find "${etcd}" -maxdepth 1 -lname '/dev/null' -delete find "${etcd}" -maxdepth 1 -lname '/dev/null' -delete
# remove any dangling symlinks to old zedlets # remove any dangling symlinks to old zedlets

View File

@ -1,16 +0,0 @@
#!/bin/sh
set -e
zedd="/usr/lib/zfs-linux/zed.d"
etcd="/etc/zfs/zed.d"
if [ "$1" != "failed-upgrade" ] && [ -d "${etcd}" ] && [ -d "${zedd}" ] ; then
while read -r file ; do
etcfile="${etcd}/${file}"
( [ -L "${etcfile}" ] || [ -e "${etcfile}" ] ) && continue
ln -sT /dev/null "${etcfile}"
done < "${zedd}/DEFAULT-ENABLED"
fi
#DEBHELPER#

View File

@ -131,5 +131,4 @@ usr/share/man/man8/zstreamdump.8
usr/share/man/man4/spl.4 usr/share/man/man4/spl.4
usr/share/man/man4/zfs.4 usr/share/man/man4/zfs.4
usr/share/man/man7/zpool-features.7 usr/share/man/man7/zpool-features.7
usr/share/man/man7/dracut.zfs.7
usr/share/man/man8/zpool_influxdb.8 usr/share/man/man8/zpool_influxdb.8

View File

@ -1,21 +1,6 @@
#!/bin/sh #!/bin/sh
set -e set -e
# The hostname and hostid of the last system to access a ZFS pool are stored in
# the ZFS pool itself. A pool is foreign if, during `zpool import`, the
# current hostname and hostid are different than the stored values thereof.
#
# The only way of having a stable hostid is to define it in /etc/hostid.
# This postinst helper will check if we already have the hostid stabilized by
# checking the existence of the file /etc/hostid to be 4 bytes at least.
# If this file don't already exists on our system or has less than 4 bytes, then
# a new (random) value is generated with zgenhostid (8) and stored in
# /etc/hostid
if [ ! -f /etc/hostid ] || [ "$(stat -c %s /etc/hostid)" -lt 4 ] ; then
zgenhostid
fi
# When processed to here but zfs kernel module is not loaded, the subsequent # When processed to here but zfs kernel module is not loaded, the subsequent
# services would fail to start. In this case the installation process just # services would fail to start. In this case the installation process just
# fails at the postinst stage. The user could do # fails at the postinst stage. The user could do

View File

@ -35,7 +35,7 @@ override_dh_autoreconf:
override_dh_auto_configure: override_dh_auto_configure:
@# Build the userland, but don't build the kernel modules. @# Build the userland, but don't build the kernel modules.
dh_auto_configure -- \ dh_auto_configure -- @CFGOPTS@ \
--bindir=/usr/bin \ --bindir=/usr/bin \
--sbindir=/sbin \ --sbindir=/sbin \
--libdir=/lib/"$(DEB_HOST_MULTIARCH)" \ --libdir=/lib/"$(DEB_HOST_MULTIARCH)" \
@ -195,7 +195,7 @@ override_dh_prep-deb-files:
override_dh_configure_modules: override_dh_configure_modules_stamp override_dh_configure_modules: override_dh_configure_modules_stamp
override_dh_configure_modules_stamp: override_dh_configure_modules_stamp:
./configure \ ./configure @CFGOPTS@ \
--with-config=kernel \ --with-config=kernel \
--with-linux=$(KSRC) \ --with-linux=$(KSRC) \
--with-linux-obj=$(KOBJ) --with-linux-obj=$(KOBJ)

View File

@ -1,36 +0,0 @@
#!/bin/bash
#
# This script can be used to invoke OpenZFS build from native Debian
# packaging.
#
print_help ()
{
echo "Usage: $(basename $0) [OPTIONS]"
echo
echo "Options:"
echo " -b, --build Build OpenZFS from Debian Packaging"
echo " -c, --clean Clean the workspace"
}
if [ "$#" -ne 1 ]; then
print_help
exit 1
fi
case $1 in
-b|--build)
cp -r contrib/debian debian
debuild -i -us -uc -b && fakeroot debian/rules override_dh_binary-modules
;;
-c|--clean)
fakeroot debian/rules override_dh_auto_clean
rm -rf debian
;;
*)
print_help
;;
esac
exit 0