diff options
author | Kyle Fuller <[email protected]> | 2011-07-25 01:00:53 +0100 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2011-08-01 09:54:44 -0700 |
commit | 5faa9c0367e8d6b1ee1c45f1ebeffd3e53ef35e8 (patch) | |
tree | 53358897ebeed920a56fc39c9ab14b87b9b5c98c /etc/init.d/zfs.gentoo.in | |
parent | 7f4afd300b753ee7e0ce1f8d12c098119193001b (diff) |
Turn the init.d scripts into autoconf config files
This change ensures the paths used by the provided init scripts
always reference the prefixes provided at configure time. The
@sbindir@ and @sysconfdir@ prefixes will be correctly replaced
at build time.
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #336
Diffstat (limited to 'etc/init.d/zfs.gentoo.in')
-rw-r--r-- | etc/init.d/zfs.gentoo.in | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/etc/init.d/zfs.gentoo.in b/etc/init.d/zfs.gentoo.in new file mode 100644 index 000000000..767aba8f9 --- /dev/null +++ b/etc/init.d/zfs.gentoo.in @@ -0,0 +1,111 @@ +#!/sbin/runscript +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-fs/zfs/files/zfs,v 0.9 2011/04/30 10:13:43 devsk Exp $ + +depend() +{ + # bootmisc will log to /var which may be a different zfs than root. + before net bootmisc + after udev localmount + keyword -lxc -openvz -prefix -vserver +} + +ZFS="@sbindir@/zfs" +ZPOOL="@sbindir@/zpool" +ZPOOL_CACHE="@sysconfdir@/zfs/zpool.cache" +ZFS_MODULE=zfs + +checksystem() { + if [ ! -c /dev/zfs ]; then + einfo "Checking if ZFS modules present" + if [ "x$(modprobe -l $ZFS_MODULE | grep $ZFS_MODULE)" == "x" ]; then + eerror "$ZFS_MODULE not found. Is the ZFS package installed?" + return 1 + fi + fi + einfo "Checking if zfs userspace tools present" + if [ ! -x $ZPOOL ]; then + eerror "$ZPOOL binary not found." + return 1 + fi + if [ ! -x $ZFS ]; then + eerror "$ZFS binary not found." + return 1 + fi + return 0 +} + +start() { + ebegin "Starting ZFS" + checksystem || return 1 + + # Delay until all required block devices are present. + udevadm settle + + if [ ! -c /dev/zfs ]; then + modprobe $ZFS_MODULE + rv=$? + if [ $rv -ne 0 ]; then + eerror "Failed to load the $ZFS_MODULE module, check 'dmesg|tail'." + eend $rv + return $rv + fi + fi + + # Import all pools described by the cache file, and then mount + # all filesystem based on their properties. + if [ -f $ZPOOL_CACHE ]; then + einfo "Importing ZFS pools" + # as per fedora script, import can fail if all pools are already imported + # The check for $rv makes no sense...but someday, it will work right. + $ZPOOL import -c $ZPOOL_CACHE -aN 2>/dev/null || true + rv=$? + if [ $rv -ne 0 ]; then + eerror "Failed to import not-yet imported pools." + eend $rv + return $rv + fi + fi + + einfo "Mounting ZFS filesystems" + $ZFS mount -a + rv=$? + if [ $rv -ne 0 ]; then + eerror "Failed to mount ZFS filesystems." + eend $rv + return $rv + fi + + einfo "Exporting ZFS filesystems" + $ZFS share -a + rv=$? + if [ $rv -ne 0 ]; then + eerror "Failed to export ZFS filesystems." + eend $rv + return $rv + fi + + eend 0 + return 0 +} + +stop() +{ + ebegin "Unmounting ZFS filesystems" + $ZFS umount -a + rv=$? + if [ $rv -ne 0 ]; then + einfo "Some ZFS filesystems not unmounted" + fi + + # Don't fail if we couldn't umount everything. /usr might be in use. + eend 0 + return 0 +} + +status() +{ + # show pool status and list + $ZPOOL status && echo && $ZPOOL list +} |