The Geek Diary

Întreținerea software-ului folosind RPM (Red Hat Package Manager)

RPM este un manager de software puternic care poate fi folosit pentru a construi, instala, interoga, verifica, actualiza și dezinstala pachete software individuale. Un pachet RPM este format dintr-o arhivă de fișiere și informații despre pachet, cum ar fi numele, versiunea, o descriere și informații despre dependențele de alte pachete RPM.

RPM este mai mult decât un instrument specific Red Hat. Multe alte distribuții moderne, cum ar fi Ubuntu și SuSE, folosesc și ele RPM. Beneficiile utilizării RPM includ:

  • Distribuția, instalarea, actualizarea și eliminarea simplificată a software-ului
  • Garantează că:
    • software-ul prerechizit este instalat pe sistem.
    • versiunile software-ului prerechizit rămân compatibile.
    • fișierele de configurare modificate la nivel local nu sunt captușite atunci când RPM-ul este actualizat.
    • fișierele de configurare modificate la nivel local sunt salvate cu un caracter „.rpmsave” dacă pachetul este ulterior șters.
  • Permite certificarea faptului că software-ul instalat nu a fost alterat, modificat, corupt sau schimbat în vreun fel.

RPM păstrează informații despre pachetele instalate în directorul „/var/lib/rpm”.

Componentele instrumentului RPM sunt:

  • O bază de date personalizată care conține informații despre toate programele instalate pe sistem, colectate din RPM-urile individuale.
  • Un executabil „/bin/rpm”.
  • Rezervații accesibile pe internet ale pachetelor RPM disponibile.

Tipuri de pachete RPM

Pachetele RPM se împart în două categorii: sursă și binare.

Un RPM sursă poate fi recunoscut întotdeauna deoarece numele de fișier se termină cu șirul „.src.rpm”. Într-un RPM sursă se află nu numai fișierele de cod sursă ale programului original, ci și scripturi care permit recompilarea automată a codului, instalarea automată și eliminarea automată a acestuia. Într-un RPM sursă nu există fișiere executabile pentru utilizatorul final. De obicei, doar dezvoltatorii sunt interesați de un RPM sursă.

Un RPM binar conține componentele de utilizator final ale unui RPM. Numele fișierelor RPM binare identifică arhitectura gazdă pentru conținutul acestora. De exemplu, fișierul RPM binar:

bash-3.1-16.1.x86_64.rpm

Conține fișiere utilizabile numai pe un procesor cu arhitectură Intel X86 pe 64 de biți. Alte valori comune ale arhitecturii includ „i386” pentru gazdele Intel pe 32 de biți. Unele RPM-uri binare pot fi instalate pe orice arhitectură de procesor deoarece fișierele lor vor funcționa pe orice gazdă; un exemplu al acestor pachete „.noarch.rpm” este RPM-ul „tzdata” care conține informații despre fusurile orare mondiale. Pentru a vă actualiza sistemul cu cea mai recentă versiune a unui pachet, veți avea nevoie de cel mai recent RPM binar pentru acesta.

Schema de denumire a RPM-urilor

Care pachet RPM este conținut într-un singur fișier. Numele fișierului are mai multe câmpuri pentru a identifica complet conținutul pachetului. Deși instrumentele RPM în sine nu se bazează pe numele de fișier în sine, ar trebui să înțelegeți convenția numelui de fișier pentru a vă ajuta să identificați sau să descărcați pachetul potrivit. Iată un exemplu de nume de fișier RPM:

bash-3.1-16.1.x86_64.rpm

Acest RPM este pentru shell-ul BASH („/bin/bash”). Numele fișierului este compus din mai multe părți:

--..rpm

unde:

    este numele programului sau al pachetului. Acesta este de obicei atribuit de autorul programului. În exemplul nostru, dezvoltatorii au decis să numească produsul lor „bash” din motive care li s-au părut amuzante.

  • versiunea] identifică ce ediție a software-ului conține acest RPM. Numărul este atribuit de autorul programului. Utilizarea numărului permite să se determine ce versiune a surselor autorului a fost utilizată pentru a genera RPM.
  • furnizează numărul de ediție al fișierului RPM în sine și nu versiunea fișierelor sursă ale autorului. Un RPM actualizat poate fi emis pentru a furniza o versiune corectată a software-ului original al autorului. Nu este necesar ca patch-ul să fi provenit de la dezvoltatorul original, astfel încât RPM-ul este incrementat în loc de .
  • descrie conținutul RPM-ului și spune dacă acest fișier conține sursa produsului (un „.src.rpm”), fișiere independente de arhitectură (un „.noarch.rpm”) sau fișiere care pot fi instalate numai pe un anumit tip de gazdă (un „.sh.rpm” va funcționa numai pe un procesor încorporat STRONGHOLD).
Notă: The este controlat de autorul original, iar the este controlat de cel care a construit RPM.

Înțelegerea versiunilor RPM

Câmpurile RPM și nu sunt întotdeauna strict numerice și pot conține și alte caractere în afară de cifrele obișnuite. Este obișnuit să vedem atât o versiune „10”, cât și o versiune „10a” a aceluiași pachet. Uneori, alegerea celei mai recente versiuni poate fi înșelătoare. Iată cum compară RPM însuși numerele de versiune și de lansare pe plan intern:

1. Îndepărtați prefixul și sufixul „..rpm”. De exemplu,:
„bash-3.1-16.1.x86_64.rpm” devine „3.1-16.1” și „bash-3.1-16.5a.1.1.x86_64.rpm” devine „3.1-16.5a.1”

2. Comparați șirurile rămase caracter cu caracter, de la stânga la dreapta, până când se întâlnește o cifră. În cazul în care caracterele diferă, caracterul care vine mai târziu în secvența de colaționare este cel mai recent RPM.

3. Când se întâlnește o cifră, se convertește întreaga secvență de cifre într-un singur număr binar. În exemplul nostru, cele două caractere „16” sunt combinate într-o valoare de șaisprezece (16). Valorile binare rezultate sunt comparate, iar valoarea cea mai mare este cea mai recentă RPM. Astfel, un RPM cu a de „0010” este mai recent decât unul cu a de „9”.

Pasii 2 și 3 se repetă, după cum este necesar, până când apare o diferență.

Instalarea și eliminarea fișierelor

Notă: De obicei, se poate instala doar un singur sau dintr-un RPM deodată.

Versiunile mai recente se instalează, de obicei, utilizând funcția RPM „-U” (update) în loc de funcția RPM „-i”. Excepțiile obișnuite de la regula unui singur RPM sunt RPM-urile pentru kernel. În mod obișnuit, un sistem are instalate mai multe versiuni de nuclee; RPM are o listă cu ce RPM-uri pot avea instalate mai multe versiuni. Pentru a șterge o versiune atunci când sunt instalate mai multe, trebuie să specificați complet numele pachetului și versiunea.

Pe arhitectura x86_64, este obișnuit să aveți instalate atât pachetele RPM „.i386” pe 32 de biți, cât și cele pe 64 de biți „.x86_64” pentru a susține atât aplicațiile pe 32 de biți, cât și cele pe 64 de biți. În mod normal, RPM nu afișează arhitectura unui pachet într-o interogare, dar o puteți afișa manual.

Instalare și eliminare

# 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)

Opțiuni comune
Output: -v (verbose – numele fișierului), -h (hash)
Precondiții: -nodeps, -replacefiles, -force (ATENȚIE aici !!!!)
Relocalizare: -excludepath, -prefix, -relocate, -badreloc, -root
Suport URL: ftp, http

Exemple:

# 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

Sugestie: Niciodată, niciodată, nu folosiți opțiunea „-U” pentru a instala un nou RPM de kernel. Funcția de actualizare „-U” șterge mai întâi RPM-ul curent din sistem și apoi încearcă să instaleze noul RPM. Orice problemă care împiedică instalarea noului RPM va face ca sistemul să nu poată fi pornit. Acest lucru nu este ceea ce vă doriți, așa că folosiți întotdeauna comutatorul „-i” pentru a instala un RPM de kernel.

Interogări (pachete și/sau informații)

Utilizați o interogare pentru informații despre pachetele instalate. Puteți efectua o interogare cu privire la toate pachetele instalate sau la un singur pachet instalat. De asemenea, puteți afla ce RPM furnizează un anumit fișier.

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

Informații
default (numele pachetului)
-i: informații generale
-l: listă de fișiere

Exemple:

# 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)

Hint: Atunci când se caută un anumit pachet RPM atunci când nu se cunoaște numele exact, se folosește în mod obișnuit o comandă de tip pipeline precum:

$ rpm -qa | grep foo

se folosește în mod obișnuit. Versiunile ulterioare ale instrumentului RPM permit ca acest lucru să fie realizat succint ca:

$ rpm -qa '*foo*'

Queries – Verification (Files)

Baza de date RPM conține multe atribute despre fiecare fișier instalat de un RPM. Puteți verifica starea curentă a fișierului în raport cu informațiile catalogate de RPM în momentul instalării pachetului.

# rpm -V package_name# rpm -Va (verify all)# rpm -Vf (filename)# rpm -Vp (package filename)

Notă: Multe distribuții Linux includ un RPM „prelink” care încearcă să reducă timpul necesar pentru a porni o aplicație care utilizează o bibliotecă partajată (majoritatea aplicațiilor utilizează cel puțin o bibliotecă partajată și potențial zeci) prin adăugarea de informații speciale direct în fișierul de program al unei aplicații.

Adăugarea acestor informații face ca aplicațiile să pornească mai repede, dar modificările aduse fișierului invalidează majoritatea atributelor fișierului din baza de date RPM, cum ar fi data ultimei modificări a fișierului, dimensiunea fișierului și suma de control MD5 a fișierului.

Interogări – Verificare (Pachete)

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

Exemple:

# 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)

Reparați baza de date RPM

Strumentul RPM utilizează propria implementare personalizată a bazei de date pentru a-și conține informațiile. Uneori, această bază de date poate fi coruptă; printre simptome se numără afirmațiile că un pachet RPM instalat lipsește; sau încercările de a actualiza un RPM se blochează pur și simplu. Dacă baza de date RPM este blocată sau coruptă, puteți încerca să o reparați cu aceste comenzi. Nu se garantează că acest proces va funcționa.

Trebuie să fiți conectat cu privilegii de superutilizator (aka „root”) pentru acești pași. Comenzile pot fi copiate și lipite direct într-o fereastră de terminal root.

1. Asigurați-vă că nu mai există procese RPM care să ruleze pe sistemul dvs. Utilizați comanda ps pentru a le identifica. 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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *