2013-06-20 37 views
11

Tôi đang cố gắng cài đặt máy DateTime trên máy chủ Linux. Rất tiếc, máy chủ Linux này có một số chính sách truy cập mạng bị hạn chế ngăn tôi sử dụng trình bao CPAN trực tiếp để tải xuống nội dung hoặc cài đặt cpanminus. Thay đổi chính sách truy cập nằm ngoài tầm kiểm soát của tôi, vì vậy tôi đang tìm cách giải quyết. Tôi cũng không có quyền truy cập root vào máy chủ Linux này.Cài đặt mô-đun Perl với nhiều phụ thuộc trên máy không có quyền truy cập mạng CPAN

Tôi có thể tải xuống bất kỳ thứ gì vào máy Window của công việc và tải lên một phần chia sẻ tệp trên máy chủ này. Vì vậy, tôi bắt đầu kéo xuống các phụ thuộc DateTime một. Tôi sẽ tải xuống một mô-đun, đôi khi nó sẽ có Makefile.PL, đôi khi nó sẽ có Build.PL. Tôi sau đó rebase mỗi Build hoặc Makefile để INSTALL_BASE của tôi, kiểm tra từng module. Tôi đã làm điều đó cho khoảng 20 mô-đun, và cây dường như mở rộng đến các lớp học nhỏ hơn bao giờ hết mà không có kết thúc ...

Tôi hy vọng bạn có thể cho tôi biết một cách tốt hơn. Có cách nào tôi có thể bắt đầu tải xuống từ máy có quyền truy cập CPAN (ví dụ hộp Windows của tôi) của tất cả phụ thuộc DateTime vào một gói Perl khổng lồ, tải nó lên máy chủ Linux và chạy CPAN ở đó (không có truy cập mạng) đặt mọi thứ vào đúng chỗ? Cảm ơn.

+2

Bạn đã đảm bảo rằng có môi trường xây dựng trên máy bị khóa này không? Sẽ là một điều đáng tiếc nếu bạn dành nhiều thời gian chuyển các bản phân phối nếu nó không có các công cụ để xử lý chúng. – innaM

Trả lời

10

Cách hiệu quả nhất cho đến nay là để thực hiện một minicpan, cài đặt cpanm trên máy linux và bí danh localcpanm một cái gì đó như thế này:

alias localcpanm='cpanm --mirror file:///Users/Shared/cpan/ --mirror-only' 

Tôi đã sử dụng kỹ thuật này trên chuyến tàu dài với truy cập mạng chắp vá với thành công lớn.

+0

Cảm ơn. Có một phương pháp để sử dụng minicpan để tạo ra một tấm gương của chỉ một tập hợp con của CPAN, tức là.cho một mô-đun DateTime duy nhất và tất cả các phụ thuộc của nó? Và sau đó, có thể thêm vào gương đó chỉ bất kỳ mô-đun bổ sung nào mà chúng tôi quan tâm? Tôi nghĩ rằng phản ánh toàn bộ CPAN là ok, nhưng có thể làm với ít hơn toàn bộ điều sẽ là một lựa chọn tốt đẹp. – frank

+0

Hình như CPAN :: Mini :: FromList có thể làm điều đó nhưng việc đánh giá cpanratings không truyền cảm hứng cho sự tự tin. – singingfish

+0

cpanm có thể tạo "minicpan" cần thiết, minh họa trong câu trả lời của tôi cho câu hỏi này –

1

Có một số giải pháp cho vấn đề này, xem ví dụ Carton giống như gói của ruby ​​hoặc khác Pinto nhằm mục đích trở thành CPAN riêng của bạn (như tôi hiểu).

1

Một giải pháp tôi sử dụng tại nơi làm việc là có một máy chủ phát triển với perlbrew, một mô-đun Perl + và ứng dụng cho mỗi ứng dụng và tất cả điều này trong một repo git. Trên máy sản xuất, truy cập vào kho git là tất cả những gì cần thiết để triển khai ứng dụng và chuyển đổi giữa các phiên bản bằng cách sử dụng thẻ.

7

Bước đầu tiên là tự động tải xuống tất cả các phụ thuộc. Bạn có thể sử dụng cpanm để làm điều này trên máy tính kết nối mạng của bạn:

cpanm -L /dev/null --save-dists dists --scandeps DateTime

này tạo ra cả một danh sách phụ thuộc, nhưng quan trọng hơn tải chúng vào thư mục dists. Các -L /dev/null đảm bảo rằng nó không chú ý đến các mô-đun đã được cài đặt.

Sao chép dists vào hộp bị hạn chế của bạn.

Sau đó, sử cpanm trên hộp hạn chế của mình để thực hiện các cài đặt cục bộ:

cpanm --mirror file:///path/to/dists -L foo DateTime

nơi /path/to/dists là đường dẫn tuyệt đối đến thư mục dists. Thao tác này sẽ cài đặt mọi thứ vào thư mục foo.

+0

Cảm ơn, điều này phù hợp với những gì tôi đang tìm kiếm. – frank