diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000..675bcfa --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,91 @@ +#!/bin/sh + +# - builds a generic image from a stage3 tarball and portage snapshot +# - creates and uploads AMI +# +# based on work from JD Harrington https://github.com/psi/gentoo-aws +# and Matsuu Takuto https://gist.github.com/870789 + +#=============================================================================== +GENTOO_MIRROR="http://gentoo.arcticnetwork.ca" + +set -x + +die() { + echo $@ + exit 1 +} + +# bootstrap ROOT_FS PROFILE ARCH +bootstrap() { + local ROOT_FS=$1 + local PROFILE=$2 + local ARCH=$3 + + local STAGE_PATH + local STAGE_ARCH + local LATEST_STAGE_FILE + local ESELECT_PROFILE + + if [ "${ARCH}" = "i686" ] ; then + STAGE_ARCH=${ARCH} + # Why do they use x86 here ? :( + STAGE_PATH="${GENTOO_MIRROR}/releases/x86/autobuilds" + elif [ "${ARCH}" = "x86_64" ] ; then + STAGE_ARCH="amd64" + STAGE_PATH="${GENTOO_MIRROR}/releases/${STAGE_ARCH}/autobuilds" + else + die "Unknown architecture!" + fi + + if [ "${PROFILE}" = "hardened" ] ; then + LATEST_STAGE_FILE="${STAGE_PATH}/latest-stage3-${STAGE_ARCH}-hardened.txt" + ESELECT_PROFILE="hardened/linux/${ARCH}" + elif [ "${PROFILE}" = "hardened-no-multilib" ] ; then + LATEST_STAGE_FILE="${STAGE_PATH}/latest-stage3-${STAGE_ARCH}-hardened+nomultilib.txt" + ESELECT_PROFILE="hardened/linux/${ARCH}/no-multilib" + elif [ "${PROFILE}" = "server" ] ; then + LATEST_STAGE_FILE="${STAGE_PATH}/latest-stage3-${STAGE_ARCH}.txt" + ESELECT_PROFILE="default/linux/${ARCH}/10.0/no-multilib" + else + die "Unknown profile!" + fi + + STAGE_TARBALL=${GENTOO_MIRROR}/releases/${STAGE_ARCH}/autobuilds/$(curl -s ${LATEST_STAGE_FILE} | grep -v "^#" | head -n 1) + PORTAGE_SNAPSHOT="${GENTOO_MIRROR}/snapshots/portage-latest.tar.bz2" +} + + +usage() { +cat << EOF +Usage: $0 [options] + +This script builds a generic gentoo stage3 image + +OPTIONS: +-h Show this message +-a arch, either i686 or x86_64, defaults to uname -m +-p profile, either hardened or hardened-no-multilib or server(default) +-t The timezone to use, default to GMT +-v Verbose +EOF +} + +while getopts ":a:p:t:vh" OPTIONS; do + case $OPTIONS in + a ) ARCH=$OPTARG;; + p ) PROFILE=$OPTARG;; + t ) TIMEZONE=$OPTARG;; + v ) VERBOSE=1;; + ? ) + usage + exit + ;; + esac +done + +ARCH=${ARCH-"$(uname -m)"} +PROFILE=${PROFILE="server"} +TIMEZONE=${TIMEZONE-"GMT"} + +bootstrap /mnt/gentoo ${PROFILE} ${ARCH} diff --git a/scripts/urls.txt b/scripts/urls.txt new file mode 100644 index 0000000..910b807 --- /dev/null +++ b/scripts/urls.txt @@ -0,0 +1,8 @@ +https://github.com/psi/gentoo-aws/blob/93d3bf2498c572832778a853b9307e47ef7f5b5b/scripts/build-stage3-image.sh +https://raw.github.com/gist/870789/bf45e6c5b370445fc3c19111af0dd5eec4097480/create_gentoo_ami.sh +http://www.agaffney.org/quickstart.php +http://dev.gentoo.org/~swift/docs/gensetup-guide.xml +http://rich0gentoo.wordpress.com/2010/04/02/gentoo-on-ec2-from-scratch/ + +http://gentoo.arcticnetwork.ca/releases/amd64/autobuilds/ +