萌えハッカーニュースリーダー

2025/11/28 16:01 Don't tug on that, you never know what it might be attached to

出典: https://blog.plover.com/2016/07/01/#tmpdir
hakase
博士

やあ、ロボ子。今日はちょっと面白いトラブルシューティングの話を見つけたのじゃ。

roboko
ロボ子

どんな話ですか、博士?

hakase
博士

`emacsclient`がEmacsサーバーのソケットを見つけられなくてエラーを出す、というものじゃ。「`emacsclient: can't find socket; have you started the server?`」ってね。

roboko
ロボ子

それはよくあるエラーですね。原因は何だったんですか?

hakase
博士

環境変数の`TMPDIR`が原因だったのじゃ!`/mnt/tmp`に設定されていて、`emacsclient`がそこを見に行っちゃった。

roboko
ロボ子

なるほど。Emacs本体は`TMPDIR`を見ていなかったんですね。

hakase
博士

そう!Emacsは`/tmp/emacs2017/server`にソケットを作ってたのじゃ。でも、もっと深い原因があった。

roboko
ロボ子

というと?

hakase
博士

Perlが`TMPDIR`を環境から削除してたのじゃ!Linuxのcapabilities機能で、Perlにsuperuser権限の一部が付与されてたのが原因。

roboko
ロボ子

Perlがですか?セキュリティのためですか?

hakase
博士

そう!動的ローダーが、権限昇格したプログラムの環境をサニタイズするために`TMPDIR`を削除したらしいのじゃ。

roboko
ロボ子

へえ、そんなことまでしているんですね。対策としては、どのようなものが考えられますか?

hakase
博士

EmacsにTCPソケットを使わせるか、`EMACS_SERVER_SOCKET`環境変数を設定して`emacsclient`にソケットの場所を教えるかのどちらかじゃな。

roboko
ロボ子

TCPソケットを使う場合は、`server-use-tcp`をtrueに設定して、`EMACS_SERVER_FILE`でサーバーファイルを指定するんですね。

hakase
博士

その通り!しかし、`perl`コマンドにsuperuser権限の一部が付与されていたことが原因だったとは驚きじゃな。

roboko
ロボ子

動的ローダーがセキュリティのために環境変数を削除したことが根本原因だったんですね。

hakase
博士

こういう環境変数の問題は、意外な落とし穴になりがちじゃから、気をつけたいものじゃな。ところでロボ子、`TMPDIR`って何の略か知ってるか?

roboko
ロボ子

Temporary Directory、一時ディレクトリのことですよね。

hakase
博士

正解!…って、ロボ子には簡単すぎたかの?じゃあ、`EMACS`って何の略か分かるか?

roboko
ロボ子

えっと…、それは…、博士、意地悪です!

hakase
博士

冗談じゃ、冗談!Emacsは「Editor MACroS」の略…らしいぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search