Yocto动态软件包管理(Runtime Package Management)之:rpm和dnf

本文详细指导如何在Yocto环境中利用dnf工具进行动态rpm软件包管理,适用于开发阶段的快速安装与更新,但强调了开发过程中的安全、依赖管理和在产品阶段的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面会一步步教你如何使用Yocto的动态rpm软件包管理功能,以及相应的dnf工具。

  • 更改build/conf/local.conf,添加如下代码:
PACKAGE_CLASSES = "package_rpm"
PACKAGE_FEED_URIS = "http://<local-machine-ip>:5678"
EXTRA_IMAGE_FEATURES += " package-management "
  • 选择一个镜像(rootfs)编译,比如 core-image-full
$ bitbake core-image-full
  • 编译完成后,创建包索引:
$ bitbake package-index
  • 创建一个简单的包管理服务器
$ cd build/tmp/deploy/rpm
$ python -m SimpleHTTPServer 5678        #python2
或者
$ python -m http.server 5678                     #python3
  • 把core-image-full镜像部署到相应的嵌入式目标板上后,启动系统然后更新包索引(请确保目标板和包管理服务器建立网络连接):
$ dnf makecache
  • 此时,只有在包索引中列出的包可用,因此我们需要构建一些不同的东西,比如Vim:
$ bitbake vim
$ bitbake package-index
  • 在目标板上面更新包索引并安装软件包:
$ dnf makecache
$ dnf info vim
$ dnf install vim
  • 如果要删除软件包,使用如下命令:
$ dnf erase vim

为何这种动态包管理仅能用于开发阶段?

在开发阶段,我们更感兴趣的是安装软件包,这样就无需构建和更新整个镜像文件(rootfs),所以完全不担心该软件包将持续多长时间或提供给谁。但是,在使用过程中还有很多其他重要问题需要考虑,例如:

  • HTTP 服务器是否安全?(本文中的服务器显然是不安全的)
  • 包依赖关系链是否正确实现?
  • 是否满足所有包版本的包依赖关系链?
  • 如果一个软件包被更新,所有依赖关系链都必须更新吗?

在开发阶段,我们更多地考虑安装缺少的软件包。但是在产品生产和发布阶段,最重要的是正确和安全的更新软件包,显然本文中的方法并不是很适用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值