Gentoo Archives: gentoo-dev

From: "Kevin F. Quinn" <kevquinn@g.o>
To: gentoo-dev@l.g.o
Subject: Re: [gentoo-dev] Portage Sets
Date: Tue, 29 Aug 2006 14:25:03
Message-Id: 20060829162220.7cf8e735@c1358217.kevquinn.com
In Reply to: [gentoo-dev] Portage Sets by Alec Warner
1 On Tue, 29 Aug 2006 07:57:43 -0400
2 Alec Warner <antarus@g.o> wrote:
3
4 > So I have implemented merging of sets (more or less) in a local
5 > portage branch.
6
7 Could you elaborate how the implementation of sets would differ from:
8
9 # emerge $(cat /var/lib/portage/myset)
10
11 where /var/lib/portage/myset is a file containing a list of atoms?
12 That would help in thinking what the behaviour could be.
13
14 I'm thinking that perhaps you do everything up to but not including
15 qmerge for all packages then do the qmerge phase for the set in one go,
16 provided they all got to install ok. It might be useful to try to move
17 all actions that might fail during qmerge to the end of the install
18 phase (I'm thinking things like collision-detection, qa checks), so
19 that the only reason qmerge on the set would fail is lack of disk space.
20
21 Obviously that's simplifying somewhat - if there are build-time DEPEND
22 relationships between elements of the set, the set has to be broken
23 down into sub-sets that don't have such internal dependencies. However
24 I can't think of much else you would do with sets that the $(cat
25 <file>) approach doesn't already supply. Alternatively you could
26 require that sets must not have such internal dependencies.
27
28 > However there are some use cases for which the
29 > appopriate action is ambiguous.
30 >
31 > Use Case #1:
32 > Set1 = { postfix, gentoolkit, lsof, bind-utils, vixie-cron }
33 >
34 > A set of standard tools to be on a machine. Assume a new install (ie
35 > none of the packages in Set1 are installed). Is it an error if one of
36 > the packages in the set is masked or unavailable? In this case I
37 > would say yes; if you instead just skip the masked package (say
38 > postfix in this case because it's convenient ) vixie-cron will pull
39 > ssmtp instead of postfix.
40 >
41 > Of course this will also occur if postfix is after vixie-cron in the
42 > set; but for our purposes we will assume the administrator put them in
43 > this order such that postfix will get pulled in.
44 >
45 > One could also say that the user should have used emerge -pv set1 and
46 > noticed that ssmtp is being pulled in instead of postfix.
47 >
48 > Use Case #2:
49 >
50 > Set1 = cat /var/lib/portage/world (the world set)
51 >
52 > Assume the world file has 100 packages in it, two which are masked,
53 > and three of which there are no ebuilds in the tree for. If missing
54 > packages cause an error (which in use case 1 they should imho) then
55 > the user cannot update world without unmasking things properly. The
56 > packages for which ebuilds are missing in the tree is in fact a
57 > portage bug(I think), and will probably need to be fixed.
58
59 For the initial merge case then an error before anything is merged is
60 good. For an upgrade merge, a warning would be more appropriate
61 (perhaps becoming an error with FEATURES=stricter or similar).
62
63 > Other use cases for sets would be appreciated, as far as behavior. It
64 > would probably be best to provide some sort of switch.
65
66 The most obvious use is to have a related group of packages that may
67 otherwise include a virtual, making the choice of that virtual explicit
68 (like your cron example above).
69
70 Other sets would be simply groups of packages that make functional
71 sense together, where perhaps one package might make little sense
72 without others in the set. For example:
73
74 sylpheed-kev = ( sylpheed-claws sylpheed-claws-mailmbox \
75 sylpheed-claws-smime sylpheed-claws-rssyl sylpheed-claws-smime \
76 sylpheed-claws-vcalendar)
77
78 toolchain4 = ( \
79 ~sys-devel/gcc-4.1.1 \
80 ~sys-devel/binutils-2.16.1 \
81 ~sys-libs/glibc-2.4 )
82
83 Are you considering allowing sets to contain other sets? Then world
84 would contain the names of sets, not just CPs.
85
86 > Unmerging sets is also a fun one, I'm not sure if it's entirely
87 > appropriate yet.
88
89 Would it do anything more than:
90
91 # emerge -C $(cat /var/lib/portage/myset)
92
93 Perhaps it would unmerge any packages merged as dependencies of the
94 set that are no longer dependencies of anything else currently
95 installed - but I think that's better handled separately.
96
97 Ah; it occurs to me that unmerging a set should only unmerge elements
98 of the set that are not part of any other installed set (including
99 world). So behaviour is less like 'emerge $(cat <set>)' and more like
100 emerge sets/<set> where <sets>/set/set-V.ebuild is like a meta-ebuild.
101
102 --
103 Kevin F. Quinn

Attachments

File name MIME type
signature.asc application/pgp-signature

Replies

Subject Author
Re: [gentoo-dev] Portage Sets Chris White <chriswhite@g.o>
Re: [gentoo-dev] Portage Sets Alec Warner <antarus@g.o>