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 packages in the collection vbotka.freebsd.
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.