114 lines
4.2 KiB
YAML
114 lines
4.2 KiB
YAML
variables:
|
|
ci_commit_ref_name: '{{env `CI_COMMIT_REF_NAME`}}'
|
|
ci_commit_ref_slug: '{{env `CI_COMMIT_REF_SLUG`}}'
|
|
ci_commit_sha: '{{env `CI_COMMIT_SHA`}}'
|
|
ci_commit_tag: '{{env `CI_COMMIT_TAG`}}'
|
|
ci_job_id: '{{env `CI_JOB_ID`}}'
|
|
ci_job_manual: '{{env `CI_JOB_MANUAL`}}'
|
|
ci_job_name: '{{env `CI_JOB_NAME`}}'
|
|
ci_job_stage: '{{env `CI_JOB_STAGE`}}'
|
|
ci_pipeline_triggered: '{{env `PIPELINE_TRIGGERED`}}'
|
|
ci_project_url: '{{env `CI_PROJECT_URL`}}'
|
|
compression_level: '{{env `COMPRESSION_LEVEL`}}'
|
|
dpkg_list_file: '{{env `NAME`}}.dpkg-list'
|
|
images: '{{env `IMAGES`}}'
|
|
initramfs_file: '{{env `NAME`}}.initramfs'
|
|
linux_file: '{{env `NAME`}}.linux'
|
|
name: '{{env `NAME`}}'
|
|
squashfs_file: '{{env `NAME`}}.squashfs'
|
|
torrent_file: '{{env `NAME`}}.torrent'
|
|
|
|
builders:
|
|
- discard: true
|
|
image: debian:bookworm
|
|
type: docker
|
|
volumes:
|
|
'{{user `images`}}': /tmp/images
|
|
|
|
provisioners:
|
|
- inline:
|
|
- mkdir -p /etc/initramfs-tools/scripts/local-premount/
|
|
type: shell
|
|
- destination: /etc/initramfs-tools/scripts/
|
|
source: initramfs/labsync
|
|
type: file
|
|
- 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
|
|
- chmod +x /etc/initramfs-tools/scripts/labsync
|
|
type: shell
|
|
- destination: /etc/initramfs-tools/scripts/local-premount/
|
|
source: initramfs/labsync-prereqs
|
|
type: file
|
|
- inline:
|
|
- set -x
|
|
- chmod +x /etc/initramfs-tools/scripts/local-premount/labsync-prereqs
|
|
- 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 haveged fdisk
|
|
- mkdir -p /tmp/images
|
|
- 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 python3 lsb-release
|
|
type: shell
|
|
- playbook_file: ansible/playbook.yml
|
|
type: ansible
|
|
user: root
|
|
ansible_env_vars:
|
|
- "ANSIBLE_SSH_ARGS='-o HostkeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa'"
|
|
- "ANSIBLE_PYTHON_INTERPRETER=/usr/bin/python3"
|
|
extra_arguments:
|
|
- "--scp-extra-args"
|
|
- "'-O'"
|
|
- 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
|
|
- dpkg -l > /tmp/images/{{ user `dpkg_list_file` }}
|
|
- echo '/etc/resolv.conf' >> /tmp/ignore_files
|
|
- echo '/etc/hostname' >> /tmp/ignore_files
|
|
- echo '/etc/hosts' >> /tmp/ignore_files
|
|
- echo '/var/lib/docker' >> /tmp/ignore_files
|
|
- echo '/var/cache/apt/archives' >> /tmp/ignore_files
|
|
- echo '/var/lib/apt' >> /tmp/ignore_files
|
|
- mkdir -p /tmp/extra/tmp /tmp/extra/proc /tmp/extra/sys
|
|
type: shell
|
|
- destination: /etc/hosts.template
|
|
source: hosts
|
|
type: file
|
|
- 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 zstd
|
|
-Xcompression-level {{user `compression_level`}}
|
|
-ef /tmp/ignore_files
|
|
type: shell
|
|
|
|
post-processors:
|
|
- inline:
|
|
- >
|
|
mktorrent
|
|
-n '{{user `name`}}'
|
|
-o '{{user `images`}}/{{user `torrent_file`}}'
|
|
-l 22
|
|
'{{user `images`}}/{{user `squashfs_file`}}'
|
|
type: shell-local
|