sys-fs/zfs-0.6.5-r1: Add missing patch file
authorRichard Yao <ryao@gentoo.org>
Thu, 1 Oct 2015 23:02:09 +0000 (19:02 -0400)
committerRichard Yao <ryao@gentoo.org>
Thu, 1 Oct 2015 23:02:09 +0000 (19:02 -0400)
This should have been in the previous commit.

Signed-off-by: Richard Yao <ryao@gentoo.org>
sys-fs/zfs/files/zfs-0.6.5-fix-openrc-scripts.patch [new file with mode: 0644]

diff --git a/sys-fs/zfs/files/zfs-0.6.5-fix-openrc-scripts.patch b/sys-fs/zfs/files/zfs-0.6.5-fix-openrc-scripts.patch
new file mode 100644 (file)
index 0000000..fec87d0
--- /dev/null
@@ -0,0 +1,256 @@
+commit 3cb750b249717b43cbfcde78b44b0e38a2a61dc2
+Author: James Lee <jlee@thestaticvoid.com>
+Date:   Sat Sep 19 22:00:36 2015 -0400
+
+    zfs-import: Perform verbatim import using cache file
+    
+    This change modifies the import service to use the default cache file
+    to perform a verbatim import of pools at boot.  This fixes code that
+    searches all devices and imported all visible pools.
+    
+    Using the cache file is in keeping with the way ZFS has always worked,
+    how Solaris, Illumos, FreeBSD, and systemd performs imports, and is how
+    it is written in the man page (zpool(1M,8)):
+    
+        All pools  in  this  cache  are  automatically imported when the
+        system boots.
+    
+    Importantly, the cache contains important information for importing
+    multipath devices, and helps control which pools get imported in more
+    dynamic environments like SANs, which may have thousands of visible
+    and constantly changing pools, which the ZFS_POOL_EXCEPTIONS variable
+    is not equipped to handle.  Verbatim imports prevent rogue pools from
+    being automatically imported and mounted where they shouldn't be.
+    
+    The change also stops the service from exporting pools at shutdown.
+    Exporting pools is only meant to be performed explicitly by the
+    administrator of the system.
+    
+    The old behavior of searching and importing all visible pools is
+    preserved and can be switched on by heeding the warning and toggling
+    the ZPOOL_IMPORT_ALL_VISIBLE variable in /etc/default/zfs.
+    
+    Closes #3777
+    Closes #3526
+
+diff --git a/etc/init.d/zfs-import.in b/etc/init.d/zfs-import.in
+index 5e21929..2258638 100755
+--- a/etc/init.d/zfs-import.in
++++ b/etc/init.d/zfs-import.in
+@@ -1,11 +1,10 @@
+ #!@SHELL@
+ #
+-# zfs-import    This script will import/export zfs pools.
++# zfs-import    This script will import ZFS pools
+ #
+ # chkconfig:    2345 01 99
+-# description:  This script will import/export zfs pools during system
+-#               boot/shutdown.
+-#               It is also responsible for all userspace zfs services.
++# description:  This script will perform a verbatim import of ZFS pools
++#               during system boot.
+ # probe: true
+ #
+ ### BEGIN INIT INFO
+@@ -17,7 +16,7 @@
+ # X-Start-Before:    checkfs
+ # X-Stop-After:      zfs-mount
+ # Short-Description: Import ZFS pools
+-# Description: Run the `zpool import` or `zpool export` commands.
++# Description: Run the `zpool import` command.
+ ### END INIT INFO
+ #
+ # NOTE: Not having '$local_fs' on Required-Start but only on Required-Stop
+@@ -43,6 +42,16 @@ do_depend()
+       keyword -lxc -openvz -prefix -vserver
+ }
++# Use the zpool cache file to import pools
++do_verbatim_import()
++{
++      if [ -f "$ZPOOL_CACHE" ]
++      then
++              zfs_action "Importing ZFS pool(s)" \
++                      "$ZPOOL" import -c "$ZPOOL_CACHE" -N -a
++      fi
++}
++
+ # Support function to get a list of all pools, separated with ';'
+ find_pools()
+ {
+@@ -60,8 +69,8 @@ find_pools()
+       echo "${pools%%;}" # Return without the last ';'.
+ }
+-# Import all pools
+-do_import()
++# Find and import all visible pools, even exported ones
++do_import_all_visible()
+ {
+       local already_imported available_pools pool npools
+       local exception dir ZPOOL_IMPORT_PATH RET=0 r=1
+@@ -109,7 +118,7 @@ do_import()
+               fi
+       fi
+-        # Filter out any exceptions...
++      # Filter out any exceptions...
+       if [ -n "$ZFS_POOL_EXCEPTIONS" ]
+       then
+               local found=""
+@@ -249,41 +258,15 @@ do_import()
+       return "$RET"
+ }
+-# Export all pools
+-do_export()
++do_import()
+ {
+-      local already_imported pool root_pool RET r
+-      RET=0
+-
+-      root_pool=$(get_root_pool)
+-
+-      [ -n "$init" ] && zfs_log_begin_msg "Exporting ZFS pool(s)"
+-
+-      # Find list of already imported pools.
+-      already_imported=$(find_pools "$ZPOOL" list -H -oname)
+-
+-      OLD_IFS="$IFS" ; IFS=";"
+-      for pool in $already_imported; do
+-              [ "$pool" = "$root_pool" ] && continue
+-
+-              if [ -z "$init" ]
+-              then
+-                      # Interactive - one 'Importing ...' line per pool
+-                      zfs_log_begin_msg "Exporting ZFS pool $pool"
+-              else
+-                      # Not interactive - a dot for each pool.
+-                      zfs_log_progress_msg "."
+-              fi
+-
+-              "$ZPOOL" export "$pool"
+-              r="$?" ; RET=$((RET + r))
+-              [ -z "$init" ] && zfs_log_end_msg "$r"
+-      done
+-      IFS="$OLD_IFS"
+-
+-      [ -n "$init" ] && zfs_log_end_msg "$RET"
+-
+-      return "$RET"
++      if check_boolean "$ZPOOL_IMPORT_ALL_VISIBLE"
++      then
++              do_import_all_visible
++      else
++              # This is the default option
++              do_verbatim_import
++      fi
+ }
+ # Output the status and list of pools
+@@ -323,14 +306,6 @@ do_start()
+       fi
+ }
+-do_stop()
+-{
+-      # Check to see if the module is even loaded.
+-      check_module_loaded "zfs" || exit 0
+-
+-      do_export
+-}
+-
+ # ----------------------------------------------------
+ if [ ! -e /etc/gentoo-release ]
+@@ -340,7 +315,7 @@ then
+                       do_start
+                       ;;
+               stop)
+-                      do_stop
++                      # no-op
+                       ;;
+               status)
+                       do_status
+@@ -350,7 +325,7 @@ then
+                       ;;
+               *)
+                       [ -n "$1" ] && echo "Error: Unknown command $1."
+-                      echo "Usage: $0 {start|stop|status}"
++                      echo "Usage: $0 {start|status}"
+                       exit 3
+                       ;;
+       esac
+@@ -360,6 +335,5 @@ else
+       # Create wrapper functions since Gentoo don't use the case part.
+       depend() { do_depend; }
+       start() { do_start; }
+-      stop() { do_stop; }
+       status() { do_status; }
+ fi
+diff --git a/etc/init.d/zfs.in b/etc/init.d/zfs.in
+index eabb7e4..d81ef22 100644
+--- a/etc/init.d/zfs.in
++++ b/etc/init.d/zfs.in
+@@ -16,6 +16,24 @@ ZFS_SHARE='yes'
+ # Run `zfs unshare -a` during system stop?
+ ZFS_UNSHARE='yes'
++# By default, a verbatim import of all pools is performed at boot based on the
++# contents of the default zpool cache file.  The contents of the cache are
++# managed automatically by the 'zpool import' and 'zpool export' commands.
++#
++# By setting this to 'yes', the system will instead search all devices for
++# pools and attempt to import them all at boot, even those that have been
++# exported.  Under this mode, the search path can be controlled by the
++# ZPOOL_IMPORT_PATH variable and a list of pools that should not be imported
++# can be listed in the ZFS_POOL_EXCEPTIONS variable.
++#
++# Note that importing all visible pools may include pools that you don't
++# expect, such as those on removable devices and SANs, and those pools may
++# proceed to mount themselves in places you do not want them to.  The results
++# can be unpredictable and possibly dangerous.  Only enable this option if you
++# understand this risk and have complete physical control over your system and
++# SAN to prevent the insertion of malicious pools.
++ZPOOL_IMPORT_ALL_VISIBLE='no'
++
+ # Specify specific path(s) to look for device nodes and/or links for the
+ # pool import(s). See zpool(8) for more information about this variable.
+ # It supersedes the old USE_DISK_BY_ID which indicated that it would only
+@@ -23,6 +41,18 @@ ZFS_UNSHARE='yes'
+ # The old variable will still work in the code, but is deprecated.
+ #ZPOOL_IMPORT_PATH="/dev/disk/by-vdev:/dev/disk/by-id"
++# List of pools that should NOT be imported at boot
++# when ZPOOL_IMPORT_ALL_VISIBLE is 'yes'.
++# This is a space separated list.
++#ZFS_POOL_EXCEPTIONS="test2"
++
++# List of pools that SHOULD be imported at boot by the initramfs
++# instead of trying to import all available pools.  If this is set
++# then ZFS_POOL_EXCEPTIONS is ignored.
++# Only applicable for Debian GNU/Linux {dkms,initramfs}.
++# This is a semi-colon separated list.
++#ZFS_POOL_IMPORT="pool1;pool2"
++
+ # Should the datasets be mounted verbosely?
+ # A mount counter will be used when mounting if set to 'yes'.
+ VERBOSE_MOUNT='no'
+@@ -97,17 +127,6 @@ ZFS_INITRD_POST_MODPROBE_SLEEP='0'
+ # Example: If root FS is 'rpool/ROOT/rootfs', this would make sense.
+ #ZFS_INITRD_ADDITIONAL_DATASETS="rpool/ROOT/usr rpool/ROOT/var"
+-# List of pools that should NOT be imported at boot?
+-# This is a space separated list.
+-#ZFS_POOL_EXCEPTIONS="test2"
+-
+-# List of pools to import?
+-# If this variable is set, there will be NO auto-import of ANY other
+-# pool. In essence, there will be no auto detection of availible pools.
+-# This is a semi-colon separated list.
+-# Makes the variable ZFS_POOL_EXCEPTIONS above redundant (won't be checked).
+-#ZFS_POOL_IMPORT="pool1;pool2"
+-
+ # Optional arguments for the ZFS Event Daemon (ZED).
+ # See zed(8) for more information on available options.
+ #ZED_ARGS="-M"