CentOS7でOpenJDKのソースツリー取得時に/dev/stdout: Permission denied
手元の環境を再構築したときにハマったのでメモ。
get_source.shでエラー
CentOS7でOpenJDK9のソースコードを取得しようとすると、以下のようなエラーが発生してget_source.shでソースコードがhg cloneできない。
hg clone http://hg.openjdk.java.net/jdk9/jdk9/ cd jdk9/jdk9 sh get_source.sh ./common/bin/hgforest.sh: 行 286: /dev/stdout: Permission denied ./common/bin/hgforest.sh: 行 377: /dev/stdout: Permission denied ./common/bin/hgforest.sh: 行 377: /dev/stdout: Permission denied
他の色々のページでも言及されているように、シンボリックリンクである/dev/stdoutの最終的な参照先である、/dev/pts/0のオーナーがrootなので、一般ユーザでは権限ではないと言われている。
ls -l /dev/stdout lrwxrwxrwx. 1 root root 15 2月 5 20:12 /dev/stdout -> /proc/self/fd/1 ls -l /proc/self/fd/1 lrwx------. 1 openjdk openjdk 64 2月 5 20:52 /proc/self/fd/1 -> /dev/pts/0 $ ls -l /dev/pts/0 crw--w----. 1 root tty 136, 0 2月 5 20:54 /dev/pts/0
get_source.shの中で呼ばれているhgforest.shには以下のようなリダイレクトが多くあり、デフォルトは変数status_outputが/dev/stdoutを指し示している。これにより、上記のようなエラーが発生している。
vim common/bin/hgforest.sh 99 # Make sure we have a command. 100 if [ ${#} -lt 1 -o -z "${1:-}" ] ; then 101 echo "ERROR: No command to hg supplied!" > ${status_output} 102 usage > ${status_output}
対処
1つずつ以下のようにコメントアウトするのはとても面倒なので、
#echo "ERROR: No command to hg supplied!" > ${status_output} echo "ERROR: No command to hg supplied!"
hgforest.shが参照している標準出力抑止用のオプション環境変数 HGFOREST_QUIET=true を設定すると、${status_output}が/dev/nullに切り替わり、エラーが出ずにソースツリーが取得できる。
export HGFOREST_QUIET=true sh get_source.sh
ソースが取得できたらビルドする。
# OpenJDK9のビルド
sh configure
make all