diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2020-04-14 16:11:18 +0200 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2020-04-14 20:34:14 +0200 |
commit | 265392d1454bc2d73c546a748e95ddd076bdfa06 (patch) | |
tree | 73bc3a7e932d6aeceaa4cf547acb10589cdbd164 /sys-fs/lvm2/files | |
parent | dev-vcs/git: version bump CVE-2020-5260 (diff) | |
download | gentoo-265392d1454bc2d73c546a748e95ddd076bdfa06.tar.gz gentoo-265392d1454bc2d73c546a748e95ddd076bdfa06.tar.bz2 gentoo-265392d1454bc2d73c546a748e95ddd076bdfa06.zip |
sys-fs/lvm2: change "need lvmetad lvmlockd" to "use lvmetad lvmlockd"
Closes: https://bugs.gentoo.org/689292
Package-Manager: Portage-2.3.99, Repoman-2.3.22
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
Diffstat (limited to 'sys-fs/lvm2/files')
-rw-r--r-- | sys-fs/lvm2/files/lvm.rc-2.02.187 | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/sys-fs/lvm2/files/lvm.rc-2.02.187 b/sys-fs/lvm2/files/lvm.rc-2.02.187 new file mode 100644 index 000000000000..6b4e3df715fe --- /dev/null +++ b/sys-fs/lvm2/files/lvm.rc-2.02.187 @@ -0,0 +1,163 @@ +#!/sbin/openrc-run +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +_get_lvm_path() { + local lvm_path= + for lvm_path in /bin/lvm /sbin/lvm ; do + [ -x "${lvm_path}" ] && break + done + echo "${lvm_path}" +} + +_use_lvmetad() { + local lvm_path="$(_get_lvm_path)" + [ ! -x "${lvm_path}" ] && return 1 + ${lvm_path} dumpconfig global 2>/dev/null | grep -q 'use_lvmetad=1' +} + +_use_lvmlockd() { + local lvm_path="$(_get_lvm_path)" + [ ! -x "${lvm_path}" ] && return 1 + ${lvm_path} dumpconfig global 2>/dev/null | grep -q 'use_lvmlockd=1' +} + +depend() { + before checkfs fsck + after modules device-mapper + # 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 _use= + + if service_started ; then + _use=$(service_get_value use) + else + if _use_lvmetad ; then + _use="${_use} lvmetad" + fi + + if _use_lvmlockd ; then + _use="${_use} lvmlockd" + fi + fi + + # Make sure you review /etc/conf.d/lvm as well! + # Depending on your system, it might also introduce udev & mdraid + need sysfs + + if [ -n "${_use}" ] ; then + use ${_use} + fi +} + +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}\n" + # Extra PV find pass because some devices might not have been available until very recently + lvm_commands="${lvm_commands}pvscan --config '${config}'\n" + # Now make the nodes + lvm_commands="${lvm_commands}vgscan --config '${config}' --mknodes\n" + # And turn them on! + lvm_commands="${lvm_commands}vgchange --config '${config}' --sysinit -a ly\n" + + if _use_lvmlockd ; then + # Start lockd VGs as required + lvm_commands="${lvm_commands}vgchange --config '${config}' --lock-start --lock-opt auto\n" + fi + + # Order of this is important, have to work around dash and LVM readline + printf "%b\n" "${lvm_commands}" | $lvm_path /proc/self/fd/0 >/dev/null + eend $? "Failed to setup the LVM" + fi + fi +} + +start_post() { + # Save if we needed lvmetad + if _use_lvmetad ; then + service_set_value use 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 [ -n "${VGS}" ] ; then + local _ending="eend" + [ "${RC_RUNLEVEL}" = shutdown ] && _ending="ewend" + + ebegin " Shutting Down LVs & VGs" + #still echo stderr for debugging + lvm_commands="#!${lvm_path}\n" + # Extra PV find pass because some devices might not have been available until very recently + lvm_commands="${lvm_commands}lvchange --config '${config}' --sysinit -a ln ${VGS}\n" + # Now make the nodes + lvm_commands="${lvm_commands}vgchange --config '${config}' --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 + + rc=${?} + msg="Failed (possibly some LVs still needed for /usr or root)" + [ "${RC_RUNLEVEL}" = shutdown ] && msg="${msg} [rc=${rc}]" && rc=0 + ${_ending} ${rc} "${msg}" + fi + + einfo "Finished shutting down the Logical Volume Manager" + return 0 + fi +} + +# vim:ts=4 |