[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#637020: pu: package zfsutils/8.1-5



2011/8/8 Philipp Kern <pkern@debian.org>:
> I presume that it would still unshare the volume prior to umount?
>
> Your change seems to contradict the OpenSolaris ZFS documentation[1].  It
> postulates that automatic mount management is what you want and the other way
> is legacy.  Now the consequence of that chance is that the ZFS data structures
> tell that they should be automounted at $location but we ignore that now?
>
> Doesn't that have the potential for breakage upon the next reboot after
> installing that stable update?  (Especially for machines with a single
> kFreeBSD&ZFS instance, i.e. servers?)

Uhm yes, you're right.  The real problem is that partman-zfs shouldn't
be marking filesystems as auto-mountable, it should use legacy mode.
I've documented this as bug #637086 (and reverted my change in sid).

As for zfsutils, please consider this package update instead.  I
discarded the automount part, and I'm also proposing addition of the
bash-completion script that was added in 8.2-3.

-- 
Robert Millan
Index: debian/zfsutils.zfs.init
===================================================================
--- debian/zfsutils.zfs.init	(revision 3674)
+++ debian/zfsutils.zfs.init	(working copy)
@@ -3,6 +3,8 @@
 # Provides:          zvol zfs
 # Required-Start:
 # Required-Stop: 
+# X-Start-Before:    checkroot
+# X-Stop-After:      umountfs
 # Default-Start:     S
 # Default-Stop:      0 6
 # Short-Description: Start/stop ZFS subsystem.
Index: debian/changelog
===================================================================
--- debian/changelog	(revision 3674)
+++ debian/changelog	(working copy)
@@ -1,3 +1,13 @@
+zfsutils (8.1-5) unstable; urgency=low
+
+  * Set "X-Start-Before: checkroot" so that boot doesn't break when
+    fstab relies on ZFS volumes.  (Closes: #635627)
+  * Set "X-Stop-After: umountfs" to ensure ZVOLs are no longer in use
+    when "zfs volfini" is called.
+  * Add bash_completion script (stolen from zfs-fuse).
+
+ -- Robert Millan <rmh@debian.org>  Mon, 08 Aug 2011 13:35:06 +0000
+
 zfsutils (8.1-4) unstable; urgency=low
 
   * Create a /boot/zfs/ directory in zfsutils-udeb, so that zpool.cache
Index: debian/zfsutils.install
===================================================================
--- debian/zfsutils.install	(revision 3674)
+++ debian/zfsutils.install	(working copy)
@@ -1,2 +1,3 @@
 cddl/sbin/zpool/zpool	/sbin
 cddl/sbin/zfs/zfs	/sbin
+debian/local/bash_completion.d/zfsutils		/etc/bash_completion.d
Index: debian/local/bash_completion.d/zfsutils
===================================================================
--- debian/local/bash_completion.d/zfsutils	(revision 0)
+++ debian/local/bash_completion.d/zfsutils	(revision 0)
@@ -0,0 +1,232 @@
+# Copyright (c) 2010, Aneurin Price <aneurin.price@gmail.com>
+
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation
+# files (the "Software"), to deal in the Software without
+# restriction, including without limitation the rights to use,
+# copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following
+# conditions:
+
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+
+__zfs_get_commands()
+{
+    zfs 2>&1 | awk '/^\t[a-z]/ {print $1}' | uniq
+}
+
+__zfs_get_properties()
+{
+    zfs get 2>&1 | awk '$2 == "YES" || $2 == "NO" {print $1}'; echo all
+}
+
+__zfs_get_editable_properties()
+{
+    zfs get 2>&1 | awk '$2 == "YES" {printf("%s=\n", $1)}'
+}
+
+__zfs_get_inheritable_properties()
+{
+    zfs get 2>&1 | awk '$3 == "YES" {print $1}'
+}
+
+__zfs_list_datasets()
+{
+    zfs list -H -o name
+}
+
+__zfs_list_filesystems()
+{
+    zfs list -H -o name -t filesystem
+}
+
+__zfs_list_snapshots()
+{
+    zfs list -H -o name -t snapshot
+}
+
+__zfs_list_volumes()
+{
+    zfs list -H -o name -t volume
+}
+
+__zfs_argument_chosen()
+{
+    for word in $(seq $((COMP_CWORD-1)) -1 2)
+    do
+        local prev="${COMP_WORDS[$word]}"
+        for property in $@
+        do
+            if [ "x$prev" = "x$property" ]
+            then
+                return 0
+            fi
+        done
+    done
+    return 1
+}
+
+__zfs_complete_ordered_arguments()
+{
+    local list1=$1
+    local list2=$2
+    local cur=$3
+    local extra=$4
+    if __zfs_argument_chosen $list1
+    then
+        COMPREPLY=($(compgen -W "$list2 $extra" -- "$cur"))
+    else
+        COMPREPLY=($(compgen -W "$list1 $extra" -- "$cur"))
+    fi
+}
+
+__zfs_complete()
+{
+    local cur prev cmd cmds
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    cmd="${COMP_WORDS[1]}"
+    cmds=$(__zfs_get_commands)
+
+    if [ "${prev##*/}" = "zfs" ]
+    then
+        COMPREPLY=($(compgen -W "$cmds -?" -- "$cur"))
+        return 0
+    fi
+
+    case "${cmd}" in
+        clone)
+            __zfs_complete_ordered_arguments "$(__zfs_list_snapshots)" "$(__zfs_list_filesystems) $(__zfs_list_volumes)" $cur
+            return 0
+            ;;
+        get)
+            __zfs_complete_ordered_arguments "$(__zfs_get_properties)" "$(__zfs_list_datasets)" "$cur" "-H -r -p"
+            return 0
+            ;;
+        inherit)
+            __zfs_complete_ordered_arguments "$(__zfs_get_inheritable_properties)" "$(__zfs_list_datasets)" $cur
+            return 0
+            ;;
+        list)
+            if [ "x$prev" = "x-o" ]
+            then
+                COMPREPLY=($(compgen -W "$(__zfs_get_properties)" -- "${cur##*,}"))
+                local existing_opts=$(expr "$cur" : '\(.*,\)')
+                if [ ! "x$existing_opts" = "x" ]
+                then
+                    COMPREPLY=( "${COMPREPLY[@]/#/${existing_opts}}" )
+                fi
+            else
+                COMPREPLY=($(compgen -W "$(__zfs_list_datasets) -H -r -o" -- "$cur"))
+            fi
+            return 0
+            ;;
+        promote)
+            COMPREPLY=($(compgen -W "$(__zfs_list_filesystems)" -- "$cur"))
+            return 0
+            ;;
+        rollback|send)
+            COMPREPLY=($(compgen -W "$(__zfs_list_snapshots)" -- "$cur"))
+            return 0
+            ;;
+        snapshot)
+            COMPREPLY=($(compgen -W "$(__zfs_list_filesystems) $(__zfs_list_volumes)" -- "$cur"))
+            return 0
+            ;;
+        set)
+            __zfs_complete_ordered_arguments "$(__zfs_get_editable_properties)" "$(__zfs_list_filesystems) $(__zfs_list_volumes)" $cur
+            return 0
+            ;;
+        *)
+            COMPREPLY=($(compgen -W "$(__zfs_list_datasets)" -- "$cur"))
+            return 0
+            ;;
+    esac
+
+}
+
+__zpool_get_commands()
+{
+    zpool 2>&1 | awk '/^\t[a-z]/ {print $1}' | uniq
+}
+
+__zpool_get_properties()
+{
+    zpool get 2>&1 | awk '$2 == "YES" || $2 == "NO" {print $1}'; echo all
+}
+
+__zpool_get_editable_properties()
+{
+    zpool get 2>&1 | awk '$2 == "YES" {printf("%s=\n", $1)}'
+}
+
+__zpool_list_pools()
+{
+    zpool list -H -o name
+}
+
+__zpool_complete()
+{
+    local cur prev cmd cmds
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    cmd="${COMP_WORDS[1]}"
+    cmds=$(__zpool_get_commands)
+
+    if [ "${prev##*/}" = "zpool" ]
+    then
+        COMPREPLY=($(compgen -W "$cmds" -- "$cur"))
+        return 0
+    fi
+
+    case "${cmd}" in
+        get)
+            __zfs_complete_ordered_arguments "$(__zpool_get_properties)" "$(__zpool_list_pools)" $cur
+            return 0
+            ;;
+        import)
+            if [ "x$prev" = "x-d" ]
+            then
+                _filedir -d
+            else
+                COMPREPLY=($(compgen -W "$(__zpool_list_pools) -d" -- "$cur"))
+            fi
+            return 0
+            ;;
+        set)
+            __zfs_complete_ordered_arguments "$(__zpool_get_editable_properties)" "$(__zpool_list_pools)" $cur
+            return 0
+            ;;
+        add|attach|clear|create|detach|offline|online|remove|replace)
+            local pools="$(__zpool_list_pools)"
+            if __zfs_argument_chosen $pools
+            then
+                _filedir
+            else
+                COMPREPLY=($(compgen -W "$pools" -- "$cur"))
+            fi
+            return 0
+            ;;
+        *)
+            COMPREPLY=($(compgen -W "$(__zpool_list_pools)" -- "$cur"))
+            return 0
+            ;;
+    esac
+
+}
+
+complete -F __zfs_complete zfs
+complete -o filenames -F __zpool_complete zpool

Reply to: