commit
68ccc25108
128
README.md
128
README.md
@ -5,3 +5,131 @@ This builder plugin extends packer.io to support building images for XenServer.
|
|||||||
You can check out packer [here](https://packer.io).
|
You can check out packer [here](https://packer.io).
|
||||||
|
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
* Packer >= 0.7.2 (https://packer.io)
|
||||||
|
* XenServer > 6.2 (http://xenserver.org)
|
||||||
|
* Golang (tested with 1.2.1)
|
||||||
|
|
||||||
|
|
||||||
|
In order for this integration to work you must also configure NATing in Dom0.
|
||||||
|
|
||||||
|
You can do this by executing the following in Dom0:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Install netcat
|
||||||
|
yum install --enablerepo=base,extras --disablerepo=citrix -y nc
|
||||||
|
# Setup NAT - NB, this _disable the firewall_ - be careful!
|
||||||
|
echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||||
|
/sbin/iptables -F INPUT
|
||||||
|
|
||||||
|
/sbin/iptables -t nat -A POSTROUTING -o xenbr0 -j MASQUERADE
|
||||||
|
/sbin/iptables -A INPUT -i xenbr0 -p tcp -m tcp --dport 53 -j ACCEPT
|
||||||
|
/sbin/iptables -A INPUT -i xenbr0 -p udp -m udp --dport 53 -j ACCEPT
|
||||||
|
/sbin/iptables -A FORWARD -i xenbr0 -o xenapi -m state --state RELATED,ESTABLISHED -j ACCEPT
|
||||||
|
/sbin/iptables -A FORWARD -i xenapi -o xenbr0 -j ACCEPT
|
||||||
|
```
|
||||||
|
(Borrowed from: jonludlam/vagrant-xenserver)
|
||||||
|
|
||||||
|
|
||||||
|
## Install Go
|
||||||
|
|
||||||
|
Follow these instructions and install golang on your system:
|
||||||
|
* https://golang.org/doc/install
|
||||||
|
|
||||||
|
## Install Packer
|
||||||
|
|
||||||
|
Visit https://packer.io and install the latest version of packer. Once the
|
||||||
|
install has completed, setup an environment variable 'PACKERPATH' pointing
|
||||||
|
to the installation location. E.g.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
export PACKERPATH=/usr/local/packer
|
||||||
|
```
|
||||||
|
|
||||||
|
## Compile the plugin
|
||||||
|
|
||||||
|
Once you have installed Packer, you must compile this plugin and install the
|
||||||
|
resulting binary.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd $GOROOT
|
||||||
|
mkdir -p src/github.com/rdobson/
|
||||||
|
cd src/github.com/rdobson
|
||||||
|
git clone https://github.com/rdobson/packer-builder-xenserver.git
|
||||||
|
cd packer-builder-xenserver
|
||||||
|
./build.sh
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
If the build is successful, you should now have a 'packer-builder-xenserver' binary
|
||||||
|
in your $PACKERPATH directory and you are ready to get going with packer.
|
||||||
|
|
||||||
|
## Centos 6.4 Example
|
||||||
|
|
||||||
|
Once you've setup the above, you are good to go with an example.
|
||||||
|
|
||||||
|
To get you started, there is an example config file which you can use `examples/centos-6.4.conf`:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
{
|
||||||
|
"builders": [{
|
||||||
|
"type": "xenserver",
|
||||||
|
"username": "root",
|
||||||
|
"password": "hostpassword",
|
||||||
|
"host_ip": "10.81.2.105",
|
||||||
|
"instance_name": "packer-centos-6-4",
|
||||||
|
"instance_memory": "2048000000",
|
||||||
|
"root_disk_size": "5000000000",
|
||||||
|
"iso_name": "CentOS-6.4-x86_64-minimal.iso",
|
||||||
|
"http_directory": "http",
|
||||||
|
"local_ip": "10.80.3.223",
|
||||||
|
"ssh_username": "root",
|
||||||
|
"ssh_password": "vmpassword",
|
||||||
|
"boot_command":
|
||||||
|
[
|
||||||
|
"<tab><wait>",
|
||||||
|
" ks=http://{{ .HTTPIP }}:{{ .HTTPPort }}/centos6-ks.cfg<enter>"
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Currently it is not (easily) possible to take care of the ISO download and upload,
|
||||||
|
so you will need to attach an ISO SR to the XenServer host (NFS/CIFS) with the
|
||||||
|
ISO you want to use for installation. You will then need to specify the name
|
||||||
|
in the config file (this must be unique).
|
||||||
|
|
||||||
|
|
||||||
|
An explanation of what these parameters are doing:
|
||||||
|
* `type` - this specifies the builder. This must be 'xenserver'.
|
||||||
|
* `username` - this is the username for the XenServer host being used.
|
||||||
|
* `password` - this is the password for the XenServer host being used.
|
||||||
|
* `host_ip` - this is the IP for the XenServer host being used.
|
||||||
|
* `instance_name` - this is the name that should be given to the created VM.
|
||||||
|
* `instance_memory` - this is the static memory configuration for the VM.
|
||||||
|
* `root_disk_size` - this is the size of the disk the VM should be created with.
|
||||||
|
* `iso_name` - this is the name of the ISO visible on a ISO SR connected to the XenServer host.
|
||||||
|
* `http_directory` - the path to a local directory to serve up over http.
|
||||||
|
* `local_ip` - the IP on the machine you are running packer that your XenServer can connect too.
|
||||||
|
* `ssh_username` - the username set by the installer for the instance.
|
||||||
|
* `ssh_password` - the password set by the installer for the instance.
|
||||||
|
* `boot_command` - a set of commands to be sent to the instance over VNC.
|
||||||
|
|
||||||
|
|
||||||
|
Note, the `http_directory` and `local_ip` parameters are only required if you
|
||||||
|
want packer to serve up files over HTTP. In this example, the templated variables
|
||||||
|
`{{ .HTTPIP }}` and `{{ .HTTPPort }}` will be substituted for the `local_ip` and
|
||||||
|
the port that packer starts it's HTTP service on.
|
||||||
|
|
||||||
|
Once you've updated the config file with your own parameters, you can use packer
|
||||||
|
to build this VM with the following:
|
||||||
|
|
||||||
|
```
|
||||||
|
packer build centos-6.4.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,18 +1,13 @@
|
|||||||
{
|
|
||||||
"builders": [{
|
"builders": [{
|
||||||
"type": "xenserver",
|
"type": "xenserver",
|
||||||
"username": "root",
|
"username": "root",
|
||||||
"password": "hostpassword",
|
"password": "hostpassword",
|
||||||
"host_ip": "10.81.2.105",
|
"host_ip": "10.81.2.105",
|
||||||
"instance_name": "packer-centos-6-4",
|
"instance_name": "packer-centos-6-4",
|
||||||
"root_disk_size": "5000000000",
|
"instance_memory": "2048000000",
|
||||||
"clone_template": "b31a4a3a-a44f-68df-bb53-33529a9db3b7",
|
"root_disk_size": "40000000000",
|
||||||
"iso_uuid": "3079a3f4-a49b-4f65-8afd-c2351b2c3399",
|
"iso_name": "CentOS-6.4-x86_64-minimal.iso",
|
||||||
"sr_uuid": "88328079-d58d-2b43-1f28-982e0e60ec23",
|
|
||||||
"network_uuid": "02021c25-34b8-2a32-3f55-1d6338e869e2",
|
|
||||||
"iso_url": "http://mirrors.usc.edu/pub/linux/distributions/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-minimal.iso",
|
|
||||||
"iso_checksum_type": "md5",
|
|
||||||
"iso_checksum": "4a5fa01c81cc300f4729136e28ebe600",
|
|
||||||
"http_directory": "http",
|
"http_directory": "http",
|
||||||
"local_ip": "10.80.3.223",
|
"local_ip": "10.80.3.223",
|
||||||
"ssh_username": "root",
|
"ssh_username": "root",
|
||||||
|
@ -4,7 +4,7 @@ lang en_US.UTF-8
|
|||||||
keyboard us
|
keyboard us
|
||||||
unsupported_hardware
|
unsupported_hardware
|
||||||
network --bootproto=dhcp
|
network --bootproto=dhcp
|
||||||
rootpw --iscrypted $1$wwD0QIub$WNz1RShXh1UapQzmpF4/c1
|
rootpw --iscrypted $1$DIlig7gp$FuhFdeHj.R1VrEzZsI4uo0
|
||||||
firewall --disabled
|
firewall --disabled
|
||||||
authconfig --enableshadow --passalgo=sha512
|
authconfig --enableshadow --passalgo=sha512
|
||||||
selinux --permissive
|
selinux --permissive
|
||||||
|
Loading…
Reference in New Issue
Block a user