150 MB Minimal FreeBSD Installation

14 min read Original article ↗

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.

EOF