Esta seção é opcional. Se o(a) pretenso(a) usuário(a) não for um(a) programador(a) e não planeja fazer qualquer depuração do software do sistema, [então] o tamanho do sistema pode ser reduzido em cerca de 2 GB removendo-se os símbolos de depuração, e algumas entradas desnecessárias da tabela de símbolo, de binários e de bibliotecas. Isso não causa nenhum inconveniente real para um(a) usuário(a) típico(a) do Linux.
A maioria das pessoas que usa os comandos mencionados abaixo não experiencia quaisquer dificuldades. Entretanto, é fácil cometer um erro e tornar o novo sistema inutilizável. Portanto, antes de executar os comandos strip, é uma boa ideia produzir uma cópia de segurança do sistema LFS no estado atual dele.
Um comando strip com a
opção --strip-unneeded
remove
todos os símbolos de depuração de um binário ou de uma biblioteca.
Também remove todas as entradas da tabela de símbolo não necessitadas
pelo vinculador (para bibliotecas estáticas) ou pelo vinculador
dinâmico (para binários vinculados dinamicamente e bibliotecas
compartilhadas).
Os símbolos de depuração para bibliotecas selecionadas são preservados em arquivos separados. Essa informação de depuração é necessária se executar testes de regressão com valgrind ou gdb posteriormente, no BLFS.
Observe que o strip
sobrescreverá o binário ou arquivo de biblioteca que ele estiver
processando. Isso pode quebrar os processos usando código ou dados
oriundos do arquivo. Se o processo executando o strip for afetado, [então] o
binário ou biblioteca sendo despojado pode ser destruído; isso pode
tornar o sistema completamente inutilizável. Para evitar esse
problema, nós copiamos algumas bibliotecas e binários para
/tmp
, despojamos elas lá e as
reinstalamos com o comando install. (A entrada relacionada em
Seção 8.2.1, “Problemas de
Atualização” dá a justificativa para usar o comando install aqui).
O nome do carregador de ELF é ld-linux-x86-64.so.2 em sistemas de 64 bits e ld-linux.so.2 em sistemas de 32 bits. A construção abaixo seleciona o nome correto para a arquitetura atual, excluindo qualquer coisa terminada com “g”, no caso dos comandos abaixo já tiverem sido executados.
Se existir algum pacote cuja versão seja diferente da versão
especificada pelo livro (ou seguindo um aviso de segurança ou
satisfazendo preferência pessoal), [então] possivelmente seja
necessário atualizar o nome de arquivo da biblioteca em
save_usrlib
ou online_usrlib
. Falhar em
fazer isso possivelmente torne o sistema completamente
inutilizável.
save_usrlib="$(cd /usr/lib; ls ld-linux*[^g]) libc.so.6 libthread_db.so.1 libquadmath.so.0.0.0 libstdc++.so.6.0.32 libitm.so.1.0.0 libatomic.so.1.2.0" cd /usr/lib for LIB in $save_usrlib; do objcopy --only-keep-debug $LIB $LIB.dbg cp $LIB /tmp/$LIB strip --strip-unneeded /tmp/$LIB objcopy --add-gnu-debuglink=$LIB.dbg /tmp/$LIB install -vm755 /tmp/$LIB /usr/lib rm /tmp/$LIB done online_usrbin="bash find strip" online_usrlib="libbfd-2.41.so libsframe.so.1.0.0 libhistory.so.8.2 libncursesw.so.6.4 libm.so.6 libreadline.so.8.2 libz.so.1.2.13 $(cd /usr/lib; find libnss*.so* -type f)" for BIN in $online_usrbin; do cp /usr/bin/$BIN /tmp/$BIN strip --strip-unneeded /tmp/$BIN install -vm755 /tmp/$BIN /usr/bin rm /tmp/$BIN done for LIB in $online_usrlib; do cp /usr/lib/$LIB /tmp/$LIB strip --strip-unneeded /tmp/$LIB install -vm755 /tmp/$LIB /usr/lib rm /tmp/$LIB done for i in $(find /usr/lib -type f -name \*.so* ! -name \*dbg) \ $(find /usr/lib -type f -name \*.a) \ $(find /usr/{bin,sbin,libexec} -type f); do case "$online_usrbin $online_usrlib $save_usrlib" in *$(basename $i)* ) ;; * ) strip --strip-unneeded $i ;; esac done unset BIN LIB save_usrlib online_usrbin online_usrlib
Um número grande de arquivos será sinalizado como erros, por causa do formato de arquivo deles não é reconhecido. Esses avisos podem ser seguramente ignorados. Eles indicam que aqueles arquivos são scripts, não binários.