RPM (both versions 3.0.3 from Redhat 6.1 distribution and 3.0.4 from Redhat 6.2 distribution) will fail to upgrade a package if the new version has a symlink where the old version had a directory. Example: Package foo version 1 has a directory /foo Package foo version 2 puts its stuff in /bar, and has a symlink /foo -> /bar for compatibility. If foo-1.whatever.rpm is installed, "rpm -U foo-2.whatever.rpm" will fail. With rpm 3.0.4 the error message is "unpacking of archive failed on file /foo: cpio: unlink failed - Bad file descriptor". Version 3.0.3 gives a slightly better message, "unpacking of archive failed on file /foo: cpio: unlink failed - Is a directory". rpm -e foo followed by rpm -U foo works correctly, but foo cannot be upgraded from version 1 to version 2 by rpm unless you erase it completely first.
No version of rpm has ever supported the ability to replace a directory with a symlink. This problem is starting to be addressed in rpm-4.0, but ... I'd suggest you consider some other way to package, because it's gonna be a while before rpm can/will support the ability to replace a directory with a symlink.
*** Bug 23265 has been marked as a duplicate of this bug. ***
*** This bug has been marked as a duplicate of 3979 ***