Sys::Virt と Sys::Guestfs で仮想マシンを操ってみた          2012/8/18      id:hogem / @hogem
自己紹介•   Kenichi Morimoto•   id:hogem / @hogem     •   http//d.hatena.ne.jp/hogem/•   Infra, Server, Network Engineer•   某鉄...
Perl 使っているところ•   CMTS, CATV Modem(Docsis)•   Log Rotate, File Backup•   ネットワーク機器設定 , 管理     •   Net::Telnet(::Cisco), Net:...
仮想化
仮想化でサーバ構築が楽に?•   大量のサーバクローン、起動、停止•   クローン後の単純作業が結構ある    •   IP, MAC, hostname    •   uuid,    •その他 app ごとの設定•   この辺りを楽に運用し...
KVM と libvirt•   KVM     •   仮想化ハイパーバイザ : Linux Kernel•   libvirt     •   仮想化 API          •   virsh ( コマンドライン )          ...
Sys::Virt•   libvirt perl binding•   OS の libvirt に依存するので cpan ではな    く、 yum/apt での install が楽$uri = "qemu///system";$vmm ...
Sys::Virt::Domain•   Sys::Virt::list_domain() で返される配    列の要素 # 個々の仮想マシンオブジェクト•   $dom->destroy()   # 強制停止•   $dom->create(...
停止状態の仮想マシンを起動use Sys::Virt;my $uri = "qemu+ssh://$host/system";$vmm = Sys::Virt->new(uri => $uri);for my $dom ($vmm->list_...
Sys::Virt デモ•   https://github.com/hogem/libvirt_webapp•   KVM 操作簡易 web app     •   仮想マシン起動 , 停止 , VNC 接続•   VNC コンソール接続 (...
仮想マシンクローン後の作業•   Hostname 変更•   IP, MAC アドレス変更     •   /etc/sysconfig/network     •   ifcfg-ethX     •   /etc/udev/rules.d...
Sys::Guestfs•   libguestfs の perl binding•   guestfish コマンド•   cpan にないので yum で     •   yum install perl-Sys-Guestfs•   li...
Sys::Guestfs sampleuse Sys::Guestfs;my $h = Sys::Guestfs->new();$h->add_drive_opts(  disk.img, format => qcow2);$h->launch...
Sys::Guestfs デモ
まとめ•   Sys::Virt(libvirt api) で仮想マシンの起    動、停止等ができる•   Sys::Guestfs で仮想マシンの disk イメー    ジを mount して、ファイル読み書き、コマン    ド実行ができ...
質問?
ご静聴ありがとう ございました
libvirt memo●   (Sys::Virt に限らず ) NFS で共有している    領域に disk image を置く場合、複数のハイ    パーバイザで同時起動しないように注意す    る。 File system が壊れてし...
guestfish memo●   起動中の image に書き込みを加えると file    system が壊れる。変更の必要がなければ -    ro を推奨。●   # guestfish -ro -a disk.img●   > ru...
Kyoto.pm 20120818-hogem
Upcoming SlideShare
Loading in …5
×

Kyoto.pm 20120818-hogem

1,353 views

Published on

Introduction to Sys::Virt, Sys::Guestfs

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,353
On SlideShare
0
From Embeds
0
Number of Embeds
602
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Kyoto.pm 20120818-hogem

  1. 1. Sys::Virt と Sys::Guestfs で仮想マシンを操ってみた 2012/8/18 id:hogem / @hogem
  2. 2. 自己紹介• Kenichi Morimoto• id:hogem / @hogem • http//d.hatena.ne.jp/hogem/• Infra, Server, Network Engineer• 某鉄道系グループ企業 • ISP 事業 , サーバホスティング等
  3. 3. Perl 使っているところ• CMTS, CATV Modem(Docsis)• Log Rotate, File Backup• ネットワーク機器設定 , 管理 • Net::Telnet(::Cisco), Net::SSH • Net::Snmp• ログ検索、業務系管理用 Web App • CGI, CGI::Application, Plack • cgi-lib.pl (!?)
  4. 4. 仮想化
  5. 5. 仮想化でサーバ構築が楽に?• 大量のサーバクローン、起動、停止• クローン後の単純作業が結構ある • IP, MAC, hostname • uuid, •その他 app ごとの設定• この辺りを楽に運用したい!
  6. 6. KVM と libvirt• KVM • 仮想化ハイパーバイザ : Linux Kernel• libvirt • 仮想化 API • virsh ( コマンドライン ) • virt-manager (GUI: python) • Sys::Virt (perl)
  7. 7. Sys::Virt• libvirt perl binding• OS の libvirt に依存するので cpan ではな く、 yum/apt での install が楽$uri = "qemu///system";$vmm = Sys::Virt->new(uri => $uri);@domains = $vmm->list_domains();$dom = $vmm->get_domain_by_name($name);
  8. 8. Sys::Virt::Domain• Sys::Virt::list_domain() で返される配 列の要素 # 個々の仮想マシンオブジェクト• $dom->destroy() # 強制停止• $dom->create() # 起動• $dom->shutdown() # 停止 • 仮想マシン上で acpid の起動が必要
  9. 9. 停止状態の仮想マシンを起動use Sys::Virt;my $uri = "qemu+ssh://$host/system";$vmm = Sys::Virt->new(uri => $uri);for my $dom ($vmm->list_defined_domains) { if ($dom->get_info->{state} == Sys::Virt::Domain::STATE_SHUTOFF) { $dom->create(); print $dom->get_name, " createdn"; }}
  10. 10. Sys::Virt デモ• https://github.com/hogem/libvirt_webapp• KVM 操作簡易 web app • 仮想マシン起動 , 停止 , VNC 接続• VNC コンソール接続 ( 非 Sys::Virt) • VNC Client : TightVNC (java) • ssh port forwarding to vnc port
  11. 11. 仮想マシンクローン後の作業• Hostname 変更• IP, MAC アドレス変更 • /etc/sysconfig/network • ifcfg-ethX • /etc/udev/rules.d/70-persistent- net.rules• 起動時 daemon の変更 (chkconfig)• その他 各 app ごとの設定など
  12. 12. Sys::Guestfs• libguestfs の perl binding• guestfish コマンド• cpan にないので yum で • yum install perl-Sys-Guestfs• libguestfs • 仮想マシンの Disk イメージを操作 • ファイル参照 (cat),export(copy-out) • ファイル書込 (vi),import(copy-in) • コマンド実行
  13. 13. Sys::Guestfs sampleuse Sys::Guestfs;my $h = Sys::Guestfs->new();$h->add_drive_opts( disk.img, format => qcow2);$h->launch();$h->mount_options(, /dev/vda1, /);$output = $h->command( [qw(chkconfig nginx off)]);$h->sync();$h->close();
  14. 14. Sys::Guestfs デモ
  15. 15. まとめ• Sys::Virt(libvirt api) で仮想マシンの起 動、停止等ができる• Sys::Guestfs で仮想マシンの disk イメー ジを mount して、ファイル読み書き、コマン ド実行ができる• 大量の仮想マシン操作のお供にどうぞ
  16. 16. 質問?
  17. 17. ご静聴ありがとう ございました
  18. 18. libvirt memo● (Sys::Virt に限らず ) NFS で共有している 領域に disk image を置く場合、複数のハイ パーバイザで同時起動しないように注意す る。 File system が壊れてしまう● remote の hypervisor を操作する場 合、 ssh passphrase なしの公開鍵を作成 しておくとログインが楽になる
  19. 19. guestfish memo● 起動中の image に書き込みを加えると file system が壊れる。変更の必要がなければ - ro を推奨。● # guestfish -ro -a disk.img● > run● > list-filesystems● > mount /dev/vda1 /

×