Вопрос или проблема
У меня есть пакет статистики в 32-битном двоичном формате (P-Stat), который больше не производится (это последняя версия). Я успешно запускаю его, добавляя
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install lib32stdc++6 lib32z1 lib32ncurses6
Я сделал это после установки Linux Mint 22, и также успешно делал на старых 64-битных системах. Интерпретатор /lib/ld-linux.so.2
присутствует в системе, что соответствует деталям, полученным при запуске команды file
на двоичном файле p-stat
.
Теперь мне отправили ещё более старую версию двоичного файла P-Stat для тестирования на очень старых форматах данных, и file
показывает, что ему нужен /lib/ld-linux.so.1
, которого у меня пока [ещё] нет. Два вопроса:
- могу ли я иметь ld-linux.so.1 и ld-linux.so.2 на одной системе?
- что мне нужно установить, чтобы получить ld-linux.so.1?
-
Да, можете, но я не уверен, насколько хорошо
ld-linux.so.1
будет работать на современной системе.ld-linux.so.1
— это динамический линкер “libc5” (это была первая версия GNU C Library для Linux, основанная на ELF), и в начале 2000-х годов было обычным для дистрибутивов устанавливать оба, пока они переходили с libc5 на glibc6, и позже для поддержки старых двоичных файлов. -
Вам придётся загрузить пакеты из архивов версий дистрибутивов. Я сам этого не тестировал, но вы можете загрузить
ldso
(пакет, содержащийld-linux.so.1
) иlibc5
(вероятно, требуемая ваша программа C-библиотека) из Debian 2.2 (“Potato”), который, по-моему, был последней версией, поставлявшей пакеты с совместимостью. Вы не сможете установить эти пакеты с помощьюdpkg
—ldso
конфликтует сlibc-bin
, аlibc5
предварительно зависит отldso
(вы могли бы принудительно перезаписать, но это приведет к дальнейшим проблемам). Вам придётся вручную извлечь содержимое пакетов (dpkg-deb -x
) и скопировать файлы в соответствующее место.
Что бы вы ни делали, сначала экспериментируйте в тестовой среде!
Ответ или решение
Добавление 32-битной совместимости для старых и очень старых бинарных файлов ─ важная задача для многих организаций и индивидуальных пользователей, особенно когда речь идет о сохранении доступа к устаревшим приложениям, которые больше не поддерживаются. Рассмотрим детально, как справиться с этой задачей, ответив на два основных вопроса, поднятых в проблеме.
Теоретическая часть
Во-первых, понимание необходимости наличия старой версии динамического компоновщика, такого как ld-linux.so.1
, весьма важно, поскольку он требуется для старых ELF-бинарных файлов, скомпилированных на базе libc5
. На рубеже 2000-х годов многие распределения Linux начали переход с libc5
на glibc6
, и в этот период стало распространенной практикой наличие обеих версий библиотек для обеспечения совместимости.
Пример
На конкретном примере Linux Mint 22 мы видим, что для работы с 32-битными приложениями уже добавлены некоторые библиотеки, как lib32stdc++6
, lib32z1
и lib32ncurses6
. Однако, столкнувшись с необходимостью запуска еще более старой версии приложения P-Stat, требующей ld-linux.so.1
, необходимо обратиться к архивным пакетам дистрибутивов, которые были выпущены на пороге перехода от libc5 к более новым версиям.
Применение на практике
Установите обе версии динамического компоновщика
Ответ на первый вопрос — да, возможно иметь обе версии динамического компоновщика, ld-linux.so.1
и ld-linux.so.2
, на одной системе. Это позволяет запускать как современные, так и устаревшие бинарные файлы. Однако следует иметь в виду, что ld-linux.so.1
может не всегда корректно работать на современных системах из-за новых функций и обновлений безопасности, добавленных в ядро и системные библиотеки.
Получение ld-linux.so.1
Для получения ld-linux.so.1
потребуется загрузка устаревших пакетов, таких как ldso
, из архивов старых дистрибутивов. Например, пакет ldso_1.9.11-9.deb
, доступный для Debian 2.2 ("Potato"), содержит нужный динамический компоновщик. Параллельно может потребоваться библиотека libc5
, которая, скорее всего, потребуется для запуска очень старых приложений. Оба пакета находятся в старых репозиториях Debian и могут быть загружены оттуда.
Установка и использование
Поскольку стандартные инструменты управления пакетами, такие как dpkg
, не смогут установить эти пакеты из-за конфликтов, связанных с актуальными системными библиотеками, потребуется ручная установка:
- Сначала скачайте нужные .deb файлы.
- Извлеките содержимое с помощью команды
dpkg-deb -x <имя_пакета>.deb <путь_назначения>
. - Скопируйте файлы в соответствующие каталоги вручную. Например,
ld-linux.so.1
может быть помещен в каталог/lib/
.
Внимание
Перед началом рабочих манипуляций будет разумно настроить тестовую среду. Для этого подойдут виртуальные машины или контейнеры, которые легко сбросить до изначального состояния в случае возникновения проблем. Такой подход позволит избежать потенциальных конфликтов и сбоев функционирования основной системы.
Заключение
Поддержка старых бинарников может быть непростой задачей в условиях современных 64-битных операционных систем. Заблаговременное планирование, понимание совместимости библиотек и архитектуры обеспечат успешную интеграцию и запуск устаревших программ. В дальнейшем такой опыт может оказаться полезным, когда речь пойдет о других устаревших системах и совместимости программного обеспечения.