fedora 24でphpがコンパイルできなかったのは/tmpの容量不足だった

fedora 24でphpenvを使いphp7.0.8をインストールしようとして、コンパイルエラーがでました。

# phpenv install 7.0.8
[Info]: Loaded extension plugin
[Info]: Loaded apc Plugin.
[Info]: Loaded composer Plugin.
[Info]: Loaded github Plugin.
[Info]: Loaded uprofiler Plugin.
[Info]: Loaded xdebug Plugin.
[Info]: Loaded xhprof Plugin.
[Info]: php.ini-production gets used as php.ini
[Info]: Building 7.0.8 into /opt/phpenv/versions/7.0.8
[Downloading]: https://secure.php.net/distributions/php-7.0.8.tar.bz2
[Preparing]: /tmp/php-build/source/7.0.8
[Compiling]: /tmp/php-build/source/7.0.8

-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: unrecognized options: --with-mysql
/tmp/php-build/source/7.0.8/ext/zip/lib/mkstemp.c: 関数 ‘_zip_mkstemp’ 内:
/tmp/php-build/source/7.0.8/ext/zip/lib/mkstemp.c:75:8: 警告: 関数 ‘getpid’ の暗黙的な宣言です [-Wimplicit-function-declaration]
  pid = getpid();
        ^~~~~~
/tmp/php-build/source/7.0.8/Zend/zend_ini_parser.y:264.1-12: 警告: deprecated directive, use `%pure-parser' [-Wdeprecated]
 %pure_parser
 ^^^^^^^^^^^^
collect2: error: ld returned 1 exit status
make: *** [sapi/cgi/php-cgi] エラー 1
-----------------------------------------

原因は/tmpの容量不足でした。ConoHaの1GBプランで組んでいたため、tmpfsでマウントされている/tmpはデフォルトで物理メモリの半分である512MBになっており、disk fullになっていたのが偶然こういうエラーメッセージになってしまったようです。

/var/tmpでコンパイルさせることで回避できました。以下はphp-buildプラグインの差分です。

# pwd
/opt/phpenv/plugins/php-build
# git diff bin/php-build
diff --git a/bin/php-build b/bin/php-build
index 273a11a..7161281 100755
--- a/bin/php-build
+++ b/bin/php-build
@@ -61,6 +61,7 @@ function realpath() {
 # the `share/` and `tmp/` folders of php-build.
 PHP_BUILD_ROOT="$(realpath "$0")/.."
 TMP="$(dirname $(mktemp --dry-run 2>/dev/null || echo "/var/tmp/tmp_dir"))/php-build"
+TMP=/var/tmp/php-build

 # This file gets copied to `$PREFIX/etc/php.ini` once the build is complete.
 # This is by default the PHP tarball's `php.ini-production`.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください