====== 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}}}.