diff --git a/proxmox/terraform/init-template.md b/proxmox/terraform/init-template.md new file mode 100644 --- /dev/null +++ b/proxmox/terraform/init-template.md @@ -0,0 +1,169 @@ +In the following documentation, we will explain the necessary steps +needed to initialize a template vm. + +Expectations: + +- hypervisor: orsay (could be beaubourg, hypervisor3) +- \`/usr/bin/qm\` available from the hypervisor + +Prepare vm template +=================== + +Connect to hypervisor orsay (\`ssh orsay\`) + +And then as root, retrieve openstack images: + +``` +mkdir debian-10 +wget -O debian-10/debian-10-openstack-amd64.qcow2 \ + https://cdimage.debian.org/cdimage/openstack/current/debian-10.0.1-20190708-openstack-amd64.qcow2 +wget -O debian-10/debian-10-openstack-amd64.qcow2.index \ + https://cdimage.debian.org/cdimage/openstack/current/debian-10.0.1-20190708-openstack-amd64.qcow2.index +mkdir debian-9 +wget -O debian-9/debian-9-openstack-amd64.qcow2 \ + https://cloud.debian.org/images/cloud/OpenStack/current-9/debian-9-openstack-amd64.qcow2 +wget -O debian-9/debian-9-openstack-amd64.qcow2.index \ + https://cloud.debian.org/images/cloud/OpenStack/current-9/debian-9-openstack-amd64.qcow2.index +``` + +Note: + +- Not presented here but you should check the hashes of what you + retrieved from the internet + +Create vm +--------- + +``` +chmod +x init-template.sh +./init-template.sh 9 +``` + +This created a basic vm with basic login/pass as root/test so we can +connect to it. + +Note: Implementation wise, this uses an openstack debian image, +cloud-init ready [1] + +[1] https://cdimage.debian.org/cdimage/openstack/ + +Check image is working +---------------------- + +The rationale is to: + +- boot the vm +- check some basic information (kernel, distribution, connection, + release, etc...). +- adapt slightly the vms (dns resolver, ip, upgrade, etc...) + +### Start vm + +``` +qm start 9000 +``` + +### Checks + +Login through the console web-ui: + +- accessible from +- View \`datacenter\` +- unfold the hypervisor \`orsay\` menu +- select the vm \`9000\` +- click the \`console\` menu. +- log in as root/test password + +Checks: + +- kernel linux version +- debian release + +### Adaptations + +Update grub's timeout to 0 for a faster boot (as root): +``` +sed -i s'/GRUB_TIMEOUT = 5/GRUB_TIMEOUT = 0/' etc/default/grub +update-grub +``` + +Then, add some expected defaults: +``` +apt update +apt upgrade -y +apt install -y puppet +systemctl stop puppet; systemctl disable puppet.service +mkdir -p /etc/facter/facts.d +echo location=sesi_rocquencourt_staging > /etc/facter/facts.d/location.txt + +# for stretch (debian-9) +# we need a superior version of facter package +# because we use syntax from that superior version +cat > /etc/apt/sources.list.d/backports.list < /etc/apt/sources.list.d/buster.list < diff --git a/proxmox/terraform/init-template.sh b/proxmox/terraform/init-template.sh new file mode 100644 --- /dev/null +++ b/proxmox/terraform/init-template.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +set -x +set -e + +VERSION=${1-"9"} +NAME="template-debian-${VERSION}" +IMG="debian-$VERSION/debian-$VERSION-openstack-amd64.qcow2" + +VM_ID="${VERSION}000" +VM_DISK="vm-$VM_ID-disk-0" + +# create vm +qm create $VM_ID --memory 4096 --net0 virtio,bridge=vmbr0 --name "$NAME" +# import disk to orsay-ssd-2018 (lots of space there) +qm importdisk $VM_ID $IMG orsay-ssd-2018 --format qcow2 +# finally attach the new disk to the VM as virtio drive +qm set $VM_ID --scsihw virtio-scsi-pci --virtio0 "orsay-ssd-2018:$VM_DISK" +# resize the disk to add 30G (image size is 2G) ~> this increases the clone time so no +# qm resize 9000 virtio0 +30G +# configure a cdrom drive which is used to pass the cloud-init data +# to the vm +qm set $VM_ID --ide2 orsay-ssd-2018:cloudinit +# boot from disk only +qm set $VM_ID --boot c --bootdisk virtio0 +# add serial console (for cloud-init, this is needed or else that won't work) +qm set $VM_ID --serial0 socket +# sets the number of sockets/cores +qm set $VM_ID --sockets 2 --cores 1 + +# cloud init temporary setup +qm set $VM_ID --ciuser root +qm set $VM_ID --ipconfig0 "ip=192.168.100.125/24,gw=192.168.100.1" +qm set $VM_ID --nameserver "192.168.100.29" + +SSH_KEY_PUB=$HOME/.ssh/proxmox-ssh-key.pub +[ -f $SSH_KEY_PUB ] && qm set $VM_ID --sshkeys $SSH_KEY_PUB