aboutsummaryrefslogtreecommitdiff
path: root/share/hydractl/provision-img
blob: 7f42e28df71d17b756f76987b7e86ce3fdb9569e (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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/bin/bash
#
# System installer, vmdebootstrap version.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public
# License along with this program.  If not, see
# <http://www.gnu.org/licenses/>.

# Load.
source $APP_BASE/lib/hydra/functions || exit 1
hydra_config_load

# Make sure there is provision config.
function hydra_provision_config {
  hydra_user_config   image             /var/cache/qemu/debian/box.img   "Destination image"
  hydra_user_config   size              3G                               "Image size"
  hydra_user_config   format            qcow2                            "Image format: raw or qcow2"
  hydra_user_config   hostname          machine                          "Hostname"
  hydra_user_config   domain            example.org                      "Domain"
  hydra_user_config   arch              amd64                            "System arch"
  hydra_user_config   version           stretch                          "Distro version"
  hydra_user_config   mirror            http://http.debian.net/debian/   "Debian mirror"
}

# Load configuration
hydra_provision_config_load $1

# Get config parameters
hydra_provision_config

# Check
if [ -e "$image" ]; then
  echo "error: $image already exists."
  exit 1
fi

# Ensure base folder exists
hydra_sudo_run mkdir -p `dirname $image`

#
# vmdebootstrap version
#
# Check for requirements
for req in vmdebootstrap mbr; do
  hydra_install_package $req
done

# Image format
if [ "$format" == "qcow2" ]; then
  format="--convert-qcow2"
else
  formt=""
fi

# Run
hydra_sudo_run vmdebootstrap --verbose --image=$image --size=$size --distribution=$version \
                             --mirror=$mirror --arch=$arch --hostname=$hostname.$domain    \
                             --grub $format

# Fix permissions
hydra_sudo_run chown -R `whoami`. `dirname $image`

# Cleanup
hydra_sudo_run rm debootstrap.log
hydra_sudo_run rm ${image}.raw

#
# Custom version
#
#
#WORK="`mktemp -d`"
#
## Check for requirements.
#for req in debootstrap grub-pc parted; do
#  hydra_install_package $req
#done
#
#echo "Creating image..."
#hydra_sudo_run dd if=/dev/zero of=$image bs=$size count=1
#device="`sudo losetup --find --show $image`"
#
#echo "Partitioning image at $device..."
#hydra_sudo_run parted -s -- $device mklabel gpt
#hydra_sudo_run parted -s -- $device unit    MB mkpart    non-fs 2  3
#hydra_sudo_run parted -s -- $device set     1  bios_grub on
#hydra_sudo_run parted -s -- $device unit    MB mkpart    ext2   3 -1
#hydra_sudo_run parted -s -- $device set     2  boot on
#hydra_sudo_run mkfs.ext3 ${device}p2
#hydra_sudo_run mount ${device}p2 $WORK/
#
## Non-interactive installation
#APT_INSTALL="hydra_sudo_run LC_ALL=C DEBIAN_FRONTEND=noninteractive chroot $WORK/ apt-get install -y"
#
## Initial system install.
#echo "Installing base system..."
#hydra_sudo_run LC_ALL=C DEBIAN_FRONTEND=noninteractive debootstrap --arch=$arch $version $WORK/ $mirror
#
## Initial configuration.
#echo "Applying initial configuration..."
#hydra_sudo_run mount none -t proc  $WORK/proc
#hydra_sudo_run mount none -t sysfs $WORK/sys
#hydra_sudo_run mount -o bind /dev/ $WORK/dev
#echo LANG=C | $SUDO tee $WORK/etc/default/locale > /dev/null
#
## Hostname configuration.
#echo $hostname.$domain     | $SUDO tee    $WORK/etc/hostname > /dev/null
#echo "127.0.0.1 localhost" | $SUDO tee -a $WORK/etc/hosts    > /dev/null
#
## This ordering is important for facter correctly guess the domain name
#echo "127.0.0.1 $hostname.$domain $hostname" | $SUDO tee -a $WORK/etc/hosts > /dev/null
#
## Invert hostname contents to avoid http://projects.puppetlabs.com/issues/2533
#tac $WORK/etc/hosts | $SUDO tee $WORK/etc/hosts.new > /dev/null
#hydra_sudo_run mv $WORK/etc/hosts.new $WORK/etc/hosts
#
## Initial upgrade.
#echo "Applying initial upgrades..."
#hydra_sudo_run chroot $WORK/ apt-get update
#hydra_sudo_run chroot $WORK/ apt-get upgrade -y
#
#$APT_INSTALL locales
#$APT_INSTALL screen cron lsb-release openssl -y
#$APT_INSTALL linux-image-$kernel_arch -y
#$APT_INSTALL grub-pc -y
#hydra_sudo_run chroot $WORK/ update-grub
#
## Teardown
#hydra_sudo_run umount $WORK/proc
#hydra_sudo_run umount $WORK/sys
#hydra_sudo_run umount $WORK/dev
#hydra_sudo_run umount $WORK
#hydra_sudo_run rmdir  $WORK
#hydra_sudo_run losetup -d $device