Alapvető útmutató a Gentoo Ebuild-ek írásához

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Basic guide to write Gentoo Ebuilds and the translation is 100% complete.

Ez egy útmutató az ebuil-ek írásának megkezdéséhez, a Portage erejének kihasználásához, valamint még több szoftver telepítéséhez és kezeléséhez.

Írjon Ön egy ebuild-et egy szoftver telepítéséhez a Gentoo-ra, ha azt még senki nem hozta létre. Ez egy viszonylag egyszerű feladat, és ez az egyetlen módja annak, hogy a legtöbb "harmadik féltől származó" szoftvert tisztán telepítsük a rendszerre. Az ebuild lehetővé teszi a csomagkezelő számára, hogy nyomon kövessen minden, a rendszerre telepített fájlt, lehetővé téve a tiszta frissítéseket és eltávolítást.

Tip
Az ebuild cikkből: Az ebuild fájl egy szöveges fájl, általában szoftvertárolóban tárolva, amely azonosít egy adott szoftvercsomagot, és megmondja a Gentoo csomagkezelőnek, hogyan kezelje azt. Az ebuild-ek bash-szerű szintaxisstílust használnak, és szabványosítva vannak a csomagkezelő specifikációján keresztül, egy adott EAPI-verzióhoz való ragaszkodással.

Az ebuild-ek metaadatokat tartalmaznak egy elérhető szoftver egyes verzióiról (név, verziószám, licenc, kezdőlap címe...), függőségi információkat (a felépítési és a futási időt egyaránt), valamint utasításokat a szoftver összeállítására és telepítésére vonatkozóan. Szoftver (konfigurálás, fordítás, összeállítás, telepítés, tesztelés...).

Mihelyt Ön egy ebuild-et működőképessé tesz, máris megoszthatja azt egy pull request által, vagy egy külön ebuild szoftvertárolóban, és ezáltal nyilvánosan elérhetővé válik mindenki számára. Kis erőfeszítéssel ebuild-eket lehet javasolni és karbantartani a GURU szoftvertárolóban.

Note
Tekintse meg a fejlesztői kézikönyvet az ebuild írásáról a teljes referenciadokumentációért. Tekintse meg az ebuild írásának gyors kezdetét a fejlesztői kézikönyvben további példákért az ebuild írására. Tekintse meg az ebuild cikket magáról az ebuild-ről, az ebuild szoftvertároló cikket arról, hogy mi az ebuild szoftvertároló, és az ebuild szoftvertároló létrehozásáról szóló cikket arról hogy, miként lehet ezeket létrehozni.

Ebuild szoftvertárolók

Annak érdekében, hogy az ebuild-ek elérhetőek legyenek a Portage számára, egy ebuild szoftvertárolóba kell helyezni, amely a Portage számára van beállítva az /etc/portage/repos.conf fájlon keresztül (az ebuild szoftvertárolókkal való munkavégzésről tekintse meg a szoftvertároló kezelése című részt).

Hozzon létre egy ebuild szoftvertárolót a kísérletezéshez, miközben Ön követi ezt az útmutatót. A cikk további része az feltételezi, hogy egy szoftvertároló van létrehozva a /var/db/repos/example_repository könyvtárban.

Az eselect-repository egyszerűvé teszi a szoftvertároló létrehozását:

root #emerge -a app-eselect/eselect-repository
root #eselect repository create example_repository
Note
Az ebuilds telepíthető az ebuild paranccsal, de ez nem ajánlott - ez a parancs csak fejlesztési célokat szolgál. Ez a cikk az ebuild parancsot fogja használni az ebuild fájllal a fejlesztés során végzett teszteléshez, de máskülönben Ön mindenképpen az emerge parancsot használja az ebuild fájlal a szoftvertárolóban.

Hogyan kell ebuild fájlt létrehozni?

Az ebuild fájlok egyszerű szövegfájlok, a legalapvetőbb formájukban. Csak egy szövegszerkesztő program kell az ebuild írásának megkezdéséhez, amely aztán telepíthető szoftvercsomagokat biztosít a Gentoo számára.

Note
Ebben a szakaszban a {CATEGORY}, {PN}, és {P} a csomagkategóriát, a csomag nevét, valamint a csomag nevét és verzióját jelentik, és az ebuild által használt szabványos változók. Ezek a változók együttesen egy verzióleírót (verzió specifikátort) jelenthetnek.

Néhány szövegszerkesztő opcionális ebuild funkcionalitásokkal rendelkezik, ebben az esetben ugorjon a megfelelő szakaszra. Egyébként egy váz ("sablon") használható a gyorsabb kezdés érdekében.

Kezdje a vázzal

Ha a szövegszerkesztő nem rendelkezik integrált ebuild funkcionalitással az induláshoz, akkor van egy váz ebuild fájl (skel.ebuild), amely a Gentoo ebuild szoftvertárolójában található. Ha ezzel a fájllal kezdi a munkát, akkor egyszerűen csak másolja a megfelelő helyre. (Ebben a példában a nano szövegszerkesztőt használjuk):

user $mkdir --parents /var/db/repos/example_repository/{CATEGORY}/{PN}
user $cp /var/db/repos/gentoo/skel.ebuild /var/db/repos/example_repository/{CATEGORY}/{PN}
user $cd /var/db/repos/example_repository/{CATEGORY}/{PN}
user $nano {P}.ebuild

Vim

Létezik egy vim beépülő modul, amely automatikusan már egy kész vázzal (sablonnal) indul el, amikor üres ebuild fájlt hoz létre.

Az app-vim/gentoo-syntax telepítése után hozza létre a megfelelő könyvtárat az ebuild számára, majd indítsa el a vim szövegszerkesztőt a parancssorban megadott új "{P}.ebuild" fájlnévvel, hogy automatikusan szembetalálkozzon egy alapsablonnal amit módosíthat és el is menthet:

user $mkdir --parents /var/db/repos/example_repository/{CATEGORY}/{PN}
user $cd /var/db/repos/example_repository/{CATEGORY}/{PN}
user $vim {P}.ebuild

Emacs

Hasonló eszköz áll rendelkezésre az Emacs felhasználói számára, amit az app-emacs/ebuild-mode vagy app-xemacs/ebuild-mode biztosít az Emacs disztribúciójától függően.

Nyelvi szerver

Létezik egy nyelvi szerver a gentoo ebuild készítéséhez.

Példán keresztül történő demonstrálás

Ez a példa létrehozza a scrub 2.6.1-es verziójának az ebuild-jét (ha még nem létezett), hogy megmutassa, hogyan zajlik egy tipikus folyamat.

Hozzon létre egy könyvtárat az ebuild elhelyezéséhez a korábban létrehozott ebuild szoftvertárolóban:

user $mkdir -p /var/db/repos/example_repository/app-misc/scrub

Módosítsa a parancssor munkakönyvtárát az új elérési útra:

user $cd /var/db/repos/example_repository/app-misc/scrub
Tip
Néhány parancssor, például a Bash, az előző parancs utolsó paraméterét adják a "$_" változóban. Ez használható az újonnan létrehozott könyvtár meghívására anélkül, hogy megadná az elérési utat a parancssorban, mindaddig, amíg ez a közvetlenül következő parancs.
user $cd $_

Ez a példa a Vim segítségével hozza létre az ebuild fájlt, és egy vázat biztosít az ebuild írásához, de a választott szövegszerkesztőt használja. (Tekintse meg az előző részt az Emacs vagy a sablonfájl használatáról):

user $vim ./scrub-2.6.1.ebuild

Adjon hozzá fontos információkat az új csomagról az ebuild által definiált változók beállításával: DESCRIPTION (leírás), HOMEPAGE (honlap), SRC_URI, LICENSE (licenc). A fában nem található licencek, például a BSD-clause-3 metaadatokban lehetnek leképezve:

FILE scrub-2.6.1.ebuildvim editing a new file from template
# Copyright 1999-2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
 
EAPI=8
 
DESCRIPTION="Some words here"
HOMEPAGE="https://github.com/chaos/scrub"
SRC_URI="https://github.com/chaos/scrub/releases/download/2.6.1/scrub-2.6.1.tar.gz"
 
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE=""
 
DEPEND=""
RDEPEND="${DEPEND}"
BDEPEND=""

Ez — az ="" jelölésű sorok kihagyásával — a minimális információ, amely ahhoz szükséges, hogy valami működőképes legyen. Bizonyos eclass-okat öröklő ebuild-ek más minimális információkészlettel is érkezhetnek, pl. ant-jsch-1.10.9.ebuild. Végül mentse el a fájlt. Íme ennyi egy elkészült ebuild a legalapvetőbb formában. Ez ilyen egyszerű!

Note
A ${PN} változó használata az SRC_URI-ban megengedett, bár ez nem feltétlenül a legjobb gyakorlat. Bár lehet, hogy rövidebb a gépelés, van néhány indoklás, hogy miért ne használja, amit érdemes lehet megfontolni.

CODE avoid using PN as such
SRC_URI="https://github.com/gentoo/${PN}/releases/download/${PV}/${P}.tar.gz"
# Reads better as, e.g.
SRC_URI="https://github.com/gentoo/gentoo/releases/download/${PV}/${P}.tar.gz"

További javaslatokért tekintse meg ezt az ebuild fájlformátum-szabályzati útmutatót.

Tesztelhető az szoftvertárolóba felküldött (upstream) források letöltése és kicsomagolása az új ebuild segítségével, az ebuild paranccsal:

user $GENTOO_MIRRORS="" ebuild ./scrub-2.6.1.ebuild manifest clean unpack
Appending /var/db/repos/customrepo to PORTDIR_OVERLAY...
>>> Downloading 'https://github.com/chaos/scrub/releases/download/2.6.1/scrub-2.6.1.tar.gz'
--2023-03-03 23:35:13--  https://github.com/chaos/scrub/releases/download/2.6.1/scrub-2.6.1.tar.gz
Resolving github.com... 140.82.121.4
Connecting to github.com|140.82.121.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/23157201/405a65b8-2d4d-11e4-8f82-3e3a9951b650?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230303%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230303T223513Z&X-Amz-Expires=300&X-Amz-Signature=7d7d925ff8392ee2ba12028c73c8d8c3b3a7086b5aec11bbfae335222a4f2eb0&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=23157201&response-content-disposition=attachment%3B%20filename%3Dscrub-2.6.1.tar.gz&response-content-type=application%2Foctet-stream [following]
--2023-03-03 23:35:13--  https://objects.githubusercontent.com/github-production-release-asset-2e65be/23157201/405a65b8-2d4d-11e4-8f82-3e3a9951b650?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20230303%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230303T223513Z&X-Amz-Expires=300&X-Amz-Signature=7d7d925ff8392ee2ba12028c73c8d8c3b3a7086b5aec11bbfae335222a4f2eb0&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=23157201&response-content-disposition=attachment%3B%20filename%3Dscrub-2.6.1.tar.gz&response-content-type=application%2Foctet-stream
Resolving objects.githubusercontent.com... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 362536 (354K) [application/octet-stream]
Saving to: '/var/cache/distfiles/scrub-2.6.1.tar.gz.__download__'
 
/var/cache/distfiles/scrub-2.6.1. 100%[============================================================>] 354.04K  --.-KB/s    in 0.08s   
 
2023-03-03 23:35:13 (4.31 MB/s) - '/var/cache/distfiles/scrub-2.6.1.tar.gz.__download__' saved [362536/362536]
 
 * scrub-2.6.1.tar.gz BLAKE2B SHA512 size ;-) ...                                                                               [ ok ]
>>> Unpacking source...
>>> Unpacking scrub-2.6.1.tar.gz to /var/tmp/portage/app-misc/scrub-2.6.1/work
>>> Source unpacked in /var/tmp/portage/app-misc/scrub-2.6.1/work

Ennek le kell töltenie és ki kell csomagolnia a forrás tarball-t, hiba nélkül, mint ahogy a példa kimenetében is látható.

Egyes kivételesen egyszerű csomagok esetében, mint ez, amelyek nem igényelnek javítást vagy egyéb fejlettebb kezelést, az ebuild így működhet – további módosítások nélkül.

A legjobb gyakorlat érdekében a tesztcsomag ebben a szakaszban futtatható – ez különösen igaz az induláskor:

root #ebuild scrub-2.6.1.ebuild clean test install

Az új ebuild ténylegesen, a rendszerre történő telepítéséhez futtassa:

root #ebuild scrub-2.6.1.ebuild clean install merge

Szoftvertárolóba felküldött (upstream) forráskód javítása egy ebuild-ben

A kicsomagolt forráskódból javítást lehet létrehozni a javítás létrehozása cikkben leírtak szerint. A javításokat ezután a files könyvtárába kell helyezni, és egy patch nevű tömbben kell felsorolni a devmanual leírása szerint:

CODE Patches will be applied during src_prepare
PATCHES=(
	"${FILESDIR}"/${P}-foo.patch
	"${FILESDIR}"/${P}-bar.patch
)
 
src_prepare() {
    default
    ...
}

QA tesztelés

Használja a pkgcheck parancsot (dev-util/pkgcheck) az ebuild QA hibáinak ellenőrzéséhez:

user $pkgcheck scan

További olvasnivaló a témában

Külső források