From 8de3d853ac4d0dafcf024414dd878c3d3fc9a706 Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" <robbat2@gentoo.org> Date: Sun, 27 May 2012 07:05:22 +0000 Subject: Revbump to use /run for locking and sockets, also bring in new thin provisioning tools. Please ensure you are running the new baselayout and openrc before you switch to this version! The old addon scripts have been converted to plain init.d scripts now. Bugs #409921, #417491. (Portage version: 2.2.0_alpha107/cvs/Linux x86_64) --- sys-fs/lvm2/ChangeLog | 12 +- sys-fs/lvm2/files/device-mapper.rc-2.02.95-r2 | 111 +++++++++++ sys-fs/lvm2/files/lvm.rc-2.02.95-r2 | 96 ++++++++++ sys-fs/lvm2/lvm2-2.02.95-r2.ebuild | 265 ++++++++++++++++++++++++++ 4 files changed, 483 insertions(+), 1 deletion(-) create mode 100644 sys-fs/lvm2/files/device-mapper.rc-2.02.95-r2 create mode 100644 sys-fs/lvm2/files/lvm.rc-2.02.95-r2 create mode 100644 sys-fs/lvm2/lvm2-2.02.95-r2.ebuild (limited to 'sys-fs') diff --git a/sys-fs/lvm2/ChangeLog b/sys-fs/lvm2/ChangeLog index 191962ec66c8..20258ca7b514 100644 --- a/sys-fs/lvm2/ChangeLog +++ b/sys-fs/lvm2/ChangeLog @@ -1,6 +1,16 @@ # ChangeLog for sys-fs/lvm2 # Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/sys-fs/lvm2/ChangeLog,v 1.269 2012/05/04 19:09:16 jdhore Exp $ +# $Header: /var/cvsroot/gentoo-x86/sys-fs/lvm2/ChangeLog,v 1.270 2012/05/27 07:05:22 robbat2 Exp $ + +*lvm2-2.02.95-r2 (27 May 2012) + + 27 May 2012; Robin H. Johnson <robbat2@gentoo.org> + +files/device-mapper.rc-2.02.95-r2, +files/lvm.rc-2.02.95-r2, + +lvm2-2.02.95-r2.ebuild: + Revbump to use /run for locking and sockets, also bring in new thin + provisioning tools. Please ensure you are running the new baselayout and + openrc before you switch to this version! The old addon scripts have been + converted to plain init.d scripts now. Bugs #409921, #417491. 04 May 2012; Jeff Horelick <jdhore@gentoo.org> lvm2-2.02.67.ebuild, lvm2-2.02.67-r1.ebuild, lvm2-2.02.67-r2.ebuild, lvm2-2.02.70.ebuild, diff --git a/sys-fs/lvm2/files/device-mapper.rc-2.02.95-r2 b/sys-fs/lvm2/files/device-mapper.rc-2.02.95-r2 new file mode 100644 index 000000000000..404c269b9343 --- /dev/null +++ b/sys-fs/lvm2/files/device-mapper.rc-2.02.95-r2 @@ -0,0 +1,111 @@ +#!/sbin/runscript +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-fs/lvm2/files/device-mapper.rc-2.02.95-r2,v 1.1 2012/05/27 07:05:22 robbat2 Exp $ + +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 **get_new_dm_volumes(void) +# +# Return dmsetup commands to setup volumes +get_new_dm_volumes() { + local volume params + + # Filter comments and blank lines + grep -v -e '^[[:space:]]*\(#\|$\)' /etc/dmtab | \ + while read volume params ; do + # If it exists, skip it + dmvolume_exists "${volume%:}" && continue + # Assemble the command to run to create volume + echo "echo ${params} | /sbin/dmsetup create ${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 "${x}" >/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 +} + diff --git a/sys-fs/lvm2/files/lvm.rc-2.02.95-r2 b/sys-fs/lvm2/files/lvm.rc-2.02.95-r2 new file mode 100644 index 000000000000..a06aa0bbfee8 --- /dev/null +++ b/sys-fs/lvm2/files/lvm.rc-2.02.95-r2 @@ -0,0 +1,96 @@ +#!/sbin/runscript +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-fs/lvm2/files/lvm.rc-2.02.95-r2,v 1.1 2012/05/27 07:05:22 robbat2 Exp $ + +depend() { + use dmeventd + before checkfs fsck + after dmeventd modules device-mapper +} + +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 + 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 +} + +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 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\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" + fi + + einfo "Finished Shutting down the Logical Volume Manager" +fi +} + +# vim:ts=4 diff --git a/sys-fs/lvm2/lvm2-2.02.95-r2.ebuild b/sys-fs/lvm2/lvm2-2.02.95-r2.ebuild new file mode 100644 index 000000000000..4d4f95620f2d --- /dev/null +++ b/sys-fs/lvm2/lvm2-2.02.95-r2.ebuild @@ -0,0 +1,265 @@ +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-fs/lvm2/lvm2-2.02.95-r2.ebuild,v 1.1 2012/05/27 07:05:22 robbat2 Exp $ + +EAPI=3 +inherit eutils multilib toolchain-funcs autotools linux-info + +DESCRIPTION="User-land utilities for LVM2 (device-mapper) software." +HOMEPAGE="http://sources.redhat.com/lvm2/" +SRC_URI="ftp://sources.redhat.com/pub/lvm2/${PN/lvm/LVM}.${PV}.tgz + ftp://sources.redhat.com/pub/lvm2/old/${PN/lvm/LVM}.${PV}.tgz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-linux ~x86-linux" + +IUSE="readline static static-libs clvm cman +lvm1 selinux +udev" + +DEPEND_COMMON="!!sys-fs/device-mapper + readline? ( sys-libs/readline ) + clvm? ( =sys-cluster/libdlm-3* + cman? ( =sys-cluster/cman-3* ) ) + udev? ( >=sys-fs/udev-151-r4 )" + +# /run is now required for locking during early boot. /var cannot be assumed to +# be available. +RDEPEND="${DEPEND_COMMON} + !<sys-apps/openrc-0.10.1 + >=sys-apps/baselayout-2.1-r1 + !!sys-fs/lvm-user + !!sys-fs/clvm + >=sys-apps/util-linux-2.16 + sys-block/thin-provisioning-tools" + +# Upgrading to this LVM will break older cryptsetup +RDEPEND="${RDEPEND} + !<sys-fs/cryptsetup-1.1.2" + +DEPEND="${DEPEND_COMMON} + virtual/pkgconfig + >=sys-devel/binutils-2.20.1-r1 + static? ( || ( >=sys-fs/udev-181[static-libs] <sys-fs/udev-181 ) )" + +S="${WORKDIR}/${PN/lvm/LVM}.${PV}" + +pkg_setup() { + local CONFIG_CHECK="~SYSVIPC" + use udev && local WARNING_SYSVIPC="CONFIG_SYSVIPC:\tis not set (required for udev sync)\n" + check_extra_config + # 1. Genkernel no longer copies /sbin/lvm blindly. + # 2. There are no longer any linking deps in /usr. + 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_unpack() { + unpack ${A} +} + +src_prepare() { + epatch "${FILESDIR}"/lvm.conf-2.02.67.patch + + # Should not be needed due to upstream re-arrangement of build + #epatch "${FILESDIR}"/${PN}-2.02.56-dmeventd.patch + # Should not be need with new upstream udev rules + #epatch "${FILESDIR}"/${PN}-2.02.56-device-mapper-export-format.patch + + # Merged upstream: + #epatch "${FILESDIR}"/${PN}-2.02.51-as-needed.patch + # Merged upstream: + #epatch "${FILESDIR}"/${PN}-2.02.48-fix-pkgconfig.patch + # Merged upstream: + #epatch "${FILESDIR}"/${PN}-2.02.51-fix-pvcreate.patch + # Fixed differently upstream: + #epatch "${FILESDIR}"/${PN}-2.02.51-dmsetup-selinux-linking-fix-r3.patch + + epatch "${FILESDIR}"/${PN}-2.02.63-always-make-static-libdm.patch + epatch "${FILESDIR}"/lvm2-2.02.56-lvm2create_initrd.patch + # bug 318513 - merged upstream + #epatch "${FILESDIR}"/${PN}-2.02.64-dmeventd-libs.patch + # bug 301331 + epatch "${FILESDIR}"/${PN}-2.02.67-createinitrd.patch + # bug 330373 + epatch "${FILESDIR}"/${PN}-2.02.92-locale-muck.patch + # --as-needed + epatch "${FILESDIR}"/${PN}-2.02.70-asneeded.patch + # bug 332905 + epatch "${FILESDIR}"/${PN}-2.02.92-dynamic-static-ldflags.patch + # bug 361429 - merged upstream in .85 + #epatch "${FILESDIR}"/${PN}-2.02.84-udev-pkgconfig.patch + + # Merged upstream + #epatch "${FILESDIR}"/${PN}-2.02.73-asneeded.patch + + epatch "${FILESDIR}"/${PN}-2.02.88-respect-cc.patch + + # Upstream bug of LVM path + epatch "${FILESDIR}"/${PN}-2.02.95-lvmpath.patch + + eautoreconf +} + +src_configure() { + local myconf + local buildmode + + myconf="${myconf} --enable-dmeventd" + myconf="${myconf} --enable-cmdlib" + myconf="${myconf} --enable-applib" + myconf="${myconf} --enable-fsadm" + myconf="${myconf} --enable-lvmetad" + + # 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 + einfo "Building static LVM, for usage inside genkernel" + buildmode="internal" + # This only causes the .static versions to become available + # For recent systems, there are no linkages against anything in /usr anyway. + # We explicitly provide the .static versions so that they can be included in + # initramfs environments. + myconf="${myconf} --enable-static_link" + else + ewarn "Building shared LVM, it will not work inside genkernel!" + buildmode="shared" + fi + + # dmeventd requires mirrors to be internal, and snapshot available + # so we cannot disable them + myconf="${myconf} --with-mirrors=internal" + myconf="${myconf} --with-snapshots=internal" + myconf="${myconf} --with-thin=internal" + + if use lvm1 ; then + myconf="${myconf} --with-lvm1=${buildmode}" + else + myconf="${myconf} --with-lvm1=none" + fi + + # disable O_DIRECT support on hppa, breaks pv detection (#99532) + use hppa && myconf="${myconf} --disable-o_direct" + + if use clvm; then + myconf="${myconf} --with-cluster=${buildmode}" + # 4-state! Make sure we get it right, per bug 210879 + # Valid options are: none, cman, gulm, all + # + # 2009/02: + # gulm is removed now, now dual-state: + # cman, none + # all still exists, but is not needed + # + # 2009/07: + # TODO: add corosync and re-enable ALL + local clvmd="" + use cman && clvmd="cman" + #clvmd="${clvmd/cmangulm/all}" + [ -z "${clvmd}" ] && clvmd="none" + myconf="${myconf} --with-clvmd=${clvmd}" + myconf="${myconf} --with-pool=${buildmode}" + else + myconf="${myconf} --with-clvmd=none --with-cluster=none" + fi + + econf \ + $(use_enable readline) \ + $(use_enable selinux) \ + --enable-pkgconfig \ + --with-confdir="${EPREFIX}/etc" \ + --sbindir="${EPREFIX}/sbin" \ + --with-staticdir="${EPREFIX}/sbin" \ + --libdir="${EPREFIX}/$(get_libdir)" \ + --with-usrlibdir="${EPREFIX}/usr/$(get_libdir)" \ + --with-default-run-dir=/run/lvm \ + --with-default-locking-dir=/run/lock/lvm \ + --with-dmeventd-path=/sbin/dmeventd \ + $(use_enable udev udev_rules) \ + $(use_enable udev udev_sync) \ + $(use_with udev udevdir "${EPREFIX}/lib/udev/rules.d/") \ + ${myconf} \ + CLDFLAGS="${LDFLAGS}" || die +} + +src_compile() { + einfo "Doing symlinks" + pushd include + emake || die "Failed to prepare symlinks" + popd + + einfo "Starting main build" + emake || die "compile fail" +} + +src_install() { + emake DESTDIR="${D}" install || die "Failed to emake install" + + dodoc README VERSION* WHATS_NEW WHATS_NEW_DM doc/*.{conf,c,txt} + newinitd "${FILESDIR}"/lvm.rc-2.02.95-r2 lvm || die + newinitd "${FILESDIR}"/lvm-monitoring.initd-2.02.67-r2 lvm-monitoring || die + newconfd "${FILESDIR}"/lvm.confd-2.02.28-r2 lvm || die + if use clvm; then + newinitd "${FILESDIR}"/clvmd.rc-2.02.39 clvmd || die + newconfd "${FILESDIR}"/clvmd.confd-2.02.39 clvmd || die + fi + + # move shared libs to /lib(64) + if use static-libs; then + dolib.a libdm/ioctl/libdevmapper.a || die "dolib.a libdevmapper.a" + #gen_usr_ldscript libdevmapper.so + fi + + dosbin "${S}"/scripts/lvm2create_initrd/lvm2create_initrd + doman "${S}"/scripts/lvm2create_initrd/lvm2create_initrd.8 + newdoc "${S}"/scripts/lvm2create_initrd/README README.lvm2create_initrd + + insinto /etc + doins "${FILESDIR}"/dmtab + + # Device mapper stuff + newinitd "${FILESDIR}"/device-mapper.rc-2.02.95-r2 device-mapper || die + newconfd "${FILESDIR}"/device-mapper.conf-1.02.22-r3 device-mapper || die + + newinitd "${FILESDIR}"/dmeventd.initd-2.02.67-r1 dmeventd || die + if use static-libs; then + dolib.a daemons/dmeventd/libdevmapper-event.a \ + || die "dolib.a libdevmapper-event.a" + #gen_usr_ldscript libdevmapper-event.so + fi + + use static-libs || \ + rm -f "${D}"/usr/$(get_libdir)/{libdevmapper-event,liblvm2cmd,liblvm2app,libdevmapper}.a + + #insinto /etc/udev/rules.d/ + #newins "${FILESDIR}"/64-device-mapper.rules-2.02.56-r3 64-device-mapper.rules || die + + # do not rely on /lib -> /libXX link + sed -i \ + -e "s|/lib/rcscripts/|/$(get_libdir)/rcscripts/|" \ + "${ED}"/etc/init.d/* || die + + elog "USE flag nocman is deprecated and replaced" + elog "with the cman USE flag." + elog "" + elog "USE flags clvm and cman are masked" + elog "by default and need to be unmasked to be used" + elog "" + elog "If you are using genkernel and root-on-LVM, rebuild the initramfs." +} + +pkg_postinst() { + elog "lvm volumes are no longer automatically created for" + elog "baselayout-2 users. If you are using baselayout-2, be sure to" + elog "run: # rc-update add lvm boot" + elog "Do NOT add it if you are still using baselayout-1." +} + +src_test() { + einfo "Testcases disabled because of device-node mucking" + einfo "If you want them, compile the package and see ${S}/tests" +} + -- cgit v1.2.3-65-gdbad