Problemas comunes RpmLint

De Wiki de la Comunidad Mandriva


Esta es una recopilación informativa sobre el uso de rpmlint. Ten en cuenta que si estás confundido por un mensaje de rpmlint, lo primero que debes hacer es usar opción "-i" de rpmlint, de esta manera tendrás un texto explicativo adicional.

La información aquí proporcionada no es una "solución a todos" los escenarios y debe ser cuidadosamente considerada dentro del contexto de la construcción de tu RPM. Algunas alertas de rpmlint no son alarmantes para algunos paquetes, por ejemplo, las advertencias sobre los grupos o usuarios no estándares, o sobre los ejecutables setuid pueden ser perfectamente adecuados para algunos paquetes.


Contenido

description-line-too-long

Línea de descripción de demasiado larga:

Tu linea de descripción (sección %description) excede los 79 caracteres. Esta no es considerada una buena práctica.

  • Divida la descripción en varias lineas, asegurandoce de que cada linea no supere los 79 caracteres.

file-not-utf8

Indica que la codificación de algún archivo de texto, usualmente alguno de documentación, no es utf8.

  • Típicamente esto se soluciona ejecutando iconv sobre el archivo sin comprimir, antes de la instalación.


Para mayor información sobre ICONV, pueden remitirse a su manual. Por ejemplo, para recodificar en utf-8 un archivo de nombre AUTORES, codificado en latin-1, se podría ejecutar:

iconv -f iso8859-1 -t utf-8 AUTORES > AUTORES.conv && mv -f AUTORES.conv AUTORES

no-binary

El paquete no contiene ningún archivo binario, por lo que debe tratarse como noarch.


Solución: Se debe modificar el parámetro BuildArchitectures, del archivo SPEC como: noarch

no-default-runlevel

Esto sucede cuando el nivel de ejecución no se encuentra especificado en el script init.

Solución: Se debe agregar una linea dentro de la cabecera del script init.


2345 son los runlevels por defecto. Cuando se instale, el paquete podrá ejecutarse en los niveles 2, 3, 4 y 5; y se detendrá en 1 y 6. 04 y 70 son ordenes de comienzo y detención. Para mas información vea el howto del script init.

no-documentation

Indica que rpmlint no encuentra archivos marcados con %doc. Hay casos en que esto es aceptable:

  • El paquete no tiene documentación. Es raro y en general es una mala idea; todo paquete debe tener alguna clase de documentación y al menos tener un texto de su licencia. Sin embargo, algunos paquetes tienen sistemas de ayuda internos.
  • La documentación se incluye en un subpaquete -doc. Es raro ya que la mayoria de los paquetes deberían tener la licencia, el registro de cambios (changelog) u otra información que seria mejor poner en el paquete principal y no en un subpaquete -doc.
  • Es un subpaquete y la documentación se encuentra en el paquete principal. Esto es común en los subpaquetes -devel, pero debe hacer una revisión adicional para asegurarse de que la documentación para desarrolladores esta incluida en el subpaquete -devel.

no-soname

Indicates that the specified shared library does not have an soname (DT_SONAME ELF field). If an executable is linked with a shared object which has a DT_SONAME field, when the executable is run the dynamic linker will attempt to load the shared object specified by the DT_SONAME field rather than the using the file name given to the linker. See man page LD(1).

  • Consider passing (or patching) link flags to the build process such as '-Wl,-soname,<SONAME>' where <SONAME> is the appropriate soname to use. Be careful not to add an soname to conventional binaries. To see examples of how sonames are used, you can view the DT_SONAME field of libraries, using the following:


shlib-with-non-pic-code

Indica que una libreria compartida no contiene una posición independiente de código. Un código Non PIC en las librerias compartidas podría ocasionar problemas con algunos software como SELinux, negandose a cargarlas. A menudo es causado por las librerias que han sido compiladas sin la opción -fPIC o ser enlazadas estaticamente con un non-PIC code.

  • Asegurarse que las librerias sean compiladas con la opción -fPIC. Ver páginas man GCC(1).
  • Las librerias están siendo compiladas contra allegro, podrían estar vinculadas con liballeg_unsharable.a. Esto puede ser causado por el proceso de construcción llamado allegro-config --libs que contiene '-lalleg_unsharable' en la salida. Esto puede ser reparado parchando el proceso de construcción quitando '-lalleg_unsharable' de la salida usando sed. Ver páginas man SED(1).

standard-dir-owned-by-package

Ejemplo de error: Mi-paquete standard-dir-owned-by-package /usr/share

Indica que el paquete en cuestión, se adueña del directorio /usr/share, que es parte de la jerarquía estándar de directorio. Esto puede conducir a cambios de permisos y pertenencia que no cumplan con el estándar.

Solución: No debe intentar crear a través del paquete, directorios del sistema.

summary-ended-with-dot

The summary field in the spec file, ends in a period '.' character. This is not considered good style.

  • Simply remove the trailing period from the summary field.


unused-direct-shlib-dependency

A binary is linked against a library but doesn't actually call any of the functions in it. This often happens when linking against a library which uses pkgconfig; the pkgconfig file cannot know which specific functions your binary may need to call, so it tells you to link against all of the possibilities.

One fix for packages which use libtool is to put this in your %build section after the %configure call:

sed -i -e 's! -shared ! -Wl,--as-needed\0!g' libtool


wrong-file-end-of-line-encoding

The file has incorrect end-of-line encoding, usually caused by creation or modification on a non-Unix system. It could prevent the file from being displayed correctly in certain circumstances. UNIX and Linux use the Line-Feed character <LF>, whilst Windows and DOS use both a Carriage Return and Line Feed <CRLF>.

  • Strip the Carriage Returns by using sed, using dos2unix is not necessary. See man page SED(1).

sed -i 's/\r//' <file_to_strip>


non-conffile-in-etc

W: foo-package non-conffile-in-etc /etc/xdg/menus/applications-merged/foo-package.menu

Un archivo no ejecutable se instalo en /etc. Todos los archivos de ese tipo instalados en /etc deben ser archivos de configuración. Marquelos con %config dentro del archivo spec en la sección %file.

incoherent-version-in-changelog

W: foo-package incoherent-version-in-changelog 0.6.1-1 0.6.1-1..fc6

Your last entry in %changelog contains a version that is not coherent with the current version of your package.

Solution:- Check Last entry under changelog section for version and release tags in SPEC file.

script-without-shebang

E: foo-package script-without-shellbang /var/www/foo-package/plugins/foo.php

This executable text file does not contain a shebang, thus it cannot be properly executed. Often this is a sign of spurious executable bits for a non-script file, but can also be a case of a missing shebang. To fix this error, find out which case of the above it is, and either remove the executable bits or add the shebang.

Solution:- You forgot to unset executable bits on files reported by this error. Or you can add shebang.

wrong-script-end-of-line-encoding

E: foo-package wrong-script-end-of-line-encoding /var/www/foo-package/plugins/foo.php

This script has wrong end-of-line encoding, usually caused by creation or modification on a non-Unix system. It will prevent its execution.

Solution:- Create files on Linux only. Don't create files on non-Unix environment and add it in package.

version-control-internal-file

E: foo-package version-control-internal-file /var/www/foo-package/CVS/Entries

You have included file(s) internally used by a version control system in the package. Move these files out of the package and rebuild it.

Solution:- CVS directories and anything under them should just be deleted.

zero-length

E: foo-package zero-length /var/www/foo-package/foo.js

Solution:- These shouldn't be included unless they're required for something. Trick here to remove all zero length files.

non-standard-group

W: foo-package non-standard-group Networking/Other

El grupo especificado en el archivo spec no es valido. Para conocer los grupos validos, lea la documentación de la distribución sobre RPM.

En Mandriva vea el archivo /usr/share/doc/rpm/GROUPS que contiene los nombres de grupos validos.

invalid-license

W: foo-package invalid-license GNU General Public License (GPL)

No se reconoce el nombre de la licencia . Solución:- Vea http://fedoraproject.org/wiki/Packaging/LicensingGuidelines y http://fedoraproject.org/wiki/Licensing

non-coherent-filename

W: foo-package non-coherent-filename foo-package-0.99-0.Fedora.src.rpm

The file which contains the package should be named <NAME>-<VERSION>-<RELEASE>.<ARCH>.rpm.

Solution:- Your package name must be of form <NAME>-<VERSION>-<RELEASE>.<ARCH>.rpm

strange-permission

W: foo-package strange-permission foo-package.spec 0744

Un archivo de los listados en su paquete tiene permisos extraños. Normalmente un archivo debe tener los permisos 0644.

Solución:- Cambie los permisos del archivo dentro del SPEC.

hardcoded-library-path

E: foo-package hardcoded-library-path in %{buildroot}/usr/lib/menu/

A library path is hardcoded to one of the following paths: /lib, /usr/lib. It should be replaced by something like /%{_lib} or %{_libdir}.

Solution:- Don't hardcode path in SPEC rather use macros .

incoherent-init-script-name

incoherent-init-script-name (Nombre del script de inicio no concuerda)

Solución:- El nombre del script de inicio debe ser el mismo que el del paquete en minúsculas.

incorrect-locale-el

E: incorrect-locale-el /usr/share/locale/gr/LC_MESSAGES/foo.mo

Solucion:- Las traducciones Griegas han cambiado de el a gr. El mantenedor del paquete deberá notificar a los desarrolladores o solucionarlo con un parche.

More Information on Rpmlint

You can directly see files installed by package rpmlint under [[file:///usr/share/rpmlint rpmlint] . There you will find various python files for different types of package checking e.g.

File Name		Purpose
AbstractCheck.py	Abstract class to hold all the derived classes.
BinariesCheck.py	check binary files in a binary rpm package.
Config.py		handle configuration options. To be used from config files.
DistributionCheck.py	check the Distribution specificities in a binary rpm package.
DocFilesCheck.py        doc file depnedency check.
FHSCheck.py		check FHS conformity.
FilesCheck.py 		test various aspects on files: locations, owner, groups.
Filter.py 		filter the output of rpmlint to allow exceptions.
I18NCheck.py 		checks i18n bugs.
InitScriptCheck.py      check init scripts (files in /etc/rc.d/init.d)
LSBCheck.py             LSB non compliance checks
MenuCheck.py            Menu related checking.
MenuXDGCheck.py         check xdg file format violation.
NamingPolicyCheck.py    Check package names according to their content.
PamCheck.py             Apply pam policy.
Pkg.py 			provide an API to handle a rpm package either by accessing.
PostCheck.py            Check post/pre scripts.
rpmlint.py 		main entry point: process options, load the checks and run.
SignatureCheck.py 	check the presence of a PGP signature.
SourceCheck.py 		verify source package correctness.
SpecCheck.py 		check the spec file of a source rpm.
TagsCheck.py 		Check a package to see if some rpm tags are present.
ZipCheck.py 		Verify Zip/Jar file correctness.


Versión traducida y adaptada desde https://fedoraproject.org/wiki/Common_Rpmlint_issues


Enlaces

Para más información sobre el proyecto rpmlint consulte en Rpmlint RT

Herramientas personales