LINUX.ORG.RU

Не получается собрать chromium

 


0

2

Gentoo, профиль 17.1, amd64. Пытаюсь собрать chromium-75.0.3770.90. Процесс сборки идёт достаточно долго, а потом залипает, сборка не завершается, в процессах висит такое:

/usr/bin/python3.6m /usr/lib/portage/python3.6/pid-ns-init 30488
 \_ /usr/bin/python3.6m /usr/lib/portage/python3.6 /pid-ns-init 250 250 250 18 0,1,2 /usr/bin/sandbox [www-client/chromium-75.0.3770.90] sandbox /usr/lib/portage/python3.6/ebuild.sh compile
  \_ [www-client/chromium-75.0.3770.90] sandbox /usr/lib/portage/python3.6/ebuild.sh compile
   \_ /bin/bash /usr/lib/portage/python3.6/ebuild.sh compile
    \_ /bin/bash /usr/lib/portage/python3.6/ebuild.sh compile
     \_ ninja -v -j1 -l0 -C out/Release v8_context_snapshot_generator
      \_ /usr/bin/python2.7 ../../build/gn_run_binary.py transport_security_state_generator ../../net/http/transport_security_state_static.json ../../net/http/transport_security_state_static.pins ../../net/http/transport_security_state_static.template gen/net/http/transport_security_state_static.h
        \_./transport_security_state_generator ../../net/http/transport_security_state_static.json ../../net/http/transport_security_state_static.pins ../../net/http/transport_security_state_static.template gen/net/http/transport_security_state_static.h

Процесс transport_security_state_generator ничего не делает, если его трассировать, то там сплошное futex(..., FUTEX_WAIT_PRIVATE,...). Код в этом transport_security_state_generator.cc простой, если его запускать из консоли, то он работает и создаёт transport_security_state_static.h.

Я не нашёл чего-то подобного в гугле, не знаю что делать, есть мысль пока идёт сборка поправить gn_run_binary.py, чтобы он игнорировал «смерть» потомка по SIGHUP, чтобы можно было при сборке завершить этот transport_security_state_generator без останова сборки... Или проще прервать сборку, заменить проблемный бинарник на /bin/true и продолжить через ″ebuild ... compile″? Или пробовать замаскированый chromium-75.0.3770.100?

P.S. Такое поведение повторяется один в один 3 раза подряд, ccache отключил.

★★★★★
Ответ на: комментарий от eternal_sorrow

Прекращение сборки, при kill код завершения процесса не ноль, это идёт по цепочке вверх и в конце получается сообщение от emerge про неудачную сборку.

mky ★★★★★
() автор топика
Ответ на: комментарий от eternal_sorrow

Всё повторятся, сразу же идёт этот шаг, этот же список процессов и эти же повторяющиеся вызовы ″FUTEX_WAIT_PRIVATE″. Прервал сборку, сгенерил h-файл из консоли, записал /bin/true в transport_security_state_generator, продолжил сборку. Вроде пошло, подождём.

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

мде. у меня была похожая проблема, правда при сборке webkitgtk. зачем то он запускал /usr/sbin/sysctl и этот процесс повисал, выжирая весь процессор, но после прибития этого процесса сборка просто продолжалась. странная хрень

eternal_sorrow ★★★★★
()
Последнее исправление: eternal_sorrow (всего исправлений: 1)

Скорее всего не нравиться sandbox. Можно поробовать отключить FEATURES="-sandbox", или конкретные ipc-,pid-sandox.

anonymous
()
Ответ на: комментарий от anonymous

конечно. но суть одна - в процессе сборки подвисает команда, которая, будучи запущенной вручную, выполняется штатно и без ошибок

eternal_sorrow ★★★★★
()
Ответ на: комментарий от anonymous

А sandbox как работает? Через переменные окружения? Я, когда процесс так завис, командой ps записал в файл все его переменные окружения, потом запускал из командной строки этот transport_security_state_generator с теми переменными окружения и ситуация воспроизводилась.

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

А sandbox как работает?

Это хитрая версия chroot на namespaces.

Через переменные окружения?

Я даже не знаю, как на это ответить. Я не могу помочь тебе с такими вопросами.

anonymous
()
Ответ на: комментарий от Deleted

С 3.7 та же фигня сейчас наблюдается.

imul ★★★★★
()
Ответ на: комментарий от Deleted

А с питоном версии ниже или выше 3.6 собирать пробовали?

Какая разница, если сборка chromium использует только 2.7

anonymous
()
Ответ на: комментарий от mky

А sandbox как работает?

Вот тут вкратце упомянут список того что может sys-apps/sandbox и что настраивается через FEATURES.

Вкратце - всё как сказал аноним: специальное приложение через namespaces и перехваты системных вызовов следит чтобы собираемое приложение не насрало вне директории сборки.

Очень помогает против сборочных скриптов с rm -rf /*, знаете ли :-)

Если доверяешь конкретному пакету - можешь для него sandbox отключить через package.env. Или однократно:

FEATURES="-sandbox" emerge -1 category/package
Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от anonymous

Нифигасе, свежий хромиум до сих пор юзает 2.7

Deleted
()
Ответ на: комментарий от Deleted

Пока нет, процессор старый, одна попытка полного пересбора — несколько часов. Но, вроде как, питон влиять не должен. Зависает (зацикливается) программа, с исходником на C++. Из консоли от root'а работает нормально, а с теми переменными окружения, с которыем она запускается из emerge — зацикливается и от root'а. Причём, похоже зацикливается не код на C++, а библиотечная функция

base::FilePath::FromUTF8Unsafe(argv[1]);
но пока я в этом не уверен. Надо ещё strace посмотреть.

А переменных окружения наподобие:

POSTGRES_TARGETS= BROOT= LINUX_CONFIG_EXISTS_DONE= OFED_DRIVERS= SANDBOX_DEBUG=0
несколько экранов, вобще лень их наобум перебирать, чтобы понять какая мешает.

mky ★★★★★
() автор топика
Ответ на: комментарий от BattleCoder

MAKEOPTS="-j4"

Для chromium переопределно в -j1, и сборка действительно идёт в один поток, видно по top.

mky ★★★★★
() автор топика
Ответ на: комментарий от grem

Нет, tmpfs только под /run и пр., не для временных файлов. Свопа много и он не занят.

mky ★★★★★
() автор топика

Размаскируй 76.0.3809.46 и попробуй собрать. У меня на нём полёт нормальный. Ещё как вариант можешь отключить jumbo-build (тоже могут быть баги с этим) и собрать без этого флага, но тогда собирай в 4 потока (смысла в один поток собирать нет, разница у меня лично - 4 крата с jumbo-build и без: соотетственно, твоё -j1 с jumbo-build займет примерно столько же, что и -j4 без него).

Deleted
()
Ответ на: комментарий от Deleted

Уже дособирал 75.0.3770.90, пришлось аналогично «подталкивать» сборку для top_domain_generator, transport_security_state_generator и make_top_domain_list_for_edit_distance. Пока не будут трогать 76-ю версию.

mky ★★★★★
() автор топика

Посмотрел, дело действительно в sandbox, но как это поправить (а не отключать полностью) не знаю, документации по внутренностям sandbox не нашёл.

Поковырял я этот гентушный sandbox. Он работает через перехват вызовов, подгружая libsandbox.so через LD_PRELOAD. Может у меня что-то не то с системой, но никаких namespace для файловой системы я там не увидел.

Сисколл open() он заменяет на stat(), а потом open(). Это и по исходникам, и по выводу strace, если запускать обычную программу, типа grep и пр.

А этот transport_security_state_generator на С++. И кроме общесистемной libstdc++.so у него ещё libboringssl.so, libbase.so и libcrcrypto.so из каталога с исходниками хромиума. Возможно, какая-то из этих библиотек тоже подменяет open(), и вместо stat(), open() в выводе strace появляется star() и куча futex().

mky ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Попробовал собрать chromium-76.0.3809.46. С абсолютно аналогичными симптомами (сисколл futex() в бесконечном цикле) заклинило процесс character_data_generator.

А transport_security_state_generator (на котором клинило chromium-75) нормально отработал, причём размер этого бинарника совпадает у этих двух версий хромиума.

Может проблема во флагах компилятора, сейчас стоит -march=native -O2 -pipe, процессор AMD Феном 2. Попробовать что-ли -march=x86-64...

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

Даже не представляю. Дико сомневаюсь, что проблеиа во флагах, но у меня проц - A10-9600p - вообще собраться один хрен должно. Сам хромиум у меня собран с этими юзами: closure-compile cups hangouts jumbo-build pic proprietary-codecs pulseaudio suid system-icu tcmalloc

Deleted
()
Ответ на: комментарий от Deleted

Спасибо. У меня к этому был ещё юз ″component-build″, не знаю зачем, видимо из-за:

to speed up linking

Убрал его и всё стало нормально собираться.

mky ★★★★★
() автор топика
Ответ на: комментарий от mky

Собирать самому с дефолтным O2, да ещё и на феномо-кукурузе? Да месье знаток извращений.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.