If you build RPMs on Centos 6.X (6.5 in my case) and then try to install them on Centos 5.X (5.10 in my case), bad things happen. Ironically, bad things happen even though my RPM contains a single jar file, and is thus entirely platform independent. Here is what I see:
Running rpm_check_debug
ERROR with rpm_check_debug vs depsolve:
rpmlib(FileDigests) is needed by my-rpm-1.0.x86_64
rpmlib(PayloadIsXz) is needed by my-rpm-1.0.x86_64
If you google for a solution, most people suggest running a virtual with Centos 5 just so you can build the RPMs, but this is apparently not necessary in this simple case, as you can simply specify a few flags. Basically, Centos 5 can't decompress the default archive format, and doesn't support the new digest algorithm.
Since I am using maven-rpm-plugin to build RPMs, my modifications look as follows:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>rpm-maven-plugin</artifactId>
<version>2.1-alpha-3</version>
<configuration>
<!-- skipping irrelevant items -->
<defineStatements>
<!-- don't strip jar files, it takes forever and is useless -->
<defineStatement>__os_install_post %{nil}</defineStatement>
<!-- for Centos6 -> Centos5 forwards compatibility -->
<defineStatement>_source_filedigest_algorithm md5</defineStatement>
<defineStatement>_binary_filedigest_algorithm md5</defineStatement>
<defineStatement>_source_payload w9.bzdio</defineStatement>
<defineStatement>_binary_payload w9.bzdio</defineStatement>
</defineStatements>
</configuration>
</plugin>
If you're using fpm or rpmbuild, you can just take these lines and make them %define's in your spec.