Rpmlint in ROSA Linux is configured to detect the problems described below. Note that you can obtain a short description of any problem by invoking rpmlint with '--explain <problem-identifier>' option.

This page tries to provide more detailed information at least for non-trivial issues.



Your package has been marked as noarch, but contains a binary that is architecture-specific.


You have a file whose name looks like one for backup files, usually created by an editor or resulting from applying unclean (fuzzy, or ones with line offsets) patches.


The reported file in the zip fails the CRC check. Usually this is a sign of a corrupt zip file.


This package installs an ELF binary in /etc. This is forbidden by the Filesystem Hierarchy Standard (FHS).


The binary or shared library defines the PATH'. Usually this is a bad thing because it hard codes the path to search libraries and so it makes it difficult to move libraries around. Most likely you will find a Makefile with a line like:

gcc test.o -o test -Wl,--rpath.

If the program uses ./configure, you can probably add --disable-rpath (verify with ./configure --help to see if the option is available).

You can look at the Debian wiki for more information.

If you can not change that easily, you can use chrpath -d on the given file at the end of %build. If you do so, do not forget to add a BuildRequires2: chrpath to your spec.


The use of BuildPreReq is deprecated, build dependencies are always required before a package can be built. Use plain BuildRequires instead.


The symlink points to a compressed file but doesn't use the same extension.


Строки описания не должны превышать 79 символов. Если строка превышает это число, разделите ее на две строки.


Your package has a dependency on a devel package but it's not a devel package itself.


Файл из пакета находится в /home. Пакетам не разрешается устанавливать файлы в этом каталоге.


Файл из пакета находится в /mnt. Пакетам не разрешается устанавливать файлы в этом каталоге.


Файл из пакета находится в /opt. Пакетам не разрешается устанавливать файлы в этом каталоге.


Файл из пакета находится в /tmp. Пакетам не разрешается устанавливать файлы в этом каталоге.


Файл из пакета находится в /usr / local. Пакетам не разрешается устанавливать файлы в этом каталоге.


Файл из пакета находится в /var / local. Пакетам не разрешается устанавливать файлы в этом каталоге.


This debuginfo package contains no files. This is often a sign of binaries being unexpectedly stripped too early during the build, rpmbuild not being able to strip the binaries, the package actually being a noarch one but erratically packaged as arch dependent, or something else. Verify what the case is, and if there's no way to produce useful debuginfo out of it, disable creation of the debuginfo package.


This crontab file has executable bit set, which is refused by modern cron


The package mixes up libraries and executables. Mixing up these both types of files makes upgrades quite impossible.


Executables must not be marked as config files because that may prevent upgrades from working correctly. If you need to be able to customize an executable, make it for example read a config file in /etc/sysconfig.


Menu files (those installed to /usr/lib/menu/) should not be executable


This text file has executable bit set, but is meant to be sourced, not executed.


Don't include dependencies like "Requires: libdvdread3" in your spec file. Library dependencies are managed automatically, so if your program is linked against libdvdread.so.3, the libdvdread3 package will be an automatic dependency. Also, this isn't portable to architectures like amd64, where the package is named lib64dvdread3.

If you really need a library dependency, e.g. to force the upgrade to a new version, use the virtual name provided by that package, in this example "Requires: libdvdread". (Note, however, that rpmlint will still claim on such dependency)


Кодировка имени этого файла не UTF-8. Переименуйте его.


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

Don't hardcode path in spec files, use macros instead.


You have individual apache configuration .htaccess file(s) in your package. Replace them by a central configuration file in /etc/, according to the web application packaging policy.


The log file or directory name should be the same as the package name in lower case, i.e. /etc/logrotate.d/<package name>.


The filename of your lock file in /var/lock/subsys/ is incoherent with your actual init script name. For example, if your script name is httpd, you have to use 'httpd' as the filename in your subsys directory. It is also possible that rpmlint gets this wrong, especially if the init script contains nontrivial shell variables and/or assignments. These cases usually manifest themselves when rpmlint reports that the subsys name starts a with '$'; in these cases a warning instead of an error is reported and you should check the script manually.


The package name should contain the major version of the library. For example, if a package provides libxml2.so* library, it should contain 'xml2' in its name ('libxml2' or 'lib64xml2')


You have /usr/info/dir or /usr/share/info/dir in your package. It will cause conflicts with other packages and thus is not allowed. Please remove it.


This package contains info files and provides no %post scriptlet containing a call to install-info.


This package contains info files and provides no %postun scriptlet containing a call to install-info.


The init script name should not contain a dot in its name.


The init script should have at least the execution bit set for root in order for it to run at boot time.


The package contains an init script but doesn't contain a %post with a call to chkconfig or add-service.


The package contains an init script but doesn't contain a %preun with a call to chkconfig or del-service.


An invalid dependency has been detected. It usually means that the build of the package was buggy. A list of dependencies treated as invalid can be found in the /usr/share/rpmlint/TagsCheck.py (see DEFAULT_INVALID_REQUIRES declaration). The list can be overridden using the InvalidRequires option.


.desktop file is not valid, check with desktop-file-validate


Don't include files in /tmp or /home in your package.


Package installs localization files to /usr/share/locale/ subdirectory not corresponding to any valid language


The symbolic link references the wrong file. It should reference the shared library.


Package installs man files to /usr/share/man/ or /usr/man/ subdirectory not corresponding to any valid language


The section field of the menu entry isn't standard. List of valid sections can be found in the beginning of the /usr/share/rpmlint/MenuCheck.py file.


The soname of the library is neither of the form lib<libname>.so.<major> or lib<libname>-<major>.so.


The menu title contains invalid characters like '/'.


The version string must not contain the pre, alpha, beta or rc suffixes because when the final version will be out, you will have to use an Epoch tag to make the package upgradable. Instead put it in the release tag, prefixed with something you have control over.


If you split out library packages, you should use the %mklibname macro to generate the name of the library package. Further information on the usage of %mklibname are in the library policy section.


Every shared object is expected to be linked against libc.


Menu files should go to /usr/lib/menu, not /usr/lib64/menu.


A menu file exists in the package but no %post scriptlet is present to call update-menus.


A menu file exists in the package but no %postun scriptlet is present to call update-menus.


The binary lacks a PT_GNU_STACK section. This forces the dynamic linker to make the stack executable. Usual suspects include use of a non-GNU linker or an old GNU linker version.


This package contains a kernel module but provides no call to depmod in the %post scriptlet.


This package contains a kernel module but provides no call to depmod in the %postun scriptlet.


Noarch package installs something to /usr/lib64/python. This should not be the case.


The package should be of the noarch architecture because it doesn't contain any binaries. Add BuildArchitectures: noarch to the spec file.


The init script doesn't contain a chkconfig line to specify the runlevels at which to start and stop it.


rpmlint has detected that the package uses some capabilities not provided by its dependencies. E.g., the package installs Perl modules but does not require Perl itself.


The description of the package is empty or missing. To add it, insert a %description section in your spec file, add a textual description of the package after it, and rebuild the package.


There is no Group tag in your package. You have to specify a valid group in your spec file using the Group tag.


There is no License tag in your spec file. You have to specify one license for your program. To insert this tag, just insert a 'License' in your specfile.


The longtitle field isn't present in the menu entry.


This text file contains a shebang or is located in a path dedicated for executables, but lacks the executable bits and cannot thus be executed. If the file is meant to be an executable script, add the executable bits, otherwise remove the shebang or move the file elsewhere.


/usr/lib/menu must not contain anything else than normal files.


File should be tagged %ghost.


Your package name contains an illegal character. Use only alphanumeric symbols in your package name.


Your version number contains an illegal character. Use only lowercase letters and/or numbers.


Your version number contains an illegal character. Use only lowercase letters and/or numbers.


This crontab file is writeable by other users as its owner, which is insecure


The file can't be read by everybody. If this is expected (for security reasons), the file should be added to the list of rpmlint exceptions.


The menu file isn't readable. Check the permissions.


If you need log files owned by a non-root group, just create a subdir in /var/log and put your log files in it.


If you need log files owned by a non-root user, just create a subdir in /var/log and put your log files in it.


A standard directory should have permission set to 0755. If you get this message, it means that you have wrong directory permissions in some dirs included in your package.


A standard executable should have permission set to 0755. If you get this message, it means that you have a wrong executable permissions in some files included in your package.


The value of the Group tag in the package is not valid. Run rpmlint --explain non-standard-group to get list of valid groups


.desktop file is not encoded in UTF-8. Convert it for example using iconv(1).


The package contains files in non versioned directories. This makes it impossible to have multiple major versions of the libraries installed. One solution can be to change the directories which contain the files to subdirs of /usr/lib/<name>-<version> or /usr/share/<name>-<version>. Another solution can be to include a version number in the file names themselves.


The menu file has not been migrated to new XDG menu system.


The package contains a %pre, %post, %preun or %postun script that references an external binary that is however not explicitely listed in the appropriate requires tag (Requires(pre):, Requires(post):, Requires: or Requires:, respectively). Fixing this is necessary so that (de)installation of the package happens in the correct order, e.g. the packages necessary for executing the %post script are already installed.


Packages get signed during upload process, so just ignore this or add addFilter("E:.* no-signature") into your rpmlint config file.


In your init script (/etc/rc.d/init.d/your_file), you don't have a 'status' entry, which is necessary for good functionality.


There is no Summary tag in your package. You have to describe your package using this tag. To insert it, just insert a tag 'Summary'.


The title field isn't present in the menu entry.


The documentation files of this package are not listed with the standard %doc tag.


There is no Release tag in your package. You have to specify a release using the Release tag.


There is no Version tag in your package. You have to specify a version using the Version tag.


Detected old-style menu file (installed to /usr/share/gnome/apps or /usr/share/applnk)


This library package must not contain non library files to allow 64 and 32 bits versions of the package to coexist.

percent-in-conflicts, percent-in-dependency, percent-in-obsoletes, percent-in-provides

The tag contains a "%" in a context which might indicate it being fallout from an rpm macro/variable which was not expanded during build.


The package contains an init script but doesn't call chkconfig in its %post script.


This package contains info files and its %post doesn't call install-info.


A menu file exists in the package but its %post scriptlet doesn't call update-menus.


This package contains a kernel module but its %post scriptlet calls depmod for the wrong kernel.


A menu file exists in the package but its %postun scriptlet doesn't call update-menus.


This package contains a kernel module but its %postun scriptlet calls depmod for the wrong kernel.


The use of PreReq is deprecated. In the majority of cases, a plain Requires is enough and the right thing to do. Sometimes Requires(pre), Requires(post), Requires(preun) and/or Requires(postun) can also be used instead of PreReq.


The package contains an init script but doesn't call chkconfig in its %preun script.


Every binary executable is expected be linked against libc.


[ For rosa2019.1 and newer platforms ] [ Temporary disabled ]

This includes:


Packages of Python modules must be named not as python-foo, but as python2-foo or python3-foo to include Python version in the name of the package.


This build configuration file contains rpaths which will be introduced into dependent packages.


A file in /var/lib/games/ is a configuration file. Store your conf files in /etc instead.


This executable text file does not contain a shebang (#!/bin/sh), 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 by looking at the top of the file, and either remove the executable bits or add the shebang.

Add sh shebang:
sed -i -e '1d;2i#!/bin/sh' foo.sh
Add Perl shebang:
sed -i -e '1d;2i#!/usr/bin/perl' foo.pl
Add Python shebang:
sed -i -e '1d;2i#!/usr/bin/python' foo.py


The file is setgid. Usually this is a packaging bug. If this is a game, then you should use the proper rpm group, or location.


The file is setuid; this may be dangerous, especially if this file is setuid root. Sometimes file capabilities can be used instead of setuid bits.


The file seems to be an ELF shared object, but it doesn't have DT_NEEDED entries.


This text file contains a shebang, but is meant to be sourced, not executed.


This package owns a directory that is part of the standard hierarchy, which can lead to default directory permissions or ownerships being changed to something non-standard.

You should not make Systems standard directory's to belong to your package. In Mandriva, basic system directories are owned by the filesystem package.


The package installs a statically linked binary or object file. Usually this is a packaging bug. If not, the package should be included in the exception file for rpmlint.


The package contains a subdirectory in /usr/bin. It's not permitted to create a subdir there.


A gettext translation file (those ending in .mo) is not properly tagged by language. This information might be useful in the future to be able to leave out certain languages during installation. The %find_lang macro should be used to automatically tag such files.


While your daemon is running, you have to put a lock file in /var/lock/subsys/. To see an example, look at this directory on your machine and examine the corresponding init scripts.


Summary ends with a dot. Remove it.


Summary begins with whitespace. Remove it.


Summary must fit on one line. Please make it shorter.


Summary must not exceed 79 characters.


Symlink contains superfluous segments - e.g., foo/../bar/


This crontab file is a symbolic link, which is insecure and refused by newer version of cron


The symlink references a directory beyond the root directory "/".


The character encoding of the value of this tag is not UTF-8.


This package contains a file whose path contains something that looks like an unexpanded macro. This is often the sign of a misspelling. Please check your specfile.


This package provides 2 times the same capacity. It should only provide it once.


The menu command uses a launcher but there is no dependency in the package that contains it.


You use $RPM_SOURCE_DIR or %{_sourcedir} in your spec file. If you have to use a directory for building, use %{buildroot} instead.


Update pam file to use include instead of pam_stack.


You have included file(s) internally used by a version control system in the package. Remove them.


A file or directory in the package is installed with world writable permissions, which is most likely a security issue.


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


This script uses an incorrect interpreter in its shebang. The script interpreter should be a full path to a packaged interpreter, which means it should not point to /usr/local/bin for example.


The package includes files of zero length. In many cases this is done by mistake and such files should be dropped.