У меня есть система 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 в полностью закрытой системе.