Skip to main content

Configuring a Linux image sourced from CoreWeave Cloud

Objective: Use our Packer Virtual Server to configure a Linux image from CoreWeave Cloud.
Overview: Combining examples from Configuring a Windows Image sourced from CoreWeave Cloud and Configuring an externally sourced cloud Linux image, we will use our Packer Worker Virtual Server to configure a Linux image sourced from CoreWeave Cloud.

References:

Selecting a source image

Following the example in Copying CoreWeave Images to a Writeable PVC, we will search for the latest CentOS image in the vd-images namespace:

We will then clone this image into our namespace:

apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
annotations:
labels:
name: centos7-docker-master-clone-20210813-ord1
namespace: tenant-<name>
spec:
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 40Gi
storageClassName: block-nvme-ord1
volumeMode: Block
source:
pvc:
name: centos7-docker-master-20210813-ord1
namespace: vd-images

Setting up the Packer Environment

Following the example in Creating a Packer Worker Virtual Server, we'll mount our CentOS PVC as an additional disk:

packer_vs.yaml
    additionalDisks:
- name: CentOS_7
spec:
persistentVolumeClaim:
claimName: centos7-docker-master-clone-20210813-ord1

Configuring the Packer manifest

Our Packer manifest will be a combination of our previous Windows and Ubuntu examples:

centos.json
{
"builders": [
{
"type": "qemu",
"accelerator": "kvm",
"communicator": "ssh",
"headless": true,
"disk_image": false,
"cpus": "6",
"memory": "16384",
"format": "raw",
"iso_checksum": "none",
"iso_url": "/dev/vdb",
"skip_resize_disk": false,
"skip_compaction": false,
"disk_size": "40000M",
"qemuargs": [
["-machine","pc-q35-4.2,accel=kvm,usb=off,vmport=off,dump-guest-core=off"],
["-cpu", "host"],
[ "-smp", "cpus=4,sockets=1" ],
[ "-cdrom", "cidata.iso" ],
["-drive", "file=/dev/vdb"]
],
"ssh_username": "user",
"ssh_password": "packer",
"net_device": "virtio-net",
"shutdown_command": "sudo shutdown --poweroff --no-wall now"
}
],
"provisioners": [
{
"type": "shell",
"execute_command": "{{.Vars}} sudo -S -E bash '{{.Path}}'",
"inline": [
"yum update -y",
"yum upgrade -y",
"yum clean all -y"
]
}
]
}
note

/dev/vdb refers to our cloned block device

note

The credentials in this configuration are created when the VM reads the image output of create-ci-data.sh

note

In this example, we are using the shell provisioner to install package updates. To learn more and view more provisioners, view Hashicorp's documentation.

Execute Packer docker image

Similar to our Windows example, we'll kick off our CentOS build with launch-docker.sh win.json. Since we're writing to our PVC directly, all changes are made directly to our cloned disk.