Smart 无法安装...没有包提供共享对象文件
Smart can't install...no package provides shared object file
问题
我正在尝试创建一个 Bitbake 配方,它将在我的目标 OS 上安装 Oracle JRE 8。
我曾尝试使用来自 meta-oracle-java 的元数据,但由于为一般 JRE 提供的 .inc
文件之一具有特定于 JRE-7 的 URI,所以遇到了一些困难。
我更改了 meta-oracle-java 中的一些元数据并创建了我自己的安装方法。
测试
自行构建 JRE 配方
自己构建配方时:
bitbake oracle-jse-jre
构建完成且没有错误。我在 oracle-jse-jre
配方中添加了对 libav
的依赖,因此我可以从 TMPDIR
:
执行以下操作
$ find . -name libavformat*so
./work/core2-64-poky-linux/libav/9.18-r0/sysroot-destdir/usr/lib/libavformat.so.54.20.4
./work/core2-64-poky-linux/libav/9.18-r0/sysroot-destdir/usr/lib/libavformat.so
./work/core2-64-poky-linux/libav/9.18-r0/sysroot-destdir/usr/lib/libavformat.so.54
./sysroots/genericx86-64/usr/lib/libavformat.so.54.20.4
./sysroots/genericx86-64/usr/lib/libavformat.so
./sysroots/genericx86-64/usr/lib/libavformat.so.54
运行时依赖成功
如果我将 oracle-jse-jre
配方的默认包添加到另一个配方 xenoros_0.1.bb
的 RDEPENDS_${PN}
,我可以 运行 bitbake xenoros
并且构建时不会出现错误.
核心映像失败
如果我将 xenoros
添加到 core-image-xenoros
的 IMAGE_INSTALL
变量,构建将失败并出现以下错误:
ERROR: Unable to install packages. Command '/home/presslertj/yocto-OS/poky-jethro-build/build/tmp/sysroots/x86_64-linux/usr/bin/smart --log-level=warning --data-dir=/home/presslertj/yocto-OS/poky-jethro-build/build/tmp/work/genericx86_64-poky-linux/core-image-my-server/1.0-r0/rootfs/var/lib/smart install -y message-generation@core2_64 catkin@core2_64 python-distutils@core2_64 ldd@core2_64 xenoros@core2_64 rosgraph@core2_64 gedit@core2_64 actionlib@core2_64 python-compression@core2_64 dhcp-server@core2_64 libpthread-stubs@core2_64 tf2@core2_64 python-email@core2_64 catkin-dev@core2_64 git@core2_64 rosbash@core2_64 python-json@core2_64 python-wstool@core2_64 connman@core2_64 ros-config@core2_64 packagegroup-core-boot@genericx86_64 libsdl-1.2-0@core2_64 rosjava@core2_64 quagga@core2_64 nginx@core2_64 rospy@core2_64 apt@core2_64 libc6@core2_64 netcat@core2_64 shadow@core2_64 bash@core2_64 roscpp@core2_64 roslaunch@core2_64 run-postinsts@all python-rosinstall@core2_64 elfutils@core2_64 openssl@core2_64 font-alias@all gradle@core2_64 python-catkin-pkg@core2_64 catkin-runtime@core2_64 catkin-runtime-dev@core2_64 pciutils@core2_64 base-passwd@core2_64' returned 1:
Loading cache...
Updating cache... ######################################## [100%]
Computing transaction...error: Can't install oracle-jse-jre-1.8.0-u77r0@core2_64: no package provides libavformat.so.53(LIBAVFORMAT_53)(64bit)
ERROR: Function failed: do_rootfs
ERROR: Logfile of failure stored in: /home/presslertj/yocto-OS/poky-jethro-build/build/tmip/work/genericx86_64-poky-linux/core-image-my-server/1.0-r0/temp/log.do_rootfs.22073
ERROR: Task 7 (/home/presslertj/yocto-OS/poky-jethro-build/meta-myLayer/recipes-core/images/core-image-my-server.bb, do_rootfs) failed with exit code '1'
查看内部 TMPDIR
,我可以找到:
/sysroots/genericx86-64/usr/lib/libavformat.so.54
似乎版本不匹配,smart 期望版本为 53,但提供的是 54。
正在还原 libav
的版本
为了测试发生了什么,我制作了一个获取 libav
版本 0.8.17
的食谱(使用版本 53)。当使用它而不是 9.18
时,我遇到了完全相反的问题,智能期望但找不到版本 54。
问题
- smart 如何确定这些共享对象文件的版本号?
- do_rootfs() 任务会导致构建在这个特定时间失败吗?
- 是否有针对我的具体问题的简单解决方案?
1) 它不是智能,而是 rpmbuild,它正在添加从 ELF DT_NEEDED
字段派生的依赖项(参见 elfutils -a
)。
2) do_rootfs()
任务因未解决的依赖关系而失败。
3) 由于您使用的是 Poky/Yocto 和 rpm5,因此有一种简单的方法可以掩盖该问题(替换导致您胃灼热的任何依赖项)
echo "unresoved_dependency" > /etc/rpm/sysinfo/Providename
那只是一个创可贴;您仍然需要弄清楚打包问题,而不是通过构建 rpm 包的方式来掩盖潜在的问题。
对于仍然遇到此错误的任何人:如 meta-oracle-java 存储库的自述文件中所述
There are some known install problems for JRE packages due to dependencies reported by RPM package manager.
Switching to DEB or IPK packaging temporarily fixes this.
ie:
PACKAGE_CLASSES = "package_deb"
or
PACKAGE_CLASSES = "package_ipk"
in your 'local.conf' file
问题
我正在尝试创建一个 Bitbake 配方,它将在我的目标 OS 上安装 Oracle JRE 8。
我曾尝试使用来自 meta-oracle-java 的元数据,但由于为一般 JRE 提供的 .inc
文件之一具有特定于 JRE-7 的 URI,所以遇到了一些困难。
我更改了 meta-oracle-java 中的一些元数据并创建了我自己的安装方法。
测试
自行构建 JRE 配方
自己构建配方时:
bitbake oracle-jse-jre
构建完成且没有错误。我在 oracle-jse-jre
配方中添加了对 libav
的依赖,因此我可以从 TMPDIR
:
$ find . -name libavformat*so
./work/core2-64-poky-linux/libav/9.18-r0/sysroot-destdir/usr/lib/libavformat.so.54.20.4
./work/core2-64-poky-linux/libav/9.18-r0/sysroot-destdir/usr/lib/libavformat.so
./work/core2-64-poky-linux/libav/9.18-r0/sysroot-destdir/usr/lib/libavformat.so.54
./sysroots/genericx86-64/usr/lib/libavformat.so.54.20.4
./sysroots/genericx86-64/usr/lib/libavformat.so
./sysroots/genericx86-64/usr/lib/libavformat.so.54
运行时依赖成功
如果我将 oracle-jse-jre
配方的默认包添加到另一个配方 xenoros_0.1.bb
的 RDEPENDS_${PN}
,我可以 运行 bitbake xenoros
并且构建时不会出现错误.
核心映像失败
如果我将 xenoros
添加到 core-image-xenoros
的 IMAGE_INSTALL
变量,构建将失败并出现以下错误:
ERROR: Unable to install packages. Command '/home/presslertj/yocto-OS/poky-jethro-build/build/tmp/sysroots/x86_64-linux/usr/bin/smart --log-level=warning --data-dir=/home/presslertj/yocto-OS/poky-jethro-build/build/tmp/work/genericx86_64-poky-linux/core-image-my-server/1.0-r0/rootfs/var/lib/smart install -y message-generation@core2_64 catkin@core2_64 python-distutils@core2_64 ldd@core2_64 xenoros@core2_64 rosgraph@core2_64 gedit@core2_64 actionlib@core2_64 python-compression@core2_64 dhcp-server@core2_64 libpthread-stubs@core2_64 tf2@core2_64 python-email@core2_64 catkin-dev@core2_64 git@core2_64 rosbash@core2_64 python-json@core2_64 python-wstool@core2_64 connman@core2_64 ros-config@core2_64 packagegroup-core-boot@genericx86_64 libsdl-1.2-0@core2_64 rosjava@core2_64 quagga@core2_64 nginx@core2_64 rospy@core2_64 apt@core2_64 libc6@core2_64 netcat@core2_64 shadow@core2_64 bash@core2_64 roscpp@core2_64 roslaunch@core2_64 run-postinsts@all python-rosinstall@core2_64 elfutils@core2_64 openssl@core2_64 font-alias@all gradle@core2_64 python-catkin-pkg@core2_64 catkin-runtime@core2_64 catkin-runtime-dev@core2_64 pciutils@core2_64 base-passwd@core2_64' returned 1:
Loading cache...
Updating cache... ######################################## [100%]
Computing transaction...error: Can't install oracle-jse-jre-1.8.0-u77r0@core2_64: no package provides libavformat.so.53(LIBAVFORMAT_53)(64bit)
ERROR: Function failed: do_rootfs
ERROR: Logfile of failure stored in: /home/presslertj/yocto-OS/poky-jethro-build/build/tmip/work/genericx86_64-poky-linux/core-image-my-server/1.0-r0/temp/log.do_rootfs.22073
ERROR: Task 7 (/home/presslertj/yocto-OS/poky-jethro-build/meta-myLayer/recipes-core/images/core-image-my-server.bb, do_rootfs) failed with exit code '1'
查看内部 TMPDIR
,我可以找到:
/sysroots/genericx86-64/usr/lib/libavformat.so.54
似乎版本不匹配,smart 期望版本为 53,但提供的是 54。
正在还原 libav
的版本
为了测试发生了什么,我制作了一个获取 libav
版本 0.8.17
的食谱(使用版本 53)。当使用它而不是 9.18
时,我遇到了完全相反的问题,智能期望但找不到版本 54。
问题
- smart 如何确定这些共享对象文件的版本号?
- do_rootfs() 任务会导致构建在这个特定时间失败吗?
- 是否有针对我的具体问题的简单解决方案?
1) 它不是智能,而是 rpmbuild,它正在添加从 ELF DT_NEEDED
字段派生的依赖项(参见 elfutils -a
)。
2) do_rootfs()
任务因未解决的依赖关系而失败。
3) 由于您使用的是 Poky/Yocto 和 rpm5,因此有一种简单的方法可以掩盖该问题(替换导致您胃灼热的任何依赖项)
echo "unresoved_dependency" > /etc/rpm/sysinfo/Providename
那只是一个创可贴;您仍然需要弄清楚打包问题,而不是通过构建 rpm 包的方式来掩盖潜在的问题。
对于仍然遇到此错误的任何人:如 meta-oracle-java 存储库的自述文件中所述
There are some known install problems for JRE packages due to dependencies reported by RPM package manager.
Switching to DEB or IPK packaging temporarily fixes this.
ie:
PACKAGE_CLASSES = "package_deb"
or
PACKAGE_CLASSES = "package_ipk"
in your 'local.conf' file