3年ほど運用している Ubuntu 14.04 VPS にSSH接続し、Firefox を headless で起動すると、 ExceptionHandler が表示されて落ちてしまいます。

バージョンの表示はできるのと、後述の firejail で作ったサンドボックス環境だと動作しました。

サンドボックス環境の動作状況を考えると /dev/ 配下に不要なデバイスファイルがあるのが原因ではないかと考えています。 /dev/ 配下のデバイスファイルの直接操作を実施していいものか、もしくは不要なデバイスファイルの特定方法など、ご教授もらえればと思います。

環境

  • Ubuntu 14.04.6 LTS (GNU/Linux 2.6.32-042stab120.6 x86_64)
  • Mozilla Firefox 66.0.3 ( apt でインストール )

エラーメッセージ

$ firefox -v
Mozilla Firefox 66.0.3

$ firefox --headless
*** You are running in headless mode.
ExceptionHandler::GenerateDump cloned child 16646
ExceptionHandler::SendContinueSignalToChild sent continue signal to child
ExceptionHandler::WaitForContinueSignal waiting for continue signal...
$ error: XDG_RUNTIME_DIR not set in the environment.

サンドボックス

firejail を git clone & make&install して利用。

$ firejail --private firefox -headless
Reading profile /usr/local/etc/firejail/firefox.profile
Reading profile /usr/local/etc/firejail/firefox-common.profile
Reading profile /usr/local/etc/firejail/disable-common.inc
Reading profile /usr/local/etc/firejail/disable-devel.inc
Reading profile /usr/local/etc/firejail/disable-exec.inc
Reading profile /usr/local/etc/firejail/disable-interpreters.inc
Reading profile /usr/local/etc/firejail/disable-programs.inc
Reading profile /usr/local/etc/firejail/whitelist-common.inc
Reading profile /usr/local/etc/firejail/whitelist-var-common.inc
Warning: noroot option is not available
Parent pid 17329, child pid 17330
prctl(PR_SET_SECCOMP): Invalid argument
Warning: An abstract unix socket for session D-BUS might still be available. Use --net or remove unix from --protocol set.
Warning: read-only, read-write and noexec options are not applied recursively
Post-exec seccomp protector enabled
prctl(PR_SET_SECCOMP): Invalid argument
Seccomp list in: @clock,@cpu-emulation,@debug,@module,@obsolete,@raw-io,@reboot,@resources,@swap,acct,add_key,bpf,fanotify_init,io_cancel,io_destroy,io_getevents,io_setup,io_submit,ioprio_set,kcmp,keyctl,mount,name_to_handle_at,nfsservctl,ni_syscall,open_by_handle_at,personality,pivot_root,process_vm_readv,ptrace,remap_file_pages,request_key,setdomainname,sethostname,syslog,umount,umount2,userfaultfd,vhangup,vmsplice, check list: @default-keep, prelist: adjtimex,clock_adjtime,clock_settime,settimeofday,modify_ldt,lookup_dcookie,perf_event_open,process_vm_writev,delete_module,finit_module,init_module,_sysctl,afs_syscall,create_module,get_kernel_syms,getpmsg,putpmsg,query_module,security,sysfs,tuxcall,uselib,ustat,vserver,ioperm,iopl,kexec_load,reboot,set_mempolicy,migrate_pages,move_pages,mbind,swapon,swapoff,acct,add_key,fanotify_init,io_cancel,io_destroy,io_getevents,io_setup,io_submit,ioprio_set,kcmp,keyctl,mount,name_to_handle_at,nfsservctl,open_by_handle_at,personality,pivot_root,process_vm_readv,ptrace,remap_file_pages,request_key,setdomainname,sethostname,syslog,umount2,vhangup,vmsplice,
prctl(PR_SET_SECCOMP): Invalid argument
Child process initialized in 744.25 ms
Warning: seccomp disabled, it requires a Linux kernel version 3.5 or newer.
*** You are running in headless mode.

サンドボックス パラメーター追求

サンドボックス環境を作るパラメーターを探ると、問題箇所がわかると考え、各種設定のOn/Offを試したところ、次のパラメーター指定を外すと、サンドボックス環境でもFirefoxがエラーを表示するようになりました。

これを使った場合の /dev/配下が次のようになりました。

$ ls /dev
full  log  null  ptmx  pts  random  shm  tty  urandom  zero

上記を使わない場合の /dev/ 配下。

$ ls /dev
agpgart   dsp   loop0  midi0   mixer1      ptyp0  ptyp9  ram1   ram3    rmidi1     smpte3   tty3   ttyp2  ttypb
audio     dsp1  loop1  midi00  mixer2      ptyp1  ptypa  ram10  ram4    rmidi2     sndstat  tty4   ttyp3  ttypc
audio1    dsp2  loop2  midi01  mixer3      ptyp2  ptypb  ram11  ram5    rmidi3     stderr   tty5   ttyp4  ttypd
audio2    dsp3  loop3  midi02  mpu401data  ptyp3  ptypc  ram12  ram6    sequencer  stdin    tty6   ttyp5  ttype
audio3    fd    loop4  midi03  mpu401stat  ptyp4  ptypd  ram13  ram7    shm        stdout   tty7   ttyp6  ttypf
audioctl  full  loop5  midi1   null        ptyp5  ptype  ram14  ram8    simfs      tty      tty8   ttyp7  tun
char      kmem  loop6  midi2   port        ptyp6  ptypf  ram15  ram9    smpte0     tty0     tty9   ttyp8  urandom
console   kmsg  loop7  midi3   ptmx        ptyp7  ram    ram16  random  smpte1     tty1     ttyp0  ttyp9  xconsole
core      log   mem    mixer   pts         ptyp8  ram0   ram2   rmidi0  smpte2     tty2     ttyp1  ttypa  zero

差分は山のようにあったのですが、この中を眺めて思ったのは、VPSで音を鳴らすことがないのに /dev/audioctl , mixer などのように音声系に必要そうなデバイスファイルが多数あることが気になりました。

パッケージ

上記のデバイスファイルを扱いそうなパッケージを探してみました。しかし、新規でたてた 14.04 と、特に違いはありませんでした (新規でたてたUbuntu14.04 では firefox -headlessは動作します。/dev/配下のファイルは全く異なってましたが、audio関連と思われるものはなかったです)

$ dpkg -l | grep -E "sound|pulse|[sS]ound|Audio"
ii  libasound2:amd64                 1.0.27.2-3ubuntu7                    amd64        shared library for ALSA applications
ii  libasound2-data                  1.0.27.2-3ubuntu7                    all          Configuration files and profiles for ALSA drivers
ii  libcanberra0:amd64               0.30-0ubuntu3                        amd64        simple abstract interface for playing event sounds
ii  libtext-soundex-perl             3.4-1build1                          amd64        implementation of the soundex algorithm
ii  libvorbis0a:amd64                1.3.2-1.3ubuntu1.2                   amd64        The Vorbis General Audio Compression Codec (Decoder library)
ii  libvorbisfile3:amd64             1.3.2-1.3ubuntu1.2                   amd64        The Vorbis General Audio Compression Codec (High Level API)
ii  sound-theme-freedesktop          0.8-1                                all          freedesktop.org sound theme

よろしくおねがいします。