From 54bf6bbbe0eab9d43f1254f8d517fd8146ed334a Mon Sep 17 00:00:00 2001 From: Yann Autissier Date: Wed, 12 Oct 2022 00:50:02 +0000 Subject: [PATCH] wip: alpine 3.16 --- ansible/playbook.yml | 2 +- docker/compose/Dockerfile | 8 +- docker/fabio/Dockerfile | 8 +- docker/myos/Dockerfile | 10 +- docker/packer/Dockerfile | 19 ++-- docker/zen/Dockerfile | 12 +-- make/apps/def.docker.mk | 2 +- make/apps/myos/setup.mk | 4 +- make/def.docker.mk | 2 +- make/def.mk | 12 +-- make/monorepo/common.mk | 2 +- packer/alpine/alpine.json | 105 --------------------- packer/alpine/alpine.pkr.hcl | 176 +++++++++++++++++++++++++++++++++++ packer/alpine/setup.sh | 9 +- packer/def.packer.alpine.mk | 2 +- packer/def.packer.mk | 29 +++--- packer/packer.mk | 8 +- stack/ipfs.mk | 2 +- stack/node/node.yml | 4 +- 19 files changed, 246 insertions(+), 170 deletions(-) delete mode 100644 packer/alpine/alpine.json create mode 100644 packer/alpine/alpine.pkr.hcl diff --git a/ansible/playbook.yml b/ansible/playbook.yml index 681a98c..71677ba 100644 --- a/ansible/playbook.yml +++ b/ansible/playbook.yml @@ -6,7 +6,7 @@ gather_facts: false pre_tasks: - name: raw - install ansible requirements for alpine linux - raw: "[ -f /etc/alpine-release ] && /sbin/apk update && { which python3 >/dev/null 2>&1 || /sbin/apk add python3; } && { which sudo >/dev/null 2>&1 || /sbin/apk add sudo; } && { /bin/tar --version 2>/dev/null |grep busybox >/dev/null && /sbin/apk add tar; } && { ls /usr/lib/ssh/sftp-server >/dev/null 2>&1 || /sbin/apk add openssh-sftp-server; } || true" + raw: "[ -f /etc/alpine-release ] && /sbin/apk update && { which python3 >/dev/null 2>&1 || /sbin/apk add python3; } && { /bin/tar --version 2>/dev/null |grep busybox >/dev/null && /sbin/apk add tar; } && { ls /usr/lib/ssh/sftp-server >/dev/null 2>&1 || /sbin/apk add openssh-sftp-server; } || true" tags: - bootstrap diff --git a/docker/compose/Dockerfile b/docker/compose/Dockerfile index 4a05a11..d20abe4 100644 --- a/docker/compose/Dockerfile +++ b/docker/compose/Dockerfile @@ -4,13 +4,13 @@ ARG DOCKER_BUILD_DIR ARG COMPOSE_REMOTE=https://github.com/docker/compose ARG COMPOSE_VERSION=2.5.0 -ARG OPERATING_SYSTEM=Linux -ARG PROCESSOR_ARCHITECTURE=x86_64 +ARG SYSTEM=Linux +ARG MACHINE=x86_64 RUN apk update \ && apk add --no-cache ca-certificates \ - && OS="$(echo ${OPERATING_SYSTEM} |awk '{print tolower($0)}')"; \ - ARCH="$(echo ${PROCESSOR_ARCHITECTURE})"; \ + && OS="$(echo ${SYSTEM} |awk '{print tolower($0)}')"; \ + ARCH="$(echo ${MACHINE})"; \ wget -qO /usr/bin/docker-compose ${COMPOSE_REMOTE}/releases/download/v${COMPOSE_VERSION}/docker-compose-${OS}-${ARCH} \ && chmod +x /usr/bin/docker-compose diff --git a/docker/fabio/Dockerfile b/docker/fabio/Dockerfile index 4aefe12..a7a8892 100644 --- a/docker/fabio/Dockerfile +++ b/docker/fabio/Dockerfile @@ -4,13 +4,13 @@ ARG DOCKER_BUILD_DIR ARG FABIO_REMOTE=https://github.com/fabiolb/fabio ARG FABIO_VERSION=1.6.0 -ARG OPERATING_SYSTEM=Linux -ARG PROCESSOR_ARCHITECTURE=x86_64 +ARG SYSTEM=Linux +ARG MACHINE=x86_64 RUN apk update \ && apk add --no-cache ca-certificates \ - && OS="$(echo ${OPERATING_SYSTEM} |awk '{print tolower($0)}')"; \ - ARCH="$(echo ${PROCESSOR_ARCHITECTURE} |awk '/x86_64/ {print "amd64"}; /aarch64/ {print "arm64"}')"; \ + && OS="$(echo ${SYSTEM} |awk '{print tolower($0)}')"; \ + ARCH="$(echo ${MACHINE} |awk '/x86_64/ {print "amd64"}; /aarch64/ {print "arm64"}')"; \ wget -qO /usr/bin/fabio ${FABIO_REMOTE}/releases/download/v${FABIO_VERSION}/fabio-${FABIO_VERSION}-${OS}_${ARCH} \ && chmod +x /usr/bin/fabio diff --git a/docker/myos/Dockerfile b/docker/myos/Dockerfile index 5d472e0..dee3745 100644 --- a/docker/myos/Dockerfile +++ b/docker/myos/Dockerfile @@ -3,8 +3,8 @@ LABEL maintainer aynic.os ARG DOCKER_BUILD_DIR ARG GIT_AUTHOR_NAME ARG GIT_AUTHOR_EMAIL -ARG OPERATING_SYSTEM=Linux -ARG PROCESSOR_ARCHITECTURE=x86_64 +ARG SYSTEM=Linux +ARG MACHINE=x86_64 ENV GIT_AUTHOR_NAME=${GIT_AUTHOR_NAME} ENV GIT_AUTHOR_EMAIL=${GIT_AUTHOR_EMAIL} @@ -42,11 +42,11 @@ RUN git clone https://github.com/ingydotnet/git-subrepo \ ARG IPFS_VERSION=0.14.0 -RUN { OS="$(echo ${OPERATING_SYSTEM} |awk '{print tolower($0)}')"; \ - ARCH="$(echo ${PROCESSOR_ARCHITECTURE})"; \ +RUN { OS="$(echo ${SYSTEM} |awk '{print tolower($0)}')"; \ + ARCH="$(echo ${MACHINE})"; \ wget -qO - https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.${OS}.${ARCH}.tar.xz \ |tar --strip-components 1 -C /usr/local/bin -xJf - shellcheck-stable/shellcheck; } \ - && { ARCH="$(echo ${PROCESSOR_ARCHITECTURE} |awk '/x86_64/ {print "amd64"}; /aarch64/ {print "arm64"}')"; \ + && { ARCH="$(echo ${MACHINE} |awk '/x86_64/ {print "amd64"}; /aarch64/ {print "arm64"}')"; \ wget -qO - https://github.com/ipfs/kubo/releases/download/v${IPFS_VERSION}/kubo_v${IPFS_VERSION}_${OS}-${ARCH}.tar.gz \ |tar --strip-components 1 -C /usr/local/bin -xzf - kubo/ipfs; } \ && mkdir -p /usr/local/lib/shellspec \ diff --git a/docker/packer/Dockerfile b/docker/packer/Dockerfile index 98023e9..95b2232 100644 --- a/docker/packer/Dockerfile +++ b/docker/packer/Dockerfile @@ -2,9 +2,12 @@ FROM alpine:latest as dist LABEL maintainer aynic.os ARG DOCKER_BUILD_DIR -ARG ARCH="$(uname -m |awk '/x86_64/ {print "amd64"}; /aarch64/ {print "arm64"}')" -ARG OS="$(uname -o |awk '{print tolower($0)}')" -ARG PACKER_VERSION=1.6.6 +ARG MACHINE="$(uname -m)" +ARG SYSTEM="$(uname -s)" +ARG ARCH="$(echo ${MACHINE} |awk '/x86_64/ {print "amd64"}; /aarch64/ {print "arm64"}')" +ARG OS="$(echo ${SYSTEM} |awk '{print tolower($0)}')" + +ARG PACKER_VERSION=1.8.3 RUN apk --no-cache add \ ansible \ @@ -17,13 +20,13 @@ RUN apk --no-cache add \ socat \ wget -ADD https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_linux_amd64.zip ./ +ADD https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_${OS}_${ARCH}.zip ./ ADD https://releases.hashicorp.com/packer/${PACKER_VERSION}/packer_${PACKER_VERSION}_SHA256SUMS ./ -RUN sed -i '/.*linux_amd64.zip/!d' packer_${PACKER_VERSION}_SHA256SUMS -RUN sha256sum -cs packer_${PACKER_VERSION}_SHA256SUMS\ - && unzip packer_${PACKER_VERSION}_linux_amd64.zip -d /bin -RUN rm -f packer_${PACKER_VERSION}_linux_amd64.zip +RUN sed -i '/.*'"${OS}"'_'"${ARCH}"'.zip/!d' packer_${PACKER_VERSION}_SHA256SUMS \ + && sha256sum -cs packer_${PACKER_VERSION}_SHA256SUMS \ + && unzip "packer_${PACKER_VERSION}_${OS}_${ARCH}.zip" -d /bin \ + && rm -f "packer_${PACKER_VERSION}_${OS}_${ARCH}.zip" ENTRYPOINT ["/bin/packer"] diff --git a/docker/zen/Dockerfile b/docker/zen/Dockerfile index 5296ba3..0707163 100644 --- a/docker/zen/Dockerfile +++ b/docker/zen/Dockerfile @@ -3,8 +3,8 @@ LABEL maintainer aynic.os ARG DOCKER_BUILD_DIR ARG GIT_AUTHOR_NAME ARG GIT_AUTHOR_EMAIL -ARG OPERATING_SYSTEM=Linux -ARG PROCESSOR_ARCHITECTURE=x86_64 +ARG SYSTEM=Linux +ARG MACHINE=x86_64 ENV GIT_AUTHOR_NAME=${GIT_AUTHOR_NAME} ENV GIT_AUTHOR_EMAIL=${GIT_AUTHOR_EMAIL} @@ -41,12 +41,12 @@ RUN chmod +r /include.sh \ ARG IPFS_VERSION=0.14.0 -RUN { OS="$(echo ${OPERATING_SYSTEM} |awk '{print tolower($0)}')"; \ - ARCH="$(echo ${PROCESSOR_ARCHITECTURE})"; \ +RUN { OS="$(echo ${SYSTEM} |awk '{print tolower($0)}')"; \ + ARCH="$(echo ${MACHINE})"; \ wget -qO - https://github.com/koalaman/shellcheck/releases/download/stable/shellcheck-stable.${OS}.${ARCH}.tar.xz \ |tar --strip-components 1 -C /usr/local/bin -xJf - shellcheck-stable/shellcheck; } \ - && { OS="$(echo ${OPERATING_SYSTEM} |awk '{print tolower($0)}')"; \ - ARCH="$(echo ${PROCESSOR_ARCHITECTURE} |awk '/x86_64/ {print "amd64"}; /aarch64/ {print "arm64"}')"; \ + && { OS="$(echo ${SYSTEM} |awk '{print tolower($0)}')"; \ + ARCH="$(echo ${MACHINE} |awk '/x86_64/ {print "amd64"}; /aarch64/ {print "arm64"}')"; \ wget -qO - https://github.com/ipfs/kubo/releases/download/v${IPFS_VERSION}/kubo_v${IPFS_VERSION}_${OS}-${ARCH}.tar.gz \ |tar --strip-components 1 -C /usr/local/bin -xzf - kubo/ipfs; } \ && mkdir -p /usr/local/lib/shellspec \ diff --git a/make/apps/def.docker.mk b/make/apps/def.docker.mk index 8fef52c..d4c1d9a 100644 --- a/make/apps/def.docker.mk +++ b/make/apps/def.docker.mk @@ -26,7 +26,7 @@ DOCKER_BUILD_NO_CACHE ?= false DOCKER_BUILD_TARGET ?= $(if $(filter $(ENV),$(DOCKER_BUILD_TARGETS)),$(ENV),$(DOCKER_BUILD_TARGET_DEFAULT)) DOCKER_BUILD_TARGET_DEFAULT ?= master DOCKER_BUILD_TARGETS ?= $(ENV_DEPLOY) -DOCKER_BUILD_VARS ?= APP BRANCH COMPOSE_VERSION DOCKER_GID DOCKER_REPOSITORY GID GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME OPERATING_SYSTEM PROCESSOR_ARCHITECTURE SSH_BASTION_HOSTNAME SSH_BASTION_USERNAME SSH_PRIVATE_IP_RANGE SSH_PUBLIC_HOST_KEYS SSH_REMOTE_HOSTS UID USER VERSION +DOCKER_BUILD_VARS ?= APP BRANCH COMPOSE_VERSION DOCKER_GID DOCKER_REPOSITORY GID GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME SYSTEM MACHINE SSH_BASTION_HOSTNAME SSH_BASTION_USERNAME SSH_PRIVATE_IP_RANGE SSH_PUBLIC_HOST_KEYS SSH_REMOTE_HOSTS UID USER VERSION DOCKER_COMPOSE ?= $(if $(DOCKER_RUN),docker/compose:$(COMPOSE_VERSION),$(or $(shell docker compose >/dev/null 2>&1 && printf 'docker compose\n'),docker-compose)) $(COMPOSE_ARGS) DOCKER_COMPOSE_DOWN_OPTIONS ?= DOCKER_COMPOSE_RUN_OPTIONS ?= --rm diff --git a/make/apps/myos/setup.mk b/make/apps/myos/setup.mk index b111962..6e51732 100644 --- a/make/apps/myos/setup.mk +++ b/make/apps/myos/setup.mk @@ -14,11 +14,11 @@ ifeq ($(filter 0 $(DOCKER_GID),$(GIDS)),) endif endif -# target setup-nfsd: Call setup-nfsd-osx if SETUP_NFSD=true and OPERATING_SYSTEM=Darwin +# target setup-nfsd: Call setup-nfsd-osx if SETUP_NFSD=true and SYSTEM=Darwin .PHONY: setup-nfsd setup-nfsd: ifeq ($(SETUP_NFSD),true) -ifeq ($(OPERATING_SYSTEM),Darwin) +ifeq ($(SYSTEM),Darwin) $(call setup-nfsd-osx) endif endif diff --git a/make/def.docker.mk b/make/def.docker.mk index 5f6189e..293b135 100644 --- a/make/def.docker.mk +++ b/make/def.docker.mk @@ -26,7 +26,7 @@ USER_DOCKER_REPOSITORY ?= $(subst -,/,$(subst _,/,$(USER_COMPOSE_PROJEC USER_DOCKER_VOLUME ?= $(USER_COMPOSE_PROJECT_NAME)_myos # https://github.com/docker/libnetwork/pull/2348 -ifeq ($(OPERATING_SYSTEM),Darwin) +ifeq ($(SYSTEM),Darwin) DOCKER_HOST_IFACE ?= $(shell docker run --rm -it --net=host alpine /sbin/ip -4 route list match 0/0 2>/dev/null |awk '{print $$5}' |awk '!seen[$$0]++' |head -1) DOCKER_HOST_INET4 ?= $(shell docker run --rm -it --net=host alpine /sbin/ip -4 addr show $(DOCKER_HOST_IFACE) 2>/dev/null |awk '$$1 == "inet" {sub(/\/.*/,"",$$2); print $$2}' |head -1) DOCKER_INTERNAL_DOCKER_GATEWAY ?= $(shell docker run --rm -it alpine getent hosts gateway.docker.internal 2>/dev/null |awk '{print $$1}' |head -1) diff --git a/make/def.mk b/make/def.mk index 0ae7102..c057592 100644 --- a/make/def.mk +++ b/make/def.mk @@ -53,7 +53,7 @@ ENV_ARGS ?= $(env_args) ENV_FILE ?= $(wildcard $(CONFIG)/$(ENV)/$(APP)/.env .env) ENV_LIST ?= $(shell ls .git/refs/heads/ 2>/dev/null) ENV_RESET ?= false -ENV_VARS ?= APP BRANCH DOMAIN ENV HOME HOSTNAME GID GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME GROUP MONOREPO MONOREPO_DIR OPERATING_SYSTEM PROCESSOR_ARCHITECTURE TAG UID USER VERSION +ENV_VARS ?= APP BRANCH DOMAIN ENV HOME HOSTNAME GID GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME GROUP MACHINE MONOREPO MONOREPO_DIR SYSTEM TAG UID USER VERSION GID ?= $(shell id -g 2>/dev/null) GIDS ?= $(shell id -G 2>/dev/null) GIT_AUTHOR_EMAIL ?= $(or $(shell git config user.email 2>/dev/null),$(USER)@my.os) @@ -123,15 +123,15 @@ endif # Guess OS ifeq ($(OSTYPE),cygwin) -OPERATING_SYSTEM := cygwin +SYSTEM := cygwin else ifeq ($(OS),Windows_NT) -OPERATING_SYSTEM := Windows_NT +SYSTEM := Windows_NT else -PROCESSOR_ARCHITECTURE := $(shell uname -m 2>/dev/null) -OPERATING_SYSTEM := $(shell uname -s 2>/dev/null) +SYSTEM := $(shell uname -s 2>/dev/null) endif +MACHINE := $(shell uname -m 2>/dev/null) -ifeq ($(OPERATING_SYSTEM),Darwin) +ifeq ($(SYSTEM),Darwin) SED_SUFFIX := '' endif diff --git a/make/monorepo/common.mk b/make/monorepo/common.mk index a2d9796..6e0677a 100644 --- a/make/monorepo/common.mk +++ b/make/monorepo/common.mk @@ -24,7 +24,7 @@ config: $(APPS) # target copy: Copy files and folders to all APPS .PHONY: copy copy: - $(foreach app,$(APPS),$(foreach file,$(ARGS),$(if $(wildcard $(file)),$(RUN) $(if $(filter Linux,$(OPERATING_SYSTEM)),cp -a --parents $(file) $(app)/,rsync -a $(file) $(app)/$(file)) &&)) true &&) true + $(foreach app,$(APPS),$(foreach file,$(ARGS),$(if $(wildcard $(file)),$(RUN) $(if $(filter Linux,$(SYSTEM)),cp -a --parents $(file) $(app)/,rsync -a $(file) $(app)/$(file)) &&)) true &&) true # target deploy: Fire APPS target .PHONY: deploy diff --git a/packer/alpine/alpine.json b/packer/alpine/alpine.json deleted file mode 100644 index 23fe7a1..0000000 --- a/packer/alpine/alpine.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "builders": [ - { - "accelerator": "{{user `accelerator`}}", - "boot_command": [ - "{{user `username`}}", - "passwd{{user `password`}}{{user `password`}}", - "ifconfig eth0 up \u0026\u0026 udhcpc -i eth0", - "apk add --repository http://dl-cdn.alpinelinux.org/alpine/v{{user `alpine_version`}}/main dropbear dropbear-openrc openssh-sftp-server", - "rc-update add dropbear", - "echo -e 'auto eth0\\niface eth0 inet dhcp' > /etc/network/interfaces", - "rc-service dropbear start", - "" - ], - "boot_wait": "{{user `boot_wait`}}", - "disk_interface": "virtio", - "disk_size": "{{user `iso_size`}}", - "format": "raw", - "headless": true, - "host_port_max": "{{user `ssh_port_max`}}", - "host_port_min": "{{user `ssh_port_min`}}", - "iso_checksum": "file:http://dl-cdn.alpinelinux.org/alpine/v{{user `alpine_version`}}/releases/{{user `alpine_arch`}}/alpine-virt-{{user `alpine_release`}}-{{user `alpine_arch`}}.iso.sha256", - "iso_url": "http://dl-cdn.alpinelinux.org/alpine/v{{user `alpine_version`}}/releases/{{user `alpine_arch`}}/alpine-virt-{{user `alpine_release`}}-{{user `alpine_arch`}}.iso", - "net_device": "virtio-net", - "output_directory": "{{user `output`}}", - "qemuargs": [ - [ - "-device", - "virtio-rng-pci,rng=rng0,bus=pci.0,addr=0x7" - ], - [ - "-object", - "rng-random,filename=/dev/urandom,id=rng0" - ] - ], - "shutdown_command": "/sbin/poweroff", - "ssh_file_transfer_method": "sftp", - "ssh_password": "{{user `password`}}", - "ssh_port": 22, - "ssh_timeout": "{{user `ssh_wait_timeout`}}", - "ssh_username": "{{user `username`}}", - "type": "qemu", - "vm_name": "{{user `iso_name`}}.iso", - "vnc_bind_address": "{{user `vnc_bind_address`}}", - "vnc_port_max": "{{user `vnc_port_max`}}", - "vnc_port_min": "{{user `vnc_port_min`}}" - } - ], - "provisioners": [ - { - "environment_vars": [ - "ALPINE_VERSION={{user `alpine_version`}}", - "HOSTNAME={{user `hostname`}}" - ], - "script": "packer/alpine/setup.sh", - "type": "shell" - }, - { - "expect_disconnect": true, - "inline": [ - "/usr/bin/eject -s", - "/sbin/reboot" - ], - "type": "shell" - }, - { - "extra_arguments": [ - "--extra-vars", - "{{user `ansible_extra_vars`}}", - "{{user `ansible_verbose`}}" - ], - "inventory_directory": "ansible/inventories", - "pause_before": "16s", - "playbook_file": "ansible/playbook.yml", - "sftp_command": "/usr/lib/ssh/sftp-server -e", - "type": "ansible", - "user": "{{user `ansible_user`}}" - } - ], - "variables": { - "accelerator": "kvm", - "alpine_arch": "x86_64", - "alpine_release": "3.12.0", - "alpine_version": "3.12", - "ansible_extra_vars": "target=default", - "ansible_user": "root", - "ansible_verbose": "-v", - "boot_wait": "8s", - "hostname": "alpine", - "iso_name": "alpine-3.12.0-x86_64", - "iso_size": "1024", - "output": "build/iso", - "password": "alpine", - "qemuargs": "", - "ssh_port_max": "2222", - "ssh_port_min": "2222", - "ssh_wait_timeout": "32s", - "template": "alpine", - "username": "root", - "vnc_bind_address": "127.0.0.1", - "vnc_port_max": "5900", - "vnc_port_min": "5900" - } -} - diff --git a/packer/alpine/alpine.pkr.hcl b/packer/alpine/alpine.pkr.hcl new file mode 100644 index 0000000..b72d4b8 --- /dev/null +++ b/packer/alpine/alpine.pkr.hcl @@ -0,0 +1,176 @@ + +variable "accelerator" { + type = string + default = "kvm" +} + +variable "alpine_arch" { + type = string + default = "x86_64" +} + +variable "alpine_release" { + type = string + default = "3.16.0" +} + +variable "alpine_version" { + type = string + default = "3.16" +} + +variable "ansible_extra_vars" { + type = string + default = "target=default" +} + +variable "ansible_user" { + type = string + default = "root" +} + +variable "ansible_verbose" { + type = string + default = "-v" +} + +variable "boot_wait" { + type = string + default = "8s" +} + +variable "hostname" { + type = string + default = "alpine" +} + +variable "iso_name" { + type = string + default = "alpine-3.16.0-x86_64" +} + +variable "iso_size" { + type = string + default = "1024" +} + +variable "nameserver" { + type = string + default = "1.1.1.1" +} + +variable "output" { + type = string + default = "build/iso" +} + +variable "password" { + type = string + default = "alpine" +} + +variable "pause_before" { + type = string + default = "24s" +} + +variable "qemuargs" { + type = string + default = "" +} + +variable "ssh_port_max" { + type = string + default = "2222" +} + +variable "ssh_port_min" { + type = string + default = "2222" +} + +variable "ssh_timeout" { + type = string + default = "42s" +} + +variable "template" { + type = string + default = "alpine" +} + +variable "username" { + type = string + default = "root" +} + +variable "vnc_bind_address" { + type = string + default = "127.0.0.1" +} + +variable "vnc_port_max" { + type = string + default = "5900" +} + +variable "vnc_port_min" { + type = string + default = "5900" +} + +source "qemu" "autogenerated_1" { + accelerator = "${var.accelerator}" + boot_command = ["${var.username}", "passwd${var.password}${var.password}", "ifconfig eth0 up && udhcpc -i eth0", "apk add --repository http://dl-cdn.alpinelinux.org/alpine/v${var.alpine_version}/main dropbear dropbear-openrc openssh-sftp-server", "rc-update add dropbear", "echo -e 'auto eth0\\niface eth0 inet dhcp' > /etc/network/interfaces", "mkdir -p /etc/dropbear", "dropbearkey -t ed25519 -f /etc/dropbear/dropbear_ed25519_host_key", "rc-service dropbear start", ""] + boot_wait = "${var.boot_wait}" + disk_interface = "virtio" + disk_size = "${var.iso_size}" + format = "raw" + headless = true + host_port_max = "${var.ssh_port_max}" + host_port_min = "${var.ssh_port_min}" + iso_checksum = "file:http://dl-cdn.alpinelinux.org/alpine/v${var.alpine_version}/releases/${var.alpine_arch}/alpine-virt-${var.alpine_release}-${var.alpine_arch}.iso.sha256" + iso_url = "http://dl-cdn.alpinelinux.org/alpine/v${var.alpine_version}/releases/${var.alpine_arch}/alpine-virt-${var.alpine_release}-${var.alpine_arch}.iso" + net_device = "virtio-net" + output_directory = "${var.output}" + qemuargs = [["-device", "virtio-rng-pci,rng=rng0,bus=pci.0,addr=0x7"], ["-object", "rng-random,filename=/dev/urandom,id=rng0"]] + // qemuargs = ["${var.qemuargs}"] + shutdown_command = "/sbin/poweroff" + ssh_file_transfer_method = "sftp" + ssh_password = "${var.password}" + ssh_port = 22 + ssh_timeout = "${var.ssh_timeout}" + ssh_username = "${var.username}" + vm_name = "${var.iso_name}.iso" + vnc_bind_address = "${var.vnc_bind_address}" + vnc_port_max = "${var.vnc_port_max}" + vnc_port_min = "${var.vnc_port_min}" +} + +build { + sources = ["source.qemu.autogenerated_1"] + + provisioner "shell" { + environment_vars = ["ALPINE_VERSION=${var.alpine_version}", "HOSTNAME=${var.hostname}", "NAMESERVER=${var.nameserver}"] + script = "packer/alpine/setup.sh" + } + + provisioner "shell" { + expect_disconnect = true + inline = ["/usr/bin/eject -s", "/sbin/reboot"] + } + + provisioner "ansible" { + // https://github.com/hashicorp/packer-plugin-ansible/issues/69 + ansible_ssh_extra_args = ["-o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa"] + extra_arguments = ["--extra-vars", "${var.ansible_extra_vars}", "${var.ansible_verbose}"] + inventory_directory = "ansible/inventories" + pause_before = "${var.pause_before}" + playbook_file = "ansible/playbook.yml" + sftp_command = "/usr/lib/ssh/sftp-server -e" + use_proxy = "true" + use_sftp = "true" + user = "${var.ansible_user}" + } + +} diff --git a/packer/alpine/setup.sh b/packer/alpine/setup.sh index fcd8923..a5ce816 100755 --- a/packer/alpine/setup.sh +++ b/packer/alpine/setup.sh @@ -3,11 +3,11 @@ export PATH="/usr/sbin:/usr/bin:/sbin:/bin" -ALPINE_VERSION="${ALPINE_VERSION:-3.10}" +ALPINE_VERSION="${ALPINE_VERSION:-3.16}" APKREPOSOPTS="http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/main http://dl-cdn.alpinelinux.org/alpine/v${ALPINE_VERSION}/community" BOOT_SIZE="32" DISKOPTS="-s 0 -m sys /dev/vda" -DNSOPTS="-n 8.8.8.8" +DNSOPTS="-n ${NAMESERVER:-1.1.1.1}" HOSTNAME="${HOSTNAME:-alpine}" HOSTNAMEOPTS="-n ${HOSTNAME}" INTERFACESOPTS="auto lo @@ -15,9 +15,6 @@ iface lo inet loopback auto eth0 iface eth0 inet dhcp - -auto eth1 -iface eth1 inet dhcp " KEYMAPOPTS="fr fr" NTPOPTS="-c openntpd" @@ -35,7 +32,7 @@ http://dl-8.alpinelinux.org/alpine/" /sbin/setup-hostname ${HOSTNAMEOPTS} echo "${INTERFACESOPTS}" | /sbin/setup-interfaces -i # /etc/init.d/networking --quiet start >/dev/null -# /sbin/setup-dns ${DNSOPTS} +/sbin/setup-dns ${DNSOPTS} /sbin/setup-timezone ${TIMEZONEOPTS} /sbin/setup-proxy -q ${PROXYOPTS} /sbin/setup-apkrepos ${APKREPOSOPTS} diff --git a/packer/def.packer.alpine.mk b/packer/def.packer.alpine.mk index a05f988..16e212a 100644 --- a/packer/def.packer.alpine.mk +++ b/packer/def.packer.alpine.mk @@ -1,5 +1,5 @@ PACKER_ALPINE_ARCH ?= x86_64 -PACKER_ALPINE_RELEASE ?= 3.12.0 +PACKER_ALPINE_RELEASE ?= 3.16.2 PACKER_BUILD_VARS += alpine_arch alpine_release alpine_version alpine_arch ?= $(PACKER_ALPINE_ARCH) alpine_release ?= $(PACKER_ALPINE_RELEASE) diff --git a/packer/def.packer.mk b/packer/def.packer.mk index aec0fda..c45697c 100644 --- a/packer/def.packer.mk +++ b/packer/def.packer.mk @@ -3,9 +3,9 @@ DOCKER_RUN_OPTIONS_PACKER ?= -it -p $(PACKER_SSH_PORT):$(PACKER_SSH_PORT) ENV_VARS += PACKER_CACHE_DIR PACKER_KEY_INTERVAL PACKER_LOG KVM_GID ?= $(call gid,kvm) PACKER_ARCH ?= $(PACKER_ALPINE_ARCH) -PACKER_BOOT_WAIT ?= 11s +PACKER_BOOT_WAIT ?= 24s PACKER_BUILD_ARGS ?= -on-error=cleanup $(foreach var,$(PACKER_BUILD_VARS),$(if $($(var)),-var $(var)='$($(var))')) -PACKER_BUILD_VARS += accelerator boot_wait hostname iso_name iso_size output password qemuargs ssh_wait_timeout template username +PACKER_BUILD_VARS += accelerator boot_wait hostname iso_name iso_size nameserver output password pause_before qemuargs ssh_timeout template username PACKER_BUILD_VARS += ansible_extra_vars ansible_user ansible_verbose PACKER_CACHE_DIR ?= build/cache PACKER_HOSTNAME ?= $(PACKER_TEMPLATE) @@ -14,19 +14,21 @@ PACKER_ISO_FILES ?= $(wildcard build/iso/*/*/*.iso) PACKER_ISO_FILE = $(PACKER_OUTPUT)/$(PACKER_ISO_NAME).iso PACKER_ISO_INFO = $(PACKER_OUTPUT)/$(PACKER_ISO_NAME).nfo PACKER_ISO_NAME = $(PACKER_TEMPLATE)-$(PACKER_RELEASE)-$(PACKER_ARCH) -PACKER_ISO_SIZE ?= 1024 -PACKER_KEY_INTERVAL ?= 10ms +PACKER_ISO_SIZE ?= 2048 +PACKER_KEY_INTERVAL ?= 11ms PACKER_LOG ?= 1 +PACKER_NAMESERVER ?= 1.1.1.1 PACKER_OUTPUT ?= build/iso/$(ENV)/$(PACKER_TEMPLATE)/$(PACKER_RELEASE)-$(PACKER_ARCH) PACKER_PASSWORD ?= $(PACKER_TEMPLATE) +PACKER_PAUSE_BEFORE ?= 24s PACKER_QEMU_ACCELERATOR ?= kvm PACKER_QEMU_ARCH ?= $(PACKER_ARCH) PACKER_QEMU_ARGS ?= -machine type=pc,accel=$(PACKER_QEMU_ACCELERATOR) -device virtio-rng-pci,rng=rng0,bus=pci.0,addr=0x7 -object rng-random,filename=/dev/urandom,id=rng0 PACKER_RELEASE ?= $(PACKER_ALPINE_RELEASE) PACKER_SSH_ADDRESS ?= $(if $(ssh_bind_address),$(ssh_bind_address),0.0.0.0) PACKER_SSH_PORT ?= $(if $(ssh_port_max),$(ssh_port_max),2222) -PACKER_SSH_WAIT_TIMEOUT ?= 42s -PACKER_TEMPLATES ?= $(wildcard packer/*/*.json) +PACKER_SSH_TIMEOUT ?= 42s +PACKER_TEMPLATES ?= $(wildcard packer/*/*.json packer/*/*.pkr.hcl) PACKER_TEMPLATE ?= alpine PACKER_USERNAME ?= root PACKER_VNC_PORT ?= $(if $(vnc_port_max),$(vnc_port_max),5900) @@ -51,8 +53,9 @@ iso_name ?= $(PACKER_ISO_NAME) iso_size ?= $(PACKER_ISO_SIZE) output ?= $(PACKER_OUTPUT) password ?= $(PACKER_PASSWORD) +pause_before ?= $(PACKER_PAUSE_BEFORE) qemuargs ?= $(call arrays_of_dquoted_args, $(PACKER_QEMU_ARGS)) -ssh_wait_timeout ?= $(PACKER_SSH_WAIT_TIMEOUT) +ssh_timeout ?= $(PACKER_SSH_TIMEOUT) template ?= $(PACKER_TEMPLATE) username ?= $(PACKER_USERNAME) @@ -62,16 +65,17 @@ password := $(or $(shell pwgen -csy -r\' 64 1 2>/dev/null endif endif -ifeq ($(OPERATING_SYSTEM),Darwin) +ifeq ($(SYSTEM),Darwin) ifneq ($(DOCKER), true) PACKER_QEMU_ACCELERATOR := hvf +PACKER_QEMU_ARGS += -cpu host else PACKER_QEMU_ACCELERATOR := tcg PACKER_QEMU_ARGS += -cpu max,vendor=GenuineIntel,vmware-cpuid-freq=on,+invtsc,+aes,+vmx endif -else ifeq ($(OPERATING_SYSTEM),Linux) +else ifeq ($(SYSTEM),Linux) DOCKER_RUN_OPTIONS_PACKER += $(if $(KVM_GID),--group-add $(KVM_GID)) --device /dev/kvm -else ifeq ($(OPERATING_SYSTEM),Windows_NT) +else ifeq ($(SYSTEM),Windows_NT) PACKER_QEMU_ACCELERATOR := hax endif @@ -90,12 +94,13 @@ endef # function packer-build: Call packer build with arg 1, Add build infos to file PACKER_ISO_INFO define packer-build - $(eval PACKER_TEMPLATE := $(notdir $(basename $(1)))) + $(eval PACKER_TEMPLATE := $(notdir $(basename $(basename $(1))))) echo Building $(PACKER_ISO_FILE) $(call packer,build $(PACKER_BUILD_ARGS) $(1)) echo 'aws_id: $(ANSIBLE_AWS_ACCESS_KEY_ID)' > $(PACKER_ISO_INFO) echo 'aws_key: $(ANSIBLE_AWS_SECRET_ACCESS_KEY)' >> $(PACKER_ISO_INFO) echo 'aws_region: $(ANSIBLE_AWS_DEFAULT_REGION)' >> $(PACKER_ISO_INFO) + echo 'dns: $(nameserver)' >> $(PACKER_ISO_INFO) echo 'docker_image_tag: $(ANSIBLE_DOCKER_IMAGE_TAG)' >> $(PACKER_ISO_INFO) echo 'docker_registry: $(ANSIBLE_DOCKER_REGISTRY)' >> $(PACKER_ISO_INFO) echo 'env: $(ENV)' >> $(PACKER_ISO_INFO) @@ -114,4 +119,4 @@ define packer-build echo 'user: $(username)' >> $(PACKER_ISO_INFO) endef -arrays_of_dquoted_args = $(subst $(dquote) $(dquote),$(dquote)$(comma) $(dquote),$(subst $(dquote) $(dquote)-,$(dquote) ]$(comma) [ $(dquote)-,$(patsubst %,$(dquote)%$(dquote),$1))) +arrays_of_dquoted_args = [ $(subst $(dquote) $(dquote),$(dquote)$(comma) $(dquote),$(subst $(dquote) $(dquote)-,$(dquote) ]$(comma) [ $(dquote)-,$(patsubst %,$(dquote)%$(dquote),$1))) ] diff --git a/packer/packer.mk b/packer/packer.mk index 0234d6f..cebe446 100644 --- a/packer/packer.mk +++ b/packer/packer.mk @@ -18,7 +18,7 @@ packer-build-templates: $(PACKER_TEMPLATES) ## Build all packer templates # target $(PACKER_TEMPLATES): Call packer-build $@ .PHONY: $(PACKER_TEMPLATES) -ifeq ($(OPERATING_SYSTEM),Darwin) +ifeq ($(SYSTEM),Darwin) $(PACKER_TEMPLATES): DOCKER ?= false endif $(PACKER_TEMPLATES): @@ -27,8 +27,8 @@ $(PACKER_TEMPLATES): # target packer-build-%: Call packer-build with file packer/*/%.json .PHONY: packer-build-% packer-build-%: docker-build-packer - $(if $(wildcard packer/*/$*.json),\ - $(call packer-build,$(wildcard packer/*/$*.json))) + $(if $(wildcard packer/*/$*.json packer/*/$*.pkr.hcl),\ + $(call packer-build,$(firstword $(wildcard packer/*/$*.json packer/*/$*.pkr.hcl)))) # target packer-qemu: Fire packer-quemu-% for PACKER_ISO_NAME .PHONY: packer-qemu @@ -36,7 +36,7 @@ packer-qemu: packer-qemu-$(PACKER_ISO_NAME) ## Launch iso image in qemu # target packer-qemu-%: Call packer-qemu PACKER_OUTPUT/%.iso .PHONY: packer-qemu-% -ifeq ($(OPERATING_SYSTEM),Darwin) +ifeq ($(SYSTEM),Darwin) packer-qemu-%: DOCKER ?= false endif packer-qemu-%: docker-build-packer ## Run iso image in qemu diff --git a/stack/ipfs.mk b/stack/ipfs.mk index fb51f76..ef6721c 100644 --- a/stack/ipfs.mk +++ b/stack/ipfs.mk @@ -1,5 +1,5 @@ ENV_VARS += IPFS_DAEMON_ARGS IPFS_PROFILE IPFS_VERSION -IPFS_PROFILE ?= $(if $(filter-out amd64 x86_64,$(PROCESSOR_ARCHITECTURE)),lowpower,server) +IPFS_PROFILE ?= $(if $(filter-out amd64 x86_64,$(MACHINE)),lowpower,server) IPFS_VERSION ?= 0.15.0 .PHONY: bootstrap-stack-ipfs diff --git a/stack/node/node.yml b/stack/node/node.yml index cd12fd5..7c84c63 100644 --- a/stack/node/node.yml +++ b/stack/node/node.yml @@ -47,8 +47,8 @@ services: args: - DOCKER_BUILD_DIR=docker/fabio - FABIO_VERSION=1.6.0 - - OPERATING_SYSTEM=${OPERATING_SYSTEM} - - PROCESSOR_ARCHITECTURE=${PROCESSOR_ARCHITECTURE} + - SYSTEM=${SYSTEM} + - MACHINE=${MACHINE} context: ../.. dockerfile: docker/fabio/Dockerfile container_name: ${NODE_COMPOSE_PROJECT_NAME}-fabio