It looks like opensuse images are failing to build and all the good images have expired, resulting in there being no opensuse images. I haven’t yet looked at the jenkins logs.
Took me a while to find the detailed build log of a failed build, but it looks like there is a problem determining the full path to the tarball from upstream?
Jenkins got a bit jammed up too so that didn’t help, it’s catching up now so we’ll see how things behave.
We’ve always had the problem that the OpenSUSE web servers are not reliable, especially for Tumbleweed we keep detecting the most recent image version just to then notice that half of the files we need are missing and give us 404s…
For what it’s worth, I think I successfully tried to figure out how to do this manually and I get the same error as the jenkins job does. I tried to get more information about what opensuse URL it is hitting and not getting what it wants, but the debug options don’t give any extre info:
$ sudo distrobuilder --debug build-incus --debug opensuse.yaml
INFO [2024-11-22T14:21:53-07:00] Downloading source
Error: Error while downloading source: Failed to get tarball path: Failed to get tarball name: Failed to find tarball name
ERROR [2024-11-22T14:21:54-07:00] Failed running distrobuilder err="Error while downloading source: Failed to get tarball path: Failed to get tarball name: Failed to find tarball name"
INFO [2024-11-22T14:21:54-07:00] Removing cache directory
Sure enough, that URL has the following message: “We are very sorry, but the requested service is currently not available.”
When I follow the status page link there are many US mirrors operational. On that status page when I search for “mirrorcache” then only hits are for Australia (mirrorcache-au). I don’t know enough about opensuse’s infrastructure to know if that means something or not.
Looking at sources/opensuse.go:
// Run downloads an OpenSUSE tarball.
func (s *opensuse) Run() error {
var baseURL string
var fname string
if s.definition.Source.URL == "" {
s.definition.Source.URL = "https://mirrorcache-us.opensuse.org/download"
}
it suggests you might be able override the URL, perhaps in the yaml file… when I try to read distrobuilder/main.go, sources/source.go, and sources/opensuse-http.go and I see it “rendering” I get the impression there is some way to translate the “Source.URL” go code into perhaps a key in the opensuse.yaml:
but I don’t know how to figure that out the translation.
I did naively try inserting such a key into the yaml and stracing the process I can see a socket open to the mirror hostname, so I guess that guess was good. But I get the same failure, possibly because I’m not specifying the base path correctly.
Switched URL to http so I could wireshark the paths being used. Looks like very few opensuse mirrors store appliances, which is one of the things distrobuilder relies on. Found one that did.
However, I could only build specific versions of leap, and only below 16.0 (in that case, it’s appliance directory is quite sparse and does not contain an lxc tarball). I can see now that tumbleweed requires a path structure (…/VIrtualization:/containers:/images:/…) that is only available on MirrorCache and not directly on mirrors, which explains the spotty buildability.