mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
Add systemd unit files for ZFS startup
This adds systemd unit files replacing the functionality offered by the SysV init script found in etc/init.d. It has been developed and tested on Fedora 19, Fedora 20 and openSuSE 13.1. Four unit files and one target are offered. zfs-import-cache.service: Import pools from /etc/zfs/zpool.cache. This unit will wait for udev to settle. zfs-import-scan.service: Import pools by scanning /dev/disk/by-id for zvols. This unit will only run if /etc/zfs/zpool.cache is not present. This unit will wait for udev to settle zfs-mount.service: Mount ZFS native filesystems. It contains a dependency to be loaded before local-fs.target. zfs-share.service: Share NFS/SMB filesystems. This unit contains a dependency that will cause it to be restarted whenever the smb or nfs-server unit is restarted, restoring the shares added. zfs.target: This target pulls in the other units in order to start ZFS. It's the only unit that can be enabled/disabled, all other services are static and pulled in by dependencies. It will honour zfs=off and zfs=no options on the kernel command line. Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #2108
This commit is contained in:
parent
c5cb66addc
commit
881f45c6a8
29
config/user-systemd.m4
Normal file
29
config/user-systemd.m4
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_SYSTEMD], [
|
||||||
|
AC_ARG_ENABLE(systemd,
|
||||||
|
AC_HELP_STRING([--enable-systemd],
|
||||||
|
[install systemd unit/preset files [[default: yes]]]),
|
||||||
|
[],enable_systemd=yes)
|
||||||
|
|
||||||
|
AC_ARG_WITH(systemdunitdir,
|
||||||
|
AC_HELP_STRING([--with-systemdunitdir=DIR],
|
||||||
|
[install systemd unit files in dir [[/usr/lib/systemd/system]]]),
|
||||||
|
systemdunitdir=$withval,systemdunitdir=/usr/lib/systemd/system)
|
||||||
|
|
||||||
|
AC_ARG_WITH(systemdpresetdir,
|
||||||
|
AC_HELP_STRING([--with-systemdpresetdir=DIR],
|
||||||
|
[install systemd preset files in dir [[/usr/lib/systemd/system-preset]]]),
|
||||||
|
systemdpresetdir=$withval,systemdpresetdir=/usr/lib/systemd/system-preset)
|
||||||
|
|
||||||
|
AS_IF([test "x$enable_systemd" = xyes],
|
||||||
|
[
|
||||||
|
ZFS_INIT_SYSTEMD=systemd
|
||||||
|
ZFS_MODULE_LOAD=modules-load.d
|
||||||
|
modulesloaddir=/usr/lib/modules-load.d
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_SUBST(ZFS_INIT_SYSTEMD)
|
||||||
|
AC_SUBST(ZFS_MODULE_LOAD)
|
||||||
|
AC_SUBST(systemdunitdir)
|
||||||
|
AC_SUBST(systemdpresetdir)
|
||||||
|
AC_SUBST(modulesloaddir)
|
||||||
|
])
|
11
config/user-sysvinit.m4
Normal file
11
config/user-sysvinit.m4
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
AC_DEFUN([ZFS_AC_CONFIG_USER_SYSVINIT], [
|
||||||
|
AC_ARG_ENABLE(sysvinit,
|
||||||
|
AC_HELP_STRING([--enable-sysvinit],
|
||||||
|
[install SysV init scripts [default: yes]]),
|
||||||
|
[],enable_sysvinit=yes)
|
||||||
|
|
||||||
|
AS_IF([test "x$enable_sysvinit" = xyes],
|
||||||
|
[ZFS_INIT_SYSV=init.d])
|
||||||
|
|
||||||
|
AC_SUBST(ZFS_INIT_SYSV)
|
||||||
|
])
|
@ -3,6 +3,8 @@ dnl # Default ZFS user configuration
|
|||||||
dnl #
|
dnl #
|
||||||
AC_DEFUN([ZFS_AC_CONFIG_USER], [
|
AC_DEFUN([ZFS_AC_CONFIG_USER], [
|
||||||
ZFS_AC_CONFIG_USER_UDEV
|
ZFS_AC_CONFIG_USER_UDEV
|
||||||
|
ZFS_AC_CONFIG_USER_SYSTEMD
|
||||||
|
ZFS_AC_CONFIG_USER_SYSVINIT
|
||||||
ZFS_AC_CONFIG_USER_DRACUT
|
ZFS_AC_CONFIG_USER_DRACUT
|
||||||
ZFS_AC_CONFIG_USER_ARCH
|
ZFS_AC_CONFIG_USER_ARCH
|
||||||
ZFS_AC_CONFIG_USER_IOCTL
|
ZFS_AC_CONFIG_USER_IOCTL
|
||||||
|
@ -64,6 +64,9 @@ AC_CONFIG_FILES([
|
|||||||
etc/Makefile
|
etc/Makefile
|
||||||
etc/init.d/Makefile
|
etc/init.d/Makefile
|
||||||
etc/zfs/Makefile
|
etc/zfs/Makefile
|
||||||
|
etc/systemd/Makefile
|
||||||
|
etc/systemd/system/Makefile
|
||||||
|
etc/modules-load.d/Makefile
|
||||||
man/Makefile
|
man/Makefile
|
||||||
man/man1/Makefile
|
man/man1/Makefile
|
||||||
man/man5/Makefile
|
man/man5/Makefile
|
||||||
|
@ -1 +1,2 @@
|
|||||||
SUBDIRS = init.d zfs
|
SUBDIRS = zfs $(ZFS_INIT_SYSTEMD) $(ZFS_INIT_SYSV) $(ZFS_MODULE_LOAD)
|
||||||
|
DIST_SUBDIRS = init.d zfs systemd modules-load.d
|
||||||
|
1
etc/modules-load.d/.gitignore
vendored
Normal file
1
etc/modules-load.d/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
*.conf
|
13
etc/modules-load.d/Makefile.am
Normal file
13
etc/modules-load.d/Makefile.am
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
modulesload_DATA = \
|
||||||
|
$(top_srcdir)/etc/modules-load.d/zfs.conf
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
$(top_srcdir)/etc/modules-load.d/zfs.conf.in
|
||||||
|
|
||||||
|
$(modulesload_DATA):
|
||||||
|
-$(SED) \
|
||||||
|
-e '' \
|
||||||
|
'$@.in' >'$@'
|
||||||
|
|
||||||
|
distclean-local::
|
||||||
|
-$(RM) $(modulesload_DATA)
|
1
etc/modules-load.d/zfs.conf.in
Normal file
1
etc/modules-load.d/zfs.conf.in
Normal file
@ -0,0 +1 @@
|
|||||||
|
zfs
|
1
etc/systemd/Makefile.am
Normal file
1
etc/systemd/Makefile.am
Normal file
@ -0,0 +1 @@
|
|||||||
|
SUBDIRS = system
|
3
etc/systemd/system/.gitignore
vendored
Normal file
3
etc/systemd/system/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
*.service
|
||||||
|
*.target
|
||||||
|
*.preset
|
2
etc/systemd/system/50-zfs.preset.in
Normal file
2
etc/systemd/system/50-zfs.preset.in
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# ZFS is enabled by default
|
||||||
|
enable zfs.*
|
31
etc/systemd/system/Makefile.am
Normal file
31
etc/systemd/system/Makefile.am
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
systemdpreset_DATA = \
|
||||||
|
$(top_srcdir)/etc/systemd/system/50-zfs.preset
|
||||||
|
systemdunit_DATA = \
|
||||||
|
$(top_srcdir)/etc/systemd/system/zfs-import-scan.service \
|
||||||
|
$(top_srcdir)/etc/systemd/system/zfs-import-cache.service \
|
||||||
|
$(top_srcdir)/etc/systemd/system/zfs-mount.service \
|
||||||
|
$(top_srcdir)/etc/systemd/system/zfs-share.service \
|
||||||
|
$(top_srcdir)/etc/systemd/system/zfs.target
|
||||||
|
|
||||||
|
EXTRA_DIST = \
|
||||||
|
$(top_srcdir)/etc/systemd/system/zfs-import-scan.service.in \
|
||||||
|
$(top_srcdir)/etc/systemd/system/zfs-import-cache.service.in \
|
||||||
|
$(top_srcdir)/etc/systemd/system/zfs-mount.service.in \
|
||||||
|
$(top_srcdir)/etc/systemd/system/zfs-share.service.in \
|
||||||
|
$(top_srcdir)/etc/systemd/system/zfs.target.in \
|
||||||
|
$(top_srcdir)/etc/systemd/system/50-zfs.preset.in
|
||||||
|
|
||||||
|
$(systemdunit_DATA):
|
||||||
|
-$(SED) -e 's,@bindir\@,$(bindir),g' \
|
||||||
|
-e 's,@sbindir\@,$(sbindir),g' \
|
||||||
|
-e 's,@sysconfdir\@,$(sysconfdir),g' \
|
||||||
|
'$@.in' >'$@'
|
||||||
|
|
||||||
|
$(systemdpreset_DATA):
|
||||||
|
-$(SED) -e 's,@bindir\@,$(bindir),g' \
|
||||||
|
-e 's,@sbindir\@,$(sbindir),g' \
|
||||||
|
-e 's,@sysconfdir\@,$(sysconfdir),g' \
|
||||||
|
'$@.in' >'$@'
|
||||||
|
|
||||||
|
distclean-local::
|
||||||
|
-$(RM) $(systemdunit_DATA) $(systemdpreset_DATA)
|
11
etc/systemd/system/zfs-import-cache.service.in
Normal file
11
etc/systemd/system/zfs-import-cache.service.in
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Import ZFS pools by cache file
|
||||||
|
DefaultDependencies=no
|
||||||
|
Requires=systemd-udev-settle.service
|
||||||
|
After=systemd-udev-settle.service
|
||||||
|
ConditionPathExists=@sysconfdir@/zfs/zpool.cache
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=@sbindir@/zpool import -c @sysconfdir@/zfs/zpool.cache -aN
|
11
etc/systemd/system/zfs-import-scan.service.in
Normal file
11
etc/systemd/system/zfs-import-scan.service.in
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Import ZFS pools by device scanning
|
||||||
|
DefaultDependencies=no
|
||||||
|
Requires=systemd-udev-settle.service
|
||||||
|
After=systemd-udev-settle.service
|
||||||
|
ConditionPathExists=!@sysconfdir@/zfs/zpool.cache
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=@sbindir@/zpool import -d /dev/disk/by-id -aN
|
15
etc/systemd/system/zfs-mount.service.in
Normal file
15
etc/systemd/system/zfs-mount.service.in
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Mount ZFS filesystems
|
||||||
|
DefaultDependencies=no
|
||||||
|
Wants=zfs-import-cache.service
|
||||||
|
Wants=zfs-import-scan.service
|
||||||
|
Requires=systemd-udev-settle.service
|
||||||
|
After=systemd-udev-settle.service
|
||||||
|
After=zfs-import-cache.service
|
||||||
|
After=zfs-import-scan.service
|
||||||
|
Before=local-fs.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=@sbindir@/zfs mount -a
|
11
etc/systemd/system/zfs-share.service.in
Normal file
11
etc/systemd/system/zfs-share.service.in
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=ZFS file system shares
|
||||||
|
After=nfs-server.service
|
||||||
|
After=smb.service
|
||||||
|
PartOf=nfs-server.service
|
||||||
|
PartOf=smb.service
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
RemainAfterExit=yes
|
||||||
|
ExecStart=@sbindir@/zfs share -a
|
7
etc/systemd/system/zfs.target.in
Normal file
7
etc/systemd/system/zfs.target.in
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=ZFS startup target
|
||||||
|
Requires=zfs-mount.service
|
||||||
|
Requires=zfs-share.service
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
@ -10,7 +10,24 @@
|
|||||||
|
|
||||||
%bcond_with debug
|
%bcond_with debug
|
||||||
%bcond_with blkid
|
%bcond_with blkid
|
||||||
|
%bcond_with systemd
|
||||||
|
|
||||||
|
# Generic enable switch for systemd
|
||||||
|
%if %{with systemd}
|
||||||
|
%define _systemd 1
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# Fedora >= 15 comes with systemd, but only >= 18 has
|
||||||
|
# the proper macros
|
||||||
|
%if 0%{?fedora} >= 18
|
||||||
|
%define _systemd 1
|
||||||
|
%endif
|
||||||
|
|
||||||
|
# opensuse >= 12.1 comes with systemd, but only >= 13.1
|
||||||
|
# has the proper macros
|
||||||
|
%if 0%{?suse_version} >= 1310
|
||||||
|
%define _systemd 1
|
||||||
|
%endif
|
||||||
|
|
||||||
Name: @PACKAGE@
|
Name: @PACKAGE@
|
||||||
Version: @VERSION@
|
Version: @VERSION@
|
||||||
@ -38,6 +55,12 @@ BuildRequires: libuuid-devel
|
|||||||
BuildRequires: libblkid-devel
|
BuildRequires: libblkid-devel
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
|
%if 0%{?_systemd}
|
||||||
|
Requires(post): systemd
|
||||||
|
Requires(preun): systemd
|
||||||
|
Requires(postun): systemd
|
||||||
|
BuildRequires: systemd
|
||||||
|
%endif
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This package contains the ZFS command line utilities and libraries.
|
This package contains the ZFS command line utilities and libraries.
|
||||||
@ -85,6 +108,11 @@ image which is ZFS aware.
|
|||||||
%else
|
%else
|
||||||
%define blkid --without-blkid
|
%define blkid --without-blkid
|
||||||
%endif
|
%endif
|
||||||
|
%if 0%{?_systemd}
|
||||||
|
%define systemd --enable-systemd --with-systemdunitdir=%{_unitdir} --with-systemdpresetdir=%{_presetdir} --disable-sysvinit
|
||||||
|
%else
|
||||||
|
%define systemd --enable-sysvinit --disable-systemd
|
||||||
|
%endif
|
||||||
|
|
||||||
%setup -q
|
%setup -q
|
||||||
|
|
||||||
@ -95,7 +123,8 @@ image which is ZFS aware.
|
|||||||
--with-dracutdir=%{_dracutdir} \
|
--with-dracutdir=%{_dracutdir} \
|
||||||
--disable-static \
|
--disable-static \
|
||||||
%{debug} \
|
%{debug} \
|
||||||
%{blkid}
|
%{blkid} \
|
||||||
|
%{systemd}
|
||||||
make %{?_smp_mflags}
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
%install
|
%install
|
||||||
@ -105,16 +134,28 @@ find %{?buildroot}%{_libdir} -name '*.la' -exec rm -f {} \;
|
|||||||
|
|
||||||
%post
|
%post
|
||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
|
%if 0%{?_systemd}
|
||||||
|
%systemd_post zfs.target
|
||||||
|
%else
|
||||||
[ -x /sbin/chkconfig ] && /sbin/chkconfig --add zfs
|
[ -x /sbin/chkconfig ] && /sbin/chkconfig --add zfs
|
||||||
|
%endif
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
%preun
|
%preun
|
||||||
|
%if 0%{?_systemd}
|
||||||
|
%systemd_preun zfs.target
|
||||||
|
%else
|
||||||
if [ $1 -eq 0 ] ; then
|
if [ $1 -eq 0 ] ; then
|
||||||
[ -x /sbin/chkconfig ] && /sbin/chkconfig --del zfs
|
[ -x /sbin/chkconfig ] && /sbin/chkconfig --del zfs
|
||||||
fi
|
fi
|
||||||
|
%endif
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
%postun -p /sbin/ldconfig
|
%postun
|
||||||
|
/sbin/ldconfig
|
||||||
|
%if 0%{?_systemd}
|
||||||
|
%systemd_postun zfs.target
|
||||||
|
%endif
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%doc AUTHORS COPYRIGHT DISCLAIMER
|
%doc AUTHORS COPYRIGHT DISCLAIMER
|
||||||
@ -129,7 +170,13 @@ exit 0
|
|||||||
%{_udevdir}/zvol_id
|
%{_udevdir}/zvol_id
|
||||||
%{_udevdir}/rules.d/*
|
%{_udevdir}/rules.d/*
|
||||||
%config(noreplace) %{_sysconfdir}/%{name}
|
%config(noreplace) %{_sysconfdir}/%{name}
|
||||||
|
%if 0%{?_systemd}
|
||||||
|
/usr/lib/modules-load.d/*
|
||||||
|
%{_unitdir}/*
|
||||||
|
%{_presetdir}/*
|
||||||
|
%else
|
||||||
%{_sysconfdir}/init.d/*
|
%{_sysconfdir}/init.d/*
|
||||||
|
%endif
|
||||||
|
|
||||||
%files devel
|
%files devel
|
||||||
%{_libdir}/*.so
|
%{_libdir}/*.so
|
||||||
|
Loading…
Reference in New Issue
Block a user