[oe] [meta-oe][PATCH 4/4] lvm2/libdevmapper: fix invoking lvcreate failed

ChenQi Qi.Chen at windriver.com
Tue May 15 09:33:05 UTC 2018


I think I've got to reply. But frankly, I don't have any idea how to 
solve this circular dependency problem.

Normally we have two ways to solve circular dependency problems:
1) Add some new recipe to replace one in the chain
2) Break some recipe in the chain into multiple recipes, giving them 
different dependencies

In this systemd/cryptsetup/libdevmapper case, I don't think the above 
approaches would work.

Hope someone in the mailing list could give me some suggestions.

Best Regards,
Chen Qi

On 05/11/2018 10:48 PM, Chris Patterson wrote:
> Sorry to resurrect such an old thread... :)
>
> The dependency on udev brings back the c the libdevmapper circular
> dependency when systemd is used with cryptsetup.  (systemd ->
> cryptsetup -> libdevmapper -> udev|systemd).
>
> Any thoughts on how to properly fix that (other than removing udev
> from PACKAGECONFIG)?
>
> On Fri, May 26, 2017 at 3:37 AM, Hongxu Jia <hongxu.jia at windriver.com> wrote:
>> Previously, libdevmapper is separated from lvm2 in the following commit:
>> ---
>> commit 7f17da154372b5ec33947766783444961e8aa67c
>> Author: Chen Qi <Qi.Chen at windriver.com>
>> Date:   Mon Apr 24 16:06:41 2017 +0800
>>
>>      lvm2: separate libdevmapper to avoid circular dependency
>> ---
>>
>> It caused invoking lvcreate failed:
>> ---
>> root at qemux86-64:~# lvm pvcreate /dev/sda
>>    Physical volume "/dev/sda" successfully created.
>> root at qemux86-64:~# lvm vgcreate -s 4096K wrl /dev/sda
>>    Volume group "wrl" successfully created
>> root at qemux86-64:~# lvm lvcreate -n swap -L 2293648K -y --type linear wrl
>>    Rounding up size to full physical extent 2.19 GiB
>>    /dev/wrl/swap: not found: device not cleared
>>    Aborting. Failed to wipe start of new LV.
>> ---
>>
>> The lvm2 and libdevmapper should use the same PACKAGECONFIG
>> and EXTRA_OECONF.
>>
>> And do not manually remove useless files.
>>
>> Signed-off-by: Hongxu Jia <hongxu.jia at windriver.com>
>> ---
>>   .../recipes-support/lvm2/libdevmapper_2.02.166.bb  | 21 ++-----------
>>   meta-oe/recipes-support/lvm2/lvm2.inc              | 26 +++++++++++++++-
>>   .../0001-explicitly-do-not-install-libdm.patch     | 36 ++++++++++++++++++++++
>>   meta-oe/recipes-support/lvm2/lvm2_2.02.171.bb      | 31 ++-----------------
>>   4 files changed, 65 insertions(+), 49 deletions(-)
>>   create mode 100644 meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch
>>
>> diff --git a/meta-oe/recipes-support/lvm2/libdevmapper_2.02.166.bb b/meta-oe/recipes-support/lvm2/libdevmapper_2.02.166.bb
>> index fd1fc2c..3cf939d 100644
>> --- a/meta-oe/recipes-support/lvm2/libdevmapper_2.02.166.bb
>> +++ b/meta-oe/recipes-support/lvm2/libdevmapper_2.02.166.bb
>> @@ -5,27 +5,10 @@ SRC_URI[sha256sum] = "e120b066b85b224552efda40204488c5123de068725676fd6e5c8bc655
>>
>>   DEPENDS += "autoconf-archive-native"
>>
>> -PACKAGECONFIG = ""
>> -
>> -# Unset user/group to unbreak install.
>> -EXTRA_OECONF = "--with-user= \
>> -                --with-group= \
>> -                --enable-pkgconfig \
>> -                --with-usrlibdir=${libdir} \
>> -"
>> -
>>   TARGET_CC_ARCH += "${LDFLAGS}"
>>
>> -do_install_append() {
>> -    # Remove things unrelated to libdevmapper
>> -    rm -rf ${D}${sysconfdir}
>> -    for i in `ls ${D}${sbindir}/*`; do
>> -       if [ $i != ${D}${sbindir}/dmsetup ]; then
>> -           rm $i
>> -       fi
>> -    done
>> -    # Remove docs
>> -    rm -rf ${D}${datadir}
>> +do_install() {
>> +    oe_runmake 'DESTDIR=${D}' -C libdm install
>>   }
>>
>>   RRECOMMENDS_${PN}_append_class-target = " lvm2-udevrules"
>> diff --git a/meta-oe/recipes-support/lvm2/lvm2.inc b/meta-oe/recipes-support/lvm2/lvm2.inc
>> index cb5a9e0..c2dac95 100644
>> --- a/meta-oe/recipes-support/lvm2/lvm2.inc
>> +++ b/meta-oe/recipes-support/lvm2/lvm2.inc
>> @@ -18,11 +18,18 @@ S = "${WORKDIR}/LVM2.${PV}"
>>
>>   inherit autotools-brokensep pkgconfig systemd
>>
>> +LVM2_PACKAGECONFIG = "dmeventd lvmetad"
>> +LVM2_PACKAGECONFIG_append_class-target = " \
>> +    ${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)} \
>> +    thin-provisioning-tools \
>> +    udev \
>> +"
>> +
>>   # odirect is always enabled because there currently is a bug in
>>   # lib/device/dev-io.c which prevents compiling without it. It is
>>   # better to stick to configurations that were actually tested by
>>   # upstream...
>> -PACKAGECONFIG_append = " odirect"
>> +PACKAGECONFIG ??= "odirect ${LVM2_PACKAGECONFIG}"
>>
>>   PACKAGECONFIG[dmeventd] = "--enable-dmeventd,--disable-dmeventd"
>>   PACKAGECONFIG[lvmetad] = "--enable-lvmetad,--disable-lvmetad"
>> @@ -31,3 +38,20 @@ PACKAGECONFIG[readline] = "--enable-readline,--disable-readline,readline"
>>   PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
>>   PACKAGECONFIG[thin-provisioning-tools] = "--with-thin=internal,--with-thin=none,,thin-provisioning-tools"
>>   PACKAGECONFIG[udev] = "--enable-udev_sync --enable-udev_rules --with-udevdir=${nonarch_base_libdir}/udev/rules.d,--disable-udev_sync --disable-udev_rules,udev"
>> +
>> +# Unset user/group to unbreak install.
>> +EXTRA_OECONF = "--with-user= \
>> +                --with-group= \
>> +                --enable-realtime \
>> +                --enable-applib \
>> +                --enable-cmdlib \
>> +                --enable-pkgconfig \
>> +                --with-usrlibdir=${libdir} \
>> +                --with-systemdsystemunitdir=${systemd_system_unitdir} \
>> +                --disable-thin_check_needs_check \
>> +                --with-thin-check=${sbindir}/thin_check \
>> +                --with-thin-dump=${sbindir}/thin_dump \
>> +                --with-thin-repair=${sbindir}/thin_repair \
>> +                --with-thin-restore=${sbindir}/thin_restore \
>> +"
>> +
>> diff --git a/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch b/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch
>> new file mode 100644
>> index 0000000..e85818d
>> --- /dev/null
>> +++ b/meta-oe/recipes-support/lvm2/lvm2/0001-explicitly-do-not-install-libdm.patch
>> @@ -0,0 +1,36 @@
>> +From 0a8e466fcf99622896e070c5133165e4278e8cfb Mon Sep 17 00:00:00 2001
>> +From: Hongxu Jia <hongxu.jia at windriver.com>
>> +Date: Thu, 25 May 2017 05:27:11 -0400
>> +Subject: [PATCH] explicitly do not install libdm
>> +
>> +Already have package libdevmapper which split from lvm2,
>> +explicitly do not do the installation here.
>> +
>> +Upstream-Status: Inappropriate [meta-oe specific]
>> +
>> +Signed-off-by: Hongxu Jia <hongxu.jia at windriver.com>
>> +---
>> + libdm/Makefile.in | 6 ++++--
>> + 1 file changed, 4 insertions(+), 2 deletions(-)
>> +
>> +diff --git a/libdm/Makefile.in b/libdm/Makefile.in
>> +index 3c9a4ce..45c91c6 100644
>> +--- a/libdm/Makefile.in
>> ++++ b/libdm/Makefile.in
>> +@@ -77,9 +77,11 @@ ifeq ("@PKGCONFIG@", "yes")
>> +   INSTALL_TYPE += install_pkgconfig
>> + endif
>> +
>> +-install: $(INSTALL_TYPE) install_include
>> ++install:
>> ++      echo "Do not install device mappler in lvm2"
>> +
>> +-install_device-mapper: install
>> ++install_device-mapper:
>> ++      echo "Do not install device mappler in lvm2"
>> +
>> + install_include: $(srcdir)/libdevmapper.h
>> +       $(INSTALL_DATA) -D $< $(includedir)/$(<F)
>> +--
>> +2.8.1
>> +
>> diff --git a/meta-oe/recipes-support/lvm2/lvm2_2.02.171.bb b/meta-oe/recipes-support/lvm2/lvm2_2.02.171.bb
>> index 38c4414..84881e7 100644
>> --- a/meta-oe/recipes-support/lvm2/lvm2_2.02.171.bb
>> +++ b/meta-oe/recipes-support/lvm2/lvm2_2.02.171.bb
>> @@ -3,32 +3,9 @@ require lvm2.inc
>>   SRC_URI[md5sum] = "153b7bb643eb26073274968e9026fa8f"
>>   SRC_URI[sha256sum] = "b815a711a2fabaa5c3dc1a4a284df0268bf0f325f0fc0f5c9530c9bbb54b9964"
>>
>> -DEPENDS += "autoconf-archive-native"
>> -
>> -LVM2_PACKAGECONFIG = "dmeventd lvmetad"
>> -LVM2_PACKAGECONFIG_append_class-target = " \
>> -    ${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)} \
>> -    thin-provisioning-tools \
>> -    udev \
>> -"
>> +SRC_URI += "file://0001-explicitly-do-not-install-libdm.patch"
>>
>> -PACKAGECONFIG ??= "${LVM2_PACKAGECONFIG}"
>> -
>> -# Unset user/group to unbreak install.
>> -EXTRA_OECONF = "--with-user= \
>> -                --with-group= \
>> -                --enable-realtime \
>> -                --enable-applib \
>> -                --enable-cmdlib \
>> -                --enable-pkgconfig \
>> -                --with-usrlibdir=${libdir} \
>> -                --with-systemdsystemunitdir=${systemd_system_unitdir} \
>> -                --disable-thin_check_needs_check \
>> -                --with-thin-check=${sbindir}/thin_check \
>> -                --with-thin-dump=${sbindir}/thin_dump \
>> -                --with-thin-repair=${sbindir}/thin_repair \
>> -                --with-thin-restore=${sbindir}/thin_restore \
>> -"
>> +DEPENDS += "autoconf-archive-native"
>>
>>   CACHED_CONFIGUREVARS += "MODPROBE_CMD=${base_sbindir}/modprobe"
>>
>> @@ -45,10 +22,6 @@ do_install_append() {
>>           mv ${D}${sysconfdir}/rc.d/init.d ${D}${sysconfdir}/init.d
>>           rm -rf ${D}${sysconfdir}/rc.d
>>       fi
>> -    # Remove things related to libdevmapper
>> -    rm -f ${D}${sbindir}/dmsetup
>> -    rm -f ${D}${libdir}/libdevmapper.so.*
>> -    rm -f ${D}${libdir}/libdevmapper.so ${D}${libdir}/pkgconfig/devmapper.pc ${D}${includedir}/libdevmapper.h
>>   }
>>
>>   PACKAGE_BEFORE_PN = "${PN}-scripts ${PN}-udevrules"
>> --
>> 2.8.1
>>
>> --
>> _______________________________________________
>> Openembedded-devel mailing list
>> Openembedded-devel at lists.openembedded.org
>> http://lists.openembedded.org/mailman/listinfo/openembedded-devel





More information about the Openembedded-devel mailing list