summaryrefslogtreecommitdiffstats
path: root/etc/init.d/zfs.gentoo.in
diff options
context:
space:
mode:
authorKyle Fuller <[email protected]>2011-07-25 01:00:53 +0100
committerBrian Behlendorf <[email protected]>2011-08-01 09:54:44 -0700
commit5faa9c0367e8d6b1ee1c45f1ebeffd3e53ef35e8 (patch)
tree53358897ebeed920a56fc39c9ab14b87b9b5c98c /etc/init.d/zfs.gentoo.in
parent7f4afd300b753ee7e0ce1f8d12c098119193001b (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.in111
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
+}