8. Publishing FreeBSD Installation Media to Project Mirrors

This section describes the procedure to publish FreeBSD development snapshots and releases to the Project mirrors.

8.1. Staging FreeBSD Installation Media Images

Staging FreeBSD snapshots and releases is a two part process:

  • Creating the directory structure to match the hierarchy on ftp-master

    If EVERYTHINGISFINE is defined in the build configuration files, main.conf in the case of the build scripts referenced above, this happens automatically in the chroot(8) after the build is complete, creating the directory structure in ${DESTDIR}/R/ftp-stage with a path structure matching what is expected on ftp-master. This is equivalent to running the following in the chroot(8) directly:

    # make -C /usr/src/release -f Makefile.mirrors EVERYTHINGISFINE=1 ftp-stage

    After each architecture is built, thermite.sh will rsync the ${DESTDIR}/R/ftp-stage from the build chroot(8) to /snap/ftp/snapshots or /snap/ftp/releases on the build host, respectively.

  • Copying the files to a staging directory on ftp-master before moving the files into pub/ to begin propagation to the Project mirrors

    Once all builds have finished, /snap/ftp/snapshots, or /snap/ftp/releases for a release, is polled by ftp-master using rsync to /archive/tmp/snapshots or /archive/tmp/releases, respectively.


    On ftp-master in the FreeBSD Project infrastructure, this step requires root level access, as this step must be executed as the archive user.

8.2. Publishing FreeBSD Installation Media

Once the images are staged in /archive/tmp/, they are ready to be made public by putting them in /archive/pub/FreeBSD. In order to reduce propagation time, pax(1) is used to create hard links from /archive/tmp to /archive/pub/FreeBSD.


In order for this to be effective, both /archive/tmp and /archive/pub must reside on the same logical filesystem.

There is a caveat, however, where rsync must be used after pax(1) in order to correct the symbolic links in pub/FreeBSD/snapshots/ISO-IMAGES which pax(1) will replace with a hard link, increasing the propagation time.


As with the staging steps, this requires root level access, as this step must be executed as the archive user.

As the archive user:

% cd /archive/tmp/snapshots
% pax -r -w -l . /archive/pub/FreeBSD/snapshots
% /usr/local/bin/rsync -avH /archive/tmp/snapshots/* /archive/pub/FreeBSD/snapshots/

Replace snapshots with releases as appropriate.

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.