aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas C. Villa Real <lucasvr@gmail.com>2016-12-21 12:45:23 -0200
committerLucas C. Villa Real <lucasvr@gmail.com>2016-12-21 12:45:23 -0200
commit24b9f4d8413731dbd02169a256e8129a1100e1d1 (patch)
tree5a088f61ff842c6794d611107a8404149dd109ab
parentdf516981c6d2de29af471b2acf8912e789225ba5 (diff)
downloadThirdPartyInstallers-24b9f4d8413731dbd02169a256e8129a1100e1d1.tar.xz
Improve the creation of /opt compatibility links.
-rwxr-xr-xbin/InstallPackage-RPM65
1 files changed, 39 insertions, 26 deletions
diff --git a/bin/InstallPackage-RPM b/bin/InstallPackage-RPM
index f68afa0..9dfc91e 100755
--- a/bin/InstallPackage-RPM
+++ b/bin/InstallPackage-RPM
@@ -64,13 +64,20 @@ function flatten_rpm() {
Log_Normal "Flattening directory structure."
function create_opt_links() {
- local unmanagedopt="$1"
- for pkgdir in $(basename ./opt/*)
+ local vendordir="$1"
+ local unmanagedopt="Resources/Unmanaged/opt"
+ for pkgdir in $(basename --multiple ./opt/$vendordir/*)
do
- mkdir -p "${unmanagedopt}/$pkgdir"
- for optfile in $(ls | grep -v "^opt$")
+ mkdir ${verbose} -p "${unmanagedopt}/$vendordir/$pkgdir"
+ if [ -h "/opt/$vendordir/$pkgdir" ]
+ then
+ Log_Error "Too many programs are attempting to populate /opt/$vendordir/$pkgdir"
+ Log_Error "This feature is not supported by InstallPackage-RPM at this time."
+ continue
+ fi
+ for optfile in $(basename --multiple ./opt/$vendordir/$pkgdir/*)
do
- ln -fs $target/$optfile "${unmanagedopt}/$pkgdir/$optfile"
+ ln ${verbose} -fs $target/$optfile "${unmanagedopt}/$vendordir/$pkgdir/$optfile"
done
done
}
@@ -78,61 +85,67 @@ function flatten_rpm() {
function flatten_opt_1_level() {
# Flatten 1-level dir: opt/pkgname/{bin,sbin,...}
cp ${verbose} -a ./opt/*/* .
- create_opt_links Resources/Unmanaged/opt/
+ create_opt_links ""
realpath ./opt/* | sed "s,$(realpath $PWD),,g" >> Resources/UnmanagedFiles
}
function flatten_opt_2_levels() {
# Flatten 2-levels dir: opt/vendorname/pkgname/{bin,sbin,...}
cp ${verbose} -a ./opt/*/*/* .
- for vendordir in $(basename ./opt/*)
+ for vendordir in $(basename --multiple ./opt/*)
do
- create_opt_links Resources/Unmanaged/opt/$vendordir
+ create_opt_links "$vendordir"
done
realpath ./opt/*/* | sed "s,$(realpath $PWD),,g" >> Resources/UnmanagedFiles
}
if [ -d "./usr" ]
then
- cp -a ./usr/* .
+ cp ${verbose} -a ./usr/* .
rm -rf -- ./usr
fi
if [ -d "./etc" ]
then
mkdir -p Resources/Defaults/Settings
- mv ./etc/* Resources/Defaults/Settings
+ mv ${verbose} ./etc/* Resources/Defaults/Settings
rm -rf -- ./etc
fi
+ if [ -d "./lib64" ]
+ then
+ Quiet rmdir lib
+ if [ ! -d "./lib" ]
+ then mv ./lib64 lib
+ fi
+ fi
+ if [ -d "./var" ]
+ then
+ mkdir -p Resources/Unmanaged/$goboVariable
+ find ./var | sed "s,./var,$goboVariable,g" >> Resources/UnmanagedFiles
+ mv ${verbose} ./var/* Resources/Unmanaged/$goboVariable
+ rm -rf -- ./var
+ fi
if [ -d "./opt" ]
then
+ # Prevent the creation of backlinks to directories that would be pruned later on
+ find share -type d | xargs rmdir -p --ignore-fail-on-non-empty
+ rmdir * 2> /dev/null
+
rootdirs="^bin$\|^sbin$\|^lib$\|^lib64$\|^libexec$\|^include$\|^share$"
mkdir -p Resources/Unmanaged/opt
if ls ./opt/* 2> /dev/null | grep -q "$rootdirs"
then
+ Log_Verbose "Flattening 1-level /opt directory"
flatten_opt_1_level
elif ls ./opt/*/* 2> /dev/null | grep -q "$rootdirs"
then
+ Log_Verbose "Flattening 2-level /opt directory"
flatten_opt_2_levels
else
- Log_Error "Could not determine this package's /opt structure, assuming 1-level"
- flatten_opt_1_level
+ Log_Error "Could not determine this package's /opt structure, assuming 2-level"
+ flatten_opt_2_levels
fi
rm -rf -- ./opt
fi
- if [ -d "./lib64" ]
- then
- Quiet rmdir lib
- if [ ! -d "./lib" ]
- then mv ./lib64 lib
- fi
- fi
- if [ -d "./var" ]
- then
- mkdir -p Resources/Unmanaged/$goboVariable
- find ./var | sed "s,./var,$goboVariable,g" >> Resources/UnmanagedFiles
- mv ./var/* Resources/Unmanaged/$goboVariable
- rm -rf -- ./var
- fi
if [ -e Resources/UnmanagedFiles ]
then
# If multiple RPM files are being merged, then ensure we have no dups