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, upgrade, or update packages?
        • 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
        • 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
        • 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
        • 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
        • 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 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, 15.0-RELEASE, 14.4-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 15.1-RELEASE
      

      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 pkg web upgrade -f
      

      A forced package upgrade is appropriate across a major FreeBSD ABI transition. Review its transaction before confirmation and then verify the services, listener addresses, mounts, DNS, and 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 pkg web upgrade -f
      

      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

      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