module

Beryl::CLI::Upgrade

beryl upgrade [portée] [--apply] [--recipes] — pkg upgrade. DRY-RUN par défaut (plan via pkg upgrade -n) ; --apply exécute réellement.

Constants

BASE_REPO = "FreeBSD-base"

Dépôt du SYSTÈME de base (pkgbase) : réservé à beryl os-upgrade.

DISRUPTIVE_RESTARTS = {"openvpn" => "coupe les tunnels OpenVPN quelques secondes", "strongswan" => "coupe les tunnels IPsec quelques secondes", "tailscaled" => "coupe le réseau Tailscale quelques secondes"}

Relances qui coupent un accès réseau le temps de redémarrer : annoncées avant d'être faites.

EXIT_FAILED = 2
EXIT_OK = 0
EXIT_USAGE = 1
NOTE_OK = "à jour"
NOTE_SKIPPED = "pas encore installé"
RESTART_TIMEOUT = 120

Délai maximal d'une relance (secondes) ; timeout(1) sort alors en 124.

SOLVER_DEBUG = "-dddd"

Niveau 4 de la trace de pkg : règles « X wants Y » et fournisseurs trouvés pour chaque bibliothèque requise (libpkg/pkg_solve.c, pkg_jobs_universe.c). Assez pour savoir QUI tire un nouveau paquet.

TIMEOUT_EXIT = 124
TRACE_MAX = 40
VULN_MARK = "(vulnerable!)"

Class methods

affected_services(shell : Beryl::Apply::Shell, pkgs : Array(String)) : Array(String)
Source
audit(shell : Beryl::Apply::Shell, fetch : Bool) : Array(String) | Nil

Paquets vulnérables du host, ou nil si l'audit n'a pas pu se faire (base des vulnérabilités absente, pkg en erreur). Lecture seule.

Source
audit_alert(vulns : Hash(String, Array(String))) : String | Nil

Alerte paquets vulnérables, bien visible : un host par ligne avec ses paquets. nil si aucun. Pur.

Source
audit_cmd(fetch : Bool) : String

pkg audit : paquets installés touchés par une vulnérabilité connue. -F rafraîchit d'abord la base des vulnérabilités (vuln.xml, comme le periodic quotidien) ; sur un host protégé, base existante seulement (aucune écriture). N'installe ni ne modifie aucun paquet.

Source
base_pending(shell : Beryl::Apply::Shell) : Int32 | Nil

Nombre de paquets du système de base en attente (lecture seule), nil si le serveur n'est pas en pkgbase ou si la sonde échoue.

Source
changed_packages(output : String) : Array(String)

Paquets MODIFIÉS annoncés par pkg upgrade (-n ou -y) : sections « Installed packages to be UPGRADED: » (\tnom: a -> b [dépôt]) et « … REINSTALLED: » (\tnom-version [dépôt] (options changed)). Les nouveaux paquets (INSTALLED) ne font tourner aucun service existant : ignorés. Pur.

Source
fleet_block(st : HostState) : String

Bloc d'un host : FQDN seul, puis ses mises à jour indentées d'une tabulation, « (vulnerable!) » en fin de ligne d'un paquet vulnérable (pkg audit). Un vulnérable SANS mise à jour disponible a sa propre ligne. Rien à lister : « fqdn : note » sur une ligne. Pur.

Source
fleet_hint(states : Array(HostState)) : String | Nil

Ligne d'action, SEULEMENT s'il y a quelque chose à faire (mises à jour, paquets vulnérables, injoignables) : décompte non nul + commandes. Pur.

Source
fleet_output(states : Array(HostState)) : String

Sortie de flotte : un bloc par host, séparés par une ligne vide. Pur.

Source
new_packages(output : String) : Array(String)

NOUVEAUX paquets annoncés par pkg upgrade (section « New packages to be INSTALLED: », \tnom: version [dépôt]). Pur.

Source
new_packages_trace(shell : Beryl::Apply::SudoShell, output : String, pkgs : Array(String) | Nil) : Array(String)

Trace du solveur pour les nouveaux paquets de output (plan d'un dry-run), relancée en lecture seule ; vide s'il n'y en a pas.

Source
package_name(pkg_version : String) : String

Nom d'un paquet « nom-version » (sortie de pkg audit -q). Pur.

Source
pending_count(output : String) : Int32

« Number of packages to be upgraded: 7 » (+ installed/reinstalled) → 7. 0 si pkg annonce que tout est à jour. Fonction pure.

Source
pending_lines(output : String) : Array(String)

Lignes de mise à jour de pkg upgrade -n, au format de pkg (« nom: a -> b [dépôt] »), toutes sections « … to be X: ». Pur.

Source
progress_note(st : HostState) : String

Ligne de progression d'un serveur examiné. Pur.

Source
run(config_root : String, args : Array(String)) : Int32
Source
services_cmd(pkgs : Array(String)) : String

Services ACTIVÉS touchés par une mise à jour : scripts rc.d des paquets modifiés ET de tous ceux qui en dépendent, de proche en proche (une bibliothèque comme expat ou openssl met à jour le code de nginx, git…). Un service qui tourne garde l'ancien code en mémoire tant qu'il n'est pas relancé. Lecture seule.

Source
software_cmd(apply : Bool, pkgs : Array(String) | Nil = nil, trace : Bool = false) : String

pkg upgrade des seuls paquets LOGICIELS : les paquets installés HORS du dépôt de base et disponibles dans un dépôt (pkg upgrade sans nom toucherait aussi le noyau), restreints à pkgs si donné (mode --recipes). Les règles de pkg s'appliquent tel quel à cette liste (versions, options changées, nouvelles dépendances). Lecture seule en dry-run : aucun verrou posé. Aucun paquet logiciel → rien, jamais pkg upgrade nu.

Un pkg upgrade -r <dépôt> PAR DÉPÔT D'ORIGINE (%R) : un paquet offert par deux dépôts (gmp, mpfr, libffi… republiés par poudriere dans le dépôt maison, copies de FreeBSD-ports) échappe sinon à la règle « ne pas installer ce qui n'est pas installé » du solveur (posée seulement quand il n'existe qu'UNE variante, libpkg/pkg_solve.c) : pkg l'installait sans que rien ne le réclame, et pkg-autoremove le retirait aussitôt (loulou, quantas, 27 oct. 2026). Un paquet absent de son dépôt d'origine mais présent ailleurs : pkg upgrade sans -r (« - »), comme avant.

trace (dry-run seulement) : même plan, avec la trace du solveur (SOLVER_DEBUG) sur la sortie d'erreur.

Source
solver_trace(output : String, names : Array(String)) : Array(String)

Lignes de la trace du solveur (DBG(n)[pid]> …) qui nomment l'un des names, préfixe retiré, sans doublon : celles du solveur d'abord (les règles « X wants Y »), puis les autres, sans les requêtes SQL internes de pkg ((db) running: …, quantas, 27 oct. 2026) ; au plus TRACE_MAX (+ décompte du reste). Un nouveau paquet sans dépendant déclaré (mpfr sur loulou, 27 oct. 2026, retiré une minute plus tard par pkg-autoremove) y montre la règle qui l'a tiré. Pur.

Source
vulnerable_packages(output : String) : Array(String)

Sortie de pkg audit -q → paquets vulnérables (« nom-version », un par ligne). Les lignes de diagnostic (avec espaces) sont ignorées. Pur.

Source

Nested types