Hi!
Az lenne a kerdesem, hogy userkent tudok-e hasznalni shared libeket. Konkretan arrol lenne szo, hogy van egy program, amihez kellenek olyan libek, amik altalaban nincsenek fent egy atlagos Linux rendszeren. Es valahogy ra kellene venni a programot, hogy azokat a libeket is hasznalja, amiket nem a /lib, /usr/lib stb konyvtarba tettem, de termeszetesen root jogosultsag nelkul.
Ez megoldhato?
By(t)e
TBS::Antiemes
- 749 megtekintés
Hozzászólások
Most fejből sajna nem tudom megmondani, hogy melyik környezeti változóban lehet megadni (talán LD_PATH de sorry ha nagy hülyeséget írtam, most nem tudom megnézni és ritkán használom), hogy hol keresse a libeket. Ezt meg a home könyvtáradban lévő általában .bashrc (ha bash -t használsz) fájlban lehet megadni. Remélem egy kicsit tudtam segíteni!
- A hozzászóláshoz be kell jelentkezni
LD_LIBRARY_PATH, LD_PRELOAD... RTM-nek meg javaslom:
http://tldp.fsf.hu/HOWTO/Program-Library-HOWTO-hu/shared-libraries.html
- A hozzászóláshoz be kell jelentkezni
Hi!
Koszi a valaszokat.
By(t)e
TBS::Antiemes
- A hozzászóláshoz be kell jelentkezni
Ha minden user számára telepítek a disztribúcióban meg nem található csomagot, akkor kb.
# mkdir /home/installed/package-major.minor.patchlevel
# chown admin_user /home/installed/package-major.minor.patchlevel
# chmod 700 /home/installed/package-major.minor.patchlevel
# su - admin_user
$ cd ~/tmp/package-major.minor.patchlevel
$ ./configure \
--prefix=/home/installed/package-major.minor.patchlevel \
--enable-shared --disable-static --satöbbi \
&& make \
&& make install \
&& exit
# chown -Rc root:root /home/installed/package-major.minor.patchlevel
# chmod -Rc u=rwX,g=rX,o=rX \
/home/installed/package-major.minor.patchlevel
Ha adott user telepít a maga számára, akkor ott nem kell root, és nyilván --prefix=$HOME/installed/package-major.minor.patchlevel.
A .so végű symlinkeket kézzel szoktam létrehozni szükség esetén (ezek nem a futáskori dinamikus betöltéshez kellenek, hanem az adott lib-re hivatkozó futtatható file linker általi létrehozásához).
Így nagyon könnyű megakadályozni, hogy a csomagok összekeveredjenek - könnyű külön-külön törölni. Használhatóvá így válnak (mind futtatás, mind fejlesztés):
A ~/.bashrc-ből:
. $HOME/bin/scripts/pathsetup
A pathsetup script (mindenki azt csinál vele, amit akar, ezennel public domain :))
# Source this. Unsets BASE. Defines function pathappend().
function pathappend()
{
local PATHVAR="$1"
local DIR="$2"
local CURVAL=$(eval "echo \"\$$PATHVAR\"")
local CURVAL_EMB=":$CURVAL:"
if [[ "$CURVAL_EMB" != *:"$DIR":* ]] \
&& [ "/" = "${DIR:0:1}" -a -d "$DIR" -a -x "$DIR" ]; then
if [ ! -z "$CURVAL" -a ":" != "${CURVAL:$((${#CURVAL} - 1)):1}" ]; then
DIR=":$DIR"
fi
eval "export $PATHVAR=\"\$CURVAL\$DIR\""
fi
}
pathappend PATH "$HOME/bin/scripts"
pathappend PATH "$HOME/bin/standalone"
export MANPATH=$(manpath -g -q)
for BASE in /home/installed/* "$HOME"/installed/*; do
pathappend CPLUS_INCLUDE_PATH "$BASE"/include
pathappend C_INCLUDE_PATH "$BASE"/include
pathappend INFOPATH "$BASE"/info
pathappend LD_LIBRARY_PATH "$BASE"/lib
pathappend LIBRARY_PATH "$BASE"/lib
pathappend MANPATH "$BASE"/man
pathappend PATH "$BASE"/bin
pathappend PATH "$BASE"/libexec
pathappend PATH "$BASE"/sbin
pathappend PKG_CONFIG_PATH "$BASE"/lib/pkgconfig
done
unset BASE
Máshol sokkal jobban kifejtik, tömören:
gcc számára include file-ok: C_INCLUDE_PATH
g++ -||-: CPLUS_INCLUDE_PATH
info oldalak (info -f OLDAL): INFOPATH
man oldalak: MANPATH
futtatáshoz/dlopen()-hez .so.major-ök: LD_LIBRARY_PATH
futtatható létrehozásához .so-k: LIBRARY_PATH
futtatáshoz: PATH
egyéb agyrémek, pl. pkgconfig: PKG_CONFIG_PATH
Kieg.: a pathsetup be van source-olva a ~/.Xsession-be is, még a session manager / window manager elindítását megelőzően, ui. a kézzel feltett lib-ekre hivatkozhatnak olyan programok is, amiket a user nem kézzel indít el parancssorból (terminálból), hanem közvetlenül a wm-ből (benyom egy ikont). A .bashrc-t a .bash_profile source-olja (debian), ezért ssh-val vagy VT-ről bejelentkezve érvényesül a pathsetup. Amikor viszont a bash xterm alól indul, akkor a ~/.Xsession-ből (a wm-en és az xterm-en keresztül) már örökli a pathsetup hatását, és a .bashrc-ből a pathsetup már másodjára fut, de ez nem gond, mert a pathappend() csak új könyvtárakat ragaszt az adott útváltozóhoz, nincs duplázás. Egy PATHSETUP_GUARD változóval még gyors is lenne.
- A hozzászóláshoz be kell jelentkezni