Cpan因伪造许可错误而在cygwin下失败

时间:2018-05-18 02:26:10

标签: cygwin cpan

Windows 10,当前64位Cygwin(CYGWIN_NT-10.0 ddblap7 2.10.0(0.325 / 5/3)2018-02-02 15:16 x86_64 Cygwin),Cygwin perl 5,版本26,颠覆2(v5。 26.2)为x86_64-cygwin-threads-multi(当前的Cygwin版本),cpan版本安装(所有与Cygwin软件包完全兼容)。

首次尝试在此安装上使用cpan(相对较新的笔记本电脑,我已经在Solaris和Linux以及BSD和Cygwin上使用perl几十年了)。

尝试安装Image-ExifTool失败,说我没有写入权限。然而,这是假的;我是管理员用户,资源管理器清楚地显示我对我在c:/ cygwin64 / usr / share / perl5下探测的每个文件和目录都有写权限。

错误:

$ cpan install Image-Exiftool
Loading internal null logger. Install Log::Log4perl for logging messages

CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.

Would you like to configure as much as possible automatically? [yes]
Use of uninitialized value $what in concatenation (.) or string at /usr/share/perl5/5.26/App/Cpan.pm line 669, <STDIN> line 1.

Warning: You do not have write permission for Perl library directories.

我对随机perl库目录的权限(它们看起来都一样):

enter image description here

有什么想法吗?我找不到任何实际保护问题的迹象,但我无法从消息中确切地知道它失败了什么文件。这是一个相对较新的Cygwin安装,运行得很顺利,我一直在使用它,但最近才需要添加cpan模块。

(我不禁注意到每个人都有保护问题在Cygwin下使用cpan做任何事情。我在Windows上需要这个,但是,这是用于照片工作,我需要Adobe工具集和其他一些不适用于Linux的东西我最终得到了cpan perl 无论如何,所以我正在研究使用它的理论,而不是同时维护一个Activestate安装(并且担心它们互相攻击。)

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并且在它之前也遇到了同样的错误:

Use of uninitialized value $what in concatenation (.) or string at /usr/share/perl5/5.26/App/Cpan.pm line 669, <STDIN> line 1.

除了我说的

Use of uninitialized value $what in concatenation (.) or string at /usr/share/perl5/5.30/App/Cpan.pm line 679, <STDIN> line 1.

首先请注意,“ cpan”从/ usr / share / perl5中拉出App :: Cpan.pm,而不是/ usr / lib / perl5(也不是/ lib / perl5,这在某种程度上只是/ usr / lib /的镜像) perl5)。还要注意,这个错误不在CPAN.pm中,也不在目录CPAN中,而是在App :: Cpan中。

我从here中看到,Cpan.pm中的错误已在CPAN 2.25周围修复,但是/usr/share/perl5/5.30/CPAN.pm是2.22版。我downloaded the source for the whole CPAN package编译并安装了它。那摆脱了“未初始化的值$ what”错误消息,但是我仍然收到了“没有写权限”消息。

尝试查看cygwin认为谁拥有该目录,以及通常的perl库目录:

ls -ld /usr/share/perl5
ls -ld /lib/perl5

在Windows 10计算机上,两个目录均由我的Microsoft用户拥有。我的意思是,当您安装Windows 10时,它希望您使用Microsoft帐户登录到您的计算机,该帐户也将登录到所有其他Windows 10计算机。我认为这是一个可怕的安全隐患,所以我只用那台机器上的本地帐户进行所有操作。但是以某种方式,cygwin认为我的Microsoft帐户拥有cygwin目录。

但是,跑步

for d in bin dev etc lib opt packages tmp usr var; do chown -R me $d; chgrp -R Users $d; done

没有停止权限错误。看来最好在Windows中更改权限。 cygwin在Windows 10中无法做到这一点-对于您具有权限的事情,它常常说“拒绝权限”。但是这样做也不能解决问题。

也许问题是我以一个用户身份安装了cygwin,并试图以另一个用户身份使用它,所以我需要完全重新安装cygwin。我只是屈服了,选择了[local :: lib]选项,所以我的perl库将安装在usr / local / lib / perl5下。