Вопрос или проблема
Я использую Amazon Linux CentOS, однако версия устанавливаемого файла – 5.30. Мне нужна более новая версия.
файл: Компилированная версия магии [534] не совпадает с версией библиотеки магии
[530]
шаги для воспроизведения:
wget -m ftp://ftp.astron.com/pub/file/file-5.34.tar.gz
cd ftp.astron.com/pub/file/
tar -zxf file-5.34.tar.gz
cd file-5.34
./configure --prefix=/usr
make
make install
На моей машине с Ubuntu я могу следовать, что связано с удалением libmagic перед установкой. Какой эквивалент на CentOS / Amazon Linux?
Или есть ли более простой способ установить file 5.34 с помощью yum, кроме компиляции?
Мне также пришлось удалить скомпилированный файл магии, чтобы libmagic обновился корректно при ручной компиляции. В настоящее время только глючная версия (5.32) доступна в репозиториях Canonical, так что это единственный путь на данный момент. Убедитесь, что вы удалили /оба/ libmagic1 и libmagic-mgc перед компиляцией/установкой файла. Тогда libmagic должен обновиться соответствующим образом.
Или есть ли более простой способ установить file 5.34 с помощью yum, кроме компиляции?
Насколько мне известно, нет – кто-то должен будет сделать бэктор для пакета file
для вашей точной версии Amazon Linux. Это не произойдет.
Тем не менее, компилировать свой собственный обновленный пакет несложно. Все, что вам нужно, это машина для сборки (один раз) для компиляции пакета для целевой машины (Amazon Linux x86_64 или arm64, я не знаю, какую вы используете).
Для этой машины сборки вам понадобится современная Linux-подобная система Red Hat, которая действительно предоставляет необходимые инструменты для упаковки. Amazon Linux этого не делает, так что это не вариант; я просто использую машину Fedora (VM, также может быть машиной AWS EC2, если хотите, но я запускаю такие вещи локально, нет необходимости платить Amazon за то, что не имеет ничего общего с «облаком»). Обратите внимание, что я повторяю это, потому что люди неправильно понимают: вам нужна машина Fedora, чтобы собрать пакет для Amazon Linux.
Я написал инструкции для этого; считается, что $pkgname=file
в данном случае:
Когда вы собираете file
с нуля, он устанавливает общие библиотеки в /usr/lib/
. Linux на основе Debian, и я считаю, что CentOS попадает в эту категорию, устанавливает общие библиотеки file
в /usr/lib/x86_64-linux-gnu/
или любое другое *-linux-gnu
, подходящее для вашей архитектуры. Вам нужно будет либо установить соответствующие параметры конфигурации (--libdir=/usr/lib/x86_64-linux-gnu
— я думаю), чтобы перезаписать, либо перезаписать вручную, либо удалить старые файлы вручную.
Ответ или решение
Решение проблемы: Несоответствие версий библиотек и скомпилированных файлов
Ошибка, которую вы получаете — "Compiled magic version [534] does not match with shared library magic version [530]", происходит из-за несоответствия версии библиотеки libmagic
, используемой вашим приложением, и версии, с которой было скомпилировано само приложение. Это означает, что вы пытаетесь использовать скомпилированный файл, который не соответствует установленной библиотеке.
Шаги для решения проблемы
1. Удаление старых библиотек
Для начала необходимо удалить старую версию библиотеки libmagic
, чтобы избежать конфликтов. В CentOS и Amazon Linux это можно сделать с помощью команд:
sudo yum remove file libmagic
2. Установка необходимых зависимостей
Чтобы собрать файл file
версии 5.34, вам потребуются определенные инструменты для сборки. Установите их с помощью следующей команды:
sudo yum groupinstall "Development Tools"
sudo yum install wget
3. Скачивание и сборка нового файла
Следующим шагом является загрузка и сборка новой версии file
. Вот последовательность команд, которые можно использовать для скачивания и установки:
wget ftp://ftp.astron.com/pub/file/file-5.34.tar.gz
tar -zxf file-5.34.tar.gz
cd file-5.34
./configure --prefix=/usr
make
sudo make install
Эти команды скомпонуют и установят нужную версию, а также обновят библиотеки.
4. Удаление кэшированных файлов
Важно убедиться, что кэшированные файлы также были удалены перед установкой новой версии. Если существует необходимость, может понадобиться удалить ранее скомпилированные файлы:
sudo rm -f /usr/lib/libmagic.so*
5. Проверка версии
После установки осуществите проверку, чтобы установить, что все шаги выполнены правильно:
file --version
Использование YUM и готовых пакетов
На данный момент, более поздняя версия file
недостаточно распространена в стандартных репозиториях Amazon Linux или CentOS. Если вы хотите избежать ручной компиляции, вы можете попробовать использовать сторонние репозитории, такие как EPEL (Extra Packages for Enterprise Linux), однако нет гарантий, что они будут содержать последнюю версию.
Для добавления EPEL:
sudo yum install epel-release
sudo yum update
Затем попробуйте установить пакет file
снова:
sudo yum install file
Заключение
К сожалению, для достижения желаемого результата, чаще всего, вам нужно собирать пакеты вручную. Этот процесс следует выполнять тщательно, чтобы избежать конфликтов с уже установленными библиотеками. Очевидно, существуют и альтернативные способы, такие как использование виртуальных машин или контейнеров для обеспечения чистой среды сборки, что может существенно упростить задачу.