Можно ли установить и использовать две разные версии glibc на одной машине? Где одна версия используется только для запуска устаревшего программного обеспечения, которое использует старые двоичные файлы glibc?
Можно ли сделать это с помощью менеджера пакетов (что-то вроде «установить этот пакет и его зависимости, чтобы /opt/old-glibc
) вместо того, чтобы управлять им
ubuntu
debian
dynamic-linking
glibc
Элазар Лейбович
источник
источник
ldd
, сказал бы вам кое-что. Если возможно, вам может понадобиться перекомпилировать устаревшую библиотеку libc и / или установить / перекомпилировать вспомогательные пакеты. В зависимости от того, сколько лет вашему приложению, это может быть сложно. Я вижу, что текущий Debianlibc6
зависит отlibc-bin (= 2.13-0exp5)
иlibgcc1
, следовательноlibc6
, не имеет много зависимостей, но вы все равно можете столкнуться с проблемами.Ответы:
Да, это возможно. Вы должны быть очень осторожны с путями загрузки библиотек, и вам может понадобиться перекомпилировать некоторые другие библиотеки.
В качестве пути наименьшего трения я рекомендую установить более старую версию Debian или Ubuntu в chroot . То есть создайте каталог, скажем
/old/etch
, и установите более старый дистрибутив в древовидном дереве; чтобы запустить эту проблемную программу, вызовите,chroot
чтобы ограничить ее просмотр файловой системы/old/etch
.Debian (или Ubuntu) поставляется с пакетом, помогающим установить другую систему в chroot: schroot (наследник dchroot). Во-первых, используйте debootstrap для установки более старого дистрибутива (устанавливайте только базовую систему и то, что нужно вашей программе, а не серверы). Затем установите schroot запустить программу удобно (с
/dev
,/proc
,/home
и другие «спутник» файловые системы доступны).Итак, план такой: debootstrap, затем dchroot. В Как запустить 32-битные программы на 64-битной Debian / Ubuntu? Я даю учебное пособие по аналогичной настройке - используете ли вы разные версии дистрибутива, или разные архитектуры, или разные дистрибутивы, подобные Debian, это только вопрос выбора соответствующего источника пакета, остальное одинаково.
источник
/old/etch
?