PKGBUILD(5) Manual do pacman PKGBUILD(5) NOME PKGBUILD - Arquivo de descricao de compilacao de pacotes do Arch Linux SINOPSE PKGBUILD DESCRICAO Esta pagina do manual descreve as regras gerais sobre PKGBUILDs. Uma vez que um PKGBUILD e escrito, o pacote real e compilado usando makepkg e instalado com pacman. Nota Um exemplo de PKGBUILD, util para referencia, esta localizado em /usr/share/pacman junto com outros arquivos de exemplo, como um script de instalacao. Voce pode copiar o arquivo PKGBUILD.proto fornecido para um novo diretorio de compilacao de pacote e fazer personalizacoes para atender as suas necessidades. OPCOES E DIRETIVAS A seguir esta uma lista de opcoes e diretivas padrao disponiveis para uso em um PKGBUILD. Todos eles sao compreendidos e interpretados pelo makepkg, e a maioria deles sera transferida diretamente para o pacote compilado. Os campos obrigatorios para um PKGBUILD minimamente funcional sao pkgname, pkgver, pkgrel e arch. Se voce precisar criar qualquer variavel personalizada para uso em seu processo de compilacao, e recomendado prefixar seu nome com um _ (sublinhado). Isso evitara qualquer conflito de nome possivel com variaveis internas do makepkg. Por exemplo, para armazenar a versao base do kernel em uma variavel, use algo semelhante a $_basekernver. pkgname (array) O nome do pacote ou um array de nomes para pacotes divididos. Os caracteres validos para membros deste array sao alfanumericos e qualquer um dos seguintes caracteres: "@ . _ + -". Alem disso, os nomes nao podem comecar com hifenes ou pontos. pkgver A versao do software conforme lancada pelo autor (por exemplo, 2.7.1). A variavel nao pode conter dois pontos, barras, hifenes ou espacos em branco. A variavel pkgver pode ser atualizada automaticamente fornecendo uma funcao pkgver() no PKGBUILD que produz a nova versao do pacote. Isso e executado apos o download e a extracao de fontes e a execucao da funcao prepare() (se houver), para que possa usar esses arquivos para determinar o novo pacote. Isso e mais util quando usado com fontes de sistemas de controle de versao (veja abaixo). pkgrel Este e o numero de lancamento especifico para a distribuicao. Isso permite que os mantenedores do pacote facam atualizacoes nos sinalizadores de configuracao do pacote, por exemplo. Isso normalmente e definido como 1 para cada nova versao de software upstream e incrementado para atualizacoes intermediarias de PKGBUILD. A variavel e positiva inteiro, com um nivel de sub-lancamento opcional especificado pela adicao de outro inteiro positivo separado por um ponto (ou seja, na forma x.y). epoch Usado para forcar o pacote a ser visto como mais novo do que qualquer versao anterior com uma epoca inferior, mesmo se o numero da versao normalmente nao acionaria tal atualizacao. Este valor deve ser um numero inteiro positivo; o valor padrao se nao for especificado e 0. Isso e util quando o esquema de numeracao de versao de um pacote muda (ou e alfanumerico), quebrando a logica de comparacao de versao normal. Veja pacman(8) para mais informacoes sobre comparacoes de versao. pkgdesc Esta deve ser uma breve descricao do pacote e sua funcionalidade. Tente manter a descricao em uma linha de texto e nao usar o nome do pacote. url Este campo contem uma URL que esta associado ao software sendo empacotado. Normalmente e o site do projeto . license (array) Este campo especifica a(s) licenca(s) que se aplicam ao pacote. As licencas comumente usadas podem ser encontradas em /usr/share/licences/common. Se voce vir a licenca do pacote la, simplesmente faca referencia a ela no campo de licenca (por exemplo, license=('GPL')). Se o pacote fornece uma licenca nao disponivel em /usr/share/licences/common, entao voce deve inclui-lo no proprio pacote e definir license=('custom') ou license=('custom:NomeLicenca'). A licenca deve ser colocada em $pkgdir/usr/share/licenses/$pkgname/ ao compilar o pacote. Se varias licencas forem aplicaveis, liste todas elas: license=('GPL' 'FDL'). install Especifica um script de instalacao especial que deve ser incluido no pacote. Este arquivo deve residir no mesmo diretorio que o PKGBUILD e sera copiado para o pacote por makepkg. Nao precisa ser incluido no array de fontes (por exemplo, install=$pkgname.install). changelog Especifica um arquivo changelog que deve ser incluido no pacote. O arquivo changelog deve terminar com uma unica nova linha. Este arquivo deve residir no mesmo diretorio que o PKGBUILD e sera copiado para o pacote pelo makepkg. Nao precisa ser incluido no array de fontes (por exemplo, changelog=$pkgname.changelog). source (array) Um array de arquivos fonte necessarios para compilar o pacote. Os arquivos fonte devem residir no mesmo diretorio que o PKGBUILD ou ser uma URL totalmente qualificada que o makepkg pode usar para baixar o arquivo. Para simplificar a manutencao de PKGBUILDs, use as variaveis $pkgname e $pkgver ao especificar o local do download, se possivel. Os arquivos compactados serao extraidos automaticamente, a menos que sejam encontrados no array noextract descrito abaixo. Fontes adicionais especificas da arquitetura podem ser adicionadas anexando um sublinhado e o nome da arquitetura, como, por exemplo, source_x86_64=(). Deve haver uma array de integridade correspondente com somas de verificacao, por exemplo, cksums_x86_64=(). Tambem e possivel alterar o nome do arquivo baixado, o que e util com URLs estranhas e para lidar com varios arquivos fonte com o mesmo nome. A sintaxe e: source=('nomedoarquivo::url'). makepkg tambem oferece suporte a compilacao de versoes de desenvolvimento de pacotes usando fontes baixadas de sistemas de controle de versao (VCS). Para obter mais informacoes, consulte Usando fontes VCS abaixo. Os arquivos no array fonte com extensoes .sig, .sign ou .asc sao reconhecidos pelo makepkg como assinaturas PGP e serao usados automaticamente para verificar a integridade do arquivo fonte correspondente. validpgpkeys (array) Um array de impressoes digitais PGP. Se este array nao estiver vazio, makepkg so aceitara assinaturas das chaves listadas aqui e ira ignorar os valores de confianca do chaveiro. Se o arquivo fonte foi assinado com uma subchave, makepkg ainda usara a chave primaria para comparacao. Somente impressoes digitais completas sao aceitas. Elas devem estar em maiusculas e nao devem conter caracteres de espaco em branco. noextract (array) Um array de nomes de arquivos correspondentes aos do array fonte. Os arquivos listados aqui nao serao extraidos com o restante dos arquivos fonte. Isso e util para pacotes que usam dados compactados diretamente. cksums (array) Este array contem somas de verificacao CRC para cada arquivo fonte especificado no array de fontes (na mesma ordem). makepkg usara isso para verificar a integridade do arquivo fonte durante as compilacoes subsequentes. Se SKIP for colocado no array no lugar de um hash normal, a verificacao de integridade desse arquivo fonte sera ignorada. Para gerar facilmente cksums, execute "makepkg -g >> PKGBUILD". Se desejar, mova a linha ck5sums para um local apropriado. Note que somas de verificacao gerados por "makepkg -g" devem ser verificados usando valores de soma de verificacao fornecido pelo desenvolvedor do software. md5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays) Verificacoes de integridade alternativas aceitas pelo makepkg; todos elas se comportam de forma semelhante a opcao cksums descrita acima. Para habilitar o uso e geracao dessas somas de verificacao, certifique-se de configurar a opcao INTEGRITY_CHECK em makepkg.conf(5). groups (array) Um array de nomes simbolicos que representam grupos de pacotes, permitindo que voce instale varios pacotes solicitando um unico destino. Por exemplo, pode-se instalar todos os pacotes do KDE instalando o grupo kde. arch (array) Define em quais arquiteturas o pacote fornecido esta disponivel (por exemplo, arch=('i686' 'x86_64')). Pacotes que nao contem arquivos especificos de arquitetura deve usar arch=('any'). Os caracteres validos para membros desta matriz sao alfanumericos e "_". backup (array) Um array de nomes de arquivo, sem barras no inicio, cujo backup deve ser feito se o pacote for removido ou atualizado. Isso e comumente usado para pacotes que colocam arquivos de configuracao em /etc. Veja "Manipulacao de Arquivos de Configuracao" em pacman(8) para mais informacoes. depends (array) Um array de pacotes dos quais este pacote depende para executar. As entradas nesta lista devem ser colocadas entre aspas simples e conter pelo menos o nome do pacote. As inscricoes tambem podem incluir um requisito de versao no formato nome<>versao, onde <> e uma das cinco comparacoes: >= (maior ou igual a), <= (menor ou igual a), = (igual a), > (maior que) ou < (menor que). Se o nome da dependencia parece ser uma biblioteca (termina com .so), makepkg tentara encontrar um binario que dependa da biblioteca no pacote compilado e anexara a versao necessaria para o binario. Anexar voce mesmo a versao desativa a deteccao automatica. Dependencias especificas da arquitetura adicionais podem ser adicionadas anexando um sublinhado e o nome da arquitetura, por exemplo, depends_x86_64=(). makedepends (array) Um array de pacotes dos quais este pacote depende para compilar, mas nao sao necessarios em tempo de execucao. Os pacotes nesta lista seguem o mesmo formato que o array depends. Outros makedepends especificos de arquitetura podem ser adicionados anexando um sublinhado e o nome da arquitetura, por exemplo, makedepends_x86_64=(). checkdepends (array) Um array de pacotes dos quais este pacote depende para executar seu conjunto de testes, mas nao sao necessarios em tempo de execucao. Os pacotes nesta lista seguem o mesmo formato que depends. Essas dependencias sao consideradas apenas quando a funcao check() esta presente e deve ser executada por makepkg. Outros checkdepends especificos da arquitetura podem ser adicionados anexando um sublinhado e o nome da arquitetura, por exemplo, checkdepends_x86_64=(). optdepends (array) Um array de pacotes (e os motivos que os acompanham) que nao sao essenciais para a funcionalidade basica, mas podem ser necessarios para fazer uso completo do conteudo deste pacote. optdepends sao atualmente apenas para fins informativos e nao sao utilizados pelo pacman durante a resolucao de dependencia. Os pacotes nesta lista seguem o mesmo formato que depende, com uma descricao opcional anexada. O formato para especificar as descricoes optdepends e: optdepends=('python: for library bindings') Opcoes adicionais especificas da arquitetura podem ser adicionadas anexando um sublinhado e o nome da arquitetura, por exemplo, optdepends_x86_64=(). conflicts (array) Um array de pacotes que entrarao em conflito com este pacote (ou seja, eles nao podem ser instalados ao mesmo tempo). Esta diretiva segue o mesmo formato que depends. Conflitos versionados sao suportados usando os operadores conforme descrito em depends. Conflitos especificos de arquitetura adicionais podem ser adicionados anexando um sublinhado e o nome da arquitetura, por exemplo, conflicts_x86_64=(). provides (array) Um array de "provisoes virtuais" que este pacote oferece. Isso permite que um pacote forneca dependencias diferentes de seu proprio nome de pacote. Por exemplo, o pacote dcron pode fornecer cron, que permite que os pacotes dependam do cron em vez de dcron OU fcron. Provisoes versionadas tambem sao possiveis, no formato nome=versao. Por exemplo, dcron pode fornecer cron=2.0 para satisfazer a dependencia cron>=2.0 de outros pacotes. As disposicoes que envolvem os operadores > e < sao invalidas, pois apenas versoes especificas de um pacote podem ser fornecidas. Se o nome da provisao parecer uma biblioteca (termina com .so), makepkg tentara encontrar a biblioteca no pacote compilado e anexar a versao correta. Anexar voce mesmo a versao desativa a deteccao automatica. Provisoes especificas de arquitetura adicionais podem ser adicionadas anexando um sublinhado e o nome da arquitetura, por exemplo, provides_x86_64=(). replaces (array) Um array de pacotes que este pacote deve substituir. Isso pode ser usado para lidar com pacotes renomeados/combinados. Por exemplo, se o pacote j2re for renomeado para jre, esta diretiva permite que atualizacoes futuras continuem conforme o esperado, mesmo que o pacote tenha sido movido. Ha suporte a substituicoes versionadas ao usar os operadores conforme descrito em depends. O sysupgrade e atualmente a unica operacao pacman que utiliza este campo. Uma sincronizacao ou atualizacao normal nao usara seu valor. Substituicoes especificas de arquitetura adicionais podem ser adicionadas anexando um sublinhado e o nome da arquitetura, por exemplo, replaces_x86_64=(). options (array) Este array permite que voce substitua alguns dos comportamentos padrao do makepkg ao compilar pacotes. Para definir uma opcao, apenas inclua o nome da opcao na array de opcoes. Para reverter o comportamento padrao, coloque um "!" na frente da opcao. Especifique apenas as opcoes que deseja substituir, o resto sera obtido de makepkg.conf(5). NOTA: force e uma opcao agora removida em favor da variavel de nivel superior epoch. strip Retira simbolos de binarios e bibliotecas. Se voce usa frequentemente um depurador em programas ou bibliotecas, pode ser util desabilitar esta opcao. docs Armazena diretorios de documentacao. Se voce deseja excluir diretorios doc, especifique !docs no array. libtool Deixa arquivos libtool (.la) nos pacotes. Especifique !libtool para remove-los. staticlibs Deixa os arquivos de biblioteca estatica (.a) nos pacotes. Especifique !staticlibs para remove-los (se eles tiverem uma contraparte compartilhada). emptydirs Deixa diretorios vazios nos pacotes. zipman Comprime paginas man e info com gzip. ccache Permite o uso de ccache durante o build(). Mais util em sua forma negativa !ccache com pacotes selecionados que tem problemas de compilacao com ccache. distcc Permite o uso de distcc durante o build(). Mais util em sua forma negativa !distcc com pacotes selecionados que tem problemas de compilacao com distcc. buildflags Permite o uso de buildflags especificos do usuario (CPPFLAGS, CFLAGS, CXXFLAGS, LDFLAGS) durante o build() conforme especificado no makepkg.conf(5). Mais util em sua forma negativa !buildflags com pacotes selecionados que tem problemas de compilacao com buildflags personalizados. makeflags Permite o uso de makeflags especificos do usuario durante o build() conforme especificado no makepkg.conf(5). Mais util em sua forma negativa !makeflags com pacotes selecionados que tem problemas para compilar com makeflags personalizados como -j2 (ou superior). debug Adiciona os sinalizadores de depuracao especificados pelo usuario (DEBUG_CFLAGS, DEBUG_CXXFLAGS) aos seus buildflags correspondentes, conforme especificado em makepkg.conf(5). Quando usado em combinacao com a opcao `strip', um pacote separado contendo os simbolos de depuracao e criado. lto Habilita compilacao de pacotes usando otimizacao em tempo de vinculacao (link time optimization). Adiciona -flto a CFLAGS e CXXFLAGS. FUNCOES DE EMPACOTAMENTO Alem das diretivas acima, PKGBUILDs exigem um conjunto de funcoes que fornecem instrucoes para compilar e instalar o pacote. No minimo, o PKGBUILD deve conter uma funcao package() que instala todos os arquivos do pacote no diretorio de empacotamento, com funcoes opcionais prepare(), build() e check() sendo usadas para criar esses arquivos a partir do codigo-fonte. Ele e obtido e executado diretamente pelo makepkg, portanto, qualquer coisa que o Bash ou o sistema tenha disponivel esta disponivel para uso aqui. Certifique-se de que quaisquer comandos exoticos usados sejam cobertos pelo array makedepends. Se voce criar qualquer variavel propria em qualquer uma dessas funcoes, e recomendavel usar a palavra-chave local do Bash para definir o escopo da variavel dentro da funcao. Funcao package() A funcao package() e usada para instalar arquivos no diretorio que se tornara o diretorio raiz do pacote compilado e e executada apos todas as funcoes opcionais listadas abaixo. O estagio de empacotamento e executado usando fakeroot para garantir as permissoes de arquivo corretas no pacote resultante. Todas as outras funcoes serao executadas como o usuario chamando makepkg. Funcao prepare() Uma funcao opcional prepare() pode ser especificada na qual operacoes para preparar fontes para compilacao, como aplicacao de patches, sao realizadas. Esta funcao e executada apos a extracao de fonte e antes da funcao build(). A funcao prepare() e ignorada quando a extracao de fonte e ignorada. Funcao build() A funcao opcional build() e usada para compilar e/ou ajustar os arquivos fontes na preparacao para serem instalados pela funcao package(). Funcao check() Uma funcao opcional check() pode ser especificada na qual um conjunto de testes do pacote pode ser executado. Esta funcao e executada entre as funcoes build() e package(). Certifique-se de que todos os comandos exoticos usados sejam cobertos pelo array checkdepends. Todas as variaveis acima, como $pkgname e $pkgver, estao disponiveis para uso nas funcoes de empacotamento. Alem disso, makepkg define as seguintes variaveis: srcdir Contem o diretorio onde makepkg extrai, ou copia, todos os arquivos fonte. Todas as funcoes de empacotamento definidas acima sao executadas a partir de $srcdir pkgdir Contem o diretorio onde makepkg empacota o pacote instalado. Este diretorio se tornara o diretorio raiz do seu pacote compilado. Esta variavel deve ser usada apenas na funcao package(). startdir Contem o caminho absoluto para o diretorio onde o PKGBUILD esta localizado, que normalmente e a saida de $(pwd) quando o makepkg e iniciado. O uso desta variavel foi descontinuado e fortemente desencorajado. DIVISAO DE PACOTES makepkg oferece suporte a compilacao de multiplos pacotes de um unico PKGBUILD. Isso e obtido atribuindo um array de nomes de pacotes a diretiva pkgname. Cada pacote dividido usa uma funcao de empacotamento correspondente com o nome package_foo(), onde foo e o nome do pacote dividido. Todas as opcoes e diretivas para os pacotes divididos sao padronizados para os valores globais fornecidos no PKGBUILD. No entanto, os seguintes podem ser substituidos dentro da funcao de empacotamento de cada pacote dividido: pkgdesc, arch, url, license, groups, depends, optdepends, provides, conflicts, replaces, backup, options, install e changelog. Note que makepkg nao considera as dependencias de um pacote dividido especifico ao verificar se as dependencias estao instaladas antes da compilacao do pacote e com --syncdeps. Todos os pacotes necessarios para compilar o pacote devem ser especificados nos arrays globais depends e makedepends. Uma diretiva global opcional esta disponivel ao compilar um pacote dividido: pkgbase O nome usado para se referir ao grupo de pacotes na saida do makepkg e na nomenclatura de tarballs apenas com o codigo-fonte. Se nao for especificado, o primeiro elemento no array pkgname e usado. Os caracteres validos para esta variavel sao alfanumericos e qualquer um dos seguintes caracteres: "@ . _ + -". Alem disso, a variavel nao pode comecar com hifenes ou pontos. SCRIPT DE INSTALACAO/ATUALIZACAO/REMOCAO Pacman tem a capacidade de armazenar e executar um script especifico do pacote ao instalar, remover ou atualizar um pacote. Isso permite que um pacote se configure apos a instalacao e execute uma acao oposta na remocao. A hora exata em que o script e executado varia com cada operacao e deve ser autoexplicativa. Observe que durante uma operacao de atualizacao, nenhuma das funcoes de instalacao ou remocao sera chamada. Os scripts sao passados por uma ou duas "strings de versao completa", onde uma string de versao completa e pkgver-pkgrel ou epoch:pkgver-pkgrel, se epoch for diferente de zero. pre_install Executa imediatamente antes dos arquivos serem extraidos. Um argumento e passado: string de versao completa do pacote novo. post_install Executa imediatamente apos os arquivos serem extraidos. Um argumento e passado: string de versao completa do pacote novo. pre_upgrade Executa imediatamente antes dos arquivos serem extraidos. Dois argumentos sao passados nesta ordem: string da versao completa do pacote novo, string da versao completa do pacote antigo. post_upgrade Executa apos os arquivos serem extraidos. Dois argumentos sao passados nesta ordem: string da versao completa do pacote novo, string da versao completa do pacote antigo. pre_remove Executa imediatamente antes dos arquivos serem removidos. Um argumento e passado: string de versao completa do pacote antigo. post_remove Executa logo apos os arquivos serem removidos. Um argumento e passado: string de versao completa do pacote antigo. Para usar esse recurso, crie um arquivo como pkgname.install e coloque-o no mesmo diretorio do script PKGBUILD. Em seguida, use a diretiva de instalacao: install=pkgname.install O script de instalacao nao precisa ser especificado no array de fontes. Um arquivo de instalacao de modelo esta disponivel em /usr/share/pacman como proto.install para referencia com todas as funcoes disponiveis definidas. USANDO FONTES VCS A compilacao de uma versao de desenvolvimento de um pacote usando fontes de um sistema de controle de versao (VCS) e habilitada especificando a fonte no formato: source=('diretorio::url#fragmento?consulta') Atualmente, o makepkg tem suporte aos sistemas de controle de versao Bazaar, Git, Subversion, Fossil e Mercurial. Para outros sistemas de controle de versao, a clonagem manual dos repositorios upstream deve ser feita na funcao prepare(). O URL de fonte e dividido em quatro componentes: diretorio (opcional) Especifica um nome de diretorio alternativo para makepkg para baixar o codigo-fonte de VCS. url A URL para o repositorio VCS. Isso deve incluir o VCS no protocolo de URL para makepkg para reconhece-lo como uma fonte VCS. Se o protocolo nao incluir o nome VCS, ele pode ser adicionado prefixando a URL com vcs+. Por exemplo, usar um repositorio Git sobre HTTPS teria uma URL de fonte no formato: git+https://.... fragmento (opcional) Permite especificar um numero de revisao ou branch para makepkg para checkout do VCS. Um fragmento tem o formato tipo=valor.Por exemplo, para fazer o checkout de uma determinada revisao, a linha de fonte teria o formato source=(url#revision=123). Os tipos disponiveis dependem do VCS sendo usado: bzr revisao (veja 'bzr help revisionspec' para detalhes) fossil branch, commit, tag git branch, commit, tag hg branch, revisao, tag svn revisao consulta (opcional) Permite especificar se um checkout VCS deve ser verificado para revisoes assinadas por PGP. A linha de origem deve ter o formato source=(url#fragmento?assinada) ou source=(url?assinada#fragmento). Atualmente ha suporte apenas para Git. EXEMPLO A seguir esta um exemplo de PKGBUILD para o pacote de patch. Para mais exemplos, de uma olhada nos arquivos de compilacao dos pacotes de sua distribuicao. Para aqueles que usam Arch Linux, consulte a arvore Arch Build System (ABS). # Maintainer: Joao Usuario pkgname=patch pkgver=2.7.1 pkgrel=1 pkgdesc="A utility to apply patch files to original sources" arch=('i686' 'x86_64') url="https://www.gnu.org/software/patch/patch.html" license=('GPL') groups=('base-devel') depends=('glibc') makedepends=('ed') optdepends=('ed: for "patch -e" functionality') source=("ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig}) md5sums=('e9ae5393426d3ad783a300a338c09b72' 'SKIP') build() { cd "$srcdir/$pkgname-$pkgver" ./configure --prefix=/usr make } package() { cd "$srcdir/$pkgname-$pkgver" make DESTDIR="$pkgdir/" install } VEJA TAMBEM makepkg(8), pacman(8), makepkg.conf(5) Consulte o site do pacman em https://archlinux.org/pacman/ para obter informacoes atuais sobre o pacman e suas ferramentas relacionadas. BUGS Bugs? Voce deve estar brincando; nao ha erros neste software. Mas se por acaso estivermos errados, envie um relatorio de erro com o maximo de detalhes possivel no rastreador de erros do Arch Linux na secao Pacman. AUTORES Atuais mantenedores: o Allan McRae o Andrew Gregory o Eli Schwartz o Morgan Adamiec Principais colaboradores anteriores: o Judd Vinet o Aurelien Foret o Aaron Griffin o Dan McGee o Xavier Chantry o Nagy Gabor o Dave Reisner Para outros contribuidores, use git shortlog -s no repositorio pacman.git. TRADUCAO A traducao para portugues brasileiro desta pagina man foi criada por Rafael Fontenelle Esta traducao e uma documentacao livre; leia a Licenca Publica Geral GNU Versao 3 ou posterior para as condicoes de direitos autorais. Nenhuma responsabilidade e aceita. Se voce encontrar algum erro na traducao desta pagina de manual, envie um e-mail para a lista de discussao de tradutores . Pacman 6.0.2 6 fevereiro 2024 PKGBUILD(5)