저는 chroot 환경(안드로이드 휴대폰에서는 중요하지 않지만 이 질문에서는 중요하지 않음)에 데비안 8(jessie)을 설정했는데 그 크기가 상당히 크다는 것을 알았습니다. 그런 다음 필수적이지 않고 사용하지 않은 모든 패키지(현재 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가 효과적으로 제공하는 init 및 login과 같은 시스템 서비스(일반 Linux 시스템에서 수행할 수 있는 모든 작업을 수행할 수 없는 경우)를 제공하는 패키지는 필요하지 않습니다.
dpkg
명령줄 옵션을 사용하여 필수로 표시된 패키지를 제거 할 수 있습니다 --force-remove-essential
.
Debian jessie 에서 중요하다고 표시된 패키지 중 사용 사례에는 init
, ncurses-base
, ncurses-bin
, diffutils
, 및 아마도 필요하지 않습니다 . 이 외에도 debootstrap은 기본적으로 필요하지 않은 많은 패키지를 설치합니다. 예를 들어 모든 문서( , , ) 를 삭제할 수도 있지만 패키지가 업그레이드될 때마다 파일이 다시 작성되는 것을 피할 수 있는 방법은 없습니다.login
e2fsprogs
perl-base
base-passwd
base-files
locales
/usr/share/doc
/usr/share/man
/usr/share/info
실제로 필요하지 않은 또 다른 큰 용어는 , , and이며, 이를 , , and로 바꾸면 , , , and 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 패키지를 다시 빌드해 볼 수 있습니다 .