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
ougcc -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 alvomake
que evita que o strip aconteça, e/ou sobrescrevendo um comando strip como por exemplomake 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 pacotesnoarch
verdadeiros não contêm nada que o rpmbuild possa remover deles, então é esperado que eles estejam vazios seBuildArch: noarch
estiver faltando. Se for esse o caso, faça o pacotenoarch
. -
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
togcc
org++
. Without-g
, no or insufficient information for debuginfo packages is generated, make sure that it is being used. -
Note that the default
CFLAGS
andCXXFLAGS
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
-
debuginfo package listings for Fedora, sorted by size. Most debuginfo packages roughly up to 20kB in size are candidates that should be examined - however significantly larger -debuginfo packages may suffer from the same problems too, esp. in the "missing -g" case.
-
Note that due to the split repository, each directory must be examined separately.
-
-
rpmlint >= 0.77
Want to help? Learn how to contribute to Fedora Docs ›