Jak użyć yum, aby uzyskać wszystkie wymagane RPM, do użytku offline?


30

Mam jeden serwer z łącznością sieciową, gdzie mogę użyć „yum install $ PACKAGE”.
Chcę jakieś polecenie yum, na przykład yum cache-rpms $PACKAGE $DIRECTORYtakie, że wszystkie wymagane pliki RPM zostaną pobrane do $ DIRECTORY, który również będzie miał plik ( Install.sh) określający kolejność instalowania tych RPM na wielu innych serwerach bez połączenia z siecią.
Install.shmoże nawet być skryptem powłoki, który zachowuje się tak samo jak yum install $PACKAGE, z tym wyjątkiem, że nie będzie korzystał z sieci, ale będzie tylko używał $DIRECTORY.

Możliwy?

Szukam ogólnego rozwiązania, w którym dostępne jest yum i RPM, ale dla konkretności: jest na zestawie serwerów CENTOS 6.7.


Mogę wymyślić kilka rozwiązań - które będą dla Ciebie lepsze? (1) Podejście oparte na jednym pakiecie. To pobiera mniej, ale wymaga więcej pracy ręcznej. Lub ... (2) Całe podejście repo. To pobiera dużo , ale można to zrobić przy większej automatyzacji.
Steve Bonds

@SteveBonds, chciałbym (1) „pojedynczy pakiet”, ponieważ (2) „całe repozytorium” wymaga czasu na pobranie i zajmuje zbyt dużo miejsca.
Prem

Czy spojrzałeś na Spacewalk?
fpmurphy

Odpowiedzi:


40

Oto konkretny przykład z użyciem „httpd” jako pakietu do pobrania i zainstalowania. Ten proces został przetestowany zarówno na CentOS6, jak i CentOS7.

Zainstaluj potrzebne rzeczy i ułóż miejsce na pobrane RPM:

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

Pobierz RPM. Wykorzystuje to sugerowaną tutaj sztuczkę installroot, aby wymusić pełne pobranie wszystkich zależności, ponieważ nic nie jest zainstalowane w tym pustym katalogu głównym. Yum stworzy tam trochę metadanych, ale zamierzamy to wszystko wyrzucić. Zauważ, że dla CentOS7 releaseverbędzie to „7”.

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

Tak, to była mała wersja. Powinieneś zobaczyć rozmiar plików do pobrania z pełnym repo!

Wygeneruj metadane potrzebne do przekształcenia naszego nowego stosu RPM w repozytorium YUM i wyczyść rzeczy, których już nie potrzebujemy:

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

Skonfiguruj katalog pobierania jako repozytorium. Zauważ, że dla CentOS7 gpgkey miałby nazwę „7” zamiast „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

Aby sprawdzić brakujące zależności:

# repoclosure --repoid=offline-httpd

Nie zorientowałem się, dlaczego na CentOS7 zgłasza się takie rzeczy, jak libssl.so.10(libssl.so.10)(64bit)brak, httpd-toolskiedy openssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm(dostawca tej biblioteki) jest wyraźnie obecny w katalogu. Mimo to, jeśli zauważysz coś, czego w oczywisty sposób brakuje, może to być dobra szansa, aby wrócić i dodać to przy użyciu tej samej yum install --downloadonlymetody powyżej.

W trybie offline lub po skopiowaniu /var/tmp/httpdkatalogu repo na inny serwer skonfiguruj tam repozytorium:

# 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

Mam nadzieję, że nie będzie brakujących zależności!


3
Próbowałem postępować zgodnie z twoim przewodnikiem, aby zbudować folder na CentOS 7 i zainstalować go na Red Hat 7, wszystko działało bez błędów
Piyin 16.01.18

1
Chociaż zgodność między dwoma systemami operacyjnymi jest wystarczająco dobra, aby takie rzeczy działały, aby zapewnić obsługę RedHat, należy pobrać oprogramowanie RedHat z serwerów RedHat przy użyciu podobnego procesu.
Steve Bonds

1
Tak, masz rację. Ale w tym przypadku było to bliskie środowisko z regułami sieci, których nie mogłem zmienić. Jak niektórzy mówią: „klient ma zawsze rację”
Piyin

1
bardzo dobrze działa w Centos 7, dzięki!
Carlos Vega

4

Wygląda na to, że pytasz o yumdownloaderto, co jest zawarte w pakiecie yum-utils. Jest już kilka pytań i odpowiedzi na ten temat, patrz np. Pobierz wszystkie zależności za pomocą yumdownloadera, nawet jeśli jest już zainstalowany? lub Jak znaleźć adresy URL pakietów za pomocą Yum?

yumdownloaderpobierze pakiety, chociaż nie wygeneruje pliku, Install.shponieważ kolejność może być ustalona przez yum, więc możesz zainstalować pakiety na polu docelowym za pośrednictwem
yum install ./*rpmfolderu z pobranymi pakietami (który musi zawierać wszystkie zależności w porównaniu do instalacja podstawowa - patrz pierwszy link powyżej dotyczący repotrack)


+1, brzmi jak chcę! Będę eksperymentować i aktualizować, jeśli będzie pasować do tego, czego chcę!
Prem

4

Potrzebowałem go kilka razy, więc zautomatyzowałem odpowiedź @Steve Bonds. Tylko upewnij się, że zdefiniuj PKGjako pakiet do zainstalowania na obu komputerach (Oświadczenie: dla CentOS 7. W przypadku CentOS 6, zmień --releaseveri CentOS-7spot.

maszyna online

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

na komputerze offline:

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
Możesz dodać -ydo ostatniego polecenia, aby potwierdzić instalację pakietów po uruchomieniu w tle.
ToniTornado

To wspaniałe, że przeszedłeś z opisu do zautomatyzowanego procesu. Dobra robota!
Steve Bonds
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.