Perl Issue no OS X El Capitan

1

Por alguma estranha razão, o OS X subitamente me mostra:

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.

ao jogar com Homebrew ( brew doctor por exemplo)

Tenho certeza que está relacionado à Apple e não ao Homebrew. Como sempre, nunca entendi a lógica da Apple ao lidar com permissões vs. outras * nix!

Antes, eu poderia executar como usuário comum este comando:

% perl -V

Agora, tenho que executá-lo como raiz, o que é terrivelmente chato. Algo aconteceu sob o capô com o meu conhecimento.

Se eu executar o comando como um usuário comum, tenho:

% /usr/bin/perl -V
Can't locate Config.pm:   Permission denied.
BEGIN failed--compilation aborted.

Eu ficaria satisfeito se alguém puder me ajudar a executar este comando como um usuário comum.

Obrigado pela sua ajuda.

Obrigado Professores @thrig, Arkadiusz Drabczyk!

Foi o que eu fiz:

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

Bom senhor! A saída /Library/Perl/Updates/5.18.2 foi o culpado! Eu não posso acreditar!

Felizmente, consegui comparar as permissões relacionadas com as obtidas do meu outro sistema com o Perl ininterrupto…

Em seguida, instalei as novas permissões:

sudo chmod 775 /Library/Perl/Updates

Agora posso usar perl -V como usuário comum e começar a jogar.

    
por Faxopita 08.06.2018 / 17:17

1 resposta

0

Isso pode ser devido a um problema da Apple, o homebrew incorretamente alterando @INC de tal forma que o fornecedor fornecido /usr/bin/perl esteja atendendo a essas alterações ou algum erro do usuário. @INC é uma lista de caminhos onde perl procura por módulos, então

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

Ooops é a versão do MacPorts que eu tenho primeiro em PATH então

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

Esses dois primeiros caminhos são de local::lib que outras configurações podem ou não ter. Independentemente, para cada um desses diretórios, precisamos procurar por problemas de permissões, pois essa é a mensagem de erro. Isso pode ser problemático se as coisas já estiverem quebradas, então você não pode executar perl para ver o que o @INC contém. Ok, hora de quebrar meu sistema.

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

formulários mais antigos que não carregam módulos (como feature.pm ) podem ajudar, ou executar perl -V ou executar perl em uma instalação não quebrada e, em seguida, inspecionar esses caminhos no sistema corrompido. Aqui podemos usar uma forma de código mais antiga para obter a lista de caminhos:

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

Esse erro é bastante óbvio. Em outros sistemas, talvez seja necessário inspecionar as permissões em cada diretório no caminho, pois alguém pode ter configurado incorretamente / ou /Users (e assim por diante) ou pode haver um problema sutil em que há permissões de grupo incorretas (e, por exemplo, grupos secundários não estão sendo aplicados) ou alguma ACL sofisticada do sistema de arquivos envolvida. Novamente, estes podem estar em qualquer diretório do caminho.

% chmod 750 /Users/jhqdoe/perl5/lib/perl5

Ok, vamos quebrar de outra forma. Eu quebrarei a instalação do MacPorts desta vez, pois a área da Apple pode ter restrições de segurança que impedem mudanças aleatórias (para melhor ou para pior).

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

A solução é a mesma, observe todos os caminhos de diretório em @INC e também o nome do módulo que perl está tentando carregar (aqui, strict.pm ) e corrija quaisquer problemas de permissão. Pode haver vários erros. Talvez seja necessário usar um recurso de rastreamento do sistema ( dtrace ou strace no Linux) para ajudar a encontrar os caminhos do sistema de arquivos para os quais o perl está olhando.

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

Se strict.pm não estiver presente, isso é um problema diferente e pode indicar que arquivos críticos foram excluídos ou a instalação foi de alguma forma defeituosa ou o disco rígido está falhando, ou você está em um sistema operacional estranho (como como RedHat Linux), onde perl foi dividido em uma variedade de pacotes pelo fornecedor.

    
por 08.06.2018 / 18:40