私はchroot環境(Android携帯では重要ではありませんが、この質問では重要ではありません)にDebian 8(jessie)を設定しましたが、そのサイズがかなり大きいことがわかりました。その後、必須ではなく、未使用のすべてのパッケージ(現在のsshとrsync)を削除しましたが、サイズはまだ約200 MBでした(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が効果的に提供するinitやloginなどのシステムサービス(通常のLinuxシステムで実行できるすべてのことができない場合)を提供するパッケージは必要ありません。
dpkg
コマンドラインオプションを使用して、必須とマークされたパッケージを削除できます--force-remove-essential
。
Debian jessieで重要とマークされているパッケージのうち、ユースケースには、、、、、およびおそらくinit
必要ありません。これに加えて、debootstrapはデフォルトで必要とされない多くのパッケージをインストールします。たとえば、すべての文書(、、、)を削除することもできますが、パッケージがアップグレードされるたびにファイルが再作成されるのを避ける方法はありません。ncurses-base
ncurses-bin
diffutils
login
e2fsprogs
perl-base
base-passwd
base-files
locales
/usr/share/doc
/usr/share/man
/usr/share/info
実際に必要とされないもう一つの大きな用語は、、、およびですcoreutils
。便利なコマンドラインシェルを使用することに興味がなければ、それは必要ありません。debianutils
bsdutils
gzip
mount
util-linux
busybox
bash
スペースを節約し、SSHアクセスとrsyncだけが必要な場合は、Debianよりも小さいものを入手できます。必要なのはDropbear、rsync、必要なライブラリだけです。 DropbearはSFTPサーバーを提供していないため、必要に応じてOpenSSHからインストールする必要があります。デフォルトのインストールにbashやPerlが含まれておらず、すべてのドキュメントが別々のパッケージにあり、標準ライブラリがGlibcではなくuClibcなどのより小さな代替手段である組み込みシステム用に設計されたディストリビューションがたくさんあります。opkg
または、パッケージマネージャを使用してディストリビューションを見つけますipkg
。オープンWRTそして軽いソフトウェア、または他の言及BusyBox製品リスト。
答え2
./configure --enable-single-binary
busyboxのように、すべてのユーティリティ間でバイナリを共有するようにcoreutilsパッケージを再構築してみることができます。