Sometimes an article starts with a simple question or a single message on one of the available social platforms. This is the case today with this article where @ooberober asked:
How small can the root get in its most minimal setup, as far as you know, with pkgbase(8)?
Tiny OS installations sounds similar to me to tiny houses … not sure why.

I wrote about many/most aspects of PKGBASE in the Brave New PKGBASE World article … but not the installation size. I checked one of my FreeBSD 15.0 PKGBASE installations and replied right away – 450 MB of disk space … but maybe that can be pushed further?
What I am gonna share with You today is unsupported – probably unrecomended – you may render your system broken. Only use it in test environment – as I did in a fresh Bhyve VM. You have been warned.
To make you interested – this is what I was able to achieve with FreeBSD 15.0-RELEASE with PKGBASE installation.
root@space:~ # df -m Filesystem 1M-blocks Used Avail Capacity Mounted on zroot/ROOT/default 7437 150 7287 2% / devfs 0 0 0 0% /dev /dev/gpt/efiboot0 255 1 254 0% /boot/efi zroot/home 7287 0 7287 0% /home zroot/tmp 7287 0 7287 0% /tmp zroot/usr/ports 7287 0 7287 0% /usr/ports zroot/var/log 7287 0 7287 0% /var/log zroot/var/mail 7287 0 7287 0% /var/mail zroot/usr/src 7287 0 7287 0% /usr/src zroot/var/tmp 7287 0 7287 0% /var/tmp zroot/var/audit 7287 0 7287 0% /var/audit zroot/var/crash 7287 0 7287 0% /var/crash
About 150 MB of physically used space. I used zstd-19 ZFS compression at bsdinstall(8) installer.
I started with simple plain FreeBSD 15.0-RELEASE installation with these options:
Select Installation Type
- Packages (Tech Preview)
Network or Offline Installation
- Offline (Limited Packages)
Partitioning
- Auto (ZFS)
- ZFS Configuration
- ZFS Pool Options: -O compression=zstd-19
Select System Components
- [X] base
If you select that [X] base option you will end up with 450 MB of physical space used and these sets installed.
root@space:~ # pkg sets | grep : FreeBSD-set-base-15.0: FreeBSD-set-devel-15.0: FreeBSD-set-minimal-15.0: FreeBSD-set-optional-15.0:
As we are working with PKGBASE world – for a start will will try to make sure pkg(8) preserves our ‘cuts’.
root@space:~ # pkg info -d pkg pkg-2.4.2: FreeBSD-libarchive-15.0 (libarchive.so.7) FreeBSD-clibs-15.0 (libc.so.7) FreeBSD-clibs-15.0 (libm.so.5) FreeBSD-clibs-15.0 (libthr.so.3) FreeBSD-openssl-lib-15.0 (libcrypto.so.35) FreeBSD-openssl-lib-15.0 (libssl.so.35) FreeBSD-runtime-15.0 (libelf.so.2) FreeBSD-runtime-15.0 (libjail.so.1) FreeBSD-runtime-15.0 (libutil.so.10) FreeBSD-zlib-15.0 (libz.so.6)
So in theory these are the PKGBASE packages we must preserve to keep pkg(8) alive.
root@space:~ # pkg info -d pkg | awk '{print $1}' | sed 1d | sort -u FreeBSD-clibs-15.0 FreeBSD-libarchive-15.0 FreeBSD-openssl-lib-15.0 FreeBSD-runtime-15.0 FreeBSD-zlib-15.0 root@space:~ # pkg info -d pkg | awk '{print $1}' | sed 1d | sort -u | while read I; do echo -n "$I: "; pkg info ${I} | grep set; done | column -t FreeBSD-clibs-15.0: set : minimal,minimal-jail FreeBSD-libarchive-15.0: set : optional,optional-jail FreeBSD-openssl-lib-15.0: set : optional,optional-jail FreeBSD-runtime-15.0: set : minimal,minimal-jail FreeBSD-zlib-15.0: set : minimal,minimal-jail
As we want to keep both FreeBSD-set-base and FreeBSD-set-minimal sets – that gives us these:
root@space:~ # pkg info -d pkg | awk '{print $1}' | sed 1d | sort -u | while read I; do echo -n "$I: "; pkg info ${I} | grep set; done | column -t | grep -v minimal FreeBSD-libarchive-15.0: set : optional,optional-jail FreeBSD-openssl-lib-15.0: set : optional,optional-jail
So in theory we can remove all packages of FreeBSD-set-devel and FreeBSD-set-minimal sets and just keep these FreeBSD-libarchive and FreeBSD-openssl-lib packages to have working pkg(8) right?

Unfortunately no – as master Yoda once said – “No, there is another.” – and the answer is that both FreeBSD-xz-lib and FreeBSD-libucl packages to not keep you waiting – but we will come to that later.
For a start lets check FreeBSD-libarchive and FreeBSD-openssl-lib packages.
root@space:~ # pkg info -d FreeBSD-set-devel-15.0 | wc -l 70 root@space:~ # pkg info -d FreeBSD-set-devel-15.0 | grep -v -e FreeBSD-libarchive-15 -e FreeBSD-openssl-lib-15 | wc -l 70 root@space:~ # pkg info -d FreeBSD-set-optional-15.0 | wc -l 93 root@space:~ # pkg info -d FreeBSD-set-optional-15.0 | grep -v -e FreeBSD-libarchive-15 -e FreeBSD-openssl-lib-15 | wc -l 91
So they are both in FreeBSD-set-optional set.
We can now lock needed ones.
root@space:~ # pkg lock -y FreeBSD-libarchive Locking FreeBSD-libarchive-15.0 root@space:~ # pkg lock -y FreeBSD-openssl-lib Locking FreeBSD-openssl-lib-15.0
We should also create a ‘backup’ ZFS Boot Environment before we potentially break our system.
root@space:~ # bectl create backup
Now … if we start deleting these – we will come to this point below.
(...)
Installed packages to be REMOVED:
FreeBSD-xz-lib: 15.0
Number of packages to be removed: 1
[1/1] Deinstalling FreeBSD-xz-lib-15.0...
[1/1] Deleting files for FreeBSD-xz-lib-15.0: 100%
ld-elf.so.1: Shared object "liblzma.so.5" not found, required by "libarchive.so.7"
ld-elf.so.1: Shared object "liblzma.so.5" not found, required by "libarchive.so.7"
ld-elf.so.1: Shared object "liblzma.so.5" not found, required by "libarchive.so.7"
(...)
Same with the other one.
(...)
Installed packages to be REMOVED:
FreeBSD-libucl: 15.0
Number of packages to be removed: 1
[1/1] Deinstalling FreeBSD-libucl-15.0...
[1/1] Deleting files for FreeBSD-libucl-15.0: 100%
ld-elf.so.1: Shared object "libprivateucl.so.1" not found, required by "pkg"
ld-elf.so.1: Shared object "libprivateucl.so.1" not found, required by "pkg"
ld-elf.so.1: Shared object "libprivateucl.so.1" not found, required by "pkg"
(...)
… and yes – we do not want that.
The pkg-static(8) will still work fortunately.
The disappointing thing about so called experience is that you get it just after you needed it – and its no different this time.
So – we also need to lock these:
- FreeBSD-xz-lib
- FreeBSD-libucl
- FreeBSD-libcasper
Lets do that.
root@space:~ # pkg lock -y FreeBSD-xz-lib Locking FreeBSD-xz-lib-15.0 root@space:~ # pkg lock -y FreeBSD-libucl Locking FreeBSD-libucl-15.0 root@space:~ # pkg lock -y FreeBSD-libcasper Locking FreeBSD-libcasper-15.0
Now – we can remove these sets and packages.
Lets just make sure that lock really works.
root@space:~ # pkg delete -fy FreeBSD-libarchive Checking integrity... done (0 conflicting) The following package(s) are locked or vital and may not be removed: FreeBSD-libarchive 1 packages requested for removal: 1 locked, 0 missing
Yep. Works. Lets go hunting.
root@space:~ # pkg lock -l Currently locked packages: FreeBSD-libarchive-15.0 FreeBSD-libucl-15.0 FreeBSD-openssl-lib-15.0 FreeBSD-xz-lib-15.0 FreeBSD-libcasper-15.0 root@space:~ # pkg info -d FreeBSD-set-devel-15.0 | tr ':' ' ' | while read PKG; do pkg delete -fy ${PKG}; done root@space:~ # pkg info -d FreeBSD-set-optional-15.0 | tr ':' ' ' | while read PKG; do pkg delete -fy ${PKG}; done
After these operations … and needed locks for three mentioned packages You should have a working FreeBSD 15.0-RELEASE system that takes about 150 MB of space.
The downside? The pkg(8) will still try to reinstall most/all the removed packages during upgrade.
root@space:~ # pkg upgrade Updating FreeBSD-ports repository catalogue... Fetching meta.conf: 100% 179 B 0.2 k/s 00:01 Fetching data: 100% 10 MiB 514.3 k/s 00:21 Processing entries: 100% FreeBSD-ports repository update completed. 36679 packages processed. Updating FreeBSD-ports-kmods repository catalogue... Fetching meta.conf: 100% 179 B 0.2 k/s 00:01 Fetching data: 100% 35 KiB 35.7 k/s 00:01 Processing entries: 100% FreeBSD-ports-kmods repository update completed. 239 packages processed. Updating FreeBSD-base repository catalogue... Fetching meta.conf: 100% 179 B 0.2 k/s 00:01 Fetching data: 100% 80 KiB 81.5 k/s 00:01 Processing entries: 100% FreeBSD-base repository update completed. 496 packages processed. All repositories are up to date. Updating database digests format: 100% Checking for upgrades (9 candidates): 100% Processing candidates (9 candidates): 100% The following 79 package(s) will be affected (of 0 checked): New packages to be INSTALLED: FreeBSD-atf-dev: 15.0 [FreeBSD-base] FreeBSD-audit-dev: 15.0 [FreeBSD-base] FreeBSD-blocklist-dev: 15.0 [FreeBSD-base] FreeBSD-bluetooth-dev: 15.0 [FreeBSD-base] FreeBSD-bmake: 15.0 [FreeBSD-base] FreeBSD-bootloader-dev: 15.0 [FreeBSD-base] FreeBSD-bsnmp-dev: 15.0 [FreeBSD-base] FreeBSD-bzip2-dev: 15.0 [FreeBSD-base] FreeBSD-clang: 15.0 [FreeBSD-base] FreeBSD-clang-dev: 15.0 [FreeBSD-base] FreeBSD-clibs-dev: 15.0 [FreeBSD-base] FreeBSD-clibs-lib32: 15.0 [FreeBSD-base] FreeBSD-ctf: 15.0 [FreeBSD-base] FreeBSD-ctf-dev: 15.0 [FreeBSD-base] FreeBSD-ctf-lib: 15.0 [FreeBSD-base] FreeBSD-devmatch-dev: 15.0 [FreeBSD-base] FreeBSD-dtrace-dev: 15.0 [FreeBSD-base] FreeBSD-efi-tools-dev: 15.0 [FreeBSD-base] FreeBSD-fetch-dev: 15.0 [FreeBSD-base] FreeBSD-flua-dev: 15.0 [FreeBSD-base] FreeBSD-kerberos-dev: 15.0 [FreeBSD-base] FreeBSD-kyua: 15.0 [FreeBSD-base] FreeBSD-lib9p-dev: 15.0 [FreeBSD-base] FreeBSD-libarchive-dev: 15.0 [FreeBSD-base] FreeBSD-libbegemot-dev: 15.0 [FreeBSD-base] FreeBSD-libblocksruntime-dev: 15.0 [FreeBSD-base] FreeBSD-libbsdstat-dev: 15.0 [FreeBSD-base] FreeBSD-libcasper-dev: 15.0 [FreeBSD-base] FreeBSD-libcompat-dev: 15.0 [FreeBSD-base] FreeBSD-libcompiler_rt-dev: 15.0 [FreeBSD-base] FreeBSD-libcuse-dev: 15.0 [FreeBSD-base] FreeBSD-libdwarf-dev: 15.0 [FreeBSD-base] FreeBSD-libevent1-dev: 15.0 [FreeBSD-base] FreeBSD-libexecinfo-dev: 15.0 [FreeBSD-base] FreeBSD-libipt-dev: 15.0 [FreeBSD-base] FreeBSD-libldns-dev: 15.0 [FreeBSD-base] FreeBSD-libmagic-dev: 15.0 [FreeBSD-base] FreeBSD-libmilter-dev: 15.0 [FreeBSD-base] FreeBSD-libpathconv-dev: 15.0 [FreeBSD-base] FreeBSD-librpcsec_gss-dev: 15.0 [FreeBSD-base] FreeBSD-librss-dev: 15.0 [FreeBSD-base] FreeBSD-libsqlite3-dev: 15.0 [FreeBSD-base] FreeBSD-libthread_db-dev: 15.0 [FreeBSD-base] FreeBSD-libucl-dev: 15.0 [FreeBSD-base] FreeBSD-libvgl-dev: 15.0 [FreeBSD-base] FreeBSD-libvmmapi-dev: 15.0 [FreeBSD-base] FreeBSD-libyaml-dev: 15.0 [FreeBSD-base] FreeBSD-lld: 15.0 [FreeBSD-base] FreeBSD-lldb: 15.0 [FreeBSD-base] FreeBSD-lldb-dev: 15.0 [FreeBSD-base] FreeBSD-local-unbound-dev: 15.0 [FreeBSD-base] FreeBSD-mtree: 15.0 [FreeBSD-base] FreeBSD-natd-dev: 15.0 [FreeBSD-base] FreeBSD-ncurses-dev: 15.0 [FreeBSD-base] FreeBSD-netmap-dev: 15.0 [FreeBSD-base] FreeBSD-openssl-dev: 15.0p2 [FreeBSD-base] FreeBSD-pf-dev: 15.0 [FreeBSD-base] FreeBSD-pmc-dev: 15.0 [FreeBSD-base] FreeBSD-runtime-dev: 15.0 [FreeBSD-base] FreeBSD-set-devel: 15.0 [FreeBSD-base] FreeBSD-set-optional: 15.0 [FreeBSD-base] FreeBSD-smbutils-dev: 15.0 [FreeBSD-base] FreeBSD-sound-dev: 15.0 [FreeBSD-base] FreeBSD-ssh-dev: 15.0 [FreeBSD-base] FreeBSD-tcpd-dev: 15.0 [FreeBSD-base] FreeBSD-toolchain: 15.0 [FreeBSD-base] FreeBSD-toolchain-dev: 15.0 [FreeBSD-base] FreeBSD-ufs-dev: 15.0 [FreeBSD-base] FreeBSD-utilities-dev: 15.0 [FreeBSD-base] FreeBSD-xz-dev: 15.0 [FreeBSD-base] FreeBSD-yp: 15.0 [FreeBSD-base] FreeBSD-zfs-dev: 15.0 [FreeBSD-base] FreeBSD-zlib-dev: 15.0 [FreeBSD-base] Installed packages to be UPGRADED: FreeBSD-devmatch: 15.0 -> 15.0p2 [FreeBSD-base] FreeBSD-kernel-generic: 15.0 -> 15.0p2 [FreeBSD-base] FreeBSD-openssl: 15.0 -> 15.0p2 [FreeBSD-base] FreeBSD-rescue: 15.0 -> 15.0p2 [FreeBSD-base] FreeBSD-runtime: 15.0 -> 15.0p2 [FreeBSD-base] FreeBSD-utilities: 15.0 -> 15.0p1 [FreeBSD-base] Number of packages to be installed: 73 Number of packages to be upgraded: 6 The process will require 458 MiB more space. 190 MiB to be downloaded. Proceed with this action? [y/N]: n
We can overcome that by removing the base/FreeBSD-set-devel dependency on base/FreeBSD-set-base.
This way pkg(8) would not want to reinstall base/FreeBSD-set-devel next time during upgrade.
Before we do that we will backup the pkg(8) SQLite database at /var/db/pkg/local.sqlite file.
root@space:~ # cp /var/db/pkg/local.sqlite /var/db/pkg/local.sqlite.BACKUP root@space:~ # pkg shell sqlite> .header on sqlite> .mode column sqlite> .tables annotation pkg_annotation pkg_provides categories pkg_categories pkg_requires config_files pkg_conflicts pkg_script deps pkg_directories pkg_shlibs_provided directories pkg_groups pkg_shlibs_required files pkg_licenses pkg_users groups pkg_lock provides licenses pkg_lock_pid requires lua_script pkg_lua_script script option pkg_option shlibs option_desc pkg_option_default users packages pkg_option_desc
The two important tables that are in our interest are deps and packages here.
This is how relation between these two tables look in DBeaver tool.

These are the dependencies.
sqlite> select * from deps where origin like '%-set-%'; origin name version package_id ------------------------- -------------------- ------- ---------- base/FreeBSD-set-devel FreeBSD-set-devel 15.0 208 base/FreeBSD-set-minimal FreeBSD-set-minimal 15.0 208 base/FreeBSD-set-optional FreeBSD-set-optional 15.0 208 sqlite> select origin,package_id from deps where origin = 'base/FreeBSD-set-devel'; origin package_id ---------------------- ---------- base/FreeBSD-set-devel 208 sqlite> select id,name from packages where id = 208; id name --- ---------------- 208 FreeBSD-set-base
Now we will DELETE the base/FreeBSD-set-devel dependency on base/FFreeBSD-set-base set.
sqlite> delete from deps where origin = "base/FreeBSD-set-devel"; sqlite> .quit
It can also be done non-interactively this way below.
root@space: # echo 'delete from deps where origin = "base/FreeBSD-set-devel";' | pkg shell
Lets check how pkg(8) upgrade will now behave.
root@space:~ # pkg upgrade Updating FreeBSD-ports repository catalogue... FreeBSD-ports repository is up to date. Updating FreeBSD-ports-kmods repository catalogue... FreeBSD-ports-kmods repository is up to date. Updating FreeBSD-base repository catalogue... FreeBSD-base repository is up to date. All repositories are up to date. Checking for upgrades (9 candidates): 100% Processing candidates (9 candidates): 100% The following 10 package(s) will be affected (of 0 checked): New packages to be INSTALLED: FreeBSD-bmake: 15.0 [FreeBSD-base] FreeBSD-ctf-lib: 15.0 [FreeBSD-base] FreeBSD-set-optional: 15.0 [FreeBSD-base] FreeBSD-yp: 15.0 [FreeBSD-base] Installed packages to be UPGRADED: FreeBSD-devmatch: 15.0 -> 15.0p2 [FreeBSD-base] FreeBSD-kernel-generic: 15.0 -> 15.0p2 [FreeBSD-base] FreeBSD-openssl: 15.0 -> 15.0p2 [FreeBSD-base] FreeBSD-rescue: 15.0 -> 15.0p2 [FreeBSD-base] FreeBSD-runtime: 15.0 -> 15.0p2 [FreeBSD-base] FreeBSD-utilities: 15.0 -> 15.0p1 [FreeBSD-base] Number of packages to be installed: 4 Number of packages to be upgraded: 6 The process will require 1 MiB more space. 63 MiB to be downloaded. Proceed with this action? [y/N]: n
Better.
The pkg(8) no longer wants to reinstall the base/FreeBSD-set-devel set and its packages.
You can also check other Less Known pkg(8) Features here.
So there You have it.
Minimal unsupported FreeBSD 15.0-RELEASE installation in PKGBASE fashion.
To be honest … I was thinking that PKGBASE would be more ‘modular’ to say the least … but seems that packaging/upgrades/integrity are really its goals – not modularity … and in todays world of ‘gigabytes’ and ‘terabytes’ the disk space savings are not that important. Its 2026 … we do not put entire OS into 3.5 inch floppy anymore … nowhere to read or write such floppy either.
Some additional space showing commands.
root@space:~ # df -h / Filesystem Size Used Avail Capacity Mounted on zroot/ROOT/default 7.3G 150M 7.1G 2% / root@space:~ # bectl list BE Active Mountpoint Space Created default NR / 150M 2026-01-31 18:23
List of installed pkg(8) packages.
root@space:~ # pkg info -as | sort -k 2 -h FreeBSD-set-base-15.0 0.00B FreeBSD-powerd-15.0 23.3KiB FreeBSD-certctl-15.0 26.1KiB FreeBSD-nuageinit-15.0 40.8KiB FreeBSD-devmatch-15.0 43.8KiB FreeBSD-hyperv-tools-15.0 43.9KiB FreeBSD-at-15.0 48.9KiB FreeBSD-ufs-lib-15.0 50.5KiB FreeBSD-bzip2-15.0 50.8KiB FreeBSD-fwget-15.0 54.5KiB FreeBSD-resolvconf-15.0 56.4KiB FreeBSD-newsyslog-15.0 57.4KiB FreeBSD-periodic-15.0 61.6KiB FreeBSD-bzip2-lib-15.0 80.7KiB FreeBSD-syslogd-15.0 82.5KiB FreeBSD-devd-15.0 87.1KiB FreeBSD-cron-15.0 91.2KiB FreeBSD-zlib-15.0 99.4KiB FreeBSD-fetch-15.0 110KiB FreeBSD-libcasper-15.0 142KiB FreeBSD-libucl-15.0 142KiB FreeBSD-dhclient-15.0 150KiB FreeBSD-efi-tools-15.0 152KiB FreeBSD-xz-lib-15.0 198KiB FreeBSD-rc-15.0 406KiB FreeBSD-geom-15.0 510KiB FreeBSD-ncurses-15.0 527KiB FreeBSD-pkg-bootstrap-15.0 579KiB FreeBSD-ppp-15.0 579KiB FreeBSD-ncurses-lib-15.0 586KiB FreeBSD-ufs-15.0 619KiB FreeBSD-mandoc-15.0 638KiB FreeBSD-vi-15.0 775KiB FreeBSD-zoneinfo-15.0 828KiB FreeBSD-libarchive-15.0 885KiB FreeBSD-caroot-15.0 1.03MiB FreeBSD-zfs-15.0 1.25MiB FreeBSD-vt-data-15.0 1.54MiB FreeBSD-wpa-15.0 1.59MiB FreeBSD-kernel-man-15.0 2.63MiB FreeBSD-clibs-15.0 3.79MiB FreeBSD-zfs-lib-15.0 4.58MiB FreeBSD-bootloader-15.0 6.50MiB FreeBSD-openssl-lib-15.0 7.26MiB FreeBSD-runtime-15.0 8.81MiB FreeBSD-firmware-iwm-15.0 13.8MiB FreeBSD-rescue-15.0 19.0MiB FreeBSD-locales-15.0 24.3MiB FreeBSD-utilities-15.0 48.6MiB pkg-2.4.2 53.4MiB FreeBSD-kernel-generic-15.0 153MiB
On of the biggest packages is … pkg(8) – and about 70% of that space is the static pkg-static(8) binary.
root@space:~ # pkg info -l pkg | sed 1d | xargs du -smc | sort -n | tail -10 1 /usr/local/share/man/man8/pkg-upgrade.8.gz 1 /usr/local/share/man/man8/pkg-version.8.gz 1 /usr/local/share/man/man8/pkg-which.8.gz 1 /usr/local/share/man/man8/pkg.8.gz 1 /usr/local/share/zsh/site-functions/_pkg 2 /usr/local/lib/libpkg.a 2 /usr/local/lib/libpkg.so.4 2 /usr/local/sbin/pkg 13 /usr/local/sbin/pkg-static 19 total
Lets check the largest one – the FreeBSD kernel package.
This system currently only has zfs.ko kernel module loaded for ZFS support.
root@space:~ # kldstat Id Refs Address Size Name 1 10 0xffffffff80200000 1f4daa0 kernel 2 1 0xffffffff8214e000 620c10 zfs.ko
Lets check the largest kernel modules we can live without.
root@space:~ # cd /boot/kernel root@space:/boot/kernel # du -skc qat* \ iw* \ if_* \ pmspcv* \ ispfw* \ sfxge* \ ice_ddp* \ hpt27xx* \ cam* \ ipl* \ ocs_fc* \ sctp* 577 qat_200xx_fw.ko 337 qat_4xxx_fw.ko 185 qat_api.ko 69 qat_c2xxx.ko 157 qat_c2xxxfw.ko 577 qat_c3xxx_fw.ko 1413 qat_c4xxx_fw.ko 829 qat_c62x_fw.ko 201 qat_common.ko 625 qat_dh895xcc_fw.ko 105 qat_hw.ko 57 qat.ko 161 iw_cxgbe.ko 133 iwi_bss.ko 129 iwi_ibss.ko 133 iwi_monitor.ko 597 iwm3160fw.ko 537 iwm3168fw.ko 637 iwm7260fw.ko 565 iwm7265Dfw.ko 693 iwm7265fw.ko 1089 iwm8000Cfw.ko 953 iwm8265fw.ko 1385 iwm9000fw.ko 1385 iwm9260fw.ko 233 iwn1000fw.ko 233 iwn100fw.ko 425 iwn105fw.ko 437 iwn135fw.ko 433 iwn2000fw.ko 441 iwn2030fw.ko 109 iwn4965fw.ko 233 iwn5000fw.ko 229 iwn5150fw.ko 281 iwn6000fw.ko 413 iwn6000g2afw.ko 417 iwn6000g2bfw.ko 289 iwn6050fw.ko 41 if_ae.ko 49 if_age.ko 57 if_alc.ko 49 if_ale.ko 9 if_ath.ko 29 if_aue.ko 33 if_axe.ko 33 if_axge.ko 141 if_axp.ko 229 if_bce.ko 37 if_bfe.ko 85 if_bge.ko 221 if_bnxt.ko 49 if_bridge.ko 117 if_bwi.ko 181 if_bwn.ko 1269 if_bxe.ko 45 if_cas.ko 5 if_cc.ko 5 if_ccv.ko 37 if_cdce.ko 29 if_cdceem.ko 25 if_cue.ko 173 if_cxgb.ko 469 if_cxgbe.ko 45 if_cxgbev.ko 5 if_cxl.ko 5 if_cxlv.ko 53 if_dc.ko 21 if_disc.ko 21 if_edsc.ko 237 if_em.ko 145 if_ena.ko 25 if_enc.ko 57 if_enic.ko 25 if_epair.ko 45 if_et.ko 29 if_fwe.ko 37 if_fwip.ko 49 if_fxp.ko 37 if_gem.ko 33 if_gif.ko 41 if_gre.ko 89 if_gve.ko 97 if_iavf.ko 25 if_ic.ko 377 if_ice.ko 1 if_igb.ko 73 if_igc.ko 25 if_infiniband.ko 25 if_ipheth.ko 57 if_ipw.ko 69 if_iwi.ko 781 if_iwlwifi.ko 133 if_iwm.ko 109 if_iwn.ko 185 if_ix.ko 209 if_ixl.ko 1 if_ixlv.ko 157 if_ixv.ko 49 if_jme.ko 29 if_kue.ko 61 if_lagg.ko 33 if_le.ko 33 if_lge.ko 813 if_lio.ko 61 if_malo.ko 93 if_mana.ko 29 if_me.ko 25 if_mgb.ko 33 if_mos.ko 57 if_msk.ko 37 if_muge.ko 105 if_mwl.ko 69 if_mxge.ko 33 if_my.ko 49 if_nfe.ko 41 if_nge.ko 25 if_ntb.ko 113 if_oce.ko 65 if_otus.ko 53 if_ovpn.ko 1317 if_qlnxe.ko 1221 if_qlnxev.ko 69 if_qlxgb.ko 1921 if_qlxgbe.ko 85 if_qlxge.ko 121 if_ral.ko 57 if_re.ko 37 if_rl.ko 69 if_rsu.ko 509 if_rtw88.ko 1441 if_rtw89.ko 65 if_rtwn_pci.ko 97 if_rtwn_usb.ko 29 if_rue.ko 65 if_rum.ko 101 if_run.ko 37 if_sge.ko 37 if_sis.ko 49 if_sk.ko 37 if_smsc.ko 37 if_ste.ko 33 if_stf.ko 37 if_stge.ko 33 if_sume.ko 133 if_ti.ko 45 if_tuntap.ko 53 if_uath.ko 29 if_udav.ko 49 if_upgt.ko 53 if_ural.ko 45 if_ure.ko 33 if_urndis.ko 69 if_urtw.ko 41 if_vge.ko 37 if_vlan.ko 41 if_vmx.ko 41 if_vr.ko 37 if_vte.ko 61 if_vtnet.ko 49 if_vxlan.ko 97 if_wg.ko 93 if_wpi.ko 45 if_xl.ko 69 if_zyd.ko 2033 pmspcv.ko 1329 ispfw.ko 565 sfxge.ko 165 ice_ddp.ko 601 hpt27xx.ko 529 cam.ko 453 ipl.ko 517 ocs_fc.ko 477 sctp.ko 41555 total
Another about 40 MB that can be removed assuming you do not need these kernel modules.
That means we can get even under 100 MB if we remove 40 MB of unused kernel modules and 13 MB of pkg-static(8) binary.
Also keep in mind that You have entire static FreeBSD Rescue System available under /rescue dir.
Not sure how (if anyhow) this helps – but still – wanted to share.
Let me know – if you tried it – if I missed any additional dependencies that should be kept.
Pingback: 150MB็ๆๅฐFreeBSDๅฎ่ฃ - ๅๆง็็ ๅ
Pingback: Vlado erdvฤ
Pingback: Valuable News – 2026/02/02 | ๐๐๐๐๐๐๐๐
If you compiled your own kernel how much more would you save on disk? (not just exclude the .ko)
LikeLike
Kernel with ZFS compression applied takes about 15 MB – so a pretty minimal kernel would used about 5 MB of space. Not much.
LikeLiked by 1 person
My system took about 136MB after fresh install.
https://forums.freebsd.org/threads/freebsd-screen-shots.8877/post-738188
LikeLiked by 1 person
Nice ๐
Would You mind sharing the ‘COREBSD’ kernel config?
LikeLike
For everyday running kernel it’s https://github.com/h4ckee/CoreBSD/blob/master/kernel/LAPTOP which sources https://github.com/h4ckee/CoreBSD/blob/master/kernel/BASE.
For installation ISO it’s https://github.com/h4ckee/CoreBSD/blob/master/kernel/COREBSD
LikeLiked by 1 person
Thank You for sharing ๐
LikeLike
For me, the problem is probably not the size of the base system, but the dependencies that require the installation of 2Gb for any base desktop/wm, when, for example, Arch makes it more lighweight
LikeLike
Its just a space on the disk anyway … even today the 16 or 32 GB RAM USB pendrive for portable FreeBSD installation costs like $5-8 … its nothing ๐
But it was fun to try how small FreeBSD can be in a default install.
LikeLike