Назад | Перейти на главную страницу

Установка пакетов yum в автономной системе CentOS 6

У меня есть система CentOS 6, которая по соображениям безопасности закрыта. Возможно, он никогда не был подключен к Интернету, а если и был, то давно не обновлялся.

Я хочу поместить все пакеты .rpm на диск, чтобы их можно было установить в автономном режиме, не запрашивая Интернет. Однако проблема, с которой я столкнулся на своей тестовой виртуальной машине, заключается в том, что yum продолжает зависать и пытается выполнить обновление из онлайн-репозитория, даже если указан локальный путь.

Кроме того, есть ли способ легко взять пакет и все зависимости для этого пакета, используя yum-utils/yumdownloader? На данный момент он все еще пропускает некоторые зависимости (например, когда я вытаскиваю rpm gcc-c ++, он захватывает cpp и gcc но это не потянет cloog-ppl, mpfr или ppl)

Я уже пробовал решение вроде этого, но я не могу предположить, что уже будет дерево зависимостей или что yum будет в актуальном состоянии.

При новой установке образа докера при первой попытке запустить yum (с отключенным интернетом) я получаю Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again

Если вас беспокоит совместимость между установленным выпуском и последней стабильной версией, вы можете определить свою версию centos в /etc/redhat-release и использовать пакеты из http://vault.centos.org/, однако имейте в виду, что они не будут содержать никаких обновлений безопасности или исправлений ошибок.

Для загрузки пакетов используйте официальную инструкцию RedHat: https://access.redhat.com/solutions/10154

yum install yum-plugin-downloadonly
yum install --downloadonly --downloaddir=<directory> <package>

или

yum install yum-utils
yumdownloader --resolve

Вы также можете посмотреть репликацию истории yum на vm, куда вы хотите загрузить rpms, с помощью методов из этого ответа: https://unix.stackexchange.com/a/83115

Самый простой способ, и он долгое время работал:

yum-debug-dump => gives file.
yum-debug-restore <file-from-debug-dump>

... который работает очень похоже на команду dpkg get / set selections, AIUI. Также обратите внимание, что если вы воспроизводите историю, вы можете использовать:

yum history addon-info last saved_tx => gives file
yum load-tx <file-from-addon-info>

... вместо того, чтобы разбирать его самостоятельно.

Редактировать:

Чтобы установить все rpms из каталога, cd к нему и просто используйте rpm -ivh *.rpm если вы хотите их установить, или rpm -Uvh *.rpm если некоторые загруженные файлы новее, чем уже существующие, и вы можете их обновить.

edit: NOPE, все не так просто. Все еще получаю эту ошибку в новом стеке: Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again

Если я позволю yum подключиться к Интернету на время, достаточное для его настройки, сработает следующее:

Сначала я смог вытащить все пакеты зависимостей с помощью вызовов

yum install -y --downloadonly --downloaddir=$pkgdir <package>

и

yum reinstall -y --downloadonly --downloaddir=$pkgdir <package>

заставить любые уже установленные пакеты вытащить свои .rpm и зависимости. Затем, как только я получил свой архив пакетов, я поместил его в новую систему.

Сначала я побежал sed -i 's/enabled=1/enabled=0/' '/etc/yum/pluginconf.d/fastestmirror.conf' чтобы отключить плагин fastmirror.

Затем я смог установить все необходимые пакеты, войдя в каталог с пакетами и осторожно вызвав

yum install --disablerepo=\* packag*

в порядке, требуемом зависимостями. Так это выглядело как

yum install --disablerepo=\* epel*
yum install --disablerepo=\* ius*
yum install --disablerepo=\* libstd*
yum install --disablerepo=\* mpfr*
yum install --disablerepo=\* cpp*
yum install --disablerepo=\* libgcc*
yum install --disablerepo=\* libgomp*
yum install --disablerepo=\* libg*
yum install --disablerepo=\* ppl*
yum install --disablerepo=\* cloog*
yum install --disablerepo=\* gcc*
yum install --disablerepo=\* atlas*
yum install --disablerepo=\* python*

И вуаля! Я смог запустить python3.5 в полностью закрытой системе.