데비안: chroot 환경에 불필요한 필수 패키지

데비안: chroot 환경에 불필요한 필수 패키지

저는 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은 기본적으로 필요하지 않은 많은 패키지를 설치합니다. 예를 들어 모든 문서( , , ) 를 삭제할 수도 있지만 패키지가 업그레이드될 때마다 파일이 다시 작성되는 것을 피할 수 있는 방법은 없습니다.logine2fsprogsperl-basebase-passwdbase-fileslocales/usr/share/doc/usr/share/man/usr/share/info

실제로 필요하지 않은 또 다른 큰 용어는 , , and이며, 이를 , , and로 바꾸면 , , , and coreutils가 아닐 수도 있습니다 . 편리한 명령줄 셸을 사용하는 데 관심이 없다면 그럴 필요가 없습니다.debianutilsbsdutilsgzipmountutil-linuxbusyboxbash

공간을 절약하고 SSH 액세스와 rsync만 필요하다면 Debian보다 작은 것을 얻을 수 있습니다. 필요한 것은 Dropbear, rsync 및 필요한 라이브러리뿐입니다. Dropbear는 SFTP 서버를 제공하지 않으므로 필요한 경우 OpenSSH에서 설치해야 합니다. 기본 설치에 bash 또는 Perl이 포함되지 않고 모든 문서가 별도의 패키지에 있으며 표준 라이브러리가 Glibc가 아니라 uClibc와 같은 더 작은 대안인 임베디드 시스템용으로 설계된 배포판이 많이 있습니다. opkg또는 패키지 관리자를 사용하여 배포판을 찾으세요 ipkg.오픈WRT그리고가벼운 소프트웨어, 또는 기타 언급된BusyBox 제품 목록.

답변2

./configure --enable-single-binarybusybox처럼 모든 유틸리티 간에 바이너리를 공유하도록 coreutils 패키지를 다시 빌드해 볼 수 있습니다 .

관련 정보