NixOS ISO, 458MB에서 197MB까지 줄이기

by DD
10시간 전
조회수 0

NixOS ISO 이미지의 기본 크기(458MB)가 과도하다는 문제 제기

Nix 데몬 및 문서 비활성화로 384MB까지 축소 성공

SSH, GRUB, 커널 모듈 제거 시도 및 결과 분석

최종적으로 197MB까지 크기 감소 달성

NixOS VM 및 ISO 이미지 생성 기본 원리

NixOS는 설정 파일로부터 VM 이미지를 생성하는 `nixos-rebuild build-vm` 기능을 제공합니다. 초기에는 호스트 OS의 `/nix/store`를 마운트하는 'thin' VM을 생성하지만, 독립적인 ISO 이미지를 위해서는 `iso-image.nix` 모듈을 임포트해야 합니다. 이 과정에서 기본적으로 458MB에 달하는 ISO 이미지가 생성되며, 이는 Alpine Linux의 66MB ISO와 비교했을 때 상당한 차이를 보입니다.

Nix 데몬 및 문서 비활성화를 통한 크기 축소

이미지 크기 최적화의 첫 단계로, `nix.enable = false` 및 `documentation.enable = false` 설정을 통해 Nix 데몬과 문서 관련 구성 요소를 제거했습니다. 이로써 ISO 이미지 크기는 458MB에서 384MB로 감소했습니다. 하지만 여전히 Boost 라이브러리가 남아있어, `register-nix-paths.service` 비활성화 등 추가적인 조치가 필요했습니다.

SSH, GRUB, 커널 모듈 제거 시도와 트레이드오프

SSH 클라이언트 제거를 위해 `programs.ssh` 옵션에 대한 스텁(stub)을 제공하고, GRUB 설치 도구 제거를 위해 `system.extraDependencies` 및 `environment.systemPackages`를 재정의했습니다. 또한, 144MB에 달하는 커널 모듈 폴더를 제거하여 런타임 모듈 로딩 기능을 포기하는 대신 이미지 크기를 197MB까지 줄였습니다. 이 과정에서 디스플레이 해상도 전환 기능 등이 제한되는 트레이드오프가 발생했습니다.

Perl 의존성 제거 및 실험적 기능 활용

56MB를 차지하는 Perl 의존성은 시스템 활성화 시 `/etc` 설정 및 사용자 관리에 사용됩니다. 이를 제거하기 위해 실험적인 기능인 `system.etc.overlay.enable` 및 `services.userborn.enable`을 활용하여 183MB까지 크기를 줄였습니다. 이는 NixOS의 표준적인 사용 범위를 벗어난 실험적인 접근 방식임을 시사합니다.

커뮤니티의 추가 최적화 및 벤치마크 논의

Lobsters 커뮤니티에서는 NixOS를 Yocto 대안으로 축소하는 NixCon 발표가 언급되었으며, TinyCore Linux의 작은 크기(17MB)가 벤치마크로 제시되었습니다. 또한, `programs.ssh.setXAuthLocation = false`와 같은 추가적인 SSH 관련 최적화 방안 및 `minimal.nix` 프로파일 활용 가능성이 논의되었습니다. Perl이 시스템에 자주 포함되는 이유에 대한 의문도 제기되었습니다.

I can haz smoller NixOS ISOs?