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.

[Atenção]

Atenção

Esteja ciente que GCC mais recente que 16.2.0 ou Binutils mais recente que 2.47 não foram testadas. Um GCC mais recente é altamente provável quebrar a construção deste lançamento do LFS. Não informe tal quebra para os(as) editores(as) do LFS. Se tua distribuição anfitriã tiver versões mais recentes desses pacotes, você tem várias opções:

  • Usar um lançamento mais recente do livro LFS, se existir um
  • Usar uma distribuição anfitriã mais antiga
  • Desatualizar o GCC se isso for suportado pela distribuição anfitriã
  • Usar o livro mais recente de desenvolvimento do LFS. As atualizações para a versão mais recente dos pacotes no LFS geralmente são adicionadas dentro de duas a quatro semanas depois do lançamento.
  • Bash-3.2 (/bin/sh deveria ser um link simbólico ou real para bash)

  • Binutils-2.13.1 (Versões maiores que 2.47 possivelmente não funcionem 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)

  • GNU Coreutils-8.1 ou Uutils Coreutils-0.8

  • Diffutils-2.8.1

  • Findutils-4.2.31

  • Gawk-4.0.1 (/usr/bin/awk deveria ser um link para gawk)

  • GCC-5.4 incluindo o compilador C++, g++ (Versões maiores que 16.2.0 possivelmente não funcionem dado que elas não foram testadas). As bibliotecas C e C++ padrão (com cabeçalhos) também precisam estar presentes, de modo que o compilador C++ consiga construir programas hospedados

  • Grep-2.5.1a

  • Gzip-1.3.12

  • Núcleo Linux-5.10

    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 dezembro de 2024, 5.10 é 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 5.10 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 5.10, [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 5.10 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 5.10 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

Além disso, se você precisar criar uma nova ESP (EFI System Partition, leia Seção 2.5, “Criando um Sistema de Arquivos na Partição” para detalhes), dosfstools é necessário.

[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
# A script to list version numbers of critical development tools

# If you have tools installed in other directories, adjust PATH here AND
# in ~lfs/.bashrc (section 4.4) as well.

LC_ALL=C 
PATH=/usr/bin:/bin

bail() { echo "FATAL: $1"; exit 1; }
grep --version > /dev/null 2> /dev/null || bail "grep does not work"
sed '' /dev/null || bail "sed does not work"
sort   /dev/null || bail "sort does not work"

ver_check()
{
   if ! type -p $2 &>/dev/null
   then 
     echo "ERROR: Cannot find $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 "ERROR: %-9s is TOO OLD ($3 or later required)\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:    Linux Kernel $kver >= $1\n"; return 0;
   else 
     printf "ERROR: Linux Kernel ($kver) is TOO OLD ($1 or later required)\n" "$kver"; 
     return 1; 
   fi
}

# Coreutils first because --version-sort needs Coreutils >= 7.0
if sort --version |& grep -q uutils; then
    ver_check Coreutils  sort     0.8 || bail "Uutils Coreutils too old, stop"
else
    ver_check Coreutils  sort     8.1 || bail "GNU Coreutils too old, stop"
fi
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.4
ver_check "GCC (C++)"    g++      5.4
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 5.10

if mount | grep -q 'devpts on /dev/pts' && [ -e /dev/ptmx ]
then echo "OK:    Linux Kernel supports UNIX 98 PTY";
else echo "ERROR: Linux Kernel does NOT support UNIX 98 PTY"; fi

alias_check() {
   if $1 --version 2>&1 | grep -qi $2
   then printf "OK:    %-4s is $2\n" "$1";
   else printf "ERROR: %-4s is NOT $2\n" "$1"; fi
}
echo "Aliases:"
alias_check awk GNU
alias_check yacc Bison
alias_check sh Bash

echo "Compiler check:"
if printf "int main(){}" | g++ -x c++ -
then echo "OK:    g++ works";
else echo "ERROR: g++ does NOT work"; fi
rm -f a.out

if [ "$(nproc)" = "" ]; then
   echo "ERROR: nproc is not available or it produces empty output"
else
   echo "OK: nproc reports $(nproc) logical cores are available"
fi
EOF

bash version-check.sh