chroot & cannot open shared object file
Привет.
Расклад. Есть пакет с бинарником и shared libraries, у которого оные
shared libraries лежат в нестандартном месте (он и сам в нестандартном
месте), и это нормально. (Пакет ghc-7.8.3 с deb.hackage.org,
рассчитанный на то, что ставится в /opt, сбоку от основного системного
ghc.)
На саму систему пакет ставится нормально и в ней бинарник запускается.
/opt/ghc/7.8.3/bin/ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.8.3
(указанный файл - это шелловский скрипт, он запускает бинарник из чуть
другого места в дереве:
#!/bin/bash
exedir="/opt/ghc/7.8.3/lib/ghc-7.8.3/bin"
exeprog="ghc-stage2"
executablename="$exedir/$exeprog"
datadir="/opt/ghc/7.8.3/share"
bindir="/opt/ghc/7.8.3/bin"
topdir="/opt/ghc/7.8.3/lib/ghc-7.8.3"
executablename="$exedir/ghc"
exec "$executablename" -B"$topdir" ${1+"$@"}
)
Делаем chroot с той же версией:
cdebootstrap -f build -a amd64 --include aptitude,zsh,vim-nox,less,bash-completion --exclude nano wheezy /opt/chroots/wheezy64 http://192.168.4.4:3142/cdn.debian.net/debian
chroot /opt/chroots/wheezy64 /bin/bash
дописываем репозиторий, aptitude install,
/opt/ghc/7.8.3/bin/ghc --version
/opt/ghc/7.8.3/lib/ghc-7.8.3/bin/ghc: error while loading shared libraries: libHShaskeline-0.7.1.2-ghc7.8.3.so: cannot open shared object file: No such file or directory
при этом
ldd /opt/ghc/7.8.3/lib/ghc-7.8.3/bin/ghc|grep libHShaskeline-0.7.1.2-ghc7.8.3.so
libHShaskeline-0.7.1.2-ghc7.8.3.so => /opt/ghc/7.8.3/lib/ghc-7.8.3/bin/../haskeline-0.7.1.2/libHShaskeline-0.7.1.2-ghc7.8.3.so (0x00007ff10b2c1000)
И при этом, опять же, если все такие библиотеки (их десятка полтора)
симлинками дотянуть до места, включенного в LD_LIBRARY_PATH, ghc
запускается - но те же проблемы возникают при последующей компиляции
хаскельных пакетов, когда очередной пакет хочет библиотеку от ранее
установленного пакета.
Вопрос: что я не доделал? Почему ldd библиотеку видит, а ld.so не может
ее загрузить? С архитектурой все нормально, повторюсь, система в чруте
та же, что снаружи, да и пакет ставился из репозитория, а не вручную.
Задать гуглу вопрос я, видимо, не сумел. Нашелся один подобный вопрос в
недрах stackexchange, но единственный ответ там - такой же удивленный,
как и у меня: ldd есть быть суть тупой враппер вокруг ld.so, поэтому
совершенно непонятно, как можно такого добиться.
Другое подобное обсуждение было на тему "с sudo - без sudo", но там речь
шла о библиотеке, которая в /usr/local/lib, которая у юзера в
LD_LIBRARY_PATH есть, а sudo LD_LIBRARY_PATH чистит. Но у меня все
происходит из одного и того же шелла, пофигу, рутового или юзерского.
Flavor build, с которым я делаю chroot, предназначен вот ровно для
работы всяких pbuilder'ов, так что по идее такие вещи в полученном чруте
работать должны - подобных пакетов в дебиане, прямо скажем, хватает.
Reply to: