이상한 이유로 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의 경우)를 사용해야 할 수도 있습니다.perl
strict.pm
dtrace
strace
perl
% sudo chmod 644 /opt/local/lib/perl5/5.26/strict.pm
없으면 strict.pm
다른 문제이며 중요한 파일이 삭제되었거나 설치가 잘못되었거나 하드 드라이브에 오류가 발생했거나 이상한 운영 체제(예: RedHat Linux)를 사용하고 있음을 나타낼 수 있습니다. ) perl
공급업체가 다양한 패키지로 잘라낸 것입니다.