diff --git a/.cirrus.yml b/.cirrus.yml index 5c7545ea8e..5bd128b978 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -322,7 +322,7 @@ freebsd_alt_build_task: TEST_FLAVOR: "altbuild" ALT_NAME: 'FreeBSD Cross' freebsd_instance: - image_family: freebsd-13-3 + image_family: freebsd-13-4 setup_script: - pkg install -y gpgme bash go-md2man gmake gsed gnugrep go pkgconf zstd build_amd64_script: diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 1d8b7d63ef..f47e4e199b 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -50,6 +50,7 @@ - Fixed a bug where it was possible to specify the `libkrun` backend for VMs on Intel Macs (`libkrun` only supports Arm systems). - Fixed a bug where `libkrun` and `applehv` VMs from `podman machine` could be started at the same time on Macs ([#25112](https://github.com/containers/podman/issues/25112)). - Fixed a bug where `podman exec` commands could not detach from the exec session using the detach keys ([#24895](https://github.com/containers/podman/issues/24895)). +- Fixed a bug where Podman would fail to start due to a database configuration mismatch when certain fields were configured to the empty string ([#24738](https://github.com/containers/podman/issues/24738)). ### API - The Compat and Libpod Build APIs for Images now support a new query parameter, `nohosts`, which (when set to true) does not create `/etc/hosts` in the image when building. diff --git a/docs/source/Reference.rst b/docs/source/Reference.rst index 61dcc64dc1..3f84612907 100644 --- a/docs/source/Reference.rst +++ b/docs/source/Reference.rst @@ -7,6 +7,8 @@ Show the API documentation for version: * `latest (main branch) <_static/api.html>`_ +* `version 5.4 <_static/api.html?version=v5.4>`_ + * `version 5.3 <_static/api.html?version=v5.3>`_ * `version 5.2 <_static/api.html?version=v5.2>`_ diff --git a/libpod/sqlite_state.go b/libpod/sqlite_state.go index 1e979727d1..ea42f8e3e8 100644 --- a/libpod/sqlite_state.go +++ b/libpod/sqlite_state.go @@ -383,6 +383,30 @@ func (s *SQLiteState) ValidateDBConfig(runtime *Runtime) (defErr error) { return fmt.Errorf("retrieving DB config: %w", err) } + // Sometimes, for as-yet unclear reasons, the database value ends up set + // to the empty string. If it does, this evaluation is always going to + // fail, and libpod will be unusable. + // At this point, the check is effectively meaningless - we don't + // actually know the settings we should be checking against. The best + // thing we can do (and what BoltDB did in this case) is to compare + // against the default, on the assumption that is what was in use. + // TODO: We can't remove this code without breaking existing SQLite DBs + // that already have incorrect values in the database, but we should + // investigate why this is happening and try and prevent the creation of + // new databases with these garbage checks. + if graphRoot == "" { + logrus.Debugf("Database uses empty-string graph root, substituting default %q", storeOpts.GraphRoot) + graphRoot = storeOpts.GraphRoot + } + if runRoot == "" { + logrus.Debugf("Database uses empty-string run root, substituting default %q", storeOpts.RunRoot) + runRoot = storeOpts.RunRoot + } + if graphDriver == "" { + logrus.Debugf("Database uses empty-string graph driver, substituting default %q", storeOpts.GraphDriverName) + graphDriver = storeOpts.GraphDriverName + } + checkField := func(fieldName, dbVal, ourVal string, isPath bool) error { if isPath { // Tolerate symlinks when possible - most relevant for OStree systems diff --git a/test/system/005-info.bats b/test/system/005-info.bats index ef1c345b29..4887a89422 100644 --- a/test/system/005-info.bats +++ b/test/system/005-info.bats @@ -305,4 +305,27 @@ EOF run_podman $safe_opts system reset --force } +@test "podman - empty string defaults for certain values" { + skip_if_remote "Test uses nonstandard paths for c/storage directories" + + # We just want this to be empty - so graph driver will be set to the empty string + touch $PODMAN_TMPDIR/storage.conf + + safe_opts=$(podman_isolation_opts ${PODMAN_TMPDIR}) + + # Force all custom directories so we don't pick up an existing database + CONTAINERS_STORAGE_CONF=$PODMAN_TMPDIR/storage.conf run_podman 0+w $safe_opts info + require_warning "The storage 'driver' option should be set" \ + "c/storage should warn on empty storage driver" + + # Now add a valid graph driver to storage.conf + cat >$PODMAN_TMPDIR/storage.conf <