Por algum motivo estranho, o OS X de repente 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 de que está relacionado à Apple e não ao Homebrew. Como sempre, nunca entendi a lógica da Apple ao lidar com permissões versus outros *nix!
Antes, eu poderia executar como usuário comum este comando:
% perl -V
Agora, eu tenho que executá-lo como root, o que é terrivelmente chato. Algo aconteceu sob o capô sem 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 pudesse me ajudar a executar este comando como um usuário regular.
Obrigado pela ajuda.
Obrigado Professores @thrig, Arkadiusz Drabczyk!
Isto é 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 Deus! A saída /Library/Perl/Updates/5.18.2
foi a culpada! Eu não posso acreditar!
Felizmente, consegui comparar as permissões relacionadas com as obtidas do meu outro sistema com Perl ininterrupto…
Em seguida, instalei as novas permissões:
sudo chmod 775 /Library/Perl/Updates
Agora posso perl -V
como usuário regular e começar a jogar.
Isso pode ser devido a um problema da Apple, alteração incorreta
@INC
do homebrew de forma que o fornecedor fornecido/usr/bin/perl
esteja percebendo essas alterações ou algum erro do usuário.@INC
é uma lista de caminhos ondeperl
procura por módulos, entãoOoops, essa é a versão MacPorts que eu tenho primeiro,
PATH
entãoEsses dois primeiros caminhos são dos
local::lib
quais outras configurações podem ou não ter. Independentemente disso, para cada um desses diretórios, precisamos procurar problemas de permissão, pois essa é a mensagem de erro. Isso pode ser problemático se as coisas já estiverem quebradas, então você não pode correrperl
para ver o que@INC
contém. Ok, hora de quebrar meu sistema.formulários mais antigos que não carregam módulos (como
feature.pm
) podem ajudar, ou executarperl -V
, ou executarperl
em uma instalação não quebrada e então inspecionar esses caminhos no sistema quebrado. Aqui podemos usar uma forma de código mais antiga para obter a lista de caminhos:Este erro é bastante óbvio. Em outros sistemas, você pode precisar 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 onde há permissões de grupo incorretas (e, por exemplo, grupos secundários não estão sendo aplicadas) ou algum sistema de arquivos sofisticado ACL envolvido. Novamente, eles podem estar em qualquer diretório do caminho.Ok, vamos quebrar de outra maneira. Desta vez, interromperei a instalação do MacPorts, pois a área da Apple pode ter restrições de segurança que impedem alterações aleatórias (para melhor ou para pior).
A solução é a mesma, veja todos os caminhos do diretório
@INC
e também o nome do módulo queperl
está tentando carregar (aqui,strict.pm
) e corrija qualquer problema de permissão. Pode haver vários erros. Você pode precisar usar um recurso de rastreamento do sistema (dtrace
, oustrace
no Linux) para ajudar a encontrar os caminhos do sistema de arquivos queperl
estão procurando.Se
strict.pm
, em vez disso, não estiver presente, esse é um problema diferente e pode indicar que arquivos críticos foram excluídos ou a instalação foi de alguma forma mal feita ou o disco rígido está falhando, ou você está em um sistema operacional estranho (como RedHat Linux) ondeperl
foi foi dividido em uma variedade de pacotes pelo fornecedor.