The Handbook

    Theme
    • Guides
        • Check a system before installing FreeBSD
        • Orient a Linux administrator on FreeBSD
        • Supported FreeBSD releases
        • Choose a FreeBSD documentation and support channel
        • Move files safely without GNU mv -t
        • Update and Upgrade FreeBSD
        • Upgrade 14.4 or 15.0 to FreeBSD 15.1
        • Choose packages, ports, or poudriere
        • Choose the quarterly or latest package branch
        • Choose a FreeBSD download or package mirror
        • Make a system setting persistent
        • Run a command from cron reliably
        • Configure locale, keyboard, and time zone
        • Configure a serial console for recovery
        • Choose a custom kernel, module, or loader setting
        • Run a Linux binary with the compatibility layer
        • Check desktop and laptop hardware before installation
        • Choose and check a graphics driver
        • Choose Xorg or Wayland
        • Build a maintainable desktop baseline
        • Install and check a desktop browser
        • Check laptop Wi-Fi, power, and suspend
        • Check multimedia readiness
        • Choose and configure a printing stack
        • Run Windows applications with Wine
        • Snapshot and replicate a ZFS dataset
        • Choose a filesystem and storage layout
        • Operate ZFS without losing the recovery path
        • Restore files from a ZFS snapshot
        • Find what is using ZFS space
        • Grow a ZFS virtual disk
        • Read ZFS pool health and run a scrub
        • Replace a failed device in a ZFS mirror
        • Replicate a ZFS dataset over SSH
        • Change PF safely on a remote host
        • Configure a narrow WireGuard tunnel
        • Share a directory with NFS
        • Share files with a named Samba account
        • Plan a FreeBSD home server
        • Choose a mail server or an outgoing relay
        • Publish a network service safely
        • Choose a jail network model
        • Choose native jails or a jail manager
        • Choose a jail or a bhyve virtual machine
        • Establish a FreeBSD security baseline
        • Choose a MAC policy
        • Audit security-relevant activity
        • Start a DTrace performance investigation
    • Integrations
        • Create a first jail with Bastille
        • Compare jail managers and OCI tooling
        • Publish a Bastille service through PF
        • Mount a ZFS dataset in a Bastille jail
        • Update and upgrade Bastille jails
        • Back up and restore a Bastille jail
        • Prepare bhyve and vm-bhyve
        • Choose NFS or Samba for file sharing
        • Choose ZFS backup automation
        • Build a first signed poudriere repository
        • Operate a signed poudriere repository
        • Manage FreeBSD configuration with Ansible or Salt
        • Run Motion with webcamd on FreeBSD
        • Design a reverse proxy, certificates, and monitoring
    • FAQ
      • Troubleshooting
          • Recover an interrupted freebsd-update run
          • Resolve a package repository or ABI mismatch
          • Diagnose the FreeBSD boot path
          • Recover with a ZFS boot environment
          • Diagnose DNS, routing, and firewall paths
          • Diagnose network mbuf exhaustion
          • Bind a service to a low port without running it as root
          • Diagnose a service that will not start
          • Diagnose audio output or input
          • Diagnose webcamd, cuse, and a webcam
          • Fix USB device permissions without opening every device
      • About this handbook
      • Synopsis
      • Inventory the boundary
      • Apply patches within a release
      • Plan a release upgrade
      • Upgrade a thin jail
      • Upgrade a thick jail
      • Verify before removing the old release
      • Primary references

      Update and upgrade Bastille jails

      Last reviewed
      13 August 2026
      Applies to
      15.1-RELEASE, 14.4-RELEASE
      Tested on
      15.1-RELEASE

      Synopsis #

      An update applies security and errata fixes within one FreeBSD release. An upgrade moves a jail to another release. Bastille handles thin and thick jails differently: thin jails share a bootstrapped release, while a thick jail carries its own userland.

      Identify the jail type before choosing a command. Back up the jail and its separately mounted data, review the target release notes, and upgrade the host before any jail that will use the newer release. A jail userland must not be newer than its host kernel.

      Inventory the boundary #

      Record the host, Bastille, releases, jail types, packages, mounts, and inbound mappings:

      $ freebsd-version -ku
      $ pkg info bastille
      # bastille list release
      # bastille list jail
      # bastille list all
      # bastille rdr ALL list
      

      For each important jail, also record its service state and package set:

      # bastille cmd web freebsd-version
      # bastille cmd web pkg info
      # bastille cmd web service -e
      

      A rollback requires more than the jail root. Follow Back up and restore a Bastille jail , and separately protect datasets mounted as described in Mount a ZFS dataset in a Bastille jail .

      Apply patches within a release #

      For a thin jail, update the shared bootstrapped release:

      # bastille update 15.1-RELEASE
      

      Every thin jail based on that release sees the updated base. Restart affected jails so that long-running processes and services use the updated files:

      # bastille restart web
      

      For a thick jail, target the jail itself:

      # bastille update web
      # bastille restart web
      

      Base-system patching does not update third-party packages. Review and apply package changes separately:

      # bastille pkg web update
      # bastille pkg web upgrade
      

      The choice between official packages, ports, and a private repository is covered in Choose packages, ports, or poudriere .

      Plan a release upgrade #

      Before moving to another release:

      1. Confirm that the target is supported and that the host already runs it or a newer release.
      2. Read the target release notes and errata.
      3. Update the source release to its latest patch level.
      4. Verify backups and a restore destination.
      5. Schedule downtime for stateful services.
      6. Upgrade one representative jail before applying the change to a group.

      Do not destroy the old bootstrapped release until all jails, package ABIs, services, and restore procedures have been verified.

      Upgrade a thin jail #

      Bootstrap and patch the target release. FreeBSD 15 uses pkgbase-aware Bastille workflows; follow the installed Bastille documentation for how the source jail was created and do not silently change its base-management method.

      For a conventional thin jail moving from a supported 14.x release to 15.1, the lifecycle is:

      # bastille bootstrap 15.1-RELEASE
      # bastille update 15.1-RELEASE
      # bastille stop web
      # bastille upgrade web 15.1-RELEASE
      # bastille etcupdate bootstrap 15.1-RELEASE
      # bastille etcupdate web update 15.1-RELEASE
      # bastille etcupdate web diff
      

      The etcupdate bootstrap step downloads release source and builds a configuration baseline. Allow space for the source tree under the Bastille prefix and temporary build files under /tmp; this can take longer than switching the jail’s release mount.

      Resolve /etc conflicts deliberately. The resolve action can change files and should follow review of the diff:

      # bastille etcupdate web resolve
      # bastille start web
      # bastille cmd web /usr/local/sbin/pkg-static upgrade -f
      # bastille restart web
      

      A major FreeBSD ABI transition requires replacement packages. The old dynamically linked pkg can fail with a missing shared library after the new base is mounted; the installed pkg-static can perform that transition without those old libraries. Review its transaction before confirmation. Restart the jail afterward so services that could not start with the old packages, or still loaded old libraries, use the replacement packages.

      Review configuration-update warnings as well as conflicts, complete any requested database regeneration, and verify services, listener addresses, mounts, DNS, and the external path.

      For a thin pkgbase jail, use the pkgbase-specific bootstrap and upgrade procedure in the current Bastille upgrading documentation. Do not mix legacy release archives and pkgbase assumptions in one copied command sequence.

      Upgrade a thick jail #

      The traditional thick-jail sequence is two-stage:

      # bastille upgrade web 15.1-RELEASE
      # bastille upgrade web install
      # bastille restart web
      # bastille upgrade web install
      

      Across a major release boundary, reinstall or upgrade packages after the base upgrade:

      # bastille cmd web /usr/local/sbin/pkg-static upgrade -f
      # bastille restart web
      

      Current pkgbase thick jails use a shorter Bastille sequence. Establish whether the jail is legacy or pkgbase-backed from its creation record and current Bastille documentation before applying either procedure.

      Verify before removing the old release #

      Check both administrative and application state:

      # bastille cmd web freebsd-version
      # bastille cmd web pkg check -d
      # bastille cmd web service -e
      # bastille rdr web list
      

      Test every published service from its intended client network. Confirm separately mounted datasets and scheduled jobs. Retain the old release and backups through an observation period; downgrade of a thick jail is not a supported recovery strategy.

      Primary references #

      • Bastille: Upgrading
      • Bastille update command
      • Bastille upgrade command
      • Bastille etcupdate command
      • FreeBSD supported releases
      • FreeBSD Handbook: Jail upgrading
      • pkg(8)

      Independent documentation. Not affiliated with or endorsed by the FreeBSD Project or the FreeBSD Foundation.

      Report a bug
      • Synopsis
      • Inventory the boundary
      • Apply patches within a release
      • Plan a release upgrade
      • Upgrade a thin jail
      • Upgrade a thick jail
      • Verify before removing the old release
      • Primary references