Last active
January 6, 2020 17:08
-
-
Save MitchRatquest/5c4b0ea2c2936e9f9c88fba2400c76b4 to your computer and use it in GitHub Desktop.
Change shared library path on a binary
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
BINARY='htop' | |
SHLIB_DEST="usr/lib/$BINARY" | |
if [[ $UID != 0 ]] | |
then | |
echo "please run as root" | |
exit 1 | |
fi | |
mkdir -p $SHLIB_DEST | |
cp `which $BINARY` . | |
cp $(ldd -v $BINARY | grep "=>" | awk -F"=>" '{print $2}' | awk '{print $1}' | sort | uniq) $SHLIB_DEST/ | |
cp $(which $BINARY) $SHLIB_DEST/ | |
cd $SHLIB_DEST | |
patchelf --set-rpath . $BINARY | |
#for any subsequent shlib you need to link to here too | |
if [ -f libncursesw.so.5 ] | |
then | |
patchelf --set-rpath . libncursesw.so.5 #handles libdl.so.6 in nano's case | |
fi | |
INTERPRETER=$(basename $(ldd -v $BINARY | grep "=>" | grep ld | awk '{print $1'} | uniq | head -n1) ) | |
sudo patchelf --set-interpreter /usr/lib/$BINARY/$INTERPRETER $BINARY | |
#now we need to create the binary wrapper to load all this correctly | |
cd ../.. | |
mkdir -p bin | |
cd bin | |
cat << EOF >> $BINARY | |
#!/bin/sh | |
PREVIOUSPATH=\$( echo \$LD_LIBRARY_PATH) | |
export LD_LIBRARY_PATH=/usr/lib/$BINARY | |
/usr/lib/$BINARY/$BINARY "\$@" | |
export LD_LIBRARY_PATH=\$PREVIOUSPATH | |
EOF | |
chmod 777 $BINARY | |
cd ../.. | |
tar -cvf $BINARY.tar usr/ | |
echo "ta da!" | |
echo "extract with: tar xvf $BINARY.tar on the top level" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
#!/bin/bash
mkdir -p nicegoodlibs
for BINARY in $@
do
rsync -avPL --relative $(ldd -v $BINARY | grep "=>" | awk -F"=>" '{print $2}' | awk '{print $1}' | sort | uniq) nicegoodlibs/
rsync -avPl --relative $BINARY nicegoodlibs
done
tar -cvf nicegoodlibs.tar nicegoodlibs
#if you don't want to mangle each binary, but copy over their depends wholesale
#might be good if doing an incremental version bump without a package manager, ie ipk or deb or whatever