Как использовать yum для получения всех необходимых RPM для автономного использования?

30

У меня есть один сервер с сетевым подключением, где я могу использовать «yum install $ PACKAGE».
Мне нужна какая-то команда yum, например, yum cache-rpms $PACKAGE $DIRECTORYтакая, что все необходимые RPM-файлы будут загружены в $ DIRECTORY, в которой также будет указан файл ( Install.sh) с указанием порядка установки этих RPM- файлов на многих других серверах без сетевого подключения.
Install.shможет даже быть сценарий оболочки, который имеет такое же поведение yum install $PACKAGE, за исключением того, что он не будет использовать сеть, но будет использовать только $DIRECTORY.

Возможный?

Я ищу общее решение, в котором доступны yum и RPM, но для определенности: оно находится на наборе серверов CENTOS 6.7.

Prem
источник
Я могу придумать пару решений - что лучше для вас? (1) Единый пакетный подход. Это загружает меньше, но требует больше ручной работы. Или ... (2) Весь подход репо. Это загружает много , но может быть сделано с большей автоматизацией.
Стив Бондс
@SteveBonds, я хотел бы (1) «один пакет», потому что (2) «весь репо» займет время, чтобы загрузить и занять слишком много места.
Прем
Вы смотрели на Spacewalk?
fpmurphy

Ответы:

40

Вот конкретный пример использования httpd в качестве пакета для загрузки и установки. Этот процесс был протестирован как на CentOS6, так и на CentOS7.

Установите необходимый материал и создайте место для загрузки загруженных RPM:

# yum install yum-plugin-downloadonly yum-utils createrepo
# mkdir /var/tmp/httpd
# mkdir /var/tmp/httpd-installroot

Загрузите RPM. При этом используется предложенный здесь трюк installroot для принудительной полной загрузки всех зависимостей, поскольку в этом пустом корне ничего не установлено. Yum создаст там некоторые метаданные, но мы все выбросим. Обратите внимание, что для CentOS7 releaseverбудет "7".

# yum install --downloadonly --installroot=/var/tmp/httpd-installroot --releasever=6 --downloaddir=/var/tmp/httpd httpd

Да, это была маленькая версия. Вы бы видели размер загрузок с полным репо!

Сгенерируйте метаданные, необходимые для превращения нашей новой стопки RPM в репозиторий YUM, и очистите то, что нам больше не нужно:

# createrepo --database /var/tmp/httpd
# rm -rf /var/tmp/httpd-installroot

Настройте каталог загрузки как репо. Обратите внимание, что для CentOS7 gpgkey будет называться «7» вместо «6»:

# vi /etc/yum.repos.d/offline-httpd.repo
[offline-httpd]
name=CentOS-$releasever - httpd
baseurl=file:///var/tmp/httpd
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

Чтобы проверить отсутствующие зависимости:

# repoclosure --repoid=offline-httpd

Я не выяснил, почему в CentOS7 сообщается о таких вещах, как libssl.so.10(libssl.so.10)(64bit)отсутствие, httpd-toolsкогда openssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm(поставщик этой библиотеки) явно присутствует в каталоге. Тем не менее, если вы видите, что чего-то явно не хватает, это может быть хорошим шансом вернуться и добавить это, используя тот же yum install --downloadonlyметод, описанный выше.

В автономном режиме или после копирования /var/tmp/httpdкаталога репо на другой сервер настройте репо:

# vi /etc/yum.repos.d/offline-httpd.repo
[offline-httpd]
name=CentOS-$releasever - httpd
baseurl=file:///var/tmp/httpd
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
# yum --disablerepo=\* --enablerepo=offline-httpd install httpd

Надеюсь, нет отсутствующих зависимостей!

Стив Бондс
источник
3
Я попытался следовать вашему руководству, чтобы собрать папку на CentOS 7 и установить ее на Red Hat 7, все работало без ошибок
Piyin
1
Хотя совместимость между этими двумя операционными системами достаточно хорошая, чтобы подобные вещи работали, для обеспечения поддержки RedHat вам следует загрузить программное обеспечение RedHat с серверов RedHat, используя аналогичный процесс.
Стив Бондс
1
Да, ты прав. Но в этом случае это была близкая среда с сетевыми правилами, которые я не мог изменить. Как некоторые говорят: «клиент всегда прав»
Пийин
1
работает очень хорошо в Centos 7, спасибо!
Карлос Вега
4

Кажется, вы спрашиваете, yumdownloaderчто содержится в пакете yum-utils. По этому поводу уже есть несколько вопросов и ответов, см., Например, Загрузка всех зависимостей с помощью yumdownloader, даже если они уже установлены? или Как найти URL пакетов с помощью Yum?

yumdownloaderбудет загружать пакеты, хотя он не будет генерировать файл, так Install.shкак порядок может быть определен самим yum, поэтому вы можете установить пакеты на целевую коробку через
yum install ./*rpmпапку с загруженными пакетами (которая должна включать все зависимости по сравнению с базовая установка - см. первую ссылку выше repotrack)

doktor5000
источник
+1, звучит как то, что я хочу! Я буду экспериментировать и обновлять, если это соответствует тому, что я хочу!
Прем
4

Я нуждался в этом несколько раз, поэтому я автоматизировал ответ @Steve Bonds. Просто убедитесь, что вы определили PKGпакет для установки на обоих компьютерах (Отказ от ответственности: для CentOS 7. Для CentOS 6 измените --releaseverи CentOS-7spot.

онлайн машина

PKG=... # NAME OF THE PACKAGE TO INSTALL ON OFFLINE MACHINE
yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=7 --downloaddir=/tmp/$PKG $PKG
createrepo --database /tmp/$PKG
rm -rf /tmp/$PKG-installroot
rsync -arv /tmp/$PKG/ [IP of the machine]:/tmp/$PKG

на автономной машине:

PKG=... # NAME OF THE PACKAGE
echo "[offline-$PKG]
name=CentOS-\$releasever - $PKG
baseurl=file:///tmp/$PKG/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7" >  /etc/yum.repos.d/offline-$PKG.repo

# install package offline:
yum --disablerepo=\* --enablerepo=offline-$PKG install --nogpgcheck $PKG
shosaco
источник
1
Возможно, вы захотите добавить -yв последнюю команду, чтобы подтвердить установку пакетов при запуске в фоновом режиме.
ToniTornado
Здорово, что вы взяли это из описания в автоматизированный процесс. Хорошо сделано!
Стив Бондс