Author SHA1 Message Date
christianmanivong 2a92ec77e3 Merge pull request 'feat: say whether a host is still in its first boot' (#6) from feat/first-boot-pending into main
CI / test (3.10) (push) Successful in 38s
CI / test (3.11) (push) Successful in 27s
CI / test (3.12) (push) Successful in 30s
2026-10-08 11:01:34 +00:00
Christian Manivong 32a63411d3 feat: say whether a host is still in its first boot
CI / test (3.10) (push) Successful in 29s
CI / test (3.11) (push) Successful in 30s
CI / test (3.12) (push) Successful in 29s
CI / test (3.10) (pull_request) Successful in 29s
CI / test (3.11) (pull_request) Successful in 46s
CI / test (3.12) (pull_request) Successful in 42s
first_boot_pending() is true while /firstboot exists on FreeBSD. A FreeBSD
cloud image upgrades its base system on its first boot, starts sshd only
after that and restarts right away, and /etc/rc removes /firstboot just
before that restart. netOrk waits for this before it sets up a new VM
(NetOrk/netork#795).

OpenBSD has no such marker to ask yet, so it returns False there.
2026-10-08 12:58:00 +02:00
christianmanivong ae09e44345 Merge pull request 'fix: raise when an update reader cannot read, and report host status' (#5) from feat/host-status into main
CI / test (3.10) (push) Successful in 25s
CI / test (3.11) (push) Successful in 23s
CI / test (3.12) (push) Successful in 27s
2026-10-08 10:15:13 +00:00
Christian Manivong 25308bf747 fix: raise when an update reader cannot read, and report host status
CI / test (3.10) (push) Successful in 26s
CI / test (3.11) (push) Successful in 25s
CI / test (3.12) (push) Successful in 26s
CI / test (3.10) (pull_request) Successful in 25s
CI / test (3.11) (pull_request) Successful in 24s
CI / test (3.12) (pull_request) Successful in 26s
netOrk reads an empty update list as "no updates" and closes every patch
clock on the host. A refused sudo, a failing pkg, syspatch or freebsd-update,
or a pkg database pkg cannot read used to come back as that empty list. Each
of these now raises. Only pkg's "is not installed" still means no packages.

BsdDriver takes on napalm-device-types' HostStatusMixin. On FreeBSD it
reports a host whose installed kernel differs from the running one as
needing a reboot (device-types 4.1). OpenBSD stays unknown.

Closes #4
2026-10-08 12:08:44 +02:00
christianmanivong 1172b4d9d5 Merge pull request 'feat: set up SNMP with net-snmp' (#3) from feat/snmp into main
CI / test (3.10) (push) Successful in 27s
CI / test (3.11) (push) Successful in 26s
CI / test (3.12) (push) Successful in 28s
2026-10-08 08:08:46 +00:00
christianmanivong aef58ca161 feat: set up SNMP with net-snmp
CI / test (3.10) (pull_request) Successful in 30s
CI / test (3.11) (pull_request) Successful in 32s
CI / test (3.12) (pull_request) Successful in 36s
CI / test (3.10) (push) Successful in 45s
CI / test (3.11) (push) Successful in 30s
CI / test (3.12) (push) Successful in 29s
run_device_action("fix_snmp") and get_snmp_config for both drivers, as
decided in NetOrk/netork#800: net-snmp from packages rather than the base
daemons, because it answers UCD-SNMP-MIB, which netOrk's health metrics
read.

- fix_snmp installs net-snmp, writes the configuration netOrk uses on
  Linux (v2c, community "public", agentAddress udp:161) through stdin as
  root, enables and restarts the agent (FreeBSD `service snmpd`, OpenBSD
  `rcctl ... netsnmpd`, as `snmpd` is OpenBSD's own daemon) and asks it
  for sysDescr. It stops at the first step that fails and says why.
- get_snmp_config reports a running net-snmp's community and port.
- FreeBSD's install_package bootstraps pkg on a classic system that never
  had it instead of waiting for an answer that never comes.

Checked live: FreeBSD from a bare system, OpenBSD again over an existing
setup. Memory, swap and load answer on both; FreeBSD's ssCpuIdle about a
minute after start; OpenBSD's CPU figures from net-snmp are wrong (#800).
2026-10-08 10:05:09 +02:00
christianmanivong 7bf028ef4d Merge pull request 'feat: packages, services and updates' (#2) from feat/packages-services-updates into main
CI / test (3.10) (push) Successful in 28s
CI / test (3.11) (push) Successful in 26s
CI / test (3.12) (push) Successful in 28s
2026-10-08 08:02:25 +00:00
christianmanivong e8468a292a feat: packages, services and updates
CI / test (3.10) (push) Successful in 26s
CI / test (3.11) (push) Successful in 24s
CI / test (3.12) (push) Successful in 26s
CI / test (3.10) (pull_request) Successful in 25s
CI / test (3.11) (pull_request) Successful in 24s
CI / test (3.12) (pull_request) Successful in 25s
The write side NetOrk/netork#799 needs, on both drivers.

- Packages: get_packages (FreeBSD `pkg query` with the repository as
  source, nothing on a classic system without pkg; OpenBSD `pkg_info`),
  install_package / uninstall_package as root (`pkg install`/`pkg
  delete`, `pkg_add -I`/`pkg_delete`), names checked before anything is
  sent, a failure raised with what the tool printed.
- Updates: get_available_updates. FreeBSD `pkg upgrade -n`, with
  `security` from VuXML (`pkg audit`: True for a listed package, False for
  any other, None when the audit could not run); OpenBSD `pkg_add -u -n
  -v` (no security verdict). Base-system patches are one `base-system`
  entry, as decided in #799: OpenBSD's `syspatch -c`, and on a classic
  FreeBSD what `freebsd-update` has fetched; on pkgbase the base system is
  packages from FreeBSD-base.
- Services: get_services lists the enabled ones (FreeBSD `service ...
  status` as root, as root-only pidfiles hide daemons otherwise, without
  root when sudo refuses; OpenBSD `rcctl check`), manage_service runs
  start/stop/restart/enable/disable as root and returns success and
  output.

Fixtures recorded on the FreeBSD 15.1 and OpenBSD 7.9 VMs with genuinely
outdated packages (FreeBSD pointed at the latest branch, an OpenBSD
package taken back to its release build). Checked live on both, including
a service restart and installing and removing a package.
2026-10-08 09:59:04 +02:00
christianmanivong 045f809602 Merge pull request 'feat: report listening sockets' (#1) from feat/listening-sockets into main
CI / test (3.10) (push) Successful in 28s
CI / test (3.11) (push) Successful in 28s
CI / test (3.12) (push) Successful in 31s
2026-10-08 07:30:25 +00:00
24 changed files with 2074 additions and 7 deletions
+19 -3
View File
@@ -8,9 +8,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Added
- `get_listening_sockets()` in the shape of `ListeningSocketsMixin`: FreeBSD
through `sockstat`, OpenBSD through `fstat` as root and `netstat -an`
without, which the reading reports as `attributed: False`.
- `FreeBSDDriver` (`freebsd`) and `OpenBSDDriver` (`openbsd`) on a shared
`BsdDriver`: SSH over exec channels (no PTY, real exit codes), root through
`sudo -S` with the password on stdin.
@@ -19,5 +16,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
their addresses (`ifconfig -a`), routes (`netstat -rn`), ARP (`arp -an`),
users and groups, processes (`ps … lstart`), cron jobs (system crontab and
the login user's).
- `get_listening_sockets()` in the shape of `ListeningSocketsMixin`: FreeBSD
through `sockstat`, OpenBSD through `fstat` as root and `netstat -an`
without, which the reading reports as `attributed: False`.
- Packages: `get_packages`, `install_package`, `uninstall_package`. FreeBSD's
install bootstraps pkg on a classic system that never had it.
- Updates: `get_available_updates`, with VuXML's verdict as `security` on
FreeBSD and base-system patches as one `base-system` entry (OpenBSD
`syspatch`, classic FreeBSD `freebsd-update`). A reader that cannot read
raises instead of returning no updates (#4).
- Services: `get_services` and `manage_service` (start, stop, restart,
enable, disable) through `service` and `rcctl`.
- SNMP: `run_device_action("fix_snmp")` installs net-snmp, writes the same
configuration netOrk uses on Linux, starts the agent and asks it for
sysDescr; `get_snmp_config` reports a running agent's community and port.
- `get_host_status` (napalm-device-types' `HostStatusMixin`): on FreeBSD,
"reboot required" when the installed kernel differs from the running one.
- `first_boot_pending()`: whether a FreeBSD host is still in its first boot
(`/firstboot`), so netOrk can wait before setting up a new VM
(NetOrk/netork#795).
- Parsers tested on output recorded from FreeBSD 15.1 (hand-installed and
cloud image) and OpenBSD 7.9 (NetOrk/netork#793).
+39 -1
View File
@@ -33,6 +33,12 @@ over SSH, built on [napalm-device-types](https://git.netork.io/NAPALM/napalm-dev
| `get_lldp_neighbors` | `{}` | `{}` | no LLDP daemon in either base system |
| `get_users`, `get_processes`, `get_cron_jobs` | ✓ | ✓ | `/etc/passwd`+`/etc/group`, `ps … lstart`, system crontab + `crontab -l` |
| `get_listening_sockets` | ✓ | ✓ | `sockstat -46lq` / `fstat -n` as root, `netstat -an` without |
| `get_packages`, `install_package`, `uninstall_package` | ✓ | ✓ | `pkg query` / `pkg install`, `pkg delete`; `pkg_info` / `pkg_add -I`, `pkg_delete` |
| `get_available_updates` | ✓ | ✓ | `pkg upgrade -n` + `pkg audit` (VuXML); `pkg_add -u -n -v` + `syspatch -c` |
| `get_services`, `manage_service` | ✓ | ✓ | `service -e` + `service … status` / `service … <action>`; `rcctl ls on` + `rcctl check` / `rcctl <action>` |
| `run_device_action("fix_snmp")`, `get_snmp_config` | ✓ | ✓ | net-snmp from packages: `/usr/local/etc/snmp/snmpd.conf` + `service snmpd`; `/etc/snmp/snmpd.conf` + `rcctl … netsnmpd` |
| `get_host_status` | ✓ | unknown | napalm-device-types' host status: on FreeBSD `freebsd-version -k` vs `-r` (4.1+) |
| `first_boot_pending` | ✓ | always `False` | whether `/firstboot` still exists |
`get_listening_sockets` has the shape of napalm-device-types'
`ListeningSocketsMixin` (whose `ss`/cgroup reading is Linux's) and its rule:
@@ -45,7 +51,39 @@ There is deliberately no `get_kernel_facts`: `KernelFactsMixin` reports a
Linux kernel's modules and `CONFIG_*` options, which a BSD kernel does not
have, and `hasattr(driver, "get_kernel_facts")` has to stay truthful.
Packages, services, updates (#799) and SNMP (#800) follow.
**Updates.** `security` on FreeBSD comes from VuXML (`pkg audit`): True for a
package it lists as vulnerable, False for one it does not, None when the audit
could not run. OpenBSD's tools do not say, so it is None there. Base-system
patches are one entry, `base-system` (NetOrk/netork#799): OpenBSD's
`syspatch` applies its patches together and in order; a classic FreeBSD base
reports what `freebsd-update` has fetched (`updatesready`). On FreeBSD with
pkgbase the base system is packages from the `FreeBSD-base` repository and
needs no extra entry.
A reader that cannot read **raises** rather than return an empty list: netOrk
takes `[]` as "no updates" and would close every patch clock on the host. That
covers a refused sudo, a failing `pkg`, `syspatch` or `freebsd-update`, and a pkg
database pkg cannot read (only pkg's "not installed" means no packages).
**Reboot.** `get_host_status` reports a FreeBSD host whose installed kernel
(`freebsd-version -k`) differs from the running one (`-r`) as needing a reboot.
OpenBSD has no such reading yet, so it stays unknown there.
**First boot.** A FreeBSD cloud image upgrades its base system on its first boot,
starts sshd only after that and restarts right away. `/etc/rc` removes `/firstboot`
just before the restart, so `first_boot_pending()` is true until then; netOrk waits
for it before it sets up a new VM. OpenBSD has no such marker to ask yet.
**Services** are the enabled ones. FreeBSD reads their status as root, as
root-only pidfiles hide a daemon from anyone else, and without root when sudo
refuses; OpenBSD's `rcctl check` needs no root. Actions run as root.
**SNMP** is net-snmp from packages (NetOrk/netork#800), configured as netOrk does
on Linux (v2c, community `public`, every address), so the agent answers
UCD-SNMP-MIB for netOrk's health metrics. Memory, swap and load are right on
both systems. CPU: FreeBSD reports `ssCpuIdle` about a minute after the
agent starts; on OpenBSD net-snmp's CPU figures are wrong (0 % idle on an idle
machine, also in `hrProcessorLoad`).
## Connection arguments
+182 -1
View File
@@ -9,6 +9,7 @@ stdin, as napalm-linux does it.
from __future__ import annotations
import logging
import re
import socket
from shlex import quote
from typing import Any, Optional
@@ -16,6 +17,7 @@ from typing import Any, Optional
import paramiko
from napalm.base.exceptions import ConnectionClosedException, ConnectionException
from napalm_device_types import OSDriver
from napalm_device_types.host_status import HostStatusMixin
from napalm_device_types.channel import (
ByteStream,
CommandResult,
@@ -27,8 +29,26 @@ from napalm_bsd import parse
logger = logging.getLogger(__name__)
#: The update-list entry for base-system patches (OpenBSD syspatch, classic
#: FreeBSD freebsd-update): one entry, as they are applied together (#799).
BASE_SYSTEM = "base-system"
class BsdDriver(OSDriver):
_SERVICE_ACTIONS = frozenset({"start", "stop", "restart", "enable", "disable"})
_SERVICE_NAME = re.compile(r"^[A-Za-z0-9][A-Za-z0-9_.-]*$")
_PACKAGE_NAME = re.compile(r"^[A-Za-z0-9][A-Za-z0-9_.+-]*$")
#: The agent netOrk sets up, as on Linux: v2c, community "public", every address.
_SNMPD_CONF = (
"agentAddress udp:161\n"
"rocommunity public\n"
"sysLocation Managed by netOrk\n"
"sysContact netork@localhost\n"
)
#: What a working agent answers sysDescr.0 with.
_SNMP_TYPES = ("STRING:", "INTEGER:", "OID:", "Timeticks:", "Hex-STRING:", "IpAddress:")
class BsdDriver(HostStatusMixin, OSDriver):
"""Base for the BSD drivers; a concrete one names the commands that differ."""
VENDOR = ""
@@ -144,11 +164,53 @@ class BsdDriver(OSDriver):
line, prefix = self._privileged(command, privileged)
return open_stream_on_transport(self._transport(), line, stdin_prefix=prefix)
def _read(
self,
command: str,
*,
privileged: bool = False,
timeout: float = 60,
ok: tuple[int, ...] = (0,),
) -> CommandResult:
"""Run a reader's command; raise when it did not read.
A reader that cannot read raises rather than return "nothing": an empty
update list would close every patch clock netOrk keeps (napalm-bsd#4).
"""
result = self.run_command(command, privileged=privileged, timeout=timeout)
if result.exit_code not in ok:
reason = (result.stderr or result.stdout).strip() or f"exit {result.exit_code}"
raise RuntimeError(f"{command}: {reason}")
return result
def _out(self, command: str, *, privileged: bool = False, timeout: float = 60) -> str:
"""What *command* printed. A failing command prints nothing useful,
and the readers below treat empty output as "nothing there"."""
return self.run_command(command, privileged=privileged, timeout=timeout).stdout.strip()
#: A file that exists until the host's first boot is over; "" when there is none to ask.
FIRST_BOOT_MARKER = ""
def first_boot_pending(self) -> bool:
"""Whether the host is still in its first boot.
A FreeBSD cloud image upgrades its base system on the first boot, starts
sshd only after that and restarts right away; ``/etc/rc`` removes
``/firstboot`` just before the restart. netOrk waits for this before it
sets up a new VM (NetOrk/netork#795).
"""
if not self.FIRST_BOOT_MARKER:
return False
return self.run_command(f"test -e {self.FIRST_BOOT_MARKER}").exit_code == 0
def _run_host_status_command(self, command: str) -> str:
"""The transport for ``HostStatusMixin.get_host_status``: read-only, no root.
On FreeBSD the report compares ``freebsd-version -k`` with ``-r``
(napalm-device-types 4.1); elsewhere "reboot required" stays unknown.
"""
return self.run_command(command).stdout
# -- facts -------------------------------------------------------------------
def _platform(self) -> dict[str, str]:
@@ -277,6 +339,125 @@ class BsdDriver(OSDriver):
"sockets": self._parse_listening(plain.stdout, attributed=False),
}
# -- packages -----------------------------------------------------------------
#: ``{name}`` is the package (with its version, when one is asked for).
INSTALL_COMMAND = ""
UNINSTALL_COMMAND = ""
def _package_command(self, template: str, name: str) -> None:
"""Run a package command as root; a failure raises with what it printed."""
result = self.run_command(template.format(name=name), privileged=True, timeout=600)
if result.exit_code != 0:
raise RuntimeError(
(result.stderr or result.stdout).strip() or f"{name}: exit {result.exit_code}"
)
def install_package(self, name: str, version: str = "") -> None:
if not _PACKAGE_NAME.match(name) or (version and not _PACKAGE_NAME.match(version)):
raise ValueError(f"Not a package name: {name!r}")
self._package_command(self.INSTALL_COMMAND, f"{name}-{version}" if version else name)
def uninstall_package(self, name: str) -> None:
if not _PACKAGE_NAME.match(name):
raise ValueError(f"Not a package name: {name!r}")
self._package_command(self.UNINSTALL_COMMAND, name)
# -- services -----------------------------------------------------------------
#: Prints ``name<TAB>status`` per enabled service; parsed by :meth:`_parse_services`.
SERVICE_STATUS_COMMAND = ""
#: ``{name}`` and ``{action}`` (start, stop, restart, enable, disable).
SERVICE_ACTION_COMMAND = ""
def _parse_services(self, output: str) -> list[dict[str, Any]]:
raise NotImplementedError
def get_services(self) -> list[dict[str, Any]]:
"""The enabled services, whether each runs, and its PID where known.
Read as root where the status needs it, and without root otherwise.
"""
result = self.run_command(self.SERVICE_STATUS_COMMAND, privileged=True, timeout=120)
if result.exit_code != 0 or not result.stdout.strip(): # no root: sudo refused
result = self.run_command(self.SERVICE_STATUS_COMMAND, timeout=120)
return self._parse_services(result.stdout)
def manage_service(self, name: str, action: str) -> dict[str, Any]:
"""Applies *action* to the service *name*, as root.
:returns: ``{"success": bool, "output": str}``
:raises ValueError: for an unknown action or an invalid name, before
anything is sent.
"""
if action not in _SERVICE_ACTIONS or not _SERVICE_NAME.match(name):
raise ValueError(f"Cannot {action!r} service {name!r}")
command = self.SERVICE_ACTION_COMMAND.format(name=name, action=action)
result = self.run_command(command, privileged=True, timeout=120)
output = "\n".join(filter(None, (result.stdout.strip(), result.stderr.strip())))
return {"success": result.exit_code == 0, "output": output}
# -- SNMP (net-snmp from packages, NetOrk/netork#800) -------------------------
#: Where net-snmp reads its configuration, and how its daemon is started.
SNMPD_CONF = ""
SNMPD_START = ""
#: net-snmp's daemon; OpenBSD's base snmpd is /usr/sbin/snmpd.
SNMPD_DAEMON = "/usr/local/sbin/snmpd"
SNMP_PROBE = "snmpget -v2c -cpublic -t2 -r0 -Ov 127.0.0.1 1.3.6.1.2.1.1.1.0"
def run_device_action(self, action: str) -> dict[str, Any]:
"""Execute a named action on the device; ``fix_snmp`` is the one there is."""
if action == "fix_snmp":
return self._action_fix_snmp()
raise NotImplementedError(f"Unknown action: {action!r}")
def _action_fix_snmp(self) -> dict[str, Any]:
"""Install net-snmp, configure it as on Linux, start it, and ask it.
net-snmp rather than the base daemons (FreeBSD bsnmpd, OpenBSD snmpd):
it answers UCD-SNMP-MIB, which netOrk's health metrics read
(NetOrk/netork#800). Stops at the first step that fails.
"""
lines: list[str] = []
conf_dir = self.SNMPD_CONF.rsplit("/", 1)[0]
steps = (
("install", self.INSTALL_COMMAND.format(name="net-snmp"), None),
(
"config",
f"mkdir -p {conf_dir} && cat > {self.SNMPD_CONF} && chmod 644 {self.SNMPD_CONF}",
_SNMPD_CONF.encode(),
),
("service", self.SNMPD_START, None),
)
for label, command, stdin in steps:
result = self.run_command(command, privileged=True, timeout=600, stdin=stdin)
output = "\n".join(filter(None, (result.stdout.strip(), result.stderr.strip())))
lines.append(f"[{label}] {output[-300:]}".rstrip())
if result.exit_code != 0:
return {"success": False, "output": "\n".join(lines)}
probe = self.run_command(self.SNMP_PROBE, timeout=30).stdout.strip()
lines.append(f"[probe] {probe}")
return {"success": any(t in probe for t in _SNMP_TYPES), "output": "\n".join(lines)}
def get_snmp_config(self) -> Optional[dict[str, Any]]:
"""net-snmp's community and port, if its daemon runs; None otherwise."""
if not self._out(f"pgrep -f {self.SNMPD_DAEMON}"):
return None
community, port = "public", 161
for line in self._out(f"cat {self.SNMPD_CONF}").splitlines():
words = line.split()
if len(words) >= 2 and words[0].lower() in (
"rocommunity",
"rwcommunity",
"rocommunity6",
):
community = words[1]
elif words and words[0] == "agentAddress":
found = re.search(r":(\d+)", line)
port = int(found[1]) if found else port
return {"running": True, "community": community, "port": port, "version": "2c"}
# -- accounts, processes, cron -----------------------------------------------
def get_users(self) -> list[dict[str, Any]]:
+85 -1
View File
@@ -5,7 +5,7 @@ from __future__ import annotations
from napalm_device_types import FingerprintRule
from napalm_bsd import parse
from napalm_bsd.base import BsdDriver
from napalm_bsd.base import BASE_SYSTEM, BsdDriver
class FreeBSDDriver(BsdDriver):
@@ -31,10 +31,94 @@ class FreeBSDDriver(BsdDriver):
ROUTES_COMMAND = "netstat -rnW"
# sockstat names the process of every socket it can see; root sees them all.
LISTENING_COMMAND = "sockstat -46lq -P tcp,udp"
# /etc/rc removes it at the end of the first boot.
FIRST_BOOT_MARKER = "/firstboot"
def _parse_listening(self, output: str, *, attributed: bool) -> list[dict]:
return parse.sockstat(output)
PKG_QUERY = "pkg query '%n\t%v\t%R\t%sb\t%c'"
# Bootstraps pkg on a classic system that never had it, instead of asking.
INSTALL_COMMAND = "env ASSUME_ALWAYS_YES=yes pkg install -y {name}"
UNINSTALL_COMMAND = "pkg delete -y {name}"
# Root reads every daemon's pidfile; one-shot scripts have no status.
SERVICE_STATUS_COMMAND = (
"for s in $(service -e); do n=${s##*/}; "
'printf "%s\\t%s\\n" "$n" "$(service $n status 2>&1 | head -1)"; done'
)
SERVICE_ACTION_COMMAND = "service {name} {action}"
SNMPD_CONF = "/usr/local/etc/snmp/snmpd.conf"
# The rc script drops to the snmpd user, so the file stays readable (644).
SNMPD_START = "sysrc snmpd_enable=YES && service snmpd restart"
def _parse_services(self, output: str) -> list[dict]:
return parse.service_status(output)
def _has_pkg(self) -> bool:
"""pkg is bootstrapped; a hand-installed classic system may have only the stub.
Only the stub's "not installed" means no pkg; any other failure (a
database pkg cannot read) raises rather than read as "no packages".
"""
result = self.run_command("pkg -N")
if result.exit_code == 0:
return True
message = (result.stderr or result.stdout).strip()
if "is not installed" in message:
return False
raise RuntimeError(f"pkg -N: {message or f'exit {result.exit_code}'}")
def get_packages(self) -> list[dict]:
return parse.pkg_query(self._out(self.PKG_QUERY)) if self._has_pkg() else []
def get_available_updates(self) -> list[dict]:
"""Package updates from ``pkg upgrade -n``, and fetched base-system updates.
``security`` comes from VuXML (``pkg audit``): True for a package it
lists as vulnerable, False for one it does not, None when the audit
could not run. On pkgbase the base system is packages from the
FreeBSD-base repository; a classic base reports one entry (#799).
"""
updates: list[dict] = []
if self._has_pkg():
upgrade = self._read("pkg upgrade -n", privileged=True, timeout=300)
updates = parse.pkg_upgrades(upgrade.stdout)
audit = self.run_command("pkg audit -Fq", privileged=True, timeout=120)
vulnerable = parse.pkg_audit(audit.stdout)
# 1 is "vulnerable packages found" and any error alike; only a list
# of packages makes it a verdict.
known = audit.exit_code == 0 or (audit.exit_code == 1 and bool(vulnerable))
for update in updates:
update["security"] = (update["name"] in vulnerable) if known else None
if "FreeBSD-base" in self._out("pkg repos -l").split():
return updates
return updates + self._base_updates()
def _base_updates(self) -> list[dict]:
"""A classic base system's updates, as freebsd-update fetched them.
``updatesready`` exits 0 when fetched updates wait to be installed and
2 when there are none; it does not fetch, which ``freebsd-update cron``
does daily where it is enabled.
"""
ready = self._read(
"freebsd-update --not-running-from-cron updatesready",
privileged=True,
timeout=60,
ok=(0, 2),
)
if ready.exit_code == 2:
return []
return [
{
"name": BASE_SYSTEM,
"current_version": self._out("freebsd-version -u"),
"new_version": "fetched by freebsd-update",
"origin": "freebsd-update",
"security": None,
}
]
def _os_version(self) -> str:
version = super()._os_version()
return f"FreeBSD {version}" if version else ""
+54 -1
View File
@@ -5,7 +5,7 @@ from __future__ import annotations
from napalm_device_types import FingerprintRule
from napalm_bsd import parse
from napalm_bsd.base import BsdDriver
from napalm_bsd.base import BASE_SYSTEM, BsdDriver
class OpenBSDDriver(BsdDriver):
@@ -33,6 +33,59 @@ class OpenBSDDriver(BsdDriver):
def _parse_listening(self, output: str, *, attributed: bool) -> list[dict]:
return parse.fstat_sockets(output) if attributed else parse.netstat_listening(output)
INSTALL_COMMAND = "pkg_add -I {name}"
UNINSTALL_COMMAND = "pkg_delete {name}"
# rcctl check needs no root; "rcctl ls started" does.
SERVICE_STATUS_COMMAND = (
"for s in $(rcctl ls on); do "
"if rcctl check $s >/dev/null 2>&1; then r=1; else r=0; fi; "
'printf "%s\\t%s\\n" "$s" "$r"; done'
)
SERVICE_ACTION_COMMAND = "rcctl {action} {name}"
SNMPD_CONF = "/etc/snmp/snmpd.conf"
# net-snmp's rc script; "snmpd" is OpenBSD's own daemon.
SNMPD_START = "rcctl enable netsnmpd && rcctl restart netsnmpd"
def _parse_services(self, output: str) -> list[dict]:
return parse.rcctl_check(output)
def get_services(self) -> list[dict]:
return self._parse_services(self._out(self.SERVICE_STATUS_COMMAND, timeout=120))
def get_packages(self) -> list[dict]:
return parse.pkg_info(self._out("pkg_info"))
def get_available_updates(self) -> list[dict]:
"""Package updates from ``pkg_add -u -n -v``, and the base system's syspatches.
syspatch applies its patches together and in order, so they are one
entry (#799). Neither tool says which update is a security fix.
"""
updates: list[dict] = [
{**candidate, "origin": None, "security": None}
for candidate in parse.pkg_add_candidates(
self._read("pkg_add -u -n -v", privileged=True, timeout=300).stdout
)
]
patches = parse.syspatch(self._read("syspatch -c", privileged=True, timeout=120).stdout)
if patches:
installed = parse.syspatch(self._out("syspatch -l", privileged=True))
summary = (
", ".join(patches)
if len(patches) <= 3
else f"{len(patches)} patches: {patches[0]} … {patches[-1]}"
)
updates.append(
{
"name": BASE_SYSTEM,
"current_version": installed[-1] if installed else self._out("uname -r"),
"new_version": summary,
"origin": "syspatch",
"security": None,
}
)
return updates
def _hardware(self) -> tuple[str, str, str]:
hw = self._platform()
return hw.get("vendor", ""), hw.get("product", ""), hw.get("serialno", "")
+143
View File
@@ -347,3 +347,146 @@ def netstat_listening(text: str) -> list[dict[str, Any]]:
continue
sockets.append(_socket(proto, local, family, None, None))
return _unique(sockets)
# -- packages, updates, services ---------------------------------------------------
_PACKAGE_NAME = re.compile(r"^(?P<name>\S+?)-(?P<version>\d\S*)$")
def split_package(full: str) -> tuple[str, str]:
"""An OpenBSD package name: ``bash-completion-2.17.0`` -> (``bash-completion``, ``2.17.0``).
The version starts at the first ``-`` followed by a digit.
"""
match = _PACKAGE_NAME.match(full)
return (match["name"], match["version"]) if match else (full, "")
def pkg_query(text: str) -> list[dict[str, Any]]:
"""FreeBSD ``pkg query '%n\\t%v\\t%R\\t%sb\\t%c'``; the source is the repository."""
packages = []
for line in text.splitlines():
parts = line.split("\t")
if len(parts) < 5:
continue
name, version, repo, size, comment = parts[:5]
packages.append(
{
"name": name,
"version": version,
"installed": True,
"description": comment,
"size": int(size) if size.isdigit() else 0,
"source": repo,
}
)
return packages
def pkg_info(text: str) -> list[dict[str, Any]]:
"""OpenBSD ``pkg_info``: ``name-version comment`` per installed package."""
packages = []
for line in text.splitlines():
full, _, comment = line.partition(" ")
if not full:
continue
name, version = split_package(full)
packages.append(
{
"name": name,
"version": version,
"installed": True,
"description": comment.strip(),
"size": 0,
"source": "pkg_add",
}
)
return packages
_PKG_UPGRADE = re.compile(
r"^\s+(?P<name>\S+): (?P<old>\S+) -> (?P<new>\S+)(?: \[(?P<repo>[^\]]+)\])?"
)
def pkg_upgrades(text: str) -> list[dict[str, Any]]:
"""FreeBSD ``pkg upgrade -n``: the packages it would upgrade, with their repository."""
updates = []
for line in text.splitlines():
match = _PKG_UPGRADE.match(line)
if match:
updates.append(
{
"name": match["name"],
"current_version": match["old"],
"new_version": match["new"],
"origin": match["repo"],
}
)
return updates
def pkg_audit(text: str) -> set[str]:
"""FreeBSD ``pkg audit -q``: the names of the vulnerable packages (VuXML)."""
names = set()
for line in text.splitlines():
line = line.strip()
if line:
names.add(line.rpartition("-")[0] or line)
return names
_CANDIDATE = re.compile(r"^Update candidates: (?P<old>\S+) -> (?P<new>\S+)$")
def pkg_add_candidates(text: str) -> list[dict[str, Any]]:
"""OpenBSD ``pkg_add -u -n -v``: the candidates whose version changes."""
updates: list[dict[str, Any]] = []
seen = set()
for line in text.splitlines():
match = _CANDIDATE.match(line.strip())
if not match or match["old"] == match["new"] or match["old"] in seen:
continue
seen.add(match["old"])
name, old = split_package(match["old"])
_, new = split_package(match["new"])
updates.append({"name": name, "current_version": old, "new_version": new})
return updates
def syspatch(text: str) -> list[str]:
"""OpenBSD ``syspatch -c`` / ``-l``: one patch name per line."""
return [line.strip() for line in text.splitlines() if re.match(r"^\d{3}_\S+$", line.strip())]
_RUNNING = re.compile(r"is running as pid (\d+)")
def service_status(text: str) -> list[dict[str, Any]]:
"""FreeBSD: ``name<TAB>first line of 'service name status'`` per enabled service."""
services = []
for line in text.splitlines():
name, _, status = line.partition("\t")
if not name:
continue
running = _RUNNING.search(status)
services.append(
{
"name": name,
"running": bool(running),
"enabled": True,
"pid": int(running[1]) if running else 0,
}
)
return services
def rcctl_check(text: str) -> list[dict[str, Any]]:
"""OpenBSD: ``name<TAB>1|0`` per enabled service, from ``rcctl check``."""
services = []
for line in text.splitlines():
name, _, ok = line.partition("\t")
if name:
services.append({"name": name, "running": ok.strip() == "1", "enabled": True, "pid": 0})
return services
+8
View File
@@ -35,3 +35,11 @@ freebsd-update -h
id
sockstat -46lq -P tcp,udp
sudo sockstat -46lq -P tcp,udp
pkg version -vRL= (repo FreeBSD-ports -> latest)
sudo pkg upgrade -n (repo -> latest)
pkg query -e '%a = 0' '%n\t%v\t%R\t%sb\t%c'
service -e; service -l | head -5
pkg query '%n\t%v\t%R\t%sb\t%c'
for s in $(service -e); do n=${s##*/}; printf "%s\t%s\n" "$n" "$(service $n status 2>&1 | head -1)"; done
sudo pkg audit -Fq
sudo for s in $(service -e); do n=${s##*/}; printf "%s\t%s\n" "$n" "$(service $n status 2>&1 | head -1)"; done
+11
View File
@@ -0,0 +1,11 @@
FreeBSD-set-base 15.1 FreeBSD-base 0 Base system (metapackage)
FreeBSD-set-base-dbg 15.1 FreeBSD-base 0 Base system debug symbols (metapackage)
FreeBSD-set-kernels 15.1 FreeBSD-base 0 Base system kernels (metapackage)
FreeBSD-set-kernels-dbg 15.1 FreeBSD-base 0 Base system kernels debugging symbols (metapackage)
FreeBSD-set-lib32 15.1 FreeBSD-base 0 32-bit compatibility libraries (metapackage)
FreeBSD-set-lib32-dbg 15.1 FreeBSD-base 0 32-bit compatibility library debugging symbols (metapackage)
FreeBSD-set-tests 15.1 FreeBSD-base 0 System test suite
firstboot-pkg-upgrade 1.2 FreeBSD-ports 1757 Update the system using pkg when it first boots
pkg 2.7.5 FreeBSD-ports 27719861 Package manager
qemu-guest-agent 11.0.2 FreeBSD-ports 31962444 QEMU CPU Emulator (guest agent)
sudo 1.9.17p2_2 FreeBSD-ports 8429090 Allow others to run commands as root
+514
View File
@@ -0,0 +1,514 @@
FreeBSD-acct 15.1p4 FreeBSD-base 118976 System resource accounting
FreeBSD-acct-dbg 15.1p4 FreeBSD-base 162712 System resource accounting (debugging symbols)
FreeBSD-acpi 15.1 FreeBSD-base 2312577 Advanced Configuration and Power Interface (ACPI) utilities
FreeBSD-acpi-dbg 15.1 FreeBSD-base 3022016 Advanced Configuration and Power Interface (ACPI) utilities (debugging symbols)
FreeBSD-apm 15.1 FreeBSD-base 15685 Intel / Microsoft APM BIOS utility
FreeBSD-apm-dbg 15.1 FreeBSD-base 13912 Intel / Microsoft APM BIOS utility (debugging symbols)
FreeBSD-at 15.1 FreeBSD-base 50088 Scheduled and batch command utilities
FreeBSD-at-dbg 15.1 FreeBSD-base 48776 Scheduled and batch command utilities (debugging symbols)
FreeBSD-atf 15.1 FreeBSD-base 184430 Automated Testing Framework
FreeBSD-atf-dbg 15.1 FreeBSD-base 1996064 Automated Testing Framework (debugging symbols)
FreeBSD-atf-dev 15.1 FreeBSD-base 2034771 Automated Testing Framework (development files)
FreeBSD-atf-lib 15.1 FreeBSD-base 208520 Automated Testing Framework (libraries)
FreeBSD-audit 15.1p4 FreeBSD-base 265124 OpenBSM auditing utilities
FreeBSD-audit-dbg 15.1p4 FreeBSD-base 532848 OpenBSM auditing utilities (debugging symbols)
FreeBSD-audit-dbg-lib32 15.1 FreeBSD-base 231920 OpenBSM auditing utilities (32-bit debugging symbols)
FreeBSD-audit-dev 15.1 FreeBSD-base 739988 OpenBSM auditing utilities (development files)
FreeBSD-audit-dev-lib32 15.1 FreeBSD-base 315584 OpenBSM auditing utilities (32-bit development files)
FreeBSD-audit-lib 15.1 FreeBSD-base 108992 OpenBSM auditing utilities (libraries)
FreeBSD-audit-lib32 15.1 FreeBSD-base 115800 OpenBSM auditing utilities (32-bit libraries)
FreeBSD-autofs 15.1p2 FreeBSD-base 71482 File system automounter
FreeBSD-autofs-dbg 15.1p2 FreeBSD-base 60280 File system automounter (debugging symbols)
FreeBSD-bhyve 15.1p4 FreeBSD-base 679492 bhyve virtual machine hypervisor
FreeBSD-bhyve-dbg 15.1p4 FreeBSD-base 752856 bhyve virtual machine hypervisor (debugging symbols)
FreeBSD-blocklist 15.1 FreeBSD-base 233452 Network blocklist daemon
FreeBSD-blocklist-dbg 15.1 FreeBSD-base 266888 Network blocklist daemon (debugging symbols)
FreeBSD-blocklist-dbg-lib32 15.1 FreeBSD-base 39864 Network blocklist daemon (32-bit debugging symbols)
FreeBSD-blocklist-dev 15.1 FreeBSD-base 80665 Network blocklist daemon (development files)
FreeBSD-blocklist-dev-lib32 15.1 FreeBSD-base 44646 Network blocklist daemon (32-bit development files)
FreeBSD-blocklist-lib32 15.1 FreeBSD-base 19824 Network blocklist daemon (32-bit libraries)
FreeBSD-bluetooth 15.1 FreeBSD-base 640827 Bluetooth support
FreeBSD-bluetooth-dbg 15.1 FreeBSD-base 610992 Bluetooth support (debugging symbols)
FreeBSD-bluetooth-dbg-lib32 15.1 FreeBSD-base 62392 Bluetooth support (32-bit debugging symbols)
FreeBSD-bluetooth-dev 15.1 FreeBSD-base 164663 Bluetooth support (development files)
FreeBSD-bluetooth-dev-lib32 15.1 FreeBSD-base 78122 Bluetooth support (32-bit development files)
FreeBSD-bluetooth-lib 15.1 FreeBSD-base 39496 Bluetooth support (libraries)
FreeBSD-bluetooth-lib32 15.1 FreeBSD-base 32192 Bluetooth support (32-bit libraries)
FreeBSD-bmake 15.1 FreeBSD-base 667182 Program maintenance utility
FreeBSD-bmake-dbg 15.1 FreeBSD-base 324496 Program maintenance utility (debugging symbols)
FreeBSD-bootloader 15.1 FreeBSD-base 6813408 System boot loader
FreeBSD-bootloader-dbg 15.1 FreeBSD-base 4374144 System boot loader (debugging symbols)
FreeBSD-bootloader-dev 15.1 FreeBSD-base 7431 System boot loader (development files)
FreeBSD-bsdconfig 15.1 FreeBSD-base 1178152 System configuration utility
FreeBSD-bsdinstall 15.1 FreeBSD-base 300909 System installer
FreeBSD-bsdinstall-dbg 15.1 FreeBSD-base 98112 System installer (debugging symbols)
FreeBSD-bsnmp 15.1p1 FreeBSD-base 1905434 Simple and extensible SNMP daemon
FreeBSD-bsnmp-dbg 15.1p1 FreeBSD-base 2122296 Simple and extensible SNMP daemon (debugging symbols)
FreeBSD-bsnmp-dbg-lib32 15.1 FreeBSD-base 118132 Simple and extensible SNMP daemon (32-bit debugging symbols)
FreeBSD-bsnmp-dev 15.1 FreeBSD-base 395170 Simple and extensible SNMP daemon (development files)
FreeBSD-bsnmp-dev-lib32 15.1 FreeBSD-base 168235 Simple and extensible SNMP daemon (32-bit development files)
FreeBSD-bsnmp-lib32 15.1 FreeBSD-base 71664 Simple and extensible SNMP daemon (32-bit libraries)
FreeBSD-bzip2 15.1 FreeBSD-base 52032 A block-sorting data compressor
FreeBSD-bzip2-dbg 15.1 FreeBSD-base 187488 A block-sorting data compressor (debugging symbols)
FreeBSD-bzip2-dbg-lib32 15.1 FreeBSD-base 105796 A block-sorting data compressor (32-bit debugging symbols)
FreeBSD-bzip2-dev 15.1 FreeBSD-base 214032 A block-sorting data compressor (development files)
FreeBSD-bzip2-dev-lib32 15.1 FreeBSD-base 144480 A block-sorting data compressor (32-bit development files)
FreeBSD-bzip2-lib 15.1 FreeBSD-base 82648 A block-sorting data compressor (libraries)
FreeBSD-bzip2-lib32 15.1 FreeBSD-base 70976 A block-sorting data compressor (32-bit libraries)
FreeBSD-caroot 15.1 FreeBSD-base 936376 Mozilla Root Store trusted TLS certificates
FreeBSD-ccdconfig 15.1 FreeBSD-base 17180 Concatenated disk driver (ccd) configuration utility
FreeBSD-ccdconfig-dbg 15.1 FreeBSD-base 14840 Concatenated disk driver (ccd) configuration utility (debugging symbols)
FreeBSD-certctl 15.1 FreeBSD-base 27612 Tool for managing trusted and untrusted TLS certificates
FreeBSD-certctl-dbg 15.1 FreeBSD-base 27832 Tool for managing trusted and untrusted TLS certificates (debugging symbols)
FreeBSD-clang 15.1p2 FreeBSD-base 164289993 The Clang C, C++, and Objective-C compiler
FreeBSD-clang-dbg 15.1p2 FreeBSD-base 438402744 The Clang C, C++, and Objective-C compiler (debugging symbols)
FreeBSD-clang-dev 15.1p1 FreeBSD-base 73790614 The Clang C, C++, and Objective-C compiler (development files)
FreeBSD-clibs 15.1p4 FreeBSD-base 3987631 Core runtime libraries
FreeBSD-clibs-dbg 15.1p4 FreeBSD-base 16750984 Core runtime libraries (debugging symbols)
FreeBSD-clibs-dbg-lib32 15.1p4 FreeBSD-base 13223536 Core runtime libraries (32-bit debugging symbols)
FreeBSD-clibs-dev 15.1p4 FreeBSD-base 64062010 Core runtime libraries (development files)
FreeBSD-clibs-dev-lib32 15.1p4 FreeBSD-base 27776056 Core runtime libraries (32-bit development files)
FreeBSD-clibs-lib32 15.1p4 FreeBSD-base 3697906 Core runtime libraries (32-bit libraries)
FreeBSD-console-tools 15.1p2 FreeBSD-base 278222 Video console utilities
FreeBSD-console-tools-dbg 15.1p2 FreeBSD-base 196976 Video console utilities (debugging symbols)
FreeBSD-cron 15.1 FreeBSD-base 95131 Command scheduling facility
FreeBSD-cron-dbg 15.1 FreeBSD-base 97000 Command scheduling facility (debugging symbols)
FreeBSD-csh 15.1 FreeBSD-base 921990 C shell with file name completion and command line editing
FreeBSD-csh-dbg 15.1 FreeBSD-base 487000 C shell with file name completion and command line editing (debugging symbols)
FreeBSD-ctf 15.1 FreeBSD-base 199436 Compact C Type Format (CTF)
FreeBSD-ctf-dbg 15.1 FreeBSD-base 485992 Compact C Type Format (CTF) (debugging symbols)
FreeBSD-ctf-dbg-lib32 15.1 FreeBSD-base 158968 Compact C Type Format (CTF) (32-bit debugging symbols)
FreeBSD-ctf-dev 15.1 FreeBSD-base 339279 Compact C Type Format (CTF) (development files)
FreeBSD-ctf-dev-lib32 15.1 FreeBSD-base 203151 Compact C Type Format (CTF) (32-bit development files)
FreeBSD-ctf-lib 15.1 FreeBSD-base 67880 Compact C Type Format (CTF) (libraries)
FreeBSD-ctf-lib32 15.1 FreeBSD-base 59904 Compact C Type Format (CTF) (32-bit libraries)
FreeBSD-ctl 15.1p4 FreeBSD-base 474350 CAM Target Layer / iSCSI target daemon
FreeBSD-ctl-dbg 15.1p4 FreeBSD-base 1714888 CAM Target Layer / iSCSI target daemon (debugging symbols)
FreeBSD-cxgbe-tools 15.1 FreeBSD-base 6923427 Configuration utility for Chelsio cxbge(4) network interfaces
FreeBSD-cxgbe-tools-dbg 15.1 FreeBSD-base 179768 Configuration utility for Chelsio cxbge(4) network interfaces (debugging symbols)
FreeBSD-devd 15.1 FreeBSD-base 89174 Kernel event handling daemon
FreeBSD-devd-dbg 15.1 FreeBSD-base 188160 Kernel event handling daemon (debugging symbols)
FreeBSD-devmatch 15.1 FreeBSD-base 42868 Automatically load kernel drivers for attached hardware
FreeBSD-devmatch-dbg 15.1 FreeBSD-base 52072 Automatically load kernel drivers for attached hardware (debugging symbols)
FreeBSD-devmatch-dbg-lib32 15.1 FreeBSD-base 16536 Automatically load kernel drivers for attached hardware (32-bit debugging symbols)
FreeBSD-devmatch-dev 15.1 FreeBSD-base 32391 Automatically load kernel drivers for attached hardware (development files)
FreeBSD-devmatch-dev-lib32 15.1 FreeBSD-base 15641 Automatically load kernel drivers for attached hardware (32-bit development files)
FreeBSD-devmatch-lib32 15.1 FreeBSD-base 8512 Automatically load kernel drivers for attached hardware (32-bit libraries)
FreeBSD-dhclient 15.1p4 FreeBSD-base 154160 Dynamic Host Configuration Protocol (DHCP) client
FreeBSD-dhclient-dbg 15.1p4 FreeBSD-base 109592 Dynamic Host Configuration Protocol (DHCP) client (debugging symbols)
FreeBSD-diff3 15.1 FreeBSD-base 29549 GNU 3-way file comparison and merge utility
FreeBSD-diff3-dbg 15.1 FreeBSD-base 35064 GNU 3-way file comparison and merge utility (debugging symbols)
FreeBSD-dma 15.1p4 FreeBSD-base 82628 DragonFly Mail Agent
FreeBSD-dma-dbg 15.1p4 FreeBSD-base 86936 DragonFly Mail Agent (debugging symbols)
FreeBSD-dtrace 15.1 FreeBSD-base 977498 DTrace dynamic tracing framework
FreeBSD-dtrace-dbg 15.1 FreeBSD-base 1906968 DTrace dynamic tracing framework (debugging symbols)
FreeBSD-dtrace-dbg-lib32 15.1 FreeBSD-base 1445892 DTrace dynamic tracing framework (32-bit debugging symbols)
FreeBSD-dtrace-dev 15.1 FreeBSD-base 3644945 DTrace dynamic tracing framework (development files)
FreeBSD-dtrace-dev-lib32 15.1 FreeBSD-base 2137418 DTrace dynamic tracing framework (32-bit development files)
FreeBSD-dtrace-lib32 15.1 FreeBSD-base 606808 DTrace dynamic tracing framework (32-bit libraries)
FreeBSD-dwatch 15.1 FreeBSD-base 107846 Watch processes as they trigger a particular DTrace probe
FreeBSD-ee 15.1 FreeBSD-base 167158 Easy Editor
FreeBSD-ee-dbg 15.1 FreeBSD-base 81744 Easy Editor (debugging symbols)
FreeBSD-efi-tools 15.1 FreeBSD-base 155307 Utilities for the Unified Extensible Firmware Interface (UEFI)
FreeBSD-efi-tools-dbg 15.1 FreeBSD-base 293464 Utilities for the Unified Extensible Firmware Interface (UEFI) (debugging symbols)
FreeBSD-efi-tools-dev 15.1 FreeBSD-base 317287 Utilities for the Unified Extensible Firmware Interface (UEFI) (development files)
FreeBSD-examples 15.1 FreeBSD-base 555435 System interface examples
FreeBSD-fd 15.1 FreeBSD-base 72329 Floppy disk utilities
FreeBSD-fd-dbg 15.1 FreeBSD-base 61424 Floppy disk utilities (debugging symbols)
FreeBSD-fetch 15.1 FreeBSD-base 112434 Retrieve a file from a remote URL
FreeBSD-fetch-dbg 15.1 FreeBSD-base 207520 Retrieve a file from a remote URL (debugging symbols)
FreeBSD-fetch-dbg-lib32 15.1 FreeBSD-base 132244 Retrieve a file from a remote URL (32-bit debugging symbols)
FreeBSD-fetch-dev 15.1 FreeBSD-base 296303 Retrieve a file from a remote URL (development files)
FreeBSD-fetch-dev-lib32 15.1 FreeBSD-base 175739 Retrieve a file from a remote URL (32-bit development files)
FreeBSD-fetch-lib32 15.1 FreeBSD-base 70264 Retrieve a file from a remote URL (32-bit libraries)
FreeBSD-firmware-iwm 15.1 FreeBSD-base 14493588 Firmware for iwm(4) Intel 802.11ac network interfaces
FreeBSD-flua 15.1 FreeBSD-base 441149 Private Lua implementation
FreeBSD-flua-dbg 15.1 FreeBSD-base 672552 Private Lua implementation (debugging symbols)
FreeBSD-flua-dev 15.1 FreeBSD-base 4138 Private Lua implementation (development files)
FreeBSD-ftp 15.1 FreeBSD-base 176150 File Transfer Protocol (FTP) client
FreeBSD-ftp-dbg 15.1 FreeBSD-base 144392 File Transfer Protocol (FTP) client (debugging symbols)
FreeBSD-fwget 15.1 FreeBSD-base 48026 Install firmware packages for the running system
FreeBSD-games 15.1p4 FreeBSD-base 35736 Games
FreeBSD-games-dbg 15.1p4 FreeBSD-base 33272 Games (debugging symbols)
FreeBSD-geom 15.1 FreeBSD-base 526070 GEOM configuration utilities
FreeBSD-geom-dbg 15.1 FreeBSD-base 726784 GEOM configuration utilities (debugging symbols)
FreeBSD-geom-dbg-lib32 15.1 FreeBSD-base 521932 GEOM configuration utilities (32-bit debugging symbols)
FreeBSD-geom-lib32 15.1 FreeBSD-base 317672 GEOM configuration utilities (32-bit libraries)
FreeBSD-ggate 15.1 FreeBSD-base 71502 GEOM Gate client and server
FreeBSD-ggate-dbg 15.1 FreeBSD-base 73336 GEOM Gate client and server (debugging symbols)
FreeBSD-gssd 15.1 FreeBSD-base 42054 gssd(8) daemon for kernel GSS-API
FreeBSD-gssd-dbg 15.1 FreeBSD-base 52632 gssd(8) daemon for kernel GSS-API (debugging symbols)
FreeBSD-hast 15.1p4 FreeBSD-base 313689 Highly Available Storage daemon
FreeBSD-hast-dbg 15.1p4 FreeBSD-base 302664 Highly Available Storage daemon (debugging symbols)
FreeBSD-hostapd 15.1 FreeBSD-base 1176639 IEEE Std 802.11 Access Point authentication daemon
FreeBSD-hostapd-dbg 15.1 FreeBSD-base 1844408 IEEE Std 802.11 Access Point authentication daemon (debugging symbols)
FreeBSD-hyperv-tools 15.1 FreeBSD-base 44956 Microsoft Hyper-V utilities
FreeBSD-hyperv-tools-dbg 15.1 FreeBSD-base 38928 Microsoft Hyper-V utilities (debugging symbols)
FreeBSD-inetd 15.1 FreeBSD-base 65071 Internet super-server
FreeBSD-inetd-dbg 15.1 FreeBSD-base 51584 Internet super-server (debugging symbols)
FreeBSD-ipf 15.1 FreeBSD-base 1016982 IP Filter (ipf) packet filter management tools
FreeBSD-ipf-dbg 15.1 FreeBSD-base 995496 IP Filter (ipf) packet filter management tools (debugging symbols)
FreeBSD-ipfw 15.1 FreeBSD-base 261982 ipfw (IP firewall) management utilities
FreeBSD-ipfw-dbg 15.1 FreeBSD-base 209272 ipfw (IP firewall) management utilities (debugging symbols)
FreeBSD-iscsi 15.1p4 FreeBSD-base 105951 iSCSI initiator
FreeBSD-iscsi-dbg 15.1p4 FreeBSD-base 111320 iSCSI initiator (debugging symbols)
FreeBSD-jail 15.1p2 FreeBSD-base 137381 Jail management tools
FreeBSD-jail-dbg 15.1p2 FreeBSD-base 115488 Jail management tools (debugging symbols)
FreeBSD-kerberos 15.1 FreeBSD-base 467964 Kerberos client
FreeBSD-kerberos-dbg 15.1 FreeBSD-base 6960496 Kerberos client (debugging symbols)
FreeBSD-kerberos-dbg-lib32 15.1 FreeBSD-base 4939464 Kerberos client (32-bit debugging symbols)
FreeBSD-kerberos-dev 15.1 FreeBSD-base 11169640 Kerberos client (development files)
FreeBSD-kerberos-dev-lib32 15.1 FreeBSD-base 6564664 Kerberos client (32-bit development files)
FreeBSD-kerberos-kdc 15.1 FreeBSD-base 1044038 Kerberos key distribution center
FreeBSD-kerberos-kdc-dbg 15.1 FreeBSD-base 2364296 Kerberos key distribution center (debugging symbols)
FreeBSD-kerberos-lib 15.1 FreeBSD-base 1987568 Kerberos client (libraries)
FreeBSD-kerberos-lib32 15.1 FreeBSD-base 1813021 Kerberos client (32-bit libraries)
FreeBSD-kernel-generic 15.1p4 FreeBSD-base 161420246 FreeBSD GENERIC Kernel
FreeBSD-kernel-generic-dbg 15.1p4 FreeBSD-base 605419763 FreeBSD GENERIC Kernel -dbg (debugging symbols)
FreeBSD-kernel-man 15.1p4 FreeBSD-base 2770335 Kernel manual pages
FreeBSD-kyua 15.1 FreeBSD-base 1415388 Testing framework for infrastructure software
FreeBSD-kyua-dbg 15.1 FreeBSD-base 7211888 Testing framework for infrastructure software (debugging symbols)
FreeBSD-lib9p 15.1p2 FreeBSD-base 100928 9P network protocol library
FreeBSD-lib9p-dbg 15.1p2 FreeBSD-base 296200 9P network protocol library (debugging symbols)
FreeBSD-lib9p-dbg-lib32 15.1p2 FreeBSD-base 216936 9P network protocol library (32-bit debugging symbols)
FreeBSD-lib9p-dev 15.1p2 FreeBSD-base 487581 9P network protocol library (development files)
FreeBSD-lib9p-dev-lib32 15.1p2 FreeBSD-base 281388 9P network protocol library (32-bit development files)
FreeBSD-lib9p-lib32 15.1p2 FreeBSD-base 85620 9P network protocol library (32-bit libraries)
FreeBSD-libarchive 15.1 FreeBSD-base 908662 Library for reading and writing streaming archives
FreeBSD-libarchive-dbg 15.1 FreeBSD-base 2756288 Library for reading and writing streaming archives (debugging symbols)
FreeBSD-libarchive-dbg-lib32 15.1 FreeBSD-base 2114812 Library for reading and writing streaming archives (32-bit debugging symbols)
FreeBSD-libarchive-dev 15.1 FreeBSD-base 4267893 Library for reading and writing streaming archives (development files)
FreeBSD-libarchive-dev-lib32 15.1 FreeBSD-base 2701451 Library for reading and writing streaming archives (32-bit development files)
FreeBSD-libarchive-lib32 15.1 FreeBSD-base 847384 Library for reading and writing streaming archives (32-bit libraries)
FreeBSD-libbegemot 15.1 FreeBSD-base 11176 rpoll(3) interface for event-driven I/O
FreeBSD-libbegemot-dbg 15.1 FreeBSD-base 20352 rpoll(3) interface for event-driven I/O (debugging symbols)
FreeBSD-libbegemot-dbg-lib32 15.1 FreeBSD-base 16720 rpoll(3) interface for event-driven I/O (32-bit debugging symbols)
FreeBSD-libbegemot-dev 15.1 FreeBSD-base 32469 rpoll(3) interface for event-driven I/O (development files)
FreeBSD-libbegemot-dev-lib32 15.1 FreeBSD-base 17199 rpoll(3) interface for event-driven I/O (32-bit development files)
FreeBSD-libbegemot-lib32 15.1 FreeBSD-base 9636 rpoll(3) interface for event-driven I/O (32-bit libraries)
FreeBSD-libblocksruntime 15.1 FreeBSD-base 10912 LLVM BlocksRuntime library
FreeBSD-libblocksruntime-dbg 15.1 FreeBSD-base 22440 LLVM BlocksRuntime library (debugging symbols)
FreeBSD-libblocksruntime-dbg-lib32 15.1 FreeBSD-base 17244 LLVM BlocksRuntime library (32-bit debugging symbols)
FreeBSD-libblocksruntime-dev 15.1 FreeBSD-base 37538 LLVM BlocksRuntime library (development files)
FreeBSD-libblocksruntime-dev-lib32 15.1 FreeBSD-base 19079 LLVM BlocksRuntime library (32-bit development files)
FreeBSD-libblocksruntime-lib32 15.1 FreeBSD-base 9136 LLVM BlocksRuntime library (32-bit libraries)
FreeBSD-libbsdstat 15.1 FreeBSD-base 8304 Periodic statistics library
FreeBSD-libbsdstat-dbg 15.1 FreeBSD-base 16688 Periodic statistics library (debugging symbols)
FreeBSD-libbsdstat-dbg-lib32 15.1 FreeBSD-base 12400 Periodic statistics library (32-bit debugging symbols)
FreeBSD-libbsdstat-dev 15.1 FreeBSD-base 22865 Periodic statistics library (development files)
FreeBSD-libbsdstat-dev-lib32 15.1 FreeBSD-base 10860 Periodic statistics library (32-bit development files)
FreeBSD-libbsdstat-lib32 15.1 FreeBSD-base 6656 Periodic statistics library (32-bit libraries)
FreeBSD-libcasper 15.1p4 FreeBSD-base 145104 Casper library
FreeBSD-libcasper-dbg 15.1p4 FreeBSD-base 318848 Casper library (debugging symbols)
FreeBSD-libcasper-dbg-lib32 15.1p4 FreeBSD-base 217440 Casper library (32-bit debugging symbols)
FreeBSD-libcasper-dev 15.1 FreeBSD-base 62447 Casper library (development files)
FreeBSD-libcasper-dev-lib32 15.1 FreeBSD-base 147 Casper library (32-bit development files)
FreeBSD-libcasper-lib32 15.1p4 FreeBSD-base 121336 Casper library (32-bit libraries)
FreeBSD-libcompat-dev 15.1 FreeBSD-base 45054 Compatibility library (development files)
FreeBSD-libcompat-dev-lib32 15.1 FreeBSD-base 26092 Compatibility library (32-bit development files)
FreeBSD-libcompiler_rt-dev 15.1 FreeBSD-base 804538 LLVM compiler_rt library (development files)
FreeBSD-libcompiler_rt-dev-lib32 15.1 FreeBSD-base 362204 LLVM compiler_rt library (32-bit development files)
FreeBSD-libcuse 15.1 FreeBSD-base 14128 Userland character device library
FreeBSD-libcuse-dbg 15.1 FreeBSD-base 26816 Userland character device library (debugging symbols)
FreeBSD-libcuse-dbg-lib32 15.1 FreeBSD-base 19136 Userland character device library (32-bit debugging symbols)
FreeBSD-libcuse-dev 15.1 FreeBSD-base 41992 Userland character device library (development files)
FreeBSD-libcuse-dev-lib32 15.1 FreeBSD-base 20738 Userland character device library (32-bit development files)
FreeBSD-libcuse-lib32 15.1 FreeBSD-base 11660 Userland character device library (32-bit libraries)
FreeBSD-libdwarf 15.1 FreeBSD-base 199416 DWARF access library
FreeBSD-libdwarf-dbg 15.1 FreeBSD-base 979800 DWARF access library (debugging symbols)
FreeBSD-libdwarf-dbg-lib32 15.1 FreeBSD-base 759884 DWARF access library (32-bit debugging symbols)
FreeBSD-libdwarf-dev 15.1 FreeBSD-base 2270941 DWARF access library (development files)
FreeBSD-libdwarf-dev-lib32 15.1 FreeBSD-base 1190869 DWARF access library (32-bit development files)
FreeBSD-libdwarf-lib32 15.1 FreeBSD-base 191568 DWARF access library (32-bit libraries)
FreeBSD-libevent1 15.1p2 FreeBSD-base 41832 Private libevent1 library
FreeBSD-libevent1-dbg 15.1p2 FreeBSD-base 104728 Private libevent1 library (debugging symbols)
FreeBSD-libevent1-dbg-lib32 15.1p2 FreeBSD-base 76516 Private libevent1 library (32-bit debugging symbols)
FreeBSD-libevent1-dev 15.1p2 FreeBSD-base 171289 Private libevent1 library (development files)
FreeBSD-libevent1-dev-lib32 15.1p2 FreeBSD-base 100995 Private libevent1 library (32-bit development files)
FreeBSD-libevent1-lib32 15.1p2 FreeBSD-base 36444 Private libevent1 library (32-bit libraries)
FreeBSD-libexecinfo 15.1 FreeBSD-base 11680 NetBSD stack backtrace library
FreeBSD-libexecinfo-dbg 15.1 FreeBSD-base 26888 NetBSD stack backtrace library (debugging symbols)
FreeBSD-libexecinfo-dbg-lib32 15.1 FreeBSD-base 20988 NetBSD stack backtrace library (32-bit debugging symbols)
FreeBSD-libexecinfo-dev 15.1 FreeBSD-base 40128 NetBSD stack backtrace library (development files)
FreeBSD-libexecinfo-dev-lib32 15.1 FreeBSD-base 22402 NetBSD stack backtrace library (32-bit development files)
FreeBSD-libexecinfo-lib32 15.1 FreeBSD-base 9304 NetBSD stack backtrace library (32-bit libraries)
FreeBSD-libipt 15.1 FreeBSD-base 134944 Intel(R) Processor Trace decoder library
FreeBSD-libipt-dbg 15.1 FreeBSD-base 404552 Intel(R) Processor Trace decoder library (debugging symbols)
FreeBSD-libipt-dev 15.1 FreeBSD-base 762515 Intel(R) Processor Trace decoder library (development files)
FreeBSD-libldns 15.1 FreeBSD-base 439200 Private LDNS library
FreeBSD-libldns-dbg 15.1 FreeBSD-base 1188568 Private LDNS library (debugging symbols)
FreeBSD-libldns-dbg-lib32 15.1 FreeBSD-base 835244 Private LDNS library (32-bit debugging symbols)
FreeBSD-libldns-dev 15.1 FreeBSD-base 1978245 Private LDNS library (development files)
FreeBSD-libldns-dev-lib32 15.1 FreeBSD-base 1195745 Private LDNS library (32-bit development files)
FreeBSD-libldns-lib32 15.1 FreeBSD-base 392184 Private LDNS library (32-bit libraries)
FreeBSD-libmagic 15.1 FreeBSD-base 12352849 Magic number recognition library
FreeBSD-libmagic-dbg 15.1 FreeBSD-base 463624 Magic number recognition library (debugging symbols)
FreeBSD-libmagic-dbg-lib32 15.1 FreeBSD-base 342316 Magic number recognition library (32-bit debugging symbols)
FreeBSD-libmagic-dev 15.1 FreeBSD-base 787744 Magic number recognition library (development files)
FreeBSD-libmagic-dev-lib32 15.1 FreeBSD-base 489962 Magic number recognition library (32-bit development files)
FreeBSD-libmagic-lib32 15.1 FreeBSD-base 154988 Magic number recognition library (32-bit libraries)
FreeBSD-libmilter 15.1 FreeBSD-base 56544 sendmail Mail Filter API library
FreeBSD-libmilter-dbg 15.1 FreeBSD-base 130192 sendmail Mail Filter API library (debugging symbols)
FreeBSD-libmilter-dbg-lib32 15.1 FreeBSD-base 100652 sendmail Mail Filter API library (32-bit debugging symbols)
FreeBSD-libmilter-dev 15.1 FreeBSD-base 245019 sendmail Mail Filter API library (development files)
FreeBSD-libmilter-dev-lib32 15.1 FreeBSD-base 139268 sendmail Mail Filter API library (32-bit development files)
FreeBSD-libmilter-lib32 15.1 FreeBSD-base 49512 sendmail Mail Filter API library (32-bit libraries)
FreeBSD-libpathconv 15.1 FreeBSD-base 5640 Library for handling relative and absolute pathnames
FreeBSD-libpathconv-dbg 15.1 FreeBSD-base 12080 Library for handling relative and absolute pathnames (debugging symbols)
FreeBSD-libpathconv-dbg-lib32 15.1 FreeBSD-base 8968 Library for handling relative and absolute pathnames (32-bit debugging symbols)
FreeBSD-libpathconv-dev 15.1 FreeBSD-base 15449 Library for handling relative and absolute pathnames (development files)
FreeBSD-libpathconv-dev-lib32 15.1 FreeBSD-base 7264 Library for handling relative and absolute pathnames (32-bit development files)
FreeBSD-libpathconv-lib32 15.1 FreeBSD-base 4268 Library for handling relative and absolute pathnames (32-bit libraries)
FreeBSD-librpcsec_gss 15.1 FreeBSD-base 29800 RPCSEC_GSS library
FreeBSD-librpcsec_gss-dbg 15.1 FreeBSD-base 78024 RPCSEC_GSS library (debugging symbols)
FreeBSD-librpcsec_gss-dbg-lib32 15.1 FreeBSD-base 58548 RPCSEC_GSS library (32-bit debugging symbols)
FreeBSD-librpcsec_gss-dev 15.1 FreeBSD-base 147868 RPCSEC_GSS library (development files)
FreeBSD-librpcsec_gss-dev-lib32 15.1 FreeBSD-base 77350 RPCSEC_GSS library (32-bit development files)
FreeBSD-librpcsec_gss-lib32 15.1 FreeBSD-base 25840 RPCSEC_GSS library (32-bit libraries)
FreeBSD-librss 15.1 FreeBSD-base 7808 Receive-side scaling library
FreeBSD-librss-dbg 15.1 FreeBSD-base 15184 Receive-side scaling library (debugging symbols)
FreeBSD-librss-dbg-lib32 15.1 FreeBSD-base 11840 Receive-side scaling library (32-bit debugging symbols)
FreeBSD-librss-dev 15.1 FreeBSD-base 17866 Receive-side scaling library (development files)
FreeBSD-librss-dev-lib32 15.1 FreeBSD-base 9677 Receive-side scaling library (32-bit development files)
FreeBSD-librss-lib32 15.1 FreeBSD-base 6316 Receive-side scaling library (32-bit libraries)
FreeBSD-libsqlite3 15.1 FreeBSD-base 1220296 Private SQLite library
FreeBSD-libsqlite3-dbg 15.1 FreeBSD-base 4294160 Private SQLite library (debugging symbols)
FreeBSD-libsqlite3-dbg-lib32 15.1 FreeBSD-base 3224812 Private SQLite library (32-bit debugging symbols)
FreeBSD-libsqlite3-dev 15.1 FreeBSD-base 5355591 Private SQLite library (development files)
FreeBSD-libsqlite3-dev-lib32 15.1 FreeBSD-base 3180730 Private SQLite library (32-bit development files)
FreeBSD-libsqlite3-lib32 15.1 FreeBSD-base 1161800 Private SQLite library (32-bit libraries)
FreeBSD-libthread_db 15.1 FreeBSD-base 32032 Library for interacting with threaded processes
FreeBSD-libthread_db-dbg 15.1 FreeBSD-base 82528 Library for interacting with threaded processes (debugging symbols)
FreeBSD-libthread_db-dbg-lib32 15.1 FreeBSD-base 64400 Library for interacting with threaded processes (32-bit debugging symbols)
FreeBSD-libthread_db-dev 15.1 FreeBSD-base 152643 Library for interacting with threaded processes (development files)
FreeBSD-libthread_db-dev-lib32 15.1 FreeBSD-base 90509 Library for interacting with threaded processes (32-bit development files)
FreeBSD-libthread_db-lib32 15.1 FreeBSD-base 32452 Library for interacting with threaded processes (32-bit libraries)
FreeBSD-libucl 15.1 FreeBSD-base 145640 Private Universal Configuration Library (UCL) library
FreeBSD-libucl-dbg 15.1 FreeBSD-base 428672 Private Universal Configuration Library (UCL) library (debugging symbols)
FreeBSD-libucl-dbg-lib32 15.1 FreeBSD-base 300824 Private Universal Configuration Library (UCL) library (32-bit debugging symbols)
FreeBSD-libucl-dev 15.1 FreeBSD-base 649386 Private Universal Configuration Library (UCL) library (development files)
FreeBSD-libucl-dev-lib32 15.1 FreeBSD-base 368030 Private Universal Configuration Library (UCL) library (32-bit development files)
FreeBSD-libucl-lib32 15.1 FreeBSD-base 137032 Private Universal Configuration Library (UCL) library (32-bit libraries)
FreeBSD-libvgl 15.1 FreeBSD-base 41472 Video Graphics Library
FreeBSD-libvgl-dbg 15.1 FreeBSD-base 97088 Video Graphics Library (debugging symbols)
FreeBSD-libvgl-dbg-lib32 15.1 FreeBSD-base 64568 Video Graphics Library (32-bit debugging symbols)
FreeBSD-libvgl-dev 15.1 FreeBSD-base 150595 Video Graphics Library (development files)
FreeBSD-libvgl-dev-lib32 15.1 FreeBSD-base 87823 Video Graphics Library (32-bit development files)
FreeBSD-libvgl-lib32 15.1 FreeBSD-base 36128 Video Graphics Library (32-bit libraries)
FreeBSD-libvmmapi 15.1p4 FreeBSD-base 34824 Front-end library for the vmm(4) virtualization driver
FreeBSD-libvmmapi-dbg 15.1p4 FreeBSD-base 100456 Front-end library for the vmm(4) virtualization driver (debugging symbols)
FreeBSD-libvmmapi-dev 15.1p4 FreeBSD-base 154799 Front-end library for the vmm(4) virtualization driver (development files)
FreeBSD-libyaml 15.1 FreeBSD-base 123288 Private YAML library
FreeBSD-libyaml-dbg 15.1 FreeBSD-base 254136 Private YAML library (debugging symbols)
FreeBSD-libyaml-dbg-lib32 15.1 FreeBSD-base 200208 Private YAML library (32-bit debugging symbols)
FreeBSD-libyaml-dev 15.1 FreeBSD-base 499914 Private YAML library (development files)
FreeBSD-libyaml-dev-lib32 15.1 FreeBSD-base 288487 Private YAML library (32-bit development files)
FreeBSD-libyaml-lib32 15.1 FreeBSD-base 114420 Private YAML library (32-bit libraries)
FreeBSD-lld 15.1 FreeBSD-base 2770779 LLVM ELF link loader
FreeBSD-lld-dbg 15.1 FreeBSD-base 9566744 LLVM ELF link loader (debugging symbols)
FreeBSD-lldb 15.1 FreeBSD-base 695521 LLVM debugger
FreeBSD-lldb-dbg 15.1 FreeBSD-base 2437392 LLVM debugger (debugging symbols)
FreeBSD-local-unbound 15.1 FreeBSD-base 1800537 NLnet Labs Unbound DNS resolver
FreeBSD-local-unbound-dbg 15.1 FreeBSD-base 3922760 NLnet Labs Unbound DNS resolver (debugging symbols)
FreeBSD-local-unbound-dbg-lib32 15.1 FreeBSD-base 2509340 NLnet Labs Unbound DNS resolver (32-bit debugging symbols)
FreeBSD-local-unbound-dev 15.1 FreeBSD-base 6161404 NLnet Labs Unbound DNS resolver (development files)
FreeBSD-local-unbound-dev-lib32 15.1 FreeBSD-base 3808328 NLnet Labs Unbound DNS resolver (32-bit development files)
FreeBSD-local-unbound-lib32 15.1 FreeBSD-base 1234800 NLnet Labs Unbound DNS resolver (32-bit libraries)
FreeBSD-locales 15.1 FreeBSD-base 25618978 Locale definitions
FreeBSD-lp 15.1 FreeBSD-base 377434 Print spooler
FreeBSD-lp-dbg 15.1 FreeBSD-base 386008 Print spooler (debugging symbols)
FreeBSD-mandoc 15.1 FreeBSD-base 653330 Online manual page reader
FreeBSD-mandoc-dbg 15.1 FreeBSD-base 538632 Online manual page reader (debugging symbols)
FreeBSD-mlx-tools 15.1 FreeBSD-base 13019 Utility for managing Connect-X 4/5/6 Mellanox network adapters
FreeBSD-mlx-tools-dbg 15.1 FreeBSD-base 13928 Utility for managing Connect-X 4/5/6 Mellanox network adapters (debugging symbols)
FreeBSD-mtree 15.1p2 FreeBSD-base 134952 Filesystem hierarchy management tool
FreeBSD-mtree-dbg 15.1 FreeBSD-base 68184 Filesystem hierarchy management tool (debugging symbols)
FreeBSD-natd 15.1p1 FreeBSD-base 154058 Userland Network Address Translation (NAT) for ipfw
FreeBSD-natd-dbg 15.1p1 FreeBSD-base 343360 Userland Network Address Translation (NAT) for ipfw (debugging symbols)
FreeBSD-natd-dbg-lib32 15.1p1 FreeBSD-base 238308 Userland Network Address Translation (NAT) for ipfw (32-bit debugging symbols)
FreeBSD-natd-dev 15.1p1 FreeBSD-base 391651 Userland Network Address Translation (NAT) for ipfw (development files)
FreeBSD-natd-dev-lib32 15.1p1 FreeBSD-base 232239 Userland Network Address Translation (NAT) for ipfw (32-bit development files)
FreeBSD-natd-lib32 15.1p1 FreeBSD-base 93320 Userland Network Address Translation (NAT) for ipfw (32-bit libraries)
FreeBSD-ncurses 15.1 FreeBSD-base 368979 ncurses terminal control library
FreeBSD-ncurses-dbg 15.1 FreeBSD-base 2375864 ncurses terminal control library (debugging symbols)
FreeBSD-ncurses-dbg-lib32 15.1 FreeBSD-base 1783380 ncurses terminal control library (32-bit debugging symbols)
FreeBSD-ncurses-dev 15.1 FreeBSD-base 4820800 ncurses terminal control library (development files)
FreeBSD-ncurses-dev-lib32 15.1 FreeBSD-base 2683302 ncurses terminal control library (32-bit development files)
FreeBSD-ncurses-lib 15.1 FreeBSD-base 601624 ncurses terminal control library (libraries)
FreeBSD-ncurses-lib32 15.1 FreeBSD-base 533716 ncurses terminal control library (32-bit libraries)
FreeBSD-netmap 15.1 FreeBSD-base 43765 Userland netmap support
FreeBSD-netmap-dbg 15.1 FreeBSD-base 78576 Userland netmap support (debugging symbols)
FreeBSD-netmap-dbg-lib32 15.1 FreeBSD-base 49580 Userland netmap support (32-bit debugging symbols)
FreeBSD-netmap-dev 15.1 FreeBSD-base 129541 Userland netmap support (development files)
FreeBSD-netmap-dev-lib32 15.1 FreeBSD-base 63324 Userland netmap support (32-bit development files)
FreeBSD-netmap-lib32 15.1 FreeBSD-base 25152 Userland netmap support (32-bit libraries)
FreeBSD-newsyslog 15.1 FreeBSD-base 58839 Create and rotate system log files
FreeBSD-newsyslog-dbg 15.1 FreeBSD-base 49232 Create and rotate system log files (debugging symbols)
FreeBSD-nfs 15.1 FreeBSD-base 405765 NFS client and server utilities
FreeBSD-nfs-dbg 15.1 FreeBSD-base 381040 NFS client and server utilities (debugging symbols)
FreeBSD-ntp 15.1p2 FreeBSD-base 4761154 Network Time Protocol (NTP) daemon
FreeBSD-ntp-dbg 15.1p2 FreeBSD-base 2728656 Network Time Protocol (NTP) daemon (debugging symbols)
FreeBSD-nuageinit 15.1 FreeBSD-base 44831 cloud-init configuration support
FreeBSD-nvme-tools 15.1 FreeBSD-base 235090 NVMe utilities
FreeBSD-nvme-tools-dbg 15.1 FreeBSD-base 283848 NVMe utilities (debugging symbols)
FreeBSD-openssl 15.1 FreeBSD-base 1387605 OpenSSL Transport Layer Security (TLS) library
FreeBSD-openssl-dbg 15.1p4 FreeBSD-base 18825800 OpenSSL Transport Layer Security (TLS) library (debugging symbols)
FreeBSD-openssl-dbg-lib32 15.1p4 FreeBSD-base 12281700 OpenSSL Transport Layer Security (TLS) library (32-bit debugging symbols)
FreeBSD-openssl-dev 15.1p4 FreeBSD-base 36308608 OpenSSL Transport Layer Security (TLS) library (development files)
FreeBSD-openssl-dev-lib32 15.1p4 FreeBSD-base 18573861 OpenSSL Transport Layer Security (TLS) library (32-bit development files)
FreeBSD-openssl-lib 15.1p4 FreeBSD-base 7604712 OpenSSL Transport Layer Security (TLS) library (libraries)
FreeBSD-openssl-lib32 15.1p4 FreeBSD-base 5573012 OpenSSL Transport Layer Security (TLS) library (32-bit libraries)
FreeBSD-pam 15.1 FreeBSD-base 237985 Modular user authentication facility
FreeBSD-pam-dbg 15.1 FreeBSD-base 513224 Modular user authentication facility (debugging symbols)
FreeBSD-pam-dbg-lib32 15.1 FreeBSD-base 407092 Modular user authentication facility (32-bit debugging symbols)
FreeBSD-pam-dev 15.1 FreeBSD-base 1285994 Modular user authentication facility (development files)
FreeBSD-pam-dev-lib32 15.1 FreeBSD-base 770139 Modular user authentication facility (32-bit development files)
FreeBSD-pam-lib 15.1 FreeBSD-base 52616 Modular user authentication facility (libraries)
FreeBSD-pam-lib32 15.1 FreeBSD-base 198573 Modular user authentication facility (32-bit libraries)
FreeBSD-periodic 15.1 FreeBSD-base 63345 Run periodic system functions
FreeBSD-pf 15.1 FreeBSD-base 918137 OpenBSD packet filter
FreeBSD-pf-dbg 15.1 FreeBSD-base 911440 OpenBSD packet filter (debugging symbols)
FreeBSD-pf-dev 15.1 FreeBSD-base 45301 OpenBSD packet filter (development files)
FreeBSD-pkg-bootstrap 15.1 FreeBSD-base 593177 pkg(7) bootstrap utility
FreeBSD-pkg-bootstrap-dbg 15.1 FreeBSD-base 465128 pkg(7) bootstrap utility (debugging symbols)
FreeBSD-pmc 15.1p2 FreeBSD-base 8045457 Support for hardware performance counters
FreeBSD-pmc-dbg 15.1p2 FreeBSD-base 1470440 Support for hardware performance counters (debugging symbols)
FreeBSD-pmc-dbg-lib32 15.1 FreeBSD-base 790492 Support for hardware performance counters (32-bit debugging symbols)
FreeBSD-pmc-dev 15.1 FreeBSD-base 9311647 Support for hardware performance counters (development files)
FreeBSD-pmc-dev-lib32 15.1 FreeBSD-base 5320805 Support for hardware performance counters (32-bit development files)
FreeBSD-pmc-lib32 15.1 FreeBSD-base 4635992 Support for hardware performance counters (32-bit libraries)
FreeBSD-powerd 15.1 FreeBSD-base 23823 System power control utility
FreeBSD-powerd-dbg 15.1 FreeBSD-base 26488 System power control utility (debugging symbols)
FreeBSD-ppp 15.1p3 FreeBSD-base 593348 Point-to-Point Protocol (PPP) utilities
FreeBSD-ppp-dbg 15.1p3 FreeBSD-base 712992 Point-to-Point Protocol (PPP) utilities (debugging symbols)
FreeBSD-quotacheck 15.1 FreeBSD-base 25983 Filesystem quota consistency checker
FreeBSD-quotacheck-dbg 15.1 FreeBSD-base 30528 Filesystem quota consistency checker (debugging symbols)
FreeBSD-rc 15.1 FreeBSD-base 413554 rc(8) subsystem
FreeBSD-rc-dbg 15.1 FreeBSD-base 21144 rc(8) subsystem (debugging symbols)
FreeBSD-rcmds 15.1p4 FreeBSD-base 111125 BSD/SunOS remote status commands
FreeBSD-rcmds-dbg 15.1p4 FreeBSD-base 130968 BSD/SunOS remote status commands (debugging symbols)
FreeBSD-rdma 15.1 FreeBSD-base 211344 Remote Direct Memory Access (RDMA) and InfiniBand utilities
FreeBSD-rdma-dbg 15.1 FreeBSD-base 296640 Remote Direct Memory Access (RDMA) and InfiniBand utilities (debugging symbols)
FreeBSD-rescue 15.1p4 FreeBSD-base 20063693 Rescue system
FreeBSD-resolvconf 15.1 FreeBSD-base 57726 A framework for managing multiple DNS configurations
FreeBSD-rip 15.1 FreeBSD-base 192814 RIP routing protocol
FreeBSD-rip-dbg 15.1 FreeBSD-base 193848 RIP routing protocol (debugging symbols)
FreeBSD-runtime 15.1p4 FreeBSD-base 8493462 Core system
FreeBSD-runtime-dbg 15.1p4 FreeBSD-base 9881640 Core system (debugging symbols)
FreeBSD-runtime-dbg-lib32 15.1p4 FreeBSD-base 3325528 Core system (32-bit debugging symbols)
FreeBSD-runtime-dev 15.1p4 FreeBSD-base 7485714 Core system (development files)
FreeBSD-runtime-dev-lib32 15.1p4 FreeBSD-base 4410588 Core system (32-bit development files)
FreeBSD-runtime-lib32 15.1p4 FreeBSD-base 1439636 Core system (32-bit libraries)
FreeBSD-sendmail 15.1 FreeBSD-base 1861874 sendmail mail transport agent
FreeBSD-sendmail-dbg 15.1 FreeBSD-base 1091040 sendmail mail transport agent (debugging symbols)
FreeBSD-set-base 15.1 FreeBSD-base 0 Base system (metapackage)
FreeBSD-set-base-dbg 15.1 FreeBSD-base 0 Base system debug symbols (metapackage)
FreeBSD-set-devel 15.1 FreeBSD-base 0 Development tools (metapackage)
FreeBSD-set-devel-dbg 15.1 FreeBSD-base 0 Development tools debugging symbols (metapackage)
FreeBSD-set-kernels 15.1 FreeBSD-base 0 Base system kernels (metapackage)
FreeBSD-set-kernels-dbg 15.1 FreeBSD-base 0 Base system kernels debugging symbols (metapackage)
FreeBSD-set-lib32 15.1 FreeBSD-base 0 32-bit compatibility libraries (metapackage)
FreeBSD-set-lib32-dbg 15.1 FreeBSD-base 0 32-bit compatibility library debugging symbols (metapackage)
FreeBSD-set-minimal 15.1 FreeBSD-base 0 Basic multi-user system (metapackage)
FreeBSD-set-minimal-dbg 15.1 FreeBSD-base 0 Basic multi-user system debugging symbols (metapackage)
FreeBSD-set-optional 15.1 FreeBSD-base 0 Optional base system software (metapackage)
FreeBSD-set-optional-dbg 15.1 FreeBSD-base 0 Optional software debug symbols (metapackage)
FreeBSD-set-tests 15.1 FreeBSD-base 0 System test suite
FreeBSD-smbutils 15.1 FreeBSD-base 101756 SMB network filesystem utilities
FreeBSD-smbutils-dbg 15.1 FreeBSD-base 196392 SMB network filesystem utilities (debugging symbols)
FreeBSD-smbutils-dbg-lib32 15.1 FreeBSD-base 114988 SMB network filesystem utilities (32-bit debugging symbols)
FreeBSD-smbutils-dev 15.1 FreeBSD-base 255717 SMB network filesystem utilities (development files)
FreeBSD-smbutils-dev-lib32 15.1 FreeBSD-base 157785 SMB network filesystem utilities (32-bit development files)
FreeBSD-smbutils-lib32 15.1 FreeBSD-base 50288 SMB network filesystem utilities (32-bit libraries)
FreeBSD-sound 15.1p4 FreeBSD-base 1698798 Audio utilities
FreeBSD-sound-dbg 15.1p4 FreeBSD-base 277392 Audio utilities (debugging symbols)
FreeBSD-sound-dbg-lib32 15.1 FreeBSD-base 82220 Audio utilities (32-bit debugging symbols)
FreeBSD-sound-dev 15.1 FreeBSD-base 1606462 Audio utilities (development files)
FreeBSD-sound-dev-lib32 15.1 FreeBSD-base 1539334 Audio utilities (32-bit development files)
FreeBSD-sound-lib32 15.1 FreeBSD-base 1504444 Audio utilities (32-bit libraries)
FreeBSD-ssh 15.1p4 FreeBSD-base 3786753 OpenSSH Secure Shell client and server
FreeBSD-ssh-dbg 15.1p4 FreeBSD-base 4442032 OpenSSH Secure Shell client and server (debugging symbols)
FreeBSD-ssh-dbg-lib32 15.1 FreeBSD-base 1812424 OpenSSH Secure Shell client and server (32-bit debugging symbols)
FreeBSD-ssh-dev 15.1 FreeBSD-base 4234357 OpenSSH Secure Shell client and server (development files)
FreeBSD-ssh-dev-lib32 15.1 FreeBSD-base 2701937 OpenSSH Secure Shell client and server (32-bit development files)
FreeBSD-ssh-lib32 15.1 FreeBSD-base 1033200 OpenSSH Secure Shell client and server (32-bit libraries)
FreeBSD-syscons-data 15.1 FreeBSD-base 1385261 syscons(4) fonts and keymaps
FreeBSD-syslogd 15.1p4 FreeBSD-base 84366 System logging daemon
FreeBSD-syslogd-dbg 15.1p4 FreeBSD-base 74728 System logging daemon (debugging symbols)
FreeBSD-tcpd 15.1 FreeBSD-base 103097 TCP Wrappers access control facility
FreeBSD-tcpd-dbg 15.1 FreeBSD-base 140552 TCP Wrappers access control facility (debugging symbols)
FreeBSD-tcpd-dbg-lib32 15.1 FreeBSD-base 68224 TCP Wrappers access control facility (32-bit debugging symbols)
FreeBSD-tcpd-dev 15.1 FreeBSD-base 187627 TCP Wrappers access control facility (development files)
FreeBSD-tcpd-dev-lib32 15.1 FreeBSD-base 111780 TCP Wrappers access control facility (32-bit development files)
FreeBSD-tcpd-lib32 15.1 FreeBSD-base 31392 TCP Wrappers access control facility (32-bit libraries)
FreeBSD-telnet 15.1 FreeBSD-base 160218 TELNET client
FreeBSD-telnet-dbg 15.1 FreeBSD-base 128856 TELNET client (debugging symbols)
FreeBSD-tests 15.1p4 FreeBSD-base 109865923 Test suite
FreeBSD-tests-dbg 15.1p4 FreeBSD-base 88056112 Test suite (debugging symbols)
FreeBSD-toolchain 15.1p4 FreeBSD-base 1520458 Utilities for program development
FreeBSD-toolchain-dbg 15.1p4 FreeBSD-base 1688544 Utilities for program development (debugging symbols)
FreeBSD-toolchain-dev 15.1 FreeBSD-base 27513 Utilities for program development (development files)
FreeBSD-toolchain-dev-lib32 15.1 FreeBSD-base 4970 Utilities for program development (32-bit development files)
FreeBSD-ufs 15.1 FreeBSD-base 634325 UFS filesystem support
FreeBSD-ufs-dbg 15.1 FreeBSD-base 741288 UFS filesystem support (debugging symbols)
FreeBSD-ufs-dbg-lib32 15.1 FreeBSD-base 85628 UFS filesystem support (32-bit debugging symbols)
FreeBSD-ufs-dev 15.1 FreeBSD-base 208854 UFS filesystem support (development files)
FreeBSD-ufs-dev-lib32 15.1 FreeBSD-base 130691 UFS filesystem support (32-bit development files)
FreeBSD-ufs-lib 15.1 FreeBSD-base 51760 UFS filesystem support (libraries)
FreeBSD-ufs-lib32 15.1 FreeBSD-base 54932 UFS filesystem support (32-bit libraries)
FreeBSD-utilities 15.1p4 FreeBSD-base 51297734 Non-vital programs and libraries
FreeBSD-utilities-dbg 15.1p4 FreeBSD-base 28891808 Non-vital programs and libraries (debugging symbols)
FreeBSD-utilities-dbg-lib32 15.1p4 FreeBSD-base 8429304 Non-vital programs and libraries (32-bit debugging symbols)
FreeBSD-utilities-dev 15.1p4 FreeBSD-base 18580307 Non-vital programs and libraries (development files)
FreeBSD-utilities-dev-lib32 15.1p4 FreeBSD-base 5849787 Non-vital programs and libraries (32-bit development files)
FreeBSD-utilities-lib32 15.1p4 FreeBSD-base 2976920 Non-vital programs and libraries (32-bit libraries)
FreeBSD-vi 15.1 FreeBSD-base 793399 Text editor
FreeBSD-vi-dbg 15.1 FreeBSD-base 772880 Text editor (debugging symbols)
FreeBSD-vt-data 15.1 FreeBSD-base 1636329 vt(4) fonts and keymaps
FreeBSD-wpa 15.1 FreeBSD-base 1669163 IEEE Std 802.11 WPA Supplicant
FreeBSD-wpa-dbg 15.1 FreeBSD-base 2306032 IEEE Std 802.11 WPA Supplicant (debugging symbols)
FreeBSD-xz 15.1p4 FreeBSD-base 145361 LZMA2 data compression
FreeBSD-xz-dbg 15.1p4 FreeBSD-base 810512 LZMA2 data compression (debugging symbols)
FreeBSD-xz-dbg-lib32 15.1 FreeBSD-base 511860 LZMA2 data compression (32-bit debugging symbols)
FreeBSD-xz-dev 15.1 FreeBSD-base 1366359 LZMA2 data compression (development files)
FreeBSD-xz-dev-lib32 15.1 FreeBSD-base 746782 LZMA2 data compression (32-bit development files)
FreeBSD-xz-lib 15.1 FreeBSD-base 203192 LZMA2 data compression (libraries)
FreeBSD-xz-lib32 15.1 FreeBSD-base 190144 LZMA2 data compression (32-bit libraries)
FreeBSD-yp 15.1 FreeBSD-base 428311 Yellow Pages (YP) / Network Information Service (NIS)
FreeBSD-yp-dbg 15.1 FreeBSD-base 488536 Yellow Pages (YP) / Network Information Service (NIS) (debugging symbols)
FreeBSD-zfs 15.1 FreeBSD-base 1317718 ZFS filesystem support
FreeBSD-zfs-dbg 15.1p1 FreeBSD-base 15878048 ZFS filesystem support (debugging symbols)
FreeBSD-zfs-dbg-lib32 15.1p1 FreeBSD-base 10836392 ZFS filesystem support (32-bit debugging symbols)
FreeBSD-zfs-dev 15.1p1 FreeBSD-base 23403660 ZFS filesystem support (development files)
FreeBSD-zfs-dev-lib32 15.1p1 FreeBSD-base 13926879 ZFS filesystem support (32-bit development files)
FreeBSD-zfs-lib 15.1p1 FreeBSD-base 4824528 ZFS filesystem support (libraries)
FreeBSD-zfs-lib32 15.1p1 FreeBSD-base 4176488 ZFS filesystem support (32-bit libraries)
FreeBSD-zlib 15.1 FreeBSD-base 102728 DEFLATE (gzip) data compression library
FreeBSD-zlib-dbg 15.1 FreeBSD-base 214248 DEFLATE (gzip) data compression library (debugging symbols)
FreeBSD-zlib-dbg-lib32 15.1 FreeBSD-base 155256 DEFLATE (gzip) data compression library (32-bit debugging symbols)
FreeBSD-zlib-dev 15.1 FreeBSD-base 453783 DEFLATE (gzip) data compression library (development files)
FreeBSD-zlib-dev-lib32 15.1 FreeBSD-base 230399 DEFLATE (gzip) data compression library (32-bit development files)
FreeBSD-zlib-lib32 15.1 FreeBSD-base 91852 DEFLATE (gzip) data compression library (32-bit libraries)
FreeBSD-zoneinfo 15.1p4 FreeBSD-base 839686 Timezone database
FreeBSD-zstd 15.1 FreeBSD-base 186549 Fast, lossless compression algorithm
FreeBSD-zstd-dbg 15.1 FreeBSD-base 3715136 Fast, lossless compression algorithm (debugging symbols)
FreeBSD-zstd-dbg-lib32 15.1 FreeBSD-base 2964044 Fast, lossless compression algorithm (32-bit debugging symbols)
FreeBSD-zstd-dev 15.1 FreeBSD-base 3272809 Fast, lossless compression algorithm (development files)
FreeBSD-zstd-dev-lib32 15.1 FreeBSD-base 2351481 Fast, lossless compression algorithm (32-bit development files)
FreeBSD-zstd-lib 15.1 FreeBSD-base 699248 Fast, lossless compression algorithm (libraries)
FreeBSD-zstd-lib32 15.1 FreeBSD-base 713256 Fast, lossless compression algorithm (32-bit libraries)
expat 2.8.2 FreeBSD-ports 400466 XML 1.0 parser written in C
firstboot-pkg-upgrade 1.2 FreeBSD-ports 1757 Update the system using pkg when it first boots
gettext-runtime 1.0_1 FreeBSD-ports 2057233 GNU gettext runtime libraries and programs
glib 2.86.4,2 FreeBSD-ports 110072519 Some useful routines of C programming (current stable version)
indexinfo 0.3.1_1 FreeBSD-ports 11766 Utility to regenerate the GNU info page index
libffi 3.6.0 FreeBSD-ports 180639 Foreign Function Interface
libiconv 1.18_1 FreeBSD-ports 3657746 Character set conversion library
mpdecimal 4.0.1 FreeBSD-ports 747472 C/C++ arbitrary precision decimal floating point libraries
pcre2 10.47_1 FreeBSD-ports 8411385 Perl Compatible Regular Expressions library, version 2
pkg 2.7.5 FreeBSD-ports 27719861 Package manager
py312-packaging 26.2 FreeBSD-ports 1169815 Core utilities for Python packages
python312 3.12.14 FreeBSD-ports 229854416 Interpreted object-oriented programming language
qemu-guest-agent 11.0.2 FreeBSD-ports 31962444 QEMU CPU Emulator (guest agent)
readline 8.3.3 FreeBSD-ports 3239753 Library for editing command lines as they are typed
sudo 1.9.17p2_2 FreeBSD-ports 8429090 Allow others to run commands as root
+10
View File
@@ -0,0 +1,10 @@
expat-2.8.2 < needs updating (remote has 2.8.5)
firstboot-pkg-upgrade-1.2 < needs updating (remote has 1.4)
glib-2.86.4,2 < needs updating (remote has 2.88.3,2)
libffi-3.6.0 < needs updating (remote has 3.8.0)
pcre2-10.47_1 < needs updating (remote has 10.49)
pkg-2.7.5 < needs updating (remote has 2.8.4)
py312-packaging-26.2 < needs updating (remote has 26.3)
python312-3.12.14 < needs updating (remote has 3.12.14_1)
qemu-guest-agent-11.0.2 < needs updating (remote has 11.1.2)
readline-8.3.3 < needs updating (remote has 8.3.6)
+38
View File
@@ -0,0 +1,38 @@
/etc/rc.d/hostid
/etc/rc.d/growfs
/etc/rc.d/growfs_fstab
/etc/rc.d/hostid_save
/etc/rc.d/var_run
/etc/rc.d/kldxref
/etc/rc.d/devmatch
/etc/rc.d/nuageinit
/etc/rc.d/cleanvar
/etc/rc.d/ip6addrctl
/etc/rc.d/mixer
/etc/rc.d/rctl
/etc/rc.d/netif
/etc/rc.d/devd
/etc/rc.d/resolv
/etc/rc.d/os-release
/etc/rc.d/dmesg
/etc/rc.d/gptboot
/etc/rc.d/motd
/etc/rc.d/newsyslog
/etc/rc.d/virecover
/etc/rc.d/cleartmp
/etc/rc.d/nuageinit_post_net
/etc/rc.d/syslogd
/usr/local/etc/rc.d/firstboot_pkg_upgrade
/etc/rc.d/savecore
/etc/rc.d/utx
/usr/local/etc/rc.d/qemu-guest-agent
/etc/rc.d/nuageinit_user_data_script
/etc/rc.d/cron
/etc/rc.d/sshd
/etc/rc.d/bgfsck
---
DAEMON
FILESYSTEMS
LOGIN
NETWORKING
SERVERS
+32
View File
@@ -0,0 +1,32 @@
hostid /etc/rc.d/hostid: unknown directive 'status'.
growfs /etc/rc.d/growfs: unknown directive 'status'.
growfs_fstab /etc/rc.d/growfs_fstab: unknown directive 'status'.
hostid_save /etc/rc.d/hostid_save: unknown directive 'status'.
var_run /etc/rc.d/var_run: unknown directive 'status'.
kldxref /etc/rc.d/kldxref: unknown directive 'status'.
devmatch /etc/rc.d/devmatch: unknown directive 'status'.
nuageinit /etc/rc.d/nuageinit: unknown directive 'status'.
cleanvar /etc/rc.d/cleanvar: unknown directive 'status'.
ip6addrctl Prefix Prec Label Use
mixer /etc/rc.d/mixer: unknown directive 'status'.
rctl /etc/rc.d/rctl: unknown directive 'status'.
netif /etc/rc.d/netif: unknown directive 'status'.
devd devd is running as pid 771.
resolv /etc/rc.d/resolv: unknown directive 'status'.
os-release /etc/rc.d/os-release: unknown directive 'status'.
dmesg /etc/rc.d/dmesg: unknown directive 'status'.
gptboot /etc/rc.d/gptboot: unknown directive 'status'.
motd /etc/rc.d/motd: unknown directive 'status'.
newsyslog newsyslog is not running.
virecover /etc/rc.d/virecover: unknown directive 'status'.
cleartmp /etc/rc.d/cleartmp: unknown directive 'status'.
nuageinit_post_net /etc/rc.d/nuageinit_post_net: unknown directive 'status'.
syslogd eval: cannot open /var/run/syslog.pid: Permission denied
firstboot_pkg_upgrade /usr/local/etc/rc.d/firstboot_pkg_upgrade: unknown directive 'status'.
savecore /etc/rc.d/savecore: unknown directive 'status'.
utx /etc/rc.d/utx: unknown directive 'status'.
qemu-guest-agent qemu_guest_agent is not running.
nuageinit_user_data_script /etc/rc.d/nuageinit_user_data_script: unknown directive 'status'.
cron eval: cannot open /var/run/cron.pid: Permission denied
sshd sshd is running as pid 1282.
bgfsck /etc/rc.d/bgfsck: unknown directive 'status'.
+3
View File
@@ -0,0 +1,3 @@
python312-3.12.14
expat-2.8.2
rc=1
+27
View File
@@ -0,0 +1,27 @@
Updating FreeBSD-ports repository catalogue...
FreeBSD-ports repository is up to date.
Updating FreeBSD-ports-kmods repository catalogue...
FreeBSD-ports-kmods repository is up to date.
Updating FreeBSD-base repository catalogue...
FreeBSD-base repository is up to date.
All repositories are up to date.
Checking for upgrades (10 candidates): .......... done
Processing candidates (10 candidates): .......... done
The following 10 package(s) will be affected (of 0 checked):
Installed packages to be UPGRADED:
expat: 2.8.2 -> 2.8.5 [FreeBSD-ports]
firstboot-pkg-upgrade: 1.2 -> 1.4 [FreeBSD-ports]
glib: 2.86.4,2 -> 2.88.3,2 [FreeBSD-ports]
libffi: 3.6.0 -> 3.8.0 [FreeBSD-ports]
pcre2: 10.47_1 -> 10.49 [FreeBSD-ports]
pkg: 2.7.5 -> 2.8.4 [FreeBSD-ports]
py312-packaging: 26.2 -> 26.3 [FreeBSD-ports]
python312: 3.12.14 -> 3.12.14_1 [FreeBSD-ports]
qemu-guest-agent: 11.0.2 -> 11.1.2 [FreeBSD-ports]
readline: 8.3.3 -> 8.3.6 [FreeBSD-ports]
Number of packages to be upgraded: 10
The process will require 27 MiB more space.
70 MiB to be downloaded.
+32
View File
@@ -0,0 +1,32 @@
hostid /etc/rc.d/hostid: unknown directive 'status'.
growfs /etc/rc.d/growfs: unknown directive 'status'.
growfs_fstab /etc/rc.d/growfs_fstab: unknown directive 'status'.
hostid_save /etc/rc.d/hostid_save: unknown directive 'status'.
var_run /etc/rc.d/var_run: unknown directive 'status'.
kldxref /etc/rc.d/kldxref: unknown directive 'status'.
devmatch /etc/rc.d/devmatch: unknown directive 'status'.
nuageinit /etc/rc.d/nuageinit: unknown directive 'status'.
cleanvar /etc/rc.d/cleanvar: unknown directive 'status'.
ip6addrctl Prefix Prec Label Use
mixer /etc/rc.d/mixer: unknown directive 'status'.
rctl /etc/rc.d/rctl: unknown directive 'status'.
netif /etc/rc.d/netif: unknown directive 'status'.
devd devd is running as pid 771.
resolv /etc/rc.d/resolv: unknown directive 'status'.
os-release /etc/rc.d/os-release: unknown directive 'status'.
dmesg /etc/rc.d/dmesg: unknown directive 'status'.
gptboot /etc/rc.d/gptboot: unknown directive 'status'.
motd /etc/rc.d/motd: unknown directive 'status'.
newsyslog newsyslog is not running.
virecover /etc/rc.d/virecover: unknown directive 'status'.
cleartmp /etc/rc.d/cleartmp: unknown directive 'status'.
nuageinit_post_net /etc/rc.d/nuageinit_post_net: unknown directive 'status'.
syslogd syslogd is running as pid 1052.
firstboot_pkg_upgrade /usr/local/etc/rc.d/firstboot_pkg_upgrade: unknown directive 'status'.
savecore /etc/rc.d/savecore: unknown directive 'status'.
utx /etc/rc.d/utx: unknown directive 'status'.
qemu-guest-agent qemu_guest_agent is not running.
nuageinit_user_data_script /etc/rc.d/nuageinit_user_data_script: unknown directive 'status'.
cron cron is running as pid 1232.
sshd sshd is running as pid 1282.
bgfsck /etc/rc.d/bgfsck: unknown directive 'status'.
+6
View File
@@ -33,3 +33,9 @@ id
sudo fstat -n
fstat -n
netstat -an -f inet; netstat -an -f inet6
pkg_info -m
sudo rcctl ls on/started/failed
sudo pkg_add -u -n -v (pcre2 downgraded to 10.44)
pkg_info
for s in $(rcctl ls on); do if rcctl check $s >/dev/null 2>&1; then r=1; else r=0; fi; printf "%s\t%s\n" "$s" "$r"; done
sudo syspatch -l
+84
View File
@@ -0,0 +1,84 @@
argon2-20190702p0 C implementation of Argon2 - password hashing function
bash-5.3.9 GNU Bourne Again Shell
bash-completion-2.17.0 programmable completion functions for bash
bzip2-1.0.8p0 block-sorting file compressor, unencumbered
e2fsprogs-1.47.3 utilities to manipulate ext2 filesystems
gettext-runtime-1.0 GNU gettext runtime libraries and programs
glib2-2.86.5 general-purpose utility library
libb2-0.98.1v0 library providing BLAKE2b, BLAKE2s, BLAKE2bp, BLAKE2sp
libffi-3.5.2p0 Foreign Function Interface
libiconv-1.19 character set conversion library
libyaml-0.2.5 YAML 1.1 parser and emitter written in C
meson-1.10.2v0 next-generation build system
ninja-1.11.1p1v1 small build system with a focus on speed
pcre2-10.44 perl-compatible regular expression library, version 2
py3-MarkupSafe-3.0.3p0 implements an XML/HTML/XHTML markup safe string
py3-apipkg-3.0.2p1 namespace control and lazy-import mechanism for Python
py3-argon2-cffi-25.1.0 argon2 password hashing for Python
py3-argon2-cffi-bindings-25.1.0 argon2 password hashing for Python
py3-arrow-1.4.0p0 better dates and times for Python
py3-attrs-25.4.0 classes without boilerplate
py3-bcrypt-5.0.0p0 bcrypt blowfish password hashing for Python
py3-blinker-1.9.0p0 fast, simple object-to-object and broadcast signaling
py3-brotli-1.2.0 Python bindings for the Brotli compression library
py3-cachetools-7.0.5 extensible memoizing collections and decorators
py3-certifi-2026.1.4 TLS CA support for Python, patched to use /etc/ssl/cert.pem
py3-cffi-2.0.0p0 Foreign Function Interface for Python calling C code
py3-chardet-5.2.0v0 character encoding auto-detection in Python
py3-charset-normalizer-3.4.7 character set detector library
py3-colorama-0.4.6p1 print colored terminal text from Python apps
py3-configobj-5.0.9p0 config file reader and writer
py3-coverage-7.13.2 code coverage measurement for Python
py3-cparser-3.0 C parser in pure Python
py3-cryptography-46.0.7 cryptographic recipes and primitives for Python
py3-dateutil-2.9.0pl0p0 Python API for advanced date calculations
py3-distlib-0.4.0 distribution utilities
py3-execnet-2.1.2 rapid multi-Python deployment
py3-filelock-3.25.2 platform independent file lock
py3-fqdn-1.5.1p1 validates that domain names are acceptable to browsers
py3-idna-3.11 Python library to support the IDNA protocol
py3-iniconfig-2.3.0 brain-dead simple config-ini parsing
py3-isoduration-20.11.0p2 operations with ISO 8601 durations
py3-jinja2-3.1.6p0 fast, optionally sandboxed, Python template engine
py3-jsonpatch-1.33p2 library to apply JSON Patches according to RFC 6902
py3-jsonpointer-2.4p2 library to resolve JSON Pointers according to RFC 6901
py3-jsonschema-4.24.0 implementation of JSON Schema validation for Python
py3-jsonschema-specifications-2025.4.1 JSON schema meta-schemas and vocabularies
py3-jwt-2.10.1 JSON Web Token implementation in Python
py3-mock-5.1.0p0 python mocking and patching library for testing
py3-oauthlib-3.3.1 Python library for OAuth
py3-packaging-26.0 core utilities for Python packaging
py3-passlib-1.9.3p0 Python module providing a password hashing framework
py3-platformdirs-4.9.6 determine appropriate platform-specific directories
py3-pluggy-1.6.0p0 plugin and hook calling mechanisms for Python
py3-pygments-2.20.0 Python syntax highlighter
py3-pyproject_api-1.10.0 API to interact with pyproject.toml-based projects
py3-python-discovery-1.2.1p0 library for discovering Python interpreters
py3-referencing-0.37.0p0 JSON referencing in Python
py3-requests-2.33.1 elegant and simple HTTP library for Python
py3-responses-0.25.0p2 utility library for mocking out the `requests` Python
py3-rfc3339-validator-0.1.4p2 pure python RFC3339 validator
py3-rfc3986-validator-0.1.1p2 pure python RFC3986 validator
py3-rpds-py-0.30.0p0 Python bindings for Rust's persistent data structures (rpds)
py3-scrypt-0.9.4 support for the scrypt key derivation function
py3-serial-3.5p0 serial interface class for Python
py3-six-1.17.0p1 Python 2 and 3 compatibility library
py3-test-9.0.2p0 cross-project testing tool for Python
py3-test-cov-7.1.0 pytest plugin for measuring coverage
py3-test-mock-3.15.1 thin wrapper around mock package for easier use with pytest
py3-test-xdist-3.8.0 py.test xdist plugin for distributed testing
py3-tox-4.47.0 virtualenv-based automation of test activities
py3-types-python-dateutil-2.9.0.20260305 typing stubs for Python dateutil
py3-tzdata-2026.3 IANA timezone data
py3-uri-template-1.3.0p1 RFC 6570 URI template processor
py3-urllib3-1.26.20p0 HTTP library for Python
py3-virtualenv-21.2.3 virtual Python environment builder
py3-webcolors-25.10.0p0 library for working with HTML color formats
py3-yaml-6.0.2p1 YAML parser and emitter in Python
python-3.13.15p0 interpreted object-oriented programming language
qemu-ga-10.2.1 QEMU guest agent
quirks-7.194 exceptions to pkg_add rules
sqlite3-3.51.3 embedded SQL implementation
sudo-1.9.17.2p1 execute a command as another user
updatedb-0p0 pkg_add speed up cache
xz-5.8.4 library and tools for XZ and LZMA compressed files
+25
View File
@@ -0,0 +1,25 @@
bash-5.3.9 GNU Bourne Again Shell
bash-completion-2.17.0 programmable completion functions for bash
e2fsprogs-1.47.3 utilities to manipulate ext2 filesystems
meson-1.10.2v0 next-generation build system
pcre2-10.44 perl-compatible regular expression library, version 2
py3-configobj-5.0.9p0 config file reader and writer
py3-jinja2-3.1.6p0 fast, optionally sandboxed, Python template engine
py3-jsonpatch-1.33p2 library to apply JSON Patches according to RFC 6902
py3-jsonschema-4.24.0 implementation of JSON Schema validation for Python
py3-oauthlib-3.3.1 Python library for OAuth
py3-packaging-26.0 core utilities for Python packaging
py3-passlib-1.9.3p0 Python module providing a password hashing framework
py3-requests-2.33.1 elegant and simple HTTP library for Python
py3-responses-0.25.0p2 utility library for mocking out the `requests` Python
py3-serial-3.5p0 serial interface class for Python
py3-test-9.0.2p0 cross-project testing tool for Python
py3-test-cov-7.1.0 pytest plugin for measuring coverage
py3-test-mock-3.15.1 thin wrapper around mock package for easier use with pytest
py3-test-xdist-3.8.0 py.test xdist plugin for distributed testing
py3-tox-4.47.0 virtualenv-based automation of test activities
py3-yaml-6.0.2p1 YAML parser and emitter in Python
python-3.13.15p0 interpreted object-oriented programming language
qemu-ga-10.2.1 QEMU guest agent
quirks-7.194 exceptions to pkg_add rules
sudo-1.9.17.2p1 execute a command as another user
+18
View File
@@ -0,0 +1,18 @@
check_quotas 0
cloudconfig 0
cloudfinal 0
cloudinit 0
cloudinitlocal 0
cron 1
dhcpleased 1
library_aslr 0
ntpd 1
pf 0
pflogd 1
qemu_ga 0
resolvd 1
slaacd 1
smtpd 1
sndiod 1
sshd 1
syslogd 1
+214
View File
@@ -0,0 +1,214 @@
Update candidates: quirks-7.194 -> quirks-7.194
quirks-7.194->7.194 (processing)(pretending)
Update candidates: updatedb-0p0 -> updatedb-0p0
quirks-7.194:updatedb-0p0->0p0 (processing)(pretending)
quirks-7.194->7.194 (processing)(pretending)
quirks-7.194 signed on 2026-10-01T16:58:35Z
Update candidates: argon2-20190702p0 -> argon2-20190702p0
argon2-20190702p0->20190702p0 (processing)(pretending)
Update candidates: bash-5.3.9 -> bash-5.3.9
bash-5.3.9->5.3.9 (processing)(pretending)
Update candidates: gettext-runtime-1.0 -> gettext-runtime-1.0
bash-5.3.9:gettext-runtime-1.0->1.0 (processing)(pretending)
Update candidates: libiconv-1.19 -> libiconv-1.19
bash-5.3.9:libiconv-1.19->1.19 (processing)(pretending)
bash-5.3.9:gettext-runtime-1.0->1.0 (processing)(pretending)
bash-5.3.9->5.3.9 (processing)(pretending)
Update candidates: bash-completion-2.17.0 -> bash-completion-2.17.0
bash-completion-2.17.0->2.17.0 (processing)(pretending)
Update candidates: bzip2-1.0.8p0 -> bzip2-1.0.8p0
bzip2-1.0.8p0->1.0.8p0 (processing)(pretending)
Update candidates: e2fsprogs-1.47.3 -> e2fsprogs-1.47.3
e2fsprogs-1.47.3->1.47.3 (processing)(pretending)
Update candidates: glib2-2.86.5 -> glib2-2.86.5
glib2-2.86.5->2.86.5 (processing)(pretending)
Update candidates: pcre2-10.44 -> pcre2-10.48
glib2-2.86.5:pcre2-10.44->10.48 (processing)(pretending)
glib2-2.86.5:.libs-pcre2-10.48+pcre2-10.44->pcre2-10.48 (processing)(pretending)
glib2-2.86.5:pcre2-10.44 (hashing)(pretending)
glib2-2.86.5:.libs-pcre2-10.48 (hashing)(pretending)
glib2-2.86.5:pcre2-10.48 (tieing)(pretending)
glib2-2.86.5:pcre2-10.48 (extracting)(pretending)
glib2-2.86.5:pcre2-10.48 (skipping)(pretending)
glib2-2.86.5:pcre2-10.44 (deleting)(pretending)
Removing manpages in /usr/local/man: /usr/local/man/man1/pcre2-config.1 /usr/local/man/man1/pcre2grep.1 /usr/local/man/man1/pcre2test.1 /usr/local/man/man3/pcre2.3 /usr/local/man/man3/pcre2_callout_enumerate.3 /usr/local/man/man3/pcre2_code_copy.3 /usr/local/man/man3/pcre2_code_copy_with_tables.3 /usr/local/man/man3/pcre2_code_free.3 /usr/local/man/man3/pcre2_compile.3 /usr/local/man/man3/pcre2_compile_context_copy.3 /usr/local/man/man3/pcre2_compile_context_create.3 /usr/local/man/man3/pcre2_compile_context_free.3 /usr/local/man/man3/pcre2_config.3 /usr/local/man/man3/pcre2_convert_context_copy.3 /usr/local/man/man3/pcre2_convert_context_create.3 /usr/local/man/man3/pcre2_convert_context_free.3 /usr/local/man/man3/pcre2_converted_pattern_free.3 /usr/local/man/man3/pcre2_dfa_match.3 /usr/local/man/man3/pcre2_general_context_copy.3 /usr/local/man/man3/pcre2_general_context_create.3 /usr/local/man/man3/pcre2_general_context_free.3 /usr/local/man/man3/pcre2_get_error_message.3 /usr/local/man/man3/pcre2_get_mark.3 /usr/local/man/man3/pcre2_get_match_data_heapframes_size.3 /usr/local/man/man3/pcre2_get_match_data_size.3 /usr/local/man/man3/pcre2_get_ovector_count.3 /usr/local/man/man3/pcre2_get_ovector_pointer.3 /usr/local/man/man3/pcre2_get_startchar.3 /usr/local/man/man3/pcre2_jit_compile.3 /usr/local/man/man3/pcre2_jit_free_unused_memory.3 /usr/local/man/man3/pcre2_jit_match.3 /usr/local/man/man3/pcre2_jit_stack_assign.3 /usr/local/man/man3/pcre2_jit_stack_create.3 /usr/local/man/man3/pcre2_jit_stack_free.3 /usr/local/man/man3/pcre2_maketables.3 /usr/local/man/man3/pcre2_maketables_free.3 /usr/local/man/man3/pcre2_match.3 /usr/local/man/man3/pcre2_match_context_copy.3 /usr/local/man/man3/pcre2_match_context_create.3 /usr/local/man/man3/pcre2_match_context_free.3 /usr/local/man/man3/pcre2_match_data_create.3 /usr/local/man/man3/pcre2_match_data_create_from_pattern.3 /usr/local/man/man3/pcre2_match_data_free.3 /usr/local/man/man3/pcre2_pattern_convert.3 /usr/local/man/man3/pcre2_pattern_info.3 /usr/local/man/man3/pcre2_serialize_decode.3 /usr/local/man/man3/pcre2_serialize_encode.3 /usr/local/man/man3/pcre2_serialize_free.3 /usr/local/man/man3/pcre2_serialize_get_number_of_codes.3 /usr/local/man/man3/pcre2_set_bsr.3 /usr/local/man/man3/pcre2_set_callout.3 /usr/local/man/man3/pcre2_set_character_tables.3 /usr/local/man/man3/pcre2_set_compile_extra_options.3 /usr/local/man/man3/pcre2_set_compile_recursion_guard.3 /usr/local/man/man3/pcre2_set_depth_limit.3 /usr/local/man/man3/pcre2_set_glob_escape.3 /usr/local/man/man3/pcre2_set_glob_separator.3 /usr/local/man/man3/pcre2_set_heap_limit.3 /usr/local/man/man3/pcre2_set_match_limit.3 /usr/local/man/man3/pcre2_set_max_pattern_compiled_length.3 /usr/local/man/man3/pcre2_set_max_pattern_length.3 /usr/local/man/man3/pcre2_set_max_varlookbehind.3 /usr/local/man/man3/pcre2_set_newline.3 /usr/local/man/man3/pcre2_set_offset_limit.3 /usr/local/man/man3/pcre2_set_parens_nest_limit.3 /usr/local/man/man3/pcre2_set_recursion_limit.3 /usr/local/man/man3/pcre2_set_recursion_memory_management.3 /usr/local/man/man3/pcre2_set_substitute_callout.3 /usr/local/man/man3/pcre2_substitute.3 /usr/local/man/man3/pcre2_substring_copy_byname.3 /usr/local/man/man3/pcre2_substring_copy_bynumber.3 /usr/local/man/man3/pcre2_substring_free.3 /usr/local/man/man3/pcre2_substring_get_byname.3 /usr/local/man/man3/pcre2_substring_get_bynumber.3 /usr/local/man/man3/pcre2_substring_length_byname.3 /usr/local/man/man3/pcre2_substring_length_bynumber.3 /usr/local/man/man3/pcre2_substring_list_free.3 /usr/local/man/man3/pcre2_substring_list_get.3 /usr/local/man/man3/pcre2_substring_nametable_scan.3 /usr/local/man/man3/pcre2_substring_number_from_name.3 /usr/local/man/man3/pcre2api.3 /usr/local/man/man3/pcre2build.3 /usr/local/man/man3/pcre2callout.3 /usr/local/man/man3/pcre2compat.3 /usr/local/man/man3/pcre2convert.3 /usr/local/man/man3/pcre2demo.3 /usr/local/man/man3/pcre2jit.3 /usr/local/man/man3/pcre2limits.3 /usr/local/man/man3/pcre2matching.3 /usr/local/man/man3/pcre2partial.3 /usr/local/man/man3/pcre2pattern.3 /usr/local/man/man3/pcre2perform.3 /usr/local/man/man3/pcre2posix.3 /usr/local/man/man3/pcre2sample.3 /usr/local/man/man3/pcre2serialize.3 /usr/local/man/man3/pcre2syntax.3 /usr/local/man/man3/pcre2unicode.3
glib2-2.86.5:.libs-pcre2-10.48 (deleting)(pretending)
glib2-2.86.5:pcre2-10.48 (installing)(pretending)
Adding glib2-2.86.5:.libs-pcre2-10.48+pcre2-10.44->pcre2-10.48(pretending)
Update candidates: python-3.13.15p0 -> python-3.13.15p0
glib2-2.86.5:python-3.13.15p0->3.13.15p0 (processing)(pretending)
Update candidates: xz-5.8.4 -> xz-5.8.4
glib2-2.86.5:xz-5.8.4->5.8.4 (processing)(pretending)
Update candidates: sqlite3-3.51.3 -> sqlite3-3.51.3
glib2-2.86.5:sqlite3-3.51.3->3.51.3 (processing)(pretending)
Update candidates: libb2-0.98.1v0 -> libb2-0.98.1v0
glib2-2.86.5:libb2-0.98.1v0->0.98.1v0 (processing)(pretending)
Update candidates: libffi-3.5.2p0 -> libffi-3.5.2p0
glib2-2.86.5:libffi-3.5.2p0->3.5.2p0 (processing)(pretending)
glib2-2.86.5:python-3.13.15p0->3.13.15p0 (processing)(pretending)
Update candidates: py3-packaging-26.0 -> py3-packaging-26.0
glib2-2.86.5:py3-packaging-26.0->26.0 (processing)(pretending)
glib2-2.86.5->2.86.5 (processing)(pretending)
Update candidates: libyaml-0.2.5 -> libyaml-0.2.5
libyaml-0.2.5->0.2.5 (processing)(pretending)
Update candidates: meson-1.10.2v0 -> meson-1.10.2v0
meson-1.10.2v0->1.10.2v0 (processing)(pretending)
Update candidates: ninja-1.11.1p1v1 -> ninja-1.11.1p1v1
meson-1.10.2v0:ninja-1.11.1p1v1->1.11.1p1v1 (processing)(pretending)
meson-1.10.2v0->1.10.2v0 (processing)(pretending)
Update candidates: py3-MarkupSafe-3.0.3p0 -> py3-MarkupSafe-3.0.3p0
py3-MarkupSafe-3.0.3p0->3.0.3p0 (processing)(pretending)
Update candidates: py3-apipkg-3.0.2p1 -> py3-apipkg-3.0.2p1
py3-apipkg-3.0.2p1->3.0.2p1 (processing)(pretending)
Update candidates: py3-argon2-cffi-25.1.0 -> py3-argon2-cffi-25.1.0
py3-argon2-cffi-25.1.0->25.1.0 (processing)(pretending)
Update candidates: py3-argon2-cffi-bindings-25.1.0 -> py3-argon2-cffi-bindings-25.1.0
py3-argon2-cffi-25.1.0:py3-argon2-cffi-bindings-25.1.0->25.1.0 (processing)(pretending)
Update candidates: py3-cffi-2.0.0p0 -> py3-cffi-2.0.0p0
py3-argon2-cffi-25.1.0:py3-cffi-2.0.0p0->2.0.0p0 (processing)(pretending)
Update candidates: py3-cparser-3.0 -> py3-cparser-3.0
py3-argon2-cffi-25.1.0:py3-cparser-3.0->3.0 (processing)(pretending)
py3-argon2-cffi-25.1.0:py3-cffi-2.0.0p0->2.0.0p0 (processing)(pretending)
py3-argon2-cffi-25.1.0:py3-argon2-cffi-bindings-25.1.0->25.1.0 (processing)(pretending)
py3-argon2-cffi-25.1.0->25.1.0 (processing)(pretending)
Update candidates: py3-arrow-1.4.0p0 -> py3-arrow-1.4.0p0
py3-arrow-1.4.0p0->1.4.0p0 (processing)(pretending)
Update candidates: py3-types-python-dateutil-2.9.0.20260305 -> py3-types-python-dateutil-2.9.0.20260305
py3-arrow-1.4.0p0:py3-types-python-dateutil-2.9.0.20260305->2.9.0.20260305 (processing)(pretending)
Update candidates: py3-tzdata-2026.3 -> py3-tzdata-2026.4
py3-arrow-1.4.0p0:py3-tzdata-2026.3->2026.4 (processing)(pretending)
py3-arrow-1.4.0p0:py3-tzdata-2026.3 (hashing)(pretending)
py3-arrow-1.4.0p0:py3-tzdata-2026.4 (tieing)(pretending)
py3-arrow-1.4.0p0:py3-tzdata-2026.4 (extracting)(pretending)
py3-arrow-1.4.0p0:py3-tzdata-2026.4 (skipping)(pretending)
py3-arrow-1.4.0p0:py3-tzdata-2026.3 (deleting)(pretending)
py3-arrow-1.4.0p0:py3-tzdata-2026.4 (installing)(pretending)
Adding py3-arrow-1.4.0p0:py3-tzdata-2026.3->2026.4(pretending)
Update candidates: py3-dateutil-2.9.0pl0p0 -> py3-dateutil-2.9.0pl0p0
py3-arrow-1.4.0p0:py3-dateutil-2.9.0pl0p0->2.9.0pl0p0 (processing)(pretending)
Update candidates: py3-six-1.17.0p1 -> py3-six-1.17.0p1
py3-arrow-1.4.0p0:py3-six-1.17.0p1->1.17.0p1 (processing)(pretending)
py3-arrow-1.4.0p0:py3-dateutil-2.9.0pl0p0->2.9.0pl0p0 (processing)(pretending)
py3-arrow-1.4.0p0->1.4.0p0 (processing)(pretending)
Update candidates: py3-attrs-25.4.0 -> py3-attrs-25.4.0
py3-attrs-25.4.0->25.4.0 (processing)(pretending)
Update candidates: py3-bcrypt-5.0.0p0 -> py3-bcrypt-5.0.0p0
py3-bcrypt-5.0.0p0->5.0.0p0 (processing)(pretending)
Update candidates: py3-blinker-1.9.0p0 -> py3-blinker-1.9.0p0
py3-blinker-1.9.0p0->1.9.0p0 (processing)(pretending)
Update candidates: py3-brotli-1.2.0 -> py3-brotli-1.2.0
py3-brotli-1.2.0->1.2.0 (processing)(pretending)
Update candidates: py3-cachetools-7.0.5 -> py3-cachetools-7.0.5
py3-cachetools-7.0.5->7.0.5 (processing)(pretending)
Update candidates: py3-certifi-2026.1.4 -> py3-certifi-2026.1.4
py3-certifi-2026.1.4->2026.1.4 (processing)(pretending)
Update candidates: py3-chardet-5.2.0v0 -> py3-chardet-5.2.0v0
py3-chardet-5.2.0v0->5.2.0v0 (processing)(pretending)
Update candidates: py3-charset-normalizer-3.4.7 -> py3-charset-normalizer-3.4.7
py3-charset-normalizer-3.4.7->3.4.7 (processing)(pretending)
Update candidates: py3-colorama-0.4.6p1 -> py3-colorama-0.4.6p1
py3-colorama-0.4.6p1->0.4.6p1 (processing)(pretending)
Update candidates: py3-configobj-5.0.9p0 -> py3-configobj-5.0.9p0
py3-configobj-5.0.9p0->5.0.9p0 (processing)(pretending)
Update candidates: py3-coverage-7.13.2 -> py3-coverage-7.13.2
py3-coverage-7.13.2->7.13.2 (processing)(pretending)
Update candidates: py3-cryptography-46.0.7 -> py3-cryptography-46.0.7
py3-cryptography-46.0.7->46.0.7 (processing)(pretending)
Update candidates: py3-distlib-0.4.0 -> py3-distlib-0.4.0
py3-distlib-0.4.0->0.4.0 (processing)(pretending)
Update candidates: py3-execnet-2.1.2 -> py3-execnet-2.1.2
py3-execnet-2.1.2->2.1.2 (processing)(pretending)
Update candidates: py3-filelock-3.25.2 -> py3-filelock-3.25.2
py3-filelock-3.25.2->3.25.2 (processing)(pretending)
Update candidates: py3-fqdn-1.5.1p1 -> py3-fqdn-1.5.1p1
py3-fqdn-1.5.1p1->1.5.1p1 (processing)(pretending)
Update candidates: py3-idna-3.11 -> py3-idna-3.11
py3-idna-3.11->3.11 (processing)(pretending)
Update candidates: py3-iniconfig-2.3.0 -> py3-iniconfig-2.3.0
py3-iniconfig-2.3.0->2.3.0 (processing)(pretending)
Update candidates: py3-isoduration-20.11.0p2 -> py3-isoduration-20.11.0p2
py3-isoduration-20.11.0p2->20.11.0p2 (processing)(pretending)
Update candidates: py3-jinja2-3.1.6p0 -> py3-jinja2-3.1.6p0
py3-jinja2-3.1.6p0->3.1.6p0 (processing)(pretending)
Update candidates: py3-jsonpatch-1.33p2 -> py3-jsonpatch-1.33p2
py3-jsonpatch-1.33p2->1.33p2 (processing)(pretending)
Update candidates: py3-jsonpointer-2.4p2 -> py3-jsonpointer-2.4p2
py3-jsonpatch-1.33p2:py3-jsonpointer-2.4p2->2.4p2 (processing)(pretending)
py3-jsonpatch-1.33p2->1.33p2 (processing)(pretending)
Update candidates: py3-jsonschema-4.24.0 -> py3-jsonschema-4.24.0
py3-jsonschema-4.24.0->4.24.0 (processing)(pretending)
Update candidates: py3-uri-template-1.3.0p1 -> py3-uri-template-1.3.0p1
py3-jsonschema-4.24.0:py3-uri-template-1.3.0p1->1.3.0p1 (processing)(pretending)
Update candidates: py3-rfc3339-validator-0.1.4p2 -> py3-rfc3339-validator-0.1.4p2
py3-jsonschema-4.24.0:py3-rfc3339-validator-0.1.4p2->0.1.4p2 (processing)(pretending)
Update candidates: py3-rfc3986-validator-0.1.1p2 -> py3-rfc3986-validator-0.1.1p2
py3-jsonschema-4.24.0:py3-rfc3986-validator-0.1.1p2->0.1.1p2 (processing)(pretending)
Update candidates: py3-rpds-py-0.30.0p0 -> py3-rpds-py-0.30.0p0
py3-jsonschema-4.24.0:py3-rpds-py-0.30.0p0->0.30.0p0 (processing)(pretending)
Update candidates: py3-webcolors-25.10.0p0 -> py3-webcolors-25.10.0p0
py3-jsonschema-4.24.0:py3-webcolors-25.10.0p0->25.10.0p0 (processing)(pretending)
Update candidates: py3-referencing-0.37.0p0 -> py3-referencing-0.37.0p0
py3-jsonschema-4.24.0:py3-referencing-0.37.0p0->0.37.0p0 (processing)(pretending)
Update candidates: py3-jsonschema-specifications-2025.4.1 -> py3-jsonschema-specifications-2025.4.1
py3-jsonschema-4.24.0:py3-jsonschema-specifications-2025.4.1->2025.4.1 (processing)(pretending)
py3-jsonschema-4.24.0->4.24.0 (processing)(pretending)
Update candidates: py3-jwt-2.10.1 -> py3-jwt-2.10.1
py3-jwt-2.10.1->2.10.1 (processing)(pretending)
Update candidates: py3-mock-5.1.0p0 -> py3-mock-5.1.0p0
py3-mock-5.1.0p0->5.1.0p0 (processing)(pretending)
Update candidates: py3-oauthlib-3.3.1 -> py3-oauthlib-3.3.1
py3-oauthlib-3.3.1->3.3.1 (processing)(pretending)
Update candidates: py3-passlib-1.9.3p0 -> py3-passlib-1.9.3p0
py3-passlib-1.9.3p0->1.9.3p0 (processing)(pretending)
Update candidates: py3-scrypt-0.9.4 -> py3-scrypt-0.9.4
py3-passlib-1.9.3p0:py3-scrypt-0.9.4->0.9.4 (processing)(pretending)
py3-passlib-1.9.3p0->1.9.3p0 (processing)(pretending)
Update candidates: py3-platformdirs-4.9.6 -> py3-platformdirs-4.9.6
py3-platformdirs-4.9.6->4.9.6 (processing)(pretending)
Update candidates: py3-pluggy-1.6.0p0 -> py3-pluggy-1.6.0p0
py3-pluggy-1.6.0p0->1.6.0p0 (processing)(pretending)
Update candidates: py3-pygments-2.20.0 -> py3-pygments-2.20.0
py3-pygments-2.20.0->2.20.0 (processing)(pretending)
Update candidates: py3-pyproject_api-1.10.0 -> py3-pyproject_api-1.10.0
py3-pyproject_api-1.10.0->1.10.0 (processing)(pretending)
Update candidates: py3-python-discovery-1.2.1p0 -> py3-python-discovery-1.2.1p0
py3-python-discovery-1.2.1p0->1.2.1p0 (processing)(pretending)
py3-python-discovery-1.2.1p0 (hashing)(pretending)
py3-python-discovery-1.2.1p0 (tieing)(pretending)
py3-python-discovery-1.2.1p0 (extracting)(pretending)
py3-python-discovery-1.2.1p0 (skipping)(pretending)
py3-python-discovery-1.2.1p0 (deleting)(pretending)
py3-python-discovery-1.2.1p0 (installing)(pretending)
Adding py3-python-discovery-1.2.1p0->1.2.1p0(pretending)
Update candidates: py3-requests-2.33.1 -> py3-requests-2.33.1
py3-requests-2.33.1->2.33.1 (processing)(pretending)
Update candidates: py3-urllib3-1.26.20p0 -> py3-urllib3-1.26.20p0
py3-requests-2.33.1:py3-urllib3-1.26.20p0->1.26.20p0 (processing)(pretending)
py3-requests-2.33.1->2.33.1 (processing)(pretending)
Update candidates: py3-responses-0.25.0p2 -> py3-responses-0.25.0p2
py3-responses-0.25.0p2->0.25.0p2 (processing)(pretending)
Update candidates: py3-yaml-6.0.2p1 -> py3-yaml-6.0.2p1
py3-responses-0.25.0p2:py3-yaml-6.0.2p1->6.0.2p1 (processing)(pretending)
py3-responses-0.25.0p2->0.25.0p2 (processing)(pretending)
Update candidates: py3-serial-3.5p0 -> py3-serial-3.5p0
py3-serial-3.5p0->3.5p0 (processing)(pretending)
Update candidates: py3-test-9.0.2p0 -> py3-test-9.0.2p0
py3-test-9.0.2p0->9.0.2p0 (processing)(pretending)
Update candidates: py3-test-cov-7.1.0 -> py3-test-cov-7.1.0
py3-test-cov-7.1.0->7.1.0 (processing)(pretending)
Update candidates: py3-test-mock-3.15.1 -> py3-test-mock-3.15.1
py3-test-mock-3.15.1->3.15.1 (processing)(pretending)
Update candidates: py3-test-xdist-3.8.0 -> py3-test-xdist-3.8.0
py3-test-xdist-3.8.0->3.8.0 (processing)(pretending)
Update candidates: py3-tox-4.47.0 -> py3-tox-4.47.0
py3-tox-4.47.0->4.47.0 (processing)(pretending)
Update candidates: py3-virtualenv-21.2.3 -> py3-virtualenv-21.2.3
py3-tox-4.47.0:py3-virtualenv-21.2.3->21.2.3 (processing)(pretending)
py3-tox-4.47.0->4.47.0 (processing)(pretending)
Update candidates: qemu-ga-10.2.1 -> qemu-ga-10.2.1
qemu-ga-10.2.1->10.2.1 (processing)(pretending)
Update candidates: sudo-1.9.17.2p1 -> sudo-1.9.17.2p1
sudo-1.9.17.2p1->1.9.17.2p1 (processing)(pretending)
Update candidates: updatedb-0p0 -> updatedb-0p0
updatedb-0p0->0p0 (processing)(pretending)
Merging manpages in /usr/local/man: /usr/local/man/man1/pcre2-config.1 /usr/local/man/man1/pcre2grep.1 /usr/local/man/man1/pcre2test.1 /usr/local/man/man3/pcre2.3 /usr/local/man/man3/pcre2_callout_enumerate.3 /usr/local/man/man3/pcre2_code_copy.3 /usr/local/man/man3/pcre2_code_copy_with_tables.3 /usr/local/man/man3/pcre2_code_free.3 /usr/local/man/man3/pcre2_compile.3 /usr/local/man/man3/pcre2_compile_context_copy.3 /usr/local/man/man3/pcre2_compile_context_create.3 /usr/local/man/man3/pcre2_compile_context_free.3 /usr/local/man/man3/pcre2_config.3 /usr/local/man/man3/pcre2_convert_context_copy.3 /usr/local/man/man3/pcre2_convert_context_create.3 /usr/local/man/man3/pcre2_convert_context_free.3 /usr/local/man/man3/pcre2_converted_pattern_free.3 /usr/local/man/man3/pcre2_dfa_match.3 /usr/local/man/man3/pcre2_general_context_copy.3 /usr/local/man/man3/pcre2_general_context_create.3 /usr/local/man/man3/pcre2_general_context_free.3 /usr/local/man/man3/pcre2_get_error_message.3 /usr/local/man/man3/pcre2_get_mark.3 /usr/local/man/man3/pcre2_get_match_data_heapframes_size.3 /usr/local/man/man3/pcre2_get_match_data_size.3 /usr/local/man/man3/pcre2_get_ovector_count.3 /usr/local/man/man3/pcre2_get_ovector_pointer.3 /usr/local/man/man3/pcre2_get_startchar.3 /usr/local/man/man3/pcre2_jit_compile.3 /usr/local/man/man3/pcre2_jit_free_unused_memory.3 /usr/local/man/man3/pcre2_jit_match.3 /usr/local/man/man3/pcre2_jit_stack_assign.3 /usr/local/man/man3/pcre2_jit_stack_create.3 /usr/local/man/man3/pcre2_jit_stack_free.3 /usr/local/man/man3/pcre2_maketables.3 /usr/local/man/man3/pcre2_maketables_free.3 /usr/local/man/man3/pcre2_match.3 /usr/local/man/man3/pcre2_match_context_copy.3 /usr/local/man/man3/pcre2_match_context_create.3 /usr/local/man/man3/pcre2_match_context_free.3 /usr/local/man/man3/pcre2_match_data_create.3 /usr/local/man/man3/pcre2_match_data_create_from_pattern.3 /usr/local/man/man3/pcre2_match_data_free.3 /usr/local/man/man3/pcre2_next_match.3 /usr/local/man/man3/pcre2_pattern_convert.3 /usr/local/man/man3/pcre2_pattern_info.3 /usr/local/man/man3/pcre2_serialize_decode.3 /usr/local/man/man3/pcre2_serialize_encode.3 /usr/local/man/man3/pcre2_serialize_free.3 /usr/local/man/man3/pcre2_serialize_get_number_of_codes.3 /usr/local/man/man3/pcre2_set_bsr.3 /usr/local/man/man3/pcre2_set_callout.3 /usr/local/man/man3/pcre2_set_character_tables.3 /usr/local/man/man3/pcre2_set_compile_extra_options.3 /usr/local/man/man3/pcre2_set_compile_recursion_guard.3 /usr/local/man/man3/pcre2_set_depth_limit.3 /usr/local/man/man3/pcre2_set_glob_escape.3 /usr/local/man/man3/pcre2_set_glob_separator.3 /usr/local/man/man3/pcre2_set_heap_limit.3 /usr/local/man/man3/pcre2_set_match_limit.3 /usr/local/man/man3/pcre2_set_max_pattern_compiled_length.3 /usr/local/man/man3/pcre2_set_max_pattern_length.3 /usr/local/man/man3/pcre2_set_max_varlookbehind.3 /usr/local/man/man3/pcre2_set_newline.3 /usr/local/man/man3/pcre2_set_offset_limit.3 /usr/local/man/man3/pcre2_set_optimize.3 /usr/local/man/man3/pcre2_set_parens_nest_limit.3 /usr/local/man/man3/pcre2_set_recursion_limit.3 /usr/local/man/man3/pcre2_set_recursion_memory_management.3 /usr/local/man/man3/pcre2_set_substitute_callout.3 /usr/local/man/man3/pcre2_set_substitute_case_callout.3 /usr/local/man/man3/pcre2_substitute.3 /usr/local/man/man3/pcre2_substring_copy_byname.3 /usr/local/man/man3/pcre2_substring_copy_bynumber.3 /usr/local/man/man3/pcre2_substring_free.3 /usr/local/man/man3/pcre2_substring_get_byname.3 /usr/local/man/man3/pcre2_substring_get_bynumber.3 /usr/local/man/man3/pcre2_substring_length_byname.3 /usr/local/man/man3/pcre2_substring_length_bynumber.3 /usr/local/man/man3/pcre2_substring_list_free.3 /usr/local/man/man3/pcre2_substring_list_get.3 /usr/local/man/man3/pcre2_substring_nametable_scan.3 /usr/local/man/man3/pcre2_substring_number_from_name.3 /usr/local/man/man3/pcre2api.3 /usr/local/man/man3/pcre2build.3 /usr/local/man/man3/pcre2callout.3 /usr/local/man/man3/pcre2compat.3 /usr/local/man/man3/pcre2convert.3 /usr/local/man/man3/pcre2demo.3 /usr/local/man/man3/pcre2jit.3 /usr/local/man/man3/pcre2limits.3 /usr/local/man/man3/pcre2matching.3 /usr/local/man/man3/pcre2partial.3 /usr/local/man/man3/pcre2pattern.3 /usr/local/man/man3/pcre2perform.3 /usr/local/man/man3/pcre2posix.3 /usr/local/man/man3/pcre2sample.3 /usr/local/man/man3/pcre2serialize.3 /usr/local/man/man3/pcre2syntax.3 /usr/local/man/man3/pcre2unicode.3
@@ -0,0 +1,35 @@
check_quotas
cloudconfig
cloudfinal
cloudinit
cloudinitlocal
cron
dhcpleased
library_aslr
ntpd
pf
pflogd
qemu_ga
resolvd
slaacd
smtpd
sndiod
sshd
syslogd
---
cron
dhcpleased
ntpd
pflogd
resolvd
slaacd
smtpd
sndiod
sshd
syslogd
---
cloudconfig
cloudfinal
cloudinit
cloudinitlocal
qemu_ga
View File
+409
View File
@@ -224,3 +224,412 @@ class TestListeningSockets:
(s["proto"], s["address"], s["port"]) for s in result["sockets"]
}
assert calls == [("fstat -n", True), (OpenBSDDriver.LISTENING_FALLBACK_COMMAND, False)]
class _Result:
def __init__(self, stdout: str = "", exit_code: int = 0, stderr: str = "") -> None:
self.stdout, self.exit_code, self.stderr = stdout, exit_code, stderr
def _channel(cls, answers: dict):
"""A driver whose run_command answers from *answers*: ``command -> stdout``
or ``command -> (stdout, exit_code)``; ``(command, True)`` keys answer only
privileged calls. Every call is recorded as ``(command, privileged)``."""
driver = cls("host", "netork", "")
calls: list[tuple[str, bool]] = []
def run(command, *, privileged=False, timeout=60, stdin=None):
calls.append((command, privileged))
answer = answers.get((command, privileged), answers.get(command, ""))
stdout, code = answer if isinstance(answer, tuple) else (answer, 0)
return _Result(stdout, code)
driver.run_command = run # type: ignore[method-assign]
driver.calls = calls # type: ignore[attr-defined]
return driver
class TestPackages:
def test_freebsd_packages_with_their_repository(self):
driver = _channel(
FreeBSDDriver,
{
"pkg -N": "",
FreeBSDDriver.PKG_QUERY: _read("freebsd-vm", "pkg_query_n_v_R_sb_c.txt"),
},
)
packages = driver.get_packages()
assert {p["source"] for p in packages} >= {"FreeBSD-base", "FreeBSD-ports"}
def test_freebsd_without_pkg_has_no_packages(self):
"""A hand-installed classic system may never have bootstrapped pkg."""
driver = _channel(FreeBSDDriver, {"pkg -N": ("pkg: pkg is not installed", 1)})
assert driver.get_packages() == []
assert driver.calls == [("pkg -N", False)]
def test_a_pkg_that_cannot_read_its_database_raises(self):
"""Any other failure is "could not read", never "no packages"."""
driver = _channel(
FreeBSDDriver,
{"pkg -N": ("pkg: sqlite error ...: database disk image is malformed", 1)},
)
with pytest.raises(RuntimeError, match="malformed"):
driver.get_packages()
def test_openbsd_packages(self):
driver = _channel(OpenBSDDriver, {"pkg_info": _read("openbsd-vm", "pkg_info_full.txt")})
assert any(p["name"] == "pcre2" for p in driver.get_packages())
@pytest.mark.parametrize(
("cls", "install", "uninstall"),
[
(
FreeBSDDriver,
"env ASSUME_ALWAYS_YES=yes pkg install -y nginx",
"pkg delete -y nginx",
),
(OpenBSDDriver, "pkg_add -I nginx", "pkg_delete nginx"),
],
)
def test_install_and_uninstall_as_root(self, cls, install, uninstall):
driver = _channel(cls, {})
driver.install_package("nginx")
driver.uninstall_package("nginx")
assert driver.calls == [(install, True), (uninstall, True)]
def test_a_version_is_part_of_the_name(self):
driver = _channel(FreeBSDDriver, {})
driver.install_package("nginx", "1.28.0")
assert driver.calls == [("env ASSUME_ALWAYS_YES=yes pkg install -y nginx-1.28.0", True)]
def test_a_failed_install_raises(self):
driver = _channel(OpenBSDDriver, {("pkg_add -I nope", True): ("Can't find nope", 1)})
with pytest.raises(RuntimeError, match="nope"):
driver.install_package("nope")
@pytest.mark.parametrize("name", ["", "nginx; reboot", "-f", "a b"])
def test_a_name_that_is_not_a_package_is_refused(self, name):
driver = _channel(FreeBSDDriver, {})
with pytest.raises(ValueError):
driver.install_package(name)
assert driver.calls == []
class TestAvailableUpdates:
def test_freebsd_marks_what_vuxml_knows(self):
driver = _channel(
FreeBSDDriver,
{
"pkg -N": "",
("pkg upgrade -n", True): _read("freebsd-vm", "sudo_pkg_upgrade_n_latest.txt"),
("pkg audit -Fq", True): ("python312-3.12.14\nexpat-2.8.2\n", 1),
"pkg repos -l": _read("freebsd-vm", "pkg_repos_l.txt"),
},
)
updates = {u["name"]: u for u in driver.get_available_updates()}
assert len(updates) == 10
assert updates["expat"]["security"] is True
assert updates["pkg"]["security"] is False
assert updates["pkg"]["origin"] == "FreeBSD-ports"
assert "base-system" not in updates # pkgbase: the base system is packages
def test_freebsd_without_an_audit_cannot_tell(self):
driver = _channel(
FreeBSDDriver,
{
"pkg -N": "",
("pkg upgrade -n", True): _read("freebsd-vm", "sudo_pkg_upgrade_n_latest.txt"),
("pkg audit -Fq", True): ("pkg: cannot fetch", 3),
"pkg repos -l": "FreeBSD-ports\nFreeBSD-base\n",
},
)
assert {u["security"] for u in driver.get_available_updates()} == {None}
def test_classic_freebsd_reports_fetched_base_updates_as_one_entry(self):
driver = _channel(
FreeBSDDriver,
{
"pkg -N": ("pkg: pkg is not installed", 1),
("freebsd-update --not-running-from-cron updatesready", True): ("", 0),
"freebsd-version -u": "15.1-RELEASE",
},
)
assert driver.get_available_updates() == [
{
"name": "base-system",
"current_version": "15.1-RELEASE",
"new_version": "fetched by freebsd-update",
"origin": "freebsd-update",
"security": None,
}
]
def test_classic_freebsd_without_fetched_updates(self):
driver = _channel(
FreeBSDDriver,
{
"pkg -N": ("pkg: pkg is not installed", 1),
("freebsd-update --not-running-from-cron updatesready", True): ("", 2),
},
)
assert driver.get_available_updates() == []
def test_openbsd_packages_and_syspatches(self):
driver = _channel(
OpenBSDDriver,
{
("pkg_add -u -n -v", True): _read("openbsd-vm", "sudo_pkg_add_u_n_v.txt"),
("syspatch -c", True): _read("openbsd-vm", "syspatch_c.txt"),
("syspatch -l", True): "",
"uname -r": "7.9",
},
)
updates = {u["name"]: u for u in driver.get_available_updates()}
assert updates["pcre2"]["new_version"] == "10.48"
assert updates["pcre2"]["security"] is None
base = updates["base-system"]
assert base["current_version"] == "7.9"
assert base["new_version"].startswith("34 patches: 001_xserver")
assert base["origin"] == "syspatch"
assert base["security"] is None
def test_openbsd_fully_patched(self):
driver = _channel(
OpenBSDDriver, {("pkg_add -u -n -v", True): "", ("syspatch -c", True): ""}
)
assert driver.get_available_updates() == []
class TestServices:
def test_freebsd_reads_the_status_as_root(self):
status = _read("freebsd-vm", "sudo_service_status_loop.txt")
driver = _channel(FreeBSDDriver, {(FreeBSDDriver.SERVICE_STATUS_COMMAND, True): status})
services = {s["name"]: s for s in driver.get_services()}
assert services["cron"]["running"] is True
def test_freebsd_without_root_reads_what_it_can(self):
status = _read("freebsd-vm", "service_status_loop.txt")
driver = _channel(
FreeBSDDriver,
{
(FreeBSDDriver.SERVICE_STATUS_COMMAND, True): ("sudo: a password is required", 1),
(FreeBSDDriver.SERVICE_STATUS_COMMAND, False): status,
},
)
assert {s["name"] for s in driver.get_services()} >= {"sshd", "cron"}
def test_openbsd(self):
driver = _channel(
OpenBSDDriver,
{OpenBSDDriver.SERVICE_STATUS_COMMAND: _read("openbsd-vm", "rcctl_check_loop.txt")},
)
assert {s["name"]: s["running"] for s in driver.get_services()}["smtpd"] is True
@pytest.mark.parametrize(
("cls", "command"),
[(FreeBSDDriver, "service sshd restart"), (OpenBSDDriver, "rcctl restart sshd")],
)
def test_manage_as_root(self, cls, command):
driver = _channel(cls, {})
assert driver.manage_service("sshd", "restart") == {"success": True, "output": ""}
assert driver.calls == [(command, True)]
def test_a_failed_action_says_so(self):
driver = _channel(
OpenBSDDriver, {("rcctl start nope", True): ("rcctl: service nope does not exist", 2)}
)
result = driver.manage_service("nope", "start")
assert result["success"] is False
assert "does not exist" in result["output"]
@pytest.mark.parametrize(
("name", "action"), [("sshd", "reload"), ("sshd;reboot", "start"), ("", "start")]
)
def test_refused_before_anything_is_sent(self, name, action):
driver = _channel(FreeBSDDriver, {})
with pytest.raises(ValueError):
driver.manage_service(name, action)
assert driver.calls == []
class TestSnmp:
"""net-snmp from packages, as decided in NetOrk/netork#800: UCD-SNMP-MIB,
the same health metrics as on Linux."""
PROBE_OK = "STRING: FreeBSD host 15.1-RELEASE-p4 FreeBSD 15.1-RELEASE-p4 GENERIC amd64"
@pytest.mark.parametrize(
("cls", "install", "conf", "start"),
[
(
FreeBSDDriver,
"env ASSUME_ALWAYS_YES=yes pkg install -y net-snmp",
"/usr/local/etc/snmp/snmpd.conf",
"sysrc snmpd_enable=YES && service snmpd restart",
),
(
OpenBSDDriver,
"pkg_add -I net-snmp",
"/etc/snmp/snmpd.conf",
"rcctl enable netsnmpd && rcctl restart netsnmpd",
),
],
)
def test_fix_snmp_installs_configures_and_starts_net_snmp(self, cls, install, conf, start):
driver = _channel(cls, {BsdDriver.SNMP_PROBE: self.PROBE_OK})
stdin_seen = {}
run = driver.run_command
def recording(command, *, privileged=False, timeout=60, stdin=None):
if stdin is not None:
stdin_seen[command] = stdin
return run(command, privileged=privileged, timeout=timeout, stdin=stdin)
driver.run_command = recording # type: ignore[method-assign]
result = driver.run_device_action("fix_snmp")
assert result["success"] is True
commands = [c for c, _ in driver.calls]
assert commands[0] == install
assert any(conf in c and "cat >" in c for c in commands)
assert start in commands
assert commands[-1] == BsdDriver.SNMP_PROBE
assert all(p for c, p in driver.calls if c != BsdDriver.SNMP_PROBE) # root for the setup
written = next(v for k, v in stdin_seen.items() if conf in k).decode()
assert "agentAddress udp:161" in written and "rocommunity public" in written
def test_a_failed_install_stops_and_says_so(self):
driver = _channel(
FreeBSDDriver,
{
("env ASSUME_ALWAYS_YES=yes pkg install -y net-snmp", True): (
"pkg: No packages available",
1,
)
},
)
result = driver.run_device_action("fix_snmp")
assert result["success"] is False
assert "No packages available" in result["output"]
assert len(driver.calls) == 1
def test_no_answer_from_the_agent_is_a_failure(self):
driver = _channel(
OpenBSDDriver, {BsdDriver.SNMP_PROBE: "Timeout: No Response from 127.0.0.1"}
)
assert driver.run_device_action("fix_snmp")["success"] is False
def test_unknown_action(self):
with pytest.raises(NotImplementedError):
_channel(FreeBSDDriver, {}).run_device_action("fix_apt_proxy")
def test_snmp_config_of_a_running_agent(self):
driver = _channel(
FreeBSDDriver,
{
"pgrep -f /usr/local/sbin/snmpd": "1234",
"cat /usr/local/etc/snmp/snmpd.conf": "agentAddress udp:1161\nrocommunity s3cret\n",
},
)
assert driver.get_snmp_config() == {
"running": True,
"community": "s3cret",
"port": 1161,
"version": "2c",
}
def test_no_agent_running_means_no_config(self):
driver = _channel(OpenBSDDriver, {"pgrep -f /usr/local/sbin/snmpd": ("", 1)})
assert driver.get_snmp_config() is None
class TestHostStatus:
"""napalm-device-types' host status, carried over the exec channel; on
FreeBSD it compares the installed with the running kernel (4.1.0)."""
REPORT = (
"HSTAT_BEGIN\n[kernel]\n15.1-RELEASE\n[modules]\n"
"[freebsd-kernel]\n15.1-RELEASE-p5\n[freebsd-running]\n15.1-RELEASE-p4\n"
"[timers]\nHSTAT_END\n"
)
def test_a_patched_kernel_waits_for_a_reboot(self):
from napalm_device_types.host_status import HOST_STATUS_COMMAND
driver = _channel(FreeBSDDriver, {HOST_STATUS_COMMAND: self.REPORT})
status = driver.get_host_status()
assert status["reboot_required"] is True
assert driver.calls == [(HOST_STATUS_COMMAND, False)] # read-only, no root
@pytest.mark.parametrize("cls", [FreeBSDDriver, OpenBSDDriver])
def test_both_have_it(self, cls):
assert callable(getattr(cls, "get_host_status", None))
class TestAFailedReadRaises:
"""A reader that could not read raises; [] would tell netOrk "no updates"
and close every patch clock on the host (napalm-bsd#4)."""
def test_freebsd_without_root(self):
driver = _channel(
FreeBSDDriver,
{"pkg -N": "", ("pkg upgrade -n", True): ("", 1)},
)
with pytest.raises(RuntimeError, match="pkg upgrade -n"):
driver.get_available_updates()
def test_a_failed_audit_leaves_security_unknown(self):
"""pkg audit exits 1 for "vulnerable packages found" and for errors alike;
only a list of packages makes the 1 a verdict."""
driver = _channel(
FreeBSDDriver,
{
"pkg -N": "",
("pkg upgrade -n", True): _read("freebsd-vm", "sudo_pkg_upgrade_n_latest.txt"),
("pkg audit -Fq", True): ("", 1),
"pkg repos -l": "FreeBSD-ports\nFreeBSD-base\n",
},
)
assert {u["security"] for u in driver.get_available_updates()} == {None}
def test_classic_freebsd_update_error(self):
driver = _channel(
FreeBSDDriver,
{
"pkg -N": ("pkg: pkg is not installed", 1),
("freebsd-update --not-running-from-cron updatesready", True): ("", 1),
},
)
with pytest.raises(RuntimeError, match="freebsd-update"):
driver.get_available_updates()
@pytest.mark.parametrize("failing", ["pkg_add -u -n -v", "syspatch -c"])
def test_openbsd_without_root(self, failing):
answers = {("pkg_add -u -n -v", True): "", ("syspatch -c", True): ""}
answers[(failing, True)] = ("", 1)
driver = _channel(OpenBSDDriver, answers)
with pytest.raises(RuntimeError, match=failing.split()[0]):
driver.get_available_updates()
class TestFirstBoot:
"""Whether the host is still in its first boot (NetOrk/netork#795).
A FreeBSD cloud image upgrades its base system on the first boot, starts
sshd only then and restarts right after; /etc/rc removes /firstboot just
before that restart. netOrk waits for it before setting up a new VM.
"""
def test_freebsd_in_its_first_boot(self):
driver = _channel(FreeBSDDriver, {"test -e /firstboot": ("", 0)})
assert driver.first_boot_pending() is True
assert driver.calls == [("test -e /firstboot", False)]
def test_freebsd_after_its_first_boot(self):
driver = _channel(FreeBSDDriver, {"test -e /firstboot": ("", 1)})
assert driver.first_boot_pending() is False
def test_openbsd_has_no_marker_to_ask(self):
driver = _channel(OpenBSDDriver, {})
assert driver.first_boot_pending() is False
assert driver.calls == []
+86
View File
@@ -269,3 +269,89 @@ class TestListeningSockets:
def test_a_socket_held_by_two_processes_is_listed_once(self):
text = "www nginx 901 6 tcp4 *:80 *:*\nwww nginx 900 6 tcp4 *:80 *:*\n"
assert [(s["pid"]) for s in parse.sockstat(text)] == [901]
class TestPackages:
def test_freebsd_pkg_query_names_the_repository(self):
packages = parse.pkg_query(fixture("freebsd-vm", "pkg_query_n_v_R_sb_c.txt"))
acct = next(p for p in packages if p["name"] == "FreeBSD-acct")
assert acct == {
"name": "FreeBSD-acct",
"version": "15.1p4",
"installed": True,
"description": "System resource accounting",
"size": 118976,
"source": "FreeBSD-base",
}
assert any(p["source"] == "FreeBSD-ports" for p in packages)
@pytest.mark.parametrize(
("full", "name", "version"),
[
("pcre2-10.44", "pcre2", "10.44"),
("bash-completion-2.17.0", "bash-completion", "2.17.0"),
("py3-tzdata-2026.3", "py3-tzdata", "2026.3"),
("argon2-20190702p0", "argon2", "20190702p0"),
("gettext-runtime-1.0", "gettext-runtime", "1.0"),
],
)
def test_openbsd_package_names(self, full, name, version):
assert parse.split_package(full) == (name, version)
def test_openbsd_pkg_info(self):
packages = parse.pkg_info(fixture("openbsd-vm", "pkg_info_full.txt"))
assert packages[1] == {
"name": "bash",
"version": "5.3.9",
"installed": True,
"description": "GNU Bourne Again Shell",
"size": 0,
"source": "pkg_add",
}
assert any(p["name"] == "bash-completion" for p in packages)
class TestUpdates:
def test_freebsd_pkg_upgrade_dry_run(self):
updates = parse.pkg_upgrades(fixture("freebsd-vm", "sudo_pkg_upgrade_n_latest.txt"))
assert len(updates) == 10
assert updates[0] == {
"name": "expat",
"current_version": "2.8.2",
"new_version": "2.8.5",
"origin": "FreeBSD-ports",
}
def test_freebsd_pkg_audit_names_the_vulnerable_packages(self):
text = fixture("freebsd-vm", "sudo_pkg_audit_Fq.txt").replace("rc=1\n", "")
assert parse.pkg_audit(text) == {"python312", "expat"}
def test_openbsd_update_candidates_that_change(self):
updates = parse.pkg_add_candidates(fixture("openbsd-vm", "sudo_pkg_add_u_n_v.txt"))
assert updates == [
{"name": "pcre2", "current_version": "10.44", "new_version": "10.48"},
{"name": "py3-tzdata", "current_version": "2026.3", "new_version": "2026.4"},
]
def test_openbsd_syspatch(self):
patches = parse.syspatch(fixture("openbsd-vm", "syspatch_c.txt"))
assert len(patches) == 34
assert patches[0] == "001_xserver"
class TestServices:
def test_freebsd_status_as_root(self):
services = {
s["name"]: s
for s in parse.service_status(fixture("freebsd-vm", "sudo_service_status_loop.txt"))
}
assert services["sshd"] == {"name": "sshd", "running": True, "enabled": True, "pid": 1282}
assert services["qemu-guest-agent"]["running"] is False
assert services["hostid"]["running"] is False # a one-shot script without a status
def test_openbsd_rcctl_check(self):
services = {
s["name"]: s for s in parse.rcctl_check(fixture("openbsd-vm", "rcctl_check_loop.txt"))
}
assert services["sshd"] == {"name": "sshd", "running": True, "enabled": True, "pid": 0}
assert services["check_quotas"]["running"] is False