====== 12. Gestiunea pachetelor ====== Instalarea aplicațiilor pe distribuțiile Linux se face prin intermediului managerului de pachete. In practica exista doua tipuri de pachete: * .deb - pentru sistemele Debian-based (aici se evidențiază comenzile ''dpkg'' și ''apt-get''). ''dpkg''-ul lucreaza direct cu fișierele .deb, dar nu rezolvă dependințe. ''apt-get'' este managerul de pachete care rezolva inclusiv dependințele. * .rpm - pentru sistemele RedHat-based (aici se evidențiază comenzile ''rpm''[echivalent ''dpkg''] și ''yum''[echivalent ''apt-get''). ==== Utilitare folosite ==== === Debian-based === * **''dpkg''** - gestionează pachete {{{.deb}}} * **''dpkg-reconfigure''** - reconfigurează un pachet deja instalat * **''apt-get''** - descarcă pachete din repo-uri și le gestionează * **''apt-cache''** - interoghează baza de date locală * **''apt-file''** - extrage informații despre fișierele conținute de un pachet * **''/etc/apt/sources.list''** - specifică adresele repo-urilor * **''aptitude''** - folosit cu același scop ca suita {{{apt-*}}} === RedHat-based === * **''rpm''** - gestionează pachete {{{.rpm}}} * **''yum''** - descarcă și gestionează pachete {{{.rpm}}} * **''yumdownloader''** - descărcă un pachet {{{.rpm}}} fără a-l instala * **''rpm2cpio''** - convertește un pachet {{{.rpm}}} într-o arhivă {{{.cpio}}} * **''/etc/yum.conf''** - conține diverse configurații ale utilitarului {{{yum}}} și, eventual, adrese de repo-uri * **''/etc/yum.repos.d/''** - conține date despre repo-uri, câte un fișier pentru fiecare ==== Bune practici ==== * Afișarea pachetului care a pus la dispoziție un fișier: dpkg -S rpm -qf * Afișare conținut pachet instalat: dpkg -L rpm -ql * Upgrade la toate pachetele din sistem: sudo apt-get upgrade * Ștergere pachete instalate pentru a satisface anumite dependințe (nu mai sunt folositoare): sudo apt-get autoremove * Ștergere pachete descărcate din repository local: sudo apt-get autoclean * După modificarea repository-urilor, nu uitati: sudo apt-get update Comanda utilizată pentru resincronizarea pachetelor. ===== Resurse utile ===== * [[http://www.cyberciti.biz/howto/question/linux/dpkg-cheat-sheet.php | Dpkg - Cheat Sheet]] * [[http://www.cyberciti.biz/howto/question/linux/linux-rpm-cheat-sheet.php | RPM - Cheat Sheet]] * [[http://www.tecmint.com/useful-basic-commands-of-apt-get-and-apt-cache-for-package-management/ | Useful Basic Commands for Package Mamagement (Debian)]] ===== Exerciții ===== ==== Demo-uri ==== # Folosind utilitarul {{{apt-get}}}, descărcați următorul pachet {{{.deb}}} (fără a-l instala): apt-get install --download-only sl și apoi navigați în folderul {{{/var/cache/apt/archives}}}. ## Pentru a afla informații despre pachetul anterior, cum ar fi versiunea, pachetele de care depinde sau arhitectura pe care poate fi instalat, folosiți opțiunea {{{-I}}} a utilitarului {{{dpkg}}} (sau {{{--info}}}): dpkg -I Numele complet pachetului depinde de versiunea sa și de arhitectura pentru care a fost compilat, dar va începe cu {{{sl}}}. ## Pentru a instala pachetul (fără dependențele acestuia), folosiți parametrul {{{-i}}}: dpkg -i unde este fișierul {{{.deb}}} descărcat. ## Pentru a determina toate fișierele ce aparțin pachetului instalat, rulați comanda (sau cu parametrul {{{--listfiles}}}): dpkg -L sl ## Pentru a determina toate pachetele ce conțin un fișier, rulați comanda (sau cu parametrul {{{--search}}}): dpkg -S /usr/games/sl ## Dezinstalarea pachetului se face cu comanda: dpkg -r sl În loc de {{{-r}}} poate folosi parametrul {{{-P}}} (purge) pentru a șterge și fișierele de configurare. # Listarea tuturor pachetelor instalate în sistem, alături de versiune și o scurtă descriere, se poate face folosind comanda: dpkg -l ## Pentru a determina dacă un pachet ce conține {{{linux}}} în denumire este instalat, rulați comanda: dpkg -l '*linux*' ## Observați prima coloană a tabelului afișat. Acest câmp este format din două sau trei litere. ## Prima literă reprezintă starea dorită a pachetului. Aceasta poate fi: {{{i}}} - install, {{{u}}} - unknown, {{{r}}} - remove, {{{p}}} - purge, {{{h}}} - hold. ### A doua literă reprezintă starea curentă a pachetului: {{{n}}} - not installed, {{{i}}} - installed, {{{u}}} - unpacked etc. ### Dacă există și o a treia literă, aceasta este {{{r}}} și reprezintă apariția unei erori la instalare iar pachetul va trebui reinstalat. # Configurările unui pachet se pot face fie înainte de a-l instala, fie după ce a fost instalat. Pentru a schimba timezone-ul pe ora Moscovei, având în vedere că pachetul {{{tzdata}}} a fost deja instalat, folosiți comanda: dpkg-reconfigure tzdata și navigați prin meniu. # Folosirea utilitarului {{{apt-get}}} pentru managementul pachetelor presupune existența unei baze de date locale cu pachetele disponibile și locul din care pot fi luate. Pentru a actualiza această bază de date, folosiți comanda: apt-get update ## Pentru a căuta un pachet se folosește utilitarul {{{apt-cache}}}: apt-cache search "octave" ## De asemenea, se pot extrage informații despre un pachet (asemenea parametrilor {{{--info}}} și {{{--print-avail}}} ai {{{dpkg}}}): apt-cache show octave ## Instalarea unui pachet (alături de dependențe) se face folosind comanda: apt-get install octave În cazul în care pachetul este deja instalat, se instalează ultima versiunea a acestuia (update), dacă există. ## Dezinstalarea unui pachet se face executând comanda: apt-get purge octave apt-get remove --purge octave Parametrul {{{--purge}}} are aceeași semnificație ca în cazul {{{dpkg}}}. ## Uneori, știm de ce comandă sau fișier avem nevoie dar nu știm pachetul în care acesta se poate găsi. În aceste cazuri este folositor utilitarul {{{apt-file}}}, care caută prin fișierele conținute de un pachet: apt-file search apache2.conf ## Dacă pachetul {{{apt-file}}} nu este instalat, instalați-l. # Un alt utilitar pentru managementul pachetelor în cadrul sistemelor Debian-based este {{{aptitude}}}. Avantajul major al acestuia peste suita {{{apt-*}}} este unificarea opțiunilor în cadrul unei singure comenzi. În plus, rulând: aptitude este pusă la dispoziție și o interfață grafică (pentru ieșire, folosiți tasta {{{q}}}). ## Căutarea unui pachet în cache-ul local se face cu comanda: aptitude search "apache" ** Diferența între {{{aptitue search}}} și {{{apt-cache search}}} constă în faptul că prima afișeaza și dacă pachetul este instalat sau nu în sistem. ## Pentru afișarea informațiilor despre un pachet, rulați: aptitude show apache2 ## Pentru a instala un pachet, folosiți comanda: aptitude install apache2 ## Dezinstalarea se face astfel: aptitude purge apache2 Se poate folosi opțiunea {{{remove}}} în locul {{{purge}}}. ## O opțiune utilă este {{{clean}}}. Aceasta șterge pachetele păstrate în cache: aptitude clean Opțiunea {{{autoclean}}} șterge doar pachetele out-of-date, ce nu mai pot fi descărcate. Aceste două operații sunt utile pentru a împiedica creșterea cache-ului în timp și a elibera spațiu pe disc. # În cadrul unui sistem, la un moment dat, pot exista mai multe programe care să aibă același scop (cum ar fi un browser: poate fi Firefox, Chrome etc.). Sistemele Debian-based folosesc grupuri de alternative pentru fiecare scop; fiecare grup menține un link simbolic către programul preferat. ## Utilitarul folosit pentru gestionarea acestor grupuri este {{{update-alternatives}}}. Listarea alternativelor pentru grupul de browsere ({{{www-browser}}}) se face astfel: update-alternatives --list x-www-browser Dacă executabilul căutat nu se află în listă, el va trebui adăugat manual. ## Selectarea opțiunii dorite se poate face interactiv sau neinteractiv. Pentru a folosi varianta interactivă, rulați: update-alternatives --config x-www-browser ==== Exercițiu 1 ==== Afișați informații despre starea pachetelor de pe sistemul local ce conțin șirul {{{make}}}. (Hint: folosiți șirul {{{*make*}}} pentru căutare). Căutați în repository pachetele ce conțin fișierul header {{{gdk.h}}}. Determinați toate pachetele ce pot satisface dependențele pachetului {{{hevea}}}. (Hint: {{{man apt-cache}}}, {{{depends}}}). Actualizați editorul implicit folosit în sistem în {{{vim}}}. Numele grupului de alternative este {{{editor}}}.