{ "variables": { "name": "{{env `NAME`}}", "squashfs_file": "{{env `NAME`}}.squashfs", "initramfs_file": "{{env `NAME`}}.initramfs", "linux_file": "{{env `NAME`}}.linux", "compression_level": "{{env `COMPRESSION_LEVEL`}}", "images": "{{env `IMAGES`}}", "ci_job_id": "{{env `CI_JOB_ID`}}", "ci_commit_sha": "{{env `CI_COMMIT_SHA`}}", "ci_commit_tag": "{{env `CI_COMMIT_TAG`}}", "ci_commit_ref_name": "{{env `CI_COMMIT_REF_NAME`}}", "ci_commit_ref_slug": "{{env `CI_COMMIT_REF_SLUG`}}", "ci_job_name": "{{env `CI_JOB_NAME`}}", "ci_job_stage": "{{env `CI_JOB_STAGE`}}", "ci_project_url": "{{env `CI_PROJECT_URL`}}", "ci_pipeline_triggered": "{{env `PIPELINE_TRIGGERED`}}", "ci_job_manual": "{{env `CI_JOB_MANUAL`}}" }, "builders": [ { "type": "docker", "image": "debian:stretch", "discard": true, "run_command": [ "-d", "-i", "-t", "-v", "{{user `images`}}:/tmp/images", "{{.Image}}", "/bin/bash" ] } ], "provisioners": [ { "type": "shell", "inline": [ "mkdir -p /etc/initramfs-tools/scripts/local-premount/" ] }, { "type": "file", "source": "initramfs/labsync", "destination": "/etc/initramfs-tools/scripts/" }, { "type": "shell", "inline": [ "echo \"LABSYNC_JOB_ID='{{user `ci_job_id`}}'\" >> /etc/environment", "echo \"LABSYNC_COMMIT_SHA='{{user `ci_commit_sha`}}'\" >> /etc/environment", "echo \"LABSYNC_COMMIT_TAG='{{user `ci_commit_tag`}}'\" >> /etc/environment", "echo \"LABSYNC_COMMIT_REF_NAME='{{user `ci_commit_ref_name`}}'\" >> /etc/environment", "echo \"LABSYNC_COMMIT_REF_SLUG='{{user `ci_commit_ref_slug`}}'\" >> /etc/environment", "echo \"LABSYNC_PROJECT_URL='{{user `ci_project_url`}}'\" >> /etc/environment", "sed -i 's#@@PROJECT_URL@@#{{user `ci_project_url`}}#' /etc/initramfs-tools/scripts/labsync" ] }, { "type": "file", "source": "initramfs/labsync-prereqs", "destination": "/etc/initramfs-tools/scripts/local-premount/" }, { "type": "shell", "inline": [ "set -x", "apt-get update", "apt-get -y dist-upgrade", "rmdir /boot && ln -s /usr/local/boot /boot", "apt-get -y install initramfs-tools || true", "echo squashfs >> /etc/initramfs-tools/modules", "echo overlay >> /etc/initramfs-tools/modules", "echo 'RESUME=none' > /etc/initramfs-tools/conf.d/resume", "mkdir /usr/local/boot", "apt-get -f -y install aria2 linux-image-amd64 lvm2", "cp $(find /boot/ -name 'initrd.img-*' | sort -V | tail -n 1) '/tmp/images/{{user `initramfs_file`}}'", "cp $(find /boot/ -name 'vmlinuz-*' | sort -V | tail -n 1) '/tmp/images/{{user `linux_file`}}'" ] }, { "type": "shell", "inline": [ "apt-get -y install openssh-server python" ] }, { "type": "ansible", "playbook_file": "ansible/playbook.yml", "user": "root" }, { "type": "shell", "inline": [ "rm /boot && mkdir /boot" ] }, { "type": "shell", "inline": [ "set -x", "apt-get -y install squashfs-tools", "dpkg -L squashfs-tools liblzo2-2 | while read f; do [ -f \"$f\" ] && echo \"$f\"; done > /tmp/ignore_files", "echo '/etc/resolv.conf' >> /tmp/ignore_files", "echo '/etc/hostname' >> /tmp/ignore_files", "echo '/etc/hosts' >> /tmp/ignore_files", "mkdir -p /tmp/extra/tmp /tmp/extra/proc /tmp/extra/sys /tmp/extra/etc" ] }, { "type": "file", "source": "hosts", "destination": "/tmp/extra/etc/hosts" }, { "type": "shell", "inline": [ "if [ -e '/tmp/images/{{user `squashfs_file`}}' ]; then rm '/tmp/images/{{user `squashfs_file`}}'; fi", "squashfs_content=\"$(find / -mindepth 1 -maxdepth 1 | grep -vE '^/(proc|sys|tmp|[.]dockerenv|packer-files)$')\"", "mksquashfs $squashfs_content /tmp/extra/* '/tmp/images/{{user `squashfs_file`}}' -comp lzo -Xcompression-level {{user `compression_level`}} -ef /tmp/ignore_files" ] } ] }