Merge pull request #544 from nextbsd/fix/pkg-db-private-var
build.sh: lay the /private symlinks before pkg installs, so the package database lands in /private/var
Merge pull request #544 from nextbsd/fix/pkg-db-private-var
build.sh: lay the /private symlinks before pkg installs, so the package database lands in /private/var
build.sh: empty the package cache directory after pkg clean
pkg clean's failure is ignored and it leaves files it does not recognise,
so delete whatever remains in private/var/cache/pkg before the image is
baked. No downloaded package ships in the IMG or ISO.
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
build.sh: empty the package cache directory after pkg clean
pkg clean's failure is ignored and it leaves files it does not recognise,
so delete whatever remains in private/var/cache/pkg before the image is
baked. No downloaded package ships in the IMG or ISO.
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
build.sh: lay the /private symlinks before pkg installs, so the package database lands in /private/var
Step 3 moved the installed var into private/ after NextBSD-everything was
installed. Since nextbsd-userland#375, NextBSD-userland ships
/private/var/log/com.apple.launchd, so private/var already existed and
mv nested var inside it as private/var/var. The package database and the
package cache were stranded there: the image's pkg info listed only pkg,
and the 101 MiB cache escaped step 5b's clean.
Create private/{etc,var,tmp} and the relative etc/var/tmp symlinks at the
start of the pkg branch instead, and drop the move.
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
build.sh: lay the /private symlinks before pkg installs, so the package database lands in /private/var
Step 3 moved the installed var into private/ after NextBSD-everything was
installed. Since nextbsd-userland#375, NextBSD-userland ships
/private/var/log/com.apple.launchd, so private/var already existed and
mv nested var inside it as private/var/var. The package database and the
package cache were stranded there: the image's pkg info listed only pkg,
and the 101 MiB cache escaped step 5b's clean.
Create private/{etc,var,tmp} and the relative etc/var/tmp symlinks at the
start of the pkg branch instead, and drop the move.
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
build.sh: hide NextBSD live-ISO vfs.pivot output unless verbose boot
The pivot's sysctl prints a "vfs.pivot: ... -> ..." line on every
boot, which is the last [init]-phase progress output left on a quiet
NextBSD live-ISO boot. Send its stdout to /dev/null unless VERBOSE is
set. Its stderr still goes to the console, so a failed pivot is still
visible.
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
build.sh: gate live-ISO init [init] progress behind verbose boot
The live-ISO miniroot init printed its [init] progress trace on every
boot. Route the routine lines through a vlog helper that prints only
when debug.bootverbose is set (or init got -s). start_init() only ever
passes -s to init, never -v, so verbose mode comes from the sysctl
rather than $*. The MISSING/ABSENT/EMPTY error cases, the single-user
banner and resume line, the FATAL line and mount errors still always
print.
Closes #322
Co-Authored-By: Claude Opus 5.5 <noreply at anthropic.com>
Assemble all images from nextbsd-pkg again; nextbsd-ci is boot-tests only
96e7330 made ASSEMBLY=artifacts the default for every CI lane, so every image
published since ships no pkg (no binary, no database, no in-image repo config):
pkg update 404s via the base bootstrapper and the installed OS is unowned
(#533). Restore pkg assembly for all images -- build matrix (amd64/arm64) and
the rpi5 lane -- via this repo's own build.sh, and stop checking out nextbsd-ci
for assembly. The img/iso boot tests keep the shared nextbsd-ci harness (the
tests/*-boot-test.sh scripts clone it at the pinned tag themselves), so
nextbsd-ci stays in this repo for boot testing only. The artifacts path remains
available as a manual opt-in.
T9+T11+T7: rename job, stop the ISO dispatch/schedule, redux sweep, harness v0.3.5
- T9 (nextbsd-ci#11): `name: ci` -> `Build NextBSD ISO/IMG` (the only generic
name left in the org).
- T11 (nextbsd-ci#13): remove the `repository_dispatch` (ISO) trigger and the
nightly `schedule`, and the `repository_dispatch` branch in the release
`if`. ISO is the expensive one (qemu, live boot, ISO boot test); the cheap
components it re-validated are all gated upstream (kernel continuous on
push, userland on push per T10, pkg manual-only), so the cascade had no
unique value. `workflow_dispatch` (manual ISO + release) and `pull_request`
(PR img lane) remain; img-test and release now fire on `pull_request` or
manual.
- T7 (nextbsd-ci#7): README `nextbsd-redux` -> `nextbsd`.
- Lockstep: harness pin v0.3.4 -> v0.3.5 (the T8 flake fixes: nextbsd#428
end-state hold, nextbsd#503 teardown, nextbsd#405 marker protocol).
Assemble CI images from the shared nextbsd-ci assembly, never pkg
ASSEMBLY=artifacts (the default; every CI lane) now lays the five
component continuous artifacts (base, kernel, userland, contrib, kexts)
into the rootfs via the SHARED assembly script that lives in nextbsd-ci
(checked out into the workspace at the pinned v0.3.1 release tag, rsynced
into the build VM). One recipe, all consumers: this lane, the userland PR
lane, and the kext lane share it. No pkg anywhere in a CI image — packages
are gated release artifacts.
The inline re-derivation of the same layout that was about to ship is gone:
the Apple /private layout, the overlays /etc seed, the runtime skeleton,
kext auth, offline DBs, and cert bundle all come from the shared script
(SKIP_ASSEMBLE=1 so this lane keeps its own 1.5G root + live ISO + rpi500
media tail). build.sh steps 3/3b are pkg-mode-only now (the shared script
already did them in artifacts mode); step 4 runs in both (idempotent DBs +
the certctl refresh the script can't do on a Linux runner).
ASSEMBLY=pkg (release images) is unchanged: pkg install
[10 lines not shown]
T6 lockstep: pin the shared boot harness to v0.3.0
v0.3.0 = v0.2.3 plus -device virtio-gpu-pci on the amd64 q35 shape (nextbsd/nextbsd-ci#15). The device is unbound and inert for the img/iso login-only boot gates (no graphics kext in the image); both lanes re-run on this PR to confirm.
T4: pin boot tests to shared harness v0.2.3 (banner→prompt login) (#513)
* T4: boot gates run on the shared nextbsd-ci harness @v0.2.1 (login-only)
img-boot-test.sh + iso-boot-test.sh become thin entry points onto the shared
harness (NB_LOGIN_ONLY; the live ISO adds NB_MEDIA=cd): they extract the
zipped artifact, check out nextbsd/nextbsd-ci at v0.2.1 (pinned tag = no drift),
and run harness/boot-test.sh. The loader un-mute dance, the arch-aware qemu
argv, login detection and teardown now come from the shared harness (one place,
every arch, kept green by its selftest) instead of the in-repo copies.
Delete the 1512-line tests/boot-test.sh monolith (nothing in CI invoked it) and
the in-repo tests/loader.exp.inc + tests/qemu-arch.sh (superseded by the
harness's contract.exp.inc + qemu-arch.sh). The jobs' serial-log dumps point at
the harness transcript. Both gates stay NON-GATING as before (not in release's
needs); the gate is the harness exit class.
* Bump the shared-harness pin to v0.2.2 in the thin img/iso boot wrappers
[4 lines not shown]
T4: boot gates run on the shared nextbsd-ci harness @v0.2.1 (login-only)
img-boot-test.sh + iso-boot-test.sh become thin entry points onto the shared
harness (NB_LOGIN_ONLY; the live ISO adds NB_MEDIA=cd): they extract the
zipped artifact, check out nextbsd/nextbsd-ci at v0.2.1 (pinned tag = no drift),
and run harness/boot-test.sh. The loader un-mute dance, the arch-aware qemu
argv, login detection and teardown now come from the shared harness (one place,
every arch, kept green by its selftest) instead of the in-repo copies.
Delete the 1512-line tests/boot-test.sh monolith (nothing in CI invoked it) and
the in-repo tests/loader.exp.inc + tests/qemu-arch.sh (superseded by the
harness's contract.exp.inc + qemu-arch.sh). The jobs' serial-log dumps point at
the harness transcript. Both gates stay NON-GATING as before (not in release's
needs); the gate is the harness exit class.
Bump the shared-harness pin to v0.2.2 in the thin img/iso boot wrappers
v0.2.2 = v0.2.1 (v0.2.0 + login-only) plus a capped post-banner login-wait
window (180s) that probes for a shell quickly instead of waiting out the whole
global budget on an autologin image (the arm64 30-min 'hang').
Bump the shared-harness pin to v0.2.2 in the thin img/iso boot wrappers
v0.2.2 = v0.2.1 (v0.2.0 + login-only) plus a capped post-banner login-wait
window (180s) that probes for a shell quickly instead of waiting out the whole
global budget on an autologin image (the arm64 30-min 'hang').
Bump the shared-harness pin to v0.2.2 in the thin img/iso boot wrappers
v0.2.2 = v0.2.1 (v0.2.0 + login-only) plus a capped post-banner login-wait
window (180s) that probes for a shell quickly instead of waiting out the whole
global budget on an autologin image (the arm64 30-min 'hang').
T4: boot gates run on the shared nextbsd-ci harness @v0.2.1 (login-only)
img-boot-test.sh + iso-boot-test.sh become thin entry points onto the shared
harness (NB_LOGIN_ONLY; the live ISO adds NB_MEDIA=cd): they extract the
zipped artifact, check out nextbsd/nextbsd-ci at v0.2.1 (pinned tag = no drift),
and run harness/boot-test.sh. The loader un-mute dance, the arch-aware qemu
argv, login detection and teardown now come from the shared harness (one place,
every arch, kept green by its selftest) instead of the in-repo copies.
Delete the 1512-line tests/boot-test.sh monolith (nothing in CI invoked it) and
the in-repo tests/loader.exp.inc + tests/qemu-arch.sh (superseded by the
harness's contract.exp.inc + qemu-arch.sh). The jobs' serial-log dumps point at
the harness transcript. Both gates stay NON-GATING as before (not in release's
needs); the gate is the harness exit class.
T4: boot gates run on the shared nextbsd-ci harness @v0.2.1 (login-only)
img-boot-test.sh + iso-boot-test.sh become thin entry points onto the shared
harness (NB_LOGIN_ONLY; the live ISO adds NB_MEDIA=cd): they extract the
zipped artifact, check out nextbsd/nextbsd-ci at v0.2.1 (pinned tag = no drift),
and run harness/boot-test.sh. The loader un-mute dance, the arch-aware qemu
argv, login detection and teardown now come from the shared harness (one place,
every arch, kept green by its selftest) instead of the in-repo copies.
Delete the 1512-line tests/boot-test.sh monolith (nothing in CI invoked it) and
the in-repo tests/loader.exp.inc + tests/qemu-arch.sh (superseded by the
harness's contract.exp.inc + qemu-arch.sh). The jobs' serial-log dumps point at
the harness transcript. Both gates stay NON-GATING as before (not in release's
needs); the gate is the harness exit class.
rpi: boot normally, not verbose (#506)
* rpi: boot normally, not verbose
The Pi boot partition shipped `FreeBSD: -v` in cmdline.txt, from when the
board was being brought up and its serial log was the only instrument
there was. That is no longer the right default, and leaving it was a trap
rather than a nicety.
The Pi rootfs carries nextbsd-overlays' loader.conf.d, so it already gets
boot_mutemsgs="YES" (#363). RB_VERBOSE is exactly what that mute exempts,
so a -v that arrived would turn the quiet console back off on this board
alone, while every other machine stayed quiet.
It does not arrive today: parse_fdt_bootargs() only parses when
fdt_get_chosen_bootargs() succeeds, and a tryboot with that line produced
a boot that was not verbose, so the firmware appears not to be writing
/chosen/bootargs at all (nextbsd-kernel#93). So the flag was inert -- and
would have started working silently, on every Pi image, the day that was
[198 lines not shown]
rpi: boot normally, not verbose (#506)
* rpi: boot normally, not verbose
The Pi boot partition shipped `FreeBSD: -v` in cmdline.txt, from when the
board was being brought up and its serial log was the only instrument
there was. That is no longer the right default, and leaving it was a trap
rather than a nicety.
The Pi rootfs carries nextbsd-overlays' loader.conf.d, so it already gets
boot_mutemsgs="YES" (#363). RB_VERBOSE is exactly what that mute exempts,
so a -v that arrived would turn the quiet console back off on this board
alone, while every other machine stayed quiet.
It does not arrive today: parse_fdt_bootargs() only parses when
fdt_get_chosen_bootargs() succeeds, and a tryboot with that line produced
a boot that was not verbose, so the firmware appears not to be writing
/chosen/bootargs at all (nextbsd-kernel#93). So the flag was inert -- and
would have started working silently, on every Pi image, the day that was
[198 lines not shown]