summaryrefslogtreecommitdiff
path: root/pcr/openrc-misc/zfs.initd
diff options
context:
space:
mode:
authorfreaj <freaj@riseup.net>2015-03-30 11:08:25 +0200
committerfreaj <freaj@riseup.net>2015-03-30 11:08:25 +0200
commitcec37e643f4889b4b8652bdfce886b1e5e81f2bd (patch)
treec992d8325923324f5d318f57b4c05dd5fe494988 /pcr/openrc-misc/zfs.initd
parent7385c6143c1b587bca68deade6e5989d11879767 (diff)
openrc-misc: add new package to [pcr]
Diffstat (limited to 'pcr/openrc-misc/zfs.initd')
-rw-r--r--pcr/openrc-misc/zfs.initd124
1 files changed, 124 insertions, 0 deletions
diff --git a/pcr/openrc-misc/zfs.initd b/pcr/openrc-misc/zfs.initd
new file mode 100644
index 000000000..a022ee9a5
--- /dev/null
+++ b/pcr/openrc-misc/zfs.initd
@@ -0,0 +1,124 @@
+#!/usr/bin/openrc-run
+# Copyright 1999-2011 Gentoo Foundation
+# Released under the 2-clause BSD license.
+# $Header: /var/cvsroot/gentoo-x86/sys-fs/zfs/files/zfs,v 0.9 2011/04/30 10:13:43 devsk Exp $
+
+if [ -z "$init" ]; then
+ # Not interactive
+ grep -qE '(^|[^\\](\\\\)* )zfs=(off|no)( |$)' /proc/cmdline && exit 3
+fi
+
+depend()
+{
+ # Try to allow people to mix and match fstab with ZFS in a way that makes sense.
+ if [ "$(mountinfo -s /)" = 'zfs' ]
+ then
+ before localmount
+ else
+ after localmount
+ fi
+
+ # bootmisc will log to /var which may be a different zfs than root.
+ before bootmisc logger
+ use mtab
+ keyword -lxc -openvz -prefix -vserver
+}
+
+ZFS="/usr/bin/zfs"
+ZPOOL="/usr/bin/zpool"
+ZPOOL_CACHE="/etc/zfs/zpool.cache"
+ZFS_MODULE=zfs
+
+checksystem() {
+ if [ ! -c /dev/zfs ]; then
+ einfo "Checking if ZFS modules present"
+ if ! modinfo zfs > /dev/null 2>&1 ; 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
+}