Uyuni/SUSE Manager: Fehler beim Synchroniseren von Oracle Linux 8 YUM-Repositories

In Uyuni 2024.07 und 2024.08 ist das Synchronisieren von Oracle Linux 8-Repositories nicht fehlerfrei möglich. Die Problemursache liegt in den Repositories, die die Spezifikationen modularer Repositories nicht korrekt einhalten. Bei der Synchronisation durch spacewalk-repo-sync erscheint daher folgender Fehler:

 1# spacewalk-repo-sync -c oraclelinux8-appstream-x86_64
 209:15:06 ======================================
 309:15:06 | Channel: oraclelinux8-appstream-x86_64
 409:15:06 ======================================
 509:15:06 Sync of channel started.
 6Retrieving repository 'oraclelinux8-appstream-x86_64' metadata .....[done]
 7Building repository 'oraclelinux8-appstream-x86_64' cache ..........[done]
 8All repositories have been refreshed.
 909:15:19
1009:15:19   Importing modules file 72532a5ca796febe70f0b6b2122739db1d79a7b72a5b1a6139e34e2594778204-modules.yaml.gz.
1109:15:19 *** NOTE: Importing modules file for the channel 'oraclelinux8-appstream-x86_64'. Previous modules will be discarded.
1209:15:20 An error occurred while reading module metadata: An error occurred while indexing a module entry:
1309:15:20     Failed to parse buildorder in component: 18446744073709551615: The integer value is larger than 9223372036854775807 [line 158 col 9]
1409:15:20     Failed to parse buildorder in component: 18446744073709551615: The integer value is larger than 9223372036854775807 [line 158 col 9]
1509:15:20     Failed to parse buildorder in component: 18446744073709551615: The integer value is larger than 9223372036854775807 [line 170 col 9]
1609:15:20     Failed to parse buildorder in component: 18446744073709551615: The integer value is larger than 9223372036854775807 [line 175 col 9]
1709:15:20     Failed to parse buildorder in component: 18446744073709551615: The integer value is larger than 9223372036854775807 [line 157 col 9]

Im Bug-Tracker des Projekts ist ein Workaround dokumentiert. Bis das openSUSE-Projekt die aktualisierte Version der libmodulemd-Bibliothek (2.15.0, 2.13.0 ist installiert) ausliefert, kann manuell eine neue Version auf einem Zweitsystem kompiliert werden.

Hierfür wird wahlweise ein openSUSE Leap 15 SP5/SP6, Tumbleweed oder SLES-System benötigt, in welchem der Quellcode ausgecheckt und übersetzt wird. Die Architektur muss mit der des Zielsystems (also z.B. x86_64) übereinstimmen.

Zunächst müssen benötigte Entwicklungswerkzeuge installiert werden:

1# zypper in git meson cmake {rpm,libyaml,gobject-introspection}-devel {gtk,glib2}-doc

Anschließend wird der Quellcode der libmodulemd-Bibliothek in der Version 2.15.0 ausgecheckt:

1$ git clone https://github.com/fedora-modularity/libmodulemd.git
2$ cd libmodulemd/
3$ git checkout 2.15.0

In einer Zeile der Datei meson_options.txt muss der Wert des Parameters accept_overflowed_buildorder von false auf true gesetzt werden:

1option('accept_overflowed_buildorder', type : 'boolean', value: 'true', description : 'Accept overflowed 18446744073709551615 buildorder as -1. This breaks a specification, but some RHEL 8 module builds look like that.')

Im nächsten Schritt wird der Quellcode übersetzt:

1$ meson setup buildir
2$ cd buildir
3$ ninja

Anschließend ist im Ordner builddir die kompilierte Bibliothek zu finden - diese muss in den Zielcontainer kopiert werden. Hierzu müssen auch symbolische Links angepasst werden:

1# cp libmodulemd.so.2.15.0 /usr/lib64/
2# cd /usr/lib64
3# rm libmodulemd.so.2
4# ln -s /usr/lib64/libmodulemd.so.2.15.0 /usr/lib64/libmodulemd.so.2
5# ls -la /usr/lib64/*modulemd*
6lrwxrwxrwx. 1 root root      21 Aug 29 13:32 libmodulemd.so.2 -> libmodulemd.so.2.15.0
7-rwxr-xr-x. 1 root root  482088 May  8  2022 libmodulemd.so.2.13.0
8-rw-r--r--. 1 root root 2273656 Aug 29 13:31 libmodulemd.so.2.15.0
Wichtig

Diese Änderung ist nicht persistent und muss nach jedem Neustart des Containers wiederholt werden.

Anschließend funktioniert die Synchronisation wieder wie gewohnt.

Übersetzungen: