From cec37e643f4889b4b8652bdfce886b1e5e81f2bd Mon Sep 17 00:00:00 2001 From: freaj Date: Mon, 30 Mar 2015 11:08:25 +0200 Subject: openrc-misc: add new package to [pcr] --- pcr/openrc-misc/zfs.initd | 124 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 pcr/openrc-misc/zfs.initd (limited to 'pcr/openrc-misc/zfs.initd') 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 +} -- cgit v1.2.3-54-g00ecf