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" |
#!/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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is enough to get orca copied over. Once you rsync that tar, extract it, then you have to run these:
export LD_LIBRARY_PATH=/lib:/usr/local/lib/orca
modprobe snd_seq
orca --portmidi-list-devices
#you should see something like:
#ID: 0 Name: f_midi
orca --portmidi-output-device 0 midi
#in another terminal:
pd
#these settings worked for me:
#OSS-midi -> input devices -> /dev/midi3
#I also have midi USB OTG configured
######NOTE
#I had accidentally typed pd in a terminal on my dekstop, and f_midi is the USB OTG midi, so it was working from 1 computer to another
#To make it work as intended (localhost) you need snd_card_virmidi enabled under audio in the kernel config
#I'm rebuilding a kernel to test this
#https://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick
#If you set LD_PRELOAD to the path of a shared object, that file will be loaded before any other library (including the C runtime, libc.so).
LD_PRELOAD=/path/to/my/malloc.so /bin/ls
#update feb26: if you use LD_PRELOAD, you need to unset it after you run the command or you risk segfaulting
export LD_PRELOAD=