FreeBSD용 최소 커널을 구축하는 적절한 방법이 있습니까? 이것FreeBSD 매뉴얼이에 대한 정보가 부족합니다. 디렉토리의 크기는 기본적으로 /boot/kernel
약 450MB로 꽤 큽니다. 커널 지문을 최소화하고 불필요한 커널 모듈과 옵션을 모두 제거하고 싶습니다. "NO_MODULES"
옵션을 사용해야 합니까 /etc/make.conf
? 아니면 C 컴파일러 플래그를 사용합니까?
답변1
을 줄이기 위해 할 수 있는 일이 많이 있습니다 /boot/kernel
.
아마도 최상의 공간 절약은 설정 WITHOUT_KERNEL_SYMBOLS
( /etc/src.conf
파일이 아직 없으면 생성)을 통해 달성할 수 있으며 다음에 를 설치할 때 installkernel
디버그 기호 파일은 설치되지 않습니다. 즉시 공간이 필요한 경우 이제 안전하게 삭제할 수 있습니다( rm /boot/kernel/*.symbols
).
make.conf
어떤 모듈이 빌드되는지 제어하는 설정이 있습니다 :
NO_MODULES
- 모듈 구축을 완전히 비활성화합니다.MODULES_OVERRIDE
- 빌드하려는 모듈을 지정하십시오.WITHOUT_MODULES
- 빌드하면 안되는 모듈 목록
이 NO_MODULES
옵션은 다소 가혹할 수 있으므로 다른 두 가지를 현명하게 조합하는 것이 더 나은 옵션입니다. 원하는 모듈을 정확히 알고 있다면 에서 해당 모듈을 설정할 수 있습니다 MODULES_OVERRIDE
.WITHOUT_MODULES
뒤쪽에 MODULES_OVERRIDE
이므로 두 목록 모두에 이름이 지정된 모듈은 빌드되지 않습니다.
모든 모듈 빌드를 비활성화하려면 를 사용 NO_MODULES
하고 필요한 모든 드라이버와 모듈이 커널에 정적으로 컴파일되었는지 확인하세요. 각 드라이버의 맨페이지에는 커널 구성 파일에 추가할 해당 행이 표시되므로 필요한 것이 무엇인지 파악할 수 있습니다.
여전히 공간이 문제라고 생각하거나 커널을 가능한 한 간결하게 유지하려는 경우 커널 구성을 편집하여 컴퓨터가 지원하지 않거나 지원하지 않는 모든 장치 및 하위 시스템을 제거할 수 있습니다. 사용하고 싶지 않습니다. 빌드 시스템은 매우 합리적입니다. 구성에서 여전히 활성 상태인 모듈에 필요한 모듈을 실수로 제거하면 빌드가 실패하고 잘못된 이유를 설명하는 오류 메시지가 표시됩니다.
이는 매우 지루할 수 있지만 가장 좋은 접근 방식은 작은 단계를 수행하고 한 번에 한두 가지 항목을 제거한 다음 결과 구성이 올바르게 빌드되고 부팅되는지 확인하는 것입니다. 하지만 무엇을 하든 복사해서 /usr/src/sys/<arch>/config/GENERIC
편집하는 것이 좋습니다. 너무 혼란스럽다면 유일한 해결책은 기본 구성으로 시작하는 것입니다. 그러면 시스템에 파일이 아직 남아 있어서 다행일 것입니다 GENERIC
!
사용자 정의 커널을 빌드하려면 구성 이름을 명령줄에서와 같이 전달 make KERNCONF=MYKERNCONF buildkernel
하거나 . 사용자 정의 구성 파일을 배치하면 빌드 시스템이 이를 찾을 수 있는지 확인하십시오 .KERNCONF
/etc/make.conf
/usr/src/sys/<arch>/config
답변2
"올바른" 커널은 상대적인 개념이며 필요에 따라 다릅니다. 커널을 만든 사람에게 커널을 만들어 달라고 요청할 필요는 없습니다. 그런데 450MB FreeBSD 커널은 어떻게 생각해냈나요?
root@neill-backup:~ # uname -a
FreeBSD neill-backup.int.autonlab.org 10.1-RELEASE FreeBSD 10.1-RELEASE #0 r274401: Tue Nov 11 21:02:49 UTC 2014 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64
여기
root@neill-backup:~ # du -h /boot/kernel/kernel
20M /boot/kernel/kernel