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