summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Goldstein <cardoe@gentoo.org>2015-12-24 17:28:35 -0600
committerRobin H. Johnson <robbat2@gentoo.org>2015-12-27 16:29:01 -0800
commitef66b97c3c1778c3c8e9f96d80057ad7a1a3e2f4 (patch)
tree100480d6de3d143522b879a80233119740219f55
parentsys-fs/lvm2: fix missing dir for lvmetad (diff)
downloadgentoo-ef66b97c3c1778c3c8e9f96d80057ad7a1a3e2f4.tar.gz
gentoo-ef66b97c3c1778c3c8e9f96d80057ad7a1a3e2f4.tar.bz2
gentoo-ef66b97c3c1778c3c8e9f96d80057ad7a1a3e2f4.zip
sys-fs/lvm2: conditionally depend on lvmetad
If the user has configured their system to be dependent on lvmetad in /etc/lvm/lvm.conf then we need to depend on lvmetad starting up. Otherwise it shouldn't be necessary and won't be started. Gentoo-Bug: 503016 Gentoo-Bug: 525614 Gentoo-Bug: 554918 Gentoo-Bug: 565154 Signed-off-by: Doug Goldstein <cardoe@gentoo.org> Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
-rw-r--r--sys-fs/lvm2/files/lvm.rc-2.02.116-r3134
-rw-r--r--sys-fs/lvm2/lvm2-2.02.116-r3.ebuild2
2 files changed, 135 insertions, 1 deletions
diff --git a/sys-fs/lvm2/files/lvm.rc-2.02.116-r3 b/sys-fs/lvm2/files/lvm.rc-2.02.116-r3
new file mode 100644
index 000000000000..059e8805a35e
--- /dev/null
+++ b/sys-fs/lvm2/files/lvm.rc-2.02.116-r3
@@ -0,0 +1,134 @@
+#!/sbin/runscript
+# Copyright 1999-2014 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+_get_lvm_path() {
+ local lvm_path=
+ for lvm_path in /bin/lvm /sbin/lvm ; do
+ [ -x "$lvm_path" ] && break
+ done
+ echo "${lvm_path}"
+}
+
+_need_lvmetad()
+{
+ local lvm_path="$(_get_lvm_path)"
+ [ ! -x "${lvm_path}" ] && return 1
+ ${lvm_path} dumpconfig global | grep -q 'use_lvmetad=1'
+}
+
+depend() {
+ before checkfs fsck
+ after modules device-mapper
+ need lvmetad sysfs
+ # We may use lvmetad based on the configuration. If we added lvmetad
+ # support while lvm2 is running then we aren't dependent on it. For the
+ # more common case, if its disabled in the config we aren't dependent
+ # on it.
+ config /etc/lvm/lvm.conf
+ local _need=
+ if service_started; then
+ _need=$(service_get_value need)
+ else
+ if _need_lvmetad; then
+ _need="${_need} lvmetad"
+ fi
+ fi
+ need ${_need}
+}
+
+config='global { locking_dir = "/run/lock/lvm" }'
+
+dm_in_proc() {
+ local retval=0
+ for x in devices misc ; do
+ grep -qs 'device-mapper' /proc/${x}
+ retval=$((${retval} + $?))
+ done
+ return ${retval}
+}
+
+start() {
+ # LVM support for /usr, /home, /opt ....
+ # This should be done *before* checking local
+ # volumes, or they never get checked.
+
+ # NOTE: Add needed modules for LVM or RAID, etc
+ # to /etc/modules.autoload if needed
+ lvm_path="$(_get_lvm_path)"
+ for lvm_path in /bin/lvm /sbin/lvm ; do
+ [ -x "$lvm_path" ] && break
+ done
+ if [ ! -x "$lvm_path" ]; then
+ eerror "Cannot find lvm binary in /sbin or /bin!"
+ return 1
+ fi
+ if [ -z "${CDBOOT}" ] ; then
+ if [ -e /proc/modules ] && ! dm_in_proc ; then
+ modprobe dm-mod 2>/dev/null
+ fi
+ if [ -d /proc/lvm ] || dm_in_proc ; then
+ ebegin "Setting up the Logical Volume Manager"
+ #still echo stderr for debugging
+ lvm_commands="#! ${lvm_path} --config '${config}'\n"
+ # Extra PV find pass because some devices might not have been available until very recently
+ lvm_commands="${lvm_commands}pvscan\n"
+ # Now make the nodes
+ lvm_commands="${lvm_commands}vgscan --mknodes\n"
+ # And turn them on!
+ lvm_commands="${lvm_commands}vgchange --sysinit -a ly\n"
+ # Order of this is important, have to work around dash and LVM readline
+ printf "%b\n" "${lvm_commands}" | $lvm_path /proc/self/fd/0 --config "${config}" >/dev/null
+ eend $? "Failed to setup the LVM"
+ fi
+ fi
+}
+
+start_post()
+{
+ # Save if we needed lvmetad
+ if _need_lvmetad; then
+ service_set_value need lvmetad
+ fi
+}
+
+stop() {
+ for lvm_path in /bin/lvm /sbin/lvm ; do
+ [ -x "$lvm_path" ] && break
+ done
+ if [ ! -x "$lvm_path" ]; then
+ eerror "Cannot find lvm binary in /sbin or /bin!"
+ return 1
+ fi
+# Stop LVM2
+if [ -x /sbin/vgs ] && \
+ [ -x /sbin/vgchange ] && \
+ [ -x /sbin/lvchange ] && \
+ [ -f /etc/lvmtab -o -d /etc/lvm ] && \
+ [ -d /proc/lvm -o "`grep device-mapper /proc/misc 2>/dev/null`" ]
+then
+ einfo "Shutting down the Logical Volume Manager"
+
+ VGS=$($lvm_path vgs --config "${config}" -o vg_name --noheadings --nosuffix --rows 2> /dev/null)
+
+ if [ "$VGS" ]
+ then
+ ebegin " Shutting Down LVs & VGs"
+ #still echo stderr for debugging
+ lvm_commands="#! ${lvm_path} --config '${config}'\n"
+ # Extra PV find pass because some devices might not have been available until very recently
+ lvm_commands="${lvm_commands}lvchange --sysinit -a ln ${VGS}\n"
+ # Now make the nodes
+ lvm_commands="${lvm_commands}vgchange --sysinit -a ln ${VGS}\n"
+ # Order of this is important, have to work around dash and LVM readline
+ printf "%b\n" "${lvm_commands}" | $lvm_path /proc/self/fd/0 --config "${config}" >/dev/null
+ eend $? "Failed (possibly some LVs still needed for /usr or root)"
+ fi
+
+ einfo "Finished shutting down the Logical Volume Manager"
+ return 0
+fi
+}
+
+# vim:ts=4
diff --git a/sys-fs/lvm2/lvm2-2.02.116-r3.ebuild b/sys-fs/lvm2/lvm2-2.02.116-r3.ebuild
index 3146e3c0ecfb..e62a3b6e8af9 100644
--- a/sys-fs/lvm2/lvm2-2.02.116-r3.ebuild
+++ b/sys-fs/lvm2/lvm2-2.02.116-r3.ebuild
@@ -227,7 +227,7 @@ src_install() {
if use !device-mapper-only ; then
newinitd "${FILESDIR}"/dmeventd.initd-2.02.67-r1 dmeventd
- newinitd "${FILESDIR}"/lvm.rc-2.02.105-r2 lvm
+ newinitd "${FILESDIR}"/lvm.rc-2.02.116-r3 lvm
newconfd "${FILESDIR}"/lvm.confd-2.02.28-r2 lvm
newinitd "${FILESDIR}"/lvm-monitoring.initd-2.02.105-r2 lvm-monitoring