The install script does not accept --next as documented in the Steam Deck
guide. The script actually supports:
- --v2 to install the v2 Go release candidate
- --version (or -V) to specify a release tag
Updated docs/posts/steamdeck_guide.md to document the correct flags that
match what './install --help' actually supports.
Fixes89luca89/distrobox#2147
Co-authored-by: Alessio Biancalana <alessio@dottorblaster.it>
v2's urfave ShellComplete only emitted flags, so `distrobox enter <TAB>`
no longer offered container names.
Wire --image/-i to the compatibility cache too.
This brings shell completion to parity with legacy branch.
Fix#2234
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
A bind mount tracks the inode, not the path. When the host replaces one
of the HOST_WATCH files, the container mount keeps pointing at the
unlinked inode and findmnt reports it with a "//deleted" source. The
keepalive loop only compared file contents, so a byte-identical recreate
left the mount disconnected, and when /run/host exposed the same deleted
peer the content check could never trigger at all.
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
The nvidia integration phase mounts every host nvidia library and driver,
and with xtrace enabled (the entrypoint is always run with --verbose) that
produces thousands of log lines in a short window.
systemd-journald's default rate limit (RateLimitBurst=10000 per 30s) then
drops the tail of the container log, which includes the final
"container_setup_done" marker that distrobox-enter waits for. As a result
entering the container hangs forever at ~0% CPU, even though init finishes
fine.
This is easy to hit on hosts where /usr/lib64 is a symlink to /usr/lib
(merged-lib, e.g. Arch): the nvidia library search then lists every library
twice, which roughly doubles the flood.
Silence tracing for this phase, like commit a20d0b0 did for the keepalive
loop. Measured on an Arch-like host (CachyOS, nvidia 615.71.09, podman +
journald):
no --nvidia : 2789 log lines, marker present, enter completes
--nvidia (before) : 18900 log lines, marker dropped, enter hangs
--nvidia + k8s-file log : completes (no journald rate limit)
--nvidia (after) : 2812 log lines, marker present, enter completes
- scripts.go: ProvisionScripts reuses the helpers if already present, else
extracts into the install dir when writable, otherwise falls back to
$XDG_DATA_HOME/distrobox. Fixes rootless create/enter for a system-wide
install (/usr/local/bin), which died with "permission denied"
- hack/test/nvidia-test.sh: run box ops rootless as the cloud user
- hack/test/vm-run.sh: bump the ubuntu image to resolute.
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
The migrate command introduced a parallel insidedistrobox.ScriptsDir()
that resolved to the old v2 prerelease location
(~/.local/share/distrobox/v2), which was abandoned in 94ae7fa with a
BREAKING CHANGE note. The two resolutions only agree when
DBX_SCRIPTS_DIR is set, which is exactly what the tests do - hiding the
divergence: migrate provisioned and filtered on a different host
directory than the create command mounts into new containers.
- drop insidedistrobox.ScriptsDir(); migrate now provisions and filters
on c.cfg.ScriptsDir, the same resolution the create command uses
- set ScriptsDir on the recreated container's CreateOptions: it was
left empty, which made ProvisionScripts("") fail on real runtimes
- make the scripts-mount filter path-boundary aware
- add an end-to-end migration test driving a fake podman runtime:
v1 inspect JSON in, then compare the recreated container's create
spec to the known-good v2 layout (scripts mounted from the config
scripts dir, distrobox.version label set, v1 helper mounts gone)
Unit tests can't prove the rewritten binary actually works on each supported
distro and on both podman and docker; this exercises the real thing.
Move the tests in a set of simple scripts to run them.
Make a smaller e2e test for CLI and Images that runs on every PR
Keep the full compatibility suite in a separate job for main merge and
manual runs.
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>
Lock down the container-name slug, enter env allow/deny, and podman/docker
ps parsers so provider JSON drift and symlink/env edge cases fail in CI
instead of in the field. Fixtures also capture the known doc/code and
comma-in-label quirks so they're tracked rather than silently accepted.
Signed-off-by: Luca Di Maio <luca.dimaio1@gmail.com>