github.com/amanya/packer@v0.12.1-0.20161117214323-902ac5ab2eb6/website/source/docs/builders/qemu.html.md (about) 1 --- 2 description: | 3 The Qemu Packer builder is able to create KVM and Xen virtual machine images. 4 Support for Xen is experimental at this time. 5 layout: docs 6 page_title: QEMU Builder 7 ... 8 9 # QEMU Builder 10 11 Type: `qemu` 12 13 The Qemu Packer builder is able to create [KVM](http://www.linux-kvm.org) and 14 [Xen](http://www.xenproject.org) virtual machine images. Support for Xen is 15 experimental at this time. 16 17 The builder builds a virtual machine by creating a new virtual machine from 18 scratch, booting it, installing an OS, rebooting the machine with the boot media 19 as the virtual hard drive, provisioning software within the OS, then shutting it 20 down. The result of the Qemu builder is a directory containing the image file 21 necessary to run the virtual machine on KVM or Xen. 22 23 ## Basic Example 24 25 Here is a basic example. This example is functional so long as you fixup paths 26 to files, URLS for ISOs and checksums. 27 28 ``` {.javascript} 29 { 30 "builders": 31 [ 32 { 33 "type": "qemu", 34 "iso_url": "http://mirror.raystedman.net/centos/6/isos/x86_64/CentOS-6.5-x86_64-minimal.iso", 35 "iso_checksum": "0d9dc37b5dd4befa1c440d2174e88a87", 36 "iso_checksum_type": "md5", 37 "output_directory": "output_centos_tdhtest", 38 "shutdown_command": "shutdown -P now", 39 "disk_size": 5000, 40 "format": "qcow2", 41 "headless": false, 42 "accelerator": "kvm", 43 "http_directory": "httpdir", 44 "http_port_min": 10082, 45 "http_port_max": 10089, 46 "ssh_host_port_min": 2222, 47 "ssh_host_port_max": 2229, 48 "ssh_username": "root", 49 "ssh_password": "s0m3password", 50 "ssh_port": 22, 51 "ssh_wait_timeout": "30s", 52 "vm_name": "tdhtest", 53 "net_device": "virtio-net", 54 "disk_interface": "virtio", 55 "boot_wait": "5s", 56 "boot_command": 57 [ 58 "<tab> text ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/centos6-ks.cfg<enter><wait>" 59 ] 60 } 61 ] 62 } 63 ``` 64 65 A working CentOS 6.x kickstart file can be found [at this 66 URL](https://gist.github.com/mitchellh/7328271/#file-centos6-ks-cfg), adapted 67 from an unknown source. Place this file in the http directory with the proper 68 name. For the example above, it should go into "httpdir" with a name of 69 "centos6-ks.cfg". 70 71 ## Configuration Reference 72 73 There are many configuration options available for the Qemu builder. They are 74 organized below into two categories: required and optional. Within each 75 category, the available options are alphabetized and described. 76 77 In addition to the options listed here, a 78 [communicator](/docs/templates/communicator.html) can be configured for this 79 builder. 80 81 Note that you will need to set `"headless": true` if you are running Packer 82 on a Linux server without X11; or if you are connected via ssh to a remote 83 Linux server and have not enabled X11 forwarding (`ssh -X`). 84 85 ### Required: 86 87 - `iso_checksum` (string) - The checksum for the OS ISO file. Because ISO 88 files are so large, this is required and Packer will verify it prior to 89 booting a virtual machine with the ISO attached. The type of the checksum is 90 specified with `iso_checksum_type`, documented below. At least one of 91 `iso_checksum` and `iso_checksum_url` must be defined. This has precedence 92 over `iso_checksum_url` type. 93 94 - `iso_checksum_type` (string) - The type of the checksum specified in 95 `iso_checksum`. Valid values are "none", "md5", "sha1", "sha256", or 96 "sha512" currently. While "none" will skip checksumming, this is not 97 recommended since ISO files are generally large and corruption does happen 98 from time to time. 99 100 - `iso_checksum_url` (string) - A URL to a GNU or BSD style checksum file 101 containing a checksum for the OS ISO file. At least one of `iso_checksum` 102 and `iso_checksum_url` must be defined. This will be ignored if 103 `iso_checksum` is non empty. 104 105 - `iso_url` (string) - A URL to the ISO containing the installation image. 106 This URL can be either an HTTP URL or a file URL (or path to a file). If 107 this is an HTTP URL, Packer will download it and cache it between runs. 108 109 - `ssh_username` (string) - The username to use to SSH into the machine once 110 the OS is installed. 111 112 ### Optional: 113 114 - `accelerator` (string) - The accelerator type to use when running the VM. 115 This may be `none`, `kvm`, `tcg`, or `xen`. The appropriate software must 116 already been installed on your build machine to use the accelerator you 117 specified. When no accelerator is specified, Packer will try to use `kvm` 118 if it is available but will default to `tcg` otherwise. 119 120 - `boot_command` (array of strings) - This is an array of commands to type 121 when the virtual machine is first booted. The goal of these commands should 122 be to type just enough to initialize the operating system installer. Special 123 keys can be typed as well, and are covered in the section below on the 124 boot command. If this is not specified, it is assumed the installer will 125 start itself. 126 127 - `boot_wait` (string) - The time to wait after booting the initial virtual 128 machine before typing the `boot_command`. The value of this should be 129 a duration. Examples are "5s" and "1m30s" which will cause Packer to wait 130 five seconds and one minute 30 seconds, respectively. If this isn't 131 specified, the default is 10 seconds. 132 133 - `disk_cache` (string) - The cache mode to use for disk. Allowed values 134 include any of "writethrough", "writeback", "none", "unsafe" 135 or "directsync". By default, this is set to "writeback". 136 137 - `disk_compression` (boolean) - Apply compression to the QCOW2 disk file 138 using `qemu-img convert`. Defaults to `false`. 139 140 - `disk_discard` (string) - The discard mode to use for disk. Allowed values 141 include any of "unmap" or "ignore". By default, this is set to "ignore". 142 143 - `disk_image` (boolean) - Packer defaults to building from an ISO file, this 144 parameter controls whether the ISO URL supplied is actually a bootable 145 QEMU image. When this value is set to true, the machine will clone the 146 source, resize it according to `disk_size` and boot the image. 147 148 - `disk_interface` (string) - The interface to use for the disk. Allowed 149 values include any of "ide", "scsi", "virtio" or "virtio-scsi". Note also 150 that any boot commands or kickstart type scripts must have proper 151 adjustments for resulting device names. The Qemu builder uses "virtio" by 152 default. 153 154 - `disk_size` (integer) - The size, in megabytes, of the hard disk to create 155 for the VM. By default, this is 40000 (about 40 GB). 156 157 - `floppy_files` (array of strings) - A list of files to place onto a floppy 158 disk that is attached when the VM is booted. This is most useful for 159 unattended Windows installs, which look for an `Autounattend.xml` file on 160 removable media. By default, no floppy will be attached. All files listed in 161 this setting get placed into the root directory of the floppy and the floppy 162 is attached as the first floppy device. Currently, no support exists for 163 creating sub-directories on the floppy. Wildcard characters (\*, ?, 164 and \[\]) are allowed. Directory names are also allowed, which will add all 165 the files found in the directory to the floppy. 166 167 - `floppy_dirs` (array of strings) - A list of directories to place onto 168 the floppy disk recursively. This is similar to the `floppy_files` option 169 except that the directory structure is preserved. This is useful for when 170 your floppy disk includes drivers or if you just want to organize it's 171 contents as a hierarchy. Wildcard characters (\*, ?, and \[\]) are allowed. 172 173 - `format` (string) - Either "qcow2" or "raw", this specifies the output 174 format of the virtual machine image. This defaults to `qcow2`. 175 176 - `headless` (boolean) - Packer defaults to building QEMU virtual machines by 177 launching a GUI that shows the console of the machine being built. When this 178 value is set to true, the machine will start without a console. 179 180 You can still see the console if you make a note of the VNC display 181 number chosen, and then connect using `vncviewer -Shared <host>:<display>` 182 183 - `http_directory` (string) - Path to a directory to serve using an 184 HTTP server. The files in this directory will be available over HTTP that 185 will be requestable from the virtual machine. This is useful for hosting 186 kickstart files and so on. By default this is "", which means no HTTP server 187 will be started. The address and port of the HTTP server will be available 188 as variables in `boot_command`. This is covered in more detail below. 189 190 - `http_port_min` and `http_port_max` (integer) - These are the minimum and 191 maximum port to use for the HTTP server started to serve the 192 `http_directory`. Because Packer often runs in parallel, Packer will choose 193 a randomly available port in this range to run the HTTP server. If you want 194 to force the HTTP server to be on one port, make this minimum and maximum 195 port the same. By default the values are 8000 and 9000, respectively. 196 197 - `iso_skip_cache` (boolean) - Use iso from provided url. Qemu must support 198 curl block device. This defaults to `false`. 199 200 - `iso_target_path` (string) - The path where the iso should be saved after 201 download. By default will go in the packer cache, with a hash of the 202 original filename as its name. 203 204 - `iso_urls` (array of strings) - Multiple URLs for the ISO to download. 205 Packer will try these in order. If anything goes wrong attempting to 206 download or while downloading a single URL, it will move on to the next. All 207 URLs must point to the same file (same checksum). By default this is empty 208 and `iso_url` is used. Only one of `iso_url` or `iso_urls` can be specified. 209 210 - `machine_type` (string) - The type of machine emulation to use. Run your 211 qemu binary with the flags `-machine help` to list available types for 212 your system. This defaults to "pc". 213 214 - `net_device` (string) - The driver to use for the network interface. Allowed 215 values "ne2k\_pci", "i82551", "i82557b", "i82559er", "rtl8139", "e1000", 216 "pcnet", "virtio", "virtio-net", "virtio-net-pci", "usb-net", "i82559a", 217 "i82559b", "i82559c", "i82550", "i82562", "i82557a", "i82557c", "i82801", 218 "vmxnet3", "i82558a" or "i82558b". The Qemu builder uses "virtio-net" by 219 default. 220 221 - `output_directory` (string) - This is the path to the directory where the 222 resulting virtual machine will be created. This may be relative or absolute. 223 If relative, the path is relative to the working directory when `packer` 224 is executed. This directory must not exist or be empty prior to running 225 the builder. By default this is "output-BUILDNAME" where "BUILDNAME" is the 226 name of the build. 227 228 - `qemu_binary` (string) - The name of the Qemu binary to look for. This 229 defaults to "qemu-system-x86\_64", but may need to be changed for 230 some platforms. For example "qemu-kvm", or "qemu-system-i386" may be a 231 better choice for some systems. 232 233 - `qemuargs` (array of array of strings) - Allows complete control over the 234 qemu command line (though not, at this time, qemu-img). Each array of 235 strings makes up a command line switch that overrides matching default 236 switch/value pairs. Any value specified as an empty string is ignored. All 237 values after the switch are concatenated with no separator. 238 239 \~> **Warning:** The qemu command line allows extreme flexibility, so beware 240 of conflicting arguments causing failures of your run. For instance, using 241 --no-acpi could break the ability to send power signal type commands (e.g., 242 shutdown -P now) to the virtual machine, thus preventing proper shutdown. To see 243 the defaults, look in the packer.log file and search for the qemu-system-x86 244 command. The arguments are all printed for review. 245 246 The following shows a sample usage: 247 248 ``` {.javascript} 249 // ... 250 "qemuargs": [ 251 [ "-m", "1024M" ], 252 [ "--no-acpi", "" ], 253 [ 254 "-netdev", 255 "user,id=mynet0,", 256 "hostfwd=hostip:hostport-guestip:guestport", 257 "" 258 ], 259 [ "-device", "virtio-net,netdev=mynet0" ] 260 ] 261 // ... 262 ``` 263 264 would produce the following (not including other defaults supplied by the 265 builder and not otherwise conflicting with the qemuargs): 266 267 <pre class="prettyprint"> 268 qemu-system-x86 -m 1024m --no-acpi -netdev user,id=mynet0,hostfwd=hostip:hostport-guestip:guestport -device virtio-net,netdev=mynet0" 269 </pre> 270 271 \~> **Windows Users:** [QEMU for Windows](https://qemu.weilnetz.de/) builds are available though an environmental variable does need 272 to be set for QEMU for Windows to redirect stdout to the console instead of stdout.txt. 273 274 The following shows the environment variable that needs to be set for Windows QEMU support: 275 276 ```json 277 setx SDL_STDIO_REDIRECT=0 278 ``` 279 280 You can also use the `SSHHostPort` template variable to produce a packer 281 template that can be invoked by `make` in parallel: 282 283 ``` {.javascript} 284 // ... 285 "qemuargs": [ 286 [ "-netdev", "user,hostfwd=tcp::{{ .SSHHostPort }}-:22,id=forward"], 287 [ "-device", "virtio-net,netdev=forward,id=net0"], 288 ... 289 ] 290 // ... 291 ``` 292 `make -j 3 my-awesome-packer-templates` spawns 3 packer processes, each of which 293 will bind to their own SSH port as determined by each process. This will also 294 work with WinRM, just change the port forward in `qemuargs` to map to WinRM's 295 default port of `5985` or whatever value you have the service set to listen on. 296 297 - `shutdown_command` (string) - The command to use to gracefully shut down the 298 machine once all the provisioning is done. By default this is an empty 299 string, which tells Packer to just forcefully shut down the machine unless a 300 shutdown command takes place inside script so this may safely be omitted. If 301 one or more scripts require a reboot it is suggested to leave this blank 302 since reboots may fail and specify the final shutdown command in your 303 last script. 304 305 - `shutdown_timeout` (string) - The amount of time to wait after executing the 306 `shutdown_command` for the virtual machine to actually shut down. If it 307 doesn't shut down in this time, it is an error. By default, the timeout is 308 `5m`, or five minutes. 309 310 - `skip_compaction` (boolean) - Packer compacts the QCOW2 image using `qemu-img convert`. 311 Set this option to `true` to disable compacting. Defaults to `false`. 312 313 - `ssh_host_port_min` and `ssh_host_port_max` (integer) - The minimum and 314 maximum port to use for the SSH port on the host machine which is forwarded 315 to the SSH port on the guest machine. Because Packer often runs in parallel, 316 Packer will choose a randomly available port in this range to use as the 317 host port. By default this is 2222 to 4444. 318 319 - `vm_name` (string) - This is the name of the image (QCOW2 or IMG) file for 320 the new virtual machine. By default this is "packer-BUILDNAME", where 321 `BUILDNAME` is the name of the build. Currently, no file extension will be 322 used unless it is specified in this option. 323 324 - `vnc_bind_address` (string / IP address) - The IP address that should be binded 325 to for VNC. By default packer will use 127.0.0.1 for this. If you wish to bind 326 to all interfaces use 0.0.0.0 327 328 - `vnc_port_min` and `vnc_port_max` (integer) - The minimum and maximum port 329 to use for VNC access to the virtual machine. The builder uses VNC to type 330 the initial `boot_command`. Because Packer generally runs in parallel, 331 Packer uses a randomly chosen port in this range that appears available. By 332 default this is 5900 to 6000. The minimum and maximum ports are inclusive. 333 334 ## Boot Command 335 336 The `boot_command` configuration is very important: it specifies the keys to 337 type when the virtual machine is first booted in order to start the OS 338 installer. This command is typed after `boot_wait`, which gives the virtual 339 machine some time to actually load the ISO. 340 341 As documented above, the `boot_command` is an array of strings. The strings are 342 all typed in sequence. It is an array only to improve readability within the 343 template. 344 345 The boot command is "typed" character for character over a VNC connection to the 346 machine, simulating a human actually typing the keyboard. There are a set of 347 special keys available. If these are in your boot command, they will be replaced 348 by the proper key: 349 350 - `<bs>` - Backspace 351 352 - `<del>` - Delete 353 354 - `<enter>` and `<return>` - Simulates an actual "enter" or "return" keypress. 355 356 - `<esc>` - Simulates pressing the escape key. 357 358 - `<tab>` - Simulates pressing the tab key. 359 360 - `<f1>` - `<f12>` - Simulates pressing a function key. 361 362 - `<up>` `<down>` `<left>` `<right>` - Simulates pressing an arrow key. 363 364 - `<spacebar>` - Simulates pressing the spacebar. 365 366 - `<insert>` - Simulates pressing the insert key. 367 368 - `<home>` `<end>` - Simulates pressing the home and end keys. 369 370 - `<pageUp>` `<pageDown>` - Simulates pressing the page up and page down keys. 371 372 - `<leftAlt>` `<rightAlt>` - Simulates pressing the alt key. 373 374 - `<leftCtrl>` `<rightCtrl>` - Simulates pressing the ctrl key. 375 376 - `<leftShift>` `<rightShift>` - Simulates pressing the shift key. 377 378 - `<leftAltOn>` `<rightAltOn>` - Simulates pressing and holding the alt key. 379 380 - `<leftCtrlOn>` `<rightCtrlOn>` - Simulates pressing and holding the ctrl key. 381 382 - `<leftShiftOn>` `<rightShiftOn>` - Simulates pressing and holding the shift key. 383 384 - `<leftAltOff>` `<rightAltOff>` - Simulates releasing a held alt key. 385 386 - `<leftCtrlOff>` `<rightCtrlOff>` - Simulates releasing a held ctrl key. 387 388 - `<leftShiftOff>` `<rightShiftOff>` - Simulates releasing a held shift key. 389 390 - `<wait>` `<wait5>` `<wait10>` - Adds a 1, 5 or 10 second pause before 391 sending any additional keys. This is useful if you have to generally wait 392 for the UI to update before typing more. 393 394 - `<waitXX> ` - Add user defined time.Duration pause before sending any 395 additional keys. For example `<wait10m>` or `<wait1m20s>` 396 397 When using modifier keys `ctrl`, `alt`, `shift` ensure that you release them, otherwise they will be held down until the machine reboots. Use lowercase characters as well inside modifiers. For example: to simulate ctrl+c use `<leftCtrlOn>c<leftCtrlOff>`. 398 399 In addition to the special keys, each command to type is treated as a 400 [configuration template](/docs/templates/configuration-templates.html). The 401 available variables are: 402 403 - `HTTPIP` and `HTTPPort` - The IP and port, respectively of an HTTP server 404 that is started serving the directory specified by the `http_directory` 405 configuration parameter. If `http_directory` isn't specified, these will be 406 blank! 407 408 Example boot command. This is actually a working boot command used to start an 409 CentOS 6.4 installer: 410 411 ``` {.javascript} 412 "boot_command": 413 [ 414 "<tab><wait>", 415 " ks=http://10.0.2.2:{{ .HTTPPort }}/centos6-ks.cfg<enter>" 416 ] 417 ```