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
      • Choose the workflow
      • Inspect the current package source
      • Use a port for an exceptional local build
      • Use poudriere for a maintained custom repository
      • Avoid an incoherent package set
      • Primary references

      Choose packages, ports, or poudriere

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

      Synopsis #

      Most systems should install third-party software as binary packages with pkg. The Ports Collection is useful when an individual port needs non-default build options. Poudriere is the maintainable choice when several systems need custom packages, a private repository, or repeatable builds.

      These methods use the same ports metadata, but they are not interchangeable at every point in a system’s life. Choose one source of packages deliberately and keep its branch, architecture, and build options coherent.

      Choose the workflow #

      RequirementPreferred workflowReason
      Ordinary server or workstationOfficial packages with pkgFast installation and the least local maintenance
      Predictable production changesQuarterly package branchSecurity and bug fixes with fewer feature changes
      Newer application versionsLatest package branchFaster access to updates, with more change to review
      One local build with a special optionPorts CollectionDirect control over that port’s build options
      Custom options on several hostsPoudriere repositoryIsolated, repeatable builds delivered as packages
      Offline or controlled package sourcePoudriere repositoryOne approved repository can serve multiple clients

      Do not compile an application merely because source is available. A local build consumes time, disk space, and maintenance attention. Prefer the official package unless a documented requirement rules it out.

      Inspect the current package source #

      List configured repositories and the packages visible through them:

      $ pkg -vv
      $ pkg repositories
      $ pkg search -x '^nginx$'
      

      pkg -vv can contain more detail than is useful for routine output. The repository configuration is the important part: confirm which repository is enabled before changing branches or installing packages.

      The official ports-package repository uses the quarterly branch by default. The latest branch provides newer versions. Changing branches is a repository policy change, not an isolated upgrade of one package. Review the resulting transaction before accepting it:

      # pkg update -f
      # pkg upgrade
      

      The exact repository configuration file should follow the current FreeBSD Handbook package branch procedure . Do not edit /etc/pkg/FreeBSD.conf; place local overrides beneath /usr/local/etc/pkg/repos/ so base-system updates do not replace them.

      The quarterly or latest decision guide covers branch selection, the local override, kernel-module alignment, and a dry-run review. An existing ABI or catalogue error should first be classified with the package repository and ABI troubleshooting guide .

      Use a port for an exceptional local build #

      Install or update the Ports Collection by one of the methods documented for the installed release. Inspect the available options before starting a build:

      # cd /usr/ports/category/port
      # make config
      

      Building and installing from the live Ports Collection can introduce dependencies with options that differ from the packages already installed. Before proceeding, determine whether the resulting dependency set will remain compatible with the configured package repository.

      Routine package upgrades can later replace a locally built package. If the custom option must remain in force, a poudriere repository is usually less fragile than repeatedly rebuilding the port on the host.

      Use poudriere for a maintained custom repository #

      Poudriere builds ports inside clean jails and produces packages that clients install with pkg. It separates compilers and build dependencies from production hosts and records the repository as a repeatable operating-system component.

      A poudriere deployment needs explicit decisions about:

      1. The FreeBSD release and architecture represented by each build jail.
      2. The Ports Collection branch or commit used for builds.
      3. The package options and make configuration under version control.
      4. Repository signing, transport, and client configuration.
      5. A rebuild and publication schedule for security fixes.

      Follow the FreeBSD Handbook poudriere procedure for the initial build environment, then use Operate a signed poudriere repository to define signing, atomic publication, client trust, and rollback boundaries.

      Avoid an incoherent package set #

      Mixing package sources is not automatically wrong, but it creates an obligation to keep their ABIs, dependency versions, origins, and build options compatible. Warning signs include:

      • a transaction proposes an unexpected large removal;
      • installed packages alternate between official and private repositories;
      • a locally compiled library has options that its packaged consumers did not expect;
      • the package branch changes without a full review of the upgrade plan.

      Stop before confirming such a transaction. Save the proposed output, inspect repository priority and package origins, and correct the source policy first.

      Primary references #

      • FreeBSD Handbook: Installing Applications, Packages and Ports
      • FreeBSD Handbook: Quarterly and latest package branches
      • FreeBSD Handbook: Building packages with poudriere
      • pkg(8)
      • ports(7)
      • Poudriere documentation

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

      Report a bug
      • Synopsis
      • Choose the workflow
      • Inspect the current package source
      • Use a port for an exceptional local build
      • Use poudriere for a maintained custom repository
      • Avoid an incoherent package set
      • Primary references