Arch Linux csomagkezelés
Asdf (vitalap | szerkesztései) (→Pacman konfigurációs fájl) |
Asdf (vitalap | szerkesztései) (→Gyakori problémák csomagok készítésénél) |
||
(egy szerkesztő 4 közbeeső változata nincs mutatva) | |||
8. sor: | 8. sor: | ||
=== A pacman használata === |
=== 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: |
Csomagok telepítése: |
||
<pre> |
<pre> |
||
50. sor: | 58. sor: | ||
Egy csomag függőségi fáját a <pre>pactree <csomag></pre> paranccsal kérhetjük le. |
Egy csomag függőségi fáját a <pre>pactree <csomag></pre> paranccsal kérhetjük le. |
||
− | |||
− | 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 |
||
− | verziónként a tárolókat karbantartani, és a felhasznlónak mindig a |
||
− | legfrissebb csomagok érhetők el. |
||
A pacman lényegesen eltér az apt/dpkg párostól abból a szempontból, hogy |
A pacman lényegesen eltér az apt/dpkg párostól abból a szempontból, hogy |
||
67. sor: | 69. sor: | ||
É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. |
||
+ | 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). |
||
=== Pacman konfigurációs fájl === |
=== 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, |
||
− | újabban tar.xz (xz egy fájl formátum és tömörítő program, mely az lzma2 algoritmusra épül). |
||
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. |
||
142. 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> |
||
161. sor: | 162. sor: | ||
pacman -Rsc <csomag> |
pacman -Rsc <csomag> |
||
</pre> |
</pre> |
||
− | |||
== Pacman pgp == |
== Pacman pgp == |
||
270. 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. |
||
282. 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 |
||
293. 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 |
||
304. 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 -QEgy 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) ==> ------------------------------------------------------- ==>