* Re: [devel] Пути к разделяемым библиотекам в hasher
@ 2018-04-07 9:47 ` Ivan Zakharyaschev
0 siblings, 1 reply; 2+ messages in thread
From: Ivan Zakharyaschev @ 2018-04-07 9:47 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 6587 bytes --]
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.
>
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [devel] Пути к разделяемым библиотекам в hasher
@ 2018-04-07 11:47 ` Ivan Zakharyaschev
0 siblings, 0 replies; 2+ messages in thread
From: Ivan Zakharyaschev @ 2018-04-07 11:47 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 7177 bytes --]
On Sat, 7 Apr 2018, Eugine Kosenko wrote:
> Первая прикидка дала успех. По крайней мере, 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
Это не имеет смысла, потому что согласно man hasher есть только
переменная known_mountpoints :
--mountpoints=LIST
Defines list of known mount points. Every build
dependence which belongs to this list will be mounted.
If some mount point is not explicitly allowed in
hasher-priv.conf(5), build will fail.
($known_mountpoints);
> Ставил ее еще давно, и считал что этого достаточно, почему и не обратил
> внимание. И в-третьих, даже добавление обоих указанных настроек не
> смонтировало /proc при запуске hsh-shell. Помогло только явное указание типа
>
> $ hsh-shell --mountpoints=/proc
>
> Как будет при сборке --- посмотрю еще.
Да, получается, что поведение hsh и hsh-shell/hsh-run -- разное. И,
наверное, это больше всего запутывает пользователей, потому что они на
основе своего опыта не могут точно вспомнить, когда же оно монтируется, а
когда -- нет.
При сборке с помоощью hsh монтируется /proc, если есть соответствующее
требование (в виде BuilRequires или -- транзитивно -- Requires пактов). И
оба разрешения должны быть выданы, конечно (known_mountpoints,
allowed_mountpoints).
При запуске hsh-shell/hsh-run этому требованию неоткуда взяться, зато
действует опция --mountpoints. (По-моему, это введение в заблуждение --
отождествление её с $known_mountpoints в man hsh-shell!)
Будет ли /proc смонтирован при hsh --mountpoints=/proc аналогично
безусловно, независмо от наличия BuildRequires/Requires -- я точно не могу
сказать. (Можно проверить, чтобы уже раз и навсегда это утчнить.)
> И, наверное, если все будет нормально, наверное стоит исправить
> соответствующий раздел в Wiki, да?
Хотел написать эти подробности про $ORIGIN из моего сообщения в
https://www.altlinux.org/Hasher/FAQ .
А что требует исправления? (Подробности из моего сообщения -- некие
дополнения просто, а не исправления.)
>
> 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, а так всё работало. Теперь с уверенностью догадываюсь.)
> > > Получается, что в рабочей системе эта библиотека находится, а в хэшере
> > ---
> > > нет. Притом она и там и там лежит в одном и том же месте:
> > >
> > > $ 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 в обеих средах пустые, шаманство с ручной
> > установкой
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-04-07 11:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-07 9:47 ` [devel] Пути к разделяемым библиотекам в hasher Ivan Zakharyaschev
2018-04-07 11:47 ` Ivan Zakharyaschev
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git