summaryrefslogtreecommitdiff
path: root/bootstrap_debian
blob: 156eeef548236ca489383c85f51d15d4912a21e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/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}'."