以下の内容はhttps://ujimushisradjp.hatenablog.jp/entry/2024/06/13/201134より取得しました。


ubuntu 24.04でBlink.jlがうまく動かないことに対する対応

久しぶりにBlink.jlを使ってみようと思って,REPL上で実行してみると,

julia> using Blink

julia> win = Window()
ERROR: IOError: connect: connection refused (ECONNREFUSED)
Stacktrace:
  [1] wait_connected(x::Sockets.TCPSocket)
    @ Sockets ~/.local/opt/julia-1.10.4/share/julia/stdlib/v1.10/Sockets/src/Sockets.jl:528
  [2] connect
    @ ~/.local/opt/julia-1.10.4/share/julia/stdlib/v1.10/Sockets/src/Sockets.jl:563 [inlined]
  [3] connect(addr::Sockets.IPv4, port::Int64)
    @ Sockets ~/.local/opt/julia-1.10.4/share/julia/stdlib/v1.10/Sockets/src/Sockets.jl:549
  [4] try_connect(::Sockets.IPv4, ::Vararg{Any}; interval::Float64, attempts::Int64)
    @ Blink.AtomShell ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:77
  [5] try_connect
    @ ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:74 [inlined]
  [6] init(; debug::Bool)
    @ Blink.AtomShell ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:91
  [7] init
    @ ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:85 [inlined]
  [8] #shell#6
    @ ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:147 [inlined]
  [9] shell
    @ ~/.julia/packages/Blink/tnO3a/src/AtomShell/process.jl:138 [inlined]
 [10] Window()
    @ Blink.AtomShell ~/.julia/packages/Blink/tnO3a/src/AtomShell/window.jl:100
 [11] top-level scope
    @ REPL[2]:1

と,全く動かない。別のPCのubuntu 22.04では正常に動いているので, ubuntu 24.04のバージョンの影響があるのでは?と何となく思った。

Blink.jlのTroubleshooting にもあるように,electronのバイナリに関係していることかもしれないと思い, electronのバイナリが動作するかどうか確認してみる。

julia> Blink.AtomShell._electron
"/home/ujimushi/.julia/artifacts/aad3f721351c9550129f625fc52f51f4d0726586"

でArtifactsの場所が分かるので,次のように単体で実行してみる。

ujimushi@ubuntu-24.04:~$ cd ~/.julia/artifacts/aad3f721351c9550129f625fc52f51f4d0726586/
ujimushi@ubuntu-24.04:~/.julia/artifacts/aad3f721351c9550129f625fc52f51f4d0726586$ ./electron 
[8372:0613/195303.455989:FATAL:setuid_sandbox_host.cc(157)] The SUID sandbox helper binary
 was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. 
 You need to make sure that 
 ~/.julia/artifacts/aad3f721351c9550129f625fc52f51f4d0726586/chrome-sandbox 
 is owned by root and has mode 4755.
Trace/breakpoint trap (コアダンプ)

と,ここで一回調査を中断した。

で,ubuntu 24.04 electron等でぐぐると, Voiceboxのissueに 自分で体験したそのままの内容の記述があった。

対策は,

  • --no-sandboxをつける(electron起動時)
  • sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0する
  • /etc/apparmor.dにプロファイルを設定する

の三通りぐらいらしい。

とりあえず,--no-sandboxのオプションをつけるぐらいなら簡単に出来そうなのでやってみる。 Plots.jlのGRバックエンド用フォントパッチ(Windows用) とかでお世話になっているパッチ方法である。

using Blink

@eval AtomShell begin
    function init(; debug = false)
        electron() # Check path exists
        p, dp = port(), port()
        debug && inspector(dp)
        dbg = debug ? "--debug=$dp" : []
        proc = (debug ? run_rdr : run)(
            `$(electron()) --no-sandbox $dbg $mainjs port $p`; wait=false)
        conn = try_connect(ip"127.0.0.1", p)
        shell = Electron(proc, conn)
        initcbs(shell)
        return shell
    end
end

includeしてからwin = Window()を実行してみるとうまくいった。

原因はubuntuの24.04からセキュリティ設定が厳しくなっていて,それに引っかかっているということらしい。 --no-sandboxをするとelectronのセキュリティが弱くなるが, 自分がBlink.jlを使っている範囲ではあまり問題がない(ネットワークで他のサイト等にはアクセスしない) のではないかと思っている今日この頃。




以上の内容はhttps://ujimushisradjp.hatenablog.jp/entry/2024/06/13/201134より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14