読者です 読者をやめる 読者になる 読者になる

真夜中の色彩

真夜中の雰囲気が好きなプログラマのブログ

さくらのVPS(CentOS 5.6)にSWI-Prologをインストールするよ!

さくらのVPS(CentOS 5.6)にSWI-Prologをインストールするよ!

公式サイトはこちら。 SWI-Prolog on Redhat (Fedora, RHEL, CentOS)

rpmからサクふわっといけるかと思ったけど、そうは問屋がおろさなかった。 依存性の欠如。 その欠如の埋め方わからんし、やっぱり説明されてる正攻法よねってことで、ソースからビルドするお。

準備

ビルドするためのツールをがががっとインストール。 [shell] sudo yum install autoconf freetype-devel gmp-devel java-1.6.0-openjdk-devel jpackage-utils libICE-devel libjpeg-devel libSM-devel libX11-devel libXaw-devel libXext-devel libXft-devel libXinerama-devel libXmu-devel libXpm-devel libXrender-devel libXt-devel ncurses-devel openssl-devel pkgconfig readline-devel unixODBC-devel zlib-devel [/shell] その結果。 [shell] Installed: freetype-devel.i386 0:2.2.1-28.el5_5.1 freetype-devel.x86_64 0:2.2.1-28.el5_5.1 gmp-devel.i386 0:4.1.4-10.el5 gmp-devel.x86_64 0:4.1.4-10.el5 java-1.6.0-openjdk-devel.x86_64 1:1.6.0.0-1.20.b17.el5 jpackage-utils.noarch 0:1.7.3-1jpp.2.el5 libICE-devel.i386 0:1.0.1-2.1 libICE-devel.x86_64 0:1.0.1-2.1 libSM-devel.i386 0:1.0.1-3.1 libSM-devel.x86_64 0:1.0.1-3.1 libX11-devel.i386 0:1.0.3-11.el5 libX11-devel.x86_64 0:1.0.3-11.el5 libXaw-devel.i386 0:1.0.2-8.1 libXaw-devel.x86_64 0:1.0.2-8.1 libXext-devel.i386 0:1.0.1-2.1 libXext-devel.x86_64 0:1.0.1-2.1 libXft-devel.i386 0:2.1.10-1.1 libXft-devel.x86_64 0:2.1.10-1.1 libXinerama-devel.i386 0:1.0.1-2.1 libXinerama-devel.x86_64 0:1.0.1-2.1 libXmu-devel.i386 0:1.0.2-5 libXmu-devel.x86_64 0:1.0.2-5 libXpm-devel.i386 0:3.5.5-3 libXpm-devel.x86_64 0:3.5.5-3 libXrender-devel.i386 0:0.9.1-3.1 libXrender-devel.x86_64 0:0.9.1-3.1 libXt-devel.i386 0:1.0.2-3.2.el5 libXt-devel.x86_64 0:1.0.2-3.2.el5 libjpeg-devel.i386 0:6b-37 libjpeg-devel.x86_64 0:6b-37 ncurses-devel.i386 0:5.5-24.20060715 ncurses-devel.x86_64 0:5.5-24.20060715 openssl-devel.i386 0:0.9.8e-12.el5_5.7 openssl-devel.x86_64 0:0.9.8e-12.el5_5.7 readline-devel.i386 0:5.1-3.el5 readline-devel.x86_64 0:5.1-3.el5 unixODBC-devel.i386 0:2.2.11-7.1 unixODBC-devel.x86_64 0:2.2.11-7.1 zlib-devel.i386 0:1.2.3-3 zlib-devel.x86_64 0:1.2.3-3

Dependency Installed: e2fsprogs-devel.x86_64 0:1.39-23.el5_5.1 fontconfig-devel.x86_64 0:2.4.1-7.el5 gmp.i386 0:4.1.4-10.el5 java-1.6.0-openjdk.x86_64 1:1.6.0.0-1.20.b17.el5 keyutils-libs-devel.x86_64 0:1.2-1.el5 krb5-devel.x86_64 0:1.6.1-55.el5_6.1 libXau-devel.x86_64 0:1.0.1-3.1 libXaw.i386 0:1.0.2-8.1 libXdmcp-devel.x86_64 0:1.0.1-2.1 libXmu.i386 0:1.0.2-5 libXpm.i386 0:3.5.5-3 libselinux-devel.x86_64 0:1.33.4-5.7.el5 libsepol-devel.x86_64 0:1.15.2-3.el5 libtermcap-devel.x86_64 0:2.0.8-46.1 mesa-libGL-devel.x86_64 0:6.5.1-7.8.el5 tzdata-java.x86_64 0:2011d-3.el5 unixODBC.i386 0:2.2.11-7.1 unixODBC.x86_64 0:2.2.11-7.1 xorg-x11-proto-devel.x86_64 0:7.1-13.el5 xorg-x11-util-macros.x86_64 0:1.0.2-4.fc6 [/shell] …へぇ(゜ω゜;)

RPMをつくるよ。

RPM作る環境準備。 [shell] % sudo yum groupinstall "Development Tools" % sudo yum install rpmdevtools % rpmdev-setuptree % rpm -ihv --nomd5 http://download.fedora.redhat.com/pub/fedora/linux/development/15/source/SRPMS/pl-5.10.2-3.fc15.src.rpm [/shell]

書かれている通りにタイプ。 [shell] % cd ~/rpmbuild % su % sudo yum install java-1.6.0-openjdk-devel % sudo yum install grep ^BuildRequires SPECS/pl.spec | awk 'NF==2 {print $2}' [/shell] ↑特に何も入らず。

んで、rpm作るべくビルド! [shell] % rpmbuild -ba SPECS/pl.spec [/shell]

でも、エラーが発生するのでした。おおよそこんな感じ。 [shell] relocation R_X86_64_PC32 against `unallocStream' can not be used when making a shared object; recompile with -fPIC [/shell]

んで、見つけたサイトがこちら。同じエラーで躓いている人がいた。 Discussion of issues specific to the SWI-Prolog implementation of Prolog.

My assumption is that you also have the old version installed and somehow settings of the PATH/LD_LIBRARY_PATH/SWI_HOME_DIR causes it to pick the old version's library.

のあたりから、gccのバージョンが古いかな?と推測。

CentOSのバージョンをgccのバージョンを確認。 [shell] $ cat /etc/redhat-release CentOS release 5.6 (Final) $ gcc --version gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50) [/shell] どうやら、gccの最新は4.6とかそこいららしい。 CentOS 5.6はyumで4.4を入れられるらしい。

じゃあ、gcc4.4を試してみよーってことで、gcc4.4入れる。 入れてみても、gccが普通に使われるので、@meke_mekeさんの助言に従い、specファイルを修正してみる。 export CC=gcc44を追加してみる。

pl.spec [shell]

Build interpreter needed for SWI packages compilation

export CC=gcc44 %configure --enable-shared LDFLAGS="-Wl,--enable-new-dtags" make COFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"

Build SWI packages

pushd packages %configure LDFLAGS="-Wl,--enable-new-dtags" make COFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" JAVALIBS="-L$JAVA_LIB/server -L$JAVA_LIB -ljava -lverify -ljvm" popd [/shell]

それでまたrpm作るべくビルド! [shell] % rpmbuild -ba SPECS/pl.spec [/shell] 今までよりも長めにガリガリしていて、無事に完成!≧∇≦

これでできたrpmをHOMEにコピーしてrpmでインストールしてやったらおk [shell] rpmbuild/RPMS/x86_64/pl-5.10.2-3.x86_64.rpm rpmbuild/RPMS/x86_64/pl-debuginfo-5.10.2-3.x86_64.rpm rpmbuild/RPMS/x86_64/pl-devel-5.10.2-3.x86_64.rpm rpmbuild/RPMS/x86_64/pl-jpl-5.10.2-3.x86_64.rpm rpmbuild/RPMS/x86_64/pl-static-5.10.2-3.x86_64.rpm [/shell]

無事に起動しました(`・ω・´) [shell] $ swipl Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 5.10.2) Copyright (c) 1990-2010 University of Amsterdam, VU Amsterdam SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- [/shell]

次は、jplというインタフェース使ってJavaのサーバプログラムからSWI-Prologを呼び出してみたいにょろ。 ゆくゆくは、フロントエンドをAndroidにしていい感じに知識と規則をゲットしてマスコットアプリを作るにょろ。言うなれば、どこいつモドキ。 それがVPSを借りた最大の理由だったのでした。まる。