Como reconstruir um pacote usando o sistema de construção do arco Linux

Como reconstruir um pacote usando o sistema de construção do arco Linux

O abdômen ou Sistema de construção de arco é um sistema de construção de pacotes nativo da distribuição do arco Linux: com ele, podemos facilmente criar pacotes que podem ser instalados com Pacman, o gerente de pacote de distribuição, começando do código -fonte. Tudo o que precisamos fazer é especificar instruções dentro de um Pkgbuild Arquive e depois construa o pacote usando o makepkg ferramenta. Neste tutorial, veremos como personalizar e reconstruir um pacote já existente.

Neste tutorial, você aprenderá:

  • Qual é o sistema de construção do arco
  • Como baixar os arquivos de origem do pacote existente
  • Como modificar um pkgbuild
  • Como construir um pacote usando o makepkg Utilitário

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Arch Linux
Programas asp, makepkg, base-devel
Outro Permissões raiz para instalar dependências de construção e tempo de execução
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Reconstruindo um pacote

Como exemplo para este tutorial, reconstruímos o hplip pacote. Este pacote contém o software de código aberto necessário para usar algumas impressoras HP no Linux. Em distribuições como Debian e Fedora, temos a opção de instalar o hplip pacote que contém apenas utilitários e drivers de linha de comando e opcionalmente hplip-gui, que inclui também ferramentas gráficas que podem ser usadas para configurar e controlar a impressora. Desde que eu uso o System-Config-Printer Ferramenta para controlar as impressoras existentes e não quero ter ferramentas desnecessárias e sobrepostas no meu sistema, preciso alterar a forma como o software é construído e embalado no Arch Linux: é isso que faremos neste tutorial.

Instalação de software

Como primeiro passo, precisamos instalar alguns pacotes: base em nível e asp. O primeiro é um grupo de pacotes que contém muitos utilitários essenciais para compilar software como Fakerot, GCC e fazer. O segundo é uma ferramenta para recuperar arquivos de origem para pacotes de arco linux existentes. Para instalá -los, usamos Pacman:

$ sudo pacman -s base -devel asp 

Como já mencionado, também precisaremos do makepkg que já está instalado, pois vem com Pacman em si. Depois de instalar todos os pacotes necessários, podemos prosseguir para o makepkg configuração.

Configuração makepkg

O padrão, em todo o sistema makepkg O arquivo de configuração é /etc/makepkg.conf; Vamos copiar isso para ~/.makepkg.conf, Para criar uma configuração específica do usuário, podemos ajustar sem a necessidade de usar privilégios administrativos (~/.Config/Pacman/Makepkg.conf também poderia ser usado). Algumas variáveis ​​perceptíveis que se pode querer ajustar no arquivo são as seguintes:

Variável Usar Valor padrão
Cppflags As bandeiras para usar para os pré -processadores C -D_fortify_source = 2
Cflags As bandeiras a serem usadas para o compilador C -março = x86-64 -mtune = genérico -o2 -pipe -fno -plt
Cxxflags As bandeiras a serem usadas para o compilador C ++ -março = x86-64 -mtune = genérico -02 -pipe -fno -plt
BuildDir O diretório a ser usado para construção de pacotes /tmp/makepkg
Integrity_check A verificação da integridade para usar MD5
Pkgdest O diretório onde todos os pacotes serão colocados . (diretório de trabalho)
Srcdest O diretório onde os dados de origem serão armazenados ./src

Depois que ajustamos nossa configuração para melhorar nossas necessidades, podemos proceder e baixar os arquivos de origem do pacote Arch Linux que queremos modificar, neste caso, como dissemos antes, hplip.

Baixando os arquivos de origem do pacote

Para baixar os arquivos de origem para o pacote que queremos modificar, devemos usar o asp ferramenta que instalamos antes. Nesse caso, corremos:

$ asp checkout hplip 


Depois de alguns segundos o hplip O diretório deve ser criado em nosso diretório de trabalho. Dentro dele, encontraremos dois subdiretos: Repos que contém subdiretos próprios, nomeado após nome do repositório e arquitetura do sistema, e porta-malas, que contém a principal linha de desenvolvimento do Svn repositório.

HPLIP/ ├── Repos │ └sto.H-in-Vary-places-as-Cups-2.2.Patch │ ├── 0023-Fix-Handling-of-Unicode-Filenames-in-SixExt.py.Patch │ ├── 0025-REMOVE-ALL-MAGEMAGEPROCESSOR-FUNCIONALIDADE-QUANDO-IS-CLO.patch │ ├── desabille_upgrade.Patch │ ├── HPLIP-REVERT-PLUGINS.patch │ ├── pkgbuild │ ├── python3.diff │ └── reproduzível-gzip.patch └── tronco ├── 0022-add-include-cups-ppd.H-in-Vary-places-as-Cups-2.2.Patch ├── 0023-FIX-FIX-FILLING-O-UNICODE Filenames-in-SixExt.py.Patch ├── 0025-REMOVE-ALL-MAGEMAGEMPROCESSOR-FUNCIONALIDADE-QUANDO-IS-CLO.patch ├── desabille_upgrade.Patch ├── HPLIP-REVERT-PLUGINS.patch ├── pkgbuild ├── python3.diff └── Gzip reprodutível.correção 

Podemos modificar o hplip/repos/extra-x86_64/pkgbuild arquivo.

Modificando o arquivo pkgbuild

O Pkgbuild O arquivo é um script de bash que contém as instruções de construção para o pacote Arch Linux. Nesse caso, o que precisamos modificar no arquivo é o conteúdo do construir função que contém os comandos usam para configurar e compilar os arquivos de origem, neste caso hplip. Na função, podemos ver que o ./configure O script é lançado com as seguintes bandeiras:

[…] ./Configure--prefix =/usr \ --enable-qt5 \ ---disable-qt4 \ --enable-hpcups-insalt \ --enable-cups-drv-Install \ --enable-pp-build […] 

Como não quero que os aplicativos gráficos sejam construídos e quero instalar o mínimo necessário para que minha impressora funcione corretamente, não preciso de suporte para qt5, para que eu possa remover o --Enable-qt5 opção (eu poderia usar --Desativar-qt5 ou --Ativar-qt5 = não Em vez disso, mas isso seria redundante, pois a bandeira está desativada por padrão, como podemos ler lançando ./Configurar - -Help no diretório de origem HPLIP). Eu então preciso usar o --desabilitar-gui-build bandeira para desativar a GUI construir e usar o --habilitar-lite-build Bandeira para obter uma construção de Lite apenas com os componentes necessários para construir e digitalizar (a impressora inclui também um scanner). O resultado final seria algo como:

[…] ./Configure--prefix =/usr \--Disable-qt4 \ --enable-hpcups-Install \ --enable-cups-drv-Install \ --enable-pp-comp \--Disable-Gui-Build \- -Enable-Lite-Build […] 


Já que desativamos QT5 Suporte, também podemos remover Python-Pyqt5 da lista de dependências necessárias para construir o software, listado no makerpendes Array Bash on -line 15 do arquivo:

Makespendes = ('Python-Pyqt5 "SANE" RPCBIND "CUPS" LIBUSB') 

Agora que modificamos o Pkgbuild, Podemos prosseguir para a próxima etapa e construir nosso pacote usando makepkg.

Construa o pacote

Uma vez nosso Pkgbuild O arquivo está pronto, podemos construir nosso pacote modificado usando o makepkg Utilitário. Antes de fazê -lo, precisamos outra coisa: como a assinatura dos arquivos de origem baixada para o software que queremos construir é verificada automaticamente em uma chave GPG, precisamos dizer que a chave para o nosso Keyring GPG, caso contrário, o processo de construção falhará. Nesse caso, para importar a chave que executaríamos:

$ gpg -KeyServer.Ubuntu.COM - -RECV 73D770CDA59047B9 

Devemos ser notificados de que a chave foi importada com sucesso:

GPG: chave 73D770CDA59047B9: Public Key "HPLIP (HP Linux Imaging and Printing)" GPG importado: número total processado: 1 gpg: importado: 1 

A chave identificada por 73D770CDA59047B9 é a chave usada para assinar o hplip Tarball de origem. Se você quiser saber mais sobre como verificar uma assinatura de GPG, pode dar uma olhada no nosso artigo de como verificar a integridade de um artigo de imagem ISO de distribuição Linux que escrevi sobre o assunto.

Uma vez pronto, nos movemos dentro do diretório onde o Pkgbuild está armazenado
e execute o seguinte comando:

$ makepkg - -limpo - -syncdeps -rmdeps 

Vamos dar uma rápida olhada nas opções que usamos usadas ao invocar o makepkg ferramenta. Com o --limpar opção (-c) Podemos fazer para que arquivos e diretórios restantes sejam removidos após uma compilação de pacote bem -sucedida. Nós também usamos --SyncDeps (-s): Quando esta opção é usada, o tempo de execução ausente e a dependência de construção do pacote é instalado usando Pacman. Finalmente, usamos o --rmDeps opção (-r): Isso fará com que as dependências instaladas anteriormente sejam desinstaladas após a conclusão da construção.

Se já realizamos uma construção do pacote, e queremos executar novamente o processo, também precisamos usar o --força (-f) opção, já makepkg Normalmente se recusa a construir um pacote que já existe no mesmo diretório).

Depois de iniciarmos o comando acima, a compilação dos arquivos de origem e a criação do pacote começarão. Seremos solicitados a confirmar que queremos instalar as dependências ausentes:

==> Fazendo o pacote: HPLIP 1: 3.20.6-2 (Ter 18 de agosto de 2020 10:29:43 CEST) ==> Verificando as dependências do tempo de execução… ==> Instalando dependências ausentes… [SUDO] Senha para EGDOC: Resolvando dependências… Procurando pacotes conflitantes… Pacotes (18) JBig2dec -0.18-1 LIBIDN-1.36-1 Perl-Alien-Build-2.29-1 Perl-Alien-Libxml2-0.16-2 Perl-capture Tiny-0.48-4 Perl-Clone-0.45-2 Perl-DBI-1.643-2 Perl-ffi-checklib-0.27-2 Perl-File-Chdir-0.1011-4 Perl-File-Which-1.23-4 Perl-Path Tiny-0.112-2 PERL-XML-LIBXML-2.0205-2 Perl-xml-namespacesupport-1.12-4 Perl-xml-SAX-1.02-1 Perl-xml-SAX-BASE-1.09-4 Foomatic-DB-Engine-4: 20200206-1 Ghostscript-9.52-1 NET-SNMP-5.8-6 Tamanho total instalado: 61.76 MIB :: Prossiga com a instalação? [Y/n] y […] ==> Verificando as dependências do tempo de construção… ==> Instalando dependências ausentes… resolvendo dependências… Procurando pacotes conflitantes… Pacotes (6) GD-2.3.0-1 libgphoto2-2.5.25-1 libieee1284-0.2.11-9 LIBXPM-3.5.13-2 RPCBind-1.2.5-3 Sane-1.0.30-1 Tamanho total instalado: 26.50 MIB :: Prossiga com a instalação? [Y/N] Y […] 

Depois que a construção estiver concluída, seremos solicitados a confirmar que queremos remover os pacotes instalados anteriormente. Neste ponto, se tudo correr como esperado, devemos encontrar o pacote criado no diretório com o qual especificamos no makepkg arquivo de configuração (o Pkgdest diretório). Por padrão, o pacote é criado no diretório de trabalho. Nesse caso, o HPLIP-1: 3.20.6-2-x86_64.pkg.alcatrão.zst o pacote foi gerado; Podemos instalá -lo usando Pacman:

$ sudo pacman -u hplip -1: 3.20.6-2-x86_64.pkg.alcatrão.zst 


Lidar com conflitos nas atualizações do sistema

Desde que geramos um pacote personalizado com base na modificação que fizemos dentro do Pkgbuild Arquivo, surge um problema: Quando o sistema será atualizado, uma nova versão do pacote padrão pode ser instalada, substituindo assim as modificações que fizemos. Como podemos evitar isso? A solução mais simples é tornar os pacotes que modificamos o membro de um grupo específico (digamos que queremos chamá -lo de "modificado") e depois instruir Pacman Para evitar atualizar seus membros. Para fazer isso, devemos modificar o Pkgbuild novamente e adicione esta linha:

grupos = ('modificado') 

Neste ponto, devemos reconstruir o pacote. Uma vez feito, devemos modificar o /etc/Pacman.conf Arquive e adicione o grupo à lista dos ignorados. A linha para modificar é 26:

IgnoreGroup = modificado 

O Pacman O gerenciador de pacotes vai pular a atualização do pacote, para que devemos fazê -lo manualmente quando necessário.

Conclusões

Neste artigo, vimos como podemos usar abdômen, o sistema de construção do arco para modificar e reconstruir um pacote existente para adaptá-lo às nossas necessidades específicas. Vimos como baixar os arquivos de origem do pacote, como modificar um Pkgbuild, e como reconstruir o pacote usando o makepkg Utilitário. Para explorar melhor o assunto, você pode dar uma olhada no makepkg Manpage e consulte a página do Wiki do sistema de construção do arco.

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Linux pode obter vírus? Explorando a vulnerabilidade do Linux…
  • Coisas para fazer depois de instalar o Ubuntu 22.04 Jellyfish…
  • Sistema Linux Hung? Como escapar para a linha de comando e…
  • Instale Arch Linux na estação de trabalho VMware
  • Download do Linux
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?