2.2. Exigências do Sistema Anfitrião

2.2.1. Hardware

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.

2.2.2. Software

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 <nome-pacote>-devel ou <nome-pacote>-dev. Certifique-se de instalá-los se a tua distribuição os fornecer.

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

[Importante]

Importante

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