#1344 IoT on F-32 pungi compose failing due to no rpms.json
Closed: Fixed by lsedlar. Opened by pbrobinson.

For some reason between pungi-4.1.40 and 4.1.41 on F-32 pungi stopped generating rpms.json, it would log:

2020-01-14 03:27:08 [INFO    ] Writing RPM manifest: /mnt/koji/compose/iot/Fedora-IoT-32-20200114.0/compose/metadata/rpms.json

Now with .41 and later the compose fails with:

2020-02-11 13:37:14 [INFO    ] [DONE ] Running pipeline (3/3). Phases: ostree, ostree_installer
2020-02-11 13:37:14 [ERROR   ] Compose run failed: [Errno 2] No such file or directory: '/mnt/koji/compose/iot/Fedora-IoT-32-20200211.1/compose/metadata/rpms.json'
2020-02-11 13:37:14 [ERROR   ] Extended traceback in: /mnt/koji/compose/iot/Fedora-IoT-32-20200211.1/logs/global/traceback.global.log
2020-02-11 13:37:14 [CRITICAL] Compose failed: /mnt/koji/compose/iot/Fedora-IoT-32-20200211.1

For some reason F-31 with the same version works fine.


rolling back to pungi-4.1.40-4.fc31 works fine

The problem is that gather phase is skipped. Therefore there are no RPMs in the final compose, and no reason to write the metadata. However, createrepo phase reads the metadata to build repos (which would be empty in this case). The bug here is that only 2 out of 3 ways to skip phases are checked.

To fix the problem, skip createrepo phase in your config.

Fix on Pungi side is to check skipped phases in check_skip_phases.

For debugging purpuses, here's the compose:
https://kojipkgs.fedoraproject.org/compose/iot/Fedora-IoT-32-20200211.1/

The problem is that gather phase is skipped. Therefore there are no RPMs in the final compose,

So is the real fix here to stop skipping the gather phase? We have a iot override repo we occasionally use, not sure if that affects this.

The real fix is to skip createrepo phase as well.

The real fix is to skip createrepo phase as well.

If we have a side tag (eg f32-iot) does that matter, or does koji generate that repo?

No, that doesn't matter. As far as I can tell from the config, you want ostree repo and installer as main deliverables. The createrepo phase creates repos for yum/dnf in compose/IoT/$arch/os/, but since you don't run gather phase there are no packages to put there.

What throws me off is the additional_packages configuration: without gather phase that has no effect. What is the purpose of it?

No, that doesn't matter. As far as I can tell from the config, you want ostree repo and installer as main deliverables. The createrepo phase creates repos for yum/dnf in compose/IoT/$arch/os/, but since you don't run gather phase there are no packages to put there.

Right, so it's output, not input we don't need that.

What throws me off is the additional_packages configuration: without gather phase that has no effect. What is the purpose of it?

Probably a legacy of hacking up the main fedora pungi config all the way back in ~ F-27/28 time frame.

So if i remove gather I get this:

Failed validation in : 'gather_method' is a required property

gather_method is mandatory even though gather phase is skipped.

According to Lubomir's comment, 'createrepo' should be added to skip_phases config, e.g.

"skip_phases": [
    "gahter",
    "createrepo"
],

PS: I'm working on pungi to print better error message for this.

Commit af5ee703 fixes this issue

Metadata Update from @lsedlar:
- Issue set to the milestone: 4.2.1

This issue has been migrated to Fedora Forge:
https://forge.fedoraproject.org/pungi/pungi/issues/1344

Please continue any further discussion there.

Metadata
Related Pull Requests