LoginSignup
0
1

More than 5 years have passed since last update.

PHPのとあるライブラリ経由でJavaの処理を呼び出せる環境を整備した

Last updated at Posted at 2018-09-09

こういう分野ってどうやって勉強したらいいですか?
ひとつひとつを調べるのに時間がかかりすぎてしまいました。
反省の意を込めた備忘録です。

環境構築

Javaをインストールする

# yum install java-1.8.0-openjdk
# yum install java-1.8.0-openjdk-devel

java -versionjavac -version でバージョンが返ってくればインストール完了。

参考

CentOS 7 に Java 8 (OpenJDK) を yum インストールする手順 | WEB ARCH LABO

Javaを環境変数に設定する

java.sh
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
# source java.sh

printenv で環境変数が設定されていることが確認できればOK。

参考

CentOS7にJava OpenJDK8のインストール

composerをインストールする

# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php composer-setup.php

llcomposer.phar がダウンロードされていることが確認できればOK。

参考

Composer を CentOS にインストールする手順 | WEB ARCH LABO

問題解決

コマンドラインで実行した時には問題なかったのに、Apache経由でエラーが発生したため、追加で行った作業。

SELinuxにポリシーを登録する

/var/log/messages に出力されているログで検索したところ、原因はSELinuxであることを突き止めました。
ところが、解決方法を調べると setenforce 0 の実行によるSELinuxの無効化ばかりです。
これはセキュリティが緩くなりすぎるため、さらに調べて見つけたSELinuxにポリシーを登録する方法で解決します。
ツールの導入も検討したのですが、あまり環境を汚したくなかったので、/var/log/audit/audit.log を解析して自作しました。

javalocal.te
module javalocal 1.0;
require {
    type httpd_sys_script_t;
    type proc_net_t;
    class process { execmem };
    class file { read open getattr };
}
allow httpd_sys_script_t self:process { execmem };
allow httpd_sys_script_t proc_net_t:file { read open getattr };
# make -f /usr/share/selinux/devel/Makefile
# semodule -i javalocal.pp

参考

selinux上のCGIでjavaを動かせるようにする方法 - muibrog
SELinuxのポリシー・モジュールを自作する - わんこいん
「SELinuxのせいで動かない」撲滅ガイド
理由がわかれば怖くない!SELinux とのつきあい方

ロケールを日本に設定する

さて、ようやくApache経由でも実行されるようになったのですが、日本語を含むと想定の結果が返ってきません。
これは調べたところ、原因はPHPの execescapeshellcmd によって日本語が切り捨てられたことでした。試しに実行コマンドを文字列として出力させたところ、日本語が抜け落ちていました。
この解決は有識者が行ったため、私は詳細を把握していないのですが、おそらくPHPとApacheで日本語を扱えるよう設定を変更したのだと思います。

参考

PHPでexecを走らせると日本語だけ消える

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1