Тихая и скриптовая установка модулей 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
Magochi
источник