Asial Blog

Recruit! Asialで一緒に働きませんか?

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のソースをダウンロードし展開します。
  1. mkdir colinux
  2. wget http://www.henrynestler.com/colinux/testing/devel-0.8.0/20070412-gcc412/devel-colinux-20070412-gcc412.tar.gz
  3. tar xvfz devel-colinux-20070412-gcc412.tar.gz
次にlinuxのカーネル2.6.17を近くのミラーサーバからダウンロードします。例えば以下のように。
  1. wget http://ring.asahi-net.or.jp/pub/linux/kernel.org/kernel/v2.6/linux-2.6.17.tar.bz2

ダウンロードしたら展開して先ほどダウンロードしたcoLinuxのパッチをカーネルソースに当てます。
  1. tar xvfj linux-2.6.17.tar.bz2
  2. ln -s linux-2.6.17 linux
  3. cd linux
  4. patch -p1 < ../devel-colinux-20070412-gcc412/patch/gdt-noalloc-2.6.17.diff
  5. patch -p1 < ../devel-colinux-20070412-gcc412/patch/base-2.6.17.diff
  6. patch -p1 < ../devel-colinux-20070412-gcc412/patch/timer-2.6.17.diff
  7. patch -p1 < ../devel-colinux-20070412-gcc412/patch/coconsole-2.6.17.diff
  8. patch -p1 < ../devel-colinux-20070412-gcc412/patch/serial-core.diff
  9. patch -p1 < ../devel-colinux-20070412-gcc412/patch/serial-2.6.17.diff
  10. patch -p1 < ../devel-colinux-20070412-gcc412/patch/conet-2.6.17.diff
  11. patch -p1 < ../devel-colinux-20070412-gcc412/patch/cobd-2.6.17.diff
  12. patch -p1 < ../devel-colinux-20070412-gcc412/patch/kbd-2.6.17.diff
  13. patch -p1 < ../devel-colinux-20070412-gcc412/patch/mouse-2.6.17.diff
  14. patch -p1 < ../devel-colinux-20070412-gcc412/patch/cofs-core.diff
  15. patch -p1 < ../devel-colinux-20070412-gcc412/patch/cofs-2.6.17.diff
  16. patch -p1 < ../devel-colinux-20070412-gcc412/patch/cloop-core.diff
  17. patch -p1 < ../devel-colinux-20070412-gcc412/patch/cloop-2.6.17.diff

次にcoLinux用のカーネルの設定をコピーします。
  1. cp ../devel-colinux-20070412-gcc412/conf/linux-2.6.17-config .config
FUSEモジュールを使うようにこの設定ファイル.configを編集します。
  1. # CONFIG_FUSE_FS is not set
上記のように記述されている部分を下記のように変更します。
  1. CONFIG_FUSE_FS=m
または、
  1. make menuconfig

で、「File systems」の項目の「Filesystem in Userspace support」を「m」にします。次にMakefileに記述されているEXTRAVERSIONの部分を下記のように変更します。
  1. EXTRAVERSION = -co-0.8.0
これであとはカーネルをコンパイルしモジュールを作成しモジュールをインストールします。
  1. make vmlinux
  2. make modules
  3. make modules_install
これでFUSEモジュールを使う準備が整いましたので
  1. modprobe fuse
するなり
/etc/modulesにfuseを追加するなり場合によっては再起動するなりしてください。

あとはsshfsをインストールします。
  1. apt-get install sshfs
おめでとうございます!これで完了です。下記のようなコマンドを打つと、
  1. sshfs hoge_user@hoge_server: /mnt
/mntにhoge_serverのhoge_userのホームディレクトリがマウントされます。
ただこのままの状態だとsambaを経由してアクセスできないので、/etc/fuse.confに
  1. user_allow_other
と記述し下記のようなコマンドでマウントすることにより
  1. sshfs -o allow_root hoge_user@hoge_server: /mnt
samba経由でアクセスすることが可能になります。あ、もちろんsambaの設定/etc/smb.confでこのディレクトリを共有するのを忘れずに!