diff --git a/Makefile b/Makefile index d2505b2..3f08dd0 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,16 @@ .PHONY: ami -ami: build/convert + +ami: convert + packer build -var-file=build/variables.json build/alpine-ami.json + +edge: convert + @echo '{ "alpine_release": "edge", "ami_release": "'`date +%Y%m%d%H%M%S`'" }' > build/edge.json + packer build -var-file=build/variables.json -var-file=build/edge.json build/alpine-ami.json + +convert: build/convert [ -f variables.yaml ] || cp variables.yaml-default variables.yaml build/convert variables.yaml > build/variables.json build/convert alpine-ami.yaml > build/alpine-ami.json - packer build -var-file=build/variables.json build/alpine-ami.json build/convert: [ -d ".py3" ] || python3 -m venv .py3 diff --git a/alpine-ami.yaml b/alpine-ami.yaml index 0ec2e21..8baabc0 100644 --- a/alpine-ami.yaml +++ b/alpine-ami.yaml @@ -1,10 +1,9 @@ variables: - # NOTE: Configuration is done with a `variables.yaml` file. If it doesn't - # exist, default configuration is copied from `variables.yaml-default`. + # NOTE: Configuration is done with a 'variables.yaml' file. If it doesn't + # exist, default configuration is copied from 'variables.yaml-default'. - # NOTE: Changing alpine_release requires modifying `make_ami.sh` -- don't - # override this in `variables.json`! + # NOTE: Changing alpine_release may require modifying 'make_ami.sh'. alpine_release: "3.8" @@ -55,4 +54,6 @@ builders: provisioners: - type: "shell" script: "make_ami.sh" + environment_vars: + - "ALPINE_RELEASE={{user `alpine_release`}}" execute_command: 'sudo sh -c "{{ .Vars }} {{ .Path }} ''{{user `add_repos`}}'' ''{{user `add_pkgs`}}''"' diff --git a/make_ami.sh b/make_ami.sh index 0d10058..9b24227 100755 --- a/make_ami.sh +++ b/make_ami.sh @@ -3,12 +3,14 @@ set -eu -: ${ALPINE_RELEASE:="3.8"} # not tested against edge +: ${MIN_RELEASE:="3.8"} : ${APK_TOOLS_URI:="https://github.com/alpinelinux/apk-tools/releases/download/v2.10.0/apk-tools-2.10.0-x86_64-linux.tar.gz"} : ${APK_TOOLS_SHA256:="77f2d256fcd5d6fdafadf43bb6a9c85c3da7bb471ee842dcd729175235cb9fed"} : ${ALPINE_KEYS:="http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/alpine-keys-2.1-r1.apk"} : ${ALPINE_KEYS_SHA256:="f7832b848cedca482b145011cf516e82392f02a10713875cb09f39c7221c6f17"} +: ${ALPINE_RELEASE:="${MIN_RELEASE}"} # unless otherwise specified + die() { printf '\033[1;31mERROR:\033[0m %s\n' "$@" >&2 # bold red exit 1 @@ -75,13 +77,26 @@ setup_repositories() { local add_repos="$2" # extra repo lines, comma separated mkdir -p "$target"/etc/apk/keys - cat > "$target"/etc/apk/repositories < "$target"/etc/apk/repositories < "$target"/etc/apk/repositories <> "$target"/etc/apk/repositories <> "$target"/etc/apk/repositories } @@ -269,6 +284,8 @@ cleanup() { main() { [ "$#" -ne 2 ] && { echo "usage: $0 '[,]' '[,]'"; exit 1; } + [ "$ALPINE_RELEASE" != 'edge' ] && [[ "$ALPINE_RELEASE" -lt "$MIN_RELEASE" ]] && \ + { echo "ERR: minimum alpine_release value must be '$MIN_RELEASE'"; exit 1; } local add_repos="$1" local add_pkgs="$2"