2018年7月3日火曜日

CPANを使ってみる

Perl からメールを出す必要があり、四苦八苦したときの備忘録です。

Net::SMTP を使ってメールを出すんですが、見つけたサンプルでは MIME::Entity を使ってエンコードをしていました。

標準でMIME::Entity がインストールされていないので、Encode::encode を使って取りあえず変換→送信はできているのですが、いい機会なので CPAN のインストールを設定をしてみました。

モジュールがインストールされているか否かは次の方法で分かります。

  1. perl -Mモジュール名 -e ''
    ※何も表示されなければインストール済み
  2. perldoc モジュール名
    ※ドキュメントが表示されればok
    インストールされている場所が知りたい場合は
    perldoc -l モジュール名
    バージョンが知りたいときは(出ないこともあるけど)
    perldoc -m モジュール名

MIME::Entity がインストールされているか確認

#  perl -MMIME::Entity -e ''
Can't locate MIME/Entity.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.

ということで入っておりませんでした。

開発用の rpm も cacti のインストール時に必要と思われるものは入れてありますが、CPANのインストールを行う場合は一式あった方が先々問題が出なそうでしたので、
# yum -y groupinstall 'Development tools'

でインストールをしておきました。

2018/07/13 追記
 CentOS 7 ではリリース当初は groupinstall が使えなかったようです。自分が使っている 7.5 では警告は出るもののインストールは完了しました。CentOS 7 からは

# yum groups install "Development Tools"

が正しいようです。
--- 追記終わり ---

最近のcpanはyamlが必要なのでcpanを使う前にyamlのインストールをしました。
# yum -y install libyaml-devel

続いて CPAN のインストールをします。
# yum -y install cpan


CPANの設定のします。全てデフォルトのまま。(問いに対しEnterキー押下のみ。)
# cpan

最後に
Would you like me to append that to /root/.bashrc now? [yes]


commit: wrote '/root/.cpan/CPAN/MyConfig.pm'

You can re-run configuration any time with 'o conf init' in the CPAN shell
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]> quit ← 一旦終了

と聞かれ、.bashrc が書き換わっております。Perl でモジュールの開発をする方はローカル→共通と使い分けすると思うのですが、自分はモジュールの開発はしないのでパスの通っているディレクトリにインストールされるよう .bashrc の変更をします。(Perl関連の追加5行をコメントアウトする。)

# vi .bashrc

#export PERL_LOCAL_LIB_ROOT="$PERL_LOCAL_LIB_ROOT:/root/perl5";
#export PERL_MB_OPT="--install_base /root/perl5";
#export PERL_MM_OPT="INSTALL_BASE=/root/perl5";
#export PERL5LIB="/root/perl5/lib/perl5:$PERL5LIB";
#export PATH="/root/perl5/bin:$PATH";

一旦ログアウトし、再度 rootでログイン。念のため環境変数の確認をする。

# exit
$ su -
# echo $PERL5LIB
← 空白ならok

yaml のライブラリはインストール済みですが、モジュールがまだですのでYAML のモジュールをインストール。続いて MIME::Entity をインストールしてみます。YAML のモジュールが未インストールだとモジュールの追加(コンパイル時)に失敗します。
※ CPAN も古いのが入っているので、ついでに上げておいた方がいいかも

# cpan
Terminal does not support AddHistory.

cpan shell -- CPAN exploration and modules installation (v1.9800)
Enter 'h' for help.

cpan[1]> install YAML
Reading '/root/.cpan/Metadata'
   Database was generated on Sat, 30 Jun 2018 09:17:03 GMT
Running install for module 'YAML'
Running make for T/TI/TINITA/YAML-1.26.tar.gz

(snip)

Appending installation info to /usr/lib64/perl5/perllocal.pod
   TINITA/YAML-1.26.tar.gz
   /bin/make install  -- OK

cpan[2]> install MIME::Entity
Running install for module 'MIME::Entity'
Running make for D/DS/DSKOLL/MIME-tools-5.509.tar.gz

(snip)

Appending installation info to /usr/lib64/perl5/perllocal.pod
   DSKOLL/MIME-tools-5.509.tar.gz
   /bin/make install  -- OK

cpan[3]> quit


無事にインストールができたようです。root での確認では自分のローカルにインストールされている可能性もあるので、一般ユーザで確認をしてみることをにします。

# exit
$ perl -MMIME::Entity -e ''

なにも出力されませんので、問題なくインストールができたようです。


2018/07/13 追記

cpan でデフォルトインストール(基本的には対話形式で入れたいので、環境変数で一時的対応をする)
# export PERL_AUTOINSTALL='—defaultdeps'

cpan でモジュールのインストール時や upgrade でエラーが出る。(インストール環境に左右されますが、自分の足りなかった物たち)
# yum -y install expat-devel
# yum -y install perl-Env
# yum -y install openssl-devel

シェルでヒストリが効かない (Bundle::CPANをインストール)
# cpan
> install Bundle::CPAN


0 件のコメント:

コメントを投稿