Gentoo Archives: gentoo-dev

From: Rich Freeman <rich0@g.o>
To: gentoo-dev <gentoo-dev@l.g.o>
Cc: John Helmert III <ajak@g.o>
Subject: Re: [gentoo-dev] You currently cannot smoothly upgrade a 4 months old Gentoo system
Date: Wed, 03 Nov 2021 20:16:33
Message-Id: CAGfcS_kourcLwtjWq1P+kNVuKMNeruLOyms2dF4hb=JdQUi0Lg@mail.gmail.com
In Reply to: Re: [gentoo-dev] You currently cannot smoothly upgrade a 4 months old Gentoo system by Ulrich Mueller
1 On Wed, Nov 3, 2021 at 1:14 PM Ulrich Mueller <ulm@g.o> wrote:
2 >
3 > >>>>> On Wed, 03 Nov 2021, John Helmert wrote:
4 >
5 > >> | https://projects.gentoo.org/council/meeting-logs/20091109-summary.txt
6 > >> |
7 > >> | Upgrade path for old systems
8 > >> | ----------------------------
9 > >> | Vote (unanimous): The ebuild tree must provide an upgrade path to a
10 > >> | stable system that hasn't been updated for one year.
11 >
12 > > Does "upgrade path" imply a simple world upgrade is all that should be
13 > > necessary to upgrade the system? I wouldn't interpret it this way.
14 >
15 > That a "simple world upgrade" was meant is very clear from the full
16 > meeting log, and from the log of the previous 2009-10-12 meeting (open
17 > floor section).
18 >
19
20 It probably would be good to get these policies documented someplace
21 OTHER than the council decision logs. I do remember the discussion
22 from the distant past but it is worth having it in a more prominent
23 place, especially since a one year stable update path is not going to
24 happen by accident.
25
26 I was thinking that it matters way more that @system is updatable than
27 world in general, since @system can be used to bootstrap everything
28 else. However, I think this distinction really doesn't make much of a
29 difference. If your system can't be smoothly updated, it is unlikely
30 to be due to some leaf package like a browser/MUA/etc. Most likely it
31 is due to a widely-used dependency.
32
33 So, by all means require @world to be updatable, but I think that if
34 you focus on the packages in @system you'll basically get the rest for
35 free.
36
37 EAPI 8 came up in a later email and to consolidate replies I'll just
38 say that the issue isn't so much adopting EAPIs in newer packages, but
39 the rush to tidy up old ones that creates the problems. If you have
40 v1/2/3 of a package stable and in the repo, and v3 uses an unsupported
41 EAPI, and v1 is installed, I think portage will (or at least ought to)
42 offer an upgrade from v1 to v2 - it should just not see v3 or consider
43 it in the depgraph. Of course keeping around old versions might
44 require dealing with security issues/etc that impact them. An
45 alternative would be of course to just avoid EAPI updates on @system
46 for a little while, or at least the parts of @system that portage
47 needs to upgrade.
48
49 Having QA tools detect this would be ideal, but right now they could
50 only reliably detect things like newer EAPIs in @system. Since we
51 don't require putting @system dependencies in packages there is no way
52 for a QA tool to tell what is or isn't needed to update portage. Then
53 you have more complex situations like PYTHON_TARGETS, and probably
54 others as well. I had one host that struggled a bit with the xcrypt
55 update for some reason (some weird preserved libs issue or something -
56 libcrypt was still showing up as owned by glibc after updating it and
57 I had to override collisions to get xcrypt to install). When
58 upgrading a system that is completely up to date requires careful
59 following of news items it is going to be painful to execute a whole
60 bunch of updates at once.
61
62 Maybe another path would be to mark milestone repositories for the
63 last year that are easy to update in sequence. So if you have an
64 update that requires manual care, you could mark a milestone just
65 before that update which is easy to get to, and then another one after
66 the update (ideally right before the next difficult update). This
67 would just be a snapshot of portage or a git commit reference, and
68 along with that a commitment to maintain distfiles/etc if they aren't
69 hosted in reliable places (ie patches/etc in devspace).
70
71 Another option might be to have collections of binary packages at key
72 milestones. Sure, they won't be built to a user's specification, but
73 if you have a year old system you could use them to quickly bootstrap
74 it up to something more recent, and then an emerge will rebuild
75 anything that has the wrong USE flags/etc and to bring the system
76 completely up to date. You could even just use those binary packages
77 as a sort of release-based version of the distro.
78
79 Just some things to consider.
80
81 --
82 Rich

Replies