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
Diese Änderung ist nicht persistent und muss nach jedem Neustart des Containers wiederholt werden.
Anschließend funktioniert die Synchronisation wieder wie gewohnt.