Pacotes debuginfo

Esta página contém informações sobre pacotes debuginfo e armadilhas comuns sobre eles para empacotadores. Para obter informações de uso e uma explicação de por que os pacotes debuginfo são importantes, consulte StackTraces.

Verificando seu pacote debuginfo quanto à utilidade

Um pacote debuginfo útil contém símbolos removidos de binários ELF (*.debug em /usr/lib/debug), bem como o código-fonte relacionado a eles (em /usr/src/debug). O script que gera os pacotes é /usr/lib/rpm/find-debuginfo.sh, leia-o para obter um entendimento básico de como eles são gerados. Se o seu pacote debuginfo não contém nenhum arquivo, ou está faltando as fontes ou o tamanho dos arquivos *.debug nele é inesperadamente pequeno (normalmente *.debug são maiores do que o binário correspondente que foi removido de), é provável que haja uma falha em seu pacote. Mas nem sempre é o caso, continue lendo.

Pacotes de debuginfo inúteis ou incompletos devido a problemas de empacotamento

Pacotes de debuginfo inúteis ou incompletos geralmente são o resultado de falhas de pacote. Falhas típicas que muitas vezes se manifestam como pacotes debuginfo sem arquivos:

  • O specfile ou as rotinas de construção de pacote retiram explicitamente os símbolos dos binários. Procure invocações de strip, +install-s +, ld -s ou gcc -s etc e se livre delas (ou das sinalizações -s). O método de fazer isso varia, alguns exemplos de casos incluem patching, usando %configure ou um alvo make que evita que o strip aconteça, e/ou sobrescrevendo um comando strip como por exemplo make install STRIP=/bin/true

  • O pacote não está marcado como noarch, mas não contém nenhuma coisa dependente da arquitetura (binários nativos, caminhos dependentes da arquitetura, etc.). Os pacotes noarch verdadeiros não contêm nada que o rpmbuild possa remover deles, então é esperado que eles estejam vazios se BuildArch: noarch estiver faltando. Se for esse o caso, faça o pacote noarch.

  • find-debuginfo.sh processa apenas arquivos que são executáveis quando é executado; para fins práticos, pode-se supor que isso aconteça após a seção %install. Certifique-se de que todos os binários ELF (executáveis, bibliotecas compartilhadas, DSO) são executáveis no final de %install.

  • find-debuginfo.sh não processa binários setuid ou setgid. Há um bug relatado para o rpmbuild sobre isso, mas até que seja corrigido nas distros às quais seu pacote se destina, certifique-se de que todos os seus binários não tenham os bits setuid/setgid no final de %install, e restaure-os na seção %files usando %attr(...) /caminho/para/arquivo

Falhas que se manifestam como inesperadamente pequeno *.debug no pacote debuginfo e/ou arquivos fonte em falta:

  • The package was built without passing -g to gcc or g++. Without -g, no or insufficient information for debuginfo packages is generated, make sure that it is being used.

  • Note that the default CFLAGS and CXXFLAGS of the distro already contain -g, so if those flags are being honored, it should be already in use. If not, suboptimal debuginfo packages are not the only problem; the package is probably also compiled without the security enhancing options of recent compiler versions. Make sure that $RPM_OPT_FLAGS is being honored and used.

  • strip -g was used on the binaries; see above for possible remedies.

Useless or incomplete debuginfo packages due to other reasons

Empty debuginfo packages may also be generated in situations where there are no obvious packaging flaws present. Sometimes these are because of limitations of find-debuginfo.sh, sometimes not. Some usual cases:

  • Packages whose only architecture dependent binary part is a static library or many of them

  • R and Mono packages TODO: people knowledgeable of R and/or Mono, verify these

If you wish to disable generation of the useless debuginfo package while waiting for improvements to find-debuginfo.sh or if it’s unlikely that it could be enhanced to produce a good debuginfo for your package (for example no architecture dependent files, but package is not noarch because of the installation paths it uses), use %global debug_package %{nil} in the specfile, and be sure to add a comment next to it explaining why it was done.

Missing debuginfo packages

It is normal for noarch package builds to not produce a debuginfo package. If it’s missing in other cases (where it has not been explicitly disabled), something’s wrong. One such case is a missing %build section with some rpmbuild versions.

Don’t obsolete debuginfo packages

In case there is removed subpackage or the subpackage is changed from arch to noarch, the associated -debuginfo package might be left behind. This might be issue, when fedora-debuginfo repository is enabled during system upgrade. Nevertheless, because the debuginfo packages has no dependencies, they are parallel installable and useful for coredump analysis, don’t obsolete them anywhere.

Resources