Re: new seeds feature: alternatives in germinate 2.4.2

2023-08-31 Thread Michael Hudson-Doyle
On Fri, 1 Sept 2023 at 04:23, Julian Andres Klode <
julian.kl...@canonical.com> wrote:

> This means that only the first package ends up getting a Task
> field, and hence installation during image build - which uses
> the task feature of apt (apt install task-name^)


This isn't how image builds install tasks, for better or worse.

In lucid and earlier, the Task header is used but it's matched by hand
rather than using the ^ syntax -- I'm not sure why though, it may be
something to do with not wanting to install the packages that have the task
header but are from a foreign architecture.

In mantic though, livecd-rootfs uses the package lists produced by
germinate directly.

Given these package lists are what drive the Task header in the archive, I
expect it doesn't make any difference though.

Cheers,
mwh

is still as
> predictable as before - the resolving there doesn't change
> (task-name^ expands to all packages with Task: task-name).
>

>
-- 
ubuntu-devel mailing list
ubuntu-devel@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel


new seeds feature: alternatives in germinate 2.4.2

2023-08-31 Thread Julian Andres Klode
o/

This week I worked on a new feature in germinate that very
much improves our ability to express dependencies in the
meta packages:

You can now list alternatives for seed entries. For example,
and this is the reason that triggered this feature:

* systemd-timesyncd | time-daemon

How does this work? Germinate will continue to seed the first
package as before, it generally ignores any alternatives present,
but will add them back when generating meta package dependencies.

This means that only the first package ends up getting a Task
field, and hence installation during image build - which uses
the task feature of apt (apt install task-name^) is still as
predictable as before - the resolving there doesn't change
(task-name^ expands to all packages with Task: task-name).

However, you can then later replace the first package with
an alternative. For example, after installing the cloud-minimal
task, you can then install chrony and it will replace systemd-timesyncd
and satisfy the | time-daemon part of ubuntu-cloud-minimal's
dependency.

You can also install the meta package and an alternative
together, but do note that apt may also pick alternatives
for other stuff you did not intend (e.g. if a package was
seeded that depends on firefox | www-browser and you install
the metapackage and have another www-browser installed, it
would not install firefox whereas apt install seed^ would
still install firefox despite you having another www-browser),
so generally you want to rely on the task field to install
and then install anything conflicting with that later.

I expect this is mostly useful for virtual packages with
a default provider like time-daemon above. It is standard
practice for debs to always have `default | virtual-package`
as the dependency, and now we can express that in the
metapackages as well.

Please make sure to use germinate 2.4.2 which will land
in mantic probably tomorrow (it needs to be synced from
Debian) to update ubuntu-meta to ensure that the alternatives
are present.

Thank you!

-- 
debian developer - deb.li/jak | jak-linux.org - free software dev
ubuntu core developer  i speak de, en


signature.asc
Description: PGP signature
-- 
ubuntu-devel mailing list
ubuntu-devel@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel