【问题标题】:Can cpan's use of the .local directory be redirected?cpan对.local目录的使用可以重定向吗?
【发布时间】:2017-08-31 08:26:38
【问题描述】:

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

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

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

样本输出:

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

【问题讨论】:

    标签: perl cpan setuid


    【解决方案1】:

    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";
    • ...

    【讨论】:

    • 我能够运行“HOME='/tmp' cpan Net::foobar”,并且成功了。谢谢!
    猜你喜欢
    • 2012-06-29
    • 2012-11-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多