Turn the init.d scripts into autoconf config files
[zfs.git] / etc / init.d / zfs.lsb.in
diff --git a/etc/init.d/zfs.lsb.in b/etc/init.d/zfs.lsb.in
new file mode 100644 (file)
index 0000000..c781f05
--- /dev/null
@@ -0,0 +1,132 @@
+#!/bin/bash
+#
+# zfs           This script will mount/umount the zfs filesystems.
+#
+# chkconfig:    2345 01 99
+# description:  This script will mount/umount the zfs filesystems during
+#               system boot/shutdown.  Configuration of which filesystems
+#               should be mounted is handled by the zfs 'mountpoint' and
+#               'canmount' properties.  See the zfs(8) man page for details.
+#               It is also responsible for all userspace zfs services.
+#
+### BEGIN INIT INFO
+# Provides: zfs
+# Required-Start: $local_fs
+# Required-Stop: $local_fs
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Should-Stop:
+# Short-Description: Mount/umount the zfs filesystems
+# Description: ZFS is an advanced filesystem designed to simplify managing
+#              and protecting your data.  This service mounts the ZFS
+#              filesystems and starts all related zfs services.
+### END INIT INFO
+
+# Source function library.
+. /lib/lsb/init-functions
+
+# Source zfs configuration.
+[ -f /etc/defaults/zfs ] &&  . /etc/defaults/zfs
+
+RETVAL=0
+
+LOCKFILE=/var/lock/zfs
+ZFS="@sbindir@/zfs"
+ZPOOL="@sbindir@/zpool"
+ZPOOL_CACHE="@sysconfdir@/zfs/zpool.cache"
+
+[ -x $ZPOOL ] || exit 1
+[ -x $ZFS ] || exit 2
+
+start()
+{
+       [ -f $LOCKFILE ] && return 3
+
+       # Requires selinux policy which has not been written.
+       if [ -r "/selinux/enforce" ] &&
+          [ "$(cat /selinux/enforce)" = "1" ]; then
+
+               log_failure_msg "SELinux ZFS policy required"
+               return 4
+       fi
+
+       # Delay until all required block devices are present.
+       udevadm settle
+
+       # Load the zfs module stack
+       /sbin/modprobe zfs
+
+       # Ensure / exists in /etc/mtab, if not update mtab accordingly.
+       # This should be handled by rc.sysinit but lets be paranoid.
+       awk '$2 == "/" { exit 1 }' /etc/mtab
+       RETVAL=$?
+       if [ $RETVAL -eq 0 ]; then
+               /bin/mount -f /
+       fi
+
+       # Import all pools described by the cache file, and then mount
+       # all filesystem based on their properties.
+       if [ -f $ZPOOL_CACHE ] ; then
+               log_begin_msg "Importing ZFS pools"
+               $ZPOOL import -c $ZPOOL_CACHE -aN 2>/dev/null
+               log_end_msg $?
+
+               log_begin_msg "Mounting ZFS filesystems"
+               $ZFS mount -a
+               log_end_msg $?
+
+               log_begin_msg "Exporting ZFS filesystems"
+               $ZFS share -a
+               log_end_msg $?
+       fi
+
+       touch $LOCKFILE
+}
+
+stop()
+{
+       [ ! -f $LOCKFILE ] && return 3
+
+       log_begin_msg "Unmounting ZFS filesystems"
+       $ZFS umount -a
+       log_end_msg $?
+
+       rm -f $LOCKFILE
+}
+
+status()
+{
+       [ ! -f $LOCKFILE ] && return 3
+
+       $ZPOOL status && echo && $ZPOOL list
+}
+
+case "$1" in
+       start)
+               start
+               RETVAL=$?
+               ;;
+       stop)
+               stop
+               RETVAL=$?
+               ;;
+       status)
+               status
+               RETVAL=$?
+               ;;
+       restart)
+               stop
+               start
+               ;;
+       condrestart)
+               if [ -f $LOCKFILE ]; then
+                       stop
+                       start
+               fi
+               ;;
+       *)
+               echo $"Usage: $0 {start|stop|status|restart|condrestart}"
+               ;;
+esac
+
+exit $RETVAL