Установка пакетов RPM в системе без Интернета вызывает конфликты зависимостей: libstdc ++. So.6, libm и т. Д.

Чтобы избежать проблемы XY, позвольте мне сначала описать ситуацию.

У нас есть клиентский проект с уникальными обстоятельствами. У нас есть относительно современный программный стек (материал Keras DNN), который необходимо запускать в системе клиента. Эта система, кластер Cloudera CentOS 6, находящаяся в производстве, закрыта для обеспечения безопасности. Мы не можем гарантировать, что эту вещь когда-либо видели в Интернете.

Мы разработали сценарий bash, который устанавливает необходимые пакеты с диска с помощью RPM, и протестировал его на нашем локальном смоделированном (контейнерном) кластере (YUM не работает, потому что база данных репо не обновлена). После некоторой игры мы смогли запустить Keras без каких-либо пакетов из Интернета.

У клиента настроена собственная виртуализированная система, которая должна быть довольно близка к реальному кластеру (с точки зрения конфигурации). Однако, когда он его запустил, полная катастрофа. Множество ошибок вроде:

(для установки glibc-common-2.12 и друзей через Эта система, кластер Cloudera CentOS 6, находящаяся в производстве, закрыта для обеспечения безопасности. Мы не можем гарантировать, что эту вещь когда-либо видели в Интернете.

Мы разработали сценарий bash, который устанавливает необходимые пакеты с диска с помощью RPM, и протестировал его на нашем локальном смоделированном (контейнерном) кластере (YUM не работает, потому что база данных репо не обновлена). После некоторой игры мы смогли запустить Keras без каких-либо пакетов из Интернета.

У клиента настроена собственная виртуализированная система, которая должна быть довольно близка к реальному кластеру (с точки зрения конфигурации). Однако, когда он его запустил, полная катастрофа. Множество ошибок вроде:

(для установки glibc-common-2.12 и друзей через Эта система, кластер Cloudera CentOS 6, находящаяся в производстве, закрыта для обеспечения безопасности. Мы не можем гарантировать, что эту вещь когда-либо видели в Интернете.

Мы разработали сценарий bash, который устанавливает необходимые пакеты с диска с помощью RPM, и протестировал его на нашем локальном смоделированном (контейнерном) кластере (YUM не работает, потому что база данных репо не обновлена). После некоторой игры мы смогли запустить Keras без каких-либо пакетов из Интернета.

У клиента настроена собственная виртуализированная система, которая должна быть довольно близка к реальному кластеру (с точки зрения конфигурации). Однако, когда он его запустил, полная катастрофа. Множество ошибок вроде:

(для установки glibc-common-2.12 и друзей через Не гарантирую, что эту штуку когда-либо видели в Интернете.

Мы разработали сценарий bash, который устанавливает необходимые пакеты с диска с помощью RPM, и протестировал его на нашем локальном смоделированном (контейнерном) кластере (YUM не работает, потому что база данных репо не обновлена). После некоторой игры мы смогли запустить Keras без каких-либо пакетов из Интернета.

У клиента настроена собственная виртуализированная система, которая должна быть довольно близка к реальному кластеру (с точки зрения конфигурации). Однако, когда он его запустил, полная катастрофа. Множество ошибок вроде:

(для установки glibc-common-2.12 и друзей через Я не гарантирую, что эту вещь когда-либо видели в Интернете.

Мы разработали сценарий bash, который устанавливает необходимые пакеты с диска с помощью RPM, и протестировал его на нашем локальном смоделированном (контейнерном) кластере (YUM не работает, потому что база данных репо не обновлена). После некоторой игры мы смогли запустить Keras без каких-либо пакетов из Интернета.

У клиента настроена собственная виртуализированная система, которая должна быть довольно близка к реальному кластеру (с точки зрения конфигурации). Однако, когда он его запустил, полная катастрофа. Множество ошибок вроде:

(для установки glibc-common-2.12 и друзей через После некоторой игры мы смогли запустить Keras без каких-либо пакетов из Интернета.

У клиента настроена собственная виртуализированная система, которая должна быть довольно близка к реальному кластеру (с точки зрения конфигурации). Однако, когда он его запустил, полная катастрофа. Множество ошибок вроде:

(для установки glibc-common-2.12 и друзей через После некоторой игры мы смогли запустить Keras без каких-либо пакетов из Интернета.

У клиента настроена собственная виртуализированная система, которая должна быть довольно близка к реальному кластеру (с точки зрения конфигурации). Однако, когда он его запустил, полная катастрофа. Множество ошибок вроде:

(для установки glibc-common-2.12 и друзей через sudo rpm -Uvh glibc-common-2.12-1.209.el6_9.1.x86_64.rpm glibc-2.12-1.209.el6_9.1.x86_64.rpm glibc-headers-2.12-1.209.el6_9.1.x86_64.rpm glibc-devel-2.12-1.209.el6_9.1.x86_64.rpm )

warning: ./rpm/glibc-common-2.12-1.209.el6_9.1.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies
    tzdata >= 2015g-4 is needed by glibc-common-2.12-1.209.el6_9.1.x86_64.rpm
    libc.so.6(GLIBC_2.13)(64bit) is needed by (installed) util-linux-2.23.2-26.el7.x86_64
    libc.so.6(GLIBC_2.13)(64bit) is needed by (installed) systemd-219-19.el7.x86_64
    ...(more of the same)...
    libc.so.6(GLIBC_2.13)(64bit) is needed by (installed) xz-libs-5.1.2-12alpha.el17.x86_64

(Или выполните команду: sudo rpm -Uvh gcc-c ++ - 4.4.7-18.el6.x86_64.rpm gcc-4.4.7-18.el6.x86_64.rpm libstdc ++ - 4.4.7 -18.el6.x86_64.rpm libstdc ++ - devel-4.4.7-18.el6.x86_64.rpm )

libstdc++.so.6(GLIBCXX_3.4.15)(64bit) is needed by (installed) {name of a package}
libstdc++.so.6(GLIBCXX_3.4.15)(64bit) is needed by (installed) {name of another package}
...

X требуется для Y - наиболее распространенная ошибка, но мы также видим такие, как

openssl < 1:1.0.1-0.3.beta3 is obsoleted by (installed) openssl-libs-1:1.0.1e-42.el4.9x86_64

и

file /etc/rpm/macros.ghc-srpm from install of epel-release-6-8.noarch conflicts with file from package redhad-rpm-config-9.1.0-68.el7.centos.noarch

В частности, много конфликтов проистекает из

  • libc.so.6
  • libm.so.6
  • libgmp.so.3
  • libmpfr.so.4
  • libstdc ++ .so.6
  • libffi.so.6

, которые являются суперкритическими библиотеками, и я 1) не могу предположить, что какая-то конкретная версия будет в кластере, и 2) не могу возиться с, чтобы один из них не сломался.

Я больше занимаюсь машинным обучением, и моих навыков работы с Linux достаточно, чтобы настраивать и обслуживать блоки CUDA и тому подобное, но это становится для меня глубокой водой, поэтому любой ввод, даже простой, приветствуется. Есть ли способ создать отдельную библиотечную среду, в которой мы можем установить необходимые приложения, не нарушая уже существующие? Я знаю chroot , но не знаю, как правильно им пользоваться.

tl; dr - ад зависимостей от системы с воздушной защитой без возможности удаленного администрирования и устаревшей, плохо обслуживаемой сборки.

Большое спасибо!

0
задан 24 April 2017 в 17:02
1 ответ

Мне очень часто приходится работать в средах с воздушным зазором.

Лучший подход, который я нашел до сих пор, - это иметь виртуальную машину с ТОЧНО той же средой (т.е. точно такой же версией для всех пакеты, если это возможно, с его установкой в ​​соответствии с тем же процессом, что и в производственной среде) - предоставьте этой виртуальной машине доступ в Интернет и используйте соответствующий диспетчер пакетов, чтобы ЗАГРУЗИТЬ ТОЛЬКО все необходимые пакеты.

Чтобы загружать только пакеты, а не устанавливать их, я использую:

yum install --downloadonly <requiredpackage>

Это работает из коробки, по крайней мере, с CentOS 6 - в другом дистрибутиве на основе RPM вам может потребоваться установить yum-downloadonly пакет, поскольку эта функциональность обеспечивается подключаемым модулем yum.

Затем я архивирую все загруженные пакеты в файл .tar.gz, передаю этот архив в производственную систему, распаковываю во временный каталог и устанавливаю пакеты, используя :

rpm -i <directory>/*.rpm

Также важно использовать точечные выпуски вместо только основной версии CentOS или переменной "$ releaseversion" в файлах конфигурации /etc/yum.repos.d/*.repo, поскольку репозитории с основной версией получают обновляется с течением времени. Этот точечный выпуск должен соответствовать установленной версии на виртуальной машине, используемой для загрузки, и в системе с воздушным резервированием.

Например, используйте:

http://mirror.centos.org/centos/7.7.1908/os/x86_64/

вместо

http://mirror.centos.org/centos/7/os/x86_64/

, поскольку последний будет иметь обновления пакетов до тех пор, пока CentOS 7 не достигнет конца обслуживание (30 ноября 2020 г. - согласно FAQ по CentOS ).

Из сделанного вами описания кажется, что упомянутая вами виртуальная машина была каким-то образом обновлена ​​из репозиториев CentOS, так что вы наличие конфликтов между версиями.

Надеюсь, это поможет.

1
ответ дан 4 December 2019 в 16:17

Теги

Похожие вопросы