mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +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 # | ||||
| AC_DEFUN([ZFS_AC_CONFIG_USER], [ | ||||
| 	ZFS_AC_CONFIG_USER_UDEV | ||||
| 	ZFS_AC_CONFIG_USER_SYSTEMD | ||||
| 	ZFS_AC_CONFIG_USER_SYSVINIT | ||||
| 	ZFS_AC_CONFIG_USER_DRACUT | ||||
| 	ZFS_AC_CONFIG_USER_ARCH | ||||
| 	ZFS_AC_CONFIG_USER_IOCTL | ||||
|  | ||||
| @ -64,6 +64,9 @@ AC_CONFIG_FILES([ | ||||
| 	etc/Makefile | ||||
| 	etc/init.d/Makefile | ||||
| 	etc/zfs/Makefile | ||||
| 	etc/systemd/Makefile | ||||
| 	etc/systemd/system/Makefile | ||||
| 	etc/modules-load.d/Makefile | ||||
| 	man/Makefile | ||||
| 	man/man1/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    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@ | ||||
| Version:        @VERSION@ | ||||
| @ -38,6 +55,12 @@ BuildRequires:  libuuid-devel | ||||
| BuildRequires:  libblkid-devel | ||||
| %endif | ||||
| %endif | ||||
| %if 0%{?_systemd} | ||||
| Requires(post): systemd | ||||
| Requires(preun): systemd | ||||
| Requires(postun): systemd | ||||
| BuildRequires: systemd | ||||
| %endif | ||||
| 
 | ||||
| %description | ||||
| This package contains the ZFS command line utilities and libraries. | ||||
| @ -85,6 +108,11 @@ image which is ZFS aware. | ||||
| %else | ||||
|     %define blkid --without-blkid | ||||
| %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 | ||||
| 
 | ||||
| @ -95,7 +123,8 @@ image which is ZFS aware. | ||||
|     --with-dracutdir=%{_dracutdir} \ | ||||
|     --disable-static \ | ||||
|     %{debug} \ | ||||
|     %{blkid} | ||||
|     %{blkid} \ | ||||
|     %{systemd} | ||||
| make %{?_smp_mflags} | ||||
| 
 | ||||
| %install | ||||
| @ -105,16 +134,28 @@ find %{?buildroot}%{_libdir} -name '*.la' -exec rm -f {} \; | ||||
| 
 | ||||
| %post | ||||
| /sbin/ldconfig | ||||
| %if 0%{?_systemd} | ||||
| %systemd_post zfs.target | ||||
| %else | ||||
| [ -x /sbin/chkconfig ] && /sbin/chkconfig --add zfs | ||||
| %endif | ||||
| exit 0 | ||||
| 
 | ||||
| %preun | ||||
| %if 0%{?_systemd} | ||||
| %systemd_preun zfs.target | ||||
| %else | ||||
| if [ $1 -eq 0 ] ; then | ||||
|     [ -x /sbin/chkconfig ] && /sbin/chkconfig --del zfs | ||||
| fi | ||||
| %endif | ||||
| exit 0 | ||||
| 
 | ||||
| %postun -p /sbin/ldconfig | ||||
| %postun | ||||
| /sbin/ldconfig | ||||
| %if 0%{?_systemd} | ||||
| %systemd_postun zfs.target | ||||
| %endif | ||||
| 
 | ||||
| %files | ||||
| %doc AUTHORS COPYRIGHT DISCLAIMER | ||||
| @ -129,7 +170,13 @@ exit 0 | ||||
| %{_udevdir}/zvol_id | ||||
| %{_udevdir}/rules.d/* | ||||
| %config(noreplace) %{_sysconfdir}/%{name} | ||||
| %if 0%{?_systemd} | ||||
| /usr/lib/modules-load.d/* | ||||
| %{_unitdir}/* | ||||
| %{_presetdir}/* | ||||
| %else | ||||
| %{_sysconfdir}/init.d/* | ||||
| %endif | ||||
| 
 | ||||
| %files devel | ||||
| %{_libdir}/*.so | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Ralf Ertzinger
						Ralf Ertzinger