Page MenuHomeFreeBSD

bsdconfig: dependency-aware parallel package installer with progress
Needs ReviewPublic

Authored by dteske on Sun, Jul 12, 1:37 AM.

Details

Summary

bsdconfig packages gains f_package_parallel_install(), which installs a
job set concurrently while honoring inter-package dependencies. The
run-dependency data already collected from pkg-rquery(8) seeds a
topological schedule (Kahn's algorithm): packages with no pending
dependencies dispatch immediately to a worker pool sized by
PACKAGE_INSTALL_JOBS (default hw.ncpu), and each completion, reported
over a FIFO, releases any dependents it was blocking. Workers run
pkg-fetch(8) then pkg-install(8) with LOCK_WAIT/LOCK_RETRIES raised so
siblings tolerate the package database lock, and log per-package output
under a scratch directory for post-mortem. A failure marks all
transitive dependents skipped rather than aborting the whole set, and
the summary names every package that failed or was skipped. Overall
progress renders through bsdpv(1) in line mode, fed one line per
completed package.

Test Plan

Prerequisites:
https://reviews.freebsd.org/D58118
https://reviews.freebsd.org/D58133

The scheduler's ordering, failure propagation, and progress plumbing
were exercised with a mock pkg(8): independent packages start together,
dependents start only after their prerequisites complete, and a failed
package skips exactly its transitive dependents while unrelated
installs proceed.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 74732
Build 71615: arc lint + arc unit