---
title: "FreeBSD 15.0을 150MB까지 줄여보는 실험"
published: 2026-01-31T23:15:30.000Z
canonical: https://jeff.news/article/1308
---
# FreeBSD 15.0을 150MB까지 줄여보는 실험

FreeBSD 15.0-RELEASE를 PKGBASE로 설치 후 불필요한 패키지를 제거해 루트 파일시스템을 150MB까지 줄인 과정. pkg 의존성 함정, SQLite DB 직접 수정으로 upgrade 복원 방지까지 다룸.

## FreeBSD 15.0을 150MB까지 줄여보기

- FreeBSD 15.0-RELEASE를 PKGBASE로 설치한 뒤, 불필요한 패키지를 제거해서 루트 파일시스템을 **150MB**까지 줄인 실험기. ZFS zstd-19 압축 사용 기준

- 일반적인 PKGBASE 설치(`[X] base` 옵션)는 450MB를 차지함. 여기서 `FreeBSD-set-devel`과 `FreeBSD-set-optional` 셋을 제거하면 150MB까지 내려감

## 삭제 과정의 함정들

- `pkg`가 동작하려면 `FreeBSD-libarchive`, `FreeBSD-openssl-lib`가 필요한 건 금방 파악됨. 하지만 이것만 잠그고 나머지를 삭제하면... `liblzma.so.5`가 없다면서 `libarchive.so.7`이 뻗음
- 숨겨진 의존성이 더 있었음: `FreeBSD-xz-lib`, `FreeBSD-libucl`, `FreeBSD-libcasper`도 잠가줘야 `pkg`가 살아남음. "경험이란 건 필요한 순간 직후에 얻는 법"이라는 저자의 자조가 웃김

- 실제 잠가야 하는 패키지 목록:
  - `FreeBSD-libarchive`
  - `FreeBSD-openssl-lib`
  - `FreeBSD-xz-lib`
  - `FreeBSD-libucl`
  - `FreeBSD-libcasper`

## pkg upgrade가 다 되돌리려는 문제

- 패키지를 열심히 지워놨더니 `pkg upgrade` 하면 73개 패키지를 다시 깔겠다고 나옴. 458MB 추가 필요하다면서
- 해결책: pkg의 SQLite DB(`/var/db/pkg/local.sqlite`)를 직접 열어서 `FreeBSD-set-devel`의 `FreeBSD-set-base` 의존성을 삭제함
  ```sql
  delete from deps where origin = "base/FreeBSD-set-devel";
  ```
- 이후 `pkg upgrade` 시 73개 → 4개 패키지만 설치 시도. 깔끔해짐

## 더 줄일 수 있나?

- 커널 모듈(`/boot/kernel`) 중 안 쓰는 것만 해도 약 40MB. QAT 펌웨어, 무선 NIC 드라이버(iwm, iwn 시리즈), 네트워크 드라이버(if_*) 등이 대부분
- `pkg-static` 바이너리가 13MB를 차지하는데, 이것까지 빼면 100MB 아래도 가능함

> [!NOTE]
> 저자도 인정하듯이 이건 "비지원(unsupported)" 구성이고, PKGBASE가 원래 모듈성보다는 패키징/업그레이드/무결성을 목표로 설계된 거라 "2026년에 3.5인치 플로피에 OS 넣을 일은 없다"는 현실적 코멘트도 덧붙임. 그래도 이런 실험 자체가 시스템을 이해하는 데 좋은 연습이긴 함.

## 핵심 포인트

- 기본 PKGBASE 설치 450MB에서 devel/optional 셋 제거로 150MB 달성
- pkg 동작에 필요한 숨겨진 의존성 5개를 lock으로 보호
- pkg SQLite DB에서 set-devel 의존성 직접 삭제해 upgrade 시 복원 방지
- 커널 모듈 40MB + pkg-static 13MB 추가 제거 시 100MB 이하도 가능

## 인사이트

실용성보다는 시스템 내부 구조를 이해하는 연습으로서 가치 있는 실험. PKGBASE가 모듈성보다 패키징/업그레이드 무결성을 목표로 설계됐다는 점을 잘 보여줌.
