Мне нужно установить CPAN и некоторые модули Perl автоматически в установочном скрипте Scientific Linux (RHEL). К сожалению, конкретные модули, которые мне нужны (по крайней мере, один из них), не могут быть найдены как RPM: s, насколько я видел.
Поэтому мне нужно установить CPAN, настроить его автоматически (или с помощью файла конфигурации), а затем автоматически установить необходимые модули (включая зависимости).
Это не кажется очень необычным требованием, но я не видел по этому поводу действительно хорошей документации. Проблема в том, что всякий раз, когда CPAN запускается впервые, запускается интерактивная конфигурация. Можно это как-то пропустить? А как запустить установку модуля прямо из командной строки?
Попробуйте установить эту переменную среды перед запуском CPAN:
export PERL_MM_USE_DEFAULT=1
Это заставляет perl автоматически отвечать «да», когда CPAN спрашивает «Вы хотите настроить как можно больше автоматически? [Да]»
«А как мне запустить установку модуля прямо из командной строки?»
Это должно делать:
perl -MCPAN -e 'install Your::Package'
Если это повторяющаяся задача, можно потратить несколько часов на cpan2rpm и превратить их в RPM. По моему опыту, запуск CPAN (даже интерактивный) слишком страдает от неожиданных событий (причуды версии, проблемы с сетью, сбои фиктивных тестов), чтобы на них можно было положиться при (полу) автоматической установке.
Вы можете посмотреть на cpanm для этого; он легкий, поддерживает сценарии оболочки и намного проще, чем классический CPAN.
Это должно творить чудеса:
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