奇妙な理由で、OS Xで突然次のように表示されます。
Can't locate strict.pm: Permission denied at /usr/bin/shasum5.18 line 100.
BEGIN failed--compilation aborted at /usr/bin/shasum5.18 line 100.
Homebrewでプレイするとき(brew doctor
たとえば)
私はそれがHomebrewではなくAppleに関連していると確信しています。いつものように、私は他の* nixと比較して権限を処理するAppleのロジックを決して理解していませんでした!
以前は、一般ユーザーとして次のコマンドを実行できました。
% perl -V
これでrootとして実行する必要がありますが、非常に迷惑です。私も知らないうちに何かが起こっていた。
通常のユーザーとしてコマンドを実行すると、次の結果が表示されます。
% /usr/bin/perl -V
Can't locate Config.pm: Permission denied.
BEGIN failed--compilation aborted.
誰かが通常のユーザーとしてこのコマンドを実行するのに役立つことができれば幸いです。
ご協力ありがとうございます。
@thrig、Arkadiusz Drabczyk教授に感謝します!
これが私がしたことです:
% /usr/bin/perl -le 'print for @INC' | while read d; do ls -ld -- "$d"; done
drwxr-xr-x 6 root wheel 204 1 fév 10:59 /Library/Perl/5.18/darwin-thread-multi-2level
drwxr-xr-x 4 root wheel 136 17 sep 2015 /Library/Perl/5.18
ls: /Network/Library/Perl/5.18/darwin-thread-multi-2level: No such file or directory
ls: /Network/Library/Perl/5.18: No such file or directory
ls: /Library/Perl/Updates/5.18.2: Permission denied
drwxr-xr-x 56 root wheel 1904 25 mai 15:03 /System/Library/Perl/5.18/darwin-thread-multi-2level
drwxr-xr-x 130 root wheel 4420 23 aoû 2015 /System/Library/Perl/5.18
drwxr-xr-x 66 root wheel 2244 17 sep 2015 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level
drwxr-xr-x 109 root wheel 3706 23 aoû 2015 /System/Library/Perl/Extras/5.18
drwx------+ 37 Nathalie staff 1258 8 jui 22:26 .
良い主!犯人はアウトプットだ/Library/Perl/Updates/5.18.2
!信じられない!
幸いなことに、私はPerl全体を使用して他のシステムから得られた権限と関連する権限を比較することができました。
その後、新しい権限をインストールしました。
sudo chmod 775 /Library/Perl/Updates
これでperl -V
、通常のユーザーとしてプレイを始めることができます。
答え1
これは、Appleの問題、ホームブレークがベンダー@INC
から提供された変更を誤って変更したり、/usr/bin/perl
一部のユーザーエラーが原因で発生する可能性があります。モジュールを見つけるための@INC
パスのリストなのでperl
% perl -E 'say for @INC'
/Users/jhqdoe/perl5/lib/perl5/darwin-thread-multi-2level
/Users/jhqdoe/perl5/lib/perl5
/opt/local/lib/perl5/site_perl/5.26/darwin-thread-multi-2level
/opt/local/lib/perl5/site_perl/5.26
...
PATH
これは私が最初に使用したMacPortバージョンです。
% /usr/bin/perl -E 'say for @INC'
/Users/jhqdoe/perl5/lib/perl5/darwin-thread-multi-2level
/Users/jhqdoe/perl5/lib/perl5
/Library/Perl/5.18/darwin-thread-multi-2level
/Library/Perl/5.18
/Network/Library/Perl/5.18/darwin-thread-multi-2level
/Network/Library/Perl/5.18
...
最初の2つのパスはlocal::lib
他の設定がある場合とない場合があります。とにかく、これはエラーメッセージであるため、各ディレクトリに対して権限の問題を見つける必要があります。何かが破損して実行して内容をperl
確認できない場合、問題になることがあります。@INC
私のシステムを壊す時間です。
% chmod 000 /Users/jhqdoe/perl5/lib/perl5
% perl -E 'say for @INC'
Can't locate feature.pm: /Users/jhqdoe/perl5/lib/perl5/feature.pm: Permission denied.
BEGIN failed--compilation aborted.
モジュールをロードしない古い形式(例feature.pm
:)を実行するか、破損していないインストールで実行してから、破損したシステムperl -V
でそのパスを確認するのが役立ちます。perl
ここでは、以前の形式のコードを使用してパスのリストを取得できます。
% perl -le 'print for @INC' | while read d; do ls -ld -- "$d"; done
d--------- 111 jhqdoe nsd 3774 Jun 1 10:44 /Users/jhqdoe/perl5/lib/perl5
...
このエラーは非常に明白です。他のシステムでは、誰かが誤って設定されているか、誤ったグループ/
権限/Users
を持つ微妙な問題(セカンダリグループが適用されないなど)がある可能性があるため、パス内のすべてのディレクトリに対する権限を確認する必要があるかもしれません。素晴らしいファイルシステムACLが関連しています。繰り返しますが、これはパス内のすべてのディレクトリにある可能性があります。
% chmod 750 /Users/jhqdoe/perl5/lib/perl5
さて、別の方法で分析してみましょう。 Appleゾーンには、ランダムな変更(悪いか悪い)を防ぐためのセキュリティ制限がある可能性があるため、今回はMacPortsのインストールを中止します。
% sudo chmod 000 "$(perl -Mstrict -E 'say $INC{"strict.pm"}')"
% perl -Mstrict -E 'say "borked?"'
Can't locate strict.pm: /opt/local/lib/perl5/5.26/strict.pm: Permission denied.
BEGIN failed--compilation aborted.
解決策は同じです。すべてのディレクトリパスと@INC
ロードするモジュールの名前(ここ)を調べて、権限の問題を修正してください。複数のエラーがある可能性があります。表示されているファイルシステムのパスを見つけるのに役立つように、システムトレースツール(またはLinuxの場合)を使用する必要があります。perl
strict.pm
dtrace
strace
perl
% sudo chmod 644 /opt/local/lib/perl5/5.26/strict.pm
そうでない場合はstrict.pm
、他の問題であり、重要なファイルが削除されたか、インストールが正しくない、ハードドライブにエラーが発生した、または奇妙なオペレーティングシステム(RedHat Linuxなど)を使用していることを示している可能性があります。 )perl
サプライヤーがさまざまなパッケージに切り詰めたものです。