Kompilere ved hjelp av Devtools
Devtools konfigurasjonsfiler
Lokalt depot
Pakke raskere
Pakken Devtools ble opprinnelig laget for at Trusted Users skulle lage pakker for de offisielle depotene. Imidlertid kan den brukes av vanlige brukere også til å bygge AUR-pakker, eller til og med modifiserte offisielle pakker.
Se denne veiledningen for å forstå og bruke AUR generelt, inkludert innhenting av PKGBUILD. Dette dokumentet viser bare trinnene som er spesifikke for Devtools, hvis det er metoden du velger for å kompilere en pakke.
Devtools opprettholder en egen ren Arch-installasjon, som ligger i /var/lib/archbuild/<TARGET>/root, som kun inneholder pakkegrupper baseog base-devel. Hvis denne rene installasjonen ikke eksisterer, oppretter den den automatisk. Hvis den eksisterer, oppdaterer den automatisk alle pakker i den. Når Devtools brukes til å bygge en pakke, starter den med en kopi av denne rene installasjonen, installerer bare nødvendige pakker i kopien, kopierer kildekoden inn i den, utfører kompileringen og pakkingen i den, og kopierer bare ut den resulterende pakken, i identisk form fra det som finnes i de offisielle depotene.
Det er fordeler med Devtools fremfor å kjøre makepkgdirekte. En fordel er at base-develog andre pakker som er nødvendige for å kompilere, men ikke kjøre, pakken du lager aldri ender opp i hovedsystemet ditt. Det er færre pakker å måtte oppgradere med jevne mellomrom, og ha bekymringer om. Selv om det først og fremst er en fordel for Arch-pakkevedlikeholdere, avslører denne prosessen lett når a PKGBUILDer feil, for eksempel hvis en avhengighet mangler fra å bli oppført som vedlikeholderen tilfeldigvis allerede har installert i hovedsystemet. Du kan også bruke en maskin som er raskere til å bygge pakker, og kopiere den resulterende pakken til en tregere maskin som vil kjøre den, uten å forurense byggemaskinens installasjon.
Den største ulempen er at den rene roten alltid er der, tar omtrent 800 MB, og vanligvis tar en enkelt kopi mer plass. Merk at hvis du /var/lib/archbuild/bruker Btrfs, begynner kopien av den rene roten å være et Btrfs-øyeblikksbilde, så disse filene tar ikke dobbelt så mye plass. Den rene roten holdes alltid der for å unngå å installere den på nytt hver gang en pakke lages.
Installer Devtools:
# pacman -S devtools
For å bygge en pakke inkluderer Devtools archbuild, men du kjører ikke dette direkte. Det inkluderer også symbolkoblinger av {extra, gnome-unstable, kde-unstable, staging, testing}-x86_64-build. Symlinken som brukes til å kjøre, vil bli inspisert av archbuild, for å finne ut hvilket mål du vil at den skal bruke. Det kan kjøres for å bruke disse ustabile/staging/testing-repositoriene, som kan ha nyere versjoner enn de som er utgitt til de offisielle repositoriene. For å bruke de offisielle depotene for ikke-AUR-pakker, i katalogen med PKGBUILD, for eksempel katalogen laget av git clone, kjør følgende:
$ extra-x86_64-build
Merk: Resten av denne veiledningen vil bare referere til extra-x86_64-build.
Etter at den er ferdig å kjøre, vil følgende være resultatene:
/var/lib/archbuild/extra-x86_64/root- En ren chroot , som er en oppdatert installasjon med kun pakkegrupper baseog base-devel.
/var/lib/archbuild/extra-x86_64/<USERNAME>- Dette vil inneholde en build-chroot . Dette er en kopi av den rene chrooten med eventuelle avhengigheter som kreves for å bygge eller kjøre pakken som bygges, så vel som kildekoden, kompileringsresultatene og pakken.
- Katalogen du befinner deg i vil inneholde pakke- og byggeloggfilene, samt eventuell nedlastet kildekode.
På slutten kan du legge merke til " Checking PKGBUILD" og " Checking <PKGNAME>-<PKGVER>-<PKGREL>-<ARCH>.pkg.tar.xz". Eventuelle linjer etter disse sendes ut fra namcap, som automatisk ser etter problemer som misformede PKGBUILDfiler, inkluderte avhengigheter som pakken ikke ser ut til å bruke, avhengigheter som ikke er inkludert som pakken ser ut til å bruke, og mer. Falske positiver genereres ofte av namcap, men er et flott verktøy for å gi ting å undersøke. Hvis pakken din fungerer som den skal, er det ikke en god idé å varsle vedlikeholderen om namcaputdata, med mindre du har sett på den og bekreftet at en endring bør gjøres.
Du kan bruke pacmantil å installere pakken, som vil installere alle avhengigheter som kreves for å kjøre pakken så lenge de er i offisielle depoter eller et lokalt depot.
Bruk enten et lokalt arkiv som forklart her , eller installer filen direkte:
# pacman -U <PKGNAME>-<PKGVER>-<PKGREL>-<ARCH>.pkg.tar.xz
Hvis du skulle kjøre extra-x86_64-buildigjen, akkurat nå, eller når som helst senere med denne eller en annen pakke, vil den oppdatere den rene chrooten om nødvendig, slette build-chrooten og gjøre den til en ny kopi av den rene chrooten, og utføre den samme prosessen. Hvis katalogen din fortsatt har kildekoden lastet ned fra forrige gang, vil den bruke den. Hvis pakken er en utviklingsbasert AUR-pakke, vil den trekke nye endringer i stedet for å klone på nytt.
Internt extra-x86_64-buildkjører makechrootpkg, som kaller internt makepkg. Alternativene for extra-x86_64-buildinkluderer følgende:
-c: Rengjør chrootene ved å fjerne og gjenskape hele /var/lib/archbuild/extra-x86_64/katalogen, inkludert dens rene chroot og alle bygge chroot-kataloger. Dette er sjelden nødvendig, bare hvis den rene chroot blir ødelagt, eller hvis Devtools er oppgradert på en måte som bryter bakoverkompatibiliteten.
-r <dir>: Bruk en annen katalog enn /var/lib/archbuild/extra-x86_64/å inneholde chroots.
Eventuelle argumenter til extra-x86_64-buildetter --sendes til makechrootpkg, når den internt bruker den. Flere argumenter overføres alltid automatisk fra extra-x86_64-buildtil makechrootpkg. Disse automatiske argumentene er -r <value given to extra-x86_64-build -r option if given, /var/lib/archbuild/extra-x86_64 otherwise> -c -n. De ber om makechrootpkgå fjerne bygge-chroot og gjøre den til en ny kopi av den rene chroot, og å kjøre namcappå pakken hvis den bygger. Et ofte brukt alternativ som kan sendes til makechrootpkger -l <copy name>. Dette er katalognavnet for å gi build-chroot, i stedet for <USERNAME>, som er nyttig for å vedlikeholde flere kopier eller kompilere flere pakker samtidig.
Eventuelle argumenter til makechrootpkgetter --sendes til makepkg, når den internt bruker den til å bygge pakken. Den første gangen makepkgkjøres av makechrootpkg, det gjøres med sine egne uforanderlige alternativer, for å laste ned kildefiler, om nødvendig, og utføre integritetskontroller; dermed kan ingenting videresendes på denne kjøringen. Den kjører makepkgen gang til for å bygge pakken, og sender alltid makepkgargumenter --syncdeps --noconfirm --log --holdver --skipintegsom forteller at makepkgman, innenfor bygge-chroot, automatisk installerer manglende avhengigheter som kreves for å bygge og bruke pakken, ikke å be om bekreftelse under pacman, logge byggeprosessen til tekst filer i tillegg til stdout, ikke oppdater kildekoden hvis du er i et versjonskontrollsystem og ikke utfør kildefilbekreftelseskontroller.
Du kan lenke disse sammen ved å bruke følgende skjema:
$ extra-x86_64-build <DEVTOOLS-OPTIONS> -- <MAKECHROOTPKG-OPTIONS> -- <MAKEPKG-OPTIONS>
Merk at det /var/lib/archbuildkan behandles som om det var en midlertidig katalog. Hvis du har flere Vultr-harddisker, er det verdt å montere et RAID0 (stripe) filsystem her. Hvis du har mye RAM, kan du også montere et RAM-støttet filsystem som tmpfs. Etter at en pakke er bygget, blir den kopiert ut i katalogen du løp extra-x86_64-buildfra, og hvis du ville, kan du på dette tidspunktet slette /var/lib/archbuild. Den neste kjøringen vil være tregere, fordi den må lage en ny ren rot. Alternativt kan du slette for /var/lib/archbuild/<USERNAME>å gjenvinne ekstra plass fra build-chroot før den automatisk slettes ved neste kjøring av Devtools. Så selv om du hadde et RAID0-filsystem montert her mislykkes, ville det meste du ville tapt være en kompilering i prosess.
Det er noen få detaljer å merke seg med Devtools konfigurasjonsfiler. De er plassert i /usr/share/devtools/, for eksempel makepkg-x86_64.confog pacman-extra.conf:
- For
/etcfiler som makepkg.confog pacman.conf, kan du trygt redigere dem på plass, og når pakken er oppgradert, vil den ikke overskrive endringene dine. I stedet vil den lagre de nye konfigurasjonsfilene (hvis de endret seg fra forrige versjon) som slutter med .pacnew. Imidlertid er Devtools konfigurasjonsfiler i /usr/share/som ikke er ment å bli brukerredigert, så når Devtools oppgraderes, vil den fullstendig overskrive endringene dine i disse filene uten å varsle deg. En endring av denne oppførselen har blitt foreslått og avvist, fordi dette bidrar til å sikre at pakker sendes til de offisielle depotene, alle med de samme kompileringsinnstillingene.
- Verdien for
MAKEFLAGS, PACKAGER, og {SRC,SRCPKG,PKG,LOG}DESTer hentet fra i /etc/makepkg.confstedet for /usr/share/devtools/makepkg-x86_64.conf.
Lokalt depot
Hvis du bygger pakker som har avhengigheter til andre pakker du har bygget, må du bruke et lokalt depot, slik at når det pacmankjøres i bygge-chrooten, finner det avhengighetene.
For å konfigurere et lokalt depot, se avsnittet "Lokalt depot" i denne veiledningen .
Opprett et tilpasset mål:
# ln -s archbuild /usr/bin/custom-x86_64-build
# cp /usr/share/devtools/pacman-{extra,custom}.conf
Rediger /usr/share/devtools/pacman-custom.confog legg til følgende på slutten:
[archLocalRepo]
SigLevel = Optional TrustAll
Server = file:///archLocalRepo
Rediger /etc/pacman.confog legg til følgende. Dette tvinger katalogen til å binde montert i chrooten:
CacheDir = /var/cache/pacman/pkg/ /archLocalRepo/
Nå, i stedet for å bruke, extra-x86_64-buildbruk dette:
$ custom-x86_64-build
Hvis du alltid vil bruke det tilpassede målet, kan du slette /var/lib/archbuild/extra-x86_64-build/katalogen hvis den eksisterer, da chrootene nå vil være i /var/lib/archbuild/custom-x86_64-build/.
Pakke raskere
Merk at du aktiverer gjenget pakking innebærer å redigere /usr/share/devtoolskonfigurasjonsfilene, som ikke støttes offisielt, så du må utføre denne endringen hver gang Devtools oppgraderes.
Devtools kombinerer en hel pakke til et arkivformat. Som standard .tar.xzbruker den en enkelt tråd for xzkomprimeringen.
På multi CPU-systemer kan du tillate xzå bruke flere tråder ved å redigere /usr/share/devtools/makepkg-x86_64.conf, og endre følgende linje:
COMPRESSXZ=(xz -c -z -)
For å tillate så mange tråder som du har virtuelle kjerner:
COMPRESSXZ=(xz -c -z - --threads=0)
For å tillate bruk av flere virtuelle kjerner, men ikke alle, for å redusere innvirkningen på den generelle systemytelsen, legg til et spesifikt tall:
COMPRESSXZ=(xz -c -z - --threads=21)
Hvis du spesifiserer flere tråder enn antallet virtuelle kjerner du har, reduseres ytelsen.
Hvis du ikke har noe imot at pakkefilen er (potensielt mye) større, deaktiver komprimering ved å redigere /usr/share/devtools/makepkg-x86_64.conf, og endre følgende linje:
PKGEXT='.pkg.tar.xz'
Endre den slik at den ser slik ut:
PKGEXT='.pkg.tar'