Firefox -headless が Ubuntu 14.04 で動作しないので /dev/配下を整理したい
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がエラーを表示するようになりました。
- private-dev (firejail パラメータ)
これを使った場合の /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
よろしくおねがいします。