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 são graváveis somente por seus(uas) donos(as), mas são legíveis e executáveis por qualquer pessoa (assumindo que os modos padrão são usados pelas chamadas 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.35, “Bash-5.2.15” não é configurado para carregar ou para executar /etc/bash.bashrc, de modo que esse arquivo é inútil em um sistema LFS finalizado.

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