| 版本 | 软件包数量 | 基础镜像大小 |
|---|---|---|
| openeuler-20.03-lts | 352 | 469MB |
| openeuler-20.03-lts-sp1 | 358 | 512MB |
| openeuler-20.09 | 346 | 531MB |
| ubi | 186 | 205MB |
| ubi-init | 187 | 220MB |
| ubi-minimal | 105 | 103MB |
| centos8 | 172 | 209MB |
| fedora | 145 | 175MB |
| ubuntu | 92 | 72.9MB |
2. openEuler 基础镜像裁剪前分析
[src-openeuler/libreport 分离 libreport-filesystem 软件包](<https://gitee.com/src-openeuler/libreport/issues/I1SY6B[5]>) openEuler master,21.03 分支合入 [src-openeuler/dnf dnf 移除依赖 deltarpm](<https://gitee.com/src-openeuler/dnf/issues/I1SY58[6]>) openEuler 全分支合入
仅包含 yum 的基础镜像

通用基础镜像入口软件包分析
rpm -qa --qf '%{NAME}\n' | sort > centos8.list
python3 idl.py conf/centos8-x86_64.conf -e image_package_list/centos8.list
| 镜像 | 入口包列表 |
|---|---|
| centos8 | binutils, hostname, kexec-tools, langpacks-en, less, libdb-utils, rootfiles, tar, vim-minimal, yum |
| fedora33 | alternatives, fedora-repos-modular, gpg-pubkey, rootfiles, sssd-client, sudo, tar, util-linux, vim-minimal, yum |
| ubi-minimal | audit-libs, chkconfig, gpg-pubkey, langpacks-en, libcap-ng, libdb-utils, microdnf, rootfiles |
| ubi | crypto-policies-scripts, findutils, gdb-gdbserver, gpg-pubkey, langpacks-en, libdb-utils, rootfiles, subscription-manager, tar, vim-minimal, yum |
| ubi-init | crypto-policies-scripts, findutils, gdb-gdbserver, gpg-pubkey, langpacks-en, libdb-utils, procps-ng, rootfiles, subscription-manager, tar, vim-minimal, yum |
相应的结果图如下:

注:
centos8 findutils 包通过 kexec-tools -> dracut -> findutils 路径引入 centos8 procps-ng 包通过 kexec-tools -> dracut -> procps-ng 路径引入 centos8、ubi、ubi-init 均包含 systemd 软件包全栈, centos8 systemd 可通过 kexec-tools -> systemd 路径引入,ubi、ubi-init 可通过 subscription-manager -> systemd 引入
我们可以发现,yum 软件包栈以及 libdb-utils、tar、vim-minimal 等基础软件包作为最常用的系统软件被包含于基础镜像中。此外,centos8 提供额外的 kexec-tools 工具用于直接加载内核以及 bintuils 工具用于分析二进制程序等。而 ubi-minimal 则包含使用 C 语言实现的 dnf 包管理器轻量化子集版本 microdnf 以及其他的基础包用于提供更小的基础镜像。
4. openEuler 基础镜像软件包策略及结果

glibc-all-langpacks 由 glibc-common 提供能力 libdb-utils 由 libdb 提供能力 findutils 通过 libsolv 引入

Packages type 为 bootstrap 表示在镜像准备(kiwi prepare)阶段安装 filesystem 包;Packages type 为 image 表示在镜像制作(kiwi create)阶段安装:yum、procps-ng、gdb-gdbserver、rootfiles、tar、vim-minimal、openEuler-release 包(filesystem 为 linux 基础目录结构软件包,在 openEuler 中可以通过 yum-> dnf -> bash -> filesystem 路径依赖引入,由于使用 kiwi 工具裁剪,必须提供类型为 bootstrap 的软件包,filesystem 一般作为此类型的软件包优先安装)。
openEuler 基础镜像最终结果
| 版本 | 软件包数量 | 架构 | 基础镜像大小 |
|---|---|---|---|
| openeuler-21.03 | 129 | x86_64 | 203MB |
| openeuler-21.03 | 129 | aarch64 | 230MB |
使用如下命令来获取最新的 openEuler-21.03 创新版基础镜像,并尝试使用起来吧。
docker pull hub.oepkgs.net/openeuler/openeuler:21.03
5. 还能更进一步吗
我们注意到 x86_64 架构下,openEuler 21.03 版本基础镜像大小为 203MB,包含 129 个软件包;而 CentOS8 基础镜像为 209MB,包含 172 个软件包。大小几乎相同,但是软件包的数量却有较大的差异,openEuler 基础镜像“大”在了哪里?我们进入镜像里面深入的看一下。对比运行基础镜像容器:
docker run -it --rm hub.oepkgs.net/openeuler/openeuler:21.03 bash
docker run -it --rm centos bash
进入容器中查看各目录占用空间的大小:
du -h -d 1

软件包的不必要依赖较多 软件包库文件的多版本共存 没有考虑软件包的精简版本实现
openEuler libcurl、libssh 依赖 e2fsprogs 提供的 libcom_err.so,但实际上并不需要除 libcom_err.so 之外其他 e2fsprogs 软件包提供的文件。 openEuler 存在多个版本的 libncurses 相关的动态链接库文件。 CentOS8 基础镜像包含 libcurl-minimal、coreutils-single 软件包以实现提供相应软件包基础能力的精简版本,openEuler 尚未实现。
Back To Square One
总结
参考资料
openeuler-os-build: https://gitee.com/openeuler/openeuler-os-build
[2]kiwi: https://github.com/OSInside/kiwi
[3]镜像依赖分析工具 idl: https://gitee.com/meilier/idl
[4]woqidaideshi: https://gitee.com/woqidaideshi
[5]src-openeuler/libreport 分离 libreport-filesystem 软件包: https://gitee.com/src-openeuler/libreport/issues/I1SY6B
[6]src-openeuler/dnf dnf 移除依赖 deltarpm: https://gitee.com/src-openeuler/dnf/issues/I1SY58
[7]Universal Base Image: https://www.redhat.com/en/blog/introducing-red-hat-universal-base-image
[8]镜像依赖分析工具 idl: https://gitee.com/meilier/idl
[9]openeuler-os-build: https://gitee.com/openeuler/openeuler-os-build/blob/master/script/config/docker_image/config.xml
[10]这里: https://gitee.com/organizations/openeuler-embedded/projects
[11]distroless: https://github.com/GoogleContainerTools/distroless
[12]No.63 openEuler 基础镜像优化: https://gitee.com/openeuler-competition/summer-2021/issues/I3EM49?from=project-issue
[13]No.66 openEuler 云原生基础镜像集: https://gitee.com/openeuler-competition/summer-2021/issues/I3EN2R?from=project-issue
[14]Cloud Native SIG: https://gitee.com/openeuler/cloudnative




