p-perl

前回のUbuntu投稿での予告通り、Perlの動作する開発環境の構築方法になります。

以前の記事で、Ubuntuのインストールから、ApacheのインストールやTipsを書いていますので、未読の方は下記リンクからどうぞ。

はじめに

UNIXサーバー上で、CGIとして実行されるPerlは、C言語の長所とBASICの長所を合わせ持つ高級言語だ、なんて言われ方もしますが、Perl黎明期から、CやC++でゲームプログラムを、ゴリゴリ書いていた自分には、Perlはいまいち馴染なじめません(笑)もっとも仕事となると、そんなことも言ってられないので、Perlで動作するMovableType(以下MT)やPowerCMS用の開発環境も必要になることがあります。

今回は、そんなPerlを利用するための環境を、Ubuntuで構築した際のメモになります。
(MTやPowerCMSは、基本有料版ということもあり、インストール手順などは掲載しませんので、公式を参考にしてください。)

ParallelsでUbuntuをインストール

さて、Parallels Desktopで仮想環境をつくり、Ubuntuをインストールしていきます。
前回の記事と被るので、盛大に端折(はしょ)りますね。

  • MacのアプリケーションからParallesを起動します
  • インストールOSを選んでUbuntuをインストールします
  • Ubuntuが起動したら新規パスワードを入力します
  • 確認用パスワードを入力します
  • Paralles Toolsのインストールが始まるので、インストールをします。終わったらRestartします。
  • Livepatchの画面が出ますが特になければスルーします、Next、Next、Next、Done、で完了です。
  • Ubuntuが起動したら先ほど決めたパスワードでログインします。
  • 左下のドットが四角く並んだアプリケーションメニューアイコンから、アプリケーションの一覧を開きターミナルを選択して起動します。
  • ターミナルが起動したらlsとかpwdを打ってみましょう。ちゃんと動いたらfavoして左のタスクバーへピン留めしておきましょう。
  • 下記のコマンドを入力してアップデート更新をしておきましょう、更新したら再起動です。

(※下記のコマンドは見やすく先頭に「$ 」がついていますが、実際に入力する文字列は「$ 」より後の文字のみになります)

$ sudo apt update
$ sudo apt list --upgradable
$ sudo apt upgrade
$ sudo reboot

UbuntuへApacheをインストール

ここも前回の記事と被るので、キャプチャ画像なども端折(はしょ)りますね〜。
ターミナルから下記のようにインストールします。

$ sudo apt install -y apache2 apache2-utils
$ sudo reboot

インストールできたらUbuntuでブラウザを開き、127.0.0.1へアクセスしてみましょう。
「It Works!」と表示されていますね。OKです。

ドキュメントルートフォルダへ権限を付与しましょう

ドキュメントルートのフォルダの中で、テキストエディタを使ってPerlのプログラムコードを作成したりするには、フォルダにユーザーへの所有権を指定してあげれば良かったですね。デフォルトでは、ログインユーザーはparallelsですので、一旦下記のようにして編集可能にしましょう。

$ sudo chown -R parallels:parallels /var/www/html/

で、編集可能になったはずなので、試しに書き換えてみましょう。

$ cd /var/www/html/
$ gedit index.html

保存して127.0.0.1を開いていリロードしてみましょう。
書き変わりましたか?思ったように動作していたら、完了です。

Perlを実行可能にしましょう

UbuntにはすでにPerlが入ってるはずなので、バージョンを確認しましょう。

$ perl -v

This is perl 5, version 34, subversion 0 (v5.34.0) built for aarch64-linux-gnu-thread-multi
(with 50 registered patches, see perl -V for more detail)

のように表示されたらOKです。

Perlでスクリプトを動かしてみる

ちょっとターミナルで確かめてみましょうか。
先ほど編集可能にしたドキュメントルートへ移動して、サンプルファイルを作成します。

$ cd /var/www/html/
$ gedit test.pl

などとして、下記のように記入して保存します。

#!/usr/bin/perl
use warnings;
print("Test Perl.\n");

もしくは、ターミナルから下記のようにして、ファイルに書き出すこともできます。

$ cat << EOF > test.pl
#!/usr/bin/perl
use warnings;
print("Test Perl.\n");
EOF

ファイルが出来上がったら実行権限を確認しましょう、ファイルの詳細一覧で「-rwxr-xr-x」などとなっていたら755になってます。(デフォルトではなっているかと思います)

パーミッションについては、別記事でTipsを書きましたので、下記を参照してください。

ターミナルでのファイルの一覧は、

$ ls -la

として見れます。
ついでにターミナルから、

$open .

とすると、カレントディレクトリ(現在作業しているディレクトリ)のフォルダを開くことができます。GUIに慣れている方は便利なので覚えておくと良いでしょう。CUIとGUIを行ったり来たりしやすくなると、作業効率は飛躍的に上がります。

実行権限がない場合は、下記のように実行権限を与えましょう。

$ chmod 755 test.pl

それでは、ターミナルから下記のように打ってみましょう。

$ perl test.pl

ターミナルに、

Test Perl.

と表示されましたか?
表示されればOKです。

Perlスクリプトをブラウザで表示されるよう設定する

さて、次はブラウザから、
http://127.0.0.1/cgi/test2.cgi
などと表示して実行できるようにしましょう。

設定ファイルを作成します。
例として、cgiディレクトリ配下で許可するような構成とします(通常はcgi-binなどとする場合が多いです)

$ sudo gedit /etc/apache2/conf-available/cgi-enabled.conf

などとして、下記のように記入して、拡張子が.cgiや.plをcgiスクリプトとして、使用できるようにします。

<Directory "/var/www/html/cgi">
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
</Directory>

保存して閉じたら反映しましょう。

$ sudo a2enconf cgi-enabled
$ sudo a2enmod cgi
$ sudo systemctl restart apache2
$ sudo reboot

cgiディレクトリを作成して、テストスクリプトを書いて試してみましょう。

$ cd /var/www/html
$ mkdir cgi

下記のようにテキストエディタからファイルを指定して、

$ gedit /var/www/html/cgi/test2.pl

などとして、

#!/usr/bin/perl
print "Content-type: text/html \n\n";
print "Hello! Perl!";

と書き込んで保存するか、もしくは手っ取り早くターミナルで、

$ cat << EOF > /var/www/html/cgi/test2.pl
#!/usr/bin/perl
print "Content-type: text/html \n\n";
print "Hello! Perl!";
EOF

などとして、test2.plファイルをつくります。

実行権限が足りなければ、下記のように付与しましょう。

$ chmod 755 /var/www/html/cgi/test2.pl

これでブラウザで、下記のようにアクセスすると動作するようになりましたね。

http://127.0.0.1/cgi/test2.pl

「Hello! Perl!」と表示されていたら成功です。

さて、これでPerl単体の準備は完了です。

もっとも最近はPerlでプログラムを作ったり、改修したりだけのお仕事というのは減りつつあります。Perlで書かれたCMSの運用や保守の方が多いのではないでしょうか、これらPerl製のCMSはモジュールやPHPも利用するものが多いです。

下記へ、それらモジュールのインストールについて書いておきます。

モジュールやその他の開発に必要な環境の構築

実際のお仕事では、勿論、ローカルの開発環境で、いちからインストールして作成することもありますが、案外と多いのが、実際にネット上で動作しているMTやPowerCMSの環境を、ローカルの開発環境へごっそり持ってきて、改造したり修理することです。いずれにせよ、Perlだけの動作する環境では不足ですので、下記へMTやPowerCMSを動作させるためのモジュールのインストールについて書きますね。

MySQLサーバーのインストールしましょう

MTやPowerCMSといった、Perlを使ったCMSでは、データベースが必要です。
MySQLをインストールしましょう。
以前の記事と同様の工程のところは、基本的にコマンドを列記しますので、詳細を読みたい方は以前の記事をご参照ください。

ターミナルから、下記のようにインストールします。
Y/nを聞かれますが全てYESかOKで。

$ sudo apt install mysql-server
$ sudo reboot
$ sudo mysql

起動したらバージョンを確認し、下記コマンドを打ってみて動作することも確認しておきましょう。

mysql> show databases;
mysql> quit;

mysqlが確認できたら、「quit;」でmysqlを一旦出ます。

MySQLへデータベースの作成しましょう

mysqlへログインしてデータベースをつくります。
これも前回でやりましたね。

$ sudo mysql
mysql> CREATE DATABASE test_db;
mysql> quit;

↑「test_db」にはデータベース名を入れてください。

MySQLへユーザーを作成しましょう

mysql> CREATE USER 'usrname'@'%' IDENTIFIED WITH mysql_native_password BY 'pw';

↑「usrname」にはユーザー名を、「pw」にはパスワードを入れてください。(ユーザー名とパスワードは、適切なものにしてください)

権限を付与します。

mysql> GRANT ALL ON test_db.* TO 'usrname'@'%';

↑「usrname」にはユーザー名を、「pw」にはパスワードを入れてください。(ユーザー名とパスワードは、先ほど指定したものです)

ユーザーでログインして確認しましょう

一旦mysqlから出て、今つくったユーザーでログインしましょう。

mysql> quit;
$ mysql -u usrname -p
***********(←パスワードを入力)
mysql> show databases;
mysql> quit;

データベースが見えていればOKです。
ここまでは、前回でもやりましたね、不明な点がある場合は、前回の記事も参考にしてみてください。

PHPもインストールしておきましょう

MTやPowerCMSは、PHPも使いますので、これらのCMSを使用する場合は、PHPもインストールしておきましょう。

$ sudo apt install php libapache2-mod-php php-mysql php-mbstring

前回でもやりましたから馴染みのコマンドですね。
YESで、インストール。完了したらバージョンを見てみましょう。

$ php -v

現状での最新は8.1.2ですかね。希望するバージョンが表示されていればOKです。希望のバージョンでない場合は、他のバージョンを入れましょう、他のバージョンのインストールについて知りたい方は、下記の記事を参照ください。

以上です。

Perlモジュールをインストールしましょう

MTやPowerCMSは、Perlモジュールがないと動作しません。

例えば、CMSの管理画面で画像をリサイズしたりするには、ImagerやImage-Magickといったモジュールが必要です。
下記のように、libの括弧内に繋げて指定してインストールします。

$ sudo apt-get install lib{imager,image-magick}-perl

ひとつひとつ入れるもあれなので、下記のようにDBD:MysqlやImagerやImade-Magickなどを、ごっそり入れてしまいましょう。

$ sudo apt-get install lib{anyevent,\
class-accessor-lite,crypt-ssleay,datetime,\
dbd-sqlite3,dbd-mysql,dbd-pg,dbi,dbix-class,\
extutils-parsexs,file-homedir,file-sharedir,file-spec,ipc-run3,\
text-csv,json,module-build,module-install,\
mojolicious,moo,moose,mouse,net-ssleay,path-class,plack,\
test-exception,test-fatal,test-requires,test-warnings,\
imager,image-magick,\
tie-ixhash,try-tiny,uri,uri-encode,\
www,xml-libxml,yaml}-perl

↑libの後の括弧内に必要なモジュールを記述しています。UNIXでは「\」の直後で改行することで、改行を無視させることができます、見やすく複数行を連結して記述したい場合にも使ったりします。

CMSでの必須モジュールのチェックは、例えばPowerCMSでのチェックは、
インストールディレクトリが
http://127.0.0.1/cgi/mt/
の場合は、配下にある
「mt-config.cgi」を「mt-config_.cgi」にリネームして、
http://127.0.0.1/cgi/mt/mt-check.cgi
にアクセスすると見ることができます。

上記でCGIも動くサーバー環境ができたことになります。
新規に開発する場合は、ここへMTやPowerCMSを普通にインストールすれば良いです。

事例やTips

前述での少し触れましたが、実際の業務では、現在運用中のCMSサイトを、ローカルに構築した開発環境へ持ってきて、作業を行わなければならない場合があります、その場合は、ドキュメントルート配下の全てのファイルとデータベースを、持ってくることになります。むしろ最近は、業務でゼロベースで新規にPerlのコードを書くことは稀です。

よくあるパターンの例を示しましょう。
運用中のCMSサイトを大規模改修することになったが、現在の運用を妨げずに改修を行い、段階的に改修結果を運用中サイトへ反映したい、などといった場合です。
こういったときは、開発環境として運用中のCMSサイトのクローンを作成し、開発環境で改修作業を行うのがスムーズです。
ローカルPC(場合によってはクラウド等)へ、開発環境を構築する手順としては、現行サイトへssh接続しドキュメントルート配下をtar圧縮するなどして、データベースはdumpするなどします。ファイル転送には、ターミナルのscpコマンドを使います。(SFTPアプリケーションでダウンロードもできますが、得てしてコマンドラインの方が巨大なファイルでも、安定してダウンロードすることができます。)

例)※下記はあくまで例になります、参考にする場合は、実際のアカウント名やドメイン名データベース名などに読み替えてください。

SSHで接続して作業ディレクトリを作成しログインして移動

$ ssh -l accountname samplesite.domain.jp
$ mkdir tmp
$ cd tmp
$ pwd

accountnameはユーザー名、samplesite.domain.jpはアクセス先になります。いずれも例です。
pwdは自分のカレントディレクトリを表示して確認しておきます。

データベースのダンプ

データベースがMySQLの場合は、データをエクスポートする方法として、mysqldumpを使います。
usrnameはユーザー名、test_dbはデータベース名です。

$ mysqldump -u usrname -p test_db --opt --hex-blob > test_db.dump

ファイルの圧縮(ディレクトリは例です)

$ tar -czvf html.tar.gz /home/accountname/www/html/
$ tar -czvf cgi.tar.gz /home/accountname/www/cgi/

などとして保存します。

ローカルのターミナルを開きscpでファイルをダウンロードします

つづいてローカルPC(データの移動先)のターミナルウインドウから、scpコマンドでファイルをダウンロードします。

$ scp accountname@samplesite.domain.jp:/home/accountname/www/tmp/test_db.dump .
$ scp accountname@samplesite.domain.jp:/home/accountname/www/tmp/html.tar.gz .
$ scp accountname@samplesite.domain.jp:/home/accountname/www/tmp/cgi.tar.gz .

解凍を行い適宜開発ディレクトリ(Ubuntuのフォルダ)へ収めます。

$ tar -xvf html.tar.gz
$ tar -xvf cgi.tar.gz

test_db.dumpをファイルをテキストエディタで開いて下記文字列を置換します

・サイトドメイン(URL)の置換「samplesite.domain.jp」→「127.0.0.1」
・ドキュメントルートの置換「/home/accountname/www/」→「/var/www/」
dump内にバイナリがあり、どうしても変換ができない場合は、同名のディレクトリを作成し、Ubuntu側のhostsへ追記することで、本番と同様のドメイン環境で構築を行います。

test_db.dumpをデータベースへインポートする

$ mysql -u usrname -p test_db < test_db.dump

以上です。

MTやPowerCMSでのTips

MTやPowerCMSでは、モジュールが全て揃っているかを下記のように確認することができます。

モジュールチェックはmt-check.cgi

例えば、http://127.0.0.1/cgi/mt/mt.cgiにインストールされいている、MTやPowerCMS環境であれば、ブラウザで httpe://127.0.0.1/cgi/mt-check.cgiにアクセスすることで、必要なモジュールの状態をチェックすることができます。その際、mt-config.cgiが既に存在しているとチェックできない旨表示されるので、その場合はmt-config.cgiをリネームするなりしておいてください。

再構築ディレクトリに権限付与

mt-check.cgiで確認が済んだら、mt-config.cgiにデータベース情報やパス情報を記載し、http://127.0.0.1/cgi/mt/mt.cgiへアクセスすれば管理画面へ入れるはずです。設定からサイトURLやパスなどを確認して再構築(パブリッシュ)をしましょう。

MTやPowerCMSはWordpressと異なりHTMLを書き出すタイプのCMSです。

その際、書き出すフォルダに、Apacheの実行権限が必要です。htmlフォルダは所有者をApacheの実行ユーザーに設定してましょう(パブリッシュをブラウザの管理画面で行うため)

$ sudo chown -R www-data:www-data /var/www/html/

※Apacheの実行ユーザーは下記で確認できます

$ ps aux | grep apache2

ドキュメントルート配下をエディタでも編集する場合のベストプラクティス

ベストかどうかわからないけど(ベストプラクティスって言葉を使いたかっただけです、はい。)、わたしは大概ローカル環境でザクザク開発するときは、慣れているテキストエディタで直接書きまくるんで、ログインユーザーをグループに含めてchownします。下記リンクへサクッと書いておきましたので(「Tips – 所有者とグループ – ディレクトリを775にファイルを664にをchmodでいっぺんにやる」)、編集のたびにsudo geditとかいちいちめんどくなった人は見て。

以上です。

ざざーっと書いたので、抜けあることろもあるかと思いますが、ご容赦くださいませ。
それではまた!TTでした😃