sys-fs/lvm2: Add version 2.02.177 with musl support and Red Hat patches

Red Hat patches from lvm2-2.02.177-5.fc28: https://koji.fedoraproject.org/koji/buildinfo?buildID=1096618
This commit is contained in:
2020-12-13 16:31:02 +03:00
parent a2858e5fbe
commit 052e5967e1
29 changed files with 1329 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
# CLVMD_CLUSTER_TIMEOUT -- amount of time to wait for cluster quorum.
CLVMD_CLUSTER_TIMEOUT=30
# CLVMD_NODES_TIMEOUT -- amount of time to wait for the other nodes to
# join the cluster.
CLVMD_NODES_TIMEOUT=60

View File

@@ -0,0 +1,145 @@
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
[ -x /usr/sbin/clvmd ] && CLVMD_BIN="/usr/sbin/clvmd" || CLVMD_BIN="/sbin/clvmd"
[ -z "$CLVMD_CLUSTER_TIMEOUT" ] && CLVMD_CLUSTER_TIMEOUT=30
[ -n "$CLVMD_NODES_TIMEOUT" ] || CLVMD_NODES_TIMEOUT=60
VGCHANGE="/sbin/vgchange"
VGSCAN="/sbin/vgscan"
VGDISPLAY="/sbin/vgdisplay"
CLVMD_PIDFILE="/var/run/clvmd.pid"
depend() {
use net dns logger dmeventd
want cman corosync openais
}
load_modules() {
local module modules
modules=$1
for module in ${modules}; do
ebegin "Loading ${module} kernel module"
modprobe ${module}
eend $? "Failed to load ${module} kernel module"
done
}
unload_modules() {
local module modules
modules=$1
for module in ${modules}; do
ebegin "Unloading ${module} kernel module"
modprobe -r ${module}
eend $? "Failed to unload ${module} kernel module"
done
}
umount_gfs_filesystems() {
local sig retry
local remaining="$(awk '$3 == "gfs" { print $2 }' /proc/mounts | sort -r)"
if [ -n "${remaining}" ]
then
sig=
retry=3
while [ -n "${remaining}" -a "${retry}" -gt 0 ]
do
if [ "${retry}" -lt 3 ]
then
ebegin "Unmounting GFS filesystems (retry)"
umount ${remaining} &>/dev/null
eend $? "Failed to unmount GFS filesystems this retry"
else
ebegin "Unmounting GFS filesystems"
umount ${remaining} &>/dev/null
eend $? "Failed to unmount GFS filesystems"
fi
remaining="$(awk '$3 == "gfs" { print $2 }' /proc/mounts | sort -r)"
[ -z "${remaining}" ] && break
/bin/fuser -k -m ${sig} ${remaining} &>/dev/null
sleep 5
retry=$((${retry} -1))
sig=-9
done
fi
}
start_volumes() {
ebegin "Scanning LVM volumes"
$VGSCAN > /dev/null 2>&1
eend $?
ret=$?
if [ "$ret" -eq 5 ]
then
einfo " Waiting for other nodes to join the cluster ($CLVMD_NODES_TIMEOUT seconds)"
fi
clustervgs=`$VGDISPLAY 2> /dev/null | awk 'BEGIN {RS="VG Name"} {if (/Clustered/) print $1;}'`
for vg in $clustervgs; do
ebegin " Activating Clustered VG: ${vg} "
wait=0
while [ -n "$($VGCHANGE -a y ${vg} 2>&1 |grep "clvmd not running")" ]; do
if [ $wait -lt $CLVMD_NODES_TIMEOUT ]; then
sleep 3
wait=$(($wait + 3))
else
eend 1
fi
done
eend 0
done
}
stop_volumes() {
# Deactivate only clustered volumes
clustervgs=`$VGDISPLAY 2> /dev/null | awk 'BEGIN {RS="VG Name"} {if (/Clustered/) print $1;}'`
for vg in $clustervgs; do
ebegin " Shutting Down Clustered VG: ${vg} "
$VGCHANGE -anl ${vg} >/dev/null
eend $?
done
}
start() {
local module=$(awk '$1 == "dm_mod" { print $1 }' /proc/{modules,devices})
if [ -z "${module}" ]; then
load_modules "dm-mod"
sleep 1s
fi
ebegin "Starting clvmd ($CLVMD_CLUSTER_TIMEOUT seconds)"
start-stop-daemon --start --quiet --exec ${CLVMD_BIN} -- -T ${CLVMD_CLUSTER_TIMEOUT}
eend $?
start_volumes
}
stop() {
# umount GFS filesystems
umount_gfs_filesystems
#stop_volumes
ebegin "Stopping clvmd"
#start-stop-daemon --stop -s TERM --quiet --exec ${CLVMD_BIN} --name clvmd
killall -TERM ${CLVMD_BIN} >/dev/null
eend $?
#local module=$(awk '$1 == "dm_mod" { print $1 }' /proc/modules)
#if [[ "$?" -eq 0 && ! -z "${module}" ]]; then
# unload_modules "dm-mod"
#fi
}

View File

@@ -0,0 +1 @@
RC_AFTER="lvm"

View File

@@ -0,0 +1,146 @@
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
depend() {
# As of .67-r1, we call ALL lvm start/stop scripts with --sysinit, that
# means dmeventd is NOT notified, as it cannot be safely running
before dmeventd checkfs fsck
after modules
}
dm_in_proc() {
local retval=0
for x in devices misc ; do
grep -qs 'device-mapper' /proc/${x}
retval=$((${retval} + $?))
done
return ${retval}
}
# char **build_dmsetup_command(volume)
#
# Returns complete dmsetup command given single volume name
build_dmsetup_command() {
local count dmsetup_cmd
# Number of lines mentioning volume name
count=$(grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | grep -c ${1})
# If there's just one line:
if [ ${count} -eq 1 ] ; then
echo "echo $(grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | \
grep ${1} | awk '{$1=""; print $0}') | /sbin/dmsetup create ${1}"
# For all cases with more lines:
elif [ ${count} -gt 1 ] ; then
for c in $( seq 1 ${count} ) ; do
if [ ${c} -eq 1 ] ; then
# Heavy escaping in awk-statement because we cannot use apostrophes
dmsetup_cmd="echo -e $(grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | \
grep ${1} | awk NR==${c}\ \{\$1=\"\"\;\ print\ \$0\})"
else
# Append starting with newline
dmsetup_cmd="${dmsetup_cmd}\\\\n \
$(grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | \
grep ${1} | awk NR==${c}\ \{\$1=\"\"\;\ print\ \$0\})"
fi
done
echo "${dmsetup_cmd} | /sbin/dmsetup create ${1}"
fi
return 0
}
# char **get_new_dm_volumes(void)
#
# Return unique volumes from /etc/dmtab
get_new_dm_volumes() {
local volume
# Filter comments and blank lines
grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | \
awk '{ print $1 }' | \
uniq | \
while read volume ; do
# If it exists, skip it
dmvolume_exists "${volume%:}" && continue
echo "${volume%:}"
done
return 0
}
# int dmvolume_exists(volume)
#
# Return true if volume exists in DM table
dmvolume_exists() {
local x line volume=$1
[ -z "${volume}" ] && return 1
/sbin/dmsetup ls 2>/dev/null | \
while read line ; do
for x in ${line} ; do
# the following conditonal return only breaks out
# of the while loop, as it is running in a pipe.
[ "${x}" = "${volume}" ] && return 1
# We only want to check the volume name
break
done
done
# if 1 was returned from the above loop, then indicate that
# volume exists
[ $? = 1 ] && return 0
# otherwise the loop exited normally and the volume does not
# exist
return 1
}
# int is_empty_dm_volume(volume)
#
# Return true if the volume exists in DM table, but is empty/non-valid
is_empty_dm_volume() {
local table volume=$1
set -- $(/sbin/dmsetup table 2>/dev/null | grep -e "^${volume}:")
[ "${volume}" = "$1" -a -z "$2" ]
}
start() {
if [ -e /proc/modules ] && ! dm_in_proc ; then
modprobe dm-mod 2>/dev/null
fi
# Ensure the dirs exist for locking and running
checkpath -q -d -m 0700 -o root:root /run/lvm /run/lock/lvm
local x volume
if [ -x /sbin/dmsetup -a -c /dev/mapper/control -a -f /etc/dmtab ] ; then
[ -n "$(get_new_dm_volumes)" ] && \
einfo " Setting up device-mapper volumes:"
get_new_dm_volumes | \
while read x ; do
[ -n "${x}" ] || continue
volume="${x##* }"
ebegin " Creating volume: ${volume}"
if ! eval $(build_dmsetup_command ${volume}) >/dev/null 2>/dev/null ; then
eend 1 " Error creating volume: ${volume}"
# dmsetup still adds an empty volume in some cases,
# so lets remove it
is_empty_dm_volume "${volume}" && \
/sbin/dmsetup remove "${volume}" 2>/dev/null
else
eend 0
fi
done
fi
}

View File

@@ -0,0 +1,25 @@
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
PIDFILE=/run/dmeventd.pid
BIN=/sbin/dmeventd
depend() {
# As of .67-r1, we call ALL lvm start/stop scripts with --sysinit, that
# means dmeventd is NOT notified, as it cannot be safely running
after lvm device-mapper
}
start() {
ebegin "Starting dmeventd"
start-stop-daemon --start --exec $BIN --pidfile $PIDFILE
eend $?
}
stop() {
ebegin "Stopping dmeventd"
start-stop-daemon --stop --exec $BIN --pidfile $PIDFILE
eend $?
}

11
sys-fs/lvm2/files/dmtab Normal file
View File

@@ -0,0 +1,11 @@
#/etc/dmraid: config file for adding device-mapper volumes at boot
# Format: <volume name>: <table>
# Example: isw0: 0 312602976 striped 2 128 /dev/sda 0 /dev/sdb 0
#
# Alternatively you can create all your volumes the first time, and just run:
#
# dmsetup table >> /etc/dmtab
#
# and verify that they are correct.

View File

@@ -0,0 +1,38 @@
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# This script is based on upstream file
# LVM2.2.02.67/scripts/lvm2_monitoring_init_red_hat.in
depend() {
# As of .67-r1, we call ALL lvm start/stop scripts with --sysinit, that
# means dmeventd is NOT notified, as it cannot be safely running
need lvm dmeventd
}
VGCHANGE=/sbin/vgchange
VGS=/sbin/vgs
start() {
ret=0
# TODO do we want to separate out already active groups only?
VGSLIST=`$VGS --noheadings -o name --rows 2> /dev/null`
ebegin "Starting LVM monitoring for VGs ${VGSLIST}:"
$VGCHANGE --monitor y --poll y ${VGSLIST}
ret=$?
eend $ret
return $ret
}
stop() {
ret=0
# TODO do we want to separate out already active groups only?
VGSLIST=`$VGS --noheadings -o name --rows 2> /dev/null`
ebegin "Stopping LVM monitoring for VGs ${VGSLIST}:"
$VGCHANGE --monitor n ${VGSLIST}
ret=$?
eend $ret
return $ret
}

View File

@@ -0,0 +1,5 @@
# LVM should normally only be started after mdraid is available
# this is because LVM physical volumes are very often MD devices.
RC_AFTER="mdraid"
# vim: ft=gentoo-conf-d

View File

@@ -0,0 +1,145 @@
#!/sbin/openrc-run
# Copyright 1999-2017 Gentoo Foundation
# 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}"
}
_need_lvmetad()
{
local lvm_path="$(_get_lvm_path)"
[ ! -x "${lvm_path}" ] && return 1
${lvm_path} dumpconfig global 2>/dev/null | grep -q 'use_lvmetad=1'
}
_need_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 _need=
if service_started; then
_need=$(service_get_value need)
else
if _need_lvmetad; then
_need="${_need} lvmetad"
fi
if _need_lvmlockd; then
_need="${_need} lvmlockd"
fi
fi
need sysfs ${_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}\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 _need_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 _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}\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
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

View File

@@ -0,0 +1,52 @@
Maintainer note: Forward ported without editing from lvm2-2.02.108-example.conf.in.patch to apply cleanly.
--- LVM2.2.02.129/conf/example.conf.in
+++ LVM2.2.02.129/conf/example.conf.in
@@ -128,6 +128,9 @@
# Example
# Accept every block device:
# filter = [ "a|.*/|" ]
+ # Gentoo: we exclude /dev/nbd by default, because it makes a lot of kernel
+ # noise when you probed while not available.
+ filter = [ "r|/dev/nbd.*|", "a/.*/" ]
# Reject the cdrom drive:
# filter = [ "r|/dev/cdrom|" ]
# Work with just loopback devices, e.g. for testing:
@@ -620,7 +623,8 @@
# tools need to be installed with .lvm1 suffices, e.g. vgscan.lvm1.
# They will stop working once the lvm2 on-disk metadata format is used.
# This configuration option has an automatic default value.
- # fallback_to_lvm1 = @DEFAULT_FALLBACK_TO_LVM1@
+ # Gentoo: the LVM tools are a seperate package.
+ fallback_to_lvm1 = 0
# Configuration option global/format.
# The default metadata format that commands should use.
@@ -1413,7 +1417,7 @@
# Configuration section metadata.
# This configuration section has an automatic default value.
-# metadata {
+metadata {
# Configuration option metadata/pvmetadatacopies.
# Number of copies of metadata to store on each PV.
@@ -1431,7 +1435,8 @@
#
# This configuration option is advanced.
# This configuration option has an automatic default value.
- # pvmetadatacopies = 1
+ # Gentoo: enable for data safety, but PV resize is then disabled.
+ # pvmetadatacopies = 2
# Configuration option metadata/vgmetadatacopies.
# Number of copies of metadata to maintain for each VG.
@@ -1486,7 +1491,7 @@
#
# This configuration option is advanced.
# This configuration option does not have a default value defined.
-# }
+}
# Configuration section report.
# LVM report command output formatting.

View File

@@ -0,0 +1,12 @@
--- a/lib/device/dev-io.c
+++ b/lib/device/dev-io.c
@@ -505,7 +505,9 @@
dev->flags |= DEV_NOT_O_NOATIME;
if ((dev->fd = open(name, flags, 0777)) >= 0) {
log_debug_devs("%s: Not using O_NOATIME", name);
+#ifdef O_DIRECT_SUPPORT
goto opened;
+#endif
}
}
#endif

View File

@@ -0,0 +1,29 @@
--- LVM2.2.02.176/libdm/libdevmapper.pc.in
+++ LVM2.2.02.176/libdm/libdevmapper.pc.in
@@ -9,4 +9,4 @@
Cflags: -I${includedir}
Libs: -L${libdir} -ldevmapper
Requires.private: @SELINUX_PC@ @UDEV_PC@
-Libs.private: -lm @RT_LIBS@
+Libs.private: -lm @RT_LIBS@ @PTHREAD_LIBS@
--- LVM2.2.02.176/tools/Makefile.in
+++ LVM2.2.02.176/tools/Makefile.in
@@ -93,6 +93,7 @@
INSTALL_LVM_TARGETS += install_tools_static
INSTALL_DMSETUP_TARGETS += install_dmsetup_static
INSTALL_CMDLIB_TARGETS += install_cmdlib_static
+ STATIC_LIBS += @PTHREAD_LIBS@
endif
LVMLIBS = $(LVMINTERNAL_LIBS) -ldevmapper
@@ -118,6 +119,10 @@
include $(top_builddir)/make.tmpl
+ifeq ("@STATIC_LINK@", "yes")
+ STATIC_LIBS += @PTHREAD_LIBS@
+endif
+
device-mapper: $(TARGETS_DM)
CFLAGS_dmsetup.o += $(UDEV_CFLAGS) $(EXTRA_EXEC_CFLAGS)

View File

@@ -0,0 +1,29 @@
--- a/tools/lvmcmdline.c
+++ b/tools/lvmcmdline.c
@@ -3110,7 +3110,7 @@ static int _check_standard_fds(void)
int err = is_valid_fd(STDERR_FILENO);
if (!is_valid_fd(STDIN_FILENO) &&
- !(stdin = fopen(_PATH_DEVNULL, "r"))) {
+ !freopen(_PATH_DEVNULL, "r", stdin)) {
if (err)
perror("stdin stream open");
else
@@ -3120,7 +3120,7 @@ static int _check_standard_fds(void)
}
if (!is_valid_fd(STDOUT_FILENO) &&
- !(stdout = fopen(_PATH_DEVNULL, "w"))) {
+ !freopen(_PATH_DEVNULL, "r", stdout)) {
if (err)
perror("stdout stream open");
/* else no stdout */
@@ -3128,7 +3128,7 @@ static int _check_standard_fds(void)
}
if (!is_valid_fd(STDERR_FILENO) &&
- !(stderr = fopen(_PATH_DEVNULL, "w"))) {
+ !freopen(_PATH_DEVNULL, "w", stderr)) {
printf("stderr stream open: %s\n",
strerror(errno));
return 0;

View File

@@ -0,0 +1,24 @@
diff --git a/lib/log/log.c b/lib/log/log.c
index 79fbd7a..0999d10 100644
--- a/lib/log/log.c
+++ b/lib/log/log.c
@@ -161,6 +161,7 @@ static void _check_and_replace_standard_log_streams(FILE *old_stream, FILE *new_
* Close and reopen standard stream on file descriptor fd.
*/
int reopen_standard_stream(FILE **stream, const char *mode)
+#ifdef __GLIBC__
{
int fd, fd_copy, new_fd;
const char *name;
@@ -207,6 +208,11 @@ int reopen_standard_stream(FILE **stream, const char *mode)
*stream = new_stream;
return 1;
}
+#else
+{
+ return (freopen(NULL, mode, *stream) != NULL);
+}
+#endif
void init_log_fn(lvm2_log_fn_t log_fn)
{

View File

@@ -0,0 +1,21 @@
--- a/lib/mm/memlock.c
+++ b/lib/mm/memlock.c
@@ -159,7 +159,7 @@ static void _touch_memory(void *mem, siz
static void _allocate_memory(void)
{
-#ifndef VALGRIND_POOL
+#if !defined(VALGRIND_POOL) && defined(__GLIBC__)
void *stack_mem;
struct rlimit limit;
int i, area = 0, missing = _size_malloc_tmp, max_areas = 32, hblks;
--- a/libdaemon/server/daemon-server.c
+++ b/libdaemon/server/daemon-server.c
@@ -18,6 +18,7 @@
#include "daemon-server.h"
#include "daemon-log.h"
+#include <fcntl.h>
#include <dlfcn.h>
#include <errno.h>
#include <pthread.h>

View File

@@ -0,0 +1,72 @@
--- LVM2.2.02.56/scripts/lvm2create_initrd/lvm2create_initrd.orig 2006-11-21 22:41:56.000000000 +0000
+++ LVM2.2.02.56/scripts/lvm2create_initrd/lvm2create_initrd 2009-12-26 01:47:08.025224602 +0000
@@ -54,7 +54,9 @@
DEVRAM=/tmp/initrd.$$
# set defaults
-BINFILES=${BINFILES:-"`which lvm` `which bash` `which busybox` `which pivot_root`"}
+LVM=`which lvm.static`
+LVM=${LVM:-"`which lvm`"}
+BINFILES=${BINFILES:-"${LVM} `which bash` `which busybox` `which pivot_root`"}
BASICDEVICES=${BASICDEVICES:-"std consoleonly fd"}
BLOCKDEVICES=${BLOCKDEVICES:-"md hda hdb hdc hdd sda sdb sdc sdd"}
MAKEDEV=${MAKEDEV:-"debian"}
@@ -119,6 +121,10 @@
echo "$PRE Mounting /proc"
mount -t proc none /proc
+# We need /sys for lvm
+echo "$PRE Mounting /sys"
+mount -t sysfs sysfs /sys
+
# plug in modules listed in /etc/modules
if [ -f /etc/modules ]; then
echo -n "$PRE plugging in kernel modules:"
@@ -179,26 +185,29 @@
# run a shell if we're passed lvm2rescue on commandline
grep lvm2rescue /proc/cmdline 1>/dev/null 2>&1
if [ $? -eq 0 ]; then
- lvm vgchange --ignorelockingfailure -P -a y
+ $LVM vgchange --ignorelockingfailure -P -a y
do_shell
else
- lvm vgchange --ignorelockingfailure -a y
+ $LVM vgchange --ignorelockingfailure -a y
fi
echo "$PRE Mounting root filesystem $rootvol ro"
mkdir /rootvol
if ! mount -t auto -o ro $rootvol /rootvol; then
- echo "\t*FAILED*";
+ echo "\t*FAILED TRYING TO MOUNT ROOTVOL*";
do_shell
fi
echo "$PRE Umounting /proc"
umount /proc
+echo "$PRE Umounting /sys"
+umount /sys
+
echo "$PRE Changing roots"
cd /rootvol
if ! pivot_root . initrd ; then
- echo "\t*FAILED*"
+ echo "\t*FAILED PIVOT TO NEW ROOT*"
do_shell
fi
@@ -356,7 +365,7 @@
fi
verbose "creating basic set of directories in $TMPMNT"
-(cd $TMPMNT; mkdir bin dev etc lib proc sbin var)
+(cd $TMPMNT; mkdir bin dev etc lib proc sbin sys var)
if [ $? -ne 0 ]; then
echo "$cmd -- ERROR creating directories in $TMPMNT"
cleanup 1
@@ -499,4 +508,3 @@
FINALTXT
cleanup 0
-

View File

@@ -0,0 +1,42 @@
diff -Nuar --exclude '*~' LVM2.2.02.63.orig/daemons/dmeventd/Makefile.in LVM2.2.02.63/daemons/dmeventd/Makefile.in
--- LVM2.2.02.63.orig/daemons/dmeventd/Makefile.in 2010-04-09 14:42:48.000000000 -0700
+++ LVM2.2.02.63/daemons/dmeventd/Makefile.in 2010-04-19 11:53:27.000000000 -0700
@@ -28,11 +28,12 @@
INSTALL_LIB_TARGETS = install_lib_dynamic
LIB_NAME = libdevmapper-event
+LIB_STATIC = $(LIB_NAME).a
+INSTALL_LIB_TARGETS += install_lib_static
+TARGETS += $(LIB_STATIC)
ifeq ("@STATIC_LINK@", "yes")
- LIB_STATIC = $(LIB_NAME).a
- TARGETS += $(LIB_STATIC) dmeventd.static
+ TARGETS += dmeventd.static
INSTALL_DMEVENTD_TARGETS += install_dmeventd_static
- INSTALL_LIB_TARGETS += install_lib_static
endif
LIB_VERSION = $(LIB_VERSION_DM)
diff -Nuar --exclude '*~' LVM2.2.02.63.orig/libdm/Makefile.in LVM2.2.02.63/libdm/Makefile.in
--- LVM2.2.02.63.orig/libdm/Makefile.in 2010-04-09 14:42:51.000000000 -0700
+++ LVM2.2.02.63/libdm/Makefile.in 2010-04-19 11:52:20.000000000 -0700
@@ -34,8 +34,8 @@
INCLUDES = -I$(srcdir)/$(interface) -I$(srcdir)
-ifeq ("@STATIC_LINK@", "yes")
LIB_STATIC = $(interface)/libdevmapper.a
+ifeq ("@STATIC_LINK@", "yes")
endif
LIB_SHARED = $(interface)/libdevmapper.$(LIB_SUFFIX)
@@ -63,8 +63,8 @@
INSTALL_TYPE = install_dynamic
-ifeq ("@STATIC_LINK@", "yes")
INSTALL_TYPE += install_static
+ifeq ("@STATIC_LINK@", "yes")
endif
ifeq ("@PKGCONFIG@", "yes")

View File

@@ -0,0 +1,18 @@
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=301331
X-Gentoo-Bug: 301331
diff -Nuar LVM2.2.02.67.orig/scripts/lvm2create_initrd/lvm2create_initrd LVM2.2.02.67/scripts/lvm2create_initrd/lvm2create_initrd
--- LVM2.2.02.67.orig/scripts/lvm2create_initrd/lvm2create_initrd 2010-06-07 18:44:34.182980475 +0000
+++ LVM2.2.02.67/scripts/lvm2create_initrd/lvm2create_initrd 2010-06-07 18:51:27.636312899 +0000
@@ -469,9 +469,9 @@
rmdir $TMPMNT/lost+found
echo "$cmd -- ummounting ram disk"
-umount $DEVRAM
+umount $TMPMNT
if [ $? -ne 0 ]; then
- echo "$cmd -- ERROR umounting $DEVRAM"
+ echo "$cmd -- ERROR umounting $TMPMNT"
cleanup 1
fi

View File

@@ -0,0 +1,11 @@
--- LVM2/make.tmpl.in
+++ LVM2/make.tmpl.in
@@ -395,7 +395,7 @@
( cat $(srcdir)/.exported_symbols; \
if test x$(EXPORTED_HEADER) != x; then \
$(CC) -E -P $(INCLUDES) $(DEFS) $(EXPORTED_HEADER) | \
- $(SED) -ne "/^typedef|}/!s/.*[ *]\($(EXPORTED_FN_PREFIX)_[a-z0-9_]*\)(.*/\1/p"; \
+ LC_ALL=C $(SED) -ne "/^typedef|}/!s/.*[ *]\($(EXPORTED_FN_PREFIX)_[a-z0-9_]*\)(.*/\1/p"; \
fi \
) > $@

View File

@@ -0,0 +1,13 @@
diff --git a/lib/locking/lvmlockd.c b/lib/locking/lvmlockd.c
index 0365797..a4684b4 100644
--- a/lib/locking/lvmlockd.c
+++ b/lib/locking/lvmlockd.c
@@ -2148,7 +2148,7 @@ int lockd_lv_name(struct cmd_context *cmd, struct volume_group *vg,
static int _lockd_lv_thin(struct cmd_context *cmd, struct logical_volume *lv,
const char *def_mode, uint32_t flags)
{
- struct logical_volume *pool_lv;
+ struct logical_volume *pool_lv = NULL;
if (lv_is_thin_volume(lv)) {
struct lv_segment *pool_seg = first_seg(lv);

View File

@@ -0,0 +1,25 @@
lib/filters/filter-persistent.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/lib/filters/filter-persistent.c b/lib/filters/filter-persistent.c
index 5bc0861..203c88e 100644
--- a/lib/filters/filter-persistent.c
+++ b/lib/filters/filter-persistent.c
@@ -26,12 +26,15 @@ struct pfilter {
struct dev_types *dt;
};
+static char* _good_device = "good";
+static char* _bad_device = "bad";
+
/*
* The hash table holds one of these two states
* against each entry.
*/
-#define PF_BAD_DEVICE ((void *) 1)
-#define PF_GOOD_DEVICE ((void *) 2)
+#define PF_BAD_DEVICE ((void *) &_good_device)
+#define PF_GOOD_DEVICE ((void *) &_bad_device)
static int _init_hash(struct pfilter *pf)
{

View File

@@ -0,0 +1,16 @@
scripts/lvm2_lvmetad_systemd_red_hat.service.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/lvm2_lvmetad_systemd_red_hat.service.in b/scripts/lvm2_lvmetad_systemd_red_hat.service.in
index 8f4c60d..a1cedd2 100644
--- a/scripts/lvm2_lvmetad_systemd_red_hat.service.in
+++ b/scripts/lvm2_lvmetad_systemd_red_hat.service.in
@@ -9,7 +9,7 @@ Conflicts=shutdown.target
[Service]
Type=simple
NonBlocking=true
-ExecStart=@SBINDIR@/lvmetad -f
+ExecStart=@SBINDIR@/lvmetad -f -t 3600
Environment=SD_ACTIVATION=1
Restart=on-abort
PIDFile=@LVMETAD_PIDFILE@

View File

@@ -0,0 +1,30 @@
conf/example.conf.in | 2 +-
lib/config/config_settings.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/conf/example.conf.in b/conf/example.conf.in
index c0afcb7..ec12918 100644
--- a/conf/example.conf.in
+++ b/conf/example.conf.in
@@ -106,7 +106,7 @@ devices {
# Example
# preferred_names = [ "^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d" ]
#
- # This configuration option does not have a default value defined.
+ preferred_names = [ "^/dev/mpath/", "^/dev/mapper/mpath", "^/dev/[hs]d" ]
# Configuration option devices/filter.
# Limit the block devices that are used by LVM commands.
diff --git a/lib/config/config_settings.h b/lib/config/config_settings.h
index 9017043..c06b6f0 100644
--- a/lib/config/config_settings.h
+++ b/lib/config/config_settings.h
@@ -205,7 +205,7 @@ cfg(devices_external_device_info_source_CFG, "external_device_info_source", devi
" compiled with udev support.\n"
"#\n")
-cfg_array(devices_preferred_names_CFG, "preferred_names", devices_CFG_SECTION, CFG_ALLOW_EMPTY | CFG_DEFAULT_UNDEFINED , CFG_TYPE_STRING, NULL, vsn(1, 2, 19), NULL, 0, NULL,
+cfg_array(devices_preferred_names_CFG, "preferred_names", devices_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, "#S^/dev/mpath/#S^/dev/mapper/mpath#S^/dev/[hs]d", vsn(1, 2, 19), NULL, 0, NULL,
"Select which path name to display for a block device.\n"
"If multiple path names exist for a block device, and LVM needs to\n"
"display a name for the device, the path names are matched against\n"

View File

@@ -0,0 +1,12 @@
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
pidfile="/run/lvmetad.pid"
command="/sbin/lvmetad"
command_args="${LVMETAD_OPTS:=-p ${pidfile}}"
start_stop_daemon_args="--pidfile ${pidfile}"
depend() {
:
}

View File

@@ -0,0 +1,17 @@
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
pidfile="/run/lvmetad.pid"
command="/sbin/lvmetad"
command_args="${LVMETAD_OPTS:=-p ${pidfile}}"
start_stop_daemon_args="--pidfile ${pidfile}"
depend() {
:
}
start_pre()
{
checkpath --directory /run/lvm || return 1
}

View File

@@ -0,0 +1,17 @@
#!/sbin/openrc-run
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
pidfile="/run/lvmlockd.pid"
command="/sbin/lvmlockd"
command_args="${LVMLOCKD_OPTS:--p ${pidfile}} ${LVMLOCKD_TYPE:--g sanlock}"
start_stop_daemon_args="--pidfile ${pidfile}"
depend() {
before sanlock
}
start_pre()
{
checkpath --directory /run/lvm || return 1
}