4.4. Configurando o Ambiente

Configure um bom ambiente de trabalho criando dois novos arquivos de inicialização para o shell bash. Enquanto logada(o) como usuária(o) lfs, emita o seguinte comando para criar um novo .bash_profile:

cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

Enquanto logada(o) como usuária(o) lfs ou quando alternado para o(a) usuário(a) lfs usando um comando su com a opção -, o shell inicial é um shell de login que lê o /etc/profile do anfitrião (provavelmente contendo algumas configurações e variáveis de ambiente) e então .bash_profile. O comando exec env -i.../bin/bash no arquivo .bash_profile substitui o shell em execução por um novo com um ambiente completamente vazio, exceto pelas variáveis HOME, TERM e PS1. Isso garante que nenhuma variável de ambiente indesejada e potencialmente danosa oriunda do sistema anfitrião vaze para o ambiente de construção.

A nova instância do shell é um shell de não-login, que não lê, e executa, o conteúdo dos arquivos /etc/profile ou .bash_profile, porém, ao invés, lê, e executa, o arquivo .bashrc. Crie o arquivo .bashrc agora:

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/usr/bin
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
PATH=$LFS/tools/bin:$PATH
CONFIG_SITE=$LFS/usr/share/config.site
export LFS LC_ALL LFS_TGT PATH CONFIG_SITE
EOF

O significado das configurações em .bashrc

set +h

O comando set +h desliga a função hash do bash. “Hashing” geralmente é uma característica útil—bash usa uma tabela hash para lembrar o caminho completo para arquivos executáveis para evitar procurar o PATH várias vezes para encontrar o mesmo executável. Entretanto, as novas ferramentas deveriam ser usadas tão logo sejam instaladas. Alternando para desligada a função hash força o shell a procurar no PATH sempre que um aplicativo estiver para ser executado. Dessa forma, o shell encontrará as ferramentas recém compiladas em $LFS/tools/bin tão logo elas estejam disponíveis sem lembrar da versão anterior do mesmo aplicativo fornecida pela distribuição anfitriã, em /usr/bin ou /bin.

umask 022

Configurar a máscara de criação de arquivos do(a) usuário(a) ("umask") para "022" garante que recém criados arquivos e diretórios sejam escrevíveis somente pelos(as) donos(as) deles, mas sejam legíveis e executáveis por qualquer pessoa (assumindo que os modos padrão sejam usados pela chamada de sistema "open(2)", novos arquivos terminarão com modo de permissão "644" e diretórios com modo "755").

LFS=/mnt/lfs

A variável LFS deveria ser configurada para o ponto de montagem escolhido.

LC_ALL=POSIX

A variável LC_ALL controla a localização de certos aplicativos, fazendo suas mensagens seguirem as convenções de um país especificado. Configurar LC_ALL para POSIX ou C (as duas são equivalentes) garante que tudo vai funcionar como esperado no ambiente de compilação cruzada.

LFS_TGT=$(uname -m)-lfs-linux-gnu

A variável LFS_TGT configura uma não padrão, porém compatível descrição de máquina para uso quando da construção do nosso compilador cruzado e vinculador e quando da compilação cruzada do nosso conjunto de ferramentas temporárias. Mais informação é fornecida pelas Observações Técnicas do Conjunto de Ferramentas.

PATH=/usr/bin

Muitas distribuições modernas do Linux mesclaram /bin e /usr/bin. Quando esse for o caso, a variável PATH padrão deveria ser configurada para /usr/bin/ para o ambiente do Capítulo 6. Quando esse não for o caso, a seguinte linha acrescenta /bin ao caminho.

if [ ! -L /bin ]; then PATH=/bin:$PATH; fi

Se /bin não for um link simbólico, [então] ele precisa ser acrescentado à variável PATH.

PATH=$LFS/tools/bin:$PATH

Ao se colocar $LFS/tools/bin a frente do PATH padrão, o compilador cruzado instalado no início do Capítulo 5 é pego pelo shell imediatamente depois da instalação dele. Isso, combinado com a desativação do hashing, limita o risco de que o compilador originário do anfitrião seja usado em vez do compilador cruzado.

CONFIG_SITE=$LFS/usr/share/config.site

No Capítulo 5 e no Capítulo 6, se essa variável não estiver configurada, [então] os scripts configure possivelmente tentem carregar itens de configuração específicos para algumas distribuições a partir de /usr/share/config.site no sistema anfitrião. Substitua-o para evitar uma potencial contaminação oriunda do anfitrião.

export ...

Ao tempo que os comandos precedentes tenham configurado algumas variáveis, com a finalidade de torná-las visíveis dentro de quaisquer sub-shells, nós as exportamos.

[Importante]

Importante

Muitas distribuições comerciais acrescentam uma instância não documentada de /etc/bash.bashrc à inicialização do bash. Esse arquivo tem o potencial de modificar o ambiente do(a) usuário(a) lfs de formas que podem afetar a construção de pacotes LFS críticos. Para assegurar que o ambiente do(a) usuário(a) lfs esteja limpo, verifique a presença de /etc/bash.bashrc e, se presente, mova-o para fora do caminho. Como o(a) usuário(a) root, execute:

[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE

Quando o(a) usuário(a) lfs não mais for necessária(o) (no início do Capítulo 7), você pode seguramente restaurar /etc/bash.bashrc (se desejado).

Perceba que o pacote Bash do LFS que nós construiremos na Seção 8.36, “Bash-5.2.32” não é configurado para carregar ou para executar /etc/bash.bashrc, de modo que esse arquivo é inútil em um sistema LFS finalizado.

Para muitos sistemas modernos com múltiplos processadores (ou núcleos), o tempo de compilação para um pacote pode ser reduzido executando-se um "make paralelo", informando-se ao aplicativo "make" quantos processadores estão disponíveis por meio de uma opção de linha de comando ou de uma variável de ambiente. Por exemplo, um processador "Intel" "Core i9-13900K" tem oito (08) núcleos "D" (desempenho) e dezesseis (16) núcleos "E" (eficiência), e um núcleo "D" consegue executar simultaneamente duas camadas, de forma que cada núcleo "D" seja modelado como dois núcleos lógicos pelo núcleo Linux. Como resultado, existem trinta e dois (32) núcleos lógicos no total. Uma maneira óbvia de usar todos esses núcleos lógicos é a de permitir que o "make" gere até trinta e duas (32) tarefas de construção. Isso pode ser feito passando-se a opção "-j32" para o "make":

make -j32

Ou configure a variável de ambiente "MAKEFLAGS" e o conteúdo dela será usado automaticamente por "make" como opções de linha de comando:

export MAKEFLAGS=-j32
[Importante]

Importante

Nunca passe uma opção "-j" sem um número para "make" ou configure tal opção em "MAKEFLAGS". Fazer isso permitirá que "make" gere infinitas tarefas de construção e cause problemas de estabilidade do sistema.

Para usar todos os núcleos lógicos disponíveis para construir pacotes em "Capítulo 5" e "Capítulo 6", configure "MAKEFLAGS" agora em ".bashrc":

cat >> ~/.bashrc << "EOF"
export MAKEFLAGS=-j$(nproc)
EOF

Substitua "$(nproc)" pelo número de núcleos lógicos que você deseja usar se não quiser usar todos os núcleos lógicos.

Finalmente, para garantir que o ambiente esteja totalmente preparado para a construção das ferramentas temporárias, force o shell bash a ler o perfil do(a) novo(a) usuário(a):

source ~/.bash_profile