Muokataan sivua Ebuild

Siirry navigaatioon Siirry hakuun
Varoitus: Et ole kirjautunut sisään. IP-osoitteesi näkyy julkisesti kaikille, jos muokkaat. Jos kirjaudut sisään tai luot tunnuksen, muokkauksesi yhdistetään käyttäjänimeesi ja saat paremman käyttökokemuksen.

Kumoaminen voidaan suorittaa. Varmista alla olevasta vertailusta, että haluat saada aikaan tämän lopputuloksen, ja sen jälkeen julkaise alla näkyvät muutokset.

Nykyinen versio Oma tekstisi
Rivi 1: Rivi 1:
{{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}
{{Ohjelma | nimi=ebuild  | kuva= | kuvateksti=  | lisenssi=[[GPL]]| käyttöliittymä=ei | kotisivu=[http://gentoo.org gentoo.org] }}
{{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 sekä 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 ja 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 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.
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.


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


  #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ä ohjelman lähdekoodi haetaan
  #mistä ohjelma 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 dynaaminen kirjastolinkkaus voi hajota vain näihin.
  #tyypillisesti vain näihin voi dynaaminen kirjastolinkkaus hajota.
  RDEPEND="dev-libs/hyödyllinen-kirjasto"
  RDEPEND="dev-libs/hyödyllinen-kirjasto"


====Paketinnimi-muuttujat====
===funktiot===
Kokonaisuudelle, jonka ebuildin nimi on kategoria/paketti-1.0-r1.ebuild muuttujat ovat
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.  


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


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ä.
===muut ebuildin ominaisuudet===
 
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]]
Wikin materiaali on kaikkien vapaasti käytettävissä Creative Commons 3.0 - nimi mainittava -lisenssin alaisuudessa. TEKIJÄNOIKEUDEN ALAISEN MATERIAALIN KÄYTTÄMINEN ILMAN LUPAA ON EHDOTTOMASTI KIELLETTYÄ!

Muokataksesi tätä sivua vastaa alla olevaan kysymykseen (lisätietoja):

Peruuta Muokkausohjeet (avautuu uuteen ikkunaan)

Tällä sivulla käytetty malline:

Tämä sivu kuuluu seuraavaan piilotettuun luokkaan:

Noudettu kohteesta ”https://www.linux.fi/wiki/Ebuild