So-net無料ブログ作成
検索選択

Web Pageへのアクセス時のPHPのエラーログへの対応 [CentOS]

久しぶりに CentOS 6 の Apache 上に構築した Web サイトの Web Page (PHP で作成) にアクセスしたところ、エラーログが出力されるようになってしまった。以前には発生していなかったため、原因の調査と対応を行った。
詳細は、以下の通りである。

[ソフトウェアのバージョン]
・httpd-2.2.15-54.el6.centos.i686
・php-pdo-5.3.3-48.el6_8.i686

1. エラーログの内容


下記の 2 種類に大別される。

(1) 未定義の配列要素の参照に関するもの

PHP Notice: Undefined index: xxx in yyy.php on line zzz, referer: http:...


・xxx: 連想配列のキー
・yyy: ソースファイルのパス(拡張子を除く)
・zzz: 当該箇所の行番号

(補足)
下記のような箇所で発生する。

$width = $_GET['width'];
$client = $_SERVER['HTTP_CLIENT_IP'];


(2) タイムゾーンの設定に関するもの

PHP Warning: xxx(): It is not safe to rely on the system's timezone
settings. You are *required* to use the date.timezone setting or the
date_default_timezone_set() function. ...

2. 対応


いずれも深刻なエラーではなく、notice または warning レベルの事象である。
よって、ソースの変更ではなく、これらの事象に関するログ出力を抑制することにする。

(1) エラーログ (1) への対応


/etc/php.ini の error_reporting の設定値を変更する。

(旧) error_reporting = E_ALL & ~E_DEPRECATED    ... (注1)
(新) error_reporting = E_ALL & ~E_NOTICE    ... (注2)


(注1) 運用時の推奨値(インストール直後の /etc/php.ini での設定値)
(注2) デフォルト値(未設定時に採用される値)

(補足)
ソースを変更する場合には、当該部分を下記のように変更する。

$width = isset($_GET['width']) ? $_GET['width'] : '';
$client = isset($_SERVER['HTTP_CLIENT_IP']) ? $_SERVER['HTTP_CLIENT_IP'] : '';


(2) エラーログ (2) への対応


/etc/php.ini の date.timezone を設定する。

(旧) 未設定(インストール直後の /etc/php.ini での設定状況)
(新) date.timezone = Asia/Tokyo

3. 備考


PHP のバージョンアップに時に、デフォルト値の変更、または設定ファイルの更新漏れが発生したものと思われる。



TomcatのUnit設定ファイルの更新 [CentOS]

Tomcat の Unit 設定ファイルの更新を行った。
詳細は、以下の通りである。

1. 現在の Unit 設定ファイル


http://dan-project.blog.so-net.ne.jp/2016-08-16


2. 更新内容


・PID ファイルのパスの変更 (/var/run/tomcat/tomcat.pid への変更)
・Unit の説明の変更、コメントの追加


3. 実施手順


Tomcat を停止した状態で、以下の手順を実施する。

(1) systemd-tmpfiles の設定


下記の内容で /etc/tmpfiles.d/tomcat.conf を作成する。

d /var/run/tomcat 0755 tomcat tomcat -


(補足)
ブート時に当該ディレクトリが作成される。


(2) /var/run/tomcat の作成


リブート、または下記の手順を実施し、当該ディレクトリを作成する。

# cd /var/run
# mkdir tomcat
# chown tomcat.tomcat tomcat
# chmod 755 tomcat


(3) Unit 設定ファイルの更新

# diff tomcat.service tomcat.service.old 
1,5d0
< # Systemd unit file for Apache Tomcat (on CentOS 7)
< #
< # /var/run/tomcat is created by systemd-tmpfiles
< # (cf. /etc/tmpfiles.d/tomcat.conf)
< 
7c2
< Description=Apache Tomcat Web Application Container
---
> Description=Apache Tomcat
15c10
< Environment=CATALINA_PID=/var/run/tomcat/tomcat.pid
---
> Environment=CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid


TomcatのUnit設定ファイルの作成 [CentOS]

CentOS 7.2 上への Tomcat 8.0 の導入を行った(Tomcat は apache.org からダウンロード)。
その際、自動起動の設定で、Unit 設定ファイルの作成に少々手間取った。
以下は、備忘録としてまとめたものである。

[ソフトウェアのバージョン]
・systemd-219-19.el7_2.12.x86_64

1. Unit 設定ファイル (/etc/systemd/system/tomcat.service)
[Unit]
Description=Apache Tomcat
After=network.target

[Service]
Type=forking
Environment=JAVA_HOME=/usr/local/java
Environment="JAVA_OPTS=-Duser.language=en -Duser.region=US \
-Dfile.encoding=ISO-8859-1"    … (注1)
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid
User=tomcat
Group=tomcat
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target


(注1) 実際には前の行と合わせて一行に設定


2. Unit 設定ファイルでの指定項目の説明


(1) 環境変数の定義 (Environment)


・Environment=name=value で、name に value を設定できる。
・EnvironmentFile に環境変数を定義したファイルのパスを指定することもできる。
・今回の方法では、環境変数の値に定義済の環境変数を含めることはできない。

(補足)
上記の Unit 設定ファイルでは、下記の環境変数を定義している。
・JAVA_HOME, JAVA_OPTS, CATALINA_HOME, CATALINA_PID


(2) 実行ユーザー/グループの指定 (User/Group)


User/Group に当該ユーザー/グループを指定する。


(3) 起動/停止コマンドの指定 (ExecStart/ExecStop)


環境変数を使用してパスを指定すると、絶対パスでないと認識され、エラーとなる。

(補足)
当該 Unit の再起動時には、下記の順にコマンドが実行される。
・停止コマンド
・起動コマンド


(4) 起動完了の判定方法の指定 (Type)


forking: 子プロセスを fork するコマンドである。
(デフォルト値: simple)


(5) 起動順序、依存関係の指定


(a) 起動順序の指定


After=xxx: 指定した Unit の起動後に起動する。


(b) 依存関係の指定


WantedBy=xxx: 指定した Unit が当該 Unit に依存する。
(指定した Unit の起動時に当該 Unit を起動する。)

(補足)
指定した Unit の [Unit] 欄での Wants 指定と同じ効果がある。


(6) PID ファイル


/var/run への書き込み権限がないため /usr/local/tomcat/temp に作成する。


3. 備考


該当するオンライン・マニュアルの所在は、下記の通りである。

・Unit 欄の設定項目: man systemd.unit
・Service 欄の設定項目: man systemd.service
・Install 欄の設定項目: man systemd.unit



CentOS 6.8の不具合への対応(3) [CentOS]

下記の CentOS 6.8 の不具合について、残件の対応を行った。

[不具合]
http://dan-project.blog.so-net.ne.jp/2016-05-27-1

[対応済]
http://dan-project.blog.so-net.ne.jp/2016-06-25
http://dan-project.blog.so-net.ne.jp/2016-07-02
http://dan-project.blog.so-net.ne.jp/2016-07-17-1

1. kernel-2.6.32-71.29.1.el6 で Kernel panic を発生する件


[ソフトウェアのバージョン]
kernel-2.6.32-71.29.1.el6.i686
libgudev1-147-2.73.el6.i686
libudev-147-2.73.el6.i686
udev-147-2.73.el6.i686


1-1. 発生事象


ブート時に Kernel panic を発生することがある。

・発生頻度は低い(感覚的には、20〜30 回に 1 回以下)。
・ivtv モジュールのために、kernel 2.6.32-71.29.1.el6.i686 を使用している。
・同じカーネルでも、CentOS 6.7 では発生しない。
・kernel 2.6.32-431.20.3.el6.i686 (ivtv を使用しない) では発生しない。


1-2. 対処方法


下記のパッケージを CentOS 6.7 のパッケージにバージョンダウンする。

(1) 該当する CentOS 6.8 のパッケージ

libgudev1-147-2.73.el6.i686
libudev-147-2.73.el6.i686
udev-147-2.73.el6.i686


(2) 使用した CentOS 6.7 のパッケージ

libgudev1-147-2.63.el6_7.1.i686
libudev-147-2.63.el6_7.1.i686
udev-147-2.63.el6_7.1.i686


(補足)
起動/再起動をそれなりの回数実施したが、当該事象は発生していない。



CentOS 6.x上のFirefoxが異常終了する件のその後 [CentOS]

[ソフトウェアのバージョン]
・Firefox 42.0 〜 Firefox ESR 45.2.0
 (mozilla.org からダウンロードしたものを使用。)

CentOS 6.x 上において、Firefox の異常終了が度々発生していた。
http://dan-project.blog.so-net.ne.jp/2016-04-25

また、どうにか動作が安定するようになったため、備忘録としてまとめてみた。
詳細は、以下の通りである。

1. 発生事象


CentOS 6.x 上において、Firefox が度々異常終了する。

(1) Firefox 上の Flash プレーヤーが度々クラッシュする。

(2) Firefox 上の HTML5 プレーヤーが度々クラッシュする。


特に、YouTube の動画再生でよく発生する。


(3) 上記以外でも、Firefox が度々異常終了する。

(補足)
Debian 7/8、CentOS 7 では発生しない。


2. 対象方法


下記のいずれかの手順を実施する。

(1) Firefox ESR 45.3.0 に更新する。


Firefox ESR 45.3.0 で改善されたようである。
(Firefox ESR 45.2.0 に比べ、明らかに動作が安定している。)


(2) Firefox ESR 38.8.0 を使用する。


少々バージョンは古いが、動作が安定している。
また、YouTube で Flash プレーヤーを使用するように設定することも可能である。

(補足)
・Firefox ESR 45.3.0 のリリース前は、このバージョンを主に使用していた。
・Firefox ESR 38.7.1 でも動作は安定していた。


(3) CentOS の RPM パッケージ (Firefox 45.0.2) を使用する。


短期間の使用であったが、動作は安定していた。

(補足)
マルチブートする Linux 間で Firefox を共有ため、最終的には採用しなかった。


3. 備考


(1) Firefox ESR のバージョン


Firefox ESR 45.3.0: Firefox 48.0 と同時にリリースされた Firefox ESR 版である。
Firefox ESR 38.8.0: Firefox 46.0 と同時にリリースされた Firefox ESR 版である。



CentOS 6.8でディスプレイをオープンできない件のその後 [CentOS]

1. 発生事象


CentOS 6.8 において、ノード名を付けて指定したディスプレイをオープンできない。


2. 対処方法


下記のパッケージへの更新を行う。

・xorg-x11-server-Xorg-1.17.4-9.5.el6.centos.i686
・xorg-x11-server-common-1.17.4-9.5.el6.centos.i686

(補足)
ほとんどの xorg-x11-drv-* は、依存パッケージとなっている。
依存関係のないパッケージは、下記の通りである。
・xorg-x11-drv-ati-firmware-7.6.1-2.el6.noarch
・xorg-x11-drv-geode-2.11.17-1.el6.i686
・xorg-x11-drv-neomagic-1.2.9-1.el6.i686


3. 備考


更新パッケージがリリースされる前の対処方法は、下記の通りである。
http://dan-project.blog.so-net.ne.jp/2016-06-25



snd-mixer-oss.koの所在 [CentOS]

CentOS 6 において、snd-mixer-oss モジュールを使用する必要があり、その所在を調べた。
(カーネルの再構成を行う場合を除く。)
詳細は、以下の通りである。

1. kernel 2.6.32-71.29.1.el6.i686 の場合


(1) カーネル・パッケージには含まれない。

(2) alsa-kmdl-2.6.32-71.29.1.el6.i686-1.0.23-85.el6.i686.rpm (ATrpms)


・kernel-2.6.32-71.29.1.el6.i686 のみを対象とする。

・/lib/modules/2.6.32-71.29.1.el6.i686/updates/sound/acore/oss/\
 snd-mixer-oss.ko


(3) kmod-alsa-1.0.23-1.el6.elrepo.i686.rpm


kernel-2.6.32-71.el6.i686 以降で使用可能である。


(補足)
2.6 系で、ivtv モジュールのロードでエラーが発生しないカーネルである。
これより後の 2.6 系バージョンでは、ivtv モジュールのロードでエラーが発生する。


2. kernel-2.6.32-431.20.3.el6.i686 の場合


(1) カーネル・パッケージに含れる。


(補足)
カーネル・パッケージに含まれるようになった最初のバージョンは不明である。
これ以降のバージョンでは、カーネル・パッケージに含まれる。



MDデバイスでのmd127問題 [CentOS]

/dev/md2 デバイスの再作成後、再起動により左記のデバイス名が変わってしまうという問題が発生した(md127 問題というらしい)。
詳細は、以下の通りである。

1. 発生事象


/dev/md2 の再作成後、再起動すると /dev/md127 に変わってしまう。

(補足)
・/etc/mdadm.conf の UUID の設定は、新しい値に更新済である。
・再起動前には、/dev/md2 として認識されていた。
・CentOS 7、Debian 7/8 では発生しない。
 (mdadm.conf の UUID の更新のみを実施。CentOS 6 とのマルチブートを行っている。)
・ソフトウェアのバージョン
 mdadm-3.3.2-5.el6.i686、kernel-2.6.32-431.29.2.el6.i686


2. 対処方法


MD デバイスの作製後に、initramfs(/boot/initramfs-`uname -r`.img) を更新する。
(下記 (3) の手順を実施する。)

(1) MD デバイスの作製

(例)
# mdadm --create /dev/md2 --metadata=0.90 --level=raid1 \
--raid-devices=2 /dev/sda7 /dev/sdb7


(2) /etc/mdadm.conf の更新

# mdadm --detail --scan >> /etc/mdadm.conf


・UUID の古い設定は削除する。


(3) initramfs の更新

# cd /boot
# mv initramfs-`uname -r`.img initramfs-`uname -r`.img.old
# mkinitrd /boot/initramfs-`uname -r`.img `uname -r`


または

# cd /boot
# mv initramfs-`uname -r`.img initramfs-`uname -r`.img.old
# dracut /boot/initramfs-`uname -r`.img `uname -r`


・動作確認後に、/boot/initramfs-`uname -r`.img.old を削除する。


3. 備考


initramfs 内のディスク情報と実際のディスク上の情報が一致しない場合に、md127 から降順に必要分のデバイス名が割り当てられるとのこと。
また、以前には、Debian 系でも同様の事象が発生し、同様の手順で対応できたとのこと。



CentOS 6.8へのアップデート後にshutdownでエラーメッセージが表示される(2) [CentOS]

1. 発生事象


shutdown 時に /sbin/blkdeactivate のエラーが発生する。
・/sbin/blkdeactivate: line 187: SKIP_DEVICE_LIST: bad array subscript

(補足)
・CentOS 6.7 から CentOS 6.8 へのアップデート後に発生するようになった。
・該当するパッケージ: lvm2-2.02.143-7.el6.i686


2. 対処方法


下記のパッケージを CentOS 6.7 のパッケージにバージョンダウンする。

(1) 該当する CentOS 6.8 のパッケージ

device-mapper-1.02.117-7.el6.i686  … (注1)
device-mapper-event-1.02.117-7.el6.i686  … (注1)
device-mapper-event-libs-1.02.117-7.el6.i686  … (注1)
device-mapper-libs-1.02.117-7.el6.i686  … (注1)
lvm2-2.02.143-7.el6.i686
lvm2-libs-2.02.143-7.el6.i686

(注1) 依存パッケージ


(2) 使用した CentOS 6.7 のパッケージ

device-mapper-1.02.95-3.el6_7.4.i686.rpm  … (注2)
device-mapper-event-1.02.95-3.el6_7.4.i686.rpm  … (注2)
device-mapper-event-libs-1.02.95-3.el6_7.4.i686.rpm  … (注2)
device-mapper-libs-1.02.95-3.el6_7.4.i686.rpm  … (注2)
lvm2-2.02.118-3.el6_7.4.i686.rpm
lvm2-libs-2.02.118-3.el6_7.4.i686.rpm

(注2) 依存パッケージ


CentOS 6.8の不具合への対応(2) [CentOS]

下記の CentOS 6.8 の不具合について、残件の対応を行った。

http://dan-project.blog.so-net.ne.jp/2016-05-27-1
http://dan-project.blog.so-net.ne.jp/2016-06-25

1. rsh-server が正常に機能しない件

1-1. 発生事象


(1) 初回の実行では、ログイン直後に入力を受け付けなくなる。


しばらく経過した後に、ターミナルの Full Reset で入力可能となる。
ただし、プロンプトが表示されない。

% rsh `hostname`              … テストのためローカルノード上で実行
→ 入力を受け付けない
(しばらく待って、ターミナルを Full Reset する)
→ 入力可能となる
exit                          … プロンプトの表示がないが、コマンドの実行は可能


(2) 2 回目以降は、ログインシェルを引数指定しないと、即座にクローズされる。


ログインしても、プロンプトが表示されない。
ただし、コマンドの実行は可能である。

% rsh `hostname`              … テストのためローカルノード上で実行
rlogin: connection closed.    … 即座にクローズされる
% rsh `hostname` /bin/bash
exit                          … プロンプトの表示がないが、コマンドの実行は可能

1-2. 対処方法


下記のパッケージを CentOS 6.7 のパッケージにバージョンダウンする。

(1) 該当する CentOS 6.8 のパッケージ

libblkid-2.17.2-12.24.el6.i686.rpm    … 依存パッケージ
libuuid-2.17.2-12.24.el6.i686.rpm     … 依存パッケージ
util-linux-ng-2.17.2-12.24.el6.i686.rpm


(2) 使用した CentOS 6.7 のパッケージ

libblkid-2.17.2-12.18.el6.i686.rpm    … 依存パッケージ
libuuid-2.17.2-12.18.el6.i686.rpm     … 依存パッケージ
util-linux-ng-2.17.2-12.18.el6.i686.rpm

2. telnet-server が正常に機能しない件

2-1. 発生事象


(1) ログイン時のプロンプトが正しく表示されない。


・1 行目の 1 カラム目が表示されない。
・1 行目の改行が正しく実施されない。

% telnet `hostname`    … テストのためローカルノード上で実行
Trying 192.168.0.11...
Connected to xxx.xxx.xxx.
Escape character is '^]'.
CentOS release 6.8 (Final)
Kernel 2.6.32-71.29.1.el6.i686 on an i686
ogin:               … プロンプトの 1 カラム目が表示されない
      Password:     … プロンプトの表示位置がおかしい


(2) ログイン後の出力がおかしい。


・プロンプトが表示されない。
・入力がエコーされない。
・コマンドの実行はできるが、実行結果の 1 行目が正しく表示されない。
 (1 カラム目が表示されない、改行が正しく実施されない。)


2-2. 対処方法


1-2. の対処方法と同じ。


[追記]