Добавление 32-битной совместимости для старых и очень старых бинарных файлов.

Вопрос или проблема

У меня есть пакет статистики в 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, которого у меня пока [ещё] нет. Два вопроса:

  1. могу ли я иметь ld-linux.so.1 и ld-linux.so.2 на одной системе?
  2. что мне нужно установить, чтобы получить ld-linux.so.1?
  1. Да, можете, но я не уверен, насколько хорошо ld-linux.so.1 будет работать на современной системе. ld-linux.so.1 — это динамический линкер “libc5” (это была первая версия GNU C Library для Linux, основанная на ELF), и в начале 2000-х годов было обычным для дистрибутивов устанавливать оба, пока они переходили с libc5 на glibc6, и позже для поддержки старых двоичных файлов.

  2. Вам придётся загрузить пакеты из архивов версий дистрибутивов. Я сам этого не тестировал, но вы можете загрузить ldso (пакет, содержащий ld-linux.so.1) и libc5 (вероятно, требуемая ваша программа C-библиотека) из Debian 2.2 (“Potato”), который, по-моему, был последней версией, поставлявшей пакеты с совместимостью. Вы не сможете установить эти пакеты с помощью dpkgldso конфликтует с 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, не смогут установить эти пакеты из-за конфликтов, связанных с актуальными системными библиотеками, потребуется ручная установка:

  1. Сначала скачайте нужные .deb файлы.
  2. Извлеките содержимое с помощью команды dpkg-deb -x <имя_пакета>.deb <путь_назначения>.
  3. Скопируйте файлы в соответствующие каталоги вручную. Например, ld-linux.so.1 может быть помещен в каталог /lib/.

Внимание

Перед началом рабочих манипуляций будет разумно настроить тестовую среду. Для этого подойдут виртуальные машины или контейнеры, которые легко сбросить до изначального состояния в случае возникновения проблем. Такой подход позволит избежать потенциальных конфликтов и сбоев функционирования основной системы.

Заключение

Поддержка старых бинарников может быть непростой задачей в условиях современных 64-битных операционных систем. Заблаговременное планирование, понимание совместимости библиотек и архитектуры обеспечат успешную интеграцию и запуск устаревших программ. В дальнейшем такой опыт может оказаться полезным, когда речь пойдет о других устаревших системах и совместимости программного обеспечения.

Оцените материал
Добавить комментарий

Капча загружается...