SML#のためにlib32gmp-devを入れる
SML# 2.0.0をLinuxMint17.1に入れようとしたけれど、 SML#はlib32gmp-devというパッケージに依存しており、lib32gmp-devは公式にはUbuntu12.04(Precise)=LinuxMint13までしかない。 そのため、そのままではパッケージが足りずインストール出来ない。
そこでlib32gmp-devを入れる(ついでにgmpは最新の(6.0.0a)で)ためにやったことをメモがてら書いておく。 Ubuntu12.04でやれば簡単なんだけど、どうせなら新しいので動かしたいしね? 当然これで必ずうまく行く保証はないし、やってみてどうなってもいかなる責任も負いません。
やった環境
環境は
LinuxMint17.1 64bit (ベースはUbuntu14.04)
基本的にクリーンインストールの状態
当然Ubuntuでも同じ手順で大丈夫のはず
手順
- Preciseのlib32gmp-devのソースパッケージを入手
- 最新のgmpのソースファイルを入手
- debパッケージ用のファイルをソースパッケージから拝借
- ソースパッケージ内の設定ファイルを修正
- バイナリパッケージをビルド
- インストール
1. ソースパッケージを入手
の右にある
gmp ソースパッケージをダウンロード:
以下の3つのファイル(.dsc、.orig.tar.gz、.diff.gz)を同じフォルダにDL
次に
$ dpkg-source -x gmp_5.0.2+dfsg-2ubuntu1.dsc
してソースパッケージを得る。
2. 最新のgmpのソースファイルを入手
1.のソースパッケージを作ったのとは別の場所に
からソースファイルをDL
次に
$ lzip -d gmp-6.0.0a.tar.lz $ tar xf gmp-6.0.0a.tar
して解凍する。
3. ファイルをソースパッケージから拝借
ソースパッケージ内のdebianフォルダをソースファイルのフォルダ(gmp-6.0.0)内にコピーする。
4. 設定ファイルを修正
debianフォルダ内のいくつかのファイルを修正する。
まずrulesファイル3行目のバージョンを
ORIG_SRC_VERSION = 6.0.0
と修正。
またchangelogファイルの先頭に適当に追加する。下のようにしたけど、適当すぎる(というかなにが必要でなにが不要かよくわからない(まぁ自分でインストールするだけだしいいよね()))
gmp (2:6.0.0-1) unstable;urgency=low * Update -- koropicot <hoge@example.com> Sat, 20 Dec 2014 17:10:29 +0900
あとpatchesフォルダを削除する
5. バイナリパッケージをビルド
ソースファイルのフォルダ(gmp-6.0.0)内で
debuild -uc -us -b
としてパッケージをビルドする。 debuildはdevscriptsパッケージに含まれる。
ビルド中にエラーが出たときはエラーメッセージから足りなそうなパッケージ追加したりする。
gcc-multilib g++-multilib build-essential quilt debhelper
とかが必要だった気がする。
6. インストール
うまくいくとソースファイルのフォルダと同じ階層に.debファイルが幾つかできているので、そこで
$ apt-ftparchive packages . | gzip -c9 > Packages.gz $ apt-ftparchive sources . | gzip -c9 > Sources.gz
する。
次にリポジトリとして
deb file:<Packages.gzとかがあるフォルダ> ./
を追加する。 Synaptic パッケージマネージャの設定→リポジトリ→追加リポジトリ→新しいリポジトリを追加からやった。
リポジトリを変更したので
$ sudo apt-get update
そして…
$ sudo apt-get install lib32gmp-dev
するとlib32gmp-devがインストールできる。
その後
SML#のHPからUbuntu用64bitパッケージをDLしてインストールできた。 そしてREPLも動いたので当初の目的達成。
動作かくにん! よかった。