Continuando com as variáveis do make...
- EMERGE_LOG_DIR: controla o local dos logs: emerge.log e emerge-fetch.log. O default é o diretório /var/log.
- EMERGE_WARNING_DELAY: determina o tempo de duração da mensagem de aviso após o comando emerge --unmerge. O valor default é 10 segundos.
- EPAUSE_IGNORE: define se ignora ou não pausas curtas que ocorrem quando importantes informações são mostradas. Esta variável é desabilitada por default.
- EXTRA_ECONF: nesta variável podemos informar configurações adicionais para a função econf(), presente nos ebuilds, na fase de configuração de um pacote. Ao contrário do que possa parecer esta opção não é para desenvolvedores, mas sim para usuários normais (que saibam o que estão fazendo).
Como o make.conf é um arquivo global, dependendo das informações aqui, os pacotes não serão compilados pois algumas configurações podem ser específicas de determinados pacotes e ainda, esta configuração funcionará apenas com pacotes que utilizem o GNU Autotools. Um bom exemplo para configuração global, poderia ser algo como:
EXTRA_ECONF="--sysconfdir=/etc/diretorio/"
Podemos também informar configurações extras no momento da compilação. Como exemplo, peguemos o econf() do pacote app-portage/eix:
src_configure() {
econf $(use_with sqlite) $(use_with doc extra-doc)
$(use_enable nls) $(use_enable tools separate-tools)
$(use_enable security) $(use_enable optimization)
$(use_enable strong-security)
$(use_enable strong-optimization) $(use_enable debug debugging)
$(use_enable swap-remote)
$(use_with prefix always-accept-keywords)
$(use_with dep dep-default)
--with-zsh-completion
--with-portage-rootpath="${ROOTPATH}"
--with-eprefix-default="${EPREFIX}"
}
Assim, teríamos o seguinte:
EXTRA_ECONF="--with-zsh-completion" emerge -av app-portage/eix
Mas, o modo acima valerá apenas para esta compilação. Em caso de atualização ou recompilação, teria que informar tudo de novo. Então como fazer de forma persistente? Assim:
No diretório /etc/portage/env/, crie um arquivo com o nome do pacote. Por exemplo: /etc/portage/env/eix.conf. Dentro deste arquivo coloque o seguinte:
EXTRA_ECONF="--with-zsh-completion"
Salve e saia. Após isto, abra o arquivo em /etc/portage/package.env e adicione, sem apagar quaisquer previas linhas, a seguinte informação:
app-portage/eix eix.conf
Salve e saia. Suas configurações se tornarão persistentes.
-FEATURES: algumas características que o Portage deve tomar por padrão. Muitas delas são para desenvolvedores, então não mostrarei todas, apenas as que forem interessantes para usuários, outras são habilitadas por default, então não vamos prolongar demais. AVISO: não desabilite o sandbox! As features interessantes para usuários podem ser:
binpkg-logs: se você instala pacotes binários via Portage, pode ser interessante manter alguns logs. Defina isto com esta feature. Entretanto esta será relevante apenas se a variável do make.conf, PORT_LOGDIR, estiver definida.
buildpkg: você gosta de pacotes binários então? Coloque isto como feature e o Portage transformará todos os pacotes que você quiser instalar, em binários.
buildsyspkg: falei sobre o arquivo @SET na parte I desta série. Com esta feature, o Portage construirá binários dos pacotes informados neste arquivo.
candy: habilita uma barra de progresso especial do Portage. É bacaninha até...
clean-logs: habilita a execução automática do comando definido na variável do make.conf, PORT_LOGDIR_CLEAN. O que for definido aqui, removerá o o(s) diretório(s) especificado(s) na variável do make.conf, PORT_LOGDIR, que tenham sido modificados à pelo menos 7 dias.
collision-protect: um recurso do projeto de Garantia de Qualidade (QA) do Gentoo, que previne que um pacote não substitua arquivos que não pertencem à ele. A variável do make.conf, COLLISION_IGNORE, pode ser usada para selecionar quais arquivos ignorar, alterando o que for definido nesta feature.
ebuild-locks: bloqueie fases de ebuilds que não estejam dentro de um sandbox para que nunca executem concorrentemente.
fail-clean: recurso para limpar arquivos temporários de compilações malsucedidas. Seu uso é encorajado caso você tenha indicado o PORTAGE_TMPDIR no tmpfs. Se você habilitar isto, habilite também a variável PORT_LOGDIR, para garantir que os logs dos ebuilds sejam salvos.
parallel-fetch: busca em segundo plano enquanto compila. Para ver o status da busca, basta rodar o seguinte comando em outro terminal: tail -f /var/log/emerge-fetch.log.
preserve-libs: preserva bibliotecas sonames quando estes mudarem durante um upgrade ou downgrade.
protect-owned: recurso idêntico ao collision_protect, exceto que os arquivos podem ser substituídos se não forem explicitamente listados no conteúdo de um pacote instalado. Isto é útil em sistemas que tem muitos arquivos órfãos que foram deixados para trás por versões mais antigas do Portage que não suportavam o recurso de unmerge-orphans.
Assim como no recurso collision-protect, a variável COLLISION_IGNORE pode ser usada para desativar seletivamente esta função. É recomendado deixar tanto o recurso protect-owned, quanto o collision-protect habilitados durante todo o tempo, caso contrário, arquivos podem ser substituídos em momentos inapropriados. Se o recurso collision-protect estiver habilitado então ele terá precedência sobre protect-owned.
sandbox¹: habilita o sandbox quando usamos os comandos emerge e ebuild.
unmerge-logs: mantém os logs dos pacotes durante as fases de unmerge. Este recurso será relevante apenas se a variável PORT_LOGDIR estiver definida.
unmerge-orphans: remove pacotes que não pertençam a nenhum pacote instalado no mesmo SLOT e que não esteja protegido pela variável CONFIG_PROTECT.
userfetch: quando o Portage está buscando um pacote, ele faz isto como root e se precisarmos ou quisermos, em outro terminal, instalar outro pacote, teremos que esperar o Portage terminar a busca anterior pois o root estará bloqueado. Este recurso desbloqueia esta busca alterando-a para rodar como usuário.
userpriv: quase o mesmo caso que o de cima, porém este recurso habilita a compilação de pacotes, durante determinadas fases, para usuários non-root.
usersandbox: habilita o uso do sandbox durante a fase de compilação quando estiver rodando sem privilégios de root (via userpriv).
Estes são os recursos que acredito serem úteis para usarmos no geral. Vamos continuar com as variáveis do make.conf.
- FETCHCOMMAND: o Portage, por padrão, utiliza o wget para buscar e baixar o código fonte dos pacotes. Mude isto aqui nesta variável seguindo algumas regras: deve conter o caminho completo do comando assim como os espaços reservados ${DISTDIR}, ${FILE} e ${URI}. Por exemplo, caso utilizemos outro programa, poderíamos fazer assim:
# Lukemftp (BSD ftp):
FETCHCOMMAND="lukemftp -s -a -o "${DISTDIR}/${FILE}" "${URI}""
- GENTOO_MIRRORS: lista com os mirrors que serão usados para baixar os pacotes para compilação. Ex.:
GENTOO_MIRRORS="ftp://ftp.las.ic.unicamp.br/pub/gentoo/
http://www.las.ic.unicamp.br/pub/gentoo/
http://www.linorg.ciagri.usp.br/gentoo/"
- MAKEOPTS: usamos esta variável para permitir a execução de múltiplas sessões do comando make, quando da compilação, de acordo com a quantidade de núcleos da CPU. O truque aqui é o seguinte: nº de CPUs+1. Sendo assim, faça:
MAKEOPTS="-j5" #opção -j de jobs, seguido pelo número de núcleos + 1
NOCOLOR = ["true" | "false"]: define se a saída colorizada deve ser desabilitada. O padrão é false.
NOTA: ¹sandbox: sandbox é uma biblioteca que provê um ambiente especial durante as seguintes fases de compilação de um ebuild/pacote: src_unpack, src_compile, src_test e src_install. O sandbox encaixota este ebuild e previne que estes, acidentalmente, escrevam fora dos locais permitidos ou editem arquivos no momento da compilação. Dentro deste ambiente, todos os ebuilds, obrigatoriamente, devem ser construídos corretamente, não há espaço para truques aqui. Equivale ao fakeroot do Debian ou o InstallWatch das distros RPM.