4

我需要在我没有 root 权限的 linux 机器中安装一些 CPAN 模块。

安装Spreadsheet::WriteExcel非常顺利。但是尝试安装File::Find::Rule失败,警告“您没有权限安装到.....”并提示“您可能必须 su 到 root 才能安装软件包”

我很困惑为什么有些 CPAN 模块安装需要 root 权限,而有些则不需要?如果我真的想File::Find::Rule在那个 linux 盒子中使用,有没有我可以选择的解决方案?

谢谢。

4

7 回答 7

13

您是否CPAN为该用户设置了安装到您控制的目录中?

如果是这样,那么您可能会在使用Extutils::MakeMaker(最古老和最常见的构建/安装系统)Module::Build、和Module::Install. 他们都有小怪癖。

这就是local::lib创建的原因。一旦你安装并设置了它,你就不必再担心它了(除了那些想要将东西写入特定位置的恶意模块,即使他们被告知不要这样做)。

于 2009-09-02T11:20:53.000 回答
9

查看local::lib以安装到其他位置。

于 2009-09-02T10:47:57.077 回答
8

perlfaq8


如何保留自己的模块/库目录?

当你构建模块时,告诉 Perl 在哪里安装模块。

对于基于 Makefile.PL 的发行版,在生成 Makefile 时使用 INSTALL_BASE 选项:

perl Makefile.PL INSTALL_BASE=/mydir/perl

您可以在您的 CPAN.pm 配置中进行设置,以便在您使用 CPAN.pm shell 时模块自动安装在您的私有库目录中:

% cpan
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
cpan> o conf commit

对于基于 Build.PL 的发行版,使用 --install_base 选项:

perl Build.PL --install_base /mydir/perl

您也可以将 CPAN.pm 配置为自动使用此选项:

% cpan
cpan> o conf mbuild_arg --install_base /mydir/perl
cpan> o conf commit
于 2009-09-02T20:56:20.713 回答
2

您可能没有权限将模块安装到系统目录(如/usr/lib. 如果要执行此操作,您需要make install使用超级用户权限 (susudo) 运行该步骤。

或者,您可以将 Perl 模块安装到您有权访问的本地目录,而不是安装到默认系统位置。您在生成 makefile 时指定自定义目录。

perlmodinstall

gzip -dc yourmodule.tar.gz | tar -xof -
perl Makefile.PL PREFIX=/my/perl_directory
make
make test
make install
于 2009-09-02T10:47:46.890 回答
2

确实,UNIX 下的某些软件包要求用户是“root”。安装Template::Toolkit时,它触发了AppConfig,它通过以下方式退出:

  You may have to su to root to install the package
  (Or you may want to run something like
    o conf make_install_make_command 'sudo make'
  to raise your permissions.

Cygwin 不是 UNIX。它只是 Cygwin 的一组 UNIX 实用程序。没有root用户,没有sudo,也没有办法伪造它。如果您以管理员身份运行 Bash,则不会以某种方式成为root。(实际上它可能很危险。)

实际问题是/usr/man/man3没有权限:

 > ls -ls /usr/share/man
total 1.2M
384K d--------- 1 spindlea Domain Users 0 Oct 29 18:55 man1/
768K d--------- 1 spindlea Domain Users 0 Oct 29 18:55 man3/
8.0K d--------- 1 spindlea Domain Users 0 Oct 29 12:35 man5/
 12K d--------- 1 spindlea Domain Users 0 Oct  6 16:26 man7/
 12K d--------- 1 spindlea Domain Users 0 Oct 29 12:35 man8/
   0 d--------- 1 spindlea Domain Users 0 Oct  6 16:26 mann/

因此无法安装手册页。原因:C:/Cygwin是从档案中解压出来的。在 NTFS 文件系统下,Cygwin 默认在 Windows ACL 上实现 UNIX 权限(尽管您在“安全”选项卡中看不到它们)。这些在 ZIP 档案中没有保存下来。

要恢复权限,请使用以下内容:

 > chmod -R 755 /usr/bin        # sets -rwxr-xr-x
 > chmod -R 755 /usr/local/bin  # sets -rwxr-xr-x
 > find /bin  -type d -print -exec chmod 777 {} \;
 > find /etc  -type d -print -exec chmod 777 {} \;
 > find /usr  -type d -print -exec chmod 777 {} \;
     .
     .

问题消失了。安装顺利进行。CPAN 能够满足所有依赖项。

不再出现“您可能必须 su 到 root 才能安装软件包”错误。

于 2014-10-29T20:18:16.257 回答
-3

这是因为某些软件包安装在您的用户无权写入的位置。

我的建议是让管理员为您安装软件包。我怀疑没有一种简单的方法可以解决这个问题。

于 2009-09-02T10:34:43.517 回答