#!/bin/sh set -e SCRIPT="${0}" MACHINES="/var/lib/machines" command_line_params() { LONG_OPTIONS="arch:,name:,distribution:,mirror:,password:" OPTIONS="a:,n:,d:,m:,p:" PARAMETERS="$(getopt --longoptions $LONG_OPTIONS \ --name=${SCRIPT} --options ${OPTIONS} --shell sh -- ${@})" if [ "${?}" != "0" ]; then echo "'${SCRIPT}': getopt exit" >&2 exit 1 fi eval set -- "${PARAMETERS}" while true; do case "${1}" in -a|--arch) ARCHITECTURE="${2}" shift 2 ;; -n|--name) NAME="${2}" shift 2 ;; -d|--distribution) DISTRIBUTION="${2}" shift 2 ;; -m|--mirror) MIRROR="${2}" shift 2 ;; -p|--password) PASSWORD="${2}" shift 2 ;; --) shift 1 break ;; *) echo "'${SCRIPT}': getopt error" >&2 exit 1 esac done } usage() { echo \ "Usage: ${SCRIPT} -n|--name NAME [-a|--arch ARCHITECTURE] [-d|--distribution DISTRIBUTION] [-p|--password PASSWORD] [-m|--mirror MIRROR]" >&2 exit 1 } if [ $(id -u) -ne 0 ]; then echo "You must be root to execute this command" exit 2 fi command_line_params "${@}" if [ -z "${NAME}" ]; then usage fi if [ -e "${MACHINES}/${NAME}" ]; then echo "'${NAME}': machine already exists" >&2 exit 1 fi ARCHITECTURE="${ARCHITECTURE:-$(dpkg --print-architecture)}" DISTRIBUTION="${DISTRIBUTION:-jessie}" MIRROR="${MIRROR:-http://deb.debian.org/debian}" PASSWORD="${PASSWORD:-$(dd if=/dev/urandom bs=12 count=1 2>/dev/null | base64)}" debootstrap --arch=${ARCHITECTURE} --include=dbus ${DISTRIBUTION} \ ${MACHINES}/${NAME} ${MIRROR} chroot "${MACHINES}/${NAME}" apt-get clean # Set hostname echo "${NAME}" > "${MACHINES}/${NAME}/etc/hostname" # set root password echo root:${PASSWORD} | chroot "${MACHINES}/${NAME}" chpasswd echo "${NAME}: root password is set to '${PASSWORD}'."