Planet

Last updated: 2026-02-10 18:45:01 UTC

Poudriere symlinks for repos

Post by Dan Langille via Dan Langille's Other Diary »

I have some repos which are specific to certain tasks.

Every time I upgrade major version (as I just did from FreeBSD 14.3 to FreeBSD 15.0), I need to remember to go in and add in those symlinks.

I forget just about every time. I get errors like this:

# pkg upgrade -f
Updating local repository catalogue...
pkg: Repository local has a wrong packagesite, need to re-create database
pkg: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64-mysql84//meta.conf: Failed writing received data to disk/application
pkg: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64-mysql84//meta.txz: Failed writing received data to disk/application
repository local has no meta file, using default settings
pkg: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64-mysql84//data.pkg: Failed writing received data to disk/application
pkg: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64-mysql84//data.tzst: Failed writing received data to disk/application
pkg: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64-mysql84//packagesite.pkg: Failed writing received data to disk/application
pkg: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64-mysql84//packagesite.tzst: Failed writing received data to disk/application
Unable to update repository local
Error updating repositories!

I usually concentrate on the “Failed writing received data to disk/application” and overlook the “Failed to fetch”.

This is me, adding those symlinks, just now:

[13:23 pkg01 dvl /usr/local/poudriere/data/packages] % ls -l
total 191
drwxr-xr-x  3 root wheel 15 2025.10.16 11:57 143amd64-default/
drwxr-xr-x  3 root wheel 13 2026.01.25 15:51 143amd64-default-mysql84/
drwxr-xr-x  3 root wheel 15 2026.02.10 04:49 143amd64-default-pg16/
drwxr-xr-x  3 root wheel 15 2026.02.10 05:02 143amd64-default-pg18/
drwxr-xr-x  3 root wheel 15 2026.02.10 05:39 143amd64-default-php82/
drwxr-xr-x  3 root wheel 15 2026.02.10 04:42 143amd64-default-primary/
drwxr-xr-x  3 root wheel 13 2026.02.09 04:50 143amd64-default-python312/
drwxr-xr-x  3 root wheel 13 2026.02.10 05:54 143amd64-default-python313/
drwxr-xr-x  3 root wheel 13 2026.02.10 06:08 143amd64-default-python314/
drwxr-xr-x  3 root wheel 15 2026.02.01 14:05 143amd64-default-testing/
drwxr-xr-x  3 root wheel 15 2026.02.10 04:42 143amd64-default-unifi/
drwxr-xr-x  3 root wheel 15 2025.11.03 16:09 143amd64-default-wikis/
drwxr-xr-x  3 root wheel 15 2025.10.15 12:49 143amd64-dvl/
drwxr-xr-x  3 root wheel 15 2026.02.07 16:38 143amd64-dvl-testing/
drwxr-xr-x  3 root wheel 13 2026.02.10 06:43 150amd64-default-pg16/
drwxr-xr-x  3 root wheel 13 2026.02.10 07:00 150amd64-default-pg18/
drwxr-xr-x  3 root wheel 13 2026.02.10 07:41 150amd64-default-php82/
drwxr-xr-x  3 root wheel 13 2026.02.10 06:38 150amd64-default-primary/
drwxr-xr-x  3 root wheel 13 2026.02.09 19:25 150amd64-default-python312/
drwxr-xr-x  3 root wheel 13 2026.02.10 07:59 150amd64-default-python313/
drwxr-xr-x  3 root wheel 13 2026.02.10 08:18 150amd64-default-python314/
drwxr-xr-x  3 root wheel 13 2026.02.10 06:38 150amd64-default-unifi/
lrwxr-xr-x  1 root wheel 24 2025.09.25 17:45 FreeBSD:14:amd64 -> 143amd64-default-primary
lrwxr-xr-x  1 root wheel 22 2025.11.03 12:39 FreeBSD:14:amd64-default-unifi -> 143amd64-default-unifi
lrwxr-xr-x  1 root wheel 24 2026.01.25 16:38 FreeBSD:14:amd64-mysql84 -> 143amd64-default-mysql84
lrwxr-xr-x  1 root wheel 21 2025.11.03 12:40 FreeBSD:14:amd64-pg16 -> 143amd64-default-pg16
lrwxr-xr-x  1 root wheel 21 2025.11.03 12:40 FreeBSD:14:amd64-pg18 -> 143amd64-default-pg18
lrwxr-xr-x  1 root wheel 24 2025.11.03 12:40 FreeBSD:14:amd64-primary -> 143amd64-default-primary
lrwxr-xr-x  1 root wheel 24 2026.02.09 16:11 FreeBSD:15:amd64 -> 150amd64-default-primary
[13:23 pkg01 dvl /usr/local/poudriere/data/packages] % sudo ln -s 150amd64-default-pg16 FreeBSD:15:amd64-pg16
[13:23 pkg01 dvl /usr/local/poudriere/data/packages] % sudo ln -s 150amd64-default-pg18 FreeBSD:15:amd64-pg18
[13:23 pkg01 dvl /usr/local/poudriere/data/packages] % sudo ln -s 150amd64-default-php82 FreeBSD:15:amd64-php82
[13:24 pkg01 dvl /usr/local/poudriere/data/packages] % sudo ln -s 150amd64-default-unifi FreeBSD:15:amd64-unifi

The symlinks I added at the bottom allow me to use this within my repo URL:

[13:31 mysql02 dvl ~] % pkg repos
local: { 
    url             : "https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64/",
    enabled         : yes,
    priority        : 0,
    signature_type  : "PUBKEY",
    pubkey          : "/etc/ssl/slocum.unixathome.org.cert"
  }
[13:31 mysql02 dvl ~] % grep url /usr/local/etc/pkg/repos/local.conf
   url: "https://fedex.int.unixathome.org/packages/${ABI}/"
[13:32 mysql02 dvl ~] % 

As you can see, I’m using the macro ${ABI}, which expands to FreeBSD:15:amd64.

However, some jails need PostgreSQL 16 and some need PostgreSQL 18 – while they can exist in the same repo, some applications, net-mgmt/nrpe in particular, must be linked against one release. Hence, my PostgreSQL-specific repos. Similar reasons exist for the other suffixes you see above.

Top

FreeBSD 15.0 – after upgrade, installing my own packages

Post by Dan Langille via Dan Langille's Other Diary »

I build my own FreeBSD packages using poudriere. The chicken-and-egg situation: I can’t build FreeBSD 15.0 packages until I’m on FreeBSD 15.0 – and upgrading to FreeBSD 15 involves a step of upgrading all your packages before the final steps of the upgrade.

What do I do?

I disable my repos and enable the FreeBSD repos. If you’re using your own repos, you should already know how to do this.

In this post:

  • FreeBSD 15.0
  • fun & games

Swapping the repos around

At the end of a previous post (Updating my poudriere jail after updating the host to FreeBSD 15.0), the last step was starting a build of my FreeBSD packages. Today, I want to swap back to my own packages from the packages I installed [last night] from the FreeBSD project.

First step, toggle some enables. These are the now-active repos in my pkg01 jail:

[16:11 pkg01 dvl /usr/local/etc/pkg/repos] % pkg repos
FreeBSD-ports: { 
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkg"
  }
FreeBSD-ports-kmods: { 
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkg"
  }
FreeBSD-base: { 
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/base_release_0",
    enabled         : no,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkgbase-15"
  }
local: { 
    url             : "https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64/",
    enabled         : yes,
    priority        : 0,
    signature_type  : "PUBKEY",
    pubkey          : "/etc/ssl/slocum.unixathome.org.cert"
  }

Let’s look at this file:

[16:12 pkg01 dvl /etc/pkg] % cat FreeBSD.conf 
#
# To disable a repository, instead of modifying or removing this file,
# create a /usr/local/etc/pkg/repos/FreeBSD.conf file, e.g.:
#
#   mkdir -p /usr/local/etc/pkg/repos
#   echo "FreeBSD-ports: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf
#   echo "FreeBSD-ports-kmods: { enabled: no }" >> /usr/local/etc/pkg/repos/FreeBSD.conf
#
# Note that the FreeBSD-base repository is disabled by default.
#

FreeBSD-ports: {
  url: "pkg+https://pkg.FreeBSD.org/${ABI}/quarterly",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}
FreeBSD-ports-kmods: {
  url: "pkg+https://pkg.FreeBSD.org/${ABI}/kmods_quarterly_${VERSION_MINOR}",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}
FreeBSD-base: {
  url: "pkg+https://pkg.FreeBSD.org/${ABI}/base_release_${VERSION_MINOR}",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkgbase-${VERSION_MAJOR}",
  enabled: no
}

That matches up with some of the output from the previous command. Let’s disable two of those.

root@pkg01:~ # echo "FreeBSD-ports: { enabled: no }" > /usr/local/etc/pkg/repos/FreeBSD.conf
root@pkg01:~ # echo "FreeBSD-ports-kmods: { enabled: no }" >> /usr/local/etc/pkg/repos/FreeBSD.conf
root@pkg01:~ # pkg repos
FreeBSD-base: { 
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/base_release_0",
    enabled         : no,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkgbase-15"
  }
local: { 
    url             : "https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64/",
    enabled         : yes,
    priority        : 0,
    signature_type  : "PUBKEY",
    pubkey          : "/etc/ssl/slocum.unixathome.org.cert"
  }
root@pkg01:~ # 

There, now it’s just base (disabled) and my local pkg repo server.

Swapping to the new packages

I’m going to run this command, just because I can. It’s not necessary, but sometimes I run it.

[16:10 pkg01 dvl /usr/local/etc/pkg/repos] % sudo pkg update -f
Updating FreeBSD-ports repository catalogue...
[pkg01.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[pkg01.int.unixathome.org] Fetching data: 100%   10 MiB  10.8 M/s    00:01    
Processing entries: 100%
FreeBSD-ports repository update completed. 36667 packages processed.
Updating FreeBSD-ports-kmods repository catalogue...
[pkg01.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[pkg01.int.unixathome.org] Fetching data: 100%   35 KiB  35.7 k/s    00:01    
Processing entries: 100%
FreeBSD-ports-kmods repository update completed. 239 packages processed.
Updating local repository catalogue...
pkg: Repository local has a wrong packagesite, need to re-create database
[pkg01.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[pkg01.int.unixathome.org] Fetching data: 100%  343 KiB 351.3 k/s    00:01    
Processing entries: 100%
local repository update completed. 980 packages processed.
All repositories are up to date.

Now, I’m going to swap the packages over. These are the commands (kept in my git repo) I run to swap to a new pkg repo.

Get new pkg command

root@pkg01:~ # pkg-static install -f pkg
Updating local repository catalogue...
local repository is up to date.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):

Installed packages to be REINSTALLED:
	pkg-2.5.1 [local]

Number of packages to be reinstalled: 1

7 MiB to be downloaded.

Proceed with this action? [y/N]: y
[pkg01.int.unixathome.org] [1/1] Fetching pkg-2.5.1: 100%    7 MiB   6.9 M/s    00:01    
Checking integrity... done (0 conflicting)
[pkg01.int.unixathome.org] [1/1] Reinstalling pkg-2.5.1...
[pkg01.int.unixathome.org] [1/1] Extracting pkg-2.5.1: 100%
root@pkg01:~ # 

Reinstall all packages

root@pkg01:~ # pkg upgrade -f
Updating local repository catalogue...
local repository is up to date.
All repositories are up to date.
Checking for upgrades (130 candidates): 100%
Processing candidates (130 candidates): 100%
The following 129 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
	duf: 0.9.1_3 -> 0.9.1_4 [local]
	expat: 2.7.3 -> 2.7.4 [local]
...
	python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
	SamDruckerClientShell-0.2.7 [local]
	abseil-20250127.1 [local]
	anvil-0.0.20 [local]
...
	xxhash-0.8.3 [local]
	zsh-5.9_5 [local]
	zstd-1.5.7_1 [local]

Number of packages to be upgraded: 19
Number of packages to be reinstalled: 110

149 MiB to be downloaded.

Proceed with this action? [y/N]: y

Then it fetches the needed packages:

Proceed with this action? [y/N]: y 
[pkg01.int.unixathome.org] [  1/128] Fetching net-snmp-5.9.5.2,1: 100%    2 MiB   2.6 M/s    00:01    
[pkg01.int.unixathome.org] [  2/128] Fetching png-1.6.54: 100%  305 KiB 312.6 k/s    00:01    
...
[pkg01.int.unixathome.org] [127/128] Fetching subversion-1.14.5_1: 100%    3 MiB   3.6 M/s    00:01    
[pkg01.int.unixathome.org] [128/128] Fetching lerc-4.0.0: 100%  176 KiB 180.6 k/s    00:01    

Does a check:

Checking integrity... done (0 conflicting)

Then installs:

[pkg01.int.unixathome.org] [  1/129] Reinstalling abseil-20250127.1...
[pkg01.int.unixathome.org] [  1/129] Extracting abseil-20250127.1: 100%
[pkg01.int.unixathome.org] [  2/129] Reinstalling anvil-0.0.20...
===> Creating groups
Using existing group 'anvil'
===> Creating users
Using existing user 'anvil'
===> Creating homedir(s)
[pkg01.int.unixathome.org] [  2/129] Extracting anvil-0.0.20: 100%
...
[pkg01.int.unixathome.org] [129/129] Extracting webp-1.6.0: 100%
You may need to manually remove /usr/local/etc/anvil/cert-puller.conf if it is no longer needed.
You may need to manually remove /usr/local/www/default_vhost_nginx/configuration/vhosts.conf if it is no longer needed.
...
[I've omitted all the pkg-message output here]

autoremove

Dependencies change. They are not automagically removed. Hence:

root@pkg01:~ # pkg upgrade
Updating local repository catalogue...
local repository is up to date.
All repositories are up to date.
Checking for upgrades (0 candidates): 100%
Processing candidates (0 candidates): 100%
Checking integrity... done (0 conflicting)
Your packages are up to date.
root@pkg01:~ # pkg autoremove
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages:

Installed packages to be REMOVED:
	python311: 3.11.14_1

Number of packages to be removed: 1

The operation will free 201 MiB.

Proceed with deinstalling packages? [y/N]: y
[pkg01.int.unixathome.org] [1/1] Deinstalling python311-3.11.14_1...
[pkg01.int.unixathome.org] [1/1] Deleting files for python311-3.11.14_1: 100%
root@pkg01:~ # 

Why is that being removed? Because I use python-3.12 at home:

root@pkg01:~ # pkg info -x python
python-3.12_3,2
python3-3_4
python312-3.12.12_3
rsync-python-3.4.1_6
root@pkg01:~ # 

Was everything updated?

I find this query useful because it means every package was updated. If the repo doesn’t have the installed package, it won’t get updated and will appear in this output. This is a future-problem solved. Detect the missing package[s] now, future you now has less work.

root@pkg01:~ # pkg query -a '%n %t' | awk -v t=$(date -v -6H +%s) '$2 < t { print $1 }'
Illegal variable name.
root@pkg01:~ # bash
[root@pkg01 ~]# pkg query -a '%n %t' | awk -v t=$(date -v -6H +%s) '$2 < t { print $1 }'
[root@pkg01 ~]# 

That command is meant for bash.

There. Now. Updated. Now I'm going to repeat this for the jail host.

Hope this helps.

Top

Updating my poudriere jail after updating the host to FreeBSD 15.0

Post by Dan Langille via Dan Langille's Other Diary »

This post is related to Upgrading a FreeBSD 14.3 host to FreeBSD 15.0 which I wrote and ran earlier this evening. I’m now back from my Indian dinner and watching the Superbowl (0:15 left in the 2nd half).

I was updating r730-01 and got to the point of where I need to updated the packages on the host. I couldn’t do that. I hope my own FreeBSD pkg repo.

What I did before anything, snapshot:

[22:03 r730-01 dvl ~] % sudo zfs snapshot data02/jails/pkg01@before15.0
[22:03 r730-01 dvl ~] % 

That’s the filesystem for the jail in which I build my FreeBSD package.

Failed upgrade

This failed because it could not upgrade the packages. They did not exist.

root@r730-01:~ # mkjail upgrade -v 15.0-RELEASE -j pkg01
Missing required sets for 15.0-RELEASE.
Please run 'mkjail getrelease' for the version you want to upgrade to.



root@r730-01:~ # mkjail getrelease -v 15.0-RELEASE
Fetching release manifest...
MANIFEST                                              1044  B 9196 kBps    00s
Fetching release tarballs...
base.txz                                               157 MB   33 MBps    05s
lib32.txz                                               61 MB   32 MBps    02s
src.txz                                                238 MB   34 MBps    07s
base.txz: sha256 verified
lib32.txz: sha256 verified
src.txz: sha256 verified
Extracting src for use in jail upgrades...


root@r730-01:~ # mkjail upgrade -v 15.0-RELEASE -j pkg01
Upgrading pkg01 jail from 14.3-RELEASE to 15.0-RELEASE...

  D /.cshrc
  D /.profile
  D /etc/ftpusers
  D /etc/gss/qop
  D /etc/newsyslog.conf.d/ftp.conf
  D /etc/rc.d/ftpd
  D /etc/rc.d/gbde
...
  A /etc/rc.d/nuageinit_user_data_script
  A /etc/rc.d/virtual_oss
Warnings:
  Needs update: /etc/localtime (required manual update via tzsetup(8))
pkg: Warning: Major OS version upgrade detected.  Running "pkg bootstrap -f" recommended
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
        pkg: 2.5.1

Number of packages to be removed: 1

The operation will free 24 MiB.
[pkg01.int.unixathome.org] [1/1] Deinstalling pkg-2.5.1...
[pkg01.int.unixathome.org] [1/1] Deleting files for pkg-2.5.1: 100%
Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
[pkg01.int.unixathome.org] Installing pkg-2.5.1...
[pkg01.int.unixathome.org] Extracting pkg-2.5.1: 100%
Updating FreeBSD-ports repository catalogue...
[pkg01.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[pkg01.int.unixathome.org] Fetching data: 100%   10 MiB   5.4 M/s    00:02    
Processing entries: 100%
FreeBSD-ports repository update completed. 36667 packages processed.
Updating FreeBSD-ports-kmods repository catalogue...
[pkg01.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[pkg01.int.unixathome.org] Fetching data: 100%   35 KiB  35.4 k/s    00:01    
Processing entries: 100%
FreeBSD-ports-kmods repository update completed. 239 packages processed.
Updating local repository catalogue...
pkg-static: Repository local has a wrong packagesite, need to re-create database
pkg-static: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64//meta.conf: Failed writing received data to disk/application
pkg-static: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64//meta.txz: Failed writing received data to disk/application
repository local has no meta file, using default settings
pkg-static: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64//data.pkg: Failed writing received data to disk/application
pkg-static: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64//data.tzst: Failed writing received data to disk/application
pkg-static: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64//packagesite.pkg: Failed writing received data to disk/application
pkg-static: Failed to fetch https://fedex.int.unixathome.org/packages/FreeBSD:15:amd64//packagesite.tzst: Failed writing received data to disk/application
Unable to update repository local
Error updating repositories!

Upgrade cancelled: reverting changes and cleaning up.

That failed, and I should have known it would fail.

Can I do this update without refreshing packages? No:

root@r730-01:~ # mkjail upgrade -h
usage: mkjail upgrade [-a] [-v TARGETVER] | [-j JAILNAME] [-v TARGETVER] [-p y/n]

        -a Upgrade all running jails
        -h Show help
        -j Jail name
        -p [y|n] whether or not to upgrade packages (y = default)
        -v FreeBSD version (e.g., 11.1-RELEASE)
        -p pkg flag, y or n - do you want to upgrade the packages - defaults to y - never specify n if changing major versions.

mkjail.sh: 2019, feld@FreeBSD.org

Why not? Because it says: “never specify n if changing major versions”.

Instead, I did this on the host:

root@r730-01:/usr/local/etc/pkg/repos # ls -l
total 5
-rw-r--r--  1 root wheel  25 Jan 17 22:25 FreeBSD.conf
-rw-r--r--  1 root wheel 169 Oct 28  2023 local.conf
root@r730-01:/usr/local/etc/pkg/repos # vi FreeBSD.conf 
root@r730-01:/usr/local/etc/pkg/repos # vi local.conf 
root@r730-01:/usr/local/etc/pkg/repos # 

In the above, I enabled FreeBSD and disabled local:

root@r730-01:/usr/local/etc/pkg/repos # grep enable *.conf
FreeBSD.conf:FreeBSD: { enabled: yes }
local.conf:   enabled: false

Then, following my usual update process for packages:

root@r730-01:~ # pkg update
pkg: Warning: Major OS version upgrade detected.  Running "pkg bootstrap -f" recommended
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.
All repositories are up to date.
root@r730-01:~ # pkg-static install -f pkg
pkg-static: Warning: Major OS version upgrade detected.  Running "pkg bootstrap -f" recommended
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.
All repositories are up to date.
The following 1 package(s) will be affected (of 0 checked):

Installed packages to be REINSTALLED:
        pkg-2.5.1 [FreeBSD-ports] (ABI changed: 'FreeBSD:14:amd64' -> 'FreeBSD:15:amd64')

Number of packages to be reinstalled: 1

The process will require 6 MiB more space.
7 MiB to be downloaded.

Proceed with this action? [y/N]: y
[1/1] Fetching pkg-2.5.1: 100%    7 MiB   6.9 M/s    00:01    
Checking integrity... done (0 conflicting)
[1/1] Reinstalling pkg-2.5.1...
[1/1] Extracting pkg-2.5.1: 100%
root@r730-01:~ # pkg upgrade -f
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.
All repositories are up to date.
Checking for upgrades (252 candidates): 100%
Processing candidates (252 candidates): 100%
The following 261 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        p5-Authen-SASL: 2.1900 [FreeBSD-ports]
        p5-Crypt-URandom: 0.54 [FreeBSD-ports]
        p5-Digest-HMAC: 1.05 [FreeBSD-ports]
        p5-IO-Socket-SSL: 2.095 [FreeBSD-ports]
        p5-MIME-Base32: 1.303 [FreeBSD-ports]
        p5-Mozilla-CA: 20250602 [FreeBSD-ports]
        p5-Net-SSLeay: 1.94 [FreeBSD-ports]
        p5-URI: 5.34 [FreeBSD-ports]
        postgresql17-client: 17.7_2 [FreeBSD-ports]
        py311-cairo: 1.28.0,1 [FreeBSD-ports]
        py311-packaging: 25.0 [FreeBSD-ports]
        py311-pygobject: 3.50.2 [FreeBSD-ports]
        python311: 3.11.14_1 [FreeBSD-ports]

Installed packages to be UPGRADED:
        iperf3: 3.19.1 -> 3.20_1 [FreeBSD-ports]

Installed packages to be DOWNGRADED:
        SamDruckerClientShell: 0.3.0beta6 -> 0.2.7 [FreeBSD-ports]
        iso-codes: 4.20.1 -> 4.19.0 [FreeBSD-ports]
        libpcap: 1.10.6 -> 1.10.5 [FreeBSD-ports]
        nagios-plugins: 2.4.4_1,1 -> 2.4.4,1 [FreeBSD-ports]
        p11-kit: 0.26.1 -> 0.25.10 [FreeBSD-ports]
        pygobject-common: 3.54.5 -> 3.50.2 [FreeBSD-ports]
        python: 3.12_3,2 -> 3.11_3,2 [FreeBSD-ports]
        wayland-protocols: 1.47 -> 1.45 [FreeBSD-ports]

Installed packages to be REINSTALLED:
        abseil-20250127.1 [FreeBSD-ports]
        adwaita-icon-theme-47.0 [FreeBSD-ports]
        adwaita-icon-theme-legacy-46.2 [FreeBSD-ports]
        apr-1.7.6.1.6.3 [FreeBSD-ports]
        argp-standalone-1.5.0_1 [FreeBSD-ports]
        at-spi2-core-2.56.7 [FreeBSD-ports]
        avahi-app-0.8_6 [FreeBSD-ports]
        bacula15-client-15.0.3 [FreeBSD-ports]
        bash-5.3.9 [FreeBSD-ports]
        bind-tools-9.20.18_2 [FreeBSD-ports]
        binutils-2.44,1 [FreeBSD-ports]
...
        zfs-stats-1.3.2 [FreeBSD-ports]
        zsh-5.9_5 [FreeBSD-ports]
        zstd-1.5.7_1 [FreeBSD-ports]

Number of packages to be installed: 13
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 239
Number of packages to be downgraded: 8

The process will require 274 MiB more space.
530 MiB to be downloaded.

Proceed with thispkg upgrade -f: root@r730-01:~ # 
root@r730-01:~ # pkg upgrade -f
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.
All repositories are up to date.
Checking for upgrades (252 candidates): 100%
Processing candidates (252 candidates): 100%
The following 261 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        p5-Authen-SASL: 2.1900 [FreeBSD-ports]
        p5-Crypt-URandom: 0.54 [FreeBSD-ports]
        p5-Digest-HMAC: 1.05 [FreeBSD-ports]
        p5-IO-Socket-SSL: 2.095 [FreeBSD-ports]
        p5-MIME-Base32: 1.303 [FreeBSD-ports]
        p5-Mozilla-CA: 20250602 [FreeBSD-ports]
        p5-Net-SSLeay: 1.94 [FreeBSD-ports]
        p5-URI: 5.34 [FreeBSD-ports]
        postgresql17-client: 17.7_2 [FreeBSD-ports]
        py311-cairo: 1.28.0,1 [FreeBSD-ports]
        py311-packaging: 25.0 [FreeBSD-ports]
        py311-pygobject: 3.50.2 [FreeBSD-ports]
        python311: 3.11.14_1 [FreeBSD-ports]

Installed packages to be UPGRADED:
        iperf3: 3.19.1 -> 3.20_1 [FreeBSD-ports]

Installed packages to be DOWNGRADED:
        SamDruckerClientShell: 0.3.0beta6 -> 0.2.7 [FreeBSD-ports]
        iso-codes: 4.20.1 -> 4.19.0 [FreeBSD-ports]
        libpcap: 1.10.6 -> 1.10.5 [FreeBSD-ports]
        nagios-plugins: 2.4.4_1,1 -> 2.4.4,1 [FreeBSD-ports]
        p11-kit: 0.26.1 -> 0.25.10 [FreeBSD-ports]
        pygobject-common: 3.54.5 -> 3.50.2 [FreeBSD-ports]
        python: 3.12_3,2 -> 3.11_3,2 [FreeBSD-ports]
        wayland-protocols: 1.47 -> 1.45 [FreeBSD-ports]

Installed packages to be REINSTALLED:
        abseil-20250127.1 [FreeBSD-ports]
        adwaita-icon-theme-47.0 [FreeBSD-ports]
        adwaita-icon-theme-legacy-46.2 [FreeBSD-ports]
        apr-1.7.6.1.6.3 [FreeBSD-ports]
        argp-standalone-1.5.0_1 [FreeBSD-ports]
        at-spi2-core-2.56.7 [FreeBSD-ports]
        avahi-app-0.8_6 [FreeBSD-ports]
        bacula15-client-15.0.3 [FreeBSD-ports]
...
        zsh-5.9_5 [FreeBSD-ports]
        zstd-1.5.7_1 [FreeBSD-ports]

Number of packages to be installed: 13
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 239
Number of packages to be downgraded: 8

The process will require 274 MiB more space.
530 MiB to be downloaded.

Proceed with this action? [y/N]: y
[  1/260] Fetching duktape-lib-2.7.0_1: 100%  252 KiB 258.0 k/s    00:01    
[  2/260] Fetching wget-1.25.0: 100%  778 KiB 796.9 k/s    00:01    
...
[257/260] Fetching binutils-2.44,1: 100%   15 MiB  15.3 M/s    00:01    
[258/260] Fetching libnvme-1.11.1_4: 100%  199 KiB 204.0 k/s    00:01    
[259/260] Fetching libslirp-4.9.1: 100%   66 KiB  67.3 k/s    00:01    
[260/260] Fetching postfix-3.10.6,1: 100%    2 MiB   1.8 M/s    00:01    
Checking integrity... done (3 conflicting)
  - py311-cairo-1.28.0,1 [FreeBSD-ports] conflicts with py312-cairo-1.28.0,1 [installed] on /usr/local/include/pycairo/py3cairo.h
  - postgresql17-client-17.7_2 [FreeBSD-ports] conflicts with postgresql18-client-18.1_1 [FreeBSD-ports] on /usr/local/bin/clusterdb
  - postgresql17-client-17.7_2 [FreeBSD-ports] conflicts with postgresql18-client-18.1_1 [installed] on /usr/local/bin/clusterdb
Cannot solve problem using SAT solver, trying another plan
Checking integrity... done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 261 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        p5-Authen-SASL: 2.1900 [FreeBSD-ports]
        p5-Crypt-URandom: 0.54 [FreeBSD-ports]
        p5-Digest-HMAC: 1.05 [FreeBSD-ports]
        p5-IO-Socket-SSL: 2.095 [FreeBSD-ports]
        p5-MIME-Base32: 1.303 [FreeBSD-ports]
        p5-Mozilla-CA: 20250602 [FreeBSD-ports]
        p5-Net-SSLeay: 1.94 [FreeBSD-ports]
        p5-URI: 5.34 [FreeBSD-ports]
        py311-cairo: 1.28.0,1 [FreeBSD-ports]
        py311-packaging: 25.0 [FreeBSD-ports]
        py311-pygobject: 3.50.2 [FreeBSD-ports]
        python311: 3.11.14_1 [FreeBSD-ports]

Installed packages to be UPGRADED:
        iperf3: 3.19.1 -> 3.20_1 [FreeBSD-ports]

Installed packages to be DOWNGRADED:
        SamDruckerClientShell: 0.3.0beta6 -> 0.2.7 [FreeBSD-ports]
        iso-codes: 4.20.1 -> 4.19.0 [FreeBSD-ports]
        libpcap: 1.10.6 -> 1.10.5 [FreeBSD-ports]
        nagios-plugins: 2.4.4_1,1 -> 2.4.4,1 [FreeBSD-ports]
        p11-kit: 0.26.1 -> 0.25.10 [FreeBSD-ports]
        pygobject-common: 3.54.5 -> 3.50.2 [FreeBSD-ports]
        python: 3.12_3,2 -> 3.11_3,2 [FreeBSD-ports]
        wayland-protocols: 1.47 -> 1.45 [FreeBSD-ports]

Installed packages to be REINSTALLED:
        abseil-20250127.1 [FreeBSD-ports]
        adwaita-icon-theme-47.0 [FreeBSD-ports]
...
        zstd-1.5.7_1 [FreeBSD-ports]

Installed packages to be REMOVED:
        py312-cairo: 1.28.0,1
        py312-pygobject: 3.54.5

Number of packages to be removed: 2
Number of packages to be installed: 12
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 238
Number of packages to be downgraded: 8

The process will require 253 MiB more space.

Proceed with this action? [y/N]: y
Checking integrity... done (0 conflicting)
[  1/266] Reinstalling abseil-20250127.1...
[  1/266] Extracting abseil-20250127.1: 100%
[  2/266] Reinstalling brotli-1.2.0,1...
...
[266/266] Reinstalling wget-1.25.0...
[266/266] Extracting wget-1.25.0: 100%
==> Running trigger: gdk-pixbuf-query-loaders.ucl
Generating gdk-pixbuf modules cache
==> Running trigger: glib-schemas.ucl
Compiling glib schemas
Warning: Schema “org.gnome.system.locale” has path “/system/locale/”.  Paths starting with “/apps/”, “/desktop/” or “/system/” are deprecated.
Warning: Schema “org.gnome.system.proxy” has path “/system/proxy/”.  Paths starting with “/apps/”, “/desktop/” or “/system/” are deprecated.
Warning: Schema “org.gnome.system.proxy.http” has path “/system/proxy/http/”.  Paths starting with “/apps/”, “/desktop/” or “/system/” are deprecated.
Warning: Schema “org.gnome.system.proxy.https” has path “/system/proxy/https/”.  Paths starting with “/apps/”, “/desktop/” or “/system/” are deprecated.
Warning: Schema “org.gnome.system.proxy.ftp” has path “/system/proxy/ftp/”.  Paths starting with “/apps/”, “/desktop/” or “/system/” are deprecated.
Warning: Schema “org.gnome.system.proxy.socks” has path “/system/proxy/socks/”.  Paths starting with “/apps/”, “/desktop/” or “/system/” are deprecated.
==> Running trigger: gio-modules.ucl
Generating GIO modules cache
==> Running trigger: gtk-update-icon-cache.ucl
Generating GTK icon cache for /usr/local/share/icons/hicolor
Generating GTK icon cache for /usr/local/share/icons/Adwaita
Generating GTK icon cache for /usr/local/share/icons/AdwaitaLegacy
==> Running trigger: shared-mime-info.ucl
Building the Shared MIME-Info database cache
==> Running trigger: fontconfig.ucl
Running fc-cache to build fontconfig cache...

...
You may need to manually remove /usr/local/etc/pam.d/sudo if it is no longer needed.
You may need to manually remove /usr/local/etc/sudoers if it is no longer needed.
root@r730-01:~ # 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.
All repositories are up to date.
Checking for upgrades (1 candidates): 100%
Processing candidates (1 candidates): 100%
Checking integrity... done (1 conflicting)
  - postgresql17-client-17.7_2 [FreeBSD-ports] conflicts with postgresql18-client-18.1_1 [installed] on /usr/local/bin/clusterdb
Checking integrity... done (0 conflicting)
The following 4 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        postgresql17-client: 17.7_2 [FreeBSD-ports]

Installed packages to be REINSTALLED:
        nagios-check_postgres-2.26.0 [FreeBSD-ports] (ABI changed: 'FreeBSD:14:*' -> 'FreeBSD:15:*')
        pkg-2.5.1 [FreeBSD-ports]

Installed packages to be REMOVED:
        postgresql18-client: 18.1_1

Number of packages to be removed: 1
Number of packages to be installed: 1
Number of packages to be reinstalled: 2

Proceed with this action? [y/N]: y
[1/5] Reinstalling pkg-2.5.1...
[1/5] Extracting pkg-2.5.1: 100%
[2/5] Deinstalling nagios-check_postgres-2.26.0...
[2/5] Deleting files for nagios-check_postgres-2.26.0: 100%
[3/5] Deinstalling postgresql18-client-18.1_1...
[3/5] Deleting files for postgresql18-client-18.1_1: 100%
[4/5] Installing postgresql17-client-17.7_2...
[4/5] Extracting postgresql17-client-17.7_2: 100%
[5/5] Installing nagios-check_postgres-2.26.0...
[5/5] Extracting nagios-check_postgres-2.26.0: 100%
=====
Message from postgresql17-client-17.7_2:

--
The PostgreSQL port has a collection of "side orders":

postgresql-docs
  For all of the html documentation

p5-Pg
  A perl5 API for client access to PostgreSQL databases.

postgresql-tcltk
  If you want tcl/tk client support.

postgresql-jdbc
  For Java JDBC support.

postgresql-odbc
  For client access from unix applications using ODBC as access
  method. Not needed to access unix PostgreSQL servers from Win32
  using ODBC. See below.

ruby-postgres, py-psycopg
  For client access to PostgreSQL databases using the ruby & python
  languages.

postgresql-plperl, postgresql-pltcl & postgresql-plruby
  For using perl5, tcl & ruby as procedural languages.

postgresql-contrib
  Lots of contributed utilities, postgresql functions and
  datatypes. There you find pg_standby, pgcrypto and many other cool
  things.

etc...
root@r730-01:~ # pkg autoremove
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 18 packages:

Installed packages to be REMOVED:
        abseil: 20250127.1
        bind-tools: 9.20.18_2
        fstrm: 0.6.1_1
        groff: 1.23.0_5
        hidapi: 0.15.0
        jsoncpp: 1.9.6_1
        libcbor: 0.13.0
        libfido2: 1.16.0
        liburcu: 0.15.3
        libuv: 1.51.0
        mysql80-client: 8.0.44
        openldap26-client: 2.6.10_1
        protobuf: 29.5,1
        protobuf-c: 1.5.1_3
        psutils: 1.17_6
        py312-packaging: 25.0
        py312-setuptools: 63.1.0_3
        uchardet: 0.0.8_1

Number of packages to be removed: 18

The operation will free 186 MiB.

Proceed with deinstalling packages? [y/N]: n
root@r730-01:~ # pkg query -a '%n %t' | awk -v t=$(date -v -6H +%s) '$2 < t { print $1 }'
nagios-check_smartmon-py312
rsync-python
root@r730-01:~ # 

That’s mostly everything updated, more or less correctly. Here’s hoping after reboot.

I then did the same .conf file changes in the pkg01 jail and ran this again:

root@r730-01:~ # mkjail upgrade -v 15.0-RELEASE -j pkg01
Upgrading pkg01 jail from 14.3-RELEASE to 15.0-RELEASE...

./lib/libcrypto.so.35: Write failed: Input/output error
./var/empty/: Can't restore time: Operation not permitted
tar: Error exit delayed from previous errors.

Upgrade cancelled: reverting changes and cleaning up.
umount: /jails/pkg01/usr/src: not a file system root directory
root@r730-01:~ # 

That failed. I’ll try again after completing the host update.

After updating the host:

root@r730-01:~ # mkjail upgrade -v 15.0-RELEASE -j pkg01
Upgrading pkg01 jail from 14.3-RELEASE to 15.0-RELEASE...

  D /.cshrc
  D /.profile
  D /etc/ftpusers
...
  A /etc/rc.d/nuageinit_user_data_script
  A /etc/rc.d/virtual_oss
Warnings:
  Needs update: /etc/localtime (required manual update via tzsetup(8))
pkg: Warning: Major OS version upgrade detected.  Running "pkg bootstrap -f" recommended
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
        pkg: 2.5.1

Number of packages to be removed: 1

The operation will free 24 MiB.
[pkg01.int.unixathome.org] [1/1] Deinstalling pkg-2.5.1...
[pkg01.int.unixathome.org] [1/1] Deleting files for pkg-2.5.1: 100%
Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
[pkg01.int.unixathome.org] Installing pkg-2.5.1...
[pkg01.int.unixathome.org] Extracting pkg-2.5.1: 100%
Updating FreeBSD-ports repository catalogue...
[pkg01.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[pkg01.int.unixathome.org] Fetching data: 100%   10 MiB  10.8 M/s    00:01    
Processing entries: 100%
FreeBSD-ports repository update completed. 36667 packages processed.
Updating FreeBSD-ports-kmods repository catalogue...
[pkg01.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[pkg01.int.unixathome.org] Fetching data: 100%   35 KiB  35.4 k/s    00:01    
Processing entries: 100%
FreeBSD-ports-kmods repository update completed. 239 packages processed.
All repositories are up to date.
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.
All repositories are up to date.
Updating database digests format: 100%
Checking for upgrades (129 candidates): 100%
Processing candidates (129 candidates): 100%
The following 128 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        python311: 3.11.14_1 [FreeBSD-ports]

Installed packages to be DOWNGRADED:
        SamDruckerClientShell: 0.3.0beta6 -> 0.2.7 [FreeBSD-ports]
        duf: 0.9.1_4 -> 0.9.1_3 [FreeBSD-ports]
        expat: 2.7.4 -> 2.7.3 [FreeBSD-ports]
        git-lite: 2.53.0 -> 2.52.0 [FreeBSD-ports]
        libgcrypt: 1.12.0 -> 1.11.2 [FreeBSD-ports]
        libxml2: 2.15.1_1 -> 2.15.1 [FreeBSD-ports]
        mysql80-client: 8.0.45 -> 8.0.44 [FreeBSD-ports]
        nagios-plugins: 2.4.4_1,1 -> 2.4.4,1 [FreeBSD-ports]
        nginx: 1.28.0_11,3 -> 1.28.0_10,3 [FreeBSD-ports]
        openldap26-client: 2.6.12 -> 2.6.10_1 [FreeBSD-ports]
        p11-kit: 0.26.1 -> 0.25.10 [FreeBSD-ports]
        php83: 8.3.30 -> 8.3.29 [FreeBSD-ports]
        php83-curl: 8.3.30 -> 8.3.29 [FreeBSD-ports]
        php83-dom: 8.3.30 -> 8.3.29 [FreeBSD-ports]
        php83-mbstring: 8.3.30 -> 8.3.29 [FreeBSD-ports]
        php83-simplexml: 8.3.30 -> 8.3.29 [FreeBSD-ports]
        php83-zlib: 8.3.30 -> 8.3.29 [FreeBSD-ports]
        png: 1.6.54 -> 1.6.53 [FreeBSD-ports]
        python: 3.12_3,2 -> 3.11_3,2 [FreeBSD-ports]

Installed packages to be REINSTALLED:
        abseil-20250127.1 [FreeBSD-ports]
        anvil-0.0.20 [FreeBSD-ports]
        apr-1.7.6.1.6.3 [FreeBSD-ports]
...
        zsh-5.9_5 [FreeBSD-ports]
        zstd-1.5.7_1 [FreeBSD-ports]

Number of packages to be installed: 1
Number of packages to be reinstalled: 108
Number of packages to be downgraded: 19

The process will require 220 MiB more space.
182 MiB to be downloaded.
[pkg01.int.unixathome.org] [  1/128] Fetching net-snmp-5.9.5.2,1: 100%    2 MiB   2.6 M/s    00:01    
...
[pkg01.int.unixathome.org] [128/128] Extracting webp-1.6.0: 100%

Message from liblockfile-1.17_1:

...
remove /usr/lib32/libkafs5.so.11? remove /usr/lib32/libkdc.so.11? remove /usr/lib32/libkrb5.so.11? remove /usr/lib32/libmd.so.6? remove /usr/lib32/libprivateheimipcc.so.11? remove /usr/lib32/libprivateheimipcs.so.11? remove /usr/lib32/libroken.so.11? remove /usr/lib32/libssl.so.30? remove /usr/lib32/libufs.so.7? remove /usr/lib32/libutil.so.9? remove /usr/lib32/libwind.so.11? >>> Old libraries removed
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 15.0-RELEASE from update1.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata patches.. done.
Applying metadata patches... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.

/rescue/kenv
/rescue/kill
/rescue/kldconfig
/rescue/kldload
/rescue/kldstat
/rescue/kldunload
/rescue/ldconfig
/rescue/less
/rescue/link
/rescue/ln
/rescue/ls
/rescue/lzcat
/rescue/lzma
/rescue/md5
/rescue/mdconfig
/rescue/mdmfs
/rescue/mkdir
/rescue/mknod
/rescue/more
/rescue/mount
/rescue/mount_cd9660
/rescue/mount_msdosfs
/rescue/mount_nfs
/rescue/mount_nullfs
/rescue/mount_udf
/rescue/mount_unionfs
/rescue/mt
/rescue/mv
/rescue/nc
/rescue/newfs
/rescue/newfs_msdos
/rescue/nextboot
/rescue/nos-tun
/rescue/pfctl
/rescue/pgrep
/rescue/ping
/rescue/ping6
/rescue/pkill
/rescue/poweroff
/rescue/ps
/rescue/pwd
/rescue/rcorder
/rescue/rdump
/rescue/realpath
/rescue/reboot
/rescue/red
/rescue/rescue
/rescue/restore
/rescue/rm
/rescue/rmdir
/rescue/route
/rescue/routed
/rescue/rrestore
/rescue/rtquery
/rescue/rtsol
/rescue/savecore
/rescue/sed
/rescue/setfacl
/rescue/sh
/rescue/shutdown
/rescue/sleep
/rescue/stty
/rescue/swapon
/rescue/sync
/rescue/sysctl
/rescue/tail
/rescue/tar
/rescue/tcsh
/rescue/tee
/rescue/test
/rescue/tunefs
/rescue/umount
/rescue/unlink
/rescue/unlzma
/rescue/unxz
/rescue/unzstd
/rescue/vi
/rescue/whoami
/rescue/xz
/rescue/xzcat
/rescue/zcat
/rescue/zdb
/rescue/zfs
/rescue/zfsbootcfg
/rescue/zpool
/rescue/zstd
/rescue/zstdcat
/rescue/zstdmt
/sbin/rtsol
/usr/bin/openssl
/usr/lib/libcrypto.a
/usr/lib/libssl.a
/usr/lib/libssl.so.35
/usr/lib32/libcrypto.a
/usr/lib32/libcrypto.so.35
/usr/lib32/libssl.a
/usr/lib32/libssl.so.35
/usr/sbin/devinfo
/usr/sbin/rtsold
/usr/share/man/man8/devinfo.8.gz
Installing updates...certctl: legacy directory /jails/pkg01/etc/ssl/blacklisted can safely be deleted
 done.


root@r730-01:~ # service jail restart pkg01
Stopping jails: pkg01.
Starting jails: pkg01.
root@r730-01:~ # 


[17:39 pro04 dvl ~] % pkg01
Last login: Sun Feb  8 19:48:39 2026 from pro05.startpoint.vpn.unixathome.org
[22:39 pkg01 dvl ~] % freebsd-version -ur
15.0-RELEASE-p2
15.0-RELEASE-p2
[22:39 pkg01 dvl ~] % file /bin/sh
/bin/sh: ELF 64-bit LSB pie executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 15.0 (1500068), FreeBSD-style, stripped
[22:39 pkg01 dvl ~] % 

Looks good to me.

Next, build the 15.0 packages, which means first creating the poudriere jail:

[22:45 pkg01 dvl ~] % sudo poudriere jail -c -j 150amd64 -v 15.0-RELEASE -a amd64
[00:00:00] Creating 150amd64 fs at /usr/local/poudriere/jails/150amd64... done
[00:00:06] Using pre-distributed MANIFEST for FreeBSD 15.0-RELEASE amd64
[00:00:06] Fetching base for FreeBSD 15.0-RELEASE amd64
base.txz                                               157 MB   36 MBps    05s
[00:00:11] Extracting base... done
[00:00:21] Fetching src for FreeBSD 15.0-RELEASE amd64
src.txz                                                238 MB   36 MBps    06s
[00:00:29] Extracting src... done
[00:00:49] Fetching lib32 for FreeBSD 15.0-RELEASE amd64
lib32.txz                                               61 MB   30 MBps    02s
[00:00:51] Extracting lib32... done
[00:00:55] Cleaning up... done
[00:00:55] Recording filesystem state for clean... done
[00:00:56] Upgrading using http
Cannot identify running kernel
15.0-RELEASE
[00:00:57] Recording filesystem state for clean... done
[00:00:57] Jail 150amd64 15.0-RELEASE amd64 is ready to be used
[22:46 pkg01 dvl ~] % 

Next, build the packages:

[0:55 pkg01 dvl ~] % sudo poudriere bulk -j 150amd64 -p default -z primary -f /usr/local/etc/poudriere.d/buildlists/primary
Top

Valuable News – 2026/02/09

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX/BSD/Linux systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

The Usual Suspects section at the end is permanent and have links to other sites with interesting UNIX/BSD/Linux news.

Past releases are available at the dedicated NEWS page.

UNIX

How to Make FreeBSD Live CD and Live USB.
https://betounix.substack.com/p/how-to-make-a-freebsd-livecd-live

FreeBSD Port of OpenClaw – Runs in Jail Using Subnet with socat(1) for localhost Binding.
https://github.com/KLD997/FreeClaw

FreeBSD Outer Base.
https://github.com/emtiu/freebsd-outerbase

OpenIndiana Ports Solaris IPS Package Management to Rust.
https://phoronix.com/news/OpenIndiana-Next-Gen-IPS

FreeBSD Git Weekly: 2026-01-26 to 2026-02-01.
https://freebsd-git-weekly.tarsnap.net/2026-01-26.html

Setup Environment to Make FreeBSD UFS Image Mountable by PS5/PS4.
https://github.com/earthonion/mkufs2

The Book of PF (4th Edition) by Peter N. M. Hansteen is Released.
https://nostarch.com/book-of-pf-4th-edition

LibreOffice 26.2 Release Notes.
https://wiki.documentfoundation.org/ReleaseNotes/26.2

Inside PlayStation OS: How BSD Changed Sony Consoles Forever.
https://generationamiga.com/2026/02/04/inside-the-playstation-os-how-bsd-changed-sonys-consoles-forever/

GhostBSD 2025/12 Finance Report.
https://ghostbsd.org/news/December_2025_Finance_Report

Rust in NetBSD Kernel and Other Odd Decisions.
https://bentsukun.ch/posts/netbsd-rust-kernel/

NetBSD Kernel Supports Lua Scripting But Do Not Look for Rust in There Anytime Soon.
https://phoronix.com/news/No-Rust-In-NetBSD-Kernel

OPNsense ISC DHCP to Kea/dnsmasq Migration Tool for DHCPv4/DHCPv6 from Sam Sheridan.
https://github.com/sheridans/isc2kea

FreeBSD Audio Diagnostics and Optimization.
https://m4c.pl/blog/freebsd-audio-diagnostics-and-optimization/

My FreeBSD Experience on My ThinkPad X1 Carbon Gen 8.
https://dkolak0.wordpress.com/2026/02/06/my-freebsd-experience-on-my-thinkpad-x1-carbon-gen-8/

Build System for CoreBSD.
https://github.com/h4ckee/CoreBSD

Things UNIX Can Do Atomically. [2010]
https://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html

After Decades on Linux – FreeBSD Finally Gave Me Reason to Switch Operating Systems.
https://zdnet.com/article/freebsd-linux-review/

How to Setup WireGuard on OpenBSD: Ultimate Self Hosted 2026 VPN Guide.
https://thelonestack.com/openbsd-wireguard-vpn-setup/

Scraping FreeBSD mpd5 Daemon to Obtain L2TP VPN Usage Data.
https://utcc.utoronto.ca/~cks/space/blog/unix/FreeBSDScrapingMpd5ForL2TP

Making FreeBSD System Have Serial Console on Cecond Serial Port.
https://utcc.utoronto.ca/~cks/space/blog/unix/FreeBSDSerialConsoleSecondPort

BSD PF versus Linux nftables for Firewalls for Us,
https://utcc.utoronto.ca/%7Ecks/space/blog/sysadmin/PFvsNftablesForUs

Creating Samba AD Domain Controller on FreeBSD.
https://sour.coffee/2026/02/04/creating-a-samba-active-directory-domain-controller-on-freebsd/

Implementing Carrier Grade NAT and Port Block Allocation on FreeBSD and PF.
https://sour.coffee/2026/01/30/implementing-carrier-grade-nat-and-port-block-allocation-on-freebsd-and-pf/

My Homelab and Home Network.
https://sour.coffee/2026/01/15/my-homelab-and-home-network-january-2026-edition/

Exploring Docker Containers on FreeBSD.
https://tumfatig.net/2026/exploring-docker-containers-on-freebsd/

S3 Storage at Home with Garage – Part 3 – In Practice.
https://jan.wildeboer.net/2026/01/3-Using-Garage-S3/

The tmux(1) Popup Editor for Cursor Agent CLI Prompts.
https://foo.zone/gemfeed/2026-02-02-tmux-popup-editor-for-cursor-agent-prompts.html

What Does This Disk Do?
https://euroquis.nl/freebsd/2026/01/29/disk.html

Adventures in Datacenter Networking.
https://conradresearch.com/articles/adventures-in-datacenter-networking

BSD Weekly – Issue 265.
https://bsdweekly.com/issues/265

Wine 11.2 Released with More Improvements and 32 Bug Fixes.
https://phoronix.com/news/Wine-11.2-Released

NetBSD 11.0 Release Process Underway.
https://blog.netbsd.org/tnf/entry/netbsd_11_0_release_process

NetBSD 11.0-RC1 Available for Testing with Enhanced Linux Emulation.
https://phoronix.com/news/NetBSD-11.0-RC1

PF Firewall on FreeBSD: Practical Guide.
https://blog.hofstede.it/pf-firewall-on-freebsd-a-practical-guide/

FreeBSD: Configuring DragonFly Mail Agent for root User Mail.
https://rtfm.co.ua/en/freebsd-configuring-dragonfly-mail-agent-for-the-root-user-mail/

Get WiFi on FreeBSD on Every MacBook/Mac or Any Other Laptop/PCs that FreeBSD Does Not Supports.
https://dkolak0.wordpress.com/2026/02/07/get-wi-fi-on-freebsd-on-every-macbook-mac-or-any-other-laptop-pcs-that-freebsd-doesnt-supports/

Running Your Own AS: BGP on FreeBSD with FRR/GRE Tunnels and Policy Routing.
https://blog.hofstede.it/running-your-own-as-bgp-on-freebsd-with-frr-gre-tunnels-and-policy-routing/

FreeBSD 14.4-BETA1 Now Available.
https://lists.freebsd.org/archives/freebsd-stable/2026-February/003844.html

NetBSD 11.0 RC1 Available.
https://blog.netbsd.org/tnf/entry/netbsd_11_0_rc1_available

CS615 – System Administration – Using NetBSD.
https://stevens.netmeister.org/615/

Use rdist(1) When Ansible is Too Much. [2024]
https://openbsd.amsterdam/blog/rdist-1-when-ansible-is-too-much.html

Emulating *BSD on ARM – Part 1 – Introduction. [2024]
https://bentsukun.ch/posts/bsd-arm-qemu/

Emulating *BSD on ARM – Part 2 – FreeBSD. [2024]
https://bentsukun.ch/posts/freebsd-arm-qemu/

Emulating *BSD on ARM – Part 3 – OpenBSD [2024]
https://bentsukun.ch/posts/openbsd-arm-qemu/

Booting NetBSD from Wedge – the Hard Way. [2025]
https://bentsukun.ch/posts/netbsd-wedge-boot/

Intel Recently Shelved Numerous Open Source Projects.
https://phoronix.com/news/Intel-OSS-Projects-Ended-2025

UNIX/Audio/Video

CS615 – System Administration – Using NetBSD – Videos.
https://youtube.com/c/cs615asa/videos

Redirecting USB Devices over TCP/IP on FreeBSD.
https://youtube.com/watch?v=Rbl_IlVIzVc

This Web Tool Makes ZFS on FreeBSD Stupidly Easy.
https://youtube.com/watch?v=S0ePkpVMHu8

FreeBSD Live – Updating Ports.
https://youtube.com/watch?v=a9A-fnYyUk0

2026-02-04 OpenZFS Production User Call.
https://youtube.com/watch?v=sllSjE1SvyE

2026-02-03 Jail/Zones Production User Call.
https://youtube.com/watch?v=WJopEuJlLXo

How to Do Xorg Graphics for FreeBSD on UTM on MacOS/arm64.
https://youtube.com/watch?v=__TrwS4u52I

BSD Now 648: Greytrapping for Years.
https://www.bsdnow.tv/648

BSD Now 649: Desk Review.
https://www.bsdnow.tv/649

Hardware

Laptop Retrospective – TPM021 – ThinkPad X300.
https://thinkpad-museum.de/episode/tpm021-x300/

Loongson 3B6000 Benchmarks: China LoongArch CPU Versus AMD ZEN5/Intel Arrow Lake/Raspberry Pi 5.
https://phoronix.com/review/loongson-3b6000-loongarch/7

Pin Fin Heat Sinks.
https://fanlesstech.com/2026/02/pin-fin-heat-sinks.html

WD Reinvents Hard Drive: 100TB Roadmap and AI Era Performance Breakthroughs.
https://pbxscience.com/wd-reinvents-the-hard-drive-100tb-roadmap-and-ai-era-performance-breakthroughs/

Meet Garbage PC.
https://ounapuu.ee/posts/2026/02/02/garbage-time/

Ode to AA Battery.
https://jeffgeerling.com/blog/2026/ode-to-the-aa-battery/

First Good Raspberry Pi Laptop.
https://jeffgeerling.com/blog/2026/the-first-good-raspberry-pi-laptop/

Life

Weight of Millimeter.
https://my-notes.dragas.net/2026/02/02/the-weight-of-a-millimeter/

Other

AntiRender – See Through Architectural Bullshit.
https://antirender.com/

Minimalistic City Map Posters.
https://kottke.org/26/02/minimalistic-city-map-posters

Small Games – Big Impact – 40 Year Legacy of Sensible Software.
https://generationamiga.com/2026/02/03/small-games-big-impact-the-40-year-legacy-of-sensible-software/

Firefox AI Killswitch Coming with 148.0 Version.
https://privacyguides.org/news/2026/02/06/firefoxs-ai-killswitch-coming-february-24/

Little History of DOS Games Cracks.
https://dosdays.co.uk/topics/game_cracks.php

Usual Suspects

BSD Weekly.
https://bsdweekly.com/

DiscoverBSD.
https://discoverbsd.com/

BSDSec.
https://bsdsec.net/

DragonFly BSD Digest.
https://dragonflydigest.com/

FreeBSD Patch Level Table.
https://bokut.in/freebsd-patch-level-table/

FreeBSD End of Life Date.
https://endoflife.date/freebsd

Phoronix BSD News Archives.
https://phoronix.com/linux/BSD

OpenBSD Journal.
https://undeadly.org/

Call for Testing.
https://callfortesting.org/

Call for Testing – Production Users Call.
https://youtube.com/@callfortesting/videos

BSD Now Weekly Podcast.
https://www.bsdnow.tv/

Nixers Newsletter.
https://newsletter.nixers.net/entries.php

BSD Cafe Journal.
https://journal.bsd.cafe/

DragonFly BSD Digest – Lazy Reading – In Other BSDs.
https://dragonflydigest.com

BSDTV.
https://bsky.app/profile/bsdtv.bsky.social

FreeBSD Git Weekly.
https://freebsd-git-weekly.tarsnap.net/

FreeBSD Meetings.
https://youtube.com/@freebsdmeetings

BSDJedi.
https://youtube.com/@BSDJedi/videos

RoboNuggie.
https://youtube.com/@RoboNuggie/videos

GaryHTech.
https://youtube.com/@GaryHTech/videos

Sheridan Computers.
https://youtube.com/@sheridans/videos

82MHz.
https://82mhz.net/

EOF
Top

Upgrading a FreeBSD 14.3 host to FreeBSD 15.0

Post by Dan Langille via Dan Langille's Other Diary »

Today, I again mused about FreeBSD 15.0 and pkgbase. It’s freezing outside, and I’m going for an Indian dinner in about 2 hours. Let’s see if I can break r730-01 with my upgrade attempt.

In this post:

  • FreeBSD 14.3 (starting point)
  • FreeBSD 15.0 (target)

The docs

I’m starting with official docs:

The host’s starting point

This is what I see when I log in:

[16:04 pro04 dvl ~] % r730
Last login: Sun Feb  8 01:24:19 2026 from pro04.startpoint.vpn.unixathome.org

[21:14 r730-01 dvl ~] % bectl list
BE                                Active Mountpoint Space Created
14.3-RELEASE-p6_2025-12-17_173910 -      -          688M  2025-12-17 17:39
14.3-RELEASE-p7_2026-01-27_225103 -      -          116M  2026-01-27 22:51
default                           NR     /          14.7G 2025-11-25 17:17

[21:14 r730-01 dvl ~] % uptime       
 9:15PM  up 8 days,  4:01, 1 user, load averages: 1.95, 1.53, 1.63
[21:15 r730-01 dvl ~] % 

The host has been rebooted since that last Boot Environment (BE) was created. I feel comfortable deleting both of them:

[21:15 r730-01 dvl ~] % sudo bectl destroy 14.3-RELEASE-p6_2025-12-17_173910
[21:18 r730-01 dvl ~] % sudo bectl destroy 14.3-RELEASE-p7_2026-01-27_225103
[21:18 r730-01 dvl ~] % sudo bectl create before.15.0
[21:18 r730-01 dvl ~] % bectl list
BE          Active Mountpoint Space Created
before.15.0 -      -          8K    2026-02-08 21:18
default     NR     /          13.9G 2025-11-25 17:17
[21:18 r730-01 dvl ~] % 

After deleting, I create a fallback point, which I hope and trust I will never need.

Making sure we are up to date

Updating from 14.3 to 15.0 needs the latest patches or it “will result in an inoperative system”. I know this host is up to date:

[21:18 r730-01 dvl ~] % freebsd-version -ukr
14.3-RELEASE-p8
14.3-RELEASE-p8
14.3-RELEASE-p8

However, I do things the right way because it is the right thing to do. One day, I’ll be wrong.

[21:20 r730-01 dvl ~] % sudo freebsd-update fetch 
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 14.3-RELEASE from update1.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.
Preparing to download files... done.

No updates needed to update system to 14.3-RELEASE-p8.

tmux all the things

I used to be a screen fan, now I use tmux. The explanation of either is outside scope. I did this in a tmux session.

[21:23 r730-01 dvl ~] % tmux
[21:24 r730-01 dvl ~] % su
Password:
root@r730-01:/home/dvl # freebsd-update upgrade -r 15.0-RELEASE
src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 3 mirrors found.
Fetching metadata signature for 14.3-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
...

Then I became root. Often, almost always, I do this via sudo. Today I decided not to.

The rest of the output:

Inspecting system... done.

The following components of FreeBSD seem to be installed:
kernel/generic world/base world/lib32

The following components of FreeBSD do not seem to be installed:
kernel/generic-dbg world/base-dbg world/lib32-dbg

Does this look reasonable (y/n)? y

The above took less then than it took me to type the above bits.

Additional boring output:

Fetching metadata signature for 15.0-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
Inspecting system... done.
Fetching files from 14.3-RELEASE for merging... done.
Preparing to download files... done.
Fetching 5898 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150..
...
60....5670....5680....5690....5700....5710....5720....5730....5740....5750....5760....5770....5780....5790....5800....5810....5820....5830....5840....5850....5860....5870....5880....5890.... done.
Applying patches... done.
Fetching 882 files... ....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150..
..160....170....180....190....200....210....220....230....240....250....260....270....280....290....300....310....320...
.330....340....350....360....370....380....390....400....410....420....430....440....450....460....470....480....490....
500....510....520....530....540....550....560....570....580....590....600....610....620....630....640....650....660....670....680....690....700....710....720....730....740....750....760....770....780....790....800....810....820....830....840....850....860....870....880. done.
Attempting to automatically merge changes in files... done.

I then had to manually merge a few files:

/etc/mail/aliases
/etc/services
/etc/ssh/sshd_config

I accepted them all.

Then:

The following files are affected by updates. No changes have
been downloaded, however, because the files have been modified
locally:
/etc/ssl/cert.pem

That might be of note.

Boring output #2:

The following files will be removed as part of updating to
15.0-RELEASE-p2:
/.cshrc
/.profile
/boot/kernel/callout_test.ko
/boot/kernel/geom_bde.ko
/boot/kernel/geom_vinum.ko
/boot/kernel/iwm3160fw.ko
/boot/kernel/iwm3168fw.ko
/boot/kernel/iwm7260fw.ko
/boot/kernel/iwm7265Dfw.ko
/boot/kernel/iwm7265fw.ko
/boot/kernel/iwm8000Cfw.ko
/boot/kernel/iwm8265fw.ko
/boot/kernel/iwm9000fw.ko
/boot/kernel/iwm9260fw.ko
/boot/kernel/rtw8723d_fw.bin.ko
/boot/kernel/rtw8821c_fw.bin.ko
/boot/kernel/rtw8822b_fw.bin.ko
/boot/kernel/rtw8822c_fw.bin.ko
/boot/kernel/rtw8822c_wow_fw.bin.ko
....
The following files will be added as part of updating to
15.0-RELEASE-p2:
/boot/firmware/iwm3160fw
/boot/firmware/iwm3168fw
/boot/firmware/iwm7260fw
/boot/firmware/iwm7265Dfw
/boot/firmware/iwm7265fw
/boot/firmware/iwm8000C
/boot/firmware/iwm8265fw
/boot/firmware/iwm9000fw
/boot/firmware/iwm9260fw
/boot/fonts/32x64.fnt.gz
/boot/images/freebsd-install-brand-rev.png
/boot/kernel/accf_tls.ko
/boot/kernel/acpi_sbl_wmi.ko
...
The following files will be added as part of updating to
15.0-RELEASE-p2:
/boot/firmware/iwm3160fw
/boot/firmware/iwm3168fw
/boot/firmware/iwm7260fw
/boot/firmware/iwm7265Dfw
/boot/firmware/iwm7265fw
/boot/firmware/iwm8000C
/boot/firmware/iwm8265fw
/boot/firmware/iwm9000fw
/boot/firmware/iwm9260fw
/boot/fonts/32x64.fnt.gz
/boot/images/freebsd-install-brand-rev.png
/boot/kernel/accf_tls.ko
/boot/kernel/acpi_sbl_wmi.ko
To install the downloaded upgrades, run 'freebsd-update [options] install'.

Next in the step, we go back to the instructions and run:

root@r730-01:/home/dvl # freebsd-update install
src component not installed, skipped
Creating snapshot of existing boot environment... done.
Installing updates...
Kernel updates have been installed.  Please reboot and run
'freebsd-update [options] install' again to finish installing updates.

That took very little time.

Let’s check the BE first:

root@r730-01:/home/dvl # bectl list
BE                                Active Mountpoint Space Created
14.3-RELEASE-p8_2026-02-08_213813 -      -          2.88M 2026-02-08 21:38
before.15.0                       -      -          508K  2026-02-08 21:18
default                           NR     /          14.3G 2025-11-25 17:17
root@r730-01:/home/dvl # 

OK, looks good. Let’s reboot.

shutdown, not reboot

I want to emphasis that I say reboot, but I mean shutdown. reboot does not run your rc.d shutdown scripts. shutdown does. This will change soon.

root@r730-01:/home/dvl # shutdown -r now
Shutdown NOW!
shutdown: [pid 78238]
root@r730-01:/home/dvl #                                                                                
*** FINAL System shutdown message from dvl@r730-01.int.unixathome.org ***        "r730-01.int.unixathom" 21:43 08-Feb-26

System going down IMMEDIATELY                                                  

                                                                                                        
*** FINAL System shutdown message from dvl@r730-01.int.unixathome.org ***    

System going down IMMEDIATELY                                                  

                                                                               

System shutdown time has arrived

FreeBSD 15.0 kernel

Here we are, running the new FreeBSD 15.0 kernel:

[16:45 pro04 dvl ~] % r730
Last login: Sun Feb  8 21:40:37 2026 from pro04.startpoint.vpn.unixathome.org
[21:48 r730-01 dvl ~] % uptime
 9:48PM  up 29 secs, 1 user, load averages: 0.23, 0.06, 0.02
[21:48 r730-01 dvl ~] % uname -a
FreeBSD r730-01.int.unixathome.org 15.0-RELEASE-p2 FreeBSD 15.0-RELEASE-p2 GENERIC amd64
[21:48 r730-01 dvl ~] % 
[21:49 r730-01 dvl ~] % freebsd-version -ukr
15.0-RELEASE-p2
15.0-RELEASE-p2
14.3-RELEASE-p8

Installing world

Back to the official documentation, the install of world is done. Again, I go into tmux and become root.

[21:49 r730-01 dvl ~] % tmux
[21:50 r730-01 dvl ~] % su
Password:
root@r730-01:/home/dvl # cd
root@r730-01:~ # freebsd-update install
src component not installed, skipped
Creating snapshot of existing boot environment... done.
Installing updates...
Restarting sshd after upgrade
Performing sanity check on sshd configuration.
Stopping sshd.
Waiting for PIDS: 2358.
Performing sanity check on sshd configuration.
Starting sshd.

Completing this upgrade requires removing old shared object files.
Please rebuild all installed 3rd party software (e.g., programs
installed from the ports tree) and then run
'freebsd-update [options] install' again to finish installing updates.
root@r730-01:~ # 

Here’s the hard part. I can’t build those packages. Or perhaps I can, but I don’t know how. I think I could update the pkg01 jail, and build packages now.

I’ll do that in a separate blog post, to be linked later.

Now imagine, if you will, that I have updated the host packages.

On to the next step.

root@r730-01:~ # freebsd-update install
src component not installed, skipped
Creating snapshot of existing boot environment... done.
Installing updates... done.

And another reboot, err, shutdown.

Here we are:

[22:31 r730-01 dvl ~] % uptime
10:31PM  up 2 mins, 1 user, load averages: 8.14, 2.87, 1.11
[22:31 r730-01 dvl ~] % freebsd-version -ukr
15.0-RELEASE-p2
15.0-RELEASE-p2
15.0-RELEASE-p2
[22:31 r730-01 dvl ~] % file /bin/sh
/bin/sh: ELF 64-bit LSB pie executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 15.0 (1500068), FreeBSD-style, stripped
[22:31 r730-01 dvl ~] % 

Updating my jails is outside scope. Done. Hope this helps you.

Top

Migrating a MySQL 8.0 jail to a new MySQL 8.4 jail – 2nd attempt

Post by Dan Langille via Dan Langille's Other Diary »

Yesterday, I ran my first attempt at Migrating a MySQL 8.0 jail to a new MySQL 8.4 jail – it went better than I expected. However, I spent more time with MySQL than either the data transfer or the MySQL upgrade itself. Today, that should go faster because I already know the fix and have saved the password updates.

Today, I’m going to try again, and hopefully this time will be the last time.

This it the current plan:

  1. sudo service jail stop mysql02
  2. sudo zfs rename data02/jails/mysql02 data02/jails/mysql02.old
  3. sudo zfs snapshot data02/jails/mysql01@mysql80-part2
  4. sudo zfs clone data02/jails/mysql01@mysql80-part2 data02/jails/mysql02
  5. sudo service jail start mysql02
  6. repeat the password fixing stuff from ERROR 1524 (HY000): Plugin ‘mysql_native_password’ is not loaded

In this post:

  1. FreeBSD 14.3
  2. MySQL 8.0.44
  3. MySQL 8.4.7

Let’s get started. This post brought to you by Winter Storm Fern, my morning coffee, and the world’s biggest blankie.

Saving the old new-jail away

This is me turning off and saving my current work.

[12:26 r730-01 dvl ~] % sudo service jail stop mysql02
Stopping jails: mysql02.
[12:26 r730-01 dvl ~] % sudo zfs rename data02/jails/mysql02 data02/jails/mysql02.old.DELETE.after.2026.02.01
cannot unmount '/jails/mysql02': pool or dataset is busy
[12:26 r730-01 dvl ~] % sudo zfs umount data02/jails/mysql02
cannot unmount '/jails/mysql02': pool or dataset is busy

Now that’s got me stumped. I’m the only one on this host. It’s not like someone is cd‘d into that directory.

Here we go, force it:

[12:31 r730-01 dvl ~] % sudo zfs rename -f data02/jails/mysql02 data02/jails/mysql02.old.DELETE.after.2026.02.01
[12:31 r730-01 dvl ~] % 

Create the new jail dataset

Snapshot and clone:

[12:32 r730-01 dvl ~] % sudo zfs snapshot data02/jails/mysql01@mysql80-part2
[12:32 r730-01 dvl ~] % sudo zfs clone data02/jails/mysql01@mysql80-part2 data02/jails/mysql02
[12:32 r730-01 dvl ~] % 

Customize the new jail

These are the changes I made to the newly created jail dataset. I modified these files from the jail host before starting the jail.

  1. set mysql_enable=”NO” in /etc/rc.conf
  2. set the new IP address in /usr/local/etc/{snmpd.conf,nrpe.cfg}
  3. Remove the old log files: sudo rm /jails/mysql02/var/db/mysql/mysql01.int.unixathome.org.*
  4. Temporarily add mysql_native_password=ON to /usr/local/etc/mysql/my.cnf so I can manually update the password hashing – see ERROR 1524 (HY000): Plugin ‘mysql_native_password’ is not loaded

Adjust things for the presence of a new host

Not shown in this post, but stuff I need to do:

  1. Add mysql02 to Nagios
  2. Add mysql02 to LibreNMS
  3. Add mysql02 to ~rsyncer/.ssh/authorized_keys in the dbclone jail.
  4. On mysql02, alter /usr/home/rsyncer/bin/backup.sh to refer to mysql02, not the old mysql01

Start the jail

[12:46 r730-01 dvl ~] % sudo service jail start mysql02                                 
Starting jails: mysql02.

What’s up?

[12:49 mysql02 dvl ~] % ps auwwx
USER    PID %CPU %MEM   VSZ   RSS TT  STAT STARTED    TIME COMMAND
dvl    4749  0.5  0.0 16108  5400  2  SsJ  12:49   0:00.04 -zsh (zsh)
dvl    4747  0.3  0.0 24068 10844  -  SJ   12:49   0:00.01 sshd-session: dvl@pts/2 (sshd-session)
snmpd  3579  0.2  0.0 36128 17724  -  SJ   12:49   0:00.01 /usr/local/sbin/snmpd -p /var/run/net_snmpd.pid -u snmpd -g snmpd -c /usr/local/etc/snmpd.conf -a -r
root   4743  0.2  0.0 24068 10560  -  SsJ  12:49   0:00.02 sshd-session: dvl [priv] (sshd-session)
root   3649  0.1  0.0 23508  9880  -  SsJ  12:49   0:00.00 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups (sshd)
root   3550  0.0  0.0 13904  2720  -  SsJ  12:49   0:00.00 /usr/sbin/syslogd -s
root   3596  0.0  0.0 13944  2544  -  SsJ  12:49   0:00.00 /usr/sbin/cron -s
nagios 3677  0.0  0.0 19596  7520  -  SsJ  12:49   0:00.00 /usr/local/sbin/nrpe -c /usr/local/etc/nrpe.cfg -d
dvl    4998  0.0  0.0 14484  2992  2  R+J  12:49   0:00.00 ps auwwx
[12:49 mysql02 dvl ~] % 

That looks OK. Good start.

Update and start mysql

For me, I had to change repo sources (i.e. /usr/local/etc/pkg/repos/local.conf) to one which built nrpe with MySQL 8.4 support.

[12:52 mysql02 dvl ~] % sudo pkg install mysql84-server
Updating local repository catalogue...
[mysql02.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[mysql02.int.unixathome.org] Fetching data: 100%  409 KiB 418.4 k/s    00:01    
Processing entries: 100%
local repository update completed. 1305 packages processed.
All repositories are up to date.
The following 2 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	mysql84-client: 8.4.7
	mysql84-server: 8.4.7

Number of packages to be installed: 2

The process will require 314 MiB more space.
32 MiB to be downloaded.

Proceed with this action? [y/N]: y
[mysql02.int.unixathome.org] [1/2] Fetching mysql84-client-8.4.7: 100%    6 MiB   6.2 M/s    00:01    
[mysql02.int.unixathome.org] [2/2] Fetching mysql84-server-8.4.7: 100%   26 MiB  27.6 M/s    00:01    
Checking integrity... done (3 conflicting)
  - mysql84-client-8.4.7 conflicts with mysql80-client-8.0.44 on /usr/local/bin/comp_err
  - mysql84-client-8.4.7 conflicts with mysql80-client-8.0.44 on /usr/local/bin/comp_err
  - mysql84-server-8.4.7 conflicts with mysql80-server-8.0.44 on /usr/local/LICENSE.router
Checking integrity... done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 7 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	mysql84-client: 8.4.7
	mysql84-server: 8.4.7

Installed packages to be REINSTALLED:
	pkg-2.5.1

Installed packages to be REMOVED:
	mysql80-client: 8.0.44
	mysql80-server: 8.0.44
	nagios-plugins: 2.4.4,1
	nrpe: 4.1.3

Number of packages to be removed: 4
Number of packages to be installed: 2
Number of packages to be reinstalled: 1

The process will require 1 MiB more space.

Proceed with this action? [y/N]: y
Checking integrity... done (0 conflicting)
[mysql02.int.unixathome.org] [1/7] Deinstalling mysql80-server-8.0.44...
[mysql02.int.unixathome.org] [1/7] Deleting files for mysql80-server-8.0.44: 100%
==> You should manually remove the "mysql" user
==> You should manually remove the "mysql" group
[mysql02.int.unixathome.org] [2/7] Deinstalling nrpe-4.1.3...
[mysql02.int.unixathome.org] [2/7] Deleting files for nrpe-4.1.3: 100%
==> You should manually remove the "nagios" user
==> You should manually remove the "nagios" group
[mysql02.int.unixathome.org] [3/7] Deinstalling nagios-plugins-2.4.4,1...
[mysql02.int.unixathome.org] [3/7] Deleting files for nagios-plugins-2.4.4,1: 100%
[mysql02.int.unixathome.org] [4/7] Deinstalling mysql80-client-8.0.44...
[mysql02.int.unixathome.org] [4/7] Deleting files for mysql80-client-8.0.44: 100%
[mysql02.int.unixathome.org] [5/7] Installing mysql84-client-8.4.7...
[mysql02.int.unixathome.org] [5/7] Extracting mysql84-client-8.4.7: 100%
[mysql02.int.unixathome.org] [6/7] Installing mysql84-server-8.4.7...
===> Creating groups
Using existing group 'mysql'
===> Creating users
Using existing user 'mysql'
===> Creating homedir(s)
[mysql02.int.unixathome.org] [6/7] Extracting mysql84-server-8.4.7: 100%
[mysql02.int.unixathome.org] [7/7] Reinstalling pkg-2.5.1...
[mysql02.int.unixathome.org] [7/7] Extracting pkg-2.5.1: 100%
You may need to manually remove /usr/local/etc/mysql/my.cnf if it is no longer needed.
You may need to manually remove /usr/local/etc/nrpe.cfg if it is no longer needed.
=====
Message from mysql84-client-8.4.7:

--
This is the mysql CLIENT without the server.
for complete server and client, please install databases/mysql84-server
=====
Message from mysql84-server-8.4.7:

--
There is no initial password for first time use of MySQL.
Keep in mind to reset it to a secure password.

MySQL 8.4 has a default /usr/local/etc/mysql/my.cnf,
remember to replace it with your own
or set `mysql_optfile="$YOUR_CNF_FILE` in rc.conf.
You may need to manually remove /usr/local/etc/pkg.conf if it is no longer needed.

OH WAIT, DID YOU SEE THAT ON LINE 56:

[mysql02.int.unixathome.org] [2/7] Deinstalling nrpe-4.1.3...

That happened yesterday, but I didn’t notice it.

Why does it get removed? nrpe is built against a specific version of MySQL. In this case, MySQL 8.0; as I type this, I’m building new packages against MySQL 8.4. Perhaps I’ll need to run this process a third time.

Enable mysql:

[13:03 mysql02 dvl ~] % sudo sysrc mysql_enable="YES"
mysql_enable: NO -> YES

Start:

[13:04 mysql02 dvl ~] % sudo service mysql-server start
Starting mysql.

That took about 20 seconds to run. What was it doing? An upgrade in place:

[13:05 mysql02 dvl /var/db/mysql] % sudo cat mysql02.int.unixathome.org.err    
2026-01-25T13:04:39.6NZ mysqld_safe Logging to '/var/db/mysql/mysql02.int.unixathome.org.err'.
2026-01-25T13:04:39.6NZ mysqld_safe Starting mysqld daemon with databases from /var/db/mysql
2026-01-25T13:04:39.967460Z 0 [System] [MY-015015] [Server] MySQL Server - start.
2026-01-25T13:04:40.234465Z 0 [System] [MY-010116] [Server] /usr/local/libexec/mysqld (mysqld 8.4.7) starting as process 50543
2026-01-25T13:04:40.254156Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-01-25T13:04:41.108366Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-01-25T13:04:41.125322Z 1 [System] [MY-011090] [Server] Data dictionary upgrading from version '80023' to '80300'.
2026-01-25T13:04:42.111377Z 1 [System] [MY-013413] [Server] Data dictionary upgrade from version '80023' to '80300' completed.
2026-01-25T13:04:46.918844Z 4 [System] [MY-013381] [Server] Server upgrade from '80044' to '80407' started.
2026-01-25T13:04:59.595070Z 4 [System] [MY-013381] [Server] Server upgrade from '80044' to '80407' completed.
2026-01-25T13:05:00.670478Z 0 [System] [MY-010229] [Server] Starting XA crash recovery...
2026-01-25T13:05:00.682472Z 0 [System] [MY-010232] [Server] XA crash recovery finished.
2026-01-25T13:05:01.217670Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2026-01-25T13:05:01.217720Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2026-01-25T13:05:01.226666Z 0 [ERROR] [MY-000067] [Server] unknown variable 'add mysql_native_password=ON'.
2026-01-25T13:05:01.227590Z 0 [ERROR] [MY-010119] [Server] Aborting
2026-01-25T13:05:02.160319Z 0 [System] [MY-010910] [Server] /usr/local/libexec/mysqld: Shutdown complete (mysqld 8.4.7)  Source distribution.
2026-01-25T13:05:02.160385Z 0 [System] [MY-015016] [Server] MySQL Server - end.
2026-01-25T13:05:02.6NZ mysqld_safe mysqld from pid file /var/db/mysql/mysql02.int.unixathome.org.pid ended

See line 16 too, I typoed that line, including “add” in my copy/paste. Fixing that, we start up this way:

2026-01-25T13:08:34.6NZ mysqld_safe Logging to '/var/db/mysql/mysql02.int.unixathome.org.err'.
2026-01-25T13:08:34.6NZ mysqld_safe Starting mysqld daemon with databases from /var/db/mysql
2026-01-25T13:08:34.809127Z 0 [System] [MY-015015] [Server] MySQL Server - start.
2026-01-25T13:08:35.081781Z 0 [System] [MY-010116] [Server] /usr/local/libexec/mysqld (mysqld 8.4.7) starting as process 45863
2026-01-25T13:08:35.094231Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-01-25T13:08:35.573195Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-01-25T13:08:35.914229Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2026-01-25T13:08:35.914294Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2026-01-25T13:08:35.974135Z 0 [System] [MY-010931] [Server] /usr/local/libexec/mysqld: ready for connections. Version: '8.4.7'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution.
2026-01-25T13:08:35.974139Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '0.0.0.0' port: 33060, socket: /tmp/mysqlx.sock
2026-01-25T13:09:00.014207Z 8 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'

We see this running:

[13:10 mysql02 dvl ~] % ps auwwx
USER     PID %CPU %MEM     VSZ    RSS TT  STAT STARTED    TIME COMMAND
mysql  45863  0.2  0.1 1239816 563220  -  IJ   13:08   0:02.01 /usr/local/libexec/mysqld --defaults-extra-file=/usr/local/etc/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --plugin-dir=/usr/local/lib/mysql/plugin --log-error=mysql02.int.unixathome.org.err --pid-file=/var/db/mysql/mysql02.int.unixathome.org.pid
root    3550  0.0  0.0   13904   2720  -  SsJ  12:49   0:00.01 /usr/sbin/syslogd -s
snmpd   3579  0.0  0.0   36128  17728  -  SJ   12:49   0:00.58 /usr/local/sbin/snmpd -p /var/run/net_snmpd.pid -u snmpd -g snmpd -c /usr/local/etc/snmpd.conf -a -r
root    3596  0.0  0.0   13944   2544  -  IsJ  12:49   0:00.01 /usr/sbin/cron -s
root    3649  0.0  0.0   23508   9880  -  IsJ  12:49   0:00.01 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups (sshd)
nagios  3677  0.0  0.0   19596   7520  -  IsJ  12:49   0:00.00 /usr/local/sbin/nrpe -c /usr/local/etc/nrpe.cfg -d
root    4743  0.0  0.0   24068  10560  -  IsJ  12:49   0:00.02 sshd-session: dvl [priv] (sshd-session)
dvl     4747  0.0  0.0   24068  10880  -  SJ   12:49   0:00.41 sshd-session: dvl@pts/2 (sshd-session)
root    6482  0.0  0.0   24068  10740  -  IsJ  13:02   0:00.03 sshd-session: dvl [priv] (sshd-session)
dvl    13540  0.0  0.0   24068  11064  -  SJ   13:02   0:00.28 sshd-session: dvl@pts/6 (sshd-session)
mysql  45394  0.0  0.0   14404   3076  -  IsJ  13:08   0:00.02 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/usr/local/etc/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --pid-file=/var/db/mysql/mysql02.int.unixathome.org.pid --user=mysql
dvl     4749  0.0  0.0   19064   6212  2  SsJ  12:49   0:00.10 -zsh (zsh)
dvl     9950  0.0  0.0   14484   3056  2  R+J  13:10   0:00.00 ps auwwx
dvl    14015  0.0  0.0   19064   6132  6  Ss+J 13:02   0:00.10 -zsh (zsh)

Fixing the password hashing

Following on from what I learned in ERROR 1524 (HY000): Plugin ‘mysql_native_password’ is not loaded, I’m doing the following steps:

mysql> SELECT user, host, plugin from mysql.user order by plugin, user, host;
+------------------+-------------------------------+-----------------------+
| user             | host                          | plugin                |
+------------------+-------------------------------+-----------------------+
| mysql.infoschema | localhost                     | caching_sha2_password |
| mysql.session    | localhost                     | caching_sha2_password |
| mysql.sys        | localhost                     | caching_sha2_password |
|                  | localhost                     | mysql_native_password |
| fruityext        | fruit-ext.int.unixathome.org  | mysql_native_password |
| fruityext        | fruity-ext.int.unixathome.org | mysql_native_password |
| fruityint        | fruit-int.int.unixathome.org  | mysql_native_password |
| fruityint        | fruity-int.int.unixathome.org | mysql_native_password |
| librenms         | 10.55.0.27                    | mysql_native_password |
| librenms         | besser.int.unixathome.org     | mysql_native_password |
| librenms_dvl     | 10.55.0.31                    | mysql_native_password |
| nagiosql_user    | 10.55.0.116                   | mysql_native_password |
| nagiosql_user    | 10.55.0.116';                 | mysql_native_password |
| root             | %                             | mysql_native_password |
| root             | 127.0.0.1                     | mysql_native_password |
| root             | ::1                           | mysql_native_password |
| root             | localhost                     | mysql_native_password |
| rsyncer          | %                             | mysql_native_password |
| rsyncer          | localhost                     | mysql_native_password |
+------------------+-------------------------------+-----------------------+
19 rows in set (0.00 sec)

The following paste has been slightly modified for your viewing pleasure:

mysql> alter user 'librenms'@'10.55.0.27' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user 'librenms'@'besser.int.unixathome.org' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user 'nagiosql_user'@'10.55.0.116' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user 'rsyncer'@'%' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user 'rsyncer'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user 'librenms_dvl'@'10.55.0.31' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user 'root'@'127.0.0.1' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user 'root'@'::1' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user 'fruityint'@'fruity-int.int.unixathome.org' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> drop user 'fruityext'@'fruit-ext.int.unixathome.org';
Query OK, 0 rows affected (0.02 sec)

mysql> drop user 'fruityint'@'fruit-int.int.unixathome.org';
Query OK, 0 rows affected (0.01 sec)

mysql> drop user 'fruityext'@'fruity-ext.int.unixathome.org';
Query OK, 0 rows affected (0.01 sec)

mysql> drop user ''@'localhost';
Query OK, 0 rows affected (0.01 sec)

mysql> drop user 'nagiosql_user'@'10.55.0.116\';';
Query OK, 0 rows affected (0.02 sec)

mysql> 

With those commands issued:

mysql> SELECT user, host, plugin from mysql.user order by plugin, user, host;
+------------------+-------------------------------+-----------------------+
| user             | host                          | plugin                |
+------------------+-------------------------------+-----------------------+
| fruityint        | fruity-int.int.unixathome.org | caching_sha2_password |
| librenms         | 10.55.0.27                    | caching_sha2_password |
| librenms         | besser.int.unixathome.org     | caching_sha2_password |
| librenms_dvl     | 10.55.0.31                    | caching_sha2_password |
| mysql.infoschema | localhost                     | caching_sha2_password |
| mysql.session    | localhost                     | caching_sha2_password |
| mysql.sys        | localhost                     | caching_sha2_password |
| nagiosql_user    | 10.55.0.116                   | caching_sha2_password |
| root             | %                             | caching_sha2_password |
| root             | 127.0.0.1                     | caching_sha2_password |
| root             | ::1                           | caching_sha2_password |
| root             | localhost                     | caching_sha2_password |
| rsyncer          | %                             | caching_sha2_password |
| rsyncer          | localhost                     | caching_sha2_password |
+------------------+-------------------------------+-----------------------+
14 rows in set (0.00 sec)

mysql> 

All the users are now on the caching_sha2_password hashing algorithm. The spurious users have been deleted.

Reverting the temporary mysql configuration change

Not shown here: removal of mysql_native_password=ON from /usr/local/etc/mysql/my.cnf. Then a restart:

File /var/tmp/mye45TdAoR.cnf saved
[13:19 mysql02 dvl ~] % sudo service mysql-server restart    
Stopping mysql.
Waiting for PIDS: 45863.
Starting mysql.

The logs indicate:

2026-01-25T13:19:29.410798Z 0 [System] [MY-013172] [Server] Received SHUTDOWN from user . Shutting down mysqld (Version: 8.4.7).
2026-01-25T13:19:30.502667Z 0 [System] [MY-010910] [Server] /usr/local/libexec/mysqld: Shutdown complete (mysqld 8.4.7)  Source distribution.
2026-01-25T13:19:30.502735Z 0 [System] [MY-015016] [Server] MySQL Server - end.
2026-01-25T13:19:30.6NZ mysqld_safe mysqld from pid file /var/db/mysql/mysql02.int.unixathome.org.pid ended
2026-01-25T13:19:30.6NZ mysqld_safe Logging to '/var/db/mysql/mysql02.int.unixathome.org.err'.
2026-01-25T13:19:30.6NZ mysqld_safe Starting mysqld daemon with databases from /var/db/mysql
2026-01-25T13:19:30.824101Z 0 [System] [MY-015015] [Server] MySQL Server - start.
2026-01-25T13:19:31.140111Z 0 [System] [MY-010116] [Server] /usr/local/libexec/mysqld (mysqld 8.4.7) starting as process 54894
2026-01-25T13:19:31.157425Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-01-25T13:19:31.684710Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-01-25T13:19:32.025095Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2026-01-25T13:19:32.025167Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2026-01-25T13:19:32.088489Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '0.0.0.0' port: 33060, socket: /tmp/mysqlx.sock
2026-01-25T13:19:32.088577Z 0 [System] [MY-010931] [Server] /usr/local/libexec/mysqld: ready for connections. Version: '8.4.7'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution.

And, I can get into MySQL just fine, thank you very much:

[13:19 mysql02 dvl ~] % mysql -u root -p                 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.7 Source distribution

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

So far, so good

This run has been good. The only remaining issue is buildina a new nrpe compatible with MySQL 8.4 – that is in progress.

If you are using the FreeBSD supplied packages, you won’t be able to do that. You’ll need to wait until the default MySQL version moves to MySQL 8.4 – I’m running poudriere, and I build my own packages.

I will be running the above steps one more time. I will decide later if a new post is justified.

18:45 UTC

I did have to create ~nagios/.my.cnf containing the user name and password for my Nagios check:

[18:46 mysql02 dvl ~] % sudo cat ~nagios/.my.cnf                                                 
[client] 
user=nagios
password=foo

Now it works. Well, after setting that password in MySQL too:

mysql> alter USER 'nagios'@'localhost' identified by 'foo';
Query OK, 0 rows affected (0.02 sec)

I’m not sure why it worked on mysql01.

Top

Learn from me!

Post by Sebastian Pipping via Hartwork Blog »

Not too long ago, someone literally asked me what they "could learn from me", and that question has stuck with me since.

One thing it made me do was label about 30 earlier blog posts in a new blog topic "Learn from me" that contains posts I consider to be teaching something, be at least somewhat timeless, and be somewhat unique to this blog of mine — posts like:

Maybe more importantly though, there are some non-IT learnings that I would like to share with you now for a draft answer to that question "What can you (potentially) learn from me?" below:

  • Sometimes "throwing 50 bucks at it" is a good solution to a problem if you can.
    Especially when you experienced poverty or near-poverty and were lucky to grew out of it later, there can be learned resistance to spend (reasonable) amounts of money to solve a problem. When you have an okay salary, spending ten hours on a problem, that does not give you joy and could be solve with spending (or giving up on gaining) 50 bucks can be worth reconsideration. (There is one particular person that learned this from me.)

  • Pay attention to what people did not say.
    Sometimes people use particular wording or omit things where a closer look reveals that their omission, them not saying it differently, reveals a hidden truth that they did not intend to share. Ask yourself: Why did they say it this way? What is that difference saying? What are they not saying?

  • Meaning depends on the right level of zoom.
    What do I mean? Activities like watering a plant can have meaning if your zoom level is a garden or the humans around that plant every day. If you zoom out too far or even up to universe level, the plant and these humans become a bunch of cells that lack any meaning. Zooming out to far destroys meaning and zooming in allows finding or creating meaning. Be mindful of the right zoom level.

  • You can be one in a houndred and still not be wrong.
    Just because everyone else says something is true does not make it true. Just because it's written in a book or told by a professor does not make it true. Trust in that possibility that you could be right. (From personal experience.)

  • Be kind to service personnel.
    It takes five positive things to outweigh one negative, and then… who is making up for the bad-day customers before you? Authentically be that someone if you can, pay it forward.

  • The word "must" is hardly ever true.
    When someone says they "must" do something, it's almost always they "want" or decide to do it but are afraid to take responsibility. Pay attention to use of the word "must" (and its siblings "have to", "must not" and "cannot") and try to be true about what you "must" or "want" to do. (Learned from Marshall B. Rosenberg.)

If you learned something here or would like to share your own answer, please find me at sebastian@pipping.org.

I will likely edit this post over time. Please be invited to bookmark it and return later 👋

Best, Sebastian

Top

KaTeX Test

Post by Kristian Köhntopp via Die wunderbare Welt von Isotopp »

This is a KaTeX rendering test post.

Inline math should render here: $E = mc^2$, $a^2 + b^2 = c^2$, and $\int_0^1 x^2 , dx = \frac{1}{3}$.

Display math using $$...$$:

$$ \sum_{k=1}^{n} k = \frac{n(n+1)}{2} $$

Display math using \[...\]:

[ f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{- \frac{(x-\mu)^2}{2\sigma^2}} ]

Matrix and limits test:

$$ \lim_{x \to 0} \frac{\sin x}{x} = 1,\quad A = \begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix} $$

Top

Mermaid Test

Post by Kristian Köhntopp via Die wunderbare Welt von Isotopp »

This is a Mermaid rendering test post.

If Mermaid is wired correctly, both diagrams below should render as SVG diagrams.

flowchart TD
    A[Write Markdown] --> B[Hugo Build]
    B --> C[Load mermaid.js]
    C --> D[Render Diagram]
sequenceDiagram
    participant U as User
    participant B as Browser
    participant H as Hugo Site
    U->>B: Open post page
    B->>H: Request HTML + JS bundle
    H-->>B: Return page with mermaid.js
    B->>B: Initialize Mermaid
    B-->>U: Show rendered diagram
Top

FreeBSD 14.4-BETA1 Available

Post by FreeBSD Newsflash via FreeBSD News Flash »

The first BETA build for the FreeBSD 14.4 release cycle is now available. ISO images for the amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv7, aarch64, and riscv64 architectures are FreeBSD mirror sites.
Top

BOFHLE revisited

Post by Kristian Köhntopp via Die wunderbare Welt von Isotopp »

After the BOFHLE article I wondered if the game can always be solved with the limit of 6 guesses.

So I wrote some Python code to solve the game. We are using the same score_word() function as before, and then implement the guessing strategy we laid out in the previous article.

This is suggest_top() in the codebase.

Example session

Let’s choose pkill as the secret to guess. Initializing a new session:

kk:bofhle kris$ uv run bofhle --reset
New session started.
guess  result
Candidates remaining: 338
Next guesses:
 569 paste
 569 tapes
 553 strip
 546 parec
 543 oscap
 541 ports
 540 plser
 536 pargs
 535 split
 533 lsipc

The output is the list of valid candidate solutions, scored. Since this is a new game, all 338 solutions are in play, and paste is the best guess.

So we guess paste and comparing to pkill we get gbbbb (p matches, and the letters aste are unused). The codes are g for green (letter is used and in this position), y for yellow (letter is used but in a different position), and b for black (letter is not used).

We tell the code that:

kk:bofhle kris$ uv run bofhle --guess paste --result gbbbb
guess  result
paste  🟩⬛⬛⬛⬛
Candidates remaining: 14
Next guesses:
  38 pidof
  38 pinky
  38 pkmon
  37 pkcon
  35 pkgrm
  34 pbind
  34 pkill
  34 pydoc
  32 pdiff
  32 proxy

The code is keeping state in a small sqlite database in $HOME:

kk:bofhle kris$ ls -l ~/.bofhle.db
-rw-r--r--  1 kris  staff  12288 Feb  3 17:59 /Users/kris/.bofhle.db

The database is used to keep track of the game state, previous guesses and results.

We can see the code has filtered the list of candidate solutions based on the previous guess and result. The next best guess is pidof, which has the highest score, but pkill is also in the list.

This is the --strategy most-likely, the default strategy.

Coverage strategy

There is a second strategy, --strategy coverage, that can best be used for a second guess. It will try all remaining candidate words and will tell us, assuming that word is bbbbb, how many valid solutions will be left.

kk:bofhle kris$ uv run bofhle --strategy coverage
guess  result
paste  🟩⬛⬛⬛⬛
Candidates remaining: 14
Next guesses (min remaining if bbbbb):
   0 pbind
   0 pdiff
   0 pidof
   0 pinky
   0 pkcon
   0 pkgmk
   0 pkgrm
   0 pkill
   0 pkmon
   0 plgrp

So any of pbind and friends will close the game, if they would come back bbbbb (pkill for example won’t, it’s the secret solution, after all).

Second guess

Let’s go with --strategy most-likely’s recommendation of pidof as a guess:

kk:bofhle kris$ uv run bofhle --guess pidof --result gybbb
guess  result
paste  🟩⬛⬛⬛⬛
pidof  🟩🟨⬛⬛⬛
Candidates remaining: 2
Next guesses:
   8 pkill
   7 ppriv

Now the next (third) guess of pkill will close the game.

Playing all possible games (most-likely)

There are 338 possible solutions, and we can play the game 338 times with the most-likely strategy and record the success paths:

kk:bofhle kris$ uv run bofhle --test
secret=acpid guesses=3 path=paste idmap acpid
secret=alias guesses=3 path=paste fsadm alias
secret=amidi guesses=3 path=paste rmail amidi
...
secret=zmore guesses=3 path=paste xmore zmore
secret=zpool guesses=3 path=paste gzcmp zpool

Summary
Games: 338
Best: 1 guesses
Worst: 6 guesses
Histogram (guesses -> games):
  1 -> 1
  2 -> 74
  3 -> 190
  4 -> 63
  5 -> 8
  6 -> 2

So one game (paste) ends with one guess, 74 games require two guesses, 190 games require three guesses, 63 games require four guesses, 8 games require five guesses, and 2 games require six guesses.

The 8 games with five guesses are

kk:bofhle kris$ grep =5 bofhle.log
secret=ckuid guesses=5 path=paste minfo blkid ckgid ckuid
secret=ggrep guesses=5 path=paste fgrep zgrep egrep ggrep
secret=nstat guesses=5 path=paste ctags jstat kstat nstat
secret=vwebp guesses=5 path=paste fgrep cwebp dwebp vwebp
secret=xkill guesses=5 path=paste minfo blkid gkill xkill
secret=xzcat guesses=5 path=paste lzcat bzcat gzcat xzcat
secret=xzcmp guesses=5 path=paste gzcmp bzcmp lzcmp xzcmp
secret=zdiff guesses=5 path=paste minfo bdiff gdiff zdiff

The two games with 6 guesses are

kk:bofhle kris$ grep =6 bofhle.log
secret=rgrep guesses=6 path=paste fgrep zgrep egrep ggrep rgrep
secret=ustat guesses=6 path=paste ctags jstat kstat nstat ustat

and all games are strategically solvable in six guesses or less with the most-likely strategy.

The full results of all playable games are recorded in bofhle.log .

Top

Please Don’t Feed the Scattered Lapsus ShinyHunters

Post by Brian Krebs via Krebs on Security »

A prolific data ransom gang that calls itself Scattered Lapsus ShinyHunters (SLSH) has a distinctive playbook when it seeks to extort payment from victim firms: Harassing, threatening and even swatting executives and their families, all while notifying journalists and regulators about the extent of the intrusion. Some victims reportedly are paying — perhaps as much to contain the stolen data as to stop the escalating personal attacks. But a top SLSH expert warns that engaging at all beyond a “We’re not paying” response only encourages further harassment, noting that the group’s fractious and unreliable history means the only winning move is not to pay.

Image: Shutterstock.com, @Mungujakisa

Unlike traditional, highly regimented Russia-based ransomware affiliate groups, SLSH is an unruly and somewhat fluid English-language extortion gang that appears uninterested in building a reputation of consistent behavior whereby victims might have some measure of confidence that the criminals will keep their word if paid.

That’s according to Allison Nixon, director of research at the New York City based security consultancy Unit 221B. Nixon has been closely tracking the criminal group and individual members as they bounce between various Telegram channels used to extort and harass victims, and she said SLSH differs from traditional data ransom groups in other important ways that argue against trusting them to do anything they say they’ll do — such as destroying stolen data.

Like SLSH, many traditional Russian ransomware groups have employed high-pressure tactics to force payment in exchange for a decryption key and/or a promise to delete stolen data, such as publishing a dark web shaming blog with samples of stolen data next to a countdown clock, or notifying journalists and board members of the victim company. But Nixon said the extortion from SLSH quickly escalates way beyond that — to threats of physical violence against executives and their families, DDoS attacks on the victim’s website, and repeated email-flooding campaigns.

SLSH is known for breaking into companies by phishing employees over the phone, and using the purloined access to steal sensitive internal data. In a January 30 blog post, Google’s security forensics firm Mandiant said SLSH’s most recent extortion attacks stem from incidents spanning early to mid-January 2026, when SLSH members pretended to be IT staff and called employees at targeted victim organizations claiming that the company was updating MFA settings.

“The threat actor directed the employees to victim-branded credential harvesting sites to capture their SSO credentials and MFA codes, and then registered their own device for MFA,” the blog post explained.

Victims often first learn of the breach when their brand name is uttered on whatever ephemeral new public Telegram group chat SLSH is using to threaten, extort and harass their prey. According to Nixon, the coordinated harassment on the SLSH Telegram channels is part of a well-orchestrated strategy to overwhelm the victim organization by manufacturing humiliation that pushes them over the threshold to pay.

Nixon said multiple executives at targeted organizations have been subject to “swatting” attacks, wherein SLSH communicated a phony bomb threat or hostage situation at the target’s address in the hopes of eliciting a heavily armed police response at their home or place of work.

“A big part of what they’re doing to victims is the psychological aspect of it, like harassing executives’ kids and threatening the board of the company,” Nixon told KrebsOnSecurity. “And while these victims are getting extortion demands, they’re simultaneously getting outreach from media outlets saying, ‘Hey, do you have any comments on the bad things we’re going to write about you.”

In a blog post today, Unit 221B argues that no one should negotiate with SLSH because the group has demonstrated a willingness to extort victims based on promises that it has no intention to keep. Nixon points out that all of SLSH’s known members hail from The Com, shorthand for a constellation of cybercrime-focused Discord and Telegram communities which serve as a kind of distributed social network that facilitates instant collaboration.

Nixon said Com-based extortion groups tend to instigate feuds and drama between group members, leading to lying, betrayals, credibility destroying behavior, backstabbing, and sabotaging each other.

“With this type of ongoing dysfunction, often compounding by substance abuse, these threat actors often aren’t able to act with the core goal in mind of completing a successful, strategic ransom operation,” Nixon wrote. “They continually lose control with outbursts that put their strategy and operational security at risk, which severely limits their ability to build a professional, scalable, and sophisticated criminal organization network for continued successful ransoms – unlike other, more tenured and professional criminal organizations focused on ransomware alone.”

Intrusions from established ransomware groups typically center around encryption/decryption malware that mostly stays on the affected machine. In contrast, Nixon said, ransom from a Com group is often structured the same as violent sextortion schemes against minors, wherein members of The Com will steal damaging information, threaten to release it, and “promise” to delete it if the victim complies without any guarantee or technical proof point that they will keep their word. She writes:

A key component of SLSH’s efforts to convince victims to pay, Nixon said, involves manipulating the media into hyping the threat posed by this group. This approach also borrows a page from the playbook of sextortion attacks, she said, which encourages predators to keep targets continuously engaged and worrying about the consequences of non-compliance.

“On days where SLSH had no substantial criminal ‘win’ to announce, they focused on announcing death threats and harassment to keep law enforcement, journalists, and cybercrime industry professionals focused on this group,” she said.

An excerpt from a sextortion tutorial from a Com-based Telegram channel. Image: Unit 221B.

Nixon knows a thing or two about being threatened by SLSH: For the past several months, the group’s Telegram channels have been replete with threats of physical violence against her, against Yours Truly, and against other security researchers. These threats, she said, are just another way the group seeks to generate media attention and achieve a veneer of credibility, but they are useful as indicators of compromise because SLSH members tend to name drop and malign security researchers even in their communications with victims.

“Watch for the following behaviors in their communications to you or their public statements,” Unit 221B’s advisory reads. “Repeated abusive mentions of Allison Nixon (or “A.N”), Unit 221B, or cybersecurity journalists—especially Brian Krebs—or any other cybersecurity employee, or cybersecurity company. Any threats to kill, or commit terrorism, or violence against internal employees, cybersecurity employees, investigators, and journalists.”

Unit 221B says that while the pressure campaign during an extortion attempt may be traumatizing to employees, executives, and their family members, entering into drawn-out negotiations with SLSH incentivizes the group to increase the level of harm and risk, which could include the physical safety of employees and their families.

“The breached data will never go back to the way it was, but we can assure you that the harassment will end,” Nixon said. “So, your decision to pay should be a separate issue from the harassment. We believe that when you separate these issues, you will objectively see that the best course of action to protect your interests, in both the short and long term, is to refuse payment.”

Top

Valuable News – 2026/02/02

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX/BSD/Linux systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

The Usual Suspects section at the end is permanent and have links to other sites with interesting UNIX/BSD/Linux news.

Past releases are available at the dedicated NEWS page.

UNIX

Create smolBSD Image Using Dockerfile.
https://github.com/NetBSDfr/smolBSD/tree/main?tab=readme-ov-file#create-a-smolbsd-image-using-a-dockerfile

Building Minimal NetBSD Bootable USB Stick Using smolBSD Dockerfile.
https://indymotion.fr/w/7e2rQwCbb3X74nGWvYgkdi

Fastest Way to Copy Ext4 Formatted Data to FreeBSD Using WSL2 as Intermediary.
https://sanjayregmi.com/posts/fastest-way-to-copy-ext4-formatted-data-to-freebsd-using-wsl2-as-an-intermediary/

FreeBSD Git Weekly: 2026-01-19 to 2026-01-25.
https://freebsd-git-weekly.tarsnap.net/2026-01-19.html

SonicDE Looks to Preserve and Improve X11 Specific KDE Code.
https://phoronix.com/news/SonicDE-Improving-KDE-X11-Code

FreeType Makes ClearType Like LCD Filter Rendering 40% Faster.
https://phoronix.com/news/FreeType-Faster-ClearType-Like

Running XLibre on OpenBSD Manually.
https://github.com/X11Libre/packaging/discussions/24

OPNsense 26.1 Open Source Firewall Released with Threat Intelligence Feeds.
https://vmorecloud.com/opnsense-26-1-open-source-firewall-released/

ZFS vs Btrfs: Architecture/Features/Stability.
https://klarasystems.com/articles/zfs-vs-btrfs-architects-features-and-stability-2/

BSD Now 648: Greytrapping for Years.
https://www.bsdnow.tv/648

Clawdbot FreeBSD Port with Install and rc(8) Service Scripts.
https://github.com/FreeDal/moltbot-freebsd

Use linuxulator-steam-utils to Play Steam Games on FreeBSD.
https://phoronix.com/news/FreeBSD-Gaming-2026

HardenedBSD: Security Enhanced Fork of FreeBSD.
https://privacylife.info/2026/01/hardenedbsd-the-security-enhanced-fork-of-freebsd

AutoBSD is FreeBSD Auto Installer Builder Utilizing bsdinstall(8) and mfsBSD.
https://gitlab.com/btrgk-lab/freebsd/autobsd

150 MB Minimal FreeBSD Installation.
https://vermaden.wordpress.com/2026/02/01/150-mb-minimal-freebsd-installation/

[Call for Test] Single USB Device Passthrough for Bhyve.
https://lists.freebsd.org/archives/freebsd-hackers/2025-August/004977.html

Lazy Reading for 2026/02/01.
https://dragonflydigest.com/2026/02/01/lazy-reading-for-2026-02-01/

Lazy Reading for 2026/01/25.
https://dragonflydigest.com/2026/01/25/lazy-reading-for-2026-01-25/

Lazy Reading for 2026/01/18.
https://dragonflydigest.com/2026/01/18/lazy-reading-for-2026-01-18/

Latest GhostBSD 26.1-R15.0p2 Development ISO Images.
https://ci.ghostbsd.org/jenkins/job/unstable/job/Verify%20The%20ISO%20Build%20With%20Unstable%20Packages/164/

Writing EEPROMs on FreeBSD with minipro.
https://rubenerd.com/writing-eeproms-on-freebsd-with-minipro/

GNU/Hurd is Almost There with x86_64 and SMP and 75% of Debian Packages Building.
https://phoronix.com/news/GNU-Hurd-In-2026

Kindler is Purely Declarative Build System with Experimental FreeBSD Support.
https://setsunasoftware.com/kindler/

Book Design and Implementation of FreeBSD Operating System – 3rd Edition In the Works.
https://news.ycombinator.com/item?id=46844919

WiBSD: Forgotten BSD Distribution for Wireless and Embedded Systems.
https://itc-bohemians.blogspot.com/2026/01/wibsd-forgotten-bsd-distribution-for.html

Linux From Scratch Now Requires systemd(1) and Drops System V Init Support.
https://www.phoronix.com/news/LFS-Dropping-SysVinit

UNIX/Videos

GhostBSD 25.02-R14.3p2.
https://youtube.com/watch?v=rWKXqOsQH9s

How to Add Ports and ffplay(1) to GhostBSD.
https://youtube.com/watch?v=njYp2q94QKU

I Turned FreeBSD Into My Own Zoom (Galene) Server.
https://youtube.com/watch?v=0BjwNCalzBs

2026-01-27 Jail/Zones Production User Call.
https://youtube.com/watch?v=48Z5QFpwktg

OPNsense 26.1: What You Need to Know Before You Upgrade.
https://youtube.com/watch?v=cVryJ8enTBI

I am Gonna Get Rekt Attempting to Install and Configure FreeBSD.
https://youtube.com/live/S4hbR4_o4ec

FreeBSD: Video Graphics on Xorg Running Under UTM.
https://youtube.com/watch?v=8ODBeiRGI7A

Hardware

Maniek86 M8SBC-486 Homebrew 486 Computer.
https://maniek86.xyz/projects/m8sbc_486.php

Modify Celeron 300A for Slot I to Work in SMP System. [Polish]
https://maniek86.xyz/pl/blog.php?p=26

Exploring Linux on LoongArch Mini PC with 4C/8T Loongson 3A6000 CPU.
https://wezm.net/v2/posts/2026/loongarch-mini-pc-m700s/

AI Boom Triggers Storage Crisis: HDD Prices Set to Climb Through 2026 as Capacity Sells Out.
https://pbxscience.com/ai-boom-triggers-storage-crisis-hdd-prices-set-to-climb-through-2026-as-capacity-sells-out/

Life

Dependency Layer in Digital Sovereignty.
https://nesbitt.io/2026/01/28/the-dependency-layer-in-digital-sovereignty.html

Vitamin D and Omega-3 Have Larger Effect on Depression than Antidepressants.
https://blog.ncase.me/on-depression/

Advice from Jocko Has Saved My Life More Times Than I Can Count.
https://youtube.com/watch?v=3DR_8DSDjEw

Why Owning Nothing is So Expensive.
https://youtube.com/watch?v=8AKn-zJMIwY

Other

Firefox Nightly Enables Split View Mode Option by Default.
https://phoronix.com/news/Firefox-Nightly-Split-View

Clawdbot/Moltbook Just Got Scary.
https://youtube.com/watch?v=-fmNzXCp7zA

Usual Suspects

BSD Weekly.
https://bsdweekly.com/

DiscoverBSD.
https://discoverbsd.com/

BSDSec.
https://bsdsec.net/

DragonFly BSD Digest.
https://dragonflydigest.com/

FreeBSD Patch Level Table.
https://bokut.in/freebsd-patch-level-table/

FreeBSD End of Life Date.
https://endoflife.date/freebsd

Phoronix BSD News Archives.
https://phoronix.com/linux/BSD

OpenBSD Journal.
https://undeadly.org/

Call for Testing.
https://callfortesting.org/

Call for Testing – Production Users Call.
https://youtube.com/@callfortesting/videos

BSD Now Weekly Podcast.
https://www.bsdnow.tv/

Nixers Newsletter.
https://newsletter.nixers.net/entries.php

BSD Cafe Journal.
https://journal.bsd.cafe/

DragonFly BSD Digest – Lazy Reading – In Other BSDs.
https://dragonflydigest.com

BSDTV.
https://bsky.app/profile/bsdtv.bsky.social

FreeBSD Git Weekly.
https://freebsd-git-weekly.tarsnap.net/

FreeBSD Meetings.
https://youtube.com/@freebsdmeetings

BSDJedi.
https://youtube.com/@BSDJedi/videos

RoboNuggie.
https://youtube.com/@RoboNuggie/videos

GaryHTech.
https://youtube.com/@GaryHTech/videos

Sheridan Computers.
https://youtube.com/@sheridans/videos

82MHz.
https://82mhz.net/

EOF
Top

HardenedBSD January 2026 Status Report

Post by HardenedBSD via HardenedBSD »

January was a busy month with regards to infrastructure. With both OpenSSL and FreeBSD announcing security fixes, we published new builds just weeks after our new quarterlies dropped. :-)

Now that we have the new quarterlies, I plan to "MFC" (old FreeBSD CVS/SVN term for "Merge From Current".) Kids these days call it `git cherry-pick`. MFC is shorter to type, so that's what I'll use. I plan to MFC a number of commits made in hardened/current/master to the hardened/15-stable/main branch this week.

I've also received multiple reports of crashes with the 15-STABLE installer. I haven't been able to work on this just yet, but am hoping to in the next two weeks. It is almost my current first priority (the MFCs being first.) I figure that if testing the cherry-picked code proves successful, I could cherry-pick those commits into the relevant quarterly branch. Kind of a "thank you" gesture for being patient with me. :-)

I applied relevant updates across the entire infrastructure. I migrated the package repos from being served by a leased server with limited storage to out of my home with plenty of storage. My next goal is to fully automate the build, including syncing. This will mark a good next step to eventually supporting mirroring our package repos. It's much easier to transfer a 140GB package repo over a local 2.5Gbps LAN than a 150Mbps link upstream.

I spent some time experimenting with Meshtastic and Reticulum. I'm getting a better picture from a user's perspective on the current state of mesh networking. My next goal is to teach Reticulum's BackboneInterface implementation how to work on FreeBSD/HardenedBSD.

Two of the four donated Protectli devices are providing the testing lab for this Meshtastic and Reticulum research. Even though the timeframe has shifted pretty dramatically, I'm grateful for their donations and their support.

In src:

  1. Opt ipfw into -ftrivial-var-auto-init=zero
  2. Remove our old MAC hook for jail/prison destruction (this commit breaks building secadm. I'm waiting on upstream to implement a specific MAC hook, and a patch for (for src, not for secadm) is being worked on by FreeBSD's Kyle Evans.)
  3. Disable WITNESS' checking of vnode locks by default. FreeBSD changed some vnode locking semantics and not all filesystem code paths have been updated. As such, we are seeing vnode locking-related panics. I need to get a consequtive block of time to dive in. I'm not a filesytems developer, so this one might take a while to figure out unless someone beats me to it.
  4. rc.subr: Ignore required_modules failures in jails (patch submission by leper4{ _AT_ }protnmail.com.)

In ports:

  1. Bump ftp/curl to 8.18.0
  2. Update Reticulum to latest git HEAD
  3. Disable HARDCFLAGS for devel/avr-gcc
  4. Enable ZEROREG for security/openssl3*. This could induce a noticeable performance hit. Please let me know if you have any serious performance issues after this next package build.
Top

150 MB Minimal FreeBSD Installation

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

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
Top

Expat 2.7.4 released, includes security fixes

Post by Sebastian Pipping via Hartwork Blog »

For readers new to Expat:

libexpat is a fast streaming XML parser. Alongside libxml2, Expat is one of the most widely used software libre XML parsers written in C, specifically C99. It is cross-platform and licensed under the MIT license.

Expat 2.7.4 was released earlier today. The key motivation for cutting a release and doing so now is two security fixes:

The NULL pointer dereference finding and fix were contributed by Artiphishell Inc., and originated in AI.

Another highlight in this release is the introduction of (off-by-default) symbol versioning which Gordon Messmer of Fedora and I teamed up for. If you have seen things like @@GLIBC_2.42 before, it's that same kind of symbol versioning. The rest of the release consists of a mix of minor improvements and fixes, particularly to both build systems, documentation, and infrastructure.

Thanks to everyone who contributed to this release of Expat!

For more details about this release, please check out the change log.

If you maintain Expat packaging, a bundled copy of Expat, or a pinned version of Expat, please update to version 2.7.4. Thank you!

Sebastian Pipping

Top

The Kimwolf Botnet is Stalking Your Local Network

Post by Brian Krebs via Krebs on Security »

The story you are reading is a series of scoops nestled inside a far more urgent Internet-wide security advisory. The vulnerability at issue has been exploited for months already, and it’s time for a broader awareness of the threat. The short version is that everything you thought you knew about the security of the internal network behind your Internet router probably is now dangerously out of date.

The security company Synthient currently sees more than 2 million infected Kimwolf devices distributed globally but with concentrations in Vietnam, Brazil, India, Saudi Arabia, Russia and the United States. Synthient found that two-thirds of the Kimwolf infections are Android TV boxes with no security or authentication built in.

The past few months have witnessed the explosive growth of a new botnet dubbed Kimwolf, which experts say has infected more than 2 million devices globally. The Kimwolf malware forces compromised systems to relay malicious and abusive Internet traffic — such as ad fraud, account takeover attempts and mass content scraping — and participate in crippling distributed denial-of-service (DDoS) attacks capable of knocking nearly any website offline for days at a time.

More important than Kimwolf’s staggering size, however, is the diabolical method it uses to spread so quickly: By effectively tunneling back through various “residential proxy” networks and into the local networks of the proxy endpoints, and by further infecting devices that are hidden behind the assumed protection of the user’s firewall and Internet router.

Residential proxy networks are sold as a way for customers to anonymize and localize their Web traffic to a specific region, and the biggest of these services allow customers to route their traffic through devices in virtually any country or city around the globe.

The malware that turns an end-user’s Internet connection into a proxy node is often bundled with dodgy mobile apps and games. These residential proxy programs also are commonly installed via unofficial Android TV boxes sold by third-party merchants on popular e-commerce sites like Amazon, BestBuy, Newegg, and Walmart.

These TV boxes range in price from $40 to $400, are marketed under a dizzying range of no-name brands and model numbers, and frequently are advertised as a way to stream certain types of subscription video content for free. But there’s a hidden cost to this transaction: As we’ll explore in a moment, these TV boxes make up a considerable chunk of the estimated two million systems currently infected with Kimwolf.

Some of the unsanctioned Android TV boxes that come with residential proxy malware pre-installed. Image: Synthient.

Kimwolf also is quite good at infecting a range of Internet-connected digital photo frames that likewise are abundant at major e-commerce websites. In November 2025, researchers from Quokka published a report (PDF) detailing serious security issues in Android-based digital picture frames running the Uhale app — including Amazon’s bestselling digital frame as of March 2025.

There are two major security problems with these photo frames and unofficial Android TV boxes. The first is that a considerable percentage of them come with malware pre-installed, or else require the user to download an unofficial Android App Store and malware in order to use the device for its stated purpose (video content piracy). The most typical of these uninvited guests are small programs that turn the device into a residential proxy node that is resold to others.

The second big security nightmare with these photo frames and unsanctioned Android TV boxes is that they rely on a handful of Internet-connected microcomputer boards that have no discernible security or authentication requirements built-in. In other words, if you are on the same network as one or more of these devices, you can likely compromise them simultaneously by issuing a single command across the network.

THERE’S NO PLACE LIKE 127.0.0.1

The combination of these two security realities came to the fore in October 2025, when an undergraduate computer science student at the Rochester Institute of Technology began closely tracking Kimwolf’s growth, and interacting directly with its apparent creators on a daily basis.

Benjamin Brundage is the 22-year-old founder of the security firm Synthient, a startup that helps companies detect proxy networks and learn how those networks are being abused. Conducting much of his research into Kimwolf while studying for final exams, Brundage told KrebsOnSecurity in late October 2025 he suspected Kimwolf was a new Android-based variant of Aisuru, a botnet that was incorrectly blamed for a number of record-smashing DDoS attacks last fall.

Brundage says Kimwolf grew rapidly by abusing a glaring vulnerability in many of the world’s largest residential proxy services. The crux of the weakness, he explained, was that these proxy services weren’t doing enough to prevent their customers from forwarding requests to internal servers of the individual proxy endpoints.

Most proxy services take basic steps to prevent their paying customers from “going upstream” into the local network of proxy endpoints, by explicitly denying requests for local addresses specified in RFC-1918, including the well-known Network Address Translation (NAT) ranges 10.0.0.0/8, 192.168.0.0/16, and 172.16.0.0/12. These ranges allow multiple devices in a private network to access the Internet using a single public IP address, and if you run any kind of home or office network, your internal address space operates within one or more of these NAT ranges.

However, Brundage discovered that the people operating Kimwolf had figured out how to talk directly to devices on the internal networks of millions of residential proxy endpoints, simply by changing their Domain Name System (DNS) settings to match those in the RFC-1918 address ranges.

“It is possible to circumvent existing domain restrictions by using DNS records that point to 192.168.0.1 or 0.0.0.0,” Brundage wrote in a first-of-its-kind security advisory sent to nearly a dozen residential proxy providers in mid-December 2025. “This grants an attacker the ability to send carefully crafted requests to the current device or a device on the local network. This is actively being exploited, with attackers leveraging this functionality to drop malware.”

As with the digital photo frames mentioned above, many of these residential proxy services run solely on mobile devices that are running some game, VPN or other app with a hidden component that turns the user’s mobile phone into a residential proxy — often without any meaningful consent.

In a report published today, Synthient said key actors involved in Kimwolf were observed monetizing the botnet through app installs, selling residential proxy bandwidth, and selling its DDoS functionality.

“Synthient expects to observe a growing interest among threat actors in gaining unrestricted access to proxy networks to infect devices, obtain network access, or access sensitive information,” the report observed. “Kimwolf highlights the risks posed by unsecured proxy networks and their viability as an attack vector.”

ANDROID DEBUG BRIDGE

After purchasing a number of unofficial Android TV box models that were most heavily represented in the Kimwolf botnet, Brundage further discovered the proxy service vulnerability was only part of the reason for Kimwolf’s rapid rise: He also found virtually all of the devices he tested were shipped from the factory with a powerful feature called Android Debug Bridge (ADB) mode enabled by default.

Many of the unofficial Android TV boxes infected by Kimwolf include the ominous disclaimer: “Made in China. Overseas use only.” Image: Synthient.

ADB is a diagnostic tool intended for use solely during the manufacturing and testing processes, because it allows the devices to be remotely configured and even updated with new (and potentially malicious) firmware. However, shipping these devices with ADB turned on creates a security nightmare because in this state they constantly listen for and accept unauthenticated connection requests.

For example, opening a command prompt and typing “adb connect” along with a vulnerable device’s (local) IP address followed immediately by “:5555” will very quickly offer unrestricted “super user” administrative access.

Brundage said by early December, he’d identified a one-to-one overlap between new Kimwolf infections and proxy IP addresses offered for rent by China-based IPIDEA, currently the world’s largest residential proxy network by all accounts.

“Kimwolf has almost doubled in size this past week, just by exploiting IPIDEA’s proxy pool,” Brundage told KrebsOnSecurity in early December as he was preparing to notify IPIDEA and 10 other proxy providers about his research.

Brundage said Synthient first confirmed on December 1, 2025 that the Kimwolf botnet operators were tunneling back through IPIDEA’s proxy network and into the local networks of systems running IPIDEA’s proxy software. The attackers dropped the malware payload by directing infected systems to visit a specific Internet address and to call out the pass phrase “krebsfiveheadindustries” in order to unlock the malicious download.

On December 30, Synthient said it was tracking roughly 2 million IPIDEA addresses exploited by Kimwolf in the previous week. Brundage said he has witnessed Kimwolf rebuilding itself after one recent takedown effort targeting its control servers — from almost nothing to two million infected systems just by tunneling through proxy endpoints on IPIDEA for a couple of days.

Brundage said IPIDEA has a seemingly inexhaustible supply of new proxies, advertising access to more than 100 million residential proxy endpoints around the globe in the past week alone. Analyzing the exposed devices that were part of IPIDEA’s proxy pool, Synthient said it found more than two-thirds were Android devices that could be compromised with no authentication needed.

SECURITY NOTIFICATION AND RESPONSE

After charting a tight overlap in Kimwolf-infected IP addresses and those sold by IPIDEA, Brundage was eager to make his findings public: The vulnerability had clearly been exploited for several months, although it appeared that only a handful of cybercrime actors were aware of the capability. But he also knew that going public without giving vulnerable proxy providers an opportunity to understand and patch it would only lead to more mass abuse of these services by additional cybercriminal groups.

On December 17, Brundage sent a security notification to all 11 of the apparently affected proxy providers, hoping to give each at least a few weeks to acknowledge and address the core problems identified in his report before he went public. Many proxy providers who received the notification were resellers of IPIDEA that white-labeled the company’s service.

KrebsOnSecurity first sought comment from IPIDEA in October 2025, in reporting on a story about how the proxy network appeared to have benefitted from the rise of the Aisuru botnet, whose administrators appeared to shift from using the botnet primarily for DDoS attacks to simply installing IPIDEA’s proxy program, among others.

On December 25, KrebsOnSecurity received an email from an IPIDEA employee identified only as “Oliver,” who said allegations that IPIDEA had benefitted from Aisuru’s rise were baseless.

“After comprehensively verifying IP traceability records and supplier cooperation agreements, we found no association between any of our IP resources and the Aisuru botnet, nor have we received any notifications from authoritative institutions regarding our IPs being involved in malicious activities,” Oliver wrote. “In addition, for external cooperation, we implement a three-level review mechanism for suppliers, covering qualification verification, resource legality authentication and continuous dynamic monitoring, to ensure no compliance risks throughout the entire cooperation process.”

“IPIDEA firmly opposes all forms of unfair competition and malicious smearing in the industry, always participates in market competition with compliant operation and honest cooperation, and also calls on the entire industry to jointly abandon irregular and unethical behaviors and build a clean and fair market ecosystem,” Oliver continued.

Meanwhile, the same day that Oliver’s email arrived, Brundage shared a response he’d just received from IPIDEA’s security officer, who identified himself only by the first name Byron. The security officer said IPIDEA had made a number of important security changes to its residential proxy service to address the vulnerability identified in Brundage’s report.

“By design, the proxy service does not allow access to any internal or local address space,” Byron explained. “This issue was traced to a legacy module used solely for testing and debugging purposes, which did not fully inherit the internal network access restrictions. Under specific conditions, this module could be abused to reach internal resources. The affected paths have now been fully blocked and the module has been taken offline.”

Byron told Brundage IPIDEA also instituted multiple mitigations for blocking DNS resolution to internal (NAT) IP ranges, and that it was now blocking proxy endpoints from forwarding traffic on “high-risk” ports “to prevent abuse of the service for scanning, lateral movement, or access to internal services.”

An excerpt from an email sent by IPIDEA’s security officer in response to Brundage’s vulnerability notification. Click to enlarge.

Brundage said IPIDEA appears to have successfully patched the vulnerabilities he identified. He also noted he never observed the Kimwolf actors targeting proxy services other than IPIDEA, which has not responded to requests for comment.

Riley Kilmer is founder of Spur.us, a technology firm that helps companies identify and filter out proxy traffic. Kilmer said Spur has tested Brundage’s findings and confirmed that IPIDEA and all of its affiliate resellers indeed allowed full and unfiltered access to the local LAN.

Kilmer said one model of unsanctioned Android TV boxes that is especially popular — the Superbox, which we profiled in November’s Is Your Android TV Streaming Box Part of a Botnet? — leaves Android Debug Mode running on localhost:5555.

“And since Superbox turns the IP into an IPIDEA proxy, a bad actor just has to use the proxy to localhost on that port and install whatever bad SDKs [software development kits] they want,” Kilmer told KrebsOnSecurity.

Superbox media streaming boxes for sale on Walmart.com.

ECHOES FROM THE PAST

Both Brundage and Kilmer say IPIDEA appears to be the second or third reincarnation of a residential proxy network formerly known as 911S5 Proxy, a service that operated between 2014 and 2022 and was wildly popular on cybercrime forums. 911S5 Proxy imploded a week after KrebsOnSecurity published a deep dive on the service’s sketchy origins and leadership in China.

In that 2022 profile, we cited work by researchers at the University of Sherbrooke in Canada who were studying the threat 911S5 could pose to internal corporate networks. The researchers noted that “the infection of a node enables the 911S5 user to access shared resources on the network such as local intranet portals or other services.”

“It also enables the end user to probe the LAN network of the infected node,” the researchers explained. “Using the internal router, it would be possible to poison the DNS cache of the LAN router of the infected node, enabling further attacks.”

911S5 initially responded to our reporting in 2022 by claiming it was conducting a top-down security review of the service. But the proxy service abruptly closed up shop just one week later, saying a malicious hacker had destroyed all of the company’s customer and payment records. In July 2024, The U.S. Department of the Treasury sanctioned the alleged creators of 911S5, and the U.S. Department of Justice arrested the Chinese national named in my 2022 profile of the proxy service.

Kilmer said IPIDEA also operates a sister service called 922 Proxy, which the company has pitched from Day One as a seamless alternative to 911S5 Proxy.

“You cannot tell me they don’t want the 911 customers by calling it that,” Kilmer said.

Among the recipients of Synthient’s notification was the proxy giant Oxylabs. Brundage shared an email he received from Oxylabs’ security team on December 31, which acknowledged Oxylabs had started rolling out security modifications to address the vulnerabilities described in Synthient’s report.

Reached for comment, Oxylabs confirmed they “have implemented changes that now eliminate the ability to bypass the blocklist and forward requests to private network addresses using a controlled domain.” But it said there is no evidence that Kimwolf or other other attackers exploited its network.

“In parallel, we reviewed the domains identified in the reported exploitation activity and did not observe traffic associated with them,” the Oxylabs statement continued. “Based on this review, there is no indication that our residential network was impacted by these activities.”

PRACTICAL IMPLICATIONS

Consider the following scenario, in which the mere act of allowing someone to use your Wi-Fi network could lead to a Kimwolf botnet infection. In this example, a friend or family member comes to stay with you for a few days, and you grant them access to your Wi-Fi without knowing that their mobile phone is infected with an app that turns the device into a residential proxy node. At that point, your home’s public IP address will show up for rent at the website of some residential proxy provider.

Miscreants like those behind Kimwolf then use residential proxy services online to access that proxy node on your IP, tunnel back through it and into your local area network (LAN), and automatically scan the internal network for devices with Android Debug Bridge mode turned on.

By the time your guest has packed up their things, said their goodbyes and disconnected from your Wi-Fi, you now have two devices on your local network — a digital photo frame and an unsanctioned Android TV box — that are infected with Kimwolf. You may have never intended for these devices to be exposed to the larger Internet, and yet there you are.

Here’s another possible nightmare scenario: Attackers use their access to proxy networks to modify your Internet router’s settings so that it relies on malicious DNS servers controlled by the attackers — allowing them to control where your Web browser goes when it requests a website. Think that’s far-fetched? Recall the DNSChanger malware from 2012 that infected more than a half-million routers with search-hijacking malware, and ultimately spawned an entire security industry working group focused on containing and eradicating it.

XLAB

Much of what is published so far on Kimwolf has come from the Chinese security firm XLab, which was the first to chronicle the rise of the Aisuru botnet in late 2024. In its latest blog post, XLab said it began tracking Kimwolf on October 24, when the botnet’s control servers were swamping Cloudflare’s DNS servers with lookups for the distinctive domain 14emeliaterracewestroxburyma02132[.]su.

This domain and others connected to early Kimwolf variants spent several weeks topping Cloudflare’s chart of the Internet’s most sought-after domains, edging out Google.com and Apple.com of their rightful spots in the top 5 most-requested domains. That’s because during that time Kimwolf was asking its millions of bots to check in frequently using Cloudflare’s DNS servers.

The Chinese security firm XLab found the Kimwolf botnet had enslaved between 1.8 and 2 million devices, with heavy concentrations in Brazil, India, The United States of America and Argentina. Image: blog.xLab.qianxin.com

It is clear from reading the XLab report that KrebsOnSecurity (and security experts) probably erred in misattributing some of Kimwolf’s early activities to the Aisuru botnet, which appears to be operated by a different group entirely. IPDEA may have been truthful when it said it had no affiliation with the Aisuru botnet, but Brundage’s data left no doubt that its proxy service clearly was being massively abused by Aisuru’s Android variant, Kimwolf.

XLab said Kimwolf has infected at least 1.8 million devices, and has shown it is able to rebuild itself quickly from scratch.

“Analysis indicates that Kimwolf’s primary infection targets are TV boxes deployed in residential network environments,” XLab researchers wrote. “Since residential networks usually adopt dynamic IP allocation mechanisms, the public IPs of devices change over time, so the true scale of infected devices cannot be accurately measured solely by the quantity of IPs. In other words, the cumulative observation of 2.7 million IP addresses does not equate to 2.7 million infected devices.”

XLab said measuring Kimwolf’s size also is difficult because infected devices are distributed across multiple global time zones. “Affected by time zone differences and usage habits (e.g., turning off devices at night, not using TV boxes during holidays, etc.), these devices are not online simultaneously, further increasing the difficulty of comprehensive observation through a single time window,” the blog post observed.

XLab noted that the Kimwolf author shows an almost ‘obsessive’ fixation” on Yours Truly, apparently leaving “easter eggs” related to my name in multiple places through the botnet’s code and communications:

Image: XLAB.

ANALYSIS AND ADVICE

One frustrating aspect of threats like Kimwolf is that in most cases it is not easy for the average user to determine if there are any devices on their internal network which may be vulnerable to threats like Kimwolf and/or already infected with residential proxy malware.

Let’s assume that through years of security training or some dark magic you can successfully identify that residential proxy activity on your internal network was linked to a specific mobile device inside your house: From there, you’d still need to isolate and remove the app or unwanted component that is turning the device into a residential proxy.

Also, the tooling and knowledge needed to achieve this kind of visibility just isn’t there from an average consumer standpoint. The work that it takes to configure your network so you can see and interpret logs of all traffic coming in and out is largely beyond the skillset of most Internet users (and, I’d wager, many security experts). But it’s a topic worth exploring in an upcoming story.

Happily, Synthient has erected a page on its website that will state whether a visitor’s public Internet address was seen among those of Kimwolf-infected systems. Brundage also has compiled a list of the unofficial Android TV boxes that are most highly represented in the Kimwolf botnet.

If you own a TV box that matches one of these model names and/or numbers, please just rip it out of your network. If you encounter one of these devices on the network of a family member or friend, send them a link to this story and explain that it’s not worth the potential hassle and harm created by keeping them plugged in.

The top 15 product devices represented in the Kimwolf botnet, according to Synthient.

Chad Seaman is a principal security researcher with Akamai Technologies. Seaman said he wants more consumers to be wary of these pseudo Android TV boxes to the point where they avoid them altogether.

“I want the consumer to be paranoid of these crappy devices and of these residential proxy schemes,” he said. “We need to highlight why they’re dangerous to everyone and to the individual. The whole security model where people think their LAN (Local Internal Network) is safe, that there aren’t any bad guys on the LAN so it can’t be that dangerous is just really outdated now.”

“The idea that an app can enable this type of abuse on my network and other networks, that should really give you pause,” about which devices to allow onto your local network, Seaman said. “And it’s not just Android devices here. Some of these proxy services have SDKs for Mac and Windows, and the iPhone. It could be running something that inadvertently cracks open your network and lets countless random people inside.”

In July 2025, Google filed a “John Doe” lawsuit (PDF) against 25 unidentified defendants collectively dubbed the “BadBox 2.0 Enterprise,” which Google described as a botnet of over ten million unsanctioned Android streaming devices engaged in advertising fraud. Google said the BADBOX 2.0 botnet, in addition to compromising multiple types of devices prior to purchase, also can infect devices by requiring the download of malicious apps from unofficial marketplaces.

Google’s lawsuit came on the heels of a June 2025 advisory from the Federal Bureau of Investigation (FBI), which warned that cyber criminals were gaining unauthorized access to home networks by either configuring the products with malware prior to the user’s purchase, or infecting the device as it downloads required applications that contain backdoors — usually during the set-up process.

The FBI said BADBOX 2.0 was discovered after the original BADBOX campaign was disrupted in 2024. The original BADBOX was identified in 2023, and primarily consisted of Android operating system devices that were compromised with backdoor malware prior to purchase.

Lindsay Kaye is vice president of threat intelligence at HUMAN Security, a company that worked closely on the BADBOX investigations. Kaye said the BADBOX botnets and the residential proxy networks that rode on top of compromised devices were detected because they enabled a ridiculous amount of advertising fraud, as well as ticket scalping, retail fraud, account takeovers and content scraping.

Kaye said consumers should stick to known brands when it comes to purchasing things that require a wired or wireless connection.

“If people are asking what they can do to avoid being victimized by proxies, it’s safest to stick with name brands,” Kaye said. “Anything promising something for free or low-cost, or giving you something for nothing just isn’t worth it. And be careful about what apps you allow on your phone.”

Many wireless routers these days make it relatively easy to deploy a “Guest” wireless network on-the-fly. Doing so allows your guests to browse the Internet just fine but it blocks their device from being able to talk to other devices on the local network — such as shared folders, printers and drives. If someone — a friend, family member, or contractor — requests access to your network, give them the guest Wi-Fi network credentials if you have that option.

There is a small but vocal pro-piracy camp that is almost condescendingly dismissive of the security threats posed by these unsanctioned Android TV boxes. These tech purists positively chafe at the idea of people wholesale discarding one of these TV boxes. A common refrain from this camp is that Internet-connected devices are not inherently bad or good, and that even factory-infected boxes can be flashed with new firmware or custom ROMs that contain no known dodgy software.

However, it’s important to point out that the majority of people buying these devices are not security or hardware experts; the devices are sought out because they dangle something of value for “free.” Most buyers have no idea of the bargain they’re making when plugging one of these dodgy TV boxes into their network.

It is somewhat remarkable that we haven’t yet seen the entertainment industry applying more visible pressure on the major e-commerce vendors to stop peddling this insecure and actively malicious hardware that is largely made and marketed for video piracy. These TV boxes are a public nuisance for bundling malicious software while having no apparent security or authentication built-in, and these two qualities make them an attractive nuisance for cybercriminals.

Stay tuned for Part II in this series, which will poke through clues left behind by the people who appear to have built Kimwolf and benefited from it the most.

Top

Who Benefited from the Aisuru and Kimwolf Botnets?

Post by Brian Krebs via Krebs on Security »

Our first story of 2026 revealed how a destructive new botnet called Kimwolf has infected more than two million devices by mass-compromising a vast number of unofficial Android TV streaming boxes. Today, we’ll dig through digital clues left behind by the hackers, network operators and services that appear to have benefitted from Kimwolf’s spread.

On Dec. 17, 2025, the Chinese security firm XLab published a deep dive on Kimwolf, which forces infected devices to participate in distributed denial-of-service (DDoS) attacks and to relay abusive and malicious Internet traffic for so-called “residential proxy” services.

The software that turns one’s device into a residential proxy is often quietly bundled with mobile apps and games. Kimwolf specifically targeted residential proxy software that is factory installed on more than a thousand different models of unsanctioned Android TV streaming devices. Very quickly, the residential proxy’s Internet address starts funneling traffic that is linked to ad fraud, account takeover attempts and mass content scraping.

The XLab report explained its researchers found “definitive evidence” that the same cybercriminal actors and infrastructure were used to deploy both Kimwolf and the Aisuru botnet — an earlier version of Kimwolf that also enslaved devices for use in DDoS attacks and proxy services.

XLab said it suspected since October that Kimwolf and Aisuru had the same author(s) and operators, based in part on shared code changes over time. But it said those suspicions were confirmed on December 8 when it witnessed both botnet strains being distributed by the same Internet address at 93.95.112[.]59.

Image: XLab.

RESI RACK

Public records show the Internet address range flagged by XLab is assigned to Lehi, Utah-based Resi Rack LLC. Resi Rack’s website bills the company as a “Premium Game Server Hosting Provider.” Meanwhile, Resi Rack’s ads on the Internet moneymaking forum BlackHatWorld refer to it as a “Premium Residential Proxy Hosting and Proxy Software Solutions Company.”

Resi Rack co-founder Cassidy Hales told KrebsOnSecurity his company received a notification on December 10 about Kimwolf using their network “that detailed what was being done by one of our customers leasing our servers.”

“When we received this email we took care of this issue immediately,” Hales wrote in response to an email requesting comment. “This is something we are very disappointed is now associated with our name and this was not the intention of our company whatsoever.”

The Resi Rack Internet address cited by XLab on December 8 came onto KrebsOnSecurity’s radar more than two weeks before that. Benjamin Brundage is founder of Synthient, a startup that tracks proxy services. In late October 2025, Brundage shared that the people selling various proxy services which benefitted from the Aisuru and Kimwolf botnets were doing so at a new Discord server called resi[.]to.

On November 24, 2025, a member of the resi-dot-to Discord channel shares an IP address responsible for proxying traffic over Android TV streaming boxes infected by the Kimwolf botnet.

When KrebsOnSecurity joined the resi[.]to Discord channel in late October as a silent lurker, the server had fewer than 150 members, including “Shox” — the nickname used by Resi Rack’s co-founder Mr. Hales — and his business partner “Linus,” who did not respond to requests for comment.

Other members of the resi[.]to Discord channel would periodically post new IP addresses that were responsible for proxying traffic over the Kimwolf botnet. As the screenshot from resi[.]to above shows, that Resi Rack Internet address flagged by XLab was used by Kimwolf to direct proxy traffic as far back as November 24, if not earlier. All told, Synthient said it tracked at least seven static Resi Rack IP addresses connected to Kimwolf proxy infrastructure between October and December 2025.

Neither of Resi Rack’s co-owners responded to follow-up questions. Both have been active in selling proxy services via Discord for nearly two years. According to a review of Discord messages indexed by the cyber intelligence firm Flashpoint, Shox and Linus spent much of 2024 selling static “ISP proxies” by routing various Internet address blocks at major U.S. Internet service providers.

In February 2025, AT&T announced that effective July 31, 2025, it would no longer originate routes for network blocks that are not owned and managed by AT&T (other major ISPs have since made similar moves). Less than a month later, Shox and Linus told customers they would soon cease offering static ISP proxies as a result of these policy changes.

Shox and Linux, talking about their decision to stop selling ISP proxies.

DORT & SNOW

The stated owner of the resi[.]to Discord server went by the abbreviated username “D.” That initial appears to be short for the hacker handle “Dort,” a name that was invoked frequently throughout these Discord chats.

Dort’s profile on resi dot to.

This “Dort” nickname came up in KrebsOnSecurity’s recent conversations with “Forky,” a Brazilian man who acknowledged being involved in the marketing of the Aisuru botnet at its inception in late 2024. But Forky vehemently denied having anything to do with a series of massive and record-smashing DDoS attacks in the latter half of 2025 that were blamed on Aisuru, saying the botnet by that point had been taken over by rivals.

Forky asserts that Dort is a resident of Canada and one of at least two individuals currently in control of the Aisuru/Kimwolf botnet. The other individual Forky named as an Aisuru/Kimwolf botmaster goes by the nickname “Snow.”

On January 2 — just hours after our story on Kimwolf was published — the historical chat records on resi[.]to were erased without warning and replaced by a profanity-laced message for Synthient’s founder. Minutes after that, the entire server disappeared.

Later that same day, several of the more active members of the now-defunct resi[.]to Discord server moved to a Telegram channel where they posted Brundage’s personal information, and generally complained about being unable to find reliable “bulletproof” hosting for their botnet.

Hilariously, a user by the name “Richard Remington” briefly appeared in the group’s Telegram server to post a crude “Happy New Year” sketch that claims Dort and Snow are now in control of 3.5 million devices infected by Aisuru and/or Kimwolf. Richard Remington’s Telegram account has since been deleted, but it previously stated its owner operates a website that caters to DDoS-for-hire or “stresser” services seeking to test their firepower.

BYTECONNECT, PLAINPROXIES, AND 3XK TECH

Reports from both Synthient and XLab found that Kimwolf was used to deploy programs that turned infected systems into Internet traffic relays for multiple residential proxy services. Among those was a component that installed a software development kit (SDK) called ByteConnect, which is distributed by a provider known as Plainproxies.

ByteConnect says it specializes in “monetizing apps ethically and free,” while Plainproxies advertises the ability to provide content scraping companies with “unlimited” proxy pools. However, Synthient said that upon connecting to ByteConnect’s SDK they instead observed a mass influx of credential-stuffing attacks targeting email servers and popular online websites.

A search on LinkedIn finds the CEO of Plainproxies is Friedrich Kraft, whose resume says he is co-founder of ByteConnect Ltd. Public Internet routing records show Mr. Kraft also operates a hosting firm in Germany called 3XK Tech GmbH. Mr. Kraft did not respond to repeated requests for an interview.

In July 2025, Cloudflare reported that 3XK Tech (a.k.a. Drei-K-Tech) had become the Internet’s largest source of application-layer DDoS attacks. In November 2025, the security firm GreyNoise Intelligence found that Internet addresses on 3XK Tech were responsible for roughly three-quarters of the Internet scanning being done at the time for a newly discovered and critical vulnerability in security products made by Palo Alto Networks.

Source: Cloudflare’s Q2 2025 DDoS threat report.

LinkedIn has a profile for another Plainproxies employee, Julia Levi, who is listed as co-founder of ByteConnect. Ms. Levi did not respond to requests for comment. Her resume says she previously worked for two major proxy providers: Netnut Proxy Network, and Bright Data.

Synthient likewise said Plainproxies ignored their outreach, noting that the Byteconnect SDK continues to remain active on devices compromised by Kimwolf.

A post from the LinkedIn page of Plainproxies Chief Revenue Officer Julia Levi, explaining how the residential proxy business works.

MASKIFY

Synthient’s January 2 report said another proxy provider heavily involved in the sale of Kimwolf proxies was Maskify, which currently advertises on multiple cybercrime forums that it has more than six million residential Internet addresses for rent.

Maskify prices its service at a rate of 30 cents per gigabyte of data relayed through their proxies. According to Synthient, that price range is insanely low and is far cheaper than any other proxy provider in business today.

“Synthient’s Research Team received screenshots from other proxy providers showing key Kimwolf actors attempting to offload proxy bandwidth in exchange for upfront cash,” the Synthient report noted. “This approach likely helped fuel early development, with associated members spending earnings on infrastructure and outsourced development tasks. Please note that resellers know precisely what they are selling; proxies at these prices are not ethically sourced.”

Maskify did not respond to requests for comment.

The Maskify website. Image: Synthient.

BOTMASTERS LASH OUT

Hours after our first Kimwolf story was published last week, the resi[.]to Discord server vanished, Synthient’s website was hit with a DDoS attack, and the Kimwolf botmasters took to doxing Brundage via their botnet.

The harassing messages appeared as text records uploaded to the Ethereum Name Service (ENS), a distributed system for supporting smart contracts deployed on the Ethereum blockchain. As documented by XLab, in mid-December the Kimwolf operators upgraded their infrastructure and began using ENS to better withstand the near-constant takedown efforts targeting the botnet’s control servers.

An ENS record used by the Kimwolf operators taunts security firms trying to take down the botnet’s control servers. Image: XLab.

By telling infected systems to seek out the Kimwolf control servers via ENS, even if the servers that the botmasters use to control the botnet are taken down the attacker only needs to update the ENS text record to reflect the new Internet address of the control server, and the infected devices will immediately know where to look for further instructions.

“This channel itself relies on the decentralized nature of blockchain, unregulated by Ethereum or other blockchain operators, and cannot be blocked,” XLab wrote.

The text records included in Kimwolf’s ENS instructions can also feature short messages, such as those that carried Brundage’s personal information. Other ENS text records associated with Kimwolf offered some sage advice: “If flagged, we encourage the TV box to be destroyed.”

An ENS record tied to the Kimwolf botnet advises, “If flagged, we encourage the TV box to be destroyed.”

Both Synthient and XLabs say Kimwolf targets a vast number of Android TV streaming box models, all of which have zero security protections, and many of which ship with proxy malware built in. Generally speaking, if you can send a data packet to one of these devices you can also seize administrative control over it.

If you own a TV box that matches one of these model names and/or numbers, please just rip it out of your network. If you encounter one of these devices on the network of a family member or friend, send them a link to this story (or to our January 2 story on Kimwolf) and explain that it’s not worth the potential hassle and harm created by keeping them plugged in.

Top

Kimwolf Botnet Lurking in Corporate, Govt. Networks

Post by Brian Krebs via Krebs on Security »

A new Internet-of-Things (IoT) botnet called Kimwolf has spread to more than 2 million devices, forcing infected systems to participate in massive distributed denial-of-service (DDoS) attacks and to relay other malicious and abusive Internet traffic. Kimwolf’s ability to scan the local networks of compromised systems for other IoT devices to infect makes it a sobering threat to organizations, and new research reveals Kimwolf is surprisingly prevalent in government and corporate networks.

Image: Shutterstock, @Elzicon.

Kimwolf grew rapidly in the waning months of 2025 by tricking various “residential proxy” services into relaying malicious commands to devices on the local networks of those proxy endpoints. Residential proxies are sold as a way to anonymize and localize one’s Web traffic to a specific region, and the biggest of these services allow customers to route their Internet activity through devices in virtually any country or city around the globe.

The malware that turns one’s Internet connection into a proxy node is often quietly bundled with various mobile apps and games, and it typically forces the infected device to relay malicious and abusive traffic — including ad fraud, account takeover attempts, and mass content-scraping.

Kimwolf mainly targeted proxies from IPIDEA, a Chinese service that has millions of proxy endpoints for rent on any given week. The Kimwolf operators discovered they could forward malicious commands to the internal networks of IPIDEA proxy endpoints, and then programmatically scan for and infect other vulnerable devices on each endpoint’s local network.

Most of the systems compromised through Kimwolf’s local network scanning have been unofficial Android TV streaming boxes. These are typically Android Open Source Project devices — not Android TV OS devices or Play Protect certified Android devices — and they are generally marketed as a way to watch unlimited (read:pirated) video content from popular subscription streaming services for a one-time fee.

However, a great many of these TV boxes ship to consumers with residential proxy software pre-installed. What’s more, they have no real security or authentication built-in: If you can communicate directly with the TV box, you can also easily compromise it with malware.

While IPIDEA and other affected proxy providers recently have taken steps to block threats like Kimwolf from going upstream into their endpoints (reportedly with varying degrees of success), the Kimwolf malware remains on millions of infected devices.

A screenshot of IPIDEA’s proxy service.

Kimwolf’s close association with residential proxy networks and compromised Android TV boxes might suggest we’d find relatively few infections on corporate networks. However, the security firm Infoblox said a recent review of its customer traffic found nearly 25 percent of them made a query to a Kimwolf-related domain name since October 1, 2025, when the botnet first showed signs of life.

Infoblox found the affected customers are based all over the world and in a wide range of industry verticals, from education and healthcare to government and finance.

“To be clear, this suggests that nearly 25% of customers had at least one device that was an endpoint in a residential proxy service targeted by Kimwolf operators,” Infoblox explained. “Such a device, maybe a phone or a laptop, was essentially co-opted by the threat actor to probe the local network for vulnerable devices. A query means a scan was made, not that new devices were compromised. Lateral movement would fail if there were no vulnerable devices to be found or if the DNS resolution was blocked.”

Synthient, a startup that tracks proxy services and was the first to disclose on January 2 the unique methods Kimwolf uses to spread, found proxy endpoints from IPIDEA were present in alarming numbers at government and academic institutions worldwide. Synthient said it spied at least 33,000 affected Internet addresses at universities and colleges, and nearly 8,000 IPIDEA proxies within various U.S. and foreign government networks.

The top 50 domain names sought out by users of IPIDEA’s residential proxy service, according to Synthient.

In a webinar on January 16, experts at the proxy tracking service Spur profiled Internet addresses associated with IPIDEA and 10 other proxy services that were thought to be vulnerable to Kimwolf’s tricks. Spur found residential proxies in nearly 300 government owned and operated networks, 318 utility companies, 166 healthcare companies or hospitals, and 141 companies in banking and finance.

“I looked at the 298 [government] owned and operated [networks], and so many of them were DoD [U.S. Department of Defense], which is kind of terrifying that DoD has IPIDEA and these other proxy services located inside of it,” Spur Co-Founder Riley Kilmer said. “I don’t know how these enterprises have these networks set up. It could be that [infected devices] are segregated on the network, that even if you had local access it doesn’t really mean much. However, it’s something to be aware of. If a device goes in, anything that device has access to the proxy would have access to.”

Kilmer said Kimwolf demonstrates how a single residential proxy infection can quickly lead to bigger problems for organizations that are harboring unsecured devices behind their firewalls, noting that proxy services present a potentially simple way for attackers to probe other devices on the local network of a targeted organization.

“If you know you have [proxy] infections that are located in a company, you can chose that [network] to come out of and then locally pivot,” Kilmer said. “If you have an idea of where to start or look, now you have a foothold in a company or an enterprise based on just that.”

This is the third story in our series on the Kimwolf botnet. Next week, we’ll shed light on the myriad China-based individuals and companies connected to the Badbox 2.0 botnet, the collective name given to a vast number of Android TV streaming box models that ship with no discernible security or authentication built-in, and with residential proxy malware pre-installed.

Further reading:

The Kimwolf Botnet is Stalking Your Local Network

Who Benefitted from the Aisuru and Kimwolf Botnets?

A Broken System Fueling Botnets (Synthient).

Top

Who Operates the Badbox 2.0 Botnet?

Post by Brian Krebs via Krebs on Security »

The cybercriminals in control of Kimwolf — a disruptive botnet that has infected more than 2 million devices — recently shared a screenshot indicating they’d compromised the control panel for Badbox 2.0, a vast China-based botnet powered by malicious software that comes pre-installed on many Android TV streaming boxes. Both the FBI and Google say they are hunting for the people behind Badbox 2.0, and thanks to bragging by the Kimwolf botmasters we may now have a much clearer idea about that.

Our first story of 2026, The Kimwolf Botnet is Stalking Your Local Network, detailed the unique and highly invasive methods Kimwolf uses to spread. The story warned that the vast majority of Kimwolf infected systems were unofficial Android TV boxes that are typically marketed as a way to watch unlimited (pirated) movie and TV streaming services for a one-time fee.

Our January 8 story, Who Benefitted from the Aisuru and Kimwolf Botnets?, cited multiple sources saying the current administrators of Kimwolf went by the nicknames “Dort” and “Snow.” Earlier this month, a close former associate of Dort and Snow shared what they said was a screenshot the Kimwolf botmasters had taken while logged in to the Badbox 2.0 botnet control panel.

That screenshot, a portion of which is shown below, shows seven authorized users of the control panel, including one that doesn’t quite match the others: According to my source, the account “ABCD” (the one that is logged in and listed in the top right of the screenshot) belongs to Dort, who somehow figured out how to add their email address as a valid user of the Badbox 2.0 botnet.

The control panel for the Badbox 2.0 botnet lists seven authorized users and their email addresses. Click to enlarge.

Badbox has a storied history that well predates Kimwolf’s rise in October 2025. In July 2025, Google filed a “John Doe” lawsuit (PDF) against 25 unidentified defendants accused of operating Badbox 2.0, which Google described as a botnet of over ten million unsanctioned Android streaming devices engaged in advertising fraud. Google said Badbox 2.0, in addition to compromising multiple types of devices prior to purchase, also can infect devices by requiring the download of malicious apps from unofficial marketplaces.

Google’s lawsuit came on the heels of a June 2025 advisory from the Federal Bureau of Investigation (FBI), which warned that cyber criminals were gaining unauthorized access to home networks by either configuring the products with malware prior to the user’s purchase, or infecting the device as it downloads required applications that contain backdoors — usually during the set-up process.

The FBI said Badbox 2.0 was discovered after the original Badbox campaign was disrupted in 2024. The original Badbox was identified in 2023, and primarily consisted of Android operating system devices (TV boxes) that were compromised with backdoor malware prior to purchase.

KrebsOnSecurity was initially skeptical of the claim that the Kimwolf botmasters had hacked the Badbox 2.0 botnet. That is, until we began digging into the history of the qq.com email addresses in the screenshot above.

CATHEAD

An online search for the address 34557257@qq.com (pictured in the screenshot above as the user “Chen“) shows it is listed as a point of contact for a number of China-based technology companies, including:

Beijing Hong Dake Wang Science & Technology Co Ltd.
Beijing Hengchuang Vision Mobile Media Technology Co. Ltd.
Moxin Beijing Science and Technology Co. Ltd.

The website for Beijing Hong Dake Wang Science is asmeisvip[.]net, a domain that was flagged in a March 2025 report by HUMAN Security as one of several dozen sites tied to the distribution and management of the Badbox 2.0 botnet. Ditto for moyix[.]com, a domain associated with Beijing Hengchuang Vision Mobile.

A search at the breach tracking service Constella Intelligence finds 34557257@qq.com at one point used the password “cdh76111.” Pivoting on that password in Constella shows it is known to have been used by just two other email accounts: daihaic@gmail.com and cathead@gmail.com.

Constella found cathead@gmail.com registered an account at jd.com (China’s largest online retailer) in 2021 under the name “陈代海,” which translates to “Chen Daihai.” According to DomainTools.com, the name Chen Daihai is present in the original registration records (2008) for moyix[.]com, along with the email address cathead@astrolink[.]cn.

Incidentally, astrolink[.]cn also is among the Badbox 2.0 domains identified in HUMAN Security’s 2025 report. DomainTools finds cathead@astrolink[.]cn was used to register more than a dozen domains, including vmud[.]net, yet another Badbox 2.0 domain tagged by HUMAN Security.

XAVIER

A cached copy of astrolink[.]cn preserved at archive.org shows the website belongs to a mobile app development company whose full name is Beijing Astrolink Wireless Digital Technology Co. Ltd. The archived website reveals a “Contact Us” page that lists a Chen Daihai as part of the company’s technology department. The other person featured on that contact page is Zhu Zhiyu, and their email address is listed as xavier@astrolink[.]cn.

A Google-translated version of Astrolink’s website, circa 2009. Image: archive.org.

Astute readers will notice that the user Mr.Zhu in the Badbox 2.0 panel used the email address xavierzhu@qq.com. Searching this address in Constella reveals a jd.com account registered in the name of Zhu Zhiyu. A rather unique password used by this account matches the password used by the address xavierzhu@gmail.com, which DomainTools finds was the original registrant of astrolink[.]cn.

ADMIN

The very first account listed in the Badbox 2.0 panel — “admin,” registered in November 2020 — used the email address 189308024@qq.com. DomainTools shows this email is found in the 2022 registration records for the domain guilincloud[.]cn, which includes the registrant name “Huang Guilin.”

Constella finds 189308024@qq.com is associated with the China phone number 18681627767. The open-source intelligence platform osint.industries reveals this phone number is connected to a Microsoft profile created in 2014 under the name Guilin Huang (桂林 黄). The cyber intelligence platform Spycloud says that phone number was used in 2017 to create an account at the Chinese social media platform Weibo under the username “h_guilin.”

The public information attached to Guilin Huang’s Microsoft account, according to the breach tracking service osintindustries.com.

The remaining three users and corresponding qq.com email addresses were all connected to individuals in China. However, none of them (nor Mr. Huang) had any apparent connection to the entities created and operated by Chen Daihai and Zhu Zhiyu — or to any corporate entities for that matter. Also, none of these individuals responded to requests for comment.

The mind map below includes search pivots on the email addresses, company names and phone numbers that suggest a connection between Chen Daihai, Zhu Zhiyu, and Badbox 2.0.

This mind map includes search pivots on the email addresses, company names and phone numbers that appear to connect Chen Daihai and Zhu Zhiyu to Badbox 2.0. Click to enlarge.

UNAUTHORIZED ACCESS

The idea that the Kimwolf botmasters could have direct access to the Badbox 2.0 botnet is a big deal, but explaining exactly why that is requires some background on how Kimwolf spreads to new devices. The botmasters figured out they could trick residential proxy services into relaying malicious commands to vulnerable devices behind the firewall on the unsuspecting user’s local network.

The vulnerable systems sought out by Kimwolf are primarily Internet of Things (IoT) devices like unsanctioned Android TV boxes and digital photo frames that have no discernible security or authentication built-in. Put simply, if you can communicate with these devices, you can compromise them with a single command.

Our January 2 story featured research from the proxy-tracking firm Synthient, which alerted 11 different residential proxy providers that their proxy endpoints were vulnerable to being abused for this kind of local network probing and exploitation.

Most of those vulnerable proxy providers have since taken steps to prevent customers from going upstream into the local networks of residential proxy endpoints, and it appeared that Kimwolf would no longer be able to quickly spread to millions of devices simply by exploiting some residential proxy provider.

However, the source of that Badbox 2.0 screenshot said the Kimwolf botmasters had an ace up their sleeve the whole time: Secret access to the Badbox 2.0 botnet control panel.

“Dort has gotten unauthorized access,” the source said. “So, what happened is normal proxy providers patched this. But Badbox doesn’t sell proxies by itself, so it’s not patched. And as long as Dort has access to Badbox, they would be able to load” the Kimwolf malware directly onto TV boxes associated with Badbox 2.0.

The source said it isn’t clear how Dort gained access to the Badbox botnet panel. But it’s unlikely that Dort’s existing account will persist for much longer: All of our notifications to the qq.com email addresses listed in the control panel screenshot received a copy of that image, as well as questions about the apparently rogue ABCD account.

Top

The Q4 2025 Issue of the FreeBSD Journal is Now Available!

Post by FreeBSD Foundation via FreeBSD Foundation »

We are pleased to announce the October/November/December 2025 issue of the FreeBSD Journal, focused on FreeBSD 15.0, is now available. This online publication provides the FreeBSD community with valuable insights and technical knowledge each quarter.

This quarter’s issue highlights FreeBSD 15.0, featuring articles that explore storage and sound subsystems, system security, developer tooling, and community initiatives. Inside, you’ll find coverage on FreeBSD 15.0 fixes and features, Universal Flash Storage, credential transitions with mdo(1) and mac_do(4), FreeBSD’s participation in Google Summer of Code 2025, and building U-Boot. The issue also includes community staples such as We Get Letters, the 2026 Events Calendar, and a Letter from the Foundation.

Thank you to all the contributors who made this issue possible. The FreeBSD Journal highlights the work and expertise of the FreeBSD community. As always, it is freely available in both HTML and PDF formats.

Read the Q4 2025 Issue Here:
https://freebsdfoundation.org/our-work/journal/browser-based-edition/freebsd-15-0/

Please take a moment to read this issue, share it with your colleagues, and help spread the word that the FreeBSD Journal is a great way to stay up to date on the FreeBSD community.

The post The Q4 2025 Issue of the FreeBSD Journal is Now Available! first appeared on FreeBSD Foundation.

Top

Valuable News – 2026/01/26

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX/BSD/Linux systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

The Usual Suspects section at the end is permanent and have links to other sites with interesting UNIX/BSD/Linux news.

Past releases are available at the dedicated NEWS page.

UNIX

Linux Version of Factorio Game Runs Perfectly on FreeBSD on ThinkPad T480.
https://mastodon.bsd.cafe/@Larvitz/115921545778651375

Running Factorio Headless Server on FreeBSD with Linuxulator.
https://blog.hofstede.it/running-a-factorio-headless-server-on-freebsd-with-the-linuxulator/

FreeBSD Git Weekly: 2026-01-12 to 2026-01-18.
https://freebsd-git-weekly.tarsnap.net/2026-01-12.html

Xorg Server May Create New Selective Git Branch with Hopes of New Release This Year.
https://phoronix.com/news/X.Org-Server-Main-Repo

DragonflyBSD Now Allows Optional AMD GCN 1.1 Support in AMDGPU Driver.
https://phoronix.com/news/AMD-CIK-AMDGPU-DragonFlyBSD

How to Install LXQt Desktop Environment on FreeBSD (FAST/Lightweight/Modern).
https://youtube.com/watch?v=C4v96MWz0-8

Linux GNU C Library Fixes Security Issue Present Since 1996.
https://phoronix.com/news/Glibc-Security-Fix-For-1996-Bug

Inside Small POSIX SSG.
https://aashvik.com/posts/shell-ssg/

Patched FreeBSD AMIs.
https://daemonology.net/blog/2026-01-20-Patched-FreeBSD-AMIs.html

2026/01/20 Jail/Zones Production User Call.
https://youtube.com/watch?v=y5WeIBkSnIM

Exciting Day with More Performance Optimizations Merged for RADV in Mesa 26.0.
https://phoronix.com/news/RADV-More-Perf-Mesa-26.0

OpenBSD Stories – Kernel Stack Hygiene.
http://miod.online.fr/software/openbsd/stories/stack.html

ProxWall – Integration into Your Proxmox VE Cluster.
https://gyptazy.com/blog/proxmox-microsegmentation-proxwall-security/

OpenWV is Free/Open Source Reimplementation of Widevine CDM – Part of DRM That Runs in Browser.
https://github.com/tchebb/openwv

KDE Removes FreeBSD Support in Plasma Login Manager Because They Rely on systemd/logind Linux Daemons.
https://github.com/KDE/plasma-login-manager/commit/e78f33aefd6512b542af21c3542516f38cbf678d

Golang Tour on FreeBSD.
https://youtube.com/watch?v=ATjws3zqnII

Hardening OPNsense: Using Q-Feeds to Block Malicious Traffic.
https://youtube.com/watch?v=RYEizNBE9Y0

Slackware on Encrypted ZFS Root.
https://tumfatig.net/2026/slackware-on-encrypted-zfs-root/

Xorg Plans Political Moves: Removing 2 Years of Commits from XLibre Developer.
https://youtube.com/watch?v=d7-FczaSkdo

Bhyve Prometheus Exporter for Sylve on FreeBSD.
https://gyptazy.com/blog/bhyve-sylve-freebsd-prometheus-metric-exporter/

Patches to Bring Back Traditional Experience for GTK+3.
https://github.com/lah7/gtk3-classic

Write-Read-Verify on FreeBSD 13 with camcontrol(8) Instead of hdparm(8) Tool.
https://dapperdrake.neocities.org/2023-12-wrv-freebsd-13-camcontrol-hdparm

30 Years of ReactOS.
https://reactos.org/blogs/30yrs-of-ros/

Klara Expert Perspective on OpenZFS in 2026 and What to Expect Next.
https://klarasystems.com/articles/predictions-for-openzfs-in-2026-expert-perspective/

FreeBSD – Home NAS – Part 9 – Data Backup to AWS S3 and Google Drive with rclone(1) Command.
https://rtfm.co.ua/en/freebsd-home-nas-part-9-data-backup-to-aws-s3-and-google-drive-with-rclone/

7 Alternative GhostBSD Browsers.
https://youtube.com/watch?v=v9PV84Ws4gY

Technical Beauty – Episode 18 – Lua.
https://linkedin.com/posts/vvoss_technicalbeauty-lua-programming-activity-7419997287772266496-Ltf5/

Build Your Own NetBSD Live CD.
https://substack.com/inbox/post/182535372

helloSystem 0.8 Released FreeBSD Based OS Inspired by macOS.
https://itsfoss.gitlab.io/post/hellosystem-08-released-freebsd-based-os-inspired-by-macos/

Default GhostBSD to XLibre.
https://github.com/ghostbsd/ghostbsd-build/pull/259

Ventoy 1.1.08 Adds Support for FreeBSD 15.0.
https://vmorecloud.com/ventoy-1-1-08-adds-support-for-freebsd-15-0/

BastilleBSD Intriduces Web Interface Using New Bastille API Backend.
https://mastodon.bsd.cafe/@BastilleBSD@fosstodon.org/115941471797560638

Network Testbed for Commercial Telecommunications Product Testing on FreeBSD and Linux.
https://imunes.net/dl/papers/softcom_2014.pdf

OPNSense Public Grafana Dashboard.
https://grafana.com/grafana/dashboards/22569-opnsense-public/

General Purpose IP Network Emulation/Simulation Tool for FreeBSD and Linux.
https://imunes.net/

2026-01-22 Bhyve Production User Call.
https://youtube.com/watch?v=1soxbALV2Z0

Liberating ASUS CX1100CN Chromebook with OpenBSD.
https://btxx.org/posts/asus-openbsd/

How to Switch from Xorg to XLibre in FreeBSD 15.0.
https://eugene-andrienko.com/it/2026/01/22/freebsd-15-0-xlibre.html

What ZFS People Usually Mean When They Talk About ZFS Metadata.
https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSMetadataMeaning

BSD Now 647: Why BSDs?
https://www.bsdnow.tv/647

Upgrading Base Package Install from 15.0-RELEASE to 16-CURRENT.
https://people.freebsd.org/~dch/posts/2026-01-18-upgrading-base-packages-to-current/

Migrate Mastodon Media Storage from Minio S3 to SeaweedFS S3.
https://thomas-leister.de/en/mastodon-switch-minio-s3-seaweedfs/

Install ZSH + OhMyZSH on FreeBSD.
https://sharpwriting.net/project/install-zsh-ohmyzsh-on-freebsd/

Wine 11.1 Released in Kicking Off New Development Cycle.
https://phoronix.com/news/Wine-11.1-Released

ProxSnap Missing Snapshot Management Tool for Proxmox Clusters.
https://gyptazy.com/blog/snapshot-management-tool-proxmox/

Open Widevine Support Added to Chromium Port with Help of OpenWV.
https://undeadly.org/cgi?action=article;sid=20260118112808

How to Setup PPPoE (Wizard/Manual/VLAN) on OPNsense.
https://sheridancomputers.com/blog/view/videos/how-to-set-up-pppoe-on-opnsense-wizard-manual-setup-and-vlan

Default GhostBSD to XLibre.
https://github.com/ghostbsd/ghostbsd-build/pull/259

Xorg Political Moves Pushes Systems to XLibre.
https://youtube.com/watch?v=2KqPj6jOT24

Xorg Plans Political Moves: Removing 2 Years of Commits from XLibre Dev.
https://youtube.com/watch?v=d7-FczaSkdo

PegaProx Enterprise Proxmox Management Platform.
https://gyptazy.com/blog/pegaprox-real-datacenter-manager-proxmox-clusters/

Fil-C is Memory Safe Implementation of C/C++ Programming Languages.
https://fil-c.org/

FreeBSD Laptop and Desktop Workgroup – Call 14.
https://youtube.com/watch?v=PaonQr8fB6Q

Reviving Life is Strange: Before the Storm on Modern Linux with GLIBC Shim.
https://blog.hofstede.it/reviving-life-is-strange-before-the-storm-on-modern-linux-with-a-glibc-shim/

How to Compare Images Side by Side as Montage with ImageMagick.
https://micski.dk/2026/01/23/how-to-compare-images-side-by-side-as-a-montage-with-imagemagick/

Providing Zone Transfers Directly from Netbox DNS.
https://jpmens.net/2026/01/23/providing-zone-transfers-directly-from-netbox-dns/

Modifying FreeBSD ISO for Dell Servers.
https://subnetspider.com/2026/01/18/modifying-freebsd-iso-for-dell-servers.html

Integrating FreeBSD 15 with FreeIPA: Native Kerberos and LDAP Authentication.
https://blog.hofstede.it/integrating-freebsd-15-with-freeipa-native-kerberos-and-ldap-authentication/

What is GhostBSD and Should You Use It on Your PC?
https://msn.com/en-us/technology/hardware-and-devices/what-is-ghostbsd-and-should-you-use-it-on-your-pc/ar-AA1LUBVo

FreeBSD 14.3 on 2008 MacBook. [Russian]
https://habr.com/ru/articles/981214/

Deb Goodkin from FreeBSD Foundation Day(s) 1-21 of FreeBSD on Lavender Framework.
https://linkedin.com/posts/deb-goodkin-01
https://linkedin.com/posts/deb-goodkin-02
https://linkedin.com/posts/deb-goodkin-03
https://linkedin.com/posts/deb-goodkin-04
https://linkedin.com/posts/deb-goodkin-05
https://linkedin.com/posts/deb-goodkin-06
https://linkedin.com/posts/deb-goodkin-07
https://linkedin.com/posts/deb-goodkin-08
https://linkedin.com/posts/deb-goodkin-09
https://linkedin.com/posts/deb-goodkin-10
https://linkedin.com/posts/deb-goodkin-11
https://linkedin.com/posts/deb-goodkin-12
https://linkedin.com/posts/deb-goodkin-13
https://linkedin.com/posts/deb-goodkin-14
https://linkedin.com/posts/deb-goodkin-15
https://linkedin.com/posts/deb-goodkin-16
https://linkedin.com/posts/deb-goodkin-17
https://linkedin.com/posts/deb-goodkin-18
https://linkedin.com/posts/deb-goodkin-19
https://linkedin.com/posts/deb-goodkin-20
https://linkedin.com/posts/deb-goodkin-21

Hardware

NVIDIA Contacted Anna’s Archive to Secure Access to Millions of Pirated Books.
https://torrentfreak.com/nvidia-contacted-annas-archive-to-secure-access-to-millions-of-pirated-books/

Best Thermal Paste for AMD and Intel CPUs in 2026.
https://www.club386.com/best-thermal-paste/

Raspberry Pi is Cheaper Than Mini PC Again.
https://jeffgeerling.com/blog/2026/raspberry-pi-cheaper-than-mini-pc/

Perfect Cooler to Case Ratio.
https://fanlesstech.com/2026/01/the-perfect-cooler-to-case-ratio.html

James Brodman Prominent Intel Compiler Engineer Heads Off to AMD.
https://phoronix.com/news/Intel-Compiler-Expert-Now-AMD

SpacemiT K3 16-Core RISC-V SoC System Information and Early Benchmarks.
https://cnx-software.com/2026/01/23/spacemit-k3-16-core-risc-v-soc-system-information-and-early-benchmarks/

Enterprise SSDs Hit 16x HDD Cost Requiring Complete Budget Revisions.
https://club386.com/enterprise-ssds-hit-16x-hdd-cost-requiring-complete-budget-revisions/

Trying to Fix My HDD Hard Drive.
https://youtube.com/watch?v=QLnqRu9qiwI

Life

EU Does Not Like ‘X’ and Launches Own ‘W’ Social Media Platform.
https://cybernews.com/tech/europe-social-media-w/

Testosterone Administration Reduces Lying in Men.
https://pmc.ncbi.nlm.nih.gov/articles/PMC3468628/

Matthew McConaughey: A Good Man is Not a Nice Guy.
https://youtube.com/watch?v=25DMRdi0oQU

Why Young Women Moved Left While Young Men Stayed Sane.
https://x.com/IterIntellectus/article/2012220254504530043

Other

Problem is Not Email. It is Microsoft Exchange.
https://nxdomain.no/~peter/the_problem_isnt_email_its_microsoft_exchange.html

Kubica Ferrari Le Mans 24 Hours Victory Voted Autosport Moment of the Year.
https://autosport.com/autosport-awards/news/kubicas-ferrari-le-mans-24-hours-victory-voted-autosports-moment-of-the-year/10791707/

Servo 0.0.4 Browser Engine Released and Supports Multiple Windows.
https://phoronix.com/news/Servo-0.0.4

Customize Firefox Using AutoConfig.
https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig

AdGuard VPN Protocol Goes Open Source.
https://adguard-vpn.com/en/blog/adguard-vpn-protocol-goes-open-source-meet-trusttunnel.html

Microsoft Gave FBI BitLocker Keys – Raising Privacy Fears.
https://windowscentral.com/microsoft/windows-11/microsoft-bitlocker-encryption-keys-give-fbi-legal-order-privacy-nightmare

Usual Suspects

BSD Weekly.
https://bsdweekly.com/

DiscoverBSD.
https://discoverbsd.com/

BSDSec.
https://bsdsec.net/

DragonFly BSD Digest.
https://dragonflydigest.com/

FreeBSD Patch Level Table.
https://bokut.in/freebsd-patch-level-table/

FreeBSD End of Life Date.
https://endoflife.date/freebsd

Phoronix BSD News Archives.
https://phoronix.com/linux/BSD

OpenBSD Journal.
https://undeadly.org/

Call for Testing.
https://callfortesting.org/

Call for Testing – Production Users Call.
https://youtube.com/@callfortesting/videos

BSD Now Weekly Podcast.
https://www.bsdnow.tv/

Nixers Newsletter.
https://newsletter.nixers.net/entries.php

BSD Cafe Journal.
https://journal.bsd.cafe/

DragonFly BSD Digest – Lazy Reading – In Other BSDs.
https://dragonflydigest.com

BSDTV.
https://bsky.app/profile/bsdtv.bsky.social

FreeBSD Git Weekly.
https://freebsd-git-weekly.tarsnap.net/

FreeBSD Meetings.
https://youtube.com/@freebsdmeetings

BSDJedi.
https://youtube.com/@BSDJedi/videos

RoboNuggie.
https://youtube.com/@RoboNuggie/videos

GaryHTech.
https://youtube.com/@GaryHTech/videos

Sheridan Computers.
https://youtube.com/@sheridans/videos

82MHz.
https://82mhz.net/

EOF
Top

Migrating a MySQL 8.0 jail to a new MySQL 8.4 jail

Post by Dan Langille via Dan Langille's Other Diary »

It’s time for me to get off MySQL 8.0. It is not my database of preference, PostgreSQL is, however, I’m moving to MySQL 8.4.

mysql80-server-8.0.44 is vulnerable:
  MySQL -- Multiple vulnerabilities
  CVE: CVE-2026-21965
  CVE: CVE-2026-21964
  CVE: CVE-2026-21952
  CVE: CVE-2026-21948
  CVE: CVE-2026-21941
  CVE: CVE-2026-21937
  CVE: CVE-2026-21936
  CVE: CVE-2026-21929
  CVE: CVE-2026-21968
  CVE: CVE-2026-21950
  CVE: CVE-2026-21949
  WWW: https://vuxml.FreeBSD.org/freebsd/ab01cb11-f911-11f0-b194-8447094a420f.html

In this post:

  1. FreeBSD 14.3
  2. MySQL 8.0.44
  3. MySQL 8.4.7

The plan

This is my plan, as tooted:

  1. zfs snapshot data02/jails/mysql01@mysql80
  2. zfs clone data02/jails/mysql01@mysql80 data02/jails/mysql02
  3. Get that mounted (it mounts automagically)
  4. modify the /etc/rc.conf entries of the new jail
  5. disable mysql_server so it doesn’t start up
  6. add a /etc/jail.conf
  7. add DNS entries for mysql02
  8. Start up the new jail
  9. install mysql84-server
  10. Snapshot the jail – this is my test fallback position.
  11. Start mysql-server on the new jail
  12. fix problems
  13. can’t fix? revert to snapshot. try again.

Not all of these steps will be shown below.

Snapshot and clone

Here we go:

[17:37 r730-01 dvl ~] % zfs list | grep mysql01
data02/jails/mysql01                                                   15.0G  45.2G  8.03G  /jails/mysql01
[17:37 r730-01 dvl ~] % sudo zfs snapshot data02/jails/mysql01@MySQL-8.0
[18:00 r730-01 dvl ~] % sudo zfs clone data02/jails/mysql01@MySQL-8.0 data02/jails/mysql02
[18:00 r730-01 dvl ~] % cd /etc/jail.conf.d
[18:00 r730-01 dvl /etc/jail.conf.d] % sudo cp mysql01.conf mysql02.conf 
[18:00 r730-01 dvl /etc/jail.conf.d] % sudoedit mysql02.conf

The diff there is quite simple:

[18:16 r730-01 dvl /etc/jail.conf.d] % sudo service jail start mysql02                      
Starting jails: mysql02.
[18:47 r730-01 dvl /etc/jail.conf.d] % diff -ruN mysql01.conf mysql02.conf 
--- mysql01.conf	2024-03-01 16:23:16.042554000 +0000
+++ mysql02.conf	2026-01-24 18:05:15.679109000 +0000
@@ -1,4 +1,4 @@
-mysql01 {
+mysql02 {
 
   #
   # start of standard settings for each jail
@@ -24,5 +24,5 @@
   # end of standard settings for each jail
   #
 
-    ip4.addr = "$bridge|10.55.0.151";
+    ip4.addr = "$bridge|10.55.0.89";
 }

Start, Update, Snapshot

[18:14 r730-01 dvl /etc/jail.conf.d] % sudo service jail start mysql02
Starting jails: mysql02.

Then, the upgrade of the software:

[18:17 mysql02 dvl ~] % sudo pkg install mysql84-server
Updating local repository catalogue...
local repository is up to date.
All repositories are up to date.
The following 2 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	mysql84-client: 8.4.7
	mysql84-server: 8.4.7

Number of packages to be installed: 2

The process will require 314 MiB more space.
32 MiB to be downloaded.

Proceed with this action? [y/N]: y
[mysql02.int.unixathome.org] [1/2] Fetching mysql84-client-8.4.7: 100%    6 MiB   6.2 M/s    00:01    
[mysql02.int.unixathome.org] [2/2] Fetching mysql84-server-8.4.7: 100%   26 MiB  27.6 M/s    00:01    
Checking integrity... done (3 conflicting)
  - mysql84-client-8.4.7 conflicts with mysql80-client-8.0.44 on /usr/local/bin/comp_err
  - mysql84-client-8.4.7 conflicts with mysql80-client-8.0.44 on /usr/local/bin/comp_err
  - mysql84-server-8.4.7 conflicts with mysql80-server-8.0.44 on /usr/local/LICENSE.router
Checking integrity... done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 7 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	mysql84-client: 8.4.7
	mysql84-server: 8.4.7

Installed packages to be REINSTALLED:
	pkg-2.5.1

Installed packages to be REMOVED:
	mysql80-client: 8.0.44
	mysql80-server: 8.0.44
	nagios-plugins: 2.4.4,1
	nrpe: 4.1.3

Number of packages to be removed: 4
Number of packages to be installed: 2
Number of packages to be reinstalled: 1

The process will require 1 MiB more space.

Proceed with this action? [y/N]: y
Checking integrity... done (0 conflicting)
[mysql02.int.unixathome.org] [1/7] Deinstalling mysql80-server-8.0.44...
[mysql02.int.unixathome.org] [1/7] Deleting files for mysql80-server-8.0.44: 100%
==> You should manually remove the "mysql" user
==> You should manually remove the "mysql" group
[mysql02.int.unixathome.org] [2/7] Deinstalling nrpe-4.1.3...
[mysql02.int.unixathome.org] [2/7] Deleting files for nrpe-4.1.3: 100%
==> You should manually remove the "nagios" user
==> You should manually remove the "nagios" group
[mysql02.int.unixathome.org] [3/7] Deinstalling nagios-plugins-2.4.4,1...
[mysql02.int.unixathome.org] [3/7] Deleting files for nagios-plugins-2.4.4,1: 100%
[mysql02.int.unixathome.org] [4/7] Deinstalling mysql80-client-8.0.44...
[mysql02.int.unixathome.org] [4/7] Deleting files for mysql80-client-8.0.44: 100%
[mysql02.int.unixathome.org] [5/7] Installing mysql84-client-8.4.7...
[mysql02.int.unixathome.org] [5/7] Extracting mysql84-client-8.4.7: 100%
[mysql02.int.unixathome.org] [6/7] Installing mysql84-server-8.4.7...
===> Creating groups
Using existing group 'mysql'
===> Creating users
Using existing user 'mysql'
===> Creating homedir(s)
[mysql02.int.unixathome.org] [6/7] Extracting mysql84-server-8.4.7: 100%
[mysql02.int.unixathome.org] [7/7] Reinstalling pkg-2.5.1...
[mysql02.int.unixathome.org] [7/7] Extracting pkg-2.5.1: 100%
You may need to manually remove /usr/local/etc/mysql/my.cnf if it is no longer needed.
You may need to manually remove /usr/local/etc/nrpe.cfg if it is no longer needed.
=====
Message from mysql84-client-8.4.7:

--
This is the mysql CLIENT without the server.
for complete server and client, please install databases/mysql84-server
=====
Message from mysql84-server-8.4.7:

--
There is no initial password for first time use of MySQL.
Keep in mind to reset it to a secure password.

MySQL 8.4 has a default /usr/local/etc/mysql/my.cnf,
remember to replace it with your own
or set `mysql_optfile="$YOUR_CNF_FILE` in rc.conf.
You may need to manually remove /usr/local/etc/pkg.conf if it is no longer needed.

Then stop and snapshot:

[18:14 r730-01 dvl /etc/jail.conf.d] % sudo service jail stop mysql02 
Stopping jails: mysql02.
[18:16 r730-01 dvl /etc/jail.conf.d] % zfs list |grep mysql
data02/jails/mysql01                                                   14.9G  45.3G  8.03G  /jails/mysql01
data02/jails/mysql02                                                   1.50M  45.3G  8.03G  /jails/mysql02
[18:16 r730-01 dvl /etc/jail.conf.d] % sudo zfs snapshot data02/jails/mysql02@jail-is-set-up
[18:16 r730-01 dvl /etc/jail.conf.d] % sudo service jail start mysql02                      
Starting jails: mysql02.

Back into the new jail, and start

The start:

[18:18 mysql02 dvl ~] % sudo service mysql-server start
Cannot 'start' mysql. Set mysql_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'.
[18:18 mysql02 dvl ~] % sudo service mysql-server onestart
Starting mysql.

There was a delay until it came back to the command prompt.

And yes: it’s running:

[18:18 mysql02 dvl ~] % ps auwwx
USER    PID %CPU %MEM     VSZ    RSS TT  STAT STARTED    TIME COMMAND
root  17259  0.0  0.0   13904   2724  -  SsJ  18:16   0:00.01 /usr/sbin/syslogd -s
root  17303  0.0  0.0   13944   2540  -  IsJ  18:16   0:00.00 /usr/sbin/cron -s
root  17340  0.0  0.0   23508  10156  -  IsJ  18:16   0:00.00 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups (sshd)
root  18620  0.0  0.0   24068  10740  -  IsJ  18:16   0:00.02 sshd-session: dvl [priv] (sshd-session)
dvl   18623  0.0  0.0   24068  11068  -  SJ   18:16   0:00.14 sshd-session: dvl@pts/2 (sshd-session)
mysql 27747  0.0  0.0   14404   2980  -  IsJ  18:18   0:00.02 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/usr/local/etc/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --pid-file=/var/db/mysql/mysql02.int.unixathome.org.pid --user=mysql
mysql 27904  0.0  0.2 1296400 642728  -  IJ   18:18   0:11.98 /usr/local/libexec/mysqld --defaults-extra-file=/usr/local/etc/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --plugin-dir=/usr/local/lib/mysql/plugin --log-error=mysql02.int.unixathome.org.err --pid-file=/var/db/mysql/mysql02.int.unixathome.org.pid
dvl   18627  0.0  0.0   19064   6324  2  SsJ  18:16   0:00.07 -zsh (zsh)
dvl   47145  0.0  0.0   14484   3068  2  R+J  18:23   0:00.00 ps auwwx

Checking logs

Oh, see here:

[18:54 mysql02 dvl /var/db/mysql] % ls -l mysql0*
-rw-r-----  1 mysql mysql 5726169436 2026.01.18 18:48 mysql01.int.unixathome.org.err
-rw-r-----  1 mysql mysql          6 2026.01.18 18:47 mysql01.int.unixathome.org.pid
-rw-r-----  1 mysql mysql       1832 2026.01.24 18:18 mysql02.int.unixathome.org.err
-rw-r-----  1 mysql mysql          6 2026.01.24 18:18 mysql02.int.unixathome.org.pid

Note the older date on the mysql01 log file.

This looks good:

[18:54 mysql02 dvl /var/db/mysql] % sudo less mysql02.int.unixathome.org.err
2026-01-24T18:18:14.6NZ mysqld_safe Logging to '/var/db/mysql/mysql02.int.unixathome.org.err'.
2026-01-24T18:18:14.6NZ mysqld_safe Starting mysqld daemon with databases from /var/db/mysql
2026-01-24T18:18:14.921870Z 0 [System] [MY-015015] [Server] MySQL Server - start.
2026-01-24T18:18:15.191770Z 0 [System] [MY-010116] [Server] /usr/local/libexec/mysqld (mysqld 8.4.7) starting as process 27904
2026-01-24T18:18:15.206633Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2026-01-24T18:18:15.913320Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2026-01-24T18:18:15.922220Z 1 [System] [MY-011090] [Server] Data dictionary upgrading from version '80023' to '80300'.
2026-01-24T18:18:16.820636Z 1 [System] [MY-013413] [Server] Data dictionary upgrade from version '80023' to '80300' completed.
2026-01-24T18:18:21.662918Z 4 [System] [MY-013381] [Server] Server upgrade from '80044' to '80407' started.
2026-01-24T18:18:36.070847Z 4 [System] [MY-013381] [Server] Server upgrade from '80044' to '80407' completed.
2026-01-24T18:18:38.925490Z 0 [System] [MY-010229] [Server] Starting XA crash recovery...
2026-01-24T18:18:38.936159Z 0 [System] [MY-010232] [Server] XA crash recovery finished.
2026-01-24T18:18:40.807147Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2026-01-24T18:18:40.807203Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2026-01-24T18:18:40.831750Z 0 [System] [MY-010931] [Server] /usr/local/libexec/mysqld: ready for connections. Version: '8.4.7'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution.
2026-01-24T18:18:40.831743Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '0.0.0.0' port: 33060, socket: /tmp/mysqlx.sock

Getting into MySQL

I went into to the client to see if all was well. It was not.

[18:58 mysql02 dvl ~] % mysql -u root -p
Enter password: 
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded

I found and used Fixing mysql_native_password is not loaded in MySQL 8.4+

In short:

  1. add mysql_native_password=ON to my.cnf
  2. restart MySQL

Then it worked:

[19:04 mysql02 dvl /var/db/mysql] % mysql -u root -p                    
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.7 Source distribution

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| db_nagiosql_v34    |
| fruityext          |
| fruityint          |
| information_schema |
| librenms           |
| librenms_dvl       |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
10 rows in set (0.00 sec)

mysql> 

Fixing the user

Next, I used How to fix mysql_native_password not loaded errors on MySQL 8.4 to get this valuable query:

mysql> SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';
+---------------+-------------------------------+-----------------------+
| user          | host                          | plugin                |
+---------------+-------------------------------+-----------------------+
| root          | %                             | mysql_native_password |
| rsyncer       | %                             | mysql_native_password |
| nagiosql_user | 10.55.0.116                   | mysql_native_password |
| nagiosql_user | 10.55.0.116';                 | mysql_native_password |
| librenms      | 10.55.0.27                    | mysql_native_password |
| librenms_dvl  | 10.55.0.31                    | mysql_native_password |
| root          | 127.0.0.1                     | mysql_native_password |
| root          | ::1                           | mysql_native_password |
| librenms      | besser.int.unixathome.org     | mysql_native_password |
| fruityext     | fruit-ext.int.unixathome.org  | mysql_native_password |
| fruityint     | fruit-int.int.unixathome.org  | mysql_native_password |
| fruityext     | fruity-ext.int.unixathome.org | mysql_native_password |
| fruityint     | fruity-int.int.unixathome.org | mysql_native_password |
|               | localhost                     | mysql_native_password |
| root          | localhost                     | mysql_native_password |
| rsyncer       | localhost                     | mysql_native_password |
+---------------+-------------------------------+-----------------------+
16 rows in set (0.00 sec)

At least now I have a list of users for which I need to modify.

However, that seems to be giving me trouble. I’ll follow that up in another post.

A few other things

Other things I need to tidy up:

  • snmpd – needs a new IP address in the config file: /etc/rc: WARNING: failed to start snmpd
  • nrpe – same thing: Bind to port 5666 on 10.55.0.151 failed: Can’t assign requested address.
  • rsyncer – needs auth configured on destinations from mysql02: Jan 25 02:02:00 dbclone sshd-session[95834]: /home/rsyncer/.ssh/authorized_keys:23: Authentication tried for rsyncer with correct key but not from a permitted host (host=mysql02.int.unixathome.org, ip=10.55.0.89, required=mysql01.int.unixathome.org,10.55.0.151).

I’m hoping when I get monitoring (Nagios & LibreNMS) configured for the new host (mysql02), anything else I’m missing will show up.

Yes, if I was deploying and maintaining each host via a configuration management tool (in my case, Ansible), all this would be hopefully automagically taken care of.

Top

ERROR 1524 (HY000): Plugin ‘mysql_native_password’ is not loaded

Post by Dan Langille via Dan Langille's Other Diary »

Earlier today, I copied the mysq01 jail to a new mysql02. That’s all part of my migrating from 8.0 to MySQL 8.4 jail adventure.

In this post:

  1. FreeBSD 14.3
  2. MySQL 8.4.7

I hit a problem.

I couldn’t log in. The password procedure has changed.

[18:58 mysql02 dvl ~] % mysql -u root -p
Enter password: 
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded

I found and used Fixing mysql_native_password is not loaded in MySQL 8.4+

In short:

  1. add mysql_native_password=ON to my.cnf
  2. restart MySQL

Then it worked:

[19:04 mysql02 dvl /var/db/mysql] % mysql -u root -p                    
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.7 Source distribution

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Next, I need to adjust all users to the new password scheme. I tried, and seemingly failed:

mysql> alter user root IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

Nothing changed? Thanks.

This is the full list for reference:

mysql> SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';
+---------------+-------------------------------+-----------------------+
| user          | host                          | plugin                |
+---------------+-------------------------------+-----------------------+
| root          | %                             | mysql_native_password |
| rsyncer       | %                             | mysql_native_password |
| nagiosql_user | 10.55.0.116                   | mysql_native_password |
| nagiosql_user | 10.55.0.116';                 | mysql_native_password |
| librenms      | 10.55.0.27                    | mysql_native_password |
| librenms_dvl  | 10.55.0.31                    | mysql_native_password |
| root          | 127.0.0.1                     | mysql_native_password |
| root          | ::1                           | mysql_native_password |
| librenms      | besser.int.unixathome.org     | mysql_native_password |
| fruityext     | fruit-ext.int.unixathome.org  | mysql_native_password |
| fruityint     | fruit-int.int.unixathome.org  | mysql_native_password |
| fruityext     | fruity-ext.int.unixathome.org | mysql_native_password |
| fruityint     | fruity-int.int.unixathome.org | mysql_native_password |
|               | localhost                     | mysql_native_password |
| root          | localhost                     | mysql_native_password |
| rsyncer       | localhost                     | mysql_native_password |
+---------------+-------------------------------+-----------------------+
16 rows in set (0.00 sec)

Let’s just concentrate on 10.55.0.116

mysql> alter user 'nagiosql_user'@'10.55.0.116' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

Damn, not fixed.

After trying lots of different things, including:

mysql> alter user nagiosql_user@10.55.0.116 IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)

mysql> alter user nagiosql_user@10.55.0.116 IDENTIFIED BY 'foo';
Query OK, 0 rows affected (0.02 sec)

I finally ran this same query again:


mysql> SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';
+---------------+-------------------------------+-----------------------+
| user          | host                          | plugin                |
+---------------+-------------------------------+-----------------------+
| rsyncer       | %                             | mysql_native_password |
| nagiosql_user | 10.55.0.116';                 | mysql_native_password |
| librenms      | 10.55.0.27                    | mysql_native_password |
| librenms_dvl  | 10.55.0.31                    | mysql_native_password |
| root          | 127.0.0.1                     | mysql_native_password |
| root          | ::1                           | mysql_native_password |
| librenms      | besser.int.unixathome.org     | mysql_native_password |
| fruityext     | fruit-ext.int.unixathome.org  | mysql_native_password |
| fruityint     | fruit-int.int.unixathome.org  | mysql_native_password |
| fruityext     | fruity-ext.int.unixathome.org | mysql_native_password |
| fruityint     | fruity-int.int.unixathome.org | mysql_native_password |
|               | localhost                     | mysql_native_password |
| rsyncer       | localhost                     | mysql_native_password |
+---------------+-------------------------------+-----------------------+
13 rows in set (0.00 sec)

mysql> 

You’ve got to be kidding. Where did my first nagiosql_user go?

Let’s try another.

mysql> alter user 'rsyncer'@'%' IDENTIFIED WITH caching_sha2_password BY 'foo';
Query OK, 0 rows affected (0.02 sec)
mysql> 

mysql> SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';
+---------------+-------------------------------+-----------------------+
| user          | host                          | plugin                |
+---------------+-------------------------------+-----------------------+
| nagiosql_user | 10.55.0.116';                 | mysql_native_password |
| librenms      | 10.55.0.27                    | mysql_native_password |
| librenms_dvl  | 10.55.0.31                    | mysql_native_password |
| root          | 127.0.0.1                     | mysql_native_password |
| root          | ::1                           | mysql_native_password |
| librenms      | besser.int.unixathome.org     | mysql_native_password |
| fruityext     | fruit-ext.int.unixathome.org  | mysql_native_password |
| fruityint     | fruit-int.int.unixathome.org  | mysql_native_password |
| fruityext     | fruity-ext.int.unixathome.org | mysql_native_password |
| fruityint     | fruity-int.int.unixathome.org | mysql_native_password |
|               | localhost                     | mysql_native_password |
| rsyncer       | localhost                     | mysql_native_password |
+---------------+-------------------------------+-----------------------+
12 rows in set (0.00 sec)

mysql> 

OK, that worked, despite the claim it affect nothing.

This just adds to my list of reasons I prefer PostgreSQL. Please stop wasting my time.

The tricky ones

I kept plugging away, one by one, and eventually I was left with this:

mysql> SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';
+---------------+---------------+-----------------------+
| user          | host          | plugin                |
+---------------+---------------+-----------------------+
| nagiosql_user | 10.55.0.116'; | mysql_native_password |
|               | localhost     | mysql_native_password |
+---------------+---------------+-----------------------+
2 rows in set (0.00 sec)

mysql> 

I stopped the jail, took a snapshot, and started it back up.

Then I started trying the hard stuff.

Before:

mysql> SELECT user, host, plugin from mysql.user order by plugin, user, host;
+------------------+-------------------------------+-----------------------+
| user             | host                          | plugin                |
+------------------+-------------------------------+-----------------------+
| fruityint        | fruity-int.int.unixathome.org | caching_sha2_password |
| librenms         | 10.55.0.27                    | caching_sha2_password |
| librenms         | besser.int.unixathome.org     | caching_sha2_password |
| librenms_dvl     | 10.55.0.31                    | caching_sha2_password |
| mysql.infoschema | localhost                     | caching_sha2_password |
| mysql.session    | localhost                     | caching_sha2_password |
| mysql.sys        | localhost                     | caching_sha2_password |
| nagiosql_user    | 10.55.0.116                   | caching_sha2_password |
| new_user         | your_host                     | caching_sha2_password |
| root             | %                             | caching_sha2_password |
| root             | 127.0.0.1                     | caching_sha2_password |
| root             | ::1                           | caching_sha2_password |
| root             | localhost                     | caching_sha2_password |
| rsyncer          | %                             | caching_sha2_password |
| rsyncer          | localhost                     | caching_sha2_password |
|                  | localhost                     | mysql_native_password |
| nagiosql_user    | 10.55.0.116';                 | mysql_native_password |
+------------------+-------------------------------+-----------------------+
17 rows in set (0.00 sec)

mysql> 

Now, for the risky deletes.

mysql> drop user ''@'localhost';
Query OK, 0 rows affected (0.02 sec)
mysql> drop user 'nagiosql_user'@'10.55.0.116\';';
Query OK, 0 rows affected (0.02 sec)

Again, notice how it claims nothing was changed. That’s terrible. Do not lie.

mysql> SELECT user, host, plugin from mysql.user order by plugin, user, host;
+------------------+-------------------------------+-----------------------+
| user             | host                          | plugin                |
+------------------+-------------------------------+-----------------------+
| fruityint        | fruity-int.int.unixathome.org | caching_sha2_password |
| librenms         | 10.55.0.27                    | caching_sha2_password |
| librenms         | besser.int.unixathome.org     | caching_sha2_password |
| librenms_dvl     | 10.55.0.31                    | caching_sha2_password |
| mysql.infoschema | localhost                     | caching_sha2_password |
| mysql.session    | localhost                     | caching_sha2_password |
| mysql.sys        | localhost                     | caching_sha2_password |
| nagiosql_user    | 10.55.0.116                   | caching_sha2_password |
| new_user         | your_host                     | caching_sha2_password |
| root             | %                             | caching_sha2_password |
| root             | 127.0.0.1                     | caching_sha2_password |
| root             | ::1                           | caching_sha2_password |
| root             | localhost                     | caching_sha2_password |
| rsyncer          | %                             | caching_sha2_password |
| rsyncer          | localhost                     | caching_sha2_password |
+------------------+-------------------------------+-----------------------+
15 rows in set (0.00 sec)

mysql> 

There, I’m done. I can reverse the my.cnf changes.

Not shown here: removal of mysql_native_password=ON from /usr/local/etc/mysql/my.cnf.

[21:49 mysql02 dvl ~] % sudo service mysql-server restart   
Stopping mysql.
Waiting for PIDS: 2441.
Starting mysql.
[21:50 mysql02 dvl ~] % mysql -u root -p mysql           
Enter password: 
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.4.7 Source distribution

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

There, it works. I’m glad.

What’s next?

I’ll be redoing my snapshot / clone for the mysql02 database. That approach will be:

  1. sudo service jail stop mysql02
  2. sudo zfs rename data02/jails/mysql02 data02/jails/mysql02.old
  3. zfs snapshot data02/jails/mysql01@mysql80-part2
  4. zfs clone data02/jails/mysql01@mysql80 -part2 data02/jails/mysql02
  5. sudo service jail start mysql02
  6. repeat the stuff in this post

Thank you for coming to my TED talk.

Top

FreeBSD and Poudriere in High Security Environments

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

Most of the time FreeBSD systems are used with wide open connection to the Internet along with fully working DNS that resolves anything the Root Servers resolve … but FreeBSD – besides being used as SONY PlayStation gaming systems or Netflix storage layer.

Its also used in high security environments without any external DNS access or direct Internet connection to the outside World … yet the security patches are fetched and applied and custom PKGBASE and/or Poudriere systems build base system/packages while fetching them from the Internet over some dedicated proxy.

Many people will not read entire article so I will point that in the beginning – that I am really grateful to Mariusz Zaborski (oshogbo) for his help with this one – without his help – it just would not happen.

By default FreeBSD does not work well in such environments … in this article we will configure FreeBSD to make everything work as needed.

The Table of Contents is as follows.

  • FreeBSD and Poudriere in High Security Environments
  • Example Proxy Configuration
  • Physical (or Virtual) FreeBSD Host
    • pkg(8)
    • FreeBSD Ports Tree
    • Proxy on the Fly
    • Back to the PKGBASE
  • Poudriere in Proxy World
    • Basic Poudriere Setup
    • Important Poudriere Config Part

Example Proxy Configuration

For completeness I will add Squid configuration used here – so that all information will be available.

proxy # grep '^[^#]' /usr/local/etc/squid/squid.conf
http_port 127.0.0.1:3128
http_port 10.0.0.41:3128
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
acl localnet src 127.0.0.1
acl localnet src 10.0.0.0/8     # RFC 1918 local private network (LAN)
acl localnet src 172.16.0.0/12  # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
http_access allow localnet
http_access allow localhost
http_access deny all
visible_hostname proxy.xyz
acl custom-local dstdomain .custom.xyz
cache_peer 10.0.0.42 parent 3128 0 no-query default name=weathertop
cache_peer_domain 10.0.0.43 !.xyz
never_direct deny custom-local
never_direct allow all
cache_dir ufs /var/local/squid/cache 50 16 256
coredump_dir /var/local/squid/cache
access_log stdio:/var/local/log/squid/access.log
cache_store_log stdio:/var/local/log/squid/store.log
cache_log /var/local/log/squid/cache.log
refresh_pattern ^ftp:          1440 20% 10080
refresh_pattern ^gopher:       1440  0%  1440
refresh_pattern -i (/cgi-bin/|\?) 0  0%     0
refresh_pattern .                 0 20%  4320
email_err_data off

Now we will configure a FreeBSD host to use it properly.

Physical (or Virtual) FreeBSD Host

For a start we will make pkg(8) work with our proxy system.

pkg(8)

I installed that FreeBSD 15.0-RELEASE system with PKGBASE way – Brave New PKGBASE World – described in details here. With offline install using PKGBASE packages from the install disc1.iso medium.

That means the pkg(8) is already bootstrapped … we will turn that ‘OFF’ for a moment.

test # pkg info
FreeBSD-acct-15.0              System resource accounting
FreeBSD-acpi-15.0              Advanced Configuration and Power Interface (ACPI) utilities
FreeBSD-apm-15.0               Intel / Microsoft APM BIOS utility
(...)
FreeBSD-zlib-lib32-15.0        DEFLATE (gzip) data compression library (32-bit libraries)
FreeBSD-zoneinfo-15.0          Timezone database
pkg-2.4.2                      Package manager

test # mv /var/db/pkg /var/db/pkg.BCK
test # mv /usr/local  /usr/local.BCK

Now if you would like to bootstrap pkg(8) it will fail.

test # pkg
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly, please wait...
pkg: Error fetching https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly/Latest/pkg.pkg: Transient resolver failure
A pre-built version of pkg could not be found for your system.
Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0, please wait...
pkg: Error fetching https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0/Latest/pkg.pkg: Transient resolver failure
A pre-built version of pkg could not be found for your system.

Now we will export(1) needed proxy setting into environment.

test # export HTTP_PROXY="http://10.0.0.41:3128" 

test # export HTTPS_PROXY="http://10.0.0.41:3128"

test # export FTP_PROXY="http://10.0.0.41:3128"

test # env | grep -i proxy
HTTP_PROXY=http://10.0.0.41:3128
HTTPS_PROXY=http://10.0.0.41:3128
FTP_PROXY=http://10.0.0.41:3128

If you want to make it permanent for the default sh(1) shell then do this.

test # cat << EOF > /etc/profile.d/proxy.sh
export HTTP_PROXY=http://10.0.0.41:3128
export HTTPS_PROXY=http://10.0.0.41:3128
export FTP_PROXY=http://10.0.0.41:3128
EOF

Now with each new login these proxy settings will be available.

Lets try with pkg(8) again.

test # pkg info
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Installing pkg-2.4.2...
Extracting pkg-2.4.2: 100%
pkg-2.4.2                      Package manager

The pkg(8) has now bootstrap completed and will work, right? Right?

test # pkg update
Updating FreeBSD-ports repository catalogue...
pkg: No SRV record found for the repo 'FreeBSD-ports'
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly/data.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly/data.tzst -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly/packagesite.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly/packagesite.tzst -- pkg+:// implies SRV mirror type
Unable to update repository FreeBSD-ports
Updating FreeBSD-ports-kmods repository catalogue...
pkg: No SRV record found for the repo 'FreeBSD-ports-kmods'
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0/data.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0/data.tzst -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0/packagesite.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0/packagesite.tzst -- pkg+:// implies SRV mirror type
Unable to update repository FreeBSD-ports-kmods
Error updating repositories!

Small modification is needed. One need to remove pkg+ prefix from all url: paths and to switch mirror_type: from srv to none. Then it will work.

Now … the reason why FreeBSD uses the pkg+ prefix is this:

  • pkg+https:// tells pkg(8) to use libpkg internal HTTP/HTTPS fetcher.
  • https:// tells pkg(8) to use external fetcher – usually with FreeBSD fetch(1) tool.

Now … the needed changes.

test # \
  grep '^[^#]' /etc/pkg/FreeBSD.conf \
    | sed -e 's.pkg+..g' \
          -e 's."srv"."none".g' \
          -e 's.enabled: no.enabled: yes.g' \
    > /root/FreeBSD.conf 

The diff(1) for that change is below.

root # diff -u /etc/pkg/FreeBSD.conf /root/FreeBSD.conf 
--- /etc/pkg/FreeBSD.conf  2025-11-28 00:00:00.000000000 +0000
+++ /root/FreeBSD.conf     2026-01-07 00:11:41.534051000 +0000
@@ -10,23 +10,23 @@
 #
 
 FreeBSD-ports: {
-  url: "pkg+https://pkg.FreeBSD.org/${ABI}/quarterly",
-  mirror_type: "srv",
+  url: "https://pkg.FreeBSD.org/${ABI}/quarterly",
+  mirror_type: "none",
   signature_type: "fingerprints",
   fingerprints: "/usr/share/keys/pkg",
   enabled: yes
 }
 FreeBSD-ports-kmods: {
-  url: "pkg+https://pkg.FreeBSD.org/${ABI}/kmods_quarterly_${VERSION_MINOR}",
-  mirror_type: "srv",
+  url: "https://pkg.FreeBSD.org/${ABI}/kmods_quarterly_${VERSION_MINOR}",
+  mirror_type: "none",
   signature_type: "fingerprints",
   fingerprints: "/usr/share/keys/pkg",
   enabled: yes
 }
 FreeBSD-base: {
-  url: "pkg+https://pkg.FreeBSD.org/${ABI}/base_release_${VERSION_MINOR}",
-  mirror_type: "srv",
+  url: "https://pkg.FreeBSD.org/${ABI}/base_release_${VERSION_MINOR}",
+  mirror_type: "none",
   signature_type: "fingerprints",
   fingerprints: "/usr/share/keys/pkgbase-${VERSION_MAJOR}",
-  enabled: no
+  enabled: yes
 }

Now – lets leave the original /etc/pkg/FreeBSD.conf unmodified and create /usr/local/etc/pkg/repos/FreeBSD.conf that will override the defaults.

test # mkdir -pv /usr/local/etc/pkg/repos
/usr/local/etc/pkg
/usr/local/etc/pkg/repos

test # cp /root/FreeBSD.conf /usr/local/etc/pkg/repos/

Now that pkg(8) should work well over proxy.

test # pkg update 
Updating FreeBSD-ports repository catalogue...
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   10 MiB   3.6MB/s    00:03    
Processing entries: 100%
FreeBSD-ports repository update completed. 36390 packages processed.
Updating FreeBSD-ports-kmods repository catalogue...
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   31 KiB  31.3kB/s    00:01    
Processing entries: 100%
FreeBSD-ports-kmods repository update completed. 204 packages processed.
Updating FreeBSD-base repository catalogue...
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   80 KiB  81.5kB/s    00:01    
Processing entries: 100%
FreeBSD-base repository update completed. 496 packages processed.

Lets try to actually install any software.

test # pkg install lsblk beadm 
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.
The following 2 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        beadm: 1.3.5_1 [FreeBSD-ports]
        lsblk: 4.0 [FreeBSD-ports]
        gitup: 1.0 [FreeBSD-ports]

Number of packages to be installed: 3

18 KiB to be downloaded.

Proceed with this action? [y/N]: y
[1/3] Fetching lsblk-4.0~3110a4bb46.pkg: 100%    7 KiB   7.2kB/s    00:01    
[2/3] Fetching beadm-1.3.5_1~53f06720d4.pkg: 100%   11 KiB  11.0kB/s    00:01    
[3/3] Fetching gitup-1.0~2c88a1f1f1.pkg: 100%   36 KiB  37.0kB/s    00:01    
Checking integrity... done (0 conflicting)
[1/3] Installing beadm-1.3.5_1...
[1/3] Extracting beadm-1.3.5_1: 100%
[2/3] Installing lsblk-4.0...
[2/3] Extracting lsblk-4.0: 100%
[3/3] Installing gitup-1.0...
[3/3] Extracting gitup-1.0: 100%

test # lsblk -d
DEVICE SIZE MODEL
nda0    10G bhyve-NVMe
-       10G TOTAL SYSTEM STORAGE

Works.

If for some reason the above method will not work – you may also configure proxy server within the pkg(8) config /usr/local/etc/pkg.conf file.

test # tail -5 /usr/local/etc/pkg.conf
PKG_ENV {
  HTTP_PROXY: "http://10.0.0.41:3128"
  HTTPS_PROXY: "https://10.0.0.41:3128"
  FTP_PROXY: "http://10.0.0.41:3128"
}

These settings will also override any ‘system’ settings we set previously in the /etc/profile.d/proxy.sh file.

FreeBSD Ports Tree

We already installed gitup tool that will allow us to update the FreeBSD Ports tree easily.

Its default config is more then enought.

test # grep -m 1 -A 6 ports /usr/local/etc/gitup.conf
        "ports" : {
                "repository_path"  : "/ports.git",
                "branch"           : "main",
                "target_directory" : "/usr/ports",
                "ignores"          : [],
        },

Lets try fetching the FreeBSD Ports tree now.

test # gitup ports
# Host: git.freebsd.org
# Port: 443
# Proxy Host: 10.0.0.41
# Proxy Port: 3128
# Repository Path: /ports.git
# Target Directory: /usr/ports
# Want: 284813ec0382a2bfe5b2e74a3081a67599d3155d
# Branch: main
# Action: clone
  75 MB in 0m25s, 4614 kB/s now 
 + /usr/ports/.arcconfig
 + /usr/ports/.gitignore
 + /usr/ports/.hooks/pre-commit
(...)
 + /usr/ports/x11/zutty/Makefile
 + /usr/ports/x11/zutty/distinfo
 + /usr/ports/x11/zutty/pkg-descr
#
# Please review the following file(s) for important changes.
#       /usr/ports/UPDATING
#       /usr/ports/mail/dspam/files/UPDATING
#
# Done.

Seems to work.

To now update the FreeBSD Ports tree run gitup(1) command again.

test # gitup ports
# Scanning local repository...
# Host: git.freebsd.org
# Port: 443
# Proxy Host: 10.0.0.41
# Proxy Port: 3128
# Repository Path: /ports.git
# Target Directory: /usr/ports
# Have: 284813ec0382a2bfe5b2e74a3081a67599d3155d
# Want: 7b2f3c4f484b1634066997a91836554608c72c48
# Branch: main
# Action: pull
 * /usr/ports/lang/spidermonkey115/Makefile
 * /usr/ports/lang/spidermonkey115/distinfo
 * /usr/ports/lang/spidermonkey140/Makefile
 * /usr/ports/lang/spidermonkey140/distinfo
# Done.

If for some reason You will find gitup(1) or git(1) does not work – you may always configure system wide proxy as follows.

test # git config --system http.proxy http://10.0.0.41:3128

That would help.

You may also find yourself in a position that yarn(1) or npm(1) require a proxy – here is syntax for them.

test # yarn config set https-proxy http://10.0.0.41:3128

test # npm --https-proxy=http://10.0.0.41:3128 install package

Proxy on the Fly

If for some reason You will need to force the proxy settings for a single command – then use something like that below.

test # \
  env HTTP_PROXY="http://10.0.0.41:3128"  \
      HTTPS_PROXY="http://10.0.0.41:3128" \
      FTP_PROXY="http://10.0.0.41:3128" 
    command ...

Back to the PKGBASE

Now – lets bring back our original pkg(8) config – we may ‘keep’ the current ‘test’ bootstrap if needed with .CUSTOM suffix.

test # mv /usr/local  /usr/local.CUSTOM
test # mv /var/db/pkg /var/db/pkg.CUSTOM

test # mv /usr/local.BCK  /usr/local
test # mv /var/db/pkg.BCK /var/db/pkg

Now the ‘original’ pkg(8) config that keeps PKGBASE information works again.

test # pkg info | (head -3 ;echo '(...)'; tail -3)
FreeBSD-acct-15.0              System resource accounting
FreeBSD-acpi-15.0              Advanced Configuration and Power Interface (ACPI) utilities
FreeBSD-apm-15.0               Intel / Microsoft APM BIOS utility
(...)
FreeBSD-zlib-lib32-15.0        DEFLATE (gzip) data compression library (32-bit libraries)
FreeBSD-zoneinfo-15.0          Timezone database
pkg-2.4.2                      Package manager

But when we will now try to update the pkg(8) repositories it will fail … why?

test # pkg update
Updating FreeBSD-ports repository catalogue...
pkg: No SRV record found for the repo 'FreeBSD-ports'
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly/data.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly/data.tzst -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly/packagesite.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly/packagesite.tzst -- pkg+:// implies SRV mirror type
Unable to update repository FreeBSD-ports
Updating FreeBSD-ports-kmods repository catalogue...
pkg: No SRV record found for the repo 'FreeBSD-ports-kmods'
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0/data.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0/data.tzst -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0/packagesite.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0/packagesite.tzst -- pkg+:// implies SRV mirror type
Unable to update repository FreeBSD-ports-kmods
Error updating repositories!

Its because our config override was placed in /usr/local path … and we just wiped that away.

Copy working proxy config again then.

test # mkdir -pv /usr/local/etc/pkg/repos
/usr/local/etc/pkg
/usr/local/etc/pkg/repos

test # cp /root/FreeBSD.conf /usr/local/etc/pkg/repos/

Now update will work again.

test # pkg update
Updating FreeBSD-ports repository catalogue...
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   10 MiB   5.4MB/s    00:02    
Processing entries: 100%
FreeBSD-ports repository update completed. 36390 packages processed.
Updating FreeBSD-ports-kmods repository catalogue...
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   31 KiB  31.3kB/s    00:01    
Processing entries: 100%
FreeBSD-ports-kmods repository update completed. 204 packages processed.
Updating FreeBSD-base repository catalogue...
pkg: Repository FreeBSD-base has a wrong packagesite, need to re-create database
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   80 KiB  81.5kB/s    00:01    
Processing entries: 100%
FreeBSD-base repository update completed. 496 packages processed.
All repositories are up to date.

You can even do PKGBASE upgrade if wanted.

test # 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 (4 candidates): 100%
Processing candidates (4 candidates): 100%
The following 4 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
        FreeBSD-kernel-generic: 15.0 -> 15.0p1 [FreeBSD-base]
        FreeBSD-rescue: 15.0 -> 15.0p1 [FreeBSD-base]
        FreeBSD-runtime: 15.0 -> 15.0p1 [FreeBSD-base]
        FreeBSD-utilities: 15.0 -> 15.0p1 [FreeBSD-base]

Number of packages to be upgraded: 4

62 MiB to be downloaded.

Proceed with this action? [y/N]: 

Poudriere in Proxy World

Now to another deeper level – like in Inception (2010) movie – the Poudriere package building harvester.

If you want to check more on the Poudriere itself you can check these:

Now – first we need to install poudriere-devel package as it has the latest features.

test # pkg install poudriere-devel ccache4 git nginx
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.
The following 28 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        brotli: 1.1.0,1 [FreeBSD-ports]
        ccache4: 4.10.2_1 [FreeBSD-ports]
        curl: 8.16.0 [FreeBSD-ports]
        expat: 2.7.3 [FreeBSD-ports]
        gettext-runtime: 0.23.1 [FreeBSD-ports]
        git: 2.51.0 [FreeBSD-ports]
        indexinfo: 0.3.1_1 [FreeBSD-ports]
        libffi: 3.5.1 [FreeBSD-ports]
        libidn2: 2.3.8 [FreeBSD-ports]
        libnghttp2: 1.67.0 [FreeBSD-ports]
        libpsl: 0.21.5_2 [FreeBSD-ports]
        libssh2: 1.11.1,3 [FreeBSD-ports]
        libunistring: 1.4.1 [FreeBSD-ports]
        mpdecimal: 4.0.1 [FreeBSD-ports]
        nginx: 1.28.0_3,3 [FreeBSD-ports]
        p5-Authen-SASL: 2.1900 [FreeBSD-ports]
        p5-Crypt-URandom: 0.54 [FreeBSD-ports]
        p5-Digest-HMAC: 1.05 [FreeBSD-ports]
        p5-Error: 0.17030 [FreeBSD-ports]
        p5-IO-Socket-SSL: 2.095 [FreeBSD-ports]
        p5-MIME-Base32: 1.303 [FreeBSD-ports]
        p5-MIME-Base64: 3.16 [FreeBSD-ports]
        p5-Mozilla-CA: 20250602 [FreeBSD-ports]
        p5-Net-SSLeay: 1.94 [FreeBSD-ports]
        p5-URI: 5.32_1 [FreeBSD-ports]
        poudriere-devel: 3.4.99.20251213 [FreeBSD-ports]
        python311: 3.11.14 [FreeBSD-ports]
        readline: 8.2.13_2 [FreeBSD-ports]

Number of packages to be installed: 28

The process will require 283 MiB more space.
41 MiB to be downloaded.

Proceed with this action? [y/N]: y
[1/25] Fetching mpdecimal-4.0.1~f774e949d8.pkg: 100%  157 KiB 160.5kB/s    00:01    
(...)
[28/28] Installing git-2.51.0...
===> Creating groups
Creating group 'git_daemon' with gid '964'
===> Creating users
Creating user 'git_daemon' with uid '964'
[28/28] Extracting git-2.51.0: 100%

Basic Poudriere Setup

We will now setup some basic Poudriere setup.

test # export SSL=/usr/local/etc/ssl

test # mkdir -p \
              /usr/ports/distfiles \
              ${SSL}/keys \
              ${SSL}/certs

test # chmod 0600 ${SSL}/keys

test # openssl genrsa -out ${SSL}/keys/poudriere.key 4096

test # openssl rsa \
              -in  ${SSL}/keys/poudriere.key -pubout \
              -out ${SSL}/certs/poudriere.cert

test # mkdir /var/ccache

test # cat < /usr/local/etc/poudriere.conf
ZPOOL=zroot
FREEBSD_HOST=ftp://ftp.freebsd.org
BASEFS=/usr/local/poudriere
POUDRIERE_DATA=/usr/local/poudriere/data
DISTFILES_CACHE=/usr/ports/distfiles
CCACHE_DIR=/var/ccache
CHECK_CHANGED_OPTIONS=verbose
CHECK_CHANGED_DEPS=yes
PKG_REPO_SIGNING_KEY=/usr/local/etc/ssl/keys/poudriere.key
URL_BASE=http://0.0.0.0/
USE_TMPFS=no
TMPFS_LIMIT=12
MAX_MEMORY=12
PARALLEL_JOBS=4
PREPARE_PARALLEL_JOBS=4
MAX_FILES=4096
KEEP_OLD_PACKAGES=yes
KEEP_OLD_PACKAGES_COUNT=3
CHECK_CHANGED_OPTIONS=verbose
CHECK_CHANGED_DEPS=yes
RESTRICT_NETWORKING=no
PACKAGE_FETCH_URL="http://pkg.FreeBSD.org/\${ABI}"
PACKAGE_FETCH_BRANCH="latest"
export HTTP_PROXY="http://10.0.0.41:3128"
export HTTPS_PROXY="http://10.0.0.41:3128"
export FTP_PROXY="http://10.0.0.41:3128"
EOF

test # mkdir -p /usr/local/poudriere/data/logs/bulk

test # ln -s \
              /usr/local/etc/ssl/certs/poudriere.cert \
              /usr/local/poudriere/data/logs/bulk/poudriere.cert

test # cat < /usr/local/etc/poudriere.d/make.conf
# general
ALLOW_UNSUPPORTED_SYSTEM=yes
DISABLE_LICENSES=yes

# ccache(1)
WITH_CCACHE_BUILD=yes

# ports options
FORCE_MAKE_JOBS=yes
MAKE_JOBS_UNSAFE=yes
MAKE_JOBS_NUMBER=8
EOF

test # sed -i '' -E 's|text/plain[\t\ ]*txt|text/plain txt log|g' /usr/local/etc/nginx/mime.types

test # cat < /usr/local/etc/nginx/nginx.conf
events {
  worker_connections 1024;
}

http {
  include      mime.types;
  default_type application/octet-stream;

  server {
    listen 80 default;
    server_name 0.0.0.0;
    root /usr/local/share/poudriere/html;

    location /data {
      alias /usr/local/poudriere/data/logs/bulk;
      autoindex on;
    }

    location /packages {
      root /usr/local/poudriere/data;
      autoindex on;
    }
  }
}
EOF

test # mkdir /root/.cache

test # ln -sf /var/ccache /root/.cache/ccache

test # cat < /var/ccache/ccache.conf
max_size = 0
cache_dir = /var/ccache
base_dir = /var/ccache
hash_dir = false
EOF

Important Poudriere Config Part

The IMPORTANT settings here – to allow Poudriere function properly within proxy environment – are these five lines in the /usr/local/etc/poudriere.conf file.

export HTTP_PROXY="http://10.0.0.41:3128"
export HTTPS_PROXY="http://10.0.0.41:3128"
export FTP_PROXY="http://10.0.0.41:3128"
PACKAGE_FETCH_URL="http://pkg.FreeBSD.org/\${ABI}"
PACKAGE_FETCH_BRANCH="latest"

The first three are obvious – and YES – they need the export prefix to work.

The other two are less obvious … and I will show You why in a moment.

We need to create some FreeBSD jail – we will use 14.3-RELEASE as example. Use any version that you will be building packages for.

test # poudriere jail -c -j 14-3-R-amd64 -v 14.3-RELEASE
[00:00:00] Creating 14-3-R-amd64 fs at /usr/local/poudriere/jails/14-3-R-amd64... done
[00:00:00] Using pre-distributed MANIFEST for FreeBSD 14.3-RELEASE amd64
[00:00:00] Fetching base for FreeBSD 14.3-RELEASE amd64
base.txz                                               200 MB 5128 kBps    41s
[00:00:41] Extracting base... done
[00:00:49] Fetching src for FreeBSD 14.3-RELEASE amd64
src.txz                                                206 MB 4828 kBps    44s
[00:01:34] Extracting src... done
[00:01:46] Fetching lib32 for FreeBSD 14.3-RELEASE amd64
lib32.txz                                               60 MB   11 MBps    05s
[00:01:52] Extracting lib32... done
[00:01:54] Cleaning up... done
[00:01:54] Recording filesystem state for clean... done
[00:01:54] Upgrading using http
Looking up update.FreeBSD.org mirrors... none found.
Fetching public key from update.FreeBSD.org... done.
Fetching metadata signature for 14.3-RELEASE from update.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 196 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150....160....170....180....190... done.
Applying patches... done.
Fetching 40 files... ....10....20....30....40 done.
The following files will be removed as part of updating to
14.3-RELEASE-p7:
/usr/src/contrib/libarchive/libarchive/archive_getdate.c
/usr/src/contrib/libarchive/libarchive/archive_getdate.h
/usr/src/contrib/libarchive/libarchive/test/test_archive_getdate.c
(...)
/usr/src/usr.bin/tar/tests/Makefile
/usr/src/usr.sbin/freebsd-update/freebsd-update.sh
/usr/src/usr.sbin/rtsold/rtsol.c
Installing updates... done.
14.3-RELEASE-p7
[00:03:25] Recording filesystem state for clean... done
[00:03:25] Jail 14-3-R-amd64 14.3-RELEASE-p7 amd64 is ready to be used

test # poudriere jail -l
JAILNAME     VERSION         OSVERSION ARCH  METHOD TIMESTAMP           PATH
14-3-R-amd64 14.3-RELEASE-p7 1403000   amd64 http   2026-01-07 01:33:45 /usr/local/poudriere/jails/14-3-R-amd64

We also need FreeBSD Ports tree … just in a Poudriere way.

test # poudriere ports -c
[00:00:00] Creating default fs at /usr/local/poudriere/ports/default... done
[00:00:00] Cloning the ports tree...
fatal: unable to access 'https://git.FreeBSD.org/ports.git/': Could not resolve host: git.FreeBSD.org
[00:00:45] Error: /usr/local/share/poudriere/ports.sh:303: fail
[00:00:45] Error while creating ports tree, cleaning up.

This is where the dedicated git(1) config is needed as its a bitch and ignores *_PROXY variables 🙂

test # git config --system http.proxy http://10.0.0.41:3128

test # poudriere ports -c
[00:00:00] Creating default fs at /usr/local/poudriere/ports/default... done
[00:00:00] Cloning the ports tree... done

test # poudriere ports -l
PORTSTREE METHOD    TIMESTAMP           PATH
default   git+https 2026-01-07 01:49:46 /usr/local/poudriere/ports/default

Works.

Now – lets try to actually build something with Poudriere.

We will try two ports that one needs to be actually build (dosunix) and one that is in POSIX sh(1) and does not need building (lsblk).

I will intentionally run first building process with proxy variables disabled like this in the /usr/local/etc/poudriere.conf file:

# PACKAGE_FETCH_URL="http://pkg.FreeBSD.org/\${ABI}"
# PACKAGE_FETCH_BRANCH="latest"
# export HTTP_PROXY="http://10.0.0.41:3128"
# export HTTPS_PROXY="http://10.0.0.41:3128"
# export FTP_PROXY="http://10.0.0.41:3128"

Here.

test # poudriere bulk -c -C -j 14-3-R-amd64 -b latest -p default sysutils/lsblk converters/dosunix

Result is below … and as expected it failed.

test # poudriere bulk -c -C -j 14-3-R-amd64 -b latest -p default sysutils/lsblk converters/dosunix
[00:00:00] Creating the reference jail... done
[00:00:00] Mounting system devices for 14-3-R-amd64-default
[00:00:00] Stashing existing package repository
[00:00:00] Mounting ccache from: /var/ccache
[00:00:00] Mounting ports from: /usr/local/poudriere/ports/default
[00:00:00] Mounting packages from: /usr/local/poudriere/data/packages/14-3-R-amd64-default
[00:00:00] Mounting distfiles from: /usr/ports/distfiles
[00:00:00] Appending to make.conf: /usr/local/etc/poudriere.d/make.conf
/etc/resolv.conf -> /usr/local/poudriere/data/.m/14-3-R-amd64-default/ref/etc/resolv.conf
[00:00:00] Starting jail 14-3-R-amd64-default
Updating /var/run/os-release done.
[00:00:00] Will build as root:wheel (0:0)
[00:00:00] Ports supports: FLAVORS SUBPACKAGES SELECTED_OPTIONS
[00:00:00] Inspecting /usr/local/poudriere/data/.m/14-3-R-amd64-default/ref//usr/ports for modifications to git checkout... no
[00:00:03] Ports top-level git hash: 284813ec0382a2bfe5b2e74a3081a67599d3155d
[00:00:03] Acquiring build logs lock for 14-3-R-amd64-default... done
[00:00:03] Logs: /usr/local/poudriere/data/logs/bulk/14-3-R-amd64-default/2026-01-07_01h58m23s
[00:00:03] WWW: http://0.0.0.0//build.html?mastername=14-3-R-amd64-default&build=2026-01-07_01h58m23s
[00:00:03] Loading MOVED for /usr/local/poudriere/data/.m/14-3-R-amd64-default/ref/usr/ports
[00:00:04] Gathering ports metadata
[00:00:04] Calculating ports order and dependencies
[00:00:04] Sanity checking the repository
[00:00:04] -c specified, cleaning all packages... done
[00:00:04] -C specified, cleaning listed packages
[00:00:04] (-C) Flushing package deletions
[00:00:04] Trimming IGNORED and blacklisted ports
[00:00:04] Package fetch: Looking for missing packages to fetch from pkg+http://pkg.FreeBSD.org/${ABI}/latest
[00:00:04] Package fetch: bootstrapping pkg
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest, please wait...
pkg: Attempted to fetch pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest/Latest/pkg.pkg
pkg: Attempted to fetch pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest/Latest/pkg.txz
pkg: Error: Address family for host not supported
Address resolution failed for http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest.
[00:08:58] Package fetch: Not fetching as remote repository is unavailable.
[00:08:58] pkg bootstrap missing: unable to inspect existing packages, cleaning all packages... done
[00:08:58] Deleting stale symlinks... done
[00:08:58] Deleting empty directories... done
[00:08:58] Unqueueing existing packages
[00:08:58] Unqueueing orphaned build dependencies
[00:08:58] Sanity checking build queue
[00:08:58] [14-3-R-amd64-default] [2026-01-07_01h58m23s] [pkgqueue_sanity_check] Time: 00:08:54
           Queued: 4 Inspected: 0 Ignored: 0 Built: 0 Failed: 0 Skipped: 0 Fetched: 0 Remaining: 4
[00:08:58] Recording filesystem state for prepkg... done
[00:08:58] Processing PRIORITY_BOOST
[00:08:58] Building 4 packages using up to 4 builders
[00:08:58] Hit CTRL+t at any time to see build progress and stats
[00:08:58] [01] [00:00:00] Builder starting
[00:08:58] [01] [00:00:00] Builder started
[00:08:58] [01] [00:00:00] Building   ports-mgmt/pkg | pkg-2.5.1
[00:11:56] [01] [00:02:58] Finished   ports-mgmt/pkg | pkg-2.5.1: Failed: fetch
[00:11:56] [01] [00:02:58] Skipping   devel/ccache | ccache-3.7.12_8: Dependent port ports-mgmt/pkg | pkg-2.5.1 failed
[00:11:56] [01] [00:02:58] Skipping   converters/dosunix | dosunix-1.0.14: Dependent port ports-mgmt/pkg | pkg-2.5.1 failed
[00:11:56] [01] [00:02:58] Skipping   sysutils/lsblk | lsblk-4.0: Dependent port ports-mgmt/pkg | pkg-2.5.1 failed
[00:11:57] Stopping up to 4 builders
[00:11:57] Creating pkg repository
[00:11:57] No packages present
[00:11:57] Committing packages to repository: /usr/local/poudriere/data/packages/14-3-R-amd64-default/.real_1767751820 via .latest symlink
[00:11:57] Removing old packages
[00:11:57] Failed ports: ports-mgmt/pkg:fetch
[00:11:57] Skipped ports: converters/dosunix devel/ccache sysutils/lsblk
[00:11:57] [14-3-R-amd64-default] [2026-01-07_01h58m23s] [committing] Time: 00:11:53
           Queued: 4 Inspected: 0 Ignored: 0 Built: 0 Failed: 1 Skipped: 3 Fetched: 0 Remaining: 0
[00:11:57] Logs: /usr/local/poudriere/data/logs/bulk/14-3-R-amd64-default/2026-01-07_01h58m23s
[00:11:57] WWW: http://0.0.0.0//build.html?mastername=14-3-R-amd64-default&build=2026-01-07_01h58m23s
[00:11:57] Cleaning up
[00:11:57] Stopping up to 4 builders
[00:11:57] Unmounting file systems
test # 

Now I will run it again but with proxy setting enabled in the /usr/local/etc/poudriere.conf file like that.

# PACKAGE_FETCH_URL="http://pkg.FreeBSD.org/\${ABI}"
# PACKAGE_FETCH_BRANCH="latest"
export HTTP_PROXY="http://10.0.0.41:3128"
export HTTPS_PROXY="http://10.0.0.41:3128"
export FTP_PROXY="http://10.0.0.41:3128"

It should work with one small caveat.

test # poudriere bulk -c -C -j 14-3-R-amd64 -b latest -p default sysutils/lsblk converters/dosunix
[00:00:00] Creating the reference jail... done
[00:00:00] Mounting system devices for 14-3-R-amd64-default
[00:00:00] Stashing existing package repository
[00:00:00] Mounting ccache from: /var/ccache
[00:00:00] Mounting ports from: /usr/local/poudriere/ports/default
[00:00:00] Mounting packages from: /usr/local/poudriere/data/packages/14-3-R-amd64-default
[00:00:00] Mounting distfiles from: /usr/ports/distfiles
[00:00:00] Appending to make.conf: /usr/local/etc/poudriere.d/make.conf
/etc/resolv.conf -> /usr/local/poudriere/data/.m/14-3-R-amd64-default/ref/etc/resolv.conf
[00:00:00] Starting jail 14-3-R-amd64-default
Updating /var/run/os-release done.
[00:00:00] Will build as root:wheel (0:0)
[00:00:01] Ports supports: FLAVORS SUBPACKAGES SELECTED_OPTIONS
[00:00:01] Inspecting /usr/local/poudriere/data/.m/14-3-R-amd64-default/ref//usr/ports for modifications to git checkout... no
[00:00:04] Ports top-level git hash: 284813ec0382a2bfe5b2e74a3081a67599d3155d 
[00:00:04] Acquiring build logs lock for 14-3-R-amd64-default... done
[00:00:04] Logs: /usr/local/poudriere/data/logs/bulk/14-3-R-amd64-default/2026-01-07_02h13m56s
[00:00:04] WWW: http://0.0.0.0//build.html?mastername=14-3-R-amd64-default&build=2026-01-07_02h13m56s
[00:00:04] Loading MOVED for /usr/local/poudriere/data/.m/14-3-R-amd64-default/ref/usr/ports
[00:00:04] Gathering ports metadata
[00:00:04] Calculating ports order and dependencies
[00:00:04] Sanity checking the repository
[00:00:04] -c specified, cleaning all packages... done
[00:00:04] -C specified, cleaning listed packages
[00:00:04] (-C) Flushing package deletions
[00:00:04] Trimming IGNORED and blacklisted ports
[00:00:04] Package fetch: Looking for missing packages to fetch from pkg+http://pkg.FreeBSD.org/${ABI}/latest
[00:00:04] Package fetch: bootstrapping pkg
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest, please wait...
[14-3-R-amd64-default] Installing pkg-2.5.1...
[14-3-R-amd64-default] Extracting pkg-2.5.1: 100%
Updating Poudriere repository catalogue...
pkg: No SRV record found for the repo 'Poudriere'
[14-3-R-amd64-default] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
pkg: packagesite URL error for pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest/data.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest/data.tzst -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest/packagesite.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest/packagesite.tzst -- pkg+:// implies SRV mirror type
Unable to update repository Poudriere
Error updating repositories!
[00:00:29] Package fetch: Not fetching as remote repository is unavailable.
[00:00:29] pkg bootstrap missing: unable to inspect existing packages, cleaning all packages... done
[00:00:29] Deleting stale symlinks... done
[00:00:29] Deleting empty directories... done
[00:00:29] Unqueueing existing packages
[00:00:29] Unqueueing orphaned build dependencies
[00:00:29] Sanity checking build queue
[00:00:29] [14-3-R-amd64-default] [2026-01-07_02h13m56s] [pkgqueue_sanity_check] Time: 00:00:26
           Queued: 4 Inspected: 0 Ignored: 0 Built: 0 Failed: 0 Skipped: 0 Fetched: 0 Remaining: 4
[00:00:29] Recording filesystem state for prepkg... done
[00:00:29] Processing PRIORITY_BOOST
[00:00:30] Building 4 packages using up to 4 builders
[00:00:30] Hit CTRL+t at any time to see build progress and stats
[00:00:30] [01] [00:00:00] Builder starting
[00:00:30] [01] [00:00:00] Builder started
[00:00:30] [01] [00:00:00] Building   ports-mgmt/pkg | pkg-2.5.1
[00:02:34] [01] [00:02:04] Finished   ports-mgmt/pkg | pkg-2.5.1: Success
[00:02:34] [02] [00:00:00] Builder starting
[00:02:34] [01] [00:00:00] Building   devel/ccache | ccache-3.7.12_8
[00:02:35] [02] [00:00:01] Builder started
[00:02:35] [02] [00:00:00] Building   sysutils/lsblk | lsblk-4.0
[00:02:36] [02] [00:00:01] Finished   sysutils/lsblk | lsblk-4.0: Success
[00:02:39] [01] [00:00:05] Finished   devel/ccache | ccache-3.7.12_8: Success
[00:02:39] [01] [00:00:00] Building   converters/dosunix | dosunix-1.0.14
[00:02:42] [01] [00:00:03] Finished   converters/dosunix | dosunix-1.0.14: Success
[00:02:42] Stopping up to 4 builders
[00:02:42] Creating pkg repository
[00:02:42] Signing repository with key: /usr/local/etc/ssl/keys/poudriere.key
Creating repository in /tmp/packages: 100%
Packing files for repository: 100%
[00:02:43] Signing pkg bootstrap with method: pubkey
[00:02:43] Committing packages to repository: /usr/local/poudriere/data/packages/14-3-R-amd64-default/.real_1767752199 via .latest symlink
[00:02:43] Removing old packages
[00:02:43] Built ports: ports-mgmt/pkg sysutils/lsblk devel/ccache converters/dosunix
[00:02:43] [14-3-R-amd64-default] [2026-01-07_02h13m56s] [committing] Time: 00:02:39
           Queued: 4 Inspected: 0 Ignored: 0 Built: 4 Failed: 0 Skipped: 0 Fetched: 0 Remaining: 0
[00:02:43] Logs: /usr/local/poudriere/data/logs/bulk/14-3-R-amd64-default/2026-01-07_02h13m56s
[00:02:43] WWW: http://0.0.0.0//build.html?mastername=14-3-R-amd64-default&build=2026-01-07_02h13m56s
[00:02:43] Cleaning up
[00:02:43] Stopping up to 4 builders
[00:02:43] Unmounting file systems

Also in nice graphical colored form.

The build generally ended successfully – we have our packages available.

test # ls -l /usr/local/poudriere/data/packages/14-3-R-amd64-default/All/
total 6294
-rw-r--r--  1 root wheel  126041 Jan  7 02:16 ccache-3.7.12_8.pkg
-rw-r--r--  1 root wheel    5963 Jan  7 02:16 dosunix-1.0.14.pkg
-rw-r--r--  1 root wheel    6544 Jan  7 02:16 lsblk-4.0.pkg
-rw-r--r--  1 root wheel 6290261 Jan  7 02:16 pkg-2.5.1.pkg

The only errors were these below and they did not broken our build:

(...)
Updating Poudriere repository catalogue...
pkg: No SRV record found for the repo 'Poudriere'
[14-3-R-amd64-default] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
pkg: packagesite URL error for pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest/data.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest/data.tzst -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest/packagesite.pkg -- pkg+:// implies SRV mirror type
pkg: packagesite URL error for pkg+http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest/packagesite.tzst -- pkg+:// implies SRV mirror type
Unable to update repository Poudriere
Error updating repositories!
[00:00:29] Package fetch: Not fetching as remote repository is unavailable.
(...)

To get the idea what is wrong here we need to level up our debugging skill and get our hands dirty with FreeBSD tools like ktrace(8) and kdump(8) to know what is missing.

test # ktrace -di poudriere bulk -c -C -j 14-3-R-amd64 -b latest -p default sysutils/lsblk converters/dosunix
(...)
[00:00:32] [01] [00:00:00] Builder starting
[00:00:33] [01] [00:00:01] Builder started
[00:00:33] [01] [00:00:00] Building   ports-mgmt/pkg | pkg-2.5.1

When You reach this place – just hit [CTRL]+[C] to stop it – its not needed to wait for it.

Now check with kdump(8) the gathered data.

test # kdump | grep -m 5 -C 2 'pkg+' | tail -4
        Poudriere: {
        url: pkg+http://pkg.FreeBSD.org/${ABI}/latest,
        mirror_type: srv
        }

I wanted to show only the part that was important – Of course I did not guessed it like that … just find it with a help of a friend.

Poudriere – on the fly – defines additional repository … and if you did not override it – yes – it will use both pkg+ and srv things that hurt our proxy environment.

This is part of the Poudriere code that is responsible for its generation.

cat >> "${MASTERMNT:?}/etc/pkg/poudriere.conf" <<-EOF
FreeBSD: {
        enabled: no,
        priority: 100
}
FreeBSD-kmods: {
        enabled: no,
        priority: 100
}
FreeBSD-ports: {
        enabled: no,
        priority: 100
}
FreeBSD-ports-kmods: {
        enabled: no,
        priority: 100
}
FreeBSD-base: {
        enabled: no,
        priority: 100
}

Poudriere: {
        url: ${packagesite},
        mirror_type: $(if [ "${packagesite#pkg+}" = "${packagesite}" ]; then echo "none"; else echo "srv"; fi)
}
EOF

So it will generate the ‘broken for proxy’ config like that:

Poudriere: {
        url: pkg+http://pkg.FreeBSD.org/${ABI}/latest,
        mirror_type: srv
}

Looking at the code above you can see the if that checks how the packagesite is defined.

Lets see how Poudriere figures that one out in the code.

test # grep -m 1 packagesite= common.sh
        packagesite="${PACKAGE_FETCH_URL:+${PACKAGE_FETCH_URL}/}${PACKAGE_FETCH_BRANCH}"

So the answer is that we need to set PACKAGE_FETCH_URL and PACKAGE_FETCH_BRANCH in the /usr/local/etc/poudriere.conf file … the ones I commented out to explain all that in details.

So now – with all needed settings enabled at /usr/local/etc/poudriere.conf file … fully working Poudriere build in proxy environment.

PACKAGE_FETCH_URL="http://pkg.FreeBSD.org/\${ABI}"
PACKAGE_FETCH_BRANCH="latest"
export HTTP_PROXY="http://10.0.0.41:3128"
export HTTPS_PROXY="http://10.0.0.41:3128"
export FTP_PROXY="http://10.0.0.41:3128"

Remember to have the \$ as backslashed as Poudriere is written in POSIX sh(1).

Now the fully working run.

test # poudriere bulk -c -C -j 14-3-R-amd64 -b latest -p default sysutils/lsblk converters/dosunix
[00:00:00] Creating the reference jail... done
[00:00:00] Mounting system devices for 14-3-R-amd64-default
[00:00:00] Stashing existing package repository
[00:00:00] Mounting ccache from: /var/ccache
[00:00:00] Mounting ports from: /usr/local/poudriere/ports/default
[00:00:00] Mounting packages from: /usr/local/poudriere/data/packages/14-3-R-amd64-default
[00:00:00] Mounting distfiles from: /usr/ports/distfiles
[00:00:00] Appending to make.conf: /usr/local/etc/poudriere.d/make.conf
/etc/resolv.conf -> /usr/local/poudriere/data/.m/14-3-R-amd64-default/ref/etc/resolv.conf
[00:00:00] Starting jail 14-3-R-amd64-default
Updating /var/run/os-release done.
[00:00:00] Will build as root:wheel (0:0)
[00:00:00] Ports supports: FLAVORS SUBPACKAGES SELECTED_OPTIONS
[00:00:00] Inspecting /usr/local/poudriere/data/.m/14-3-R-amd64-default/ref//usr/ports for modifications to git checkout... no
[00:00:03] Ports top-level git hash: 284813ec0382a2bfe5b2e74a3081a67599d3155d 
[00:00:03] Acquiring build logs lock for 14-3-R-amd64-default... done
[00:00:03] Logs: /usr/local/poudriere/data/logs/bulk/14-3-R-amd64-default/2026-01-07_03h52m21s
[00:00:03] WWW: http://0.0.0.0//build.html?mastername=14-3-R-amd64-default&build=2026-01-07_03h52m21s
[00:00:03] Loading MOVED for /usr/local/poudriere/data/.m/14-3-R-amd64-default/ref/usr/ports
[00:00:04] Gathering ports metadata
[00:00:04] Calculating ports order and dependencies
[00:00:04] Sanity checking the repository
[00:00:04] -c specified, cleaning all packages... done
[00:00:04] -C specified, cleaning listed packages
[00:00:04] (-C) Flushing package deletions
[00:00:04] Trimming IGNORED and blacklisted ports
[00:00:04] Package fetch: Looking for missing packages to fetch from http://pkg.FreeBSD.org/${ABI}/latest
[00:00:04] Package fetch: bootstrapping pkg
Bootstrapping pkg from http://pkg.FreeBSD.org/FreeBSD:14:amd64/latest, please wait...
[14-3-R-amd64-default] Installing pkg-2.5.1...
[14-3-R-amd64-default] Extracting pkg-2.5.1: 100%
Updating Poudriere repository catalogue...
[14-3-R-amd64-default] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[14-3-R-amd64-default] Fetching data: 100%   11 MiB   3.7 M/s    00:03    
Processing entries: 100%
Poudriere repository update completed. 36661 packages processed.
All repositories are up to date.
[00:00:20] Package fetch: Will fetch 3 packages from remote or local pkg cache
Updating database digests format: 100%
The following packages will be fetched:

New packages to be FETCHED:
        ccache: 3.7.12_8 (134 KiB: 91.17% of the 147 KiB to download)
        dosunix: 1.0.14 (6 KiB: 4.04% of the 147 KiB to download)
        lsblk: 4.0 (7 KiB: 4.79% of the 147 KiB to download)

Number of packages to be fetched: 3

147 KiB to be downloaded.
[14-3-R-amd64-default] Fetching ccache-3.7.12_8: 100%  134 KiB 137.3 k/s    00:01    
[14-3-R-amd64-default] Fetching lsblk-4.0: 100%    7 KiB   7.2 k/s    00:01    
[14-3-R-amd64-default] Fetching dosunix-1.0.14: 100%    6 KiB   6.1 k/s    00:01    
[00:00:21] Package fetch: Using cached copy of ccache-3.7.12_8
[00:00:21] Package fetch: Using cached copy of dosunix-1.0.14
[00:00:21] Package fetch: Using cached copy of lsblk-4.0
[00:00:21] Checking packages for incremental rebuild needs
[00:00:21] Deleting stale symlinks... done
[00:00:21] Deleting empty directories... done
[00:00:21] Package fetch: Generating logs for fetched packages
[00:00:21] Unqueueing existing packages
[00:00:21] Unqueueing orphaned build dependencies
[00:00:21] Sanity checking build queue
[00:00:21] [14-3-R-amd64-default] [2026-01-07_03h52m21s] [pkgqueue_sanity_check] Time: 00:00:18
           Queued: 4 Inspected: 0 Ignored: 0 Built: 0 Failed: 0 Skipped: 0 Fetched: 3 Remaining: 1
[00:00:21] Recording filesystem state for prepkg... done
[00:00:21] Processing PRIORITY_BOOST
[00:00:21] Building 1 packages using up to 1 builders
[00:00:21] Hit CTRL+t at any time to see build progress and stats
[00:00:21] [01] [00:00:00] Builder starting
[00:00:21] [01] [00:00:00] Builder started
[00:00:21] [01] [00:00:00] Building   ports-mgmt/pkg | pkg-2.5.1
[00:02:25] [01] [00:02:04] Finished   ports-mgmt/pkg | pkg-2.5.1: Success
[00:02:25] Stopping up to 1 builders
[00:02:25] Creating pkg repository
[00:02:25] Signing repository with key: /usr/local/etc/ssl/keys/poudriere.key
Creating repository in /tmp/packages: 100%
Packing files for repository: 100%
[00:02:25] Signing pkg bootstrap with method: pubkey
[00:02:25] Committing packages to repository: /usr/local/poudriere/data/packages/14-3-R-amd64-default/.real_1767758087 via .latest symlink
[00:02:25] Removing old packages
[00:02:25] Built ports: ports-mgmt/pkg
[00:02:25] Fetched ports: sysutils/lsblk converters/dosunix devel/ccache
[00:02:25] [14-3-R-amd64-default] [2026-01-07_03h52m21s] [committing] Time: 00:02:23
           Queued: 4 Inspected: 0 Ignored: 0 Built: 1 Failed: 0 Skipped: 0 Fetched: 3 Remaining: 0
[00:02:25] Logs: /usr/local/poudriere/data/logs/bulk/14-3-R-amd64-default/2026-01-07_03h52m21s
[00:02:25] WWW: http://0.0.0.0//build.html?mastername=14-3-R-amd64-default&build=2026-01-07_03h52m21s
[00:02:25] Cleaning up
[00:02:25] Stopping up to 4 builders
[00:02:25] Unmounting file systems
test # 

… and in the TECHNICOLOR form 🙂

The part that was broken earlier is now fine.

Updating Poudriere repository catalogue...
[14-3-R-amd64-default] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[14-3-R-amd64-default] Fetching data: 100%   11 MiB   3.7 M/s    00:03    
Processing entries: 100%

I believe that concludes this article – let me know if I missed anything.

EOF
Top

Welcome 0x1eef (Robert) to the HardenedBSD Development Team!

Post by HardenedBSD via HardenedBSD »

Multi-year HardenedBSD community member 0x1eef (Robert) has been sending in good quality patches over the past few years. I reached out on behalf of the HardenedBSD Core Team to 0x1eef, asking if he would like to become an official HardenedBSD developer. He accepted! Welcome to the team, 0x1eef! Thank you for the hard work!

A little bio about 0x1eef: I’m a systems-focused programmer working primarily with hardenedBSD for the past few years and I generally appreciate (and often use) all flavors of BSD. In the hardenedBSD space I have written portzap(8), sourcezap(8), ctrl(8) among a few other small contributions.

Top

Patched FreeBSD AMIs

Post by Colin Percival via Daemonic Dispatches »

I've been maintaining FreeBSD in the EC2 cloud since 2012, and from October 2013 onwards FreeBSD AMIs had code to automatically download and install security and critical errata updates when they first boot. Importantly, this took place before sshd started running, to ensure instances could be launched safely even if there were OpenSSH vulnerabilities in the release, and the system rebooted after installing updates to ensure that it would be running an updated kernel.

Top

Migrating my hosts from Python 3.11 to Python 3.12

Post by Dan Langille via Dan Langille's Other Diary »

This post probably won’t help you much. It is mostly just me saving stuff I may want to refer to later.

Also, this post covers only the initial hosts. It is the first step.

I’ll also post it to my Mastodon toot.

In this post:

  1. FreeBSD 14.3
  2. poudriere-3.4.4
  3. the FreeBSD ports tree on head as of 2026-01-20
  4. I’m also moving from PostgreSQL 16 client to PostgreSQL 18 client

Building Python 3.12 via poudriere

This is the change I made, adding those python=3.12 and pgsql=18 entries to this line:

[17:39 pkg01 dvl /usr/local/etc/poudriere.d] % grep 3.12 *
default-make.conf:DEFAULT_VERSIONS= pgsql=18 php=83 ssl=base perl5=5.42 python=3.12

When building, this is the command I used:

sudo poudriere bulk -j 143amd64 -p default -z primary -f /usr/local/etc/poudriere.d/buildlists/primary

Where:

  • default – The ports tree I use (see poudriere ports -l)
  • primary – The set I use for my main hosts (look for setname in man poudriere)
  • /usr/local/etc/poudriere.d/buildlists/primary – the list of ports I build
  • default-make.conf is used by this build process – see above man page

The install/update

From here, I’ll try another few host, if tonights build completes without a problem.

Notice how I get asked to proceed three times. As pkg discovers new information, with respect to conflicts, it confirms first.

[17:33 pkg01 dvl /usr/local/etc/poudriere.d] % sudo pkg upgrade
Updating FreeBSD-kmods repository catalogue...
FreeBSD-kmods repository is up to date.
Updating local repository catalogue...
[pkg01.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[pkg01.int.unixathome.org] Fetching data: 100%  416 KiB 425.6 k/s    00:01    
Processing entries: 100%
local repository update completed. 1311 packages processed.
All repositories are up to date.
Checking for upgrades (110 candidates): 100%
Processing candidates (110 candidates): 100%
The following 10 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        postgresql18-client: 18.1_1 [local]
        python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
        duf: 0.9.1_2 -> 0.9.1_3 [local]
        p11-kit: 0.25.10 -> 0.26.0 [local]
        python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
        dvl-librenms-dependencies-client-1.0.7 [local] (direct dependency changed: python312)
        nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
        python3-3_4 [local] (direct dependency changed: python312)
        rsync-3.4.1_5 [local] (direct dependency changed: python312)
        vuxml-1.1_6 [local] (direct dependency changed: python312)

Number of packages to be installed: 2
Number of packages to be upgraded: 3
Number of packages to be reinstalled: 5

The process will require 238 MiB more space.
43 MiB to be downloaded.

Proceed with this action? [y/N]: y
[pkg01.int.unixathome.org] [ 1/10] Fetching rsync-3.4.1_5: 100%  392 KiB 401.0 k/s    00:01    
[pkg01.int.unixathome.org] [ 2/10] Fetching python312-3.12.12_3: 100%   37 MiB  38.3 M/s    00:01    
[pkg01.int.unixathome.org] [ 3/10] Fetching python3-3_4: 100%    1 KiB   1.3 k/s    00:01    
[pkg01.int.unixathome.org] [ 4/10] Fetching nagios-plugins-2.4.4,1: 100%  456 KiB 467.1 k/s    00:01    
[pkg01.int.unixathome.org] [ 5/10] Fetching duf-0.9.1_3: 100%    1 MiB   1.1 M/s    00:01    
[pkg01.int.unixathome.org] [ 6/10] Fetching p11-kit-0.26.0: 100%  709 KiB 726.4 k/s    00:01    
[pkg01.int.unixathome.org] [ 7/10] Fetching vuxml-1.1_6: 100%    9 KiB   9.2 k/s    00:01    
[pkg01.int.unixathome.org] [ 8/10] Fetching dvl-librenms-dependencies-client-1.0.7: 100%    706 B   0.7 k/s    00:01    
[pkg01.int.unixathome.org] [ 9/10] Fetching python-3.12_3,2: 100%    1 KiB   1.1 k/s    00:01    
[pkg01.int.unixathome.org] [10/10] Fetching postgresql18-client-18.1_1: 100%    4 MiB   3.9 M/s    00:01    
Checking integrity... done (1 conflicting)
  - postgresql18-client-18.1_1 [local] conflicts with postgresql16-client-16.11_2 [installed] on /usr/local/bin/clusterdb
Checking integrity... done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 11 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        postgresql18-client: 18.1_1 [local]
        python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
        duf: 0.9.1_2 -> 0.9.1_3 [local]
        p11-kit: 0.25.10 -> 0.26.0 [local]
        python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
        dvl-librenms-dependencies-client-1.0.7 [local] (direct dependency changed: python312)
        nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
        postgresql16-client-16.11_2 [local]
        python3-3_4 [local] (direct dependency changed: python312)
        rsync-3.4.1_5 [local] (direct dependency changed: python312)
        vuxml-1.1_6 [local] (direct dependency changed: python312)

Number of packages to be installed: 2
Number of packages to be upgraded: 3
Number of packages to be reinstalled: 6

The process will require 238 MiB more space.
3 MiB to be downloaded.

Proceed with this action? [y/N]: y
[pkg01.int.unixathome.org] [ 1/1] Fetching postgresql16-client-16.11_2: 100%    3 MiB   3.5 M/s    00:01    
Checking integrity... done (1 conflicting)
  - postgresql16-client-16.11_2 [local] conflicts with postgresql18-client-18.1_1 [local] on /usr/local/bin/clusterdb
Checking integrity... done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 11 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        postgresql18-client: 18.1_1 [local]
        python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
        duf: 0.9.1_2 -> 0.9.1_3 [local]
        p11-kit: 0.25.10 -> 0.26.0 [local]
        python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
        dvl-librenms-dependencies-client-1.0.7 [local] (direct dependency changed: python312)
        nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
        python3-3_4 [local] (direct dependency changed: python312)
        rsync-3.4.1_5 [local] (direct dependency changed: python312)
        vuxml-1.1_6 [local] (direct dependency changed: python312)

Installed packages to be REMOVED:
        postgresql16-client: 16.11_2

Number of packages to be removed: 1
Number of packages to be installed: 2
Number of packages to be upgraded: 3
Number of packages to be reinstalled: 5

The process will require 222 MiB more space.

Proceed with this action? [y/N]: y
Checking integrity... done (0 conflicting)
[pkg01.int.unixathome.org] [ 1/12] Upgrading duf from 0.9.1_2 to 0.9.1_3...
[pkg01.int.unixathome.org] [ 1/12] Extracting duf-0.9.1_3: 100%
[pkg01.int.unixathome.org] [ 2/12] Upgrading p11-kit from 0.25.10 to 0.26.0...
[pkg01.int.unixathome.org] [ 2/12] Extracting p11-kit-0.26.0: 100%
[pkg01.int.unixathome.org] [ 3/12] Installing python312-3.12.12_3...
[pkg01.int.unixathome.org] [ 3/12] Extracting python312-3.12.12_3: 100%
[pkg01.int.unixathome.org] [ 4/12] Reinstalling dvl-librenms-dependencies-client-1.0.7...
[pkg01.int.unixathome.org] [ 5/12] Reinstalling python3-3_4...
[pkg01.int.unixathome.org] [ 5/12] Extracting python3-3_4: 100%
[pkg01.int.unixathome.org] [ 6/12] Upgrading python from 3.11_3,2 to 3.12_3,2...
[pkg01.int.unixathome.org] [ 6/12] Extracting python-3.12_3,2: 100%
[pkg01.int.unixathome.org] [ 7/12] Reinstalling rsync-3.4.1_5...
[pkg01.int.unixathome.org] [ 7/12] Extracting rsync-3.4.1_5: 100%
[pkg01.int.unixathome.org] [ 8/12] Reinstalling vuxml-1.1_6...
[pkg01.int.unixathome.org] [ 8/12] Extracting vuxml-1.1_6: 100%
xmlcatmgr: entry already exists for `/usr/local/share/xml/dtd/vuxml/catalog' of type `CATALOG'
xmlcatmgr: entry already exists for `/usr/local/share/xml/dtd/vuxml/catalog.xml' of type `nextCatalog'
pkg: POST-INSTALL script failed
[pkg01.int.unixathome.org] [ 9/12] Deinstalling nagios-plugins-2.4.4,1...
[pkg01.int.unixathome.org] [ 9/12] Deleting files for nagios-plugins-2.4.4,1: 100%
[pkg01.int.unixathome.org] [10/12] Deinstalling postgresql16-client-16.11_2...
[pkg01.int.unixathome.org] [10/12] Deleting files for postgresql16-client-16.11_2: 100%
[pkg01.int.unixathome.org] [11/12] Installing postgresql18-client-18.1_1...
[pkg01.int.unixathome.org] [11/12] Extracting postgresql18-client-18.1_1: 100%
[pkg01.int.unixathome.org] [12/12] Installing nagios-plugins-2.4.4,1...
[pkg01.int.unixathome.org] [12/12] Extracting nagios-plugins-2.4.4,1: 100%

as they require additional dependencies. They are available as:

py312-gdbm       databases/py-gdbm@py312
py312-sqlite3    databases/py-sqlite3@py312
py312-tkinter    x11-toolkits/py-tkinter@py312
=====
Message from postgresql18-client-18.1_1:

--
The PostgreSQL port has a collection of "side orders":

postgresql-docs
  For all of the html documentation

p5-Pg
  A perl5 API for client access to PostgreSQL databases.

postgresql-tcltk
  If you want tcl/tk client support.

postgresql-jdbc
  For Java JDBC support.

postgresql-odbc
  For client access from unix applications using ODBC as access
  method. Not needed to access unix PostgreSQL servers from Win32
  using ODBC. See below.

ruby-postgres, py-psycopg
  For client access to PostgreSQL databases using the ruby & python
  languages.

postgresql-plperl, postgresql-pltcl & postgresql-plruby
  For using perl5, tcl & ruby as procedural languages.

postgresql-contrib
  Lots of contributed utilities, postgresql functions and
  datatypes. There you find pg_standby, pgcrypto and many other cool
  things.

etc...
=====
Message from nagios-plugins-2.4.4,1:

--
===>   NOTICE:

The nagios-plugins port currently does not have a maintainer. As a result, it is
more likely to have unresolved issues, not be up-to-date, or even be removed in
the future. To volunteer to maintain this port, please create an issue at:

https://bugs.freebsd.org/bugzilla

More information about port maintainership is available at:

https://docs.freebsd.org/en/articles/contributing/#ports-contributing

A cleanup

I noticed a package here which is not needed. I removed it and cleaned up:

[17:46 pkg01 dvl /usr/local/etc/poudriere.d] % sudo pkg delete dvl-librenms-dependencies-client
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
        dvl-librenms-dependencies-client: 1.0.7

Number of packages to be removed: 1

Proceed with deinstalling packages? [y/N]: y
[pkg01.int.unixathome.org] [1/1] Deinstalling dvl-librenms-dependencies-client-1.0.7...
[17:46 pkg01 dvl /usr/local/etc/poudriere.d] % sudo pkg autoremove                                                                                   
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 3 packages:

Installed packages to be REMOVED:
        p5-File-Slurp: 9999.27
        p5-MIME-Base64: 3.16
        python311: 3.11.14

Number of packages to be removed: 3

The operation will free 202 MiB.

Proceed with deinstalling packages? [y/N]: y
[pkg01.int.unixathome.org] [1/3] Deinstalling p5-File-Slurp-9999.27...
[pkg01.int.unixathome.org] [1/3] Deleting files for p5-File-Slurp-9999.27: 100%
[pkg01.int.unixathome.org] [2/3] Deinstalling p5-MIME-Base64-3.16...
[pkg01.int.unixathome.org] [2/3] Deleting files for p5-MIME-Base64-3.16: 100%
[pkg01.int.unixathome.org] [3/3] Deinstalling python311-3.11.14...
[pkg01.int.unixathome.org] [3/3] Deleting files for python311-3.11.14: 100%
[17:46 pkg01 dvl /usr/local/etc/poudriere.d] % pkg info -x python
python-3.12_3,2
python3-3_4
python312-3.12.12_3
[17:46 pkg01 dvl /usr/local/etc/poudriere.d] % sudo pkg autoremove
Checking integrity... done (0 conflicting)
Nothing to do.

And, of course, the infamous cleanup. This clearly demonstrates nothing on the host requires Python 3.11:

[17:51 nsnotify dvl ~] % sudo pkg autoremove
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages:

Installed packages to be REMOVED:
	python311: 3.11.14

Number of packages to be removed: 1

The operation will free 201 MiB.

Proceed with deinstalling packages? [y/N]: y
[nsnotify.int.unixathome.org] [1/1] Deinstalling python311-3.11.14...
[nsnotify.int.unixathome.org] [1/1] Deleting files for python311-3.11.14: 100%
[17:51 nsnotify dvl ~] % 

serpico

This is my internal web proxy (only for incoming connections).

[17:55 serpico dvl ~] % sudo pkg upgrade
Updating local repository catalogue...
[serpico.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[serpico.int.unixathome.org] Fetching data: 100%  416 KiB 425.6 k/s    00:01    
Processing entries: 100%
local repository update completed. 1311 packages processed.
All repositories are up to date.
Checking for upgrades (52 candidates): 100%
Processing candidates (52 candidates): 100%
The following 6 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	postgresql18-client: 18.1_1
	python312: 3.12.12_3

Installed packages to be UPGRADED:
	python: 3.11_3,2 -> 3.12_3,2

Installed packages to be REINSTALLED:
	nagios-plugins-2.4.4,1 (direct dependency changed: postgresql18-client)
	python3-3_4 (direct dependency changed: python312)
	rsync-3.4.1_5 (options changed)

Number of packages to be installed: 2
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 3

The process will require 238 MiB more space.
41 MiB to be downloaded.

Proceed with this action? [y/N]: y
[serpico.int.unixathome.org] [1/6] Fetching rsync-3.4.1_5: 100%  392 KiB 401.0 k/s    00:01    
[serpico.int.unixathome.org] [2/6] Fetching python312-3.12.12_3: 100%   37 MiB  38.3 M/s    00:01    
[serpico.int.unixathome.org] [3/6] Fetching python3-3_4: 100%    1 KiB   1.3 k/s    00:01    
[serpico.int.unixathome.org] [4/6] Fetching nagios-plugins-2.4.4,1: 100%  456 KiB 467.1 k/s    00:01    
[serpico.int.unixathome.org] [5/6] Fetching python-3.12_3,2: 100%    1 KiB   1.1 k/s    00:01    
[serpico.int.unixathome.org] [6/6] Fetching postgresql18-client-18.1_1: 100%    4 MiB   3.9 M/s    00:01    
Checking integrity... done (2 conflicting)
  - postgresql18-client-18.1_1 conflicts with postgresql16-client-16.11_2 on /usr/local/bin/clusterdb
  - postgresql18-client-18.1_1 conflicts with postgresql16-client-16.11_2 on /usr/local/bin/clusterdb
Checking integrity... done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 8 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	postgresql18-client: 18.1_1
	python312: 3.12.12_3

Installed packages to be UPGRADED:
	python: 3.11_3,2 -> 3.12_3,2

Installed packages to be REINSTALLED:
	nagios-plugins-2.4.4,1 (direct dependency changed: postgresql18-client)
	pkg-2.5.1
	python3-3_4 (direct dependency changed: python312)
	rsync-3.4.1_5 (options changed)

Installed packages to be REMOVED:
	postgresql16-client: 16.11_2

Number of packages to be removed: 1
Number of packages to be installed: 2
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 4

The process will require 222 MiB more space.

Proceed with this action? [y/N]: y
Checking integrity... done (0 conflicting)
[serpico.int.unixathome.org] [1/9] Reinstalling pkg-2.5.1...
[serpico.int.unixathome.org] [1/9] Extracting pkg-2.5.1: 100%
[serpico.int.unixathome.org] [2/9] Installing python312-3.12.12_3...
[serpico.int.unixathome.org] [2/9] Extracting python312-3.12.12_3: 100%
[serpico.int.unixathome.org] [3/9] Reinstalling python3-3_4...
[serpico.int.unixathome.org] [3/9] Extracting python3-3_4: 100%
[serpico.int.unixathome.org] [4/9] Upgrading python from 3.11_3,2 to 3.12_3,2...
[serpico.int.unixathome.org] [4/9] Extracting python-3.12_3,2: 100%
[serpico.int.unixathome.org] [5/9] Reinstalling rsync-3.4.1_5...
[serpico.int.unixathome.org] [5/9] Extracting rsync-3.4.1_5: 100%
[serpico.int.unixathome.org] [6/9] Deinstalling nagios-plugins-2.4.4,1...
[serpico.int.unixathome.org] [6/9] Deleting files for nagios-plugins-2.4.4,1: 100%
[serpico.int.unixathome.org] [7/9] Deinstalling postgresql16-client-16.11_2...
[serpico.int.unixathome.org] [7/9] Deleting files for postgresql16-client-16.11_2: 100%
[serpico.int.unixathome.org] [8/9] Installing postgresql18-client-18.1_1...
[serpico.int.unixathome.org] [8/9] Extracting postgresql18-client-18.1_1: 100%
[serpico.int.unixathome.org] [9/9] Installing nagios-plugins-2.4.4,1...
[serpico.int.unixathome.org] [9/9] Extracting nagios-plugins-2.4.4,1: 100%
You may need to manually remove /usr/local/etc/pkg.conf if it is no longer needed.
=====
Message from python312-3.12.12_3:

--
Note that some standard Python modules are provided as separate ports
as they require additional dependencies. They are available as:

py312-gdbm       databases/py-gdbm@py312
py312-sqlite3    databases/py-sqlite3@py312
py312-tkinter    x11-toolkits/py-tkinter@py312
=====
Message from postgresql18-client-18.1_1:

--
The PostgreSQL port has a collection of "side orders":

postgresql-docs
  For all of the html documentation

p5-Pg
  A perl5 API for client access to PostgreSQL databases.

postgresql-tcltk
  If you want tcl/tk client support.

postgresql-jdbc
  For Java JDBC support.

postgresql-odbc
  For client access from unix applications using ODBC as access
  method. Not needed to access unix PostgreSQL servers from Win32
  using ODBC. See below.

ruby-postgres, py-psycopg
  For client access to PostgreSQL databases using the ruby & python
  languages.

postgresql-plperl, postgresql-pltcl & postgresql-plruby
  For using perl5, tcl & ruby as procedural languages.

postgresql-contrib
  Lots of contributed utilities, postgresql functions and
  datatypes. There you find pg_standby, pgcrypto and many other cool
  things.

etc...
=====
Message from nagios-plugins-2.4.4,1:

--
===>   NOTICE:

The nagios-plugins port currently does not have a maintainer. As a result, it is
more likely to have unresolved issues, not be up-to-date, or even be removed in
the future. To volunteer to maintain this port, please create an issue at:

https://bugs.freebsd.org/bugzilla

More information about port maintainership is available at:

https://docs.freebsd.org/en/articles/contributing/#ports-contributing
[17:55 serpico dvl ~] % sudo pkg autoremove
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages:

Installed packages to be REMOVED:
	python311: 3.11.14

Number of packages to be removed: 1

The operation will free 201 MiB.

Proceed with deinstalling packages? [y/N]: y
[serpico.int.unixathome.org] [1/1] Deinstalling python311-3.11.14...
[serpico.int.unixathome.org] [1/1] Deleting files for python311-3.11.14: 100%

dns2

This is one of my four DNS hosts in the basement, one on each host. One host has two; the extra one being the dns-hidden-master for the public facing DNS servers out on the Internet.

[17:58 dns1 root /] # cd
[17:58 dns1 root ~] # pkg upgrade
Updating FreeBSD-kmods repository catalogue...
[dns1.int.unixathome.org] Fetching data: 100%   36 KiB  36.8 k/s    00:01    
Processing entries: 100%
FreeBSD-kmods repository update completed. 245 packages processed.
Updating local repository catalogue...
[dns1.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[dns1.int.unixathome.org] Fetching data: 100%  416 KiB 425.6 k/s    00:01    
Processing entries: 100%
local repository update completed. 1311 packages processed.
All repositories are up to date.
Checking for upgrades (66 candidates): 100%
Processing candidates (66 candidates): 100%
The following 6 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	postgresql18-client: 18.1_1 [local]
	python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
	python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
	nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
	python3-3_4 [local] (direct dependency changed: python312)
	rsync-3.4.1_5 [local] (options changed)

Number of packages to be installed: 2
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 3

The process will require 238 MiB more space.
41 MiB to be downloaded.

Proceed with this action? [y/N]: y
[dns1.int.unixathome.org] [1/6] Fetching rsync-3.4.1_5: 100%  392 KiB 401.0 k/s    00:01    
[dns1.int.unixathome.org] [2/6] Fetching python312-3.12.12_3: 100%   37 MiB  38.3 M/s    00:01    
[dns1.int.unixathome.org] [3/6] Fetching python3-3_4: 100%    1 KiB   1.3 k/s    00:01    
[dns1.int.unixathome.org] [4/6] Fetching nagios-plugins-2.4.4,1: 100%  456 KiB 467.1 k/s    00:01    
[dns1.int.unixathome.org] [5/6] Fetching python-3.12_3,2: 100%    1 KiB   1.1 k/s    00:01    
[dns1.int.unixathome.org] [6/6] Fetching postgresql18-client-18.1_1: 100%    4 MiB   3.9 M/s    00:01    
Checking integrity... done (2 conflicting)
  - postgresql18-client-18.1_1 [local] conflicts with postgresql16-client-16.11_2 [installed] on /usr/local/bin/clusterdb
  - postgresql18-client-18.1_1 [local] conflicts with postgresql16-client-16.11_2 [local] on /usr/local/bin/clusterdb
Checking integrity... done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 8 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	postgresql18-client: 18.1_1 [local]
	python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
	python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
	nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
	pkg-2.5.1 [local]
	python3-3_4 [local] (direct dependency changed: python312)
	rsync-3.4.1_5 [local] (options changed)

Installed packages to be REMOVED:
	postgresql16-client: 16.11_2

Number of packages to be removed: 1
Number of packages to be installed: 2
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 4

The process will require 222 MiB more space.

Proceed with this action? [y/N]: y
Checking integrity... done (0 conflicting)
[dns1.int.unixathome.org] [1/9] Reinstalling pkg-2.5.1...
[dns1.int.unixathome.org] [1/9] Extracting pkg-2.5.1: 100%
[dns1.int.unixathome.org] [2/9] Installing python312-3.12.12_3...
[dns1.int.unixathome.org] [2/9] Extracting python312-3.12.12_3: 100%
[dns1.int.unixathome.org] [3/9] Reinstalling python3-3_4...
[dns1.int.unixathome.org] [3/9] Extracting python3-3_4: 100%
[dns1.int.unixathome.org] [4/9] Upgrading python from 3.11_3,2 to 3.12_3,2...
[dns1.int.unixathome.org] [4/9] Extracting python-3.12_3,2: 100%
[dns1.int.unixathome.org] [5/9] Reinstalling rsync-3.4.1_5...
[dns1.int.unixathome.org] [5/9] Extracting rsync-3.4.1_5: 100%
[dns1.int.unixathome.org] [6/9] Deinstalling nagios-plugins-2.4.4,1...
[dns1.int.unixathome.org] [6/9] Deleting files for nagios-plugins-2.4.4,1: 100%
[dns1.int.unixathome.org] [7/9] Deinstalling postgresql16-client-16.11_2...
[dns1.int.unixathome.org] [7/9] Deleting files for postgresql16-client-16.11_2: 100%
[dns1.int.unixathome.org] [8/9] Installing postgresql18-client-18.1_1...
[dns1.int.unixathome.org] [8/9] Extracting postgresql18-client-18.1_1: 100%
[dns1.int.unixathome.org] [9/9] Installing nagios-plugins-2.4.4,1...
[dns1.int.unixathome.org] [9/9] Extracting nagios-plugins-2.4.4,1: 100%
=====
Message from python312-3.12.12_3:

--
Note that some standard Python modules are provided as separate ports
as they require additional dependencies. They are available as:

py312-gdbm       databases/py-gdbm@py312
py312-sqlite3    databases/py-sqlite3@py312
py312-tkinter    x11-toolkits/py-tkinter@py312
=====
Message from postgresql18-client-18.1_1:

--
The PostgreSQL port has a collection of "side orders":

postgresql-docs
  For all of the html documentation

p5-Pg
  A perl5 API for client access to PostgreSQL databases.

postgresql-tcltk
  If you want tcl/tk client support.

postgresql-jdbc
  For Java JDBC support.

postgresql-odbc
  For client access from unix applications using ODBC as access
  method. Not needed to access unix PostgreSQL servers from Win32
  using ODBC. See below.

ruby-postgres, py-psycopg
  For client access to PostgreSQL databases using the ruby & python
  languages.

postgresql-plperl, postgresql-pltcl & postgresql-plruby
  For using perl5, tcl & ruby as procedural languages.

postgresql-contrib
  Lots of contributed utilities, postgresql functions and
  datatypes. There you find pg_standby, pgcrypto and many other cool
  things.

etc...
=====
Message from nagios-plugins-2.4.4,1:

--
===>   NOTICE:

The nagios-plugins port currently does not have a maintainer. As a result, it is
more likely to have unresolved issues, not be up-to-date, or even be removed in
the future. To volunteer to maintain this port, please create an issue at:

https://bugs.freebsd.org/bugzilla

More information about port maintainership is available at:

https://docs.freebsd.org/en/articles/contributing/#ports-contributing
[18:00 dns1 root ~] # pkg autoremove
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages:

Installed packages to be REMOVED:
	python311: 3.11.14

Number of packages to be removed: 1

The operation will free 201 MiB.

Proceed with deinstalling packages? [y/N]: y
[dns1.int.unixathome.org] [1/1] Deinstalling python311-3.11.14...
[dns1.int.unixathome.org] [1/1] Deleting files for python311-3.11.14: 100%

dvl-nginx01

This is an offline copy of FreshPorts, used for development.

[18:02 dvl-nginx01 root ~] # pkg upgrade
Updating FreeBSD-kmods repository catalogue...
[dvl-nginx01.int.unixathome.org] Fetching data: 100%   36 KiB  36.8 k/s    00:01    
Processing entries: 100%
FreeBSD-kmods repository update completed. 245 packages processed.
Updating local repository catalogue...
[dvl-nginx01.int.unixathome.org] Fetching meta.conf: 100%    179 B   0.2 k/s    00:01    
[dvl-nginx01.int.unixathome.org] Fetching data: 100%  416 KiB 425.6 k/s    00:01    
Processing entries: 100%
local repository update completed. 1311 packages processed.
All repositories are up to date.
Checking for upgrades (101 candidates): 100%
Processing candidates (101 candidates): 100%
The following 14 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	postgresql18-client: 18.1_1 [local]
	py312-backports: 1 [local]
	py312-configparser: 3.5.3_2,1 [local]
	py312-freshports-fp-listen: 2.0.2 [local]
	py312-psycopg2: 2.9.11 [local]
	python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
	python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
	freshports-www-dependencies-2.2.2 [local] (direct dependency changed: python312)
	git-2.52.0 [local] (direct dependency changed: python312)
	nagios-check_postgres-2.26.0 [local] (direct dependency changed: postgresql18-client)
	nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
	php83-pgsql-8.3.29 [local] (direct dependency changed: postgresql18-client)
	python3-3_4 [local] (direct dependency changed: python312)
	rsync-3.4.1_5 [local] (direct dependency changed: python312)

Number of packages to be installed: 6
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 7

The process will require 238 MiB more space.
50 MiB to be downloaded.

Proceed with this action? [y/N]: y
[dvl-nginx01.int.unixathome.org] [ 1/14] Fetching php83-pgsql-8.3.29: 100%   50 KiB  51.7 k/s    00:01    
[dvl-nginx01.int.unixathome.org] [ 2/14] Fetching python312-3.12.12_3: 100%   37 MiB  38.3 M/s    00:01    
[dvl-nginx01.int.unixathome.org] [ 3/14] Fetching freshports-www-dependencies-2.2.2: 100%    3 KiB   3.2 k/s    00:01    
[dvl-nginx01.int.unixathome.org] [ 4/14] Fetching python3-3_4: 100%    1 KiB   1.3 k/s    00:01    
[dvl-nginx01.int.unixathome.org] [ 5/14] Fetching nagios-plugins-2.4.4,1: 100%  456 KiB 467.1 k/s    00:01    
[dvl-nginx01.int.unixathome.org] [ 6/14] Fetching git-2.52.0: 100%    8 MiB   8.9 M/s    00:01    
[dvl-nginx01.int.unixathome.org] [ 7/14] Fetching py312-backports-1: 100%    1 KiB   1.1 k/s    00:01    
[dvl-nginx01.int.unixathome.org] [ 8/14] Fetching python-3.12_3,2: 100%    1 KiB   1.1 k/s    00:01    
[dvl-nginx01.int.unixathome.org] [ 9/14] Fetching postgresql18-client-18.1_1: 100%    4 MiB   3.9 M/s    00:01    
[dvl-nginx01.int.unixathome.org] [10/14] Fetching nagios-check_postgres-2.26.0: 100%  140 KiB 143.1 k/s    00:01    
[dvl-nginx01.int.unixathome.org] [11/14] Fetching rsync-3.4.1_5: 100%  392 KiB 401.0 k/s    00:01    
[dvl-nginx01.int.unixathome.org] [12/14] Fetching py312-psycopg2-2.9.11: 100%  160 KiB 164.3 k/s    00:01    
[dvl-nginx01.int.unixathome.org] [13/14] Fetching py312-configparser-3.5.3_2,1: 100%   40 KiB  41.0 k/s    00:01    
[dvl-nginx01.int.unixathome.org] [14/14] Fetching py312-freshports-fp-listen-2.0.2: 100%   12 KiB  12.3 k/s    00:01    
Checking integrity... done (2 conflicting)
  - postgresql18-client-18.1_1 [local] conflicts with postgresql16-client-16.11_2 [installed] on /usr/local/bin/clusterdb
  - py312-freshports-fp-listen-2.0.2 [local] conflicts with py311-freshports-fp-listen-2.0.2 [installed] on /usr/local/etc/freshports/fp-listen.ini.sample
Checking integrity... done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 16 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	postgresql18-client: 18.1_1 [local]
	py312-backports: 1 [local]
	py312-configparser: 3.5.3_2,1 [local]
	py312-freshports-fp-listen: 2.0.2 [local]
	py312-psycopg2: 2.9.11 [local]
	python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
	python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
	freshports-www-dependencies-2.2.2 [local] (direct dependency changed: python312)
	git-2.52.0 [local] (direct dependency changed: python312)
	nagios-check_postgres-2.26.0 [local] (direct dependency changed: postgresql18-client)
	nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
	php83-pgsql-8.3.29 [local] (direct dependency changed: postgresql18-client)
	postgresql16-client-16.11_2 [local]
	python3-3_4 [local] (direct dependency changed: python312)
	rsync-3.4.1_5 [local] (direct dependency changed: python312)

Installed packages to be REMOVED:
	py311-freshports-fp-listen: 2.0.2

Number of packages to be removed: 1
Number of packages to be installed: 6
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 8

The process will require 238 MiB more space.
3 MiB to be downloaded.

Proceed with this action? [y/N]: y
[dvl-nginx01.int.unixathome.org] [ 1/1] Fetching postgresql16-client-16.11_2: 100%    3 MiB   3.5 M/s    00:01    
Checking integrity... done (1 conflicting)
  - postgresql16-client-16.11_2 [local] conflicts with postgresql18-client-18.1_1 [local] on /usr/local/bin/clusterdb
Checking integrity... done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 17 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
	postgresql18-client: 18.1_1 [local]
	py312-backports: 1 [local]
	py312-configparser: 3.5.3_2,1 [local]
	py312-freshports-fp-listen: 2.0.2 [local]
	py312-psycopg2: 2.9.11 [local]
	python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
	python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
	freshports-www-dependencies-2.2.2 [local] (direct dependency changed: python312)
	git-2.52.0 [local] (direct dependency changed: python312)
	nagios-check_postgres-2.26.0 [local] (direct dependency changed: postgresql18-client)
	nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
	php83-pgsql-8.3.29 [local] (direct dependency changed: postgresql18-client)
	python3-3_4 [local] (direct dependency changed: python312)
	rsync-3.4.1_5 [local] (direct dependency changed: python312)

Installed packages to be REMOVED:
	postgresql16-client: 16.11_2
	py311-freshports-fp-listen: 2.0.2
	py311-psycopg2: 2.9.11

Number of packages to be removed: 3
Number of packages to be installed: 6
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 7

The process will require 222 MiB more space.

Proceed with this action? [y/N]: y
Checking integrity... done (0 conflicting)
[dvl-nginx01.int.unixathome.org] [ 1/21] Installing python312-3.12.12_3...
[dvl-nginx01.int.unixathome.org] [ 1/21] Extracting python312-3.12.12_3: 100%
[dvl-nginx01.int.unixathome.org] [ 2/21] Installing py312-backports-1...
[dvl-nginx01.int.unixathome.org] [ 2/21] Extracting py312-backports-1: 100%
[dvl-nginx01.int.unixathome.org] [ 3/21] Installing py312-configparser-3.5.3_2,1...
[dvl-nginx01.int.unixathome.org] [ 3/21] Extracting py312-configparser-3.5.3_2,1: 100%
[dvl-nginx01.int.unixathome.org] [ 4/21] Reinstalling python3-3_4...
[dvl-nginx01.int.unixathome.org] [ 4/21] Extracting python3-3_4: 100%
[dvl-nginx01.int.unixathome.org] [ 5/21] Upgrading python from 3.11_3,2 to 3.12_3,2...
[dvl-nginx01.int.unixathome.org] [ 5/21] Extracting python-3.12_3,2: 100%
[dvl-nginx01.int.unixathome.org] [ 6/21] Reinstalling rsync-3.4.1_5...
[dvl-nginx01.int.unixathome.org] [ 6/21] Extracting rsync-3.4.1_5: 100%
[dvl-nginx01.int.unixathome.org] [ 7/21] Deinstalling freshports-www-dependencies-2.2.2...
[dvl-nginx01.int.unixathome.org] [ 7/21] Deleting files for freshports-www-dependencies-2.2.2: 100%
==> You should manually remove the "freshports" user
==> You should manually remove the "freshports" group
[dvl-nginx01.int.unixathome.org] [ 8/21] Reinstalling git-2.52.0...
===> Creating groups
Using existing group 'git_daemon'
===> Creating users
Using existing user 'git_daemon'
[dvl-nginx01.int.unixathome.org] [ 8/21] Extracting git-2.52.0: 100%
[dvl-nginx01.int.unixathome.org] [ 9/21] Deinstalling py311-freshports-fp-listen-2.0.2...
[dvl-nginx01.int.unixathome.org] [ 9/21] Deleting files for py311-freshports-fp-listen-2.0.2: 100%
==> You should manually remove the "freshports" user
==> You should manually remove the "freshports" group
[dvl-nginx01.int.unixathome.org] [10/21] Deinstalling py311-psycopg2-2.9.11...
[dvl-nginx01.int.unixathome.org] [10/21] Deleting files for py311-psycopg2-2.9.11: 100%
[dvl-nginx01.int.unixathome.org] [11/21] Deinstalling nagios-check_postgres-2.26.0...
[dvl-nginx01.int.unixathome.org] [11/21] Deleting files for nagios-check_postgres-2.26.0: 100%
[dvl-nginx01.int.unixathome.org] [12/21] Deinstalling nagios-plugins-2.4.4,1...
[dvl-nginx01.int.unixathome.org] [12/21] Deleting files for nagios-plugins-2.4.4,1: 100%
[dvl-nginx01.int.unixathome.org] [13/21] Deinstalling php83-pgsql-8.3.29...
[dvl-nginx01.int.unixathome.org] [13/21] Deleting files for php83-pgsql-8.3.29: 100%
[dvl-nginx01.int.unixathome.org] [14/21] Deinstalling postgresql16-client-16.11_2...
[dvl-nginx01.int.unixathome.org] [14/21] Deleting files for postgresql16-client-16.11_2: 100%
[dvl-nginx01.int.unixathome.org] [15/21] Installing postgresql18-client-18.1_1...
[dvl-nginx01.int.unixathome.org] [15/21] Extracting postgresql18-client-18.1_1: 100%
[dvl-nginx01.int.unixathome.org] [16/21] Installing nagios-check_postgres-2.26.0...
[dvl-nginx01.int.unixathome.org] [16/21] Extracting nagios-check_postgres-2.26.0: 100%
[dvl-nginx01.int.unixathome.org] [17/21] Installing nagios-plugins-2.4.4,1...
[dvl-nginx01.int.unixathome.org] [17/21] Extracting nagios-plugins-2.4.4,1: 100%
[dvl-nginx01.int.unixathome.org] [18/21] Installing php83-pgsql-8.3.29...
[dvl-nginx01.int.unixathome.org] [18/21] Extracting php83-pgsql-8.3.29: 100%
[dvl-nginx01.int.unixathome.org] [19/21] Installing py312-psycopg2-2.9.11...
[dvl-nginx01.int.unixathome.org] [19/21] Extracting py312-psycopg2-2.9.11: 100%
[dvl-nginx01.int.unixathome.org] [20/21] Installing py312-freshports-fp-listen-2.0.2...
===> Creating groups
Using existing group 'freshports'
===> Creating users
Using existing user 'freshports'
===> Creating homedir(s)
[dvl-nginx01.int.unixathome.org] [20/21] Extracting py312-freshports-fp-listen-2.0.2: 100%
[dvl-nginx01.int.unixathome.org] [21/21] Installing freshports-www-dependencies-2.2.2...
===> Creating groups
Using existing group 'freshports'
Using existing group 'www'
===> Creating users
Using existing user 'freshports'
===> Creating homedir(s)
Using existing user 'www'
[dvl-nginx01.int.unixathome.org] [21/21] Extracting freshports-www-dependencies-2.2.2: 100%
=====
Message from python312-3.12.12_3:

--
Note that some standard Python modules are provided as separate ports
as they require additional dependencies. They are available as:

py312-gdbm       databases/py-gdbm@py312
py312-sqlite3    databases/py-sqlite3@py312
py312-tkinter    x11-toolkits/py-tkinter@py312
=====
Message from postgresql18-client-18.1_1:

--
The PostgreSQL port has a collection of "side orders":

postgresql-docs
  For all of the html documentation

p5-Pg
  A perl5 API for client access to PostgreSQL databases.

postgresql-tcltk
  If you want tcl/tk client support.

postgresql-jdbc
  For Java JDBC support.

postgresql-odbc
  For client access from unix applications using ODBC as access
  method. Not needed to access unix PostgreSQL servers from Win32
  using ODBC. See below.

ruby-postgres, py-psycopg
  For client access to PostgreSQL databases using the ruby & python
  languages.

postgresql-plperl, postgresql-pltcl & postgresql-plruby
  For using perl5, tcl & ruby as procedural languages.

postgresql-contrib
  Lots of contributed utilities, postgresql functions and
  datatypes. There you find pg_standby, pgcrypto and many other cool
  things.

etc...
=====
Message from nagios-plugins-2.4.4,1:

--
===>   NOTICE:

The nagios-plugins port currently does not have a maintainer. As a result, it is
more likely to have unresolved issues, not be up-to-date, or even be removed in
the future. To volunteer to maintain this port, please create an issue at:

https://bugs.freebsd.org/bugzilla

More information about port maintainership is available at:

https://docs.freebsd.org/en/articles/contributing/#ports-contributing

dvl-ingress01

This host processes FreeBSD commits for dvl-nginx01 (the previous entry above).

[18:06 dvl-ingress01 root ~] # pkg upgrade
Updating FreeBSD-kmods repository catalogue…
FreeBSD-kmods repository is up to date.
Updating local repository catalogue…
local repository is up to date.
All repositories are up to date.
Checking for upgrades (171 candidates): 100%
Processing candidates (171 candidates): 100%
The following 20 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
postgresql18-client: 18.1_1 [local]
py312-cffi: 2.0.0 [local]
py312-freshports-git-proc-commit: 0.2.2 [local]
py312-lxml: 6.0.1 [local]
py312-packages-import: 2.8.0 [local]
py312-psycopg2: 2.9.11 [local]
py312-pycparser: 2.23 [local]
py312-pygit2: 1.18.2 [local]
py312-pyyaml: 6.0.3 [local]
python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
FreshPorts-Scripts-Dependencies-1.0.7 [local] (direct dependency changed: python312)
freshports-ingress-2.0.4_14 [local] (direct dependency changed: python312)
freshports-ingress-metaport-0.1.1 [local] (direct dependency changed: python312)
nagios-check_postgres-2.26.0 [local] (direct dependency changed: postgresql18-client)
nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
p5-DBD-Pg-3.18.0 [local] (direct dependency changed: postgresql18-client)
p5-FreshPorts-Modules-Dependencies-1.1.20 [local] (direct dependency changed: python312)
python3-3_4 [local] (direct dependency changed: python312)
rsync-3.4.1_5 [local] (direct dependency changed: python312)

Number of packages to be installed: 10
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 9

The process will require 257 MiB more space.
45 MiB to be downloaded.

Proceed with this action? [y/N]: y
[dvl-ingress01.int.unixathome.org] [ 1/20] Fetching FreshPorts-Scripts-Dependencies-1.0.7: 100% 1 KiB 1.5 k/s 00:01
[dvl-ingress01.int.unixathome.org] [ 2/20] Fetching python312-3.12.12_3: 100% 37 MiB 38.3 M/s 00:01
[dvl-ingress01.int.unixathome.org] [ 3/20] Fetching python3-3_4: 100% 1 KiB 1.3 k/s 00:01
[dvl-ingress01.int.unixathome.org] [ 4/20] Fetching p5-FreshPorts-Modules-Dependencies-1.1.20: 100% 955 B 1.0 k/s 00:01
[dvl-ingress01.int.unixathome.org] [ 5/20] Fetching nagios-plugins-2.4.4,1: 100% 456 KiB 467.1 k/s 00:01
[dvl-ingress01.int.unixathome.org] [ 6/20] Fetching py312-pycparser-2.23: 100% 225 KiB 230.4 k/s 00:01
[dvl-ingress01.int.unixathome.org] [ 7/20] Fetching freshports-ingress-metaport-0.1.1: 100% 617 B 0.6 k/s 00:01
[dvl-ingress01.int.unixathome.org] [ 8/20] Fetching py312-pygit2-1.18.2: 100% 283 KiB 289.7 k/s 00:01
[dvl-ingress01.int.unixathome.org] [ 9/20] Fetching py312-cffi-2.0.0: 100% 276 KiB 282.6 k/s 00:01
[dvl-ingress01.int.unixathome.org] [10/20] Fetching python-3.12_3,2: 100% 1 KiB 1.1 k/s 00:01
[dvl-ingress01.int.unixathome.org] [11/20] Fetching postgresql18-client-18.1_1: 100% 4 MiB 3.9 M/s 00:01
[dvl-ingress01.int.unixathome.org] [12/20] Fetching nagios-check_postgres-2.26.0: 100% 140 KiB 143.1 k/s 00:01
[dvl-ingress01.int.unixathome.org] [13/20] Fetching rsync-3.4.1_5: 100% 392 KiB 401.0 k/s 00:01
[dvl-ingress01.int.unixathome.org] [14/20] Fetching py312-packages-import-2.8.0: 100% 7 KiB 7.1 k/s 00:01
[dvl-ingress01.int.unixathome.org] [15/20] Fetching py312-psycopg2-2.9.11: 100% 160 KiB 164.3 k/s 00:01
[dvl-ingress01.int.unixathome.org] [16/20] Fetching p5-DBD-Pg-3.18.0: 100% 180 KiB 184.4 k/s 00:01
[dvl-ingress01.int.unixathome.org] [17/20] Fetching py312-freshports-git-proc-commit-0.2.2: 100% 8 KiB 7.8 k/s 00:01
[dvl-ingress01.int.unixathome.org] [18/20] Fetching py312-lxml-6.0.1: 100% 2 MiB 2.1 M/s 00:01
[dvl-ingress01.int.unixathome.org] [19/20] Fetching py312-pyyaml-6.0.3: 100% 181 KiB 185.1 k/s 00:01
[dvl-ingress01.int.unixathome.org] [20/20] Fetching freshports-ingress-2.0.4_14: 100% 3 KiB 3.5 k/s 00:01
Checking integrity… done (3 conflicting)
– postgresql18-client-18.1_1 [local] conflicts with postgresql16-client-16.11_2 [installed] on /usr/local/bin/clusterdb
– py312-packages-import-2.8.0 [local] conflicts with py311-packages-import-2.8.0 [installed] on /usr/local/etc/freshports/config.ini.sample
– py312-freshports-git-proc-commit-0.2.2 [local] conflicts with py311-freshports-git-proc-commit-0.2.2 [installed] on /usr/local/libexec/freshports/check_git.sh
Checking integrity… done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 23 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
postgresql18-client: 18.1_1 [local]
py312-cffi: 2.0.0 [local]
py312-freshports-git-proc-commit: 0.2.2 [local]
py312-lxml: 6.0.1 [local]
py312-packages-import: 2.8.0 [local]
py312-psycopg2: 2.9.11 [local]
py312-pycparser: 2.23 [local]
py312-pygit2: 1.18.2 [local]
py312-pyyaml: 6.0.3 [local]
python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
FreshPorts-Scripts-Dependencies-1.0.7 [local] (direct dependency changed: python312)
freshports-ingress-2.0.4_14 [local] (direct dependency changed: python312)
freshports-ingress-metaport-0.1.1 [local] (direct dependency changed: python312)
nagios-check_postgres-2.26.0 [local] (direct dependency changed: postgresql18-client)
nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
p5-DBD-Pg-3.18.0 [local] (direct dependency changed: postgresql18-client)
p5-FreshPorts-Modules-Dependencies-1.1.20 [local] (direct dependency changed: python312)
postgresql16-client-16.11_2 [local]
python3-3_4 [local] (direct dependency changed: python312)
rsync-3.4.1_5 [local] (direct dependency changed: python312)

Installed packages to be REMOVED:
py311-freshports-git-proc-commit: 0.2.2
py311-packages-import: 2.8.0

Number of packages to be removed: 2
Number of packages to be installed: 10
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 10

The process will require 257 MiB more space.
3 MiB to be downloaded.

Proceed with this action? [y/N]: y
[dvl-ingress01.int.unixathome.org] [ 1/1] Fetching postgresql16-client-16.11_2: 100% 3 MiB 3.5 M/s 00:01
Checking integrity… done (1 conflicting)
– postgresql16-client-16.11_2 [local] conflicts with postgresql18-client-18.1_1 [local] on /usr/local/bin/clusterdb
Checking integrity… done (0 conflicting)
Conflicts with the existing packages have been found.
One more solver iteration is needed to resolve them.
The following 24 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
postgresql18-client: 18.1_1 [local]
py312-cffi: 2.0.0 [local]
py312-freshports-git-proc-commit: 0.2.2 [local]
py312-lxml: 6.0.1 [local]
py312-packages-import: 2.8.0 [local]
py312-psycopg2: 2.9.11 [local]
py312-pycparser: 2.23 [local]
py312-pygit2: 1.18.2 [local]
py312-pyyaml: 6.0.3 [local]
python312: 3.12.12_3 [local]

Installed packages to be UPGRADED:
python: 3.11_3,2 -> 3.12_3,2 [local]

Installed packages to be REINSTALLED:
FreshPorts-Scripts-Dependencies-1.0.7 [local] (direct dependency changed: python312)
freshports-ingress-2.0.4_14 [local] (direct dependency changed: python312)
freshports-ingress-metaport-0.1.1 [local] (direct dependency changed: python312)
nagios-check_postgres-2.26.0 [local] (direct dependency changed: postgresql18-client)
nagios-plugins-2.4.4,1 [local] (direct dependency changed: postgresql18-client)
p5-DBD-Pg-3.18.0 [local] (direct dependency changed: postgresql18-client)
p5-FreshPorts-Modules-Dependencies-1.1.20 [local] (direct dependency changed: python312)
python3-3_4 [local] (direct dependency changed: python312)
rsync-3.4.1_5 [local] (direct dependency changed: python312)

Installed packages to be REMOVED:
postgresql16-client: 16.11_2
py311-freshports-git-proc-commit: 0.2.2
py311-packages-import: 2.8.0
py311-psycopg2: 2.9.11

Number of packages to be removed: 4
Number of packages to be installed: 10
Number of packages to be upgraded: 1
Number of packages to be reinstalled: 9

The process will require 240 MiB more space.

Proceed with this action? [y/N]: y
Checking integrity… done (0 conflicting)
[dvl-ingress01.int.unixathome.org] [ 1/31] Installing python312-3.12.12_3…
[dvl-ingress01.int.unixathome.org] [ 1/31] Extracting python312-3.12.12_3: 100%
[dvl-ingress01.int.unixathome.org] [ 2/31] Installing py312-lxml-6.0.1…
[dvl-ingress01.int.unixathome.org] [ 2/31] Extracting py312-lxml-6.0.1: 100%
[dvl-ingress01.int.unixathome.org] [ 3/31] Installing py312-pycparser-2.23…
[dvl-ingress01.int.unixathome.org] [ 3/31] Extracting py312-pycparser-2.23: 100%
[dvl-ingress01.int.unixathome.org] [ 4/31] Installing py312-cffi-2.0.0…
[dvl-ingress01.int.unixathome.org] [ 4/31] Extracting py312-cffi-2.0.0: 100%
[dvl-ingress01.int.unixathome.org] [ 5/31] Installing py312-pygit2-1.18.2…
[dvl-ingress01.int.unixathome.org] [ 5/31] Extracting py312-pygit2-1.18.2: 100%
[dvl-ingress01.int.unixathome.org] [ 6/31] Installing py312-pyyaml-6.0.3…
[dvl-ingress01.int.unixathome.org] [ 6/31] Extracting py312-pyyaml-6.0.3: 100%
[dvl-ingress01.int.unixathome.org] [ 7/31] Reinstalling python3-3_4…
[dvl-ingress01.int.unixathome.org] [ 7/31] Extracting python3-3_4: 100%
[dvl-ingress01.int.unixathome.org] [ 8/31] Upgrading python from 3.11_3,2 to 3.12_3,2…
[dvl-ingress01.int.unixathome.org] [ 8/31] Extracting python-3.12_3,2: 100%
[dvl-ingress01.int.unixathome.org] [ 9/31] Reinstalling rsync-3.4.1_5…
[dvl-ingress01.int.unixathome.org] [ 9/31] Extracting rsync-3.4.1_5: 100%
[dvl-ingress01.int.unixathome.org] [10/31] Deinstalling FreshPorts-Scripts-Dependencies-1.0.7…
==> You should manually remove the “freshports” user
==> You should manually remove the “ingress” user
==> You should manually remove the “freshports” group
==> You should manually remove the “ingress” group
[dvl-ingress01.int.unixathome.org] [11/31] Deinstalling freshports-ingress-metaport-0.1.1…
[dvl-ingress01.int.unixathome.org] [12/31] Deinstalling py311-packages-import-2.8.0…
[dvl-ingress01.int.unixathome.org] [12/31] Deleting files for py311-packages-import-2.8.0: 100%
==> You should manually remove the “freshports” user
==> You should manually remove the “freshports” group
[dvl-ingress01.int.unixathome.org] [13/31] Deinstalling py311-psycopg2-2.9.11…
[dvl-ingress01.int.unixathome.org] [13/31] Deleting files for py311-psycopg2-2.9.11: 100%
[dvl-ingress01.int.unixathome.org] [14/31] Deinstalling freshports-ingress-2.0.4_14…
[dvl-ingress01.int.unixathome.org] [14/31] Deleting files for freshports-ingress-2.0.4_14: 100%
==> You should manually remove the “ingress” user
==> You should manually remove the “ingress” group
[dvl-ingress01.int.unixathome.org] [15/31] Deinstalling py311-freshports-git-proc-commit-0.2.2…
[dvl-ingress01.int.unixathome.org] [15/31] Deleting files for py311-freshports-git-proc-commit-0.2.2: 100%
[dvl-ingress01.int.unixathome.org] [16/31] Installing py312-freshports-git-proc-commit-0.2.2…
[dvl-ingress01.int.unixathome.org] [16/31] Extracting py312-freshports-git-proc-commit-0.2.2: 100%
[dvl-ingress01.int.unixathome.org] [17/31] Installing freshports-ingress-2.0.4_14…
===> Creating groups
Using existing group ‘ingress’
===> Creating users
Using existing user ‘ingress’
===> Creating homedir(s)
[dvl-ingress01.int.unixathome.org] [17/31] Extracting freshports-ingress-2.0.4_14: 100%
[dvl-ingress01.int.unixathome.org] [18/31] Deinstalling nagios-check_postgres-2.26.0…
[dvl-ingress01.int.unixathome.org] [18/31] Deleting files for nagios-check_postgres-2.26.0: 100%
[dvl-ingress01.int.unixathome.org] [19/31] Deinstalling nagios-plugins-2.4.4,1…
[dvl-ingress01.int.unixathome.org] [19/31] Deleting files for nagios-plugins-2.4.4,1: 100%
[dvl-ingress01.int.unixathome.org] [20/31] Deinstalling p5-FreshPorts-Modules-Dependencies-1.1.20…
[dvl-ingress01.int.unixathome.org] [21/31] Deinstalling p5-DBD-Pg-3.18.0…
[dvl-ingress01.int.unixathome.org] [21/31] Deleting files for p5-DBD-Pg-3.18.0: 100%
[dvl-ingress01.int.unixathome.org] [22/31] Deinstalling postgresql16-client-16.11_2…
[dvl-ingress01.int.unixathome.org] [22/31] Deleting files for postgresql16-client-16.11_2: 100%
[dvl-ingress01.int.unixathome.org] [23/31] Installing postgresql18-client-18.1_1…
[dvl-ingress01.int.unixathome.org] [23/31] Extracting postgresql18-client-18.1_1: 100%
[dvl-ingress01.int.unixathome.org] [24/31] Installing nagios-check_postgres-2.26.0…
[dvl-ingress01.int.unixathome.org] [24/31] Extracting nagios-check_postgres-2.26.0: 100%
[dvl-ingress01.int.unixathome.org] [25/31] Installing nagios-plugins-2.4.4,1…
[dvl-ingress01.int.unixathome.org] [25/31] Extracting nagios-plugins-2.4.4,1: 100%
[dvl-ingress01.int.unixathome.org] [26/31] Installing p5-DBD-Pg-3.18.0…
[dvl-ingress01.int.unixathome.org] [26/31] Extracting p5-DBD-Pg-3.18.0: 100%
[dvl-ingress01.int.unixathome.org] [27/31] Installing FreshPorts-Scripts-Dependencies-1.0.7…
===> Creating groups
Using existing group ‘freshports’
Using existing group ‘ingress’
===> Creating users
Using existing user ‘freshports’
===> Creating homedir(s)
Using existing user ‘ingress’
===> Creating homedir(s)
[dvl-ingress01.int.unixathome.org] [28/31] Installing p5-FreshPorts-Modules-Dependencies-1.1.20…
[dvl-ingress01.int.unixathome.org] [29/31] Installing py312-psycopg2-2.9.11…
[dvl-ingress01.int.unixathome.org] [29/31] Extracting py312-psycopg2-2.9.11: 100%
[dvl-ingress01.int.unixathome.org] [30/31] Installing py312-packages-import-2.8.0…
===> Creating groups
Using existing group ‘freshports’
===> Creating users
Using existing user ‘freshports’
===> Creating homedir(s)
[dvl-ingress01.int.unixathome.org] [30/31] Extracting py312-packages-import-2.8.0: 100%
[dvl-ingress01.int.unixathome.org] [31/31] Installing freshports-ingress-metaport-0.1.1…
=====
Message from python312-3.12.12_3:


Note that some standard Python modules are provided as separate ports
as they require additional dependencies. They are available as:

py312-gdbm databases/py-gdbm@py312
py312-sqlite3 databases/py-sqlite3@py312
py312-tkinter x11-toolkits/py-tkinter@py312
You may need to manually remove /usr/local/etc/freshports/config.ini if it is no longer needed.
You may need to manually remove /usr/local/etc/syslog.d/ingress-daemon.conf if it is no longer needed.
You may need to manually remove /usr/local/etc/newsyslog.conf.d/ingress.conf if it is no longer needed.
=====
Message from postgresql18-client-18.1_1:


The PostgreSQL port has a collection of “side orders”:

postgresql-docs
For all of the html documentation

p5-Pg
A perl5 API for client access to PostgreSQL databases.

postgresql-tcltk
If you want tcl/tk client support.

postgresql-jdbc
For Java JDBC support.

postgresql-odbc
For client access from unix applications using ODBC as access
method. Not needed to access unix PostgreSQL servers from Win32
using ODBC. See below.

ruby-postgres, py-psycopg
For client access to PostgreSQL databases using the ruby & python
languages.

postgresql-plperl, postgresql-pltcl & postgresql-plruby
For using perl5, tcl & ruby as procedural languages.

postgresql-contrib
Lots of contributed utilities, postgresql functions and
datatypes. There you find pg_standby, pgcrypto and many other cool
things.

etc…
=====
Message from nagios-plugins-2.4.4,1:


===> NOTICE:

The nagios-plugins port currently does not have a maintainer. As a result, it is
more likely to have unresolved issues, not be up-to-date, or even be removed in
the future. To volunteer to maintain this port, please create an issue at:

https://bugs.freebsd.org/bugzilla

More information about port maintainership is available at:

https://docs.freebsd.org/en/articles/contributing/#ports-contributing

I think that's it

I'll let this all run for a bit and see how it goes.

Top

PGP Key Update

Post by Mariusz Zaborski via oshogbo web »

A short notice: my PGP key has expired and a new one has been generated. If you need to share any confidential information with me, you can find the updated public key on keyserver.ubuntu.com, pgp.mit.edu, and on the About Me page of this website.
Top

200 MB RAM FreeBSD Desktop

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

Recently I came across Lunduke post about some mysterious Vendefoul Wolf Linux distribution that uses 217 MB RAM with Devuan as base (no systemd(1) here) and XLibre X11 server along with IceWM window manager.

For the record – the Lunduke post states 200 MB RAM but XLibreDev quotes a post where exactly 217 MB RAM is reported.

Later Lunduke even posted a video about it.



As I use similarly low resource setup with Openbox/Tint2/Dzen2 setup (documented FreeBSD Desktop here) I was wondering … how low can I go with FreeBSD RAM usage.

Lets try …

The Table of Contents is as follows.

  • Install
  • Configuration
    • /boot/loader.conf
    • /etc/rc.conf
    • /etc/sysctl.conf
    • /etc/devfs.rules
    • Installed Packages
    • Login Manager
    • ~/.xinitrc
  • Startup
  • RAM Usage
  • End Session
  • Comparison
  • Summary

Install

I wanted to use most recent FreeBSD so I used 15.0-RELEASE version – including the Tech Preview PKGBASE setup for FreeBSD Base System.

As Xorg X11 implementation is currently intentionally crippled by some Red Hat employees and some people from FreeDesktop.org I decided to use actively developed and maintained XLibre X11 server instead.

Example of such behavior below.

More on that tragic Xorg story where open source spirit died long time ago is available here:

A lot has also been explained in this message:

As the Vendefoul Wolf Linux did not used ZFS I also decided to fight fair and used UFS with Soft Updates Journaling mode that minimizes fsck(8) time to minimum. For the record Netflix also uses FreeBSD with UFS filesystem.

Using UFS would mean loosing great FreeBSD feature called ZFS Boot Environments … but fortunately you can use UFS Boot Environments as replacement on UFS filesystems.

Configuration

After install I created my vermaden user with membership in these groups.

FreeBSD $ id | tr ', ' '\n' 
uid=1000(vermaden)
gid=1000(vermaden)
groups=0(wheel)
5(operator)
44(video)
48(idletime)
69(network)
1000(vermaden)

Later I disabled additional virtual terminals that I would not use anyway in the /etc/ttys file.

/boot/loader.conf

Next used /boot/loader.conf file.

# CONSOLE COMMON
  loader_logo=none
  loader_menu_frame=none
  screen.font="6x12"

# CONSOLE RESOLUTION
  kern.vt.fb.default.mode="1920x1080"
  efi_max_resolution="1920x1080"
  vbe_max_resolution="1920x1080"

# ENABLE SYNAPTICS
  hw.psm.synaptics_support=1

# DISABLE /dev/diskid/* AND /dev/gptid/* ENTRIES FOR DISKS
  kern.geom.label.disk_ident.enable=0
  kern.geom.label.gptid.enable=0

# POWER MANAGEMENT POWER OFF DEVICES WITHOUT ATTACHED DRIVER
  hw.pci.do_power_nodriver=3

# POWER MANAGEMENT FOR EVERY USED AHCI CHANNEL (ahcich 0-3)
  hint.ahcich.0.pm_level=5
  hint.ahcich.1.pm_level=5
  hint.ahcich.2.pm_level=5
  hint.ahcich.3.pm_level=5

# MAX SEND QUEUE SIZE
  net.link.ifqmaxlen=2048

# DISABLE USB PACKET FILTERING
  hw.usb.no_pf=1

# NO USB DEVICE ENUMERATE WAITING AT BOOT AND SHUTDOWN
  hw.usb.no_boot_wait=1
  hw.usb.no_shutdown_wait=1 

# DISABLE hwpstate_intel(4) DRIVER
  hint.hwpstate_intel.0.disabled=1

/etc/rc.conf

Now the main FreeBSD /etc/rc.conf configuration file.

# SILENCE
  rc_startmsgs=NO
  rc_info=NO

# NETWORK
  hostname=minimal
  defaultroute_delay=3
  defaultroute_carrier_delay=3
  ifconfig_vtnet0="inet 10.1.1.71/24 up"
  defaultrouter="10.1.1.1"
  gateway_enable=YES
  harvest_mask=351
  rtsol_flags="-i"
  rtsold_flags="-a -i"

# POWER
  performance_cx_lowest=C1
  economy_cx_lowest=Cmax

# DAEMONS
  update_motd=NO
  local_unbound_enable="NO"
  dbus_enable=YES
  syslogd_flags='-s -s'
  sendmail_enable=NO
  sendmail_submit_enable=YES
  sendmail_outbound_enable=NO
  sendmail_msp_queue_enable=NO

# FS
  fsck_y_enable=YES
  clear_tmp_enable=NO
  clear_tmp_X=YES

# OTHER
  keyrate=fast
  virecover_enable=NO
  devfs_system_ruleset=desktop
  entropy_file=NO
  savecore_enable=NO
  dumpdev=AUTO

/etc/sysctl.conf

Now FreeBSD system settings in the /etc/sysctl.conf file.

# HARVEST MASK FOR random(4)
  kern.random.harvest.mask=33119

# SECURITY
  security.bsd.see_jail_proc=0
  security.bsd.unprivileged_proc_debug=0

# SECURITY/RANDOM PID
  kern.randompid=1

# DISABLE ANNOYING THINGS
  vfs.usermount=1
  kern.coredump=0
  hw.syscons.bell=0
  kern.vt.enable_bell=0

# DO NOT WAIT FOR USB DEVICES ON SUSPEND/SHUTDOWN
  hw.usb.no_suspend_wait=1
  hw.usb.no_shutdown_wait=1

# DESKTOP/INTERACTIVITY
  kern.sched.preempt_thresh=224

# DESKTOP QUANTUM FOR TIMESHARE THREADS IN stathz TICKS
  kern.sched.slice=3

# DESKTOP/IRIDIUM/CHROMIUM
  kern.ipc.shm_allow_removed=1

# ALLOW idprio(8) USE BY REGULAR USER
  security.bsd.unprivileged_idprio=1

# PREVENT SHARED MEMORY FROM BEING SWAPPED TO DISK
  kern.ipc.shm_use_phys=1

# DO NOT SWITCH VIRTUAL CONSOLES BACK AND FORTH ON SUSPEND
  kern.vt.suspendswitch=0

# MAKE FUSEFS DO NOT USE WIRED MEMORY
  vfs.fusefs.data_cache_mode=0

/etc/devfs.rules

The devfs_system_ruleset specified desktop in the /etc/devfs.rules file.

[desktop=10]
add path 'acd*'      mode 0660 group operator
add path 'cd*'       mode 0660 group operator
add path 'da*'       mode 0660 group operator
add path 'pass*'     mode 0660 group operator
add path 'xpt*'      mode 0660 group operator
add path 'fd*'       mode 0660 group operator
add path 'md*'       mode 0660 group operator
add path 'uscanner*' mode 0660 group operator
add path 'ugen*'     mode 0660 group operator
add path 'usb/*'     mode 0660 group operator
add path 'video*'    mode 0660 group operator
add path 'cuse*'     mode 0660 group operator

Installed Packages

Only a few … with few hundred dependencies 🙂

FreeBSD # pkg install xlibre openbox tint2 dzen2 xterm htop ifstat doas \
                      gnome-icons-faenza adwaita-icon-theme mate-icon-theme

What I really loved is that XLibre X11 packages DOES NOT CONFLICT with Xorg packages. You just install xlibre instead of xorg and everything works … even better then with Xorg 🙂

Login Manager

I did not used login manager such as xdm(1) as its not needed in the setup.

I just start X11 directly with xinit(1) command like that.

FreeBSD % xinit -- -dpi 75 -nolisten tcp

If you would like to add xdm(1) to the mix then it would add additional 12 MB to RAM usage.

FreeBSD # ps aux -o user,rss,command | grep -e xdm -e RSS | cut -c 59-
USER           RSS COMMAND
root          8824 xdm: :0 (xdm)
root          4596 /usr/local/bin/xdm -server :0 local /usr/local/bin/X :0  vt05

~/.xinitrc

Now the details what is being set and started for this minimalistic yet powerful desktop.

# PATH
  export PATH=${PATH}:~/scripts

# SET PROPER locale(1)
  export LC_ALL=en_US.UTF-8
  export   LANG=en_US.UTF-8

# fontconfig
  export FREETYPE_PROPERTIES="cff:no-stem-darkening=0 autofitter:no-stem-darkening=0"

# MODIFY QT FONT DPI
  export QT_FONT_DPI=75

# DISABLE OVERLAY SCROLLBARS
  export GTK_OVERLAY_SCROLLING=0

# XDG
  export DESKTOP_SESSION=openbox
  export XDG_SESSION_DESKTOP=openbox
  export XDG_CURRENT_DESKTOP=openbox
  export XDG_SESSION_CLASS=user
  export XDG_SESSION_TYPE=x11

# DISABLE GVFS FUSE ~/.gvfs MOUNT
  export GVFS_DISABLE_FUSE=1

# QT MUST KNOW WHERE IS GTK2 CONFIG
  export GTK2_RC_FILES="${HOME}/.gtkrc-2.0"

# QT5 qt5ct
  export QT_QPA_PLATFORMTHEME=qt5ct

# GTK/QT ANTIALIASING
  export QT_XFT=1
  export GDK_USE_XFT=1

# FORCE LIBREOFFICE TO USE GTK2 THEME
  export OOO_FORCE_DESKTOP=gnome

# WM
  exec dbus-launch --exit-with-session openbox-session 1> /dev/null 2> /dev/null & WM=${!}

# DAEMONS/TOOLS/TASKBARS/BACKGROUND
  ( sleep 1 && ~/scripts/__openbox_restart_dzen2.sh 1> /dev/null 2> /dev/null ) &
  ( sleep 1 && ~/scripts/__openbox_restart_tint2.sh 1> /dev/null 2> /dev/null ) &
  xbindkeys                                         1> /dev/null 2> /dev/null   &
  setxkbmap -option terminate:ctrl_alt_bksp,caps:none pl                        &
  ( sleep 5 && xmodmap ~/.xmodmaprc )                                           & 

# WAIT FOR openbox(1) WM PID
  wait ${WM}

# LOGOUT WHEN X11 STARTED FROM PLAIN login(1) CONSOLE
  XINIT=$( ps -o pid,comm | awk '/xinit/ {print $1}' )
  SHELL=$( ps -o ppid -p ${XINIT} | grep -v PPID )
  LOGIN=$( ps -o ppid -p ${SHELL} | grep -v PPID )
  kill -9 ${XINIT} ${SHELL} ${LOGIN} 2> /dev/null

# EXIT
  exit 0


For the record … this section at the end makes sure that after X11 will end its process my user will be securely and automatically logged out.

# LOGOUT WHEN X11 STARTED FROM PLAIN login(1) CONSOLE
  XINIT=$( ps -o pid,comm | awk '/xinit/ {print $1}' )
  SHELL=$( ps -o ppid -p ${XINIT} | grep -v PPID )
  LOGIN=$( ps -o ppid -p ${SHELL} | grep -v PPID )
  kill -9 ${XINIT} ${SHELL} ${LOGIN} 2> /dev/null

Startup

This is how the system looks after its booted.

After executing the xinit -- -dpi 75 -nolisten tcp command Openbox window manager awaits our commands with Tint2 and Dzen2 bars on the top.

The kld.sh script converts FreeBSD kernel (and its modules) RAM usage display into MB units and its talked in depth in the Part 6 – Learn Shell Scripting of the Ghost in the Shell series.

RAM Usage

After starting xterm(1) terminal and then htop(1) inside to measure RAM usage the number stops at 230 MB … but as we started these only to measure the usage the real RAM usage of such FreeBSD desktop without any applications is 206 MB RAM.

I subtracted:

– 19 MB for xterm(1) terminal.

– 5 MB for htop(1) process viewer.

Math.

230 - 19 - 5 = 206

As calculated in the terminal.

End Session

After stopping X11 server this is how console looks like (and safely logged out).

I was also positively surprised how cleanly and without any errors Xlibre servers ends its work.

Comparison

You can compare these 200 MB RAM to other desktop environments and window managers in one of my older articles – Desktop Environments Resource Usage Comparison – here.

Summary

As I used GENERIC FreeBSD kernel its possible to use even smaller amount of RAM with kernel recompilation.

UPDATE 1 – Hard 220 MB Limit

The tests I have done above were done on a FreeBSD Bhyve virtual machine with 6 GB RAM. That means plenty of space for buffers and cache – and the FreeBSD motto is that – “Free memory is wasted memory.” – I decided to try with smallest VM I can start in UEFI mode.

That means 220 MB of RAM.

The results I got surprised me more then I expected.

Plain FreeBSD

When VM had 6 GB RAM plain FreeBSD used about 115 MB RAM – but when I limited the physical memory to 220 MB RAM for that virtual machine only 82 MB RAM were used.

Openbox

Here the results are also better.

My complete Openbox/Tint2/Dzen2 desktop uses only 134 MB RAM!

The calculations are: 142 (ram) + 14 (swap) – 18 (xterm) – 4 (htop)

Hope that helps.

EOF
Top

Valuable News – 2026/01/19

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX/BSD/Linux systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

The Usual Suspects section at the end is permanent and have links to other sites with interesting UNIX/BSD/Linux news.

Past releases are available at the dedicated NEWS page.

UNIX

How I Installed and Secured FreeBSD on Hetzner.
https://youtube.com/watch?v=I_yVW1h5jgw

GeoIP Aware Firewalling with PF on FreeBSD.
https://blog.hofstede.it/geoip-aware-firewalling-with-pf-on-freebsd/

FreeBSD Journal – 2025/10-11-12 – FreeBSD 15.0.
https://freebsdfoundation.org/our-work/journal/browser-based-edition/freebsd-15-0/

HMP Scheduling on FreeBSD.
https://lists.freebsd.org/archives/freebsd-hackers/2026-January/005494.html

FreeBSD Git Weekly 2026-01-05 to 2026-01-11.
https://freebsd-git-weekly.tarsnap.net/2026-01-05.html

Xfce is Great.
https://rubenerd.com/xfce-is-great/

I Tried Setting Up FreeBSD VNET Jail – It Did Not Go Well.
https://youtube.com/watch?v=EsYL18CZ_mU

FreeBSD 15.0 VNET Jails.
https://github.com/pkgdemon/pkgdemon.github.io/wiki/FreeBSD-15.0-VNET-Jails

Haiku Activity and Contract Report 2025/12.
https://haiku-os.org/blog/waddlesplash/2026-01-12-haiku_activity_contract_report_december_2025/

Haiku OS Pulls in Updated Drivers Ffrom FreeBSD 15.
https://phoronix.com/news/Haiku-December-2025

2026/01/13 Jail/Zones Production User Call.
https://youtube.com/watch?v=Xg5qAeEAqAk

FreeBSD as Desktop on Beelink EQi12 Mini PC.
https://youtube.com/watch?v=r0aJT9E3G7c

Understanding ZFS Scrubs and Data Integrity.
https://klarasystems.com/articles/understanding-zfs-scrubs-and-data-integrity/

Tang Nano 20K FPGA Synthesis (Verilog and VHDL) on FreeBSD.
https://youtube.com/watch?v=pcFfWmLi7pI

The libvirt 12.0 Released – Bhyve ARM64 Support and Other Improvements for FreeBSD Hypervisor.
https://phoronix.com/news/libvirt-12.0

OpenBSD-current Now Runs as Guest Under Apple Hypervisor.
https://undeadly.org/cgi?action=article;sid=20260115203619

MAXCPUS on OpenBSD-current on AMD64 is Now 255.
https://undeadly.org/cgi?action=article;sid=20260115135856

FreeBSD 15.1-RELEASE Release Process.
https://freebsd.org/releases/15.1R/schedule/

GRSH is Advanced UNIX Shell – Written for FreeBSD – Works Also on macOS.
https://github.com/antoniomalara301289/grsh

FreeBSD on Framework Laptop 16 with AMD Ryzen AI 300 with AMDGPU DRM Driver.
https://mastodon.bsd.cafe/@emaste@mastodon.social/115667720617107444

OPNsense 25.7.11: Big Changes Ahead in 26.1 with DHCP and IPv6.
https://youtube.com/watch?v=Iy6JplKRjH4

The pkpass2png Tool Converts .pkpass Ticket for Wallet Apps into PNG Image.
https://gist.manganiello.tech/fabio/pkpass2png

Forgejo 14.0 is Available.
https://forgejo.org/2026-01-release-v14-0/

FreeBSD 15.1 Aims to Have KDE Desktop Installer Option.
https://phoronix.com/news/FreeBSD-15.1-KDE-Desktop-Option

FreeBSD – Configuring Printer for Wireless Access.
https://youtube.com/watch?v=R-93VIG3BXw

FreeBSD 15 Installation and Demonstration.
https://youtube.com/watch?v=Tcm1r7uf-O8

HP C3700 PA-RISC Workstation (and NetBSD).
https://youtube.com/watch?v=XxB-Ww1nJko

Understanding How to Get FreeBSD from Scratch.
https://youtube.com/watch?v=Uc8Z-XX1TS4

Few Basic Uses of awk(1) Command.
https://youtube.com/watch?v=Wu-SREf3XPI

Tru64 UNIX Operating System.
https://youtube.com/watch?v=VcSiFcDdC94

NEC EWS 4800 Japanese UNIX Workstation.
https://youtube.com/watch?v=AeUyDm2nf4I

200 MB RAM FreeBSD Desktop.
https://vermaden.wordpress.com/2026/01/18/200-mb-ram-freebsd-desktop/

Trying Navidrome on FreeBSD.
https://rubenerd.com/trying-navidrome-on-freebsd/

Lazy Reading for 2026/01/18.
https://dragonflydigest.com/2026/01/18/lazy-reading-for-2026-01-18/

Lazy Reading for 2026/01/11.
https://dragonflydigest.com/2026/01/11/lazy-reading-for-2026-01-11/

ChaosBSD – Driver Proving Ground – Fork of FreeBSD to Accept Broken Drivers.
https://github.com/seuros/ChaosBSD-src

ChaosBSD is FreeBSD Fork for Broken Drivers.
https://phoronix.com/news/ChaosBSD

Self Hosting Email on FreeBSD: Secure Jailed Setup with Postfix and Dovecot.
https://blog.hofstede.it/self-hosting-email-on-freebsd-a-secure-jailed-setup-with-postfix-and-dovecot/

Installing Void Linux on ZFS with Hibernation Support.
https://it-notes.dragas.net/2025/12/22/void-linux-zfs-hibernation-guide/

BSD Now 646: Unix V4.
https://www.bsdnow.tv/646

S3 Storage at Home with Garage – Part 1 – Basic Install.
https://jan.wildeboer.net/2026/01/1-Local-S3-With-Garage/

S3 Storage at Home with Garage – Part 2 – Reverse Proxy.
https://jan.wildeboer.net/2026/01/2-S3-Garage-Behind-Nginx/

Debian SBuild for FreeBSD People.
https://euroquis.nl/freebsd/2026/01/14/debian.html

LACP Mode Removed from trunk(4) Driver.
https://www.undeadly.org/cgi?action=article;sid=20260113070814&utm_source=discoverbsd

Extending OCI Container Networks with Hooks.
https://people.freebsd.org/~dch/posts/2025-06-29-oci-network/

Using Podman Hooks to Attach Nebula Mesh Networking to Containers.
https://people.freebsd.org/~dch/posts/2025-06-27-nebula-container-hooks/

Upgrading Base Package Install from 15.0-RELEASE to 16-CURRENT.
https://people.freebsd.org/~dch/posts/2026-01-18-upgrading-base-packages-to-current/

Linux vs FreeBSD vs Windows Gameplay Performance Comparison (2024).
https://youtube.com/watch?v=lK6eRbz9DkM

FreeBSD – Setup Shared Printer on Raspberry Pi.
https://youtube.com/watch?v=LX71qEko4as

Wine 11.0 Released.
https://gitlab.winehq.org/wine/wine/-/releases/wine-11.0

Hardware

Milk-V Titan $329 8C 64bit RISC-V Mini-ITX Motherboard with PCIe Gen4 x16 Slot.
https://cnx-software.com/2026/01/12/milk-v-titan-a-329-octa-core-64-bit-risc-v-mini-itx-motherboard-with-a-pcie-gen4-x16-slot/

2026 is Year of Self Hosting.
https://fulghum.io/self-hosting

Linux Power User Puts SteamOS to Work.
https://hackaday.com/2026/01/12/a-linux-power-user-puts-steamos-to-work/

Enduring Reign of Rotating Media – Why Tapes and HDDs Still Thrive in SSD Era.
https://pbxscience.com/the-enduring-reign-of-rotating-media-why-tapes-and-hdds-still-thrive-in-the-ssd-era/

Life

OpenSAFELY: Effectiveness of COVID-19 Vaccination in Children and Adolescents.
https://pubmed.ncbi.nlm.nih.gov/40985520/

Researchers Just Found Something That Could Shake AI Industry to Its Core.
https://futurism.com/artificial-intelligence/ai-industry-recall-copyright-books

Other

Just the Browser.
https://justthebrowser.com/

Struggle of Resizing Windows on macOS Tahoe.
https://noheger.at/blog/2026/01/11/the-struggle-of-resizing-windows-on-macos-tahoe/

This Game is Single 13 KiB File and Runs on Windows/Linux and in Browser.
https://iczelia.net/posts/snake-polyglot/

StackOverflow is Almost Dead.
https://blog.pragmaticengineer.com/stack-overflow-is-almost-dead/

Distilled Rust.
https://liw.fi/distilled-rust/

Hash Explained – Interactive Hash Visualizer.
https://hashexplained.com/

Equal Earth Wall Map.
https://equal-earth.com/

LibreWolf 147.0.1 Released.
https://codeberg.org/librewolf/bsys6/releases/tag/147.0.1-3

Anna Archive.
https://annas-archive.li/

Usual Suspects

BSD Weekly.
https://bsdweekly.com/

DiscoverBSD.
https://discoverbsd.com/

BSDSec.
https://bsdsec.net/

DragonFly BSD Digest.
https://dragonflydigest.com/

FreeBSD Patch Level Table.
https://bokut.in/freebsd-patch-level-table/

FreeBSD End of Life Date.
https://endoflife.date/freebsd

Phoronix BSD News Archives.
https://phoronix.com/linux/BSD

OpenBSD Journal.
https://undeadly.org/

Call for Testing.
https://callfortesting.org/

Call for Testing – Production Users Call.
https://youtube.com/@callfortesting/videos

BSD Now Weekly Podcast.
https://www.bsdnow.tv/

Nixers Newsletter.
https://newsletter.nixers.net/entries.php

BSD Cafe Journal.
https://journal.bsd.cafe/

DragonFly BSD Digest – Lazy Reading – In Other BSDs.
https://dragonflydigest.com

BSDTV.
https://bsky.app/profile/bsdtv.bsky.social

FreeBSD Git Weekly.
https://freebsd-git-weekly.tarsnap.net/

FreeBSD Meetings.
https://youtube.com/@freebsdmeetings

BSDJedi.
https://youtube.com/@BSDJedi/videos

RoboNuggie.
https://youtube.com/@RoboNuggie/videos

GaryHTech.
https://youtube.com/@GaryHTech/videos

Sheridan Computers.
https://youtube.com/@sheridans/videos

82MHz.
https://82mhz.net/

EOF
Top

bash: line 1: /usr/local/sbin/rrsync: No such file or directory

Post by Dan Langille via Dan Langille's Other Diary »

Today I got this message in the logs:

bash: line 1: /usr/local/sbin/rrsync: No such file or directory
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(232) [Receiver=3.4.1]

The rest of the message told me it was a cronjob run by the rsyncer user on my x8dtu host.

Looking at that cronjob I found:

[rsyncer@x8dtu ~]$ crontab -l
# use /bin/sh to run commands, overriding the default set by cron
SHELL=/bin/sh
# mail any output to `dan', no matter whose crontab this is
MAILTO=dan@langille.org

# take a local copy of the bacula stuff

26     *        *       *       *       /usr/bin/lockf -t 0 /tmp/.rsync.bacula.config.lock   ${HOME}/bin/rsync-bacula-config.files.sh >> /var/log/rsync-bacula-config.files.log
22     2/3      *       *       *       /usr/bin/lockf -t 0 /tmp/.rsync.bacula.database.lock ${HOME}/bin/rsync-bacula-database.sh     >> /var/log/rsync-bacula-database.log

2      2       *       *       *       ~/bin/backup.sh > ${HOME}/logs/backup.log

It was the ${HOME}/bin/rsync-bacula-config.files.sh script which generated the message.

[rsyncer@x8dtu ~]$ cat ${HOME}/bin/rsync-bacula-config.files.sh
#!/bin/sh
/usr/local/bin/rsync -e "ssh -i ${HOME}/.ssh/id_ed25519" --dirs -avx --stats --progress \
 bacula.int.unixathome.org:/etc/bacula/*.conf     \
 bacula.int.unixathome.org:/bacula/bsr            \
 ${HOME}/backups/Bacula/

A bit of playing around led me to look at the bacula.int.unixathome.org host.

I knew to check the authorized keys file, because I know how this setup works.

[rsyncer@bacula ~]$ cat ~/.ssh/authorized_keys | grep x8dtu
from="x8dtu.startpoint.vpn.unixathome.org,10.8.1.100",command="/usr/local/sbin/rrsync -ro /usr/local/" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIERpb6rCHZ+zK5Q3LvJFukdFzT+Q92GUtej6SLW8 rsyncer@x8dtu.unixathome.org

OK, from there, I made sure the directories existed, relative to the -ro /usr/local/ directive – yes, both /etc/bacula/*.conf and /bacula/bsr existed.

So what about /usr/local/sbin/rrsync?

Nope. It did not exist. WTF? It exists on this host:

[rsyncer@x8dtu ~]$ pkg which /usr/local/sbin/rrsync
/usr/local/sbin/rrsync was installed by package rsync-3.4.1_4

What’s on the failing host:

[rsyncer@bacula ~]$ pkg info -x rsync
rsync-3.4.1_5

Checking FreshPorts

At I found:

These upgrade notes are taken from /usr/ports/UPDATING

2025-12-28

Affects: users of net/rsync
Author: rodrigo@FreeBSD.org
Reason: 
  Add a new option PYTHON that controls when the Python script
  sbin/rrsync is installed and adds the necessary dependencies.
  By default this option is off; updating the package will remove
  the rrsync script.

Ahh, looking at the commit .history, I found this commit. This is the PR.

Fixing my build

I added this to my poudriere‘s /usr/local/etc/poudriere.d/make.conf file: net_rsync_SET+=PYTHON.

I rebuilt the package and run pkg upgrade. In came the changes and my rsync started working again.

Ports?

If you’re using FreeBSD packages, I’m afraid you’ll have to build your own packages. I think this change breaks POLA. All the FreeBSD package users now have broken installs.

Top

Nagios03

Post by Dan Langille via Dan Langille's Other Diary »

This is the Microsoft Azure instance known as nagios03. Today it was migrated to a new VM size ( Standard B2s v2 (2 vcpus, 8 GiB memory).

For reference, the previous post on this server is still available.

[13:10 nagios03 dvl ~] % uname -a
FreeBSD nagios03.unixathome.org 14.3-RELEASE-p7 FreeBSD 14.3-RELEASE-p7 GENERIC amd64

gpart

[dvl@nagios03:~] $ gpart show
=>      34  62984125  da0  GPT  (30G)
        34      2014       - free -  (1.0M)
      2048       345    1  freebsd-boot  (173K)
      2393     66584    2  efi  (33M)
     68977  62914560    3  freebsd-zfs  (30G)
  62983537       622       - free -  (311K)

=>      40  33554352  da1  GPT  (16G)
        40  29360048    1  freebsd-ufs  (14G)
  29360088   4194304    2  freebsd-swap  (2.0G)

zpool list

[13:15 nagios03 dvl ~] % zpool list
NAME    SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zroot  29.5G  13.1G  16.4G        -         -    30%    44%  1.00x    ONLINE  -

[13:15 nagios03 dvl ~] % zpool list -v
NAME        SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zroot      29.5G  13.1G  16.4G        -         -    30%    44%  1.00x    ONLINE  -
  da0p3      30G  13.1G  16.4G        -         -    30%  44.3%      -    ONLINE

zpool status

[13:15 nagios03 dvl ~] % zpool status
  pool: zroot
 state: ONLINE
config:

	NAME        STATE     READ WRITE CKSUM
	zroot       ONLINE       0     0     0
	  da0p3     ONLINE       0     0     0

File systems

[13:16 nagios03 dvl ~] % zfs list
NAME                                           USED  AVAIL  REFER  MOUNTPOINT
zroot                                         15.1G  13.5G   424K  none
zroot/ROOT                                    10.7G  13.5G   424K  none
zroot/ROOT/14.3-RELEASE-p5_2025-11-28_233650     8K  13.5G  10.1G  /
zroot/ROOT/14.3-RELEASE-p6_2025-12-17_144630     8K  13.5G  10.2G  /
zroot/ROOT/default                            10.7G  13.5G  10.2G  /
zroot/home                                    1.46G  13.5G  1.46G  /home
zroot/reserved                                   2G  15.5G    96K  none
zroot/tmp                                     1.41M  13.5G  1.41M  /tmp
zroot/usr                                     1.64M  13.5G   424K  /usr
zroot/usr/obj                                  420K  13.5G   420K  /usr/obj
zroot/usr/ports                                420K  13.5G   420K  /usr/ports
zroot/usr/src                                  420K  13.5G   420K  /usr/src
zroot/var                                      863M  13.5G   424K  /var
zroot/var/audit                                428K  13.5G   428K  /var/audit
zroot/var/crash                                424K  13.5G   424K  /var/crash
zroot/var/log                                  860M  13.5G   860M  /var/log
zroot/var/mail                                 420K  13.5G   420K  /var/mail
zroot/var/tmp                                  576K  13.5G   576K  /var/tmp

dmesg

[13:17 nagios03 dvl ~] % dmesg      
---<<BOOT>>---
Copyright (c) 1992-2023 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
	The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 14.3-RELEASE-p7 GENERIC amd64
FreeBSD clang version 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2)
SRAT: Ignoring memory at addr 0x2c0000000
SRAT: Ignoring memory at addr 0x1000000000
SRAT: Ignoring memory at addr 0x10000000000
SRAT: Ignoring memory at addr 0x20000000000
SRAT: Ignoring memory at addr 0x40000000000
SRAT: Ignoring memory at addr 0x80000000000
SRAT: Ignoring memory at addr 0x100000000000
SRAT: Ignoring memory at addr 0x200000000000
SRAT: Ignoring memory at addr 0x400000000000
SRAT: Ignoring memory at addr 0x800000000000
SRAT: Ignoring memory at addr 0x1000000000000
SRAT: Ignoring memory at addr 0x2000000000000
SRAT: Ignoring memory at addr 0x4000000000000
SRAT: Ignoring memory at addr 0x8000000000000
VT(efifb): resolution 1024x768
Hyper-V Version: 10.0.20348 [SP3]
  Features=0xae7f<VPRUNTIME,TMREFCNT,SYNIC,SYNTM,APIC,HYPERCALL,VPINDEX,REFTSC,IDLE,TMFREQ>
  PM Features=0x20 [C2]
  Features3=0xc0bed7b2<DEBUG,XMMHC,IDLE,NUMA,TMFREQ,SYNCMC,CRASH,NPIEP>
Timecounter "Hyper-V" frequency 10000000 Hz quality 2000
CPU: Intel(R) Xeon(R) Platinum 8370C CPU @ 2.80GHz (2793.45-MHz K8-class CPU)
  Origin="GenuineIntel"  Id=0x606a6  Family=0x6  Model=0x6a  Stepping=6
  Features=0x1f83fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE,SSE2,SS,HTT>
  Features2=0xfffa3203<SSE3,PCLMULQDQ,SSSE3,FMA,CX16,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,TSCDLT,AESNI,XSAVE,OSXSAVE,AVX,F16C,RDRAND,HV>
  AMD Features=0x2c100800<SYSCALL,NX,Page1GB,RDTSCP,LM>
  AMD Features2=0x121<LAHF,ABM,Prefetch>
  Structured Extended Features=0xf1bf2fbb<FSGSBASE,TSCADJ,BMI1,HLE,AVX2,SMEP,BMI2,ERMS,INVPCID,RTM,NFPUSG,AVX512F,AVX512DQ,RDSEED,ADX,SMAP,AVX512IFMA,CLFLUSHOPT,CLWB,AVX512CD,SHA,AVX512BW,AVX512VL>
  Structured Extended Features2=0x415f46<AVX512VBMI,UMIP,AVX512VBMI2,GFNI,VAES,VPCLMULQDQ,AVX512VNNI,AVX512BITALG,AVX512VPOPCNTDQ,LA57,RDPID>
  Structured Extended Features3=0x20000010<FSRM,ARCH_CAP>
  XSAVE Features=0xf<XSAVEOPT,XSAVEC,XINUSE,XSAVES>
  IA32_ARCH_CAPS=0xc000165<RDCL_NO,RSBA,MDS_NO,TAA_NO>
Hypervisor: Origin = "Microsoft Hv"
real memory  = 8589934592 (8192 MB)
avail memory = 8214581248 (7834 MB)
Event timer "LAPIC" quality 100
ACPI APIC Table: <VRTUAL MICROSFT>
FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
FreeBSD/SMP: 1 package(s) x 1 core(s) x 2 hardware threads
random: registering fast source Intel Secure Key RNG
random: fast provider: "Intel Secure Key RNG"
random: unblocking device.
ioapic0 <Version 1.1> irqs 0-23
Launching APs: 1
random: entropy device external interface
Timecounter "Hyper-V-TSC" frequency 10000000 Hz quality 3000
kbd0 at kbdmux0
efirtc0: <EFI Realtime Clock>
efirtc0: registered as a time-of-day clock, resolution 1.000000s
smbios0: <System Management BIOS> at iomem 0x3ff83000-0x3ff83017
smbios0: Entry point: v3 (64-bit), Version: 3.1
aesni0: <AES-CBC,AES-CCM,AES-GCM,AES-ICM,AES-XTS,SHA1,SHA256>
acpi0: <VRTUAL MICROSFT>
atrtc0: <AT realtime clock> port 0x70-0x71 irq 8 on acpi0
atrtc0: registered as a time-of-day clock, resolution 1.000000s
Event timer "RTC" frequency 32768 Hz quality 0
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <32-bit timer at 3.579545MHz> port 0x408-0x40b on acpi0
cpu0: <ACPI CPU> on acpi0
acpi_syscontainer0: <System Container> on acpi0
vmbus0: <Hyper-V Vmbus> on acpi_syscontainer0
uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
uart0: console (115200,n,8,1)
uart1: <16550 or compatible> port 0x2f8-0x2ff irq 3 on acpi0
vmgenc0: <VM Generation Counter> on acpi0
vmbus_res0: <Hyper-V Vmbus Resource> irq 5 on acpi0
Timecounters tick every 10.000 msec
ZFS filesystem version: 5
ZFS storage pool version: features support (5000)
usb_needs_explore_all: no devclass
vmbus0: version 4.0
hvet0: <Hyper-V event timer> on vmbus0
Event timer "Hyper-V" frequency 10000000 Hz quality 1000
hvkbd0: <Hyper-V KBD> on vmbus0
kbd1 at hvkbd0
hvheartbeat0: <Hyper-V Heartbeat> on vmbus0
hvkvp0: <Hyper-V KVP> on vmbus0
hvshutdown0: <Hyper-V Shutdown> on vmbus0
hvtimesync0: <Hyper-V Timesync> on vmbus0
hvtimesync0: RTT
hn0: <Hyper-V Network Interface> on vmbus0
hn0: got notify, nvs type 128
hn0: Ethernet address: 7c:1e:52:78:51:02
storvsc0: <Hyper-V SCSI>
hn0: link state changed to UP
 on vmbus0
storvsc1: <Hyper-V SCSI> on vmbus0
pcib0: <Hyper-V PCI Express Pass Through> on vmbus0
Trying to mount root from zfs:zroot/ROOT/default []...
da0 at storvsc0 bus 0 scbus0 target 0 lun 0
da0: <Msft Virtual Disk 1.0> Fixed Direct Access SPC-3 SCSI device
da0: 300.000MB/s transfers
da0: Command Queueing enabled
da0: 30754MB (62984192 512 byte sectors)
pcib0: PCI VMBus using version 0x10004
pci0: <PCI bus> on pcib0
mlx5_core0: <mlx5_core> at device 2.0 on pci0
mlx5: Mellanox Core driver 3.7.1 (November 2021)pcib0: vmbus_pcib_alloc_resource is successful
mlx5_core0: WARN: mlx5_init_once:999:(pid 0): Unable to find vendor specific capabilities
pcib0: vmbus_pcib_alloc_resource is successful
pcib0: vmbus_pcib_alloc_resource is successful
pcib0: vmbus_pcib_alloc_resource is successful
pcib0: vmbus_pcib_alloc_resource is successful
pcib0: vmbus_pcib_alloc_resource is successful
Dual Console: Serial Primary, Video Secondary
mce0: Ethernet address: 7c:1e:52:78:51:02
mce0: link state changed to DOWN
hn0: link state changed to DOWN
mlx5_core0: WARN: mlx5_fwdump_prep:92:(pid 0): Unable to find vendor-specific capability, error 2
hvhid0: <Hyper-V HID device> on vmbus0
hidbus0: <HID bus> on hvhid0
hms0: <Hyper-V Tablet> on hidbus0
hms0: 5 buttons and [XYW] coordinates ID=0
lo0: link state changed to UP
mce0: link state changed to UP
hn0: disable IPV6 mbuf hash delivery
hn0: link state changed to UP
lo1: link state changed to UP
Security policy loaded: MAC/ntpd (mac_ntpd)
ovpn0: changing name to 'tun1'
tun1: link state changed to UP
Top

BOFHLE

Post by Kristian Köhntopp via Die wunderbare Welt von Isotopp »

BOFHLE is a game of wordle with Unix commands. That is, you get to guess a 5-letter Unix command in six tries or fewer. After each try you get a hint:

  • black: the letter is not present in the secret command.
  • yellow: the letter is present, but not in this position.
  • green: the letter is present and in this position.

List of commands

The set of commands is not Linux-specific, and when you make a list of all installable commands in RedHat and grab the list of commands from wordle.js and compare, the overlap is at best 2/3.

dnf repoquery --available -l  2>/dev/null |
grep -E '(bin|exec)' |
sed -e 's#.*/##' |
grep -E '^[a-zA-Z]{5}$' |
sort -u > cmds.txt

But when we compare cmds.txt with bofhle.txt (generated from wordle.js), we get:

$ wc -l *txt
1104 cmds.txt 
338 bofhle.txt
...
$ join -v 2 cmds.txt bofhle.txt  | wc -l
126

So there are 126 commands in their list that are not in our list. Well, the goal is to solve the game, so let’s just use their list.

Best start word

#! /usr/bin/env python3
# ./count.py

import sys

from collections import Counter
from pprint import pprint

def score_word(w: str) -> int:
    score = sum(letter_counts[ch] for ch in set(w))
#    print(f"{w=} {score=}")
    return score

lines = sys.stdin.readlines()

lines = map(str.strip, lines)
lines = map(str.lower, lines)
lines = list(lines)

letter_counts = Counter("".join(lines))

#for c, n in letter_counts.most_common():
#    print(c,n)

scored = [(score_word(w), w) for w in lines]
scored.sort(key=lambda x: (-x[0], x[1]))
pprint(scored[0:9])

We read sys.stdin with readlines() and get a list of lines. They need to be changed to lowercase and stripped, so we map the str methods of this name on them. This yields an iterator, which we materialize (lines = list(lines)).

We then use collections.Counter to count the letter frequencies of all words.

We assign a score to each word: For the set() of the words letters (eliminating duplicates) we assign the sum of the letter frequencies as the word score.

We sort that and print the top 10.

Best start words:

$ cat bofhle.txt | ./count.py
[(569, 'paste'),
 (569, 'tapes'),
 (553, 'strip'),
 (546, 'parec'),
 (543, 'oscap'),
 (541, 'ports'),
 (540, 'plser'),
 (536, 'pargs'),
 (535, 'split')]

Guessing

Starting with paste we get “⬜⬜⬜⬜🟨”.

I am using this to exclude things:

# grep e wordle-cmds | grep -Ev [past] | ./count.py
[(58, 'gcore'),
 (56, 'xmore'),
 (56, 'zmore'),
 (53, 'gchem'),
 (51, 'gecho'),
 (48, 'gnice'),
 (47, 'rygel'),
 (46, 'gznew'),
 (45, 'chmem')]

I could and should also have grep -v "e$", but I did not stop to think. Next guess, gcore. I get “🟩⬜⬜⬜🟨”.

We can additionally eliminate cor, and we know ^g.

# grep e wordle-cmds | grep -Ev [pastcor] | grep "^g" | ./count.py
[(13, 'gznew'), (11, 'gneqn'), (10, 'gzexe')]

Ok, gznew it is: “🟩🟩🟩🟩🟩”.

The best result is that I never again have to play this.

Top

Patch Tuesday, January 2026 Edition

Post by Brian Krebs via Krebs on Security »

Microsoft today issued patches to plug at least 113 security holes in its various Windows operating systems and supported software. Eight of the vulnerabilities earned Microsoft’s most-dire “critical” rating, and the company warns that attackers are already exploiting one of the bugs fixed today.

January’s Microsoft zero-day flaw — CVE-2026-20805 — is brought to us by a flaw in the Desktop Window Manager (DWM), a key component of Windows that organizes windows on a user’s screen. Kev Breen, senior director of cyber threat research at Immersive, said despite awarding CVE-2026-20805 a middling CVSS score of 5.5, Microsoft has confirmed its active exploitation in the wild, indicating that threat actors are already leveraging this flaw against organizations.

Breen said vulnerabilities of this kind are commonly used to undermine Address Space Layout Randomization (ASLR), a core operating system security control designed to protect against buffer overflows and other memory-manipulation exploits.

“By revealing where code resides in memory, this vulnerability can be chained with a separate code execution flaw, transforming a complex and unreliable exploit into a practical and repeatable attack,” Breen said. “Microsoft has not disclosed which additional components may be involved in such an exploit chain, significantly limiting defenders’ ability to proactively threat hunt for related activity. As a result, rapid patching currently remains the only effective mitigation.”

Chris Goettl, vice president of product management at Ivanti, observed that CVE-2026-20805 affects all currently supported and extended security update supported versions of the Windows OS. Goettl said it would be a mistake to dismiss the severity of this flaw based on its “Important” rating and relatively low CVSS score.

“A risk-based prioritization methodology warrants treating this vulnerability as a higher severity than the vendor rating or CVSS score assigned,” he said.

Among the critical flaws patched this month are two Microsoft Office remote code execution bugs (CVE-2026-20952 and CVE-2026-20953) that can be triggered just by viewing a booby-trapped message in the Preview Pane.

Our October 2025 Patch Tuesday “End of 10” roundup noted that Microsoft had removed a modem driver from all versions after it was discovered that hackers were abusing a vulnerability in it to hack into systems. Adam Barnett at Rapid7 said Microsoft today removed another couple of modem drivers from Windows for a broadly similar reason: Microsoft is aware of functional exploit code for an elevation of privilege vulnerability in a very similar modem driver, tracked as CVE-2023-31096.

“That’s not a typo; this vulnerability was originally published via MITRE over two years ago, along with a credible public writeup by the original researcher,” Barnett said. “Today’s Windows patches remove agrsm64.sys and agrsm.sys. All three modem drivers were originally developed by the same now-defunct third party, and have been included in Windows for decades. These driver removals will pass unnoticed for most people, but you might find active modems still in a few contexts, including some industrial control systems.”

According to Barnett, two questions remain: How many more legacy modem drivers are still present on a fully-patched Windows asset; and how many more elevation-to-SYSTEM vulnerabilities will emerge from them before Microsoft cuts off attackers who have been enjoying “living off the land[line] by exploiting an entire class of dusty old device drivers?”

“Although Microsoft doesn’t claim evidence of exploitation for CVE-2023-31096, the relevant 2023 write-up and the 2025 removal of the other Agere modem driver have provided two strong signals for anyone looking for Windows exploits in the meantime,” Barnett said. “In case you were wondering, there is no need to have a modem connected; the mere presence of the driver is enough to render an asset vulnerable.”

Immersive, Ivanti and Rapid7 all called attention to CVE-2026-21265, which is a critical Security Feature Bypass vulnerability affecting Windows Secure Boot. This security feature is designed to protect against threats like rootkits and bootkits, and it relies on a set of certificates that are set to expire in June 2026 and October 2026. Once these 2011 certificates expire, Windows devices that do not have the new 2023 certificates can no longer receive Secure Boot security fixes.

Barnett cautioned that when updating the bootloader and BIOS, it is essential to prepare fully ahead of time for the specific OS and BIOS combination you’re working with, since incorrect remediation steps can lead to an unbootable system.

“Fifteen years is a very long time indeed in information security, but the clock is running out on the Microsoft root certificates which have been signing essentially everything in the Secure Boot ecosystem since the days of Stuxnet,” Barnett said. “Microsoft issued replacement certificates back in 2023, alongside CVE-2023-24932 which covered relevant Windows patches as well as subsequent steps to remediate the Secure Boot bypass exploited by the BlackLotus bootkit.”

Goettl noted that Mozilla has released updates for Firefox and Firefox ESR resolving a total of 34 vulnerabilities, two of which are suspected to be exploited (CVE-2026-0891 and CVE-2026-0892). Both are resolved in Firefox 147 (MFSA2026-01) and CVE-2026-0891 is resolved in Firefox ESR 140.7 (MFSA2026-03).

“Expect Google Chrome and Microsoft Edge updates this week in addition to a high severity vulnerability in Chrome WebView that was resolved in the January 6 Chrome update (CVE-2026-0628),” Goettl said.

As ever, the SANS Internet Storm Center has a per-patch breakdown by severity and urgency. Windows admins should keep an eye on askwoody.com for any news about patches that don’t quite play nice with everything. If you experience any issues related installing January’s patches, please drop a line in the comments below.

Top

Valuable News – 2026/01/12

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX/BSD/Linux systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

The Usual Suspects section at the end is permanent and have links to other sites with interesting UNIX/BSD/Linux news.

Past releases are available at the dedicated NEWS page.

UNIX

FreeBSDKit is Swift Framework That Provides Overlay for FreeBSD System APIs.
https://github.com/SwiftBSD/FreeBSDKit

FreeBSD – Home NAS – Part 7 – NFSv4 and Linux Clients.
https://rtfm.co.ua/en/freebsd-home-nas-part-7-nfsv4-and-use-with-linux-clients-2/

FreeBSD – Home NAS – Part 8 – NFS and Samba Data Backups Using Restic.
https://rtfm.co.ua/en/freebsd-home-nas-part-8-nfs-and-samba-data-backups-using-restic/

Linuxulator on FreeBSD Feels Like Magic.
https://hayzam.com/blog/02-linuxulator-is-awesome/

pkg: No SRV record found for the repo 'local'.
https://dan.langille.org/2023/07/11/pkg-no-srv-record-found-for-the-repo-local/

FreeBSD Git Weekly: 2025-12-29 to 2026-01-04.
https://freebsd-git-weekly.tarsnap.net/2025-12-29.html

Apache PHP MySQL NetBSD.
https://substack.com/inbox/post/182281112

Using iperf3 and Prometheus for WAN Link Monitoring on FreeBSD.
https://freebsd.uw.cz/2026/01/using-iperf3-and-prometheus-for-wan.html

Using nvi(1) as Minimal and Fast Text Editor.
https://git.sr.ht/~r1w1s1/code-notes/blob/main/notes/NVI_Editor_Guide.txt

You Would Not Believe How Easy It is to Install MediaWiki on FreeBSD.
https://youtube.com/watch?v=WFuNtCw-h5c

Quickshell Adds Initial Support for FreeBSD.
https://github.com/quickshell-mirror/quickshell/commit/6742148cf4a8415a9c51fdeb11d8c3ea716c2e14

Another Classic UNIX is Dead: HP-UX is No Longer Supported.
https://youtube.com/watch?v=ccomS0EzfGk

Idiots at GNOME and Firefox Consider Disabling X11 Middle Click Paste by Default.
https://phoronix.com/news/GNOME-Firefox-MiddleClick-Paste

Ghostty is Now in the FreeBSD Ports Tree/Packages.
https://freshports.org/x11/ghostty/

FreeBSD and Poudriere in High Security Environments.
https://vermaden.wordpress.com/2026/01/07/freebsd-and-poudriere-in-high-security-environments/

GNOME Says Linux Should Be Like Windows and Moves to Disable Middle Click Paste.
https://youtube.com/watch?v=2pnH6FKQxxA

Run FreeBSD/OpenBSD/NetBSD VMs in Incus.
https://gyptazy.com/blog/run-bsd-vms-in-incus/

Installing and Using DosBox-X on FreeBSD.
https://youtube.com/watch?v=5qkE06sv6ZE

Understanding How to Get FreeBSD from Scratch.
https://youtube.com/watch?v=Uc8Z-XX1TS4

Tour of Mandatory Access Control (portacl/biba/mls) on FreeBSD.
https://youtube.com/watch?v=wk7p4bS0-p0

Tour of Mandatory Access Control (mac_do/mac_veriexec) on FreeBSD.
https://youtube.com/watch?v=0Ysw9Ku5cpI

FreeBSD vs. Slackware: Which Super Stable OS is Right for You?
https://zdnet.com/article/freebsd-vs-slackware/

ZFS Management GUI and Web UI ZfDash for Linux/macOS/FreeBSD.
https://github.com/ad4mts/zfdash

Running OpenBSD 7.8 on Your Laptop is Really Hard (Not).
https://k58.uk/openbsd.html

HardenedBSD hbsd-update(8) Signing Material Rotation.
https://groups.google.com/a/hardenedbsd.org/g/users/c/l-UivSvXK5c/m/6hX7SknqBAAJ

BSD Now 645: Unwrapping Gifts/
https://www.bsdnow.tv/645

MidnightBSD 4.0 – Punishment Befitting That of Tantalus.
https://youtube.com/watch?v=tB_x2MiFJA8

Lightweight Dovecot Brute Force doveguard Blocker.
https://github.com/sheridans/doveguard

Add Port to FreeBSD Ports.
https://vermaden.wordpress.com/2026/01/10/add-port-to-freebsd-ports/

Is Not C a Wonderful Language?
http://pigeonsnest.co.uk/stuff/pigeons-device.html

GNUstep Official 2026/01 Presentation.
https://youtube.com/watch?v=DDwLzy8map8

Submitting GitHub Pull Requests to FreeBSD.
https://freebsdfoundation.org/submitting-github-pull-requests-to-freebsd/

BSD or Bust.
https://technophobeconfessions.wordpress.com/2026/01/10/bsd-or-bust/

OMG! I Can Not Believe FreeBSD 15 is Faster than Linux Debian 13.
https://youtube.com/watch?v=BZk6LTfqW30

FreeBSD and Persistent Network Interface Names in VMware.
https://freebsd.uw.cz/2026/01/freebsd-and-persistent-network.html

Quick Look at wc(1) Command in GhostBSD/FreeBSD.
https://youtube.com/watch?v=DQCzfPaQdNc

CheriBSD: FreeBSD for CHERI Enabled Platforms.
https://osnews.com/story/144123/cheribsd-freebsd-for-cheri-enabled-platforms/

OpenBSD on Thinkpad X1 Carbon 9th Gen.
https://xosc.org/x1carbon.html

Performance Fresser Series – Docker vs FreeBSD Jails.
https://linkedin.com/posts/vvoss_performancefresser-docker-freebsd-activity-7416026089275367424-eEk9

Dlaczego Warto Zainstalowac FreeBSD 15 w Home Lab na Proxmox? [Polish]
https://blog.askomputer.pl/instalacja-freebsd-w-proxmox/

Wlasny Serwer FreeBSD – Czesc 3 – PHP i SQL. [Polish]
https://linuxiarze.pl/wlasny-serwer-freebsd-cz-3-php-i-sql/

Hardware

Best ThinkPad (X210Ai) Ever Made is Now Here.
https://youtube.com/watch?v=j6AXBiEdKtI

Bose Open Sources Its Old Smart Speakers Instead of Bricking Them.
https://theverge.com/news/858501/bose-soundtouch-smart-speakers-open-source

Xiaomi XRING O1: Xiaomi Breakthrough in 3nm Chip Technology.
https://pbxscience.com/xiaomi-xring-o1-xiaomi-breakthrough-in-3nm-chip-technology/

Kioxia BG7 Launched for Low Cost M.2 NVMe SSDs.
https://servethehome.com/kioxia-bg7-launched-for-low-cost-m-2-nvme-ssds/

Life

Why Some Empaths Quietly Cut Everyone Off … and Never Return – Carl Jung.
https://youtube.com/watch?v=dYrhhwa1Bz4

Tony Iommi – Godfather of Heavy Metal – Volume One.
https://youtube.com/watch?v=NHZGBfrb6Jw

When World Said No One King Saved 740 Polish Children in 1942.
https://youtube.com/watch?v=GUY5D-1zmLA

Man Charged for Wiping Phone Before CBP Could Search It.
https://404media.co/man-charged-for-wiping-phone-before-cbp-could-search-it/

Food Becoming More Calorific But Less Nutritious.
https://theguardian.com/environment/2025/dec/19/higher-carbon-dioxide-food-more-calorific-less-nutritious-study

Art Of Solitude and Gifts of Aloneness.
https://sacap.edu.za/blog/applied-psychology/overcoming-loneliness/

Other

Code Audit for Tor Project Completed by 7aSecurity.
https://blog.torproject.org/code-audit-network-health-tools/

AMIGA Pointer Archive.
https://heckmeck.de/pointers/

Muffon Open Source Replacement for Spotify.
https://muffon.netlify.app/

Italy Fines Cloudflare €14 Million for Refusing to Filter Pirate Sites on Public 1.1.1.1 DNS.
https://torrentfreak.com/italy-fines-cloudflare-e14-million-for-refusing-to-filter-pirate-sites-on-public-1-1-1-1-dns/

How We Made LEGO SMART Play System.
https://lego.com/en-dk/smart-play/article/innovation

Usual Suspects

BSD Weekly.
https://bsdweekly.com/

DiscoverBSD.
https://discoverbsd.com/

BSDSec.
https://bsdsec.net/

DragonFly BSD Digest.
https://dragonflydigest.com/

FreeBSD Patch Level Table.
https://bokut.in/freebsd-patch-level-table/

FreeBSD End of Life Date.
https://endoflife.date/freebsd

Phoronix BSD News Archives.
https://phoronix.com/linux/BSD

OpenBSD Journal.
https://undeadly.org/

Call for Testing.
https://callfortesting.org/

Call for Testing – Production Users Call.
https://youtube.com/@callfortesting/videos

BSD Now Weekly Podcast.
https://www.bsdnow.tv/

Nixers Newsletter.
https://newsletter.nixers.net/entries.php

BSD Cafe Journal.
https://journal.bsd.cafe/

DragonFly BSD Digest – Lazy Reading – In Other BSDs.
https://dragonflydigest.com

BSDTV.
https://bsky.app/profile/bsdtv.bsky.social

FreeBSD Git Weekly.
https://freebsd-git-weekly.tarsnap.net/

FreeBSD Meetings.
https://youtube.com/@freebsdmeetings

BSDJedi.
https://youtube.com/@BSDJedi/videos

RoboNuggie.
https://youtube.com/@RoboNuggie/videos

GaryHTech.
https://youtube.com/@GaryHTech/videos

Sheridan Computers.
https://youtube.com/@sheridans/videos

82MHz.
https://82mhz.net/

EOF
Top

Add Port to FreeBSD Ports

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

Today I will share a simple way to add software to the FreeBSD Ports tree.

In not so distant past I used shar(1) tool that was part of the FreeBSD Base System to generate information needed to either create new port or to update the old one. It was also one of the officially supported ways to do that … but shar(1) tool is no more – it was removed from the FreeBSD Base System and (fortunately) kept as sysutils/freebsd-shar port.

Now sending the diff from git(1) is needed – but as I read the FreeBSD Porters Handbook – Quick Porting chapter … and tried to follow the instructions one by one … I was not able to generate the needed information. Its not that this official guide is written ‘bad’ on purpose – its probably the ‘missing’ steps are so obvious for FreeBSD maintainers/porters/developers that they even forget to mention them at all.

After some time with the problem I found a simple way that works for me – and today I am sharing that as some of you may also find that information useful.

The Table of Contents is below.

  • Add Port to FreeBSD Ports
  • Create New FreeBSD Port
  • Testing Port Before Submitting
    • Common Problems
      • Checksum Mismatch
      • Size Mismatch
  • Submit Proposal to Add New Port
  • Updating the FreeBSD Port
  • Summary

One may ask WHY I did not submitted the needed changes to the upstream documentation … the reason is disappointment from the past when I tried to fix/update the entire Virtualization chapter of FreeBSD Handbook. 20 years ago I rewrote the chapter and posted it on my (then) place available online. Surprisingly its still available online – FreeBSD Handbook Virtualization – here. I then shared that with people that could update the FreeBSD Handbook with info from there.

To be honest – I did not expected that it would be commited ‘just like that’ as it was – but I at least expected SOME parts of it would be added – as for example the KQEMU part that was missing in the FreeBSD Handbook and as it made QEMU a lot faster it was very valuable … but no. Nothing was added. Nothing was taken from it … like I wasted entire effort … so I keep that FreeBSD Handbook proposal to remind me about it. After I finally succeeded with my 3rd blog attempt I do not care anymore for such things – I just ‘dump’ all the info I have on the blog and if someone wants to add it to the official documentation – like with Jails chapter of FreeBSD Handbook – great – but I am done with official proposals to omit disappointment.

Now to the point.

Create New FreeBSD Port

I will create an example based on my sysutils/lsblk port.

when I proposed to add lsblk(8) as 1.0 version the Makefile and distinfo and pkg-descr files looked like that:

FreeBSD % cat Makefile
PORTNAME=	lsblk
PORTVERSION=	1.0
CATEGORIES=	sysutils
MASTER_SITES=	https://github.com/vermaden/lsblk/raw/master/release/
MAINTAINER=	vermaden@interia.pl
COMMENT=	Lists information about block devices in the system
LICENSE=	BSD2CLAUSE
NO_BUILD=	YES
NO_ARCH=	YES
PLIST_FILES=	sbin/${PORTNAME}
do-install:
	${INSTALL_SCRIPT} ${WRKSRC}/lsblk.sh \
		${STAGEDIR}${PREFIX}/sbin/${PORTNAME}
.include 

FreeBSD % cat distinfo
TIMESTAMP = 1570494909
SHA256 (lsblk-1.0.tar.gz) = ec6335ec27fd7ec1c56b2700d073c659c1704b816aa08c0f4d831d417dd2affb
SIZE (lsblk-1.0.tar.gz) = 4338

FreeBSD % cat pkg-descr
Lists information about block devices in the system in a similar way
that util-linux's lsblk(8) does.
WWW: https://github.com/vermaden/scripts/blob/master/lsblk.sh

You can even view them in the FreeBSD Ports history here:

To generate the distinfo file you may use my ports-generate-distinfo.sh script.

To make submit a port you will also need lsblk-1.0.tar.gz file placed in the https://github.com/vermaden/lsblk/release/ path – and it contains these contents as shown below.

Just a lsblk-1.0 dir and lsblk.sh in it.

Testing Port Before Submitting

Before you send the ‘BUG’ report to create a port first test the port locally.

FreeBSD # tree /usr/ports/sysutils/lsblk
/usr/ports/sysutils/lsblk
├── distinfo
├── Makefile
└── pkg-descr

1 directory, 3 files

FreeBSD # cd /usr/ports/sysutils/lsblk

FreeBSD # pwd
/usr/ports/sysutils/lsblk

FreeBSD # make clean distclean
===>  Cleaning for lsblk-1.0
===>  Deleting distfiles for lsblk-1.0

FreeBSD # make
===>   lsblk-1.0 depends on file: /usr/local/sbin/pkg - found
=> lsblk-1.0.tar.gz doesn't seem to exist in /usr/ports/distfiles.
=> Attempting to fetch https://github.com/vermaden/lsblk/raw/master/release/lsblk-1.0.tar.gz
lsblk-1.0.tar.gz                                      4338  B   13 MBps    00s
===> Fetching all distfiles required by lsblk-1.0 for building
===>  Extracting for lsblk-1.0
=> SHA256 Checksum OK for lsblk-1.0.tar.gz.
===>  Patching for lsblk-1.0
===>  Configuring for lsblk-1.0
===>  Staging for lsblk-1.0
===>   Generating temporary packing list
install  -m 555 /usr/ports/obj/usr/ports/sysutils/lsblk/work/lsblk-1.0/lsblk.sh  /usr/ports/obj/usr/ports/sysutils/lsblk/work/stage/usr/local/sbin/lsblk
====> Compressing man pages (compress-man)

Common Problems

Below are common problems that you may encounter while preparing the port.

Checksum Mismatch

More often in the updating then creating first one – but still.

FreeBSD # make
===>   lsblk-1.0 depends on file: /usr/local/sbin/pkg - found
=> lsblk-1.0.tar.gz doesn't seem to exist in /usr/ports/distfiles.
=> Attempting to fetch https://github.com/vermaden/lsblk/raw/master/release/lsblk-1.0.tar.gz
lsblk-1.0.tar.gz                                      4338  B   26 MBps    00s
===> Fetching all distfiles required by lsblk-1.0 for building
===>  Extracting for lsblk-1.0
=> SHA256 Checksum mismatch for lsblk-1.0.tar.gz.
===>  Refetch for 1 more times files:  lsblk-1.0.tar.gz 
===>   lsblk-1.0 depends on file: /usr/local/sbin/pkg - found
=> lsblk-1.0.tar.gz doesn't seem to exist in /usr/ports/distfiles.
=> Attempting to fetch https://github.com/vermaden/lsblk/raw/master/release/lsblk-1.0.tar.gz
lsblk-1.0.tar.gz                                      4338  B   12 MBps    00s
===> Fetching all distfiles required by lsblk-1.0 for building
===>   lsblk-1.0 depends on file: /usr/local/sbin/pkg - found
===> Fetching all distfiles required by lsblk-1.0 for building
=> SHA256 Checksum mismatch for lsblk-1.0.tar.gz.
===>  Giving up on fetching files:  lsblk-1.0.tar.gz 
Make sure the Makefile and distinfo file (/usr/ports/sysutils/lsblk/distinfo)
are up to date.  If you are absolutely sure you want to override this
check, type "make NO_CHECKSUM=yes [other args]".
*** Error code 1

Stop.
make[1]: stopped in /usr/ports/sysutils/lsblk
*** Error code 1

Stop.
make: stopped in /usr/ports/sysutils/lsblk


Check how to fix that.

FreeBSD # sha256 /usr/ports/distfiles/lsblk-1.0.tar.gz
SHA256 (/usr/ports/distfiles/lsblk-1.0.tar.gz) = ec6335ec27fd7ec1c56b2700d073c659c1704b816aa08c0f4d831d417dd2affb

FreeBSD # grep SHA /usr/ports/sysutils/lsblk/distinfo
SHA256 (lsblk-1.0.tar.gz) = ec6335ec27fd7ec1c56b2700d073c659c1704b816aa08c0f4d831d417dd2affba

As You can see there is additional ‘a’ at the end that makes the checksum different.

Size Mismatch

Also typical error.

FreeBSD # make
===>   lsblk-1.0 depends on file: /usr/local/sbin/pkg - found
=> lsblk-1.0.tar.gz doesn't seem to exist in /usr/ports/distfiles.
=> Attempting to fetch https://github.com/vermaden/lsblk/raw/master/release/lsblk-1.0.tar.gz
fetch: https://github.com/vermaden/lsblk/raw/master/release/lsblk-1.0.tar.gz: size mismatch: expected 4333, actual 4338
=> Attempting to fetch http://distcache.FreeBSD.org/ports-distfiles/lsblk-1.0.tar.gz
fetch: http://distcache.FreeBSD.org/ports-distfiles/lsblk-1.0.tar.gz: Not Found
=> Couldn't fetch it - please try to retrieve this
=> port manually into /usr/ports/distfiles and try again.
*** Error code 1

Stop.
make: stopped in /usr/ports/sysutils/lsblk

Lets check the size.

FreeBSD # fetch https://github.com/vermaden/lsblk/raw/master/release/lsblk-1.0.tar.gz
lsblk-1.0.tar.gz                                      4338  B   27 MBps    00s

FreeBSD # stat -f "%z" lsblk-1.0.tar.gz
4338

FreeBSD # grep SIZE /usr/ports/sysutils/lsblk/distinfo
SIZE (lsblk-1.0.tar.gz) = 4333

Yep – wrong size.

Submit Proposal to Add New Port

Now – to add proposal to add a port to FreeBSD Ports you will need to generate git(1) diff for that.

Below are steps needed to get one.

First we need to get the FreeBSD Ports tree.

FreeBSD % git clone https://git.freebsd.org/ports.git freebsd-ports
Cloning into 'freebsd-ports'...
remote: Enumerating objects: 6635778, done.
remote: Counting objects: 100% (995/995), done.
remote: Compressing objects: 100% (177/177), done.
remote: Total 6635778 (delta 925), reused 816 (delta 816), pack-reused 6634783 (from 1)
Receiving objects: 100% (6635778/6635778), 1.45 GiB | 1.89 MiB/s, done.
Resolving deltas: 100% (4017143/4017143), done.
Updating files: 100% (166471/166471), done.

FreeBSD % cd freebsd-ports

Now you need to create new branch – name it as You like it – I will use sysutils-lsblk one without better idea.

FreeBSD % git checkout -b sysutils-lsblk
Switched to a new branch 'sysutils-lsblk'

Now copy your content into that local tree.

FreeBSD % cp -avp ~/misc/git/lsblk/port/sysutils-lsblk sysutils/lsblk
/home/vermaden/misc/git/lsblk/port/sysutils-lsblk -> sysutils/lsblk
/home/vermaden/misc/git/lsblk/port/sysutils-lsblk/distinfo -> sysutils/lsblk/distinfo
/home/vermaden/misc/git/lsblk/port/sysutils-lsblk/Makefile -> sysutils/lsblk/Makefile
/home/vermaden/misc/git/lsblk/port/sysutils-lsblk/pkg-descr -> sysutils/lsblk/pkg-descr

Now add it with git(1) command and create that diff.

FreeBSD % git add sysutils/lsblk

FreeBSD % git diff --staged > /home/vermaden/sysutils-lsblk.diff

This is how our git(1) diff looks like.

FreeBSD % cat ~/sysutils-lsblk.diff
diff --git a/sysutils/lsblk/Makefile b/sysutils/lsblk/Makefile
new file mode 100644
index 000000000000..f59e4af7948b
--- /dev/null
+++ b/sysutils/lsblk/Makefile
@@ -0,0 +1,15 @@
+PORTNAME=	lsblk
+PORTVERSION=	1.0
+CATEGORIES=	sysutils
+MASTER_SITES=	https://github.com/vermaden/scripts/raw/master/release/
+MAINTAINER=	vermaden@interia.pl
+COMMENT=	Lists information about block devices in the system
+LICENSE=	BSD2CLAUSE
+NO_BUILD=	YES
+NO_ARCH=	YES
+PLIST_FILES=	sbin/${PORTNAME}
+do-install:
+	${INSTALL_SCRIPT} ${WRKSRC}/lsblk.sh \
+		${STAGEDIR}${PREFIX}/sbin/${PORTNAME}
+.include 
+
diff --git a/sysutils/lsblk/distinfo b/sysutils/lsblk/distinfo
new file mode 100644
index 000000000000..bacd71658c5a
--- /dev/null
+++ b/sysutils/lsblk/distinfo
@@ -0,0 +1,4 @@
+TIMESTAMP = 1570494909
+SHA256 (lsblk-1.0.tar.gz) = ec6335ec27fd7ec1c56b2700d073c659c1704b816aa08c0f4d831d417dd2affb
+SIZE (lsblk-1.0.tar.gz) = 4338
+
diff --git a/sysutils/lsblk/pkg-descr b/sysutils/lsblk/pkg-descr
new file mode 100644
index 000000000000..01e1707486ed
--- /dev/null
+++ b/sysutils/lsblk/pkg-descr
@@ -0,0 +1,4 @@
+Lists information about block devices in the system in a similar way
+that util-linux's lsblk(8) does.
+WWW: https://github.com/vermaden/scripts/blob/master/lsblk.sh
+

… and this sysutils-lsblk.diff we would have to attach to our ‘BUG’ report for new FreeBSD port.

Now go to the https://freebsd.org/send-pr.html page (you will be redirected to https://bugs.freebsd.org/bugzilla/enter_bug.cgi page) and click Ports & Packages type … and fill all the needed information. On the screenshot you have everything that is needed.

Remember to add the sysutils-lsblk.diff with Add an Attachment button below.

If some modifications would be needed – and often are – FreeBSD developers and maintainers will tell you what to do 🙂

Updating the FreeBSD Port

Now … after You already have a FreeBSD port there will be a need to update it.

The procedure is generally the same – you fetch the FreeBSD Ports tree – create new branch – dump your updates to it – create git(1) diff and attach it to the ‘BUG’ report.

Example report could look like that one below.

Summary

Some notes of the current Status Quo and trends.

For some reason instead of just links to where to fetch the code from the FreeBSD implemented additional variables just for GitHub to … make it more simple? Not for me at least … and its just for one vendor. IMHO its pointless to create such ‘per vendor’ settings while we can have just generic things that works for everyone … but that is me.

Example Makefile for sysutils/jmore with these options for GitHub is below.

FreeBSD % cat /usr/ports/*/jmore/Makefile
PORTNAME=       jmore
DISTVERSION=    0.5.20251030
DISTVERSIONSUFFIX= -g${GH_TAGNAME}
CATEGORIES=     sysutils

MAINTAINER=     vermaden@interia.pl
COMMENT=        FreeBSD Jail listing and managing utility
WWW=            https://github.com/vermaden/jmore

LICENSE=        BSD2CLAUSE
LICENSE_FILE=   ${WRKSRC}/LICENSE

USE_GITHUB=     yes
GH_ACCOUNT=     vermaden
GH_PROJECT=     jmore
GH_TAGNAME=     9b72e97

NO_ARCH=        YES
NO_BUILD=       YES

PLIST_FILES=    sbin/${PORTNAME}

do-install:
        ${INSTALL_SCRIPT} ${WRKSRC}/jmore \
        ${STAGEDIR}${PREFIX}/sbin/${PORTNAME}

.include 

Now nothing is stopping You from adding something to the FreeBSD Ports tree.

EOF
Top

Market Segmentation: EcoFlow Delta 3 Plus

Post by Diego Elio Pettenò via Flameeyes's Weblog »

One of the things that seriously annoy me about being on the Internet, particularly around the communities heavily influenced by Doctorow and Stallman, is that most of those members, confronted with business decisions influencing design and implementation of devices and services, can only respond with one of two discussion-terminating memes: enshittification or defective by design. I find these answers annoying because they neither attempt to understand how those decisions are made, nor identify a working strategy to make things any better.

I’m putting this preamble here because I totally expect that what I’m about to write here is going to elicit those two responses, and honestly, I don’t have time for those.

When we got the keys to our new house last year, we started almost from bare walls — it took six weeks to get an Internet connection, we (still) have no mobile network signal, and receiving any delivery whatsoever for the first few months was more than just a bit complicated, as our street didn’t exist on any navigation app. In addition to this, before we started actually living in the house, we realized that the electricals were… less than stellar. There are a number of reasons for this and I’m sure I’ll have content fore more posts in the future, but for the time being let’s just say I realised very early on that I wanted to have a battery backup for the NAS, Home Assistant, and network equipment.

While our house, like basically any new build in the UK over the past few years, was built with solar panels on the roof, they amount to a fairly low 3kW at full production, and didn’t come with whole-house batteries. Again, this is something I’ll probably get back to in the future, because I have Opinions on the complaints about grid stability, while having set up companies to skim and scam left and right.

UPSes are definitely not a new topic for me. I have (co-)maintained both NUT and APCUPSD for years in Gentoo Linux, as having multiple UPS for different rooms was a necessity, when I lived in Italy — since my mother’s house is located in a terrible zone for power supply, and still getting multi-hours maintenance blackouts at least once a month every winter. But instead of going straight to APC (pardon, Schneider Electric nowadays), I decided to take a look at EcoFlow — a company I had not bought anything from before, but that I kept hearing about both from YouTubers (paid and not) and from Ukrainians.

My primary interest here, was to have a long-running battery so that, even in the event the power was lost while we were out of the house, we wouldn’t have to hurry back to be able to monitor it. Most UPSes, even in the professional or server space, are designed to deal with short interruptions, the interim between a power loss failure and the bringing up of separate supplies such as diesel generators, or just the time needed to save open files and turn off the computer.

But there’s a different class of devices that became common in the last few years: portable, large-capacity batteries, which EcoFlow (but also Anker, and a bunch of other companies) is quite well known for. These are designed to operate for a much longer time with lower drain requirements, which felt a much better fit for the networking gear, rather than the workstation-oriented high-drain, low-capacity UPSes. And indeed, there’s no contest in terms of “bang for your buck.” With a whole lot of caveats, of course.

Conceptually, there’s very little difference between an UPS, a portable battery, or many of the demand-shift batteries that are being sold: you get the battery of cells itself, a BMS (battery management system) to handle the charge/discharge and monitor the health, and an inverter to supply the 230V output. Admittedly an UPS also tends to have a user-serviceable management interface, but as it turns out, some of the EcoFlow batteries come with a NUT-compatible USB HID interface for that as well — and pretty much all of them have Bluetooth of WiFi connectivity nowadays.

The inverter is a bit of a weird sticking point for me — basically everything I power from an UPS or a battery takes the 230V AC and will then linearize it to DC anyway. I find it annoying that we haven’t really standardized on a high-power 48VDC bus for home/small-office equipment.

To put some numbers in, at the time of writing, with £600 you can either get the EcoFlow DELTA 3 Plus (the one I have) or, depending on the supplier, the APC BR1500GI. Comparing these is hard, but I believe this is close to a fair comparison in terms of equivalent purchasing power. At the time of writing, Amazon’s price for the BR1500GI is a third down compared to Schneider Electric’s own website, showing it as effectively quite cheaper than the EcoFlow, but prices vary for both of them during the year.

The APC one actually shares the same “battery cartridge” with at least another model, which is a rackmount version that, on Schneider Electric’s website, is priced at over £1000. This is a major difference between the portable batteries and UPSes, which I’ll get back to later — when you buy an UPS, you usually expect to be able to replace its battery after some time, while you can’t really do that with a portable battery.

The APC model is rated for 1500 VA or 865W — that’s power (drain), not energy (capacity)! If you want a video essay explanation, refer to Alec’s great video over at Technology Connections. When buying UPSes for offices, you often spec them for how much equipment you can back up, and mostly accept the runtime they provide it – this is by my experience both as buyer and seller of UPSes to small and medium offices – which is why the headline number, the one that is in the model number, reflects the maximum power, and you’ll need to dig quite a bit to find a capacity value. Conversely, most portable batteries are specified based on their capacity — the DELTA 3 Plus is a 1024Wh battery, which is the first number you see around it, with a maximum output of 1800W.

The next step, for a comparison to be valid, is to figure out what the capacity of the APC version is. For this, it’s easier to observe the battery cartridge (if you think this is a strange name, that’s what Schneider Electric calls them — “battery pack” is what I’ve always called them, personally): APCRBC124. This format of battery pack, with different capacity, is quite common for Schneider’s devices — as far as I know, though, you cannot just cheat and get a higher-capacity pack for a lower-power model to extend its runtime, even though the batteries are the same size, and the same voltage (24V), and they’re used on models with different maximum drain (1500VA and 1000VA.)

The Schneider Electric battery pack is rated for 9Ah at 24V: 216Wh — note here, while multiplying volts by amperes doesn’t quite work for AC (thus the difference between the VA rating versus the Watt rating on the APC UPS), for battery capacity this is the standard way to represent this. Compare this to the 1024Wh (51.2V at 20Ah) of the EcoFlow DELTA 3 Plus.

Comparing these specs (together with a video from, I believe, Functional Print Friday, which I can’t find again showing some maritime battery comparison) is what got me interested in trying to use the EcoFlow battery instead of a “classic” UPS — we’re talking about nearly five times the capacity and more than twice the sustained drain, for roundabout the same price (or a lot less if you compare it with the “professional” rackable versions.) Sure, you need to do quite a bit more work to replace the EcoFlow if it fails (re-wiring a bunch of stuff, which particularly for a rack setup is non-negligible work), but assuming a similarly proportional life span, the economics appear to be well skewed in front of EcoFlow style batteries over “old school” UPSes with their lead-acid batteries.

Is this all a scam? Is it intentionally designed to be bad? Not really — these are generally different markets. EcoFlow has been encroaching in Schneider Electric’s home customers with adding UPS functionality to their Plus series, but that doesn’t really mean much. I have… peculiar experience with UPSes which is the main reason why I don’t go for no-brand or white label UPSes anymore — that market, the one that EcoFlow entirely ate out already by now, hasn’t been on Schneider Electric’s radar for a long time, from what I can see.

So this is already a first point of market segmentation: APC devices have still a lot of valid use cases where their price is warranted. A rack-mounted UPS where you can replace the battery pack without having to touch any of the power wiring is indeed something that is very valuable in the right conditions. Schneider Electric is also providing a lot more certifications, which again have their own value, particularly if insurances are involved.

Now, even within EcoFlow’s own offerings, there are different markets covered. I briefly hinted at demand-shifting batteries as a different beast from portable batteries. Indeed EcoFlow sells STREAM-series batteries that are designed for demand-shifting: you charge them either during the day through solar, or – if you have a flexible tariff – during the night when it’s cheaper, and then discharge them when you run appliances and it would cost you more. I could have probably used one of those (particularly the STREAM AC Pro, which allows “off-grid” usage), but they have a lot of different parameters and usage patterns compared to the portable batteries.

Can you do demand-shifting on the DELTA series? Well, in theory yes — although EcoFlow’s own support people don’t recommend it, and indeed when they do sign up folks for testing new experimental integrations with, for example, Octopus Energy, they only do so for folks that are on their STREAM or OCEAN series.

I actually wanted to be able to do so with Home Assistant integration at some point, and looked into what options I had. As it turns out, neither the EcoFlow app, nor the unofficial Home Assistant integration, have a way to stop the battery from charging while there is AC on the input. This again is market segmentation: the BMS surely has a way to disconnect the input power, but that’s not a feature needed for this type of device. I “solved” this part by attaching it via a smart plug, which allows me to “artificially” cut the power to the battery, if I want it to discharge… which is a good thing to have, to be able to test your battery — because you test your backups, or you can’t be sure you have any!

And indeed, the first time I tested the battery for a real backup usage, it turned out to cut itself out at 70% capacity, weird! Turns out, it likely was overheating — the battery is at the bottom of a shelf in the closet, and there was no real air flow even with the built-in fan triggering. So even though the battery rating is to operate at 55°C temperature (and I assume this meant ambient temperature), and the closet itself is nowhere close to that, the BMS did jump to over 60°C just before cutting out.

I have then added a USB-powered fan, which is powered by the very same battery, just to move enough air away from the top of the battery that easily lowered the reported BMS temperature by 15°C! Running with half the usual load (turning off the NAS, because there was no reason to risk the disks on the first test), I could get the battery down to 50% without overheating or cutting off. Another test with the NAS appears to confirm the finding: a fan to move just enough air away is all it takes for the battery to operate, at least in the winter — I’ll see how this all looks like in the summer.

There is another issue: the Delta 3 Plus is actually designed to work as an UPS, intentionally. It does indeed have HID protocol support when you connect a data cable (best if a A-to-C) to one of the C ports in the front — annoyingly that does mean that you can only power one device via USB-PD. But when I tried setting this up on my TrueNAS, the kernel fails to enable the HID support:

hid-generic 0003:3746:FFFF.0004: unbalanced collection at end of report description

I saw a few other reports on a bunch of forums, and a few people saying that they managed to get it to work after a firmware update. Unfortunately I have not done any firmware update on mine in a while, because the largest design issue of all, is that the firmware update process for EcoFlow is completely broken.

It is reasonable to expect that during the firmware update, the power outlets on the battery would be cut off, causing it to turn off whatever it is connected to it. It is less expected that the battery would do so before it finished downloading the firmware image. It means that your Internet connection (ONT + Router + WiFi) needs to be outside of the battery’s power before you start the firmware update, or it will just abort midway through (thankfully, no bricking involved.)

If the firmware update coders had a little bit more care to download the firmware and necessary scripts first, then no problem would have appeared from that.

To conclude — do I regret not going for the proven and tested APC BR-1500GI? I think not. The operating temperature for that model is even lower than the EcoFlow, so it’s likely it’s going to have the same problem, if the ventilation is the problem. And running for half an hour is still a lot more than the full capacity of the APC would have been. I honestly think my only issue is that the NAS I’m using uses an AC-to-DC powerbrick, causing the inverter to do most of the work — unfortunately even though the NAS I’m using would barely fit into the USB PD specs (19V, max draw 280W), it’s well above the max power of the USB-C ports on the EcoFlow.

Top

Post by FreeBSD Newsflash via FreeBSD News Flash »

New committer: Pouria Mousavizadeh Tehrani (src)
Top

Post by FreeBSD Newsflash via FreeBSD News Flash »

New committer: Siva Mahadevan (src)
Top

2025: A Year of Advocacy, Community, and Growth

Post by FreeBSD Foundation via FreeBSD Foundation »

Engagement has been outstanding, and the overwhelmingly positive feedback reinforces what we’re seeing elsewhere: interest in FreeBSD is on the rise.

As we reflect on 2025, it is clear that this has been a transformative year for the FreeBSD Project and the FreeBSD Foundation. From expanding educational outreach and strengthening our social presence to fostering deeper connections across the global community, we continued to advance our mission of supporting FreeBSD through advocacy, visibility, and community engagement.

Thanks to the generosity of our donors and the dedication of contributors, partners, and staff, we delivered meaningful impact across advocacy, marketing, events, and collaboration. Below are the key highlights that shaped our advocacy and community efforts in 2025. 

Advocacy & Community Engagement

Throughout 2025, the Foundation expanded its role in promoting FreeBSD and supporting community growth. Our work centered on making FreeBSD more visible, accessible, and engaging for both new and experienced users.

The 2025 Community Survey, sponsored jointly by the FreeBSD Core Team and the Foundation, provided valuable insights into user needs, particularly regarding onboarding, documentation, and accessibility, which helped shape our advocacy and educational priorities for the year.

To strengthen authentic community engagement, we encouraged users to share their FreeBSD success stories through blog submissions and social channels. This storytelling helped highlight FreeBSD’s value across research, industry, and education.

A standout example was Leah Budzicka, a student who discovered the Foundation through our social media and later attended EuroBSDCon through our Travel Grant Program:
https://freebsdfoundation.org/blog/2025-eurobsdcon-trip-report-leah-budzicka/

These trip reports continue to illustrate the real-world impact of community support, mentorship, and Foundation-funded programs.

Events & Global Engagement

Throughout the year, the Foundation participated in major events across the open-source and BSD ecosystems. These gatherings strengthened relationships across the Project, provided spaces for technical collaboration, and allowed us to share FreeBSD updates with global audiences.

Key 2025 events included:

  • FreeBSD Developer & Vendor Summits — San Jose, CA
  • EuroBSDCon 2025 — Zagreb, Croatia
  • EuroBSDCon Developer Summit — Zagreb, Croatia
  • Open Source Summit North America — Denver, CO
  • BSDCan 2025 — Ottawa, Canada

A full list of events can be viewed here:
https://freebsdfoundation.org/our-work/events/past-events/

These events provided opportunities to highlight key FreeBSD Project work, including progress on FreeBSD 15, CI/CD improvements, CHERI integration, Sovereign Tech Agency collaborations, and Google Summer of Code achievements, while also supporting students, new contributors, and long-time community members.

Why This Matters

Our advocacy and community programs play a critical role in ensuring FreeBSD remains visible, inclusive, and welcoming. By listening to user needs, amplifying community stories, and showing up at events around the world, we help grow a stronger, more connected FreeBSD ecosystem.

Marketing & Advocacy: Growing the Next Generation

2025 marked a year of growth in educational outreach, communications, and global engagement. Through sustained advocacy work, we continued expanding visibility for FreeBSD and strengthening connections within the community.

Expanding Educational Content & Visibility

Across YouTube, LinkedIn, Facebook, Mastodon, Instagram, and Bluesky, we published educational content, technical explainers, interviews, and event highlights to help users learn, adopt, and explore FreeBSD.

A major milestone was the restructuring of our YouTube channel and a focus on high-production-quality technical content.

By separating meeting recordings out into a dedicated “FreeBSD Meetings” channel, we helped the YouTube algorithm to ultimately give a better experience for our viewers.

Together, these efforts helped the main FreeBSD YouTube channel grow by more than 3,000 new subscribers this year, a 50% increase. Engagement has been outstanding, and the overwhelmingly positive feedback reinforces what we’re seeing elsewhere: interest in FreeBSD is on the rise.

Additionally, we continued developing blogs, videos, and long-term learning resources designed to onboard the next generation of FreeBSD contributors.

 

Social Growth & Top Content of the Year 

Top Blogs of 2025:

Top YouTube Videos of 2025:

In 2025, we used social media to tell the FreeBSD story, highlighting community voices, technical innovation, and the work powering the project forward. Through consistent storytelling across LinkedIn and YouTube, we expanded our reach, strengthened community engagement, and brought greater visibility to technical milestones, educational content, and contributor voices. These efforts helped grow our audience, drive meaningful discussion, and connect more developers and users to the FreeBSD ecosystem. A detailed breakdown of metrics, growth, and platform performance is available in our full Social Media Year-End Report.

Corporate Donor Highlights

We are deeply grateful for the organizations that invest in FreeBSD’s future through annual contributions and sponsorships. Their support directly funds software development, infrastructure improvements, community programs, and global advocacy.

If your company is not yet a donor but recognizes the importance of investing in FreeBSD, we invite you to explore our partnership program.

A full list of 2025 supporters can be viewed here:
https://freebsdfoundation.org/donors/

Community Appreciation & Sustainable Open Source Stewardship

This year reinforced an essential truth across open source: meaningful progress only happens when communities, contributors, and organizations share responsibility for sustaining the work that supports us all.

The FreeBSD community continues to demonstrate what collaborative stewardship looks like. From maintainers and developers to documentation writers, testers, advocates, educators, sponsors, and donors, every contribution helps move the Project forward.

We are grateful for the bug reports, code reviews, travel grant stories, conference talks, documentation improvements, tutorials, and moments of mentorship that shaped 2025. Your support—whether financial, technical, or community-driven—ensures that FreeBSD remains modern, stable, and accessible to everyone who relies on it.

Thank you for helping build a stronger, more resilient, and more sustainable FreeBSD ecosystem.

 

Looking Ahead to 2026

As we enter 2026, the Foundation will continue investing in high-impact development, improving the contributor experience, strengthening global infrastructure, and expanding educational programs that empower both new and experienced users.

If you’d like to invest in our efforts, please consider donating to the Foundation. Your support, no matter the size, makes a direct impact on the work we do for the Project. Together, we are building the long-term future of FreeBSD, and we are grateful to everyone who helps make this work possible.

Donate to FreeBSD Foundation | FreeBSD Foundation

 

Written by Florine Kamdem

 

The post 2025: A Year of Advocacy, Community, and Growth first appeared on FreeBSD Foundation.

Top

Installing and using SearXNG in Gentoo Linux

Post by Nathan Zachary via The Z-Issue »

Introduction

Searching the internet has been both increasingly cumbersome and frightening due to privacy concerns with many of the major search engine providers (such as Google or Bing). Thankfully there are some other good options like Startpage, Qwant, and Mojeek. Some of them use results provided by the major providers like Google, and some of them are more independent. However, another option exists, and that’s to use an application like SearXNG that acts as a meta-search engine, “aggregating the results of other search engines” without “storing information about its users”.

I started using SearXNG quite some time ago by choosing a public instance, but have recently gone a bit further and installed my own self-hosted version of it on one of my Gentoo Linux servers. In this article, I’m going to outline the process of installing, configuring, and running a self-hosted SearXNG instance along with some troubleshooting tips and “gotchas” to avoid. Though the details are specific to Gentoo Linux, the concepts should be readily applicable to other Linux distributions.

For my setup, I chose to install SearXNG in the uWSGI application server and proxy it via the Apache web server using the mod_proxy_uwsgi module. The flow of data follows the following design:

For the remainder of this article, I will use the pretend domain name of my-secret-search-engine.com. Any place where that domain is listed, replace it with your respective domain name or IP address of your server.

Installation – Prerequisites

To start, SearXNG should run as a system user, so that user should be created accordingly:

useradd -s /bin/bash --system -m --home-dir /usr/local/searxng searxng

Now switch to that new user and create a Python virtual environment (venv) for installing and running the application and all of its dependencies. The Python venv is isolated from the overall system installation of Python so that there aren’t any conflicts with the system’s Python interpreter or module versions.

su - searxng
python -m venv /usr/local/searxng/searxng-pyvenv

The Python virtual environment needs to be activated in order to use it. It’s helpful to automatically activate it when switching to the ‘searxng’ user, which can be done by putting it in that user’s .bashrc:

echo "source /usr/local/searxng/searxng-pyvenv/bin/activate" >> /usr/local/searxng/.bashrc

To make sure that the automatic activation is working as intended, switch back to the root account and then back to the ‘searxng’ user:

exit
su - searxng

If the venv is activated, the name of the venv should be displayed before the standard BASH prompt:

# su - searxng
Last login: Thu Oct 24 14:52:00 UTC 2025 on pts/1
(searxng-pyvenv) searxng@my-secret-search ~ $

SearXNG has some prerequisite Python modules that need to be installed, so install them using Python’s own package manager, Pip:

pip install --upgrade pip setuptools wheel pyyaml msgspec

To see the modules and versions that are currently installed in the virtual environment, the freeze subcommand can be issued in Pip:

$ pip freeze
PyYAML==6.0.3
setuptools==80.9.0
wheel==0.45.1
msgspec==0.19.0

Installation – SearXNG application

SearXNG doesn’t currently offer packaged “releases”, so the way to install it is to clone their Git repository and build the application from that clone:

mkdir -p /usr/local/searxng/searxng-pyvenv/source/
git clone "https://github.com/searxng/searxng" "/usr/local/searxng/searxng-pyvenv/source"
cd /usr/local/searxng/searxng-pyvenv/source/
pip install --use-pep517 --no-build-isolation -e .

After the installation finishes, there will be many more modules listed in Pip (the exact modules and versions may change with subsequent SearXNG versions):

$ pip freeze
anyio==4.11.0
async-timeout==5.0.1
babel==2.17.0
blinker==1.9.0
Brotli==1.1.0
certifi==2025.10.5
click==8.3.0
fasttext-predict==0.9.2.4
Flask==3.1.2
flask-babel==4.0.0
h11==0.16.0
h2==4.3.0
hpack==4.1.0
httpcore==1.0.9
httpx==0.28.1
httpx-socks==0.10.0
hyperframe==6.1.0
idna==3.11
isodate==0.7.2
itsdangerous==2.2.0
Jinja2==3.1.6
lxml==6.0.2
markdown-it-py==3.0.0
MarkupSafe==3.0.3
mdurl==0.1.2
msgspec==0.19.0
Pygments==2.19.2
python-dateutil==2.9.0.post0
python-socks==2.7.2
pytz==2025.2
PyYAML==6.0.3
setproctitle==1.3.7
setuptools==80.9.0
six==1.17.0
sniffio==1.3.1
typer-slim==0.19.2
typing_extensions==4.14.1
valkey==6.1.1
Werkzeug==3.1.3
wheel==0.45.1
whitenoise==6.11.0

Installation – uWSGI application server

Now that the SearXNG application itself has been installed, it’s time to install the application server (before proceeding to configure both the application server and SearXNG itself). I chose to go with uWSGI. Since uWSGI supports many different application languages and various plugins, and seeing as they can be easily configured with Gentoo’s USE flags, they should be set before installing uWSGI:

# grep uwsgi /etc/portage/package.use 
www-servers/uwsgi -embedded -php python UWSGI_PLUGINS: -carbon -http -mongodblog -nagios -redislog -rrdtool pam

# emerge -av uwsgi

With the uWSGI server installed, it can be started automatically at boot time using Gentoo’s OpenRC init scripts:

cd /etc/conf.d
cp -v uwsgi uwsgi.searxng
ln -s /etc/init.d/uwsgi{,.searxng}
rc-update add uwsgi.searxng default

The above commands make a copy of the uWSGI configuration file specifically for SearXNG, and then create a new symlink of the uWSGI init script as /etc/init.d/uwsgi.searxng. Lastly, that new uwsgi.searxng init script is started at the default runlevel during the boot process.

Configuration – uWSGI application server

With both the SearXNG application and the uWSGI application server installed, it’s time to configure both of them accordingly. We’ll start with the uWSGI application server as it is more straightforward. First, we will copy the uWSGI template provided by SearXNG to the overall system location:

cp -v /usr/local/searxng/searxng-pyvenv/source/utils/templates/etc/uwsgi/apps-available/searxng.ini /etc/searxng/searxng.ini

Second, we will edit the uWSGI startup configuration to call this file:

echo 'UWSGI_EXTRA_OPTIONS="--ini /etc/searxng/searxng.ini"' >> /etc/conf.d/uwsgi.searxng

The full configuration file (excluding comments and blank lines) should look similar to the output below. The only other change that I made was to add a path for the log file. As such, the lines that I changed are in purple italics here, but feel free to make other changes for your particular setup or needs:

# grep -v "^#\|^$" /etc/conf.d/uwsgi.searxng 
UWSGI_SOCKET=
UWSGI_THREADS=0
UWSGI_PROGRAM=
UWSGI_XML_CONFIG=
UWSGI_PROCESSES=1
UWSGI_LOG_FILE=/var/log/uwsgi.log
UWSGI_CHROOT=
UWSGI_DIR=
UWSGI_PIDPATH_MODE=0750
UWSGI_USER=
UWSGI_GROUP=
UWSGI_EMPEROR_PATH=
UWSGI_EMPEROR_PIDPATH_MODE=0770
UWSGI_EMPEROR_GROUP=
UWSGI_EXTRA_OPTIONS="--ini /etc/searxng/searxng.ini"

Configuration – SearXNG application

With uWSGI being configured, it’s time to configure the SearXNG application itself. The configurations for it are handled by two separate files:

  • /etc/searxng/searxng.ini –> settings for running SearXNG as an application in uWSGI
  • /etc/searxng/settings.yml –> configuration options for the application itself

First, make the directory for storing these two settings files and copy them from the SearXNG sources:

mkdir -p /etc/searxng/
cp -v /usr/local/searxng/searxng-pyvenv/source/utils/templates/etc/uwsgi/apps-available/searxng.ini /etc/searxng/
cp -v /usr/local/searxng/searxng-pyvenv/source/utils/templates/etc/searxng/settings.yml /etc/searxng/
There are two versions of the settings.yml file that can be used:

/usr/local/searxng/searxng-pyvenv/source/utils/templates/etc/searxng/settings.yml
OR
/usr/local/searxng/searxng-pyvenv/source/searx/settings.yml

The first one (and the one used here) is much more compact and basically sets the defaults for most things, allowing for overrides where desired. I would strongly suggest using this first template unless you have a very specific reason to use the full one.

Starting with /etc/searxng/searxng.ini (which again is for configuring how the application will run inside the uWSGI server), here are the settings I suggest (pay close attention to the settings in purple italics as they are pertinent):

# grep -v "^#\|^$" /etc/searxng/searxng.ini 
[uwsgi]
uid = searxng
gid = searxng
env = LANG=C.UTF-8
env = LANGUAGE=C.UTF-8
env = LC_ALL=C.UTF-8
chdir = /usr/local/searxng/searxng-pyvenv/source/searx/ 
env = SEARXNG_SETTINGS_PATH=/etc/searxng/settings.yml
disable-logging = true
chmod-socket = 666
single-interpreter = true
master = true
lazy-apps = true
plugin = python313,asyncio313
enable-threads = true
workers = ${UWSGI_WORKERS:-%k}
threads = ${UWSGI_THREADS:-4}
module = searx.webapp
virtualenv = /usr/local/searxng/searxng-pyvenv
pythonpath = /usr/local/searxng/searxng-pyvenv/source/searxng
socket = /usr/local/searxng/run/socket
buffer-size = 8192
offload-threads = %k

Now for the SearXNG settings themselves (in /etc/searxng/settings.yml), the template yields the following options by default:

# grep -v "^#\|^  #\|^$" /usr/local/searxng/searxng-pyvenv/source/utils/templates/etc/searxng/settings.yml
use_default_settings: true
general:
  debug: false
  instance_name: "SearXNG"
search:
  safe_search: 2
  autocomplete: 'duckduckgo'
  formats:
    - html
server:
  secret_key: "ultrasecretkey"
  limiter: true
  image_proxy: true
valkey:
  url: valkey://localhost:6379/0

The only option that MUST be changed is the ‘secret_key’, and it can be done easily with:

sed -i -e "s/ultrasecretkey/$(openssl rand -hex 16)/g" /etc/searxng/settings.yml

There are many other options that can be set or unset, and they are fairly well documented. Here’s an example settings.yml file with some of the settings that I personally prefer, followed by a brief explanation of them:

# grep -v "^#\|^  #\|^$" /etc/searxng/settings.yml 
use_default_settings: true
general:
  debug: false
  instance_name: "My Secret Search Engine"
  enable_metrics: false
search:
  safe_search: 0
  autocomplete: ""
  formats:
    - html
server:
  secret_key: "YOUR_RANDOM_KEY"
  limiter: false
  image_proxy: true
  http_protocol_version: "1.1"
  method: "GET"
ui:
  theme_args:
    simple_style: black
  url_formatting: full
OptionExplanation
instance_name:Setting it to your site's name will display it in the browser's title bar
enable_metrics: falseVarious anonymous metrics; disabled for even better anonymity
safe_search: 0Disables all "safe search" filtering
autocomplete: ""Which autocomplete backend to use; in this case none
image_proxy: trueUses your instance to proxy images for better anonymity
method: "GET"Favours some ease of use over the more private "POST"
url_formatting: fullShows the full URL of all links instead of a breadcrumb ("pretty")
Pay special attention to the ‘use_default_settings:’ declaration. I have included some additional syntax information about it in the “Troubleshooting and Gotchas” section at the bottom of the article.

Configuration – Apache web server

Now that both the uWSGI application server and the SearXNG application itself have been installed and configured, the last step is to proxy through the Apache web server.

Though uWSGI can be set up to handle HTTP requests directly—thus removing the need for Apache or a different web server—I prefer to keep it as a backend and let a dedicated web server manage HTTP connections.

Doing so requires two Apache modules: mod_proxy and mod_proxy_uwsgi. Linux distributions have different methods of enabling Apache modules, so consult your distribution’s documentation on doing so. In Gentoo, it is done by adding “proxy” and “proxy_uwsgi” to APACHE2_MODULES and re-emerging it.

It’s also important to load mod_proxy BEFORE mod_proxy_uwsgi, so make sure that the order is correct in the module-loading section of /etc/apache2/httpd.conf:

# grep proxy /etc/apache2/httpd.conf 
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so

As for the Apache vhost configuration, it is likely quite similar to any other site you have configured (and generic vhost configuration is outside the scope of this article). The parts that are specific to SearXNG are the proxy directives. Assuming that SearXNG is going to be accessed at the root of the domain, the proxy directives should look like:

## Removed these main directives from <Location> block for Certbot.
## This allows bypassing the proxy for the .well-known/ subdirectory for LetsEncrypt
        ProxyPreserveHost On
        ProxyPass /.well-known/ !
        ProxyPass / unix:/usr/local/searxng/run/socket|uwsgi://localhost/

        RequestHeader set X-Forwarded-Proto %{REQUEST_SCHEME}s
        RequestHeader set X-Script-Name /searxng
        RequestHeader set X-Real-IP %{REMOTE_ADDR}s
        RequestHeader append X-Forward-For %{REMOTE_ADDR}s

The ‘ProxyPass’ line in purple is the one that is responsible for proxying the HTTP request via UNIX socket to the uWSGI application server and vice-versa. After reloading Apache, your SearXNG instance should now be accessible. If it isn’t, you may find some additional pointers in the “Troubleshooting and Gotchas” section at the bottom of this article.

20260106 Update:
In the Apache vhost configuration above, I removed the whole block from the <Location> tags so that I could add in a bypass for the proxy (the line in orange). This allows for Certbot to renew the SSL certificate since that particular subdirectory is excluded from the proxied uWSGI application.

Updating the SearXNG application

As previously mentioned, SearXNG doesn’t publish releases so updating involves pulling down the latest Git master branch, updating dependencies, and then rebuilding. There are many different methods for performing these updates in Git, but my approach is:

su - searxng
cd /usr/local/searxng/searxng-pyvenv/source
git pull origin master
pip install --upgrade pip setuptools wheel pyyaml msgspec
pip install --upgrade --use-pep517 --no-build-isolation -e .
exit
/etc/init.d/uwsgi.searxng restart

The steps outlined in the code block above will:

  • Switch to the ‘searxng’ user, which will activate the Python virtual environment (assuming you followed the instructions in the ‘Installation – Prerequisites’ section of this article)
  • Change to the SearXNG source directory (Git)
  • Pull the latest files from SearXNG’s Git master branch
  • Use pip to update the dependencies
  • Use pip to rebuild the application using the latest sources
  • Switch back from the ‘searxng’ user back to root (“exit”)
  • Restart the uWSGI application server containing the SearXNG application

After these steps, SearXNG should be the latest version. This can be validated by checking the following line in the footer of the page. For example:

Powered by SearXNG – 2025.10.24+2cdbbb249

That line should show the date of the pull and the first 9 characters of the latest commit that was pulled.

Updating – Rolling back

In case a particular update causes a problem, it can be readily rolled back to the previous version you had installed by performing a git reset:

su - searxng
cd /usr/local/searxng/searxng-pyvenv/source
git reset --keep HEAD@{1}
pip install --upgrade --use-pep517 --no-build-isolation -e .
exit
/etc/init.d/uwsgi.searxng restart

Troubleshooting and Gotchas

If you run into problems with the installation or configuration steps throughout this article, some of the more common errors and pitfalls are listed here, separated into sections based on where the problem lies.

SearXNG application

The SearXNG settings are documented quite well, but I did run into a particular syntax discrepancy that caused unexpected results. When using the use_default_settings directive, there is a syntax difference based on whether or not any of the search engines will be modified.

If no engine modifications will be made:

WORKS:

use_default_settings: true

FAILS:

use_default_settings:

If, however, any engine modifications are present, the true value must be dropped.

WORKS:

use_default_settings:
  engines:
    remove:
      - google

FAILS:

use_default_settings: true
  engines:
    remove:
      - google

In the ‘fails’ scenarios, the uWSGI log will show errors related to various Python scripts with these lines being at or near the end of the trace:

File "/usr/local/searxng/searxng-pyvenv/source/searx/settings_loader.py", line 218, in load_settings
user_cfg = load_yaml(cfg_file)
File "/usr/local/searxng/searxng-pyvenv/source/searx/settings_loader.py", line 48, in load_yaml
raise SearxSettingsException(e, str(file_name)) from e
searx.exceptions.SearxSettingsException: mapping values are not allowed here
in "/etc/searxng/settings.yml", line 5, column 10
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***

uWSGI application server

If the following error message appears in the uWSGI log:

bind(): No such file or directory [core/socket.c line 230]

it is likely that the path to the UNIX socket is not present or that the permissions are incorrect. Check the ‘socket =’ line in /etc/searxng/searxng.ini and make sure the path is there and that the permissions are 755 owned by the ‘searxng’ user:

# ls -lhd /usr/local/searxng/run/
drwxr-xr-x 2 searxng searxng 4.0K Oct 24 17:38 /usr/local/searxng/run/

Apache web server

Though the Apache vhost configuration for SearXNG is essentially just the proxy section listed above, there are many syntax errors that can arise from it. The ProxyPass line—which passes HTTP requests to the UNIX socket—can be particularly finicky about syntax:

ProxyPass unix:/usr/local/searxng/run/socket|uwsgi://localhost/

I found that only specifying the ‘uwsgi://’ protocol resulted in the application failing. In my case, I needed it to specifically reference ‘localhost’. As such, the following ProxyPass directive did not work for me:

ProxyPass unix:/usr/local/searxng/run/socket|uwsgi://
Top

Valuable News – 2026/01/05

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX/BSD/Linux systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

The Usual Suspects section at the end is permanent and have links to other sites with interesting UNIX/BSD/Linux news.

Past releases are available at the dedicated NEWS page.

UNIX

FreeBSD vs Linux – Which is Better.
https://netdata.cloud/academy/freebsd-vs-linux/

Infrastructure Modernization – Commissioned by Sovereign Tech Agency.
https://freebsdfoundation.org/blog/infrastructure-modernization-commissioned-by-the-sovereign-tech-agency/

OpenBSD Stories – When Driver Challenges Kernel Assumptions.
http://miod.online.fr/software/openbsd/stories/udl.html

FreeBSD Git Weekly: 2025-12-22 to 2025-12-28.
https://freebsd-git-weekly.tarsnap.net/2025-12-22.html

Set It and Forget It – Monit on FreeBSD in Minutes.
https://youtube.com/watch?v=ZkM228fbykU

39C3 – Escaping Containment – Security Analysis of FreeBSD Jails.
https://media.ccc.de/v/39c3-escaping-containment-a-security-analysis-of-freebsd-jails

HardenedBSD 2025/12 Status Report.
https://hardenedbsd.org/article/shawn-webb/2025-12-28/hardenedbsd-december-2025-status-report

OpenBSD fw_update(8) Now Checks dmesg(8) Output in Addition to dmesg.boot File.
https://undeadly.org/cgi?action=article;sid=20251230094932

FreeBSD 15.0 – Composable by Design.
https://youtube.com/watch?v=gvJc5qHVLzg

Thank You for Amazing Year – Happy New Year from Gary.
https://youtube.com/watch?v=KZgZaBxrAG0

Updates to pf(4) Packet Filter in FreeBSD and pfSense Software.
https://netgate.com/blog/updates-to-the-pf-packet-filter-in-freebsd-and-pfsense-software

FreeBSD Driver for ws2812 RGP LED String.
http://ketas.si.pri.ee/misc/ws2812/ws2812.html

FreeBSD Net Autotuner – Dynamically Adjust TCP Stack/Congestion Control Algorithm/Buffers/Queues.
https://github.com/geobarrod/FBSD-Net-Autotuner

Send Your HDD and Get ZFS VPS on It.
https://zfs.rent/

Managing FreeBSD Jails with Ansible with jailexec Connection Plugin.
https://blog.hofstede.it/managing-freebsd-jails-with-ansible-the-jailexec-connection-plugin/

Devuan 6.1 Released Init Freedom without systemd.
https://phoronix.com/news/Devuan-6.1-Released

IceWM 4.0 Improves [ALT]-[TAB] Window Switcher/Alpha Blending/32bit RGBA Default.
https://phoronix.com/news/IceWM-4.0-Released

Sentinel Immune – Biological Immunity for IT Security on DragonflyBSD.
https://dev.to/dmitry_labintcev_9e611e04/sentinel-immune-biological-immunity-for-it-security-279f
https://github.com/DmitrL-dev/AISecurity

Samba Jail Made with FreeBSD AppJail.
https://github.com/ab-ten/smbjail

WebZFS is Modern Web Based Management Interface for ZFS Pools/Datasets/Snapshots/S.M.A.R.T Monitoring.
https://github.com/webzfs/webzfs

AMIGA Desktops Worth Seeing.
https://datagubbe.se/wbshots/

AMIGA 3000 UNIX and Sun Microsystems.
https://datagubbe.se/amix/

FreeBSD Runs Perfectly on 16 Years Old Laptop.
https://lemmy.sdf.org/post/48417779

FreeBSD Upgrade to 15.
https://euroquis.nl/freebsd/2026/01/02/freebsd.html

FreeBSD 14 to 15 Upgrade (Intel).
https://euroquis.nl/freebsd/2026/01/03/freebsd.html

BSD Weekly – Issue 260.
https://bsdweekly.com/issues/260

BSD Now 644 – Holidays 2025 – What You Neen Doin?
https://www.bsdnow.tv/644

On Building Ansible Training Environment on FreeBSD. [2019]
https://jpmens.net/2019/12/11/on-building-an-ansible-training-environment-on-freebsd/

Fixing Buffer Overflow in UNIX V4 Like It is 1973.
https://sigma-star.at/blog/2025/12/unix-v4-buffer-overflow/

How to Install FreeBSD 15.0.
https://youtube.com/watch?v=JSTFpe70tOo

Can I Finally Start Using Wayland in 2026?
https://michael.stapelberg.ch/posts/2026-01-04-wayland-sway-in-2026/

GhostBSD – Step by Step Install.
https://youtube.com/watch?v=gjw2OykX5_o

Hardware

New in Collection – Part 5 – New Hermes NHI 810.
https://newsletter.shifthappens.site/archive/new-in-the-collection-pt-5-new-hermes-nhi-810/

Cameras and Lenses – Bartosz Ciechanowski.
https://ciechanow.ski/cameras-and-lenses/

Samsung SDI Batteries with 600 Mile Range That Charge in 9 Minutes Ready for Production.
https://goodnewsnetwork.org/samsungs-600-mile-range-batteries-that-charge-in-9-minutes-ready-for-production-sale-next-year/

Why One Man is Fighting for Our Right to Control Our Garage Door Openers.
https://nytimes.com/2025/12/04/technology/personaltech/why-one-man-is-fighting-for-our-right-to-control-our-garage-door-openers.html

2026 Dodge Durango Drops V6 and Goes V8 Only Across Entire Lineup.
https://caranddriver.com/news/a65656950/2026-dodge-durango-v8-engine-only/

Life

Between Then and Now.
https://my-notes.dragas.net/2025/12/29/between-then-and-now/

2025 State of Men UK Report.
https://beyondequality.org/blog-posts/state-of-men-uk-report

Other

FFmpeg Developer Files DMCA Against Rockchip After 2 Year Wait for License Fix.
https://it.slashdot.org/story/25/12/26/193244/ffmpeg-developer-files-dmca-against-rockchip-after-two-year-wait-for-license-fix

Web Browsers Have Stopped Blocking Pop Ups.
https://smokingonabike.com/2025/12/31/web-browsers-have-stopped-blocking-pop-ups/

I Tried Servo – Undercover Web Browser Engine Made with Rust.
https://spacebar.news/servo-undercover-web-browser-engine/

GOG is Getting Acquired by Its Original Cofounder.
https://gog.com/blog/gog-is-getting-acquired-by-its-original-co-founder-what-it-means-for-you/

Heroes ]I[ – Horn of the Abyss – New Bulwark City.
https://youtube.com/watch?v=lfbJF3YHRgo

Windows XP/Vista/7/8.1/10/11 Speed Test.
https://youtube.com/watch?v=7VZJO-hOT4c&t=862s

Usual Suspects

BSD Weekly.
https://bsdweekly.com/

DiscoverBSD.
https://discoverbsd.com/

BSDSec.
https://bsdsec.net/

DragonFly BSD Digest.
https://dragonflydigest.com/

FreeBSD Patch Level Table.
https://bokut.in/freebsd-patch-level-table/

FreeBSD End of Life Date.
https://endoflife.date/freebsd

Phoronix BSD News Archives.
https://phoronix.com/linux/BSD

OpenBSD Journal.
https://undeadly.org/

Call for Testing.
https://callfortesting.org/

Call for Testing – Production Users Call.
https://youtube.com/@callfortesting/videos

BSD Now Weekly Podcast.
https://www.bsdnow.tv/

Nixers Newsletter.
https://newsletter.nixers.net/entries.php

BSD Cafe Journal.
https://journal.bsd.cafe/

DragonFly BSD Digest – Lazy Reading – In Other BSDs.
https://dragonflydigest.com

BSDTV.
https://bsky.app/profile/bsdtv.bsky.social

FreeBSD Git Weekly.
https://freebsd-git-weekly.tarsnap.net/

FreeBSD Meetings.
https://youtube.com/@freebsdmeetings

BSDJedi.
https://youtube.com/@BSDJedi/videos

RoboNuggie.
https://youtube.com/@RoboNuggie/videos

GaryHTech.
https://youtube.com/@GaryHTech/videos

Sheridan Computers.
https://youtube.com/@sheridans/videos

82MHz.
https://82mhz.net/

EOF
Top

Linux kernel security work

Post by Greg Kroah-Hartman via Linux Kernel Monkey Log »

Lots of the CVE world seems to focus on “security bugs” but I’ve found that it is not all that well known exactly how the Linux kernel security process works. I gave a talk about this back in 2023 and at other conferences since then, attempting to explain how it works, but I also thought it would be good to explain this all in writing as it is required to know this when trying to understand how the Linux kernel CNA issues CVEs.

Top

Fwd: The "60 Minutes" segment about the CECOT prison that was pulled last minute

Post by Sebastian Pipping via Hartwork Blog »

When I tried watching The 60 Minutes Story The Trump Administration Doesn't Want You To See from my bookmarks today, I got error…

Video unavailable

This video is no longer available due to a copyright claim by Paramount Global companies[.]

…and so below you can find a re-upload if you also are curious what the pulled video is about:

Original title: The 60 Minutes story the Trump regime did not want you to see

For additional context:

Original title: Chris Murphy: Trump Has Taken 'Editorial Control Of CBS' After 60 Minutes Pulls Critical Segment

Top

Happy 16th Birthday, KrebsOnSecurity.com!

Post by Brian Krebs via Krebs on Security »

KrebsOnSecurity.com celebrates its 16th anniversary today! A huge “thank you” to all of our readers — newcomers, long-timers and drive-by critics alike. Your engagement this past year here has been tremendous and truly a salve on a handful of dark days. Happily, comeuppance was a strong theme running through our coverage in 2025, with a primary focus on entities that enabled complex and globally-dispersed cybercrime services.

Image: Shutterstock, Younes Stiller Kraske.

In May 2024, we scrutinized the history and ownership of Stark Industries Solutions Ltd., a “bulletproof hosting” provider that came online just two weeks before Russia invaded Ukraine and served as a primary staging ground for repeated Kremlin cyberattacks and disinformation efforts. A year later, Stark and its two co-owners were sanctioned by the European Union, but our analysis showed those penalties have done little to stop the Stark proprietors from rebranding and transferring considerable network assets to other entities they control.

In December 2024, KrebsOnSecurity profiled Cryptomus, a financial firm registered in Canada that emerged as the payment processor of choice for dozens of Russian cryptocurrency exchanges and websites hawking cybercrime services aimed at Russian-speaking customers. In October 2025, Canadian financial regulators ruled that Cryptomus had grossly violated its anti-money laundering laws, and levied a record $176 million fine against the platform.

In September 2023, KrebsOnSecurity published findings from researchers who concluded that a series of six-figure cyberheists across dozens of victims resulted from thieves cracking master passwords stolen from the password manager service LastPass in 2022. In a court filing in March 2025, U.S. federal agents investigating a spectacular $150 million cryptocurrency heist said they had reached the same conclusion.

Phishing was a major theme of this year’s coverage, which peered inside the day-to-day operations of several voice phishing gangs that routinely carried out elaborate, convincing, and financially devastating cryptocurrency thefts. A Day in the Life of a Prolific Voice Phishing Crew examined how one cybercrime gang abused legitimate services at Apple and Google to force a variety of outbound communications to their users, including emails, automated phone calls and system-level messages sent to all signed-in devices.

Nearly a half-dozen stories in 2025 dissected the incessant SMS phishing or “smishing” coming from China-based phishing kit vendors, who make it easy for customers to convert phished payment card data into mobile wallets from Apple and Google. In an effort to wrest control over this phishing syndicate’s online resources, Google has since filed at least two John Doe lawsuits targeting these groups and dozens of unnamed defendants.

In January, we highlighted research into a dodgy and sprawling content delivery network called Funnull that specialized in helping China-based gambling and money laundering websites distribute their operations across multiple U.S.-based cloud providers. Five months later, the U.S. government sanctioned Funnull, identifying it as a top source of investment/romance scams known as “pig butchering.”

Image: Shutterstock, ArtHead.

In May, Pakistan arrested 21 people alleged to be working for Heartsender, a phishing and malware dissemination service that KrebsOnSecurity first profiled back in 2015. The arrests came shortly after the FBI and the Dutch police seized dozens of servers and domains for the group. Many of those arrested were first publicly identified in a 2021 story here about how they’d inadvertently infected their computers with malware that gave away their real-life identities.

In April, the U.S. Department of Justice indicted the proprietors of a Pakistan-based e-commerce company for conspiring to distribute synthetic opioids in the United States. The following month, KrebsOnSecurity detailed how the proprietors of the sanctioned entity are perhaps better known for operating an elaborate and lengthy scheme to scam westerners seeking help with trademarks, book writing, mobile app development and logo designs.

Earlier this month, we examined an academic cheating empire turbocharged by Google Ads that earned tens of millions of dollars in revenue and has curious ties to a Kremlin-connected oligarch whose Russian university builds drones for Russia’s war against Ukraine.

An attack drone advertised on a website hosted in the same network as Russia’s largest private education company — Synergy University.

As ever, KrebsOnSecurity endeavored to keep close tabs on the world’s biggest and most disruptive botnets, which pummeled the Internet this year with distributed denial-of-service (DDoS) assaults that were two to three times the size and impact of previous record DDoS attacks.

In June, KrebsOnSecurity.com was hit by the largest DDoS attack that Google had ever mitigated at the time (we are a grateful guest of Google’s excellent Project Shield offering). Experts blamed that attack on an Internet-of-Things botnet called Aisuru that had rapidly grown in size and firepower since its debut in late 2024. Another Aisuru attack on Cloudflare just days later practically doubled the size of the June attack against this website. Not long after that, Aisuru was blamed for a DDoS that again doubled the previous record.

In October, it appeared the cybercriminals in control of Aisuru had shifted the botnet’s focus from DDoS to a more sustainable and profitable use: Renting hundreds of thousands of infected Internet of Things (IoT) devices to proxy services that help cybercriminals anonymize their traffic.

However, it has recently become clear that at least some of the disruptive botnet and residential proxy activity attributed to Aisuru last year likely was the work of people responsible for building and testing a powerful botnet known as Kimwolf. Chinese security firm XLab, which was the first to chronicle Aisuru’s rise in 2024, recently profiled Kimwolf as easily the world’s biggest and most dangerous collection of compromised machines — with approximately 1.83 million devices under its thumb as of December 17.

XLab noted that the Kimwolf author “shows an almost ‘obsessive’ fixation on the well-known cybersecurity investigative journalist Brian Krebs, leaving easter eggs related to him in multiple places.”

Image: XLab, Kimwolf Botnet Exposed: The Massive Android Botnet with 1.8 million infected devices.

I am happy to report that the first KrebsOnSecurity stories of 2026 will go deep into the origins of Kimwolf, and examine the botnet’s unique and highly invasive means of spreading digital disease far and wide. The first in that series will include a somewhat sobering and global security notification concerning the devices and residential proxy services that are inadvertently helping to power Kimwolf’s rapid growth.

Thank you once again for your continued readership, encouragement and support. If you like the content we publish at KrebsOnSecurity.com, please consider making an exception for our domain in your ad blocker. The ads we run are limited to a handful of static images that are all served in-house and vetted by me (there is no third-party content on this site, period). Doing so would help further support the work you see here almost every week.

And if you haven’t done so yet, sign up for our email newsletter! (62,000 other subscribers can’t be wrong, right?). The newsletter is just a plain text email that goes out the moment a new story is published. We send between one and two emails a week, we never share our email list, and we don’t run surveys or promotions.

Thanks again, and Happy New Year everyone! Be safe out there.

Top

Valuable News – 2025/12/29

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

The Valuable News weekly series is dedicated to provide summary about news, articles and other interesting stuff mostly but not always related to the UNIX/BSD/Linux systems. Whenever I stumble upon something worth mentioning on the Internet I just put it here.

Today the amount information that we get using various information streams is at massive overload. Thus one needs to focus only on what is important without the need to grep(1) the Internet everyday. Hence the idea of providing such information ‘bulk’ as I already do that grep(1).

The Usual Suspects section at the end is permanent and have links to other sites with interesting UNIX/BSD/Linux news.

Past releases are available at the dedicated NEWS page.

UNIX

FreeBSD 15 Version of PF Has Basically Caught Up to OpenBSD.
https://utcc.utoronto.ca/~cks/space/blog/unix/FreeBSDPFHasCaughtUp

Updates to pf(4) Packet Filter in FreeBSD and pfSense Software.
https://netgate.com/blog/updates-to-the-pf-packet-filter-in-freebsd-and-pfsense-software

XLibre 25.1 – Future of X11 Adds New Platforms and New Features.
https://x.com/LundukeJournal/status/2003182372100145594

Lets Run FreeBSD 15.0-RELEASE on Raspberry Pi Zero 2W.
https://briancallahan.net/blog/20251216.html

Wireguard FreeBSD Way.
https://blog.feld.me/posts/2025/12/wireguard-freebsd-way/

BSD Now 642: Look Harder.
https://www.bsdnow.tv/642

Moving from Windows to FreeBSD as Linux Chaos Alternative.
https://hackaday.com/2025/11/11/moving-from-windows-to-freebsd-as-the-linux-chaos-alternative/

FreeBSD Foundation 2025 Software Development and Infrastructure Support.
https://freebsdfoundation.org/blog/2025-software-development-and-infrastructure-support/

The pkgsrc 2025Q4 is Released.
https://bsdsec.net/articles/pkgsrc-2025q4-released

Lets Setup monitord on FreeBSD.
https://youtube.com/watch?v=WMX9u7We3ys

Initial Analysis of Discovered UNIX V4 Tape.
https://spinellis.gr/blog/20251223/

UNIX V4 Tape Successfully Recovered.
https://theregister.com/2025/12/23/unix_v4_tape_successfully_recovered/

Finally Upgraded Fleet to FreeBSD 15.
https://rubenerd.com/finally-upgraded-to-freebsd-15/

FreeBSD Home NAS – Part 1 – Configuring ZFS Mirror (RAID1).
https://rtfm.co.ua/en/freebsd-home-nas-part-1-configuring-zfs-mirror-raid1/

FreeBSD Home NAS – Part 2 – Introduction to Packet Filter (PF) Firewall.
https://rtfm.co.ua/en/freebsd-home-nas-part-2-introduction-to-packet-filter-pf-firewall/

FreeBSD Home NAS – Part 3 – WireGuard VPN/Linux Peer/Routing.
https://rtfm.co.ua/en/freebsd-home-nas-part-3-wireguard-vpn-linux-peer-and-routing/

FreeBSD Home NAS – Part 4 – Local DNS with Unbound.
https://rtfm.co.ua/en/freebsd-home-nas-part-4-local-dns-with-unbound/

FreeBSD Home NAS – Part 5 – ZFS Pool/Datasets/Snapshots/Monitoring.
https://rtfm.co.ua/en/freebsd-home-nas-part-5-zfs-pool-datasets-snapshots-and-zfs-monitoring/

FreeBSD Home NAS – Part 6 – Samba Server and Client Connections.
https://rtfm.co.ua/en/freebsd-home-nas-part-6-samba-server-and-client-connections/

XLibre XServer 25.1 Changes.
https://github.com/X11Libre/xserver/wiki/XLibre-XServer-25.1-Changes

Streaming HiFi Audio from FreeBSD NAS to OpenBSD Playback Machine Using MPD and sndio.
https://vincentdelft.be/post/post_20251225

Phoenix is New X11 Server Written from Scratch in Zig.
https://git.dec05eba.com/phoenix/about/

OpenBSD Games Database.
https://github.com/playonbsd/OpenBSD-Games-Database

The n8n on NetBSD.
https://drsaracco.wordpress.com/2025/12/25/n8n-netbsd/

How to Automatically Start or Reattach to tmux(1) Session with SSH.
https://rkta.de/ssh-tmux-reattach.html

Linux Foundation Makes $300 Million in 2025 and Spends 2.6% on Linux.
https://rumble.com/v73dyp6-linux-foundation-makes-300-million-in-2025-spends-2.6-on-linux-says-ai-is-t.html

FreeBSD Git Weekly: 2025-12-15 to 2025-12-21.
https://freebsd-git-weekly.tarsnap.net/2025-12-15.html

FreeBSD Laptop and Desktop Workgroup – Call 13.
https://youtube.com/watch?v=NNKFHEZw3eA

The ssh-agent(1) Broken in tmux(1) Resolved.
https://blogsystem5.substack.com/p/ssh-agent-switcher-release

Critical n8n Flaw (CVSS 9.9) Enables Arbitrary Code Execution Across Thousands of Instances.
https://thehackernews.com/2025/12/critical-n8n-flaw-cvss-99-enables.html

My Journey into FreeBSD and Glorious Manual – Love Story.
https://andreiclinciu.net/freebsd-experience/

BSD Now 643: Unwrapping Gifts.
https://www.bsdnow.tv/643

All Aboard 15.0-RELEASE Train!
https://vulcanridr.mataroa.blog/blog/all-aboard-the-150-release-train/

Basic nc(1) Commands.
https://drsaracco.wordpress.com/2013/06/20/basic-netcat-commands/

Fast fastcompmgr(1) Compositor for X11.
https://github.com/tycho-kirchner/fastcompmgr

XLibre Xserver 25.1.0 and 25.0.x XLibre Drivers in FreeBSD Ports.
https://ports.freebsd.org/cgi/ports.cgi?query=xlibre&sektion=x11

WebZFS is ZFS Web Management Interface for FreeBSD/Linux.
https://github.com/webzfs/webzfs

Hardware

AMD Ryzen 9 9950X3D2 with 192MB L3 Cache Spotted in Multiple Benchmarks.
https://hothardware.com/news/amd-9950x3d2-benchmark-leaks

Raspberry Pi 5 Expansion with 14 USB Ports.
https://cnx-software.com/2025/12/20/do-you-need-14-usb-ports-on-your-raspberry-pi-5/

I am Returning My Framework 16.
https://yorickpeterse.com/articles/im-returning-my-framework-16/

New Radeon RX 9060 XT LP Quietly Launched: 16 GB with Lower TDP.
https://hwcooling.net/en/new-radeon-rx-9060-xt-lp-quietly-launched-16-gb-with-lower-tdp/

Untold Story of Nintendo Entertainment System.
https://youtube.com/watch?v=uJvpRGibFhg

New in Collection – Part 1 – Keyport 717.
https://newsletter.shifthappens.site/archive/new-in-the-collection-pt-1-keyport-717/

New in Collection – Part 2 – NEC PWP-100.
https://newsletter.shifthappens.site/archive/new-in-the-collection-pt-2-nec-pwp-100/

New in Collection – Part 3 – Canon PW-10/15/30.
https://newsletter.shifthappens.site/archive/new-in-the-collection-pt-3-canon-pw-101530/

New in Collection – Part 4 – Non Canon Cats.
https://newsletter.shifthappens.site/archive/new-in-the-collection-pt-4-non-canon-cats/

Golden Age of Personal Computers – 80 Machines Reviewed.
https://youtube.com/watch?v=wQPmPdL5t3Y

Short History of Personal Computers – 25 Years at Glance.
https://youtube.com/watch?v=JdZ4XFEZFnc

Life

Backing Up Spotify – Distributed in Bulk Torrents (300TB) and Grouped by Popularity.
https://annas-archive.li/blog/backing-up-spotify.html

Why Young Women are Becoming More Liberal Than Young Men – Gender Equality Paradox.
https://robkhenderson.com/p/the-gender-equality-paradox-explains

Cloudflare Says It Does Not Censor Internet – Numbers Tell More Complicated Story.
https://nerds.xyz/2025/12/cloudflare-transparency-report-2025/

Other

Firefox Promises AI Kill Switch.
https://nerds.xyz/2025/12/firefox-ai-kill-switch/

Usual Suspects

BSD Weekly.
https://bsdweekly.com/

DiscoverBSD.
https://discoverbsd.com/

BSDSec.
https://bsdsec.net/

DragonFly BSD Digest.
https://dragonflydigest.com/

FreeBSD Patch Level Table.
https://bokut.in/freebsd-patch-level-table/

FreeBSD End of Life Date.
https://endoflife.date/freebsd

Phoronix BSD News Archives.
https://phoronix.com/linux/BSD

OpenBSD Journal.
https://undeadly.org/

Call for Testing.
https://callfortesting.org/

Call for Testing – Production Users Call.
https://youtube.com/@callfortesting/videos

BSD Now Weekly Podcast.
https://www.bsdnow.tv/

Nixers Newsletter.
https://newsletter.nixers.net/entries.php

BSD Cafe Journal.
https://journal.bsd.cafe/

DragonFly BSD Digest – Lazy Reading – In Other BSDs.
https://dragonflydigest.com

BSDTV.
https://bsky.app/profile/bsdtv.bsky.social

FreeBSD Git Weekly.
https://freebsd-git-weekly.tarsnap.net/

FreeBSD Meetings.
https://youtube.com/@freebsdmeetings

BSDJedi.
https://youtube.com/@BSDJedi/videos

RoboNuggie.
https://youtube.com/@RoboNuggie/videos

GaryHTech.
https://youtube.com/@GaryHTech/videos

Sheridan Computers.
https://youtube.com/@sheridans/videos

82MHz.
https://82mhz.net/

EOF
Top

Brave New PKGBASE World

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

Let me put this into first sentence to make things clear – I like PKGBASE and I think it is improvement over freebsd-update(8) and base.txz and kernel.txz – what we currently have in FreeBSD. All the issues will be resolved in time and if You want to play safe you can still use the classic way of FreeBSD life over entire 15.x FreeBSD line.

The Table of Contents for the article.

  • Divided
  • Discussions
  • Problem to Solve
  • Warning
  • Install
  • Documentation
  • New PKGBASE Distribution Sets
  • Minimal RAM Requirements
  • Base Install
  • Repositories
  • Updating
  • Vital
  • PKGBASE Jails
  • Additional Independent Rescue
  • In the Works …

All of the information here is based on the FreeBSD 15.0-BETA2 version but I will update the info as new things are introduced.

Also … as now the base.txz is spread over about 200 or so pkg(8) packages – you will be able to either install everything – like with base.txz or install and maintain only parts that you really need. Do not need compilers? Remove them. Do not want to have documentation/man pages/examples? Uninstall.

Its just important to remember that after you switch any of your FreeBSD systems to PKGBASE – to also switch mentally – to not do several things that you have done in the past in the old ‘classic’ world.

Now …

Divided

I do not remember last time when entire FreeBSD community was more divided in one single concept.

The PKGBASE concept.

FreeBSD concept with which everything is handled by one pkg(8) command – for both Base System and third party packages.

Similar to dnf(8) or apt(8) from the Linux world.

Some time ago I even made a poll on both X/Twitter and Bluesky platforms.

The question was:

– one pkg(8) command for FreeBSD Base System and third party packages.

– separate pkgbase(8) command for FreeBSD Base System and pkg(8) for third party packages.

Results are below.

More or less 50% for each option.

Discussions

I also do not remember when single topic covered most of the Mailing Lists discussions with such coverage.

Below are screenshots or freebsd-pkgbase and freebsd-stable lists.

While I like the PKGBASE concept because now the freebsd-update(8) process is very long over large upgrades and also very interactive – besides other things PKGBASE also solves these two … but it comes at a price.

Problem to Solve

Some may ask what problem PKGBASE tries to resolve … there are few.

First – the delta based design of freebsd-update(8) was PITA for maintenance. The binary diffs where difficult to generate and maintain because FreeBSD Release Engineering team need to store every old version of binaries – then generating binary diffs for each possible upgrade path and later testing that every delta sequence applies correctly. Besides being error prone it was also time consuming. This ‘way’ of things was also sensitive to local modifications and/or corruption. The freebsd-update(8) requires that every local file exactly matches the expected original. If user compiled custom kernel/world or modified/replaced any file manually then the delta patches cannot be applied.

Second – the freebsd-update(8) process was ALWAYS interactive which was quite OK if you have two FreeBSD machines – but it You are responsible for keeping hundreds of FreeBSD machines and need to patch them quickly then it was PITA. Some people coped with that by overwriting the PAGER variable … but that often caused trouble.

FreeBSD # env PAGER=cat freebsd-update fetch install

Third – no file ownership within Base System. If file is not known to pkg(8) then it probably originated in FreeBSD Base System … but you can never be sure. Because freebsd-update(8) only patches files in place it can not track what component owns which file and thus cleanly remove obsolete files.

Forth – with PKGBASE its possible to remove and/or manage optional components cleanly – by removing their pkg(8) packages. Without PKGBASE you can only mange Base System as a whole and patch it with freebsd-update(8) … you can of course build your tailored FreeBSD version with lots of components/subsystems disabled in /etc/src.conf file … but then freebsd-update(8) will not work with them.

Fifth – without PKGBASE – the only way you can update/upgrade a STABLE or CURRENT system is by compiling everything from source. With PKGBASE there will be pkg(8) repos with weekly/monthly updates – so You do not have to waste time and electricity just to update your STABLE/CURRENT system – just update the PKGBASE packages with pkg(8) command.

Warning

I need to warn you about a thing or two in the new PKGBASE world.

[ WARNING: BEGIN ]

Many FreeBSD seasoned sysadmins – including me – knew that from time to time – when its needed – one can just safely wipe all third party packages with pkg delete -fay command. Then one could rm -rf /usr/local /boot/modules to make sure everything was cleaned – and start again with fresh FreeBSD Base System.

With FreeBSD installed in a PKGBASE way the pkg delete -fay command will destroy your FreeBSD system. Literally. So think twice before executing it on a FreeBSD PKGBASE system.

The ZFS Boot Environments feature will NOT protect you from executing pkg delete -fay command on the running system – even if you have created a backup ZFS Boot Environment – you will NOT be able to reach the loader(8) for the boot menu selection.

OK ls boot
boot
 d  zfs
 d  efi
    loader.conf
    entropy
 d  firmware

Because there is not kernel or loader(8) anymore … and its the same in both BIOS and UEFI mode.

Another warning – if you use FreeBSD in PKGBASE mode – do not touch freebsd-update(8) command – it will break the system.

Also – do not update/upgrade PKGBASE system with make installworld or make installkernel commands – it will also do harm.

Alternatively use make buildworld buildkernel update-packages command which will create package repository with packages you can use to update/upgrade the FreeBSD system with pkg(8) command.

This is the default FreeBSD ZFS pool layout.

root@pkgbase:~ # zfs list
NAME                  USED  AVAIL  REFER  MOUNTPOINT
zroot                1.25G  17.7G    96K  /zroot
zroot/ROOT           1.25G  17.7G    96K  none
zroot/ROOT/default   1.24G  17.7G   854M  /
zroot/home            224K  17.7G    96K  /home
zroot/home/vermaden   128K  17.7G   128K  /home/vermaden
zroot/tmp             112K  17.7G   112K  /tmp
zroot/usr             288K  17.7G    96K  /usr
zroot/usr/ports        96K  17.7G    96K  /usr/ports
zroot/usr/src          96K  17.7G    96K  /usr/src
zroot/var             684K  17.7G    96K  /var
zroot/var/audit        96K  17.7G    96K  /var/audit
zroot/var/crash        96K  17.7G    96K  /var/crash
zroot/var/log         196K  17.7G   196K  /var/log
zroot/var/mail        104K  17.7G   104K  /var/mail
zroot/var/tmp          96K  17.7G    96K  /var/tmp

Its a good template to start – I very rarely modify it – but …

If you use multiple independent ZFS Boot Environments keep in mind that /usr/src is not part of ZFS BE and will be overwritten by FreeBSD-src and FreeBSD-src-sys packages from each ZFS BE. To overcome move /usr/src into each ZFS BE so that FreeBSD source tree (and packages) will be consistent and independent from each other for each ZFS Boot Environment you use. Its the same even without PKGBASE – its just a reminder that PKGBASE does not change anything here.

[ WARNING: END ]

Install

Right now bsdinstall from FreeBSD 15.x will ask you important question at the start – in which world you want to live?

I have also read on Mailing Lists that Experimental label will be changed to Tech Preview one.

There is also one important switch on what is available on the installation media. From 15.x series the PKGBASE package sets are on the installation media and older ones like base.txz or kernel.tzx have to be downloaded from the Internet … at least for smallest disc1 media.

Classic Distributions Sets like base.txz and kernel.txz maintained and updated by freebsd-update(8) command or PKGBASE with everything being managed and upgraded by pkg(8) command.

You can even later convert older Distributions Sets install with pkgbasify(8) tool. From what I have seen on the FreeBSD Mailing Lists there is even depkgbasify(8) planned – to convert PKGBASE system back to classic Distributions Sets setup.

Documentation

After VNET Jails were introduced to FreeBSD the official FreeBSD Handbook did not had any documentation about them for more then a decade.

Fortunately the PKGBASE concept is already covered FreeBSD Handbook PKGBASE section.

… and its not some short memo/mention like with fwget(8) tool that was just mentioned once in the FreeBSD 14.0-RELEASE Release Notes and forgotten.

There is also new freebsd-base(7) man page covering PKGBASE concept.

Which is also nice.

There is also some relevant info in the FreeBSD Wiki https://wiki.freebsd.org/pkgbase page.

New PKGBASE Distribution Sets

Say goodbye to traditional base.txz and kernel.tzx sets and welcome newly crafted sets for PKGBASE:

kernel-dbg – Debug symbols for the kernel.

devel – C/C++ compilers and related utilities.

optional – Optional software (excluding compilers).

optional-jail – Optional software (excluding compilers)

base – The complete base system (includes devel and optional)

base-jail – The complete base system (includes devel and optional)

src – System source tree

tests – Test suite.

lib32 – 32-bit compatibility libraries.

debug – Debug symbols for the selected components.

From the good news – you can now select to install a lot smaller Base System that is a lot better suited for FreeBSD Jails – and there are no bad news here – just more options and flexibility 🙂

Minimal RAM Requirements

I am not sure that there are any specific requirements set right now – but the minimum amount of RAM that I was able to install FreeBSD with PKGBASE is 300 MB RAM – and that is with Auto (ZFS) option. I already described it in the Mailing Lists but I will happily repeat that here.

First Select [Live System] option – then execute these:

root@:~ # kldload zfs
ZFS filesystem version: 5
ZFS storage pool version: features support (5000)

root@:~ # sysctl vfs.zfs.arc.min=33554432
vfs.zfs.arc.min: 0 -> 33554432

root@:~ # sysctl vfs.zfs.arc.max=67108864
vfs.zfs.arc.max: 0 -> 67108864

root@:~ # sysctl vm.pageout_oom_seq=1200
vm.pageout_oom_seq: 12 -> 1200

root@:~ # env TERM=xterm bsdinstall

Now you can proceed to the install process. I selected PKGBASE type and offline installation – and then Auto (ZFS). I made the test with only base set chosen – but it probably can also survive more sets selected. I also switched from (BIOS) to (BIOS+UEFI) but that should not make any difference for you.

Some stats after installation (before reboot):

root@:/ # dmesg | grep -i memory
real memory  = 314572800 (300 MB)
avail memory = 263303168 (251 MB)

root@:/ # top -b -o res
last pid:  2544;  load averages:    1.31,    0.80,    0.34  up 0+00:02:20    18:02:03
10 processes:  1 running, 9 sleeping
CPU:  7.8% user,  0.0% nice, 16.7% system, 12.1% interrupt, 63.4% idle
Mem: 3588K Active, 11M Inact, 6376K Laundry, 148M Wired, 5800K Buf, 89M Free
ARC: 47M Total, 2667K MFU, 38M MRU, 128K Anon, 294K Header, 6515K Other
     29M Compressed, 65M Uncompressed, 2.24:1 Ratio

I tried the same with 256 MB RAM but it fails.

Base Install

After selecting base only I got 208 packages installed – including pkg(8) one.

root@pkgbase:~ # pkg info | wc -l
     208

root@pkgbase:~ # pkg info | while read PKG DESC; do printf "%52s  %s\n" ${PKG} ${DESC}; done
                 FreeBSD-acct-15.0.b1.20251011075131  System resource accounting
                 FreeBSD-acpi-15.0.b1.20251011075131  Advanced Configuration and Power Interface (ACPI) utilities
                  FreeBSD-apm-15.0.b1.20251011075131  Intel / Microsoft APM BIOS utility
                   FreeBSD-at-15.0.b1.20251011075131  Scheduled and batch command utilities
                  FreeBSD-atf-15.0.b1.20251011075131  Automated Testing Framework
              FreeBSD-atf-dev-15.0.b1.20251011075131  Automated Testing Framework (development files)
              FreeBSD-atf-lib-15.0.b1.20251011075131  Automated Testing Framework (libraries)
                FreeBSD-audit-15.0.b1.20251011075131  OpenBSM auditing utilities
            FreeBSD-audit-dev-15.0.b1.20251011075131  OpenBSM auditing utilities (development files)
            FreeBSD-audit-lib-15.0.b1.20251011075131  OpenBSM auditing utilities (libraries)
               FreeBSD-autofs-15.0.b1.20251011075131  File system automounter
                FreeBSD-bhyve-15.0.b1.20251011075131  bhyve virtual machine hypervisor
            FreeBSD-blocklist-15.0.b1.20251011075131  Network blocklist daemon
        FreeBSD-blocklist-dev-15.0.b1.20251011075131  Network blocklist daemon (development files)
            FreeBSD-bluetooth-15.0.b1.20251011075131  Bluetooth support
        FreeBSD-bluetooth-dev-15.0.b1.20251011075131  Bluetooth support (development files)
        FreeBSD-bluetooth-lib-15.0.b1.20251011075131  Bluetooth support (libraries)
                FreeBSD-bmake-15.0.b1.20251011075131  Program maintenance utility
           FreeBSD-bootloader-15.0.b1.20251011075131  System boot loader
       FreeBSD-bootloader-dev-15.0.b1.20251011075131  System boot loader (development files)
            FreeBSD-bsdconfig-15.0.b1.20251011075131  System configuration utility
           FreeBSD-bsdinstall-15.0.b1.20251011075131  System installer
                FreeBSD-bsnmp-15.0.b1.20251011075131  Simple and extensible SNMP daemon
            FreeBSD-bsnmp-dev-15.0.b1.20251011075131  Simple and extensible SNMP daemon (development files)
                FreeBSD-bzip2-15.0.b1.20251011075131  A block-sorting data compressor
            FreeBSD-bzip2-dev-15.0.b1.20251011075131  A block-sorting data compressor (development files)
            FreeBSD-bzip2-lib-15.0.b1.20251011075131  A block-sorting data compressor (libraries)
               FreeBSD-caroot-15.0.b1.20251011075131  Mozilla Root Store trusted TLS certificates
            FreeBSD-ccdconfig-15.0.b1.20251011075131  Concatenated disk driver (ccd) configuration utility
              FreeBSD-certctl-15.0.b1.20251011075131  Tool for managing trusted and untrusted TLS certificates
                FreeBSD-clang-15.0.b1.20251011075131  The Clang C, C++, and Objective-C compiler
            FreeBSD-clang-dev-15.0.b1.20251011075131  The Clang C, C++, and Objective-C compiler (development files)
                FreeBSD-clibs-15.0.b1.20251011075131  Core runtime libraries
            FreeBSD-clibs-dev-15.0.b1.20251011075131  Core runtime libraries (development files)
        FreeBSD-console-tools-15.0.b1.20251011075131  Video console utilities
                 FreeBSD-cron-15.0.b1.20251011075131  Command scheduling facility
                  FreeBSD-csh-15.0.b1.20251011075131  C shell with file name completion and command line editing
                  FreeBSD-ctf-15.0.b1.20251011075131  Compact C Type Format (CTF)
              FreeBSD-ctf-dev-15.0.b1.20251011075131  Compact C Type Format (CTF) (development files)
              FreeBSD-ctf-lib-15.0.b1.20251011075131  Compact C Type Format (CTF) (libraries)
                  FreeBSD-ctl-15.0.b1.20251011075131  CAM Target Layer / iSCSI target daemon
          FreeBSD-cxgbe-tools-15.0.b1.20251011075131  Configuration utility for Chelsio cxbge(4) network interfaces
                 FreeBSD-devd-15.0.b1.20251011075131  Kernel event handling daemon
             FreeBSD-devmatch-15.0.b1.20251011075131  Automatically load kernel drivers for attached hardware
         FreeBSD-devmatch-dev-15.0.b1.20251011075131  Automatically load kernel drivers for attached hardware (development files)
             FreeBSD-dhclient-15.0.b1.20251011075131  Dynamic Host Configuration Protocol (DHCP) client
                FreeBSD-diff3-15.0.b1.20251011075131  GNU 3-way file comparison and merge utility
                  FreeBSD-dma-15.0.b1.20251011075131  DragonFly Mail Agent
               FreeBSD-dtrace-15.0.b1.20251011075131  DTrace dynamic tracing framework
           FreeBSD-dtrace-dev-15.0.b1.20251011075131  DTrace dynamic tracing framework (development files)
               FreeBSD-dwatch-15.0.b1.20251011075131  Watch processes as they trigger a particular DTrace probe
                   FreeBSD-ee-15.0.b1.20251011075131  Easy Editor
            FreeBSD-efi-tools-15.0.b1.20251011075131  Utilities for the Unified Extensible Firmware Interface (UEFI)
        FreeBSD-efi-tools-dev-15.0.b1.20251011075131  Utilities for the Unified Extensible Firmware Interface (UEFI) (development files)
             FreeBSD-examples-15.0.b1.20251011075131  System interface examples
                   FreeBSD-fd-15.0.b1.20251011075131  Floppy disk utilities
                FreeBSD-fetch-15.0.b1.20251011075131  Retrieve a file from a remote URL
            FreeBSD-fetch-dev-15.0.b1.20251011075131  Retrieve a file from a remote URL (development files)
         FreeBSD-firmware-iwm-15.0.b1.20251011075131  Firmware for iwm(4) Intel 802.11ac network interfaces
                  FreeBSD-ftp-15.0.b1.20251011075131  File Transfer Protocol (FTP) client
                FreeBSD-fwget-15.0.b1.20251011075131  Install firmware packages for the running system
                FreeBSD-games-15.0.b1.20251011075131  Games
                 FreeBSD-geom-15.0.b1.20251011075131  GEOM configuration utilities
                FreeBSD-ggate-15.0.b1.20251011075131  GEOM Gate client and server
                 FreeBSD-gssd-15.0.b1.20251011075131  gssd(8) daemon for kernel GSS-API
                 FreeBSD-hast-15.0.b1.20251011075131  Highly Available Storage daemon
              FreeBSD-hostapd-15.0.b1.20251011075131  IEEE Std 802.11 Access Point authentication daemon
         FreeBSD-hyperv-tools-15.0.b1.20251011075131  Microsoft Hyper-V utilities
                FreeBSD-inetd-15.0.b1.20251011075131  Internet super-server
                  FreeBSD-ipf-15.0.b1.20251011075131  IP Filter (ipf) packet filter management tools
                 FreeBSD-ipfw-15.0.b1.20251011075131  ipfw (IP firewall) management utilities
                FreeBSD-iscsi-15.0.b1.20251011075131  iSCSI initiator
                 FreeBSD-jail-15.0.b1.20251011075131  Jail management tools
             FreeBSD-kerberos-15.0.b1.20251011075131  Kerberos client
         FreeBSD-kerberos-dev-15.0.b1.20251011075131  Kerberos client (development files)
         FreeBSD-kerberos-kdc-15.0.b1.20251011075131  Kerberos key distribution center
         FreeBSD-kerberos-lib-15.0.b1.20251011075131  Kerberos client (libraries)
       FreeBSD-kernel-generic-15.0.b1.20251011075131  FreeBSD GENERIC Kernel
           FreeBSD-kernel-man-15.0.b1.20251011075131  Kernel manual pages
                 FreeBSD-kyua-15.0.b1.20251011075131  Testing framework for infrastructure software
                FreeBSD-lib9p-15.0.b1.20251011075131  9P network protocol library
            FreeBSD-lib9p-dev-15.0.b1.20251011075131  9P network protocol library (development files)
           FreeBSD-libarchive-15.0.b1.20251011075131  Library for reading and writing streaming archives
       FreeBSD-libarchive-dev-15.0.b1.20251011075131  Library for reading and writing streaming archives (development files)
           FreeBSD-libbegemot-15.0.b1.20251011075131  rpoll(3) interface for event-driven I/O
       FreeBSD-libbegemot-dev-15.0.b1.20251011075131  rpoll(3) interface for event-driven I/O (development files)
     FreeBSD-libblocksruntime-15.0.b1.20251011075131  LLVM BlocksRuntime library
 FreeBSD-libblocksruntime-dev-15.0.b1.20251011075131  LLVM BlocksRuntime library (development files)
           FreeBSD-libbsdstat-15.0.b1.20251011075131  Periodic statistics library
       FreeBSD-libbsdstat-dev-15.0.b1.20251011075131  Periodic statistics library (development files)
            FreeBSD-libcasper-15.0.b1.20251011075131  Casper library
        FreeBSD-libcasper-dev-15.0.b1.20251011075131  Casper library (development files)
            FreeBSD-libcompat-15.0.b1.20251011075131  Compatibility library
        FreeBSD-libcompat-dev-15.0.b1.20251011075131  Compatibility library (development files)
   FreeBSD-libcompiler_rt-dev-15.0.b1.20251011075131  LLVM compiler_rt library (development files)
              FreeBSD-libcuse-15.0.b1.20251011075131  Userland character device library
          FreeBSD-libcuse-dev-15.0.b1.20251011075131  Userland character device library (development files)
             FreeBSD-libdwarf-15.0.b1.20251011075131  DWARF access library
         FreeBSD-libdwarf-dev-15.0.b1.20251011075131  DWARF access library (development files)
            FreeBSD-libevent1-15.0.b1.20251011075131  Private libevent1 library
        FreeBSD-libevent1-dev-15.0.b1.20251011075131  Private libevent1 library (development files)
          FreeBSD-libexecinfo-15.0.b1.20251011075131  NetBSD stack backtrace library
      FreeBSD-libexecinfo-dev-15.0.b1.20251011075131  NetBSD stack backtrace library (development files)
               FreeBSD-libipt-15.0.b1.20251011075131  Intel(R) Processor Trace decoder library
           FreeBSD-libipt-dev-15.0.b1.20251011075131  Intel(R) Processor Trace decoder library (development files)
              FreeBSD-libldns-15.0.b1.20251011075131  Private LDNS library
          FreeBSD-libldns-dev-15.0.b1.20251011075131  Private LDNS library (development files)
             FreeBSD-libmagic-15.0.b1.20251011075131  Magic number recognition library
         FreeBSD-libmagic-dev-15.0.b1.20251011075131  Magic number recognition library (development files)
            FreeBSD-libmilter-15.0.b1.20251011075131  sendmail Mail Filter API library
        FreeBSD-libmilter-dev-15.0.b1.20251011075131  sendmail Mail Filter API library (development files)
          FreeBSD-libpathconv-15.0.b1.20251011075131  Library for handling relative and absolute pathnames
      FreeBSD-libpathconv-dev-15.0.b1.20251011075131  Library for handling relative and absolute pathnames (development files)
        FreeBSD-librpcsec_gss-15.0.b1.20251011075131  RPCSEC_GSS library
    FreeBSD-librpcsec_gss-dev-15.0.b1.20251011075131  RPCSEC_GSS library (development files)
               FreeBSD-librss-15.0.b1.20251011075131  Receive-side scaling library
           FreeBSD-librss-dev-15.0.b1.20251011075131  Receive-side scaling library (development files)
           FreeBSD-libsqlite3-15.0.b1.20251011075131  Private SQLite library
       FreeBSD-libsqlite3-dev-15.0.b1.20251011075131  Private SQLite library (development files)
         FreeBSD-libthread_db-15.0.b1.20251011075131  Library for interacting with threaded processes
     FreeBSD-libthread_db-dev-15.0.b1.20251011075131  Library for interacting with threaded processes (development files)
               FreeBSD-libucl-15.0.b1.20251011075131  Private Universal Configuration Library (UCL) library
           FreeBSD-libucl-dev-15.0.b1.20251011075131  Private Universal Configuration Library (UCL) library (development files)
               FreeBSD-libvgl-15.0.b1.20251011075131  Video Graphics Library
           FreeBSD-libvgl-dev-15.0.b1.20251011075131  Video Graphics Library (development files)
            FreeBSD-libvmmapi-15.0.b1.20251011075131  Front-end library for the vmm(4) virtualization driver
        FreeBSD-libvmmapi-dev-15.0.b1.20251011075131  Front-end library for the vmm(4) virtualization driver (development files)
              FreeBSD-libyaml-15.0.b1.20251011075131  Private YAML library
          FreeBSD-libyaml-dev-15.0.b1.20251011075131  Private YAML library (development files)
                  FreeBSD-lld-15.0.b1.20251011075131  LLVM ELF link loader
                 FreeBSD-lldb-15.0.b1.20251011075131  LLVM debugger
             FreeBSD-lldb-dev-15.0.b1.20251011075131  LLVM debugger (development files)
              FreeBSD-locales-15.0.b1.20251011075131  Locale definitions
                   FreeBSD-lp-15.0.b1.20251011075131  Print spooler
               FreeBSD-mandoc-15.0.b1.20251011075131  Online manual page reader
            FreeBSD-mlx-tools-15.0.b1.20251011075131  Utility for managing Connect-X 4/5/6 Mellanox network adapters
                FreeBSD-mtree-15.0.b1.20251011075131  Filesystem hierarchy management tool
                 FreeBSD-natd-15.0.b1.20251011075131  Userland Network Address Translation (NAT) for ipfw
             FreeBSD-natd-dev-15.0.b1.20251011075131  Userland Network Address Translation (NAT) for ipfw (development files)
              FreeBSD-ncurses-15.0.b1.20251011075131  ncurses terminal control library
          FreeBSD-ncurses-dev-15.0.b1.20251011075131  ncurses terminal control library (development files)
               FreeBSD-netmap-15.0.b1.20251011075131  Userland netmap support
           FreeBSD-netmap-dev-15.0.b1.20251011075131  Userland netmap support (development files)
            FreeBSD-newsyslog-15.0.b1.20251011075131  Create and rotate system log files
                  FreeBSD-nfs-15.0.b1.20251011075131  NFS client and server utilities
                  FreeBSD-ntp-15.0.b1.20251011075131  Network Time Protocol (NTP) daemon
            FreeBSD-nuageinit-15.0.b1.20251011075131  cloud-init configuration support
           FreeBSD-nvme-tools-15.0.b1.20251011075131  NVMe utilities
              FreeBSD-openssl-15.0.b1.20251011075131  OpenSSL Transport Layer Security (TLS) library
          FreeBSD-openssl-dev-15.0.b1.20251011075131  OpenSSL Transport Layer Security (TLS) library (development files)
          FreeBSD-openssl-lib-15.0.b1.20251011075131  OpenSSL Transport Layer Security (TLS) library (libraries)
             FreeBSD-periodic-15.0.b1.20251011075131  Run periodic system functions
                   FreeBSD-pf-15.0.b1.20251011075131  OpenBSD packet filter
               FreeBSD-pf-dev-15.0.b1.20251011075131  OpenBSD packet filter (development files)
        FreeBSD-pkg-bootstrap-15.0.b1.20251011075131  pkg(7) bootstrap utility
                  FreeBSD-pmc-15.0.b1.20251011075131  Support for hardware performance counters
              FreeBSD-pmc-dev-15.0.b1.20251011075131  Support for hardware performance counters (development files)
               FreeBSD-powerd-15.0.b1.20251011075131  System power control utility
                  FreeBSD-ppp-15.0.b1.20251011075131  Point-to-Point Protocol (PPP) utilities
           FreeBSD-quotacheck-15.0.b1.20251011075131  Filesystem quota consistency checker
                   FreeBSD-rc-15.0.b1.20251011075131  rc(8) subsystem
                FreeBSD-rcmds-15.0.b1.20251011075131  BSD/SunOS remote status commands
                 FreeBSD-rdma-15.0.b1.20251011075131  Remote Direct Memory Access (RDMA) and InfiniBand utilities
               FreeBSD-rescue-15.0.b1.20251011075131  Rescue system
           FreeBSD-resolvconf-15.0.b1.20251011075131  A framework for managing multiple DNS configurations
                  FreeBSD-rip-15.0.b1.20251011075131  RIP routing protocol
              FreeBSD-runtime-15.0.b1.20251011075131  Core system
          FreeBSD-runtime-dev-15.0.b1.20251011075131  Core system (development files)
             FreeBSD-sendmail-15.0.b1.20251011075131  sendmail mail transport agent
             FreeBSD-set-base-15.0.b1.20251011075131  Base system (metapackage)
            FreeBSD-set-devel-15.0.b1.20251011075131  Development tools (metapackage)
          FreeBSD-set-minimal-15.0.b1.20251011075131  Basic multi-user system (metapackage)
         FreeBSD-set-optional-15.0.b1.20251011075131  Optional base system software (metapackage)
              FreeBSD-set-src-15.0.b1.20251011075131  System source code
             FreeBSD-smbutils-15.0.b1.20251011075131  SMB network filesystem utilities
         FreeBSD-smbutils-dev-15.0.b1.20251011075131  SMB network filesystem utilities (development files)
                FreeBSD-sound-15.0.b1.20251011075131  Audio utilities
            FreeBSD-sound-dev-15.0.b1.20251011075131  Audio utilities (development files)
                  FreeBSD-src-15.0.b1.20251011075131  System userland source code
              FreeBSD-src-sys-15.0.b1.20251011075131  System kernel source code
                  FreeBSD-ssh-15.0.b1.20251011075131  OpenSSH Secure Shell client and server
              FreeBSD-ssh-dev-15.0.b1.20251011075131  OpenSSH Secure Shell client and server (development files)
         FreeBSD-syscons-data-15.0.b1.20251011075131  syscons(4) fonts and keymaps
              FreeBSD-syslogd-15.0.b1.20251011075131  System logging daemon
                 FreeBSD-tcpd-15.0.b1.20251011075131  TCP Wrappers access control facility
             FreeBSD-tcpd-dev-15.0.b1.20251011075131  TCP Wrappers access control facility (development files)
               FreeBSD-telnet-15.0.b1.20251011075131  TELNET client
            FreeBSD-toolchain-15.0.b1.20251011075131  Utilities for program development
        FreeBSD-toolchain-dev-15.0.b1.20251011075131  Utilities for program development (development files)
                  FreeBSD-ufs-15.0.b1.20251011075131  UFS filesystem support
              FreeBSD-ufs-dev-15.0.b1.20251011075131  UFS filesystem support (development files)
              FreeBSD-ufs-lib-15.0.b1.20251011075131  UFS filesystem support (libraries)
              FreeBSD-unbound-15.0.b1.20251011075131  NLnet Labs Unbound DNS resolver
          FreeBSD-unbound-dev-15.0.b1.20251011075131  NLnet Labs Unbound DNS resolver (development files)
            FreeBSD-utilities-15.0.b1.20251011075131  Non-vital programs and libraries
        FreeBSD-utilities-dev-15.0.b1.20251011075131  Non-vital programs and libraries (development files)
                   FreeBSD-vi-15.0.b1.20251011075131  Text editor
              FreeBSD-vt-data-15.0.b1.20251011075131  vt(4) fonts and keymaps
                  FreeBSD-wpa-15.0.b1.20251011075131  IEEE Std 802.11 WPA Supplicant
                   FreeBSD-xz-15.0.b1.20251011075131  LZMA2 data compression
               FreeBSD-xz-dev-15.0.b1.20251011075131  LZMA2 data compression (development files)
               FreeBSD-xz-lib-15.0.b1.20251011075131  LZMA2 data compression (libraries)
                   FreeBSD-yp-15.0.b1.20251011075131  Yellow Pages (YP) / Network Information Service (NIS)
                  FreeBSD-zfs-15.0.b1.20251011075131  ZFS filesystem support
              FreeBSD-zfs-dev-15.0.b1.20251011075131  ZFS filesystem support (development files)
              FreeBSD-zfs-lib-15.0.b1.20251011075131  ZFS filesystem support (libraries)
             FreeBSD-zoneinfo-15.0.b1.20251011075131  Timezone database
                                           pkg-2.3.1  Package manager

root@pkgbase:~ # pkg info -qoa
base/FreeBSD-acct
base/FreeBSD-acpi
base/FreeBSD-apm
base/FreeBSD-at
base/FreeBSD-atf
base/FreeBSD-atf-dev
base/FreeBSD-atf-lib
base/FreeBSD-audit
base/FreeBSD-audit-dev
base/FreeBSD-audit-lib
base/FreeBSD-autofs
base/FreeBSD-bhyve
base/FreeBSD-blocklist
base/FreeBSD-blocklist-dev
base/FreeBSD-bluetooth
base/FreeBSD-bluetooth-dev
base/FreeBSD-bluetooth-lib
base/FreeBSD-bmake
base/FreeBSD-bootloader
base/FreeBSD-bootloader-dev
base/FreeBSD-bsdconfig
base/FreeBSD-bsdinstall
base/FreeBSD-bsnmp
base/FreeBSD-bsnmp-dev
base/FreeBSD-bzip2
base/FreeBSD-bzip2-dev
base/FreeBSD-bzip2-lib
base/FreeBSD-caroot
base/FreeBSD-ccdconfig
base/FreeBSD-certctl
base/FreeBSD-clang
base/FreeBSD-clang-dev
base/FreeBSD-clibs
base/FreeBSD-clibs-dev
base/FreeBSD-console-tools
base/FreeBSD-cron
base/FreeBSD-csh
base/FreeBSD-ctf
base/FreeBSD-ctf-dev
base/FreeBSD-ctf-lib
base/FreeBSD-ctl
base/FreeBSD-cxgbe-tools
base/FreeBSD-devd
base/FreeBSD-devmatch
base/FreeBSD-devmatch-dev
base/FreeBSD-dhclient
base/FreeBSD-diff3
base/FreeBSD-dma
base/FreeBSD-dtrace
base/FreeBSD-dtrace-dev
base/FreeBSD-dwatch
base/FreeBSD-ee
base/FreeBSD-efi-tools
base/FreeBSD-efi-tools-dev
base/FreeBSD-examples
base/FreeBSD-fd
base/FreeBSD-fetch
base/FreeBSD-fetch-dev
base/FreeBSD-firmware-iwm
base/FreeBSD-ftp
base/FreeBSD-fwget
base/FreeBSD-games
base/FreeBSD-geom
base/FreeBSD-ggate
base/FreeBSD-gssd
base/FreeBSD-hast
base/FreeBSD-hostapd
base/FreeBSD-hyperv-tools
base/FreeBSD-inetd
base/FreeBSD-ipf
base/FreeBSD-ipfw
base/FreeBSD-iscsi
base/FreeBSD-jail
base/FreeBSD-kerberos
base/FreeBSD-kerberos-dev
base/FreeBSD-kerberos-kdc
base/FreeBSD-kerberos-lib
base/FreeBSD-kernel-generic
base/FreeBSD-kernel-man
base/FreeBSD-kyua
base/FreeBSD-lib9p
base/FreeBSD-lib9p-dev
base/FreeBSD-libarchive
base/FreeBSD-libarchive-dev
base/FreeBSD-libbegemot
base/FreeBSD-libbegemot-dev
base/FreeBSD-libblocksruntime
base/FreeBSD-libblocksruntime-dev
base/FreeBSD-libbsdstat
base/FreeBSD-libbsdstat-dev
base/FreeBSD-libcasper
base/FreeBSD-libcasper-dev
base/FreeBSD-libcompat
base/FreeBSD-libcompat-dev
base/FreeBSD-libcompiler_rt-dev
base/FreeBSD-libcuse
base/FreeBSD-libcuse-dev
base/FreeBSD-libdwarf
base/FreeBSD-libdwarf-dev
base/FreeBSD-libevent1
base/FreeBSD-libevent1-dev
base/FreeBSD-libexecinfo
base/FreeBSD-libexecinfo-dev
base/FreeBSD-libipt
base/FreeBSD-libipt-dev
base/FreeBSD-libldns
base/FreeBSD-libldns-dev
base/FreeBSD-libmagic
base/FreeBSD-libmagic-dev
base/FreeBSD-libmilter
base/FreeBSD-libmilter-dev
base/FreeBSD-libpathconv
base/FreeBSD-libpathconv-dev
base/FreeBSD-librpcsec_gss
base/FreeBSD-librpcsec_gss-dev
base/FreeBSD-librss
base/FreeBSD-librss-dev
base/FreeBSD-libsqlite3
base/FreeBSD-libsqlite3-dev
base/FreeBSD-libthread_db
base/FreeBSD-libthread_db-dev
base/FreeBSD-libucl
base/FreeBSD-libucl-dev
base/FreeBSD-libvgl
base/FreeBSD-libvgl-dev
base/FreeBSD-libvmmapi
base/FreeBSD-libvmmapi-dev
base/FreeBSD-libyaml
base/FreeBSD-libyaml-dev
base/FreeBSD-lld
base/FreeBSD-lldb
base/FreeBSD-lldb-dev
base/FreeBSD-locales
base/FreeBSD-lp
base/FreeBSD-mandoc
base/FreeBSD-mlx-tools
base/FreeBSD-mtree
base/FreeBSD-natd
base/FreeBSD-natd-dev
base/FreeBSD-ncurses
base/FreeBSD-ncurses-dev
base/FreeBSD-netmap
base/FreeBSD-netmap-dev
base/FreeBSD-newsyslog
base/FreeBSD-nfs
base/FreeBSD-ntp
base/FreeBSD-nuageinit
base/FreeBSD-nvme-tools
base/FreeBSD-openssl
base/FreeBSD-openssl-dev
base/FreeBSD-openssl-lib
base/FreeBSD-periodic
base/FreeBSD-pf
base/FreeBSD-pf-dev
base/FreeBSD-pkg-bootstrap
base/FreeBSD-pmc
base/FreeBSD-pmc-dev
base/FreeBSD-powerd
base/FreeBSD-ppp
base/FreeBSD-quotacheck
base/FreeBSD-rc
base/FreeBSD-rcmds
base/FreeBSD-rdma
base/FreeBSD-rescue
base/FreeBSD-resolvconf
base/FreeBSD-rip
base/FreeBSD-runtime
base/FreeBSD-runtime-dev
base/FreeBSD-sendmail
base/FreeBSD-set-base
base/FreeBSD-set-devel
base/FreeBSD-set-minimal
base/FreeBSD-set-optional
base/FreeBSD-set-src
base/FreeBSD-smbutils
base/FreeBSD-smbutils-dev
base/FreeBSD-sound
base/FreeBSD-sound-dev
base/FreeBSD-src
base/FreeBSD-src-sys
base/FreeBSD-ssh
base/FreeBSD-ssh-dev
base/FreeBSD-syscons-data
base/FreeBSD-syslogd
base/FreeBSD-tcpd
base/FreeBSD-tcpd-dev
base/FreeBSD-telnet
base/FreeBSD-toolchain
base/FreeBSD-toolchain-dev
base/FreeBSD-ufs
base/FreeBSD-ufs-dev
base/FreeBSD-ufs-lib
base/FreeBSD-unbound
base/FreeBSD-unbound-dev
base/FreeBSD-utilities
base/FreeBSD-utilities-dev
base/FreeBSD-vi
base/FreeBSD-vt-data
base/FreeBSD-wpa
base/FreeBSD-xz
base/FreeBSD-xz-dev
base/FreeBSD-xz-lib
base/FreeBSD-yp
base/FreeBSD-zfs
base/FreeBSD-zfs-dev
base/FreeBSD-zfs-lib
base/FreeBSD-zoneinfo
ports-mgmt/pkg

You can even display pkg(8) distribution sets.

root@pkgbase:~ # pkg info -d -C -x '^FreeBSD-set-' | head
FreeBSD-set-base-15.0.b1.20251011075131:
        FreeBSD-set-optional-15.0.b1.20251011075131
        FreeBSD-set-minimal-15.0.b1.20251011075131
        FreeBSD-set-devel-15.0.b1.20251011075131
FreeBSD-set-devel-15.0.b1.20251011075131:
        FreeBSD-zfs-dev-15.0.b1.20251011075131
        FreeBSD-xz-dev-15.0.b1.20251011075131
        FreeBSD-utilities-dev-15.0.b1.20251011075131
        FreeBSD-unbound-dev-15.0.b1.20251011075131
        FreeBSD-ufs-dev-15.0.b1.20251011075131

root@pkgbase:~ # pkg sets | grep '^FreeBSD'
FreeBSD-set-base-15.0.b1.20251011075131:
FreeBSD-set-devel-15.0.b1.20251011075131:
FreeBSD-set-minimal-15.0.b1.20251011075131:
FreeBSD-set-optional-15.0.b1.20251011075131:
FreeBSD-set-src-15.0.b1.20251011075131:

You can even put it as an ALIAS into the /usr/local/etc/pkg.conf file.

root@pkgbase:~ # grep -e '^ALIAS' -e sets -e '^}' /usr/local/etc/pkg.conf
ALIAS {
    sets = "info -d -C -x '^FreeBSD-set-'";
}

root@pkgbase:~ # pkg sets | head 
FreeBSD-set-base-15.0.b1.20251011075131:
        FreeBSD-set-optional-15.0.b1.20251011075131
        FreeBSD-set-minimal-15.0.b1.20251011075131
        FreeBSD-set-devel-15.0.b1.20251011075131
FreeBSD-set-devel-15.0.b1.20251011075131:
        FreeBSD-zfs-dev-15.0.b1.20251011075131
        FreeBSD-xz-dev-15.0.b1.20251011075131
        FreeBSD-utilities-dev-15.0.b1.20251011075131
        FreeBSD-unbound-dev-15.0.b1.20251011075131
        FreeBSD-ufs-dev-15.0.b1.20251011075131

Repositories

For naming clarity the FreeBSD and FreeBSD-kmods repos that you knew from 14.x line were renamed into FreeBSD-ports and FreeBSD-ports-kmods respectively. The new PKGBASE repo is called FreeBSD-base.

root@pkgbase:~ # pkg repos -l
FreeBSD-ports
FreeBSD-ports-kmods
FreeBSD-base

root@pkgbase:~ # pkg repos
FreeBSD-ports: { 
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkg"
  }
FreeBSD-ports-kmods: { 
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_0",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkg"
  }
FreeBSD-base: { 
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/base_latest",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkg"
  }

For now the ‘third party’ packages pkg(8) repos config is in the Base System /etc/pkg/FreeBSD.conf file.

root@pkgbase:~ # grep '^[^#]' /etc/pkg/FreeBSD.conf
FreeBSD-ports: {
  url: "pkg+https://pkg.FreeBSD.org/${ABI}/quarterly",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}
FreeBSD-ports-kmods: {
  url: "pkg+https://pkg.FreeBSD.org/${ABI}/kmods_quarterly_${VERSION_MINOR}",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

While the Base System packages pkg(8) repos config is in the ‘third party’ /usr/local/etc/pkg/FreeBSD.conf file.

root@pkgbase:~ # grep '^[^#]' /usr/local/etc/pkg/repos/FreeBSD-base.conf
FreeBSD-base: {
  url: "pkg+https://pkg.FreeBSD.org/${ABI}/base_latest",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

Which is not logical … but Colin Percival already wrote that this is just temporary and that all of these FreeBSD repos will be in the /etc/pkg/FreeBSD.conf file.

You can update all of them at once or by repo if needed.

root@pkgbase:~ # pkg update
Updating FreeBSD-ports repository catalogue...
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   10 MiB 552.2kB/s    00:19    
Processing entries: 100%
FreeBSD-ports repository update completed. 36441 packages processed.
Updating FreeBSD-ports-kmods repository catalogue...
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   28 KiB  29.1kB/s    00:01    
Processing entries: 100%
FreeBSD-ports-kmods repository update completed. 199 packages processed.
Updating FreeBSD-base repository catalogue...
pkg: Repository FreeBSD-base has a wrong packagesite, need to re-create database
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   76 KiB  77.7kB/s    00:01    
Processing entries:   0%
Newer FreeBSD version for package FreeBSD-zoneinfo:
To ignore this error set IGNORE_OSVERSION=yes
- package: 1500500
- running userland: 1500067
Ignore the mismatch and continue? [y/N]: y
Processing entries: 100%
FreeBSD-base repository update completed. 490 packages processed.
All repositories are up to date.

Updating

To update only the FreeBSD PKGBASE Base System specify the repo in the pkg(8) command.

root@pkgbase:~ # pkg upgrade -r FreeBSD-base
Updating FreeBSD-base repository catalogue...
FreeBSD-base repository is up to date.
FreeBSD-base is up to date.
Checking for upgrades (205 candidates): 100%
Processing candidates (205 candidates): 100%
Checking integrity... done (0 conflicting)
Your packages are up to date.

No updates … strange considering BETA2 is now already available.

After I searched for an answer I got info that You need to modify the URL – to look like that one below.

root@pkgbase:~ # cat /usr/local/etc/pkg/repos/FreeBSD-base.conf
FreeBSD-base: {
# url: "pkg+https://pkg.FreeBSD.org/${ABI}/base_latest",
  url: "pkg+https://pkg.FreeBSD.org/${ABI}/base_release_${VERSION_MINOR}",
  mirror_type: "srv",
  signature_type: "fingerprints",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

Now lets try to upgrade …

root@pkgbase:~ # pkg update -r FreeBSD-base
Updating FreeBSD-base repository catalogue...
pkg: Repository FreeBSD-base has a wrong packagesite, need to re-create database
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   76 KiB  77.7kB/s    00:01    
Processing entries: 100%
FreeBSD-base repository update completed. 490 packages processed.
FreeBSD-base is up to date.

Updating a single Base System package.

root@pkgbase:~ # pkg install FreeBSD-vi
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.
The following 2 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        FreeBSD-clibs-lib32: 15.0.b1.20251012072228 [FreeBSD-base]

Installed packages to be UPGRADED:
        FreeBSD-vi: 15.0.b1.20251011075131 -> 15.0.b1.20251012072228 [FreeBSD-base]

Number of packages to be installed: 1
Number of packages to be upgraded: 1

The process will require 4 MiB more space.
2 MiB to be downloaded.

Proceed with this action? [y/N]: y

Updating/upgrading whole FreeBSD system with PKGBASE packages.

root@pkgbase:~ # pkg upgrade -r FreeBSD-base
Updating FreeBSD-base repository catalogue...
FreeBSD-base repository is up to date.
FreeBSD-base is up to date.
Checking for upgrades (202 candidates): 100%
Processing candidates (202 candidates): 100%
Checking integrity... done (5 conflicting)
  - FreeBSD-sound-15.0.b1.20251013072425 [FreeBSD-base] conflicts with FreeBSD-utilities-15.0.b1.20251011075131 [installed] on /usr/lib/virtual_oss/voss_null.so
  - FreeBSD-ncurses-lib-15.0.b1.20251015211959 [FreeBSD-base] conflicts with FreeBSD-ncurses-15.0.b1.20251011075131 [installed] on /lib/libncursesw.so.9
  - FreeBSD-bluetooth-lib-15.0.b1.20251013072425 [FreeBSD-base] conflicts with FreeBSD-bluetooth-15.0.b1.20251011075131 [installed] on /usr/lib/libbluetooth.so.4
  - FreeBSD-local-unbound-dev-15.0.b1.20251015211959 [FreeBSD-base] conflicts with FreeBSD-unbound-dev-15.0.b1.20251011075131 [installed] on /usr/lib/libprivateunbound.a
  - FreeBSD-local-unbound-15.0.b1.20251015211959 [FreeBSD-base] conflicts with FreeBSD-unbound-15.0.b1.20251011075131 [installed] on /etc/rc.d/local_unbound
Checking integrity... done (0 conflicting)
The following 208 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        FreeBSD-clibs-lib32: 15.0.b1.20251012072228 [FreeBSD-base]
        FreeBSD-local-unbound: 15.0.b1.20251015211959 [FreeBSD-base]
        FreeBSD-local-unbound-dev: 15.0.b1.20251015211959 [FreeBSD-base]
        FreeBSD-ncurses-lib: 15.0.b1.20251015211959 [FreeBSD-base]

Installed packages to be UPGRADED:
        FreeBSD-acct: 15.0.b1.20251011075131 -> 15.0.b1.20251012072228 [FreeBSD-base]
        FreeBSD-acpi: 15.0.b1.20251011075131 -> 15.0.b1.20251012072228 [FreeBSD-base]
        FreeBSD-apm: 15.0.b1.20251011075131 -> 15.0.b1.20251012072228 [FreeBSD-base]
        (...)
        FreeBSD-zfs-dev: 15.0.b1.20251011075131 -> 15.0.b1.20251012072228 [FreeBSD-base]
        FreeBSD-zfs-lib: 15.0.b1.20251011075131 -> 15.0.b1.20251012072228 [FreeBSD-base]
        FreeBSD-zoneinfo: 15.0.b1.20251011075131 -> 15.0.b1.20251012072228 [FreeBSD-base]

Installed packages to be REMOVED:
        FreeBSD-unbound: 15.0.b1.20251011075131
        FreeBSD-unbound-dev: 15.0.b1.20251011075131

Number of packages to be removed: 2
Number of packages to be installed: 4
Number of packages to be upgraded: 202

The process will require 4 MiB more space.

Proceed with this action? [y/N]: y
[1/281] Upgrading FreeBSD-kernel-generic from 15.0.b1.20251011075131 to 15.0.b2.20251017190138...
[1/281] Extracting FreeBSD-kernel-generic-15.0.b2.20251017190138: 100%
[2/281] Deinstalling FreeBSD-set-base-15.0.b1.20251011075131...
(...)
[279/281] Extracting FreeBSD-zfs-dev-15.0.b1.20251012072228: 100%
[280/281] Installing FreeBSD-set-devel-15.0.b1.20251015211959...
[281/281] Installing FreeBSD-set-base-15.0.b1.20251012072228...

root@pkgbase:~ # freebsd-version -k
15.0-BETA2

root@pkgbase:~ # freebsd-version -u
15.0-BETA2

root@pkgbase:~ # freebsd-version -r
15.0-BETA1

root@pkgbase:~ # uname -prism
FreeBSD 15.0-BETA1 amd64 amd64 GENERIC

We may reboot now.

In both cases – for some reason – the FreeBSD-clibs-lib32 packages was pulled in as dependency … but You can delete it afterwards – it does not have any deps or reqs.

root@pkgbase:~ # pkg info | grep lib32
FreeBSD-clibs-lib32-15.0.b1.20251012072228 Core runtime libraries (32-bit libraries)

root@pkgbase:~ # pkg delete FreeBSD-clibs-lib32-15.0.b1.20251012072228
Cannot solve problem using SAT solver, trying another plan
(...)
Cannot solve problem using SAT solver, trying another plan
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
        FreeBSD-clibs-lib32: 15.0.b1.20251012072228

Number of packages to be removed: 1

The operation will free 4 MiB.

Proceed with deinstalling packages? [y/N]: y
[1/1] Deinstalling FreeBSD-clibs-lib32-15.0.b1.20251012072228...
[1/1] Deleting files for FreeBSD-clibs-lib32-15.0.b1.20251012072228: 100%

Vital

Some packages will be marked as vital to prevent pkg delete -a from working and making damage – but vital concept does NOT protect against pkg delete -af since the understanding is that force -f flag specifically means “I know what I am doing – remove the packages at all costs.” … You have been warned.

PKGBASE Jails

The bsdinstall(8) installer has been updated with pkgbase --jail option that allows to populate a directory as FreeBSD Jail.

This is the recipe.

root@pkgbase:~ # mkdir -pv /jail/NEW
/jail
/jail/NEW

root@pkgbase:~ # export BSDINSTALL_CHROOT=/jail/NEW

root@pkgbase:~ # env TERM=xterm bsdinstall pkgbase --jail

Next select needed sets and proceed.

After installation there are 178 pkg(8) packages installed.

root@pkgbase:~ # pkg -r /jail/NEW info | wc -l
     178

root@pkgbase:~ # pkg -r /jail/NEW info -as | sort -k 2 -h | column -t | tail -10
FreeBSD-libmagic-15.snap20251011015136              11.8MiB
FreeBSD-utilities-dev-15.snap20251017141652         17.1MiB
FreeBSD-lldb-15.snap20251011015136                  18.4MiB
FreeBSD-zfs-dev-15.snap20251011015136               22.1MiB
FreeBSD-locales-15.snap20251011015136               24.3MiB
FreeBSD-openssl-dev-15.snap20251011015136           32.8MiB
FreeBSD-utilities-15.snap20251017141652             49.3MiB
FreeBSD-clibs-dev-15.snap20251018120849             59.2MiB
FreeBSD-clang-dev-15.snap20251011015136             70.4MiB
FreeBSD-clang-15.snap20251015183322                 149MiB

root@pkgbase:~ # du -smA /jail/NEW
804     /jail/NEW

Keep in mind that the pkg(8) is still not bootstrapped – we can do that now.

root@pkgbase:~ # chroot /jail/NEW/

[jail] root@pkgbase:/ # echo nameserver 9.9.9.9 > /etc/resolv.conf

[jail] root@pkgbase:/ # mount -t devfs devfs /dev

[jail] root@pkgbase:/ # pkg info
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/latest, please wait...
Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done
Updating FreeBSD-ports repository catalogue...
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   10 MiB   2.6MB/s    00:04    
Processing entries: 100%
FreeBSD-ports repository update completed. 36389 packages processed.
Updating FreeBSD-ports-kmods repository catalogue...
Fetching meta.conf: 100%    179 B   0.2kB/s    00:01    
Fetching data.pkg: 100%   29 KiB  29.3kB/s    00:01    
Processing entries: 100%
FreeBSD-ports-kmods repository update completed. 200 packages processed.
Updating FreeBSD-base repository catalogue...
FreeBSD-base repository is up to date.
All repositories are up to date.

… as you not need CLANG compiler in the Jail you may as well remove that part – same as many others – this is where PKGBASE helps.

[jail] root@pkgbase:/ # pkg delete -f FreeBSD-clang-15.snap20251015183322 FreeBSD-clang-dev-15.snap20251011015136
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 2 packages (of 0 packages in the universe):

Installed packages to be REMOVED:
        FreeBSD-clang: 15.snap20251015183322
        FreeBSD-clang-dev: 15.snap20251011015136

Number of packages to be removed: 2

The operation will free 220 MiB.

Proceed with deinstalling packages? [y/N]: y
[1/2] Deinstalling FreeBSD-clang-dev-15.snap20251011015136...
[1/2] Deleting files for FreeBSD-clang-dev-15.snap20251011015136: 100%
[2/2] Deinstalling FreeBSD-clang-15.snap20251015183322...
[2/2] Deleting files for FreeBSD-clang-15.snap20251015183322: 100%

[jail] root@pkgbase:/ # du -smA .
704     .

100 MB less space.

Additional Independent Rescue

Often in a serious problem the FreeBSD Rescue subsystem located at /rescue is the last resort help … but it will also be removed – as any other package.

The good news is that nothing prevents You from creating your own even more secure /RESCUE that will be entirely independent from pkg(8) command operations.

Do not just copy /rescue dir with cp(1) command as it will take almost 3 GB (1.5 GB after ZFS compression) with such operation 🙂

root@pkgbase:/ # cp -ap /rescue /RESCUE
  
root@pkgbase:/ # du -sm /rescue /RESCUE
10      /rescue
1357    /RESCUE
  
root@pkgbase:/ # du -smA /rescue /RESCUE
20      /rescue
2855    /RESCUE

Here is how to create it in intelligent way – so it will only took the same small amount of space as original /rescue – with ln(1) hardlinks.

root@pkgbase:/ # mkdir /RESCUE

root@pkgbase:/ # cp /rescue/bectl /RESCUE/bectl

root@pkgbase:/ # cp /usr/local/sbin/pkg-static /RESCUE

root@pkgbase:/ # tar -cf /RESCUE/boot.tar /boot
tar: Removing leading '/' from member names
root@pkgbase:/ # ls -1 /rescue | while read I; do ln /RESCUE/bectl /RESCUE/"${I}"; done
ln: /RESCUE/bectl and /RESCUE/bectl are the same directory entry

root@pkgbase:/ # du -sm /rescue /RESCUE
11      /rescue
99      /RESCUE

root@pkgbase:/ # ls /rescue | wc -l
     148

root@pkgbase:/ # ls /RESCUE | wc -l
     152

root@pkgbase:/ # /RESCUE/bectl list
BE      Active Mountpoint Space Created
backup  -      -          393M  2025-10-18 23:35
default NR     /          1.42G 2025-10-18 16:31
new     -      -          8K    2025-10-20 12:46

You now have additional protection in case of serious emergency.

Our new /RESCUE is even better then the original on as we also have pkg-static(8) there … and a copy of /boot directory – so even if you wipe all FreeBSD system with pkg delete -fay you can restore the /boot and reboot into other ZFS Boot Environment 🙂

The rescue procedure looks like that one below.

root@pkgbase:~ # /RESCUE/tar -C / -xf /RESCUE/boot.tar
tar: Failed to set default locale
boot/efi/: Can't restore time: Invalid argument
tar: Error exit delayed from previous errors.

root@pkgbase:~ # /RESCUE/reboot

After reboot the FreeBSD loader(8) will welcome you with possibility to select different ZFS Boot Environment.

In the Works …

As final PKGBASE world had not yet settled – expect additions and updates to this article as soon as new info gets to me.

… and feel free to share your findings and hints for living in the PKGBASE world.

UPDATE 1 – Safely Remove All Third Party Packages

After evaluating possible ways I currently use this solution below as a replacement for pkg delete -yaf from before PKGBASE times.

First – the pkg query '%o %R' prints ORIGIN and REPOSITORY as list.

The column(1) command used only to make it more readable/aligned.

pkgbase # pkg query '%o %R' | column -t
(...)
base/FreeBSD-zlib                  FreeBSD-base
base/FreeBSD-zlib-dev              FreeBSD-base
base/FreeBSD-zoneinfo              FreeBSD-base
sysutils/beadm                     FreeBSD-ports
sysutils/lsblk                     FreeBSD-ports
ports-mgmt/pkg                     FreeBSD-base

So we can check the 2nd column using awk(1) for FreeBSD-ports value … and print only the ORIGIN.

pkgbase # pkg query '%o %R' | awk '$2=="FreeBSD-ports" {print $1}'
sysutils/beadm
sysutils/lsblk

Notice that since PKGBASE the pkg(8) is now registered as PKGBASE package.

Now – to remove all third party packages we can do this below.

pkgbase # pkg query '%o %R' | awk '$2=="FreeBSD-ports" {print $1}' | xargs -n1 echo pkg delete -f -y
pkg delete sysutils/beadm
pkg delete sysutils/lsblk

Now – to REALLY remove these packages first remove the echo safety switch from the command above to make it work – because right now it only prints instructions that will remove packages.

EOF
Top

Scripts Stats

Post by Vermaden via 𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗 »

I have grown many scripts in my UNIX life – close to 500 that I still use daily and even more then 700 in my 18 years time at various jobs … and also often for personal daily reasons.

% find ~/scripts -maxdepth 1 | wc -l
     492

% find ~/scripts -type f | wc -l
     702

All (or most) of these scripts are available on my https://github.com/vermaden/scripts GitHub page.

Feel free to ask me about ones I did not added there.

… and while having all of them – I was curious … how often I use them.

Are they still useful? Should I delete them? Phase out? Archive?

There was time that You probably seen the following code part in some of my scripts.

echo '1' 2> /dev/null >> ~/scripts/stats/${0##*/}

It is/was for stats.

I have created a ~/scripts/stats directory in which I stored stats for how often I executed my scripts … and gathered these stats for 3 years.

The start date of the experiment was on 2020/10/17 day.

To be honest – the code snipped should have looked like that one below – to make sure its possible to store the stats and the dir exists 🙂

mkdir -p                 ~/scripts/stats || exit 0
echo '1' 2> /dev/null >> ~/scripts/stats/${0##*/}

The complete stats are below – but be advised that they contain various scripts I run using cron(8) or that they are part of my 5 minutes or less Dzen2 information bar.

5800969  TOTAL
1074619  desktop-kill-shit.sh
 506653  __conky_if_dns.sh
 506485  __conky_if_ping.sh
 506466  __conky_if_gw.sh
 506357  dzen2-update.sh
 499821  __conky_if_ip.sh
 493590  __conky_battery_separate.sh
 484046  desktop-battery-warning.sh
 363833  __conky_if_xfer.sh
 207484  rsync-delete.sh
 132050  acpi-thinkpad-fan.sh
 155405  random-wallpaper.sh
  94059  rsync-delete-before.sh
  42239  xdotool.sh
  41625  to-ascii.sh
  37234  random.sh
  25154  xterm.sh
  20593  random-wallpaper-always.sh
  12811  __conky_battery.sh
  11162  todo.sh
  11135  cal.sh
   8634  network.sh
   6303  mpv.sh
   6249  ff.mp3.320.sh
   6017  mupdf.sh
   4771  see.sh
   3565  shot.sh
   2977  __openbox_lock.sh
   2034  urxvt.sh
   2024  aero-snap.sh
   1702  terminal.sh
   1236  desktop-debug.sh
   1082  photo-unsharp-mask-JPG.sh
   1073  dzen2-fifo.sh
   1073  __openbox_restart_dzen2.sh
   1072  __openbox_restart_tint2.sh
    788  thunar-mass-rename.sh
    741  __openbox_freebsd_sound.sh
    724  __openbox_lock_zzz.sh
    694  generate-links.sh
    683  __openbox_cpufreq_dynamic.sh
    682  __openbox_delete_wallpaper.sh
    655  __openbox_restart_conky.sh
    637  backup-cfg.sh
    620  photo-movie-audio-ac3.sh
    508  __openbox_virtualbox.sh
    503  to-lower.sh
    483  desktop-pause.sh
    468  __openbox_clean_tmp.sh
    460  ncdu.sh
    434  __openbox_cpufreq.sh
    420  firefox.sh
    384  rsync-delete-checksum.sh
    377  nfs.sh
    365  __openbox_edit_screenshot.sh
    342  games-sensible-world-of-soccer-SFX.sh
    322  sumatra.sh
    291  mdconfig.sh
    286  __openbox_dmenu.sh
    285  __random.sh
    284  mouse-move.sh
    277  photo-movie-audio-copy.sh
    272  mp3-EYE3D-remove-id.sh
    231  photo-movie-audio-copy-x265.sh
    226  __openbox_restart_redshift.sh
    208  __openbox_edit_wallpaper_gimp.sh
    205  __openbox_show_screenshot.sh
    188  __openbox_current_wallpaper.sh
    184  mpv-shuffle.sh
    183  __openbox_trash_delete.sh
    182  games-baldurs-gate-II-ee-fullscreen.sh
    162  __openbox_phaseout_wallpaper.sh
    161  files-count.sh
    152  photo-movie-half-audio-copy-x265.sh
    142  rsync.sh
    142  pdf-split.sh
    135  rdesktop-mine.sh
    135  pdf-pts-scale.sh
    135  __openbox_restart_plank.sh
    118  to-ascii-all.sh
    102  battery-capacity.sh
     93  __openbox_reload_wallpaper.sh
     89  jhead.sh
     86  tile.sh
     77  photo-requality.sh
     74  photo-rename-images.sh
     68  zip.sh
     68  pdf-concat.sh
     66  colors.sh
     65  games-baldurs-gate-I-ee-fullscreen.sh
     64  thunar.sh
     57  smartwear.sh
     57  photo-rename-movies.sh
     53  tcpkill.sh
     53  fastdiff.sh
     49  __openbox_restart_compton.sh
     48  pkg-recompile.sh
     47  sensors.sh
     45  vbox-suid.sh
     45  __openbox_restart_xbindkeys.sh
     42  games-baldurs-gate-I-fullscreen.sh
     41  contacts-convert-vcf-from.sh
     40  games-baldurs-gate-I-ee-window.sh
     40  contacts-check.sh
     38  dedup.sh
     36  pdf-extract.sh
     35  photo-unsharp-mask-PNG.sh
     35  games-colin-mcrae-rally-2.0-window.sh
     32  files-big.sh
     32  epiphany.sh
     31  photo-flow.sh
     31  backup-remote-checksum.sh
     30  loop.sh
     30  firefox-clean.sh
     27  idle.sh
     24  games-icewind-dale-ee-fullscreen.sh
     23  games-sensible-world-of-soccer.sh
     23  games-heroes-of-might-and-magic-III-window.sh
     22  fc-cache.sh
     20  xnview.sh
     20  __openbox_stop_compton.sh
     19  key.sh
     18  winscp.sh
     18  games-heroes-of-might-and-magic-III-HotA-window.sh
     18  __openbox_restart_squid.sh
     17  ports-generate-distinfo.sh
     17  games-swing.sh
     16  games-diablo.sh
     15  games-baldurs-gate-II-ee-window.sh
     15  backup-sys.sh
     11  pdf-rotate-right.sh
     11  games-DOSBOX.sh
     10  nfs-clean.sh
     10  http.sh
     10  games-pro-pinball-timeshock-window.sh
     10  games-lionheart-window.sh
      9  games-heroes-of-might-and-magic-III-HotA-fullscreen.sh
      9  ff.mp3.160.sh
      9  contacts-convert-vcf-to.sh
      9  __xterm_link_open.sh
      8  sshfs.sh
      8  lsblk.sh
      8  html-strip-script.sh
      8  games-fallout-2-window.sh
      8  games-fallout-2-fullscreen.sh
      8  games-canyon-defence.sh
      8  games-all-terrain-racing.sh
      8  __openbox_monitor_off_auto.sh
      7  games-sensible-world-of-soccer-UPG.sh
      7  games-pinball-space-cadet-NATIVE.sh
      6  rdesktop_1800_1000.sh
      6  netstat.sh
      6  games-colin-mcrae-rally-2.0-fullscreen.sh
      6  games-baldurs-gate-I-window.sh
      6  __openbox_virtualbox_vmctrl.sh
      6  __openbox_stop_plank.sh
      6  __openbox_stats_top_cpu_RENICE.sh
      6  __openbox_stats_ps_KILLALL.sh
      5  vergallery.sh
      5  rsync-delete-linux.sh
      5  games-worms-armageddon-fullscreen.sh
      5  games-robokill-1.sh
      5  games-heroes-of-might-and-magic-II.sh
      5  freebsd-lists.sh
      5  detox.sh
      5  __openbox_virtualbox_reload.sh
      5  __openbox_stats_top_cpu_KILL.sh
      5  __conky_top.sh
      4  wm_names.sh
      4  photo-movie-half-audio-copy-x264.sh
      4  photo-movie-audio-ac3-CRF.sh
      4  gg-log.sh
      4  games-sensible-golf.sh
      4  games-robokill-2.sh
      4  games-pinball-short-circuit.sh
      4  games-lionheart-fullscreen.sh
      4  __xterm_set_title.sh
      4  __openbox_stop_dzen2.sh
      4  __openbox_stats_top_mem_RENICE.sh
      3  see-open.sh
      3  photo-FLOW.sh
      3  jail.sh
      3  jail-version.sh
      3  games-theme-hospital.sh
      3  games-supercars-international.sh
      3  games-governor-of-poker.sh
      3  games-carmageddon.sh
      3  ext-maxtor.sh
      3  __openbox_stop_tint2.sh
      3  __openbox_stats_top_mem_KILL.sh

The same list without the stuff that runs periodically in cron(8) is below.

235624  TOTAL
 42239  xdotool.sh
 41625  to-ascii.sh
 37234  random.sh
 25154  xterm.sh
 11162  todo.sh
 11135  cal.sh
  8634  network.sh
  6303  mpv.sh
  6249  ff.mp3.320.sh
  6017  mupdf.sh
  4771  see.sh
  3565  shot.sh
  2977  __openbox_lock.sh
  2034  urxvt.sh
  2024  aero-snap.sh
  1702  terminal.sh
  1236  desktop-debug.sh
  1082  photo-unsharp-mask-JPG.sh
  1073  __openbox_restart_dzen2.sh
  1072  __openbox_restart_tint2.sh
   788  thunar-mass-rename.sh
   741  __openbox_freebsd_sound.sh
   724  __openbox_lock_zzz.sh
   694  generate-links.sh
   683  __openbox_cpufreq_dynamic.sh
   682  __openbox_delete_wallpaper.sh
   655  __openbox_restart_conky.sh
   637  backup-cfg.sh
   620  photo-movie-audio-ac3.sh
   508  __openbox_virtualbox.sh
   503  to-lower.sh
   483  desktop-pause.sh
   468  __openbox_clean_tmp.sh
   460  ncdu.sh
   434  __openbox_cpufreq.sh
   420  firefox.sh
   384  rsync-delete-checksum.sh
   377  nfs.sh
   365  __openbox_edit_screenshot.sh
   342  games-sensible-world-of-soccer-SFX.sh
   322  sumatra.sh
   291  mdconfig.sh
   286  __openbox_dmenu.sh
   285  __random.sh
   284  mouse-move.sh
   277  photo-movie-audio-copy.sh
   272  mp3-EYE3D-remove-id.sh
   231  photo-movie-audio-copy-x265.sh
   226  __openbox_restart_redshift.sh
   208  __openbox_edit_wallpaper_gimp.sh
   205  __openbox_show_screenshot.sh
   188  __openbox_current_wallpaper.sh
   184  mpv-shuffle.sh
   183  __openbox_trash_delete.sh
   182  games-baldurs-gate-II-ee-fullscreen.sh
   162  __openbox_phaseout_wallpaper.sh
   161  files-count.sh
   152  photo-movie-half-audio-copy-x265.sh
   142  rsync.sh
   142  pdf-split.sh
   135  rdesktop-mine.sh
   135  pdf-pts-scale.sh
   135  __openbox_restart_plank.sh
   118  to-ascii-all.sh
   102  battery-capacity.sh
    93  __openbox_reload_wallpaper.sh
    89  jhead.sh
    86  tile.sh
    77  photo-requality.sh
    74  photo-rename-images.sh
    68  zip.sh
    68  pdf-concat.sh
    66  colors.sh
    65  games-baldurs-gate-I-ee-fullscreen.sh
    64  thunar.sh
    57  smartwear.sh
    57  photo-rename-movies.sh
    53  tcpkill.sh
    53  fastdiff.sh
    49  __openbox_restart_compton.sh
    48  pkg-recompile.sh
    47  sensors.sh
    45  vbox-suid.sh
    45  __openbox_restart_xbindkeys.sh
    42  games-baldurs-gate-I-fullscreen.sh
    41  contacts-convert-vcf-from.sh
    40  games-baldurs-gate-I-ee-window.sh
    40  contacts-check.sh
    38  dedup.sh
    36  pdf-extract.sh
    35  photo-unsharp-mask-PNG.sh
    35  games-colin-mcrae-rally-2.0-window.sh
    32  files-big.sh
    32  epiphany.sh
    31  photo-flow.sh
    31  backup-remote-checksum.sh
    30  loop.sh
    30  firefox-clean.sh
    27  idle.sh
    24  games-icewind-dale-ee-fullscreen.sh
    23  games-sensible-world-of-soccer.sh
    23  games-heroes-of-might-and-magic-III-window.sh
    22  fc-cache.sh
    20  xnview.sh
    20  __openbox_stop_compton.sh
    19  key.sh
    18  winscp.sh
    18  games-heroes-of-might-and-magic-III-HotA-window.sh
    18  __openbox_restart_squid.sh
    17  ports-generate-distinfo.sh
    17  games-swing.sh
    16  games-diablo.sh
    15  games-baldurs-gate-II-ee-window.sh
    15  backup-sys.sh
    11  pdf-rotate-right.sh
    11  games-DOSBOX.sh
    10  nfs-clean.sh
    10  http.sh
    10  games-pro-pinball-timeshock-window.sh
    10  games-lionheart-window.sh
     9  games-heroes-of-might-and-magic-III-HotA-fullscreen.sh
     9  ff.mp3.160.sh
     9  contacts-convert-vcf-to.sh
     9  __xterm_link_open.sh
     8  sshfs.sh
     8  lsblk.sh
     8  html-strip-script.sh
     8  games-fallout-2-window.sh
     8  games-fallout-2-fullscreen.sh
     8  games-canyon-defence.sh
     8  games-all-terrain-racing.sh
     8  __openbox_monitor_off_auto.sh
     7  games-sensible-world-of-soccer-UPG.sh
     7  games-pinball-space-cadet-NATIVE.sh
     6  rdesktop_1800_1000.sh
     6  netstat.sh
     6  games-colin-mcrae-rally-2.0-fullscreen.sh
     6  games-baldurs-gate-I-window.sh
     6  __openbox_virtualbox_vmctrl.sh
     6  __openbox_stop_plank.sh
     6  __openbox_stats_top_cpu_RENICE.sh
     6  __openbox_stats_ps_KILLALL.sh
     5  vergallery.sh
     5  rsync-delete-linux.sh
     5  games-worms-armageddon-fullscreen.sh
     5  games-robokill-1.sh
     5  games-heroes-of-might-and-magic-II.sh
     5  freebsd-lists.sh
     5  detox.sh
     5  __openbox_virtualbox_reload.sh
     5  __openbox_stats_top_cpu_KILL.sh
     5  __conky_top.sh
     4  wm_names.sh
     4  photo-movie-half-audio-copy-x264.sh
     4  photo-movie-audio-ac3-CRF.sh
     4  gg-log.sh
     4  games-sensible-golf.sh
     4  games-robokill-2.sh
     4  games-pinball-short-circuit.sh
     4  games-lionheart-fullscreen.sh
     4  __xterm_set_title.sh
     4  __openbox_stop_dzen2.sh
     4  __openbox_stats_top_mem_RENICE.sh
     3  see-open.sh
     3  photo-FLOW.sh
     3  jail.sh
     3  jail-version.sh
     3  games-theme-hospital.sh
     3  games-supercars-international.sh
     3  games-governor-of-poker.sh
     3  games-carmageddon.sh
     3  ext-maxtor.sh
     3  __openbox_stop_tint2.sh
     3  __openbox_stats_top_mem_KILL.sh

The experiment ended on 2023/10/17.

This is the time I removed the known code snipped from all of the scripts.

This data helped me to tweak a little more the ones that I use the most … and especially the ones that are run by my Dzen2 info bar config or in cron(8) daemon.

Some of this input also helped me to just phase out the ones that are not needed anymore … to put them into retirement.

EOF
Top

HardenedBSD December 2025 Status Report

Post by HardenedBSD via HardenedBSD »

This status report is going to be a lengthy one. Due to scheduling conflicts, I was unable to get out the November status report, this one will cover the two months November - December 2025.

A large portion of my focus has been on the infrastructure, getting a build environment for the recently-created hardened/15-stable/main branch. As discussed in a previous mailing list thread[1], the 14-STABLE build infrastructure has now been migrated to 15-STABLE. We have archived the last 14-STABLE package build, which last completed on 24 Dec 2025.

We self-host nearly the entirety of our infrastructure out of my home. We have only one leased server, from the fine folks at NetActuate (previously RootBSD). This leased server hosts our main website, the hbsd-update build artifacts, and the package repos. Our package repos, naturally, grow over time. Back when we started this, each package repo was at most 75GB in size. Now we're encroaching 135GB.

We now have a 30TB NAS in the home-based infrastructure. In order to support the growth, we will be migrating the package repo to the home infra. The package repos themselves have already been migrated. The only thing left to do is adjust the various DNS entries. I plan to do that once we have a usable 15-STABLE package repo. We will update this[2] mailing list thread when the migration has completed, DNS records and all. There will likely be a little blip in HTTPS/TLS connections as we regenerate LetsEncrypt certs. There's a delicate dance here. I plan to keep everyone informed as to when I begin and complete the process.

The 14-STABLE build server (which is now being migrated to 15-STABLE) housed two VMs:

  1. The OS installer/update build VM. This builds the artifacts published at https://installers.hardenedbsd.org/ and mirrors.
  2. The package build VM.

When we deployed that (stupendously) slow server to test its capabilities as a build server for 15-STABLE, we followed the same pattern: two separate VMs. We are going to keep the 15-STABLE OS installer/update build VM on that slow server. We're going to power off the 14-STABLE OS build VM and increase the resources to the package build VM. This means we should be able to decrease the time it takes for that server to produce a usable package repo. Naturally, this comes at a cost of a slow build time for the OS installer/updates, but that process can tolerate **a lot** of slowness. So long as it can produce its build artifacts in less than 48 hours, I'm satisfied. It's the package building (36,000+ packages) that takes the most resources.

I spent a lot of time in the ports tree over the past couple months. The focus was on fixing ports broken by the various hardening techniques we employ. The introduction of -Werror=format-security caused a large amount of fallout, which I have been addressing. While addressing those, I figured I might as well fix ports broken by the other techniques.

I'm working on enhancing libhbsdcontrol with better error handling. I'm hoping to have that work committed in early January 2026.

I'm hoping in January to spend some time on hbsdfw. The VM I've been using to build hbsdfw has been panicking when the Poudriere build finishes when building the hbsdfw packages. In Q1 2026, I plan to migrate hbsdfw from HardenedBSD 14-STABLE to 16-CURRENT. Following the hardened/current/master src branch will lighten my load in maintaining this little hobby subproject.

I need to file a bug report upstream in FreeBSD/OpenZFS to track this kernel panic. The panic happens when something during the build checks whether PaX PAGEEXEC is enabled through looking up a filesystem extended attribute. OpenZFS recently changed how filesystem extended attributes work, so it's possible we're hitting a unique edge case.

In January, I'm going to get two lab environments set up:

  1. Internal Reticulum nodes to test the Reticulum protocol and its potential for use with our censorship- and surveillance-resistant mesh network R&D.
  2. Internal Radicle nodes to start concerted testing to eventually replace GitLab with Radicle.

I feel somewhat down for not making more progress this year on the censorship- and surveillance-resistant networks. I'm hoping to place more emphasis on this in 2026.

In src:

  1. Always build elftc-nm and elft-ar
  2. TPE: Ensure user-owned vnodes are unwritable
  3. ASLR: Use VMFS_NO_SPACE to map the stack
  4. Add various C/C++ hardening flags:
    1. -fno-delete-null-pointer-checks
    2. -Werror=format-security
  5. Unlock the sound mutex on error
  6. Fix branch detection in release
  7. Disable SafeStack for the Unbound daemon
  8. Some pkgbase-related work

In ports (this is gonna be a long list (our longest to date)):

  1. Disable LINUX for x11/nvidia-kmod
  2. ftp/curl: Fixup .onion patch
  3. Add "general compilation hardening" USES
  4. Delete unneeded patch for databases/redis
  5. Fix archivers/zip
  6. Disable hardcflags for devel/m4
  7. Disable hardcflags for lang/gcc13
  8. Disable HARDCFLAGS for devel/t1lib
  9. Fix HARDCFLAGS errors for devel/ctags
  10. Disable HARDCFLAGS for archivers/unzip
  11. Fix HARDCFLAGS for net-mgmt/libsmi
  12. Disable HARDCFLAGS for x11-toolkits/open-motif
  13. Disable HARDCFLAGS for devel/expect
  14. Fix the devel/ivykis port
  15. Fix HARDCFLAGS for multimedia/webcamd
  16. Disable HARDCFLAGS for lang/gcc12
  17. Disable HardenedBSD features for lang/gcc14
  18. Disable HardenedBSD features for lang/gcc15
  19. Disable HardenedBSD features for lang/gcc16-devel
  20. Fix HARDCFLAGS for multimedia/smpeg
  21. Disable HARDCFLAGS for devel/elfutils
  22. Fix HARDCFLAGS for converters/recode
  23. Disable fortifysource for graphics/netpbm
  24. Fix hardcflags for devel/fortytwo-encore
  25. Fix HARDCFLAGS for graphics/libvisual04
  26. Disable HARDCFLAGS for devel/kBuild
  27. Fix HARDCFLAGS for devel/libbegemot
  28. Fix HARDCFLAGS for games/pmars-sdl
  29. Disable FORTIFYSOURCE for security/signify
  30. Disable HARDCFLAGS for mail/mailutils
  31. Fix HARDCFLAGS for devel/ta-lib
  32. Fix HARDCFLAGS for math/spooles
  33. Fix HARDCFLAGS for textproc/wv
  34. Fix HARDCFLAGS for databases/sqlite2
  35. Disable HARDCFLAGS for graphics/lensfun
  36. Fix HARDCFLAGS for devel/rlwrap
  37. Disable fortifysource for mail/opensmtpd
  38. Fix HARDCFLAGS for x11-toolkits/unique
  39. Fix HARDCFLAGS for devel/efivar
  40. Fix HARDCFLAGS for lang/f2c
  41. Fix HARDCFLAGS for textproc/scim-table-imengine
  42. Disable FORTIFYSOURCE and HARDCFLAGS for sysutils/fwupd-efi
  43. Fix HARDCFLAGS for games/libmt_client
  44. Disable HARDCFLAGS for games/gnugo
  45. Fix HARDCFLAGS for comms/rxtx
  46. Disable PIE and RELRO for databases/redis
  47. Fix build for devel/omniORB
  48. Fix build of security/rubygem-bcrypt_pbkdf
  49. Fix HARDCFLAGS for math/grace
  50. Fix HARDCFLAGS for audio/libbs2b
  51. Disable HARDCFLAGS for graphics/plotutils
  52. Fix HARDCFLAGS for emulators/libretro-reicast
  53. Add -Wformat for HARDCFLAGS
  54. Disable HARDCFLAGS for graphics/gracula
  55. Fix HARDCFLAGS for mail/spmfilter
  56. Add cheat support in games/ioquake3
  57. Fix HARDCFLAGS for print/catdvi
  58. Fix HARDCFLAGS for graphics/seom
  59. Fix HARDCFLAGS for deskutils/presage
  60. Fix HARDCFLAGS for graphics/alpng
  61. Enable SLH for games/ioquake3
  62. Fix -Werror=format-security bug in games/ioquake3
  63. Fix HARDCFLAGS for x11-toolkits/fox16
  64. Disable HARDCFLAGS for graphics/glslang
  65. Re-enable PIE and RELRO for databases/redis
  66. Fix HARDCFLAGS for converters/uudeview
  67. Fix HARDCFLAGS for textproc/gdome2
  68. Disable FORTIFYSOURCE for misc/mbuffer
  69. Disable HARDCFLAGS for archivers/unarj
  70. Disable FORTIFYSOURCE for misc/amanda-{client,server}
  71. Disable FORTIFYSOURCE for net/dante
  72. Fix HARDCFLAGS for archivers/sharutils
  73. Fix HARDCFLAGS for lang/squeak
  74. Disable FORTIFYSOURCE for devel/socket_wrapper
  75. Fix HARDCFLAGS for net/pvm
  76. Fix HARDCFLAGS for audio/snack
  77. Fix HARDCFLAGS for textproc/sgmlformat
  78. Fix HARDCFLAGS for cad/iverilog
  79. Fix HARDCFLAGS for sysutils/genisoimage
  80. Disable HARDCFLAGS for games/libretro-boom3
  81. Fix HARDCFLAGS for math/testu01
  82. Disable FORTIFYSOURCE for devel/pcc-libs
  83. Disable PIE for security/cryptlib
  84. Fix HARDCFLAGS for mail/addresses-goodies
  85. Fix build of devel/ivykis on 14-stable
  86. Disable HARDCFLAGS for security/pgpin
  87. (0x1eef) Fix grub2-bhyve build error
  88. Disable HARDCFLAGS for devel/cunit
  89. Disable FORTIFYSOURCE for editors/dte
  90. Disable FORTIFYSOURCE for mail/akpop3d
  91. Disable HARDCFLAGS for emulators/x48
  92. Fix HARDCFLAGS for net/osrtspproxy
  93. Fix HARDCFLAGS for mail/qmailmrtg7
  94. Fix HARDCFLAGS for print/transfig
  95. Disable PIE for graphics/nsxiv
  96. Disable FORTIFYSOURCE for devel/uid_wrapper
  97. Disable HARDCFLAGS for devel/cweb
  98. Fix FORTIFYSOURCE for multimedia/ffmpeg
  99. Fix build of lang/gcc14
  100. Fix FORTIFYSOURCE for devel/tex-libtexluajit
  101. Disable FORTIFYSOURCE and HARDCFLAGS for security/barnyard2
  102. Fix build of lang/gcc12
  103. Fix build of databases/arrow

[1]: https://groups.google.com/a/hardenedbsd.org/g/users/c/51IARO8noYo/m/asRq...
[2]: https://groups.google.com/a/hardenedbsd.org/g/users/c/G6HbsE8DA5w/m/I4ou...

Top