Alapvető útmutató a Gentoo Ebuild-ek írásához
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.
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.
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
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.
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
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:
# 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ű!
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.
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:
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
- GitHub Pull Requests — how to contribute to Gentoo by creating pull requests on GitHub.
- java-ebuilder — an experimental package being developed by Gentoo Java developers to generate initial ebuilds from Maven
pom.xml
files. - Notes on ebuilds with GUI
- Project:GURU — an official repository of new Gentoo packages that are maintained collaboratively by Gentoo users
- Project:Proxy_Maintainers/User_Guide/Style_Guide
- Project:Python — the Python project pages have information on creating ebuilds for packages written in Python
- Project:X11/Ebuild_maintenance
- Proxied Maintainer FAQ
- Test environment
- Writing go Ebuilds — a short reference, intended to be read alongside Basic guide to write Gentoo Ebuilds and the go-module.eclass documentation
- Ebuild_guidance_for_ecosystems
Külső források
- Gentoo Policy Guide
- Quickstart Ebuild Guide
- Gentoo Development guide
- Michał Górny: Category: Ebuild writing
- Michał Górny: The ultimate guide to EAPI 7
- Michał Górny: The ultimate guide to EAPI 8
- man 1 ebuild — The ebuild command's man page.
- man 5 ebuild — The ebuild file format man page.
- The skel.ebuild
- Adding new packages via proxy-maint project