diff options
author | Robin H. Johnson <robbat2@gentoo.org> | 2019-11-28 14:43:05 -0800 |
---|---|---|
committer | Robin H. Johnson <robbat2@gentoo.org> | 2019-11-28 14:44:35 -0800 |
commit | 0a7dcaff7c920619ffce4c0195223cbd9db02411 (patch) | |
tree | 781cfc2ac8f7f485a2e63bc6dabeb08db91e3380 | |
parent | www-apps/zeppelin-bin: version bump. (diff) | |
download | gentoo-0a7dcaff.tar.gz gentoo-0a7dcaff.tar.bz2 gentoo-0a7dcaff.zip |
sys-fs/lvm2: partial revert of 2161b3a104c9a5664131b9297766db0538e7464e
Bug 690494 shows that the regression is still not fixed in 2.02.186-r2,
so 2.02.145-r2 is still required for some users.
Bug: https://bugs.gentoo.org/show_bug.cgi?id=690494
Package-Manager: Portage-2.3.79, Repoman-2.3.18
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
-rw-r--r-- | sys-fs/lvm2/Manifest | 3 | ||||
-rw-r--r-- | sys-fs/lvm2/files/lvm2-2.02.129-static-pkgconfig-libs.patch | 102 | ||||
-rw-r--r-- | sys-fs/lvm2/files/lvm2-2.02.130-pthread-pkgconfig.patch | 32 | ||||
-rw-r--r-- | sys-fs/lvm2/files/lvm2-2.02.139-dynamic-static-ldflags.patch | 63 | ||||
-rw-r--r-- | sys-fs/lvm2/files/lvm2-2.02.145-mkdev.patch | 127 | ||||
-rw-r--r-- | sys-fs/lvm2/lvm2-2.02.145-r2.ebuild | 254 |
6 files changed, 581 insertions, 0 deletions
diff --git a/sys-fs/lvm2/Manifest b/sys-fs/lvm2/Manifest index 701f9bc11eb2..9b72fb0647e6 100644 --- a/sys-fs/lvm2/Manifest +++ b/sys-fs/lvm2/Manifest @@ -1,4 +1,7 @@ DIST LVM2.2.02.116.tgz 1538340 BLAKE2B 718261b60626f2eca5ba13011646bf551523ed8e59aaceceb9097221c000268b7533ac43151ff1d9229911d87e764fbdb29ffa1d305f2aae99220a68e301559a SHA512 992541339637d597257850b4ff7f5348fb7cdcccf806ac8d986a3be1ad1edc5f6bfaedeed5128690c541d1a485cdc75742e90a766363c39867901003518fb84d +DIST LVM2.2.02.145.tgz 1986370 BLAKE2B 0c9e5efae17f26ff86152cecbf0b11a74e85007b2fa9491f44dec03ac8c11375bacf6685213b4be19037c8fbf70e13549516716ecf8fa262919a44625e6aab34 SHA512 84e28b3efc940837ea9da70fce620744aea0945ba29383b76ad7bcd4b5259b897c714162a8e8b7cfe26ae736a3ad2eca633a3e0df4d6280a32b28bd4cf472d27 +DIST LVM2.2.02.183.tgz 2380574 BLAKE2B b1fe71b6cdb8ee20dd53d0ad3399c553487baafa12657ec81a794c84ad161988afdb8693ac247877a2645d693a0740c74c8b991047ed2ba4adc9ec75f1c261a9 SHA512 3947523c6b0862ada40677ed171ed0cf95e070119e377296fc5ccb153e9c4212d34c0b16a887dbd68ccf265525345dabfed2aa59fb3604555429a7e2ecfff4d7 DIST LVM2.2.02.184.tgz 2383698 BLAKE2B b6e308d76d541b9461dfcc6e82db256a175ccdabfae9c9d57d84eabd0d5ea50e3e09954b34741903e027412c2c26f72a5005fe934261576337a810738139deb8 SHA512 9db74f675e7c58f663a39afb79b6f33a33ad2cfbda63e9783ef5027f33977b4a1262a2e6754aa67c586eed083ee119a2e837c32a7746dcc53f13877c9d65c390 +DIST LVM2.2.02.185.tgz 2386328 BLAKE2B d2e31de3eedd7518ea2d239cb9b36b38e351d7fc070097a1fc4e7934e3636195da3247fba57d684bb0b31b7f3dbdfe29161bd121b2962b2c35c8c9d7914b4506 SHA512 f421505551aec2a09bc862f2fcc1ee825bc4d94c53a01d13265631e99308d60fbca40112be5bc7824cce3ef223c0775d2f6c345f6a3f227229a0566c903841bf DIST LVM2.2.02.186.tgz 2389759 BLAKE2B e094c0135d455386ea5789208899d4dbdd5e78bebf52e49ab5587f881fbc2b94c6accecacf1b4ed182b0c87046402c00a47a1b724795a94fe3ec998b580a77ae SHA512 06a1c00142ee41d8a576a5e06a5beae70baced3020e753ce3b612355cc4d9e33be4acf58569d49436c4ee1118d288d884c7301b7d886074eaf9f2fa6b0248c03 DIST LVM2.2.03.06.tgz 2453672 BLAKE2B 3d39bef4915ddb15c51011c131afcd2735723fc3e880e01fb863d82ccac0c34b7d71f6a3a126c6bb53fbf2dd923ccf0443e4e02a492fc0660ee1ef168dbb0e79 SHA512 2a01d34fa58348b0fac3d40a9ce736aa499af18c7e9bf96a3eeefc6a2de6a73460c83b6c67be20e9bd440998cbf847bc3e7a028385f38d715e221a5a857d391f diff --git a/sys-fs/lvm2/files/lvm2-2.02.129-static-pkgconfig-libs.patch b/sys-fs/lvm2/files/lvm2-2.02.129-static-pkgconfig-libs.patch new file mode 100644 index 000000000000..239694523b3d --- /dev/null +++ b/sys-fs/lvm2/files/lvm2-2.02.129-static-pkgconfig-libs.patch @@ -0,0 +1,102 @@ +--- LVM2.2.02.129/configure.in ++++ LVM2.2.02.129/configure.in +@@ -1287,6 +1287,7 @@ + fi]) + if test "$BLKID_WIPING" = yes; then + BLKID_PC="blkid" ++ BLKID_STATIC_LIBS=`$PKG_CONFIG --static --libs $BLKID_PC` + DEFAULT_USE_BLKID_WIPING=1 + AC_DEFINE([BLKID_WIPING_SUPPORT], 1, [Define to 1 to use libblkid detection of signatures when wiping.]) + else +@@ -1332,6 +1333,7 @@ + if test "$UDEV_SYNC" = yes; then + pkg_config_init + PKG_CHECK_MODULES(UDEV, libudev >= 143, [UDEV_PC="libudev"]) ++ UDEV_STATIC_LIBS=`$PKG_CONFIG --static --libs libudev` + AC_DEFINE([UDEV_SYNC_SUPPORT], 1, [Define to 1 to enable synchronisation with udev processing.]) + fi + +@@ -1558,19 +1560,32 @@ + if test "$SELINUX" = yes; then + AC_CHECK_LIB([sepol], [sepol_check_context], [ + AC_DEFINE([HAVE_SEPOL], 1, [Define to 1 if sepol_check_context is available.]) +- SELINUX_LIBS="-lsepol"]) ++ SEPOL_LIBS="-lsepol"]) ++ ++ dnl -- init pkgconfig if required ++ if test x$PKGCONFIG_INIT != x1; then ++ pkg_config_init ++ fi ++ PKG_CHECK_MODULES(SELINUX, libselinux, [ ++ SELINUX_PC="libselinux" ++ SELINUX_STATIC_LIBS=`$PKG_CONFIG --static --libs libselinux` ++ SELINUX_LIBS="$SELINUX_LIBS $SEPOL_LIBS" ++ AC_DEFINE([HAVE_SELINUX], 1, [Define to 1 to include support for selinux.]) ++ ],[ ++ dnl -- old non-pkgconfig method, is buggy with static builds + + AC_CHECK_LIB([selinux], [is_selinux_enabled], [ + AC_CHECK_HEADERS([selinux/selinux.h],, hard_bailout) + AC_CHECK_HEADERS([selinux/label.h]) + AC_DEFINE([HAVE_SELINUX], 1, [Define to 1 to include support for selinux.]) +- SELINUX_LIBS="-lselinux $SELINUX_LIBS" ++ SELINUX_LIBS="-lselinux $SEPOL_LIBS" + SELINUX_PC="libselinux" + HAVE_SELINUX=yes ], [ + AC_MSG_WARN(Disabling selinux) + SELINUX_LIBS= + SELINUX_PC= + HAVE_SELINUX=no ]) ++ ]) + fi + + ################################################################################ +@@ -1902,6 +1917,7 @@ + ################################################################################ + AC_SUBST(APPLIB) + AC_SUBST(AWK) ++AC_SUBST(BLKID_STATIC_LIBS) + AC_SUBST(BLKID_PC) + AC_SUBST(BUILD_CMIRRORD) + AC_SUBST(BUILD_DMEVENTD) +@@ -2005,6 +2021,7 @@ + AC_SUBST(SALCK_CFLAGS) + AC_SUBST(SALCK_LIBS) + AC_SUBST(SELINUX_LIBS) ++AC_SUBST(SELINUX_STATIC_LIBS) + AC_SUBST(SELINUX_PC) + AC_SUBST(SNAPSHOTS) + AC_SUBST(STATICDIR) +@@ -2020,6 +2037,7 @@ + AC_SUBST(CACHE_DUMP_CMD) + AC_SUBST(CACHE_REPAIR_CMD) + AC_SUBST(CACHE_RESTORE_CMD) ++AC_SUBST(UDEV_STATIC_LIBS) + AC_SUBST(UDEV_PC) + AC_SUBST(UDEV_RULES) + AC_SUBST(UDEV_SYNC) +--- LVM2.2.02.129/make.tmpl.in ++++ LVM2.2.02.129/make.tmpl.in +@@ -43,7 +43,7 @@ + + LIBS = @LIBS@ + # Extra libraries always linked with static binaries +-STATIC_LIBS = $(SELINUX_LIBS) $(UDEV_LIBS) $(BLKID_LIBS) ++STATIC_LIBS = $(SELINUX_STATIC_LIBS) $(UDEV_STATIC_LIBS) $(BLKID_STATIC_LIBS) + DEFS += @DEFS@ + # FIXME set this only where it's needed, not globally? + CFLAGS ?= @COPTIMISE_FLAG@ @CFLAGS@ +@@ -58,10 +58,13 @@ + PTHREAD_LIBS = @PTHREAD_LIBS@ + READLINE_LIBS = @READLINE_LIBS@ + SELINUX_LIBS = @SELINUX_LIBS@ ++SELINUX_STATIC_LIBS = @SELINUX_STATIC_LIBS@ + UDEV_CFLAGS = @UDEV_CFLAGS@ + UDEV_LIBS = @UDEV_LIBS@ ++UDEV_STATIC_LIBS = @UDEV_STATIC_LIBS@ + BLKID_CFLAGS = @BLKID_CFLAGS@ + BLKID_LIBS = @BLKID_LIBS@ ++BLKID_STATIC_LIBS = @BLKID_STATIC_LIBS@ + VALGRIND_CFLAGS = @VALGRIND_CFLAGS@ + TESTING = @TESTING@ + diff --git a/sys-fs/lvm2/files/lvm2-2.02.130-pthread-pkgconfig.patch b/sys-fs/lvm2/files/lvm2-2.02.130-pthread-pkgconfig.patch new file mode 100644 index 000000000000..11db632e2e7e --- /dev/null +++ b/sys-fs/lvm2/files/lvm2-2.02.130-pthread-pkgconfig.patch @@ -0,0 +1,32 @@ +Make sure that libdm usage always brings in pthread libraries, both in +pkgconfig and during manual build. + +--- LVM2.2.02.130/libdm/libdevmapper.pc.in ++++ LVM2.2.02.130/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_LIB@ ++Libs.private: -lm @RT_LIB@ @PTHREAD_LIBS@ +--- LVM2.2.02.130/tools/Makefile.in ++++ LVM2.2.02.130/tools/Makefile.in +@@ -90,6 +90,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) +@@ -120,6 +121,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) diff --git a/sys-fs/lvm2/files/lvm2-2.02.139-dynamic-static-ldflags.patch b/sys-fs/lvm2/files/lvm2-2.02.139-dynamic-static-ldflags.patch new file mode 100644 index 000000000000..312e546e2403 --- /dev/null +++ b/sys-fs/lvm2/files/lvm2-2.02.139-dynamic-static-ldflags.patch @@ -0,0 +1,63 @@ +diff -ur LVM2.2.02.139_O/configure.in LVM2.2.02.139/configure.in +--- LVM2.2.02.139_O/configure.in 2016-01-19 12:54:33.155187005 +0000 ++++ LVM2.2.02.139/configure.in 2016-01-19 12:56:39.487181372 +0000 +@@ -31,6 +31,7 @@ + linux*) + CLDFLAGS="$CLDFLAGS -Wl,--version-script,.export.sym" + ELDFLAGS="-Wl,--export-dynamic" ++ STATIC_LDFLAGS="-Wl,--no-export-dynamic" + # FIXME Generate list and use --dynamic-list=.dlopen.sym + CLDWHOLEARCHIVE="-Wl,-whole-archive" + CLDNOWHOLEARCHIVE="-Wl,-no-whole-archive" +@@ -2009,6 +2010,7 @@ + AC_SUBST(SELINUX_PC) + AC_SUBST(SNAPSHOTS) + AC_SUBST(STATICDIR) ++AC_SUBST(STATIC_LDFLAGS) + AC_SUBST(STATIC_LINK) + AC_SUBST(TESTING) + AC_SUBST(TESTSUITE_DATA) +diff -ur LVM2.2.02.139_O/daemons/dmeventd/Makefile.in LVM2.2.02.139/daemons/dmeventd/Makefile.in +--- LVM2.2.02.139_O/daemons/dmeventd/Makefile.in 2016-01-19 12:54:33.278186999 +0000 ++++ LVM2.2.02.139/daemons/dmeventd/Makefile.in 2016-01-19 12:57:44.277178484 +0000 +@@ -67,7 +67,7 @@ + $(DL_LIBS) $(LVMLIBS) $(LIBS) -rdynamic + + dmeventd.static: $(LIB_STATIC) dmeventd.o $(interfacebuilddir)/libdevmapper.a +- $(CC) $(CFLAGS) $(LDFLAGS) $(ELDFLAGS) -static -L. -L$(interfacebuilddir) -o $@ \ ++ $(CC) $(CFLAGS) $(LDFLAGS) $(ELDFLAGS) $(STATIC_LDFLAGS) -static -L. -L$(interfacebuilddir) -o $@ \ + dmeventd.o $(DL_LIBS) $(LVMLIBS) $(LIBS) $(STATIC_LIBS) + + ifeq ("@PKGCONFIG@", "yes") +diff -ur LVM2.2.02.139_O/make.tmpl.in LVM2.2.02.139/make.tmpl.in +--- LVM2.2.02.139_O/make.tmpl.in 2016-01-19 12:54:33.529186988 +0000 ++++ LVM2.2.02.139/make.tmpl.in 2016-01-19 12:58:31.514176378 +0000 +@@ -49,6 +49,7 @@ + # FIXME set this only where it's needed, not globally? + CFLAGS ?= @COPTIMISE_FLAG@ @CFLAGS@ + LDFLAGS ?= @COPTIMISE_FLAG@ @LDFLAGS@ ++STATIC_LDFLAGS += @STATIC_LDFLAGS@ + CLDFLAGS += @CLDFLAGS@ + ELDFLAGS += @ELDFLAGS@ + LDDEPS += @LDDEPS@ +diff -ur LVM2.2.02.139_O/tools/Makefile.in LVM2.2.02.139/tools/Makefile.in +--- LVM2.2.02.139_O/tools/Makefile.in 2016-01-08 18:51:21.000000000 +0000 ++++ LVM2.2.02.139/tools/Makefile.in 2016-01-19 13:00:08.349172060 +0000 +@@ -129,7 +129,7 @@ + -o $@ dmsetup.o -ldevmapper $(LIBS) + + dmsetup.static: dmsetup.o $(interfacebuilddir)/libdevmapper.a +- $(CC) $(CFLAGS) $(LDFLAGS) -static -L$(interfacebuilddir) \ ++ $(CC) $(CFLAGS) $(LDFLAGS) $(STATIC_LDFLAGS) -static -L$(interfacebuilddir) \ + -o $@ dmsetup.o -ldevmapper $(M_LIBS) $(PTHREAD_LIBS) $(STATIC_LIBS) $(LIBS) + + all: device-mapper +@@ -146,7 +146,7 @@ + endif + + lvm.static: $(OBJECTS) lvm-static.o $(top_builddir)/lib/liblvm-internal.a $(interfacebuilddir)/libdevmapper.a +- $(CC) $(CFLAGS) $(LDFLAGS) -static -L$(interfacebuilddir) -o $@ \ ++ $(CC) $(CFLAGS) $(LDFLAGS) $(STATIC_LDFLAGS) -static -L$(interfacebuilddir) -o $@ \ + $(OBJECTS) lvm-static.o $(LVMLIBS) $(STATIC_LIBS) $(LIBS) + + liblvm2cmd.a: $(top_builddir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd.o diff --git a/sys-fs/lvm2/files/lvm2-2.02.145-mkdev.patch b/sys-fs/lvm2/files/lvm2-2.02.145-mkdev.patch new file mode 100644 index 000000000000..f91dccd5c188 --- /dev/null +++ b/sys-fs/lvm2/files/lvm2-2.02.145-mkdev.patch @@ -0,0 +1,127 @@ +https://bugs.gentoo.org/580062 + +From 2a1d0fa8ea765604cd8274aac5aa7876f1c145c9 Mon Sep 17 00:00:00 2001 +From: Mike Frysinger <vapier@gentoo.org> +Date: Tue, 19 Apr 2016 23:53:22 -0400 +Subject: [PATCH] convert major/minor/makedev handling + +Most of the files in here use MAJOR/MINOR/MKDEV macros, but a few +missed it. Update the defines in those files to match them. +--- + daemons/cmirrord/functions.c | 16 ++++++++++++---- + daemons/dmeventd/plugins/snapshot/dmeventd_snapshot.c | 12 ++++++++++-- + lib/filters/filter-sysfs.c | 6 ++++-- + 3 files changed, 26 insertions(+), 8 deletions(-) + +diff --git a/daemons/cmirrord/functions.c b/daemons/cmirrord/functions.c +index e9d3c09..5b3cb38 100644 +--- a/daemons/cmirrord/functions.c ++++ b/daemons/cmirrord/functions.c +@@ -20,6 +20,14 @@ + #include <time.h> + #include <unistd.h> + ++#ifdef __linux__ ++# include "kdev_t.h" ++#else ++# define MAJOR(x) major((x)) ++# define MINOR(x) minor((x)) ++# define MKDEV(x,y) makedev((x),(y)) ++#endif ++ + #define BYTE_SHIFT 3 + + /* +@@ -333,8 +341,8 @@ static int find_disk_path(char *major_minor_str, char *path_rtn, int *unlink_pat + continue; + } + if (S_ISBLK(statbuf.st_mode) && +- (major(statbuf.st_rdev) == major) && +- (minor(statbuf.st_rdev) == minor)) { ++ (MAJOR(statbuf.st_rdev) == major) && ++ (MINOR(statbuf.st_rdev) == minor)) { + LOG_DBG(" %s: YES", dep->d_name); + if (closedir(dp)) + LOG_DBG("Unable to closedir /dev/mapper %s", +@@ -1451,7 +1459,7 @@ static int disk_status_info(struct log_c *lc, struct dm_ulog_request *rq) + } + + r = sprintf(data, "3 clustered-disk %d:%d %c", +- major(statbuf.st_rdev), minor(statbuf.st_rdev), ++ MAJOR(statbuf.st_rdev), MINOR(statbuf.st_rdev), + (lc->log_dev_failed) ? 'D' : 'A'); + if (r < 0) + return r; +@@ -1514,7 +1522,7 @@ static int disk_status_table(struct log_c *lc, struct dm_ulog_request *rq) + } + + r = sprintf(data, "clustered-disk %d:%d %u %s%s ", +- major(statbuf.st_rdev), minor(statbuf.st_rdev), ++ MAJOR(statbuf.st_rdev), MINOR(statbuf.st_rdev), + lc->region_size, + (lc->sync == DEFAULTSYNC) ? "" : + (lc->sync == NOSYNC) ? "nosync " : "sync ", +diff --git a/daemons/dmeventd/plugins/snapshot/dmeventd_snapshot.c b/daemons/dmeventd/plugins/snapshot/dmeventd_snapshot.c +index 7b060ed..4098203 100644 +--- a/daemons/dmeventd/plugins/snapshot/dmeventd_snapshot.c ++++ b/daemons/dmeventd/plugins/snapshot/dmeventd_snapshot.c +@@ -20,6 +20,14 @@ + #include <stdarg.h> + #include <pthread.h> + ++#ifdef __linux__ ++# include "kdev_t.h" ++#else ++# define MAJOR(x) major((x)) ++# define MINOR(x) minor((x)) ++# define MKDEV(x,y) makedev((x),(y)) ++#endif ++ + /* First warning when snapshot is 80% full. */ + #define WARNING_THRESH (DM_PERCENT_1 * 80) + /* Run a check every 5%. */ +@@ -148,8 +156,8 @@ static void _umount(const char *device, int major, int minor) + continue; /* can't stat, skip this one */ + + if (S_ISBLK(st.st_mode) && +- major(st.st_rdev) == major && +- minor(st.st_rdev) == minor) { ++ MAJOR(st.st_rdev) == major && ++ MINOR(st.st_rdev) == minor) { + log_error("Unmounting invalid snapshot %s from %s.", device, words[1]); + if (!_run(UMOUNT_COMMAND, "-fl", words[1], NULL)) + log_error("Failed to umount snapshot %s from %s: %s.", +diff --git a/lib/filters/filter-sysfs.c b/lib/filters/filter-sysfs.c +index 3115f86..5f76e8b 100644 +--- a/lib/filters/filter-sysfs.c ++++ b/lib/filters/filter-sysfs.c +@@ -19,6 +19,8 @@ + + #include <dirent.h> + ++#include "kdev_t.h" ++ + static int _locate_sysfs_blocks(const char *sysfs_dir, char *path, size_t len, + unsigned *sysfs_depth) + { +@@ -120,7 +122,7 @@ static struct dev_set *_dev_set_create(struct dm_pool *mem, + + static unsigned _hash_dev(dev_t dev) + { +- return (major(dev) ^ minor(dev)) & (SET_BUCKETS - 1); ++ return (MAJOR(dev) ^ MINOR(dev)) & (SET_BUCKETS - 1); + } + + /* +@@ -171,7 +173,7 @@ static int _parse_dev(const char *file, FILE *fp, dev_t *result) + return 0; + } + +- *result = makedev(major, minor); ++ *result = MKDEV(major, minor); + return 1; + } + +-- +2.7.4 + diff --git a/sys-fs/lvm2/lvm2-2.02.145-r2.ebuild b/sys-fs/lvm2/lvm2-2.02.145-r2.ebuild new file mode 100644 index 000000000000..70a95fcb0f78 --- /dev/null +++ b/sys-fs/lvm2/lvm2-2.02.145-r2.ebuild @@ -0,0 +1,254 @@ +# Copyright 1999-2019 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 +inherit autotools eutils linux-info multilib systemd toolchain-funcs udev flag-o-matic + +DESCRIPTION="User-land utilities for LVM2 (device-mapper) software" +HOMEPAGE="https://sourceware.org/lvm2/" +SRC_URI="ftp://sourceware.org/pub/lvm2/${PN/lvm/LVM}.${PV}.tgz + ftp://sourceware.org/pub/lvm2/old/${PN/lvm/LVM}.${PV}.tgz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="alpha amd64 arm arm64 hppa ia64 ~mips ppc ppc64 s390 ~sh sparc x86 ~amd64-linux ~x86-linux" +IUSE="readline static static-libs systemd lvm1 lvm2create_initrd selinux +udev +thin device-mapper-only" +REQUIRED_USE="device-mapper-only? ( !lvm1 !lvm2create_initrd !thin ) + systemd? ( udev )" + +DEPEND_COMMON=" + readline? ( sys-libs/readline:0= ) + systemd? ( >=sys-apps/systemd-205:0= ) + udev? ( >=virtual/libudev-208:=[static-libs(-)?] )" +# /run is now required for locking during early boot. /var cannot be assumed to +# be available -- thus, pull in recent enough baselayout for /run. +# This version of LVM is incompatible with cryptsetup <1.1.2. +RDEPEND="${DEPEND_COMMON} + >=sys-apps/baselayout-2.2 + !<sys-apps/openrc-0.11 + !<sys-fs/cryptsetup-1.1.2 + !!sys-fs/lvm-user + >=sys-apps/util-linux-2.16 + lvm2create_initrd? ( sys-apps/makedev ) + thin? ( >=sys-block/thin-provisioning-tools-0.3.0 )" +# note: thin- 0.3.0 is required to avoid --disable-thin_check_needs_check +# USE 'static' currently only works with eudev, bug 520450 +DEPEND="${DEPEND_COMMON} + virtual/pkgconfig + >=sys-devel/binutils-2.20.1-r1 + sys-devel/autoconf-archive + static? ( + selinux? ( sys-libs/libselinux[static-libs] ) + udev? ( >=sys-fs/eudev-3.1.2[static-libs] ) + >=sys-apps/util-linux-2.16[static-libs] + )" + +S=${WORKDIR}/${PN/lvm/LVM}.${PV} + +PATCHES=( + # Gentoo specific modification(s): + "${FILESDIR}"/${PN}-2.02.129-example.conf.in.patch + + # For upstream -- review and forward: + "${FILESDIR}"/${PN}-2.02.63-always-make-static-libdm.patch + "${FILESDIR}"/${PN}-2.02.56-lvm2create_initrd.patch + "${FILESDIR}"/${PN}-2.02.67-createinitrd.patch #301331 + "${FILESDIR}"/${PN}-2.02.99-locale-muck.patch #330373 + "${FILESDIR}"/${PN}-2.02.70-asneeded.patch # -Wl,--as-needed + "${FILESDIR}"/${PN}-2.02.139-dynamic-static-ldflags.patch #332905 + "${FILESDIR}"/${PN}-2.02.129-static-pkgconfig-libs.patch #370217, #439414 + blkid + "${FILESDIR}"/${PN}-2.02.130-pthread-pkgconfig.patch #492450 + "${FILESDIR}"/${PN}-2.02.145-mkdev.patch #580062 +) + +pkg_setup() { + local CONFIG_CHECK="~SYSVIPC" + + if use udev; then + local WARNING_SYSVIPC="CONFIG_SYSVIPC:\tis not set (required for udev sync)\n" + if linux_config_exists; then + local uevent_helper_path=$(linux_chkconfig_string UEVENT_HELPER_PATH) + if [ -n "${uevent_helper_path}" ] && [ "${uevent_helper_path}" != '""' ]; then + ewarn "It's recommended to set an empty value to the following kernel config option:" + ewarn "CONFIG_UEVENT_HELPER_PATH=${uevent_helper_path}" + fi + fi + fi + + check_extra_config + + # 1. Genkernel no longer copies /sbin/lvm blindly. + if use static; then + elog "Warning, we no longer overwrite /sbin/lvm and /sbin/dmsetup with" + elog "their static versions. If you need the static binaries," + elog "you must append .static to the filename!" + fi +} + +src_prepare() { + default + + sed -i \ + -e "1iAR = $(tc-getAR)" \ + -e "s:CC ?= @CC@:CC = $(tc-getCC):" \ + make.tmpl.in || die #444082 + + sed -i -e '/FLAG/s:-O2::' configure{.in,} || die #480212 + + if use udev && ! use device-mapper-only; then + sed -i -e '/use_lvmetad =/s:0:1:' conf/example.conf.in || die #514196 + elog "Notice that \"use_lvmetad\" setting is enabled with USE=\"udev\" in" + elog "/etc/lvm/lvm.conf, which will require restart of udev, lvm, and lvmetad" + elog "if it was previously disabled." + fi + + sed -i -e "s:/usr/bin/true:$(type -P true):" scripts/blk_availability_systemd_red_hat.service.in || die #517514 + + # Without thin-privision-tools, there is nothing to install for target install_man7: + use thin || { sed -i -e '/^install_lvm2/s:install_man7::' man/Makefile.in || die; } + + eautoreconf +} + +src_configure() { + filter-flags -flto + local myconf=() + local buildmode + + myconf+=( $(use_enable !device-mapper-only dmeventd) ) + myconf+=( $(use_enable !device-mapper-only cmdlib) ) + myconf+=( $(use_enable !device-mapper-only applib) ) + myconf+=( $(use_enable !device-mapper-only fsadm) ) + myconf+=( $(use_enable !device-mapper-only lvmetad) ) + use device-mapper-only && myconf+=( --disable-udev-systemd-background-jobs ) + + # Most of this package does weird stuff. + # The build options are tristate, and --without is NOT supported + # options: 'none', 'internal', 'shared' + if use static; then + buildmode="internal" + # This only causes the .static versions to become available + myconf+=( --enable-static_link ) + else + buildmode="shared" + fi + dmbuildmode=$(use !device-mapper-only && echo internal || echo none) + + # dmeventd requires mirrors to be internal, and snapshot available + # so we cannot disable them + myconf+=( --with-mirrors=${dmbuildmode} ) + myconf+=( --with-snapshots=${dmbuildmode} ) + if use thin; then + myconf+=( --with-thin=internal --with-cache=internal ) + local texec + for texec in check dump repair restore; do + myconf+=( --with-thin-${texec}="${EPREFIX}"/sbin/thin_${texec} ) + myconf+=( --with-cache-${texec}="${EPREFIX}"/sbin/cache_${texec} ) + done + else + myconf+=( --with-thin=none --with-cache=none ) + fi + + if use lvm1; then + myconf+=( --with-lvm1=${buildmode} ) + else + myconf+=( --with-lvm1=none ) + fi + + # disable O_DIRECT support on hppa, breaks pv detection (#99532) + use hppa && myconf+=( --disable-o_direct ) + + myconf+=( --with-clvmd=none --with-cluster=none ) + + econf \ + $(use_enable readline) \ + $(use_enable selinux) \ + --enable-pkgconfig \ + --with-confdir="${EPREFIX}"/etc \ + --exec-prefix="${EPREFIX}" \ + --sbindir="${EPREFIX}/sbin" \ + --with-staticdir="${EPREFIX}"/sbin \ + --libdir="${EPREFIX}/$(get_libdir)" \ + --with-usrlibdir="${EPREFIX}/usr/$(get_libdir)" \ + --with-default-dm-run-dir=/run \ + --with-default-run-dir=/run/lvm \ + --with-default-locking-dir=/run/lock/lvm \ + --with-default-pid-dir=/run \ + $(use_enable udev udev_rules) \ + $(use_enable udev udev_sync) \ + $(use_with udev udevdir "$(get_udevdir)"/rules.d) \ + $(use_enable systemd udev-systemd-background-jobs) \ + --with-systemdsystemunitdir="$(systemd_get_systemunitdir)" \ + ${myconf[@]} \ + CLDFLAGS="${LDFLAGS}" +} + +src_compile() { + pushd include >/dev/null + emake + popd >/dev/null + + if use device-mapper-only ; then + emake device-mapper + else + emake + emake CC="$(tc-getCC)" -C scripts lvm2_activation_generator_systemd_red_hat + fi +} + +src_install() { + local inst + INSTALL_TARGETS="install install_tmpfiles_configuration" + # install systemd related files only when requested, bug #522430 + use systemd && INSTALL_TARGETS="${INSTALL_TARGETS} install_systemd_units install_systemd_generators" + use device-mapper-only && INSTALL_TARGETS="install_device-mapper" + for inst in ${INSTALL_TARGETS}; do + emake DESTDIR="${D}" ${inst} + done + + newinitd "${FILESDIR}"/device-mapper.rc-2.02.105-r2 device-mapper + newconfd "${FILESDIR}"/device-mapper.conf-1.02.22-r3 device-mapper + + if use !device-mapper-only ; then + newinitd "${FILESDIR}"/dmeventd.initd-2.02.67-r1 dmeventd + newinitd "${FILESDIR}"/lvm.rc-2.02.116-r6 lvm + newconfd "${FILESDIR}"/lvm.confd-2.02.28-r2 lvm + + newinitd "${FILESDIR}"/lvm-monitoring.initd-2.02.105-r2 lvm-monitoring + newinitd "${FILESDIR}"/lvmetad.initd-2.02.116-r3 lvmetad + fi + + if use static-libs; then + dolib.a libdm/ioctl/libdevmapper.a + if use !device-mapper-only ; then + dolib.a libdaemon/client/libdaemonclient.a #462908 + dolib.a daemons/dmeventd/libdevmapper-event.a + fi + else + rm -f "${ED}"usr/$(get_libdir)/{libdevmapper-event,liblvm2cmd,liblvm2app,libdevmapper}.a + fi + + if use lvm2create_initrd; then + dosbin scripts/lvm2create_initrd/lvm2create_initrd + doman scripts/lvm2create_initrd/lvm2create_initrd.8 + newdoc scripts/lvm2create_initrd/README README.lvm2create_initrd + fi + + insinto /etc + doins "${FILESDIR}"/dmtab + + dodoc README VERSION* WHATS_NEW WHATS_NEW_DM doc/*.{c,txt} conf/*.conf +} + +pkg_postinst() { + ewarn "Make sure the \"lvm\" init script is in the runlevels:" + ewarn "# rc-update add lvm boot" + ewarn + ewarn "Make sure to enable lvmetad in /etc/lvm/lvm.conf if you want" + ewarn "to enable lvm autoactivation and metadata caching." +} + +src_test() { + einfo "Tests are disabled because of device-node mucking, if you want to" + einfo "run tests, compile the package and see ${S}/tests" +} |