我需要在我没有 root 权限的 linux 机器中安装一些 CPAN 模块。
安装Spreadsheet::WriteExcel
非常顺利。但是尝试安装File::Find::Rule
失败,警告“您没有权限安装到.....”并提示“您可能必须 su 到 root 才能安装软件包”
我很困惑为什么有些 CPAN 模块安装需要 root 权限,而有些则不需要?如果我真的想File::Find::Rule
在那个 linux 盒子中使用,有没有我可以选择的解决方案?
谢谢。
我需要在我没有 root 权限的 linux 机器中安装一些 CPAN 模块。
安装Spreadsheet::WriteExcel
非常顺利。但是尝试安装File::Find::Rule
失败,警告“您没有权限安装到.....”并提示“您可能必须 su 到 root 才能安装软件包”
我很困惑为什么有些 CPAN 模块安装需要 root 权限,而有些则不需要?如果我真的想File::Find::Rule
在那个 linux 盒子中使用,有没有我可以选择的解决方案?
谢谢。
您是否CPAN
为该用户设置了安装到您控制的目录中?
如果是这样,那么您可能会在使用Extutils::MakeMaker
(最古老和最常见的构建/安装系统)Module::Build
、和Module::Install
. 他们都有小怪癖。
这就是local::lib
创建的原因。一旦你安装并设置了它,你就不必再担心它了(除了那些想要将东西写入特定位置的恶意模块,即使他们被告知不要这样做)。
查看local::lib以安装到其他位置。
从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
您可能没有权限将模块安装到系统目录(如/usr/lib
. 如果要执行此操作,您需要make install
使用超级用户权限 (su
或sudo
) 运行该步骤。
或者,您可以将 Perl 模块安装到您有权访问的本地目录,而不是安装到默认系统位置。您在生成 makefile 时指定自定义目录。
gzip -dc yourmodule.tar.gz | tar -xof -
perl Makefile.PL PREFIX=/my/perl_directory
make
make test
make install
确实,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 才能安装软件包”错误。
Stackoverflow 上已经有其他可能的答案:
这是因为某些软件包安装在您的用户无权写入的位置。
我的建议是让管理员为您安装软件包。我怀疑没有一种简单的方法可以解决这个问题。