minicpan: 打包整份 CPAN 回家

作者:   發佈於: ,更新於:   #perl #cpan

Perl 玩家都知道,CPAN 是軟體界最豐富而方便的函式庫資源,這個網站在全世界有超過兩百處映射站,其上有超過 6000 位程式設計師提供的一萬四千餘種模組。

CPAN 上的模組安裝已有 cpan 指令來完成,但偶爾會覺得它不夠快,由其是因為在安裝時,乃是立刻透過網站去下載回來安裝的,在裝比較大宗的程式、框架(如 svk, Jifty 等)時,下載眾多模組的時間就相當可觀。

為了省去這段等待時間,可以使用 minicpan 這個工具,將 CPAN 上所有的模組一次下載完畢。CPAN 網站上的每個模組皆有許多個釋出的版本,如果全部完整映射,約需 5GB 的空間。不過,其實一般使用時 ,只需要映射最新的版本就行了,不需所有有版本都下載。minicpan 便是能映射所有模組之最新版本的一個工具。

這個概念先是由 Randal L. Schwartz 寫成一支獨立的程式, 後有 Ricardo SIGNES (rjbs) 將其實做成模組的型式,釋出在 CPAN 網站上。

安裝方面,直接以 cpan 指令安裝 CPAN::Mini 這個模組便行:

cpan CPAN::Mini

設定方面,請先建好映射的目錄(請自行修改路徑):

mkdir -p /Users/gugod/local/minicpan

並在家目下撰寫 .minicpanrc 這個設定檔,內容為:

skip_perl: 1
local:  /Users/gugod/local/minicpan/
exact_mirror: 1

這樣就完成了,接下來便是執行 minicpan 這個指令,其輸出結果如下:

> minicpan
authors/01mailrc.txt.gz ... up to date
modules/02packages.details.txt.gz ... updated
modules/03modlist.data.gz ... up to date
authors/id/C/CO/CORION/Sniffer-HTTP-0.18.tar.gz ... updated
authors/id/C/CO/CORION/CHECKSUMS ... updated
authors/id/D/DL/DLAND/File-Path-2.07.tar.gz ... updated
authors/id/D/DL/DLAND/CHECKSUMS ... updated
authors/id/K/KI/KITANO/Bot-BasicBot-Pluggable-Module-GoodBad-0.04.tar.gz
... (以下省略) ...

完全跑完之後,在本機硬碟上就有一份最新的 CPAN 映射目錄了,大約需要 950MB 的硬碟空間。可以設定使其永不下載某些模組,詳細辨法請參閱 perldoc minicpan。

每次執行 minicpan 這個指令時,只會下載有更新的部份,不會全部重新下載,因此只有第一次執行會花去許久時間。我最近約是每週執行一次,一次約要三分鐘。

接著便是修改 CPAN/Config.pm,在 ‘urllist’ 的值裡加入 minicpan 的目錄:

'urllist' => [
  q[file:///Users/gugod/local/minicpan],
  q[http://ftp.stu.edu.tw/CPAN/],
  q[ftp://ftp.nctu.edu.tw/UNIX/perl/CPAN],
  q[ftp://archive.progeny.com/CPAN/]],

如此一來便大功告成,以後以 cpan 指令安裝時,便會最優先由本機目錄取得模組,不會透過網路下載。若是本機找不到,便會去載 urllist 中次一順位的網站。