PHP再コンパイル

Apache2.4をWorkerモードで起動したい・・・そんな理由で結局、PHP7.4を再コンパイルしました。

# vi /etc/httpd/conf.modules.d/00-mpm.conf

LoadModule mpm_worker_module modules/mod_mpm_worker.so ←チェックアウト
#LoadModule mpm_event_module modules/mod_mpm_event.so ←コメントアウト

お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。

とでたのでyum install –enablerepo=remi, remi-php74 php-mysqlnd php74-php-mysqlnd

apache停止 PHP再コンパイル apachectl -V でWorker モード起動確認しました。

[root@www conf.modules.d]# apachectl -V
[Sat Jun 27 17:27:57.558701 2020] [so:warn] [pid 3872:tid 140188049873088] AH01574: module php7_module is already loaded, skipping
Server version: Apache/2.4.43 (codeit) Server built: May 7 2020 12:24:30 Server's Module Magic Number: 20120211:92 Server loaded: APR 1.7.0, APR-UTIL 1.6.1 Compiled using: APR 1.7.0, APR-UTIL 1.6.1 Architecture: 64-bit Server MPM: worker threaded: yes (fixed thread count) forked: yes (variable process count)

新たに警告、module php7_module is already loaded, skipping がでましたが起動には問題ないのでこちらは追々、解決していくことにします。

AWSのCentOS7にPHP7.4をソースからインストール – OpenSSL1.1.1 TLS1.3 対応

AWSのCentOS7.8にPHP7.4をyumでインストールしたものの、OpenSSLのバージョンが1.0.2k-fips 26 Jan 2017と古いままだったのでOpenSSL-1.1.1g PHP7.4.7 をソースビルドしてCode-ITリポジトリからApache2.4をインストールした顛末をメモ。

CentOS7にOpenSSL1.1.1をインストール | Qiita

OpenSSLは上記記事を参考に/usr/local/openssl-1.1.1 にインストール済みです。ただパスが通っていないので以下の通りにシンボリックリンクを貼りました。追記)/usr/local/openssl-1.1.1 への環境変数も追加で登録しました。

# mv /usr/bin/openssl /usr/bin/openssl.bak
# ln -s /usr/local/openssl-1.1.1/bin/openssl /usr/bin/openssl

# export PATH=/usr/local/openssl-1.1.1/bin:$PATH

CentOS 6 の環境にPHP7をインストールしてApacheで動かすまで

少々古い記事ですがPHP7.4のコンパイルに必要そうなパッケージはyumで一気に揃えます。

# yum -y install httpd-devel gd-devel libxml2-devel mysql-devel t1lib-devel
# yum -y install bzip2-devel curl-devel gmp-devel aspell-devel recode-devel
# yum -y install libmcrypt-devel

PHP7.4.7は公式から/usr/local/src にwget でダウンロード、解凍します。

# cd /usr/local/src
# wget https://www.php.net/distributions/php-7.4.7.tar.gz
# tar zxvf php-7.4.7.tar.gz
# cd php-7.4.7 # ./configure --with-apxs2=/usr/bin/apxs --bindir=/usr/local/bin --with-openssl=/usr/local/openssl-1.1.1 --with-libxml --with-mysqli --with-zlib --with-curl --with-xsl --with-gettext --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gmp \ --enable-mysqlnd \ --enable-mbstring \ --enable-bcmath \ --enable-pcntl \ --enable-cgi \ --enable-cli \ --enable-exif \ --enable-ftp \ --enable-sockets \ --enable-sysvsem \ --enable-sysvshm \ --enable-sysvmsg \ --enable-shmop \ --enable-calendar \ --enable-opcache \ --enable-intl \ --disable-debug

途中、make testでopcacheインストールしてないよ!とかいろいろ怒られましたがyumでその都度インストール対応しました。

# yum --enablerepo=epel,remi-php74 install php-opcache

make & make install

# make
# make install

で表題の件。

CentOS7にyumでHTTP/2.0対応Apache/OpenSSLを導入してみる

CodeITリポジトリ導入。Apache2.4本体、秘密鍵のインストールして起動・・・

# cd /etc/yum.repos.d && wget https://repo.codeit.guru/codeit.el`rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)`.repo
# yum install httpd

# cd /etc/pki/tls/certs/
# make localhost.crt
# make localhost.key # cd ../private/ # cp ../certs/localhost.key ./
# cp localhost.key localhost.key.orig ## 秘密鍵のパスフレーズを解除 # openssl rsa -in localhost.key.orig -out localhost.key

## Apache httpd HTTPSとHTTP/2通信用の設定
## ssl.confの # Virtual Host Context 行下に追記

# vi /etc/httpd/conf.d/ssl.conf

Protocols h2 http/1.1 (追記 # systemctl start httpd

起動しようとしたのですが失敗しました。

systemctl status httpd.service -l でエラーメッセージを取得すると、

Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.  You need to recompile PHP

Google先生に訊いてみるとApache がWorker として起動していてPHPと不整合している旨了解しました。/etc/httpd/conf.modules.d/00-mpm.conf を編集して

#LoadModule mpm_event_module modules/mod_mpm_event.so ←チェック
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so ←チェックを外す

するとApache 起動しました。

PHPインストール時のMPMのエラーを手っ取り早く解消する

AWSのt2.microではPHPのソースビルドでも「aws virtual memory exhausted: メモリを確保できません」エラーが出てスワップを作らないとインストールできなかったほど限界で、マルチスレッドからシングルスレッドになりスピードダウンは否めないのでWorkerモードしてもどの程度負荷軽減できるか課題の残るところです。phpinfo.php で確認すると無事、OpenSSL1.1.1g TLS1.3 対応しました。

スワップ作成は以下のサイトが参考になりました。

[Rails] CapistranoでEC2へデプロイ:EC2仮想メモリ不足トラブルシュート

ディレクトリのAilias設定

Apache のconf ファイルでディレクトリのAlias設定をしたのでメモ。

/DocumentRoot/wordpress/ ディレクトリにWordpress をインストールしているとしてhttp://{ホストネーム}/computers/ とブラウザのアドレス欄に入力してアクセスしたいときに、httpd.conf ファイルを開いてAlias を設定しました。

<If Module alias_module>
    Alias /computers "/usr/local/apache2/htdocs/wordpress"

Apache 再起動。

WordPress のダッシュボードから[設定]-[一般]-[Wordpress アドレス] と[サイトアドレス]のURLにhttp://{ホストネーム}/computers としてディレクトリ設定を追加。

ブラウザでhttps://{ホストネーム}/computers でアクセスできることを確認。

これがやりたかったんですね。

ただ、旧URL でのアクセスをリダイレクト処理は別途、必要ですね。(くぅ~ん

Apache のアクセス解析的なツール

Linuxメモ : GoAccessでリアルタイムにWebログ解析 – もた日記

yum でインストールできるApache のアクセス解析を探していたらベストマッチなツールを見つけたのでメモ。

yum で引っ張って

# yum install goaccess

apache のlogファイルのパスを指定。

# goaccess /usr/local/apache2/logs/access_log

logファイルの形式を選択、[Enter]キー押下。

ターミナルに動的アクセス解析を表示できました。

こんなのが欲しかったんですね。

https へのリダイレクト

httpプロトコルのアクセスをhttpsへのリダイレクトの方法はいくつかあるそうですが今回は、.htaccess で試してみました。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^stuffy.dip.jp/        ←(追記
RewriteRule ^(.*) https://stuffy.mydns.jp/$1 [R=301,L]  ←(追記
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>

 

RewriteRule ^(.*)$ https:// の後の % を付けずに表示させたところ、{HTTP_HOST}エラーがでました。
正しく表記して正常に転送できるかどうかトライ。うん、良いですね。。

 

追記)旧サイトからアクセスしてくるリクエストをSSL化した新サイトへのリダイレクトを追加しました。

サイトのSSL暗号化

Webサーバー間通信内容暗号化(Apache+mod_SSL+Certbot) でサイトのSSL暗号化しようとして失敗した点をメモ。

1.Apache はソースからビルドしたので/usr/local/apache2/conf.d/ssl.conf がなかった。→コピーして解決。

# cp /etc/httpd/conf.d/ssl.conf /usr/local/apache2/conf.d/ssl.conf

2./usr/local/apache2/conf.d/ssl.confをApacheが起動しても読み込んでくれなかった。→httpd.conf 内に Include conf.d/*.conf を追記して解決。

# Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
#       starting without SSL on platforms with no /dev/random equivalent
#       but a statically compiled-in mod_ssl.
#
Include conf.d/*.conf  ←(追記

3.httpd.conf のヴァーチャルホスト設定はssl.conf が設定してあると2重になる。→httpd.conf の<VirtualHost *:443>~</VirtualHost>を削除して解決。

以上、3点でした。ルーターの443 を開放してApache を再起動したらホームページをhttps:// ~で表示できることを確認。

searchreplacedb2.php でデータベースのhttp:// の部分をhttps:// にreplace してサイトのSSL化、・・・完了です。

このサイトのアップロードサイズ上限を超えています

前回、画面録画ソフトを使って作った動画を、Wordpress のメディアライブラリにアップロードしようとしたところ、件のエラーが出ました。

ファイルが重いのかな・・・解決方法は以下。

php.ini のパラメータを

post_max_size = 16M
upload_max_filesize = 16M
memory_limit = 1024M

に。次に.htaccess の以下パラメータの設定があるときに

php_value upload_max_filesize 16M
php_value post_max_size 16M

にしたところ、件のエラー出ずにアップロードできました。

次に、アップロードした動画を閲覧しようとすると別の再生プレイヤーが起動して閲覧は可能なのですが、「この種類のビデオファイルはサポートされていません 」と表示されブラウザで閲覧できない症状がでます。

Edge ブラウザ:この種類のビデオファイルはサポートされていません
IE11 ブラウザ:無効なソース

多分、ファイルが .avi でH.264形式のmp4じゃないからだと思うんですけど。(迷推理
ファイル形式はBandicam で指定可能なので .mp4 で動画を作り直したところ、[メディアの追加]ボタンで挿入するだけでブラウザで動画再生できました。

[pmath size=18]sum{n=2}{infty}{log{(1~-~{{1}/{n^2}})}}[/pmath]

追記)スマホで閲覧するときに読み込みが酷いです。画像編集ソフトでファイルサイズを小さくした方がイイですね。PC ではEdge 推奨です。

MySQL 互換MariaDB でWordPress の初期設定

前回の続きで、今回はMySQL 互換のMariaDB でデータベースとユーザーを作成していきます。早速、

# mysqladmin create 'databasename' -u root -p

データベース名、’databasename’ は予め考えたオリジナルの名前(例:wordpress , didital_life, casual など)で何でも良いです。

mariaDB にログインして一意のユーザー名、’username’に対してデータベースのパスワードを設定して、権限を与えていきます。

# mysql -u root -p
# mariaDB [<none>] GRANT ALL PRIVILEGES ON 'databasename'.* TO 'username'@localhost IDENTIFIED BY 'password';

Query OK , 0 rows affected と表示されればOKです。

# mariaDB[<none>] FLUSH PRIVILEGES;

Query OK 。exit または\q でプロンプトから出ます。

 

前回のページからの遷移画面、wp-admin/install.php に、WordPress のタイトル、管理ユーザー名、メールアドレスを入力、パスワードをメモ帳などに記録、[インストール] ボタンをクリックして、ユーザー名と先ほどメモしたパスワードを入力、ログインすればブログサーバーの初期設定、完了です。

 

 

参考URL: WordPress のインストール – WordPress Codex 日本語版

お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。

前回、構築したLAMP にWordpress をインストール。

# cd /var/www/html
# wget https://ja.wordpress.org/latest-ja.tar.gz
# tar zxvf latest-ja.tar.gz
# chown -R apache:apache wordpress/

ブラウザのアドレスバーから、http://localhost/wordpress/ でインストール画面を表示しようとして、PHP が500 サーバーエラーを吐きまくるので解決方法を見つけるまで半日掛かりました。

初めは /etc/httpd/conf/httpd.conf の

DirectoryIndex index.html index.php

を追加し忘れたと思い修正しましたが(もちろん必須の項目ですが。)500 エラー。

<Directory "/var/www/html">
  Options indexes ExecCGI

の追記はもちろん、必要ですがエラーが続きました。/etc/httpd/logs/error.log も見ましたがIE11 ではエラーが表示されず、Edge で閲覧キャッシュを削除するとブラウザに件のメッセージが表示されました。

件のキーワードで検索すると、php-mysql のインストールとphp.ini の設定が欠けていたようです。

一旦、yum remove php … してphp-mysql を再インストール。

# yum install --enablerepo=remi, remi-php70 php php-devel php-mysql php-mbstring php-pdo php-gd

/etc/php.ini に、extension = mysql.so を追記。

# systemctl restart httpd

で、httpd を再起動。すると、WordPress のwp-admin/setup-config.php が無事、表示されました。

参考URL: https://mostworks.wordpress.com/2013/02/16/2013-2-yuminstall-php-mysql-module/

MRTG でCPUの温度管理

MRTGでネットワークトラフィック、CPU負荷、空きメモリ、ディスク使用量の監視データに加え、CPUコアの温度管理を追加しようと/usr/local/mrtg-2/lib/mrtg.cfg の設定したのでメモ。

まず、sensors コマンドをインストールします。

# yum install lm_sensors
# sensors-detect

Target[cputemp_0] にはCore 0 のCPU温度をsensors コマンド、uptimeコマンドで取得するスクリプトを指示しています。

書式は、`input; output; uptime; hostname`で以下の4行を出力します。

例)
45.0
45.0
16 days, 07:07:45
hostname

input=output は、以下のシェルスクリプト。

/usr/bin/sensors | grep Core | awk NR==1'{print $3}' | sed -e 's/+//' -e 's/[^0-9+\.].*//'

uptime は、以下のシェルスクリプト。

uptime | awk '{$2=""; print$3" "$4" "$1}'

その他の設定項目は、@IT:MRTGでCPUの温度変化をグラフ化するには を参考にしました。

Target[cputemp_0]: `/usr/bin/sensors | grep Core | awk NR==1'{print $3}' | sed -e 's/+//' -e 's/[^0-9+\.].*//'; /usr/bin/sensors | grep Core | awk NR==1'{print $3}' | sed -e 's/+//' -e 's/[^0-9+\.].*//'; uptime | awk '{$2=""; print$3" "$4" "$1}'; hostname`
MaxBytes[cputemp_0]: 100
Title[cputemp_0]: Temp of CPU Core 0
PageTop[cputemp_0]: <h1>Temp of CPU Core 0</h1>
Options[cputemp_0]: growright,absolute,gauge,nopercent,noinfo
WithPeak[cputemp_0]: ymw
#unscaled[cputemp_0]: dwmy
YLegend[cputemp_0]: Temperature
ShortLegend[cputemp_0]: C
LegendI[cputemp_0]: M/B
LegendO[cputemp_0]: CPU
Legend1[cputemp_0]: M/B
Legend2[cputemp_0]: CPU

NR==1 の所を同様に、NR==2, NR==3, NR==4, とするとCore 別の温度が取得できますのでmrtg.cfg にcputemp_1, cputemp_2, cputemp_3 を編集で追加。indexmaker コマンドを実行すると

# indexmaker /usr/local/mrtg-2/lib/mrtg.cfg > /usr/local/apache2/htdocs/mrtg/index.html

 

CPU温度を表示する、index.html ファイルが生成されました。

参考URL:
http://blog.goo.ne.jp/takuminews/e/19ecc7aa1878401df1850285bfe17436
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/797mrtg2cpu.html