2009/04/04

ThinkPad x22にUbuntu 8.10、そしてxstowの使い方

ちょっと思うところがあって、ThinkPad x22にUbuntu 8.10を入れ直しました。
ファイルシステムの切り方を少し変えて、/bootをext3に、/をxfsにしています。

だいたいgtkmmとKDEの開発環境を全部入れて6GBくらいを使用していて、空きが110GBほど。 使い切る事はたぶんないでしょう。

最新版のruby-1.8系とrubygemsをコンパイルして使うために、xstow-0.5.1を入れようとして、g++-4.3ではコンパイルが通らない事に気がつきました。
いままでは8.04のg++-4.2でコンパイルしてから8.10にしていたから気がつかなかったなぁ

まぁエラーは単純にmallocやらCのライブラリを呼び出そうとして失敗しただけなので、 extern "C" の中に#include文を追加しました。
念のため変更箇所は次の通り。

$ cd xstow-0.5.1/src/
$ for file in *20090404 ; do diff -u $file "$(basename $file .20090404)" ; done
--- cppdir.cpp.20090404 2009-04-04 16:17:07.089728834 +0900
+++ cppdir.cpp 2009-04-04 16:18:27.645731498 +0900
@@ -8,6 +8,7 @@
 #include <sys/stat.h>
 #include <unistd.h>
 #include <errno.h>
+#include <malloc.h>
 
 }
 
--- main.cpp.20090404 2009-04-04 16:18:59.445727531 +0900
+++ main.cpp 2009-04-04 16:19:31.545733566 +0900
@@ -1,5 +1,9 @@
 #include <iostream>
 
+extern "C" {
+#include <stdlib.h>
+}
+
 #include "local_config.h"
 
 #include "arg.h"
--- setup.cpp.20090404 2009-04-04 16:20:35.649728935 +0900
+++ setup.cpp 2009-04-04 16:20:51.037731429 +0900
@@ -1,3 +1,7 @@
+extern "C" {
+#include <stdlib.h>
+}
+
 #include "setup.h"
 #include "string_utils.h"
 #include "leoini.h"
--- tree.cpp.20090404 2009-04-04 16:21:32.925727777 +0900
+++ tree.cpp 2009-04-04 16:21:47.905731096 +0900
@@ -9,6 +9,7 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <errno.h>
+#include <string.h>
 }
 
 #ifdef HAVE_FNMATCH_H
せっかくだから基本的な使い方のメモ。

デフォルトではxstowは/usr/local/bin/にインストールされます。
例えばruby-1.8.7などを/usr/local以下に導入したい場合に、xstowを使って管理すると次のようになります。

$ sudo mkdir /usr/local/stow
$ cd ruby-1.8.7
$ ./configure --prefix=/usr/local/stow/ruby-1.8.7
$ make
$ sudo make install
$ cd /usr/local/stow
$ sudo xstow ruby-1.8.7
こんな感じで"sudo make install"で/usr/local/stow/ruby-1.8.7/以下のbin,libなどにrubyを導入します。
後はxstowが/usr/local/bin下にシンボリックリンクを作成し、/usr/local/bin/ruby のパスで実行できるようになります。

ポイントは/usr/local/stow以下にバージョン別にディレクトリを作成する事です。

もし/usr/local/stow/ruby-1.9.1に新しいrubyを導入した場合は次のように一旦/usr/local/bin/rubyなどのシンボリックリンクを削除してから新しくリンクを張り直します。

$ cd /usr/local/stow
$ sudo xstow -D ruby-1.8.7
$ sudo xstow ruby-1.9.1
オプションの"-D"で/usr/local/bin/rubyなどの関連するリンクを全て削除します。

ただrubyのように後からrubygemsを導入するとします。 GEM環境は/usr/local/bin/rubyを使って構築しても、コマンド類は/usr/local/stow/ruby-1.8.7/bin/gemといった風なります。
このとき/usr/local/bin/gemは存在していません。

こういう場合には再導入を試みます。

$ cd /usr/local/stow
$ sudo xstow -R ruby-1.8.7
こうすると/usr/local/stow/ruby-1.8.7の中を再度チェックし、配置されていないコマンドやらライブラリやらを起き直してくれます。

独自のdebやrpmでシステムを管理しようとするとドキュメントが配置されていなかったり、漏れがでる事があります。
これを防ぐために細工したinstallコマンドを配置する方法もありますが、たぶん安定している方法はxstowなどを使う事だと思います。

xstowはperlで作成されたstowに対する不満から作成されたようですが、個人的にはstowでの不具合を把握していません。ただxstow-0.5.1の動きにはいまのところ満足しています。

0 件のコメント: