Skip to content

Commit

Permalink
Add native-deb* targets to build native Debian packages
Browse files Browse the repository at this point in the history
In continuation of previous openzfs#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 <[email protected]>
Reviewed-by: Ryan Moeller <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Umer Saleem <[email protected]>
Closes openzfs#14265
  • Loading branch information
usaleem-ix authored Dec 14, 2022
1 parent f3f5263 commit e6e31dd
Show file tree
Hide file tree
Showing 15 changed files with 50 additions and 92 deletions.
6 changes: 6 additions & 0 deletions .github/workflows/build-dependencies.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ bc
build-essential
curl
dbench
debhelper-compat
dh-python
dkms
fakeroot
fio
gdb
Expand Down Expand Up @@ -33,12 +36,15 @@ mdadm
nfs-kernel-server
pamtester
parted
po-debconf
python3
python3-all-dev
python3-cffi
python3-dev
python3-packaging
python3-pip
python3-setuptools
python3-sphinx
rng-tools-debian
rsync
samba
Expand Down
11 changes: 7 additions & 4 deletions .github/workflows/zfs-tests-functional.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,18 @@ jobs:
./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan
- name: Make
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
run: |
sudo dpkg -i *.deb
# Update order of directories to search for modules, otherwise
# Ubuntu will load kernel-shipped ones.
sudo sed -i.bak 's/updates/extra updates/' /etc/depmod.d/ubuntu.conf
sudo depmod
sudo modprobe zfs
sudo dpkg -i *.deb
# 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
# see https://github.com/openzfs/zfs/issues/12644
FILE=/lib/udev/rules.d/10-cloud-init-hook-hotplug.rules
Expand Down
11 changes: 7 additions & 4 deletions .github/workflows/zfs-tests-sanity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,18 @@ jobs:
./configure --enable-debug --enable-debuginfo --enable-asan --enable-ubsan
- name: Make
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
run: |
sudo dpkg -i *.deb
# Update order of directories to search for modules, otherwise
# Ubuntu will load kernel-shipped ones.
sudo sed -i.bak 's/updates/extra updates/' /etc/depmod.d/ubuntu.conf
sudo depmod
sudo modprobe zfs
sudo dpkg -i *.deb
# 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
# see https://github.com/openzfs/zfs/issues/12644
FILE=/lib/udev/rules.d/10-cloud-init-hook-hotplug.rules
Expand Down
24 changes: 20 additions & 4 deletions config/deb.am
Original file line number Diff line number Diff line change
@@ -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 \
echo -e "\n" \
"*** Required util ${DPKGBUILD} missing. Please install the\n" \
"*** package for your distribution which provides ${DPKGBUILD},\n" \
"*** re-run configure, and try again.\n"; \
exit 1; \
fi; \
if test "${HAVE_ALIEN}" = "no"; then \
fi)

deb-local: native-deb-local
@(if test "${HAVE_ALIEN}" = "no"; then \
echo -e "\n" \
"*** Required util ${ALIEN} missing. Please install the\n" \
"*** package for your distribution which provides ${ALIEN},\n" \
Expand Down Expand Up @@ -85,3 +88,16 @@ deb-utils: deb-local rpm-utils-initramfs
$$pkg8 $$pkg9 $$pkg10 $$pkg11;

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
1 change: 1 addition & 0 deletions config/zfs-build.m4
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,7 @@ AC_DEFUN([ZFS_AC_DPKG], [
AC_SUBST(HAVE_DPKGBUILD)
AC_SUBST(DPKGBUILD)
AC_SUBST(DPKGBUILD_VERSION)
AC_SUBST([CFGOPTS], ["$CFGOPTS"])
])

dnl #
Expand Down
2 changes: 2 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

AC_INIT(m4_esyscmd(awk '/^Name:/ {printf $2}' META),
m4_esyscmd(awk '/^Version:/ {printf $2}' META))
CFGOPTS="$*"
AC_LANG(C)
ZFS_AC_META
AC_CONFIG_AUX_DIR([config])
Expand Down Expand Up @@ -65,6 +66,7 @@ ZFS_AC_DEBUG_KMEM_TRACKING
ZFS_AC_DEBUG_INVARIANTS

AC_CONFIG_FILES([
contrib/debian/rules
Makefile
include/Makefile
lib/libzfs/libzfs.pc
Expand Down
1 change: 1 addition & 0 deletions contrib/debian/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
rules
3 changes: 1 addition & 2 deletions contrib/debian/control
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ Source: openzfs-linux
Section: contrib/kernel
Priority: optional
Maintainer: ZFS on Linux specific mailing list <[email protected]>
Build-Depends: abigail-tools,
debhelper-compat (= 12),
Build-Depends: debhelper-compat (= 12),
dh-python,
dkms (>> 2.1.1.2-5),
libaio-dev,
Expand Down
4 changes: 3 additions & 1 deletion contrib/debian/openzfs-libpam-zfs.postinst
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/bin/sh
set -e

pam-auth-update --package
if ! $(ldd "/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)/security/pam_zfs_key.so" | grep -q "libasan") ; then
pam-auth-update --package
fi

#DEBHELPER#
7 changes: 0 additions & 7 deletions contrib/debian/openzfs-zfs-zed.postinst
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,6 @@ set -e
zedd="/usr/lib/zfs-linux/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
find "${etcd}" -maxdepth 1 -lname '/dev/null' -delete
# remove any dangling symlinks to old zedlets
Expand Down
16 changes: 0 additions & 16 deletions contrib/debian/openzfs-zfs-zed.prerm

This file was deleted.

1 change: 0 additions & 1 deletion contrib/debian/openzfs-zfsutils.install
Original file line number Diff line number Diff line change
Expand Up @@ -131,5 +131,4 @@ usr/share/man/man8/zstreamdump.8
usr/share/man/man4/spl.4
usr/share/man/man4/zfs.4
usr/share/man/man7/zpool-features.7
usr/share/man/man7/dracut.zfs.7
usr/share/man/man8/zpool_influxdb.8
15 changes: 0 additions & 15 deletions contrib/debian/openzfs-zfsutils.postinst
Original file line number Diff line number Diff line change
@@ -1,21 +1,6 @@
#!/bin/sh
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
# services would fail to start. In this case the installation process just
# fails at the postinst stage. The user could do
Expand Down
4 changes: 2 additions & 2 deletions contrib/debian/rules → contrib/debian/rules.in
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ override_dh_autoreconf:

override_dh_auto_configure:
@# Build the userland, but don't build the kernel modules.
dh_auto_configure -- \
dh_auto_configure -- @CFGOPTS@ \
--bindir=/usr/bin \
--sbindir=/sbin \
--libdir=/lib/"$(DEB_HOST_MULTIARCH)" \
Expand Down Expand Up @@ -195,7 +195,7 @@ override_dh_prep-deb-files:

override_dh_configure_modules: override_dh_configure_modules_stamp
override_dh_configure_modules_stamp:
./configure \
./configure @CFGOPTS@ \
--with-config=kernel \
--with-linux=$(KSRC) \
--with-linux-obj=$(KOBJ)
Expand Down
36 changes: 0 additions & 36 deletions scripts/debian-packaging.sh

This file was deleted.

0 comments on commit e6e31dd

Please sign in to comment.