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.
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
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