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:
parent
f3f5263f8a
commit
e6e31dd540
|
@ -6,6 +6,9 @@ bc
|
|||
build-essential
|
||||
curl
|
||||
dbench
|
||||
debhelper-compat
|
||||
dh-python
|
||||
dkms
|
||||
fakeroot
|
||||
fio
|
||||
gdb
|
||||
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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" \
|
||||
|
@ -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
|
||||
|
|
|
@ -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 #
|
||||
|
|
|
@ -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])
|
||||
|
@ -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
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
rules
|
|
@ -2,8 +2,7 @@ Source: openzfs-linux
|
|||
Section: contrib/kernel
|
||||
Priority: optional
|
||||
Maintainer: ZFS on Linux specific mailing list <zfs-discuss@list.zfsonlinux.org>
|
||||
Build-Depends: abigail-tools,
|
||||
debhelper-compat (= 12),
|
||||
Build-Depends: debhelper-compat (= 12),
|
||||
dh-python,
|
||||
dkms (>> 2.1.1.2-5),
|
||||
libaio-dev,
|
||||
|
|
|
@ -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#
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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#
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)" \
|
||||
|
@ -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)
|
|
@ -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
|
Loading…
Reference in New Issue