実パーティションを用いたcoLinuxの運用

はじめに

2008年初頭まで筆者はCeleron 400MHzという年代物のノートパソコンを使っておりました. このパソコンでは電源とFn+ファンクションキーの制御をOSに依存しないAPMで行っていたため,これらがLinuxからフルに使えたのですが,さすがに処理速度の面で使うのはつらくなってきました. そこで,新しいノートパソコン(頑丈さを売り物にしている某ノートです)を入手してみたら,電源とFn+ファンクションキーの制御がACPIに変わっており,ドライバのないLinuxでは液晶の明るさ調節以外のFn+ファンクションキーがほとんど使えず,プロジェクタへの出力ができないなどと研究者としての常用に耐えない状況でした.

そこで,coLinuxを検討してみたのですが,配布元でディスクイメージが配布されているディストリビュージョンは限られており,新しいディスクイメージを作るのは結構手間がかかるようです. そのため,実マシンの実パーティションにインストールしたネイティブLinuxを,デュアルブートできる設定としたままでcoLinuxからも使う方法について,最近の状況をまとめてみました. このページの情報が非常に参考になったので,最近のcoLinuxとディストリビュージョンに対する情報をまとめてみたというところです.

なお,しばらく使ってみた感想としては,ネイティブのLinuxに比べるとcoLinuxはマルチタスクの処理があまり上手くないようです. ネイティブのLinuxならば,シングルコアのCPUで動いていて裏で重たいプロセスが走っていてもメモリがスワップしない限りシェルのレスポンスはほとんど変化しないのですが,coLinuxではメモリ使用量によらず負荷がかかると途端にシェルのレスポンスが悪くなります.


想定する環境

また,インストールしたハードディスクは以下のパーティションに分割されているとします.

パーティション種類使用状況
sda1基本WindowsでNTFSとして使用
sda2基本Linuxで / にマウント
sda3基本Linuxでswapに使用
sda4拡張使用不可
sda5論理Linuxで/optにマウント
sda6論理Linuxで/homeにマウント

Administratorで行う作業

ネイティブLinuxをインストールしたら,Windowsを立ち上げてAdministratorでログオンします.

coLinuxとXmingのインストール

このインストールの内容は色々なところから情報が得られるので,簡単に書きます.

  1. まず,coLinux本体をWindowsにインストールします. TAP-Win32も忘れずにインストールします. また,トラブルシューティング用にcoLinux配布元で配布しているイメージファイルもダウンロードしておいた方が良いでしょう.
  2. 次に,Windows用のXサーバとして,XmingとXming-fontsをWindowsにインストールします. ただし,XmingはWindows XP以降でないと動作しないので注意してください.

coLinuxの起動に必要なデバイスファイルの作成

2008年2月にカーネル2.6.22を使うcoLinux-0.7.2がリリースされ,最近のディストリビュージョンのカーネルからの遅れが小さくなり,必要なデバイスファイルを自動的に作成するudevが普通に動くようになりました. しかし,/dev/nullはudevが起動する前に必要となるので,以下の手順でsda2の/devにこのデバイスファイルを作成しておかなければなりません.

mountコマンドでは表示されませんが,/devはdevfsをマウントしている状態なので,udevが起動したらルートファイルシステムの/devディレクトリにはアクセスできなくなります. この理由のため,以下の作業は/dev/sda2を/としてマウントしたネイティブLinuxからでは行うことができません.

以下に示す手順はcoLinuxのイメージファイルを全く使わない方法です. この環境ではbusyboxが提供する最低限のコマンドしかありません. また,loadkeysもないので英語キーボードを日本語キーボードに変える方法もありません. これらの手順に不安を覚える場合は,普通のイメージファイルを使ってcoLinuxを起動しデバイスファイルを作成することをお勧めします.

まず,C:\coLinuxに以下の設定ファイルを作成します(ここでは,ram0.confという名前で保存したとします).

      kernel=vmlinux
      initrd=initrd.gz
      root=/dev/ram0
      cobd0="\Device\Harddisk0\Partition2"
    

上記の指定で"Harddisk0"は1番目のハードディスク(0から数える)であり,"Partition2"は2番目のパーティション(1から数える)です.

上記のように作成した設定ファイルでコマンドプロンプト内で以下のようにcoLinuxをブートします.

      cd \coLinux
      colinux-daemon @ram0.conf
    

すると,coLinuxをブートしたら開くコンソールでは,以下のメッセージが出て入力待ちとなります.

Enterキーの入力待ち

そうしたらEnterキーを押して,以下のコマンドを順に入力します.

      mount -t ext3 /dev/cobd0 /mnt
      mknod /mnt/dev/null c 1 3 -m 666
    

デバイスファイルが問題なく作成できたら,/mntをアンマウントして,haltコマンドでcoLinuxをシャットダウンします. (なお,cdコマンドはないので代わりにchdirコマンドを使わなければなりません)

実パーティション用のcolinuxの設定ファイルの作成

coLinuxの設定ファイルの説明では,xmlファイルの書き方を説明していることが多いですが,今は単なるテキストファイルで設定を行っています. 本ページの例で用いているパーティション分割では,coLinuxの設定ファイルは以下のようになります. (最初の青い字は単なる行番号であり,実際には入力しません.)

       1: kernel=vmlinux
       2: initrd=initrd.gz
       3: cobd0="\Device\Harddisk0\Partition2"
       4: cobd1="\Device\Harddisk0\Partition3"
       5: cobd2="\Device\Harddisk0\Partition4"
       6: cobd3="\Device\Harddisk0\Partition5"
       7: sda2=:cobd0
       8: sda3=:cobd1
       9: sda5=:cobd2
      10: sda6=:cobd3
      11: root=/dev/sda2
      12: ro
      13: 3
      14: mem=256
      15: eth0=tuntap
      16: selinux=1
    

上記設定ファイルの2行目は/lib/modules以下にcoLinuxのカーネルモジュールを展開するために必要な設定であり,一度展開してしまえば削除してもOKですが,coLinuxやネイティブLinuxディストリビュージョンをバージョンアップする時に再度必要となりますので残しておいた方が無難です.

3行目から6行目は実際のパーティションとcoLinuxが用いるデバイスファイルの対応です. 先ほど述べたとおり,1番目のハードディスクがHarddisk0となり,1番目のパーティションがPartition1となります. 特にパーティションの方はマウントできるパーティションの順番を示す番号であり,ネイティブLinuxにおける/dev/sda?で存在しない番号やパーティションとして使用できない拡張パーティションの番号は詰めて扱うため,これらがあると/dev/sda?の番号と一致しなくなるので注意が必要です.

7行目から10行目では,coLinuxが使うデバイス名の別名として,ネイティブLinuxから見えるデバイス名に設定しています. /etc/fstabが/dev/sda?のようにデバイス名で指定してあったら必要となるのは当然のことですが,ラベルで指定してあってもLinuxの起動スクリプトは/dev/cobd?をディスクとみなさないためか,起動時に/以外のファイルシステムをマウントできずにエラーが発生するので別名を指定する必要があります. なお,UUIDについては長い名前を打ち込むのが面倒なので筆者は試していません.

11行目は/としてマウントするファイルシステムの指定です. カーネルの起動時にはカーネルパラメータで指定した/だけをマウントし,その後起動スクリプトが/etc/fstabに指定してある/を再マウントして,他のパーティションをマウントします. そのため,これが/etc/fstabの指定と異なっていると,起動スクリプトが/を再マウントする時にパーティションが異なるというエラーが発生するので,/etc/fstabの記述と整合させておく必要があります. /etc/fstabがラベルで指定してある場合にも,coLinuxではラベルを認識せず,また上述のようにLinuxの起動スクリプトは/dev/sda?をマウントするので,ここでは必ず/dev/sda2と指定しなければなりません.

12行目はカーネルが最初に/をマウントするとき,read onlyでマウントするという指定です. これは,coLinuxに限らずLinuxカーネルを起動させる時には必ず指定しますので,忘れずに書いておいてください.

13行目ではデフォルトのランレベルを3,つまりテキストログインに指定しています. Windows自体がX Window Manager相当の機能を持っているため,coLinuxでWindow Managerを使わない設定です.

14行目はcoLinuxに割り当てるメモリ容量の指定です(単位はMB). カーネルパラメータにも単位付きでmem=256Mのような書式がありますが,これはカーネルパラメータではなくcoLinuxによって処理されるので単位は付けません. なお,colinux-daemon.txtによると,メモリ容量を指定しなければ実メモリの1/4が割り当てられるそうです(実メモリが128MB以上あれば).

15行目はTAP-Win32の指定です.

16行目はcoLinuxカーネルのSELINUXを有効にする指定です. 最近のLinuxのディストリビュージョンではSELINUXを有効にしたカーネルを前提としていますので,SELINUXを実際には使っていないとしても,coLinuxカーネルではSELINUXを有効にしておかないと色々なトラブルに見舞われる可能性があります.

以上の設定ファイルをc:\coLinuxに保存して(ここではreal-partitions.confという名前で保存したとします),コマンドプロンプト内で以下のようにcoLinuxを立ち上げます.

      cd \coLinux
      colinux-daemon @real-partitions.conf
    

eth0の設定ファイルの変更

ネイティブLinuxとcoLinuxを同一パーティションで共存させる場合でcoLinuxのネットワークにWindowsのネットワークの共有によるNAT接続を使う場合には,この2つでネットワークアドレスが異なるために固定IPを割り振ることができず,必然的にDHCPでアドレスを割り振ってもらうことになります. また,ネイティブLinuxが用いる実際のNICとcoLinuxが用いる仮想NICでMACアドレスが異なるので,coLinuxのブート時のIP割り振り時はいいのですが,シャットダウンするときにエラーメッセージが出ます.

これらの対策として,まずcoLinuxが起動したらコンソール内でrootでログインします. Fedoraでネットワークアダプタの設定をしているのは,/etc/sysconfig/network-scripts/ifcfg-eth0であり,インストール時にDHCPを使うように設定すると以下のようになっています. (HWADDRは実際のNICのMACアドレスが入ります.)

      DEVICE=eth0
      BOOTPROTO=dhcp
      HWADDR=01:23:45:67:89:AB
      IPADDR=dhcp
      ONBOOT=yes
    

上記のハードウェアアドレスの部分をコメントアウトし,DHCPサーバに伝えるホスト名(ここではco-linuxとします)をDHCP_HOSTNAMEで指定して,次のように書き換えます.

      DEVICE=eth0
      BOOTPROTO=dhcp
      #HWADDR=01:23:45:67:89:AB
      IPADDR=dhcp
      ONBOOT=yes
      DHCP_HOSTNAME=co-linux
    

こうしておくと,割り当てられるIPアドレスが何であってもホストのWindowsからはco-linux.mshome.netでcoLinuxにアクセスすることができます. ただし,Windowsホストの名前がwinxpである場合,TAP-Win32のIPアドレスに対してwinxp.mshome.netが登録されているため,coLinuxのホスト名はWindowsホストとバッティングしないように違う名前にする必要があります.

udevの設定ファイルの修正

上のようにインターフェース"eth0"の設定を行うのですが,このインターフェースの番号はudevによりMACアドレスに対して決定されますので,coLinuxで使うインターフェースがeth1となってしまいます. この対策として,/etc/udev/rules.d/70-persistent-net.rulesを開き,coLinuxのネットワークインターフェースであるconetの設定行の末尾のeth1をeth0になるように修正します. (コメント文を読めば,上記のファイルをどのように修正するか分かると思います.)

このように修正すると,パソコンの実ネットワークインターフェースとcoLinuxの仮想ネットワークインターフェースに共にeth0が割り当てられることになりますが,これらのインターフェースが同時に使える状況は発生しませんので,問題は生じません.

ネットワークの共有設定

coLinuxを起動した後,[スタートメニュー]→ [マイ ネットワーク]→[ネットワーク接続を表示する]とクリックしてゆくと下記のような画面が現れると思います. ここでは,coLinuxが使うTAP-Win32の名前を仮想ネットワーク接続に変更しています.

coLinux起動時のネットワーク接続

スクリーンショットではワイヤレスネットワーク接続に既に共有マークがついていますが,ローカルエリア接続とワイヤレスネットワーク接続のどちらをcoLinuxのルータとするかを決めて,そのプロパティ画面を開いて詳細設定のタブで下のスクリーンショットのように,仮想ネットワーク接続からの接続を許可するように設定します. その下のチェックボックスの共有インターネットの制御や無効化の可否はお好みでいいのですが,おそらくcoLinuxからは操作できないので許可しても意味がないと思います. この状態で仮想ネットワーク接続のIPアドレスが192.168.0.xであるときには,coLinuxからの接続に対してWindowsがNAT+DHCPサーバ+Dynamic DNSとして動作します.

外部へのネットワーク接続のプロパティ

coLinuxからのXの接続の許可

最後に,coLinuxからのXの接続を許可するため,C:\Program Files\Xming\X0.hostsのファイルにWindowsから見たときのホスト名を追加します. DHCPサーバに伝えるホスト名がco-linuxの場合,以下の行となります.

      co-linux.mshome.net
    

Administratorで行う作業は以上で終わりです. なお,ログオフする前にはcoLinuxを忘れずにシャットダウンする必要があります.


一般ユーザで行う作業

次は,普段使っているユーザでログオンします.

Xmingの設定

まず,コマンドプロンプト内でcoLinuxを立ち上げます. coLinuxが無事に起動したら,XmingのXLaunchを立ち上げます. Windowsのホスト名がwinxpで,coLinuxがWindowsのDHCPサーバに伝えるホスト名をco-linuxとした時のXLaunchの設定画面のスクリーンショットを以下に示します.

  1. Windows自身をX Window Managerとして使うため,Multiple windowsを選びます.
    Multiple windowsを選ぶ
  2. Xmingと共に起動するプログラムを設定するため,Start a programを選びます.
    Start a programを選ぶ
  3. Multiple windowsではXIMが起動されないため,rxvtやmltermなどでは漢字変換を行うことができません. そのためXIM経由ではなく自分自身でSCIMやIBusにつなぐことができるgnome-terminalを端末として起動するようにし,接続先をco-linux.mshome.netとします. また,gnome-terminalの引数でXの出力先をwinxp.mshome.net:0に指定します. ユーザ名を入力するかどうかはお好みで.
    gnome-terminalを起動するように設定する
  4. Xmingのデフォルトは昔のXの名残りの75dpiであり,FedoraのXやWindowsの標準の96dpiに比べると文字が小さくなってしまうので,96dpiに指定します. また,X論理フォント名(X Logical Font Description)で指定されるレガシーなフォントを用いているアプリケーションを使う場合には,Xming-fontsに含まれているフォントでは足りなくなる場合があるので,coLinuxでX Font Serverを立ち上げておき,Remote font serverに指定するとよいでしょう.
    96dpiに設定する
  5. [Save configuration]で,設定ファイルをデスクトップに保存しておくと便利です.
    設定ファイルを保存しておくと便利

なお,以前はXの通信をSSHのトンネルで行う方法を説明していましたが,グラフィックがIntel 965GMのノートパソコンにおいてglxgearsでFPS(frames per second)を測ってみたところ以下のように結果に差が結構あるので,直接Xの接続を行う方法に書き直しました.

SSHによるトンネリング:約14FPS
直接接続:約35FPS

参考までに,同じノートパソコンでネイティブのLinuxでは420〜440FPSの結果でした.

漢字変換について

上記の手順により起動されるgnome-terminalは必要な日本語入力メソッドのプログラムを立ち上げていませんので,SCIMやIBusは以下の手順で立ち上げます. 日本語入力メソッドを立ち上げた以降では,firefoxなどgtkをリンクしているアプリケーションでも漢字変換を行うことができます.

なお,自力でanthyなどに接続するemacsならば,日本語入力メソッドが立ち上がっていなくても漢字変換が行えます.

SCIMを用いる場合

gnome-terminalの中でのマウスの右クリックで現れるメニューの入力メソッドで"SCIM Input Method"を選ぶと必要なプログラムが起動して漢字変換を行うことができます.

XIMを使うアプリケーションでは,SCIMを立ち上げた後にgnome-terminal内で以下のコマンドを実行してから立ち上げれば漢字変換を行うことができます.

IBusを用いる場合

IBusで漢字変換を行うためには以下の手順を行います.

  1. gnome-terminal内で以下のコマンドを実行する.
            ibus-daemon -d --xim
          
  2. gnome-terminalの中でのマウスの右クリックで現れるメニューの入力メソッドでIBus(Intelligent Input Bus)"を選ぶ.

XIMを使うアプリケーションでは,IBusを立ち上げた後にgnome-terminal内で以下のコマンドを実行してから立ち上げれば漢字変換を行うことができます.


coLinuxの運用に関する注意点

gnome-terminalを終了したとき

SCIMやIBusのプログラムはgnome-terminalを閉じても終了しません. また,SCIMやIBusを立ち上げなくても,Fedora 10以降ではgnome-terminalがdbus-daemonを起動しており,gnome-terminalを閉じてもdbus-daemonは終了しません.

これのどこが問題かというと,gnome-terminalを閉じてもXサーバに接続しているプログラムが存在するためXmingが終了せず,前述のXLaunchによりgnome-terminalを再び立ち上げることができません. Fedora 8ではSCIMだけだったため,Xmingを終了しなくても回避する方法がありましたが,Fedora 10以降では回避する方法がないようです. (コンソールでログインしてプロセスを停止する方法は除く.) そのため,gnome-terminalを全て終了した後,もう一度gnome-terminalを用いてcoLinuxにアクセスしたい場合は,確認/警告のウィンドウが出ますがXmingを終了させなければなりません.

Windowsを再起動せずにcoLinuxを再度立ち上げる場合

このページで紹介しているWindowsをNAT+DHCPサーバ+Dynamic DNSとして利用する方法では,Windowsを再起動せずにcoLinuxを再度立ち上げようとすると,WindowsがDNSサーバとしてうまく働かない場合があります.

TeraTermやPuttyなどのWindowsのSSHクライアントでcoLinuxに接続して/etc/resolv.confを書き換えDISPLAY環境変数を指定し,Xmingだけを立ち上げれば使えないことはないですが,上記に比べると色々と不便だと思います. そのため,coLinuxを停止した後に再度起動する必要が生じた場合には,なるべくWindowsを再起動した方が良いでしょう.


coLinuxのconsoleについてのTips

coLinuxで提供されるconsoleのうちcolinux-console-fltkでは,下のスクリーンショットのようにメニューのMonitorからリブートとシャットダウンを行うことができます. (Power offはいきなり電源を切るのと同じなので,使わない方がよい)

colinux-console-fltkのメニューの使い方

また,Windowsの環境変数でCOLINUX_CONSOLE_EXIT_ON_DETACHに値1を与えておくと,coLinuxがシャットダウンすると自動的にconsoleが閉じます.


Windowsサービスとしての登録について

コマンドプロンプト内で以下のように行うと,coLinuxをWindowsのサービスとして登録することができます.

      colinux-daemon @real-partitions.conf --install-service "Cooperative Linux"
    

こうしておくと"Cooperative Linux"という名前で登録され,Administrator権限では,コマンドプロンプト内で

      net start "Cooperative Linux"
    

とするか,あるいは[コントロールパネル]→[管理ツール]→[サービス]からcoLinuxを起動することができます. なお,coLinux-0.7.8以降ではサービス名に"@"が使えなくなっているようです.

また,[コントロールパネル]→[管理ツール]→[サービス]からは,coLinuxを自動起動するように設定することも可能です. 自動起動とした場合にはcoLinuxをシャットダウンするのを忘れがちになりますので,WindowsをシャットダウンするときにcoLinuxがどのように停止するかが心配になりますが,ログファイルを見た限りでは正常にcoLinuxに対してシャットダウンコマンドを発行して停止しているようです.

とはいえ,coLinuxの自動起動の設定は自己責任でお願いします. coLinuxを自動起動としてLinuxのファイルシステムに損傷が発生しても筆者は一切関知しません.


PulseAudioを用いたサウンド出力

coLinuxは基本的にコンソールとハードディスクおよびネットワークアダプタ以外のデバイスを持たないので,設定ファイル内においてcobd?やcofs?で指定したディスクデバイス以外へのアクセスについては全てネットワークを介して行う必要があります. 代表的なデバイスについては以下の方法で対応することができます.

とここまではいいのですが,サウンド機能についてはほとんど全てのパソコンに標準で搭載されているにも関わらず,UNIXでは現在サウンドの通信方法の標準化が行われているところなので,coLinuxの個々のアプリケーションがどの通信プロトコルを使っているかで大きく異なり,標準的な方法はありません. サウンドサーバによって異なる転送方法については,http://wiki.colinux.org/Sound_support_in_Colinuxにまとめられています.

本ページで対象としているFedoraでは,標準的なアプリケーションはPulseAudioを用いるように設定されているので,以下の手順でcoLinuxが出力するサウンドをWindowsのドライバで鳴らすことができます. なお,以下の情報は上記のhttp://wiki.colinux.org/Sound_support_in_Colinuxに書いてある内容をまとめただけのものです.

  1. Windows用のPulseAudioサーバをhttp://www.cendio.com/pulseaudioからダウンロードして,適当なところにインストールする.
  2. PulseAudioサーバをインストールしたフォルダ内に以下の内容でdefault.paというファイルを作る.
              load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
              load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
              add-autoload-sink output module-waveout sink_name=output
              set-default-sink output
            
  3. coLinuxの設定ファイルの末尾に,以下のようにexec0の値としてpulseaudio.exeの絶対パスを設定する. (Program Filesのように空白が入っていてもOKです.)
              exec0="C:\Path\To\PulseAudio\pulseaudio.exe"
            

設定作業は上記で終わりです. 20秒間サウンド出力がなければPulseAudioの出力モジュールがアンロードされるので,ホットプラグしたUSBのサウンドデバイスはモジュールがアンロードして再ロードしたタイミングで使用可能になります.

あとは,coLinuxの端末において環境変数PULSE_SERVERの値にWindowsホストの名前あるいはIPアドレスを設定すれば,coLinuxでPulseAudioに出力したサウンドがWindowsのドライバにより再生されます. Fedoraでalsa-plugins-pulseaudioがインストールされていれば,ALSAは直接ハードウェアを叩くのではなくPulseAudioを呼び出すので,ALSAのサウンド出力もOKです. また,上記のdefault.paから分かるようにEsounDの出力にも対応しているので,環境変数ESPEAKERに同様にWindowsホストの名前あるいはIPアドレスを設定すれば,EsounDに出力したサウンドもWindowsのドライバにより再生されます.

上記の設定をxmmsでのoggファイルの再生で試してみたところ,負荷がかかったときに通信エラーが発生することがあり,音楽再生などでサウンドサーバと通信し続ける用途には向いていないようです. そのため,このような目的ならばsambaによりファイルを共有して,Windows上のWinampを使う方が良いのではないかと思います.


外部のサーバのディスクのマウント

NFSv4のマウント

前述のようにRPCポートマッパを使わないNFSv4ならば,以下の手順でcoLinuxから外部のNFSサーバのディスクをマウントすることができます.

CIFS/SMBのマウント

CIFS/SMBのマウントは以下のコマンドを実行して,SMBサーバのパスワードを入力することにより行ないます. SMBサーバ側の設定はWindowsホストからアクセス出来るようにしておけばOKです. (usernameとsmbserverは,それぞれユーザ名とサーバ名に書き換えてください. また,カンマの前後にスペースを入れてはいけません.)

      mount -t cifs -o user=username,iocharset=euc-jp //smbserver/username /mnt
    

日本語文字コードがUTF-8の場合はオプションが,iocharset=utf8となります.

Last update: 2010.11.22

[機械力学研究室ホームページに戻る]   [田村のホームページに戻る]