Ero sivun ”Ebuild” versioiden välillä

Siirry navigaatioon Siirry hakuun
9 296 merkkiä lisätty ,  31. maaliskuuta 2016
p
{{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}
Ei muokkausyhteenvetoa
p ({{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}})
 
(42 välissä olevaa versiota 11 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
{{Ohjelma | nimi=ebuild  | kuva= | kuvateksti=  | lisenssi=[[GPL]]| käyttöliittymä=ei | kotisivu=[http://gentoo.org gentoo.org] }}
{{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}
{{Ohjelma  
| nimi=ebuild   
| kuva=  
| kuvateksti=   
| lisenssi=[[GPL]]
| käyttöliittymä=ei  
| kotisivu=[http://gentoo.org gentoo.org]  
}}


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


==Kieli==
==Kieli==
ebuild epäilemättä on kielenä monipuolinen jopa Turing-täydellinen. On kuitenkin tärkeää muistaa noudattaa hyviä käytäntöjä tehtäessä paketteja gentoo-järjestelmään. Esimerkiksi valmiin järjestelmään kirjoittaminen useimmissa funktioissa on huonoa tyyliä, ja aiheuttaakin tyypillisesti esimerkiksi portagessa [[sandbox]]-loukkauksen.
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 [[portage |portagessa]] [[sandbox]]-loukkauksen.


===Muuttujat===
===Muuttujat===
Seuraavien muuttujien määrittely on suositeltavaa, ne määritellään tyypillisesti ebuildin alussa
Seuraavien tyypillisesti ebuildin alussa määriteltävien muuttujien määrittely on suositeltavaa:


  #kuvaus
  #kuvaus
  DESCRIPTION="tässä kerrot, mitä ohjelma tekee"
  DESCRIPTION="tässä kerrot mitä ohjelma tekee"
  #ohjelman kotisivu
  #ohjelman kotisivu
  HOMEPAGE="http://hyodyllinen.ohjelma.org"
  HOMEPAGE="http://hyodyllinen.ohjelma.org"
  #mistä ohjelma lähdekoodi haetaan
  #mistä ohjelman lähdekoodi haetaan
  SRC_URI="ftp://hyodyllinen.ohjelma.org/pub/${P}.tar.bz2"
  SRC_URI="ftp://hyodyllinen.ohjelma.org/pub/${P}.tar.bz2"
  #ohjelman lisenssi
  #ohjelman lisenssi
  LICENCE="GPL-2"
  LICENCE="GPL-2"
  #kertoo, mihin slottiin ebuild asentuu, gentoossa samassa slotissa
  #kertoo, mihin slottiin ebuild asentuu, Gentoossa samassa slotissa
  #ei voi olla kahta samannimistä pakettia
  #ei voi olla kahta samannimistä pakettia
  SLOT="0"
  SLOT="0"
  #kertoo, mihin avainsanoihin ebuild kuuluu
  #kertoo mihin avainsanoihin ebuild kuuluu
  KEYWORDS="x86 -*"
  KEYWORDS="x86 -*"
  #kertoo, mitkä USE-muuttujat vaikuttavat ebuildiin  
  #kertoo mitkä USE-muuttujat vaikuttavat ebuildiin  
  IUSE=""
  IUSE=""
   
   
  #kertoo, mitkä paketit ovat paketin riippuvuuksia
  #kertoo mitkä paketit ovat paketin riippuvuuksia
  DEPEND="dev-libs/hyodyllinen-kirjasto"
  DEPEND="dev-libs/hyodyllinen-kirjasto"
  #kertoo ne ebuildit, jotka ovat ebuildin ajonaikaisia riippuvuuksia
  #kertoo ne ebuildit, jotka ovat ebuildin ajonaikaisia riippuvuuksia
  #tyypillisesti vain näihin voi dynaaminen kirjastolinkkaus hajota.
  #tyypillisesti dynaaminen kirjastolinkkaus voi hajota vain näihin.
  RDEPEND="dev-libs/hyödyllinen-kirjasto"
  RDEPEND="dev-libs/hyödyllinen-kirjasto"


===funktiot===
====Paketinnimi-muuttujat====
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ä. Tyypillisesti funktioton ebuildi toimiikin [[autotools]]-ohjelmalle, jolle ei tarvitse määritellä käännösaikaisia valintoja.  
Kokonaisuudelle, jonka ebuildin nimi on kategoria/paketti-1.0-r1.ebuild muuttujat ovat


pkg_nofetch
*P="paketti-1.0"
pkg_setup
*PN="paketti"
src_unpack
*PV="1.0"
src_compile
*PR="r1" 
src_test
*PVR="1.0-r1"
src_install
*PF="paketti-1.0-r1"
pkg_preinst
*CATEGORY=kategoria
pkg_postinst
pkg_prerm
pkg_postrm
pkg_config


===muut ebuildin ominaisuudet===
Näitä on hyvä käyttää SRC_URI:n ja muun tarvittavan kanssa. Mikäli [[gentoo|gentoon]] tai muun [[jakelu|jakelun]] tarjoama versiomuotoilu ei sovi, määrittele vastaavat sopivat muuttujat MY_ -etuliitteellä, esim. MY_P. Älä muuta ebuildin nimeä.
Import-lauseella voit sisällyttää ebuildiin .eclass-tiedostoja eclass-hakemistosta
 
====Hakemistomuuttujat====
*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====
*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====
*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===
ebuild-kielessä on otsikon jälkeen [[Bash-skriptaus|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 [[sandbox|sandboxin]] sisällä, eikä niissä saisi kajota muuhun järjestelmään.
 
====pkg_nofetch====
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====
Ajetaan tarkistuksia asetusten suhteen.
====src_unpack====
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====
Tässä funktiossa käännetään lähdekoodi tai tehdään muuta vastaavaa.
 
====src_test====
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 <tt>make check</tt> ja <tt>make test</tt>
 
====src_install====
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====
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====
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====
Ajetaan viimeiseksi tässä uudistetaan systeemin asetuksia, mikäli se on tarpeen.
 
===Apufunktiot===
 
====Usea tarkkailevat apufunktiot====
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  <tt>--with-configure-valitsin=configure-valitsinasetus</tt> tai without, mikäli muuttujaa ei ole määritelty.
*use_enable valinta [configure-valitsin=valinta] [configure-valitsinasetus], palauttaa
<tt>--enable-configure-valitsin=configure-valitsinasetus</tt> tai disable, mikäli muuttujaa ei ole määritelty.
 
====Tulostusfunktiot====
*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===
*Import-lauseella voit sisällyttää ebuildiin .eclass-tiedostoja eclass-hakemistosta  
*'#'-merkillä alkavat rivit sivuutetaan kommentteina samalla tavalla kuin [[bash]]issa. Omia muuttujia voidaan määritellä bash-tyylisesti missä tahansa ebuidin kohdassa.
 
===Tyyli===
Tässä tärkeitä asioita tyylistä ebuildien tekemisestä erityisesti [[gentoo|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==
==Ohjelma==
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===
====Ebuildeja ajavat toiminnot====
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====
*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|rpm-paketin]], tämä paketti ei välttämättä toimi kuitenkaan kaikissa [[jakelu|jakeluissa]] ja sen ominaisuudet saattavat olla vajavaiset.
==Lähdekoodin muokkaus- ja uudelleenasennusesimerkki==
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==
*[[portage]]
*[[emerge]]
*[[eclass]]
===Man-sivut===
*<tt>[[man]] 1 ebuild</tt> ebuild-ohjelman man-sivu
*<tt>[[man]] 5 ebuild</tt> ebuild-tiedostorakenteen, tai kielen, man-sivu
Lisää man-sivuja aiheesta [[gentoo|gentoossa]] saat
[[emerge]] portage-manpages
*<tt>[[man]] eutils.[[eclass]]</tt> ...
[[Luokka:Paketinhallinta]]
[[Luokka:Gentoo]]
10 147

muokkausta

Navigointivalikko