Compilació amb Devtools
Fitxers de configuració de Devtools
Repositori local
Empaquetar més ràpid
El paquet Devtools es va crear originalment perquè els usuaris de confiança creïn correctament paquets per als dipòsits oficials. Tanmateix, també pot ser utilitzat pels usuaris normals per crear paquets AUR, o fins i tot paquets oficials modificats.
Consulteu aquesta guia per entendre i utilitzar l'AUR en general, inclosa l'obtenció del fitxer PKGBUILD. Aquest document només mostra els passos específics de Devtools, si és el mètode que trieu per compilar un paquet.
Devtools manté una instal·lació neta d'Arch independent, situada a /var/lib/archbuild/<TARGET>/root, que només conté grups de paquets basei base-devel. Si aquesta instal·lació neta no existeix, la crea automàticament. Si existeix, actualitza automàticament tots els paquets que hi ha. Quan s'utilitza Devtools per construir un paquet, comença amb una còpia d'aquesta instal·lació neta, només s'instal·la els paquets necessaris a la còpia, hi copia el codi font, realitza la compilació i l'empaquetament, i només copia el paquet resultant, en idèntica forma a la que es troba als repositoris oficials.
Devtools té avantatges respecte a l'execució makepkgdirecta. Un dels avantatges és que base-develi altres paquets necessaris per compilar, però no executar, el paquet que esteu fent no acabaran mai al vostre sistema principal. Això és menys paquets que cal actualitzar periòdicament i tenir preocupacions. Tot i que és principalment un avantatge per als mantenedors de paquets Arch, aquest procés exposa fàcilment quan a PKGBUILDés incorrecte, com si no s'apunta una dependència que el mantenedor ja té instal·lada al seu sistema principal. També podeu utilitzar una màquina que sigui més ràpida en la construcció de paquets i copiar el paquet resultant a una màquina més lenta que l'executi, sense contaminar la instal·lació de la màquina de construcció.
El principal desavantatge és que l'arrel neta sempre hi és, ocupant uns 800 MB, i normalment hi ha una còpia única ocupant més espai. Tingueu en compte que si /var/lib/archbuild/utilitza Btrfs, la còpia de l'arrel neta comença sent una instantània de Btrfs, de manera que aquests fitxers no ocupen el doble d'espai. L'arrel neta sempre es manté allà per evitar tornar-la a instal·lar cada vegada que es fa un paquet.
Instal·leu Devtools:
# pacman -S devtools
Per crear un paquet, Devtools inclou archbuild, però no l'executeu directament. També inclou enllaços simbòlics de {extra, gnome-unstable, kde-unstable, staging, testing}-x86_64-build. L'enllaç simbòlic que s'està utilitzant per executar-lo serà inspeccionat per archbuild, per determinar quin objectiu voleu que utilitzi. Es pot executar per utilitzar aquests dipòsits inestables/provisions/prova, que poden tenir versions més noves que les que s'han llançat als dipòsits oficials. Per utilitzar els repositoris oficials per a paquets que no són AUR, al directori amb PKGBUILD, per exemple el directori creat per git clone, executeu el següent:
$ extra-x86_64-build
Nota: la resta d'aquesta guia només farà referència a extra-x86_64-build.
Quan s'acabi d'executar-se, els resultats seran els següents:
/var/lib/archbuild/extra-x86_64/root- Un chroot net , que és una instal·lació actualitzada amb només grups de paquets basei base-devel.
/var/lib/archbuild/extra-x86_64/<USERNAME>- Això contindrà un chroot de compilació . Aquesta és una còpia del chroot net amb les dependències necessàries per construir o executar el paquet que s'està construint, així com el seu codi font, els resultats de la compilació i el paquet.
- El directori on us trobeu contindrà el paquet i els fitxers de registre de compilació, així com qualsevol codi font descarregat.
Al final, podeu notar " Checking PKGBUILD" i " Checking <PKGNAME>-<PKGVER>-<PKGREL>-<ARCH>.pkg.tar.xz". Qualsevol línia després d'aquestes s'extreu des de namcap, que busca automàticament problemes com ara PKGBUILDfitxers mal formats , dependències incloses que el paquet sembla que no utilitza, dependències no incloses que el paquet sembla utilitzar i molt més. Els falsos positius solen ser generats per namcap, però és una gran eina per donar coses per investigar. Si el vostre paquet funciona correctament, no és una bona idea avisar el responsable de la namcapsortida, tret que l'hagueu mirat i comprovat que s'ha de fer un canvi.
Podeu utilitzar-lo pacmanper instal·lar el paquet, que instal·larà les dependències necessàries per executar el paquet, sempre que estiguin en repositoris oficials o en un repositori local.
Utilitzeu un dipòsit local com s'explica aquí o instal·leu el fitxer directament:
# pacman -U <PKGNAME>-<PKGVER>-<PKGREL>-<ARCH>.pkg.tar.xz
Si torneu a executar extra-x86_64-build-vos, ara mateix o en qualsevol moment més endavant amb aquest o un altre paquet, actualitzarà el chroot net si cal, suprimirà el chroot de compilació i en farà una còpia nova del chroot net i realitzarà el mateix procés. Si el vostre directori encara té el codi font descarregat de l'última vegada, l'utilitzarà. Si el paquet és un paquet AUR de desenvolupament, traurà nous canvis en lloc de tornar a clonar.
Internament, extra-x86_64-builds'executa makechrootpkg, que crida internament makepkg. Les opcions extra-x86_64-buildinclouen les següents:
-c: Netegeu els chroots, eliminant i recreant tot el /var/lib/archbuild/extra-x86_64/directori, inclòs el seu chroot net i tots els directoris chroot de compilació. Això rarament es necessita, només si el chroot net es corromp, o si Devtools s'actualitza d'una manera que trenca la compatibilitat cap enrere.
-r <dir>: Utilitzeu un directori diferent del /var/lib/archbuild/extra-x86_64/per contenir els chroots.
Qualsevol argument de extra-x86_64-builddesprés --es passa a makechrootpkg, quan l'utilitza internament. Sempre es passen automàticament diversos arguments de extra-x86_64-builda makechrootpkg. Aquests arguments automàtics són -r <value given to extra-x86_64-build -r option if given, /var/lib/archbuild/extra-x86_64 otherwise> -c -n. Diuen makechrootpkgque elimineu el chroot de compilació i que en faci una còpia nova del chroot net i que s'executi namcapal paquet si es construeix amb èxit. Una opció que s'utilitza habitualment a la qual es pot passar makechrootpkgés -l <copy name>. Aquest és el nom del directori per donar a la compilació chroot, en lloc de <USERNAME>, que és útil per mantenir diverses còpies o compilar diversos paquets alhora.
Qualsevol argument de makechrootpkgdesprés --es passa a makepkg, quan internament l'utilitza per construir el paquet. La primera vegada makepkgs'executa per makechrootpkg, es fa amb les seves pròpies opcions no canviables, per descarregar fitxers font, si cal, i realitzar comprovacions d'integritat; per tant, no es pot reenviar res en aquesta carrera. S'executa makepkguna segona vegada per construir el paquet, i sempre passa automàticament makepkgarguments dels --syncdeps --noconfirm --log --holdver --skipintegquals indica makepkgque, dins del chroot de compilació, instal·leu automàticament les dependències que falten necessàries per construir i utilitzar el paquet, no demanar confirmació durant pacman, registrar el procés de compilació al text. fitxers a més de stdout, no actualitzeu el codi font si teniu un sistema de control de versions i no feu comprovacions de verificació del fitxer font.
Podeu encadenar-los mitjançant el següent formulari:
$ extra-x86_64-build <DEVTOOLS-OPTIONS> -- <MAKECHROOTPKG-OPTIONS> -- <MAKEPKG-OPTIONS>
Tingueu en compte que /var/lib/archbuildes pot tractar com si fos un directori temporal. Si teniu diversos discs durs Vultr, val la pena muntar aquí un sistema de fitxers RAID0 (stripe). Si teniu molta memòria RAM, també podeu muntar un sistema de fitxers recolzat per RAM com tmpfs. Un cop construït un paquet, es copia al directori extra-x86_64-builddes del qual heu executat i, si voleu, en aquest moment podeu suprimir /var/lib/archbuild. La següent execució seria més lenta, perquè caldria fer una nova arrel neta. Alternativament, podeu suprimir-lo /var/lib/archbuild/<USERNAME>per recuperar espai addicional del chroot de compilació abans que s'elimini automàticament per la propera execució de Devtools. Per tant, fins i tot si tinguéssiu un sistema de fitxers RAID0 muntat aquí fallat, el màxim que perdrieu seria una compilació en procés.
Hi ha alguns detalls a tenir en compte amb els fitxers de configuració de Devtools. Es troben a /usr/share/devtools/, com ara makepkg-x86_64.confi pacman-extra.conf:
- Per a
/etcfitxers com makepkg.confi pacman.conf, podeu editar-los amb seguretat al seu lloc i, quan s'actualitzi el paquet, no sobreescriurà els vostres canvis. Més aviat desarà els nous fitxers de configuració (si van canviar de la versió anterior) acabant amb .pacnew. No obstant això, els fitxers de configuració de Devtools no estan /usr/share/pensats per ser editats per l'usuari, de manera que quan s'actualitzi Devtools, sobreescriurà completament els vostres canvis a aquests fitxers sense avisar-vos. S'ha proposat i rebutjat un canvi en aquest comportament, perquè això ajuda a garantir que els paquets s'enviïn als dipòsits oficials amb la mateixa configuració de compilació.
- El valor de
MAKEFLAGS, PACKAGER, i {SRC,SRCPKG,PKG,LOG}DESTs'obtenen de /etc/makepkg.confen lloc de /usr/share/devtools/makepkg-x86_64.conf.
Repositori local
Si esteu creant paquets que tenen dependències d'altres paquets que hàgiu construït, heu d'utilitzar un dipòsit local, de manera que quan pacmans'executi dins del chroot de compilació, trobi les dependències.
Per configurar un dipòsit local, consulteu la secció "Repositori local" d' aquesta guia .
Creeu un objectiu personalitzat:
# ln -s archbuild /usr/bin/custom-x86_64-build
# cp /usr/share/devtools/pacman-{extra,custom}.conf
Edita /usr/share/devtools/pacman-custom.confi afegeix el següent al final:
[archLocalRepo]
SigLevel = Optional TrustAll
Server = file:///archLocalRepo
Editeu /etc/pacman.confi afegiu el següent. Això obliga el directori a enllaçar-se muntat al chroot:
CacheDir = /var/cache/pacman/pkg/ /archLocalRepo/
Ara, en comptes d'utilitzar, fes extra-x86_64-buildservir això:
$ custom-x86_64-build
Si sempre voleu utilitzar l'objectiu personalitzat, podeu suprimir el /var/lib/archbuild/extra-x86_64-build/directori si existeix, ja que els chroots estaran ara a /var/lib/archbuild/custom-x86_64-build/.
Empaquetar més ràpid
Tingueu en compte que l'habilitació de l'empaquetament de fils implica l'edició dels /usr/share/devtoolsfitxers de configuració, que no són compatibles oficialment, de manera que haureu de realitzar aquest canvi cada vegada que s'actualitzeu Devtools.
Devtools combina un paquet sencer en un format d'arxiu. Per defecte, .tar.xzutilitza un sol fil per a la xzcompressió.
En sistemes de múltiples CPU, podeu permetre l' xzús de diversos fils editant /usr/share/devtools/makepkg-x86_64.confi canviant la línia següent:
COMPRESSXZ=(xz -c -z -)
Per permetre tants fils com nuclis virtuals tingueu:
COMPRESSXZ=(xz -c -z - --threads=0)
Per permetre l'ús de diversos nuclis virtuals, però no tots, per reduir l'impacte en el rendiment global del sistema, afegiu un número específic:
COMPRESSXZ=(xz -c -z - --threads=21)
Si especifiqueu més fils que el nombre de nuclis virtuals que teniu, disminuirà el rendiment.
Si no us importa que el fitxer del paquet sigui (potencialment molt) més gran, desactiveu la compressió editant /usr/share/devtools/makepkg-x86_64.conf, i canvieu la línia següent:
PKGEXT='.pkg.tar.xz'
Canvieu-lo perquè sembli el següent:
PKGEXT='.pkg.tar'