From Fedora Project Wiki

< User:Patches‎ | PackagingDrafts

Revision as of 00:30, 19 January 2014 by Patches (talk | contribs) (first draft)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Replacing a directory with a symlink or vice versa

Due to a known limitation with RPM, it is not possible to replace a directory with a symlink, nor is it possible to replace a symlink with a directory, without RPM producing file conflict errors while trying to install the package. For more information on the issues involved, refer to bug 447156 and bug 646523.

To work around this problem, you must include a %pretrans scriptlet written in lua that manually performs the conversion prior to RPM attempting to install the package. Please use whichever of the two following snippets is necessary in packages that need this transition, replacing <path to dir> with the path to the directory that is being converted.

Scriptlet to replace a directory with a symlink

%pretrans -p <lua>
st = posix.stat("<path to dir>")
if st and st.type == "directory" then
  os.execute("rm -rf <path to dir>")
end

Scriptlet to replace a symlink with a directory

%pretrans -p <lua>
st=posix.stat("<path to dir>")
if st and st.type == "link" then
  os.remove("<path to dir>")
  posix.mkdir("<path to dir>")
end