FreeBSD: portupgrade で segmentation fault 発生

本日、また FreeBSD ports コレクションのアップデートが通知されたので、アップデートしようと portupgrade コマンドを発行したら、通るはずのmakeがエラーで停止するという現象が発生しました。
公式サイトからダウンロードしているわけで、バージョンミスマッチ関係のエラーは発生するとしても、segmentation fault とか Internal error などになるはずはないわけです。

次のメッセージは「p5-HTML-Parser」のもので、

# portupgrade p5-HTML-Parser-3.70 
---> Upgrading 'p5-HTML-Parser-3.70' to 'p5-HTML-Parser-3.71' (www/p5-HTML-Parser)
---> Building '/usr/ports/www/p5-HTML-Parser'
===> Cleaning for p5-HTML-Parser-3.71
===> Fetching all distfiles required by p5-HTML-Parser-3.71 for building
===> Extracting for p5-HTML-Parser-3.71
=> SHA256 Checksum OK for HTML-Parser-3.71.tar.gz.
===> p5-HTML-Parser-3.71 depends on file: /usr/local/bin/perl5.12.4 - found
===> Patching for p5-HTML-Parser-3.71
===> p5-HTML-Parser-3.71 depends on file: /usr/local/bin/perl5.12.4 - found
===> p5-HTML-Parser-3.71 depends on package: p5-HTML-Tagset>=3 - found
===> p5-HTML-Parser-3.71 depends on file: /usr/local/bin/perl5.12.4 - found
===> Configuring for p5-HTML-Parser-3.71
Checking if your kit is complete...
Looks good
Writing Makefile for HTML::Parser
===> Building for p5-HTML-Parser-3.71
cp lib/HTML/PullParser.pm blib/lib/HTML/PullParser.pm
cp Parser.pm blib/lib/HTML/Parser.pm
cp lib/HTML/Entities.pm blib/lib/HTML/Entities.pm
cp lib/HTML/LinkExtor.pm blib/lib/HTML/LinkExtor.pm
cp lib/HTML/TokeParser.pm blib/lib/HTML/TokeParser.pm
cp lib/HTML/Filter.pm blib/lib/HTML/Filter.pm
cp lib/HTML/HeadParser.pm blib/lib/HTML/HeadParser.pm
/usr/local/bin/perl5.12.4 mkhctype >hctype.h
/usr/local/bin/perl5.12.4 mkpfunc >pfunc.h
/usr/local/bin/perl5.12.4 /usr/local/lib/perl5/5.12.4/ExtUtils/xsubpp -typemap /usr/local/lib/perl5/5.12.4/ExtUtils/typemap -typemap typemap Parser.xs > Parser.xsc && mv Parser.xsc Parser.c
cc -c -O2 -pipe -fno-strict-aliasing -O2 -pipe -fno-strict-aliasing -DVERSION=\"3.71\" -DXS_VERSION=\"3.71\" -DPIC -fPIC "-I/usr/local/lib/perl5/5.12.4/mach/CORE" -DMARKED_SECTION Parser.c
util.c: In function 'strnEQx':
util.c:25: internal compiler error: Segmentation fault: 11
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
*** Error code 1
Stop in /usr/ports/www/p5-HTML-Parser/work/HTML-Parser-3.71.
*** Error code 1
Stop in /usr/ports/www/p5-HTML-Parser.
** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20130520-46313-fe6m5v-0 env UPGRADE_TOOL=portupgrade UPGRADE_PORT=p5-HTML-Parser-3.70 UPGRADE_PORT_VER=3.70 make
** Fix the problem and try again.
** Listing the failed packages (-:ignored / *:skipped / !:failed)
! www/p5-HTML-Parser (p5-HTML-Parser-3.70) (segmentation fault)

以下は、「python27」のものです。

# portupgrade python27-2.7.3_6
 ---> Upgrading 'python27-2.7.3_6' to 'python27-2.7.5' (lang/python27)
 ---> Building '/usr/ports/lang/python27'
 ===> Cleaning for python27-2.7.5
 ===> Found saved configuration for python27-2.7.3_3
 ===> Fetching all distfiles required by python27-2.7.5 for building
 ===> Extracting for python27-2.7.5
 => SHA256 Checksum OK for python/Python-2.7.5.tar.xz.
<中略>
 ===> Applying FreeBSD patches for python27-2.7.5
 ===> python27-2.7.5 depends on shared library: intl - found
 ===> Configuring for python27-2.7.5
 configure: loading site script /usr/ports/Templates/config.site
 checking build system type... i386-portbld-freebsd8.3
 checking host system type... i386-portbld-freebsd8.3
 checking for --enable-universalsdk... no
 checking for --with-universal-archs... 32-bit
 checking MACHDEP... freebsd8
 checking EXTRAPLATDIR...
 checking for --without-gcc... no
 checking for gcc... cc
 checking whether the C compiler works... yes
 checking for C compiler default output file name... a.out
 checking for suffix of executables...
 checking whether we are cross compiling... configure: error: in `/usr/ports/lang/python27/work/Python-2.7.5/portbld.static':
 configure: error: cannot run C compiled programs.
 If you meant to cross compile, use `--host'.
 See `config.log' for more details
 ===> Script "../configure" failed unexpectedly.
 Please report the problem to python@FreeBSD.org [maintainer] and attach the
 "/usr/ports/lang/python27/work/Python-2.7.5/portbld.static/config.log"
 including the output of the failure of your make command. Also, it might be
 a good idea to provide an overview of all packages installed on your system
 (e.g. a /usr/sbin/pkg_info -Ea).
 *** Error code 1
 Stop in /usr/ports/lang/python27.
 *** Error code 1
 Stop in /usr/ports/lang/python27.
 ** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade20130520-46850-e409pt-0 env UPGRADE_TOOL=portupgrade UPGRADE_PORT=python27-2.7.3_6 UPGRADE_PORT_VER=2.7.3_6 make
 ** Fix the problem and try again.
 ** Listing the failed packages (-:ignored / *:skipped / !:failed)
 ! lang/python27 (python27-2.7.3_6) (configure error)

「cannot run C compiled programs」って、Unix上で、こんなエラーが出るなんて、クロス環境じゃあるまいしあり得ない。
しかも、全てのビルドで発生する訳じゃなくて、ビルドが通るパッケージもあります。
このマシンはFreeBSD8.3ですが、perl は5.12系で、そろそろ廃止対象になるかもしれません。5.14か5.16系じゃないために perl が通らないの?perlのアップグレードが必要なの?と考えたりしました。

そして、とりあえずビルドが成功するものだけアップグレードして入れてしまおうと考えて作業を進めていたところ、運悪く、勝手リブートが発生。残ったターミナルエミュレータ画面を見てみるとパッケージのビルドとネットワークトラフィックで高負荷状態が続いたようです。すぐに再起動できたので良かったのですが、その後で再度 portupgrade コマンドを発行したら、先程までエラーを吐いていたpython やp5プログラムパッケージが何事も無くコンフィグされたりコンパイルされて行くではないですか!

ということは、ハードウェアに起因するエラーだって事になります。多分、メモリーかHDDでしょう。かなり手を出しにくいところに原因がありそうだと判明しました。メモリやスワップ専用HDDなら別のものと交換してみるだけで状況が変わることもあり得ますが、ファイルシステムとして使っているHDDが原因だとするとOS再インストールになってしまいますからねぇ。
今回の勝手リブートも、既にダーティーになっていたメモリやスワップ上のバイナリーを実行してしまったためと考えるのが良さそうです。

こうなってくると対策は、

  1. 根本的には、データをバックアップして別のホストをサーバーにして移行を行う。
  2. 今のところ、CPU高負荷状態で異常が発生しているようなので、暫定的には、高負荷にならないように運営する。

ということになってしまいそうです。

それにしても、make の segmentation fault エラーが、OSのリブートで解決するとは思いませんでした。

コメントを残す