静默和脚本化安装CPAN和Perl模块?


9

我需要在Scientific Linux(RHEL)安装脚本中自动安装CPAN和一些Perl模块。不幸的是,据我所知,我想要的特定模块(至少其中一个)无法作为RPM:s找到。

因此,我需要安装CPAN,自动进行配置(或使用配置文件),然后也自动安装所需的模块(包括依赖项)。

这似乎不是一个非常不寻常的要求,但是我还没有看到任何非常好的文档。问题在于,每次首次启动CPAN时,都会运行交互式配置。可以以某种方式跳过吗?以及如何直接从命令行启动模块安装?

Answers:


5

您可能想要看看cpanm;它轻巧,可编写外壳脚本,并且比传统的CPAN简单得多。


1
绝对正确的答案。使用cpanm。如果您正在使用Perlbrew,请使用perlbrew install-cpanm并完成。
Craig Ringer

serverfault.com/q/815649/102814上发布了一个新的问题和答案,因为我对它的相对难以发现感到恼火,并且这种白菜丝在任何地方都没有出现。
Craig Ringer

23

在运行CPAN之前,请尝试设置此环境变量:

export PERL_MM_USE_DEFAULT=1

当CPAN询问“您是否要自动配置尽可能多的内容?[是]”时,它将使perl自动回答“是”。

资源


这个答案比接受的答案好得多。
kapad

6

“以及如何直接从命令行启动模块安装?”

应该这样做:

perl -MCPAN -e 'install Your::Package'

5

如果这是一项重复性任务,则可能需要花几个小时使用cpan2rpm并将其转变为RPM。以我的经验,CPAN的运行(甚至是交互式)太受意料之外的事件(版本怪癖,网络问题,虚假测试失败)的困扰,无法在(半)自动安装中依赖它。


3

这应该做到了:

get_cpanm(){
    if [ \! -f /usr/local/bin/cpanm ]; then
            cd $TMP_DIR && curl --insecure -L http://cpanmin.us | perl - App::cpanminus
            if [ \! -f /usr/local/bin/cpanm ]; then
                    echo "Downloading from cpanmin.us failed, downloading from xrl.us"
                    curl -LO http://xrl.us/cpanm &&
            chmod +x cpanm &&
            mv cpanm /usr/local/bin/cpanm
            fi
    fi
    CPANM=$(which cpanm);
    if [ \! -f "$CPANM" ]; then
            echo "ERROR: Unable to find cpanm"
            return 1;
    fi
    return 0
}
cpanm Time::HiRes CGI Moose Config::JSON other::cpanmodules
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.