我已经在 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-passwd
和base-files
。除此之外,debootstrap 默认安装了许多您不需要的软件包,例如locales
.您还可以删除所有文档(/usr/share/doc
、/usr/share/man
、/usr/share/info
),但无法避免每次软件包升级时文件都被重写。
您实际上并不需要的另一个大项是, , , 和, 如果您将它们替换为, , , 和 ,coreutils
也可能不是debianutils
, bsdutils
, gzip
,mount
和。如果您不关心拥有舒适的命令行 shell,则不需要.util-linux
busybox
bash
如果你想节省空间,并且只需要 SSH 访问和 rsync,你可以得到比 Debian 更小的东西。您所需要的只是 Dropbear、rsync 以及它们所需的库。 Dropbear 不提供 SFTP 服务器,因此如果您需要,则需要从 OpenSSH 安装该服务器。有许多专为嵌入式系统设计的发行版,其基本安装不包括 bash 或 perl,其中所有文档都位于单独的包中,并且标准库不是 Glibc,而是较小的替代方案,例如 uClibc。使用opkg
或包管理器查找发行版ipkg
,例如开放WRT和光软件,或其他提到的BusyBox产品列表。
答案2
您可以尝试重建 coreutils 包,./configure --enable-single-binary
以便它在所有实用程序之间共享二进制文件,如 busybox 那样