Working with the FreeBSD base system

In some situations it may be necessary to make changes to existing software that comes in the FreeBSD base system.

This section describes how to make such changes using an example.

Example

Suppose you would like to make a small change to the source code of software that comes in the FreeBSD base system.

Here is a real-life example on how to do that:

https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=251025 can be fixed by changing a few lines in

https://github.com/freebsd/freebsd-src/blob/main/usr.sbin/efivar/efivar.c

Installing the FreeBSD source code

Unfortunately one has to download/update the whole FreeBSD source code, even if one just wants to make a change to one command line tool.

From http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/12.2-RELEASE/ (or from whatever FreeBSD version you are using) download src.txz. Then:

$ cd /
$ tar xf ~/Downloads/src.txz
$ rm ~/Downloads/src.txz

Building a command line tool without changes

Build the command line tool without changes first to ensure it builds and works as expected.

$ cd /usr/src/usr.sbin/efivar/
$ make
$ /usr/obj/usr/src/amd64.amd64/usr.sbin/efivar/efivar

Making changes

Now make changes to the command line tool.

$ cd /usr/src/usr.sbin/efivar/
$ rm efivar.c
// From https://reviews.freebsd.org/D29620
$ wget "https://reviews.freebsd.org/file/data/yytb47lr5cxaijaaupeh/PHID-FILE-gihl33z7feu4dagjxjgz/usr.sbin_efivar_efivar.c" -O efivar.c
$ make
$ /usr/obj/usr/src/amd64.amd64/usr.sbin/efivar/efivar