Page MenuHomeFreeBSD

handbook: Updating FreeBSD with packages reworked, Event: Wiesbaden Hackathon 202604
Needs ReviewPublic

Authored by lukas.engelhardt_gmx.de on Apr 25 2026, 1:19 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sat, Jun 20, 5:27 PM
Unknown Object (File)
Wed, Jun 10, 3:43 PM
Unknown Object (File)
Thu, Jun 4, 2:04 AM
Unknown Object (File)
Sat, May 30, 9:49 PM
Unknown Object (File)
Tue, May 26, 8:27 PM
Unknown Object (File)
Tue, May 26, 8:18 PM
Unknown Object (File)
Tue, May 26, 2:04 PM
Unknown Object (File)
Tue, May 26, 2:01 PM

Details

Reviewers
bcr

Diff Detail

Repository
R9 FreeBSD doc repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 73095
Build 69978: arc lint + arc unit

Event Timeline

A couple of suggestions for corrections.

documentation/content/en/books/handbook/cutting-edge/_index.adoc
1093–1094

Whitespace at the end of the line here and below.

1261

How about this:
When running on ZFS, using ... (avoids the use of using twice in a sentence)

1273

s/is are/is/

1274

s/if these packages/if the listed packages/
(more precise)

1362

s/Version/version/

1454

Line break here after the sentence stop.

1455

Another whitespace only line.

1460

s/or something like that//

1462

s/set up a nginx service/set up a webserver like nginx/

lukas.engelhardt_gmx.de marked 9 inline comments as done.

fixed the comments, thanks @bcr

documentation/content/en/books/handbook/cutting-edge/_index.adoc
1455

Whitespace Line needed for the Handbook rendering to show a line break.

documentation/content/en/books/handbook/cutting-edge/_index.adoc
1093–1094

this should really say 15.0, not 14.0. pkgbase was unofficially published since many years ago, but it is only supported by re/secteam since 15.0.

1101
1155
1160–1173

only if you do a non-pkgbase install. if you select pkgbase during install, the FreeBSD-base repository will be enabled by bsdinstall creating a file in /usr/local/pkg/repos.

1166

i suggest calling this FreeBSD-base.conf, to match the file bsdinstall would have created.

1190

users really shouldn't be overriding anything here except url if they want to switch to a different release. if they want to use a local package repository, they should define a new repository with a different name.

1193
1243

stable and current don't have patch levels, but perhaps there's a better wording to indicate this won't do a release upgrade unless you change the url.

1261

ZFS should be capitalised.

1273–1274

it doesn't "therefore segfault". there was a bug where removing pkg would cause a segfault, but this was fixed a long time ago. also, it shouldn't remove pkg if you do it correctly. this may involve installing e.g. compat14x before upgrading to 15.

1306

not exactly. releases managed by releng have different signing keys, but this only applies to 15.0-RELEASE, not to 15-STABLE or 16-CURRENT.

1339

is there a reason to use -c here? usually -r would be preferred, but i haven't tested this myself.

1441

you can do this while cloning using git clone -b releng/15.0 ...

1454

this is a bit unclear. it copies unchanged packages from any previous update-packages build. if you just did your first build, it will not copy anything. also, more idiomatic English would be something like "The update-packages target copies any unchanged packages [from the previous build]."

1462
1466–1467

it's not really necessary to include the ABI here. you can use /usr/obj/usr/src/repo as the root directory to publish all builds for any architecture/version.

1477–1478

this should probably be called base or something like that, since the user will presumably want to continue using it when they upgrade again the next time.

also, they need to disable the FreeBSD-base repository when using a local repository.

lukas.engelhardt_gmx.de marked 14 inline comments as done.

Thanks @ivy, i made some comments so i would appreciate if you could take another look at it.

documentation/content/en/books/handbook/cutting-edge/_index.adoc
1166

i would like to check if that is true, but i am pretty shure that the file in /usr/local/etc/pkg/repos is called FreeBSD.conf.

Comparing the Release Notes:
https://www.freebsd.org/releases/15.0R/relnotes/
Where you can find:

echo "FreeBSD-base: { enabled: yes }" > /usr/local/etc/pkg/repos/FreeBSD.conf

1273–1274

should we remove the pkg locking part and just keep the pkgbase with 14 is experimental as a warning?

1339

Most of the time i first create the boot env, change the configuration file inside the boot env and then use -c, so it uses the configuration files inside the boot env, but that's probably the only reason. I changed it to -r

1441

I actually didn't know that. But i think i would prefer to keep it in there, so if anyone has already cloned the repo he can change to a different branch with the command provided.

@ivy i checked with a fresh installation for the configuration name, please take a second look at my comments/replys to your comments, thanks!

documentation/content/en/books/handbook/cutting-edge/_index.adoc
1166

okay, i double checked by freshly installing a pkgbased vm with the 15.0 amd64 disk1 iso and after installing /etc/pkg/FreeBSD.conf and /usr/local/etc/pkg/repos/FreeBSD.conf exist. The repository name in the config is FreeBSD-base, but the configuration file is named FreeBSD.conf.

Small textual corrections, nothing major.

documentation/content/en/books/handbook/cutting-edge/_index.adoc
1160–1173

Line break after the sentence stop here.

1180–1184

Line break here as well after the sentence stop.

1308

s/developement/development/
s/require to change/require changing/

1362

Line break here after the sentence stop.

1484–1498

Insert a line break here after the sentence stop.

lukas.engelhardt_gmx.de marked 6 inline comments as done.

Thanks @bcr, i think this should be ready to be committed

ivy added inline comments.
documentation/content/en/books/handbook/cutting-edge/_index.adoc
1166

yes, you're right; for some reason it's called FreeBSD-base.conf on my 15.0 reference VM, but it's possible that system predates 15.0-RELEASE and has an older config.

1273–1274

yes, i think so. i also discovered that if you lock pkg, trying to upgrade pkg will produce an error message, which means upgrading won't work if the new system has a newer pkg version.

1339

okay; i don't really have a preference here so that sounds reasonable. however, @dch pointed out that setting VERSION_MINOR like this doesn't actually work:

# env ABI=FreeBSD:15:amd64 VERSION_MINOR=1 pkg repos|grep url
pkg: Setting ABI requires setting OSVERSION, guessing the OSVERSION as: 1500000
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/latest",
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_latest_0",
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/base_release_0",

instead you can use OSVERSION:

# env ABI=FreeBSD:15:amd64 OSVERSION=1501000 pkg repos|grep url
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/latest",
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_latest_1",
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/base_release_1",
lukas.engelhardt_gmx.de marked 2 inline comments as done.

included some of the comments, i am unsure what to do with the VERSION_MINOR, please take a look at my comment added.

documentation/content/en/books/handbook/cutting-edge/_index.adoc
1339

I don't understand where these values are coming from.
If you set OSVERSION=1501000 and don't set ABI, OSVERSION is ignored:

root@freebsddoku:~ # env OSVERSION=1501000 pkg repos | grep url
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:14:amd64/quarterly",
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:14:amd64/kmods_quarterly_3",
root@freebsddoku:~ # uname -a
FreeBSD freebsddoku 14.3-RELEASE-p11 FreeBSD 14.3-RELEASE-p11 GENERIC amd64

This also happens, when OSVERSION is set to 1401000.

Why are variables defined if you can't overwrite them with environment variables?

I could change this to "set the url in the config file" to mitigate the variable thing, but that seems not to be the correct way.

@dch pointed me to a patch he created:
https://github.com/freebsd/pkg/pull/2674
Once this lands we might be able to use the VERSION_MINOR environment variable.
I will try to test this, but if i understand correctly this should be fixed with latest pkg Version?

Once this lands we might be able to use the VERSION_MINOR environment variable.
I will try to test this, but if i understand correctly this should be fixed with latest pkg Version?

hopefully, yes. however, we can't make this the only way to upgrade unless we EN the new version of pkg to 15.0. otherwise, people who don't upgrade pkg from ports won't be able to upgrade the OS. so i think we should document both methods.

edit: alternatively we could document how to install the newer pkg from 15.1 before upgrading; i don't think i like that as much, but it may be a good idea to make that standard practice to avoid running in bugs in old versions of pkg.

documentation/content/en/books/handbook/cutting-edge/_index.adoc
1339

I don't understand where these values are coming from.

OSVERSION is __FreeBSD_version from sys/sys/param.h. for releases, release X.Y will be XXYYnnn, where nnn can be 0 for the purposes of upgrading.

i don't know why pkg only looks at OSVERSION if you don't set ABI; i suspect the logic is that, for non-pkgbase upgrades, you only need to set OSVERSION if you're also setting ABI. so using this for upgrading is more of a workaround than the intended use, but it does work.

I could change this to "set the url in the config file" to mitigate the variable thing, but that seems not to be the correct way.

i don't think we should suggest editing the config file if there's another way to do this, since it's more likely to lead to errors (users forgetting to remove the edits, etc).