CoreWeave
Search
K

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:

centos.json
1KB
Code

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:
YAML
volume_clone.yaml
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:
YAML
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:
JavaScript
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"
]
}
]
}
/dev/vdb refers to our cloned block device
The credentials in this configuration are created when the VM reads the image output of create-ci-data.sh****
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.