Os(As) editores(as) do LFS recomendam que a CPU do sistema tenha pelo menos quatro núcleos e que o sistema tenha pelo menos oito (08) GB de memória. Os sistemas mais antigos que não atendam a essas exigências ainda funcionarão, porém o tempo para construir os pacotes será significantemente maior que o documentado.
O teu sistema anfitrião deveria ter o seguinte logiciário com as
versões mínimas indicadas. Isso não deveria ser um problema para a
maioria das distribuições modernas do Linux. Também, observe que
muitas distribuições colocarão cabeçalhos de logiciários dentro de
pacotes separados, frequentemente na forma de
ou
<nome-pacote>
-devel
.
Certifique-se de instalá-los se a tua distribuição os fornecer.
<nome-pacote>
-dev
Versões anteriores dos pacotes de software listados possivelmente funcionem, porém não foram testados.
Bash-3.2 (/bin/sh deveria ser um link simbólico ou real para bash)
Binutils-2.13.1 (Versões maiores que 2.43.1 não são recomendadas dado que elas não foram testadas)
Bison-2.7 (/usr/bin/yacc deveria ser um link para bison ou script pequeno que executa bison)
Coreutils-8.1
Diffutils-2.8.1
Findutils-4.2.31
Gawk-4.0.1 (/usr/bin/awk deveria ser um link para gawk)
GCC-5.2 incluindo o compilador C++, g++ (Versões maiores que 14.2.0 não são recomendadas dado que elas não foram testadas). As bibliotecas C e C++ padrão (com cabeçalhos) também precisam estar presentes, de forma que o compilador C++ possa construir aplicativos hospedados
Grep-2.5.1a
Gzip-1.3.12
Núcleo Linux-4.19
A razão para a exigência da versão do núcleo é a de que nós especificamos essa versão quando da construção da glibc no Capítulo 5 e Capítulo 8, de forma que as soluções alternativas para os núcleos mais antigos não estão habilitadas e a glibc compilada é ligeiramente mais rápida e menor. Em fevereiro de 2024, 4.19 é o lançamento mais antigo do núcleo ainda suportado pelos(as) desenvolvedores(as) do núcleo. Alguns lançamentos de núcleo mais antigos que 4.19 possivelmente ainda sejam suportados por equipes de terceiros, porém não são considerados lançamentos oficiais de desenvolvedor(a) do núcleo; leia-se https://kernel.org/category/releases.html para os detalhes.
Se o núcleo do anfitrião for anterior a 4.19, [então] você precisará substituir o núcleo por uma versão mais atualizada. Existem duas maneiras de você fazer isso. Primeira, veja se seu fornecedor Linux fornece um pacote do núcleo 4.19 ou mais atual. Se sim, [então] você possivelmente deseje instalá-lo. Se seu fornecedor não oferecer um pacote de núcleo aceitável ou você preferisse não instalá-lo, [então] você mesmo(a) pode compilar um núcleo. Instruções para a compilação de núcleo e configuração de carregador de inicialização (presumindo que o anfitrião usa GRUB) estão localizadas no Capítulo 10.
Nós exigimos que o núcleo do anfitrião suporte o pseudo
terminal UNIX 98 (PTY). Ele deveria estar habilitado em todas
as distribuições desktop ou servidor que embarquem o Linux
4.19 ou um núcleo mais recente. Se você estiver construindo
um núcleo personalizado de anfitrião, certifique-se de que
CONFIG_UNIX98_PTYS
esteja
configurada como y
na
configuração do núcleo.
M4-1.4.10
Make-4.0
Patch-2.5.4
Perl-5.8.8
Python-3.4
Sed-4.1.5
Tar-1.22
Texinfo-5.0
Xz-5.0.0
Perceba que os links simbólicos mencionados acima são exigidos para construir um sistema LFS usando as instruções contidas neste livro. Links simbólicos que apontem para outro software (tais como dash, mawk, etc.) possivelmente funcionem, porém não são testados ou suportados pela equipe de desenvolvimento do LFS e possivelmente exijam ou desvio das instruções ou remendos adicionais para alguns pacotes.
Para ver se o seu sistema anfitrião tem todas as versões apropriadas e a habilidade de compilar aplicativos, execute os seguintes comandos:
cat > version-check.sh << "EOF"
#!/bin/bash
# Um conjunto sequencial de comandos para listar os números de versão de ferramentas críticas de desenvolvimento
# Se você tiver ferramentas instaladas em outros diretórios, [então] ajuste "PATH" aqui E
# em ~lfs/.bashrc (seção 4.4) também.
LC_ALL=C
PATH=/usr/bin:/bin
bail() { echo "FATAL: $1"; exit 1; }
grep --version > /dev/null 2> /dev/null || bail "grep não funciona"
sed '' /dev/null || bail "sed não funciona"
sort /dev/null || bail "sort não funciona"
ver_check()
{
if ! type -p $2 &>/dev/null
then
echo "ERRO: Não conseguiu encontrar $2 ($1)"; return 1;
fi
v=$($2 --version 2>&1 | grep -E -o '[0-9]+\.[0-9\.]+[a-z]*' | head -n1)
if printf '%s\n' $3 $v | sort --version-sort --check &>/dev/null
then
printf "OK: %-9s %-6s >= $3\n" "$1" "$v"; return 0;
else
printf "ERRO: %-9s é MUITO ANTIGO ($3 ou posterior exigido)\n" "$1";
return 1;
fi
}
ver_kernel()
{
kver=$(uname -r | grep -E -o '^[0-9\.]+')
if printf '%s\n' $1 $kver | sort --version-sort --check &>/dev/null
then
printf "OK: núcleo Linux $kver >= $1\n"; return 0;
else
printf "ERRO: núcleo Linux ($kver) é MUITO ANTIGO ($1 ou posterior exigido)\n" "$kver";
return 1;
fi
}
# "Coreutils" primeiro, pois "--version-sort" precisa do "Coreutils" >= 7.0
ver_check Coreutils sort 8.1 || bail "Coreutils muito antigo, pare"
ver_check Bash bash 3.2
ver_check Binutils ld 2.13.1
ver_check Bison bison 2.7
ver_check Diffutils diff 2.8.1
ver_check Findutils find 4.2.31
ver_check Gawk gawk 4.0.1
ver_check GCC gcc 5.2
ver_check "GCC (C++)" g++ 5.2
ver_check Grep grep 2.5.1a
ver_check Gzip gzip 1.3.12
ver_check M4 m4 1.4.10
ver_check Make make 4.0
ver_check Patch patch 2.5.4
ver_check Perl perl 5.8.8
ver_check Python python3 3.4
ver_check Sed sed 4.1.5
ver_check Tar tar 1.22
ver_check Texinfo texi2any 5.0
ver_check Xz xz 5.0.0
ver_kernel 4.19
if mount | grep -q 'devpts on /dev/pts' && [ -e /dev/ptmx ]
then echo "OK: núcleo Linux suporta PTY do UNIX 98";
else echo "ERRO: núcleo Linux NÃO suporta PTY do UNIX 98"; fi
alias_check() {
if $1 --version 2>&1 | grep -qi $2
then printf "OK: %-4s is $2\n" "$1";
else printf "ERRO: %-4s is NOT $2\n" "$1"; fi
}
echo "Aliases:"
alias_check awk GNU
alias_check yacc Bison
alias_check sh Bash
echo "Verificação do compilador:"
if printf "int main(){}" | g++ -x c++ -
then echo "OK: g++ funciona";
else echo "ERRO: g++ NÃO funciona"; fi
rm -f a.out
if [ "$(nproc)" = "" ]; then
echo "ERRO: nproc não está disponível ou ele produz saída gerada vazia"
else
echo "OK: nproc informa que $(nproc) núcleos lógicos estão disponíveis"
fi
EOF
bash version-check.sh