github.com/rahart/packer@v0.12.2-0.20161229105310-282bb6ad370f/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.8-x86_64-minimal.iso", 35 "iso_checksum": "0ca12fe5f28c2ceed4f4084b41ff8a0b", 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 - `use_default_display` (boolean) - If true, do not pass a `-display` option 240 to qemu, allowing it to choose the default. This may be needed when running 241 under OS X. 242 243 \~> **Warning:** The qemu command line allows extreme flexibility, so beware 244 of conflicting arguments causing failures of your run. For instance, using 245 --no-acpi could break the ability to send power signal type commands (e.g., 246 shutdown -P now) to the virtual machine, thus preventing proper shutdown. To see 247 the defaults, look in the packer.log file and search for the qemu-system-x86 248 command. The arguments are all printed for review. 249 250 The following shows a sample usage: 251 252 ``` {.javascript} 253 // ... 254 "qemuargs": [ 255 [ "-m", "1024M" ], 256 [ "--no-acpi", "" ], 257 [ 258 "-netdev", 259 "user,id=mynet0,", 260 "hostfwd=hostip:hostport-guestip:guestport", 261 "" 262 ], 263 [ "-device", "virtio-net,netdev=mynet0" ] 264 ] 265 // ... 266 ``` 267 268 would produce the following (not including other defaults supplied by the 269 builder and not otherwise conflicting with the qemuargs): 270 271 <pre class="prettyprint"> 272 qemu-system-x86 -m 1024m --no-acpi -netdev user,id=mynet0,hostfwd=hostip:hostport-guestip:guestport -device virtio-net,netdev=mynet0" 273 </pre> 274 275 \~> **Windows Users:** [QEMU for Windows](https://qemu.weilnetz.de/) builds are available though an environmental variable does need 276 to be set for QEMU for Windows to redirect stdout to the console instead of stdout.txt. 277 278 The following shows the environment variable that needs to be set for Windows QEMU support: 279 280 ```json 281 setx SDL_STDIO_REDIRECT=0 282 ``` 283 284 You can also use the `SSHHostPort` template variable to produce a packer 285 template that can be invoked by `make` in parallel: 286 287 ``` {.javascript} 288 // ... 289 "qemuargs": [ 290 [ "-netdev", "user,hostfwd=tcp::{{ .SSHHostPort }}-:22,id=forward"], 291 [ "-device", "virtio-net,netdev=forward,id=net0"], 292 ... 293 ] 294 // ... 295 ``` 296 `make -j 3 my-awesome-packer-templates` spawns 3 packer processes, each of which 297 will bind to their own SSH port as determined by each process. This will also 298 work with WinRM, just change the port forward in `qemuargs` to map to WinRM's 299 default port of `5985` or whatever value you have the service set to listen on. 300 301 - `shutdown_command` (string) - The command to use to gracefully shut down the 302 machine once all the provisioning is done. By default this is an empty 303 string, which tells Packer to just forcefully shut down the machine unless a 304 shutdown command takes place inside script so this may safely be omitted. If 305 one or more scripts require a reboot it is suggested to leave this blank 306 since reboots may fail and specify the final shutdown command in your 307 last script. 308 309 - `shutdown_timeout` (string) - The amount of time to wait after executing the 310 `shutdown_command` for the virtual machine to actually shut down. If it 311 doesn't shut down in this time, it is an error. By default, the timeout is 312 `5m`, or five minutes. 313 314 - `skip_compaction` (boolean) - Packer compacts the QCOW2 image using `qemu-img convert`. 315 Set this option to `true` to disable compacting. Defaults to `false`. 316 317 - `ssh_host_port_min` and `ssh_host_port_max` (integer) - The minimum and 318 maximum port to use for the SSH port on the host machine which is forwarded 319 to the SSH port on the guest machine. Because Packer often runs in parallel, 320 Packer will choose a randomly available port in this range to use as the 321 host port. By default this is 2222 to 4444. 322 323 - `vm_name` (string) - This is the name of the image (QCOW2 or IMG) file for 324 the new virtual machine. By default this is "packer-BUILDNAME", where 325 `BUILDNAME` is the name of the build. Currently, no file extension will be 326 used unless it is specified in this option. 327 328 - `vnc_bind_address` (string / IP address) - The IP address that should be binded 329 to for VNC. By default packer will use 127.0.0.1 for this. If you wish to bind 330 to all interfaces use 0.0.0.0 331 332 - `vnc_port_min` and `vnc_port_max` (integer) - The minimum and maximum port 333 to use for VNC access to the virtual machine. The builder uses VNC to type 334 the initial `boot_command`. Because Packer generally runs in parallel, 335 Packer uses a randomly chosen port in this range that appears available. By 336 default this is 5900 to 6000. The minimum and maximum ports are inclusive. 337 338 ## Boot Command 339 340 The `boot_command` configuration is very important: it specifies the keys to 341 type when the virtual machine is first booted in order to start the OS 342 installer. This command is typed after `boot_wait`, which gives the virtual 343 machine some time to actually load the ISO. 344 345 As documented above, the `boot_command` is an array of strings. The strings are 346 all typed in sequence. It is an array only to improve readability within the 347 template. 348 349 The boot command is "typed" character for character over a VNC connection to the 350 machine, simulating a human actually typing the keyboard. There are a set of 351 special keys available. If these are in your boot command, they will be replaced 352 by the proper key: 353 354 - `<bs>` - Backspace 355 356 - `<del>` - Delete 357 358 - `<enter>` and `<return>` - Simulates an actual "enter" or "return" keypress. 359 360 - `<esc>` - Simulates pressing the escape key. 361 362 - `<tab>` - Simulates pressing the tab key. 363 364 - `<f1>` - `<f12>` - Simulates pressing a function key. 365 366 - `<up>` `<down>` `<left>` `<right>` - Simulates pressing an arrow key. 367 368 - `<spacebar>` - Simulates pressing the spacebar. 369 370 - `<insert>` - Simulates pressing the insert key. 371 372 - `<home>` `<end>` - Simulates pressing the home and end keys. 373 374 - `<pageUp>` `<pageDown>` - Simulates pressing the page up and page down keys. 375 376 - `<leftAlt>` `<rightAlt>` - Simulates pressing the alt key. 377 378 - `<leftCtrl>` `<rightCtrl>` - Simulates pressing the ctrl key. 379 380 - `<leftShift>` `<rightShift>` - Simulates pressing the shift key. 381 382 - `<leftAltOn>` `<rightAltOn>` - Simulates pressing and holding the alt key. 383 384 - `<leftCtrlOn>` `<rightCtrlOn>` - Simulates pressing and holding the ctrl key. 385 386 - `<leftShiftOn>` `<rightShiftOn>` - Simulates pressing and holding the shift key. 387 388 - `<leftAltOff>` `<rightAltOff>` - Simulates releasing a held alt key. 389 390 - `<leftCtrlOff>` `<rightCtrlOff>` - Simulates releasing a held ctrl key. 391 392 - `<leftShiftOff>` `<rightShiftOff>` - Simulates releasing a held shift key. 393 394 - `<wait>` `<wait5>` `<wait10>` - Adds a 1, 5 or 10 second pause before 395 sending any additional keys. This is useful if you have to generally wait 396 for the UI to update before typing more. 397 398 - `<waitXX> ` - Add user defined time.Duration pause before sending any 399 additional keys. For example `<wait10m>` or `<wait1m20s>` 400 401 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>`. 402 403 In addition to the special keys, each command to type is treated as a 404 [configuration template](/docs/templates/configuration-templates.html). The 405 available variables are: 406 407 - `HTTPIP` and `HTTPPort` - The IP and port, respectively of an HTTP server 408 that is started serving the directory specified by the `http_directory` 409 configuration parameter. If `http_directory` isn't specified, these will be 410 blank! 411 412 Example boot command. This is actually a working boot command used to start an 413 CentOS 6.4 installer: 414 415 ``` {.javascript} 416 "boot_command": 417 [ 418 "<tab><wait>", 419 " ks=http://10.0.2.2:{{ .HTTPPort }}/centos6-ks.cfg<enter>" 420 ] 421 ``` 422 423 ### Troubleshooting 424 425 Some users have experienced errors complaining about invalid keymaps. This 426 seems to be related to having a `common` directory or file in the directory 427 they've run Packer in, like the packer source directory. This appears to be an 428 upstream bug with qemu, and the best solution for now is to remove the 429 file/directory or run in another directory.