pacman
| Rezumat |
|---|
| Pacman este managerul de pachete din Arch Linux. Managerele de pachete sunt folosite pentru instalarea, upgradarea, și înlăturarea software-ului. Acest articol acoperă modul principal de folosire și câteva ponturi pentru depanare. |
| Prezentare generală |
| Pachetele din Arch Linux sunt construite folosind makepkg și un script personalizat pentru fiecare pachet (cunoscut sub numele de PKGBUILD). Odată ce a fost construit, programul poate fi instalat și gestionat de către pacman. PKGBUILD-urile pentru software-ul din depozitele oficiale sunt disponibile în ierarhia ABS; alte mii de pachete sunt disponibile (fără suport oficial) în AUR. |
| Referințe wiki |
| Downgrading Packages |
| Improve Pacman Performance |
| Pacman GUI Frontends |
| Pacman Rosetta |
| Pacman Tips |
| Pacman package signing |
| FAQ#Managementul pachetelor |
| pacman-key |
| Pacnew and Pacsave Files |
| Resurse |
| Manualul pentru libalpm(3) |
| Manualul pentru pacman(8) |
| Manualul pentru pacman.conf(5) |
| Manualul pentru repo-add(8) |
Managerul de pachete pacman reprezintă una dintre cele mai distinse trăsături ale distribuției Arch Linux. Acesta combină un simplu format binar al pachetelor cu un sistem de construcție ușor de folosit. Scopul acestui program este gestionarea mai ușoară a pachetelor, fie că provin din depozitele oficiale Arch sau că sunt propriile construcții ale utilizatorului.
Pacman păstrează sistemul actualizat prin sincronizarea listelor de pachete cu serverul principal. Acest model de server/client vă permite, de asemenea, să descărcați/instalați pachetele printr-o simplă comandă, împreună cu toate dependențele necesare.
Pacman este scris în limbajul de programare C, și pentru împachetare folosește formatul .pkg.tar.xz.
Configurare
Setările pentru pacman se găsesc în /etc/pacman.conf. Aici este unde utilizatorul configurează programul ca să funcționeze într-un anumit fel. Informații detaliate despre fișierul de configurare se pot găsi în manualul pentru pacman.conf.
Opțiuni generale
Opțiunile generale se găsesc în secțiunea [options]. Citiți manualul sau uitați-vă într-un fișier pacman.conf nemodificat pentru mai multe informații despre ce se poate realiza aici.
Evitarea actualizării unui pachet
Pentru evitarea actualizării unui anumit pachet, specificați asta după cum urmează:
IgnorePkg=linux
Pentru mai multe pachete folosiți o listă cu numele acestora separate prin spații, sau folosiți mai multe linii IgnorePkg.
Evitarea actualizării unui grup de pachete
La fel ca metoda de mai sus, se poate evita și actualizarea unui grup întreg de pachete:
IgnoreGroup=gnome
Evitarea instalării fișierelor în sistem
Pentru a evita instalarea de fiecare dată a unor foldere specifice, listați-le sub NoExtract. De exemplu, pentru evitarea instalării unităților systemd folosiți:
NoExtract=usr/lib/systemd/system/*
Depozite
În această secțiune sunt definite ce depozite urmează să fie folosite, după cum este explicat și în /etc/pacman.conf. Acestea pot fi definite direct aici, sau pot fi incluse dintr-un alt fișier (precum /etc/pacman.d/mirrorlist), fiind astfel necesară întreținerea unei singure liste.
/etc/pacman.conf
#[testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist [core] SigLevel = PackageRequired Include = /etc/pacman.d/mirrorlist [extra] SigLevel = PackageRequired Include = /etc/pacman.d/mirrorlist #[community-testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist [community] SigLevel = PackageRequired Include = /etc/pacman.d/mirrorlist # Dacă doriți să folosiți programe 32 bit pe un sistem x86_64, # activați depozitele multilib prezente mai jos. #[multilib-testing] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist #[multilib] #SigLevel = PackageRequired #Include = /etc/pacman.d/mirrorlist # Exemplu pentru un depozit personalizat. Pentru câteva ponturi despre cum # să vă faceți propriile depozite vedeți manualul pentru pacman. #[custom] #SigLevel = Optional TrustAll #Server = file:///home/custompkgs
Securitatea pachetelor
Pacman 4 vine cu suport pentru pachete semnate digital, adăugând pachetelor un strat suplimentar de protecție. Despre cum se activează verificarea semnăturii, vedeți aici.
(Opțional) Pacman în limba română
Pacman poate fi folosit și în limba română. Pentru aceasta, va trebui să decomentați liniile următoare din fișierul /etc/locale.gen:
# nano /etc/locale.gen
en_EN.UTF-8 UTF-8 ro_RO.UTF-8 UTF-8
# locale-gen # export LANG=ro_RO.UTF-8
Ca să nu fie setat înapoi în limba engleză după restart:
# tee /etc/locale.conf <<< "LANG=ro_RO.UTF-8"
Utilizare
Cele ce urmează sunt doar pentru a vă face o idee asupra operațiunilor pe care pacman le poate efectua. Pentru mai multe exemple, vedeți manualul pentru pacman.
Instalarea pachetelor
Instalarea unor anumite pachete
Pentru instalarea unui singur pachet sau a unei liste de pachete (cu dependențe cu tot), executați următoarea comandă:
# pacman -S numele_pachetului1 numele_pachetului2 ...
Uneori există mai multe versiuni ale unui pachet în depozite diferite, de exemplu în [extra] și în [testing]. Pentru a-l instala pe cel din prima variantă, depozitul trebuie specificat la început:
# pacman -S extra/numele_pachetului
Instalarea grupurilor de pachete
Unele pachete fac parte dintr-un grup de pachete iar toate aceste pachete pot fi instalate în același timp. De exemplu, dacă folosim comanda:
# pacman -S gnome
vor fi instalate toate pachetele care fac parte din grupul gnome. Pentru afișarea pachetelor care fac parte din grupul gnome, executați:
# pacman -Sg gnome
Vizitați, de asemenea, https://archlinux.org/groups/ pentru a vedea ce alte grupuri de pachete mai există.
Înlăturarea pachetelor
Pentru a înlătura un singur pachet, lăsându-i toate dependențele acestuia instalate:
# pacman -R numele_pachetului
Pentru a înlătura un pachet împreună cu toate dependențele acestuia care nu sunt cerute și de către alt pachet instalat:
# pacman -Rs numele_pachetului
Pentru a înlătura un pachet, dependențele acestuia și restul pachetelor care depind de el:
# pacman -Rsc numele_pachetului
Pentru a înlătura un pachet, care este necesar și altui pachet, fără înlăturarea pachetului dependent:
# pacman -Rdd numele_pachetului
Atunci când pacman înlătură anumite programe, salvează niște fișiere de configurare importante și le adaugă extensia .pacsave. Pentru a preveni crearea acestor fișiere de rezervă (backup) folosiți opțiunea -n:
# pacman -Rn numele_pachetului
Actualizarea pachetelor
Pacman poate actualiza toate pachetele din sistem printr-o singură comandă. Este posibil să dureze ceva timp în funcție de când a fost actualizat ultima oară. Comanda aceasta poate sincroniza baza de date locală cu cea a depozitului împreună cu actualizarea pachetelor sistemului (fără includerea pachetelor 'locale' ce nu fac parte din depozitele configurate):
# pacman -Syu
Pacman este un utilitar puternic de gestionare a pachetelor, însă acesta nu încearcă să acopere toate cazurile de folosință. Citiți Calea Arch dacă e ceva neclar despre asta. Utilizatorii trebuie să fie vigilenți și să își asume responsabilitatea pentru întreținerea propriului sistem. Atunci când o actualizare este efectuată, este esențial ca utilizatorii să citească toate informațiile pe care pacman le afișează și să folosească bunul simț. Dacă un fișier de configurare modificat ulterior trebuie să fie actualizat pentru a fi compatibil cu o versiune mai recentă a pachetului, un fișier .pacnew va fi creat pentru evitarea rescrierii setărilor efectuate de către utilizator. Pacman va atenționa utilizatorul să le combine împreună. Fișierele acestea necesită intervenție manuală din partea utilizatorului iar îngrijirea lor imediat ce un pachet a fost actualizat sau înlăturat este un obicei bun. Vedeți articolul Pacnew and Pacsave Files pentru mai multe informații.
Înainte de actualizare, este recomandat să vizitați pagina principală Arch Linux pentru a verifica ultimele știri (sau abonați-vă la feed-ul RSS): atunci când actualizările necesită intervenții ceva mai speciale (mai mult decât v-ați putea ocupa urmând doar instrucțiunile afișate de către pacman), o știre adecvată situației va fi postată.
Dacă întâlniți probleme care nu pot fi rezolvate prin aceste instrucțiuni, ați face bine dacă ați da un search pe forum. E destul de probabil că și alte persoane au avut aceleași problemă și că au postat instrucțiuni despre cum se poate rezolva.
Interogarea bazelor de date ale pachetelor
Pacman trimite interogări (queries) bazei de date locale a pachetelor prin opțiunea -Q; a se vedea:
$ pacman -Q --help
și trimite interogări bazelor sincronizate prin opțiunea -S; a se vedea:
$ pacman -S --help
Pacman poate căuta pachete în baza de date, căutând atât după numele pachetelor cât și după descrierea acestora:
$ pacman -Ss șir1 șir2 ...
Pentru a căuta pachetele deja instalate:
$ pacman -Qs șir1 șir2 ...
Pentru afișarea informațiilor extensive despre un anumit pachet:
$ pacman -Si numele_pachetului
În cazul pachetelor instalate local:
$ pacman -Qi numele_pachetului
Folosirea a două opțiuni -i afișează o listă a fișierelor de rezervă și starea modificării acestora:
$ pacman -Qii numele_pachetului
Pentru obținerea listei fișierelor instalate de către un pachet:
$ pacman -Ql numele_pachetului
În cazul în care pachetele nu sunt instalate, folosiți pkgfile.
Baza de date poate fi interogată și pentru aflarea cărui pachet aparține un anumit fișier:
$ pacman -Qo /adresa/către/numele_fișierului
Pentru afișarea tuturor pachetelor care nu sunt cerute ca dependențe (pachete orfane):
$ pacman -Qdt
Pentru afișarea ierarhiei dependențelor unui pachet:
$ pactree numele_pachetului
Pentru afișarea tuturor pachetelor care depind de un pachet, folosiți whoneeds din pkgtools:
$ whoneeds numele_pachetului
Comenzi suplimentare
Actualizarea sistemului și instalarea pachetelor dintr-o listă (pe o singură linie):
# pacman -Syu numele_pachetului1 numele_pachetului2 ...
Descărcarea unui pachet fără instalarea acestuia:
# pacman -Sw numele_pachetului
Instalarea unui pachet „local” care nu provine dintr-un depozit extern (ex: pachetul provine din AUR):
# pacman -U /adresa/către/folder/numele_pachetului-versiune.pkg.tar.xz
Instalarea unui pachet „extern” (ce nu face parte din fișierele de configurare folosite de către pacman):
# pacman -U http://www.exemplu.com/repozit/exemplu.pkg.tar.xz
Ștergerea din folderul cache a pachetelor care nu sunt instalate momentan (/var/cache/pacman/pkg):
# pacman -Sc
Ștergerea tuturor pachetelor prezente în folderul cache:
# pacman -Scc
Actualizările parțiale nu sunt acceptate
Arch Linux este bazat pe un model de actualizări la zi (rolling release), și versiuni noi pentru biblioteci software vor fi urcate în depozite. Developerii și Trusted Users vor reconstrui toate pachetele necesare din depozite pentru a fi compatibile în continuare cu aceste biblioteci. Dacă sistemul conține pachete instalate local (cum sunt cele din AUR), utilizatorii vor trebui să le reconstruiască atunci când dependențele acestora primesc o atenționare soname.
Asta înseamnă că actualizările parțiale nu sunt acceptate. Să nu folosiți pacman -Sy pachet sau orice alt echivalent precum pacman -Sy și apoi pacman -S pachet. Să actualizați întotdeauna sistemul înainte de a instala un pachet -- mai ales dacă pacman a sincronizat baza de date cu depozitele. Din același motiv aveți mare grijă atunci când folosiți IgnorePkg și IgnoreGroup.
Dacă s-a întâmplat să aibă loc o actualizare parțială, iar fișierele în format gata construit (binaries) sunt stricate din pricina lipsei bibliotecilor software legate de acestea, să nu „reparați” problema prin simpla creere a unei legături simbolice (symlink). Bibliotecile software primesc o atenționare soname atunci când nu sunt compatibile cu formate mai vechi. Un simplu pacman -Syu folosind un mirror actualizat cum trebuie va rezolva problema atât timp cât pacman nu a pățit nimic.
Depanare
Î: Actualizarea pachetului XYZ mi-a stricat sistemul!
Cel mai important de reținut este faptul că sistemele Arch nu ar trebui actualizate „orbește”. Citiți întotdeauna lista pachetelor ce urmează să fie actualizate. Băgați de seamă atunci când pachetele „esențiale” urmează să fie actualizate (linux, xorg-server, și așa mai departe). Dacă se întâmplă să fie așa, de obicei este o idee bună să verificați știrile de pe https://www.archlinux.ro/ și să treceți peste câteva postări de pe forum pentru a vedea dacă alte persoane au întâmpinat probleme după actualizarea sistemului.
Dacă un pachet este cunoscut ca fiind problematic și este de așteptat să se întâmple așa, responsabilii de pachete vor face tot posibilul ca pacman să afișeze mesajul potrivit atunci când pachetul este actualizat. Dacă întâmpinați dificultăți după o actualizare a sistemului, verificați încă o dată informațiile afișate de către pacman în fișierul log (/var/log/pacman.log).
După tot ce s-a discutat mai sus, în cazul în care sunteți sigur că pacman nu oferă nicio altă informație, că nu există niciun articol aferent de știri pe https://www.archlinux.ro/, și că nu există postări pe forum despre această actualizre, ar trebui să vă gândiți să cereți ajutor pe forum, pe IRC, sau să faceți un downgrade pachetelor problematice].Î: Știu că există o versiune nouă pentru pachetul ABC, dar pacman zice că sistemul e la zi!
Î: Primesc o eroare atunci când actualizez sistemul: „file exists in filesystem”!
error: could not prepare transaction error: failed to commit transaction (conflicting files) package: /path/to/file exists in filesystem Errors occurred, no packages were upgraded.
De ce se întâmplă așa ceva: pacman a detectat un conflict între fișiere, și, după felul în care a fost proiectat, nu va rescrie fișierele acestea în locul vostru. Aceasta este o caracteristică intenționată, nu un defect.
Problema este de obicei ușor de rezolvat. O metodă considerată a fi sigură este să verificați mai întâi dacă alt pachet deține acest fișier (pacman -Qo /adresă/către/fișier). Dacă alt pachet deține acest fișier, raportați acest bug. Dacă niciun alt pachet nu deține fișierul, redenumiți fișierul care „există deja în sistem” și executați din nou comanda de actualizare a sistemului. Dacă toate merg cum trebuie, atunci fișierul poate fi șters.
Dacă ați instalat manual un program fără să folosiți pacman sau o interfață, trebuie să îl ștergeți împreună cu toate fișierele acestuia și să îl reinstalați cum trebuie folosind pacman.
Fiecare pachet instalat vine cu un fișier /var/lib/pacman/local/$pachet-$versiune/files ce conține informații metadata despre pachet. Dacă acest fișier devine corupt - nu conține nimic sau lipsește efectiv - va conduce la erori de genul „file exists in filesystem” atunci când încercați să actualizați pachetul. O astfel de eroare se referă de obicei doar la un singur pachet, iar în loc să redenumiți manual toate fișierele care țin de pachetul respectiv și apoi să le ștergeți, puteți executa pacman -S --force $pachet pentru a îl forța pe pacman să rescrie aceste fișiere.
Să nu executați pacman -Syu --force.Î: Primesc o eroare atunci când instalez un pachet: „not found in sync db”
Î: Pacman actualizează în mod repetat același pachet!
Soluția: ștergeți înregistrările problematice din /var/lib/pacman/local/.
Î: Pacman se oprește brusc în timpul unei actualizări!
- Porniți calculatorul folosind mediul de instalare Arch.
- Montați partiția root.
- Actualizați baza de date din pacman folosind pacman -Syy.
- Reinstalați pachetul defect folosind pacman -r /path/to/root -S package.
Î: Am instalat ceva cu „make install”; fișierele nu aparțin niciunui pachet!
Î: Am nevoie de un pachet ce conține un anumit fișier. Cum aflu care pachet îl furnizează?
Î: Pacman s-a stricat de tot! Cum pot să-l reinstalez?
Î: După ce am actualizat sistemul și am dat restart, primesc eroarea „unable to find root device” iar acum sistemul nu vrea să mai pornească
1. Încercați opțiunea Fallback.
- Odată ce a pornit sistemul, executați comanda următoare (pentru kernel-ul standard linux) din consolă sau dintr-un terminal pentru a reconstrui imaginea initramfs:
-
# mkinitcpio -p linux
2. Dacă n-a mers, de pe un suport de instalare Arch din 2012 (CD/DVD sau USB stick), executați:
-
# mount /dev/sdxY /mnt #Partiția root. # mount /dev/sdxZ /mnt/boot #Dacă aveți o partiție /boot separată. # arch-chroot /mnt # pacman -Syu mkinitcpio systemd linux
- Reinstalarea kernelului (pachetul linux) va re-genera automat imaginea initramfs folosind mkinitcpio -p linux. Nu este necesar să faceți asta separat.
- După aceea, este recomandat să executați exit, umount /mnt/{boot,} și reboot.