ebuild

Linux.fista


ebuild
Käyttöliittymä ei
Lisenssi GPL
Kotisivu gentoo.org

ebuild on kieli jolla kuvaillaan, miten paketteja asennetaan sekä ohjelma, joka toteuttaa kyseisen kielen. Ebuild on käytössä erityisesti Gentoo-jakelussa paketinhallintajärjestelmän osana.

Kieli[muokkaa]

ebuild epäilemättä on kielenä monipuolinen, jopa tietyllä tapaa täydellinen. On kuitenkin tärkeää muistaa noudattaa oikeita käytäntöjä tehtäessä paketteja Gentoo-järjestelmään. Esimerkiksi valmiiseen järjestelmään kirjoittaminen useimmissa funktioissa on huonoa tyyliä, ja aiheuttaakin tyypillisesti esimerkiksi portagessa sandbox-loukkauksen.

Muuttujat[muokkaa]

Seuraavien tyypillisesti ebuildin alussa määriteltävien muuttujien määrittely on suositeltavaa:

#kuvaus
DESCRIPTION="tässä kerrot mitä ohjelma tekee"
#ohjelman kotisivu
HOMEPAGE="http://hyodyllinen.ohjelma.org"
#mistä ohjelman lähdekoodi haetaan
SRC_URI="ftp://hyodyllinen.ohjelma.org/pub/${P}.tar.bz2"
#ohjelman lisenssi
LICENCE="GPL-2"
#kertoo, mihin slottiin ebuild asentuu, Gentoossa samassa slotissa
#ei voi olla kahta samannimistä pakettia
SLOT="0"
#kertoo mihin avainsanoihin ebuild kuuluu
KEYWORDS="x86 -*"
#kertoo mitkä USE-muuttujat vaikuttavat ebuildiin 
IUSE=""

#kertoo mitkä paketit ovat paketin riippuvuuksia
DEPEND="dev-libs/hyodyllinen-kirjasto"
#kertoo ne ebuildit, jotka ovat ebuildin ajonaikaisia riippuvuuksia
#tyypillisesti dynaaminen kirjastolinkkaus voi hajota vain näihin.
RDEPEND="dev-libs/hyödyllinen-kirjasto"

Paketinnimi-muuttujat[muokkaa]

Kokonaisuudelle, jonka ebuildin nimi on kategoria/paketti-1.0-r1.ebuild muuttujat ovat

  • P="paketti-1.0"
  • PN="paketti"
  • PV="1.0"
  • PR="r1"
  • PVR="1.0-r1"
  • PF="paketti-1.0-r1"
  • CATEGORY=kategoria

Näitä on hyvä käyttää SRC_URI:n ja muun tarvittavan kanssa. Mikäli gentoon tai muun jakelun tarjoama versiomuotoilu ei sovi, määrittele vastaavat sopivat muuttujat MY_ -etuliitteellä, esim. MY_P. Älä muuta ebuildin nimeä.

Hakemistomuuttujat[muokkaa]

  • ROOT="/" kertoo, mitä juurta portagen, tai vastaavan, ylläpitämä systeemi käyttää. Älä koske tämän ulkopuolelle, äläkä muuta tätä muuttujaa.
  • WORKDIR="${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/work" kertoo mihin hakemistoon ohjelman SRC_URI-objektit puretaan tai siirretään kääntämistä, tai muuta, varten.
  • FILESDIR="${PORTDIR}/${CATEGORY}/${PN}/files" files-kansio ebuidin hakemistosta tänne voit tallettaa esimerkiksi pienikokoisia patcheja, alle 20 KiB.
  • S="${WORKDIR}/${P}" Tämä kertoo pääasiallisen kansion, jossa työ tehdään oletusasetusta voi muokata tarpeen mukaan, yleensä suhteessa WORKDIR:iin.
  • T="${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/temp" Tilapäishakemisto vapaasti käytettävissä.
  • D="${PORTAGE_TMPDIR}/portage/${CATEGORY}/${PF}/image" Hakemistokuva asennettavasta kokonaisuudesta. Älä muuta.

Riippuvuusmuuttujat[muokkaa]

  • DEPEND Ebuildin riippuvuudet, näiden tulee olla asennettuina, ennen kuin ebuild ajetaan.
  • RDEPEND Ebuildin ajonaikaiset riippuvuudet, esimerkiksi dynaamisesti ladattavat kirjastot.
  • PDEPEND Ebuildin jälkeisriippuvuudet, nämä tulee asentaa ebuildin ajon jälkeen.
  • PROVIDE Kuvailee paketin tarjoaman virtuaalipaketin, älä käytä, jos et tiedä, mitä olet tekemässä.

Dynaamisten riippuvuuksien määrittely seuraavia yhdistelemällä loogisina lausekkeina. riippuvuudet ilmaistaan pitkässä muodossa kategoria/paketti-(versio)

  • <, >, =, >= ja <= nämä kuvaavat, että riippuvuuden version tulee olla kirjatulle versiolle pienempi, suurempi, yhtäsuuri kuin, suurempi tai yhtä suuri kuin tai pienempi tai yhtä suuri kuin.
  • use? riippuvuus on voimassa, mikäli USE-muuttuja use on asetettu. Vastaavasti ei voimassa kun !use?.
  • || tai-operaattori jomman kumman riippuvuuksista täytyy olla täytetty
  • !kategoria/paketti käänteinen riippuvuus. Tämä ei saa olla asennettuna ebuildia asennettaessa.
  • *-jälkiliite, versionumerossa vastaa mitä tahansa merkkijonoa.

Muut muuttujat[muokkaa]

  • RESTRICT, rajoittaa portagen ominaisuuksia listan mukaan, listaerottimena toimii välilyönti
    • binchecks, jätetään binäärien laadunvalvonta suorittamatta.
    • confcache, ei käytetä confcachea
    • fetch, SRC_URI-kohdetta ei yritetä hakea
    • mirror, älä hae SRC_URI-kohdetta gentoon omilta palvelimilta
    • primaryuri, hae ensisijaisesti SRC_URI-kohde suoraan SRC_URI:sta
    • strip, ei poisteta debug-symboleja
    • test, ei ajeta src_test-funktiota
    • userpriv
  • QA-muuttujat Nämä muuttujat vaientavat portagen laadunvalvontavaroituksia. Muuttujien tarkoitus on lähinnä estää varoitukset suljetun lähdekoodin binääreistä, joita ei voida käytännössä korjata.
    • QA_TEXTRELS
    • QA_EXECSTACK
    • QA_WX_LOAD

Funktiot[muokkaa]

ebuild-kielessä on otsikon jälkeen bash-syntaksin mukaisia funktioita, joilla on oma osansa paketin asennuksessa. Mitään näistä funktioista ei ole pakko määritellä. Funktioton ebuild toimiikin tyypillisesti autotools-ohjelmaa varten, jolle ei tarvitse määritellä käännösaikaisia valintoja. src-alkuiset funktiot ajetaan tyypillisesti sandboxin sisällä, eikä niissä saisi kajota muuhun järjestelmään.

pkg_nofetch[muokkaa]

Tätä funktiota kutsutaan, mikäli RESTRICT="fetch" on asetettu ja ebuildin SRC_URI kohdetta ei kyetä noutamaan. pkg_nofetchin jälkeen muita funktioita ei kutsuta vaan siirrytään ohjelman loppuun.

pkg_setup[muokkaa]

Ajetaan tarkistuksia asetusten suhteen.

src_unpack[muokkaa]

Puretaan SRC_URI-objekti $WORKDIR-muuttujan osoittamaan kansioon ja ajetaan eutils.eclassin epatch-funktio patcheille tarpeen mukaan, tar.bz2 ja tar.gz -pakatuille ohjelmille riittää tässä oletusfunktio.

src_compile[muokkaa]

Tässä funktiossa käännetään lähdekoodi tai tehdään muuta vastaavaa.

src_test[muokkaa]

Funktiota kutsutaan src_compilen jälkeen, mikäli FEATURES="test" on määritelty, funktiossa tulee ajaa asennettavan ohjelman tarjoamat yksikkötestaus-rutiinit, oletustoteutuksessa nämä ovat make check ja make test

src_install[muokkaa]

Tässä funktiossa siirretään kokonaisuuden asennettava osa, esim suoritettava binääri, hakemistorakenteeseen, jonka juurena toimii muuttujan $D osoittama hakemisto, esimerkiksi make install DESTDIR=$D

pkg_preinst ja pkg_postinst[muokkaa]

Nämä funktiot ajetaan sandboxin ulkopuolella ennen ja jälkeen $D-kuvan sisällyttämistä varsinaiseen ROOT-muuttujan osoittamaan kohteeseen, tyypillisesti "/".

pkg_prerm ja pkg_postrm[muokkaa]

Vastaavasti kuin edelliset nämä ajetaan ennen ja jälkeen kokonaisuuden sisällön, eli sen, minkä asensit $D:hen, poistamista järjestelmästä.

pkg_config[muokkaa]

Ajetaan viimeiseksi tässä uudistetaan systeemin asetuksia, mikäli se on tarpeen.

Apufunktiot[muokkaa]

Usea tarkkailevat apufunktiot[muokkaa]

USE-muuttujan USE="valinta" suhteen nämä funktiot tekevät seuraavaa

  • useq valinta, Tämä palauttaa tosi, mikäli valinta on määritelty.

Seuraavat ovat lisäksi käteviä autotools-ohjelmien kanssa.

  • use_with valinta [configure-valitsin=valinta] [configure-valitsinasetus], palauttaa --with-configure-valitsin=configure-valitsinasetus tai without, mikäli muuttujaa ei ole määritelty.
  • use_enable valinta [configure-valitsin=valinta] [configure-valitsinasetus], palauttaa

--enable-configure-valitsin=configure-valitsinasetus tai disable, mikäli muuttujaa ei ole määritelty.

Tulostusfunktiot[muokkaa]

  • einfo "viesti", merkityksetön tuloste esimerkiksi asennuksen edistymisestä
  • elog "viesti", tuloste, joka on tarkoitettu huomioitavaksi ja joka tulostetaan myös logeihin
  • ewarn "varoitusviesti", varoitustuloste
  • eerror "virheilmoitus", virhetuloste
  • ebegin "tapahtumailmoitus", tulostaa ilmoituksen tapahtumasta, jonka onnistumisesta voidaan ilmoittaa funktiolla eend.
  • eend <onnistuma> "virheilmoitus" jos onnistuma ei ole 0 tulostetaan virheilmoitus, muuten ilmoitetaan onnistumisesta.

Muut ominaisuudet[muokkaa]

  • Import-lauseella voit sisällyttää ebuildiin .eclass-tiedostoja eclass-hakemistosta
  • '#'-merkillä alkavat rivit sivuutetaan kommentteina samalla tavalla kuin bashissa. Omia muuttujia voidaan määritellä bash-tyylisesti missä tahansa ebuidin kohdassa.

Tyyli[muokkaa]

Tässä tärkeitä asioita tyylistä ebuildien tekemisestä erityisesti gentoolle

  • Käytä muuttujia, erityisesti oletusmuuttujia silloin kuin ne on määritelty. Tämä tekee ebuildeista portattavia - hyvin tehdyn ebuildin kohteen uuden version ebuildin voikin tyypillisesti tehdä vain ebuildin nimeä muuttamalla. Lisäksi esimerkiksi portagen ylläpitämän järjestelmän juuri ei aina ole "/", esimerkiksi osX:ssä, mutta se on aina $ROOT.
  • Käytä apufunktioita silloin kuin sopii.
  • Käytä eclasseja silloin kuin on soveliasta ja tutustu ohjelmakategoriasi ebuildien teon periaatteisiin, mikäli niitä on dokumentoitu.

Ohjelma[muokkaa]

Ebuildia käytetään seuraavasti

ebuild <polku ebuildiin><ohjelma>-<versio>.ebuild <toiminto>

Tässä saatetaan edellyttää, että kohteena oleva ebuild on oikeassa paikassa hakemistopuussa, esimerkiksi PORTDIR_OVERLAY, ja että ohjelman SRC_URI-objekti on saatavilla DISTDIR=${PORTDIR}/distfiles - hakemistossa.

Toiminnot[muokkaa]

Ebuildeja ajavat toiminnot[muokkaa]

Seuraavat ajavat ebuildilleen (lähes)nimikkofunktionsa täsmälleen

  • unpack
  • compile
  • test
  • preinst
  • install
  • postinst
  • qmerge
  • prerm
  • postrm
  • config

Nämä taas ajavat useampia funktioita, jotka riittävät paketin asennukseen(merge) tai poistoon (unmerge)

  • merge, myös hakee kokonaisuuden SRC_URI-objektin
  • unmerge

Muut toiminnot[muokkaa]

  • digest, luo SRC_URI-objektin varmentamiseen vaadittavat kryptografiset tiivisteet. Tiivisteet lasketaan $DISTDIR:ssä olevasta objektista tai haetaan tarvittaessa netistä.
  • manifest, Luo tiivisteet itse ebuildiin liittyvistä tiedostoista.
  • fetch, noutaa SRC_URI:n ja asettaa sen $DISTDIR:iin
  • clean, siistii ebuildin luoman hakemistopuun $PORTAGE_TMPDIR:stä
  • package, luo binääripaketin tar.bz2-muodossa $D:n hakemistopuusta ja asettaa sen PGKDIR="${PORTDIR}/packages"-muuttujan osoittamaan hakemistoon
  • rpm, luo package-toimintoa vastaavasti rpm-paketin, tämä paketti ei välttämättä toimi kuitenkaan kaikissa jakeluissa ja sen ominaisuudet saattavat olla vajavaiset.

Lähdekoodin muokkaus- ja uudelleenasennusesimerkki[muokkaa]

Esimerkki squidin ohjelmakoodin muuttamisesta ja uudelleenasennuksesta. Squid on aiemmin jo asennettu järjestelmään.

 $ sudo su
 # cd /usr/portage/net-proxy/squid
 # ebuild squid-3.4.5.ebuild digest
 # ebuild squid-3.4.5.ebuild fetch
 # ebuild squid-3.4.5.ebuild unpack
 # cd /var/tmp/portage/net-proxy/squid-3.4.5/work/squid-3.4.5/src/
 # $EDITOR <tiedosto> tai aja omat patch-tiedostot
 # cd /usr/portage/net-proxy/squid
 # ebuild squid-3.4.5.ebuild compile
 # ebuild squid-3.4.5.ebuild install
 # ebuild squid-3.4.5.ebuild qmerge


Muuta luettavaa[muokkaa]

Man-sivut[muokkaa]

  • man 1 ebuild ebuild-ohjelman man-sivu
  • man 5 ebuild ebuild-tiedostorakenteen, tai kielen, man-sivu

Lisää man-sivuja aiheesta gentoossa saat

emerge portage-manpages