LoginSignup
0
1

More than 3 years have passed since last update.

MacOSにおけるPATH変数生成は2つの問題がある。(path_helper問題1)

Last updated at Posted at 2020-09-04

Mac版 path_helper 問題の歴史と経緯。

MacOSにおけるPATH変数生成は2つの問題がある。
問題(1) pathsファイルにかかれたパスの優先順位の問題。
問題(2) path_helper が生成する各pathの優先順位の問題。

(1) は /usr/local/bin を一番上の行に書くことで解決出来る。
(2) は 複雑でbashとzshで挙動が3つ以上の異なるケースがありえる。

歴史的経緯

2009年以前
path_helper が作成された時期と作者(Apple又はBSD系ディストリ?)は現時点では不明。

2009年〜2010年
今回調べたら10.6.8なMacでも問題(1)(2)は存在していた。

paths.d $ pwd
/etc/paths.d
paths.d $ ls
X11
paths.d $ more X11 
/usr/X11/bin
paths.d $ /usr/libexec/path_helper 
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"; export PATH;
paths.d $ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.
paths.d $ zsh --version
zsh 4.3.9 (i386-apple-darwin10.0)
paths.d $ 

2012年10月
【Mac】zshをサブシェルで起動するとPATHがおかしくなる - よんちゅBlog
http://yonchu.hatenablog.com/entry/2012/10/19/010307

==> Caveats
To use this build of Zsh as your login shell, add it to /etc/shells.

If you have administrator privileges, you must fix an Apple miss
configuration in Mac OS X 10.7 Lion by renaming /etc/zshenv to
/etc/zprofile, or Zsh will have the wrong PATH when executed
non-interactively by scripts.

Alternatively, install Zsh with /etc disabled:

  brew install --disable-etcdir zsh

homebrew作者は2012年10月以前に本件の問題に気がついている。
現在も、上記の方法が(推奨ではなく)仕方なく提示されているかもしれない。
筆者はhomebrewのzshインストール現状を知らないが、/etcをユーザーが修正する方針だ。
(renaming /etc/zshenv to /etc/zprofile)

筆者は今回の件で問題(2) を初めて知った。(1)は昔から知っていたが
bash_profileやzshenv で
expoert PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin (3)
と/etcにある問題(1)を嫌って初期化していた為、問題(2)に気がつくのが遅れた。

2013-06-20
OSX + screen + rbenv でハマった話 - kurainの壺
https://r-kurain.hatenablog.com/entry/20130620/1371734555

2017年12月
path_helper ($PATHを設定するコマンド) (macOS, /etc/paths.d, /etc/paths, shell間をまたいだパス設定) - いろいろ備忘録日記
https://devlights.hatenablog.com/entry/2017/12/12/160216

2019年11月
Macの$PATHの設定箇所は「/etc/paths」にある - Qiita
https://qiita.com/pure-one/items/7ec745056ddc65d7ef50

macOS High Sierra (v10.13)
macOS Mojave (v10.14.1)

10.12以降は筆者は未確認。
appleは問題を受け入れたのか不明。
appleはテストをしておらず、zsh標準化時にもテストと修正を怠った。

ここまでの結論

ここまでの結論。問題は昔から存在し、この数年だけでもappleに指摘されていると想像される。

2020年 筆者の記事
mac版/usr/libexec/path_helperがシステムを異常動作に導く - Qiita
https://qiita.com/shiro_yone/items/a35f445e1c8d2293d123

参考
Linux の /etc/profile /etc/bash.bashrc /etc/zsh/zshenv - Qiita
https://qiita.com/shiro_yone/items/edfcb22e162e0e590024

結論

結論1
bashやzsh、vim、screen等の/etcを使用するソフトウェア(以下/etc使用ソフト)からOSを見ると、/etcは(エンドユーザーではないが)OSプロバイダー(日本語で提供者、提供会社。)である人間が設定すべき。
結論2
/etc使用ソフトからOSを見ると、/etcから出力されるPATHはMacであれば
/usr/local/binが前に来て優先される(3)が望ましい。
結論3
「System Integrity Protection(SIP)」の仕様の為、10.11以降
「/usr/local/bin 」はPATH変数で「/usr/bin:/bin:/usr/sbin:/sbin」より前の記載が必須。
10.9以前のOSよりも強制されるべき。
結論4
/etc/paths.dのPATH変数も「/usr/bin:/bin:/usr/sbin:/sbin」より前の記載が必須。
結論5
結論2,3,4において、PATH優先順位の考え方はlinuxと同じ優先順位となる結果が得られることが望ましい。
/etc使用ソフトからみて、PATHがらみのコードは一つで済む。
結論6
path_helper には明らかなバグがある。

この問題だけでもサーバーやインフラ、ネットワーク構築者はMacを嫌って当然。エンジニアの上司だって部下にlinuxにしとけ、と言うに決まってる。めんどくさい。

homebrew作者一人が問題(1)(2)に気がついていても、利用している実行バイナリーやライブラリーは無数の人手から成り立っている。検証と断言は出来ないが各バイナリーやライブラリー作者がMac特有のPATH問題に気がついてなくても当然だと思った。
どんな不具合が起きてもおかしくはない。


djeeno.log: Mac で sh/bash/zsh などシェルログイン時に Wireshark: Permission denied と出力される
https://djeeeno.blogspot.com/2019/12/20191227-01-wireshark-permission-denied.html

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1