Вопрос: Тихая и сценарированная установка модулей CPAN и Perl?


Мне нужно установить CPAN и некоторые модули Perl автоматически в сценарии установки Scientific Linux (RHEL). К сожалению, определенные модули, которые я хочу (по крайней мере, один из них), не могут быть найдены как RPM: насколько я видел.

Поэтому мне нужно установить CPAN, настроить его автоматически (или с помощью файла конфигурации), а затем автоматически установить нужные модули (включая зависимости).

Это не похоже на очень необычное требование, но я не видел действительно хорошей документации по этому вопросу. Проблема в том, что всякий раз, когда CPAN запускается в первый раз, выполняется интерактивная конфигурация. Можно ли это пропустить? И как мне запускать установки модулей непосредственно из командной строки?


6
2018-02-28 12:58


Источник




Ответы:


Вы можете посмотреть на cpanm для этого; это легкий, оболочный сценарий и намного проще, чем классический CPAN.


4
2018-03-22 22:11



Вряд ли правильный ответ. Используйте cpanm. Если вы используете perlbrew, используйте perlbrew install-cpanm и вы сделали. - Craig Ringer
Написал новый вопрос и ответ на serverfault.com/q/815649/102814 потому что меня раздражает то, что относительно неразборчиво, и что перлбрю никуда не выходил. - Craig Ringer


Попробуйте установить эту переменную среды перед запуском CPAN:

export PERL_MM_USE_DEFAULT=1

Это делает perl автоматически отвечать «да», когда CPAN спрашивает: «Вы хотите настроить как можно больше автоматически? [Yes]»

Источник


14
2018-01-28 13:58





«И как мне запускать установки модулей непосредственно из командной строки?»

Это должно сделать:

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

5
2018-02-28 13:12





Если это повторяющаяся задача, она может заплатить за несколько часов с помощью cpan2rpm и превратить их в RPM. По моему опыту, CPAN работает (даже интерактивно), слишком страдает от неожиданных событий (ошибки в версии, проблемы с сетью, отказы фиктивных тестов), на которые можно положиться в (полу) автоматической установке.


5
2018-02-29 08:45





Это должно сделать магию:

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

3
2017-11-21 13:25