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 : > > > 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 в обеих средах пустые, шаманство с ручной > > установкой