8.5.1. Instalação da Glibc
        
        
          Alguns dos aplicativos Glibc usam o diretório não conforme com o
          FHS /var/db para armazenar os dados
          em tempo de execução deles. Aplique o seguinte remendo para fazer
          com que tais aplicativos armazenem os dados em tempo de execução
          deles nos locais conformes com o FHS:
        
        patch -Np1 -i ../glibc-2.37-fhs-1.patch
        
          Corrija um problema de segurança identificado pelo(a)
          desenvolvedor(a):
        
        sed '/width -=/s/workend - string/number_length/' \
    -i stdio-common/vfprintf-process-arg.c
        
          A documentação da Glibc recomenda construir a Glibc em um diretório
          dedicado à construção:
        
        mkdir -v build
cd       build
        
          Garanta que os utilitários ldconfig e sln serão instalados no
          /usr/sbin:
        
        echo "rootsbindir=/usr/sbin" > configparms
        
          Prepare a Glibc para compilação:
        
        ../configure --prefix=/usr                            \
             --disable-werror                         \
             --enable-kernel=3.2                      \
             --enable-stack-protector=strong          \
             --with-headers=/usr/include              \
             libc_cv_slibdir=/usr/lib
        
          
            O significado das opções do configure:
          
          
            - 
              
--disable-werror
             
            - 
              
                Essa opção desabilita a opção -Werror passada para o GCC.
                Isso é necessário para executar a suíte de teste.
              
             
            - 
              
--enable-kernel=3.2
             
            - 
              
                Essa opção diz ao sistema de construção que esta Glibc
                possivelmente seja usada com núcleos tão antigos quanto 3.2.
                Isso significa que a geração de contornos, no caso de uma
                chamada de sistema introduzida em uma versão posterior, não
                pode ser usada.
              
             
            - 
              
--enable-stack-protector=strong
             
            - 
              
                Essa opção aumenta a segurança de sistema adicionando código
                extra para verificar estouros de buffer, tais como ataques de
                esmagamento de pilha.
              
             
            - 
              
--with-headers=/usr/include
             
            - 
              
                Essa opção diz ao sistema de construção onde encontrar os
                cabeçalhos da API do núcleo.
              
             
            - 
              
libc_cv_slibdir=/usr/lib
             
            - 
              
                Essa variável configura a biblioteca correta para todos os
                sistemas. Nós não queremos que a lib64 seja usada.
              
             
          
         
        
          Compile o pacote:
        
        make
        
          
          
            Importante
          
          
            Nesta seção, a suíte de teste para a Glibc é considerada crítica.
            Não pule-a sob qualquer circunstância.
          
         
        
          Geralmente uns poucos testes não passam. As falhas de teste
          listadas abaixo usualmente são seguras ignorar.
        
        
make check
        
          Você possivelmente veja algumas falhas de teste. A suíte de teste
          da Glibc é de alguma forma dependente do sistema anfitrião. Umas
          poucas falhas saídas de mais que 5.000 testes geralmente podem
          ignoradas. Esta é uma lista dos problemas mais comuns vistos para
          versões recentes do LFS:
        
        
          
            - 
              
                io/tst-lchmod é
                conhecido por falhar no ambiente chroot do LFS.
              
             
            - 
              
                misc/tst-ttyname é
                conhecido por falhar no ambiente chroot do LFS.
              
             
            - 
              
                O teste stdlib/tst-arc4random-thread é
                conhecido por falhar se o núcleo do anfitrião for
                relativamente antigo.
              
             
            - 
              
                Alguns testes, por exemplo nss/tst-nss-files-hosts-multi, são
                conhecidos por falharem em sistemas relativamente lentos
                devido a um de tempo limite interno.
              
             
          
         
        
          Mesmo sendo uma mensagem inofensiva, o estágio de instalação da
          Glibc reclamará acerca da ausência do /etc/ld.so.conf. Evite esse aviso com:
        
        touch /etc/ld.so.conf
        
          Corrija o Makefile para pular uma verificação de sanidade
          desnecessária que falha no ambiente parcial do LFS:
        
        sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile
        
          Instale o pacote:
        
        make install
        
          Corrija um caminho codificado rigidamente para o carregador de
          executável no script ldd:
        
        sed '/RTLDLIST=/s@/usr@@g' -i /usr/bin/ldd
        
          Instale o arquivo de configuração e diretório de tempo de execução
          para o nscd:
        
        cp -v ../nscd/nscd.conf /etc/nscd.conf
mkdir -pv /var/cache/nscd
        
          Instale os arquivos de suporte do systemd para o nscd:
        
        install -v -Dm644 ../nscd/nscd.tmpfiles /usr/lib/tmpfiles.d/nscd.conf
install -v -Dm644 ../nscd/nscd.service /usr/lib/systemd/system/nscd.service
        
          Em seguida, instale os locales que podem fazer o sistema responder
          em um idioma diferente. Nenhum desses locales é exigido, mas se
          alguns deles estiverem ausentes, [então] as suítes de teste de
          alguns pacotes pularão casos de teste importantes.
        
        
          Locales individuais podem ser instalados usando o aplicativo
          localedef. Por
          exemplo, o segundo comando localedef abaixo combina a
          definição de locale independente do conjunto de caracteres
          /usr/share/i18n/locales/cs_CZ com a
          definição de mapa de caracteres /usr/share/i18n/charmaps/UTF-8.gz e adiciona o
          resultado ao arquivo /usr/lib/locale/locale-archive. As seguintes
          instruções instalarão o conjunto mínimo de locales necessário para
          a cobertura ótima de testes:
        
        mkdir -pv /usr/lib/locale
localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true
localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i de_DE -f UTF-8 de_DE.UTF-8
localedef -i el_GR -f ISO-8859-7 el_GR
localedef -i en_GB -f ISO-8859-1 en_GB
localedef -i en_GB -f UTF-8 en_GB.UTF-8
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i en_US -f UTF-8 en_US.UTF-8
localedef -i es_ES -f ISO-8859-15 es_ES@euro
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i is_IS -f ISO-8859-1 is_IS
localedef -i is_IS -f UTF-8 is_IS.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i it_IT -f ISO-8859-15 it_IT@euro
localedef -i it_IT -f UTF-8 it_IT.UTF-8
localedef -i ja_JP -f EUC-JP ja_JP
localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true
localedef -i ja_JP -f UTF-8 ja_JP.UTF-8
localedef -i nl_NL@euro -f ISO-8859-15 nl_NL@euro
localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R
localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
localedef -i se_NO -f UTF-8 se_NO.UTF-8
localedef -i ta_IN -f UTF-8 ta_IN.UTF-8
localedef -i tr_TR -f UTF-8 tr_TR.UTF-8
localedef -i zh_CN -f GB18030 zh_CN.GB18030
localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS
localedef -i zh_TW -f UTF-8 zh_TW.UTF-8
        
          Adicionalmente, instale o locale para seu próprio país, idioma e
          conjunto de caracteres.
        
        
          Alternativamente, instale todos os locales listados no arquivo
          glibc-2.37/localedata/SUPPORTED
          (inclui cada locale listado acima e muitos mais) de uma vez com o
          seguinte comando consumidor de tempo:
        
        make localedata/install-locales
        
          Então, use o comando localedef para criar e instalar
          locales não listados no arquivo glibc-2.37/localedata/SUPPORTED quando você
          precisar deles. Por exemplo, os seguintes dois locales são
          necessários para alguns testes posteriormente neste capítulo:
        
        localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true
localedef -i ja_JP -f SHIFT_JIS ja_JP.SJIS 2> /dev/null || true
        
          
          
            Nota
          
          
            A Glibc agora usa a libidn2 quando resolver nomes
            internacionalizados de domínio. Essa é uma dependência de tempo
            de execução. Se essa capacidade for necessária, [então] as
            instruções para instalar a libidn2 estão na 
            página da libidn2 do BLFS.
          
         
       
      
        
          8.5.2. Configurando a
          Glibc
        
        
          
            8.5.2.1. Adicionando o nsswitch.conf
          
          
            O arquivo /etc/nsswitch.conf
            precisa ser criado, pois os padrões da Glibc não funcionam bem em
            um ambiente de rede de comunicação.
          
          
            Crie um novo arquivo /etc/nsswitch.conf executando o seguinte:
          
          cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf
passwd: files
group: files
shadow: files
hosts: files dns
networks: files
protocols: files
services: files
ethers: files
rpc: files
# End /etc/nsswitch.conf
EOF
         
        
          
            8.5.2.2. Adicionando Dados de Fuso Horário
          
          
            Instale e configure os dados de fuso horário com o seguinte:
          
          tar -xf ../../tzdata2022g.tar.gz
ZONEINFO=/usr/share/zoneinfo
mkdir -pv $ZONEINFO/{posix,right}
for tz in etcetera southamerica northamerica europe africa antarctica  \
          asia australasia backward; do
    zic -L /dev/null   -d $ZONEINFO       ${tz}
    zic -L /dev/null   -d $ZONEINFO/posix ${tz}
    zic -L leapseconds -d $ZONEINFO/right ${tz}
done
cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO
zic -d $ZONEINFO -p America/New_York
unset ZONEINFO
          
            
              O significado dos comandos zic:
            
            
              - 
                
zic -L
                /dev/null ...
               
              - 
                
                  Isso cria fusos horários posix sem quaisquer segundos
                  bissextos. É convencional colocá-los em ambos zoneinfo e zoneinfo/posix. É necessário colocar os
                  fusos horários POSIX em zoneinfo, do contrário várias suítes de
                  teste reportarão erros. Em um sistema embarcado, onde o
                  espaço é apertado e você não pretende nunca atualizar os
                  fusos horários, você poderia economizar 1,9 MB não usando o
                  diretório posix, mas alguns
                  aplicativos ou suítes de teste poderiam produzir algumas
                  falhas.
                
               
              - 
                
zic -L
                leapseconds ...
               
              - 
                
                  Isso cria fusos horários corretos, incluindo segundos
                  bissextos. Em um sistema embarcado, onde o espaço é
                  apertado e você não pretende nunca atualizar os fusos
                  horários ou se importa com a hora correta, você poderia
                  economizar 1,9 MB omitindo o diretório right.
                
               
              - 
                
zic ... -p
                ...
               
              - 
                
                  Isso cria o arquivo posixrules. Nós usamos New York, pois
                  POSIX exige que as regras de horário de verão estejam de
                  acordo com regras dos Estados Unidos da América do Norte.
                
               
            
           
          
            Uma maneira para determinar o fuso horário local é a de executar
            o seguinte script:
          
          tzselect
          
            Depois de responder à umas poucas perguntas a respeito do local,
            o script retornará o nome do fuso horário (por exemplo,
            America/Edmonton). Existem
            também alguns outros possíveis fusos horários listados em
            /usr/share/zoneinfo, tais como
            Canada/Eastern ou
            EST5EDT que não são
            identificados pelo script, mas podem ser usados.
          
          
            Então crie o arquivo /etc/localtime
            executando:
          
          ln -sfv /usr/share/zoneinfo/<xxx> /etc/localtime
          
            Substitua <xxx>
            pelo nome do fuso horário selecionado (por exemplo,
            Canada/Eastern).
          
         
        
          
            8.5.2.3. Configurando o
            Carregador Dinâmico
          
          
            Por padrão, o carregador dinâmico (/lib/ld-linux.so.2) procura em /usr/lib por bibliotecas dinâmicas que são
            necessárias para aplicativos assim que são executados.
            Entretanto, se existirem bibliotecas em outros diretórios
            diferentes do /usr/lib, [então]
            esses precisam ser adicionados ao arquivo /etc/ld.so.conf para a finalidade de que o
            carregador dinâmico encontre elas. Dois diretórios que são
            comumente conhecidos por conterem bibliotecas adicionais são
            /usr/local/lib e /opt/lib; então adicione esses diretórios ao
            caminho de busca do carregador dinâmico.
          
          
            Crie um novo arquivo /etc/ld.so.conf executando o seguinte:
          
          cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf
/usr/local/lib
/opt/lib
EOF
          
            Se desejado, o carregador dinâmico também pode pesquisar um
            diretório e incluir o conteúdo de arquivos encontrados lá.
            Geralmente os arquivos nesse diretório include são uma linha
            especificando o caminho de biblioteca desejado. Para adicionar
            essa capacidade, execute os seguintes comandos:
          
          cat >> /etc/ld.so.conf << "EOF"
# Add an include directory
include /etc/ld.so.conf.d/*.conf
EOF
mkdir -pv /etc/ld.so.conf.d