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


9

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

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

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

Ответы:


5

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


1
В подавляющем большинстве правильный ответ. Используйте cpanm. Если вы используете perlbrew, используйте perlbrew install-cpanmи все готово.
Крейг Рингер

Опубликовал новый вопрос и ответ по адресу serverfault.com/q/815649/102814, потому что меня раздражает то, насколько это невозможно обнаружить, и этот perlbrew нигде не появлялся.
Крейг Рингер

23

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

export PERL_MM_USE_DEFAULT=1

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

Источник


Этот ответ намного лучше, чем принятый ответ.
Капад

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.