make edge

* Add the ability to 'make edge' to create an AMI based on the latest Alpine edge repository
* Force 'ami_revision' to be 'rYYYYMMDDHHSS'
This commit is contained in:
Jake Buchholz 2018-09-07 08:15:19 -07:00 committed by Mike Crute
parent 4065c4ebb3
commit 8659605732
3 changed files with 33 additions and 8 deletions

View File

@ -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

View File

@ -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`}}''"'

View File

@ -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 <<EOF
if [ "$ALPINE_RELEASE" = 'edge' ]; then
cat > "$target"/etc/apk/repositories <<EOF
http://dl-cdn.alpinelinux.org/alpine/edge/main
http://dl-cdn.alpinelinux.org/alpine/edge/community
http://dl-cdn.alpinelinux.org/alpine/edge/testing
EOF
else
cat > "$target"/etc/apk/repositories <<EOF
http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_RELEASE/main
http://dl-cdn.alpinelinux.org/alpine/v$ALPINE_RELEASE/community
EOF
fi
# NOTE: until several key packages graduate from edge...
cat >> "$target"/etc/apk/repositories <<EOF
@edge-main http://dl-cdn.alpinelinux.org/alpine/edge/main
@edge-community http://dl-cdn.alpinelinux.org/alpine/edge/community
@edge-testing http://dl-cdn.alpinelinux.org/alpine/edge/testing
EOF
echo "$add_repos" | tr , "\012" >> "$target"/etc/apk/repositories
}
@ -269,6 +284,8 @@ cleanup() {
main() {
[ "$#" -ne 2 ] && { echo "usage: $0 '<repo>[,<repo>]' '<pkg>[,<pkg>]'"; 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"