From 2fb6eaba347b9d47f599d3ae2a688bd30167740f Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Wed, 31 Oct 2012 10:42:17 +0000 Subject: [PATCH] KVM Forum talk. --- 2012-kvm-forum/.gitignore | 3 + 2012-kvm-forum/0000-introduction.html | 18 + 2012-kvm-forum/0100-overview.html | 43 ++ 2012-kvm-forum/0200-overview2.html | 42 ++ 2012-kvm-forum/0300-overview3.html | 27 + 2012-kvm-forum/0400-guestfish.d/.dir | 0 2012-kvm-forum/0400-guestfish.term | 13 + 2012-kvm-forum/0500-new-features.html | 25 + 2012-kvm-forum/0600-new-features-svirt.html | 25 + 2012-kvm-forum/0800-future.html | 31 + 2012-kvm-forum/0900-summary.html | 31 + 2012-kvm-forum/README | 11 + 2012-kvm-forum/bashrc | 17 + 2012-kvm-forum/cdrom.png | Bin 0 -> 3997 bytes 2012-kvm-forum/code.js | 0 2012-kvm-forum/disk.png | Bin 0 -> 2326 bytes 2012-kvm-forum/file.png | Bin 0 -> 2095 bytes 2012-kvm-forum/fish.svg | 366 ++++++++++ 2012-kvm-forum/flash.png | Bin 0 -> 2919 bytes 2012-kvm-forum/floppy.png | Bin 0 -> 1822 bytes 2012-kvm-forum/functions | 40 ++ 2012-kvm-forum/handout/.gitignore | 3 + .../handout/2012-kvm-forum-rjones-libguestfs.tex | 310 ++++++++ 2012-kvm-forum/handout/Makefile | 18 + 2012-kvm-forum/kvm-forum.png | Bin 0 -> 23329 bytes 2012-kvm-forum/newfeatures-svirt.svg | 243 +++++++ 2012-kvm-forum/newfeatures.svg | 271 +++++++ 2012-kvm-forum/notes.txt | 108 +++ 2012-kvm-forum/openstack.png | Bin 0 -> 3670 bytes 2012-kvm-forum/overview.svg | 797 +++++++++++++++++++++ 2012-kvm-forum/redhat.png | Bin 0 -> 4763 bytes 2012-kvm-forum/run | 16 + 2012-kvm-forum/style.css | 67 ++ 33 files changed, 2525 insertions(+) create mode 100644 2012-kvm-forum/.gitignore create mode 100644 2012-kvm-forum/0000-introduction.html create mode 100644 2012-kvm-forum/0100-overview.html create mode 100644 2012-kvm-forum/0200-overview2.html create mode 100644 2012-kvm-forum/0300-overview3.html create mode 100644 2012-kvm-forum/0400-guestfish.d/.dir create mode 100755 2012-kvm-forum/0400-guestfish.term create mode 100644 2012-kvm-forum/0500-new-features.html create mode 100644 2012-kvm-forum/0600-new-features-svirt.html create mode 100644 2012-kvm-forum/0800-future.html create mode 100644 2012-kvm-forum/0900-summary.html create mode 100644 2012-kvm-forum/README create mode 100644 2012-kvm-forum/bashrc create mode 100644 2012-kvm-forum/cdrom.png create mode 100644 2012-kvm-forum/code.js create mode 100644 2012-kvm-forum/disk.png create mode 100644 2012-kvm-forum/file.png create mode 100644 2012-kvm-forum/fish.svg create mode 100644 2012-kvm-forum/flash.png create mode 100644 2012-kvm-forum/floppy.png create mode 100644 2012-kvm-forum/functions create mode 100644 2012-kvm-forum/handout/.gitignore create mode 100644 2012-kvm-forum/handout/2012-kvm-forum-rjones-libguestfs.tex create mode 100644 2012-kvm-forum/handout/Makefile create mode 100644 2012-kvm-forum/kvm-forum.png create mode 100644 2012-kvm-forum/newfeatures-svirt.svg create mode 100644 2012-kvm-forum/newfeatures.svg create mode 100644 2012-kvm-forum/notes.txt create mode 100644 2012-kvm-forum/openstack.png create mode 100644 2012-kvm-forum/overview.svg create mode 100644 2012-kvm-forum/redhat.png create mode 100755 2012-kvm-forum/run create mode 100644 2012-kvm-forum/style.css diff --git a/2012-kvm-forum/.gitignore b/2012-kvm-forum/.gitignore new file mode 100644 index 0000000..b3e8227 --- /dev/null +++ b/2012-kvm-forum/.gitignore @@ -0,0 +1,3 @@ +*.d/disk.img +bindings +history diff --git a/2012-kvm-forum/0000-introduction.html b/2012-kvm-forum/0000-introduction.html new file mode 100644 index 0000000..d9860d7 --- /dev/null +++ b/2012-kvm-forum/0000-introduction.html @@ -0,0 +1,18 @@ + + + +
+

+ libguestfs
+
+ tools for viewing and modifying
+ virtual machine disk images +

+

+ Richard W.M. Jones
+ rjones @ redhat.com +

+
+ + diff --git a/2012-kvm-forum/0100-overview.html b/2012-kvm-forum/0100-overview.html new file mode 100644 index 0000000..d931f9d --- /dev/null +++ b/2012-kvm-forum/0100-overview.html @@ -0,0 +1,43 @@ + + + + +

Library, API, tools

+ + + + + + + + + + + + + + + + +
+ +
diff --git a/2012-kvm-forum/0200-overview2.html b/2012-kvm-forum/0200-overview2.html new file mode 100644 index 0000000..a41df96 --- /dev/null +++ b/2012-kvm-forum/0200-overview2.html @@ -0,0 +1,42 @@ + + + + +

Library, API, tools

+ + + + + + + + + + + + + + + + +
+ +
diff --git a/2012-kvm-forum/0300-overview3.html b/2012-kvm-forum/0300-overview3.html new file mode 100644 index 0000000..c36b85c --- /dev/null +++ b/2012-kvm-forum/0300-overview3.html @@ -0,0 +1,27 @@ + + + + +

Library, API, tools

+ + + + + + + + + + + + + diff --git a/2012-kvm-forum/0400-guestfish.d/.dir b/2012-kvm-forum/0400-guestfish.d/.dir new file mode 100644 index 0000000..e69de29 diff --git a/2012-kvm-forum/0400-guestfish.term b/2012-kvm-forum/0400-guestfish.term new file mode 100755 index 0000000..291ac5c --- /dev/null +++ b/2012-kvm-forum/0400-guestfish.term @@ -0,0 +1,13 @@ +#!/bin/bash - + +source functions + +# History. +remember 'ls -l -h' +remember 'file disk.img' +remember 'guestfish -a disk.img -i --rw' + +echo "Example: Examine a disk image" + +cd 0400-guestfish.d +terminal diff --git a/2012-kvm-forum/0500-new-features.html b/2012-kvm-forum/0500-new-features.html new file mode 100644 index 0000000..1dca6e0 --- /dev/null +++ b/2012-kvm-forum/0500-new-features.html @@ -0,0 +1,25 @@ + + + + +

New in libguestfs 1.20

+ + + + + + + + + + + + diff --git a/2012-kvm-forum/0600-new-features-svirt.html b/2012-kvm-forum/0600-new-features-svirt.html new file mode 100644 index 0000000..2b82459 --- /dev/null +++ b/2012-kvm-forum/0600-new-features-svirt.html @@ -0,0 +1,25 @@ + + + + +

New in libguestfs 1.20

+ + + + + + + + + + + + diff --git a/2012-kvm-forum/0800-future.html b/2012-kvm-forum/0800-future.html new file mode 100644 index 0000000..90c8a94 --- /dev/null +++ b/2012-kvm-forum/0800-future.html @@ -0,0 +1,31 @@ + + + + +

Future work

+ +
    + +
  • TRIM / SCSI UNMAP from guest to host (in progress) + +
  • 9pfs mapping file + +
  • Finer control over -drive snapshot=on + +
  • Faster qemu-img create command + +
    +$ time qemu-img create -f qcow2 -b rhel6.raw test.qcow2
    +...
    +real    0m0.519s
    +...
    +
    + +
  • Safer qemu-img info command
    + (qemu: done, libguestfs: not yet impl) + +
  • All-up testing should gate commits + +
  • Nested VMs (that work) + +
diff --git a/2012-kvm-forum/0900-summary.html b/2012-kvm-forum/0900-summary.html new file mode 100644 index 0000000..34b50b4 --- /dev/null +++ b/2012-kvm-forum/0900-summary.html @@ -0,0 +1,31 @@ + + + + +

libguestfs

+ + + +

+libguestfs.org +
+
+

+ +

+PDF handout on the Linux Foundation site or + rwmj.wordpress.com +
+
+

+ +

+Available in your favourite Linux distribution. +
+
+

+ +

+git.annexia.org → libguestfs-talks +(in Tech Talk format) +

diff --git a/2012-kvm-forum/README b/2012-kvm-forum/README new file mode 100644 index 0000000..b540975 --- /dev/null +++ b/2012-kvm-forum/README @@ -0,0 +1,11 @@ +This is a talk given at the 2012 KVM Forum in Barcelona. + +https://events.linuxfoundation.org/events/kvm-forum + +The whole talk is designed to take around 15-20 minutes, with lots of +time at the end for open discussion. + +To run the talk you'll need Tech Talk PSE >= 1.1.0. If you don't have +Tech Talk then just open up the HTML slides in a web browser. + +To start the talk, use `./run'. diff --git a/2012-kvm-forum/bashrc b/2012-kvm-forum/bashrc new file mode 100644 index 0000000..4c6a3c6 --- /dev/null +++ b/2012-kvm-forum/bashrc @@ -0,0 +1,17 @@ +# -*- shell-script -*- + +# Colour ls. +if [ -f /etc/profile.d/colorls.sh ]; then . /etc/profile.d/colorls.sh; fi + +# Fancy prompt colours (see +# https://wiki.archlinux.org/index.php/Color_Bash_Prompt) +promptcol='\e[0;32m' ;# colour for the prompt +commandcol='\e[1;31m' ;# colour for the typed command +outputcol='\e[0m' ;# colour for command output + +export PS1="\n\[$promptcol\]\$ \[$commandcol\]" + +trap 'echo -ne "$outputcol"' DEBUG + +# Load key bindings (if any). +bind -f $talkdir/bindings diff --git a/2012-kvm-forum/cdrom.png b/2012-kvm-forum/cdrom.png new file mode 100644 index 0000000000000000000000000000000000000000..9c241cdf896c9954b322d98903da3f9850acc4e3 GIT binary patch literal 3997 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 DR#}s% literal 0 HcmV?d00001 diff --git a/2012-kvm-forum/code.js b/2012-kvm-forum/code.js new file mode 100644 index 0000000..e69de29 diff --git a/2012-kvm-forum/disk.png b/2012-kvm-forum/disk.png new file mode 100644 index 0000000000000000000000000000000000000000..087810c7c911b50706c36158acda9fe6ae90bb21 GIT binary patch literal 2326 zcmV+x3F-EUP)bY*F7Wpd{G_b&hd03&ooSaefwb#h~60BCe{a5^t9bYX61Z!TtXWo2Y# zb8B>Oa4v6hXMM7arvLy5C`m*?RA}DqS=(zAR~SEY+50A&8z$x+vq?14HkuSsYmK4= zN&}6wFYSxf5^HTKR;>C^2-wSm|3csURwxvT4>qNbz6b_;38h-dWpmeDc9Yp;r{C}F zeCye9XGyV8r90$fW@pZv^ZR}GGtmYH2E_Ax=+8C!5`hwd5`hwd5`m{Z%y~CjKY;$u{tgo+&NF*ZfudS`g`WS5W22QZ~%(y zSS*$s$73NYD=T7ZYD$DcA*rDCjg(Qox_XwDx=yn7kAm0%F9}?|da;?n^v23#Qk#p5 zixLPl56$5W0YIq@BINh`B>~H_#Ky)(jxc~h!wU-wVt#&J%Ixf{n3%jX7aKH5s(FwrP~HPWJcrS8m$^%0RO% zzU#f+o!x$D5EHV0Lfi0Pkm8^#D=W(jXchQ&iC|9FKIVZEI^&(%-o1O?c5oJq1-(GA zGFn?(BLTl}u)4ZNgHK~ZxC62ff)m*U3#b`I%|@Jw;M*VuP+r7Tw}EAGhCo4my)XMi z;qV7ew%nErN%t8(KRgg`?~+9eX%G{SkB^J$>gv2Yz`_LJ_i!UvgwrV84uq?!s-(rd ztOL*>4U1z=tXp4SPxAyDPn{av%falng6VP}h*7s=$N7$UhY#)oU=tG)qN1WA=bx-G z)eWFA5M_ey`T#-N#Css*_Wv2U=oRhw1}5G!D1}PW=Ia*-Q60k@n&OV zW2jI{)m;`a4;*;qoqaF$8fyB3X;n?CZo>j#eSLlM844bP5=DzsD?kyLCo+`VjUZT? z)3jljqN}UZ*VEJUdZCnRD%zLs6OKmCG&i^C&^~7$m>llJxmtCfyjIdlr3}a&*lyCQ zg)k>qV^r*>rY3m}@<)!m>i_lE-#(@#zIC@2x}tsK%w^oZ{tZoVfr2%- z__*Vs7>Qy;02E1rdnRNoCd6Y79Xe!mbaV_miAQ%^KquA#^1z{ZyhG-DRkI8X+F@71 zB3O_!lUHzi5n*>js%&m<&NYdwd3GmmNe&)7s8dZjt<(f*1!iLmzA<>RwWTe z7Ubt_aAo%f002-3c<%4jP8IWDECkmmY$$L@mnf3RG#ICjaSJfj)zyibnwsdbW5#3=ps_dv_s~XjI}LDfHC%%X$Z=MK z6`=&&XV9uJVLsoxcTal6@#Dt@^+kTdca4_+8T};Sum#M`&8^*76w=$!I7X zZ;Qi+4^!Ul%Jnmt1X^GMyc5e4pD7HzuqK%#N>;{+4R*8Ko>)x+@;6=6?=;$Sngi~$ zu&^j@jsA%DfSEQtVja1J2?VWlS{wi4cd@#*BJPge6?1d5qN%Y->>>?(`T1AEqP=Qa zv`j>z5vf7A2?7o&H$Va{p?ZhIA^AH%?t|wjMA*nD*OD~%nk;gO#Ee*^0tXVgnxUrE zO!l|?Xrpwh**44{Bw2-FIgOfWE3HK&u&~e_KbNJR{wR0^_67MLJ{}h@)}DN*$(usH zYUh8!u$`(7i@7`0$MVDyxuc#eL6+4V3m6;&@*oS?V7|1pDA}8)PZ;DLI=KerU>St| zfM057VR1qBJlS@cgk1%0L*q@-x^yE)r29GDrjIO>wcwhhl>OY|SV24{@kHB9@7LDu z5Q*u@i~~N`jpBxtN~UIJXXonc8+M8sw9Qnw$|;axqoYTUX8U>~&*0LVX^|pQ76rIv z(Z-(KA)B2w2}q8G0%$zG2gxrLo`#%RU z(ovFH=4+O<@x_A&f7N^SI>q+1yvgTH3=3y0waD=o3&enXhgRgUXJ-;q5ANUpjINg* z+_vUe0cirBpej)G~B4HDO?I5=uZ6_~Z zzU;qon+a07*qoM6N<$f~fCGw*UYD literal 0 HcmV?d00001 diff --git a/2012-kvm-forum/file.png b/2012-kvm-forum/file.png new file mode 100644 index 0000000000000000000000000000000000000000..beff2d45fb2e7bb2269d7b5ad75eaebc35ba117c GIT binary patch literal 2095 zcmV+~2+;S5P)fFDZ*Bm0X>@2HVIW9V zM@1lLWo&RDW^!+BAWC6tbz+882eSYG2RKPYK~!ko)mlrB6jc=d&b`&uJ#R)}FhE2G z32}Is7#6yc7)>;p1sfK|AK)J`G10vXVhk9K7!pVX#3--0AZ`o>)G&njh~YgCr>A*L zch@~G>fWkzZ&mjUJu?d`RM)-LkNVCz-}l|eK+KG1`B2X^dH_+UH!fZJ?)e1Khs@@E zX08E1SgmgTw8`OniPq|tVf>yX$@ggM&n71)AFU(+>O`S)7temWZ_leAjBVVsYE^0{ zZ8V#UXe`um>)xFwcW>Wm8MHnbsIL3yz<~qpRSn>W^Jf>{e)FBdR=Wu{Y;(zJCK+IG zmgV#}(th4fzmtAGZ)>Gdt=6EmMx#;3-~ayg%{^YGQ6~7S(DWHf|VGyI0(vtzHF;pLruGl-&tOi$lOq&2E>6~iOLn3&kzPgxY0lfCd9(wLk=D zt)Z31%|CDA%CEoR`t|FWotp&!YW|surJ7BwBkK3e282a zK`Dh+tBFRVfra`48jS|}`uebE-(I{pKHfh&Kld?!W1SwoLpy9^mrjpRs$-#L(>Q%s~JrpDF-mBRK5R zY9CGx2zdxO04Yae79+C@kBAV*G2%D|1_nGWO#o=Nn&5;1&>KAuWP&XoKXUge(?(e@ zoK%Eu%3ht&E0q}Q*Ka_(-QIfm@Zm~N1DSlhbR3yk_8>S~Q8`9;g3^BuF##k#K(-fG zVlaR>j`dS&03~x8k^~8uo$}fXjlz6W9y~F?uFpj&5kO3cqDlwvG%6k;v{ zr+^TY&uu6Jz@8CNMlJ!6UFhruCXGS{VT=LvQwG4sl&33f5pux>{K%5XW9xISA`<~wM5I_Milt(Q`38&IfK}0T^aNH1vVF2Ktr>sC?f&^2_4hqU2(94-1 z*mqK7Zb>Cd5@q2WKFccgssRo`5?SR_P#yAL6+Bbztm1s3!(PS&nb>s5|8h0J-5eyh z$%3170o~b%?No(V$%RNv;7MLX(2^eAz*BL4RM1qore^LWfo>Jx+#bmXPE-U-8I_kP3c!=CN|fzRTY-VnQs?09Jl$C#aX$EP8EER_I(`+y061YxO-ZE_2XJj&-hq>yf2 z!~psMi~tw~FbJS#gVpv*<&M3g!{IhI!!3J00Z<1p1E2xmvAu7YnPmWuLJnkXuaUS< z!g|+&S1iuN24gI3TH-X$jl93q2TmkQ7M^Q)a7i#Mf?;W;h5u?m;W*#Dy_Nx#1q2QN Z{|{8awT7$TF;D;i002ovPDHLkV1l{9vWfrz literal 0 HcmV?d00001 diff --git a/2012-kvm-forum/fish.svg b/2012-kvm-forum/fish.svg new file mode 100644 index 0000000..7768be4 --- /dev/null +++ b/2012-kvm-forum/fish.svg @@ -0,0 +1,366 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2012-kvm-forum/flash.png b/2012-kvm-forum/flash.png new file mode 100644 index 0000000000000000000000000000000000000000..8e625ccadcceb7edaded0571f8c72baf7a54b51f GIT binary patch literal 2919 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 RGfV&g002ovPDHLkV1h9!uR8z$ literal 0 HcmV?d00001 diff --git a/2012-kvm-forum/floppy.png b/2012-kvm-forum/floppy.png new file mode 100644 index 0000000000000000000000000000000000000000..8bfd7184ea7c71b9370cc4c00dac28adeecd5719 GIT binary patch literal 1822 zcmV+(2jTdMP)RA}Da zTFq-6RTMvWzLMt4ki?2;)99umw7L{pC{aw?MK>Pqu~4n0TB#Nhb)hAnVjCNiw0U_mbFb%|xp!vXyi76!I z$BUzsf?N4;ZfWcPw*dC+dF)XM;;?0jLAt*>I|mE*?62IowqM4eyR#h>eu5wz2O*w1 zb@J5bYXVSc{LsdYgMEDic%$IL#qZ(C$G24u;O$r6fjidUi6%%`xV|_zcWw4CR&QJr zfI!dp_umdjKKU4A7(yTgT>R}?8WYhyYC4I{18GZiw7~K*U^_oSwf;^Au3?s{(a<2 zG$UX&6apX#DZX^>>$AYagoq#rVO48Bc6<8t7wpWfTem?N7Gxkqq!jtWvOo|6ngYy9 zP&EQ_nusW1y9xr3{DLLuRcr*L22e2r_#vl}3do_MEGi*p0AdEn6MtWy<5Dq#6a!>e zQ3(-J!vNC=a9d|D3=FKV%=W8S|HOVX43v>jngIbOh^vhOq5I_i6%+@+=_1|RAx)2hqDAvjp|g-`ly)HrrDLFF_EQYtha;d21EC(sk}MP99uL7qU;%Ef$q)@IQZJ3IJntM`XX|c%BfE- z%GR@Sj#hx~Lzb10$-!-HE_hx~Om9-64o#jmbt?Lks?XG^$ZT^BsrF1eNnON%D#HLt zNE#h#7UIsdHkC+&pu)AfUOSTN3<#0baeNsNe5=1yk+-Az#yVb+m0Hj!naKzdkp8|t z*z&+;q}R!?QM4qUzj0#;&YbxYW~QejkEi-^T^G8#I>EMWJ(&^ZB&6iZo4)tmzX`TH zxS2PcY|91_i=78xkEs(_mA`i@xte7z8l$#|+bV_UyR^InhyDUWTQm zB?QqGtqP&cbXq17${uZAJFm>XyL28r*MpgfE8y4t1~2#Y^uYG*+u2Y*@cA6*v$^*? z4+ifZ(hHVk;398R8y)M`L2aoPuSxRu(DNBka>W;dFyP>JYzJxfpjNBFkxx%FNNv}S zhxxgXOUNbAXDT+nOKe5$g|rjc7%!B@~}3E43NbWa}5K9eUMGTfYLvJ+@V69ys{C=n#P z5+Zj(R$f9uMncShZDKGbp?v8O19YZwmL$~707}RfT%X>V`&T5y9wP}kk%Z{pZDL?` z=@X%6;YdoG1ymj>0(G$Zvca3z+&CPM%&dWjr0|N*)Xcz~2dwW-v z4uN2BG_dKkoD5_U6v{qgWd zCy#%&X=LY!Ydk^nplQP3T|?|Ssl7-n_*7691fY&*`i^HYmenxLsMnWSiV?^VIyyS| zS+n~lF@bn)8_t3~l(Eb89;q?uiqjRD&Daft;iJqY5%$;pYmZ@n>g zuX*6v=bnLA4!m4!;wIOAhGOi4_di;5frG}+qw(+JWoKGBSpZU_t6`yE^`?D49MjU` z& +# +# This function does two things: (1) It adds the command and arguments +# to the shell history, so that commands can be recalled using up +# arrow or reverse search. (2) It makes a function key recall the +# command. The first command is assigned to F2, the second to F3 and +# so forth. + +rm -f $HISTFILE +touch $HISTFILE +rm -f $talkdir/bindings +touch bindings + +fnum=2 +keys=(- OP OQ OR OS '[15~' '[17~' '[18~' '[19~' '[20~' '[21~') + +remember () +{ + echo "$@" >> $HISTFILE + echo \"\\e${keys[$fnum]}\":\"\\C-k \\C-u"$@"\" >> $talkdir/bindings + ((fnum++)) +} + +terminal () +{ + chmod -w $HISTFILE + /bin/bash --rcfile $talkdir/bashrc "$@" +} diff --git a/2012-kvm-forum/handout/.gitignore b/2012-kvm-forum/handout/.gitignore new file mode 100644 index 0000000..3eec47d --- /dev/null +++ b/2012-kvm-forum/handout/.gitignore @@ -0,0 +1,3 @@ +*.aux +*.log +*.pdf diff --git a/2012-kvm-forum/handout/2012-kvm-forum-rjones-libguestfs.tex b/2012-kvm-forum/handout/2012-kvm-forum-rjones-libguestfs.tex new file mode 100644 index 0000000..18a9f14 --- /dev/null +++ b/2012-kvm-forum/handout/2012-kvm-forum-rjones-libguestfs.tex @@ -0,0 +1,310 @@ +\documentclass[12pt]{article} +\usepackage{alltt,graphicx,url} +\hyphenation{guestfish} + +\title{libguestfs\\ +tools for viewing and modifying\\ +virtual machine disk images} + +\author{Richard W.M. Jones\\ +\small Software Engineer\\[-0.8ex] +\small Red Hat\\ +\small \texttt{rjones@redhat.com}\\ +} + +\date{November 2012} + +\begin{document} +\maketitle + +\section{Introduction} + +The libguestfs project is nearly 4 years old, so for my rare +opportunity to talk at the KVM Forum I thought I'd cover where we've +got to in those 4 years, and also talk about some of the ways we are +using the new features in KVM. + +\section{Overview of libguestfs} + +libguestfs is a C library with a simple, long-term stable API that +contains about 400 different calls. It also has bindings in many +popular high-level languages, including Perl, Python, Ruby, OCaml, +Java, PHP, and more. The library lets you write simple programs to +create, view and modify disk images, like the one in +Appendix~\ref{perlexample}. + +There are many tools which use libguestfs: + +\begin{itemize} +\item[{\bf guestfish}] +Interactive and scriptable shell. +\item[{\bf guestmount}] +Mount filesystems from any guest or disk image on the host. +\item[{\bf virt-alignment-scan}] +Check alignment of partitions in guests. +\item[{\bf virt-cat}] +Display a file from a guest. +\item[{\bf virt-copy-in}] +Copy files and directories into a guest. +\item[{\bf virt-copy-out}] +Copy files and directories out of a guest. +\item[{\bf virt-df}] +Display disk usage of a guest. +\item[{\bf virt-edit}] +Edit a file in a guest. +\item[{\bf virt-filesystems}] +Display the partitions, filesystems, logical volumes etc. in a guest. +\item[{\bf virt-inspector}] +Inspect a guest and produce a report detailing the operating system, +version, applications installed and more. +\item[{\bf virt-ls}] +List files and directories in a guest. +\item[{\bf virt-make-fs}] +Make a new filesystem. +\item[{\bf virt-rescue}] +Rescue mode for guests. +\item[{\bf virt-resize}] +Resize a guest. +\item[{\bf virt-sparsify}] +Make a disk sparse. +\item[{\bf virt-sysprep}] +Reset a guest to ``factory configuration''. +\item[{\bf virt-tar-in}] +Copy files from a tarball into a guest. +\item[{\bf virt-tar-out}] +Copy files out of a guest into a tarball. +\item[{\bf virt-win-reg}] +Display and edit the Windows Registry in a guest. +\end{itemize} + +and libguestfs is increasingly being used by major projects: + +\begin{itemize} +\item[{\bf BoxGrinder \& Oz}] +Projects that can create guests from scratch. +\item[{\bf OpenStack}] +Uses libguestfs to inject files into guests. +\item[{\bf virt-manager}] +Uses libguestfs to display icons and applications in guests. +\item[{\bf virt-v2v \& virt-p2v}] +Migrate between physical machines and different hypervisors. +\end{itemize} + +\section{Using guestfish to view and inject files} + +An easy way to get started with libguestfs is to use our shell +scripting tool, +{\em guestfish}\footnote{\url{http://libguestfs.org/guestfish.1.html}} +to open up a disk image and look inside. + +You can open up almost any type of disk image, such as a raw file, +qcow2 file, or a logical volume or partition that contains a virtual +machine. You {\em don't} need to be root, unless you need root to +access the device. + +Simply do: + +\begin{samepage} +\begin{verbatim} +$ guestfish -a disk.img -i + +Welcome to guestfish, the libguestfs filesystem interactive shell for +editing virtual machine filesystems. + +Type: 'help' for help on commands + 'man' to read the manual + 'quit' to quit the shell + +Operating system: Red Hat Enterprise Linux Server release 6.3 (Santiago) +/dev/vg_rhel6x32/lv_root mounted on / +/dev/sda1 mounted on /boot +\end{verbatim} +\end{samepage} + +You can now use guestfish commands to list files and directories and +create files: + +\begin{samepage} +\begin{verbatim} +> ls / +bin +boot +cgroup +[etc] + +> write-append /etc/rc.d/rc.local "service sshd start" + +> cat /etc/rc.d/rc.local +#!/bin/sh +touch /var/lock/subsys/local +service sshd start +\end{verbatim} +\end{samepage} + +Some useful commands include: + +\begin{itemize} +\item[\texttt{cat}] Display small text files. +\item[\texttt{edit}] Edit a file. +\item[\texttt{less}] Display longer files. +\item[\texttt{ll}] List (long) directory. +\item[\texttt{ls}] List directory. +\item[\texttt{mkdir}] Make a directory. +\item[\texttt{rm}] Remove a file. +\item[\texttt{touch}] Touch a file. +\item[\texttt{upload}] Upload a local file to the disk. +\item[\texttt{write}] Create a file with content. +\end{itemize} + +As there are hundreds of commands, it's a good idea to read the +{\em guestfish(1)} and +{\em guestfs(3)}\footnote{\url{http://libguestfs.org/guestfs.3.html}} +man pages. These are also available online at the +website\footnote{\url{http://libguestfs.org}}. + +\section{Introducing virt-rescue} + +virt-rescue\footnote{\url{http://libguestfs.org/virt-rescue.1.html}} +is a good way to rescue virtual machines that don't boot, or just +generally make ad hoc changes to virtual machines. It's like a rescue +CD for virtual machines. + +virt-rescue is a little different from guestfish in that you get an +ordinary shell and ordinary tools. However unlike guestfish, +virt-rescue cannot be used from shell scripts, so it's not useful if +you want to make repeatable changes to lots of your guests. + +You must not use virt-rescue on running VMs. + +If you had a libvirt guest called ``Fedora'' then: + +\begin{samepage} +\begin{verbatim} +# virt-rescue -d Fedora +[lots of boot messages] + +Welcome to virt-rescue, the libguestfs rescue shell. + +Note: The contents of / are the rescue appliance. +You have to mount the guest's partitions under /sysroot +before you can examine them. + +> lvs + LV VG Attr LSize Origin Snap% Move Log Copy% Convert + lv_root vg_f13x64 -wi-a- 7.56g + lv_swap vg_f13x64 -wi-a- 1.94g +> mount /dev/vg_f13x64/lv_root /sysroot/ +[ 107.912813] EXT4-fs (dm-0): mounted filesystem with ordered data mode. +Opts: (null) +> ls -l /sysroot/etc/fstab +-rw-r--r--. 1 root root 781 Sep 16 2010 /sysroot/etc/fstab +> vi /sysroot/etc/fstab +\end{verbatim} +\end{samepage} + +There is a lot more information about virt-rescue in the +man page {\em virt-rescue(1)}. + +\section{New features in libguestfs 1.20} + +At the end of this year (2012) we hope to make a major new release of +libguestfs. Since the last version was released in May 2012, this +represents over 6 months of development effort, and it includes and +uses some major new features from KVM. + +The new version will (optionally) use libvirt to manage the libguestfs +appliance. From the point of view of libguestfs this hides the +complexity of dealing with the qemu command line. It also lets us +leverage libvirt for: + +\begin{itemize} +\item[security] +The appliance will now be encapsulated with sVirt (SELinux or +AppArmor) to prevent a malicious guest from being able to take over +the qemu process and escape to attack the host. +\item[remote access] +libvirt will provide remote access to guests, using the ordinary +libvirt remote URIs. +\end{itemize} + +We are also using new features from KVM: + +\begin{itemize} +\item[virtio-scsi] +The primary new feature is Paolo Bonzini's virtio-scsi driver, +which is far superior in both performance and features compared +to virtio-blk. +\item[up to 255 disks] +With virtio-scsi, we can now access up to 255 disks at a time, +and possibly many more in future. +\item[hot-plugging of disks] +With virtio-scsi and libvirt together we are able to hotplug +(add and remove) disks, giving libguestfs users a lot more +performance and flexibility. +\item[sparsification] +Coming soon, we'll be able to trim filesystems and cause +the host backing file to become sparse. +\item[qcow2 v3] +We use the new version of qcow2 wherever possible because of +its performance benefits. +\end{itemize} + +\newpage +\appendix +\section{Example: how to inspect a virtual machine disk} +\label{perlexample} + +\begin{verbatim} +#!/usr/bin/perl -w + +use strict; +use Sys::Guestfs; + +if (@ARGV < 1) { + die "usage: inspect_vm disk.img" +} + +my $disk = $ARGV[0]; + +my $g = new Sys::Guestfs (); +$g->add_drive_opts ($disk, readonly => 1); +$g->launch (); + +# Ask libguestfs to inspect for operating systems. +my @roots = $g->inspect_os (); +if (@roots == 0) { + die "inspect_vm: no operating systems found"; +} + +for my $root (@roots) { + # Print basic information about the operating system. + printf " Product name: %s\n", + $g->inspect_get_product_name ($root); + printf " Version: %d.%d\n", + $g->inspect_get_major_version ($root), + $g->inspect_get_minor_version ($root); + + # Mount up the disks, like guestfish -i. + my %mps = $g->inspect_get_mountpoints ($root); + my @mps = sort { length $a <=> length $b } (keys %mps); + for my $mp (@mps) { + eval { $g->mount_ro ($mps{$mp}, $mp) }; + if ($@) { + print "$@ (ignored)\n" + } + } + + # If /etc/issue.net file exists, print up to 3 lines. + my $filename = "/etc/issue.net"; + if ($g->is_file ($filename)) { + printf "--- %s ---\n", $filename; + my @lines = $g->head_n (3, $filename); + print "$_\n" foreach @lines; + } + + # Unmount everything. + $g->umount_all () +} +\end{verbatim} + +\end{document} \ No newline at end of file diff --git a/2012-kvm-forum/handout/Makefile b/2012-kvm-forum/handout/Makefile new file mode 100644 index 0000000..77f44b3 --- /dev/null +++ b/2012-kvm-forum/handout/Makefile @@ -0,0 +1,18 @@ +all: 2012-kvm-forum-rjones-libguestfs.pdf + +SOURCES = \ + 2012-kvm-forum-rjones-libguestfs.tex + +log = 2012-kvm-forum-rjones-libguestfs.log + +2012-kvm-forum-rjones-libguestfs.pdf: $(SOURCES) + pdflatex $< + @if grep -q "LaTeX Warning: There were undefined references" $(log) || \ + grep -q "Rerun to get cross-references right" $(log); \ + then \ + echo "Rerunning to fix references ..."; \ + pdflatex $<; \ + fi + +clean: + rm -f 2012-kvm-forum-rjones-libguestfs.{aux,log,dvi,pdf} diff --git a/2012-kvm-forum/kvm-forum.png b/2012-kvm-forum/kvm-forum.png new file mode 100644 index 0000000000000000000000000000000000000000..aaee10efb68bb006a5d2451211d95e4ef4ce0c8e GIT binary patch literal 23329 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 literal 0 HcmV?d00001 diff --git a/2012-kvm-forum/newfeatures-svirt.svg b/2012-kvm-forum/newfeatures-svirt.svg new file mode 100644 index 0000000..f426f49 --- /dev/null +++ b/2012-kvm-forum/newfeatures-svirt.svg @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + libvirt + + + qemu/kernel + + + + + + + { + + + libguestfs + + + + + sVirt / SELinux + + diff --git a/2012-kvm-forum/newfeatures.svg b/2012-kvm-forum/newfeatures.svg new file mode 100644 index 0000000..ba54f1c --- /dev/null +++ b/2012-kvm-forum/newfeatures.svg @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + libvirt + virtio-scsi + + + + qemu/kernel + + + + + + + + { + + + libguestfs + + + + + + New in qemu + New in libguestfs + + diff --git a/2012-kvm-forum/notes.txt b/2012-kvm-forum/notes.txt new file mode 100644 index 0000000..91b7964 --- /dev/null +++ b/2012-kvm-forum/notes.txt @@ -0,0 +1,108 @@ +libguestfs Barcelona talk (20 minutes) + + "Libguestfs is a C library that provides a way to access and + modify virtual machine disk images. It uses qemu and the Linux + kernel, so we can manipulate just about any disk image, + filesystem, partitioning scheme, LVM, Windows disks, and more. + Above this layer are many specialized "virt-*" tools for carrying + out specific tasks. + + In this talk, Richard Jones will give a live demonstration of + libguestfs and the virt tools, and talk about the new features + available in libguestfs 1.20." + + email slides to: cfp@linuxfoundation.org + +---------------------------------------------------------------------- + +Audience: + - KVM developers + +Interested in: + - What they can use it for + - How it works + - Problems with KVM + - New features, particularly ones which use new features in KVM + +What do they want to do with images: + - Viewing and file injection for personal use + - Use in management tools like oVirt, OpenStack + +New features of interest: + - libvirt management of appliance + . sVirt / SELinux + . remote access + - virtio-scsi + . lots of disks + . hot plugging of disks + . sparsification + +[---- OVERVIEW ----] + +C library +nearly 400 different API calls + +handout and website contains example programs + + NEXT SLIDE: 0300 + +manages a qemu subprocess, running a minimal Linux + distro that we call the "appliance" + +uses kernel code, qemu so supports + - qcow2 + - VMDK + - all filesystems + - partitioning + - LVM + - etc + +doesn't need root, doesn't create device nodes, is + secure and well-behaved + + NEXT SLIDE: 0400 + +around the API is a whole ecosystem of tools, programs +and external projects + + - virt tools, in C, Perl, OCaml + - OpenStack (Python) + - BoxGrinder (Ruby) + - Oz (Python) + - virt-p2v, virt-v2v (Perl) + + +[---- NEW FEATURES IN LIBGUESTFS 1.20 ----] + +libguestfs 1.20 should be released at the end of this year, after +a very long (7 month) development cycle. + +Two major changes: + + - libvirt + - virtio-scsi + +Implies: + + . sVirt / SELinux + . remote access + . 255 disks + . hot plugging of disks + + + +[---- FUTURE WORK IN KVM ----] + + +[---- SUMMARY ----] + +Website: + + - code + - examples + - manual pages and documentation + +There is a PDF handout which contains more background material. + +This talk and others are available from the libguestfs-talks +git repository. diff --git a/2012-kvm-forum/openstack.png b/2012-kvm-forum/openstack.png new file mode 100644 index 0000000000000000000000000000000000000000..146faec5cfe3773824f4caf39e4480e4974d10df GIT binary patch literal 3670 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 literal 0 HcmV?d00001 diff --git a/2012-kvm-forum/overview.svg b/2012-kvm-forum/overview.svg new file mode 100644 index 0000000..c22dc16 --- /dev/null +++ b/2012-kvm-forum/overview.svg @@ -0,0 +1,797 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + libguestfs.so + + + + Python + + + + OCaml + + + + guestfish + + + + + virt-resize + + + + virt-df + + + + virt-sparsify + + + + virt-sysprep + + + + virt-edit + + + + + qemu/kernel + + + + + + + + + + + + + + + + + + Perl + + { + + + Ruby + + + diff --git a/2012-kvm-forum/redhat.png b/2012-kvm-forum/redhat.png new file mode 100644 index 0000000000000000000000000000000000000000..f50076ad8e004c4b299f28c79526e98f7c8a3d8d GIT binary patch literal 4763 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 literal 0 HcmV?d00001 diff --git a/2012-kvm-forum/run b/2012-kvm-forum/run new file mode 100755 index 0000000..e65e52d --- /dev/null +++ b/2012-kvm-forum/run @@ -0,0 +1,16 @@ +#!/bin/bash - +# Run the talk. + +# Avoid GNOME keyring stupidity +export GNOME_KEYRING_CONTROL= +export GNOME_KEYRING_PID= + +# Clean up everything. +find -name '*~' -delete + +# Get everything into the cache. +guestfish -a /dev/null run > /dev/null +guestfish --ro -a 0400-guestfish.d/disk.img -i exit > /dev/null + +# Run techtalk. +techtalk-pse diff --git a/2012-kvm-forum/style.css b/2012-kvm-forum/style.css new file mode 100644 index 0000000..f11ec9a --- /dev/null +++ b/2012-kvm-forum/style.css @@ -0,0 +1,67 @@ +/* Red Hat red is rgb(204,0,0). */ + +body { + background: url(redhat.png) no-repeat; + background-position: 98% 0; + font-size: 24pt; /* For max */ + /* font-size: 20pt; */ /* For 1024x768 */ + /* font-family: liberation, helvetica; */ + font-family: helvetica; +} + +body td { /* why?? */ + /*font-size: 28pt;*/ + font-size: 20pt; +} + +h1 { + color: rgb(204,0,0); + /*font-size: 48px;*/ + font-size: 40px; + top: 8; + left: 0; + border-bottom: 2px solid rgb(204,0,0); +} + +b { + color: rgb(204,0,0); +} + +div#titlepage { + margin-top: 100px; + text-align: center; +} + +div#titlepage p.title { + color: rgb(204,0,0); + font-weight: bold; + font-size: 48px; +} + +div#titlepage author { + font-size: 36px; +} + +/* Code */ +pre.code { + margin-left: 1em; + background: #eee; +} + +code { + color: rgb(204,0,0); +} + +/* Bullet points */ +li { + padding-bottom: 16px; +} + +/* Logo */ +img#fish { + position: absolute; + top: 128px; + right: 32px; + width: 200px; + /*height: 256px;*/ +} \ No newline at end of file -- 1.8.3.1