– maaxx 20/04/2005
Tutorial RPM tradus si adaptat de la www.speculation.org/garrick/
RPM-ul (RedHat Package Manager) este o metota foarte utila de a distribui software pe sistemele linux. Utilizatorii M$ Windows se pot gandi la un RPM cala un kit .exe, insa aproximarea este foarte vaga, diferentele sunt multiple si profunde.
Un pachet este pur si simplu o colectie de fisiere alcatuind un program, o librarie etc si care sunt „sudate“ impreuna intr-un fisier RPM. „Source rpms“ sau rpm-urile sursa sunt folosite pentru a livra codul sursa al programului respectiv si sunt identificate dupa sufixul „src.rpm“. Rpm-urile binare sunt precompilate pentru un anumit tip de procesor si au in componenta numelui si sufixul arhitecturii; in cazul Mandriva acesta este „i586.rpm“.
Exista 4 resurse foarte bune care merita luate in consideratie (in aceasta ordine): pagina de manual (man rpm), HOWTO-ul de la http://linuxdoc.org/HOWTO/RPM-HOWTO/index.html , HOWTO-ul Mandrake de la http://www.mandrakelinux.com/howtos/mdk-rpm/ si cartea despre RPM de la O\'Reilly.
Procesorul Pentium original reprezinta arhitectura „i586“. Procesoarele Pentium II/III/IV reprezinta toate arhitecturi i686.Toate acestea insa sunt compatibile cu arhitecturile de dinaintea lor (adica si cu i586). Este posibil sa gasiti multe rpm-uri i386 (Fedora Core spre exemplu) care vor functiona pe orice tip de procesor.
In general este recomandat sa folositi numai rpm-uri distribuite de Mandrake, si chiar mai mult de atat, incercati sa nu folositi rpm-uri pentru alte versiuni de Mandrake decat cea de care dispuneti.
Rpmfind.net (si intreaga suita de mirroruri) este in majoritatea cazurilor fara de folos. Citeste FAQ-ul despre urpmi!
Probabil ca o comanda rpm anterioara a fost intrerupta necorespunzator si baza de date rpm a ramas blocata.Comanda
rm -f /var/lib/rpm/__*; rpm --rebuilddb
data de root ar trebui sa rezolve problema.
Cu comanda:
rpm -Uvh nume-pachet.rpm
Cu comanda:
rpm -e nume-pachet
(atentie, nu am mai pus la sfarsitul pachetului si terminatia/sufixul .rpm! Optiunea -e data comenzii rpm ii spune acesteia sa dezinstaleze).
rpm -qlp nume-pachet.rpm
Nu pot instala pachetul foo.rpm pentru ca are nevoie de bar.rpm, iar bar.rpm nu poate fi instal at pentru ca are nevoie de foo.rpm; ce e de facut?
rpm -Uvh foo.rpm bar.rpm
Incearca http://www.rpmfind.net sau http://rpm.pbone.net
cutare-pachet.rpm are nevoie de cutare-alt-pachet.rpm pentru a se instala, nu pot s-o las balt a si sa folosesc optiunea –force?
Nu. Cel care a construit cutare-pachet.rpm spune ca AI NEVOIE de cutare-alt-pachet.rpm!
„U“ vine de la „Upgrade“ care este totuna cu „Install“ numai ca va dezinstala versiuni precedente ale programului daca ele exista si este nevoie. „vh“ arata pe ecran un dialog dragut de progres.
Tot trucul aici este sa gasesti cheia GPG. Cheile oficiale Mandrake sunt usor de gasit, celelalte pot fi pe un server de chei sau pe un site web. Pentru pachete Mandrake folositi comanda:
rpm --import http://www.mandrakesoft.com/security/RPM-GPG-KEYS
Pentru PLF:
rpm --import http://plf.zarb.org/plf.asc
rpm -qa | less
rpm -ql foo
rpm -qf /cutare/fisier
rpm -qip cutare.rpm
nFolositi optiunea -p atunci cand doriti sa interogati direct un fisier rpm, altfel va fi interogata intreaba baza de date cu rpm-uri care sunt instalate in sistem.
In primul rand folositi „rpm –querytags“ ca sa sa vedeti lista tuturor etichetelor valide, dupa care puteti folosi comenzi gen:
rpm -q --queryformat %{TAGNAME} foo
De exemplu,
rpm -q --queryformat %{VENDOR} textutils
va raspunde „MandrakeSoft“.
rpm -qp --requires cutare.rpm
rpm -q --whatrequires cutare
(merge numai pe Mandriva):
urpmf /cutare/fisier
Spre exemplu sa spunem ca vrem sa extragem imaginea gqradio.png din pachetul gqradio-1.9.1-1.i586.rpm. Facem asa:
rpm -qlp gqradio-1.9.1-1.i586.rpm
Rezultatul va fi unul destul de lung:
/usr/bin/gqradio\r\n/usr/share/applications/gqradio.desktop /usr/share/doc/gqradio-1.9.1 /usr/share/doc/gqradio-1.9.1/ COPYING ..................................................... /usr/share/locale/fr/LC_MESSAGES/gqradio.mo /usr/share/pixmaps/gqradio.png
apoi:
rpm2cpio < gqradio-1.9.1-1.i586.rpm |/bin/cpio -id ./usr /share/pixmaps/gqradio.png 1565 blocks [lucian@evenstar tmp]$ ls -al /home/lucian/tmp/usr/share/pixmaps/gqradio.png -rw-r--r-- 1 lucian lucian 1551 Feb 16 09:35 /home/lucian/tmp/usr/share/pixmaps/gqradio.png
gata, fisierul este al nostru! cam laborios, nu? dar am reusit!
Atentie: NU FACETI ASTA CA ROOT! Folositi, ca user normal, comanda:
rpm --rebuild cutare.src.rpm
Spre sfarsitul output-ului ar trebui sa vedeti ceva de genul:
„Wrote: /home/user/rpm/RPMS/i586/cutare.i586.rpm\“
Nu merge! rpm –rebuild cutare.src.rpm tocmai mi-a dat un raspuns de genul
/usr/lib/rpm/rpmb: No such file or directory
Instaleaza pachetul rpm-build:
urpmi rpm-build
Comanda anterioara tocmai mi-a dat eroarea **cannot write to %sourcedir bla bla bla*. Ce inseamna asta?
Pentru a construi un rpm este nevoie de o structura speciala de directoare si de doua mici fisiere de configurare care sa fie amplasate in home.
Descarca http://speculation.org/garrick/setup_rpm_files.sh (recomandat cu wget), fa-l executabil
chmod +x setup_rpm_files.sh
si executa scriptul.
NU! Ca parte a procesului de construire a rpm-ului, software-ul este de asemenea instalat astfel incat rpm-ul sa fie creat corect. Este important ca acest lucru sa se intample intr-un mediu controlat si neprivilegiat.
Ignorati mesajul, este doar un warning. Fisierele din src.rpm aveau owner pe userul blabla cand au fost creat e si cel mai probabil acesta nu exista pe sistemul dumneavoastra.
Toate librariile sunt impartite in doua: versiunea \“run-time\“ de care au nevoie unele programe ca sa functioneze si versiunea „build-time“. Versiunea „run-time“ contine numai cate mici fisiere necesare rularii unor programe, pe cand versiunea „build-time“ este mult mai mare, continand librarii si headere necesare compilarii unui program ce are nevoie de libraria respectiva.
De obicei versiunea „build-time“ are in componenta numelui si cuvantul „devel“.
De exemplu vreau sa compilez PHP-ul (www.php.net) si acesta imi cere pentru suportul grafic si librariile JPEG, aici nu este de ajuns sa instalez numai libjpeg62, ci libjpeg62-devel.