1 #!/bin/bash |
1 #!/bin/bash |
2 BRIDGE=br-lan |
|
3 RAM=1024 |
|
4 VCPUS=2 |
|
5 IMAGE=isos/debian-6.0.3-amd64-netinst_preseed.iso |
|
6 IMAGE_VARIANT=debiansqueeze |
|
7 |
2 |
|
3 ### Parameters |
|
4 ## Options |
|
5 _MOCK=${_MOCK:0} |
8 |
6 |
9 NAME=$1 |
7 ## Guest info |
10 VG=pvl |
8 GUEST_NAME=asdf2 |
11 DISK_NAME=${NAME} |
9 |
12 DISK=/dev/mapper/${VG}-$DISK_NAME |
10 # Basic params |
|
11 GUEST_RAM=1G |
|
12 GUEST_VCPUS=2 |
|
13 |
|
14 # OS variant (for virt-install) |
|
15 GUEST_OS_VARIANT=debiansqueeze |
|
16 |
|
17 ## Disk |
|
18 # Size of LV to create |
13 DISK_SIZE=10G |
19 DISK_SIZE=10G |
14 |
20 |
15 PRESEED_FILE=/cdrom/preseed.cfg |
21 # LVM vg to use |
16 PRESEED_CHECKSUM=35ea42c7b0139aab26284a96c0ec8c31 |
22 DISK_VG=pvl |
17 |
23 |
18 PRESEED_BOOT={preseed/file=$PRESEED_FILE preseed/file/checksum=$PRESEED_CHECKSUM} |
24 # LVM lv to use |
|
25 DISK_NAME=${GUEST_NAME} |
19 |
26 |
20 # env |
27 # Path to disk block device |
21 LVCREATE=/sbin/lvcreate |
28 DISK_PATH=/dev/mapper/${DISK_VG}-${DISK_NAME} |
22 VIRT_INSTALL=/usr/bin/virt-install |
29 DISK_BUS=virtio |
|
30 GUEST_DISK=/dev/vda |
23 |
31 |
24 LIBVIRT_URL=qemu:///system |
32 ## Network |
25 VIRT_TYPE=kvm |
33 NET_BRIDGE=br-lan |
|
34 NET_IPADDR=194.197.235.36 |
26 |
35 |
|
36 ## Installation image |
|
37 # Original Debian Installer image (iso) |
|
38 INSTALLER_NAME="debian-6.0.3-amd64" |
|
39 INSTALLER_ISO="iso-in/${INSTALLER_NAME}-netinst.iso" |
|
40 INSTALLER_TREE="iso-in/$INSTALLER_NAME" |
|
41 INSTALLER_FLAG="${INSTALLER_TREE}.unpacked" |
|
42 |
|
43 # Customized preseed image name |
|
44 INSTALL_NAME="debian-6.0.3-amd64_${GUEST_NAME}" |
|
45 |
|
46 # Customized image content |
|
47 INSTALL_TREE="images/${INSTALL_NAME}" |
|
48 INSTALL_ISO="iso-out/${INSTALL_NAME}.iso" |
|
49 |
|
50 # Preseed output file in install tree |
|
51 INSTALL_PRESEED_NAME="preseed.cfg" |
|
52 INSTALL_PRESEED_FILE="${INSTALL_TREE}/${INSTALL_PRESEED_NAME}" |
|
53 INSTALL_PRESEED_CHECKSUM= # set later |
|
54 |
|
55 # Preseed source template |
|
56 PRESEED_TEMPLATE="preseed/preseed.cfg" |
|
57 PRESEED_ISOLINUX="preseed/isolinux.cfg" |
|
58 PRESEED_REST="preseed/passwords.cfg" |
|
59 |
|
60 ## External progs |
|
61 # Bootable .iso for Debian isolinux-based installer CDs |
|
62 GENISOIMAGE=/usr/bin/genisoimage |
|
63 GENISOIMAGE_OPTS="-r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat" |
|
64 |
|
65 # LVM |
|
66 LVM=/sbin/lvm |
|
67 |
|
68 # Libvirt --connect URL |
|
69 LIBVIRT=qemu:///system |
|
70 VIRSH=/usr/bin/virsh |
|
71 |
|
72 function virsh () { |
|
73 $VIRSH --connect $LIBVIRT "$@" |
|
74 } |
|
75 |
|
76 # type of guest to create |
|
77 LIBVIRT_TYPE=kvm |
|
78 |
|
79 # virt-install |
|
80 VIRT_INSTALL="/usr/bin/virt-install" |
|
81 |
|
82 ## SELinux? |
27 #SEMANAGE=/usr/sbin/semanage |
83 #SEMANAGE=/usr/sbin/semanage |
28 #RESTORECON=/sbin/restorecon |
84 #RESTORECON=/sbin/restorecon |
29 |
85 |
30 # functions |
86 ### Functions |
|
87 set -u |
31 set -e |
88 set -e |
32 |
89 |
33 function cmd () { |
90 scripts=$(dirname $0)/scripts |
34 echo ">>> $@" |
91 . $scripts/lib.sh |
35 eval "$@" || exit $? |
|
36 } |
|
37 |
92 |
|
93 ### Check |
|
94 # VM exists? |
|
95 if cmd virsh domid ${GUEST_NAME} 2> /dev/null; then |
|
96 die "Virtual machine already exists: ${GUEST_NAME}" |
|
97 fi |
|
98 |
|
99 # Installer exists? |
|
100 if cmd test ! -f ${INSTALLER_ISO}; then |
|
101 die "Installer not found: ${INSTALLER_ISO}" |
|
102 fi |
38 |
103 |
39 ### Go! |
104 ### Go! |
|
105 # Extract .iso |
|
106 if [ -f ${INSTALLER_FLAG} ]; then |
|
107 echo "Installer already unpacked: ${INSTALLER_TREE}" |
|
108 |
|
109 else |
|
110 echo "Unpacking installer: ${INSTALLER_ISO}" |
|
111 cmd extract_iso ${INSTALLER_ISO} ${INSTALLER_TREE} |
|
112 cmd touch ${INSTALLER_FLAG} |
|
113 fi |
|
114 |
|
115 # Copy to customized tree |
|
116 cmd cp -r ${INSTALLER_TREE} ${INSTALL_TREE} |
|
117 cmd chmod -R u=rwX,og=rX ${INSTALL_TREE} |
|
118 |
|
119 # XXX: Customize preseed |
|
120 cmd expand_template ${PRESEED_TEMPLATE} ${INSTALL_PRESEED_FILE} |
|
121 |
|
122 # md5sum |
|
123 INSTALL_PRESEED_CHECKSUM=$(my_md5sum $INSTALL_PRESEED_FILE) |
|
124 |
|
125 # Isolinux .cfg |
|
126 cmd expand_template ${PRESEED_ISOLINUX} ${INSTALL_TREE}/isolinux/isolinux.cfg |
|
127 |
|
128 # Others |
|
129 for file in ${PRESEED_REST}; do |
|
130 name=$(basename $file) |
|
131 |
|
132 cmd expand_template $file ${INSTALL_TREE}/${name} |
|
133 done |
|
134 |
|
135 # Create .iso |
|
136 cmd ${GENISOIMAGE} -o ${INSTALL_ISO} ${GENISOIMAGE_OPTS} ${INSTALL_TREE} |
40 |
137 |
41 ## LVM |
138 ## LVM |
42 [ -e $DISK ] || cmd $LVCREATE -L $DISK_SIZE -n $DISK_NAME $VG |
139 # Create LV (unless it already exists) |
43 |
140 [ -e $DISK_PATH ] || cmd sudo $LVM lvcreate -L $DISK_SIZE -n $DISK_NAME $DISK_VG |
44 |
141 |
45 ## SELinux? |
142 ## SELinux? |
46 #$SEMANAGE fcontext -a -t virt_image_t $DISK |
143 #$SEMANAGE fcontext -a -t virt_image_t $DISK |
47 #$RESTORECON -v $DISK |
144 #$RESTORECON -v $DISK |
48 |
145 |
49 ## virt-install |
146 ## virt-install |
50 cmd $VIRT_INSTALL \ |
147 cmd $VIRT_INSTALL \ |
51 --connect $LIBVIRT_URL \ |
148 --connect $LIBVIRT \ |
52 --name $NAME \ |
149 --name $GUEST_NAME \ |
53 --ram $RAM --vcpus $VCPUS \ |
150 --ram $(expand_MB $GUEST_RAM) --vcpus $GUEST_VCPUS \ |
54 --cdrom "$IMAGE" \ |
151 --cdrom "$INSTALL_ISO" \ |
55 --os-variant $IMAGE_VARIANT \ |
152 --os-variant $GUEST_OS_VARIANT \ |
56 --disk path=$DISK,bus=virtio \ |
153 --disk path=$DISK_PATH,bus=$DISK_BUS \ |
57 --network bridge:$BRIDGE \ |
154 --network bridge:$NET_BRIDGE \ |
58 --vnc \ |
155 --vnc \ |
59 --virt-type $VIRT_TYPE \ |
156 --virt-type $LIBVIRT_TYPE \ |
60 --accelerate --hvm \ |
157 --accelerate --hvm \ |
61 --serial pty |
158 --serial pty |
62 |
159 |