A Portage egy csomagkezelő rendszer, melyet eredetileg a Gentoo számára fejlesztettek ki, de ma már számos Gentoo alapú rendszer használja. A Gentoora gyakorta meta disztribúcióra hivatkoznak a Portage rendszer extrém flexibilitása miatt, ami operációs rendszer függetlenné teszi a Gentoot.
Történelmi áttekintés A Portage rendszert a Berkeley Software Distribution által kifejlesztett FreeBSD port rendszer inspirálta, melyet a rendszer karbantartásához és frissítéséhez fejlesztettek ki. Az általános Linux csomagkezelők általi megközelítéssel ellentétben a port nem használ bináris csomagokat, hanem egy forrásból mindent a helyi gépen fordít le.
Daniel Robbins a Gentoo Linux megalkotója a kezdetekben egy 450 MHz-es órajelre tuningolt Celeron 300-ason futtatta a Linuxait, de vett egy újabb gépet, amin nem működött megfelelően a rendszer. Később realizálódott benne, hogy másoknak is ugyanilyen gondjai vannak, amit nem tud megoldani és - szégyenszemre, mint Linux fejlesztő - FreeBSD-re váltott, majd néhány hónap múlva a BSD-s tapasztalatokkal felvértezve újult erővel vágott bele a Gentoo fejlesztésébe.
Noha a 2.2-es Linux kernel kiadása csalódás volt számára, a javított 2.4-es szériával úgy érezte új világ nyílt meg előtte, szóval a Gentoo Linux feléledt hamvaiból. E kudarcnak és a BSD-nek hála ekkor vágott bele a portage koncepcióba, ami a Gentoo disztribúciók nélkülözhetetlen alapkellékévé vált.
Jellemzők bélyegkép|300x300px|Portage fa (részlet) A Portage rendszer alapja a metafájlokból és ebuildekből álló Portage fa, mely konfigurációs, forrás letöltési, fordítási és telepítési információt tartalmaznak.
Ez az a megközelítés, amit a Gentoo esetében is használtak, amely nagyfokú rugalmasságot enged meg a telepítés során éppúgy, mint a szoftverek karbantartása területén. Erről a flexibilitásról a fordítási időben használható un. USE flagek gondoskodnak, melyek lehetővé teszik a függőségek kezelését, biztonságos telepítést (sandbox-on keresztül), a rendszer profilok használatát, vagy éppen a teleptett fájlok felülírását, vagy megőrzését. A Portage rendszert Python nyelven programozták.
A Portage fát a teljesség igénye nélkül két fő részre bonthatjuk 1) profilokra, melyek az architektúra és felhasználási terület szerinti alapbeállításokat tartalmazza ill. 2) az ebuild könyvtárfára, mely egy kategória és azon belül egy csomagnév könyvtárra bontható.
Jelen pillanatban közel 20 000 csomag található a hivatalos Portage rendszerben, de léteznek nem hivatalos kiterjesztések is (Gentoo Portage Overlays), sőt a rendszer azt is megengedi, hogy saját magunk is létrehozzunk egyet a Layman repo menedzselő eszköz jóvoltából. ebuildek Az ebuild egy bash szkript, melyet szoftverek fordításának és telepítésének automatizálására terveztek.
Az ebuildek szkript természetük miatt könnyen szerkeszthetőek és elképesztő rugalmasságot nyújtanak, amivel lehetővé válik bináris csomagok telepítése éppúgy, mint források tetszőleges paraméterekkel történő fordítása amellett, hogy a függőségek kezelése megoldott.
Egy példa az ebuild fájlra:# Copyright 1999-2017 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2
EAPI="6" ETYPE="sources" K_WANT_GENPATCHES="base extras experimental" K_GENPATCHES_VER="40"
inherit kernel-2 detect_version detect_arch
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86" HOMEPAGE="https://dev.gentoo.org/~mpagano/genpatches" IUSE="experimental"
DESCRIPTION="Full sources including the Gentoo patchset for the ${KV_MAJOR}.${KV_MINOR} kernel tree" SRC_URI="${KERNEL_URI} ${GENPATCHES_URI} ${ARCH_URI}"
pkg_postinst() { kernel-2_pkg_postinst einfo "For more info on this patchset, and how to report problems, see:" einfo "${HOMEPAGE}" }
pkg_postrm() { kernel-2_pkg_postrm }
Portage parancsok A portage egy komplett szinkronizációs fordító és telepítő csomagrendszer összessége, így a teljes kihasználásához több parancs ismerete szükséges. emerge: általános telepítő és kereső program (a legtöbb esetben csak ennek a használata szükséges) a rendszer frissítése és tisztítása után érdemes futtatni a @preserved-rebuild gyűjtemény újratelepítését, mely segít a rendszer konzisztenciájának megőrzésében a kernel fordítása után a @module-rebuild, az X fordítása után az @x11-module-rebuild gyűjtemény telepítése célszerű revdep-rebuild: a rebuild gyűjteményeken felül ellenőrzi és javítja a rendszer integritását equery: részletes csomagelemző, kereső program (ritkán használt, komplett csomagrendszerek pl. kde maszkolásánál, vagy fájlok keresésénél hasznos) elclean: a portage tisztító alkalmazása (hasznos, ha kevés helyünk van) genlop: a portage log-fájljainak elemzésére szolgál (a telepítési időtartamok megbecslésére kiválóan alkalmas)
emerge A Portage rendszer legfontosabb parancsa az emerge. Ezzel lehet a tükörszerverről szinkronizálni az aktuális Portage könyvtárat, telepíteni, csomagok között keresni és még sok minden mást. A legfontosabb parancsokat - ami nélkül a portage rendszer karban tartása elképzelhetetlen - a következő táblázat szemlélteti: szükséges jogosultságparancsleírásrendszergazdaiemerge --synctelepítési adatbázis (portage fa) szinkronizálásafelhasználóiemerge -pv csomag|lista|@gyűjteménya "csomag", "lista", vagy "@gyűjtemény" részletes telepítési leírásafontosabb gyűjtemények: system, world, preserved-rebuild, module-rebuildfelhasználóiemerge -s|-S ...a "kifejezés" keresése (-s) a csomag nevében (-S) a leírásbanrendszergazdaiemerge -av ...a telepítési lista kiírása, majd kérésre telepítésrendszergazdaiemerge ...azonnali telepítésrendszergazdaiemerge -C|-c ...eltávolítás, eltávolítás a függőségek vizsgálatávalrendszergazdaiemerge -uDN --with-bdeps=y @worldteljes rendszer frissítése a függőségek és a változott "use" paraméterek figyelembe vételévelfelhasználóiemerge --info ...nagyon részletes leírás a telepítendő, vagy telepített dolgokrólhiba keresése esetén nagyon hasznosrendszergazdaiemerge -f ...a telepítendők letöltése, a fordítás későbbre hagyásamegjegyzés hasznos lehet, ha a netes kapcsolat ideiglenesrendszergazdaiemerge -b|-B ...csak a bináris csomagok készítése (-B), és telepítése is (-b)hasznos, ha a csomagokat több gépre telepítenénk, vagy backupot gyártanánkrendszergazdaiemerge -k|-Kbináris csomagok (-k) és csakis bináris csomagok (-K) telepítésetöbb rendszer esetén hasznos; -pvk esetén az is látszik, hogy mely csomagok lesznek fordítva
revdep-rebuild A függőségek ellenőrzésére és a rendszer integritásának javítására szolgáló parancs működését a következő táblázat mutatja: szükséges jogosultságparancsleírásfelhasználóirevdep-rebuild -pva teljes rendszer integritását ellenőrzi és megjelenítitürelem, eltart egy darabig az elemzésrendszergazdairevdep-rebuildjavítja a teljes rendszer integritásátrendszergazdairevdep-rebuild ...a kiválasztott csomag integritását javítjarendszergazdairevdep-rebuild -ifigyelmen kívül hagyja az előző elemzéstenélkül a paraméter nélkül folytatná a félbehagyott fázissalrendszergazdairevdep-rebuild -K libX*.so.*újraépíti azokat a csomagokat, melyek valamilyen libX könyvtártól függenek
equery A részletes keresésre és reguláris kifejezések általi telepítésre ad lehetőséget ez a parancs. A következő táblázat néhány ötletet tartalmaz kedvcsinálónak. szükséges jogosultságparancsleírásfelhasználóiequery b libz.somegkeresi, hogy a "libz" könyvtár melyik csomaghoz tartozikfelhasználóiequery k dev-python/s*'s' betűvel kezdődő csomagokat keres a "dev-python" kategóriábanfelhasználóiequery g portage-9999listázza a "portage" csomag snapshot függőségi fájátfelhasználóiequery h kdelistázza azokat a csomagokat, melyek "kde" use flaget használnakrendszergazdaiemerge $(equery -q belongs -nf '^/usr/bin/g?vim.*')kombinált parancs, mely újratelepíti/frissíti a regexp kifejezésnek megfelelő csomagokat
eclean A források, vagy a bináris csomagok törlését segíti elő. szükséges jogosultságparancsleírásrendszergazdaieclean -i distfilestörli a letöltött forrásokat, melyekhez megerősítést kérfelhasználóieclean -p packageslistázza a feleslegessé vált bináris csomagokatrendszergazdaieclean-distmegerősítés nélkül törli a letöltött forrásokat (rövidebb forma)rendszergazdaieclean-pkgtörli azokat a bináris csomagokat, melyek feleslegesek (nem telepítettek)rendszergazdaieclean-dist -t1m -s50Maz egy hónapnál régebbi, 50 MB-tól nagyobb források törlése
genlop A log-fájlok tartalmának elemzésére, abból számított kalkulációk készítésére alkalmas. szükséges jogosultságparancsleírásrendszergazdai (logok)genlop -lkilistázza röviden a telepített csomagokat és időpontokatrendszergazdai (logok)genlop -t csomaga korábbi logok alapján megbecsli, hogy mennyi idő kell a csomag telepítéséhezrendszergazdai (logok)genlop -cmegbecsli, hogy az aktuális folyamat mennyi ideig tarthat mégrendszergazdai (logok)genlop -l | tail -n 10összetett parancs, mely az utolsó 10 telepített csomag összefoglalását listázzarendszergazdai (logok)emerge -uDN --with-bdeps=y @world | genlop -pkombinált parancs, mely megbecsüli, hogy mennyi ideig tarthat a teljes rendszer frissítése
Képgaléria
Konfiguráció bélyegkép|176x176px|Példa a konfigurációs könyvtárstruktúrára A Portage konfigurációs fájljai a /etc/portage könyvtárban találhatóak. Az ebuild információk központilag (/etc/portage/make.conf fájlban), vagy csomagonként (/etc/portage/package.* fájlokban, vagy könyvtárakban) felülírhatóak.
USE flagek A USE flagek lehetővé teszik a csomagfüggőségek kezelését. Mivel a függőségek kezelése fordítási időben történik, ezért a bináris rendszerekkel ellentétben lehetőség van nem kívánt függőségek elhagyására is, amivel sokkal testre szabottabb rendszer állítható elő.
A USE flagek használhatóak egyedi csomagokra parancssorban, /etc/portage/package.use fájlban, vagy központilag a /etc/portage/make.conf fájlban. A USE flag előjel nélküli használatával a függőség beépítésre kerül, amíg negatív előjellel eltávolításra, ezzel felülírva az ebuild fájl vonatkozó utasításait.
make.conf A /etc/portage/make.conf fájlban állíthatóak be az alapvető optimalizációs paraméterek, architektúra kiválasztása valamint a globálisan alkalmazott USE flagek, maszkolások.
Példa a make.conf fájlra: CHOST="x86_64-pc-linux-gnu" # amd64 bites rendszer CFLAGS="-march=sandybridge -O2 -pipe" # optimalizáció egy Sandy Bride-hez CXXFLAGS="${CFLAGS}"
# a make 5 szálon fusson (ált. magok száma + 1) MAKEOPTS="-j5"
# nyelvi beállítások L10N="hu en de hu-HU en-GB en-US de-DE" LANG="hu_HU.UTF-8"
# soha ne használjon gtkv2-t és mindig használjon qtv5-öt, ha lehet USE="-gtk2 qt5"
# az ideiglenes fordítási könyvtár legyen a memóriában (ez nagy memóriát igényelhet) PORTAGE_TMPDIR="/dev/shm/"
# néhány videókártya drájver VIDEO_CARDS="intel i965 modesetting nvidia"
# a Google Chrome licence legyen automatikusan elfogadva ACCEPT_LICENSE="google-chrome"
package.* Ha a csomagokat egyesével akarjuk konfigurálni, akkor használjuk a /etc/portage/package.* fájlokat, vagy, ha túl sok bennük az információ, akkor még a jobb áttekinthetőség kedvéért /etc/portage/package.* könyvtárakat és abban elhelyezett bármilyen nevű fájlokat.
Ezen fájlok némelyikében használhatóak az architektúrák (x86, amd64 stb.) és mindegyikében a kategória és a csomagnevek ill. ezek pontos, vagy rész verziószámai.Ezen felül verzió megadása esetén a relációs jelekkel (=, <, >, >=, <=) meglehetősen rugalmasan használható a konfiguráció.