Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package podman for openSUSE:Factory checked in at 2026-03-17 19:02:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/podman (Old) and /work/SRC/openSUSE:Factory/.podman.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "podman" Tue Mar 17 19:02:20 2026 rev:168 rq:1339204 version:5.8.1 Changes: -------- --- /work/SRC/openSUSE:Factory/podman/podman.changes 2026-02-26 18:50:52.719089652 +0100 +++ /work/SRC/openSUSE:Factory/.podman.new.8177/podman.changes 2026-03-17 19:03:13.505507745 +0100 @@ -1,0 +2,15 @@ +Thu Mar 12 16:14:32 UTC 2026 - Danish Prakash <[email protected]> + +- Update to version 5.8.1: + * Bump to v5.8.1 + * Release notes for v5.8.1 + * docs: make the --migrate-db more clear + * update boltdb migrating warning + * libpod: prefer sqlite in getDBState() + * libpod: fix parallel migration issue + * libpod: return full path in sqliteStatePath() + * migrate to oidc + * Bump Podman to v5.8.1-dev + * Disable lint to fix CI + +------------------------------------------------------------------- Old: ---- podman-5.8.0.obscpio New: ---- podman-5.8.1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ podman.spec ++++++ --- /var/tmp/diff_new_pack.pWn5Ob/_old 2026-03-17 19:03:14.625554162 +0100 +++ /var/tmp/diff_new_pack.pWn5Ob/_new 2026-03-17 19:03:14.629554328 +0100 @@ -22,7 +22,7 @@ %bcond_without apparmor Name: podman -Version: 5.8.0 +Version: 5.8.1 Release: 0 Summary: Daemon-less container engine for managing containers, pods and images License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.pWn5Ob/_old 2026-03-17 19:03:14.689556815 +0100 +++ /var/tmp/diff_new_pack.pWn5Ob/_new 2026-03-17 19:03:14.701557312 +0100 @@ -2,7 +2,7 @@ <service name="obs_scm" mode="manual"> <param name="url">https://github.com/containers/podman.git</param> <param name="scm">git</param> - <param name="revision">v5.8.0</param> + <param name="revision">v5.8.1</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*)</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.pWn5Ob/_old 2026-03-17 19:03:14.745559135 +0100 +++ /var/tmp/diff_new_pack.pWn5Ob/_new 2026-03-17 19:03:14.757559633 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/containers/podman.git</param> - <param name="changesrevision">07efc23e05c3d9aa15a0f30d57194737bfc4b6b1</param></service></servicedata> + <param name="changesrevision">c6077f645788743258a1a749f8005b4fb3cbe533</param></service></servicedata> (No newline at EOF) ++++++ podman-5.8.0.obscpio -> podman-5.8.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/podman-5.8.0/.cirrus.yml new/podman-5.8.1/.cirrus.yml --- old/podman-5.8.0/.cirrus.yml 2026-02-12 16:41:26.000000000 +0100 +++ new/podman-5.8.1/.cirrus.yml 2026-03-11 14:31:04.000000000 +0100 @@ -74,7 +74,10 @@ gcp_credentials: ENCRYPTED[a28959877b2c9c36f151781b0a05407218cda646c7d047fc556e42f55e097e897ab63ee78369dae141dcf0b46a9d0cdd] -aws_credentials: ENCRYPTED[b4127fef212e5bc38dd3d96eff17440f2c62d6d04219fa97fa7acdcd81475352e70a34863705b5e01289fdc4012d5ee2] +aws_credentials: + role_arn: arn:aws:iam::449134212816:role/podman-ci-role + role_session_name: cirrus + region: us-east-1 validate-source_task: @@ -295,8 +298,6 @@ # This host is/was shared with potentially many other CI tasks. # The previous task may have been canceled or aborted. prep_script: &mac_cleanup "contrib/cirrus/mac_cleanup.sh" - lint_script: - - make golangci-lint basic_build_script: - make .install.ginkgo - make podman-remote diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/podman-5.8.0/RELEASE_NOTES.md new/podman-5.8.1/RELEASE_NOTES.md --- old/podman-5.8.0/RELEASE_NOTES.md 2026-02-12 16:41:26.000000000 +0100 +++ new/podman-5.8.1/RELEASE_NOTES.md 2026-03-11 14:31:04.000000000 +0100 @@ -1,5 +1,9 @@ # Release Notes +## 5.8.1 +### Bugfixes +- Fixed a critical bug where automatic migration from BoltDB to SQLite after a reboot could perform a partial migration, with some containers in SQLite and some remaining in BoltDB, when Quadlets were in use ([#28215](https://github.com/containers/podman/issues/28216)). For those who encountered this bug with 5.8.0 there is no way to automatically recover. If you do not have persistent containers/pods/volumes (i.e. all containers are run using Quadlets) then the easiest option is to move the `db.sql` file in Podman's storage directory to `db.sql.bak` (or similar) and reboot again with v5.8.1 to attempt another migration. Please contact the maintainers with any issues during migration and we will assist as able. + ## 5.8.0 ### Features - The `podman quadlet install` command can now install files which contain multiple separate Quadlet files. The files must be separated with a `---` delimeter on a new line, and each section must begin with a `# FileName=<name>` line to name the new Quadlet ([#27384](https://github.com/containers/podman/pull/27384)). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/podman-5.8.0/docs/source/markdown/podman-system-migrate.1.md new/podman-5.8.1/docs/source/markdown/podman-system-migrate.1.md --- old/podman-5.8.0/docs/source/markdown/podman-system-migrate.1.md 2026-02-12 16:41:26.000000000 +0100 +++ new/podman-5.8.1/docs/source/markdown/podman-system-migrate.1.md 2026-03-11 14:31:04.000000000 +0100 @@ -31,9 +31,11 @@ Migrate from the legacy BoltDB database to SQLite. Support for BoltDB will be removed in Podman 6.0. Podman will display a warning if this migration is necessary. -To ensure complete migration, all other Podman commands should be shut down before database migration. +To ensure complete migration, all other Podman commands must be shut down before database migration. In particular, systemd-activated services like **podman system service** and Quadlets should be manually stopped prior to migration. -The legacy database will not be removed, so no data loss should occur even on failure. +If you are unsure please reboot instead and run any podman command afterwards which will trigger the migration +automatically as we can ensure there that no other parallel commands can interfere with the database. +The legacy database will not be removed, just renamed, so no permanent data loss should occur even on failure. #### **--new-runtime**=*runtime* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/podman-5.8.0/libpod/runtime.go new/podman-5.8.1/libpod/runtime.go --- old/podman-5.8.0/libpod/runtime.go 2026-02-12 16:41:26.000000000 +0100 +++ new/podman-5.8.1/libpod/runtime.go 2026-03-11 14:31:04.000000000 +0100 @@ -305,10 +305,23 @@ // get default boltdb path boltDBPath := getBoltDBPath(runtime) + sqlitePath := sqliteStatePath(runtime) switch backend { case config.DBBackendDefault: - // for backwards compatibility check if boltdb exists, if it does not we use sqlite + // First check if we have a sqlite file, then we know we must use sqlite. + if err := fileutils.Exists(sqlitePath); err == nil { + // need to set DBBackend string so podman info will show the backend name correctly + runtime.config.Engine.DBBackend = config.DBBackendSQLite.String() + return NewSqliteState(runtime) + } else if !errors.Is(err, fs.ErrNotExist) { + // Return error here some other problem with the sqlite file, rather than silently + // switch to boltdb which would be hard to debug for the user return the error back + // as this likely a real bug. + return nil, err + } + + // for backwards compatibility check if boltdb exists, if it does not we also use sqlite if err := fileutils.Exists(boltDBPath); err != nil { if errors.Is(err, fs.ErrNotExist) { // need to set DBBackend string so podman info will show the backend name correctly @@ -372,6 +385,9 @@ return fmt.Errorf("creating runtime volume path directory: %w", err) } + // Must be set before getDBState() as this will override it otherwise. + originalDBConfig := runtime.config.Engine.DBBackend + // Set up the state. runtime.state, err = getDBState(runtime) if err != nil { @@ -642,10 +658,20 @@ if err2 := runtime.refresh(ctx, runtimeAliveFile); err2 != nil { return err2 } - } else if os.Getenv("SUPPRESS_BOLTDB_WARNING") == "" && os.Getenv("CI_DESIRED_DATABASE") != "boltdb" && runtime.state.Type() == "boltdb" { - // Only warn about the database if we're not refreshing the state. - // Refresh will attempt an automatic migration. - logrus.Warnf("The deprecated BoltDB database driver is in use. This driver will be removed in the upcoming Podman 6.0 release in mid 2026. It is advised that you migrate to SQLite to avoid issues when this occurs using the `podman system migrate --migrate-db` command. Set SUPPRESS_BOLTDB_WARNING environment variable to remove this message.") + } else if runtime.state.Type() == "boltdb" { + if originalDBConfig == "" && fileutils.Exists(sqliteStatePath(runtime)) == nil { + // Another process must have migrated to sqlite in parallel, boltdb is now invalid so switch the state to sqlite. + // Ignore errors as there is nothing we can do about them at this point. + _ = runtime.state.Close() + runtime.state, err = NewSqliteState(runtime) + if err != nil { + return fmt.Errorf("failed to load sqlite state after detecting database migration: %w", err) + } + } else if os.Getenv("SUPPRESS_BOLTDB_WARNING") == "" && os.Getenv("CI_DESIRED_DATABASE") != "boltdb" { + // Only warn about the database if we're not refreshing the state. + // Refresh will attempt an automatic migration. + logrus.Warnf("The deprecated BoltDB database driver is in use. This driver will be removed in the upcoming Podman 6.0 release in mid 2026. It is advised that you migrate to SQLite to avoid issues when this occurs by rebooting and running podman again or using the `podman system migrate --migrate-db` command. IMPORTANT, only use that command when you can ensure they will be no parallel podman processes running, if you are unsure do the reboot. Set SUPPRESS_BOLTDB_WARNING environment variable to remove this message.") + } } // Check current boot ID - will be written to the alive file. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/podman-5.8.0/libpod/runtime_migrate.go new/podman-5.8.1/libpod/runtime_migrate.go --- old/podman-5.8.0/libpod/runtime_migrate.go 2026-02-12 16:41:26.000000000 +0100 +++ new/podman-5.8.1/libpod/runtime_migrate.go 2026-03-11 14:31:04.000000000 +0100 @@ -139,8 +139,7 @@ func (r *Runtime) migrateDB() error { // Does the SQLite state already exist? - dbBasePath, dbFilename := sqliteStatePath(r) - dbPath := filepath.Join(dbBasePath, dbFilename) + dbPath := sqliteStatePath(r) if err := fileutils.Exists(dbPath); err == nil { return fmt.Errorf("a SQLite database already exists at %s, refusing to overwrite", dbPath) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/podman-5.8.0/libpod/sqlite_state.go new/podman-5.8.1/libpod/sqlite_state.go --- old/podman-5.8.0/libpod/sqlite_state.go 2026-02-12 16:41:26.000000000 +0100 +++ new/podman-5.8.1/libpod/sqlite_state.go 2026-03-11 14:31:04.000000000 +0100 @@ -45,7 +45,7 @@ sqliteOptionCaseSensitiveLike = "&_cslike=TRUE" // Assembled sqlite options used when opening the database. - sqliteOptions = sqliteDbFilename + "?" + + sqliteOptions = "?" + sqliteOptionLocation + sqliteOptionSynchronous + sqliteOptionForeignKeys + @@ -58,12 +58,12 @@ logrus.Info("Using sqlite as database backend") state := new(SQLiteState) - basePath, _ := sqliteStatePath(runtime) + dbPath := sqliteStatePath(runtime) // c/storage is set up *after* the DB - so even though we use the c/s // root (or, for transient, runroot) dir, we need to make the dir // ourselves. - if err := os.MkdirAll(basePath, 0o700); err != nil { + if err := os.MkdirAll(filepath.Dir(dbPath), 0o700); err != nil { return nil, fmt.Errorf("creating root directory: %w", err) } @@ -78,7 +78,7 @@ } sqliteOptionBusyTimeout := "&_busy_timeout=" + busyTimeout - conn, err := sql.Open("sqlite3", filepath.Join(basePath, sqliteOptions+sqliteOptionBusyTimeout)) + conn, err := sql.Open("sqlite3", dbPath+sqliteOptions+sqliteOptionBusyTimeout) if err != nil { return nil, fmt.Errorf("initializing sqlite database: %w", err) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/podman-5.8.0/libpod/sqlite_state_internal.go new/podman-5.8.1/libpod/sqlite_state_internal.go --- old/podman-5.8.0/libpod/sqlite_state_internal.go 2026-02-12 16:41:26.000000000 +0100 +++ new/podman-5.8.1/libpod/sqlite_state_internal.go 2026-03-11 14:31:04.000000000 +0100 @@ -7,6 +7,7 @@ "errors" "fmt" "os" + "path/filepath" "strings" "github.com/containers/podman/v5/libpod/define" @@ -17,16 +18,15 @@ _ "github.com/mattn/go-sqlite3" ) -// Returns two strings. First is base path - directory we'll create in. -// Second is the filename of the database itself. -func sqliteStatePath(runtime *Runtime) (string, string) { +// sqliteStatePath returns the path to the sqlite file. +func sqliteStatePath(runtime *Runtime) string { basePath := runtime.storageConfig.GraphRoot if runtime.storageConfig.TransientStore { basePath = runtime.storageConfig.RunRoot } else if !runtime.storageSet.StaticDirSet { basePath = runtime.config.Engine.StaticDir } - return basePath, sqliteDbFilename + return filepath.Join(basePath, sqliteDbFilename) } func initSQLiteDB(conn *sql.DB) (defErr error) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/podman-5.8.0/test/e2e/info_test.go new/podman-5.8.1/test/e2e/info_test.go --- old/podman-5.8.0/test/e2e/info_test.go 2026-02-12 16:41:26.000000000 +0100 +++ new/podman-5.8.1/test/e2e/info_test.go 2026-03-11 14:31:04.000000000 +0100 @@ -196,12 +196,9 @@ // default should be sqlite {arg: "", want: "sqlite"}, {arg: "boltdb", want: "boltdb"}, - // now because a boltdb exists it should use boltdb when default is requested - {arg: "", want: "boltdb"}, + // now when both boltdb and sqlite exists it should use sqlite when default is requested + {arg: "", want: "sqlite"}, {arg: "sqlite", want: "sqlite"}, - // just because we requested sqlite doesn't mean it stays that way. - // once a boltdb exists, podman will forevermore stick with it - {arg: "", want: "boltdb"}, } for _, tt := range backends { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/podman-5.8.0/version/rawversion/version.go new/podman-5.8.1/version/rawversion/version.go --- old/podman-5.8.0/version/rawversion/version.go 2026-02-12 16:41:26.000000000 +0100 +++ new/podman-5.8.1/version/rawversion/version.go 2026-03-11 14:31:04.000000000 +0100 @@ -4,4 +4,4 @@ // // This indirection is needed to prevent semver packages from bloating // Quadlet's binary size. -const RawVersion = "5.8.0" +const RawVersion = "5.8.1" ++++++ podman.obsinfo ++++++ --- /var/tmp/diff_new_pack.pWn5Ob/_old 2026-03-17 19:03:29.334163712 +0100 +++ /var/tmp/diff_new_pack.pWn5Ob/_new 2026-03-17 19:03:29.350164374 +0100 @@ -1,5 +1,5 @@ name: podman -version: 5.8.0 -mtime: 1770910886 -commit: 07efc23e05c3d9aa15a0f30d57194737bfc4b6b1 +version: 5.8.1 +mtime: 1773235864 +commit: c6077f645788743258a1a749f8005b4fb3cbe533
