Perl からメールを出す必要があり、四苦八苦したときの備忘録です。
Net::SMTP を使ってメールを出すんですが、見つけたサンプルでは MIME::Entity を使ってエンコードをしていました。
標準でMIME::Entity がインストールされていないので、Encode::encode を使って取りあえず変換→送信はできているのですが、いい機会なので CPAN のインストールを設定をしてみました。
モジュールがインストールされているか否かは次の方法で分かります。
- perl -Mモジュール名 -e ''
※何も表示されなければインストール済み
- 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