Chrismurphy (talk | contribs) (add change to upgrades) |
(Add trackers) |
||
(21 intermediate revisions by 3 users not shown) | |||
Line 6: | Line 6: | ||
== Owner == | == Owner == | ||
* Name: [[User:chrismurphy| Chris Murphy]], [[User:Salimma|Michel Alexandre Salim]], [[User:Ngompa|Neal Gompa]] | |||
* Email: bugzilla@colorremedies.com, michel@michel-slm.name, ngompa13@gmail.com | |||
* Name: [[User:chrismurphy| Chris Murphy]] | |||
* Email: | |||
<!--- UNCOMMENT only for Changes with assigned Shepherd (by FESCo) | <!--- UNCOMMENT only for Changes with assigned Shepherd (by FESCo) | ||
* FESCo shepherd: [[User:FASAccountName| Shehperd name]] <email address> | * FESCo shepherd: [[User:FASAccountName| Shehperd name]] <email address> | ||
--> | --> | ||
== Current status == | == Current status == | ||
[[Category: | [[Category:ChangeAcceptedF36]] | ||
[[Category:SystemWideChange]] | [[Category:SystemWideChange]] | ||
Line 39: | Line 25: | ||
ON_QA -> change is fully code complete | ON_QA -> change is fully code complete | ||
--> | --> | ||
* FESCo issue: | * [https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/G6LFNGOXZXFWZM3IWT6MLZWGMNSIZCWM/ devel thread] | ||
* Tracker bug: | * FESCo issue: [https://pagure.io/fesco/issue/2731 #2731] | ||
* Release notes tracker: | * Tracker bug: [https://bugzilla.redhat.com/show_bug.cgi?id=2042099 #2042099] | ||
* Release notes tracker: [https://pagure.io/fedora-docs/release-notes/issue/791 #791] | |||
== Detailed Description == | == Detailed Description == | ||
Line 52: | Line 39: | ||
<code>/var/lib/rpm</code> will be a symlink pointing to <code>/usr/lib/sysimage/rpm</code> | <code>/var/lib/rpm</code> will be a symlink pointing to <code>/usr/lib/sysimage/rpm</code> | ||
Changing the file system layout to accommodate a snapshot+rollback regime is implied, but not required by this proposal. For example, Fedora has long placed `/home` on a separate subvolume (or file system) so it can be isolated from system root. Likewise, it makes sense to isolate `/var/log` and possibly `/var/lib/libvirt/images` so these locations continue to carry forward in time, even if the system root does a rollback. | |||
* The RPM database primarily describes the state of `/usr`. Storing the databases in `/usr` will more easily facilitate OS snapshots and rollback, without affecting `/var`. | |||
* The need for moving rpmdb to /usr was brought up in a [http://lists.rpm.org/pipermail/rpm-maint/2017-October/006681.html 2017 thread] on the upstream rpm-maint@ list. Various locations for rpmdb (and similar databases) is discussed in the thread, with the end result being `/usr/lib/sysimage/rpm`. | |||
* There's upstream RPM, rpm-ostree, and (open)SUSE agreement for this location. | |||
Note: Changing the file system layout to accommodate a snapshot+rollback regime is implied, but not required by this proposal. For example, Fedora has long placed `/home` on a separate subvolume (or file system) so it can be isolated from system root. Likewise, it makes sense to isolate `/var/log` and possibly `/var/lib/libvirt/images` so these locations continue to carry forward in time, even if the system root does a rollback. | |||
== Feedback == | == Feedback == | ||
Line 58: | Line 51: | ||
There will be no change to DNF as part of this change proposal. DNF's history will remain in `/var` until DNF 5. Discussion continues about the effect of a snapshot+rollback regime on DNF history. [http://lists.rpm.org/pipermail/rpm-ecosystem/2021-December/000769.html Relocate DNF history to /usr.] | There will be no change to DNF as part of this change proposal. DNF's history will remain in `/var` until DNF 5. Discussion continues about the effect of a snapshot+rollback regime on DNF history. [http://lists.rpm.org/pipermail/rpm-ecosystem/2021-December/000769.html Relocate DNF history to /usr.] | ||
Upstream RPM | Upstream RPM accepts the change, but institutionally don't like the loss or weakening of a [http://lists.rpm.org/pipermail/rpm-ecosystem/2021-December/000781.html very well known location] for the database, and [http://lists.rpm.org/pipermail/rpm-ecosystem/2021-December/000781.html anticipate complaints]. | ||
== Benefit to Fedora == | == Benefit to Fedora == | ||
* Helps align Fedora variants with each other | * Helps align Fedora variants with each other | ||
** rpm-ostree based systems (including CoreOS, IoT, Silverblue, Kinoite) already use `/usr/lib/sysimage` for rpmdb. | ** rpm-ostree based systems (including CoreOS, IoT, Silverblue, Kinoite) already use `/usr/lib/sysimage` for rpmdb. | ||
* Consistency with another RPM-based distro, (open)SUSE have made this change. | |||
* Consistency with another RPM-based distro, (open)SUSE | * Accounts for various snapshot+rollback regimes, i.e. it's a beneficial change whether Btrfs or device-mapper based. | ||
* Is a preparatory step to support boot-to-snapshot and transactional update methods for dealing with problematic updates and upgrades. | |||
* Accounts for various snapshot+rollback regimes, i.e. it's a beneficial change whether Btrfs or device-mapper based | |||
Line 78: | Line 68: | ||
*** create the new path | *** create the new path | ||
*** create a symlink for the old path pointing to new path | *** create a symlink for the old path pointing to new path | ||
* Other developers: | |||
* Other developers: | |||
** changes in SElinux policy | ** changes in SElinux policy | ||
** tracking bug for supermin: test if a package has been installed/updated/removed so that we can rebuild our cache | |||
** tracking bug for libguestfs: build a "phony" Fedora image for testing with a fake RPM database | |||
** possible bug in DNF when doing `dnf list` which writes to one or more rpmdb files (these might be file metadata changes not file data changes) | |||
* Release engineering: [https://pagure.io/releng/issue/10441 #Releng issue 10441] | * Release engineering: [https://pagure.io/releng/issue/10441 #Releng issue 10441] | ||
* Policies and guidelines: N/A (not needed for this Change) | * Policies and guidelines: N/A (not needed for this Change) | ||
* Trademark approval: N/A (not needed for this Change) | * Trademark approval: N/A (not needed for this Change) | ||
* Alignment with Objectives: | |||
== Upgrade/compatibility impact == | == Upgrade/compatibility impact == | ||
Line 98: | Line 85: | ||
Change will be applied to offline upgrades, similar to the RPM sqlite database change. A systemd service will move the rpmdb from /var to /usr, then create a symlink pointing to /usr from /var. | Change will be applied to offline upgrades, similar to the RPM sqlite database change. A systemd service will move the rpmdb from /var to /usr, then create a symlink pointing to /usr from /var. | ||
# Create `/usr/lib/sysimage/rpm` (rpm package will do this at preinst) | |||
# Create symlinks in `/usr/lib/sysimage/rpm/` pointing to files in `/var/lib/rpm/` (rpm package will do this at preinst) | |||
# Change the dbpath in `/usr/lib/rpm/macros` to `/usr/lib/sysimage/rpm` (rpm package will be patched to do this on F36+) | |||
# Request rpm rebuild the database (done via systemd service) | |||
# Remove `/var/lib/rpm` and create a symlink `/var/lib/rpm` -> `/usr/lib/sysimage/rpm` (done via systemd service) | |||
<!-- REQUIRED FOR SYSTEM WIDE CHANGES --> | <!-- REQUIRED FOR SYSTEM WIDE CHANGES --> | ||
== How To Test == | == How To Test == | ||
<!-- REQUIRED FOR SYSTEM WIDE CHANGES --> | <!-- REQUIRED FOR SYSTEM WIDE CHANGES --> | ||
# Perform a new clean install, or upgrade a system | |||
# Check that `/var/lib/rpm` is a symlink to `/usr/lib/sysimage/rpm` | |||
# Check that `/usr/lib/sysimage/rpm` is populated with at least `rpmdb.sqlite`, possibly also `rpmdb.sqlite-shm` and `rpmdb.sqlite-wal` | |||
# Confirm `rpm -q <package>` and/or `rpm -qa` still work | |||
== User Experience == | == User Experience == | ||
* symlink `/var/lib/rpm` -> `/usr/lib/sysimage/rpm` | |||
Otherwise, the change should be invisible to users. | Otherwise, the change should be invisible to users. | ||
== Dependencies == | == Dependencies == | ||
Line 133: | Line 111: | ||
* `rpm-ostree` probably should make `/usr/share/rpm` a symlink to `/usr/lib/sysimage/rpm`, rather than the reverse as it is currently. | * `rpm-ostree` probably should make `/usr/share/rpm` a symlink to `/usr/lib/sysimage/rpm`, rather than the reverse as it is currently. | ||
* `PackageKit` might use inotify on `/var/lib/rpm` need to check if it does and whether it should be changed or add the additional path | * `PackageKit` might use inotify on `/var/lib/rpm` need to check if it does and whether it should be changed or add the additional path | ||
<!-- REQUIRED FOR SYSTEM WIDE CHANGES --> | <!-- REQUIRED FOR SYSTEM WIDE CHANGES --> |
Latest revision as of 19:58, 18 January 2022
Relocate RPM database to /usr
Summary
Currently, the RPM databases is located in /var
. Let's move it to /usr
. The move is already under way in rpm-ostree-based installations, and in (open)SUSE.
Owner
- Name: Chris Murphy, Michel Alexandre Salim, Neal Gompa
- Email: bugzilla@colorremedies.com, michel@michel-slm.name, ngompa13@gmail.com
Current status
- Targeted release: Fedora Linux 36
- Last updated: 2022-01-18
- devel thread
- FESCo issue: #2731
- Tracker bug: #2042099
- Release notes tracker: #791
Detailed Description
Current location
/var/lib/rpm
New location
/usr/lib/sysimage/rpm
/var/lib/rpm
will be a symlink pointing to /usr/lib/sysimage/rpm
- The RPM database primarily describes the state of
/usr
. Storing the databases in/usr
will more easily facilitate OS snapshots and rollback, without affecting/var
. - The need for moving rpmdb to /usr was brought up in a 2017 thread on the upstream rpm-maint@ list. Various locations for rpmdb (and similar databases) is discussed in the thread, with the end result being
/usr/lib/sysimage/rpm
. - There's upstream RPM, rpm-ostree, and (open)SUSE agreement for this location.
Note: Changing the file system layout to accommodate a snapshot+rollback regime is implied, but not required by this proposal. For example, Fedora has long placed /home
on a separate subvolume (or file system) so it can be isolated from system root. Likewise, it makes sense to isolate /var/log
and possibly /var/lib/libvirt/images
so these locations continue to carry forward in time, even if the system root does a rollback.
Feedback
There will be no change to DNF as part of this change proposal. DNF's history will remain in /var
until DNF 5. Discussion continues about the effect of a snapshot+rollback regime on DNF history. Relocate DNF history to /usr.
Upstream RPM accepts the change, but institutionally don't like the loss or weakening of a very well known location for the database, and anticipate complaints.
Benefit to Fedora
- Helps align Fedora variants with each other
- rpm-ostree based systems (including CoreOS, IoT, Silverblue, Kinoite) already use
/usr/lib/sysimage
for rpmdb.
- rpm-ostree based systems (including CoreOS, IoT, Silverblue, Kinoite) already use
- Consistency with another RPM-based distro, (open)SUSE have made this change.
- Accounts for various snapshot+rollback regimes, i.e. it's a beneficial change whether Btrfs or device-mapper based.
- Is a preparatory step to support boot-to-snapshot and transactional update methods for dealing with problematic updates and upgrades.
Scope
- Proposal owners:
- changes in rpm package
- create the new path
- create a symlink for the old path pointing to new path
- changes in rpm package
- Other developers:
- changes in SElinux policy
- tracking bug for supermin: test if a package has been installed/updated/removed so that we can rebuild our cache
- tracking bug for libguestfs: build a "phony" Fedora image for testing with a fake RPM database
- possible bug in DNF when doing
dnf list
which writes to one or more rpmdb files (these might be file metadata changes not file data changes)
- Release engineering: #Releng issue 10441
- Policies and guidelines: N/A (not needed for this Change)
- Trademark approval: N/A (not needed for this Change)
- Alignment with Objectives:
Upgrade/compatibility impact
Change will be applied to offline upgrades, similar to the RPM sqlite database change. A systemd service will move the rpmdb from /var to /usr, then create a symlink pointing to /usr from /var.
- Create
/usr/lib/sysimage/rpm
(rpm package will do this at preinst) - Create symlinks in
/usr/lib/sysimage/rpm/
pointing to files in/var/lib/rpm/
(rpm package will do this at preinst) - Change the dbpath in
/usr/lib/rpm/macros
to/usr/lib/sysimage/rpm
(rpm package will be patched to do this on F36+) - Request rpm rebuild the database (done via systemd service)
- Remove
/var/lib/rpm
and create a symlink/var/lib/rpm
->/usr/lib/sysimage/rpm
(done via systemd service)
How To Test
- Perform a new clean install, or upgrade a system
- Check that
/var/lib/rpm
is a symlink to/usr/lib/sysimage/rpm
- Check that
/usr/lib/sysimage/rpm
is populated with at leastrpmdb.sqlite
, possibly alsorpmdb.sqlite-shm
andrpmdb.sqlite-wal
- Confirm
rpm -q <package>
and/orrpm -qa
still work
User Experience
- symlink
/var/lib/rpm
->/usr/lib/sysimage/rpm
Otherwise, the change should be invisible to users.
Dependencies
rpm-ostree
probably should make/usr/share/rpm
a symlink to/usr/lib/sysimage/rpm
, rather than the reverse as it is currently.PackageKit
might use inotify on/var/lib/rpm
need to check if it does and whether it should be changed or add the additional path
Contingency Plan
- Contingency mechanism: Revert the change, try again the next Fedora release.
- Contingency deadline: Beta freeze
- Blocks release? Yes