-
Notifications
You must be signed in to change notification settings - Fork 0
/
create-baseimage
executable file
·164 lines (148 loc) · 4.08 KB
/
create-baseimage
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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#!/bin/bash
# Cloudy: An open LAMP benchmark suite
# Copyright (C) 2010 Adam Litke, IBM Corporation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# 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
# General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
##################################################
# create-baseimage - Create a cloudy base image. #
##################################################
# Import global configuration settings
. config
DIR=`pwd`/baseimage
BASEIMAGE="$DIR/baseimage.img"
function check_step()
{
RC=$?
STEP=$1
if [ $RC -ne 0 ]; then
echo "The previous step ($STEP) failed!"
exit 1
else
echo "Finished step: $STEP"
fi
}
function find_qemu()
{
if [ -n "$QEMU" ]; then
return
fi
QEMU=`which qemu-system-x86_64`
if [ $? -eq 0 ]; then
return
fi
QEMU=`which qemu-kvm`
if [ $? -eq 0 ]; then
return
fi
if [ -x "/usr/libexec/qemu-kvm" ]; then
QEMU="/usr/libexec/qemu-kvm"
return
fi
# Not Found!
echo "Could not find qemu! Please set QEMU manually."
exit 1
}
function get_boot_files()
{
if [ ! -f $DIR/vmlinuz ]; then
echo "Downloading kernel"
wget -O $DIR/vmlinuz $MIRROR/Fedora/x86_64/os/isolinux/vmlinuz
check_step "download kernel"
fi
if [ ! -f $DIR/initrd.img ]; then
echo "Downloading initrd"
wget -O $DIR/initrd.img $MIRROR/Fedora/x86_64/os/isolinux/initrd.img
check_step "download initrd"
fi
}
# Make sure we know where qemu is installed
find_qemu
check_step "Find qemu binary"
# Download the boot files if needed
get_boot_files
# Create an empty disk image
qemu-img create -f qcow2 $BASEIMAGE 10G > /dev/null
check_step "Create empty disk"
chmod 666 $BASEIMAGE
# Create the kickstart ISO
mkdir -p $DIR/kickstart
sed -e "s#<<MIRROR>>#$MIRROR#" < $DIR/ks.cfg.in > $DIR/kickstart/ks.cfg
mkisofs -J --quiet -o $DIR/kickstart.iso $DIR/kickstart
check_step "Create kickstart ISO"
cat <<EOF > $DIR/baseimage-domain.xml
<domain type='kvm'>
<name>baseimage-installer</name>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64'>hvm</type>
<kernel>$DIR/vmlinuz</kernel>
<initrd>$DIR/initrd.img</initrd>
<cmdline>linux ks=cdrom:/ks.cfg</cmdline>
</os>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>destroy</on_reboot>
<on_crash>destroy</on_crash>
<features>
<pae/>
<acpi />
<apic />
</features>
<devices>
<emulator>$QEMU</emulator>
<disk type='file' >
<source file='$BASEIMAGE'/>
<target dev='vda' bus='virtio' />
<driver name='qemu' type='qcow2' cache='none'/>
</disk>
<disk type='file' device='cdrom'>
<source file='$DIR/kickstart.iso'/>
<target dev='hdb'/>
<readonly/>
</disk>
<input type='mouse' bus='ps2'/>
<interface type='network'>
<source network='default'/>
<model type='virtio'/>
</interface>
<graphics type='vnc'/>
</devices>
</domain>
EOF
check_step "Create domain XML"
virsh create $DIR/baseimage-domain.xml
check_step "Create virtual machine"
echo -n "Waiting for install to finish"
SECS=0
while [ $SECS -lt 7200 ]; do
virsh list | grep -q baseimage-installer
if [ $? -ne 0 ]; then
DONE=1
break
fi
echo -n "."
sleep 10
SECS=$(($SECS + 10))
done
echo ""
if [ "$DONE" == "1" ]; then
echo "Installation has completed."
exit 0
else
echo "Installation has timed out. You may want to connect to the virtual"
echo "machine to see what is going on."
exit 1
fi