Polecenie rpm (RPM Package Manager, dawniej Red Hat Package Manager) pozwala na instalację, aktualizację, odświeżanie, nadpisywanie, przeszukiwanie, usuwanie, wypakowywanie, walidację i weryfikację pakietów binarnych przeznaczonych do systemu RHEL lub CentOS. Polecenie to nie zapewniania niestety kontroli zależności pakietów, musimy o to zadbać sami.
Opcje instalacyjne | Opis |
-F | Aktualizuje istniejący pakiet. |
-i | Instaluje pakiet. |
-U | Aktualizuje istniejący pakiet lub instaluje jeżeli nie jest zainstalowany w systemie. |
-h | Pokazuje postęp instalacji. |
–force | Instaluje pakiet nawet jeżeli taka sama wersja pakietu jest już zainstalowana w systemie. |
–replacepkgs | Nadpisuje zainstalowane pakiety. |
Opcje zapytań | Opis |
-q | Przeprowadza zapytanie i wyświetla pakiety. |
-qa | Wyświetla wszystkie zainstalowane pakiety. |
-qc | Wyświetla pliki konfiguracyjne danego pakietu. |
-qd | Wyświetla pliki zawierające dokumentację danego pakietu. |
-qf | Wyświetla informacje o plikach. |
-qi | Wyświetla informacje o pakiecie. |
-ql | Listuje pliki wchodzące w skład pakietu. |
-q –whatprovides | Listuje pakiety, które dostarczają określony pakiet lub plik. |
-q –whatqueries | Listuje pakiety, których wymaga określony pakiet lub plik. |
-qR | Listuje zależności. |
Opcje inne | Opis |
-e | Usuwa pakiet. |
-import | Importuje klucz publiczny. |
-K | Waliduje sygnaturę i integralność pakietu. |
-h | Pokazuje postęp instalacji. |
-v lub -vv |
Wyświetla dokładne informacje. |
-V | Weryfikuje integralność plików pakietu. |
W celu przeprowadzenia różnych zadań związanych z zarządzaniem pakietami rpm podmontujmy w systemie napęd DVD z płytą instalacyjną RHEL.
# mount /dev/cdrom /mnt
ISO z RHEL możemy natomiast podmontować w sposób następujący:
# mount –o loop /sciezka-do/rhel-server-7.0-x86_64-dvd.iso /mnt
Opcja -o informuje mount, że montuje obraz ISO a nie urządzenie blokowe.
Instalowanie pakietów.
Podczas instalacji pakietu tworzona jest niezbędna struktura katalogów i instalowane są wymagane przez pakiet pliki. Np.
# rpm –ivh /mnt/Packages/zsh-5.0.2-7.el7.x86_64.rpm
Preparing… ################################# [1 00%]
Updating / installing…
1 :zsh-5.0.2-7.el7 ################################# [1 00%
Jeżeli pakiet zsh będzie wymagał jakiś innych pakietów wygenerowany zostanie stosowny komunikat.
Instalacja pakietu bezpośrednio z serwera FTP:
# rpm –ivh ftp://host1.example.com/pub/outgoing/zsh-5.0.2-7.el7.x86_64.rpm
Aktualizacja pakietów.
Komenda aktualizuje pakiet jeżeli jest zainstalowany w systemie a jeżeli go nie ma to go instaluje. Tworzy ponadto kopię zapasową wszystkich plików konfiguracyjnych związanych z aktualizacją i nadaje im rozszerzenie .rpmsave.
# rpm –Uvh /mnt/Packages/sushi-3.8.1-3.el7.x86_64.rpm
Odświeżanie pakietu.
Wymaga aby w systemie była zainstalowana starsza wersja pakietu
# rpm –Fvh /mnt/Packages/sushi-3.8.1-3.el7.x86_64.rpm
Aby odświeżyć wszystkie pakiety zainstalowane w systemie pakietami z podmontowanej wcześniej płyty DVD:
# rpm –Fvh /mnt/Packages/*.rpm
Usuwanie pakietu.
Odinstalowuje pakiet i wszystkie z nim związane pliki i katalogi. Pakiet jest usuwany pod warunkiem, że nie jest potrzebny do działania przez jakiś inny pakiet.
# rpm –ev zsh
Preparing packages…
zsh-5.0.2-7.el7.x86_64
Nadpisywanie pakietów.
Zamienia zainstalowane w systemie pliki związane z konkretnym pakiety na pliki z tej samej wersji.
# rpm –ivh --replacepkgs /mnt/Packages/zsh-5.0.2-7.el7.x86_64.rpm
Wypakowywanie plików z pakietów.
Pliki wchodzące w skład pakietu RPM mogą być wypakowane komendą rpm2cpio. Taka konieczność może przydażyć się gdy mamy np. uszkodzony plik wchodzący w skład jakiegoś niezbędnego pakietu.
Ustalamy w jakim pakiecie znajduje się potrzebny nam plik (np. ntp.conf):
# rpm –qf /etc/ntp.conf
ntp-4.2.6p5-18.el7.x86_64
Zakładając, że plik znajduje się w katalogu /mnt/Packages/ używamy komendy rpm2cpio do wypakowania pliku (-i) z pakietu ntp i tworzymy strukturę katalogu (-d):
# cd /tmp
# rpm2cpio /mnt/Packages/ntp-4.2.6p5-18.el7.x86_64.rpm | cpio –id
2795 blocks
Zapytania o pakiety rpm.
Zapytanie o wszystkie zainstalowane w systemie pakiety:
# rpm –qa
libXxf86misc-1.0.3-7.1.el7.x86_64
perl-HTTP-Tiny-0.033-3.el7.noarch
baobab-3.8.2-4.el7.x86_64
…… . .
Zapytanie o to czy konkretny pakiet jest zainstalowany w systemie:
# rpm –q perl
perl-5.16.3-283.el7.x86_64
To list all files in a package:
# rpm –ql iproute
/etc/iproute2
/etc/iproute2/ematch_map
/etc/iproute2/group
…… . .
Wylistowanie plików z dokumentacją dla danego pakietu:
# rpm –qd audit
/usr/share/doc/audit-2.3.3/COPYING
/usr/share/doc/audit-2.3.3/ChangeLog
/usr/share/doc/audit-2.3.3/README
…… . .
Wylistowanie plików konfiguracyjnych dla danego pakietu:
# rpm –qc coreutils
/etc/DIR_COLORS
/etc/DIR_COLORS.256color
/etc/DIR_COLORS.lightbgcolor
/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
Określenie z jakim pakietem powiązany jest dany plik:
# rpm –qf /etc/passwd
setup-2.8.71-4.el7.noarch
Wyświetlenie informacji o danym pakiecie:
# rpm –qi setup
Name :setup
Version :2.8.71
Release :4.el7
Architecture :noarch
Install Date :T ue 08 Jul 201 4 1 2:46:50 PM EDT
Group :System Environment/Base
Size :6963 1 0
License :Public Domain
Signature :RSA/SHA256, Wed 02 Apr 201 4 04:1 4:29 PM EDT, Key ID 1 99e2f91 fd43 1 d51
Source RPM :setup-2.8.71 -4.el7.src.rpm
Build Date :Wed 1 2 Mar 201 4 1 2:08:24 PM EDT
Build Host : x86-024.build.eng.bos.redhat.com
Relocations :(not relocatable)
Packager :Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor :Red Hat, Inc.
URL :https://fedorahosted.org/setup/
Summary :A set of system configuration and setup files
Description : T he setup package contains a set of important system configuration and setup files, such as passwd, group, and profile.
Wylistowanie wszystkich zależności danego pakietu:
# rpm –qR sox
/sbin/ldconfig
/sbin/ldconfig
libFLAC.so.8()(64bit)
…… . .
Zapytanie o to do czego przeznaczony jest dany plik instalacyjny:
# rpm –qip /mnt/Packages/zsh*
Name : zsh
Version : 5.0.2
Release : 7.el7
Architecture : x86_64
Install Date : (not installed)
Group : System Environment/Shells
Size : 583 443 3
License : MIT
Signature : RSA/SHA256, Wed 02 Apr 201 4 06:53 :21 PM EDT, Key ID 1 99e2f91 fd43 1 d51
Source RPM : zsh-5.0.2-7.el7.src.rpm
Build Date : T ue 28 Jan 201 4 02:11 :1 7 PM EST
Build Host : x86-024.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor : Red Hat, Inc.
URL : http://zsh.sourceforge.net/
Summary : Powerful interactive shell
Description
: T he zsh shell is a command interpreter usable as an interactive login shell and as a shell script command processor. Zsh resembles the ksh shell (the
Korn shell), but includes many enhancements. Zsh supports command line editing, built-in spelling correction, programmable command completion,
shell functions (with autoloading), a history mechanism, and more.
Aby określić jakich pakietów potrzebuje dany pakiet do poprawnej pracy:
# rpm –q --whatrequires iproute
initscripts-9.49.17-1.el7.x86_64
dhclient-4.2.5-27.el7.x86_64
dracut-network-033-161.el7.x86_64
libreswan-3.8-5.el7.x86_64
libvirt-daemon-1.1.1-29.el7.x86_64
NetworkManager-0.9.9.1-13.git20140326.4dba720.el7.x86_64
fcoe-utils-1.0.29-6.el7.x86_64
Walidacja integralności i wiarygodności pakietu.
OK na wyjściu potwierdza, że pakiet nie jest uszkodzony:
# rpm –K --nosignature /mnt/Packages/zsh-5.0.2-7.el7.x86_64.rpm
/mnt/Packages/zsh-5.0.2-7.el7.x86_64.rpm: sha1 md5 OK
Red Hat podpisuje swoje produkty i aktualizacje kluczem GPG i załącza niezbędne klucze publiczne do tych produktów w celu ich weryfikacji. Klucze te umieszczane są na nośnikach instalacyjnych i kopiowane do katalogu /etc/pki/rpm-gpg w czasie instalacji systemu.
Aby sprawdzić wiarygodność pakietu w pierwszej kolejności musimy zaimportować odpowiedni klucz GPG i wtedy zweryfikować pakiet.
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
# rpm –K /mnt/Packages/zsh-5.0.2-7.el7.x86_64.rpm
/mnt/Packages/zsh-5.0.2-7.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
Komunikat “pgp md5 OK” waliduje sygnaturę pakietu i zaświadcza autentyczność i integralność pakietu.
Wyświetlanie kluczy GPG.
Klucz zaimportowany wcześniej może zostać wyświetlony poleceniem RPM:
# rpm –q gpg-pubkey
gpg-pubkey-fd431d51-4ae0493b
Więcej szczegółów:
# rpm –qi gpg-pubkey-fd431d51-4ae0493b
Name : gpg-pubkey
Version : fd43 1 d51
Release : 4ae0493 b
Architecture : (none)
Install Date : T hu 1 8 Sep 201 4 06:58:59 PM EDT
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : T hu 22 Oct 2009 07:59:55 AM EDT
Build Host : localhost
Relocations (not relocatable)
Packager : Red Hat, Inc. (release key 2) <security@redhat.com>
Summary : gpg(Red Hat, Inc. (release key 2) <security@redhat.com>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.11 .1 (NSS-3 )
mQINBErgSTsBEACh2A4b0O9t+vzC9VrVtL1 AKvUWi9OPCjkvR7Xd8DtJxeeMZ5eF
0HtzIG58qDRybwUe89FZprB1 ffuUKzdE+HcL3 FbNWSSOXVjZIersdXyH3 NvnLLLF
0DNRB2ix3 bXG9Rh/RXpFsNxDp2CEMdUvbYCzE79K1 EnUT Vh1 L0Of023 FtPSZXX0c
u7Pb5DI5lX5YeoXO6RoodrIGYJsVBQWnrWw4xNTconUfNPk0EGZtEnzvH2zyPoJh
XGF+Ncu9XwbalnYde1 0OCvSWAZ5zT CpoLMT vQjWpbCdWXJzCm6G+/hx9upke546H
5IjtYm4dT IVT nc3 wvDiODgBKRzOl9rEOCIgOuGtDxRxcQkjrC+xvg5Vkqn7vBUyW
9pHedOU+PoF3 DGOM+dqv+eNKBvh9YF9ugFAQBkcG7viZgvGEMGGUpzNgN7XnS1 gj
/DPo9mZESOYnKceve2tIC87p2hqjrxOHuI7fkZYeNIcAoa83 rBltFXaBDYhWAKS1
PcXS1 /7JzP0ky7d0L6Xbu/If5kqWQpKwUInXtySRkuraVfuK3 Bpa+X1 XecWi24JY
HVtlNX025xx1 ewVzGNCT lWn1 skQN2OOoQT V4C8/qFpT W6DT WYurd4+fE0OJFJZQF
…… . .
-----END PGP PUBLIC KEY BLOCK-----
Weryfikowanie atrybutów pakietów.
Weryfikacja zainstalowanego pakietu polega na porównaniu atrybutów plików zawartych w tym pakiecie z oryginalnymi atrybutami zapisanymi i przechowywanymi w bazie danych pakietów z czasu gdy pakiet był zainstalowany.
# rpm –Vf /etc/sysconfig/atd
Komenda nic nie zwróciła za zatem atrybuty plików nie były zmieniane. Zmieńmy teraz atrybuty plików i zweryfikujmy pakiet ponownie:
# ll /etc/sysconfig/atd
-rw-r--r--. 1 root root 403 Jan 29 2014 /etc/sysconfig/atd
# chown bin:bin /etc/sysconfig/atd ; chmod 744 /etc/sysconfig/atd
# ll /etc/sysconfig/atd
-rwxr--r--. 1 bin bin 403 Jan 29 2014 atd
# rpm –Vf /etc/sysconfig/atd
.M…UG.. c /etc/sysconfig/atd
rpm zwrócił teraz trzy kolumny: pierwsza kolumna zawiera dziewięć pól, druga kolumna zawiera typ pliku a trzecia kolumna wskazuje na nazwę pliku. Komenda przeprowadza łącznie dziewięć sprawdzeń, zilustrowanych jako kody w pierwszej kolumnie wyniku, i wyświetla jakie zmiany zostały dokonane na plikach od momentu ich zainstalowania w systemie. Każdy kod pierwszej kolumny ma znaczenie i przedstawia go poniższa tabela.
Kod | Opis |
S | Pojawia się jeżeli rozmiar pliku jest inny. |
M | Pojawia się jeżeli zmieniły się uprawnia do pliku lub jego typ. |
5 | Pojawia się jeżeli suma MD5 się nie zgadza. |
D | Pojawia się jeżeli plik jest urządzeniem i jego numer się zmienił. |
L | Pojawia się jeżeli plik jest odwołaniem i jego ścieżka się zmieniła. |
U | Pojawia się jeżeli zmienił się właściciel pliku. |
G | Pojawia się jeżeli zmieniła się grupa pliku. |
T | Pojawia się jeżeli znacznik czasu się zmienił. |
P | Pojawia się jeżeli właściwości (eng. capability) się zmieniły. |
. | Pojawia się jeżeli nie znaleziono żadnych modyfikacji. |
Tabela z kodami dla drugiej kolumny:
Typ pliku | Opis |
c | Plik konfiguracyjny. |
d | Plik z dokumentacją. |
g | Plik duch (eng. ghost). |
l | Plik z licencją. |
r | Plik readme. |
Bazując zatem na kodach z powyższych tabelek możemy ustalić, że plik /etc/sysconfig/atd jest plikiem konfiguracyjnym ze zmodyfikowanymi uprawnieniami, zmienionym właścicielem i grupą.
Weryfikacja wszystkich atrybutów plików wchodzących w skład pakietu:
# rpm -Vv pakiet
Ćwiczenie 1. Zarządzanie pakietami przy użyciu polecenia rpm.
Upewniamy się, że plyta instalacyjna DVD z RHEL jest w napędzie i jest zamontowana. Jeżeli nie to montujemy:
# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
Wykonujemy polecenie ll na katalogu /mnt/Packages aby potwierdzić, że pakiet dcraw jest dostępny:
# ll /mnt/Packages/dcraw*
-r--r--r--. 61 root root 232524 Apr 1 10:37 /mnt/Packages/dcraw-9.19-6.el7.x86_64.rpm
Weryfikujemy integralność i wiarygodność pakietu:
# rpm –K /mnt/Packages/dcraw-9.19-6.el7.x86_64.rpm
/mnt/Packages/dcraw-9.19-6.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
Instalujemy pakiet:
# rpm –ivh /mnt/Packages/dcraw-9.19-6.el7.x86_64.rpm
Preparing… ################################# [1 00%]
Updating / installing…
1 :dcraw-9.1 9-6.el7 ################################# [1 00%]
Wyświetlamy podstawowe informacje o pakiecie:
# rpm –qi dcraw
Name : dcraw
Version : 9.1 9
Release : 6.el7
Architecture : x86_64
Install Date : Fri 1 9 Sep 201 4 09:3 3 :3 6 AM EDT
Group : Applications/Multimedia
…… . .
Wyświetlamy wszystkie pliki wchhodzące w skład pakietu:
# rpm –ql dcraw
/usr/bin/dcraw
/usr/share/locale/ca/LC_MESSAGES/dcraw.mo
…… . .
Listujemy pliki z dokumentacją pakietu:
# rpm –qd dcraw
/usr/share/man/ca/man1/dcraw.1.gz
…… . .
Weryfikujemy atrybuty plików z pakietu:
# rpm –V dcraw
Usuwamy pakiet:
# rpm –e dcraw