OS X El Capitan의 Perl 문제

OS X El Capitan의 Perl 문제

이상한 이유로 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

이제 루트로 실행해야 하는데 매우 짜증납니다. 나도 모르게 뒤에서 뭔가가 벌어지고 있었다.

일반 사용자로 명령을 실행하면 다음과 같은 결과가 나타납니다.

% /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
...

처음 두 경로는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의 경우)를 사용해야 할 수도 있습니다.perlstrict.pmdtracestraceperl

% sudo chmod 644 /opt/local/lib/perl5/5.26/strict.pm

없으면 strict.pm다른 문제이며 중요한 파일이 삭제되었거나 설치가 잘못되었거나 하드 드라이브에 오류가 발생했거나 이상한 운영 체제(예: RedHat Linux)를 사용하고 있음을 나타낼 수 있습니다. ) perl공급업체가 다양한 패키지로 잘라낸 것입니다.

관련 정보