release prep: opt-in web UI, make uninstall, fix stale kernel-catalog docs

- WebListenAddr default is now "" (empty). The experimental web UI was
  running on 127.0.0.1:7777 by default, which surprises users who never
  opted in. Users who want it set `web_listen_addr = "127.0.0.1:7777"`
  in config.toml.
- `make uninstall` stops the daemon (if any) and removes the installed
  binaries. Preserves user data on disk but prints the paths so `rm -rf`
  can follow for a full purge. Documented in README next to install.
- docs/kernel-catalog.md: replace the `void-6.12` and `alpine-3.23`
  examples (never published) with `generic-6.12` (the only cataloged
  kernel today). Updates the versioning-convention example too.
This commit is contained in:
Thales Maciel 2026-04-19 12:43:58 -03:00
parent 221fb03d68
commit 78ff482bfa
No known key found for this signature in database
GPG key ID: 33112E6833C34679
6 changed files with 52 additions and 19 deletions

View file

@ -1985,8 +1985,9 @@ func TestDaemonStatusIncludesLogPathWhenStopped(t *testing.T) {
if !strings.Contains(output, "dns: 127.0.0.1:42069") {
t.Fatalf("output = %q, want dns listener", output)
}
if !strings.Contains(output, "web: http://127.0.0.1:7777") {
t.Fatalf("output = %q, want default web listener", output)
// Web UI is opt-in; with no config it should be omitted entirely.
if strings.Contains(output, "web:") {
t.Fatalf("output = %q, should not list web (disabled by default)", output)
}
}

View file

@ -44,8 +44,10 @@ type fileSyncEntryFile struct {
func Load(layout paths.Layout) (model.DaemonConfig, error) {
cfg := model.DaemonConfig{
LogLevel: "info",
WebListenAddr: "127.0.0.1:7777",
LogLevel: "info",
// Experimental web UI is opt-in: users set web_listen_addr in
// config.toml (e.g. "127.0.0.1:7777") to enable it.
WebListenAddr: "",
AutoStopStaleAfter: 0,
StatsPollInterval: model.DefaultStatsPollInterval,
MetricsPollInterval: model.DefaultMetricsPollInterval,

View file

@ -39,8 +39,8 @@ func TestLoadDefaultsResolveFirecrackerAndGenerateSSHKey(t *testing.T) {
if cfg.DefaultImageName != "debian-bookworm" {
t.Fatalf("DefaultImageName = %q, want debian-bookworm", cfg.DefaultImageName)
}
if cfg.WebListenAddr != "127.0.0.1:7777" {
t.Fatalf("WebListenAddr = %q", cfg.WebListenAddr)
if cfg.WebListenAddr != "" {
t.Fatalf("WebListenAddr default = %q, want empty (experimental web UI is opt-in)", cfg.WebListenAddr)
}
}
@ -48,7 +48,7 @@ func TestLoadAppliesConfigOverrides(t *testing.T) {
configDir := t.TempDir()
data := []byte(`
log_level = "debug"
web_listen_addr = ""
web_listen_addr = "127.0.0.1:8080"
firecracker_bin = "/opt/firecracker"
ssh_key_path = "/tmp/custom-key"
default_image_name = "void"
@ -73,8 +73,8 @@ default_dns = "9.9.9.9"
if cfg.LogLevel != "debug" {
t.Fatalf("LogLevel = %q", cfg.LogLevel)
}
if cfg.WebListenAddr != "" {
t.Fatalf("WebListenAddr = %q, want empty", cfg.WebListenAddr)
if cfg.WebListenAddr != "127.0.0.1:8080" {
t.Fatalf("WebListenAddr = %q, want 127.0.0.1:8080", cfg.WebListenAddr)
}
if cfg.FirecrackerBin != "/opt/firecracker" {
t.Fatalf("FirecrackerBin = %q", cfg.FirecrackerBin)