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.