在SDK构建期间:environment-setup.d /尝试安装之间的冲突

By simon at 2018-02-28 • 0人收藏 • 89人看过

我试图为包含Qt5的beaglebone构建一个图像,以及 为此图像生成SDK。 #问题 我的问题是,构建失败了do_populate_sdk任务来创建SDK 出现以下错误:

错误:事务检查错误:file /opt/poky/2.3.1/sysroots/x8664 -pokysdk-linux / environment-setup.d尝试安装之间的冲突 nativesdk-cmake的-3。7.2-r0.x8664nativesdk和nativesdk-qtbase- 工具-5.8.0 + git0 + 49dc9aa409-r0.x8664nativesdk 在小河的更远一点遇到以下错误信息: 错误:无法调用dnf。命令'/ home / ubuntu / workspace / bbb / build- 烤面包机-2 / TMP /工作/ mymachine-狭小-Linux的gnueabi /我的图像 - 开发/ 1.0-R0 /配方相关 sysroot-native / usr / bin / dnf [...]'返回1: 增加了oe-reporepo from file:/// home / ubuntu / workspace / bbb / build- 烤面包机-2 / TMP /工作/我的 - 机 - 狭小-Linux的gnueabi /我的图像-dev的/ 1.0-R0 / OE- 袋鼠TFS-回购。 最后一次元数据到期检查:0:00:00前至2017年8月16日星期三11:47:27 世界标准时间。 解决了依赖关系。 #我的有 为了配置我的图像,我遵循了建议 [这里](https://stackoverflow.com/a/40375372/2865814)以及类似的帖子在网络上的其他地方说明。这是我的(缩短了一点, redacted)图片bb-file:

SUMMARY = "..."
LICENSE = "MIT"

IMAGE_LINGUAS = "en-us"

inherit core-image

# for populate_sdk to create a valid toolchain
inherit populate_sdk populate_sdk_qt5

CORE_OS = "..."
KERNEL_EXTRA_INSTALL = "..."
WIFI_SUPPORT = "..."

DEV_SDK_INSTALL = " \
    binutils \
    binutils-symlinks \
    coreutils \
    cpp \
    cpp-symlinks \
    diffutils \
    file \
    g++ \
    g++-symlinks \
    gdb \
    gdbserver \
    gcc \
    gcc-symlinks \
    gettext \
    git \
    ldd \
    libstdc++ \
    libstdc++-dev \
    libtool \
    make \
    perl-modules \
    pkgconfig \
    python-modules \
    python3-modules \
 "

DEV_EXTRAS = "..."

EXTRA_TOOLS_INSTALL = " \
    acpid \
    bc \
    bzip2 \
    cursor-blink \
    devmem2 \
    dosfstools \
    emmc-installer \
    ethtool \
    findutils \
    i2c-tools \
    iperf3 \
    htop \
    less \
    memtester \
    nano \
    netcat \
    procps \
    rsync \
    sysfsutils \
    tcpdump \
    unzip \
    util-linux \
    util-linux-blkid \
    wget \
    zip \
 "

MQTT = "..."
ROOTFS_POSTPROCESS_COMMAND += "..."

QT_TOOLS = " \
    qtbase \
    qtbase-dev \
    qtbase-mkspecs \
    qtbase-plugins \
    qtbase-tools \
    qtserialport-dev \
    qtserialport-mkspecs \
    qt5-env \
 "

QT5_PKGS = " \
    qt3d \
    qt3d-dev \
    ...
    qtxmlpatterns \
    qtxmlpatterns-dev \
    qtxmlpatterns-mkspecs \
"

FONTS = "..."
TSLIB = "... "
ADDITIONAL_PKGS = "..."
QT_TEST_APPS = "..."

IMAGE_INSTALL += " \
    ${CORE_OS} \
    ${DEV_SDK_INSTALL} \
    ${DEV_EXTRAS} \
    ${EXTRA_TOOLS_INSTALL} \
    ${KERNEL_EXTRA_INSTALL} \
    ${FONTS} \
    ${QT_TOOLS} \
    ${QT5_PKGS} \
    ${QT_TEST_APPS} \
    ${MQTT} \
    ${WIFI_SUPPORT} \
    ${TSLIB} \
    ${ADDITIONAL_PKGS} \
 "

IMAGE_FEATURES_append = " dev-pkgs"

export IMAGE_BASENAME = "my-image-dev"
我也设置
do_install_append_class-nativesdk() {
    mkdir -p ${D}${datadir}/cmake
    install -m 644 ${WORKDIR}/OEToolchainConfig.cmake ${D}${datadir}/cmake/

    mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
    install -m 644 ${WORKDIR}/environment.d-cmake.sh ${D}${SDKPATHNATIVE}/environment-setup.d/cmake.sh
}
8以及local.conf中的DISTRO_FEATURES_append = " systemd opengl aufs"。 如果我删除inherit populate_sdk_qt5行,但当然是我可以正常运行别 在这种情况下获取我的SDK。 #我发现了什么 我发现不同的人有同样的问题(例如, [这里](HTTps://boundarydevices.com/pyro-yocto-release/#comment-378606))但是 没有人得到答案。 我查看了nativesdk-cmake作为nativesdk-qtbasegit食谱 (两个标准都没有改变)来查看文件的创建位置,也没有 看起来有问题抽动我: natives-qtbasegit.bb:
fakeroot do_generate_qt_environment_file() {
    mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d/
    script=${D}${SDKPATHNATIVE}/environment-setup.d/qt5.sh

    echo 'export PATH=${OE_QMAKE_PATH_HOST_BINS}:$PATH' > $script
    echo 'export OE_QMAKE_CFLAGS="$CFLAGS"' >> $script
    echo 'export OE_QMAKE_CXXFLAGS="$CXXFLAGS"' >> $script
    echo 'export OE_QMAKE_LDFLAGS="$LDFLAGS"' >> $script
    echo 'export OE_QMAKE_CC=$CC' >> $script
    echo 'export OE_QMAKE_CXX=$CXX' >> $script
    echo 'export OE_QMAKE_LINK=$CXX' >> $script
    echo 'export OE_QMAKE_AR=$AR' >> $script
    echo 'export QT_CONF_PATH=${OE_QMAKE_PATH_HOST_BINS}/qt.conf' >> $script
    echo 'export OE_QMAKE_LIBDIR_QT=`qmake -query QT_INSTALL_LIBS`' >> $script
    echo 'export OE_QMAKE_INCDIR_QT=`qmake -query QT_INSTALL_HEADERS`' >> $script
    echo 'export OE_QMAKE_MOC=${OE_QMAKE_PATH_HOST_BINS}/moc' >> $script
    echo 'export OE_QMAKE_UIC=${OE_QMAKE_PATH_HOST_BINS}/uic' >> $script
    echo 'export OE_QMAKE_RCC=${OE_QMAKE_PATH_HOST_BINS}/rcc' >> $script
    echo 'export OE_QMAKE_QDBUSCPP2XML=${OE_QMAKE_PATH_HOST_BINS}/qdbuscpp2xml' >> $script
    echo 'export OE_QMAKE_QDBUSXML2CPP=${OE_QMAKE_PATH_HOST_BINS}/qdbusxml2cpp' >> $script
    echo 'export OE_QMAKE_QT_CONFIG=`qmake -query QT_INSTALL_LIBS`${QT_DIR_NAME}/mkspecs/qconfig.pri' >> $script
    echo 'export OE_QMAKE_PATH_HOST_BINS=${OE_QMAKE_PATH_HOST_BINS}' >> $script
    echo 'export QMAKESPEC=`qmake -query QT_INSTALL_LIBS`${QT_DIR_NAME}/mkspecs/linux-oe-g++' >> $script

    # Use relocable sysroot
    sed -i -e 's:${SDKPATHNATIVE}:$OECORE_NATIVE_SYSROOT:g' $script
}
cmake-3.7.2.bb:
do_install_append_class-nativesdk() {
    mkdir -p ${D}${datadir}/cmake
    install -m 644 ${WORKDIR}/OEToolchainConfig.cmake ${D}${datadir}/cmake/

    mkdir -p ${D}${SDKPATHNATIVE}/environment-setup.d
    install -m 644 ${WORKDIR}/environment.d-cmake.sh ${D}${SDKPATHNATIVE}/environment-setup.d/cmake.sh
}
environment.d-cmake.sh:
alias cmake="cmake -DCMAKE_TOOLCHAIN_FILE=$OECORE_NATIVE_SYSROOT/usr/share/cmake/OEToolchainConfig.cmake"
为了...的缘故试图我继续并执行了 /home/ubuntu/workspace/bbb/build-toaster-2/tmp/work/my_machine-poky-linux-gnueabi/my-image-dev/1.0-r0/recipe-sysroot-native/usr/bin/dnf 脚本来自 /home/ubuntu/workspace/bbb/build-toaster-2/tmp/work/my_machine-poky-linux-gnueabi/my-image-dev/1.0-r0/recipe-sysroot-native 这给我以下错误信息:
Traceback (most recent call last):  
File "/home/ubuntu/workspace/bbb/build-toaster-2/tmp/work/my-machine-poky-linux-gnueabi/my-image-dev/1.0-r0/recipe-sysroot-native/usr/bin/dnf.real", line 57, in <module>  
    from dnf.cli import main  
ImportError: No module named 'dnf'
虽然dnf模块似乎存在:
<path as above>/recipe-sysroot-native$ find -name dnf
./usr/lib/python3.5/site-packages/dnf
./usr/bin/dnf
./etc/dnf
./etc/bash_completion.d/dnf
./etc/logrotate.d/dnf
你能看到我做错了什么吗?我绝对无能...

6 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

我用cmake和Qt5构建了一个没有任何问题的SDK ... 你的问题似乎源于dnf,因为我正在建设Wi日 ipk没有任何问题,那里可能会有一个bug rpm在OpenEmbedded中处理。 你可以试试重建:

PACKAGE_CLASSES = "package_ipk"
在你的local.conf,看到它有帮助吗?

2018-02-28   #2

Edit:Anders'[answer](https://stackoverflow.com/a/45883578/2865814) 通过切换包提供更优雅的解决方案老化班。如果你可以的话, 在尝试此解决方法之前查看他的方法。 我发现了一个解决方法,但对我来说却不行理想解决方案我发布 无论如何,如果它帮助某人: 我想通了,nativesdk-cmake包有点碰撞与Qt之一。 为此,我在自定义图层中创建了一个nativesdk-packagegroup-sdk-host.bbappend文件,内容如下 内容:

RDEPENDS_${PN}_remove = "\
    nativesdk-cmake \
"
这删除从SDK构建的cmake依赖项,这适用于我的 目的。但这仅仅解决了症状而不是问题。所以我很高兴 为任何其他解决方案。

2018-02-28   #3

我用cmake和Qt5构建了一个没有任何问题的SDK ... 你的问题似乎源于dnf,因为我正在建设Wi日 ipk没有任何问题,那里可能会有一个bug rpm在OpenEmbedded中处理。 你可以试试重建:

PACKAGE_CLASSES = "package_ipk"
在你的local.conf,看到它有帮助吗?

2018-02-28   #4

只需在nativesdk-qtbase.bb中添加DIRFILES =“”(你应该设置 在yo中整理一个干净整洁的nativesdk-qtbase.bbappend你的自定义图层 DIRFILES =“”)。这适用于RPM目录所有权造成的冲突 这个RPM,这是一个默认的p标准RPM包装中的olicy。看到 packagerpm.bbclass获取详细信息@ python writespecfile(){.... walk_files 方法。注意:必须定义DIRFILES,但留空以便在此工作 当前包。瞧。 干杯。

2018-02-28   #5

RPM对文件/目录进行严格的检查。 environment-setup.d目录中 问题可能有不同的模式或用户之间e 2包。 你可以检查函数[rpmfilesCompare](https://github.com/rpm-software- 管理/转/斑点/ db1b99db2543b2c2526a2e116daeffa0498d5de4 / LIB / rpmfi.c#L910) 用于RPM执行的确切检查。

2018-02-28   #6

正如so61pi提到的那样,RPM对文件/目录进行了严格的检查。在这 情况下,do_generate_qt_environment_file函数在fakeroot中运行环境。实际上 自cmake配方以来,创建environment.d会产生不同的所有者 不使用fakeroot关键词。 我通过删除fakeroot关键字来修复它。不知道这是否正确 修复虽然。我注意到其他一些食谱使用fakeroot关键字和其他 别。我想知道为什么...

登录后方可回帖

Loading...