cygwinでcpanを使ってエラー
はじめに
cygwin環境下でcpanを使った際,エラーが発生しインストールができない場合がある.以下のような状況である./cygdrive/c/program: not foundが発生してインストールができない.
cpan> install Pod::Man Running install for module Pod::Man Running make for R/RR/RRA/podlators-1.27.tar.gz LWP not available Fetching with Net::FTP: ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/authors/id/R/RR/RRA/podlators-1.27.tar.gz CPAN: Digest::MD5 loaded ok LWP not available Fetching with Net::FTP: ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/authors/id/R/RR/RRA/CHECKSUMS Checksum for /cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/sources/authors/id/R/RR/RRA/podlators-1.27.tar.gz ok Scanning cache /cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/build for sizes /cygdrive/c/program: not found ←エラー /cygdrive/c/program: not found ←エラー Uncompressed /cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/sources/authors/id/ R/RR/RRA/podlators-1.27.tar.gz successfully Using Tar:/cygdrive/c/program files/cygwin/bin/tar xvf /cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/sources/authors/id/R/RR/RRA/podlators-1.27.tar: /cygdrive/c/program: not found ←エラー Couldn't untar /cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/sources/authors/id/R/RR/RRA/podlators-1.27.tar
メッセージの通り,空白を含むディレクトリが途中で切れてしまい,必要なコマンドを見つけることができないためだ.以下の手順で解消できる.
cpanの設定ファイルを確認
cpanを最初に動かした際に色々指定した内容は設定ファイルに書き込まれている.そのファイルを探す.まずcpanをシェルモードで動かし,o confと打ち込む.
$ perl -MCPAN -e shell
cpan> o conf
CPAN::Config options and /cygdrive/c/Documents and Settings/foo/My Documents/.cpan/CPAN/MyConfig.pm:
commit Commit changes to disk
defaults Reload defaults from disk
init Interactive setting of all options
build_cache 10
---以下省略---
/cygdrive/c/Documents and Settings/foo/My Documents/.cpan/CPAN/MyConfig.pmが設定ファイルである.
設定ファイルを編集
中身を見てみよう.
# This is CPAN.pm's systemwide configuration file. This file provides
# defaults for users, and the values can be changed in a per-user
# configuration file. The user-config file is being looked for as
# ~/.cpan/CPAN/MyConfig.pm.
$CPAN::Config = {
'build_cache' =< q[10],
'build_dir' =< q[/cygdrive/c/Documents and Settings/foo/My Documents/.cpan/build],
'cache_metadata' =< q[1],
'cpan_home' =< q[/cygdrive/c/Documents and Settings/foo/My Documents/.cpan],
'dontload_hash' =< { },
'ftp' =< q[/cygdrive/c/program files/cygwin/bin/ftp],
'ftp_proxy' =< q[],
'getcwd' =< q[cwd],
'gzip' =< q[/cygdrive/c/program files/cygwin/bin/gzip],
'histfile' =< q[/cygdrive/c/Documents and Settings/foo/My Documents/.cpan/histfile],
'histsize' =< q[100],
'http_proxy' =< q[],
'inactivity_timeout' =< q[0],
'index_expire' =< q[1],
'inhibit_startup_message' =< q[0],
'keep_source_where' =< q[/cygdrive/c/Documents and Settings/foo/My Documents/.cpan/sources],
'lynx' =< q[],
'make' =< q[/cygdrive/c/program files/cygwin/bin/make],
'make_arg' =< q[],
'make_install_arg' =< q[UNINST=1],
'makepl_arg' =< q[],
'ncftpget' =< q[/cygdrive/c/program files/cygwin/bin/ncftpget],
'no_proxy' =< q[],
'pager' =< q[/cygdrive/c/program files/cygwin/bin/less],
'prerequisites_policy' =< q[ask],
'proxy_user' =< q[],
'scan_cache' =< q[atstart],
'shell' =< q[bash],
'tar' =< q[/cygdrive/c/program files/cygwin/bin/tar],
'term_is_latin' =< q[1],
'unzip' =< q[/cygdrive/c/program files/cygwin/bin/unzip],
'urllist' =< [q[ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/], q[ftp://ftp.kddlabs.co.jp/CPAN/], q[ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/], q[ftp://ftp.u-aizu.ac.jp/pub/CPAN], q[ftp://ftp.ayamura.org/pub/CPAN/], q[ftp://ftp.cpan.jp/CPAN/], q[ftp://ftp.dti.ad.jp/pub/lang/CPAN/]],
'wget' =< q[/cygdrive/c/program files/cygwin/bin/wget],
};
1;
__END__
メッセージの通り,/cygdrive/c/program files/が問題なので,これを空白の入らないDOS形式(/cygdrive/c/progra~1/)に置換する./cygdrive/c/Documents and Settings/foo/My Documents/も同様に置換する.
# This is CPAN.pm's systemwide configuration file. This file provides
# defaults for users, and the values can be changed in a per-user
# configuration file. The user-config file is being looked for as
# ~/.cpan/CPAN/MyConfig.pm.
$CPAN::Config = {
'build_cache' =< q[10],
'build_dir' =< q[/cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/build], ←書換える
'cache_metadata' =< q[1],
'cpan_home' =< q[/cygdrive/c/Docume~1/foo/MyDocu~1/.cpan], ←書換える
'dontload_hash' =< { },
'ftp' =< q[/cygdrive/c/progra~1/cygwin/bin/ftp], ←書換える
'ftp_proxy' =< q[],
'getcwd' =< q[cwd],
'gzip' =< q[/cygdrive/c/progra~1/cygwin/bin/gzip], ←書換える
'histfile' =< q[/cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/histfile], ←書換える
'histsize' =< q[100],
'http_proxy' =< q[],
'inactivity_timeout' =< q[0],
'index_expire' =< q[1],
'inhibit_startup_message' =< q[0],
'keep_source_where' =< q[/cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/sources], ←書換える
'lynx' =< q[],
'make' =< q[/cygdrive/c/progra~1/cygwin/bin/make], ←書換える
'make_arg' =< q[],
'make_install_arg' =< q[UNINST=1],
'makepl_arg' =< q[],
'ncftpget' =< q[],
'no_proxy' =< q[],
'pager' =< q[/cygdrive/c/progra~1/cygwin/bin/less], ←書換える
'prerequisites_policy' =< q[ask],
'proxy_user' =< q[],
'scan_cache' =< q[atstart],
'shell' =< q[bash],
'tar' =< q[/cygdrive/c/progra~1/cygwin/bin/tar], ←書換える
'term_is_latin' =< q[1],
'unzip' =< q[/cygdrive/c/progra~1/cygwin/bin/unzip], ←書換える
'urllist' =< [q[ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/], q[ftp://ftp.kddlabs.co.jp/CPAN/], q[ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/], q[ftp://ftp.u-aizu.ac.jp/pub/CPAN], q[ftp://ftp.ayamura.org/pub/CPAN/], q[ftp://ftp.cpan.jp/CPAN/], q[ftp://ftp.dti.ad.jp/pub/lang/CPAN/]],
'wget' =< q[/cygdrive/c/progra~1/cygwin/bin/wget],
};
1;
__END__
DOS形式でなくcygwinでのディレクトリ(/binや/usr/bin)に書換えてもOKである.
# This is CPAN.pm's systemwide configuration file. This file provides
# defaults for users, and the values can be changed in a per-user
# configuration file. The user-config file is being looked for as
# ~/.cpan/CPAN/MyConfig.pm.
$CPAN::Config = {
'build_cache' =< q[10],
'build_dir' =< q[/cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/build], ←ここはDOS形式のまま
'cache_metadata' =< q[1],
'cpan_home' =< q[/cygdrive/c/Docume~1/foo/MyDocu~1/.cpan], ←ここはDOS形式のまま
'dontload_hash' =< { },
'ftp' =< q[/usr/bin/ftp], ←書換える
'ftp_proxy' =< q[],
'getcwd' =< q[cwd],
'gzip' =< q[/bin/gzip], ←書換える
'histfile' =< q[/cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/histfile], ←ここはDOS形式のまま
'histsize' =< q[100],
'http_proxy' =< q[],
'inactivity_timeout' =< q[0],
'index_expire' =< q[1],
'inhibit_startup_message' =< q[0],
'keep_source_where' =< q[/cygdrive/c/Docume~1/foo/MyDocu~1/.cpan/sources], ←ここはDOS形式のまま
'lynx' =< q[],
'make' =< q[/usr/bin/make], ←書換える
'make_arg' =< q[],
'make_install_arg' =< q[UNINST=1],
'makepl_arg' =< q[],
'ncftp' =< q[],
'ncftpget' =< q[],
'no_proxy' =< q[],
'pager' =< q[/bin/less], ←書換える
'prerequisites_policy' =< q[ask],
'scan_cache' =< q[atstart],
'shell' =< q[],
'tar' =< q[/bin/tar], ←書換える
'term_is_latin' =< q[1],
'unzip' =< q[/usr/bin/unzip], ←書換える
'urllist' =< [q[ftp://ftp.kddlabs.co.jp/CPAN/], q[ftp://ftp.u-aizu.ac.jp/pub/CPAN], q[ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/]],
'wget' =< q[],
};
1;
__END__