カテゴリー別アーカイブ: VMware

Windows 10をFall Creators UpdateにアップデートしたときのVMware PlayerとVirtualBox

Windows 10をFall Creators Updateにアップデートしました。

VMware Workstation Player 12.5.5のネットワークがつながらなくなりました。アプリと機能ー>プログラムと機能 から修復を選んで修復。その後、VMware Workstation Playerの設定画面のネットワークアダプタの設定で、VirtualBoxのアダプタを外すことでネットワークにつながりました。

VirtualBoxは動かなくなったので、古いものはアンインストールしてVirtualBoxをダウンロードしてインストールしました。最初5.2.0をインストールしたのですが、画面の大きさが1024x768の固定になってしまったので5.1.30に変えました。5.2系はまだインストールするには早いようです。

VMware Workstaion Playerでマウスのキャプチャの設定

VMware Workstation Playerで、ゲストOSでマウスやキーボードを使えるようにすることをキャプチャとがグラブ(grub、捕まえる)というようです。

自分はAlt-Tabでウインドウを切り替えることが多いです。VMware Playerの場合、一度ウィンドウをクリックしてグラブされてしまうと、Alt-TabがLinuxのゲスト内でのウィンドウの切り替えになってしまい、マウスで外のウィンドウをクリックして変えていました。

キーボードだとCtrl-Altの同時押しでリリースする設定になっているのですが、どうにも使いずらいです。そこで、C:\Users\(your name)\AppData\Roaming\VMware\preferences.iniに次のように設定してAlt-Shiftで変えられるようにしました。

preferences.ini

pref.hotkey.shift = "TRUE"
pref.hotkey.control = "FALSE"
pref.hotkey.alt = "TRUE"
pref.hotkey.gui = "FALSE"

マウスのリリースは上記で設定できるのですが、今度はAlt-TabでVMware Playerの画面を最前面に持ってきたとき、マウスがその画面内に入ってないとキーボードの入力を受け付けてくれません。

次のように設定すると、マウスカーソルがVMware Playerの画面内になくてもキーボードを打ち始めると入力できるようになります。

preferences.ini

pref.grabOnKeyPress = "TRUE"

以上の設定をすると、Alt-Shiftでマウスのキャプチャを解除できます。また、Alt-TabでVMware Workstation Playerを前面にもってきたときはそのままキーを押すことでマウスをキャプチャできるようになります。ホストOSとゲストOSを行き来するときに、いちいちマウスを操作するのは効率が悪いのでちょっとした設定ですが便利です。

今回はこちらの情報を参考にさせてもらいました。ありがとうございます。

[IT] VMware のホストへ戻るキーの設定
How to set input grab for VMWare Workstation Player 12

仮想マシンからホストOSを攻撃する

CanSecWest security conferenceで毎年行われているPwn2Ownというハッキング大会において、仮想マシンのブラウザからホストOSに抜け出すことができたのだそうです。

「仮想マシンでWebを見ているからホストOSは安全」という常識を覆す

Microsoft EdgeとWindowsカーネル、Vmware Workstationのバグを組み合わせてゲストOSからホストOSにアクセス可能にしたそうです。

なんか、普通の人には絶対わからないと思いますが、こんなことができてしまう人がいるのですね。

VMware Workstation 12.1.1 PlayerでUbuntu 16.04を使う

以前、VMware Workstation 12 PlayerでUbuntu 14.04を使おうとしました。

ホストは、Windows 10 Proです。

VMware Toolsをインストールして、いろいろやってみたのですが、どうもうまくいきませんでした。

今回Ubuntu 16.04を使おうとして調べてみると、こちらの方法でうまくいくことがわかりました。

ubuntu 16.04 インストール(2) vmware tools

自分の場合、クリップボード共有(コピーペースト)と共有フォルダを主に使っています。

VMware Toolsをインストールする方法としては、Ubuntuにもともと入っているOpen VM Toolsを使う方法と、以前からあるように手動でインストールする方法があります。

Ubuntu 16.04のデフォルトでは、Open VM Toolsが入っているのですが、共有フォルダが動かなくて困っていたのでした。じゃあということで、手動でインストールするとクリップボード共有がうまく動きません。

結局、もともと入っているOpen VM Toolsをつかって、/etc/fstabの設定を付け加えることで両方動かすことができました。

繰り返しになりますが、少し説明すると、

$ sudo apt install open-vm-tools-desktop

で、クリップボード共有が有効になります。もともと入っていれば問題ないです。

また、/etc/fstabに

.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,auto_unmount,defaults 0 0

と付け加えることで共有フォルダが有効になりました。

画面のリサイズにも対応していて、ありがたく使わせていただいています。

VMware Workstation PlayerでOpenStack Mitakaのネットワークを設定しインスタンスを起動

はじめに

VMware Workstation PlayerでOpenStack Mitakaのインストールをしています。

前回は、OpenStack MitakaをインストールしてDashboardを見るところまでをやりました。

インストールにはこちらのサイトを参考にさせていただきました。今回は、ネットワークを設定しインスタンスを起動してロードバランサを動かすところまでやります。

VMware Workstation PlayerでOpenstack Kiloを動かす手順

ネットワークの設定では、こちらも参考にさせていただきました。

OpenStack Neutronを使ってWebシステムを構築する実践的な方法 (1/3)

不具合の対処

OpenStackのホストとなるCentOSを再起動してみると、httpdサービスとneutron-serverサービスがfailedになって立ち上がりません。動くときもありますので、いつも動かないわけではないようです。

サービスの起動の状態を知るのは次のコマンドでわかります。

#systemctl list-units --type service

エラーメッセージはこんな感じです。

#systemctl status httpd

ERROR: scss.ast: Function not found: function-exists:1

#systemctl status neutron-server

neutron.service start operation timed out. Terminating.

こちらの情報によると /lib/systemd/system/httpd.service.d/openstack-dashboard.conf を実行するときに時間がかかりすぎるのが原因だとか。パッチも作られたようです。

とりあえず次のコマンドで手動で起動すると動きます。httpdが起動するまで少し待つ必要があります。

# systemctl start httpd
# systemctl start neutron-server

また、VMware Workstation PlayerのCPU2コア、メモリ4GBにすると安定して動くようになりました。CPU1コア、メモリ4GBでは、リソースが足りないようです。

ネットワークを設定

VMware Workstation PlayerでOpenstack Kiloを動かす手順に従ってネットワークを動かそうとしました。しかし、502 Bad Gatewayというエラーが出て動きません。

問題の特定にはログファイルを見るしかないようでしたが、OpenStackを始めたばかりでどのログファイルのどこを見ればいいのかよくわかりません。

そこで、OpenStack Neutronを使ってWebシステムを構築する実践的な方法 (1/3)に従ってネットワークが動作することを確かめました。そのあとに手順書に従ってネットワークを動かしました。

@ITのサイトでは、OpenStackのハンズオンを基にした手順が書かれてありわかりやすかったのですが、公開するネットワークの設定の仕方が書いてないため、手探りで設定しました。下記に書いたようにpublicのネットワークを設定しました。

また、手順書のようにtennant_idを一つ一つ手書きするのはとても大変でした。そこで、@ITの記事を参考に次のようにしてネットワークを設定しました。

ちなみに、VMware Workstation Playerの画面で作業するのはコピーペーストできません。コピーペーストできるsshクライアントを用意してVMware Workstation PlayerのCentOSにアクセスして作業するとはかどります。

まずpublicという名前の公開するネットワークを作ります。作成する時のポイントはnet-createのときに、--router:externalを使うことです。これで外部のネットワークだと指定することができます。

OpenStackのホストとなるCentOSのIPアドレスは、192.168.0.140と指定してインストールを行っています。そのIPアドレスを外して、192.168.0.141から192.168.0.199をFloationg IPという名前で使って良いアドレスと指定します。

# neutron net-create public --route:external
# neutron subnet-create --name public_subnet --disable-dhcp --allocation-pool start=192.168.0.141,end=192.168.0.199 public 192.168.0.0/24

次に非公開のネットワークを作ります。OpenStackのインスタンスはまずこのネットワーク上に接続されて作られます。そのあとに上記の公開するネットワークからFloationg IPからIPアドレスを割り当てることで外部のネットワークと通信できるようになります。

neutron net-createでprivate-net1というネットワークを作ります。プライベートネットワークのIPアドレスは 192.168.10.0/24という範囲でネットワークを設定し、101から199まで指定します。 ゲートウェイは192.168.10.1を使います。

# neutron net-create private-net1
# neutron subnet-create --name private-net_subnet1 --enable-dhcp --allocation-pool start=192.168.10.101,end=192.168.10.199 --gateway 192.168.10.1 --dns-nameserver 8.8.8.8 private-net1 192.168.10.0/24

router-createで、router1という仮想ルーターを作ります。router-gateway-setでpublicネットワークにつなげます。publicネットワークでは、Floating IPから192.168.0.141というアドレスが付与されます。router-interface-addで、プライベートなネットワークにつなげます。private-net_subnet1のIPアドレス192.168.10.0/24で最初のアドレス192.168.10.1が使われます。先にゲートウェイを指定していたのと合っている必要があります。router-port-listとsubnet-showで確認できます。

# neutron router-create router1
# neutron router-gateway-set router1 public
# neutron router-interface-add router1 private-net_subnet1
# neutron router-port-list router1
# neutron subnet-show private-net_subnet1

インスタンスを起動

VMware Workstation PlayerでOpenstack Kiloを動かす手順に従ってインスタンスを起動しようとしました。しかし、--is-public と --location というオプションはないといわれ、イメージの登録ができません。

調べてみると、glanceはOpenStack kiloからOpenStack Libertyに変わったときにバージョンが上がってるようです。--os-image-api-version 1 というオプションをつけることでコマンドを使うことができました。

# glance --os-image-api-version 1 image-create --name cirros --is-public True --container-format bare --disk-format qcow2 --location http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img

バージョン2で使うときは、--is-publicを--visibility publicにすることと、--locationは対応するものがないので、イメージをあらかじめローカルにダウンロードしておいて--fileオプションを使って指定するとよいようです。

あとは手順書に従って、インスタンスを作って起動し、ロードバランサを作って動作確認しました。OpenStack KiloとMitakaでは画面が変わっていますが、対応するところはすぐわかると思います。

OpenStackのホストであるCentOS上で次のようにルーティングを設定すると、CentOSからOpenStackのインスタンスに接続できます。動作の確認ができるのでとても助かりました。

# route add -net 192.168.10.0/24 gw 192.168.0.141 br-ex

実際にロードバランサの動作を確認すると、Curlでアクセスしたときはweb_server01とweb_server02の表示が交互に出て、ちゃんとラウンドロビンで動作していることがわかります。

しかし、ChromeでアクセスしてShift-F5でリロードしてみると時々しか変わりません。ブラウザによって動作が異なるようです。原因はわかりませんでした。

インスタンスをKVMで起動

せっかく、VMware Workstation Playerを使ってOpenStackでもCPUの仮想化機能を使えるようにしています。そこで、OpenStackのインスタンスがKVMを使っているのかどうか確かめました。

デフォルトの状態では、OpenStackはQEMUを使ってインスタンスを動かしています。設定ファイルnova.confでvirt_type=kvmとすることで、KVMを使うように設定します。

/etc/nova/nova.conf

virt_type=kvm

実際にKVMが使われているかどうか、確認します。virsh listで、インスタンスのIdを確認して、virsh qemu-monitor-commandでinfo kvmとすることで確認できます。--hmpというのは、Human Monitor Protocolの略で、通常の人間がわかるコマンドを実行するということのようです。

kvm supportがenabledになっていれば、OpenStackのインスタンスでKVMが使われています。そこそこの速度で実行されているのではないでしょうか。

# virsh list

 Id    Name                           State
----------------------------------------------------
 2     instance-00000008              running
 3     instance-00000009              running
# virsh qemu-monitor-command --hmp 2 info kvm
kvm support:enabled

おわりに

neutronのコマンドにneutron lb-*というものと、neutron lbaas-*というものがあります。調べてみると、前者はLBaaS v1で後者はLBaaS v2というようです。v1とv2ではドライバから変わって、互換性はないそうです。v1は廃止予定になっています。せっかく覚えたのになんかもったいないですね。

VMware Workstation PlayerでOpenStack Mitakaを動かしてみた

はじめに

VMware Workstation Player上にOpenStack Mitakaをインストールしました。

OpenStackを気軽に試してみるには、Ubuntuを使うものとCentOSを使うものがあります。メモリーの必要量が少なかったりするので、CentOSを使うものにしました。

RDOとは、Red Hat系のOpenStackのコミュニティのこと。Packstackは、RDOで開発されているOpenStackのインストール作業や設定作業を自動化するインストーラーです。

ハードウェアの必要要件

CPUはVT-xもしくは、AMD-Vを備えたもの
メモリ4GB、6GB以上が望ましい

ここでは、VMware Workstation Playerを使って、仮想環境にOpenStackをインストールします。VMware Workstation Playerは、ホストのVT-x/AMD-Vをゲストから使えるようにする機能があります。これを使ってゲストOSをホストにしてOpenStackを動かしその上でゲストOS(インスタンス)を動かします。

開発環境

ホストOS Windows 10 Pro

VMware WorkStation Player 12.1.1

CentOS-7-x86_64-Minimal-1511.iso

インストールには、こちらのサイトを参考にさせていただきました。ほぼ、そのままでインストールしていきます。VMware Workstaion Playerの設定の仕方から始まって、OpenStackのロードバランサの設定まで細かく書かれてあります。大変参考になりました。

VMware Workstation PlayerでOpenstack Kiloを動かす手順

CentOSのインストール

CentOSは、手順書のとおりにインストールしました。

CentOSのダウンロードに1時間。インストールには20分ほどでインストールできました。Minimalインストールなので、インストール後net-toolsとntpをインストールしました。
NetworkManagerとはうまく共存できないようなので停止して代わりにnetworkサービスを使います。

ネットワークはOpenVSwitchを使います。ブリッジインターフェースを設定します。ホストのWindows 10 ProからOpenStackのホストのCentOSへアクセスするIPアドレスには、192.168.0.140を設定しました。

OpenStackのインストール

手順書を参考にインストールしました。

1つ変えたところは、次のコマンドでkiloのレポジトリをセットアップするのですが、

yum install http://rdo.fedorapeople.org/openstack-kilo/rdo-release-kilo.rpm

CentOSには、Mitakaのパッケージが用意されているので、次のコマンドでセットアップしました。

yum install -y centos-release-openstack-mitaka
yum install -y openstack-packstack

Packstackは、アンサーファイルを作って設定し、インストールします。

インストールには、OpenStackのコンポーネントをダウンロードしながらインストールするので時間がかかりました。

CentOSのインストールとOpenStackのインストールで2時間ほどで、OpenStackのDashboardを見ることができました。

自宅のネットワーク回線が遅いので、速ければもう少し早く終わると思います。

インストールの確認

インストールが正常に終了したところでhttp://192.168.0.140/dashboardにアクセスしてみました。

まだ、ネットワークの設定が終わっていないので、インスタンスを動かすことはできません。

OpenStackの設定ファイルは、/etcの下に散らばっているのですね。

詳細な手順書があったおかげでハマることなく動かすことができました。

次回、ネットワークの構成とインスタンスの起動までやってみます。

VMware Workstation Player 12.1.1でUbuntu 14.04を使うには

はじめに

2016/09/02追記
Ubuntu 16.04の場合は、Open VM Toolsを使い、設定するといいことがわかりました。

Ubuntuの16.04が出たということで、VMware Playerをどうしようか検討していた。

VWware Playerは、Ubuntu 15.04からVMware Workstation 12 Playerのサポートになったようです。
VMware Workstation 12 Player と次の製品との比較

そこで、VMware Workstation Player 12.1.1を使ってみることにしました。

ホストOSはWindows 7で、ゲストOSはUbuntu 14.04です。

共有フォルダ

VMware Workstation Playerにアップグレードして最初に確認したのは共有フォルダです。

案の定動きませんでした。メニューにある管理のVMware Toolsの再インストールを試してみたけれど、アップデートサーバにコンポーネントが見つかりませんでしたと出てインストールもできません。

調べてみると手動でインストールするしかなくて、次のところからtarファイルをダウンロードして解凍しisoファイルを取り出します。
http://softwareupdate.vmware.com/cds/vmw-desktop/ws/

ここの/12.1.1/3770994/windows/packages/tools-linux.tarをダウンロードしました。解凍するとVMware-tools-linux-10.0.6-3595377.isoというファイルが出てきます。

それを、VMware Workstation Playerの取り外し可能デバイスの接続で指定することでインストールしました。

共有フォルダは使えることがわかって一安心です。

ホストゲスト間のコピーペーストと画面の大きさ

VMware Toolsを入れたのはいいのですが、ホストゲスト間でコピーペーストができません。画面の大きさもマウスのドラッグで変えることができませんでした。Ubuntu 14.04ゲストのシステム設定のディスプレイのところから解像度を変えることで画面の大きさを変えることができました。

ネットワーク

ネットワークがつながらなくなっていた。
理由は、ネットワーク接続がブリッジになっていてVirtualBoxと共存したために問題が起きていました。
ネットワークアダプタの設定で、VirtualBox Host-Only Ethernet Adapterのチェックを外したら動きました。
ネットワーク接続がNATならば問題はないと思います。

ディスクの圧縮

ディスクが大きくなっていたので圧縮しようとした。
ゲストOS上でvmware-toolbox-cmdを使うらしいけれど、どこを探してもありません。
Ubuntuには、open-vm-toolsというパッケージが存在しているらしいことを知りました。VMwareがオープンソースにしたものでVMware自身もこちらを使うことを推奨しているそうです。そこで早速使ってみることに。

open-vm-toolsは、apt-getで入れる前にVMware Toolsをアンインストールしないといけませんでした。使ってわかったのですが、共有フォルダが使えません。vmware-toolbox-cmdというコマンドは存在して、sudo vmware-toolbox-cmd disk shrink / とすることでディスクを圧縮することができました。コマンドの指定方法が少し変えられているのか、disk shrinkと2つオプションを指定しないと動きませんでした。

Ubuntuのopen-vm-toolsのサポートをしている方は、vmhgfsドライバは今後VMwareからサポートされないから共有フォルダが動かなくても仕方ないといっています。
vmhgfs doesn't work with linux 3.13 kernel

でも、最新のVMware Tools 10.0.6で共有フォルダを使えることからサポートされないってことはないよね。

まとめ

  • Ubuntu 14.04ゲストで共有フォルダを使うには、最新のVMware Tools 10.0.6を使う必要があります。
  • VMware toolsは、メニューの管理のVMware Toolsの再インストールから行えません。手動でダウンロードしてisoファイルを取り出す必要があります。
  • VMware tools 10.0.6では、ホストゲスト間でコピーペーストが使えません。
  • 画面の大きさもマウスで変更することはできなく、ゲストのgnomeの設定で画面の大きさを変更することで行います。
  • VMware Toolsを手動でインストールすると、vmware-toolbox-cmdコマンドはありません。
  • Ubuntu 14.04にはopen-vm-toolsというパッケージが用意されていて、こちらにvmware-toolbox-cmdがあります。
  • open-vm-toolsでは共有フォルダが使えません。
  • ゲストOS内で、sudo vmware-toolbox-cmd disk shrink / とすることでディスクの大きさを圧縮できます。

Ubuntu 14.04をゲストOSとして使うには、VMware Player 7の方がいいと思います。VMware Workstation Playerでは、あちらを立てればこちらが立たずという状態です。

Ubuntu 14.04を使うときはVMware Playerを最新版に

Windows 7上のVMware Player 6.0.1でゲストOSのUbuntuを14.04にアップデートしました。ところが、共有フォルダが使えなくなってしまいました。

そこで、VMware Toolsを再インストールしてみましたが、動きません。症状は、再インストール時にコンパイルエラーがでています。

結局、VMware Playerを6.0.3にアップデートして、VMware Toolsを再インストールしたら使えるようになりました。

このときのVMware Toolsのバージョンは、9.6.1から9.6.2にバージョンアップしました。

Ubuntu 14.04を使うときは、VMware Playerを最新版にしましょう。

Windows 7上のVMware PlayerでLinuxのデバイスドライバをリモートデバッグする方法(3) - 自動化する

この記事は、
Windows 7上のVMware Playerにgdbでリモート接続する方法
Windows 7上のVMware PlayerでLinuxのデバイスドライバをリモートデバッグする方法(1) - デバッグするカーネルモジュールを用意する
Windows 7上のVMware PlayerでLinuxのデバイスドライバをリモートデバッグする方法(2) - リモートデバッグする
Windows 7上のVMware PlayerでLinuxのデバイスドライバをリモートデバッグする方法(3) - 自動化する
の1つです。

1. 実際にやってみると

実際にリモートデバッグをしてみると、いちいちセクションの情報を確認して値を設定することが非常に面倒なことがわかると思います。そこで、ゲストOS上でカーネルモジュールをロードする処理と、ホストOS上でgdbを設定する処理をシェルスクリプトで自動化してみます。

基本的にやっていることは、手作業でやっていたことを自動化しただけです。セクション情報をtext.txt、data.txt、bss.txtに保存して、それをゲストOSからホストOSにコピーします。それを使って、gdbの設定を行います。

2. プログラムの説明

load.shは、ゲストOS上でカーネルモジュールをロードするときに使います。

load.sh ---------------------------------------------------

#!/bin/bash

# modnameにカーネルモジュールの.koの名前を入れます。
modname='testmodule'

# devnameは、デバイスファイルの名前です。
devname='/dev/testmodule'

# my_majorにメジャー番号を入れます。
my_major=88

# locationは、VMwareで設定したホストOSにカーネルモジュールやソースをコピーするときの共有フォルダの名前です。
location='/mnt/hgfs/kazu'

# カーネルモジュールが存在すればアンロードします。
if [ -e /sys/module/$modname ]; then
    sudo rmmod $modname
fi

# カーネルモジュールをロードします。
sudo insmod ${modname}.ko

# デバイスファイルがなければ作ります。
if [ ! -e $devname ]; then
    sudo mknod $devname c $my_major 0
    sudo chmod a+rw $devname
fi

# セクション情報を保存します。
sudo cat /sys/module/${modname}/sections/.text >text.txt
sudo cat /sys/module/${modname}/sections/.data >data.txt
sudo cat /sys/module/${modname}/sections/.bss >bss.txt

# セクション情報をコピーします
cp text.txt $location
cp data.txt $location
cp bss.txt $location

# モジュールとソースコードをコピーします。
cp ${modname}.c $location
cp ${modname}.ko $location

--------------------------------------------------

gd.shは、ホストOS上でgdbをリモート接続するときに使います。break_pointに停止させたい関数の名前を設定します。

gd.sh ---------------------------------------------------------

#!/bin/bash
# gdb port number is required
# ./gd.sh number

# モジュールの名前をセットします。
module_name='testmodule'

# ソースの位置をセットします
source_location='/home/kazu/test'

# ブレークポイントを設定します。
break_point='my_ioctl'

# セクション情報を読み込みます。
text=`cat text.txt`
data=`cat data.txt`
bss=`cat bss.txt`

# gdbコマンドを.gdbinitファイルに設定します。
cat <<EOF >.gdbinit
set architecture i386:x86-64
target remote localhost:$1
add-symbol-file ${module_name}.ko $text -s .data $data -s .bss $bss
break $break_point
EOF

# ソースコードを設定した位置にコピーします。
cp ${module_name}.c $source_location

# gdbを実行します。
gdb

----------------------------------------------------

3. 使い方

ゲストOS上に、load.shを置いてください。そこで、

Ubuntu$ chmode +x load.sh

で実行可能にします。これは1度だけやればいいです。

ソースコードを編集した後、makeの後でload.shすることでモジュールのロードと、コピーがされます。

Ubuntu$ make
Ubuntu$ ./load.sh

ホストOSのCygwin上でgd.shを接続するポート番号とともに起動します。

Cygwin$ ./gd.sh 8864

GNU gdb (GDB) 7.6.50.20130728-cvs (cygwin-special)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-cygwin".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".

The target architecture is assumed to be i386:x86-64
0xffffffff8104d386 in ?? ()
add symbol table from file "testmodule.ko" at
        .text_addr = 0xffffffffa03da000
        .data_addr = 0xffffffffa03dc000
        .bss_addr = 0xffffffffa03dc360
Breakpoint 1 at 0xffffffffa03da0f1: file /home/kazu/test/testmodule.c, line 51.
(gdb)

このような表示になって、ゲストOSの実行が止まれば成功です。この状態でcontinueします。

(gdb) continue

その後、ゲストOS上でtestdriverを動かします。

Ubuntu$ ./testdriver

そして、次のようにmy_ioctlで実行が止まれば成功です。

Breakpoint 1, my_ioctl (file=0xffff8800240cdec0, count=32,
    buf=18446612132972596240) at /home/kazu/test/testmodule.c:51
warning: Source file is more recent than executable.
51      {
(gdb)

あとは、手作業で変数の値を見たりできます。面倒な作業が自動化できれば、カーネルモジュールの開発に集中できると思います。

4. 参考にしたサイト

この記事を作るときに、非常に多くのサイトを参考にさせてもらいました。ありがとうございます。もし、何か問題があったら、これらのサイトを参考にしてみてください。

リモートデバッグについて
VMwareのGDB機能を利用する
LinuxでLoadable Moduleをデバッグする
 VMware
Qemu and the Kernel
The Kernel Newbie Corner: Kernel and Module Debugging with gdb
Debugging kernel modules
Debug-info for loadable kernel modules
■[Debian] VMwareでLinuxカーネルのデバッグ
Debugging Linux kernels with Workstation 6.0
Debugging Linux Kernel in VMWare with Windows host

カーネルモジュールについて
CS 686: Special Topic: Intel EM64T and VT Extensions (Spring 2007)

gdbの使い方について
gdbコマンド メモ
gdb の使い方・デバッグ方法まとめ

シェルスクリプトについて
UNIX & Linux コマンド・シェルスクリプト リファレンス