[{"data":1,"prerenderedAt":4711},["ShallowReactive",2],{"blog-\u002Fen\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr":3,"blog-\u002Fen\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr-surround":4650,"blog-\u002Fen\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr-certifications":4710},{"id":4,"title":5,"body":6,"categories":4639,"cover":4640,"cover_contain":457,"credly_badge_id":4639,"date":4641,"description":4642,"extension":4643,"meta":4644,"navigation":457,"path":4645,"related_certifications":4639,"seo":4646,"slug":4647,"stem":4648,"__hash__":4649},"blog\u002Fen\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr.md","Migrating to KVM with WebVirtMgr",{"type":7,"value":8,"toc":4617},"minimark",[9,14,18,22,25,36,42,46,66,69,76,81,88,94,105,109,116,148,166,171,196,201,227,230,243,247,250,279,282,313,330,364,367,380,383,395,398,414,417,429,432,1342,1345,1358,1738,1741,1801,1804,1823,1826,1857,1860,1898,1901,1914,1917,1930,1977,1982,1985,1988,2012,2015,2019,2022,2046,2056,2061,2065,2068,2073,2113,2118,2264,2267,2272,2275,2280,2284,2287,2328,2331,2335,2338,2344,2349,2355,2360,2363,2400,2414,2419,2422,2427,2444,2448,2462,2467,2470,2475,2479,2500,2509,2890,2903,2906,2924,2930,2935,2946,3210,3216,3229,3232,3244,3363,3366,3392,3395,3420,3423,3462,3465,3477,3545,3555,3613,3616,3621,3624,3642,3645,3659,3663,3666,3671,3674,3679,3689,3712,3715,3738,3741,3798,3801,3806,3809,3814,3817,4041,4046,4054,4058,4061,4077,4081,4084,4089,4093,4099,4111,4114,4417,4428,4590,4603,4606,4610,4613],[10,11,13],"h2",{"id":12},"real-world-use-case","Real-world use case",[15,16,17],"p",{},"You want to manage your migration to KVM from a web interface rather than the command line: here's how to proceed with WebVirtMgr.",[10,19,21],{"id":20},"a-migration-geared-toward-open-source","A migration geared toward open source",[15,23,24],{},"To ensure the longevity and stability of my infrastructure, I chose KVM: an open, interoperable standard with immense features. More specifically, this new project fits into my desire to stay as close as possible to my Linux system. KVM is present in the largest cloud computing projects: OpenStack, OpenNebula, oVirt, and many others.",[15,26,27,28,35],{},"In addition to KVM, there's also this fabulous container system called Docker, which itself is entirely based on Linux. Both represent wonderful learning opportunities for understanding the cloud. KVM management will largely be done with an HTML5 interface. For Docker, there's ",[29,30,34],"a",{"href":31,"rel":32},"http:\u002F\u002Fshipyard-project.com\u002F",[33],"nofollow","Shipyard",", which I won't cover in this article.",[15,37,38],{},[39,40,41],"em",{},"My entire article is based mainly on the KVM wiki, the WebVirtMgr wiki, and libvirt.",[10,43,45],{"id":44},"the-saas-solution-webvirtmgr","The SaaS solution: WebVirtMgr",[15,47,48,49,52,55,56,63],{},"WebVirtMgr presents itself as a web interface built with Bootstrap. It uses the libvirt API to manage the hypervisor(s), networks, interfaces, storage, and VMs. Access to the VM is done via a VNC console (novnc) or HTML5 \"spice\".",[50,51],"br",{},[39,53,54],{},"More information at:"," ",[29,57,60],{"href":58,"rel":59},"https:\u002F\u002Fgithub.com\u002Fretspen\u002Fwebvirtmgr\u002Fwiki\u002FScreenshots",[33],[39,61,62],{},"webvirtmgr",[39,64,65],{},".",[15,67,68],{},"Here's an illustration of my infrastructure:",[15,70,71],{},[72,73],"img",{"alt":74,"src":75},"","\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F7196799410.png",[77,78,80],"h3",{"id":79},"webvirtmgr-and-the-kvmqemu-hypervisor","WebVirtMgr and the KVM\u002FQEMU hypervisor",[15,82,83,87],{},[84,85,86],"strong",{},"KVM"," (Kernel Virtual Machine) is a Linux kernel module that lets a userspace program use the hardware virtualization features of various processors. Today, it supports recent Intel processors and AMD processors (x86 and x86_64), PPC 440, PPC 970, S\u002F390, ARM (Cortex A15), and MIPS32 (processor emulation).",[15,89,90,93],{},[84,91,92],{},"QEMU"," can make use of KVM when running a target architecture that's the same as the host architecture. For example, when running qemu-system-x86 on an x86-compatible processor, you can take advantage of KVM acceleration, benefiting both your host and your guest system (virtual machine emulation).",[15,95,96,55,99],{},[39,97,98],{},"Source:",[29,100,103],{"href":101,"rel":102},"http:\u002F\u002Fwiki.qemu.org\u002FKVM",[33],[39,104,101],{},[77,106,108],{"id":107},"prerequisites-before-installation","Prerequisites before installation",[110,111,112],"ul",{},[113,114,115],"li",{},"The processor must be compatible with virtualization technologies:",[117,118,122],"pre",{"className":119,"code":120,"language":121,"meta":74,"style":74},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","egrep '^flags.*(vmx|svm)' \u002Fproc\u002Fcpuinfo\n","bash",[123,124,125],"code",{"__ignoreMap":74},[126,127,130,134,138,142,145],"span",{"class":128,"line":129},"line",1,[126,131,133],{"class":132},"sBMFI","egrep",[126,135,137],{"class":136},"sMK4o"," '",[126,139,141],{"class":140},"sfazB","^flags.*(vmx|svm)",[126,143,144],{"class":136},"'",[126,146,147],{"class":140}," \u002Fproc\u002Fcpuinfo\n",[15,149,150,151,153,154,159,160,165],{},"If a result appears, then your processor is capable. Otherwise, your processor doesn't support virtualization.",[50,152],{},"\nNo worries! There's ",[29,155,158],{"href":156,"rel":157},"http:\u002F\u002Fvfamilyserver.org\u002Fblog\u002F2014\u002F11\u002Fwebvirtmgr-with-lxc-support\u002F",[33],"webvirtmgr with lxc"," and of course Docker: ",[29,161,164],{"href":162,"rel":163},"https:\u002F\u002Fwww.camillebaronnet.fr\u002Fblog\u002Ffr\u002Ftuto-decouverte-de-docker",[33],"check it out","!",[110,167,168],{},[113,169,170],{},"Install the following packages:",[117,172,174],{"className":119,"code":173,"language":121,"meta":74,"style":74},"apt-get install kvm libvirt-bin bridge-utils sasl2-bin\n",[123,175,176],{"__ignoreMap":74},[126,177,178,181,184,187,190,193],{"class":128,"line":129},[126,179,180],{"class":132},"apt-get",[126,182,183],{"class":140}," install",[126,185,186],{"class":140}," kvm",[126,188,189],{"class":140}," libvirt-bin",[126,191,192],{"class":140}," bridge-utils",[126,194,195],{"class":140}," sasl2-bin\n",[110,197,198],{},[113,199,200],{},"Download retspen's script and run it:",[117,202,204],{"className":119,"code":203,"language":121,"meta":74,"style":74},"wget http:\u002F\u002Fretspen.github.io\u002Flibvirt-bootstrap.sh \nsh libvirt-bootstrap.sh\n",[123,205,206,218],{"__ignoreMap":74},[126,207,208,211,214],{"class":128,"line":129},[126,209,210],{"class":132},"wget",[126,212,213],{"class":140}," http:\u002F\u002Fretspen.github.io\u002Flibvirt-bootstrap.sh",[126,215,217],{"class":216},"sTEyZ"," \n",[126,219,221,224],{"class":128,"line":220},2,[126,222,223],{"class":132},"sh",[126,225,226],{"class":140}," libvirt-bootstrap.sh\n",[15,228,229],{},"For your information, at the end of the script you should have the following services running:",[110,231,232,238],{},[113,233,234,237],{},[126,235,236],{}," ok"," Starting system message bus: dbus.",[113,239,240,242],{},[126,241,236],{}," Starting libvirt management daemon: libvirtd.",[10,244,246],{"id":245},"installing-webvirtmgr","Installing WebVirtMgr",[15,248,249],{},"WebVirtMgr needs the following packages to work:",[117,251,253],{"className":119,"code":252,"language":121,"meta":74,"style":74},"apt-get install git python-pip python-libvirt python-libxml2 novnc supervisor\n",[123,254,255],{"__ignoreMap":74},[126,256,257,259,261,264,267,270,273,276],{"class":128,"line":129},[126,258,180],{"class":132},[126,260,183],{"class":140},[126,262,263],{"class":140}," git",[126,265,266],{"class":140}," python-pip",[126,268,269],{"class":140}," python-libvirt",[126,271,272],{"class":140}," python-libxml2",[126,274,275],{"class":140}," novnc",[126,277,278],{"class":140}," supervisor\n",[15,280,281],{},"During the (long) installation, several questions will appear:",[117,283,285],{"className":119,"code":284,"language":121,"meta":74,"style":74},"should a database be installed for NOVA: yes\n",[123,286,287],{"__ignoreMap":74},[126,288,289,292,295,298,301,304,307,310],{"class":128,"line":129},[126,290,291],{"class":132},"should",[126,293,294],{"class":140}," a",[126,296,297],{"class":140}," database",[126,299,300],{"class":140}," be",[126,302,303],{"class":140}," installed",[126,305,306],{"class":140}," for",[126,308,309],{"class":140}," NOVA:",[126,311,312],{"class":140}," yes\n",[117,314,316],{"className":119,"code":315,"language":121,"meta":74,"style":74},"should nova-common's database be configured with dbconfig-common: yes\n",[123,317,318],{"__ignoreMap":74},[126,319,320,322,325,327],{"class":128,"line":129},[126,321,291],{"class":132},[126,323,324],{"class":140}," nova-common",[126,326,144],{"class":136},[126,328,329],{"class":140},"s database be configured with dbconfig-common: yes\n",[117,331,333],{"className":119,"code":332,"language":121,"meta":74,"style":74},"type of database server to use with nova-common! sqlite3\n",[123,334,335],{"__ignoreMap":74},[126,336,337,341,344,346,349,352,355,358,361],{"class":128,"line":129},[126,338,340],{"class":339},"s2Zo4","type",[126,342,343],{"class":140}," of",[126,345,297],{"class":140},[126,347,348],{"class":140}," server",[126,350,351],{"class":140}," to",[126,353,354],{"class":140}," use",[126,356,357],{"class":140}," with",[126,359,360],{"class":140}," nova-common!",[126,362,363],{"class":140}," sqlite3\n",[15,365,366],{},"The next step consists of configuring Python and the \"django\" environment:",[117,368,370],{"className":119,"code":369,"language":121,"meta":74,"style":74},"mkdir \u002Fvar\u002Fwww\n",[123,371,372],{"__ignoreMap":74},[126,373,374,377],{"class":128,"line":129},[126,375,376],{"class":132},"mkdir",[126,378,379],{"class":140}," \u002Fvar\u002Fwww\n",[15,381,382],{},"Move into the www directory:",[117,384,386],{"className":119,"code":385,"language":121,"meta":74,"style":74},"cd \u002Fvar\u002Fwww\n",[123,387,388],{"__ignoreMap":74},[126,389,390,393],{"class":128,"line":129},[126,391,392],{"class":339},"cd",[126,394,379],{"class":140},[15,396,397],{},"Download the WebVirtMgr git repo:",[117,399,401],{"className":119,"code":400,"language":121,"meta":74,"style":74},"git clone git:\u002F\u002Fgithub.com\u002Fretspen\u002Fwebvirtmgr.git\n",[123,402,403],{"__ignoreMap":74},[126,404,405,408,411],{"class":128,"line":129},[126,406,407],{"class":132},"git",[126,409,410],{"class":140}," clone",[126,412,413],{"class":140}," git:\u002F\u002Fgithub.com\u002Fretspen\u002Fwebvirtmgr.git\n",[15,415,416],{},"Go to the following directory:",[117,418,420],{"className":119,"code":419,"language":121,"meta":74,"style":74},"cd webvirtmgr\n",[123,421,422],{"__ignoreMap":74},[126,423,424,426],{"class":128,"line":129},[126,425,392],{"class":339},[126,427,428],{"class":140}," webvirtmgr\n",[15,430,431],{},"The pip tool is used because it will quickly install and automatically download the required dependencies:",[117,433,435],{"className":119,"code":434,"language":121,"meta":74,"style":74},"sudo pip install -r requirements.txt\n\nDownloading\u002Funpacking django==1.5.5 (from -r requirements.txt (line 1))\n  Downloading Django-1.5.5.tar.gz (8.1MB): 8.1MB downloaded\n  Running setup.py (path:\u002Ftmp\u002Fpip_build_root\u002Fdjango\u002Fsetup.py) egg_info for package django\n\n    warning: no previously-included files matching '__pycache__' found under directory '*'\n    warning: no previously-included files matching '*.py[co]' found under directory '*'\nDownloading\u002Funpacking gunicorn==18.0 (from -r requirements.txt (line 2))\n  Downloading gunicorn-18.0.tar.gz (366kB): 366kB downloaded\n  Running setup.py (path:\u002Ftmp\u002Fpip_build_root\u002Fgunicorn\u002Fsetup.py) egg_info for package gunicorn\n\n    warning: no previously-included files matching '*.pyc' found under directory 'docs'\n    warning: no previously-included files matching '*.pyo' found under directory 'docs'\n    warning: no previously-included files matching '*.pyc' found under directory 'tests'\n    warning: no previously-included files matching '*.pyo' found under directory 'tests'\n    warning: no previously-included files matching '*.pyc' found under directory 'examples'\n    warning: no previously-included files matching '*.pyo' found under directory 'examples'\nDownloading\u002Funpacking lockfile>=0.9 (from -r requirements.txt (line 5))\n  Downloading lockfile-0.10.2-py2-none-any.whl\nInstalling collected packages: django, gunicorn, lockfile\n  Running setup.py install for django\n    changing mode of build\u002Fscripts-2.7\u002Fdjango-admin.py from 644 to 755\n\n    warning: no previously-included files matching '__pycache__' found under directory '*'\n    warning: no previously-included files matching '*.py[co]' found under directory '*'\n    changing mode of \u002Fusr\u002Flocal\u002Fbin\u002Fdjango-admin.py to 755\n  Running setup.py install for gunicorn\n\n    warning: no previously-included files matching '*.pyc' found under directory 'docs'\n    warning: no previously-included files matching '*.pyo' found under directory 'docs'\n    warning: no previously-included files matching '*.pyc' found under directory 'tests'\n    warning: no previously-included files matching '*.pyo' found under directory 'tests'\n    warning: no previously-included files matching '*.pyc' found under directory 'examples'\n    warning: no previously-included files matching '*.pyo' found under directory 'examples'\n    Installing gunicorn_paster script to \u002Fusr\u002Flocal\u002Fbin\n    Installing gunicorn script to \u002Fusr\u002Flocal\u002Fbin\n    Installing gunicorn_django script to \u002Fusr\u002Flocal\u002Fbin\n  Found existing installation: lockfile 0.8\n    Uninstalling lockfile:\n      Successfully uninstalled lockfile\nSuccessfully installed django gunicorn lockfile\nCleaning up...\n",[123,436,437,453,459,490,502,521,526,568,600,624,635,650,655,688,720,752,783,815,846,879,887,908,922,947,952,983,1014,1030,1044,1049,1080,1111,1142,1173,1204,1235,1252,1266,1280,1298,1307,1318,1333],{"__ignoreMap":74},[126,438,439,442,445,447,450],{"class":128,"line":129},[126,440,441],{"class":132},"sudo",[126,443,444],{"class":140}," pip",[126,446,183],{"class":140},[126,448,449],{"class":140}," -r",[126,451,452],{"class":140}," requirements.txt\n",[126,454,455],{"class":128,"line":220},[126,456,458],{"emptyLinePlaceholder":457},true,"\n",[126,460,462,465,468,472,475,478,481,484,487],{"class":128,"line":461},3,[126,463,464],{"class":132},"Downloading\u002Funpacking",[126,466,467],{"class":140}," django==",[126,469,471],{"class":470},"sbssI","1.5.5",[126,473,474],{"class":216}," (from ",[126,476,477],{"class":140},"-r",[126,479,480],{"class":140}," requirements.txt",[126,482,483],{"class":216}," (line ",[126,485,486],{"class":470},"1",[126,488,489],{"class":216},"))\n",[126,491,493,496,499],{"class":128,"line":492},4,[126,494,495],{"class":132},"  Downloading",[126,497,498],{"class":140}," Django-1.5.5.tar.gz",[126,500,501],{"class":216}," (8.1MB): 8.1MB downloaded\n",[126,503,505,508,511,514,518],{"class":128,"line":504},5,[126,506,507],{"class":132},"  Running",[126,509,510],{"class":140}," setup.py",[126,512,513],{"class":216}," (path:\u002Ftmp\u002Fpip_build_root\u002Fdjango\u002Fsetup.py) egg_info ",[126,515,517],{"class":516},"s7zQu","for",[126,519,520],{"class":216}," package django\n",[126,522,524],{"class":128,"line":523},6,[126,525,458],{"emptyLinePlaceholder":457},[126,527,529,532,535,538,541,544,546,549,551,554,557,560,562,565],{"class":128,"line":528},7,[126,530,531],{"class":132},"    warning:",[126,533,534],{"class":140}," no",[126,536,537],{"class":140}," previously-included",[126,539,540],{"class":140}," files",[126,542,543],{"class":140}," matching",[126,545,137],{"class":136},[126,547,548],{"class":140},"__pycache__",[126,550,144],{"class":136},[126,552,553],{"class":140}," found",[126,555,556],{"class":140}," under",[126,558,559],{"class":140}," directory",[126,561,137],{"class":136},[126,563,564],{"class":140},"*",[126,566,567],{"class":136},"'\n",[126,569,571,573,575,577,579,581,583,586,588,590,592,594,596,598],{"class":128,"line":570},8,[126,572,531],{"class":132},[126,574,534],{"class":140},[126,576,537],{"class":140},[126,578,540],{"class":140},[126,580,543],{"class":140},[126,582,137],{"class":136},[126,584,585],{"class":140},"*.py[co]",[126,587,144],{"class":136},[126,589,553],{"class":140},[126,591,556],{"class":140},[126,593,559],{"class":140},[126,595,137],{"class":136},[126,597,564],{"class":140},[126,599,567],{"class":136},[126,601,603,605,608,611,613,615,617,619,622],{"class":128,"line":602},9,[126,604,464],{"class":132},[126,606,607],{"class":140}," gunicorn==",[126,609,610],{"class":470},"18.0",[126,612,474],{"class":216},[126,614,477],{"class":140},[126,616,480],{"class":140},[126,618,483],{"class":216},[126,620,621],{"class":470},"2",[126,623,489],{"class":216},[126,625,627,629,632],{"class":128,"line":626},10,[126,628,495],{"class":132},[126,630,631],{"class":140}," gunicorn-18.0.tar.gz",[126,633,634],{"class":216}," (366kB): 366kB downloaded\n",[126,636,638,640,642,645,647],{"class":128,"line":637},11,[126,639,507],{"class":132},[126,641,510],{"class":140},[126,643,644],{"class":216}," (path:\u002Ftmp\u002Fpip_build_root\u002Fgunicorn\u002Fsetup.py) egg_info ",[126,646,517],{"class":516},[126,648,649],{"class":216}," package gunicorn\n",[126,651,653],{"class":128,"line":652},12,[126,654,458],{"emptyLinePlaceholder":457},[126,656,658,660,662,664,666,668,670,673,675,677,679,681,683,686],{"class":128,"line":657},13,[126,659,531],{"class":132},[126,661,534],{"class":140},[126,663,537],{"class":140},[126,665,540],{"class":140},[126,667,543],{"class":140},[126,669,137],{"class":136},[126,671,672],{"class":140},"*.pyc",[126,674,144],{"class":136},[126,676,553],{"class":140},[126,678,556],{"class":140},[126,680,559],{"class":140},[126,682,137],{"class":136},[126,684,685],{"class":140},"docs",[126,687,567],{"class":136},[126,689,691,693,695,697,699,701,703,706,708,710,712,714,716,718],{"class":128,"line":690},14,[126,692,531],{"class":132},[126,694,534],{"class":140},[126,696,537],{"class":140},[126,698,540],{"class":140},[126,700,543],{"class":140},[126,702,137],{"class":136},[126,704,705],{"class":140},"*.pyo",[126,707,144],{"class":136},[126,709,553],{"class":140},[126,711,556],{"class":140},[126,713,559],{"class":140},[126,715,137],{"class":136},[126,717,685],{"class":140},[126,719,567],{"class":136},[126,721,723,725,727,729,731,733,735,737,739,741,743,745,747,750],{"class":128,"line":722},15,[126,724,531],{"class":132},[126,726,534],{"class":140},[126,728,537],{"class":140},[126,730,540],{"class":140},[126,732,543],{"class":140},[126,734,137],{"class":136},[126,736,672],{"class":140},[126,738,144],{"class":136},[126,740,553],{"class":140},[126,742,556],{"class":140},[126,744,559],{"class":140},[126,746,137],{"class":136},[126,748,749],{"class":140},"tests",[126,751,567],{"class":136},[126,753,755,757,759,761,763,765,767,769,771,773,775,777,779,781],{"class":128,"line":754},16,[126,756,531],{"class":132},[126,758,534],{"class":140},[126,760,537],{"class":140},[126,762,540],{"class":140},[126,764,543],{"class":140},[126,766,137],{"class":136},[126,768,705],{"class":140},[126,770,144],{"class":136},[126,772,553],{"class":140},[126,774,556],{"class":140},[126,776,559],{"class":140},[126,778,137],{"class":136},[126,780,749],{"class":140},[126,782,567],{"class":136},[126,784,786,788,790,792,794,796,798,800,802,804,806,808,810,813],{"class":128,"line":785},17,[126,787,531],{"class":132},[126,789,534],{"class":140},[126,791,537],{"class":140},[126,793,540],{"class":140},[126,795,543],{"class":140},[126,797,137],{"class":136},[126,799,672],{"class":140},[126,801,144],{"class":136},[126,803,553],{"class":140},[126,805,556],{"class":140},[126,807,559],{"class":140},[126,809,137],{"class":136},[126,811,812],{"class":140},"examples",[126,814,567],{"class":136},[126,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844],{"class":128,"line":817},18,[126,819,531],{"class":132},[126,821,534],{"class":140},[126,823,537],{"class":140},[126,825,540],{"class":140},[126,827,543],{"class":140},[126,829,137],{"class":136},[126,831,705],{"class":140},[126,833,144],{"class":136},[126,835,553],{"class":140},[126,837,556],{"class":140},[126,839,559],{"class":140},[126,841,137],{"class":136},[126,843,812],{"class":140},[126,845,567],{"class":136},[126,847,849,851,854,857,860,863,866,868,870,872,874,877],{"class":128,"line":848},19,[126,850,464],{"class":132},[126,852,853],{"class":140}," lockfil",[126,855,856],{"class":216},"e",[126,858,859],{"class":136},">",[126,861,862],{"class":140},"=",[126,864,865],{"class":470},"0.9",[126,867,474],{"class":216},[126,869,477],{"class":140},[126,871,480],{"class":140},[126,873,483],{"class":216},[126,875,876],{"class":470},"5",[126,878,489],{"class":216},[126,880,882,884],{"class":128,"line":881},20,[126,883,495],{"class":132},[126,885,886],{"class":140}," lockfile-0.10.2-py2-none-any.whl\n",[126,888,890,893,896,899,902,905],{"class":128,"line":889},21,[126,891,892],{"class":132},"Installing",[126,894,895],{"class":140}," collected",[126,897,898],{"class":140}," packages:",[126,900,901],{"class":140}," django,",[126,903,904],{"class":140}," gunicorn,",[126,906,907],{"class":140}," lockfile\n",[126,909,911,913,915,917,919],{"class":128,"line":910},22,[126,912,507],{"class":132},[126,914,510],{"class":140},[126,916,183],{"class":140},[126,918,306],{"class":140},[126,920,921],{"class":140}," django\n",[126,923,925,928,931,933,936,939,942,944],{"class":128,"line":924},23,[126,926,927],{"class":132},"    changing",[126,929,930],{"class":140}," mode",[126,932,343],{"class":140},[126,934,935],{"class":140}," build\u002Fscripts-2.7\u002Fdjango-admin.py",[126,937,938],{"class":140}," from",[126,940,941],{"class":470}," 644",[126,943,351],{"class":140},[126,945,946],{"class":470}," 755\n",[126,948,950],{"class":128,"line":949},24,[126,951,458],{"emptyLinePlaceholder":457},[126,953,955,957,959,961,963,965,967,969,971,973,975,977,979,981],{"class":128,"line":954},25,[126,956,531],{"class":132},[126,958,534],{"class":140},[126,960,537],{"class":140},[126,962,540],{"class":140},[126,964,543],{"class":140},[126,966,137],{"class":136},[126,968,548],{"class":140},[126,970,144],{"class":136},[126,972,553],{"class":140},[126,974,556],{"class":140},[126,976,559],{"class":140},[126,978,137],{"class":136},[126,980,564],{"class":140},[126,982,567],{"class":136},[126,984,986,988,990,992,994,996,998,1000,1002,1004,1006,1008,1010,1012],{"class":128,"line":985},26,[126,987,531],{"class":132},[126,989,534],{"class":140},[126,991,537],{"class":140},[126,993,540],{"class":140},[126,995,543],{"class":140},[126,997,137],{"class":136},[126,999,585],{"class":140},[126,1001,144],{"class":136},[126,1003,553],{"class":140},[126,1005,556],{"class":140},[126,1007,559],{"class":140},[126,1009,137],{"class":136},[126,1011,564],{"class":140},[126,1013,567],{"class":136},[126,1015,1017,1019,1021,1023,1026,1028],{"class":128,"line":1016},27,[126,1018,927],{"class":132},[126,1020,930],{"class":140},[126,1022,343],{"class":140},[126,1024,1025],{"class":140}," \u002Fusr\u002Flocal\u002Fbin\u002Fdjango-admin.py",[126,1027,351],{"class":140},[126,1029,946],{"class":470},[126,1031,1033,1035,1037,1039,1041],{"class":128,"line":1032},28,[126,1034,507],{"class":132},[126,1036,510],{"class":140},[126,1038,183],{"class":140},[126,1040,306],{"class":140},[126,1042,1043],{"class":140}," gunicorn\n",[126,1045,1047],{"class":128,"line":1046},29,[126,1048,458],{"emptyLinePlaceholder":457},[126,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070,1072,1074,1076,1078],{"class":128,"line":1051},30,[126,1053,531],{"class":132},[126,1055,534],{"class":140},[126,1057,537],{"class":140},[126,1059,540],{"class":140},[126,1061,543],{"class":140},[126,1063,137],{"class":136},[126,1065,672],{"class":140},[126,1067,144],{"class":136},[126,1069,553],{"class":140},[126,1071,556],{"class":140},[126,1073,559],{"class":140},[126,1075,137],{"class":136},[126,1077,685],{"class":140},[126,1079,567],{"class":136},[126,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109],{"class":128,"line":1082},31,[126,1084,531],{"class":132},[126,1086,534],{"class":140},[126,1088,537],{"class":140},[126,1090,540],{"class":140},[126,1092,543],{"class":140},[126,1094,137],{"class":136},[126,1096,705],{"class":140},[126,1098,144],{"class":136},[126,1100,553],{"class":140},[126,1102,556],{"class":140},[126,1104,559],{"class":140},[126,1106,137],{"class":136},[126,1108,685],{"class":140},[126,1110,567],{"class":136},[126,1112,1114,1116,1118,1120,1122,1124,1126,1128,1130,1132,1134,1136,1138,1140],{"class":128,"line":1113},32,[126,1115,531],{"class":132},[126,1117,534],{"class":140},[126,1119,537],{"class":140},[126,1121,540],{"class":140},[126,1123,543],{"class":140},[126,1125,137],{"class":136},[126,1127,672],{"class":140},[126,1129,144],{"class":136},[126,1131,553],{"class":140},[126,1133,556],{"class":140},[126,1135,559],{"class":140},[126,1137,137],{"class":136},[126,1139,749],{"class":140},[126,1141,567],{"class":136},[126,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171],{"class":128,"line":1144},33,[126,1146,531],{"class":132},[126,1148,534],{"class":140},[126,1150,537],{"class":140},[126,1152,540],{"class":140},[126,1154,543],{"class":140},[126,1156,137],{"class":136},[126,1158,705],{"class":140},[126,1160,144],{"class":136},[126,1162,553],{"class":140},[126,1164,556],{"class":140},[126,1166,559],{"class":140},[126,1168,137],{"class":136},[126,1170,749],{"class":140},[126,1172,567],{"class":136},[126,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202],{"class":128,"line":1175},34,[126,1177,531],{"class":132},[126,1179,534],{"class":140},[126,1181,537],{"class":140},[126,1183,540],{"class":140},[126,1185,543],{"class":140},[126,1187,137],{"class":136},[126,1189,672],{"class":140},[126,1191,144],{"class":136},[126,1193,553],{"class":140},[126,1195,556],{"class":140},[126,1197,559],{"class":140},[126,1199,137],{"class":136},[126,1201,812],{"class":140},[126,1203,567],{"class":136},[126,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225,1227,1229,1231,1233],{"class":128,"line":1206},35,[126,1208,531],{"class":132},[126,1210,534],{"class":140},[126,1212,537],{"class":140},[126,1214,540],{"class":140},[126,1216,543],{"class":140},[126,1218,137],{"class":136},[126,1220,705],{"class":140},[126,1222,144],{"class":136},[126,1224,553],{"class":140},[126,1226,556],{"class":140},[126,1228,559],{"class":140},[126,1230,137],{"class":136},[126,1232,812],{"class":140},[126,1234,567],{"class":136},[126,1236,1238,1241,1244,1247,1249],{"class":128,"line":1237},36,[126,1239,1240],{"class":132},"    Installing",[126,1242,1243],{"class":140}," gunicorn_paster",[126,1245,1246],{"class":140}," script",[126,1248,351],{"class":140},[126,1250,1251],{"class":140}," \u002Fusr\u002Flocal\u002Fbin\n",[126,1253,1255,1257,1260,1262,1264],{"class":128,"line":1254},37,[126,1256,1240],{"class":132},[126,1258,1259],{"class":140}," gunicorn",[126,1261,1246],{"class":140},[126,1263,351],{"class":140},[126,1265,1251],{"class":140},[126,1267,1269,1271,1274,1276,1278],{"class":128,"line":1268},38,[126,1270,1240],{"class":132},[126,1272,1273],{"class":140}," gunicorn_django",[126,1275,1246],{"class":140},[126,1277,351],{"class":140},[126,1279,1251],{"class":140},[126,1281,1283,1286,1289,1292,1295],{"class":128,"line":1282},39,[126,1284,1285],{"class":132},"  Found",[126,1287,1288],{"class":140}," existing",[126,1290,1291],{"class":140}," installation:",[126,1293,1294],{"class":140}," lockfile",[126,1296,1297],{"class":470}," 0.8\n",[126,1299,1301,1304],{"class":128,"line":1300},40,[126,1302,1303],{"class":132},"    Uninstalling",[126,1305,1306],{"class":140}," lockfile:\n",[126,1308,1310,1313,1316],{"class":128,"line":1309},41,[126,1311,1312],{"class":132},"      Successfully",[126,1314,1315],{"class":140}," uninstalled",[126,1317,907],{"class":140},[126,1319,1321,1324,1326,1329,1331],{"class":128,"line":1320},42,[126,1322,1323],{"class":132},"Successfully",[126,1325,303],{"class":140},[126,1327,1328],{"class":140}," django",[126,1330,1259],{"class":140},[126,1332,907],{"class":140},[126,1334,1336,1339],{"class":128,"line":1335},43,[126,1337,1338],{"class":132},"Cleaning",[126,1340,1341],{"class":140}," up...\n",[15,1343,1344],{},"Start creating the database via django:",[117,1346,1348],{"className":119,"code":1347,"language":121,"meta":74,"style":74},".\u002Fmanage.py syncdb\n",[123,1349,1350],{"__ignoreMap":74},[126,1351,1352,1355],{"class":128,"line":129},[126,1353,1354],{"class":132},".\u002Fmanage.py",[126,1356,1357],{"class":140}," syncdb\n",[117,1359,1361],{"className":119,"code":1360,"language":121,"meta":74,"style":74},"WARNING:root:No local_settings file found.\nCreating tables ...\nCreating table auth_permission\nCreating table auth_group_permissions\nCreating table auth_group\nCreating table auth_user_groups\nCreating table auth_user_user_permissions\nCreating table auth_user\nCreating table django_content_type\nCreating table django_session\nCreating table django_site\nCreating table servers_compute\nCreating table instance_instance\nCreating table create_flavor\n\nYou just installed Django's auth system, which means you don't have any superusers defined.\nWould you like to create one now? (yes\u002Fno): yes\nPlease enter either \"yes\" or \"no\": yes\nPlease enter either \"yes\" or \"no\": yes\nUsername (leave blank to use 'root'): kassianoff\nEmail address: postmaster@kassianoff.fr\nPassword:\nPassword (again):\nSuperuser created successfully.\nInstalling custom SQL ...\nInstalling indexes ...\nInstalled 6 object(s) from 1 fixture(s)\n",[123,1362,1363,1377,1388,1398,1407,1416,1425,1434,1443,1452,1461,1470,1479,1488,1497,1501,1536,1561,1596,1622,1647,1658,1663,1671,1682,1694,1703],{"__ignoreMap":74},[126,1364,1365,1368,1371,1374],{"class":128,"line":129},[126,1366,1367],{"class":132},"WARNING:root:No",[126,1369,1370],{"class":140}," local_settings",[126,1372,1373],{"class":140}," file",[126,1375,1376],{"class":140}," found.\n",[126,1378,1379,1382,1385],{"class":128,"line":220},[126,1380,1381],{"class":132},"Creating",[126,1383,1384],{"class":140}," tables",[126,1386,1387],{"class":140}," ...\n",[126,1389,1390,1392,1395],{"class":128,"line":461},[126,1391,1381],{"class":132},[126,1393,1394],{"class":140}," table",[126,1396,1397],{"class":140}," auth_permission\n",[126,1399,1400,1402,1404],{"class":128,"line":492},[126,1401,1381],{"class":132},[126,1403,1394],{"class":140},[126,1405,1406],{"class":140}," auth_group_permissions\n",[126,1408,1409,1411,1413],{"class":128,"line":504},[126,1410,1381],{"class":132},[126,1412,1394],{"class":140},[126,1414,1415],{"class":140}," auth_group\n",[126,1417,1418,1420,1422],{"class":128,"line":523},[126,1419,1381],{"class":132},[126,1421,1394],{"class":140},[126,1423,1424],{"class":140}," auth_user_groups\n",[126,1426,1427,1429,1431],{"class":128,"line":528},[126,1428,1381],{"class":132},[126,1430,1394],{"class":140},[126,1432,1433],{"class":140}," auth_user_user_permissions\n",[126,1435,1436,1438,1440],{"class":128,"line":570},[126,1437,1381],{"class":132},[126,1439,1394],{"class":140},[126,1441,1442],{"class":140}," auth_user\n",[126,1444,1445,1447,1449],{"class":128,"line":602},[126,1446,1381],{"class":132},[126,1448,1394],{"class":140},[126,1450,1451],{"class":140}," django_content_type\n",[126,1453,1454,1456,1458],{"class":128,"line":626},[126,1455,1381],{"class":132},[126,1457,1394],{"class":140},[126,1459,1460],{"class":140}," django_session\n",[126,1462,1463,1465,1467],{"class":128,"line":637},[126,1464,1381],{"class":132},[126,1466,1394],{"class":140},[126,1468,1469],{"class":140}," django_site\n",[126,1471,1472,1474,1476],{"class":128,"line":652},[126,1473,1381],{"class":132},[126,1475,1394],{"class":140},[126,1477,1478],{"class":140}," servers_compute\n",[126,1480,1481,1483,1485],{"class":128,"line":657},[126,1482,1381],{"class":132},[126,1484,1394],{"class":140},[126,1486,1487],{"class":140}," instance_instance\n",[126,1489,1490,1492,1494],{"class":128,"line":690},[126,1491,1381],{"class":132},[126,1493,1394],{"class":140},[126,1495,1496],{"class":140}," create_flavor\n",[126,1498,1499],{"class":128,"line":722},[126,1500,458],{"emptyLinePlaceholder":457},[126,1502,1503,1506,1509,1511,1514,1516,1519,1521,1524,1527,1530,1533],{"class":128,"line":754},[126,1504,1505],{"class":132},"You",[126,1507,1508],{"class":140}," just",[126,1510,303],{"class":140},[126,1512,1513],{"class":140}," Django",[126,1515,144],{"class":136},[126,1517,1518],{"class":140},"s auth system, which means you don",[126,1520,144],{"class":136},[126,1522,1523],{"class":140},"t",[126,1525,1526],{"class":140}," have",[126,1528,1529],{"class":140}," any",[126,1531,1532],{"class":140}," superusers",[126,1534,1535],{"class":140}," defined.\n",[126,1537,1538,1541,1544,1547,1549,1552,1555,1558],{"class":128,"line":785},[126,1539,1540],{"class":132},"Would",[126,1542,1543],{"class":140}," you",[126,1545,1546],{"class":140}," like",[126,1548,351],{"class":140},[126,1550,1551],{"class":140}," create",[126,1553,1554],{"class":140}," one",[126,1556,1557],{"class":140}," now?",[126,1559,1560],{"class":216}," (yes\u002Fno): yes\n",[126,1562,1563,1566,1569,1572,1575,1578,1581,1584,1586,1589,1591,1594],{"class":128,"line":817},[126,1564,1565],{"class":132},"Please",[126,1567,1568],{"class":140}," enter",[126,1570,1571],{"class":140}," either",[126,1573,1574],{"class":136}," \"",[126,1576,1577],{"class":140},"yes",[126,1579,1580],{"class":136},"\"",[126,1582,1583],{"class":140}," or",[126,1585,1574],{"class":136},[126,1587,1588],{"class":140},"no",[126,1590,1580],{"class":136},[126,1592,1593],{"class":140},":",[126,1595,312],{"class":140},[126,1597,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620],{"class":128,"line":848},[126,1599,1565],{"class":132},[126,1601,1568],{"class":140},[126,1603,1571],{"class":140},[126,1605,1574],{"class":136},[126,1607,1577],{"class":140},[126,1609,1580],{"class":136},[126,1611,1583],{"class":140},[126,1613,1574],{"class":136},[126,1615,1588],{"class":140},[126,1617,1580],{"class":136},[126,1619,1593],{"class":140},[126,1621,312],{"class":140},[126,1623,1624,1627,1630,1633,1635,1637,1639,1642,1644],{"class":128,"line":881},[126,1625,1626],{"class":132},"Username",[126,1628,1629],{"class":216}," (leave ",[126,1631,1632],{"class":140},"blank",[126,1634,351],{"class":140},[126,1636,354],{"class":140},[126,1638,137],{"class":136},[126,1640,1641],{"class":140},"root",[126,1643,144],{"class":136},[126,1645,1646],{"class":216},"): kassianoff\n",[126,1648,1649,1652,1655],{"class":128,"line":889},[126,1650,1651],{"class":132},"Email",[126,1653,1654],{"class":140}," address:",[126,1656,1657],{"class":140}," postmaster@kassianoff.fr\n",[126,1659,1660],{"class":128,"line":910},[126,1661,1662],{"class":132},"Password:\n",[126,1664,1665,1668],{"class":128,"line":924},[126,1666,1667],{"class":132},"Password",[126,1669,1670],{"class":216}," (again):\n",[126,1672,1673,1676,1679],{"class":128,"line":949},[126,1674,1675],{"class":132},"Superuser",[126,1677,1678],{"class":140}," created",[126,1680,1681],{"class":140}," successfully.\n",[126,1683,1684,1686,1689,1692],{"class":128,"line":954},[126,1685,892],{"class":132},[126,1687,1688],{"class":140}," custom",[126,1690,1691],{"class":140}," SQL",[126,1693,1387],{"class":140},[126,1695,1696,1698,1701],{"class":128,"line":985},[126,1697,892],{"class":132},[126,1699,1700],{"class":140}," indexes",[126,1702,1387],{"class":140},[126,1704,1705,1708,1711,1714,1717,1720,1723,1725,1728,1731,1733,1735],{"class":128,"line":1016},[126,1706,1707],{"class":132},"Installed",[126,1709,1710],{"class":470}," 6",[126,1712,1713],{"class":140}," object",[126,1715,1716],{"class":136},"(",[126,1718,1719],{"class":132},"s",[126,1721,1722],{"class":136},")",[126,1724,938],{"class":140},[126,1726,1727],{"class":470}," 1",[126,1729,1730],{"class":140}," fixture",[126,1732,1716],{"class":136},[126,1734,1719],{"class":132},[126,1736,1737],{"class":136},")\n",[15,1739,1740],{},"We start again, this time with collectstatic:",[117,1742,1744],{"className":119,"code":1743,"language":121,"meta":74,"style":74},".\u002Fmanage.py collectstatic\n\nType 'yes' to continue, or 'no' to cancel: yes\n75 static files copied\n",[123,1745,1746,1753,1757,1788],{"__ignoreMap":74},[126,1747,1748,1750],{"class":128,"line":129},[126,1749,1354],{"class":132},[126,1751,1752],{"class":140}," collectstatic\n",[126,1754,1755],{"class":128,"line":220},[126,1756,458],{"emptyLinePlaceholder":457},[126,1758,1759,1762,1764,1766,1768,1770,1773,1775,1777,1779,1781,1783,1786],{"class":128,"line":461},[126,1760,1761],{"class":132},"Type",[126,1763,137],{"class":136},[126,1765,1577],{"class":140},[126,1767,144],{"class":136},[126,1769,351],{"class":140},[126,1771,1772],{"class":140}," continue,",[126,1774,1583],{"class":140},[126,1776,137],{"class":136},[126,1778,1588],{"class":140},[126,1780,144],{"class":136},[126,1782,351],{"class":140},[126,1784,1785],{"class":140}," cancel:",[126,1787,312],{"class":140},[126,1789,1790,1793,1796,1798],{"class":128,"line":492},[126,1791,1792],{"class":132},"75",[126,1794,1795],{"class":140}," static",[126,1797,540],{"class":140},[126,1799,1800],{"class":140}," copied\n",[15,1802,1803],{},"Give the web server rights to the WebVirtMgr directory:",[117,1805,1807],{"className":119,"code":1806,"language":121,"meta":74,"style":74},"chown -R www-data:www-data \u002Fvar\u002Fwww\u002Fwebvirtmgr\u002F\n",[123,1808,1809],{"__ignoreMap":74},[126,1810,1811,1814,1817,1820],{"class":128,"line":129},[126,1812,1813],{"class":132},"chown",[126,1815,1816],{"class":140}," -R",[126,1818,1819],{"class":140}," www-data:www-data",[126,1821,1822],{"class":140}," \u002Fvar\u002Fwww\u002Fwebvirtmgr\u002F\n",[15,1824,1825],{},"Modifying the script and the VNC startup:",[117,1827,1829],{"className":119,"code":1828,"language":121,"meta":74,"style":74},"sudo service novnc stop\n[ ok ] Stopping OpenStack NoVNC proxy: nova-novncproxy.\n",[123,1830,1831,1843],{"__ignoreMap":74},[126,1832,1833,1835,1838,1840],{"class":128,"line":129},[126,1834,441],{"class":132},[126,1836,1837],{"class":140}," service",[126,1839,275],{"class":140},[126,1841,1842],{"class":140}," stop\n",[126,1844,1845,1848,1851,1854],{"class":128,"line":220},[126,1846,1847],{"class":136},"[",[126,1849,1850],{"class":216}," ok ",[126,1852,1853],{"class":136},"]",[126,1855,1856],{"class":216}," Stopping OpenStack NoVNC proxy: nova-novncproxy.\n",[15,1858,1859],{},"Removing the startup script for our Debian distribution:",[117,1861,1863],{"className":119,"code":1862,"language":121,"meta":74,"style":74},"update-rc.d -f novnc remove\nupdate-rc.d: using dependency based boot sequencing\n",[123,1864,1865,1878],{"__ignoreMap":74},[126,1866,1867,1870,1873,1875],{"class":128,"line":129},[126,1868,1869],{"class":132},"update-rc.d",[126,1871,1872],{"class":140}," -f",[126,1874,275],{"class":140},[126,1876,1877],{"class":140}," remove\n",[126,1879,1880,1883,1886,1889,1892,1895],{"class":128,"line":220},[126,1881,1882],{"class":132},"update-rc.d:",[126,1884,1885],{"class":140}," using",[126,1887,1888],{"class":140}," dependency",[126,1890,1891],{"class":140}," based",[126,1893,1894],{"class":140}," boot",[126,1896,1897],{"class":140}," sequencing\n",[15,1899,1900],{},"Removing the script in init.d:",[117,1902,1904],{"className":119,"code":1903,"language":121,"meta":74,"style":74},"rm \u002Fetc\u002Finit.d\u002Fnovnc\n",[123,1905,1906],{"__ignoreMap":74},[126,1907,1908,1911],{"class":128,"line":129},[126,1909,1910],{"class":132},"rm",[126,1912,1913],{"class":140}," \u002Fetc\u002Finit.d\u002Fnovnc\n",[15,1915,1916],{},"Fill in the startup settings in the webvirtmgr.conf file:",[117,1918,1920],{"className":119,"code":1919,"language":121,"meta":74,"style":74},"nano \u002Fetc\u002Fsupervisor\u002Fconf.d\u002Fwebvirtmgr.conf\n",[123,1921,1922],{"__ignoreMap":74},[126,1923,1924,1927],{"class":128,"line":129},[126,1925,1926],{"class":132},"nano",[126,1928,1929],{"class":140}," \u002Fetc\u002Fsupervisor\u002Fconf.d\u002Fwebvirtmgr.conf\n",[117,1931,1935],{"className":1932,"code":1933,"language":1934,"meta":74,"style":74},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[program:webvirtmgr]\ncommand=\u002Fusr\u002Fbin\u002Fpython \u002Fvar\u002Fwww\u002Fwebvirtmgr\u002Fmanage.py run_gunicorn -c \u002Fvar\u002Fwww\u002Fwebvirtmgr\u002Fconf\u002Fgunicorn.conf.py\ndirectory=\u002Fvar\u002Fwww\u002Fwebvirtmgr\nautostart=true\nautorestart=true\nstdout_logfile=\u002Fvar\u002Flog\u002Fsupervisor\u002Fwebvirtmgr.log\nredirect_stderr=true\nuser=www-data\n","ini",[123,1936,1937,1942,1947,1952,1957,1962,1967,1972],{"__ignoreMap":74},[126,1938,1939],{"class":128,"line":129},[126,1940,1941],{},"[program:webvirtmgr]\n",[126,1943,1944],{"class":128,"line":220},[126,1945,1946],{},"command=\u002Fusr\u002Fbin\u002Fpython \u002Fvar\u002Fwww\u002Fwebvirtmgr\u002Fmanage.py run_gunicorn -c \u002Fvar\u002Fwww\u002Fwebvirtmgr\u002Fconf\u002Fgunicorn.conf.py\n",[126,1948,1949],{"class":128,"line":461},[126,1950,1951],{},"directory=\u002Fvar\u002Fwww\u002Fwebvirtmgr\n",[126,1953,1954],{"class":128,"line":492},[126,1955,1956],{},"autostart=true\n",[126,1958,1959],{"class":128,"line":504},[126,1960,1961],{},"autorestart=true\n",[126,1963,1964],{"class":128,"line":523},[126,1965,1966],{},"stdout_logfile=\u002Fvar\u002Flog\u002Fsupervisor\u002Fwebvirtmgr.log\n",[126,1968,1969],{"class":128,"line":528},[126,1970,1971],{},"redirect_stderr=true\n",[126,1973,1974],{"class":128,"line":570},[126,1975,1976],{},"user=www-data\n",[15,1978,1979],{},[126,1980,1981],{},"program:webvirtmgr-console",[15,1983,1984],{},"command=\u002Fusr\u002Fbin\u002Fpython \u002Fvar\u002Fwww\u002Fwebvirtmgr\u002Fconsole\u002Fwebvirtmgr-console directory=\u002Fvar\u002Fwww\u002Fwebvirtmgr autostart=true autorestart=true stdout_logfile=\u002Fvar\u002Flog\u002Fsupervisor\u002Fwebvirtmgr-console.log redirect_stderr=true user=www-data",[15,1986,1987],{},"We stop the supervisor service and start it:",[117,1989,1991],{"className":119,"code":1990,"language":121,"meta":74,"style":74},"service supervisor stop\nservice supervisor start\n",[123,1992,1993,2003],{"__ignoreMap":74},[126,1994,1995,1998,2001],{"class":128,"line":129},[126,1996,1997],{"class":132},"service",[126,1999,2000],{"class":140}," supervisor",[126,2002,1842],{"class":140},[126,2004,2005,2007,2009],{"class":128,"line":220},[126,2006,1997],{"class":132},[126,2008,2000],{"class":140},[126,2010,2011],{"class":140}," start\n",[15,2013,2014],{},"The installation is complete, and we can now access the WebVirtMgr interface via port 8000 of our machine.",[77,2016,2018],{"id":2017},"ssh-tunneling-under-linux","SSH tunneling under Linux",[15,2020,2021],{},"The SSH tunneling method allows forwarding ports 8000 and 6080 (novnc) to our (secured) client machine:",[117,2023,2025],{"className":119,"code":2024,"language":121,"meta":74,"style":74},"ssh root@webvirtmgr.kassianoff.fr:port -L localhost:8000:localhost:8000 -L localhost:6080:localhost:6080\n",[123,2026,2027],{"__ignoreMap":74},[126,2028,2029,2032,2035,2038,2041,2043],{"class":128,"line":129},[126,2030,2031],{"class":132},"ssh",[126,2033,2034],{"class":140}," root@webvirtmgr.kassianoff.fr:port",[126,2036,2037],{"class":140}," -L",[126,2039,2040],{"class":140}," localhost:8000:localhost:8000",[126,2042,2037],{"class":140},[126,2044,2045],{"class":140}," localhost:6080:localhost:6080\n",[15,2047,2048,2049,2052,2053,1593],{},"Go to the url: ",[39,2050,2051],{},"localhost:8000"," and enter your login credentials configured during ",[39,2054,2055],{},".\u002Fmanage.py syncdb",[15,2057,2058],{},[72,2059],{"alt":74,"src":2060},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002Ff76441425c.png",[10,2062,2064],{"id":2063},"connection-between-webvirtmgr-and-kvmqemu","Connection between WebVirtMgr and KVM\u002FQEMU",[15,2066,2067],{},"Several steps will be needed before we can configure the infrastructure.",[110,2069,2070],{},[113,2071,2072],{},"Create your TCP connection credentials like this:",[117,2074,2076],{"className":119,"code":2075,"language":121,"meta":74,"style":74},"saslpasswd2 -a libvirt kassianoff.fr\nPassword: \nAgain (for verification):\n",[123,2077,2078,2092,2099],{"__ignoreMap":74},[126,2079,2080,2083,2086,2089],{"class":128,"line":129},[126,2081,2082],{"class":132},"saslpasswd2",[126,2084,2085],{"class":140}," -a",[126,2087,2088],{"class":140}," libvirt",[126,2090,2091],{"class":140}," kassianoff.fr\n",[126,2093,2094,2097],{"class":128,"line":220},[126,2095,2096],{"class":132},"Password:",[126,2098,217],{"class":216},[126,2100,2101,2104,2107,2110],{"class":128,"line":461},[126,2102,2103],{"class":132},"Again",[126,2105,2106],{"class":216}," (for ",[126,2108,2109],{"class":140},"verification",[126,2111,2112],{"class":216},"):\n",[110,2114,2115],{},[113,2116,2117],{},"Declare your hypervisor in virsh:",[117,2119,2121],{"className":119,"code":2120,"language":121,"meta":74,"style":74},"virsh -c qemu+tcp:\u002F\u002Flocalhost\u002Fsystem nodeinfo\nPlease enter your authentication name: kassianoff.fr\nPlease enter your password:\nCPU model:           x86_64\nCPU(s):              8\nCPU frequency:       1632 MHz\nCPU socket(s):       1\nCore(s) per socket:  4\nThread(s) per core:  2\nNUMA cell(s):        1\nMemory size:         32917020 KiB\n",[123,2122,2123,2137,2154,2165,2176,2184,2197,2215,2223,2231,2250],{"__ignoreMap":74},[126,2124,2125,2128,2131,2134],{"class":128,"line":129},[126,2126,2127],{"class":132},"virsh",[126,2129,2130],{"class":140}," -c",[126,2132,2133],{"class":140}," qemu+tcp:\u002F\u002Flocalhost\u002Fsystem",[126,2135,2136],{"class":140}," nodeinfo\n",[126,2138,2139,2141,2143,2146,2149,2152],{"class":128,"line":220},[126,2140,1565],{"class":132},[126,2142,1568],{"class":140},[126,2144,2145],{"class":140}," your",[126,2147,2148],{"class":140}," authentication",[126,2150,2151],{"class":140}," name:",[126,2153,2091],{"class":140},[126,2155,2156,2158,2160,2162],{"class":128,"line":461},[126,2157,1565],{"class":132},[126,2159,1568],{"class":140},[126,2161,2145],{"class":140},[126,2163,2164],{"class":140}," password:\n",[126,2166,2167,2170,2173],{"class":128,"line":492},[126,2168,2169],{"class":132},"CPU",[126,2171,2172],{"class":140}," model:",[126,2174,2175],{"class":140},"           x86_64\n",[126,2177,2178,2181],{"class":128,"line":504},[126,2179,2180],{"class":132},"CPU(s",[126,2182,2183],{"class":216},"):              8\n",[126,2185,2186,2188,2191,2194],{"class":128,"line":523},[126,2187,2169],{"class":132},[126,2189,2190],{"class":140}," frequency:",[126,2192,2193],{"class":470},"       1632",[126,2195,2196],{"class":140}," MHz\n",[126,2198,2199,2201,2204,2206,2208,2210,2212],{"class":128,"line":528},[126,2200,2169],{"class":132},[126,2202,2203],{"class":140}," socket",[126,2205,1716],{"class":136},[126,2207,1719],{"class":132},[126,2209,1722],{"class":136},[126,2211,1593],{"class":140},[126,2213,2214],{"class":470},"       1\n",[126,2216,2217,2220],{"class":128,"line":570},[126,2218,2219],{"class":132},"Core(s",[126,2221,2222],{"class":216},") per socket:  4\n",[126,2224,2225,2228],{"class":128,"line":602},[126,2226,2227],{"class":132},"Thread(s",[126,2229,2230],{"class":216},") per core:  2\n",[126,2232,2233,2236,2239,2241,2243,2245,2247],{"class":128,"line":626},[126,2234,2235],{"class":132},"NUMA",[126,2237,2238],{"class":140}," cell",[126,2240,1716],{"class":136},[126,2242,1719],{"class":132},[126,2244,1722],{"class":136},[126,2246,1593],{"class":140},[126,2248,2249],{"class":470},"        1\n",[126,2251,2252,2255,2258,2261],{"class":128,"line":637},[126,2253,2254],{"class":132},"Memory",[126,2256,2257],{"class":140}," size:",[126,2259,2260],{"class":470},"         32917020",[126,2262,2263],{"class":140}," KiB\n",[15,2265,2266],{},"Now let's add our TCP connection by clicking the \"Add connection\" button",[15,2268,2269],{},[72,2270],{"alt":74,"src":2271},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002Fd64b1c7e35.png",[15,2273,2274],{},"Here's the result:",[15,2276,2277],{},[72,2278],{"alt":74,"src":2279},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F79d54c54e5.png",[10,2281,2283],{"id":2282},"getting-started-with-webvirtmgr","Getting started with WebVirtMgr",[15,2285,2286],{},"I think it's important to understand the different sections that make up WebVirtMgr:",[110,2288,2289,2295,2301,2307,2313,2322],{},[113,2290,2291,2294],{},[84,2292,2293],{},"Instances",": Managing and creating virtual machines; these are our instances.",[113,2296,2297,2300],{},[84,2298,2299],{},"Storages",": Managing and creating the different storage pools (directory, iso, nfs, lvm...).",[113,2302,2303,2306],{},[84,2304,2305],{},"Networks",": Managing and creating networks (bridge, route, nat...).",[113,2308,2309,2312],{},[84,2310,2311],{},"Interfaces",": Managing and creating the various interfaces that networks can use.",[113,2314,2315,2318,2319],{},[84,2316,2317],{},"Secrets",": ",[39,2320,2321],{},"I didn't get any information about it; if a visitor has information, I'm interested!",[113,2323,2324,2327],{},[84,2325,2326],{},"Overview",": Monitor our entire infrastructure: resources used (cpu, memory, etc...).",[15,2329,2330],{},"I used all the sections (except Secrets); start by following the steps below to be able to create an instance.",[10,2332,2334],{"id":2333},"creating-storage-pools","Creating storage pools",[15,2336,2337],{},"Before starting to create a machine, we'll need storage pools; click on Storages then on New storages, the configuration is as follows:",[15,2339,2340,2341],{},"Creating a DIR directory with the path ",[84,2342,2343],{},"\u002Fvar\u002Flib\u002Flibvirt\u002Fimages.",[15,2345,2346],{},[72,2347],{"alt":74,"src":2348},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F0c23aa2dad.png",[15,2350,2351,2352,1593],{},"Creating the ISO directory with the path ",[84,2353,2354],{},"\u002Fvar\u002Fwww\u002Fwebvirtmgr\u002Fimages",[15,2356,2357],{},[72,2358],{"alt":74,"src":2359},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002Fd31f3a144e.png",[15,2361,2362],{},"On an OVH dedicated server, use NFS-common, and create an nfs directory to connect it to the NFS backup storage",[117,2364,2366],{"className":119,"code":2365,"language":121,"meta":74,"style":74},"apt-get install nfs-common\nmkdir \u002Fvar\u002Flib\u002Flibvirt\u002Fnfs\u002F\nmount -t nfs ftpback-rbxX-XXX.ovh.net:\u002Fexport\u002Fftpbackup\u002FnsXXXXXXX.ovh.net \u002Fvar\u002Flib\u002Flibvirt\u002Fnfs\u002F\n",[123,2367,2368,2377,2384],{"__ignoreMap":74},[126,2369,2370,2372,2374],{"class":128,"line":129},[126,2371,180],{"class":132},[126,2373,183],{"class":140},[126,2375,2376],{"class":140}," nfs-common\n",[126,2378,2379,2381],{"class":128,"line":220},[126,2380,376],{"class":132},[126,2382,2383],{"class":140}," \u002Fvar\u002Flib\u002Flibvirt\u002Fnfs\u002F\n",[126,2385,2386,2389,2392,2395,2398],{"class":128,"line":461},[126,2387,2388],{"class":132},"mount",[126,2390,2391],{"class":140}," -t",[126,2393,2394],{"class":140}," nfs",[126,2396,2397],{"class":140}," ftpback-rbxX-XXX.ovh.net:\u002Fexport\u002Fftpbackup\u002FnsXXXXXXX.ovh.net",[126,2399,2383],{"class":140},[15,2401,2402,2403,2405,2406,2409,2410,2413],{},"When creating the pool, there's a NETFS mode compatible with NFS, however the format isn't taken into account.",[50,2404],{},"\nThe solution is to use the ",[84,2407,2408],{},"dir"," mode by specifying the previously mounted ",[84,2411,2412],{},"nfs"," directory:",[15,2415,2416],{},[72,2417],{"alt":74,"src":2418},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002Fd1567a947b.png",[15,2420,2421],{},"Check your different storage pools: nfs, iso, images:",[15,2423,2424],{},[72,2425],{"alt":74,"src":2426},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002Feb75b293e4.png",[15,2428,2429,2430,2433,2434,2437,2438,65,2441,2443],{},"I won't cover creating a machine in the ",[84,2431,2432],{},"images"," menu, nor adding an ",[84,2435,2436],{},"ISO"," file via ",[84,2439,2440],{},"WebVirtMgr",[50,2442],{},"\nThe reason is simple: I use the terminal for those tasks. Let's focus on the networks before creating our VM.",[10,2445,2447],{"id":2446},"the-networks-section-in-webvirtmgr","The networks section in WebVirtMgr",[15,2449,2450,2451,2454,2455,2458,2459,1593],{},"Networks are added via the ",[84,2452,2453],{},"networks"," tab. Add two bridge networks ",[84,2456,2457],{},"lbr0"," and ",[84,2460,2461],{},"lbr1",[15,2463,2464],{},[72,2465],{"alt":74,"src":2466},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F2188d9b488.png",[15,2468,2469],{},"Repeat the operation above to create the second bridge interface, which will give:",[15,2471,2472],{},[72,2473],{"alt":74,"src":2474},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F1c71e3dae7.png",[10,2476,2478],{"id":2477},"interfaces-and-bridged-networks-under-linux","Interfaces and bridged networks under Linux",[15,2480,2481,2482,2485,2486,2489,2490,2489,2493,2489,2495,65,2497,2499],{},"The interfaces section displays the configuration file ",[84,2483,2484],{},"\u002Fetc\u002Fnetworks\u002Finterface",", where we'll find ",[84,2487,2488],{},"lo",", ",[84,2491,2492],{},"br0",[84,2494,2457],{},[84,2496,2461],{},[50,2498],{},"\nBut before configuring our bridge interfaces, let's look at the current configuration:",[117,2501,2503],{"className":119,"code":2502,"language":121,"meta":74,"style":74},"ifconfig\n",[123,2504,2505],{"__ignoreMap":74},[126,2506,2507],{"class":128,"line":129},[126,2508,2502],{"class":132},[117,2510,2512],{"className":119,"code":2511,"language":121,"meta":74,"style":74},"eth0      Link encap:Ethernet  HWaddr 08:60:6e:e5:bd:47\n          inet adr:XX.XXX.XXX.XXXX  Bcast:XX.XXX.XXX.XXX  Masque:255.255.255.0\n          adr inet6: XXXX:XXXX:X:XXXX::\u002Fxx Scope:Global\n          adr inet6: XXXX::XXX:XXXX:XXXX:XXXX\u002Fxx Scope:Lien\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          Packets reçus:2243 erreurs:0 :0 overruns:0 frame:0\n          TX packets:1618 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 lg file transmission:1000\n          Octets reçus:490019 (490.0 KB) Octets transmis:243883 (243.8 KB)\n\nlo        Link encap:Boucle locale\n          inet adr:127.0.0.1  Masque:255.0.0.0\n          adr inet6: ::1\u002F128 Scope:Hôte\n          UP LOOPBACK RUNNING  MTU:65536  Metric:1\n          Packets reçus:140 erreurs:0 :0 overruns:0 frame:0\n          TX packets:140 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 lg file transmission:0\n          Octets reçus:22966 (22.9 KB) Octets transmis:22966 (22.9 KB)\n\nvirbr0    Link encap:Ethernet  HWaddr 22:e2:0b:e7:c2:d1\n          inet adr:192.168.122.1  Bcast:192.168.122.255  Masque:255.255.255.0\n          UP BROADCAST MULTICAST  MTU:1500  Metric:1\n          Packets reçus:0 erreurs:0 :0 overruns:0 frame:0\n          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 lg file transmission:0\n          Octets reçus:0 (0.0 B) Octets transmis:0 (0.0 B)\n",[123,2513,2514,2531,2545,2559,2571,2591,2611,2630,2643,2668,2672,2685,2695,2707,2721,2736,2751,2762,2784,2788,2803,2815,2827,2842,2857,2867],{"__ignoreMap":74},[126,2515,2516,2519,2522,2525,2528],{"class":128,"line":129},[126,2517,2518],{"class":132},"eth0",[126,2520,2521],{"class":140},"      Link",[126,2523,2524],{"class":140}," encap:Ethernet",[126,2526,2527],{"class":140},"  HWaddr",[126,2529,2530],{"class":140}," 08:60:6e:e5:bd:47\n",[126,2532,2533,2536,2539,2542],{"class":128,"line":220},[126,2534,2535],{"class":132},"          inet",[126,2537,2538],{"class":140}," adr:XX.XXX.XXX.XXXX",[126,2540,2541],{"class":140},"  Bcast:XX.XXX.XXX.XXX",[126,2543,2544],{"class":140},"  Masque:255.255.255.0\n",[126,2546,2547,2550,2553,2556],{"class":128,"line":461},[126,2548,2549],{"class":132},"          adr",[126,2551,2552],{"class":140}," inet6:",[126,2554,2555],{"class":140}," XXXX:XXXX:X:XXXX::\u002Fxx",[126,2557,2558],{"class":140}," Scope:Global\n",[126,2560,2561,2563,2565,2568],{"class":128,"line":492},[126,2562,2549],{"class":132},[126,2564,2552],{"class":140},[126,2566,2567],{"class":140}," XXXX::XXX:XXXX:XXXX:XXXX\u002Fxx",[126,2569,2570],{"class":140}," Scope:Lien\n",[126,2572,2573,2576,2579,2582,2585,2588],{"class":128,"line":504},[126,2574,2575],{"class":132},"          UP",[126,2577,2578],{"class":140}," BROADCAST",[126,2580,2581],{"class":140}," RUNNING",[126,2583,2584],{"class":140}," MULTICAST",[126,2586,2587],{"class":140},"  MTU:1500",[126,2589,2590],{"class":140},"  Metric:1\n",[126,2592,2593,2596,2599,2602,2605,2608],{"class":128,"line":523},[126,2594,2595],{"class":132},"          Packets",[126,2597,2598],{"class":140}," reçus:2243",[126,2600,2601],{"class":140}," erreurs:0",[126,2603,2604],{"class":140}," :0",[126,2606,2607],{"class":140}," overruns:0",[126,2609,2610],{"class":140}," frame:0\n",[126,2612,2613,2616,2619,2622,2625,2627],{"class":128,"line":528},[126,2614,2615],{"class":132},"          TX",[126,2617,2618],{"class":140}," packets:1618",[126,2620,2621],{"class":140}," errors:0",[126,2623,2624],{"class":140}," dropped:0",[126,2626,2607],{"class":140},[126,2628,2629],{"class":140}," carrier:0\n",[126,2631,2632,2635,2638,2640],{"class":128,"line":570},[126,2633,2634],{"class":132},"          collisions:0",[126,2636,2637],{"class":140}," lg",[126,2639,1373],{"class":140},[126,2641,2642],{"class":140}," transmission:1000\n",[126,2644,2645,2648,2651,2654,2657,2660,2663,2666],{"class":128,"line":602},[126,2646,2647],{"class":132},"          Octets",[126,2649,2650],{"class":140}," reçus:490019",[126,2652,2653],{"class":216}," (490.0 ",[126,2655,2656],{"class":140},"KB",[126,2658,2659],{"class":216},") Octets transmis:243883 (",[126,2661,2662],{"class":132},"243.8",[126,2664,2665],{"class":140}," KB",[126,2667,1737],{"class":216},[126,2669,2670],{"class":128,"line":626},[126,2671,458],{"emptyLinePlaceholder":457},[126,2673,2674,2676,2679,2682],{"class":128,"line":637},[126,2675,2488],{"class":132},[126,2677,2678],{"class":140},"        Link",[126,2680,2681],{"class":140}," encap:Boucle",[126,2683,2684],{"class":140}," locale\n",[126,2686,2687,2689,2692],{"class":128,"line":652},[126,2688,2535],{"class":132},[126,2690,2691],{"class":140}," adr:127.0.0.1",[126,2693,2694],{"class":140},"  Masque:255.0.0.0\n",[126,2696,2697,2699,2701,2704],{"class":128,"line":657},[126,2698,2549],{"class":132},[126,2700,2552],{"class":140},[126,2702,2703],{"class":140}," ::1\u002F128",[126,2705,2706],{"class":140}," Scope:Hôte\n",[126,2708,2709,2711,2714,2716,2719],{"class":128,"line":690},[126,2710,2575],{"class":132},[126,2712,2713],{"class":140}," LOOPBACK",[126,2715,2581],{"class":140},[126,2717,2718],{"class":140},"  MTU:65536",[126,2720,2590],{"class":140},[126,2722,2723,2725,2728,2730,2732,2734],{"class":128,"line":722},[126,2724,2595],{"class":132},[126,2726,2727],{"class":140}," reçus:140",[126,2729,2601],{"class":140},[126,2731,2604],{"class":140},[126,2733,2607],{"class":140},[126,2735,2610],{"class":140},[126,2737,2738,2740,2743,2745,2747,2749],{"class":128,"line":754},[126,2739,2615],{"class":132},[126,2741,2742],{"class":140}," packets:140",[126,2744,2621],{"class":140},[126,2746,2624],{"class":140},[126,2748,2607],{"class":140},[126,2750,2629],{"class":140},[126,2752,2753,2755,2757,2759],{"class":128,"line":785},[126,2754,2634],{"class":132},[126,2756,2637],{"class":140},[126,2758,1373],{"class":140},[126,2760,2761],{"class":140}," transmission:0\n",[126,2763,2764,2766,2769,2772,2774,2777,2780,2782],{"class":128,"line":817},[126,2765,2647],{"class":132},[126,2767,2768],{"class":140}," reçus:22966",[126,2770,2771],{"class":216}," (22.9 ",[126,2773,2656],{"class":140},[126,2775,2776],{"class":216},") Octets transmis:22966 (",[126,2778,2779],{"class":132},"22.9",[126,2781,2665],{"class":140},[126,2783,1737],{"class":216},[126,2785,2786],{"class":128,"line":848},[126,2787,458],{"emptyLinePlaceholder":457},[126,2789,2790,2793,2796,2798,2800],{"class":128,"line":881},[126,2791,2792],{"class":132},"virbr0",[126,2794,2795],{"class":140},"    Link",[126,2797,2524],{"class":140},[126,2799,2527],{"class":140},[126,2801,2802],{"class":140}," 22:e2:0b:e7:c2:d1\n",[126,2804,2805,2807,2810,2813],{"class":128,"line":889},[126,2806,2535],{"class":132},[126,2808,2809],{"class":140}," adr:192.168.122.1",[126,2811,2812],{"class":140},"  Bcast:192.168.122.255",[126,2814,2544],{"class":140},[126,2816,2817,2819,2821,2823,2825],{"class":128,"line":910},[126,2818,2575],{"class":132},[126,2820,2578],{"class":140},[126,2822,2584],{"class":140},[126,2824,2587],{"class":140},[126,2826,2590],{"class":140},[126,2828,2829,2831,2834,2836,2838,2840],{"class":128,"line":924},[126,2830,2595],{"class":132},[126,2832,2833],{"class":140}," reçus:0",[126,2835,2601],{"class":140},[126,2837,2604],{"class":140},[126,2839,2607],{"class":140},[126,2841,2610],{"class":140},[126,2843,2844,2846,2849,2851,2853,2855],{"class":128,"line":949},[126,2845,2615],{"class":132},[126,2847,2848],{"class":140}," packets:0",[126,2850,2621],{"class":140},[126,2852,2624],{"class":140},[126,2854,2607],{"class":140},[126,2856,2629],{"class":140},[126,2858,2859,2861,2863,2865],{"class":128,"line":954},[126,2860,2634],{"class":132},[126,2862,2637],{"class":140},[126,2864,1373],{"class":140},[126,2866,2761],{"class":140},[126,2868,2869,2871,2873,2876,2879,2882,2885,2888],{"class":128,"line":985},[126,2870,2647],{"class":132},[126,2872,2833],{"class":140},[126,2874,2875],{"class":216}," (0.0 ",[126,2877,2878],{"class":140},"B",[126,2880,2881],{"class":216},") Octets transmis:0 (",[126,2883,2884],{"class":132},"0.0",[126,2886,2887],{"class":140}," B",[126,2889,1737],{"class":216},[15,2891,2892,2893,2895,2896,2899,2900,2902],{},"We notice the following configuration: the ",[84,2894,2518],{}," interface which represents the server's public IP address, the (logical) ",[84,2897,2898],{},"loopback"," interface, as well as the ",[84,2901,2792],{}," interface which is created automatically in NAT mode.",[15,2904,2905],{},"In setting up my infrastructure, networking has an important place. So I created three interfaces:",[110,2907,2908,2913,2918],{},[113,2909,2910,2912],{},[84,2911,2492],{}," = bridged to the main eth0 interface of my Debian host (used for my OVH failover IPs).",[113,2914,2915,2917],{},[84,2916,2461],{}," = a bridge interface used by VyOS for my web services.",[113,2919,2920,2923],{},[84,2921,2922],{},"lbr2"," = a bridge interface used by VyOS for my Dockers and VMs, with the possibility of Docker\u002FKVM interconnections.",[15,2925,2926,2927],{},"My router\u002Ffirewall manages my different br0, lbr1, lbr2 interfaces. ",[39,2928,2929],{},"Here's an illustration diagram:",[15,2931,2932],{},[72,2933],{"alt":74,"src":2934},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002Faaf58cc1f0.png",[15,2936,2937,2938,2940,2941,1722],{},"Let's start by configuring the ",[84,2939,2492],{}," interface: (D",[29,2942,2945],{"href":2943,"rel":2944},"https:\u002F\u002Fwiki.debian.org\u002FBridgeNetworkConnections",[33],"ebian wiki",[117,2947,2949],{"className":119,"code":2948,"language":121,"meta":74,"style":74},"auto lo\niface lo inet loopback\n\nauto eth0\niface eth0 inet manual\n\nauto br0\niface br0 inet static\n        address XX.XXX.XXX.XXX\n        netmask 255.255.255.0\n        network XX.XXX.XXX.0\n        broadcast XX.XXX.XXX.255\n        gateway XX.XXX.XXX.254\n        bridge_ports eth0\n        bridge_stp off\n        bridge_fd 0\n        bridge_maxwait 0\n\niface eth0 inet6 static\n        address XXXX:XXXX:X:XXXX::\n        netmask 64\n        post-up \u002Fsbin\u002Fip -family inet6 route add XXXX:XXXX:X:XXXX:XX:XX:XX:XX dev eth0\n        post-up \u002Fsbin\u002Fip -family inet6 route add default via XXXX:XXXX:X:XXXX:XX:XX:XX:XX\n        pre-down \u002Fsbin\u002Fip -family inet6 route del default via XXXX:XXXX:X:XXXX:XX:XX:XX:XX\n        pre-down \u002Fsbin\u002Fip -family inet6 route del XXXX:XXXX:X:XXXX:XX:XX:XX:XX dev eth0\n",[123,2950,2951,2959,2973,2977,2984,2996,3000,3007,3019,3027,3035,3043,3051,3059,3066,3074,3082,3089,3093,3104,3111,3118,3145,3168,3190],{"__ignoreMap":74},[126,2952,2953,2956],{"class":128,"line":129},[126,2954,2955],{"class":132},"auto",[126,2957,2958],{"class":140}," lo\n",[126,2960,2961,2964,2967,2970],{"class":128,"line":220},[126,2962,2963],{"class":132},"iface",[126,2965,2966],{"class":140}," lo",[126,2968,2969],{"class":140}," inet",[126,2971,2972],{"class":140}," loopback\n",[126,2974,2975],{"class":128,"line":461},[126,2976,458],{"emptyLinePlaceholder":457},[126,2978,2979,2981],{"class":128,"line":492},[126,2980,2955],{"class":132},[126,2982,2983],{"class":140}," eth0\n",[126,2985,2986,2988,2991,2993],{"class":128,"line":504},[126,2987,2963],{"class":132},[126,2989,2990],{"class":140}," eth0",[126,2992,2969],{"class":140},[126,2994,2995],{"class":140}," manual\n",[126,2997,2998],{"class":128,"line":523},[126,2999,458],{"emptyLinePlaceholder":457},[126,3001,3002,3004],{"class":128,"line":528},[126,3003,2955],{"class":132},[126,3005,3006],{"class":140}," br0\n",[126,3008,3009,3011,3014,3016],{"class":128,"line":570},[126,3010,2963],{"class":132},[126,3012,3013],{"class":140}," br0",[126,3015,2969],{"class":140},[126,3017,3018],{"class":140}," static\n",[126,3020,3021,3024],{"class":128,"line":602},[126,3022,3023],{"class":132},"        address",[126,3025,3026],{"class":140}," XX.XXX.XXX.XXX\n",[126,3028,3029,3032],{"class":128,"line":626},[126,3030,3031],{"class":132},"        netmask",[126,3033,3034],{"class":470}," 255.255.255.0\n",[126,3036,3037,3040],{"class":128,"line":637},[126,3038,3039],{"class":132},"        network",[126,3041,3042],{"class":140}," XX.XXX.XXX.0\n",[126,3044,3045,3048],{"class":128,"line":652},[126,3046,3047],{"class":132},"        broadcast",[126,3049,3050],{"class":140}," XX.XXX.XXX.255\n",[126,3052,3053,3056],{"class":128,"line":657},[126,3054,3055],{"class":132},"        gateway",[126,3057,3058],{"class":140}," XX.XXX.XXX.254\n",[126,3060,3061,3064],{"class":128,"line":690},[126,3062,3063],{"class":132},"        bridge_ports",[126,3065,2983],{"class":140},[126,3067,3068,3071],{"class":128,"line":722},[126,3069,3070],{"class":132},"        bridge_stp",[126,3072,3073],{"class":140}," off\n",[126,3075,3076,3079],{"class":128,"line":754},[126,3077,3078],{"class":132},"        bridge_fd",[126,3080,3081],{"class":470}," 0\n",[126,3083,3084,3087],{"class":128,"line":785},[126,3085,3086],{"class":132},"        bridge_maxwait",[126,3088,3081],{"class":470},[126,3090,3091],{"class":128,"line":817},[126,3092,458],{"emptyLinePlaceholder":457},[126,3094,3095,3097,3099,3102],{"class":128,"line":848},[126,3096,2963],{"class":132},[126,3098,2990],{"class":140},[126,3100,3101],{"class":140}," inet6",[126,3103,3018],{"class":140},[126,3105,3106,3108],{"class":128,"line":881},[126,3107,3023],{"class":132},[126,3109,3110],{"class":140}," XXXX:XXXX:X:XXXX::\n",[126,3112,3113,3115],{"class":128,"line":889},[126,3114,3031],{"class":132},[126,3116,3117],{"class":470}," 64\n",[126,3119,3120,3123,3126,3129,3131,3134,3137,3140,3143],{"class":128,"line":910},[126,3121,3122],{"class":132},"        post-up",[126,3124,3125],{"class":140}," \u002Fsbin\u002Fip",[126,3127,3128],{"class":140}," -family",[126,3130,3101],{"class":140},[126,3132,3133],{"class":140}," route",[126,3135,3136],{"class":140}," add",[126,3138,3139],{"class":140}," XXXX:XXXX:X:XXXX:XX:XX:XX:XX",[126,3141,3142],{"class":140}," dev",[126,3144,2983],{"class":140},[126,3146,3147,3149,3151,3153,3155,3157,3159,3162,3165],{"class":128,"line":924},[126,3148,3122],{"class":132},[126,3150,3125],{"class":140},[126,3152,3128],{"class":140},[126,3154,3101],{"class":140},[126,3156,3133],{"class":140},[126,3158,3136],{"class":140},[126,3160,3161],{"class":140}," default",[126,3163,3164],{"class":140}," via",[126,3166,3167],{"class":140}," XXXX:XXXX:X:XXXX:XX:XX:XX:XX\n",[126,3169,3170,3173,3175,3177,3179,3181,3184,3186,3188],{"class":128,"line":949},[126,3171,3172],{"class":132},"        pre-down",[126,3174,3125],{"class":140},[126,3176,3128],{"class":140},[126,3178,3101],{"class":140},[126,3180,3133],{"class":140},[126,3182,3183],{"class":140}," del",[126,3185,3161],{"class":140},[126,3187,3164],{"class":140},[126,3189,3167],{"class":140},[126,3191,3192,3194,3196,3198,3200,3202,3204,3206,3208],{"class":128,"line":954},[126,3193,3172],{"class":132},[126,3195,3125],{"class":140},[126,3197,3128],{"class":140},[126,3199,3101],{"class":140},[126,3201,3133],{"class":140},[126,3203,3183],{"class":140},[126,3205,3139],{"class":140},[126,3207,3142],{"class":140},[126,3209,2983],{"class":140},[15,3211,3212,3213,1593],{},"Restart the interface ",[39,3214,3215],{},"(your SSH connection to your server shouldn't be interrupted)",[117,3217,3219],{"className":119,"code":3218,"language":121,"meta":74,"style":74},"\u002Fetc\u002Finit.d\u002Fnetwork restart\n",[123,3220,3221],{"__ignoreMap":74},[126,3222,3223,3226],{"class":128,"line":129},[126,3224,3225],{"class":132},"\u002Fetc\u002Finit.d\u002Fnetwork",[126,3227,3228],{"class":140}," restart\n",[15,3230,3231],{},"Check the bridge interface configuration on the host:",[117,3233,3235],{"className":119,"code":3234,"language":121,"meta":74,"style":74},"ifconfig br0\n",[123,3236,3237],{"__ignoreMap":74},[126,3238,3239,3242],{"class":128,"line":129},[126,3240,3241],{"class":132},"ifconfig",[126,3243,3006],{"class":140},[117,3245,3247],{"className":119,"code":3246,"language":121,"meta":74,"style":74},"br0       Link encap:Ethernet  HWaddr 08:60:6e:e5:bd:47\n          inet adr:XX.XXX.XXX.XXX  Bcast:XX.XXX.XXX.255  Masque:255.255.255.0\n          adr inet6: XXXX::XXX:XXXX:XXXX:XXXX\u002Fxx Scope:Lien\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:2344432 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:1599970 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 lg file transmission:0\n          RX bytes:9383508945 (8.7 GiB)  TX bytes:312106046 (297.6 MiB)\n",[123,3248,3249,3262,3274,3284,3298,3314,3329,3339],{"__ignoreMap":74},[126,3250,3251,3253,3256,3258,3260],{"class":128,"line":129},[126,3252,2492],{"class":132},[126,3254,3255],{"class":140},"       Link",[126,3257,2524],{"class":140},[126,3259,2527],{"class":140},[126,3261,2530],{"class":140},[126,3263,3264,3266,3269,3272],{"class":128,"line":220},[126,3265,2535],{"class":132},[126,3267,3268],{"class":140}," adr:XX.XXX.XXX.XXX",[126,3270,3271],{"class":140},"  Bcast:XX.XXX.XXX.255",[126,3273,2544],{"class":140},[126,3275,3276,3278,3280,3282],{"class":128,"line":461},[126,3277,2549],{"class":132},[126,3279,2552],{"class":140},[126,3281,2567],{"class":140},[126,3283,2570],{"class":140},[126,3285,3286,3288,3290,3292,3294,3296],{"class":128,"line":492},[126,3287,2575],{"class":132},[126,3289,2578],{"class":140},[126,3291,2581],{"class":140},[126,3293,2584],{"class":140},[126,3295,2587],{"class":140},[126,3297,2590],{"class":140},[126,3299,3300,3303,3306,3308,3310,3312],{"class":128,"line":504},[126,3301,3302],{"class":132},"          RX",[126,3304,3305],{"class":140}," packets:2344432",[126,3307,2621],{"class":140},[126,3309,2624],{"class":140},[126,3311,2607],{"class":140},[126,3313,2610],{"class":140},[126,3315,3316,3318,3321,3323,3325,3327],{"class":128,"line":523},[126,3317,2615],{"class":132},[126,3319,3320],{"class":140}," packets:1599970",[126,3322,2621],{"class":140},[126,3324,2624],{"class":140},[126,3326,2607],{"class":140},[126,3328,2629],{"class":140},[126,3330,3331,3333,3335,3337],{"class":128,"line":528},[126,3332,2634],{"class":132},[126,3334,2637],{"class":140},[126,3336,1373],{"class":140},[126,3338,2761],{"class":140},[126,3340,3341,3343,3346,3349,3352,3355,3358,3361],{"class":128,"line":570},[126,3342,3302],{"class":132},[126,3344,3345],{"class":140}," bytes:9383508945",[126,3347,3348],{"class":216}," (8.7 ",[126,3350,3351],{"class":140},"GiB",[126,3353,3354],{"class":216},")  TX bytes:312106046 (",[126,3356,3357],{"class":132},"297.6",[126,3359,3360],{"class":140}," MiB",[126,3362,1737],{"class":216},[15,3364,3365],{},"The command to view the bridged interface:",[117,3367,3369],{"className":119,"code":3368,"language":121,"meta":74,"style":74},"btctl show\nbr0             8000.08606ee5bd47       no              eth0\n",[123,3370,3371,3379],{"__ignoreMap":74},[126,3372,3373,3376],{"class":128,"line":129},[126,3374,3375],{"class":132},"btctl",[126,3377,3378],{"class":140}," show\n",[126,3380,3381,3383,3386,3389],{"class":128,"line":220},[126,3382,2492],{"class":132},[126,3384,3385],{"class":140},"             8000.08606ee5bd47",[126,3387,3388],{"class":140},"       no",[126,3390,3391],{"class":140},"              eth0\n",[15,3393,3394],{},"The bridge package lets us create our interfaces directly, such as:",[117,3396,3398],{"className":119,"code":3397,"language":121,"meta":74,"style":74},"brctl addbr lbr0\nbrctl addbr lbr1\n",[123,3399,3400,3411],{"__ignoreMap":74},[126,3401,3402,3405,3408],{"class":128,"line":129},[126,3403,3404],{"class":132},"brctl",[126,3406,3407],{"class":140}," addbr",[126,3409,3410],{"class":140}," lbr0\n",[126,3412,3413,3415,3417],{"class":128,"line":220},[126,3414,3404],{"class":132},[126,3416,3407],{"class":140},[126,3418,3419],{"class":140}," lbr1\n",[15,3421,3422],{},"Next, we need to start the bridged interfaces lbr0 and lbr1:",[117,3424,3426],{"className":119,"code":3425,"language":121,"meta":74,"style":74},"ip link set dev lbr0 up\nip link set dev lbr1 up\n",[123,3427,3428,3447],{"__ignoreMap":74},[126,3429,3430,3433,3436,3439,3441,3444],{"class":128,"line":129},[126,3431,3432],{"class":132},"ip",[126,3434,3435],{"class":140}," link",[126,3437,3438],{"class":140}," set",[126,3440,3142],{"class":140},[126,3442,3443],{"class":140}," lbr0",[126,3445,3446],{"class":140}," up\n",[126,3448,3449,3451,3453,3455,3457,3460],{"class":128,"line":220},[126,3450,3432],{"class":132},[126,3452,3435],{"class":140},[126,3454,3438],{"class":140},[126,3456,3142],{"class":140},[126,3458,3459],{"class":140}," lbr1",[126,3461,3446],{"class":140},[15,3463,3464],{},"However, the libvirt method doesn't make our interfaces permanent! Add the two interfaces permanently:",[117,3466,3468],{"className":119,"code":3467,"language":121,"meta":74,"style":74},"nano \u002Fetc\u002Fnetwork\u002Finterface\n",[123,3469,3470],{"__ignoreMap":74},[126,3471,3472,3474],{"class":128,"line":129},[126,3473,1926],{"class":132},[126,3475,3476],{"class":140}," \u002Fetc\u002Fnetwork\u002Finterface\n",[117,3478,3480],{"className":119,"code":3479,"language":121,"meta":74,"style":74},"auto lbr0\niface lbr0 inet manual\n    bridge_ports none\n    bridge_stp off\n\nauto lbr1\niface lbr1 inet manual\n    bridge_ports none\n    bridge_stp off\n",[123,3481,3482,3488,3498,3506,3513,3517,3523,3533,3539],{"__ignoreMap":74},[126,3483,3484,3486],{"class":128,"line":129},[126,3485,2955],{"class":132},[126,3487,3410],{"class":140},[126,3489,3490,3492,3494,3496],{"class":128,"line":220},[126,3491,2963],{"class":132},[126,3493,3443],{"class":140},[126,3495,2969],{"class":140},[126,3497,2995],{"class":140},[126,3499,3500,3503],{"class":128,"line":461},[126,3501,3502],{"class":132},"    bridge_ports",[126,3504,3505],{"class":140}," none\n",[126,3507,3508,3511],{"class":128,"line":492},[126,3509,3510],{"class":132},"    bridge_stp",[126,3512,3073],{"class":140},[126,3514,3515],{"class":128,"line":504},[126,3516,458],{"emptyLinePlaceholder":457},[126,3518,3519,3521],{"class":128,"line":523},[126,3520,2955],{"class":132},[126,3522,3419],{"class":140},[126,3524,3525,3527,3529,3531],{"class":128,"line":528},[126,3526,2963],{"class":132},[126,3528,3459],{"class":140},[126,3530,2969],{"class":140},[126,3532,2995],{"class":140},[126,3534,3535,3537],{"class":128,"line":570},[126,3536,3502],{"class":132},[126,3538,3505],{"class":140},[126,3540,3541,3543],{"class":128,"line":602},[126,3542,3510],{"class":132},[126,3544,3073],{"class":140},[117,3546,3547],{"className":119,"code":3218,"language":121,"meta":74,"style":74},[123,3548,3549],{"__ignoreMap":74},[126,3550,3551,3553],{"class":128,"line":129},[126,3552,3225],{"class":132},[126,3554,3228],{"class":140},[117,3556,3558],{"className":119,"code":3557,"language":121,"meta":74,"style":74},"brctl show\n\nbr0             8000.08606ee5bd47       no              eth0\nlbr0            8000.fe5400047801       no              \nlbr1            8000.fe54000a522b       no              \nvirbr0          8000.000000000000       yes\n",[123,3559,3560,3566,3570,3580,3592,3603],{"__ignoreMap":74},[126,3561,3562,3564],{"class":128,"line":129},[126,3563,3404],{"class":132},[126,3565,3378],{"class":140},[126,3567,3568],{"class":128,"line":220},[126,3569,458],{"emptyLinePlaceholder":457},[126,3571,3572,3574,3576,3578],{"class":128,"line":461},[126,3573,2492],{"class":132},[126,3575,3385],{"class":140},[126,3577,3388],{"class":140},[126,3579,3391],{"class":140},[126,3581,3582,3584,3587,3589],{"class":128,"line":492},[126,3583,2457],{"class":132},[126,3585,3586],{"class":140},"            8000.fe5400047801",[126,3588,3388],{"class":140},[126,3590,3591],{"class":216},"              \n",[126,3593,3594,3596,3599,3601],{"class":128,"line":504},[126,3595,2461],{"class":132},[126,3597,3598],{"class":140},"            8000.fe54000a522b",[126,3600,3388],{"class":140},[126,3602,3591],{"class":216},[126,3604,3605,3607,3610],{"class":128,"line":523},[126,3606,2792],{"class":132},[126,3608,3609],{"class":470},"          8000.000000000000",[126,3611,3612],{"class":140},"       yes\n",[15,3614,3615],{},"The host server can now restart without fear of losing its configuration. Here are the different bridged interfaces:",[15,3617,3618],{},[72,3619],{"alt":74,"src":3620},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F58711051ad.png",[15,3622,3623],{},"You have the option to disable the interface at startup:",[117,3625,3627],{"className":119,"code":3626,"language":121,"meta":74,"style":74},"virsh net-autostart --disable default\n",[123,3628,3629],{"__ignoreMap":74},[126,3630,3631,3633,3636,3639],{"class":128,"line":129},[126,3632,2127],{"class":132},[126,3634,3635],{"class":140}," net-autostart",[126,3637,3638],{"class":140}," --disable",[126,3640,3641],{"class":140}," default\n",[15,3643,3644],{},"Or even permanently remove the default interface:",[117,3646,3648],{"className":119,"code":3647,"language":121,"meta":74,"style":74},"virsh net-destroy default\n",[123,3649,3650],{"__ignoreMap":74},[126,3651,3652,3654,3657],{"class":128,"line":129},[126,3653,2127],{"class":132},[126,3655,3656],{"class":140}," net-destroy",[126,3658,3641],{"class":140},[10,3660,3662],{"id":3661},"creating-an-instance-in-webvirtmgr","Creating an instance in WebVirtMgr",[15,3664,3665],{},"In the instances section, click the New Instance button and several options are available to you.",[110,3667,3668],{},[113,3669,3670],{},"Custom instance, Template, or XML configuration file.",[15,3672,3673],{},"Below, you'll also find pre-defined templates numbered 1 to 6 that let you create an image.",[15,3675,3676],{},[72,3677],{"alt":74,"src":3678},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F7d077aab57.png",[15,3680,3681,3682,3684,3685,3688],{},"In this specific case, I'll use a custom instance. But first we'll need to create a disk for the VM.",[50,3683],{},"\nAs explained earlier, I prefer to use ",[84,3686,3687],{},"cli"," mode to create the disk for my future machine:",[117,3690,3692],{"className":119,"code":3691,"language":121,"meta":74,"style":74},"qemu-img create -f qcow2 vdisk 10G\n",[123,3693,3694],{"__ignoreMap":74},[126,3695,3696,3699,3701,3703,3706,3709],{"class":128,"line":129},[126,3697,3698],{"class":132},"qemu-img",[126,3700,1551],{"class":140},[126,3702,1872],{"class":140},[126,3704,3705],{"class":140}," qcow2",[126,3707,3708],{"class":140}," vdisk",[126,3710,3711],{"class":140}," 10G\n",[15,3713,3714],{},"For those who want to convert a VMware machine to KVM:",[117,3716,3718],{"className":119,"code":3717,"language":121,"meta":74,"style":74},"qemu-img convert vm1-flat.vmdk -O qcow2 vm1\n",[123,3719,3720],{"__ignoreMap":74},[126,3721,3722,3724,3727,3730,3733,3735],{"class":128,"line":129},[126,3723,3698],{"class":132},[126,3725,3726],{"class":140}," convert",[126,3728,3729],{"class":140}," vm1-flat.vmdk",[126,3731,3732],{"class":140}," -O",[126,3734,3705],{"class":140},[126,3736,3737],{"class":140}," vm1\n",[15,3739,3740],{},"Display information about our machine:",[117,3742,3746],{"className":3743,"code":3744,"language":3745,"meta":74,"style":74},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","qemu-img info vdisk\n\nfile format: qcow2\nvirtual size: 10G (10737418240 bytes)\ndisk size: 136K\ncluster_size: 65536\n","yaml",[123,3747,3748,3753,3757,3768,3778,3788],{"__ignoreMap":74},[126,3749,3750],{"class":128,"line":129},[126,3751,3752],{"class":140},"qemu-img info vdisk\n",[126,3754,3755],{"class":128,"line":220},[126,3756,458],{"emptyLinePlaceholder":457},[126,3758,3759,3763,3765],{"class":128,"line":461},[126,3760,3762],{"class":3761},"swJcz","file format",[126,3764,1593],{"class":136},[126,3766,3767],{"class":140}," qcow2\n",[126,3769,3770,3773,3775],{"class":128,"line":492},[126,3771,3772],{"class":3761},"virtual size",[126,3774,1593],{"class":136},[126,3776,3777],{"class":140}," 10G (10737418240 bytes)\n",[126,3779,3780,3783,3785],{"class":128,"line":504},[126,3781,3782],{"class":3761},"disk size",[126,3784,1593],{"class":136},[126,3786,3787],{"class":140}," 136K\n",[126,3789,3790,3793,3795],{"class":128,"line":523},[126,3791,3792],{"class":3761},"cluster_size",[126,3794,1593],{"class":136},[126,3796,3797],{"class":470}," 65536\n",[15,3799,3800],{},"Now use the vdisk HDD to create a vdisk VM:",[15,3802,3803],{},[72,3804],{"alt":74,"src":3805},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F4724135195.png",[15,3807,3808],{},"Start the creation by clicking the create button: the \"vdisk\" machine management appears with its options:",[15,3810,3811],{},[72,3812],{"alt":74,"src":3813},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F08ea1367cb.png",[15,3815,3816],{},"At this point, feel free to explore the sections above, but don't forget:",[3818,3819,3820,3826,3832,4024,4038],"ol",{},[113,3821,1580,3822,3825],{},[84,3823,3824],{},"Access","\" to select your console type, then change the keyboard layout (if in novnc mode).",[113,3827,1580,3828,3831],{},[84,3829,3830],{},"Settings","\" to add an ISO Media to the virtual machine.",[113,3833,3834,3835,3837,3838],{},"In \"",[84,3836,3830],{},"\", edit the vdisk machine's xml configuration. Only if you want to assign an OVH Failover IP to your VM. The interfaces section of the machine must contain (example on my router\u002Ffirewall):",[117,3839,3841],{"className":119,"code":3840,"language":121,"meta":74,"style":74},"\u003Cinterface type='bridge'>\n\u003Cmac address='xx:xx:xx:xx:xx:xx'\u002F>\n\u003Csource bridge='br0'\u002F>\n\u003Ctarget dev='vnet0'\u002F>\n\u003Calias name='net0'\u002F>\n\u003Caddress type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'\u002F>\n\u003C\u002Finterface>\n",[123,3842,3843,3863,3884,3903,3923,3947,4015],{"__ignoreMap":74},[126,3844,3845,3848,3851,3853,3855,3858,3860],{"class":128,"line":129},[126,3846,3847],{"class":136},"\u003C",[126,3849,3850],{"class":216},"interface type",[126,3852,862],{"class":136},[126,3854,144],{"class":136},[126,3856,3857],{"class":140},"bridge",[126,3859,144],{"class":136},[126,3861,3862],{"class":136},">\n",[126,3864,3865,3867,3870,3872,3874,3877,3879,3882],{"class":128,"line":220},[126,3866,3847],{"class":136},[126,3868,3869],{"class":216},"mac address",[126,3871,862],{"class":136},[126,3873,144],{"class":136},[126,3875,3876],{"class":140},"xx:xx:xx:xx:xx:xx",[126,3878,144],{"class":136},[126,3880,3881],{"class":140},"\u002F",[126,3883,3862],{"class":136},[126,3885,3886,3888,3891,3893,3895,3897,3899,3901],{"class":128,"line":461},[126,3887,3847],{"class":136},[126,3889,3890],{"class":216},"source bridge",[126,3892,862],{"class":136},[126,3894,144],{"class":136},[126,3896,2492],{"class":140},[126,3898,144],{"class":136},[126,3900,3881],{"class":140},[126,3902,3862],{"class":136},[126,3904,3905,3907,3910,3912,3914,3917,3919,3921],{"class":128,"line":492},[126,3906,3847],{"class":136},[126,3908,3909],{"class":216},"target dev",[126,3911,862],{"class":136},[126,3913,144],{"class":136},[126,3915,3916],{"class":140},"vnet0",[126,3918,144],{"class":136},[126,3920,3881],{"class":140},[126,3922,3862],{"class":136},[126,3924,3925,3927,3931,3934,3936,3938,3941,3943,3945],{"class":128,"line":504},[126,3926,3847],{"class":136},[126,3928,3930],{"class":3929},"spNyl","alias",[126,3932,3933],{"class":216}," name",[126,3935,862],{"class":136},[126,3937,144],{"class":136},[126,3939,3940],{"class":140},"net0",[126,3942,144],{"class":136},[126,3944,3881],{"class":216},[126,3946,3862],{"class":136},[126,3948,3949,3951,3954,3956,3958,3961,3963,3966,3968,3970,3973,3975,3978,3980,3982,3985,3987,3990,3992,3994,3997,3999,4002,4004,4006,4009,4011,4013],{"class":128,"line":523},[126,3950,3847],{"class":136},[126,3952,3953],{"class":216},"address type",[126,3955,862],{"class":136},[126,3957,144],{"class":136},[126,3959,3960],{"class":140},"pci",[126,3962,144],{"class":136},[126,3964,3965],{"class":216}," domain",[126,3967,862],{"class":136},[126,3969,144],{"class":136},[126,3971,3972],{"class":140},"0x0000",[126,3974,144],{"class":136},[126,3976,3977],{"class":216}," bus",[126,3979,862],{"class":136},[126,3981,144],{"class":136},[126,3983,3984],{"class":140},"0x00",[126,3986,144],{"class":136},[126,3988,3989],{"class":216}," slot",[126,3991,862],{"class":136},[126,3993,144],{"class":136},[126,3995,3996],{"class":140},"0x03",[126,3998,144],{"class":136},[126,4000,4001],{"class":216}," function",[126,4003,862],{"class":136},[126,4005,144],{"class":136},[126,4007,4008],{"class":140},"0x0",[126,4010,144],{"class":136},[126,4012,3881],{"class":140},[126,4014,3862],{"class":136},[126,4016,4017,4019,4022],{"class":128,"line":528},[126,4018,3847],{"class":136},[126,4020,4021],{"class":216},"\u002Finterface",[126,4023,3862],{"class":136},[113,4025,4026,4027,4030,4031,4034,4035],{},"Starting the machine: ",[84,4028,4029],{},"Power"," then ",[84,4032,4033],{},"Start",", access to the console is done via ",[84,4036,4037],{},"Access\u002FConsole",[113,4039,4040],{},"A pop-up opens with novnc and access to the VM:",[15,4042,4043],{},[72,4044],{"alt":74,"src":4045},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F03cd2ed8d2.png",[15,4047,4048,4049,4051],{},"That's it, you're now ready to use your infrastructure's resources and your VM!",[50,4050],{},[84,4052,4053],{},"But first, back up your VM live.",[77,4055,4057],{"id":4056},"backing-up-your-kvm-machines-live","Backing up your KVM machines live",[15,4059,4060],{},"The backup can be done by cloning via the webvirtmgr interface, or via a simple cp: (to NFS)",[117,4062,4064],{"className":119,"code":4063,"language":121,"meta":74,"style":74},"cp \u002Fvar\u002Flib\u002Flibvirt\u002Fimages\u002Fvdisk \u002Fvar\u002Flib\u002Flibvirt\u002Fnfs\u002Fvdisk.02.03.2015\n",[123,4065,4066],{"__ignoreMap":74},[126,4067,4068,4071,4074],{"class":128,"line":129},[126,4069,4070],{"class":132},"cp",[126,4072,4073],{"class":140}," \u002Fvar\u002Flib\u002Flibvirt\u002Fimages\u002Fvdisk",[126,4075,4076],{"class":140}," \u002Fvar\u002Flib\u002Flibvirt\u002Fnfs\u002Fvdisk.02.03.2015\n",[10,4078,4080],{"id":4079},"infrastructure-overview","Infrastructure overview",[15,4082,4083],{},"The infrastructure's usage load is available in the overview section, which provides a real-time overview. Here's the usage of my webvirt-kassianoff infrastructure once it's in place:",[15,4085,4086],{},[72,4087],{"alt":74,"src":4088},"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F865ec5df9e.png",[10,4090,4092],{"id":4091},"updating-webvirtmgr","Updating WebVirtMgr",[15,4094,4095,4096,4098],{},"Technology and security updates are of course very important; nothing could be simpler:",[50,4097],{},"\nGo to the WebVirtMgr directory:",[117,4100,4102],{"className":119,"code":4101,"language":121,"meta":74,"style":74},"cd \u002Fvar\u002Fwww\u002Fwebvirtmgr\n",[123,4103,4104],{"__ignoreMap":74},[126,4105,4106,4108],{"class":128,"line":129},[126,4107,392],{"class":339},[126,4109,4110],{"class":140}," \u002Fvar\u002Fwww\u002Fwebvirtmgr\n",[15,4112,4113],{},"Then run the following commands:",[117,4115,4117],{"className":119,"code":4116,"language":121,"meta":74,"style":74}," remote: Counting objects: 27, done.\nremote: Compressing objects: 100% (14\u002F14), done.\nremote: Total 27 (delta 7), reused 6 (delta 6), pack-reused 7\nUnpacking objects: 100% (27\u002F27), done.\nFrom git:\u002F\u002Fgithub.com\u002Fretspen\u002Fwebvirtmgr\n   ed176e4..c875e0d  master     -> origin\u002Fmaster\nUpdating ed176e4..c875e0d\nFast-forward\n console\u002Fviews.py         |    3 ++-\n create\u002Fviews.py          |    7 ++++---\n hostdetail\u002Fviews.py      |    5 +++--\n instance\u002Fviews.py        |   15 ++++++++-------\n interfaces\u002Fviews.py      |    7 ++++---\n networks\u002Fviews.py        |    9 +++++----\n secrets\u002Fviews.py         |    3 ++-\n servers\u002Fviews.py         |    9 +++++----\n storages\u002Fviews.py        |    9 +++++----\n templates\u002Fbase.html      |    2 +-\n templates\u002Fbase_auth.html |    2 +-\n templates\u002Flogin.html     |    2 +-\n 12 files changed, 41 insertions(+), 32 deletions(-)\n",[123,4118,4119,4136,4152,4179,4191,4199,4215,4223,4228,4242,4256,4270,4284,4295,4308,4319,4330,4341,4354,4366,4378],{"__ignoreMap":74},[126,4120,4121,4124,4127,4130,4133],{"class":128,"line":129},[126,4122,4123],{"class":132}," remote:",[126,4125,4126],{"class":140}," Counting",[126,4128,4129],{"class":140}," objects:",[126,4131,4132],{"class":140}," 27,",[126,4134,4135],{"class":140}," done.\n",[126,4137,4138,4141,4144,4146,4149],{"class":128,"line":220},[126,4139,4140],{"class":132},"remote:",[126,4142,4143],{"class":140}," Compressing",[126,4145,4129],{"class":140},[126,4147,4148],{"class":140}," 100%",[126,4150,4151],{"class":216}," (14\u002F14), done.\n",[126,4153,4154,4156,4159,4162,4165,4168,4171,4174,4176],{"class":128,"line":461},[126,4155,4140],{"class":132},[126,4157,4158],{"class":140}," Total",[126,4160,4161],{"class":470}," 27",[126,4163,4164],{"class":216}," (delta ",[126,4166,4167],{"class":470},"7",[126,4169,4170],{"class":216},"), reused 6 (",[126,4172,4173],{"class":132},"delta",[126,4175,1710],{"class":470},[126,4177,4178],{"class":216},"), pack-reused 7\n",[126,4180,4181,4184,4186,4188],{"class":128,"line":492},[126,4182,4183],{"class":132},"Unpacking",[126,4185,4129],{"class":140},[126,4187,4148],{"class":140},[126,4189,4190],{"class":216}," (27\u002F27), done.\n",[126,4192,4193,4196],{"class":128,"line":504},[126,4194,4195],{"class":132},"From",[126,4197,4198],{"class":140}," git:\u002F\u002Fgithub.com\u002Fretspen\u002Fwebvirtmgr\n",[126,4200,4201,4204,4207,4210,4212],{"class":128,"line":523},[126,4202,4203],{"class":132},"   ed176e4..c875e0d",[126,4205,4206],{"class":140},"  master",[126,4208,4209],{"class":216},"     -",[126,4211,859],{"class":136},[126,4213,4214],{"class":140}," origin\u002Fmaster\n",[126,4216,4217,4220],{"class":128,"line":528},[126,4218,4219],{"class":132},"Updating",[126,4221,4222],{"class":140}," ed176e4..c875e0d\n",[126,4224,4225],{"class":128,"line":570},[126,4226,4227],{"class":132},"Fast-forward\n",[126,4229,4230,4233,4236,4239],{"class":128,"line":602},[126,4231,4232],{"class":132}," console\u002Fviews.py",[126,4234,4235],{"class":136},"         |",[126,4237,4238],{"class":132},"    3",[126,4240,4241],{"class":140}," ++-\n",[126,4243,4244,4247,4250,4253],{"class":128,"line":626},[126,4245,4246],{"class":132}," create\u002Fviews.py",[126,4248,4249],{"class":136},"          |",[126,4251,4252],{"class":132},"    7",[126,4254,4255],{"class":140}," ++++---\n",[126,4257,4258,4261,4264,4267],{"class":128,"line":637},[126,4259,4260],{"class":132}," hostdetail\u002Fviews.py",[126,4262,4263],{"class":136},"      |",[126,4265,4266],{"class":132},"    5",[126,4268,4269],{"class":140}," +++--\n",[126,4271,4272,4275,4278,4281],{"class":128,"line":652},[126,4273,4274],{"class":132}," instance\u002Fviews.py",[126,4276,4277],{"class":136},"        |",[126,4279,4280],{"class":132},"   15",[126,4282,4283],{"class":140}," ++++++++-------\n",[126,4285,4286,4289,4291,4293],{"class":128,"line":657},[126,4287,4288],{"class":132}," interfaces\u002Fviews.py",[126,4290,4263],{"class":136},[126,4292,4252],{"class":132},[126,4294,4255],{"class":140},[126,4296,4297,4300,4302,4305],{"class":128,"line":690},[126,4298,4299],{"class":132}," networks\u002Fviews.py",[126,4301,4277],{"class":136},[126,4303,4304],{"class":132},"    9",[126,4306,4307],{"class":140}," +++++----\n",[126,4309,4310,4313,4315,4317],{"class":128,"line":722},[126,4311,4312],{"class":132}," secrets\u002Fviews.py",[126,4314,4235],{"class":136},[126,4316,4238],{"class":132},[126,4318,4241],{"class":140},[126,4320,4321,4324,4326,4328],{"class":128,"line":754},[126,4322,4323],{"class":132}," servers\u002Fviews.py",[126,4325,4235],{"class":136},[126,4327,4304],{"class":132},[126,4329,4307],{"class":140},[126,4331,4332,4335,4337,4339],{"class":128,"line":785},[126,4333,4334],{"class":132}," storages\u002Fviews.py",[126,4336,4277],{"class":136},[126,4338,4304],{"class":132},[126,4340,4307],{"class":140},[126,4342,4343,4346,4348,4351],{"class":128,"line":817},[126,4344,4345],{"class":132}," templates\u002Fbase.html",[126,4347,4263],{"class":136},[126,4349,4350],{"class":132},"    2",[126,4352,4353],{"class":140}," +-\n",[126,4355,4356,4359,4362,4364],{"class":128,"line":848},[126,4357,4358],{"class":132}," templates\u002Fbase_auth.html",[126,4360,4361],{"class":136}," |",[126,4363,4350],{"class":132},[126,4365,4353],{"class":140},[126,4367,4368,4371,4374,4376],{"class":128,"line":881},[126,4369,4370],{"class":132}," templates\u002Flogin.html",[126,4372,4373],{"class":136},"     |",[126,4375,4350],{"class":132},[126,4377,4353],{"class":140},[126,4379,4380,4383,4385,4388,4391,4394,4396,4399,4401,4404,4407,4410,4412,4415],{"class":128,"line":889},[126,4381,4382],{"class":132}," 12",[126,4384,540],{"class":140},[126,4386,4387],{"class":140}," changed,",[126,4389,4390],{"class":470}," 41",[126,4392,4393],{"class":140}," insertions",[126,4395,1716],{"class":136},[126,4397,4398],{"class":132},"+",[126,4400,1722],{"class":136},[126,4402,4403],{"class":140},",",[126,4405,4406],{"class":470}," 32",[126,4408,4409],{"class":140}," deletions",[126,4411,1716],{"class":136},[126,4413,4414],{"class":132},"-",[126,4416,1737],{"class":136},[117,4418,4420],{"className":119,"code":4419,"language":121,"meta":74,"style":74},".\u002Fmanage.py collectstatic\n",[123,4421,4422],{"__ignoreMap":74},[126,4423,4424,4426],{"class":128,"line":129},[126,4425,1354],{"class":132},[126,4427,1752],{"class":140},[117,4429,4431],{"className":119,"code":4430,"language":121,"meta":74,"style":74},"WARNING:root:No local_settings file found.\n\nYou have requested to collect static files at the destination\nlocation as specified in your settings.\n\nThis will overwrite existing files!\nAre you sure you want to do this?\n\nType 'yes' to continue, or 'no' to cancel: yes\n\n0 static files copied, 75 unmodified.\n",[123,4432,4433,4443,4447,4474,4493,4497,4513,4536,4540,4568,4572],{"__ignoreMap":74},[126,4434,4435,4437,4439,4441],{"class":128,"line":129},[126,4436,1367],{"class":132},[126,4438,1370],{"class":140},[126,4440,1373],{"class":140},[126,4442,1376],{"class":140},[126,4444,4445],{"class":128,"line":220},[126,4446,458],{"emptyLinePlaceholder":457},[126,4448,4449,4451,4453,4456,4458,4461,4463,4465,4468,4471],{"class":128,"line":461},[126,4450,1505],{"class":132},[126,4452,1526],{"class":140},[126,4454,4455],{"class":140}," requested",[126,4457,351],{"class":140},[126,4459,4460],{"class":140}," collect",[126,4462,1795],{"class":140},[126,4464,540],{"class":140},[126,4466,4467],{"class":140}," at",[126,4469,4470],{"class":140}," the",[126,4472,4473],{"class":140}," destination\n",[126,4475,4476,4479,4482,4485,4488,4490],{"class":128,"line":492},[126,4477,4478],{"class":132},"location",[126,4480,4481],{"class":140}," as",[126,4483,4484],{"class":140}," specified",[126,4486,4487],{"class":140}," in",[126,4489,2145],{"class":140},[126,4491,4492],{"class":140}," settings.\n",[126,4494,4495],{"class":128,"line":504},[126,4496,458],{"emptyLinePlaceholder":457},[126,4498,4499,4502,4505,4508,4510],{"class":128,"line":523},[126,4500,4501],{"class":132},"This",[126,4503,4504],{"class":140}," will",[126,4506,4507],{"class":140}," overwrite",[126,4509,1288],{"class":140},[126,4511,4512],{"class":140}," files!\n",[126,4514,4515,4518,4520,4523,4525,4528,4530,4533],{"class":128,"line":528},[126,4516,4517],{"class":132},"Are",[126,4519,1543],{"class":140},[126,4521,4522],{"class":140}," sure",[126,4524,1543],{"class":140},[126,4526,4527],{"class":140}," want",[126,4529,351],{"class":140},[126,4531,4532],{"class":140}," do",[126,4534,4535],{"class":140}," this?\n",[126,4537,4538],{"class":128,"line":570},[126,4539,458],{"emptyLinePlaceholder":457},[126,4541,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562,4564,4566],{"class":128,"line":602},[126,4543,1761],{"class":132},[126,4545,137],{"class":136},[126,4547,1577],{"class":140},[126,4549,144],{"class":136},[126,4551,351],{"class":140},[126,4553,1772],{"class":140},[126,4555,1583],{"class":140},[126,4557,137],{"class":136},[126,4559,1588],{"class":140},[126,4561,144],{"class":136},[126,4563,351],{"class":140},[126,4565,1785],{"class":140},[126,4567,312],{"class":140},[126,4569,4570],{"class":128,"line":626},[126,4571,458],{"emptyLinePlaceholder":457},[126,4573,4574,4577,4579,4581,4584,4587],{"class":128,"line":637},[126,4575,4576],{"class":132},"0",[126,4578,1795],{"class":140},[126,4580,540],{"class":140},[126,4582,4583],{"class":140}," copied,",[126,4585,4586],{"class":470}," 75",[126,4588,4589],{"class":140}," unmodified.\n",[117,4591,4593],{"className":119,"code":4592,"language":121,"meta":74,"style":74},"service supervisor stop\n",[123,4594,4595],{"__ignoreMap":74},[126,4596,4597,4599,4601],{"class":128,"line":129},[126,4598,1997],{"class":132},[126,4600,2000],{"class":140},[126,4602,1842],{"class":140},[15,4604,4605],{},"I'm finishing my migration, and I hope you like your new infrastructure!",[10,4607,4609],{"id":4608},"conclusion","Conclusion",[15,4611,4612],{},"This article presented setting up a KVM\u002FQEMU virtualization infrastructure managed by the WebVirtMgr web interface: installing the required packages, configuring the storage pools, networks and bridged interfaces, then creating and backing up an instance. This open-source, interoperable solution makes it easy to manage a KVM hypervisor without depending on a proprietary vendor, while retaining the flexibility of the Linux terminal for the most technical tasks. I hope this new infrastructure, closer to my Linux habits, keeps working well over time.",[4614,4615,4616],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":74,"searchDepth":220,"depth":220,"links":4618},[4619,4620,4621,4625,4628,4629,4630,4631,4632,4633,4636,4637,4638],{"id":12,"depth":220,"text":13},{"id":20,"depth":220,"text":21},{"id":44,"depth":220,"text":45,"children":4622},[4623,4624],{"id":79,"depth":461,"text":80},{"id":107,"depth":461,"text":108},{"id":245,"depth":220,"text":246,"children":4626},[4627],{"id":2017,"depth":461,"text":2018},{"id":2063,"depth":220,"text":2064},{"id":2282,"depth":220,"text":2283},{"id":2333,"depth":220,"text":2334},{"id":2446,"depth":220,"text":2447},{"id":2477,"depth":220,"text":2478},{"id":3661,"depth":220,"text":3662,"children":4634},[4635],{"id":4056,"depth":461,"text":4057},{"id":4079,"depth":220,"text":4080},{"id":4091,"depth":220,"text":4092},{"id":4608,"depth":220,"text":4609},null,"\u002Fimages\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr\u002F1ecef34685.jpg","2015-03-02","Want to migrate to KVM with WebVirtMgr? Then discover: kvm, libvirt, webvirtmgr, brctl and many others! Prerequisite: a KVM-compatible server.","md",{},"\u002Fen\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr",{"title":5,"description":4642},"migration-vers-kvm-avec-webvirtmgr","en\u002Fblog\u002Fmigration-vers-kvm-avec-webvirtmgr","hfrlzSN12ilRQBeIn3E56KTDII576Dv8-2oSAVs-8Is",[4651,4659,4665,4673,4680,4687,4695,4703],{"title":4652,"path":4653,"stem":4654,"date":4655,"cover":4656,"categories":4657,"children":-1},"Documentation No. 8","\u002Fen\u002Fblog\u002Fbts-documentation-numero-8","en\u002Fblog\u002Fbts-documentation-numero-8","2015-04-13","\u002Fimages\u002Fblog\u002Fbts-documentation-numero-8\u002F36bb38ac4a.jpg",[4658],"BTS",{"title":4660,"path":4661,"stem":4662,"date":4655,"cover":4663,"categories":4664,"children":-1},"Documentation No. 9","\u002Fen\u002Fblog\u002Fbts-documentation-numero-9","en\u002Fblog\u002Fbts-documentation-numero-9","\u002Fimages\u002Fblog\u002Fbts-documentation-numero-9\u002Fa7c04713bd.jpg",[4658],{"title":4666,"path":4667,"stem":4668,"date":4669,"cover":4670,"categories":4671,"children":-1},"Configuring Security Rules on JunOS","\u002Fen\u002Fblog\u002Fconfiguration-regles-securite-sous-junos","en\u002Fblog\u002Fconfiguration-regles-securite-sous-junos","2015-03-29","\u002Fimages\u002Fblog\u002Fconfiguration-regles-securite-sous-junos\u002F1b4814003c.jpg",[4672],"Réseau",{"title":4674,"path":4675,"stem":4676,"date":4677,"cover":4678,"categories":4679,"children":-1},"VMware vCenter in OVH's vRack","\u002Fen\u002Fblog\u002Fvmware-vcenter-dans-vrack-ovh","en\u002Fblog\u002Fvmware-vcenter-dans-vrack-ovh","2015-03-05","\u002Fimages\u002Fblog\u002Fvmware-vcenter-dans-vrack-ovh\u002F1e5012367c.png",[4672],{"title":4681,"path":4682,"stem":4683,"date":4684,"cover":4685,"categories":4686,"children":-1},"Configuring a Virtual Chassis under Junos","\u002Fen\u002Fblog\u002Fconfiguration-chassis-virtuel-sous-junos","en\u002Fblog\u002Fconfiguration-chassis-virtuel-sous-junos","2014-12-15","\u002Fimages\u002Fblog\u002Fconfiguration-chassis-virtuel-sous-junos\u002F1b4814003c.jpg",[4672],{"title":4688,"path":4689,"stem":4690,"date":4691,"cover":4692,"categories":4693,"children":-1},"My Feedback on Training at Greta-Viva5 in Valence: Mind-Blowing Anecdotes","\u002Fen\u002Fblog\u002Ftemoignage-formation-greta-viva5-valence-des-anecdotes-hallucinantes","en\u002Fblog\u002Ftemoignage-formation-greta-viva5-valence-des-anecdotes-hallucinantes","2014-12-01","\u002Fimages\u002Fblog\u002Ftemoignage-formation-greta-viva5-valence-des-anecdotes-hallucinantes\u002Fc0ef05db34.jpg",[4694],"Évènement",{"title":4696,"path":4697,"stem":4698,"date":4699,"cover":4700,"categories":4701,"children":-1},"Install CyanogenMod Unofficial on OnePlus One","\u002Fen\u002Fblog\u002Finstaller-cyanogenmod-unofficial-sur-oneplus-one","en\u002Fblog\u002Finstaller-cyanogenmod-unofficial-sur-oneplus-one","2014-11-24","\u002Fimages\u002Fblog\u002Finstaller-cyanogenmod-unofficial-sur-oneplus-one\u002F83621431fb.png",[4702],"Google",{"title":4704,"path":4705,"stem":4706,"date":4707,"cover":4708,"categories":4709,"children":-1},"Configuring VLANs with Junos","\u002Fen\u002Fblog\u002Fconfiguration-vlan-avec-junos","en\u002Fblog\u002Fconfiguration-vlan-avec-junos","2014-11-18","\u002Fimages\u002Fblog\u002Fconfiguration-vlan-avec-junos\u002F1b4814003c.jpg",[4672],[],1786644890271]