[devel] Пути к разделяемым библиотекам в hasher

Eugine Kosenko eugine.kosenko на gmail.com
Сб Апр 7 13:04:51 MSK 2018


Первая прикидка дала успех. По крайней мере, ghc в оболочке теперь
запускается без ошибок. Проверка сборки требует времени.

Оказывается, проблема уже была частично описана здесь:

https://www.altlinux.org/Hasher/Руководство#.D0.9C.D0.
BE.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.2Fproc
https://www.altlinux.org/Hasher/Руководство#cite_note-4


Но тут тоже несколько сложностей. Во-первых, по описанию непонятно, нужно
ли выставлять allowed_mountpoints в /etc/hasher-priv/system и одновременно
known_mountpoints в ~/.hasher/config? Или достаточно только одной из этих
настроек? А во-вторых, у меня в ~/.hasher/config уже была строчка

mount=/dev/pts,/proc

Ставил ее еще давно, и считал что этого достаточно, почему и не обратил
внимание. И в-третьих, даже добавление обоих указанных настроек не
смонтировало /proc при запуске hsh-shell. Помогло только явное указание типа

$ hsh-shell --mountpoints=/proc

Как будет при сборке --- посмотрю еще.

И, наверное, если все будет нормально, наверное стоит исправить
соответствующий раздел в Wiki, да?

2018-04-07 12:47 GMT+03:00 Ivan Zakharyaschev <imz на altlinux.org>:

> On Sat, 7 Apr 2018, Eugine Kosenko wrote:
>
> > Один и тот же свежесобранный своими руками ghc7.10.1-7.10.1-alt1.rpm
> > устанавливаю в рабочей системе и в хэшере.
> >
> > Запускаю в рабочей системе:
> >
> > $ strace ghc 2>&1|grep haskeline
> > openat(AT_FDCWD, "/usr/lib64/ghc-7.10.1/bin/../
> haske_IlDhIe25uAn0WJY379Nu1M/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = 3
> >
> > Запускаю в хэшере:
> >
> > # strace ghc 2>&1|grep haskeline
> > openat(AT_FDCWD, "/lib64/tls/x86_64/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
>
> Это может быть связано с тем, что не смонтирван /proc, а там в
> RPATH/RUNPATH в этих elf-ах используется $ORIGIN (см man ld-linux.so).
> Чтобы узнать место, где выполняемый elf лежал, ld-linux как-то там смотрит
> в /proc/ , иначе работает так, как будто бы в текущей директории надо
> искать (и далее по стандартным путям).
>
> Натыкались на такое с glebfm@ при bootstrap-е пакета ghc на новой
> платформе (mips*).
>
> Такая же фигня есть в java (в т.ч closure), из-за этого при сборке
> обязательно приходится /proc монтировать. (Это до недавнего времени для
> меня было загадкой, почему какие-то java-библиотеки не находились в
> hasher, а так всё работало. Теперь с уверенностью догадываюсь.)
>
> > openat(AT_FDCWD, "/lib64/tls/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/lib64/tls/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/lib64/tls/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/lib64/x86_64/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/lib64/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/lib64/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/lib64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/usr/lib64/tls/x86_64/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/usr/lib64/tls/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/usr/lib64/tls/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/usr/lib64/tls/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/usr/lib64/x86_64/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/usr/lib64/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/usr/lib64/x86_64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > openat(AT_FDCWD, "/usr/lib64/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so",
> > O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
> > writev(2, [{iov_base="/usr/lib64/ghc-7.10.1/bin/ghc", iov_len=29},
> > {iov_base=": ", iov_len=2}, {iov_base="error while loading shared
> > libra"..., iov_len=36}, {iov_base=": ", iov_len=2},
> > {iov_base="libHShaskeline-0.7.2.1-IlDhIe25u"..., iov_len=58},
> {iov_base=":
> > ", iov_len=2}, {iov_base="cannot open shared object file", iov_len=30},
> > {iov_base=": ", iov_len=2}, {iov_base="No such file or directory",
> > iov_len=25}, {iov_base="\n", iov_len=1}], 10/usr/lib64/ghc-7.10.1/bin/
> ghc:
> > error while loading shared libraries:
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so: cannot open
> > shared object file: No such file or directory
> >
> > Получается, что в рабочей системе эта библиотека находится, а в хэшере
> ---
> > нет. Притом она и там и там лежит в одном и том же месте:
> >
> > $ ls /usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/lib*
> > /usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/
> libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M.a
> > /usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/
> > libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so
> > /usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/
> libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M_p.a
> >
> > Непонятно, почему в хэшере ищнт не там, где в рабочей системе (и даже не
> > пытается)? ld.so.conf в обеих средах пустые, шаманство с ручной
> установкой
> > LD_LIBRARY_PATH не помогает. Возможно, сама libHShaskeline не может быть
> > прогружена из-за отсутствия какой-то другой библиотеки (скорее всего,
> > проблема таки в зависимости, сейчас пытаюсь сгенерировать полный список
> по
> > rpmbb -r), но как узнать, какой?
> >
> > На самом деле все еще хуже. Пакет нормально собирается в рабочей системе,
> > но не собирается в хэшере из-за аналогичной ошибки --- промежуточный
> > ghc-pkg не находит libHSterminfo.
> >
>
> _______________________________________________
> Devel mailing list
> Devel на lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/devel
>
----------- следующая часть -----------
Вложение в формате HTML было удалено...
URL: <http://lists.altlinux.org/pipermail/devel/attachments/20180407/b0a26a29/attachment-0001.html>


Подробная информация о списке рассылки Devel