Rolling Back a Rolling Release with Gentoo Build Publisher

Let's say you've upgraded to tracker-3.4 and it doesn't work. You could mask tracker-3.4, but it depends on tracker-miners-3.4 so you'll have to mask that too. There may be other dependencies that you'd have to mask too. What you'd really rather do is go back in time. Let's see how we can do this with Gentoo Build Publisher.

See where you are now.

$ gbp list lighthouse
...
[*   ] 10466 09/24/22 07:43:16
[*   ] 10469 09/24/22 10:09:51
[* P ] 10471 09/24/22 11:55:14

We're currently at build 10471 and we think that's the one that pulled in tracker-3.4. Let's be sure:

$ gbp status lighthouse 10471
Build: lighthouse/10471
BuildDate: Sat Sep 24 11:43:45 2022 -0500
Submitted: Sat Sep 24 11:55:14 2022 -0500
Completed: Sat Sep 24 11:59:01 2022 -0500
Published: yes
Keep: no
Tags: 
Packages-built:
    app-misc/tracker-3.4.0
    app-misc/tracker-miners-3.4.0
    gnome-extra/gnome-user-docs-43.0
    gui-libs/libwpe-1.14.0
    gui-libs/wpebackend-fdo-1.14.0
    media-gfx/eog-43.0
    media-gfx/gnome-font-viewer-43.0
    net-libs/glib-networking-2.74.0

Yes, that's the one. Let's see what would happen if we went back from build 10471 to 10469:

$ gbp diff lighthouse 10471 10469
diff -r lighthouse/10471 lighthouse/10469
--- a/lighthouse/10471 Sat Sep 24 11:43:45 2022 -0500
+++ b/lighthouse/10469 Sat Sep 24 10:04:09 2022 -0500
-app-misc/tracker-3.4.0-1
+app-misc/tracker-3.3.3-4
-app-misc/tracker-miners-3.4.0-1
+app-misc/tracker-miners-3.3.1-3
-gnome-extra/gnome-user-docs-43.0-1
+gnome-extra/gnome-user-docs-42.0-2
-gui-libs/libwpe-1.14.0-1
+gui-libs/libwpe-1.12.3-1
-gui-libs/wpebackend-fdo-1.14.0-1
+gui-libs/wpebackend-fdo-1.12.1-1
-media-gfx/eog-43.0-1
+media-gfx/eog-42.3-3
-media-gfx/gnome-font-viewer-43.0-1
+media-gfx/gnome-font-viewer-42.0-3
-net-libs/glib-networking-2.74.0-1
+net-libs/glib-networking-2.72.2-3

Ok, that would downgrade tracker and tracker-miners (and some other things). Let's assume that's what we want. So how do we go back? Easy:

$ gbp publish lighthouse 10469

This points Gentoo Build Publisher at build 10469. However we'll need to emerge --sync to point our local portage to it. However portage, by default, won't let us go back in time.

$ sudo emerge --sync --quiet

>>>
>>> SERVER OUT OF DATE: rsync://gbp/repos/lighthouse/gentoo
>>>
>>> In order to force sync, remove '/var/db/repos/gentoo/metadata/timestamp.chk'.
>>>

No need to worry. It even tells us what to do.

$ sudo rm /var/db/repos/gentoo/metadata/timestamp.chk
$ sudo emerge --sync --quiet

Then we can do an emerge "update" as usual:

$ sudo emerge -DuvaN --getbinpkg @world

These are the packages that would be merged, in order:

Calculating dependencies... done!
[binary  N     ] app-portage/elt-patches-20220831-1::gentoo  54 KiB
[binary     UD ] gui-libs/libwpe-1.12.3-1:1.0::gentoo [1.14.0:1.0::gentoo] 66 KiB
[binary     UD ] gui-libs/wpebackend-fdo-1.12.1-1:1.0::gentoo [1.14.0:1.0::gentoo] 57 KiB
[binary     UD ] net-libs/glib-networking-2.72.2-3::gentoo [2.74.0::gentoo] USE="gnome ssl -libproxy -test" 162 KiB
[ebuild     UD ] gnome-extra/gnome-user-docs-42.0::gentoo [43.0::gentoo] USE="-test" 0 KiB
[binary     UD ] app-misc/tracker-3.3.3-4:3/0::gentoo [3.4.0:3/0::gentoo] USE="-gtk-doc -miners -stemmer -test" 752 KiB
[binary     UD ] app-misc/tracker-miners-3.3.1-3:3::gentoo [3.4.0:3::gentoo] USE="(seccomp) -cue -exif -ffmpeg -gif -gsf -gstreamer -iptc -iso -jpeg -networkmanager -pdf -playlist -raw -rss -test -tiff -upower -xml -xmp -xps" 683 KiB
[binary     UD ] media-gfx/eog-42.3-3:1::gentoo [43.0:1::gentoo] USE="exif introspection jpeg svg -gtk-doc -lcms -tiff -xmp" 1,181 KiB
[binary     UD ] media-gfx/gnome-font-viewer-42.0-3::gentoo [43.0::gentoo] 179 KiB

Total: 9 packages (8 downgrades, 1 new, 8 binaries), Size of downloads: 3,132 KiB

Would you like to merge these packages? [Yes/No]

We might want to tag this build as well.

$ gbp tag lighthouse 10469 good-tracker

In a subsequent article we'll explore using tags with Gentoo Build Publisher.