app-office/libreoffice-24.2.3.2-r1でsandbox violation, なぜ?

ひさしぶりのGentooの話. Xvfbをいれていると, libreofficeのconfigure phaseで, sandbox violationが出て進みません. 実際のところ, 下のようにbugzあるのでそれ見りゃいいんですけど.

933257 – app-office/libreoffice-24.2.3.2-r1: If x11-misc/xvfb-run in installed, sandbox violation: /dev/udmabuf

sandbox violationはこんな感じ. Xvfbが/dev/udmabufをさわりにいく.

>>> Source configured.
 * ----------------------- SANDBOX ACCESS VIOLATION SUMMARY -----------------------
 * LOG FILE: "/dev/shm/portage/app-office/libreoffice-24.2.3.2-r1/temp/sandbox.log"
 *
VERSION 1.0
FORMAT: F - Function called
FORMAT: S - Access Status
FORMAT: P - Path as passed to function
FORMAT: A - Absolute Path (not canonical)
FORMAT: R - Canonical Path
FORMAT: C - Command Line

F: open_wr
S: deny
P: /dev/udmabuf
A: /dev/udmabuf
R: /dev/udmabuf
C: Xvfb :99 -screen 0 1280x1024x24 -nolisten tcp -auth /dev/shm/portage/app-office/libreoffice-24.2.3.2-r1/temp/xvfb-run.ec0CjX/Xautho
rity
 * --------------------------------------------------------------------------------

sandbox violationが起きているのは, configure.acでいうとこのへん. AT-SPI2のテストを走らせるのに, gtk3・xvfb-run・dbus-launchが必要なのでそれらのチェックをしている. なのでUSE=gtkが入ってなければ多分 enable_atspi_tests=no になって, $XVFB_RUNの行にもいかず, sandbox violationも起きないでしょう. 多分.

11884   │ # AT-SPI2 tests require gtk3, xvfb-run, dbus-launch and atspi-2
11885   │ if ! test "$ENABLE_GTK3" = TRUE; then
11886   │     if test "$enable_atspi_tests" = yes; then
11887   │         AC_MSG_ERROR([--enable-atspi-tests requires --enable-gtk3])
11888   │     fi
11889   │     enable_atspi_tests=no
11890   │ fi
11891   │ if ! test "$enable_atspi_tests" = no; then
11892   │     AC_PATH_PROGS([XVFB_RUN], [xvfb-run], no)
11893   │     if ! test "$XVFB_RUN" = no; then
11894   │         dnl make sure the found xvfb-run actually works
11895   │         AC_MSG_CHECKING([whether $XVFB_RUN works...])
11896   │         if $XVFB_RUN --auto-servernum true >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
11897   │             AC_MSG_RESULT([yes])
11898   │         else
11899   │             AC_MSG_RESULT([no])
11900   │             XVFB_RUN=no
11901   │         fi
11902   │     fi
11903   │     if test "$XVFB_RUN" = no; then
11904   │         if test "$enable_atspi_tests" = yes; then
11905   │             AC_MSG_ERROR([xvfb-run required by --enable-atspi-tests not found])
11906   │         fi
11907   │         enable_atspi_tests=no
11908   │     fi
11909   │ fi

まあ, gtkをこれのためにdisableするのは困るって話なんですが.

ところで, 結局これでどうなるかというと, 変数名がしめすように, ATSPIのunittestが走るだけなんですよね.

vcl/Module_vcl.mk

  86   │ ifneq ($(ENABLE_ATSPI_TESTS),)
  87   │ $(eval $(call gb_Module_add_check_targets,vcl,\
  88   │     CppunitTest_vcl_gtk3_a11y \
  89   │ ))
  90   │ endif

一方でebuildの方を見てみると, 全般的にcheckは落とされている様子. まあビルドしたいだけなので. ということは, 上の判定コード自体全部消してもいいんじゃないかなあ?

app-office/libreoffice/libreoffice-24.2.3.2-r1.ebuild

 378   │     # sed in the tests
 379   │     sed -i \
 380   │         -e "s#all : build unitcheck#all : build#g" \
 381   │         solenv/gbuild/Module.mk || die
 382   │     sed -i \
 383   │         -e "s#check: dev-install subsequentcheck#check: unitcheck slowcheck dev-install subsequentcheck#g" \
 384   │         -e "s#Makefile.gbuild all slowcheck#Makefile.gbuild all#g" \
 385   │         Makefile.in || die

実際のところ, 同じくsandbox violationが起きるからと, kf5-configのところも消されているのだ.

 369   │     # sandbox violations on many systems, we don't need it. Bug #646406
 370   │     sed -i \
 371   │         -e "/KF5_CONFIG/s/kf5-config/no/" \
 372   │         configure.ac || die "Failed to disable kf5-config"

それだけでなく, ebuildを見ると, libreofficeはビルド中に結構いろんなとこをさわりにくるのがわかる. OpenGLがどのぐらい使えるのかを見てるのかなあ? configureの後で? それか, ビルドした実行バイナリを実際動かして, データの後処理的なことをしているのかも. emacsのbuildみたいに.

 602   │     # more and more LO stuff tries to use OpenGL, including tests during build
 603   │     # bug 501508, bug 540624, bug 545974 and probably more
 604   │     addpredict /dev/dri
 605   │     addpredict /dev/ati
 606   │     addpredict /dev/nvidiactl

まとめ: 巨大ソフトのビルドはめんどい