読者です 読者をやめる 読者になる 読者になる

cpanコマンドで「Cannot allocate memory」が出る

cpanで何かモジュールをインストールしようとすると 

 Using Tar:/bin/tar xf "Web-Scraper-0.38.tar":
Couldn't untar Web-Scraper-0.38.tar: 'Cannot allocate memory'
MIYAGAWA/Web-Scraper-0.38.tar.gz
Had problems unarchiving. Please build manually

 と怒られてしまい先に進めない。「Cannot allocate memory」というエラーを文面通りに受け止められず(何しろほとんどメモリを消費するプロセスはなかった)、色々調べてみたのだが、どうやら本当にメモリ不足の模様。awsのt2.nanoでは動かないらしい(httpdmysqlなどは止めてみたが効果なし)

total used free shared buffers cached
Mem: 503264 306660 196604 64 22016 188804
-/+ buffers/cache: 95840 407424
Swap: 0 0 0

 これで足りないというのだからcpanはどれだけメモリを食うのだろう……。

結局、かなり以前からApp::CpanminusというMIYAGAWA氏が作った軽量版のcpanが強く勧められていたこともあり、こちらをインストールしたところ、すんなりインストールすることができた。(当時からcpanコマンドは色々と評判が悪かった)

rootになりcpanからinstall App::Cpanminusとすると怒られるのだが、tar.gzファイルのフルパスが出るので、それを自力でtar xvfzし、展開された階層でperl Makefile.PLとし、そうするとMakefileが出来るので普通にmake installとするとcpanmコマンドがインストールされる。

使い方としては、cpanコマンドは単純にcpanで起動し、install XXXとしてモジュールをインストールするのだが、cpanmコマンドはcpanm XXXとしてコマンドラインで直接モジュール名を指定するとインストールが開始される。

当然cpanコマンドと同様依存関係も全部チェックしてくれるのでcpanコマンドがうまく動かない場合は移行してみると良いかもしれない。