8

我正在使用 buildroot 创建在我的 ARM 平台上运行的 rootfs。

我想在我的平台上有一个包管理器来轻松安装包,比如 ubuntu 中的 apt-get。

我找到了 opkg,可以简单地将其添加到 buildroot 构建中,但我找不到任何有关如何查找存储库的信息。

此外,在网上阅读了一些关于此的内容,我还了解到 buildroot 不包含包管理器。opkg 不是包管理器吗?或者只是某种前端来获取包?

我不太了解包管理器的组成部分,也没有找到任何有关此的信息。

有人可以解释实现这种管理器真正需要什么,或者在哪里可以找到这些信息?

4

2 回答 2

6

opkg 不是包管理器吗?或者只是某种前端来获取包?

opkg基于ipkg。看起来它试图提供apt-get.

有人可以解释实施这种管理器真正需要什么,或者在哪里可以找到这些信息?

包管理器提供了许多不同的功能。随着它们的发展,为最终用户增加了不同层次的易用性。通常,它们从 Linux桌面服务器空间开始,并已移植到嵌入式系统中使用。

一些差异;嵌入式系统通常是单任务的。包管理系统允许用户挑选和选择安装的内容。通常,嵌入式系统可能不希望允许用户挑选包。当然,这取决于应用程序。

一些包管理功能,

  1. 构建和修补。
  2. 包依赖和包数据库。
  3. 包迁移。
  4. 包专业化。
  5. 自动下载
  6. 最小化下载时间/带宽。

Rpmdpkgipkg通常只满足项目 1-4。 Buildroot甚至不这样做,只有第一项是真正相关的。原因是Buildroot旨在为永远不会更新的固定系统构建软件。拥有一个带有网络更新包迁移的文件系统是没有意义的,因为设备中没有网络连接或外部存储。此外,Buildroot试图做到最小化,这些额外的功能是有代价的。

LTIB提供系统创建项目 1-3,但不提供网络下载。此外,开箱即用,它在RPM大小方面效率很低。第 4 项,导致典型的开发部署包。为了构建一个库,您需要头文件来编译依赖包。典型的LTIB rpm包括所有头文件。制作排除这些标题手册页等的子包是一项简单的任务。

OpenWrt适用于路由器,但如果您需要图形声音和其他功能,则该软件包可能不可用。有各种文件系统构建器,但由于变化的数量,每个都有成本和收益。正如有许多 Linux桌面服务器发行版一样,也有许多具有不同包管理选项的根文件系统构建器。您必须评估您的应用程序和系统的优势。

于 2013-07-17T14:01:42.680 回答
1

我发现无艺术的噪音答案非常有用。所以我会尝试在这里介绍一些不同的东西。

首先,所有二进制文件都有库依赖项。如果您查看 CentOS/RHEL/Oracle Linux 的库文件名和目录,您会发现它与基于 Debian 的发行版完全不同。即,如果您将二进制文件从一个复制到另一个,它将不起作用。

查看 Debian "/bin/ls":

ldd /bin/ls
    linux-vdso.so.1 =>  (0x00007ffc269b0000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fb8f3fa2000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb8f3bd8000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fb8f3968000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb8f3764000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fb8f41c4000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb8f3547000)

和 OracleLinux 的“/bin/ls”:

ldd /bin/ls
    linux-vdso.so.1 =>  (0x00007ffe8999b000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f9831e8e000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007f9831c89000)
    libacl.so.1 => /lib64/libacl.so.1 (0x00007f9831a80000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f98316b3000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f9831451000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f983124d000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f98320b5000)
    libattr.so.1 => /lib64/libattr.so.1 (0x00007f9831048000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9830e2c000)

据我所知,有两大类发行版:基于 Debian 和基于 Redhat。(ipkg, opkg, dpkg 都是 debian,yum/rpm 是 Redhat 的)

并且包管理器应该了解文件系统设计并将相关文件复制到正确的目录中。

Buildroot 可以构建得如此精简,以至于您的整个“操作系统”仅包含几个最小的用户空间文件,或者没有任何正在运行的守护程序。如果你知道怎么做,几乎所有东西都是可配置的。

并引用: https ://buildroot.org/downloads/manual/manual.html#faq-no-binary-packages

结论是,添加对已安装文件的跟踪以在未选择包时将其删除,或者生成二进制包的存储库,这是很难可靠地实现的,并且会增加很多复杂性。

buildroot 设计的另一个优点是没有相互破坏的二进制库,因为它总是从头开始重建:

另一方面,通过一次升级整个根文件系统映像来进行完整的系统升级,可以保证部署到嵌入式系统的映像确实是经过测试和验证的映像。

于 2019-01-08T08:14:28.193 回答