Welches Paket enthält die glibc? (gelöst)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
E. coli
Beiträge: 33
Registriert: 30.12.2006 16:22:03

Welches Paket enthält die glibc? (gelöst)

Beitrag von E. coli » 15.10.2024 19:23:42

Liebes Forum,

ich bin auf der Suche nach einer passenden Version der glibc in den Debian-Paketen. Meine Suche in den Paketverzeichnissen hat drei Pakete gefunden, die die glibc jedoch nicht enthalten:
  • Paket glibc-doc
  • Paket glibc-doc-reference
  • Paket glibc-source
Ich bin daher ziemlich ratlos, wo und wie ich noch suchen sollte.


Hier nochmal eine etwas umfassende Beschreibung meines Problems:

Ich habe ein kleines Bastelprojekt angefangen und versuche ein Programm (Spek) zum Laufen zu bekommen, welches in meiner Distributionsversion nicht enthalten ist. Dabei orientiere ich mich am Paket- und Umgebungsmanager Conda. Conda installiert Programme an beliebigen Orten des Dateisystems. Dabei wird der runpath so umgestaltet, dass Bibliotheken in einem bestimmten Verzeichnis gesucht werden. Dies kann man mit readelf -d einsehen. z.B.

Code: Alles auswählen

  Tag       Typ                          Name/Wert
 0x000000000000001d (RUNPATH)            Bibliothek runpath: [$ORIGIN/../lib/]
 0x0000000000000001 (NEEDED)             Gemeinsame Bibliothek [libavformat.so.59]
 0x0000000000000001 (NEEDED)             Gemeinsame Bibliothek [libavcodec.so.59]
....
Dank patchelf konnte ich den runpath für das Programm und alle Bibliotheken anpassen. Die einzige Bibliothek, die noch Probleme bereitet ist die glibc. Jede Bibliothek gibt eine Fehlermeldung nach folgendem Schema aus:

Code: Alles auswählen

./spek: /home/xxx/tmp/Spek/spek_0.8.5+dfsg-2_amd64/usr/bin/../lib/libm.so.6: version `GLIBC_2.38' not found (required by /home/xxx/tmp/Spek/spek_0.8.5+dfsg-2_amd64/usr/bin/../lib/libwx_gtk3u_core-3.2.so.0)
Es fehlt nur noch die passende Version der GLIBC, dann müsste das Programm laufen.

Ich freue mich über Hinweise, in welchem Paket ich die GLIBC (am besten Version 2.38 oder größer) finden kann.

Danke fürs Lesen :D
Zuletzt geändert von E. coli am 19.10.2024 19:30:30, insgesamt 1-mal geändert.

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Welches Paket enthält die glibc?

Beitrag von heisenberg » 15.10.2024 19:31:36

libc6 > Version 2.36 ist enthalten in Debian Trixie (=Testing). Das würde ich aber nicht mal so ohne weiteres in eine Stable-Distribution reininstallieren. Kann sein, dass das System anschließend Schrott ist. Die libc ist die Basisbibliothek für alles. Wenn man die austauscht ist mit großen Problemen zu rechnen.

Unbeholfenerweise würde ich nur für das Programm ein extra Verzeichnis anlegen und dort hinein die neuere libc6 legen und anschließend Dein Programm wie folgt aufrufen:

Code: Alles auswählen

cd $VERZEICHNIS_NEUE_LIBC
LD_LIBRARY_PATH=. /pfad/zu/dein_program_name
evtl. vor dem Aufruf LD_LIBRARY_PATH auch via export setzen:

Code: Alles auswählen

cd $VERZEICHNIS_NEUE_LIBC
export LD_LIBRARY_PATH=.
/pfad/zu/dein_program_name

Zu LD_LIBRARY_PATH siehe https://manpages.debian.org/bookworm/ma ... .8.en.html

E. coli
Beiträge: 33
Registriert: 30.12.2006 16:22:03

Re: Welches Paket enthält die glibc?

Beitrag von E. coli » 15.10.2024 20:42:36

Hallo heisenberg, dank dir für deine Antwort!

Das passende Paket ist dann libc6 oder?

Tatsächlich beschreibst du sogar mein bisheriges Vorgehen, alles in ein Verzeichnis zu kopieren. So habe ich das bereits mit all den anderen Bibliotheken gemacht. Das jeweilige Debian-Paket runtergeladen, die Bibliothek daraus in ein Verzeichnis unter home kopiert und mit patchelf den Bibliothek runpath angepasst. Diese Variante ist besser als eine Umgebungsvariable für den LD_LIBRARY_PATH anzupassen. Irgendwann hab ich dafür sogar mal eine Begründung gelesen. Aber leider wieder vergessen :(

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Welches Paket enthält die glibc?

Beitrag von heisenberg » 15.10.2024 20:47:26

Ja. Das ist Debianlibc6

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Welches Paket enthält die glibc?

Beitrag von heisenberg » 15.10.2024 21:20:29

Ansonsten gibt's für die Suche von Dateien in installierten Paketen dpkg -S und für die Suche nach Dateien in nicht installierten Paketen Debianapt-file.

E. coli
Beiträge: 33
Registriert: 30.12.2006 16:22:03

Re: Welches Paket enthält die glibc?

Beitrag von E. coli » 15.10.2024 21:30:10

Jetzt hab ich alle Bibliotheken beisammen und auch den letzten Fehler:

Code: Alles auswählen

./spek
./spek: symbol lookup error: /home/xxx/tmp/Spek/spek_0.8.5+dfsg-2_amd64/usr/bin/../lib/libc.so.6: undefined symbol: __tunable_is_initialized, version GLIBC_PRIVATE
über diesen Aufruf gelöst:

Code: Alles auswählen

../lib/ld-linux-x86-64.so.2 --library-path /home/jochen/tmp/Spek/spek_0.8.5+dfsg-2_amd64/usr/lib/ spek
aber dabei kommt jetzt ein

Code: Alles auswählen

Speicherzugriffsfehler (Speicherabzug geschrieben)
Für heute geb ich es auf. Evlt. kommt am WE ein neuer Anlauf. Irgendwann klappt es noch.

Danke für deine Unterstützung @heisenberg!

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: Welches Paket enthält die glibc?

Beitrag von heisenberg » 15.10.2024 23:21:49

Wäre das Spek Flatpak vielleicht eine Option?

https://github.com/nalsai/SpekFlatpak

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Welches Paket enthält die glibc?

Beitrag von hikaru » 16.10.2024 09:17:11

@E.coli:
Dein prinzipieller Ansatz (alle benötgten Libs in ein Verzeichnis stecken, und das gewünschte Programm dann auf dieser Basis starten) läuft letztendlich auf das Thema chroot bzw. Container (Docker, LXC) hinaus.
Flatpaks nutzen das gleiche Konzept.

E. coli
Beiträge: 33
Registriert: 30.12.2006 16:22:03

Re: Welches Paket enthält die glibc?

Beitrag von E. coli » 19.10.2024 14:12:16

Danke für die Anmerkungen!
heisenberg hat geschrieben: ↑ zum Beitrag ↑
15.10.2024 23:21:49
Wäre das Spek Flatpak vielleicht eine Option?

https://github.com/nalsai/SpekFlatpak
Flatpak habe ich mir vor längerer Zeit angesehen. Ich kann mich für das Konzept nicht begeistern. Es wird - für meinen Geschmack - zu viel im Hintergrund installiert. Damals wollte ich handbrake in einer neuen Version nutzen und Flatpak hat einen halben Gnome-Desktop installiert. Wenn es schlecht läuft brauchen zwei Programme zwei verschieden Versionen von Gnome. Gefällt mir nicht. Habe ich zu wenig Überblick, was im Hintergrund irgendwo installiert wird.
hikaru hat geschrieben: ↑ zum Beitrag ↑
16.10.2024 09:17:11
@E.coli:
Dein prinzipieller Ansatz (alle benötgten Libs in ein Verzeichnis stecken, und das gewünschte Programm dann auf dieser Basis starten) läuft letztendlich auf das Thema chroot bzw. Container (Docker, LXC) hinaus.
Flatpaks nutzen das gleiche Konzept.
Docker-Container habe ich schon selbst erstellt. Docker geht tatsächlich viel weiter als mein Ansatz und fügt eine zusätzliche Abstraktionsebene ein. Für mein Ziel ist Docker over engineering. Für einen Workflow von mehreren Programmen ist Docker ok (oder besser Podman). Für ein einzelnes Programm eher weniger.

Mein Ansatz ist tatsächlich entlehnt von Conda. Conda nutzt genau das Konzept einen parallelen Verzeichnisbaum in einem Verzeichnis der Wahl einzurichten und bei allen Programmen wird ORIGIN in den elf-Binaries so gesetzt, dass es auf das zugehörige lib-Verzeichnis zeigt. Von daher weiß ich, dass es geht und ich möchte hier gerne die Hintergründe versehen. Daher mein Bastelprojekt.

Um Spek am Ende auszuführen wäre mir tatsächlich ein AppImage am liebsten. Mir gefällt die Übersichtlichkeit des Konzepts. Eine Datei, die alles Nötige enthält. Da wird nicht irgendwo im Home-Verzeichnis alles Mögliche installiert wie bei Flatpak.

E. coli
Beiträge: 33
Registriert: 30.12.2006 16:22:03

Re: Welches Paket enthält die glibc?

Beitrag von E. coli » 19.10.2024 19:30:05

Update:
Um das Programm für den Moment zum Laufen zu bekommen, habe ich ein AppImage aus den Quellen von Bionic Beaver erstellt. Da die Distribution schon älter ist (2018), sollte das AppImage auf allen neueren Versionen von Debian, Ubuntu oder Linux Mint laufen. Das AppImage habe ich erstellt mit pkg2appimage, einer yaml-Datei und etwas manueller Nacharbeit, da doch noch vier Bibliotheken gefehlt haben.
Für den Moment ist das Problem gelöst und mein Bastelprojekt schau ich mir bei Gelegenheit nochmal an um etwas zu lernen.

Antworten