[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: