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.