Czy można zainstalować i używać dwóch różnych wersji glibc na tym samym komputerze? Gdzie jedna wersja służy tylko do uruchamiania starszego oprogramowania, które opiera się na starych plikach binarnych glibc?
Czy można to zrobić za pomocą menedżera pakietów (coś w rodzaju „zainstaluj ten pakiet i jego zależności /opt/old-glibc
, zamiast) zamiast zarządzać nim tragicznie?
ubuntu
debian
dynamic-linking
glibc
Elazar Leibovich
źródło
źródło
ldd
że coś ci powie. Jeśli to możliwe, może być konieczne ponowne skompilowanie starszej biblioteki libc i / lub instalacja / rekompilacja pakietów pomocniczych. W zależności od wieku Twojej aplikacji może to być trudne. Widzę prąd Debianlibc6
zależylibc-bin (= 2.13-0exp5)
ilibgcc1
taklibc6
nie ma wiele zależności, ale można nadal napotkasz problemy.Odpowiedzi:
Tak, to możliwe. Musisz być bardzo ostrożny ze ścieżkami ładowania bibliotek i może być konieczne ponowne skompilowanie niektórych innych bibliotek.
Jako ścieżkę najmniejszego tarcia zalecam zainstalowanie starszej wersji Debiana lub Ubuntu w chroot . To znaczy, stwórz katalog, powiedzmy
/old/etch
, i zainstaluj starszą dystrybucję w zrootowanym tam drzewie; aby uruchomić ten problematyczny program, wywołaj,chroot
aby ograniczyć jego widok systemu plików do/old/etch
.Debian (lub Ubuntu) zawiera pakiet ułatwiający instalację innego systemu w chroot: schroot (następca dchroot). Najpierw użyj debootstrap, aby zainstalować starszą dystrybucję (zainstaluj tylko system podstawowy i to, czego potrzebuje Twój program, bez serwerów). Następnie skonfigurować złom, aby uruchomić program wygodnie (z
/dev
,/proc
,/home
i innych „satelita” systemy plików dostępne).Więc plan jest taki: debootstrap, potem dchroot. W Jak uruchomić 32-bitowe programy na 64-bitowym systemie Debian / Ubuntu? , Daję tutorial o podobnej konfiguracji - bez względu na to, czy używasz różnych wersji dystrybucji, różnych architektur, czy różnych dystrybucji podobnych do Debiana, to tylko kwestia wyboru odpowiedniego źródła pakietu, reszta jest taka sama.
źródło
/old/etch
?