アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

coLinux 0.8.0でカーネルを再構築してsshfsを使う

こんにちは、スパイシーチキン担当の熊谷です。

先週のことになりますが、いつものようにお昼ご飯でスパイシーチキンを注文したところ売り切れですと言われてしまった日がありました。何十回とスパイシーチキンを注文してきて初めて「売り切れ」に遭遇ですよ!売り切れる事なんてないと思っていただけに、その日はショックを受けてしまいました。スパイシーチキンの人気が上がってきたのでしょうか。

さて、今回も前回に引き続きcoLinuxネタで攻めたいと思います。SSHを通して開発サーバにアクセスしそこでエディタ等を使ってコードを書くというサーバ環境での開発、または、自分用にカスタマイズし何をするにもとても使いやすくなっている自分のマシン上で開発を行うローカル環境での開発の大きく分けて二通りあると思います。

私の場合、前回も述べましたがメイン環境は今のところWindowsで、そのマシン上で開発を行っています。SSHクライアントソフトであるputtyを通してなんだかんだするのはもちろんなんですが、メイン環境がWindowsということもあって、coLinuxや開発サーバにsambaをインストールしWindowsのファイル共有機能を使ってなんだかんだすることもあります。しかしこの場合、ローカルネットワーク内ならこれで不便は感じないのですが、ローカルネットワーク外にあるファイルを操作したい場合問題があります。scp等を使ってファイルをやりとりすればいいだけのことですが、せっかくWindowsを使っているというかGUIの環境なんですから、ローカルネットワーク内と同じようにエクスプローラ等を使ってファイルを操作したいという欲求が出てきます。

そんな問題を解決するのが、sshfsです。これを使うとSSHを通してネットワーク先にあるマシンのファイルシステムをマウントしてくれます。マウントさえしてしまえばあとはsambaを使ってファイル共有の設定をするだけで、Windowsからはローカルネットワーク内での操作と同じ感覚でファイル操作を行うことが出来ます。

このsshfsを使うにはFUSEモジュールが必要になります。Linuxの場合はカーネル2.6.14でカーネルにマージされたので、簡単な方法はカーネルをそれ以上に上げてfuseを使えるようにしてしまえばいいということになります。前回インストールに使ったcoLinuxは0.7.1なんですが、このカーネルは2.6.12ということでFUSEがサポートされていません。パッチ等を当てれば出来るわけですが、開発者たるもの人柱になるべきということで開発版である0.8.0にアップデートしましょう。こちらのカーネルは2.6.17なのでFUSEはもちろんサポートされているので、coLinux用にカーネルコンパイル、再構築します!

では、早速取りかかりましょう。

まずはcoLinux 0.8.0本体とそのソースをダウンロードです。今回は以下のURLからダウンロードしました。
http://www.henrynestler.com/colinux/testing/devel-0.8.0/20070412-gcc412/

ここにあるdevel-coLinux-20070412-gcc412.exeが本体でdevel-colinux-20070412-gcc412.tar.gzがソースになります。前回は0.7.0を使っていたので、それをアンインストールしてから0.8.0をインストールします。

あとはcoLinux上での作業です。

今実行しているcoLinuxのソースをダウンロードし展開します。


mkdir colinux
wget http://www.henrynestler.com/colinux/testing/devel-0.8.0/20070412-gcc412/devel-colinux-20070412-gcc412.tar.gz
tar xvfz devel-colinux-20070412-gcc412.tar.gz


次にlinuxカーネル2.6.17を近くのミラーサーバからダウンロードします。例えば以下のように。


wget http://ring.asahi-net.or.jp/pub/linux/kernel.org/kernel/v2.6/linux-2.6.17.tar.bz2


ダウンロードしたら展開して先ほどダウンロードしたcoLinuxのパッチをカーネルソースに当てます。


tar xvfj linux-2.6.17.tar.bz2
ln -s linux-2.6.17 linux
cd linux
patch -p1 < ../devel-colinux-20070412-gcc412/patch/gdt-noalloc-2.6.17.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/base-2.6.17.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/timer-2.6.17.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/coconsole-2.6.17.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/serial-core.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/serial-2.6.17.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/conet-2.6.17.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/cobd-2.6.17.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/kbd-2.6.17.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/mouse-2.6.17.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/cofs-core.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/cofs-2.6.17.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/cloop-core.diff
patch -p1 < ../devel-colinux-20070412-gcc412/patch/cloop-2.6.17.diff


次にcoLinux用のカーネルの設定をコピーします。


cp ../devel-colinux-20070412-gcc412/conf/linux-2.6.17-config .config

FUSEモジュールを使うようにこの設定ファイル.configを編集します。


# CONFIG_FUSE_FS is not set

上記のように記述されている部分を下記のように変更します。


CONFIG_FUSE_FS=m

または、


make menuconfig


で、「File systems」の項目の「Filesystem in Userspace support」を「m」にします。次にMakefileに記述されているEXTRAVERSIONの部分を下記のように変更します。


EXTRAVERSION = -co-0.8.0

これであとはカーネルコンパイルしモジュールを作成しモジュールをインストールします。


make vmlinux
make modules
make modules_install

これでFUSEモジュールを使う準備が整いましたので


modprobe fuse

するなり
/etc/modulesにfuseを追加するなり場合によっては再起動するなりしてください。

あとはsshfsをインストールします。


apt-get install sshfs

おめでとうございます!これで完了です。下記のようなコマンドを打つと、


sshfs hoge_user@hoge_server: /mnt

/mntにhoge_serverのhoge_userのホームディレクトリがマウントされます。
ただこのままの状態だとsambaを経由してアクセスできないので、/etc/fuse.confに


user_allow_other

と記述し下記のようなコマンドでマウントすることにより


sshfs -o allow_root hoge_user@hoge_server: /mnt

samba経由でアクセスすることが可能になります。あ、もちろんsambaの設定/etc/smb.confでこのディレクトリを共有するのを忘れずに!