extractbb が変わったようですが

extractbb が変わったようですが

- Toshio Otaguro の投稿
返信数: 21

ここ数日奇妙なことが起きているのでお尋ねします.まず再現ソースは以下のとおりです.

% ----------
\documentclass[uplatex,dvipdfmx,ja=standard,b5paper,11pt]{bxjsbook}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{graphicx}

\begin{document}
図を挿入します.
\bigskip
\begin{center}
\includegraphics{clouds-4215608_640.jpg}
\end{center}
\end{document}
% ----------
 
本来であれば extractbb が裏で走り,図のサイズを把握してくれるはずなのですが,数日前に extractbb は lua のスクリプトとして再実装されたらしく,私の環境(下記)では次のようなエラーを吐きます.
 
! ERROR (extractbb.lua): The script is in an incorrect location: /usr/local/bin
stack traceback:
/usr/local/bin/extractbb:189: in main chunk
 
! LaTeX Error: Cannot determine size of graphic in clouds-4215608_640.xbb (no BoundingBox).
 
実行環境は Ubuntu 24.04 (6.8.0-36-generic) 上にインストールした TeXLive 2024 で,パッケージは最新版に更新済みです.エラーメッセージ中にある extractbb は多段のリンクによって最終的に
/usr/local/texlive/2024/texmf-dist/scripts/texlive/extractbb.lua
にリンクされています.
 
関係ありそうなパッケージは
dvipdfmx r71675
dvipdfmx.x86_64-linux r71671
kpathsea r71664
です.
 
最初に奇妙と言ったのは,Windows11 の WSL2 上に全く同じ環境を作ってもいるのですが,そこではエラーが発生しないからです.違いはカーネルなのか,ファイルシステムなのか,見当がつきません.
 
extractbb.lua にバグがあるのか,私の環境に問題があるのか,どうすれば解消できるのか.お知恵を拝借できないかと思います.
Toshio Otaguro への返信

Re: extractbb が変わったようですが

- 前田 一貴 の投稿
extractbb.lua の今回の件に関連するところを抜粋すると次のようになっています.

-- Get the directory of the script and interpreter
local script_path = debug.getinfo(1, "S").source:sub(2)
local script_dir, script_name, script_ext = split_path(script_path)

local interpreter_dir = kpse.var_value("SELFAUTOLOC")

-- Look up the script again with kpathsea
local resolved_script_path = kpse.find_file(
script_name .. "." .. (script_ext or SCRIPT_EXT), "texmfscripts", true
)

if (script_dir ~= interpreter_dir) and (script_path ~= resolved_script_path) then
error("The script is in an incorrect location: " .. script_dir)
end

Linux 環境で /usr/local/bin から /usr/local/texlive/2024/bin/x86_64-linux/ にあるバイナリにシンボリックリンクを作って試した限りでは,

script_dir = /usr/local/bin
interpreter_dir = /usr/local/texlive/2024/bin/x86_64-linux
不一致(texlua はシンボリックリンクでも元のバイナリの luatex がある場所が返ってくるみたい)

script_path = /usr/local/bin/extractbb
resolved_script_path = /usr/local/texlive/2024/texmf-dist/scripts/texlive/extractbb.lua
不一致

のようになってしまって,エラーが出るようです.
なお,私は普段は /usr/local/texlive/2024/bin/x86_64-linux に PATH を通していますが,この場合は問題ないようです.

Windows11 の WSL2 上の場合は試していませんが,ファイルシステムによりシンボリックリンクの仕様が異なると script_dir と interpreter_dir が一致してうまく動くのかもしれません.
前田 一貴 への返信

Re: extractbb が変わったようですが

- 和田 勇 の投稿
前田さんの「Linux 環境で /usr/local/bin から /usr/local/texlive/2024/bin/x86_64-linux/ にあるバイナリにシンボリックリンク」
の件は再現できていないのですが、mc さんと同じ debian 12 ですが、処理可能です。

  Toshio Otaguro  さん、mc さんへ

「/usr/local/bin」がメッセージ状に出ていますが、環境変数 PATH はどうなっていますでしょうか?

また、次のコマンドの結果はどうなりますか?

      which -a extractbb  | xargs ls -l
      which -a extractbb  | xargs readlink    # これは念の為、s-link を辿ってパスを調べています。
      which -a extractbb  | xargs dpkg -S    # それぞれがどのパッケージでインストールされているかですので、未登録の旨の表示が出る場合もあります。

和田 勇 への返信

Re: extractbb が変わったようですが

- m c の投稿
和田さん,ありがとうございます.

私の場合,次のようになりました:
xxxx@yyyy:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

xxxx@yyyy:~$ which -a extractbb | xargs ls -l
lrwxrwxrwx 1 root root 50 4月 14 14:15 /usr/local/bin/extractbb -> /usr/local/texlive/2024/bin/x86_64-linux/extractbb

xxxx@yyyy:~$ which -a extractbb | xargs readlink
/usr/local/texlive/2024/bin/x86_64-linux/extractbb

xxxx@yyyy:~$ which -a extractbb |xargs dpkg -S
dpkg-query: パターン /usr/local/bin/extractbb に一致するパスが見つかりません
和田 勇 への返信

Re: extractbb が変わったようですが

- Toshio Otaguro の投稿
和田様,ほかの皆様,
週末にも関わらず迅速に反応していただき多謝.まず和田さんのご質問への回答です.
なお,TeXLive のインストール手続きの最後に
$ sudo /usr/local/texlive/2024/bin/x86_64-linux/tlmgr path add
を実行して /usr/local/bin に実行形式のリンクを集めていることを予め申し添えておきます.

PATH=/home/xxxxxxxx/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
なぜか /snap/bin が二重に登録されているのが不思議.

$ which -a extractbb | xargs ls -l
lrwxrwxrwx 1 root root 50 7月 6 12:23 /usr/local/bin/extractbb -> /usr/local/texlive/2024/bin/x86_64-linux/extractbb

$ which -a extractbb | xargs readlink
/usr/local/texlive/2024/bin/x86_64-linux/extractbb

$ which -a extractbb | xargs dpkg -S
dpkg-query: パターン /usr/local/bin/extractbb に一致するパスが見つかりません
以上

ちなみに,私が多段のリンクと書いたものを展開すると以下のようなシンボリック・リンクになります.
/usr/local/bin/extractbb -> /usr/local/texlive/2024/bin/x86_64-linux/extractbb -> ../../texmf-dist/scripts/texlive/extractbb.lua

この Lua スクリプトは自分の「正しい」位置というものを持っていて,そのために /usr/local/bin にあるように見えるのが気に入らないのでしょうか?
Toshio Otaguro への返信

Re: extractbb が変わったようですが

- 前田 一貴 の投稿

$ sudo /usr/local/texlive/2024/bin/x86_64-linux/tlmgr path add

そういえばそんなのがありましたね.私にはこの Safety Checks の意図はよくわかっていませんが,tlmgr path add しただけで動かなくなるのならばバグと言ってもよいような気がします.

Toshio Otaguro への返信

Re: extractbb が変わったようですが

- 和田 勇 の投稿
あくまでも想像ですが、extractbb.lua は /usr/local/texlive のようなインストール時の prefix のファイル構造を想定しているのだと思います。
これは前田さんの当初の回答の最後の方の部分からと readlink の結果から推測しています。

  script_path = /usr/local/bin/extractbb
  resolved_script_path = /usr/local/texlive/2024/texmf-dist/scripts/texlive/extractbb.lua
  不一致

まぁ、バグとも言えなくはないけど、作者側の仕様通りの動きだとも言えますね。

というので、
Toshio Otaguro さん、mc さん、共にtexlive-binaries を導入して解決するか不明だし、
とてもややっこしくなりそうなので、
前田さんが書かれているように /usr/local/texlive/2024/bin/x86_64-linux/ を
PATH に追加する方法が手っ取り早い解決策かな(できれば先頭がわかりやすい)

とはいえ、WSL2 でも同様に /usr/local/bin に纏めているであろう環境で正常な動きをしているのが気になるので、時間があれば which -a extractbb の関連のコマンド結果も見せてください。
> 此の項 Toshio Otaguro さんへのお願い

どこに設定するかですが、ログインシエル次第ですが、$HOME/.bashrc とか $HOME/.profile とかかな。
あるいは複数ユーザで共有しているのであれば /etc/profile あたりで調整かしら?

二重登録の /snap/bin も上記で調整してみてください。
私は、常用の macOS では .profile で awk の連想配列を利用して PATH の重複定義をなくすようにしています。
和田 勇 への返信

Re: extractbb が変わったようですが

- Toshio Otaguro の投稿
和田さん,
私も気になっていたので WSL2 で確認してみると,

$ which -a extractbb | xargs ls -l
lrwxrwxrwx 1 root root 50 Jun 11 21:34 /usr/local/bin/extractbb -> /usr/local/texlive/2024/bin/x86_64-linux/extractbb

$ which -a extractbb | xargs readlink
/usr/local/texlive/2024/bin/x86_64-linux/extractbb

$ which -a extractbb | xargs dpkg -S
dpkg-query: no path found matching pattern /usr/local/bin/extractbb

ところが,
$ ls -l /usr/local/texlive/2024/bin/x86_64-linux/extractbb
lrwxrwxrwx 1 root root 9 May 6 2023 /usr/local/texlive/2024/bin/x86_64-linux/extractbb -> xdvipdfmx*

以前のままで extractbb.lua に変更されていません.だからエラーが出なかった.Update と restore を何回か繰り返すうちに依存関係が壊れていたのか?

処方箋としてはおっしゃる通り PATH の再設定が良さそうなので,$HOME/.profile をいじってみようと思います.

図や写真を取り込んで論文を書いている人たちは多いはずなので,世界中で阿鼻叫喚の嵐が起きるかと思っていたのですが,そうでもなさそうですね.来年の TeXLive 2025 では dvipdfmx から extractbb の機能を完全に取り除くと言っているので,もうひと悶着ありそう.
Toshio Otaguro への返信

Re: extractbb が変わったようですが

- 和田 勇 の投稿
redlink での最終リンク先のパス情報を見る限り、
WSL2 の方はまだ update ができていないのかな?
次のコマンドで見つからなければ、update のログなどを調べる必要がありますね。

      find  /usr/local/texlive -iname 'extractbb.lua'
和田 勇 への返信

Re: extractbb が変わったようですが

- m c の投稿
私は(u)pLaTeXからLuaLaTeXに移行しましたので,放置しておいても構わないかなと思っています.
m c への返信

Re: extractbb が変わったようですが

- Toshio Otaguro の投稿

m c さん,

私もそろそろ LuaLaTeXに移行すべきかもしれませんが,今回は PATH の追加で対処しました.やったことは,

  1. $HOME/.profile の PATH の冒頭に /usr/local/texlive/2024/bin/x86_64-linux を追加
  2. $ sudo tlmgr path remove で /usr/local/bin から TeXLive 関連のリンクを削除
  3. このままだと sudo tlmgr が実行できないので,恐る恐る /etc/sudoers を修正して
    Defaults secure_path をコメントアウト
    env_keep += "PATH" を追加

以上でエラーを出さずに \includegraphics{} を使えるようになりました.

皆様からのご教示,大変ありがとうございました.

Toshio Otaguro への返信

Re: extractbb が変わったようですが

- 和田 勇 の投稿
texlive な話では無いのですがセキュリティ上記になる書き込みがあったので。

> 3. このままだと sudo tlmgr が実行できないので,恐る恐る /etc/sudoers を修正して
> Defaults secure_path をコメントアウト
> env_keep += "PATH" を追加

これは
  セキュリティ上好ましくない(特に secure_path のコメントアウトと、 実行者の PATH を取り込むこと)
  &「 /etc/sudoers」はパッケージャによって sudo の更新が発生した際に、書き換えられる可能性がある
ので /etc/sudoers.d の下に適当なファイルをつくって、差分だけを書き込むようにしたほうが良いです。

        % sudo rg include /etc/sudoers
      52:# See sudoers(5) for more information on "@include" directives:
      54:@includedir /etc/sudoers.d

上記と /etc/sudoers.d/README を参考にしてください。

書きこむ内容は sudo での実行を許可するユーザとそのコマンドとかかな

私は macOS なので linux とはことなり sudo を行うと実行ユーザの PATH を読み込んでしまいます。
興味あるコマンドを見つけると試すことも度々あるので、この動きはあまり好ましいものではないので
TEXLIVE のインストールディレクトリ以下(私は /opt/texlive にしていますが)は
ユーザ権限で書き込めるようにしています。



和田 勇 への返信

Re: extractbb が変わったようですが

- Toshio Otaguro の投稿

和田さん,

アドバイス多謝です.一応このリスクは認識していたので「恐る恐る」と書いたのです.

現状では私の PATH は secure_path に $HOME/bin と TeXLive を加えたものに一致していたので,応急処置したところです.時間ができたらドキュメントをよく読んで sudoers.d に差分ファイルを作ろうと思います.

本来 sudoers を一般ユーザーがいじることは想定していないはずですが,今回そうせざるを得なかったという意味では,extractbb.lua のほうを改善してもらいたいと思います.セキュリティホールを埋めたつもりが,新たな穴を作ることになりかねませんので.

Toshio Otaguro への返信

Re: extractbb が変わったようですが

- m c の投稿
Debian bookwormにインストールしたTeX Live 2024でも同じ状況です.
dvipdfmx他のリビジョン番号は,Toshio Otaguroさんと同じです.

私の環境では /usr/local/bin/extractbbは「多段のリンク」ではなく,単純に
extractbb -> /usr/local/texlive/2024/bin/x86_64-linux/extractbb
となっていますが.
m c への返信

Re: extractbb が変わったようですが

- 前田 一貴 の投稿
Toshio Otaguroさんの多段が何段なのかはわかりませんが,少なくともそれはさらに
/usr/local/texlive/2024/bin/x86_64-linux/extractbb -> ../../texmf-dist/scripts/texlive/extractbb.lua
となっているはずだと思います.
前田 一貴 への返信

Re: extractbb が変わったようですが

- m c の投稿
前田さん,解説をありがとうございました.それが「多段」ということなんですね,きっと.
Toshio Otaguro への返信

Re: extractbb が変わったようですが

- 奥村 晴彦 の投稿

遅ればせながらやってみました。私のところも /usr/local/texlive はシンボリックリンクで、実際の場所は /Volumes/sandisk/local/texlive なので、エラーになるということなんでしょうか:

! ERROR (extractbb.lua): The script is in an incorrect location: /usr/local/texlive/2024/bin/universal-darwin
stack traceback:
    /usr/local/texlive/2024/bin/universal-darwin/extractbb:189: in main chunk

! LaTeX Error: Cannot determine size of graphic in image.xbb (no BoundingBox).

これはちょっと嫌ですね。。。

奥村 晴彦 への返信

Re: extractbb が変わったようですが

- 奥村 晴彦 の投稿
とりあえず189行目をコメントアウトしちゃいました。
奥村 晴彦 への返信

Re: extractbb が変わったようですが

- 前田 一貴 の投稿
前田 一貴 への返信

Re: extractbb が変わったようですが

- m c の投稿
dvipdfmxの71746が来ました.
テストしたところ,無事タイプセットできています.
# Debian 12 bookwormで確認
前田 一貴 への返信

Re: extractbb が変わったようですが

- Toshio Otaguro の投稿

前田様,

当方にも落ちてきました.元通りタイプセットできることを確認しましたので,応急処置も元に戻しました.