github.com/mmcquillan/packer@v1.1.1-0.20171009221028-c85cf0483a5d/website/source/docs/builders/parallels-iso.html.md (about) 1 --- 2 description: | 3 The Parallels Packer builder is able to create Parallels Desktop for Mac 4 virtual machines and export them in the PVM format, starting from an ISO 5 image. 6 layout: docs 7 page_title: 'Parallels ISO - Builders' 8 sidebar_current: 'docs-builders-parallels-iso' 9 --- 10 11 # Parallels Builder (from an ISO) 12 13 Type: `parallels-iso` 14 15 The Parallels Packer builder is able to create [Parallels Desktop for 16 Mac](https://www.parallels.com/products/desktop/) virtual machines and export 17 them in the PVM format, starting from an ISO image. 18 19 The builder builds a virtual machine by creating a new virtual machine from 20 scratch, booting it, installing an OS, provisioning software within the OS, then 21 shutting it down. The result of the Parallels builder is a directory containing 22 all the files necessary to run the virtual machine portably. 23 24 ## Basic Example 25 26 Here is a basic example. This example is not functional. It will start the OS 27 installer but then fail because we don't provide the preseed file for Ubuntu to 28 self-install. Still, the example serves to show the basic configuration: 29 30 ``` json 31 { 32 "type": "parallels-iso", 33 "guest_os_type": "ubuntu", 34 "iso_url": "http://releases.ubuntu.com/12.04/ubuntu-12.04.3-server-amd64.iso", 35 "iso_checksum": "2cbe868812a871242cdcdd8f2fd6feb9", 36 "iso_checksum_type": "md5", 37 "parallels_tools_flavor": "lin", 38 "ssh_username": "packer", 39 "ssh_password": "packer", 40 "ssh_wait_timeout": "30s", 41 "shutdown_command": "echo 'packer' | sudo -S shutdown -P now" 42 } 43 ``` 44 45 It is important to add a `shutdown_command`. By default Packer halts the virtual 46 machine and the file system may not be sync'd. Thus, changes made in a 47 provisioner might not be saved. 48 49 ## Configuration Reference 50 51 There are many configuration options available for the Parallels builder. They 52 are organized below into two categories: required and optional. Within each 53 category, the available options are alphabetized and described. 54 55 In addition to the options listed here, a 56 [communicator](/docs/templates/communicator.html) can be configured for this 57 builder. 58 59 ### Required: 60 61 - `iso_checksum` (string) - The checksum for the OS ISO file. Because ISO 62 files are so large, this is required and Packer will verify it prior to 63 booting a virtual machine with the ISO attached. The type of the checksum is 64 specified with `iso_checksum_type`, documented below. At least one of 65 `iso_checksum` and `iso_checksum_url` must be defined. This has precedence 66 over `iso_checksum_url` type. 67 68 - `iso_checksum_type` (string) - The type of the checksum specified in 69 `iso_checksum`. Valid values are "none", "md5", "sha1", "sha256", or 70 "sha512" currently. While "none" will skip checksumming, this is not 71 recommended since ISO files are generally large and corruption does happen 72 from time to time. 73 74 - `iso_checksum_url` (string) - A URL to a GNU or BSD style checksum file 75 containing a checksum for the OS ISO file. At least one of `iso_checksum` 76 and `iso_checksum_url` must be defined. This will be ignored if 77 `iso_checksum` is non empty. 78 79 - `iso_url` (string) - A URL to the ISO containing the installation image. 80 This URL can be either an HTTP URL or a file URL (or path to a file). If 81 this is an HTTP URL, Packer will download it and cache it between runs. 82 83 - `parallels_tools_flavor` (string) - The flavor of the Parallels Tools ISO to 84 install into the VM. Valid values are "win", "lin", "mac", "os2" 85 and "other". This can be omitted only if `parallels_tools_mode` 86 is "disable". 87 88 ### Optional: 89 90 - `boot_command` (array of strings) - This is an array of commands to type 91 when the virtual machine is first booted. The goal of these commands should 92 be to type just enough to initialize the operating system installer. Special 93 keys can be typed as well, and are covered in the section below on the 94 boot command. If this is not specified, it is assumed the installer will 95 start itself. 96 97 - `boot_wait` (string) - The time to wait after booting the initial virtual 98 machine before typing the `boot_command`. The value of this should be 99 a duration. Examples are "5s" and "1m30s" which will cause Packer to wait 100 five seconds and one minute 30 seconds, respectively. If this isn't 101 specified, the default is 10 seconds. 102 103 - `disk_size` (integer) - The size, in megabytes, of the hard disk to create 104 for the VM. By default, this is 40000 (about 40 GB). 105 106 - `disk_type` (string) - The type for image file based virtual disk drives, 107 defaults to `expand`. Valid options are `expand` (expanding disk) that the 108 image file is small initially and grows in size as you add data to it, and 109 `plain` (plain disk) that the image file has a fixed size from the moment it 110 is created (i.e the space is allocated for the full drive). Plain disks 111 perform faster than expanding disks. `skip_compaction` will be set to true 112 automatically for plain disks. 113 114 - `floppy_files` (array of strings) - A list of files to place onto a floppy 115 disk that is attached when the VM is booted. This is most useful for 116 unattended Windows installs, which look for an `Autounattend.xml` file on 117 removable media. By default, no floppy will be attached. All files listed in 118 this setting get placed into the root directory of the floppy and the floppy 119 is attached as the first floppy device. Currently, no support exists for 120 creating sub-directories on the floppy. Wildcard characters (\*, ?, 121 and \[\]) are allowed. Directory names are also allowed, which will add all 122 the files found in the directory to the floppy. 123 124 - `floppy_dirs` (array of strings) - A list of directories to place onto 125 the floppy disk recursively. This is similar to the `floppy_files` option 126 except that the directory structure is preserved. This is useful for when 127 your floppy disk includes drivers or if you just want to organize it's 128 contents as a hierarchy. Wildcard characters (\*, ?, and \[\]) are allowed. 129 130 - `guest_os_type` (string) - The guest OS type being installed. By default 131 this is "other", but you can get *dramatic* performance improvements by 132 setting this to the proper value. To view all available values for this run 133 `prlctl create x --distribution list`. Setting the correct value hints to 134 Parallels Desktop how to optimize the virtual hardware to work best with 135 that operating system. 136 137 - `hard_drive_interface` (string) - The type of controller that the hard 138 drives are attached to, defaults to "sata". Valid options are "sata", "ide", 139 and "scsi". 140 141 - `host_interfaces` (array of strings) - A list of which interfaces on the 142 host should be searched for a IP address. The first IP address found on one 143 of these will be used as `{{ .HTTPIP }}` in the `boot_command`. Defaults to 144 \["en0", "en1", "en2", "en3", "en4", "en5", "en6", "en7", "en8", "en9", 145 "ppp0", "ppp1", "ppp2"\]. 146 147 - `http_directory` (string) - Path to a directory to serve using an 148 HTTP server. The files in this directory will be available over HTTP that 149 will be requestable from the virtual machine. This is useful for hosting 150 kickstart files and so on. By default this is "", which means no HTTP server 151 will be started. The address and port of the HTTP server will be available 152 as variables in `boot_command`. This is covered in more detail below. 153 154 - `http_port_min` and `http_port_max` (integer) - These are the minimum and 155 maximum port to use for the HTTP server started to serve the 156 `http_directory`. Because Packer often runs in parallel, Packer will choose 157 a randomly available port in this range to run the HTTP server. If you want 158 to force the HTTP server to be on one port, make this minimum and maximum 159 port the same. By default the values are 8000 and 9000, respectively. 160 161 - `iso_target_extension` (string) - The extension of the iso file after 162 download. This defaults to "iso". 163 164 - `iso_target_path` (string) - The path where the iso should be saved after 165 download. By default will go in the packer cache, with a hash of the 166 original filename as its name. 167 168 - `iso_urls` (array of strings) - Multiple URLs for the ISO to download. 169 Packer will try these in order. If anything goes wrong attempting to 170 download or while downloading a single URL, it will move on to the next. All 171 URLs must point to the same file (same checksum). By default this is empty 172 and `iso_url` is used. Only one of `iso_url` or `iso_urls` can be specified. 173 174 - `output_directory` (string) - This is the path to the directory where the 175 resulting virtual machine will be created. This may be relative or absolute. 176 If relative, the path is relative to the working directory when `packer` 177 is executed. This directory must not exist or be empty prior to running 178 the builder. By default this is "output-BUILDNAME" where "BUILDNAME" is the 179 name of the build. 180 181 - `parallels_tools_guest_path` (string) - The path in the virtual machine to 182 upload Parallels Tools. This only takes effect if `parallels_tools_mode` 183 is "upload". This is a [configuration 184 template](/docs/templates/engine.html) that has a single 185 valid variable: `Flavor`, which will be the value of 186 `parallels_tools_flavor`. By default this is "prl-tools-{{.Flavor}}.iso" 187 which should upload into the login directory of the user. 188 189 - `parallels_tools_mode` (string) - The method by which Parallels Tools are 190 made available to the guest for installation. Valid options are "upload", 191 "attach", or "disable". If the mode is "attach" the Parallels Tools ISO will 192 be attached as a CD device to the virtual machine. If the mode is "upload" 193 the Parallels Tools ISO will be uploaded to the path specified by 194 `parallels_tools_guest_path`. The default value is "upload". 195 196 - `prlctl` (array of array of strings) - Custom `prlctl` commands to execute 197 in order to further customize the virtual machine being created. The value 198 of this is an array of commands to execute. The commands are executed in the 199 order defined in the template. For each command, the command is defined 200 itself as an array of strings, where each string represents a single 201 argument on the command-line to `prlctl` (but excluding `prlctl` itself). 202 Each arg is treated as a [configuration 203 template](/docs/templates/engine.html), where the `Name` 204 variable is replaced with the VM name. More details on how to use `prlctl` 205 are below. 206 207 - `prlctl_post` (array of array of strings) - Identical to `prlctl`, except 208 that it is run after the virtual machine is shutdown, and before the virtual 209 machine is exported. 210 211 - `prlctl_version_file` (string) - The path within the virtual machine to 212 upload a file that contains the `prlctl` version that was used to create 213 the machine. This information can be useful for provisioning. By default 214 this is ".prlctl\_version", which will generally upload it into the 215 home directory. 216 217 - `shutdown_command` (string) - The command to use to gracefully shut down the 218 machine once all the provisioning is done. By default this is an empty 219 string, which tells Packer to just forcefully shut down the machine. 220 221 - `shutdown_timeout` (string) - The amount of time to wait after executing the 222 `shutdown_command` for the virtual machine to actually shut down. If it 223 doesn't shut down in this time, it is an error. By default, the timeout is 224 "5m", or five minutes. 225 226 - `skip_compaction` (boolean) - Virtual disk image is compacted at the end of 227 the build process using `prl_disk_tool` utility (except for the case that 228 `disk_type` is set to `plain`). In certain rare cases, this might corrupt 229 the resulting disk image. If you find this to be the case, you can disable 230 compaction using this configuration value. 231 232 - `vm_name` (string) - This is the name of the PVM directory for the new 233 virtual machine, without the file extension. By default this is 234 "packer-BUILDNAME", where "BUILDNAME" is the name of the build. 235 236 ## Boot Command 237 238 The `boot_command` configuration is very important: it specifies the keys to 239 type when the virtual machine is first booted in order to start the OS 240 installer. This command is typed after `boot_wait`, which gives the virtual 241 machine some time to actually load the ISO. 242 243 As documented above, the `boot_command` is an array of strings. The strings are 244 all typed in sequence. It is an array only to improve readability within the 245 template. 246 247 The boot command is "typed" character for character (using the Parallels 248 Virtualization SDK, see [Parallels Builder](/docs/builders/parallels.html)) 249 simulating a human actually typing the keyboard. There are a set of special keys 250 available. If these are in your boot command, they will be replaced by the 251 proper key: 252 253 - `<bs>` - Backspace 254 255 - `<del>` - Delete 256 257 - `<enter>` and `<return>` - Simulates an actual "enter" or "return" keypress. 258 259 - `<esc>` - Simulates pressing the escape key. 260 261 - `<tab>` - Simulates pressing the tab key. 262 263 - `<f1>` - `<f12>` - Simulates pressing a function key. 264 265 - `<up>` `<down>` `<left>` `<right>` - Simulates pressing an arrow key. 266 267 - `<spacebar>` - Simulates pressing the spacebar. 268 269 - `<insert>` - Simulates pressing the insert key. 270 271 - `<home>` `<end>` - Simulates pressing the home and end keys. 272 273 - `<pageUp>` `<pageDown>` - Simulates pressing the page up and page down keys. 274 275 - `<leftAlt>` `<rightAlt>` - Simulates pressing the alt key. 276 277 - `<leftCtrl>` `<rightCtrl>` - Simulates pressing the ctrl key. 278 279 - `<leftShift>` `<rightShift>` - Simulates pressing the shift key. 280 281 - `<leftAltOn>` `<rightAltOn>` - Simulates pressing and holding the alt key. 282 283 - `<leftCtrlOn>` `<rightCtrlOn>` - Simulates pressing and holding the ctrl key. 284 285 - `<leftShiftOn>` `<rightShiftOn>` - Simulates pressing and holding the shift key. 286 287 - `<leftAltOff>` `<rightAltOff>` - Simulates releasing a held alt key. 288 289 - `<leftCtrlOff>` `<rightCtrlOff>` - Simulates releasing a held ctrl key. 290 291 - `<leftShiftOff>` `<rightShiftOff>` - Simulates releasing a held shift key. 292 293 - `<wait>` `<wait5>` `<wait10>` - Adds a 1, 5 or 10 second pause before 294 sending any additional keys. This is useful if you have to generally wait 295 for the UI to update before typing more. 296 297 When using modifier keys `ctrl`, `alt`, `shift` ensure that you release them, 298 otherwise they will be held down until the machine reboots. Use lowercase 299 characters as well inside modifiers. 300 301 For example: to simulate ctrl+c use `<leftCtrlOn>c<leftCtrlOff>`. 302 303 In addition to the special keys, each command to type is treated as a 304 [template engine](/docs/templates/engine.html). The 305 available variables are: 306 307 - `HTTPIP` and `HTTPPort` - The IP and port, respectively of an HTTP server 308 that is started serving the directory specified by the `http_directory` 309 configuration parameter. If `http_directory` isn't specified, these will be 310 blank! 311 312 Example boot command. This is actually a working boot command used to start an 313 Ubuntu 12.04 installer: 314 315 ``` text 316 [ 317 "<esc><esc><enter><wait>", 318 "/install/vmlinuz noapic ", 319 "preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg ", 320 "debian-installer=en_US auto locale=en_US kbd-chooser/method=us ", 321 "hostname={{ .Name }} ", 322 "fb=false debconf/frontend=noninteractive ", 323 "keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA ", 324 "keyboard-configuration/variant=USA console-setup/ask_detect=false ", 325 "initrd=/install/initrd.gz -- <enter>;" 326 ] 327 ``` 328 329 ## prlctl Commands 330 331 In order to perform extra customization of the virtual machine, a template can 332 define extra calls to `prlctl` to perform. 333 [prlctl](http://download.parallels.com/desktop/v9/ga/docs/en_US/Parallels%20Command%20Line%20Reference%20Guide.pdf) 334 is the command-line interface to Parallels Desktop. It can be used to configure 335 the virtual machine, such as set RAM, CPUs, etc. 336 337 Extra `prlctl` commands are defined in the template in the `prlctl` section. An 338 example is shown below that sets the memory and number of CPUs within the 339 virtual machine: 340 341 ``` json 342 { 343 "prlctl": [ 344 ["set", "{{.Name}}", "--memsize", "1024"], 345 ["set", "{{.Name}}", "--cpus", "2"] 346 ] 347 } 348 ``` 349 350 The value of `prlctl` is an array of commands to execute. These commands are 351 executed in the order defined. So in the above example, the memory will be set 352 followed by the CPUs. 353 354 Each command itself is an array of strings, where each string is an argument to 355 `prlctl`. Each argument is treated as a [template engine](/docs/templates/engine.html). The only available 356 variable is `Name` which is replaced with the unique name of the VM, which is 357 required for many `prlctl` calls.