Introdução ao Arch Build System

O artigo descreve de forma geral o uso do Arch Build System, que torna possível a compilação de pacotes para Arch Linux a partir dos códigos-fonte ao estilo "Ports" do FreeBSD. Também será dado uma introdução sobre PKGBUILDS e FLAGS para uso no arquivo makepkg.conf.

[ Hits: 22.883 ]

Por: Xerxes em 15/08/2009


CFLAGS e Makepkg.conf



O arquivo de configuração do makepkg, GCC e do make é o makepkg.conf. Podemos configurá-lo para atender nossos objetivos, como por exemplo, uma maior otimização da compilação.

nano /etc/makepkg.conf

Exemplo:

#
# /etc/makepkg.conf
#

#############################
# SOURCE ACQUISITION
#############################
#
#-- The download utilities that makepkg should use to acquire sources
#  Format: 'protocol::agent'
DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u'
          'http::/usr/bin/wget -c -t 3 --waitretry=3 -O %o %u'
          'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate -O %o %u'
          'rsync::/usr/bin/rsync -z %u %o'
          'scp::/usr/bin/scp -C %u %o')

# Other common tools:
# /usr/bin/snarf
# /usr/bin/lftpget -c
# /usr/bin/curl

#############################
# ARCHITECTURE, COMPILE FLAGS
#############################
#
CARCH="i686"
CHOST="i686-pc-linux-gnu"

#-- Exclusive: will only run on i686
# -march (or -mcpu) builds exclusively for an architecture
# -mtune optimizes for an architecture, but builds for whole processor family
CFLAGS="-march=i686 -mtune=generic -O2 -pipe"
CXXFLAGS="-march=i686 -mtune=generic -O2 -pipe"
#LDFLAGS=""
#-- Make Flags: change this for DistCC/SMP systems
#MAKEFLAGS="-j2"

#############################
# BUILD ENVIRONMENT
#############################
#
# Defaults: BUILDENV=(fakeroot !distcc color !ccache)
#  A negated environment option will do the opposite of the comments below.
#
#-- fakeroot: Allow building packages as a non-root user
#-- distcc:   Use the Distributed C/C++/ObjC compiler
#-- color:    Colorize output messages
#-- ccache:   Use ccache to cache compilation
#
BUILDENV=(fakeroot !distcc color !ccache)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""

#############################
# GLOBAL PACKAGE OPTIONS
#   These are default values for the options=() settings
#############################
#
# Default: OPTIONS=(strip docs libtool emptydirs zipman purge)
#  A negated option will do the opposite of the comments below.
#
#-- strip:     Strip symbols from binaries/libraries in STRIP_DIRS
#-- docs:      Save doc directories specified by DOC_DIRS
#-- libtool:   Leave libtool (.la) files in packages
#-- emptydirs: Leave empty directories in packages
#-- zipman:    Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge:     Remove files specified by PURGE_TARGETS
#
OPTIONS=(strip docs libtool emptydirs zipman purge)

#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Manual (man and info) directories to compress (if zipman is specified)
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
#-- Doc directories to remove (if !docs is specified)
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
#-- Directories to be searched for the strip option (if strip is specified)
STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})
#-- Files to be removed from all packages (if purge is specified)
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)

#############################
# PACKAGE OUTPUT
#############################
#
# Default: put built package and cached source in build directory
#
#-- Destination: specify a fixed directory where all packages will be placed
#PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
#SRCDEST=/home/sources
#-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>"

#############################
# EXTENSION DEFAULTS
#############################
#
# WARNING: Do NOT modify these variables unless you know what you are
#          doing.
#
PKGEXT='.pkg.tar.gz'
SRCEXT='.src.tar.gz'

# vim: set ft=sh ts=2 sw=2 et:

Obs.: O manual do Arch Linux diz que o usuário mediano muito provavelmente não precisará mudar os valores de CARCH, CHOST e USE_FAKEROOT, no entanto, na condição de usuário iniciante, sinto-me a vontade para alterar as variáveis CFLAGS, CXXFLAGS, e MAKEFLAGS.

Para quem não sabe:
  • CFLAGS: se refere às FLAGS de compilação na linguagem C;
  • CXXFLAGS se refere às FLAGS de compilação na linguagem C++;
  • MAKEFLAGS: configura o número de "jobs" executados simultaneamente. Depende da quantidade de núcleos do processador.

MAKEFLAGS

Para reduzir o tempo de compilação, aproveitando melhor os recursos do processador, configure esse parâmetro para o número 2 acrescido de 1 para cada núcleo extra de processador. Exemplo para um Dual Core:

MAKEFLAGS="-j3"

CFLAGS e CXXFLAGS

Por padrão esses são os valores dos parâmetros no Arch Linux:
  • CFLAGS="-march=i686 -O2 -pipe"
  • CXXFLAGS="-march=i686 -O2 -pipe"

Isso fornece os parâmetros de compilação para o GCC baseado na arquitetura e modelo do seu processador. Atribuir valores específicos a esses parâmetros pode, teoricamente, aumentar o desempenho dos processos.

Para usar uma "flag segura" acesse a página wiki do Gentoo e consulte a FLAG específica para o seu modelo: Safe_Cflags

Exemplo, para PC Intel Celeron existe:
  • CFLAGS="-march=pentium2 -O2 -pipe -fomit-frame-pointer"
  • CXXFLAGS="${CFLAGS}"

Para ver as informações do seu processador, execute:

cat /proc/cpuinfo

Aqui resultou no seguinte (apenas a parte que interessa):

vendor_id	: AuthenticAMD
cpu family	: 15
model		: 44
model name	: AMD Sempron(tm) Processor 2800+

Procurei no site e vi que o parâmetro para o meu caso é:

CFLAGS="-march=athlon-xp -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"

Após ter aplicado as suas modificações a compilação com o makepkg será mais eficiente.

Simples assim.

Obs.: Com certeza todo o trabalho seria mais fácil se o sistema tivesse sido construído dessa forma desde o início, após a instalação, antes de instalar o ambiente gráfico etc.

Sobre o artigo

Devido minha falta de conhecimento é possível que existam maneiras mais eficientes de se fazer o que foi exposto. Os usuários mais experientes poderiam dar dicas e sugestões para corrigir o artigo ou torná-lo mais econômico.

Esse simples guia introdutório, embora forneça o suficiente para executar o objetivo proposto de recompilar todos os pacotes do Arch Linux, serve mais para atiçar a curiosidade do usuário iniciante, pois o assunto está longe de ser esgotado. Cabe ao leitor pesquisar e se aprofundar no universo Arch Linux. Eis os links de referência para o artigo:
Página anterior    

Páginas do artigo
   1. ABS
   2. PKGBUILD e Makeworld
   3. CFLAGS e Makepkg.conf
Outros artigos deste autor

Incrementando o Ubuntu GNOME

Teoria das Formas e o Aumento da Usabilidade

Mamãe, quero Arch! (parte 2 - final)

Afrescalhando o Slackware

Elementary OS Freya

Leitura recomendada

Guia (nem tanto) Introdutório do Linux

Meu Linux, minha vida!

Linux, aí vamos nós!

Quem disse que micro velho não presta?

Um pouco sobre Budgie Desktop

  
Comentários
[1] Comentário enviado por removido em 15/08/2009 - 10:02h

muito bom ...

[2] Comentário enviado por removido em 15/08/2009 - 17:29h

Muito bom o artigo, parabéns.

É uma boa para quem não atualiza o sistema constantemente. No meu caso, já fica inviável usar o abs em muitos pacotes, já que no Arch os pacotes são atualizados constantemente e eu atualizo meu sistema pelo menos de dois em dois dias.

[3] Comentário enviado por xerxeslins em 15/08/2009 - 18:23h

De fato, wdmatheus, embora exista a possibilidade de compilar os fontes, essa não é a filosofia do Arch... Além disso, desconfio que o ganho de desempenho com esse processo é humanamente imperceptível.

Para usar o Arch, ao meu ver, (posso estar enganado... opinião de iniciante) basta compilar o kernel. Não seria necessário se preocupar com flags de compilação. No entanto, há essa possibilidade com o ABS.

Eu mesmo no dia-a-dia prefiro a praticidade dos binários pré-compilados como você...

Abraço

[4] Comentário enviado por albfneto em 17/08/2009 - 14:48h

legal, é um tipo de Portage para Arch.
Arch é muito rápido, quase tanto quanto o gentoo.

[5] Comentário enviado por augustouser em 17/08/2009 - 15:29h

Que beleza de artigo, parabéns.

Ps: sobre o ultimo item, de usuários experientes não se pode contar com muita coisa, nem mesmo com artigos. A não ser os que só aparecem pra malhar e cornetar. O VOL precisa é de "iniciantes" (ta de brincadeira você se intitular iniciante) como o amigo xerxeslins.

[6] Comentário enviado por victorwpbastos em 19/01/2010 - 09:37h

Em relação ao ABS, eu notei sim grande mudanças ao compilar alguns pacotes que mais uso (gedit, xorg, firefox). Em relação ao Firefox, por exemplo, senti uma melhora na rapidez e tb o consumo de ram diminui drasticamente (cerca de 30mb). Creio que compilar o sistema todo seja um exagero mas, compilar os pacotes que mais usa com certeza vale a pena.

Abraços!

P.S.: Ótimo artigo, rsrs.

[7] Comentário enviado por landex em 10/06/2010 - 08:56h

Muito bom curti pacas, um dia eu ainda vou conseguir instalar o Arch.

[8] Comentário enviado por xerxeslins em 10/06/2010 - 09:51h

landex,

basta seguir isto:

http://wiki.archlinux-br.org/Guia_de_Instala%C3%A7%C3%A3o

[9] Comentário enviado por removido em 25/07/2010 - 09:48h

Excelente artigo!

Xerxes, já tinha lido sobre o ABS e como estou com um pouco de tempo sobrando, vou fazer uns testes com ele.

[10] Comentário enviado por tiago4171 em 21/01/2015 - 13:18h


Complementando o Artigo:

Antes de compilar o pacote dê chmod na pasta ~/abs e use makepkg -s que vai resolver as dependências automaticamente


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts