CentOS9 + Perl5.38.2でPSGI環境を構築する方法
この記事は「Movable Type Advent Calendar 2024」の7日目の記事です。
CentOS9 + Perl5.38.2でPSGI環境を構築する方法を紹介します。
CentOS9のVMを作成すると、Perlはデフォルトで5.32.1になりますが、5.38.2を個別にビルドします。
また、MovableType(PSGI)の利用を前提としてウェブサーバーとして動作できるまでの手順も併せて紹介します。
動作確認にはVirtualBoxを使用しています。
1.mysql関連パッケージのインストール
# rpm -Uvh https://repo.mysql.com/mysql80-community-release-el9-1.noarch.rpm
# dnf install mysql-community-server --nogpgcheckdnf install mysql-community-server --nogpgcheck
# dnf install mysql-community-devel --nogpgcheck
2.gccとmakeのインストール(Perlのビルド用)
# dnf install make gcc
3.httpd関連のインストール
# dnf install httpd httpd-tools httpd-devel
4.firewalldの停止
# systemctl status firewalld
# systemctl stop firewalld
# systemctl disable firewalld
5.httpdの常駐化
# systemctl is-enabled httpd
# systemctl enable httpd
6.mysqlのパスワード変更(赤字が初期パスワード、青字が変更後のパスワード)
# systemctl start mysqld
# grep 'temporary password' /var/log/mysqld.log
2024-11-26T12:52:05.760486Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ei#(n;i9uf$k
mysql> ALTER USER 'root'@'localhost' identified BY 'rJOIaea%#%(JO';
Query OK, 0 rows affected (0.03 sec)
7.Perl5.38.2のビルドとインストール
インターネットからダウンロードしたPerlのアーカイブ(tar.gz)を任意のフォルダにアップロードして、コマンドを実行します。
デフォルトのPerlとは異なるディレクトリにインストールします。
# tar zxvf perl-5.38.2.tar.gz
# cd perl-5.38.2/
# ./Configure -des -Dprefix=/usr/local/perl-5.38.2./Configure -des -Dprefix=/usr/local/perl-5.38.2
# make
# make install
8.Perlのパス張り替え
Perl5.32.1から5.38.2に張り替えます。
# perl -v
This is perl 5, version 32, subversion 1 (v5.32.1) built for x86_64-linux-thread-multi
:
# cd /usr/bincd /usr/bin
# mv perl perl--
# ln -s /usr/local/perl-5.38.2/bin/perl /usr/bin/perl
# perl -v
This is perl 5, version 38, subversion 2 (v5.38.2) built for x86_64-linux
:
9.cpanmでPerlモジュールのインストール
MovableTypeの動作に必要なモジュールをインストールします。
# perl -MCPAN -e 'install App::cpanminus'perl -MCPAN -e 'install App::cpanminus'
:
Would you like to configure as much as possible automatically? [yes] yes
:
# /usr/local/perl-5.38.2/bin/cpanm HTML::Entities/usr/local/perl-5.38.2/bin/cpanm HTML::Entities
# /usr/local/perl-5.38.2/bin/cpanm DBI/usr/local/perl-5.38.2/bin/cpanm DBI
# /usr/local/perl-5.38.2/bin/cpanm DBD::mysql/usr/local/perl-5.38.2/bin/cpanm DBD::mysql
10.postfixのインストール
# dnf -y install postfixdnf -y install postfix
11.SeLinuxの無効化
エディタで/etc/selinux/configを開き、
SELINUX=enforcing
を
SELINUX=disabled
に変更します。
# vi /etc/selinux/config
12.メールサーバの設定
/etc/postfix/main.cfと/etc/postfix/master.cfを編集します。
詳細は「さくらのVPSに送信メールサーバを設定する方法」を参照してください。
12.httpd起動
starman起動前に通常のCGIでMovableTypeの管理画面にアクセスします。
# systemctl start httpd
13.PSGI環境構築のためのパッケージとモジュールのインストール
# dnf install perl-ExtUtils-MakeMaker
# /usr/local/perl-5.38.2/bin/cpanm/usr/local/perl-5.38.2/bin/cpanm --sudo CGI::Compile--sudo CGI::Compile
# /usr/local/perl-5.38.2/bin/cpanm --sudo CGI::CompilePlack
# /usr/local/perl-5.38.2/bin/cpanm --sudo Plack
# /usr/local/perl-5.38.2/bin/cpanm --sudo XMLRPC::Transport::HTTP::Plack
その他、
CGI::Parse::PSGI
CGI::PSGI
も必要ですが、インストールされていたので省略。
インストールされていることの確認は、モジュールのバージョン表示コマンドを実施。
# perl -MCGI::PSGI -e 'print $CGI::PSGI::VERSION . "\n";'
# perl -MCGI::Parse::PSGI -e 'print $CGI::Parse::PSGI::VERSION . "\n";'
14.httpd.conf修正
# vi /etc/httpd/conf/httpd.conf
PSGI動作のために下記のLoadModuleディレクティブを追加
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ServerNameディレクティブにVMのIPアドレスを設定。
ServerName 192.168.56.100
一番最後に下記の内容を追加(上記のmod_proxyを設定しておかないと機能しません)。
<IfModule mod_proxy.c>
ProxyPass /cgi-bin/mt/ http://localhost:5000/cgi-bin/mt/
ProxyPassReverse /cgi-bin/mt/ http://localhost:5000/cgi-bin/mt/
</IfModule>
修正後、httpdを再起動します。
# systemctl restart httpd
起動後、/etc/httpd/logs/error_logにエラーが出ていないことを確認。
私はServerNameが設定されていなかったのと、LoadModuleが設定されていないところで躓きました(error_logに表示されているのをみつけて解決)。
15.mt.pid用ディレクトリ作成
ここではMTインストールディレクトリ(/var/www/cgi-bin/mt)配下に作成します。
# mkdir -p /var/www/cgi-bin/mt/pids
16.mt-config.cgiに環境変数追加
下記の1行を追加します。
PIDFilePath /var/www/cgi-bin/mt/pids
17.starman起動
# cd /var/www/cgi-bin/mt
# starman -l 0.0.0.0:5000 --pid /var/www/cgi-bin/mt/pids/mt.pid ./mt.psgi
18.ブラウザからMT管理画面にアクセス
今回の例では、ポート番号5000番を指定して、
http://192.168.56.100:5000/cgi-bin/mt/mt.cgi
にアクセスします。
これでMT管理画面が表示されればOKです。