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