Arch Linux csomagkezelés

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(A pacman használata)
(Gyakori problémák csomagok készítésénél)
 
(egy szerkesztő 2 közbeeső változata nincs mutatva)
68. sor: 68. sor:
 
</pre>
 
</pre>
 
Érdekesség, hogy a csomag elérhetősége http url is lehet.
 
Érdekesség, hogy a csomag elérhetősége http url is lehet.
 
=== Pacman konfigurációs fájl ===
 
   
 
A tárolókból elérhető csomagok legtöbbször tar.gz tömörített állományok,
 
A tárolókból elérhető csomagok legtöbbször tar.gz tömörített állományok,
 
újabban tar.xz (xz egy fájl formátum és tömörítő program, mely az lzma2 algoritmusra épül).
 
újabban tar.xz (xz egy fájl formátum és tömörítő program, mely az lzma2 algoritmusra épül).
  +
  +
=== Pacman konfigurációs fájl ===
   
 
A pacman beállításai a /etc/pacman.conf állományban érhetőek el.
 
A pacman beállításai a /etc/pacman.conf állományban érhetőek el.
143. sor: 143. sor:
 
csomagokat (debian alatt ehhez szükséges a a deporphan csomag).
 
csomagokat (debian alatt ehhez szükséges a a deporphan csomag).
 
Az árva csomagok eltávolítása:
 
Az árva csomagok eltávolítása:
</pre>
+
<pre>
 
pacman -Qdt
 
pacman -Qdt
 
</pre>
 
</pre>
162. sor: 162. sor:
 
pacman -Rsc <csomag>
 
pacman -Rsc <csomag>
 
</pre>
 
</pre>
 
   
 
== Pacman pgp ==
 
== Pacman pgp ==
271. sor: 270. sor:
 
 
 
''ERROR: One or more files did not pass the validity check!''
 
''ERROR: One or more files did not pass the validity check!''
  +
 
A letöltött források valamelyike hashcheck-nél megbukott. Valószínű, hogy a
 
A letöltött források valamelyike hashcheck-nél megbukott. Valószínű, hogy a
 
PKGBUILD készítője nem frissítette a letöltendő források hash-ét.
 
PKGBUILD készítője nem frissítette a letöltendő források hash-ét.
283. sor: 283. sor:
   
 
''Függőség nem található''
 
''Függőség nem található''
  +
 
Előfordulhat, hogy az AUR csomagot nem tartják karban, és a függőségeit nem
 
Előfordulhat, hogy az AUR csomagot nem tartják karban, és a függőségeit nem
 
frissítik megfelelően a PKGBUILD fájlban. Nem ritka, hogy egyes csomagoknál
 
frissítik megfelelően a PKGBUILD fájlban. Nem ritka, hogy egyes csomagoknál
294. sor: 295. sor:
   
 
''patch''
 
''patch''
  +
 
Gyakori probléma, hogy patchelni szeretnénk egy programot, új fícsőr miatt,
 
Gyakori probléma, hogy patchelni szeretnénk egy programot, új fícsőr miatt,
 
vagy egyszerűen csak egy bug miatt. A PKGBUILD-nek köszönhetően
 
vagy egyszerűen csak egy bug miatt. A PKGBUILD-nek köszönhetően
305. sor: 307. sor:
 
patch -b -p1 < patch.diff || return 1
 
patch -b -p1 < patch.diff || return 1
 
</pre>
 
</pre>
 
   
 
== yaourt ==
 
== yaourt ==

A lap jelenlegi, 2012. december 2., 14:45-kori változata

Az Arch Linux egyik legfontosabb építőköve, a pacman csomagkezelő sokban hasonlít az elterjedtebb disztribúciók megoldásaihoz (apt, yum), azonban egy-két esetben kényelmesebb a kezelése, illetve az Arch Build System-mel még rugalmasabbá teszi a csomagok menedzsmentjét.


Tartalomjegyzék

[szerkesztés] 1 Pacman áttekintés

[szerkesztés] 1.1 A pacman használata

Egy szembetűnő különbség a debian alapú disztribúciók csomagkezelésétől abból a tényből adódik, hogy az Arch Linux egy rolling release disztribúció, nincsenek release-ek (persze image snapshotok készülnek néha), ezáltal nem kell a fejlesztőknek verziónként a tárolókat karbantartani, és a felhasznlónak mindig a legfrissebb csomagok érhetők el.

Csomagok telepítése:

pacman -S <csomagok>

Sajnos az apt-get csomagkezelővel ellentétben nem használható wildcard (*) a csomagok nevében.

Csomag keresés:

pacman -Ss <regex>

A regex pattern-re illeszkedő csomagokat listázza.

A pacman képes úgynevezett package group-okat kezelni, amik több különböző csomagot tartalmaznak, ezáltal nem kell minden egyes csomagot telepíteni kézzel. Ilyen csomag group például az X vagy gnome.

Egy package group csomagjainak listázása:

pacman -Sg <group>

Csomag eltávolítása:

pacman -R <csomag>

Csomagok frissítése:

pacman -Syu

Ez a parancs frissíti a csomagok listáját, és elvégzi azok frissítését. Látható, hogy sokkal tömörebb, mint az apt-get update && apt-get upgrade. Ezen kívűl a debian világból megszokott apt-get dist-upgrade szerű dologgal se kell foglalkozni.

A lokális csomag adatbázis lekérdezés:

pacman -Q
Egy csomag függőségi fáját a
pactree <csomag>
paranccsal kérhetjük le.

A pacman lényegesen eltér az apt/dpkg párostól abból a szempontból, hogy mind a repository-ból letöltött, mind a felhasználó által készített vagy harmadik féltől letöltött csomag kezeléséért egy program felelős.

Egy nem a repository-ból származó csomag telepítése:

pacman -U <csomag elérhetősége>

Érdekesség, hogy a csomag elérhetősége http url is lehet.

A tárolókból elérhető csomagok legtöbbször tar.gz tömörített állományok, újabban tar.xz (xz egy fájl formátum és tömörítő program, mely az lzma2 algoritmusra épül).

[szerkesztés] 1.2 Pacman konfigurációs fájl

A pacman beállításai a /etc/pacman.conf állományban érhetőek el.

[szerkesztés] 1.2.1 Az options szekció

Egyes csomagok illetve csomagok csoportjának frissítése letiltható az alábbi módon:

IgnorePkg = <csomagok space-el elválasztva>
IgnoreGroup = <csomag csoportok>

Ez az opció hasznos lehet például akkor, ha egy régebbi X verziót akarunk megtartani egy legacy videokártya driver miatt.

SyncFirst = <csomagok space-el elválasztva>

Ha frissítés érhető el az adott csomagokból, először azokat tölti le. Alapesetben ilyen maga a pacman csomag is.

CacheDir = <útvonal>

A pacman a csomagokat a megadott könyvtárba cache-eli. Több könyvtár is megadható.

CheckSpace

Ellenőrízze-e a pacman, hogy van-e hely a diszken.

SigLevel

Aláírás ellenőrzés módja.

[szerkesztés] 1.2.2 Pacman tárolók

A pacman számára engedélyezett repository-k listája a /etc/pacman.conf fájlban szerkeszthető.

A három leggyakrabban használt tároló: core, extra, community

Lehetséges a /etc/pacman.conf-ban megadni a tároló elérhetőségét, vagy egy másik fájlban rögzíteni az Include paraméter megadásával. pl:

[core]
Include = /etc/pacman.d/mirrorlist

Felvehetünk tetszőleges tárolókat a listába; ilyen például az archlinuxfr, melyen hasznos csomagok érhetők el, melyek valamiért kimaradtak az előre definiált tárolókból. Ilyen csomag például a yaourt.

[archlinuxfr]
Server = http://repo.archlinux.fr/i686

[szerkesztés] 2 Pacman package name tab completition

Kényelmes fícsőr a csomagok nevének automatikus kiegészítése, mely a bash-completition csomaggal érhető el. Telepítése:

pacman -S bash-completion

[szerkesztés] 3 Pacman orphan csomagok

Pacman-nal lehetséges az "árva" csomagok nyomonkövetése. Ha egy olyan csomagot távolítunk el, mely függ egy másik csomagtól, akkor az utóbbi dependencia nem távolítódik el, árva lesz. A pacman-nal nyomonkövethetjük ezen csomagokat (debian alatt ehhez szükséges a a deporphan csomag). Az árva csomagok eltávolítása:

pacman -Qdt

Az árva csomagok listázása:

pacman -Qqdt

Egy csomag és függőségeinek eltávolítása (ha más csomag nem függ az egyes csomagoktól):

pacman -Rs <csomag>

Egy csomag, a csomag függőségeinek és azon csomagok eltávolítása, melyek függnek a csomagtól:

pacman -Rsc <csomag>

[szerkesztés] 4 Pacman pgp

A pacman csomagkezelő A GnuPG kriptográfiai szoftvercsomagot használja a csomagok aláírására. Jelenleg öt különböző master key érhető el, ezek a hivatalos aláíró kulcsai a csomagoknak. https://www.archlinux.org/master-keys/

Ezekkel a master key-ekkel az egyes fejlesztők kulcsát aláírják. Ezután ha a fejlesztő a (master key-el aláírt) kulcsával aláír egy csomagot, akkor az a csomag hivatalos lesz. A felhasználó a saját kulcsával aláírta a master kulcsokat, ezáltal megbízik a csomagban.

Konfigurálás A /etc/pacman.conf-ban az egyes repository-khoz megadható, hogy szükséges-e az adott csomagban megbízni.

[core]
Include = /etc/pacman.d/mirrorlist
SigLevel = Required DatabaseOptional TrustedOnly

Ez esetben csak az általunk megbízhatónak vélt kulcsokkal aláírt csomagokat fogadjuk el.

A keyring inicializálása:

pacman-key --init

Ezzel a saját kulcsunkat legenerálja, a "trust" adatbázist frissíti, a konfigurációs fájlt létrehozza.

A master key-ek verifikálása:

pacman-key --populate archlinux

Ezek után már nem kell minden fejlesztő kulcsát verifikálnunk (megbízni bennük), mivel a master kulcsokkal ezek alá lettek írva.

[szerkesztés] 4.1 Nem hivatalos kulcs hozzáadása

Először le kell tölteni a kulcs szerverről az adott kulcsot:

pacman-key -r <kulcs id>

(Az alapértelmezett kulcs szervert a /etc/pacman.d/gnupg/gpg.conf fájlban tudjuk beállítani)

Ezután ezt a saját kulcsunkkal alá kell írni. Ezzel jelezzük, hogy megbízunk az adott kulccsal aláírt csomagokban.

pacman-key --lsign-key <kulcs id>


[szerkesztés] 5 Egy case study

2012. szeptemberében az Arch Linux fejlesztők úgy döntöttek, hogy a /lib könyvtárat megszüntetik, helyette minden a /usr/lib-ben lesz, a /lib pedig egy symlink lesz a usr/lib-re (nem /usr/lib, chroot esetén fontos). Ez elég nagy galibát okozott a felhasználóknak. A következő hibával találkoztak:

error: failed to commit transaction (conflicting files)
glibc: /lib exists in filesystem
Errors occurred, no packages were upgraded.

Alapesetben elég volt kiadni a következő parancsokat:

pacman -Syu --ignore glibc
pacman -Su

Tehát első körben a glibc telepítését ki kellett hagyni, minden mást frissíteni. Ezután a glibc-t már lehetett frissíteni, a symlink sikeresen létrejön a tranzakció commitolásakor. A problémák akkor kezdődtek, amikor a felhasználók manuálisan próbálták megoldani a linkelést, tehát először elmozgatták a /lib-et, hogy majd a helyére megcsinálják a symlinket. Igen ám, de a /lib-ben található például a ld*.so shared object is, ami a dinamikus linkeléshez szükséges, és az ln parancsnak a libjei is dinamikusan vannak linkelve, ezáltal az nem fog működni (meg semmi, aminek szintén dinamikusan linkelt libjei vannak), ha a /lib-et elmozgatjuk.

Ha a fenti paranccsal se működött a frissítés, akkor nagy valószínűséggel más csomag is tulajdonosa volt néhány lib-nek a /lib-ben. Ilyen például a virtualbox vagy egy régebbi kernel moduljai. Ekkor először érdemes megnézni, milyen tulajdonosai vannak a /lib-ben a fájloknak:

pacman -Qo /lib/*

Ezen csomagokat frissíteni kell, hogy a /usr/lib-be rakják a fájljaikat (Vagy ha nem hivatalos tárolóból szereztük be, akkor rávenni, hogy a /usr/lib-be rakja a libeket).


[szerkesztés] 6 AUR

Az Arch User Repository egy közösség által irányított tároló. A tárolón tarball-ok találhatók, melyekben ún. PKGBUILD illetve egyéb szükséges fájlok találhatók. A PKGBUILD egy csomag leíró fájl a makepkg csomaghoz. Ebben a leíróban adjuk meg a fordítás illetve build-elés paramétereit. Az AUR csomagjait a következő oldalon is böngészhetjük: https://aur.archlinux.org/

[szerkesztés] 6.1 Gyakori problémák csomagok készítésénél

ERROR: One or more files did not pass the validity check!

A letöltött források valamelyike hashcheck-nél megbukott. Valószínű, hogy a PKGBUILD készítője nem frissítette a letöltendő források hash-ét. Számítsuk ki a forrás hash-ét (ez esetben md5):

md5sum <source>

majd a PKGBUILD fájlban írjuk át a az md5sum változót:

md5sums=('<sum_1>' ... '<sum_n>')

Függőség nem található

Előfordulhat, hogy az AUR csomagot nem tartják karban, és a függőségeit nem frissítik megfelelően a PKGBUILD fájlban. Nem ritka, hogy egyes csomagoknál major verzió váltáskor a nevüket is megváltoztatják, és ezt nem frissítik a PKGBUILD-ben. Ezt kézzel megtehetjük:

depends=('<dep_1>' ... '<dep_n>')
makedepends=('<mdep_1>' ... '<mdep_n>')

Utóbbinál a fordításhoz szükséges függőségeket adtuk meg.

patch

Gyakori probléma, hogy patchelni szeretnénk egy programot, új fícsőr miatt, vagy egyszerűen csak egy bug miatt. A PKGBUILD-nek köszönhetően kényelmesen megtehtjuk ezt. A sources változóhoz hozzáadjuk a diff fájlt:

sources('source_1' ... 'patch.diff')

Ahol a patch.diff lehet egy lokális fájl (a tarballon belül), vagy egy URL. Ezután már csak a build függvényen belül kell apply-olni a patchet:

patch -b -p1 < patch.diff || return 1

[szerkesztés] 7 yaourt

A yaourt amellett, hogy egy frontend a pacman fölé, további szolgáltatásokat is nyújt. Segítségével az AUR repository-ból tudunk csomagokat buildelni, telepíteni. A yaourt paraméterezése nagyon hasonló a pacman-éhoz. Sajnos semelyik hivatalos tárolóban nem található meg, vagy AUR-ból telepítjük, vagy egy nem hivatalos tárolóból (pl. archlinuxfr).

A csomagok telepítése nagyon könnyű:

yaourt <keresési minta>

A fenti parancs kiadása után a mintára illeszkedő csomagok közül kiválasztjuk a számunkra megfelelőt (a megfelelő tárolóból), és már telepíti is.

~/ yaourt fluxus                                                        [13:29:50]
1 aur/fluxus 0.17rc5-2 (12)
    A rapid prototyping, livecoding and playing/learning environment for 3D 
    graphics and games.
2 aur/fluxus-git 20120126-1 [installed: 20120819-1] (7)
    A rapid prototyping, livecoding and playing/learning environment for 3D 
    graphics and games.
==> Enter n° of packages to be installed (ex: 1 2 3 or 1-3)
==> -------------------------------------------------------
==> 
Személyes eszközök