【问题标题】:Cpan fails under cygwin with bogus permission errorCpan 在 cygwin 下因伪造权限错误而失败
【发布时间】:2018-10-28 09:37:28
【问题描述】:

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 失败,提示我没有写入权限。然而,那是假的;我是管理员用户,Explorer 清楚地显示我对我在 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 库目录的权限(它们看起来都一样):

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

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

【问题讨论】:

  • 询问 cygwin 它如何查看对这些目录和文件的权限。 Cygwin 对 ACL 有自己的解释来模拟类似 PSOX 的行为。
  • 呵呵,你以为他们会检查自己,而不是仅仅执行操作并检查是否失败?编写软件的方式很奇怪!好吧,让我们看看...看起来不是很有趣
  • 找不到任何调用代码模式的方法(在此处有效);可能需要单独编辑输出的每一行。
  • ctrl-k 选择网址栏,不调用代码模式。四个空格可能有效,但我必须单独编辑每一行。尽管有文档,但反引号不起作用。
  • $ ls -ald * drwxr-xr-x+ 1 ddb 无 0 5 月 5 日 13:37 5.26 drwxr-xr-x+ 1 ddb 无 0 3 月 4 日 20:10 vendor_perl

标签: cygwin cpan


【解决方案1】:

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

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 是 v 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 下。

【讨论】:

    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2018-08-08
    相关资源
    最近更新 更多