目次
Windows アプリケーションとして動作するように改造された Linux カーネル。 以下のような特徴がある。
coLinux のサイトには代表的な Linux ディストリビューション用の ファイルシステムイメージが用意してあるが、 おそらくそのバージョンのカーネルで動かせるディストリビューションなら 何でも使えるのではないかと思われる。
筆者の PC に入っているのは Windows XP の英語版である。 英語版ではメニューや設定ボックス内での記述が全て英語表記になっているため、 この文書でもそのまま書いている。 例えば、"コントロールパネル" は "Control Panel"、 "ネットワーク接続" は "Network Connections" となっている。
coLinux のインストーラをダウンロード
インストーラ coLinux-0.7.7.exe を実行しインストール
インストーラが終了すると指定した場所(自分は C:\coLinux)以下に 関連するファイルが置かれているはず。
coLinux はカーネルの機能しか提供しないので、 実際に動かすためにはディストリビューションが必要である。
coLinux のサイトにはいくつかのディストリビューションについて 最小構成のルートファイルシステムのイメージが置いてあるので、 まずはそれらをダウンロードして立ち上げても良い。
一方、coLinux は実パーティションをファイルシステムとして使うことが できるため、既にHDDに何らかのディストリビューションがインストール されていて、それが coLinux カーネルのバージョンで動くものであれば そのまま使うことができると期待できるが、試したことはない。
いくつかのディストリビューションを試してみたが、 最終的には Debian を使うことに決めた。理由は、
以上で起動するはずである。 なお、root のパスワードは colinux 。
Debian 以外のディストリビューションでも概ね同じである。
coLinux だけではなくネイティブ環境で起動して使用することも考えて ファイルシステムを実パーティション上に作成することにする。
筆者のPCにおけるパーティション構成を以下に示す。 プライマリの1〜3は既に存在している。 残りの未使用領域 49GB 全体を拡張パーティションとし、 その中に Linux 用に論理パーティションを切ることにする。
目指す構成:
パーティションを編集するツールは色々あるとは思うが、 今回は Windows XP に付属の diskpart コマンドを使用した。
C:\> diskpart DISKPART> select disk 0 DISKPART> list partition Partition ### Type Size Offset ------------- -------------- ------- ------- Partition 1 OEM 4997 MB 32 KB Partition 2 Parimary 45 GB 4997 MB Partition 3 Unknown 50 GB 50 GB DISKPART> create partition extended DISKPART> create partition logical size=1000 DISKPART> create partition logical size=28000 DISKPART> create partition logical size=5000 DISKPART> list partition Partition ### Type Size Offset ------------- -------------- ------- ------- Partition 1 OEM 4997 MB 32 KB Partition 2 Parimary 45 GB 4997 MB Partition 3 Unknown 50 GB 50 GB Partition 4 Extended 49 GB 100 GB Partition 5 Logical 1024 MB 100 GB Partition 6 Logical 28 GB 101 GB Partition 7 Logical 5005 GB 129 GB DISKPART> exit
coLinux のコンフィグファイルを作成
ここではファイル名を tata.conf とし、 coLinux と同じディレクトリに置く:
kernel=vmlinux cobd0="Debian-5.0r2-lenny.ext3.2gb" cobd1="\Device\Harddisk0\Partition4" # Linux swap cobd4="\Device\Harddisk0\Partition5" # Linux ext3 /home cobd5="\Device\Harddisk0\Partition6" # Debian root=/dev/cobd0 initrd=initrd.gz cocon=80x50 eth0=slirp
備考:
起動用のバッチファイルを作成:
ここではファイル名を tata.bat とし、 coLinux と同じディクトリに置く:
set COLINUX_CONSOLE_FONT=Lucida Console:12 set COLINUX_CONSOLE_EXIT_ON_DETACH=1 colinux-daemon.exe -v 3 -t nt @tata.conf
バッチファイル(tata.bat)を実行し coLinux を起動
root でログイン (初期パスワードは colinux)
ファイルシステムを初期化:
# mkswap /dev/cobd1 # mkfs.ext3 /dev/cobd3 # mkfs.ext3 /dev/cobd4
ルートファイルシステムのデータを実パーティションにコピー:
# mount /dev/cobd3 /mnt # cp -ax / /mnt # cp -ax /dev/* /mnt/dev/ # udevを使っているため必要
ついでに /mnt/etc/fstab に以下の行を追加:
/dev/cobd1 swap swap defaults 0 0 /dev/cobd3 /home ext3 defaults 0 1
コンフィグファイル(tata.conf)を修正:
cobd0="..." の行を削除し、代わりに cobd4 を cobd0 に変更
coLinux を再起動 (shutdown してから tata.bat を再実行 (?)):
df -h してみて期待通りパーティションがマウントされていればOK
あとは、好きなように設定すれば良い。 初期状態で外部のネットワークへ出て行けるようになっているはず (仕組みはドキュメント等で slirp の説明を参照)。
ホスト名は初期状態で colinux となっている。 変更するには /etc/hostname を書き換える。 /etc/hosts も変更した方が良い。 再起動するか /etc/init.d/hostname.sh start を実行すると反映される。
ユーザ fujiyosi の登録:
# useradd -m -s /bin/bash fujiyosi # passwd fujiyosi
ついでに root のパスワードも変更:
# passwd root
coLinux のコンフィグファイルで eth0=slirp の指定により、 仮想的な NAT ルータ(DHCP/DNSサーバ付き)が内部に構築されている。 Debian では DHCP クライアントが初期状態で動いているので、 何も設定しなくても外部ネットワークにアクセスできるはず。
筆者の環境では以下のようになっていた。たぶん固定と思われる。
コンソールウィンドウははっきり言って使いにくいので、 PuTTY などの端末ソフトから SSH でアクセスできると嬉しい。
リダイレクトの設定
コンフィグファイル tata.conf の eth0 の行を以下のように修正し、 coLinux を再起動する。:
eth0=slirp,,tcp:55522:22
これにより、Windows の TCP ポート 55522 が代理ポートとなり、 ここへの接続は coLinux の TCP ポート 22 へリダイレクトされる。
Debian/coLinux で sshd を動かす:
# apt-get install ssh
たぶんインストールすると自動的に sshd が起動されると思う。 もし動いていなければ手動で起動する。:
# /etc/init.d/sshd start
Windows もしくは外部から coLinux へ SSH で接続する際は、 ポート 22 の代わりに代理ポート(上の例では 55522)を使用する ように端末ソフト(SSHクライアントソフト)の設定が必要になることに注意。
ここでは Slirp のリダイレクト機能を利用しているが、 後で説明する TAP を使用すれば直接ポート 22 で接続できる。
coLinux を Windows のサービスとして登録し実行することができる。
サービスの登録:
C:\coLinux> colinux-daemon.exe --install-service coLinux @tata.conf
サービスの削除:
C:\coLinix> colinux-daemon.exe --remove-service coLinux
サービスの開始:
C:\coLinux> sc start coLinux #または net start
サービスの停止:
C:\coLinix> sc stop coLinux #または net stop
サービスの起動オプション:
C:\coLinix> sc config coLinux start= demand #手動起動の場合(デフォ) C:\coLinix> sc config coLinux start= auto #自動起動の場合 注意: start= の後ろに空白が必要
コンソールを開くには、coLinux のフォルダ以下にある colinux-console-nt.exe か colinux-console-fltk.exe を直接実行する。
サービスを停止すると coLinux は自動的にシャットダウンしてくれる。
詳しくは README.txt と colinux-daemon.txt を参照のこと。
TAP は仮想ネットワークアダプタであり、 Windows と coLinux を仮想的なプライベートネットワークで接続できる。 ここでは、coLinux から外部ネットワークへのアクセスには上で設定した Slirp をそのまま使用し、coLinux と Windows 間の通信にのみ TAP を 使用することにする。
目指す構成はこう:
coLinux をインストールしたとき、 TAP ドライバが1つ自動的にインストールされているはず。
Control Panel -> Network Connections を開くと Device Name に "TAP-Win32 Adapter V8 (coLinux)" などと書かれた ネットワークアダプタが存在するはずである。
以下に必要な設定手順を示す。
インタフェース名を "coLinux TAP" に変更 (初期の名前は分かりにくいので)
やり方は通常のファイルの場合と同じく 右クリック -> Rename とか
プロパティの設定
右クリック -> Properties を開いて以下を行なう。
coLinux のコンフィグファイル tata.conf に以下を追加:
eth1=tuntap,"coLinux TAP"
coLinux を再起動
ifconfig -a で eth1 が存在することを確認。
/etc/network/interfaces に以下を追加:
auto eth1 iface eth1 inet static address 10.0.3.15 netmask 255.255.255.0
インタフェースの有効化:
# ifup eth1
通信できるか確認:
# ping 10.0.3.2 PING 10.0.3.2 (10.0.3.2) 56(84) bytes of data. 64 bytes from 10.0.3.2: icmp_seq=1 ttl=128 time=10.0 ms 64 bytes from 10.0.3.2: icmp_seq=2 ttl=128 time=0.000 ms ...
Windows から coLinux への SSH 接続も TAP 経由で行けるはずなので確認する。
Debian/coLinux 上で X アプリケーションを使用するためには Windows 側で X サーバ (X端末ソフト)を動かす必要がある。 今回は Windows 上で動くフリーの X サーバである Xming を使用した。
ここでは XDMCP を使ってセッションを開始する方法について記載する。 ただし、TAP のネットワーク設定が済んでいることを前提とする。
Xming のダウンロードサイト から Xming と Xming-font のインストーラをダウンロードし実行すると インストールできる。
xdm をインストール:
# apt-get install xdm
/etc/X11/xdm 以下のファイルを編集
DisplayManager.requestPort: 0 の行を 0 から 177 に変更 (デフォルトが何で0になってるのか?)
* だけの行を追加 (#* の行の先頭の # を除去)
:0 local /usr/bin/X :0 vt7 -nolisten tcp の行をコメアウト (行頭に # を入れる)。
理由は Debian/coLinux 上で X サーバを起動することがないため。 しかしながら、後々ネイティブ環境で起動できるようにするなら これが必要になるかも知れないのでし、ちょっと悩む。
xdm を起動:
# /etc/init.d/xdm start
Windows で XLaunch を実行しコンフィグファイルを作成する。
Xming を実行すると Debian のログイン画面が表示されるはず。 表示されなければうまく行ってないので、 頑張って調べて対処するか、XDMCP を諦めて SSH 経由でやる。
問題点:
/etc/init.d/xdm start すると /var/run/xdm.pid が作られるが、 一度 Xming から XDMCP 接続したあと Xming を強制終了すると 何故か /var/run/xdm.pid が消えてしまう。 /etc/init.d/xdm のバグなのかその中で使っている start-stop-daemon に 問題があるのか。
まだ TAP の設定をしていない場合は SSH トンネルを使うのが簡単。 SSH の使う場合、plink を使う方法と ssh.exe を使う方法があるが、 plink のことは良く分からんので ssh.exe を使う方法について記載する。
ただし、Xming のパッケージには ssh.exe は含まれていないので、 自分で調達する必要がある。 邪道かも知れないが筆者は Cygwin の ssh.exe を使用した。
Windows から Debian/coLinux に SSH で接続できるようになっていれば良い。 詳しくは前述の説明を参照。
XLaunch を実行しコンフィグファイルを作成する。
Select display setting
Select how to start Xming
Enter or choose one X client to Run Local or Remote
次へ進むと ssh.exe のパスを聞かれるので、 Cygwin の ssh.exe (C:\Cygwin\bin\ssh.exe など) を指定。
Specify parameter settings
Additional parameters for PuTTY or SSH に設定:
Configuration complete
上手く行かなかれば、設定ファイルを右クリックして Edit を選べば 設定を修正できる。
問題点:
Cygwin の ssh.exe が動いている間コマンドウィンドウが表示されるのが邪魔。 Cygwin では run.exe を使って run.exe ssh.exe 引数.... とすることでコマンドウィンドウを隠すことができるのだけど、 Xming のコンフィグ設定でそれを指定する方法がない。
cofs を使えば coLinux 側から Windows 側のファイルシステムへ 直接アクセスできる。詳しい使い方は cofs.txt を参照のこと。
Windows の C:\ を coLinux の /Windows にマウントする方法:
コンフィグファイル tata.conf に以下の行を追加:
cofs0=C:\
coLinux を再起動
マウントする:
# mkdir /Windows # mount -t cofs cofs0 /Windows
この例では、Windows の C:\ が coLinux の /Windows にマウントされる。 cofs0 の代わりに cofs0:/Cygwin/home/fujiyosi を指定すると C:\Cygwin\home\fujiyosi がマウントされる。
共有したいドライブが複数ある場合は cofs1, cofs2, … として複数設定する。
Samba を使うことで Windows 側から coLinux 側のファイルシステムへ 直接アクセスできる。 ただし、TAP のネットワーク設定が済んでいることを前提とする (たぶん Slirp では出来ない)。
Samba をインストール:
# apt-get install samba => Workgroup 聞かれるので Windows 側と同じ名前を入力
Samba 用のユーザのパスワードを設定:
# smbpasswd fujiyosi
パスワード情報はたぶん /var/lib/samba/passwd.tdb に格納される。
/etc/samba/smb.conf を編集:
Samba を再起動:
# /etc/init.d/samba restart
仮想ネットワークインタフェース "coLinux TAP" に Client for Microsoft Network を追加
コンピュータ名とワークグループを設定
すでに好みの名前になっているなら何もしなくて良い。
これを行なうとたぶん再起動を要求されるので再起動する。
エクスプローラで Entire Network -> Microsoft Windows Network -> ワークグループ名 -> ホスト名 -> ユーザ名 と辿ると そのユーザのホームディレクトリを開くことができる。 あるいは \\ホスト名\ユーザ名 (例えば \\tata\fujiyosi) のように直接パスを指定してアクセスすることも可能。
その際、ユーザ名とパスワードの入力を要求される。 ユーザ名とパスワードが Windows のものと同じならば自動で認証してくれるみたい。