Fix zfs-functions packaging bug

This fixes a bug where the generated zfs-functions was being included
along with original zfs-functions.in in the make dist tarball.  This
caused an unfortunate series of events during build/packaging that
resulted in the RPM-installed /etc/zfs/zfs-functions listing the
paths as:

ZFS="/usr/local/sbin/zfs"
ZED="/usr/local/sbin/zed"
ZPOOL="/usr/local/sbin/zpool"

When they should have been:

ZFS="/sbin/zfs"
ZED="/sbin/zed"
ZPOOL="/sbin/zpool"

This affects init.d (non-systemd) distros like CentOS 6.

/etc/default/zfs and /etc/zfs/zfs-functions are also used by the
initramfs, so they need to be built even when init.d support is not.
They have been moved to the (new) etc/default and (existing) etc/zfs
source directories, respectively.

Fixes: #9443

Co-authored-by: Tony Hutter <hutter2@llnl.gov>
Signed-off-by: Richard Laager <rlaager@wiktel.com>
This commit is contained in:
Richard Laager 2020-02-06 09:28:20 -08:00 committed by Tony Hutter
parent d7c076c793
commit e1b0704568
12 changed files with 48 additions and 27 deletions

View File

@ -67,6 +67,7 @@ AC_CONFIG_FILES([
udev/Makefile udev/Makefile
udev/rules.d/Makefile udev/rules.d/Makefile
etc/Makefile etc/Makefile
etc/default/Makefile
etc/init.d/Makefile etc/init.d/Makefile
etc/zfs/Makefile etc/zfs/Makefile
etc/systemd/Makefile etc/systemd/Makefile

View File

@ -6,15 +6,10 @@ initrd_SCRIPTS = \
SUBDIRS = hooks scripts SUBDIRS = hooks scripts
EXTRA_DIST = \ EXTRA_DIST = \
$(top_srcdir)/etc/init.d/zfs \
$(top_srcdir)/etc/init.d/zfs-functions \
$(top_srcdir)/contrib/initramfs/conf.d/zfs \ $(top_srcdir)/contrib/initramfs/conf.d/zfs \
$(top_srcdir)/contrib/initramfs/conf-hooks.d/zfs \ $(top_srcdir)/contrib/initramfs/conf-hooks.d/zfs \
$(top_srcdir)/contrib/initramfs/README.initramfs.markdown $(top_srcdir)/contrib/initramfs/README.initramfs.markdown
$(top_srcdir)/etc/init.d/zfs $(top_srcdir)/etc/init.d/zfs-functions:
$(MAKE) -C $(top_srcdir)/etc/init.d zfs zfs-functions
install-initrdSCRIPTS: $(EXTRA_DIST) install-initrdSCRIPTS: $(EXTRA_DIST)
for d in conf.d conf-hooks.d scripts/local-top; do \ for d in conf.d conf-hooks.d scripts/local-top; do \
$(MKDIR_P) $(DESTDIR)$(initrddir)/$$d; \ $(MKDIR_P) $(DESTDIR)$(initrddir)/$$d; \
@ -26,9 +21,3 @@ install-initrdSCRIPTS: $(EXTRA_DIST)
cp $(top_builddir)/contrib/initramfs/$$d/zfs \ cp $(top_builddir)/contrib/initramfs/$$d/zfs \
$(DESTDIR)$(initrddir)/$$d/; \ $(DESTDIR)$(initrddir)/$$d/; \
done done
$(MKDIR_P) $(DESTDIR)$(DEFAULT_INITCONF_DIR); \
cp $(top_builddir)/etc/init.d/zfs \
$(DESTDIR)$(DEFAULT_INITCONF_DIR)/; \
$(MKDIR_P) $(DESTDIR)$(sysconfdir)/zfs; \
cp $(top_builddir)/etc/init.d/zfs-functions \
$(DESTDIR)$(sysconfdir)/zfs/

View File

@ -1,2 +1,2 @@
SUBDIRS = zfs sudoers.d $(ZFS_INIT_SYSTEMD) $(ZFS_INIT_SYSV) $(ZFS_MODULE_LOAD) SUBDIRS = default zfs sudoers.d $(ZFS_INIT_SYSTEMD) $(ZFS_INIT_SYSV) $(ZFS_MODULE_LOAD)
DIST_SUBDIRS = init.d zfs systemd modules-load.d sudoers.d DIST_SUBDIRS = default init.d zfs systemd modules-load.d sudoers.d

1
etc/default/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
zfs

12
etc/default/Makefile.am Normal file
View File

@ -0,0 +1,12 @@
initconfdir = $(DEFAULT_INITCONF_DIR)
initconf_SCRIPTS = zfs
EXTRA_DIST = \
$(top_srcdir)/etc/default/zfs.in
$(initconf_SCRIPTS):%:%.in Makefile
$(SED) \
-e 's,@sysconfdir\@,$(sysconfdir),g' \
$< >'$@'
CLEANFILES = $(initconf_SCRIPTS)

View File

@ -1,4 +1,3 @@
zfs-functions
zfs-import zfs-import
zfs-mount zfs-mount
zfs-share zfs-share

View File

@ -1,21 +1,15 @@
initdir = $(DEFAULT_INIT_DIR) initdir = $(DEFAULT_INIT_DIR)
init_SCRIPTS = zfs-import zfs-mount zfs-share zfs-zed init_SCRIPTS = zfs-import zfs-mount zfs-share zfs-zed
initcommondir = $(sysconfdir)/zfs
initcommon_SCRIPTS = zfs-functions
initconfdir = $(DEFAULT_INITCONF_DIR) initconfdir = $(DEFAULT_INITCONF_DIR)
initconf_SCRIPTS = zfs
EXTRA_DIST = \ EXTRA_DIST = \
$(top_srcdir)/etc/init.d/zfs-functions.in \
$(top_srcdir)/etc/init.d/zfs-share.in \ $(top_srcdir)/etc/init.d/zfs-share.in \
$(top_srcdir)/etc/init.d/zfs-import.in \ $(top_srcdir)/etc/init.d/zfs-import.in \
$(top_srcdir)/etc/init.d/zfs-mount.in \ $(top_srcdir)/etc/init.d/zfs-mount.in \
$(top_srcdir)/etc/init.d/zfs-zed.in \ $(top_srcdir)/etc/init.d/zfs-zed.in
$(top_srcdir)/etc/init.d/zfs.in
$(init_SCRIPTS) $(initconf_SCRIPTS) $(initcommon_SCRIPTS):%:%.in Makefile $(init_SCRIPTS):%:%.in Makefile
-(if [ -e /etc/debian_version ]; then \ -(if [ -e /etc/debian_version ]; then \
NFS_SRV=nfs-kernel-server; \ NFS_SRV=nfs-kernel-server; \
else \ else \
@ -26,7 +20,8 @@ $(init_SCRIPTS) $(initconf_SCRIPTS) $(initcommon_SCRIPTS):%:%.in Makefile
else \ else \
SHELL=/bin/sh; \ SHELL=/bin/sh; \
fi; \ fi; \
$(SED) -e 's,@bindir\@,$(bindir),g' \ $(SED) \
-e 's,@bindir\@,$(bindir),g' \
-e 's,@sbindir\@,$(sbindir),g' \ -e 's,@sbindir\@,$(sbindir),g' \
-e 's,@udevdir\@,$(udevdir),g' \ -e 's,@udevdir\@,$(udevdir),g' \
-e 's,@udevruledir\@,$(udevruledir),g' \ -e 's,@udevruledir\@,$(udevruledir),g' \
@ -37,7 +32,6 @@ $(init_SCRIPTS) $(initconf_SCRIPTS) $(initcommon_SCRIPTS):%:%.in Makefile
-e "s,@SHELL\@,$$SHELL,g" \ -e "s,@SHELL\@,$$SHELL,g" \
-e "s,@NFS_SRV\@,$$NFS_SRV,g" \ -e "s,@NFS_SRV\@,$$NFS_SRV,g" \
$< >'$@'; \ $< >'$@'; \
[ '$@' = 'zfs-functions' -o '$@' = 'zfs' ] || \
chmod +x '$@') chmod +x '$@')
CLEANFILES = $(init_SCRIPTS) $(initcommon_SCRIPTS) $(initconf_SCRIPTS) CLEANFILES = $(init_SCRIPTS)

View File

@ -35,7 +35,7 @@ SUPPORT
If you're making your own distribution and you want the scripts to If you're making your own distribution and you want the scripts to
work on that, the biggest problem you'll (probably) have is the part work on that, the biggest problem you'll (probably) have is the part
at the beginning of the "zfs-functions.in" file which sets up the at the beginning of the "zfs-functions" file which sets up the
logging output. logging output.
INSTALLING INIT SCRIPT LINKS INSTALLING INIT SCRIPT LINKS

1
etc/zfs/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
zfs-functions

View File

@ -6,5 +6,29 @@ pkgsysconf_DATA = \
vdev_id.conf.sas_switch.example \ vdev_id.conf.sas_switch.example \
vdev_id.conf.multipath.example \ vdev_id.conf.multipath.example \
vdev_id.conf.scsi.example vdev_id.conf.scsi.example
pkgsysconf_SCRIPTS = \
zfs-functions
EXTRA_DIST = $(pkgsysconf_DATA) EXTRA_DIST = $(pkgsysconf_DATA) \
zfs-functions.in
$(pkgsysconf_SCRIPTS):%:%.in Makefile
-(if [ -e /etc/debian_version ]; then \
NFS_SRV=nfs-kernel-server; \
else \
NFS_SRV=nfs; \
fi; \
if [ -e /sbin/openrc-run ]; then \
SHELL=/sbin/openrc-run; \
else \
SHELL=/bin/sh; \
fi; \
$(SED) \
-e 's,@sbindir\@,$(sbindir),g' \
-e 's,@sysconfdir\@,$(sysconfdir),g' \
-e 's,@initconfdir\@,$(initconfdir),g' \
$< >'$@'; \
[ '$@' = 'zfs-functions' ] || \
chmod +x '$@')
CLEANFILES = $(pkgsysconf_SCRIPTS)