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}'."
|