Przejdź do głównej zawartości

Linux RHCSA cz.38 - Zarządzanie pakietami - praca z RPM

Oprogramowanie to podstawa każdego systemu operacyjnego, umożliwiając tym samym instalacje możemy korzystać z dodatkowych narzędzi i możliwości. W Linux oprogramowanie dostępne jest w postaci paczek, zawierających aktualne pliki programów. Oprogramowanie dostępne jest w  systemie zarządzania paczkami. W przypadku środowiska RedHat są to : RPM oraz Yum.

PRACA Z RPM 

 Paczki zawierają strukturę katalogów z plikami tworzącą daną aplikację. W RedHat paczki oznaczone są rozszerzeniem .rpm i mogą posiadać różne oznaczenia.. Zanim zajmiemy się systemem zarządzania paczkami zapoznajmy się z używana nomenklaturą dotyczącą oznaczania paczek oprogramowania. 

Nazwa paczki : nazwa_paczki-wersja-wydanie.arch.rpm

Dla przykładu zobaczmy nazewnictwo paczki zawierającej SMTP serwer :

postfix-2.6.6-2.el6.x86_64.rpm

Widać nazwę "postfix" , numer wersji 2.6.6 i przeznaczenie dla systemów 64 bitowych. Symbol "-2" za wersja oznacza wydanie, a oznaczenie "el6" oznacza wydanie systemu RHEL06. Jest to dość istotna informacja dla administratora zanim zacznie instalacje pakietu już w nazwie widać dla jakiego systemu jest przeznaczona i w jakiej jest wersji. 

INSTALACJA I USUWANIE PACZEK

Pierwszym dostępnym sposobem pracy z paczkami jest RPM. Narzędzie to używane jest do indywidualnego działania z paczkami poza repozytorium. Oznacza to , że w przypadku narzędzia yum wyszukujemy paczkę w repozytorium i następnie instalujemy w przypadku RPM zazwyczaj chodzi o zewnętrzną pobraną wcześniej paczkę ".rpm". Zarówno dla RPM jaki dla YUM ilość dostępnych opcji jest ogromna i tutaj przedstawione zostaną najczęściej używane. Pozostałe opcje dostępne z manu --help. 

Składnia rpm : # rpm [opcje] 

Opcje rpm podzielone zostały na trzy różne sekcje: instalacja / podniesienie wersji / usuwanie , zapytanie i weryfikacja  :

Instalacja / Podniesienie wersji / Usuwanie : 
  • -e   Usuwanie danej paczki 
  • -i    Instalacja danej paczki 
  • -h   Wyświetlenie czasu procesu instalacji (hash progres) 
  • -U  Podniesienie wersji danej paczki 
  • -v   Wyświetlanie komunikatów podczas działań
Opcje zapytań ( z opcją -q) : 
  • -c    Lista wszystkich plików konfiguracyjnych
  • -d    Lista wszystkich plików dokumentacji 
  • -i     Wyświetlenie informacji na temat paczki 
  • -l     Lista plików zawartych w paczce 
Opcje weryfikacji : 
  • -a   Sprawdzenie całej paczki 
  • -f    Wyświetlenie informacji o specyficznych plikach
Krok 1 - Pobranie paczki programu "nano" 

# wget http://www.nano-editor.org/dist/v2.2/RPMS/nano-2.2.6-1.x86_64.rpm
--2010-09-06 08:30:26-- http://www.nanoeditor.
org/dist/v2.2/RPMS/nano-2.2.6-
1.x86_64.rpm
Resolving www.nano-editor.org... 207.192.74.17
Connecting to www.nano-editor.org|207.192.74.17|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 586766 (573K) [application/x-redhat-package-manager]
Saving to: `nano-2.2.6-1.x86_64.rpm’
100%[================================================================
=>]
586,766 1.75M/s in 0.3s
2010-09-06 08:30:27 (1.75 MB/s) - `nano-2.2.6-1.x86_64.rpm’ saved
[586766/586766]

Krok 2 - Instalacja pobranego pakietu 

# rpm -ivh nano-2.2.6-1.x86_64.rpm
Preparing...
########################################### [100%]
1:nano
########################################### [100%]

Wykorzystane tutaj przełączniki to : (-i) instlalacja, (-v) tryb gadatliwy, (-h) pokazanie paska postępu. Jeżeli dana paczka będzie zależna od innych zobaczymy odpowiednie komunikaty błędu. Ręczna instalacja za nami. 

Jeżeli chcemy podnieść wersję zainstalowanej paczki o której wiadomo, że jest już zainstalowana w systemie. Zamieniamy w polecenie przełącznik z (-i) na (-U). 

# rpm -Uvh nano-2.2.6-1.x86_64.rpm
Preparing... ########################################### [100%]
1:nano ########################################### [100%]

Aby podnieść wersję aktualnej paczki nie ma konieczności wcześniejszego jej odinstalowywania można skorzystać z polecenia : 

# rpm -ivh -replacepkgs nano-2.2.6-1.x86_64.rpm

Jeżeli jakaś paczka nie będzie już dłużej potrzebna w systemie można ją usunąć: 

# rpm -e nano

W razie potrzeby można dana paczkę zainstalować ponownie jeżeli posiadamy plik .rpm lub ponownie trzeba pobrać dana paczkę z sieci. 

SPRAWDZANIE I WERYFIKACJA PACZEK

Po instalacji paczek dobrze było by sprawdzić jaką wersję danej paczki aktualnie widać w systemie i czy zainstalowała się poprawnie. Możemy oczywiście to sprawdzić korzystając z polecenia "rpm". 

Sprawdzenie czy dana paczka jest zainstalowana w systemie realizujemy poleceniem: 

# rpm -qa | grep nano
nano-1.3.12-1.1.el6.x86_64

Opcja -q informuje polecenie "rpm" że będzie wysłane zapytanie , opcja -a mówi że zapytanie dotyczy wszystkich pakietów zainstalowanych w systemie, które następnie zostaną odfiltrowane narzędziem "grep" wyświetlając ( lub nie) daną paczkę. 

Teraz zainstalujmy nową wersję z sieci : 

# rpm -ivh nano-2.2.6-1.x86_64.rpm
Preparing... ########################################### [100%]
1:nano ########################################### [100%]

i ponownie zweryfikujmy : 

# rpm -qa | grep nano
nano-2.2.6-1.el6.x86_64

Wróćmy jeszcze na chwilę o krok. Jeżeli zdarzy się sytuacja że szef każe zainstalować paczkę postfix ze strony "xyz" o której nigdy wcześniej nie słyszałeś ? Można uzyskać więcej informacji na jej temat w sposób: 

# rpm -qi nano
Name : nano Relocations: (not relocatable)
Version : 2.2.6 Vendor: (none)
Release : 1 Build Date: Thu 05 Aug 2010
11:08:24 PM EDT
Install Date: Mon 06 Sep 2010 08:35:32 AM EDT Build Host: 012.redhat.com
Group : Applications/Editors Source RPM: nano-2.2.6-1.src.rpm
Size : 1554146 License: GPL
Signature : (none)
URL : http://www.nano-editor.org/
Summary : A small text editor
Description :
GNU nano is a small and friendly text editor.

Teraz znamy już podstawowe na temat danej paczki takie jak aktualna wersja, data wydania, rozmiar oraz informacje od twórców. Teraz wiemy już jak instalować, podnosić wersję i sprawdzać dostępne paczki. Możemy poznać kilka poleceń jakimi można zrobić coś jeszcze z paczkami. 

Będąc zalogowanym w swojej nowej instalacji RedHat spróbuj znaleźć plik nie mając pewności czy w ogóle istnieje. Można użyć przełącznika "-f"  by odpytać daną paczkę o dany plik ale być może lepszym pomysłem może być odpytać system jaka paczka używa danego pliku. Znajdź plik /etc/rsyslog.conf : 

# rpm -qf /etc/rsyslog.conf
rsyslog-4.6.2-2.el6.x86_64

To zapytanie powie Ci że plik rsyslog.cong należy do paczki rsyslog-4.6.2-2.  Może się zdażyć sytuacja odwrotna że znamy nazwę paczki i chcemy sprawdzić jakie pliki konfiguracyjne zawiera. W tym celu stosujemy przełącznik "-c". 

# rpm -qc rsyslog
/etc/logrotate.d/syslog
/etc/rsyslog.conf
/etc/sysconfig/rsyslog

Obok opcji -c mamy dostępną również opcję -d wyszukującą pliki dokumentacji dla danej paczki

# rpm -qd rsyslog
/usr/share/doc/rsyslog-4.6.2/AUTHORS
/usr/share/doc/rsyslog-4.6.2/COPYING
/usr/share/doc/rsyslog-4.6.2/NEWS
/usr/share/doc/rsyslog-4.6.2/README
/usr/share/doc/rsyslog-4.6.2/bugs.html
/usr/share/doc/rsyslog-4.6.2/build_from_repo.html
/usr/share/doc/rsyslog-4.6.2/contributors.html
/usr/share/doc/rsyslog-4.6.2/debug.html
/usr/share/doc/rsyslog-4.6.2/dev_queue.html
/usr/share/doc/rsyslog-4.6.2/droppriv.html
/usr/share/doc/rsyslog-4.6.2/expression.html
/usr/share/doc/rsyslog-4.6.2/features.html
/usr/share/doc/rsyslog-4.6.2/syslog_parsing.html
/usr/share/doc/rsyslog-4.6.2/syslog_protocol.html
/usr/share/doc/rsyslog-4.6.2/tls_cert_ca.html
/usr/share/doc/rsyslog-4.6.2/tls_cert_client.html
/usr/share/doc/rsyslog-4.6.2/tls_cert_errmsgs.html
/usr/share/doc/rsyslog-4.6.2/tls_cert_machine.html
/usr/share/doc/rsyslog-4.6.2/tls_cert_scenario.html
/usr/share/doc/rsyslog-4.6.2/tls_cert_server.html
/usr/share/doc/rsyslog-4.6.2/tls_cert_summary.html
/usr/share/doc/rsyslog-4.6.2/tls_cert_udp_relay.html
/usr/share/doc/rsyslog-4.6.2/troubleshoot.html
/usr/share/doc/rsyslog-4.6.2/v3compatibility.html
/usr/share/doc/rsyslog-4.6.2/v4compatibility.html
/usr/share/doc/rsyslog-4.6.2/version_naming.html
/usr/share/man/man5/rsyslog.conf.5.gz
/usr/share/man/man8/rsyslogd.8.gz
[output truncated]

Blisko opcji -c i -d znajduję się również opcja -l wyświetlająca wszystkie pliki znajdujące się w paczce. 

# rpm -ql rsyslog
/etc/logrotate.d/syslog
/etc/rc.d/init.d/rsyslog
/etc/rsyslog.conf
/etc/sysconfig/rsyslog
/lib64/rsyslog
/lib64/rsyslog/imfile.so
/lib64/rsyslog/imklog.so
/lib64/rsyslog/immark.so
/lib64/rsyslog/imtcp.so
/lib64/rsyslog/imudp.so
/lib64/rsyslog/imuxsock.so
/lib64/rsyslog/lmnet.so
/lib64/rsyslog/lmnetstrms.so
/lib64/rsyslog/lmnsd_ptcp.so
/lib64/rsyslog/lmregexp.so
/lib64/rsyslog/lmstrmsrv.so
/lib64/rsyslog/lmtcpclt.so
/lib64/rsyslog/lmtcpsrv.so
/lib64/rsyslog/lmzlibw.so
/lib64/rsyslog/omtesting.so
/sbin/rsyslogd
/usr/share/doc/rsyslog-4.6.2
/usr/share/doc/rsyslog-4.6.2/AUTHORS
/usr/share/doc/rsyslog-4.6.2/COPYING
/usr/share/doc/rsyslog-4.6.2/NEWS
/usr/share/doc/rsyslog-4.6.2/README
/usr/share/doc/rsyslog-4.6.2/bugs.html
[output truncated]

Wcześniej mowa była również że pakiety mogą zawierać zależności od innych pakietów i by sprawdzić jakie zależności ma dany pakiet używamy: 

# rpm -qR rsyslog
/bin/bash
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/sbin/chkconfig
/sbin/chkconfig
/sbin/service
/sbin/service
bash >= 2.0
config(rsyslog) = 4.6.2-2.el6
coreutils
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libgcc_s.so.1()(64bit)
libgcc_s.so.1(GCC_3.0)(64bit)
libgcc_s.so.1(GCC_3.3.1)(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libpthread.so.0(GLIBC_2.3.2)(64bit)
librt.so.1()(64bit)
librt.so.1(GLIBC_2.2.5)(64bit)
libz.so.1()(64bit)
logrotate >= 3.5.2
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1

Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości