The Geek Diary

Obsługa oprogramowania przy użyciu RPM (Red Hat Package Manager)

RPM jest potężnym menedżerem oprogramowania, który może być używany do budowania, instalowania, odpytywania, weryfikowania, aktualizowania i odinstalowywania poszczególnych pakietów oprogramowania. Pakiet RPM składa się z archiwum plików oraz informacji o pakiecie, takich jak nazwa, wersja, opis oraz informacje o zależnościach z innymi pakietami RPM.

RPM jest czymś więcej niż tylko narzędziem specyficznym dla Red Hat. Wiele innych nowoczesnych dystrybucji, takich jak Ubuntu i SuSE, również używa RPM. Korzyści z używania RPM obejmują:

  • Uproszczoną dystrybucję oprogramowania, instalację, aktualizację i usuwanie
  • Gwarancje, że:
    • wymagane oprogramowanie jest zainstalowane w systemie.
    • wersje wymaganego oprogramowania pozostają kompatybilne.
    • lokalnie zmodyfikowane pliki konfiguracyjne nie są blokowane podczas aktualizacji RPM.
    • lokalnie zmodyfikowane pliki konfiguracyjne są zapisywane z przyrostkiem „.rpmsave”, jeśli pakiet zostanie później usunięty.
  • Pozwala poświadczyć, że zainstalowane oprogramowanie nie zostało zmienione, zmodyfikowane, uszkodzone lub zmienione w jakikolwiek sposób.

RPM przechowuje informacje o zainstalowanych pakietach w katalogu „/var/lib/rpm”.

Komponentami narzędzia RPM są:

  • Niestandardowa baza danych zawierająca informacje o całym oprogramowaniu zainstalowanym w systemie, zebrane z poszczególnych RPM-ów.
  • Wykonawczy plik „/bin/rpm”.
  • Dostępne przez Internet repozytoria dostępnych pakietów RPM.

Typy pakietów RPM

Pakiety RPM występują w dwóch kategoriach: źródłowe i binarne.

Źródłowe RPM można zawsze rozpoznać, ponieważ nazwa pliku kończy się ciągiem „.src.rpm”. W źródłowym RPM znajdują się nie tylko pliki z oryginalnym kodem źródłowym programu, ale także skrypty, które pozwalają na automatyczną rekompilację kodu, jego automatyczną instalację i automatyczne usunięcie. W źródłowym RPM nie ma plików wykonywalnych dla użytkownika końcowego. Zazwyczaj tylko programiści są zainteresowani źródłowym RPM.

Binarne RPM zawiera komponenty RPM przeznaczone dla użytkownika końcowego. Nazwy plików binarnego RPM identyfikują architekturę hosta dla zawartości. Na przykład, plik binarnego RPM:

bash-3.1-16.1.x86_64.rpm

Zawiera on pliki, które można wykorzystać tylko na 64-bitowym procesorze z architekturą Intel X86. Inne popularne wartości architektury to „i386” dla 32-bitowych hostów Intel. Niektóre binarne RPM mogą być zainstalowane na dowolnej architekturze procesora, ponieważ ich pliki będą działać na każdym hoście; przykładem takich pakietów „.noarch.rpm” jest „tzdata” RPM, który zawiera informacje o światowych strefach czasowych. Aby zaktualizować system do najnowszej wersji pakietu, należy posiadać najnowszy binarny RPM dla niego.

Schemat nazewnictwa pakietów RPM

Każdy pakiet RPM jest zawarty w pojedynczym pliku. Nazwa pliku ma kilka pól, które w pełni identyfikują zawartość pakietu. Chociaż same narzędzia RPM nie opierają się na samej nazwie pliku, należy zrozumieć konwencję nazewnictwa plików, aby pomóc w identyfikacji lub pobraniu odpowiedniego pakietu. Oto przykładowa nazwa pliku RPM:

bash-3.1-16.1.x86_64.rpm

Ten RPM jest dla powłoki BASH („/bin/bash”). Nazwa pliku składa się z kilku części:

--..rpm

gdzie:

    jest nazwą programu lub pakietu. Nazwa ta jest zazwyczaj nadawana przez autora programu. W naszym przykładzie, programiści zdecydowali się nazwać swój produkt „bash” z powodów, które wydawały im się zabawne.

  • wersja] określa, którą edycję oprogramowania zawiera ten RPM. Numer ten jest nadawany przez autora programu. Użycie tego numeru pozwala określić, która wersja źródeł autora została użyta do wygenerowania RPM.
  • podaje numer edycji samego pliku RPM, a nie wersji plików źródłowych autora. Zaktualizowany RPM może zostać wydany w celu dostarczenia poprawionej wersji oryginalnego oprogramowania autora. Łata nie musi pochodzić od oryginalnego twórcy, więc RPM jest zwiększany zamiast .
  • opisuje zawartość RPM i mówi, czy plik zawiera źródło produktu („.src.rpm”), pliki niezależne od architektury („.noarch.rpm”) lub pliki, które mogą być zainstalowane tylko na określonym typie hosta („.sh.rpm” będzie działać tylko na wbudowanym procesorze STRONGHOLD).
Uwaga: The jest kontrolowane przez oryginalnego autora, a the jest kontrolowane przez tego, kto skonstruował RPM.

Zrozumienie wersji RPM

Pola RPM i nie zawsze są ściśle numeryczne i mogą zawierać inne znaki oprócz zwykłych cyfr. Często można spotkać zarówno wersję „10” jak i „10a” tego samego pakietu. Czasami wybranie najnowszej wersji może być trudne. Oto jak sam RPM wewnętrznie porównuje numery wersji i wydań:

1. Usuń przedrostek i rozszerzenie „..rpm”. Na przykład:
„bash-3.1-16.1.x86_64.rpm” staje się „3.1-16.1”, a „bash-3.1-16.5a.1.x86_64.rpm” staje się „3.1-16.5a.1”

2. Porównaj pozostałe ciągi znak po znaku, od lewej do prawej, aż napotkasz cyfrę. Jeśli znaki się różnią, to ten z nich, który pojawi się później w sekwencji porównywania, jest nowszym RPM.

3. Po napotkaniu cyfry należy przekonwertować cały ciąg cyfr na pojedynczą liczbę binarną. W naszym przykładzie dwa znaki „16” są łączone w wartość szesnaście (16). Wynikowe wartości binarne są porównywane i większa wartość oznacza bardziej aktualne RPM. Tak więc RPM z a równym „0010” jest nowszy niż ten z a równym „9”.

Kroki 2 i 3 są powtarzane w razie potrzeby aż do wystąpienia różnicy.

Instalowanie i usuwanie plików

Uwaga: Zazwyczaj tylko jedna wersja RPM może być zainstalowana jednocześnie.

Najnowsze wersje są zazwyczaj instalowane przy użyciu funkcji „-U” (update) RPM zamiast funkcji „-i” RPM. Powszechnymi wyjątkami od reguły tylko jednego RPM są RPM-y jądra. W systemie zazwyczaj zainstalowanych jest kilka wersji jądra; RPM posiada listę RPM-ów, które mogą mieć zainstalowane wiele wersji. Aby usunąć jedną wersję, gdy zainstalowanych jest kilka, należy podać pełną nazwę pakietu i wersję.

Na architekturze x86_64 często instalowane są zarówno 32-bitowe „.i386”, jak i 64-bitowe „.x86_64” pakiety RPM, które obsługują zarówno aplikacje 32-bitowe, jak i 64-bitowe. Normalnie RPM nie wyświetla architektury pakietu w zapytaniu, ale można ją wyświetlić ręcznie.

Instalacja i usuwanie

# rpm -i --install (install new RPM; error if already installed)# rpm -U --upgrade (delete existing RPM, if any; install new)# rpm -F --freshen (update RPM only if package already installed)# rpm -e --erase (remove, delete, expunge)

Wspólne opcje
Wyjście: -v (verbose – nazwa pliku), -h (hash)
Warunki: -nodeps, -replacefiles, -force (BE CAREFUL HERE !!!)
Relokacja: -excludepath, -prefix, -relocate, -badreloc, -root
ObsługaURL: ftp, http

Przykłady:

# rpm -ivh binutils-2.11.90.0.8-12.i386.rpm# rpm -Uvh finger-0.17-9-i386.rpm# rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm# rpm -e diffutils# rpm -e kernel-enterprise-2.4.9-e.12

Wskazówka: Nigdy, przenigdy nie używaj opcji „-U” do instalacji nowego RPM jądra. Funkcja aktualizacji „-U” najpierw usuwa bieżący RPM z systemu, a następnie próbuje zainstalować nowy RPM. Każdy problem, który uniemożliwi zainstalowanie nowego RPM spowoduje, że system nie będzie mógł się uruchomić. Nie jest to pożądane, więc zawsze używaj przełącznika „-i” aby zainstalować RPM jądra.

Kwerendy (pakiety i/lub informacje)

Użyj kwerendy aby uzyskać informacje o zainstalowanych pakietach. Możesz zapytać o wszystkie zainstalowane pakiety, lub o pojedynczy zainstalowany pakiet. Możesz również dowiedzieć się, który RPM dostarcza dany plik.

# rpm -q # rpm -qa (all installed packages)# rpm -q package_name# rpm -qf (filename)# rpm -qp (package filename)

Informacje
domyślnie (nazwa pakietu)
-i: informacje ogólne
-l: lista plików

Przykłady:

# rpm -qa# rpm -q kernel -i (information)# rpm -q kernel -l (files contained in package)# rpm -q kernel --requires (prereqs)# rpm -q kernel --provides (capabilities provided by package)# rpm -q kernel --scripts (scripts run during installation and removal)# rpm -q kernel --changelog (revision history)# rpm -q kernel -queryformat format (rpm --querytags for list of options)

Podpowiedź: Podczas wyszukiwania konkretnego pakietu RPM, gdy nie jest znana jego dokładna nazwa, powszechnie stosuje się potok poleceń taki jak:

$ rpm -qa | grep foo

. Późniejsze wersje narzędzia RPM pozwalają to zrobić w zwięzły sposób jako:

$ rpm -qa '*foo*'

Kwerendy – Weryfikacja (Pliki)

Baza danych RPM zawiera wiele atrybutów o każdym pliku zainstalowanym przez RPM. Można sprawdzić aktualny status pliku względem informacji skatalogowanych przez RPM w momencie instalacji pakietu.

# rpm -V package_name# rpm -Va (verify all)# rpm -Vf (filename)# rpm -Vp (package filename)
Uwaga: Wiele dystrybucji Linuksa zawiera „prelink” RPM, który próbuje skrócić czas potrzebny do uruchomienia aplikacji korzystającej z biblioteki współdzielonej (większość aplikacji korzysta z co najmniej jednej biblioteki współdzielonej, a potencjalnie z kilkudziesięciu) poprzez dodanie specjalnej informacji bezpośrednio do pliku programu aplikacji.

Dodanie tych informacji sprawia, że aplikacje uruchamiają się szybciej, ale zmiany w pliku unieważniają większość atrybutów pliku w bazie danych RPM, takich jak data ostatniej modyfikacji pliku, rozmiar pliku i suma kontrolna MD5 pliku.

Pytania – Weryfikacja (Pakiety)

# rpm -import /mnt/cdrom/RPM-GPG-KEY# rpm -q gpg-pubkey# rpm --checksig m4-1.4.1-11.i386.rpm

Przykłady:

# rpm -qf /path/filename (what package owns filename)# rpm -qf /path/filename -i (what does it do)# rpm -qp m4-1.4.1-11.i386.rpm -l (files in m4)# rpm -qp m4-1.4.1-11.i386.rpm --requires (prereqs needed to install m4)# rpm -q --whatprovides glibc.so (what package provides requisite library)

Naprawa bazy danych RPM

Narzędzie RPM używa własnej implementacji niestandardowej bazy danych do przechowywania informacji. Czasami ta baza danych może zostać uszkodzona; objawy obejmują roszczenia, że brakuje zainstalowanego pakietu RPM; lub próby aktualizacji RPM po prostu się zawieszają. Jeśli baza danych RPM jest zawieszona lub uszkodzona, można spróbować ją naprawić za pomocą tych poleceń. Nie ma gwarancji, że ten proces zadziała.

Do wykonania tych czynności musisz być zalogowany z uprawnieniami superużytkownika (aka „root”). Polecenia mogą być skopiowane i wklejone bezpośrednio do okna terminala roota.

1. Upewnij się, że w systemie nie są uruchomione żadne procesy RPM. Użyj polecenia ps, aby je zidentyfikować. Use the kill command to terminate any „rpm” processes you find; a „kill -9” may be necessary.

2. Delete the lock files that RPM uses:

# rm -f /var/lib/rpm/__db*

3. If you were experiencing a hanging „rpm” command, try it again. If it works, you are finished. If not, perform Step #1 and #2 again. Then proceed to the next step.

4. Make a backup of your RPM database:

# cd /var/lib# mkdir rpm-backup# rsync -av ./rpm/. ./rpm-backup/.

5. Rebuild your RPM database:

# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1

6. Retry your failed RPM command.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *