Bugzilla – Bug 1223167
Upgrade from Leap 15.4 to 15.5 failed: "control file does not define any base product"
Last modified: 2024-05-23 14:14:31 UTC
Created attachment 874393 [details] YaST log files I attempted to do the offline/DVD upgrade of an existing Leap 15.4 system to 15.5. I downloaded the DVD image and verified the SHA signature before burning the image. On booting the DVD image and selecting "Upgrade" from the initial menu, I was eventually given the attached pop-up window before the "welcome" stage of upgrade. The text in that window says: YaST2 Calling the YaST module `inst_repositories_initialization has failed. More information can be found near the end of the /var/log/YasT2/y2log' file. This is worth reporting a bug at http://bugzilla.suse.com/: Please, attach also all YaST logs stored in the /var/log/YaST2/' directory. See http://en.opensuse.org/Bugs/YaST for more information about YasT logs. I was able to tar up the /var/log/YaST2 directory; the contents are attached.
Created attachment 874394 [details] YaST error window Image showing actual error window from attempted upgrade.
*** Bug 1223166 has been marked as a duplicate of this bug. ***
I tried upgrading twice with the same results each time. Before upgrading, I verified that all of my repos were reachable and ran "zypper clean" and "zypper ref" to make sure. I was able to get to a shell, and I poked around. The network layer didn't correctly detect my static IP arrangement, but at least the DHCP system worked and the system was connected to the Internet at the point where the error was issued. While doing the upgrade, I was following the instructions here: https://en.opensuse.org/SDB:Offline_upgrade The same error happened with and without attempting the "Prepare repository list" step -- that is, with the repo links pointing to 15.4 or 15.5.
>> 2024-04-20 11:27:12 <3> install(5253) [Ruby] yast/wfm.rb(handle_exception):271 >> Client /mounts/mp_0001/usr/share/YaST2/clients/inst_repositories_initialization.rb >> failed with 'The control file does not define any base product!' (RuntimeError). >> >> Backtrace: >> >> .../usr/share/YaST2/lib/y2packager/product_spec_reader.rb:55:in `products_from_control' >> .../usr/share/YaST2/lib/y2packager/product_spec_reader.rb:46:in `products' >> .../usr/share/YaST2/lib/y2packager/product_spec.rb:69:in `base_products' >> .../usr/share/YaST2/lib/y2packager/clients/inst_repositories_initialization.rb:123:in `products' >> .../usr/share/YaST2/lib/y2packager/clients/inst_repositories_initialization.rb:58:in `main' >> .../usr/share/YaST2/clients/inst_repositories_initialization.rb:3:in `<top (required)>' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:345:in `eval' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:345:in `run_client' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:206:in `call_builtin' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:206:in `call_builtin_wrapper' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:195:in `CallFunction' >> .../usr/share/YaST2/modules/ProductControl.rb:1306:in `block in RunFrom' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/y2logger.rb:98:in `group' >> .../usr/share/YaST2/modules/ProductControl.rb:1276:in `RunFrom' >> .../usr/share/YaST2/modules/ProductControl.rb:1501:in `Run' >> .../usr/share/YaST2/lib/installation/clients/inst_worker_initial.rb:99:in `main' >> .../usr/share/YaST2/clients/inst_worker_initial.rb:2:in `<top (required)>' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:345:in `eval' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:345:in `run_client' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:206:in `call_builtin' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:206:in `call_builtin_wrapper' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:195:in `CallFunction' >> .../usr/share/YaST2/lib/installation/clients/installation.rb:92:in `block in main' >> .../usr/share/YaST2/lib/ui/wizards/layout.rb:186:in `open_wizard' >> .../usr/share/YaST2/lib/installation/clients/installation.rb:60:in `main' >> .../usr/share/YaST2/clients/installation.rb:2:in `<top (required)>' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:345:in `eval' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:345:in `run_client' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:206:in `call_builtin' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:206:in `call_builtin_wrapper' >> .../usr/lib64/ruby/vendor_ruby/2.5.0/yast/wfm.rb:195:in `CallFunction' >> /usr/lib/YaST2/bin/y2start:68:in `<main>'
Created attachment 874992 [details] control.xml from the y2logs tarball The error message looks justified: Indeed this control.xml does not define a base product. But it's the exact same control.xml that I have on my Leap 15.5 in /etc/YaST/control.xml. But I didn't upgrade from Leap 15.4, I did a new installation.
James, that attached error dialog contains a "Next" button. Could you continue by clicking on it? I suspect that should work, and this is not a fatal error that would be a showstopper for the upgrade.
If you still have that Leap 15.4, please also check if you have a symlink /etc/products.d/baseproduct: baseproduct -> Leap.prod And an XML file /etc/products.d/Leap.prod describing that product.
AFAICS the code path taken here is the second fallback: The installation medium did not contain multiple repos, and not even one single repo, so it had to resort to checking the control file (control.xml) to check if that one would contain any base product; but that failed as well. https://github.com/yast/yast-packager/blob/SLE-15-SP5/src/lib/y2packager/product_spec_reader.rb#L41-L47 >> if InstallationMedium.contain_multi_repos? >> products_from_multi_repos >> elsif InstallationMedium.contain_repo? >> products_from_libzypp >> else >> products_from_control >> end https://github.com/yast/yast-packager/blob/SLE-15-SP5/src/lib/y2packager/product_spec_reader.rb#L53-L55 >> def products_from_control >> control_products = Y2Packager::ProductSpecReaders::Control.new.products >> raise "The control file does not define any base product!" if control_products.empty? So, what medium did you use? A minimalistic NET medium without any repos at all? And that possibly in combination with your network setup having problems with your static IP setup, as you mentioned?
(In reply to Stefan Hundhammer from comment #8) > AFAICS the code path taken here is the second fallback: The installation > medium did not contain multiple repos, and not even one single repo, so it > had to resort to checking the control file (control.xml) to check if that > one would contain any base product; but that failed as well. > > > https://github.com/yast/yast-packager/blob/SLE-15-SP5/src/lib/y2packager/ > product_spec_reader.rb#L41-L47 > > >> if InstallationMedium.contain_multi_repos? > >> products_from_multi_repos > >> elsif InstallationMedium.contain_repo? > >> products_from_libzypp > >> else > >> products_from_control > >> end > > > https://github.com/yast/yast-packager/blob/SLE-15-SP5/src/lib/y2packager/ > product_spec_reader.rb#L53-L55 > > >> def products_from_control > >> control_products = Y2Packager::ProductSpecReaders::Control.new.products > >> raise "The control file does not define any base product!" if control_products.empty? > > > So, what medium did you use? A minimalistic NET medium without any repos at > all? And that possibly in combination with your network setup having > problems with your static IP setup, as you mentioned? According to my browser history, I downloaded this: https://download.opensuse.org/distribution/leap/15.5/iso/openSUSE-Leap-15.5-DVD-x86_64-Build491.1-Media.iso I downloaded the checksum and verified it. I then burned it to a DVD and booted from that. I selected "upgrade," and it didn't work. The upgrade DVD didn't detect my static IP configuration. That's fine; I was able to continue using a temporary DHCP address. I don't think that's related to the problem. But the upgrade itself failed. The "next" button does nothing at all. It just freezes there. I'm willing to poke around to try to give you more information than just the error logs, but I'll need something more explicit about what you need. (And how to get it.) The system was originally installed (from scratch) with OpenSUSE Leap 15.4. The packages have been updated consistently, but this is the first time I've tried upgrading to a new release. I can't really reinstall it, as it's a pretty important system. If you can wait a few years, I can probably build a new system to try out something different. Otherwise, I'm either marooned on 15.4 or I'm going to have to try the (apparently riskier) live upgrade mechanism. I was hoping that DVD-based upgrade would be more robust.
Actually, that should work. The upgrade using DHCP to reach any remote repos is also the default behavior. This leaves the question if your 15.4 had that symlink /etc/products/baseproduct (see comment #7) to check what existing system to upgrade from. I am not even sure if it got that far in your case; I'll check again. Let me have another look and ask around in the team.
(In reply to Stefan Hundhammer from comment #10) > Actually, that should work. The upgrade using DHCP to reach any remote repos > is also the default behavior. > > This leaves the question if your 15.4 had that symlink > /etc/products/baseproduct (see comment #7) to check what existing system to > upgrade from. I am not even sure if it got that far in your case; I'll check > again. > > Let me have another look and ask around in the team. I don't see any /etc/products/baseproduct, but there is an /etc/products.d/baseproduct: % ls -sal /etc/products* total 24 4 drwxr-xr-x 2 root root 4096 Jul 8 2022 . 12 drwxr-xr-x 175 root root 12288 May 22 08:00 .. 0 lrwxrwxrwx 1 root root 9 Jul 8 2022 baseproduct -> Leap.prod 8 -rw-r--r-- 1 root root 4210 Jul 4 2022 Leap.prod I'll attach a copy of that Leap.prod file.
Created attachment 875023 [details] /etc/products.d/Leap.prod
Right, it's /etc/products.d, not /etc/products. My fault. And that Leap.prod looks good to me.
Some intermediate results (or rather, work in progress hoping to get any results anytime soon): On my installed Leap 15.5: >> % sudo zypper products >> >> S | Repository | Internal Name | Name | Version | Arch | Is Base >> ---+--------------+-------------------+---------------------------------+---------+--------+-------- >> | Leap Non-OSS | Leap-Addon-NonOss | openSUSE Leap 15.5 NonOSS Addon | 15.5-0 | x86_64 | No >> i+ | Leap OSS | Leap | openSUSE Leap 15.5 | 15.5-1 | x86_64 | Yes >> % sudo zypper info -t product --requires Leap >> >> Information for product Leap: >> ----------------------------- >> Repository : Leap OSS >> Name : Leap >> Version : 15.5-1 >> Arch : x86_64 >> Vendor : openSUSE >> End of Support : 2024-12-31 >> Flavor : ftp >> Is Base : Yes >> Installed : Yes >> Status : up-to-date >> Update Repositories : --- >> CPE Name : cpe:2.3:o:opensuse:leap:15.5:*:*:*:*:*:*:* >> Short Name : openSUSE Leap >> Summary : openSUSE Leap 15.5 >> Description : >> openSUSE Leap 15.5. >> Requires : product(Leap) = 15.5-1 >> % rpm -q --whatprovides 'product(Leap)' >> >> openSUSE-release-15.5-lp155.286.1.x86_64 >> % rpm -ql openSUSE-release >> >> /etc/YaST2 >> /etc/YaST2/control.xml >> /etc/motd >> /etc/os-release >> /etc/products.d >> /etc/products.d/Leap.prod >> /etc/products.d/baseproduct >> /etc/rpm/macros.leap >> /etc/zypp/repos.d/repo-backports-debug-update.repo >> /etc/zypp/repos.d/repo-backports-update.repo >> /etc/zypp/repos.d/repo-sle-debug-update.repo >> /etc/zypp/repos.d/repo-sle-update.repo >> /etc/zypp/vendors.d/00-openSUSE.conf >> /usr/lib/issue.d >> /usr/lib/issue.d/10-openSUSE.conf >> /usr/lib/issue.d/90-openSUSE.conf >> /usr/lib/os-release >> /usr/share/licenses/openSUSE-release >> /usr/share/licenses/openSUSE-release/license.ar.txt >> ... >> /usr/share/licenses/openSUSE-release/license.zh_TW.txt >> /usr/share/licenses/openSUSE-release/no-acceptance-needed >> /usr/share/licenses/product >> /usr/share/licenses/product/base >> /usr/share/licenses/product/base/license.ar.txt >> ... >> /usr/share/licenses/product/base/license.zh_TW.txt >> /usr/share/licenses/product/base/no-acceptance-needed Mounting the Leap 15.5 ISO: >> % sudo mount -r /work/iso/openSUSE-Leap-15.5-DVD-x86_64-Build491.1-Media.iso /mnt Trying to find the products on that ISO: >> % find /mnt -name "openSUSE-release*.rpm" >> >> /mnt/x86_64/openSUSE-release-dvd-15.5-lp155.286.1.x86_64.rpm >> /mnt/x86_64/openSUSE-release-15.5-lp155.286.1.x86_64.rpm >> % rpm -qp --provides /mnt/x86_64/openSUSE-release-15.5-lp155.286.1.x86_64.rpm | grep -v weakremover >> >> aaa_version >> config(openSUSE-release) = 15.5-lp155.286.1 >> distribution-release >> dup-vendor-relax(suse) >> openSUSE-release = 15.5-lp155.286.1 >> openSUSE-release(x86-64) = 15.5-lp155.286.1 >> openSUSE-release-15.5 >> product() = Leap >> product(Leap) = 15.5-1 >> product-cpeid() = cpe%3A%2Fo%3Aopensuse%3Aleap%3A15.5 >> product-endoflife() = 2024%2D12%2D31 >> product-label() = openSUSE%20Leap >> product-register-target() = openSUSE%2DLeap%2D15.5%2Dx86_64 >> product-updates-repoid() = obsrepository%3A%2F%2Fbuild.opensuse.org%2FSUSE%3ASLE%2D15%2DSP5%3AUpdate%2Fpool >> product-updates-repoid() = obsrepository%3A%2F%2Fbuild.opensuse.org%2FopenSUSE%3ABackports%3ASLE%2D15%2DSP5%3AUpdate%2Fstandard >> product-updates-repoid() = obsrepository%3A%2F%2Fbuild.opensuse.org%2FopenSUSE%3ALeap%3A15.5%3ANonFree%3AUpdate%2Fstandard >> product-updates-repoid() = obsrepository%3A%2F%2Fbuild.opensuse.org%2FopenSUSE%3ALeap%3A15.5%3AUpdate%2Fstandard >> product-url(releasenotes) = http%3A%2F%2Fdoc.opensuse.org%2Frelease%2Dnotes%2Fx86_64%2FopenSUSE%2FLeap%2F15.5%2Frelease%2Dnotes%2DopenSUSE.rpm >> product-url(repository) = http%3A%2F%2Fdownload.opensuse.org%2Fdistribution%2Fleap%2F15.5%2Frepo%2Foss%2F >> suse-release = 15.5-lp155.286.1 >> suse-release-oss = 15.5-lp155.286.1 >> system-installation() = Leap >> system-installation() = openSUSE >> % rpm -qp --provides /mnt/x86_64/openSUSE-release-dvd-15.5-lp155.286.1.x86_64.rpm >> >> flavor(dvd) >> openSUSE-release-dvd = 15.5-lp155.286.1 >> openSUSE-release-dvd(x86-64) = 15.5-lp155.286.1 >> product_flavor() >> product_flavor(Leap) = 15.5-1 The SLE-15-SP5 control.xml file actually contains some base products to choose from so the user can use a purchased registration key to register one of them in one of the later steps of the installation: >> <base_products config:type="list"> >> <base_product> >> <display_name>SUSE Linux Enterprise Server 15 SP5</display_name> >> <name>SLES</name> >> <version>15.5</version> >> <register_target>sle-15-$arch</register_target> >> </base_product> >> ... >> ... >> <base_product> >> <display_name>SUSE Linux Enterprise Desktop 15 SP5</display_name> >> <name>SLED</name> >> <version>15.5</version> >> <register_target>sle-15-$arch</register_target> >> <archs>x86_64</archs> >> </base_product> >> </base_products> Leap 15.x (at least 15.5 which I checked) does not have any such entry in the control.xml product description file.
So, this whole products thing is a lot of smoke and mirrors; it's mostly metadata, injected into the system by a -release package for each product. The -release package have RPM 'provides' dependencies to provide symbols of the 'product() = PRODUCT_NAME' type that are added as a new type of object into the RPM database. As you can see, I used the same ISO file as you, and actually the data look quite consistent. Yet, something must be missing; but what?
@Ladislav: What am I overlooking? Where are base products defined as base products? Are there metadata files that contain more information about the products? Did we have a code change in the last few months that broke the release upgrade?
Some other notes about the system that may (or may not) help in identifying the problem. The root file system is on NVME and uses ext4. /etc is (of course) on the root file system, as is /bin, /usr, /lib, /lib64, /root, /opt. /var is on ZFS as are my /home directories, /srv, /usr/local, and the bulk of the storage is on ZFS in /export. I would not be surprised at all to find that (like static network configuration) the installer knows nothing of ZFS and that means (in particular) that /var can't be mounted and appears to be empty to the installer. No idea if it needs something from there. If there were some way to add drivers and import the ZFS mounts during the upgrade process, then I would do that. Alternatively, I could try doing an experiment where I move the ZFS /var data over to the NVME and then somehow move it back. It'll be a bit fraught, though.
ZFS on /var might be really the cause. After looking at https://en.opensuse.org/OpenZFS (which might be obsolete), I'd say that it's not being officially tested. In this case, I would rather use upgrade of the running system using zypper https://en.opensuse.org/SDB:System_upgrade
/var/lib/rpm/Packages is the RPM database. If that cannot be read, the upgrade will fail for sure. So this is indeed a case for a zypper upgrade. My interpretation of the logs so far was that it could not find a base product on the installation media, but maybe it's indeed already at the point where it would read the RPM DB of the previously installed product, and it's in reality that which fails. If you have a separate /var on ZFS, this cannot be mounted, so it falls back to /var on the root filesystem, where in your scenario of course there is no RPM DB. That would explain the behavior.
But in your case, it doesn't even get as far as trying to mount anything from the existing system on the disk: It already fails when reading the content of the installation medium. I just tried on an existing VM, and with that same installation ISO openSUSE-Leap-15.5-DVD-x86_64-Build491.1-Media.iso 4413456384 bytes, sha256sum 53bcbcb82361c5261c9d0994ab0f94101bf28e61c06fe12d320984601be35a8f (just like downloaded from here https://get.opensuse.org/leap/15.5/#download) I get >> 04:40:13 <1> [Ruby] y2packager/installation_medium.rb(read):74 >> Base Products: [#<Y2Packager::RepoProductSpec:0x000056530533c8c8 >> @name="Leap", >> @version="15.5", >> @arch="x86_64", >> @display_name="openSUSE Leap 15.5", >> @order=nil, >> @base=true, >> @selected=false, >> @register_target="", >> @depends_on=[], >> @dir="/AP_0x67lFfB", >> @media_name="/AP_0x67lFfB", >> @description="openSUSE Leap 15.5.">] where you get >> 11:27:12 <1> [Ruby] y2packager/installation_medium.rb(read):74 Base Products: [] and that's where it starts going downhill. It doesn't even was as far as trying to mount any partitions from your hard disk(s) to probe what existing systems there are on your disks to upgrade from. Just as in your y2log, the name of the on-DVD repository is >> 04:40:07 <1> [Pkg] Source_Download.cc(SourceProvideFileCommon):77 >> Downloading file >> /repodata/df6fa38c088f2cbd6f718b30d09ce24654b85a0ca5152437ae8c8d9b60473b90-primary.xml.gz >> from repository 0, medium 1 But for some reason, yours does not contain any base product. Please download the installation ISO again (and of course check the checksum), and please use a USB stick this time to boot and upgrade from. Maybe your DVD drive isn't as reliable anymore as it used to be. If it's anything like mine, it might not see much use these days, which might make it unreliable. I'd appreciate if you'd try the same procedure again until the point where you see an existing partition to choose the system to upgrade. If this time it gets that far, it was an issue with your DVD drive. Anyway, at that point you'll have to stop because then the ZFS problem will start to kick in; a successful upgrade will in your case only work when booting the old system and then using the zypper method that Lukas mentioned in comment #18.
I think I've got a good course of action now; thanks. I mounted up the DVD while running 15.4, and saw this: % cat /run/media/carlsonj/openSUSE-Leap-15.5-DVD-x86_64491/repodata/df6fa38c088f2cbd6f718b30d09ce24654b85a0ca5152437ae8c8d9b60473b90-primary.xml.gz > /dev/null cat: /run/media/carlsonj/openSUSE-Leap-15.5-DVD-x86_64491/repodata/df6fa38c088f2cbd6f718b30d09ce24654b85a0ca5152437ae8c8d9b60473b90-primary.xml.gz: Input/output error I think if I'd seen an "Input/output error" message somewhere from the installer, I certainly would have known that something was going very wrong earlier. It'd be nice if errors were reported, but (obviously) this is a really obscure one and I can't fault the installer for missing it. I will: - reconfigure the /var partition using ZFS canmount=off and submounts for the things I really care about (such as /var/mail) - update everything, re-download, and retry via a USB device - if I can't get that to work, then fall back on live upgrade via zypper Thanks! I think I'm set.
OK; closing this bug then. I am really relieved that we didn't introduce a very bad regression with one of the recent updates to the installation process.