--- variables: # Complete local path to this repository (Required) GOSRC: # Relative path to this (packer) subdirectory (Required) PACKER_BASE: # Relative path to cirrus scripts subdirectory (Required) SCRIPT_BASE: # Unique ID for naming new base-images (required) TIMESTAMP: # Required for output from qemu builders TTYDEV: # Ubuntu releases are merely copied to this project for control purposes UBUNTU_BASE_IMAGE: PRIOR_UBUNTU_BASE_IMAGE: # Latest Fedora release FEDORA_IMAGE_URL: "https://dl.fedoraproject.org/pub/fedora/linux/releases/32/Cloud/x86_64/images/Fedora-Cloud-Base-32-1.6.x86_64.qcow2" FEDORA_CSUM_URL: "https://dl.fedoraproject.org/pub/fedora/linux/releases/32/Cloud/x86_64/images/Fedora-Cloud-32-1.6-x86_64-CHECKSUM" FEDORA_BASE_IMAGE_NAME: 'fedora-cloud-base-32-1-6' # Prior Fedora release PRIOR_FEDORA_IMAGE_URL: "https://dl.fedoraproject.org/pub/fedora/linux/releases/31/Cloud/x86_64/images/Fedora-Cloud-Base-31-1.9.x86_64.qcow2" PRIOR_FEDORA_CSUM_URL: "https://dl.fedoraproject.org/pub/fedora/linux/releases/31/Cloud/x86_64/images/Fedora-Cloud-31-1.9-x86_64-CHECKSUM" PRIOR_FEDORA_BASE_IMAGE_NAME: 'fedora-cloud-base-31-1-9' # The name of the image in GCE used for packer build libpod_images.yml IBI_BASE_NAME: 'image-builder-image' CIDATA_ISO: 'cidata.iso' # produced by Makefile # Path to json file (required, likely ~/.config/gcloud/legacy_credentials/*/adc.json) GOOGLE_APPLICATION_CREDENTIALS: # The complete project ID (required, not the short name) GCP_PROJECT_ID: # Pre-existing storage bucket w/ lifecycle-enabled XFERBUCKET: "packer-import" # pre-created, globally unique, lifecycle-enabled # Don't leak sensitive values in error messages / output sensitive-variables: - 'GOOGLE_APPLICATION_CREDENTIALS' - 'GCP_PROJECT_ID' # What images to produce in which cloud builders: - &nested_virt name: 'fedora' type: 'qemu' accelerator: "kvm" iso_url: '{{user `FEDORA_IMAGE_URL`}}' disk_image: true format: "raw" disk_size: 5120 iso_checksum_url: '{{user `FEDORA_CSUM_URL`}}' iso_checksum_type: "sha256" output_directory: '/tmp/{{build_name}}' vm_name: "disk.raw" # actually qcow2, name required for post-processing boot_wait: '5s' shutdown_command: 'shutdown -h now' headless: true qemu_binary: "/usr/libexec/qemu-kvm" qemuargs: # List-of-list format required to override packer-generated args - - "-m" - "1024" - - "-cpu" - "host" - - "-device" - "virtio-rng-pci" - - "-chardev" - "tty,id=pts,path={{user `TTYDEV`}}" - - "-device" - "isa-serial,chardev=pts" - - "-cdrom" - "{{user `CIDATA_ISO`}}" - - "-netdev" - "user,id=net0,hostfwd=tcp::{{ .SSHHostPort }}-:22" - - "-device" - "virtio-net,netdev=net0" communicator: 'ssh' ssh_private_key_file: 'cidata.ssh' ssh_username: 'root' - <<: *nested_virt name: 'prior-fedora' iso_url: '{{user `PRIOR_FEDORA_IMAGE_URL`}}' iso_checksum_url: '{{user `PRIOR_FEDORA_CSUM_URL`}}' - &imgcopy name: 'ubuntu' type: 'googlecompute' image_name: '{{user `UBUNTU_BASE_IMAGE`}}' image_family: '{{build_name}}-base' source_image: '{{user `UBUNTU_BASE_IMAGE`}}' source_image_project_id: 'ubuntu-os-cloud' project_id: '{{user `GCP_PROJECT_ID`}}' account_file: '{{user `GOOGLE_APPLICATION_CREDENTIALS`}}' startup_script_file: "systemd_banish.sh" zone: 'us-central1-a' disk_size: 20 communicator: 'none' - <<: *imgcopy name: 'prior-ubuntu' image_name: '{{user `PRIOR_UBUNTU_BASE_IMAGE`}}' source_image: '{{user `PRIOR_UBUNTU_BASE_IMAGE`}}' provisioners: - type: 'shell' only: ['fedora', 'prior-fedora'] inline: - 'mkdir -p /tmp/libpod/{{user `SCRIPT_BASE`}}' - 'mkdir -p /tmp/libpod/{{user `PACKER_BASE`}}' - type: 'file' only: ['fedora', 'prior-fedora'] source: '{{user `GOSRC`}}/.cirrus.yml' destination: '/tmp/libpod/.cirrus.yml' - type: 'file' only: ['fedora', 'prior-fedora'] source: '{{user `GOSRC`}}/{{user `SCRIPT_BASE`}}/' destination: '/tmp/libpod/{{user `SCRIPT_BASE`}}/' - type: 'file' only: ['fedora', 'prior-fedora'] source: '{{user `GOSRC`}}/{{user `PACKER_BASE`}}/' destination: '/tmp/libpod/{{user `PACKER_BASE`}}/' - &shell_script only: ['fedora', 'prior-fedora'] type: 'shell' inline: - 'chmod +x /tmp/libpod/{{user `PACKER_BASE`}}/*.sh' - '/tmp/libpod/{{user `PACKER_BASE`}}/{{build_name}}_base-setup.sh' expect_disconnect: true # Allow this to reboot the VM if needed environment_vars: - 'TIMESTAMP={{user `TIMESTAMP`}}' - 'GOSRC=/tmp/libpod' - 'SCRIPT_BASE={{user `SCRIPT_BASE`}}' - 'PACKER_BASE={{user `PACKER_BASE`}}' post-processors: - - type: "compress" only: ['fedora', 'prior-fedora'] output: '/tmp/{{build_name}}/disk.raw.tar.gz' format: '.tar.gz' compression_level: 9 - &gcp_import only: ['fedora'] type: "googlecompute-import" project_id: '{{user `GCP_PROJECT_ID`}}' account_file: '{{user `GOOGLE_APPLICATION_CREDENTIALS`}}' bucket: '{{user `XFERBUCKET`}}' gcs_object_name: '{{build_name}}-{{user `TIMESTAMP`}}.tar.gz' image_name: "{{user `FEDORA_BASE_IMAGE_NAME`}}-{{user `TIMESTAMP`}}" image_description: 'Based on {{user `FEDORA_IMAGE_URL`}}' image_family: '{{build_name}}-base' - <<: *gcp_import only: ['prior-fedora'] image_name: "{{user `PRIOR_FEDORA_BASE_IMAGE_NAME`}}-{{user `TIMESTAMP`}}" image_description: 'Based on {{user `PRIOR_FEDORA_IMAGE_URL`}}' image_family: '{{build_name}}-base' - type: 'manifest'