debian:chroot 环境中不必要的必需软件包

debian:chroot 环境中不必要的必需软件包

我已经在 chroot 环境中设置了 debian 8 (jessie)(在 Android 手机上,但这对这个问题并不重要),并注意到它相当大。然后我删除了所有非必需且我不使用的软件包(目前是 ssh 和 rsync),大小仍然约为 200MB(我deborphan在过程中使用过多)。

问题是:我可以删除一些必要的软件包以便系统继续运行(例如我不需要控制台登录和大量设备管理功能)吗?

或者有没有办法用更小的替代品来替换一些重要的软件包?

目前,我最大的包裹是:

# dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -nr | head -n20

13509   coreutils
9047    libc6
7004    dpkg
5198    bash
5043    gnupg
4811    perl-base
3842    openssh-client
3078    apt
2946    libc-bin
2893    e2fsprogs
2732    login
2692    util-linux
2555    tar
2478    libapt-pkg4.12
2268    libssl1.0.0
2218    passwd
1579    libdb5.3
1563    findutils
1447    libpam-runtime
1434    libslang2

答案1

基本软件包在正常系统上是必需的,但 chroot 并不是真正的正常系统。您不需要提供 Android 有效提供的系统服务的软件包(如果以某种方式不允许您完成在普通 Linux 系统上可以做的所有事情),例如 init 和登录。

您可以dpkg使用命令行选项删除标记为必需的软件包--force-remove-essential

在 Debian jessie 中标记为重要的软件包中,对于您的用例,您不需要init, ncurses-base, ncurses-bin, diffutils, login, ,e2fsprogs也可能不需要perl-base,base-passwdbase-files。除此之外,debootstrap 默认安装了许多您不需要的软件包,例如locales.您还可以删除所有文档(/usr/share/doc/usr/share/man/usr/share/info),但无法避免每次软件包升级时文件都被重写。

您实际上并不需要的另一个大项是, , , 和, 如果您将它们替换为, , , 和 ,coreutils也可能不是debianutils, bsdutils, gzip,mount和。如果您不关心拥有舒适的命令行 shell,则不需要.util-linuxbusyboxbash

如果你想节省空间,并且只需要 SSH 访问和 rsync,你可以得到比 Debian 更小的东西。您所需要的只是 Dropbear、rsync 以及它们所需的库。 Dropbear 不提供 SFTP 服务器,因此如果您需要,则需要从 OpenSSH 安装该服务器。有许多专为嵌入式系统设计的发行版,其基本安装不包括 bash 或 perl,其中所有文档都位于单独的包中,并且标准库不是 Glibc,而是较小的替代方案,例如 uClibc。使用opkg或包管理器查找发行版ipkg,例如开放WRT光软件,或其他提到的BusyBox产品列表

答案2

您可以尝试重建 coreutils 包,./configure --enable-single-binary以便它在所有实用程序之间共享二进制文件,如 busybox 那样

相关内容