最新 追記

堕落と混迷の日々

見てくれた人:人

Sunaの仲間のヒトビト
Sunaの観測地点
Sunaの聞いてる曲

2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|
2009|01|03|08|09|10|11|
2010|01|04|05|06|07|08|10|
2011|03|08|
2013|08|

2008-04-03 [木] ふぅ。

_ [Debian]NTFSボリューム上のcolinux用ルートイメージファイルを直接起動する

今使っているノートのパーティションのファイルシステムは全てNTFSなのだが、このマシンは友人から譲り受けたこともあって、パーティションを塗り換えたりはあまりしたくない。だから、今まではlinuxが使いたくてもcolinuxやKnoppixのCDイメージインストールで我慢していたのだが、どうも不安定だったり面倒だったりするので、やはり素のDebianを起動したいと思うようになった。…Ubuntuでも良ければ、Wubi使うって手もあるけど。

NTFSのパーティションを弄らずにDebianを起動する方法としては、やはりNTFS上に配置したlinuxのルートイメージファイルをループバックマウントして起動するのが手っ取り早いと思われる。そのイメージとしては、既に入れているcolinuxで使っているDebianのイメージが使えるはずだ。そうすれば、1つのイメージをcolinuxと素のlinuxで共有できて一石二鳥になる。ブートローダとしてはNTFSを読めるGrub4Dosを使うと、Windowsのシステムファイルとしてはboot.iniを少々書き換えるだけで良く、パーティションテーブル等はいじらずに済むので、既存のシステムへの影響も少ないはずだ。

この場合、起動順序としては、ブート時にMBRからNTLDRが呼ばれ、(あらかじめGrub4Dosを入れてboot.iniを書き換えておいて)そこからGRLDRを呼んでもらい、Grub(4Dos)にNTFS上に置いておいたvmlinuzと(手を加えた)initrd.imgを読ませて、initrd.img内のスクリプトでNTFSをマウントして更にNTFS上のlinuxルートイメージファイルをループバックマウントしてrun-initしてやれば、目的のイメージファイルの中のlinuxシステムを起動させることができるはずだ。…ああ、長っ。

で、やってみた。起動実験の結果としては、(kernel panicの山の後で)成功しました。NTFSのマウントにはntfs-3gを使わせて貰いました。

ただし、こうして起動したシステムを終了させようとした時に生じた問題があって、ルートイメージの置かれたNTFSボリュームのマウントにntfs-3gを利用しているので、シャットダウンシーケンスでNTFSボリュームがアンマウントされる前にntfsを管理してるプロセスがkillされてしまうので、結果としてNTFSボリュームはもちろん、ルートイメージファイルの正常なアンマウントもできないのです。これはKnoppixでも使い方によっては生じうる問題なんですよね。理想としては、ntfsのプロセスだけは最後まで生かしておくといいのか。WUBIではどうしてるんだろう。

とりあえず、やった手順を書いとく。

まず、colinuxのルートファイルシステムにdebian backportsからlinux-image-2.6.22-4-686のカーネルを持って来て入れる。/sbin/update-grubから/bin/trueにsymlink貼っとくと吉。最初は2.6.18入れてみたんだけど、ntfs-3gが2.6.20以降にしてくれと云って来たのでこちらにした。そういえばKnoppixも2.6.19だったのにNTFS上に普通にswapイメージファイル置いてガシガシ使ってたから不安定だったのかも。そして、ntfs-3gもbackportsから貰って入れる。

後は、コマンドラインでやった事を書き連ねます。/bin/mountも入れてるのは、元々initrdに入ってたmountは-iオプションに対応してなかったからです。

#mkdir /boot/initrd
#cd /boot/initrd
#zcat ../initrd.img-2.6.22-4-686|cpio -i -d -H newc --no-absolute-filenames
#mkdir lib/modules/2.6.22-4-686/kernel/fs/fuse
#cp /lib/modules/2.6.22-4-686/kernel/fs/fuse/fuse.ko lib/modules/2.6.22-4-686/kernel/fs/fuse/
#cp /lib/modules/2.6.22-4-686/kernel/drivers/block/loop.ko lib/modules/2.6.22-4-686/kernel/drivers/block/
#ldd /sbin/mount.ntfs-3g
linux-gate.so.1 => (0xffffe000)
libntfs-3g.so.2 => /usr/lib/libntfs-3g.so.2 (0xb7fbc000)
libfuse.so.2 => /usr/lib/libfuse.so.2 (0xb7fa3000)
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7f9a000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7f88000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e57000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7e52000)
/lib/ld-linux.so.2 (0xb7feb000)
#cp -L (上で出てきたライブラリ群) lib
#cp -L /sbin/mount.ntfs-3g sbin
#ldd /bin/mount
linux-gate.so.1 => (0xffffe000)
libblkid.so.1 => /lib/libblkid.so.1 (0xb7fdd000)
libuuid.so.1 => /lib/libuuid.so.1 (0xb7fda000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7ea9000)
libdevmapper.so.1.02 => /lib/libdevmapper.so.1.02 (0xb7e98000)
libselinux.so.1 => /lib/libselinux.so.1 (0xb7e83000)
libsepol.so.1 => /lib/libsepol.so.1 (0xb7e41000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7e2f000)
/lib/ld-linux.so.2 (0xb7feb000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7e2b000)
#cp -L /lib/libblkid.so.1 /lib/libuuid.so.1 /lib/libdevmapper.so.1.02 lib
#cp -L /bin/mount bin

そして、以下の内容を/boot/initrd/scripts/fileinntfsに書き込む。

# NTFS filesystem mounting -*- shell-script -*-

# FIXME This needs error checking

# NTFS mounting
mountroot()
{
[ "$quiet" != "y" ] && log_begin_msg "Now mounting NTFS volume ${NFSROOT}"
mkdir -p /root/mnt/test
/sbin/mount.ntfs-3g -o force ${NFSROOT} /root/mnt/test
[ "$quiet" != "y" ] && log_end_msg

[ "$quiet" != "y" ] && log_begin_msg "Now mounting root image file ${ROOT}"
mknod /dev/loop0 b 7 0
/bin/mount -o loop /root/mnt/test${ROOT} ${rootmnt}
[ "$quiet" != "y" ] && log_end_msg
}

最後に、/boot/initrdにて以下を実行して、/boot/vmlinuz-2.6.22-4-686と/boot/newinitrd.gzをNTFS上のどっかに置く。僕はhda1の/boot以下に置きました。

#find .|cpio -H newc -o|gzip>../newinitrd.gz

参考までに、Grubのmenu.lstの該当エントリは以下のようにしました。
rootにはNTFS上のルートイメージファイルのパス、nfsrootにはNTFSボリュームのデバイスを指定します。nfsrootを使ったのは、問題なさそうだったからです。w

title Debian GNU/Linux
root (hd0,0)
kernel /boot/vmlinuz-2.6.22-4-686 nfsroot=/dev/hda5 root=/colinux/root_fs boot=fileinntfs 2
initrd /boot/newinit.gz

_ initramfs

ディスクイメージを使うinitrdから、initramfsなるものに変わってたのね。

最初はループバックマウントの方がわかりやすいような気もしてたのだけど、ユーザとしてはマウントの手間がなくイメージの残り容量を気にしなくていい点が良くなったかも。

もちろん、カーネルのコードの美しさって問題もあるんだろうけど。

_ 研究室決定

夜に、研究室が決定したとの連絡がありました。

某理論計算機科学の研究室です。僕が今居る課程とは違うのですが、興味のある分野なので頑張ろうと思います。

本日のツッコミ(全3件) [ツッコミを入れる]

_ こたか [とりあえず一年間関わってみて、違うことがしたかったら院で別のとこに行けばいいよ。 何にせよおめでとう! 院試勉強頑張..]

_ いさやん [仮想PCは? ってスペックがつらいのかもしれませんが。]

_ suna [>こたか 興味があったのは本当で、改めて先日お話を聞きに行ったら、合いそうでした。見学にも行ってたしね。きっとここで..]


2008-04-07 [月] 研究の世界への一歩

_ 初ゼミ

研究室でのゼミ・昼食会に初めて参加した。

自己紹介、研究内容の紹介、研究テーマの決定、机の場所決め、パソコンの割り当てと設定があった。昼から夕方まで掛かった。

かなり身構えていたのだけれど、先生もメンバーも良い人そうだったので少し安心できた。

内容は難しそうだけど面白そうだった。どれにも興味を惹かれたけれど、Nash均衡なるものをすることになりそうです。難しいらしい。がんばろう。

_ [Debian]Debian-Installer Loaderを使ってみた。

Windowsのブラウザから直接、Linuxのインストーラを起動できる素敵ツール、Debian-Installer Loaderを使ってみた。サイトのドメインが過激。w

研究室で割り当てられたデスクトップPCのHDDに、100GBの空き領域があったので、前からやってみたかったこの方法でDebianを入れることにした。この方法だと、CDROMイメージをダウンロードしてCDやDVDに焼いたりする必要はなく、事前にパッケージをダウンロードしておく必要もない。空きパーティションを作って、そこにインストールするよう指示すればいいだけだ。

最初はtestingのlennyを入れようとしたのだけれど、インストール可能なカーネルが見付からないとか途中で言われたので、unstable(開発版)を入れた。

OSのインストールのプロセス見るのって好きなんだよね。複雑なシステムが基礎から順次、手際良く組み上げられていくのを見るとわくわくする。インストーラもグラフィカルになってて、日本語も普通に使えたので感心した。

task:desktopを選択したら案の定、大型のデスクトップ環境のGNOMEがインストールされたけど、他の人達もUbuntuとかVineとか綺麗なデスクトップのLinuxをインストールしているようだったのでまあいいか。w

なかなかすっきりしたデザインで、高機能そうなので気に入った。一応元から入ってたVistaも残してはあるけど、あまり起動することはないだろうな。^^;


2008-04-10 [木] 環境整備

_ [Debian]アップデート・マネージャ

一般ユーザーでログインしたのに、WindowsUpdateみたいなアップデート・マネージャが起動して、更新されたパッケージを自動でダウンロードし始めたからびっくりした。

Debianも便利になってきてるのね。unstableだからかもしれないけど。

_ 研究室のPCを学外からWake on LAN

研究室のPCに、学外からアクセスできると便利なので、ネットワーク経由で電源を入れられるように設定した。

Wake on LANといわれる仕組みを利用する。最近のPCには実装されていることが多い。ネットワークカードには電源を供給しておき、マジックパケットといわれる特殊なパケットを検知したら、マザーボードの電源が入る仕掛けだ。

研究室の内部LANにアクセスできる、グローバルアドレスを持ったゲートウェイサーバにSSHでログインして、下記のページで入手できたPerlスクリプトを実行した。
Wakeonlan
けど、4/22時点では繋がらない…?

初めは起動しなかったのだけど、ネットワークカードの設定とBIOSの設定を確認したら、BIOSでWOLを無効にしてあったので有効にすると無事ネットワーク経由で起動することができた。電源ボタンに触れずにスイッチを入れられるのはおもしろい仕組みだと思う。便利だし。


サイト構築中…完成はいつの日か。
連絡先:sunasaji+web at gmail dot com