321 Configure package repository for Poudriere

Use case

Use the role vbotka.freebsd.packages to configure a package repository for Poudriere.

Tree

shell> tree .
.
├── ansible.cfg
├── files
│   └── build.example.com-sk.crt
├── host_vars
│   └── iocage_06
│       └── repos.yml
├── iocage.ini
└── pb.yml

Synopsis

On a managed node, use the role vbotka.freebsd.packages to configure a package repository for Poudriere.

Requirements

Notes

  • TBD

Note

vbotka.freebsd_packages is the role freebsd_packages in the namespace vbotka.

ansible.cfg

[defaults]
callback_result_format = yaml
deprecation_warnings = False
display_skipped_hosts = False
gathering = explicit
interpreter_python = auto_silent
log_path = /var/log/ansible.log

[connection]
pipelining = true

Inventory iocage.ini

iocage_06

[iocage]
iocage_06

[iocage:vars]
ansible_user=admin
ansible_become=true
ansible_python_interpreter=auto_silent

host_vars

host_vars/iocage_06/repos.yml
pkg_keys:
  /usr/local/etc/ssl/crt:
    - build.example.com-sk.crt

pkg_repos_template: repos_to_ucl.j2
pkg_repos_conf:
  - name: build
    conf:
      build:
        url: file:///usr/local/poudriere/data/packages/151amd64-default-devel
        enabled: true
        signature_type: pubkey
        pubkey: /usr/local/etc/ssl/crt/build.example.com-sk.crt

Playbook pb.yml

- name: Role vbotka.freebsd.packages
  hosts: iocage
  gather_facts: true

  roles:
    - vbotka.freebsd.packages

Playbook output - Create repo

(env) > ansible-playbook -i iocage.ini -t pkg_keys,pkg_conf pb.yml
PLAY [Role vbotka.freebsd.packages] ********************************************

TASK [Gathering Facts] *********************************************************
ok: [iocage_06]

TASK [vbotka.freebsd.packages : Vars: Set the lists for amd64] *****************
ok: [iocage_06]

TASK [vbotka.freebsd.packages : Keys: Create directories.] *********************
ok: [iocage_06] => (item=/usr/local/etc/ssl/crt)

TASK [vbotka.freebsd.packages : Keys: Copy keys.] ******************************
ok: [iocage_06] => (item=/usr/local/etc/ssl/crt/build.example.com-sk.crt)

TASK [vbotka.freebsd.packages : Conf: Create directories] **********************
ok: [iocage_06] => (item=/usr/local/etc/pkg)
ok: [iocage_06] => (item=/usr/local/etc/pkg/repos)

TASK [vbotka.freebsd.packages : Conf: Configure /usr/local/etc/pkg/repos] ******
ok: [iocage_06] => (item=build)

PLAY RECAP *********************************************************************
iocage_06                  : ok=6    changed=0    unreachable=0    failed=0    skipped=12   rescued=0    ignored=0   

Repository build.conf

/usr/local/etc/pkg/repos/build.conf
# Ansible managed
build {
    url = "file:///usr/local/poudriere/data/packages/151amd64-default-devel";
    enabled = yes;
    signature_type = "pubkey";
    pubkey = "/usr/local/etc/ssl/crt/build.example.com-sk.crt";
}

Configuration

[iocage_06]# pkg -vv
Version                 : 2.7.5
libpkg                  : 2.7.5
libarchive              : libarchive 3.8.7
sqlite                  : 3.51.1
openssl                 : OpenSSL 3.5.6 7 Apr 2026
PKG_DBDIR = "/var/db/pkg";
PKG_CACHEDIR = "/var/cache/pkg";
PORTSDIR = "/usr/ports";
INDEXDIR = "";
INDEXFILE = "INDEX-15";
HANDLE_RC_SCRIPTS = false;
DEFAULT_ALWAYS_YES = false;
ASSUME_ALWAYS_YES = false;
REPOS_DIR [
    "/etc/pkg/",
    "/usr/local/etc/pkg/repos/",
]
PLIST_KEYWORDS_DIR = "";
SYSLOG = true;
DEVELOPER_MODE = false;
VULNXML_SITE = "https://vuxml.freebsd.org/freebsd/vuln.xml.xz";
FETCH_RETRY = 3;
PKG_PLUGINS_DIR = "/usr/local/lib/pkg/";
PKG_ENABLE_PLUGINS = true;
PLUGINS [
]
DEBUG_SCRIPTS = false;
PLUGINS_CONF_DIR = "/usr/local/etc/pkg/";
PERMISSIVE = false;
REPO_AUTOUPDATE = true;
NAMESERVER = "";
HTTP_USER_AGENT = "pkg/2.7.5";
EVENT_PIPE = "";
FETCH_TIMEOUT = 30;
UNSET_TIMESTAMP = false;
SSH_RESTRICT_DIR = "";
PKG_ENV {
}
PKG_SSH_ARGS = "";
DEBUG_LEVEL = 0;
ALIAS {
    all-depends = "query %dn-%dv";
    annotations = "info -A";
    build-depends = "info -qd";
    cinfo = "info -Cx";
    comment = "query -i \"%c\"";
    csearch = "search -Cx";
    desc = "query -i \"%e\"";
    download = "fetch";
    iinfo = "info -ix";
    isearch = "search -ix";
    prime-list = "query -e '%a = 0' '%n'";
    prime-origins = "query -e '%a = 0' '%o'";
    leaf = "query -e '%#r == 0' '%n-%v'";
    list = "info -ql";
    noauto = "query -e '%a == 0' '%n-%v'";
    options = "query -i \"%n - %Ok: %Ov\"";
    origin = "info -qo";
    orphans = "version -vRl?";
    provided-depends = "info -qb";
    rall-depends = "rquery %dn-%dv";
    raw = "info -R";
    rcomment = "rquery -i \"%c\"";
    rdesc = "rquery -i \"%e\"";
    required-depends = "info -qr";
    roptions = "rquery -i \"%n - %Ok: %Ov\"";
    sets = "info -d -C -x '^FreeBSD-set-'";
    shared-depends = "info -qB";
    show = "info -f -k";
    size = "info -sq";
    unmaintained = "query -e '%m = \"ports@FreeBSD.org\"' '%o (%w)'";
    runmaintained = "rquery -e '%m = \"ports@FreeBSD.org\"' '%o (%w)'";
}
CUDF_SOLVER = "";
SAT_SOLVER = "";
RUN_SCRIPTS = true;
CASE_SENSITIVE_MATCH = true;
LOCK_WAIT = 1;
LOCK_RETRIES = 5;
SQLITE_PROFILE = false;
WORKERS_COUNT = 0;
READ_LOCK = false;
IP_VERSION = 0;
AUTOMERGE = true;
MERGETOOL = "";
VERSION_SOURCE = "";
CONSERVATIVE_UPGRADE = true;
FORCE_CAN_REMOVE_VITAL = true;
PKG_CREATE_VERBOSE = false;
AUTOCLEAN = false;
AUTOREMOVE = false;
DOT_FILE = "";
DEBUG_SCHEDULER_DOT_FILE = "";
REPOSITORIES {
}
VALID_URL_SCHEME [
    "pkg+http",
    "pkg+https",
    "https",
    "http",
    "file",
    "ssh",
    "tcp",
]
WARN_SIZE_LIMIT = 1048576;
METALOG = "";
IGNORE_OSVERSION = false;
IGNORE_OSMAJOR = false;
BACKUP_LIBRARIES = false;
BACKUP_LIBRARY_PATH = "/usr/local/lib/compat/pkg";
PKG_TRIGGERS_DIR [
    "/usr/share/pkg/triggers/",
    "/usr/local/share/pkg/triggers",
]
PKG_TRIGGERS_ENABLE = true;
AUDIT_IGNORE_GLOB [
]
AUDIT_IGNORE_REGEX [
]
COMPRESSION_FORMAT = "";
COMPRESSION_LEVEL = -1;
REPO_ACCEPT_LEGACY_PKG = false;
FILES_IGNORE_GLOB [
]
FILES_IGNORE_REGEX [
]
SHLIB_PROVIDE_PATHS_NATIVE [
]
SHLIB_PROVIDE_PATHS_COMPAT_32 [
]
SHLIB_PROVIDE_PATHS_COMPAT_LINUX [
]
SHLIB_PROVIDE_PATHS_COMPAT_LINUX_32 [
]
SHLIB_PROVIDE_IGNORE_GLOB [
]
SHLIB_PROVIDE_IGNORE_REGEX [
]
SHLIB_REQUIRE_IGNORE_GLOB [
]
SHLIB_REQUIRE_IGNORE_REGEX [
]
PKG_DEBUG_FLAGS [
    "all",
]
COMPRESSION_THREADS = -1;
PKG_REINSTALL_ON_OPTIONS_CHANGE = true;
TRACK_LINUX_COMPAT_SHLIBS = false;
ABI = "FreeBSD:15:amd64";
ALTABI = "freebsd:15:x86:64";
OSVERSION = "1501000";


Repositories:
  FreeBSD-ports: { 
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/quarterly",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkg"
  }
  FreeBSD-ports-kmods: { 
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/kmods_quarterly_1",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkg"
  }
  FreeBSD-base: { 
    url             : "pkg+https://pkg.FreeBSD.org/FreeBSD:15:amd64/base_release_1",
    enabled         : yes,
    priority        : 0,
    mirror_type     : "SRV",
    signature_type  : "FINGERPRINTS",
    fingerprints    : "/usr/share/keys/pkgbase-15"
  }
  build: { 
    url             : "file:///usr/local/poudriere/data/packages/151amd64-default-devel",
    enabled         : yes,
    priority        : 0,
    signature_type  : "PUBKEY",
    pubkey          : "/usr/local/etc/ssl/crt/build.example.com-sk.crt"
  }
  local: { 
    url             : "file:///usr/local/repo",
    enabled         : yes,
    priority        : 0
  }

Update repos

[iocage_06]# pkg update -f
Updating FreeBSD-ports repository catalogue...
Fetching meta.conf: . done
Fetching data: .......... done
Processing entries: .......... done
FreeBSD-ports repository update completed. 37820 packages processed.
Updating FreeBSD-ports-kmods repository catalogue...
Fetching meta.conf: . done
Fetching data: ..... done
Processing entries: .......... done
FreeBSD-ports-kmods repository update completed. 239 packages processed.
Updating FreeBSD-base repository catalogue...
Fetching meta.conf: . done
Fetching data: .......... done
Processing entries: .......... done
FreeBSD-base repository update completed. 509 packages processed.
Updating build repository catalogue...
Fetching meta.conf: . done
Fetching data: ........ done
build repository is up to date.
Updating local repository catalogue...
Fetching meta.conf: . done
Fetching data: .......... done
Processing entries: .......... done
local repository update completed. 613 packages processed.
All repositories are up to date.