我发现无艺术的噪音答案非常有用。所以我会尝试在这里介绍一些不同的东西。
首先,所有二进制文件都有库依赖项。如果您查看 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 设计的另一个优点是没有相互破坏的二进制库,因为它总是从头开始重建:
另一方面,通过一次升级整个根文件系统映像来进行完整的系统升级,可以保证部署到嵌入式系统的映像确实是经过测试和验证的映像。