Cài đặt im lặng và kịch bản cài đặt các mô-đun CPAN và Perl?


9

Tôi cần tự động cài đặt CPAN và một số mô-đun Perl trong tập lệnh cài đặt Khoa học Linux (RHEL). Thật không may, các mô-đun cụ thể mà tôi muốn (ít nhất là một trong số chúng) không thể được tìm thấy dưới dạng RPM: theo như tôi đã thấy.

Vì vậy, tôi cần cài đặt CPAN, tự động định cấu hình (hoặc với tệp cấu hình) và sau đó cài đặt các mô-đun mong muốn (bao gồm cả phụ thuộc).

Đây không phải là một yêu cầu rất bất thường, nhưng tôi chưa thấy tài liệu nào thực sự tốt về điều này. Vấn đề là bất cứ khi nào CPAN được khởi chạy lần đầu tiên, một cấu hình tương tác sẽ chạy. Điều này có thể được bỏ qua bằng cách nào đó? Và làm cách nào để khởi chạy các cài đặt mô-đun trực tiếp từ dòng lệnh?

Câu trả lời:


5

Bạn có thể muốn xem cpanm cho việc này; nó nhẹ, shell script, và đơn giản hơn nhiều so với CPAN cổ điển.


1
Choáng ngợp câu trả lời đúng. Sử dụng cpanm. Nếu bạn đang sử dụng perlbrew, hãy sử dụng perlbrew install-cpanmvà bạn đã hoàn thành.
Craig Ringer

Đã đăng một câu hỏi và câu trả lời mới tại serverfault.com/q/815649/102814 vì tôi cảm thấy khó chịu vì điều này tương đối không thể phát hiện được và rằng perlbrew đã không xuất hiện ở bất cứ đâu.
Craig Ringer

23

Hãy thử đặt biến môi trường này trước khi chạy CPAN:

export PERL_MM_USE_DEFAULT=1

Nó làm cho perl tự động trả lời "có" khi CPAN hỏi "Bạn có muốn tự động định cấu hình càng nhiều càng tốt không? [Có]"

Nguồn


Câu trả lời này tốt hơn nhiều so với câu trả lời được chấp nhận.
kapad

6

"Và làm cách nào để khởi chạy các cài đặt mô-đun trực tiếp từ dòng lệnh?"

Điều này nên làm:

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

5

Nếu đó là một nhiệm vụ lặp đi lặp lại, có thể phải trả một vài giờ với cpan2rpm và biến chúng thành RPM. Theo kinh nghiệm của tôi, các lần chạy CPAN (thậm chí tương tác) quá khó chịu bởi các sự kiện bất ngờ (quirks phiên bản, sự cố mạng, lỗi kiểm tra không có thật) được dựa vào cài đặt tự động (bán).


3

Điều này sẽ làm điều kỳ diệu:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.