cpan对.local目录的使用可以重定向吗?

Can cpan's use of the .local directory be redirected?

我有一个 setuid 程序,然后代表用户以 root 身份调用 cpan。这适用于像 yum 这样的命令,但不适用于 cpan。我的问题是用户的主目录是 NFS 挂载共享,并使用 root-squash 选项,因此 root 无法访问用户的主目录。

Cpan 尝试在用户的主目录中创建 .local 目录,但由于 root-squash 而失败。

有没有办法配置 cpan,使其使用另一个路径作为构建包的基础?或者,有没有办法将 root 设置为记录的用户标识,以便 cpan 尝试在那里创建 .local 文件?

示例输出:

./cloudSoftware cpan foobar mkdir /home/auto/ts00086/.local: 权限在 /usr/share/perl5/CPAN/HandleConfig.pm 第 589 行被拒绝。

cpan_home_dir_candidates 生成目录列表。

  1. 使用列表中包含 CPAN/MyConfig.pm 的第一个目录。
  2. 否则,使用列表中存在的第一个目录。
  3. 否则,使用列表中的第一个目录。

那么这个列表是如何构建的呢?

if ($CPAN::META->has_usable('File::HomeDir')) {
    if ($^O ne 'darwin') {
        push @dirs, File::HomeDir->my_data;
        # my_data is ~/Library/Application Support on darwin,
        # which causes issues in the toolchain.
    }
    push @dirs, File::HomeDir->my_home;
}
# Windows might not have HOME, so check it first
push @dirs, $ENV{HOME} if $ENV{HOME};
...

选项包括:

  • 更改 HOME 环境变量(如果未安装 File::HomeDir)。
  • CPAN/HandleConfig.pm 中编辑 cpan_home_dir_candidates 以添加 push @dirs, "/alt/dir";
  • ...