Як використовувати 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.


Я можу придумати пару рішень - що для вас краще? (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. Для цього використовується запропонований тут трюк встановлення, щоб примусити повне завантаження всіх залежностей, оскільки в цьому порожньому корені нічого не встановлено. 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)


+1, звучить як те, що я хочу! Я буду експериментувати і оновлювати, якщо це відповідає тому, що я хочу!
Прем

4

Мені це було потрібно кілька разів, тому я автоматизував відповідь @Steve Bonds. Просто не забудьте визначити PKGяк пакет для встановлення на обох машинах (відмова від відповідальності: для CentOS 7. Для CentOS 6, змініть --releaseverі на CentOS-7місці.

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

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

1
Ви можете додати -yдо останньої команди, щоб підтвердити встановлення пакетів при запуску у фоновому режимі.
ToniTornado

Чудово, що ви взяли це з опису до автоматизованого процесу. Хороша робота!
Стів Бондс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.