Lines 22-34
Link Here
|
22 |
|
22 |
|
23 |
optparser = optparse.OptionParser() |
23 |
optparser = optparse.OptionParser() |
24 |
|
24 |
|
25 |
optparser.add_option('--no-reload-module', |
|
|
26 |
help = 'do not reload kvm module', |
27 |
action = 'store_false', |
28 |
dest = 'reload', |
29 |
default = privileged, |
30 |
) |
31 |
|
32 |
optparser.add_option('--install', |
25 |
optparser.add_option('--install', |
33 |
help = 'start up guest in installer boot cd', |
26 |
help = 'start up guest in installer boot cd', |
34 |
action = 'store_true', |
27 |
action = 'store_true', |
Lines 67-78
Link Here
|
67 |
default = None, |
60 |
default = None, |
68 |
) |
61 |
) |
69 |
|
62 |
|
70 |
optparser.add_option('--no-kvm', |
|
|
71 |
help = 'use standard qemu, without kvm', |
72 |
action = 'store_false', |
73 |
dest = 'kvm', |
74 |
default = True, |
75 |
) |
76 |
optparser.add_option('--image', |
63 |
optparser.add_option('--image', |
77 |
help = 'select disk image', |
64 |
help = 'select disk image', |
78 |
dest = 'image', |
65 |
dest = 'image', |
Lines 117-168
Link Here
|
117 |
if len(args) > 1: |
104 |
if len(args) > 1: |
118 |
options.cdrom = args[1] |
105 |
options.cdrom = args[1] |
119 |
|
106 |
|
120 |
def remove_module(module): |
107 |
commands.getstatusoutput('/sbin/udevsettle') |
121 |
module = module.replace('-', '_') |
108 |
if not os.access('/dev/kvm', os.F_OK): |
122 |
lines = commands.getoutput('/sbin/lsmod').split('\n') |
109 |
print '/dev/kvm not present' |
123 |
for x in lines: |
|
|
124 |
if x.startswith(module + ' '): |
125 |
if os.spawnl(os.P_WAIT, '/sbin/rmmod', 'rmmod', module) != 0: |
126 |
raise Exception('failed to remove %s module' % (module,)) |
127 |
|
128 |
def insert_module(module): |
129 |
if os.spawnl(os.P_WAIT, '/sbin/insmod', 'insmod', |
130 |
'kernel/%s.ko' % (module,)) != 0: |
131 |
raise Exception('failed to load kvm module') |
132 |
|
133 |
def probe_module(module): |
134 |
if os.spawnl(os.P_WAIT, '/sbin/modprobe', 'modprobe', module) != 0: |
135 |
raise Exception('failed to load kvm module') |
136 |
|
137 |
def vendor(): |
138 |
for x in file('/proc/cpuinfo').readlines(): |
139 |
m = re.match(r'vendor_id[ \t]*: *([a-zA-Z]+),*', x) |
140 |
if m: |
141 |
return m.group(1) |
142 |
return unknown |
143 |
|
144 |
vendor_module = { |
145 |
'GenuineIntel': 'kvm-intel', |
146 |
'AuthenticAMD': 'kvm-amd', |
147 |
}[vendor()] |
148 |
|
149 |
if options.kvm and options.reload: |
150 |
for module in [vendor_module, 'kvm']: |
151 |
remove_module(module) |
152 |
if external_module: |
153 |
insmod = insert_module |
154 |
else: |
155 |
insmod = probe_module |
156 |
for module in ['kvm', vendor_module]: |
157 |
insmod(module) |
158 |
commands.getstatusoutput('/sbin/udevsettle') |
159 |
if not os.access('/dev/kvm', os.F_OK): |
160 |
print '/dev/kvm not present' |
161 |
|
110 |
|
162 |
disk = options.image |
111 |
disk = options.image |
163 |
if options.install: |
112 |
if options.install: |
164 |
(status, output) = commands.getstatusoutput( |
113 |
(status, output) = commands.getstatusoutput( |
165 |
'qemu/qemu-img create -f qcow2 "%s" 10G' % disk) |
114 |
'qemu-img create -f qcow2 "%s" 10G' % disk) |
166 |
if status: |
115 |
if status: |
167 |
raise Exception, output |
116 |
raise Exception, output |
168 |
|
117 |
|
Lines 177-188
Link Here
|
177 |
else: |
126 |
else: |
178 |
cmd = 'qemu' |
127 |
cmd = 'qemu' |
179 |
|
128 |
|
180 |
local_cmd = 'qemu/' + arch + '-softmmu/' + cmd |
|
|
181 |
if os.access(local_cmd, os.F_OK): |
182 |
cmd = local_cmd |
183 |
else: |
184 |
cmd = '/usr/bin/kvm' |
185 |
|
186 |
qemu_args = (cmd, '-boot', bootdisk, |
129 |
qemu_args = (cmd, '-boot', bootdisk, |
187 |
'-hda', disk, '-m', str(options.memory), |
130 |
'-hda', disk, '-m', str(options.memory), |
188 |
'-serial', 'file:/tmp/serial.log', |
131 |
'-serial', 'file:/tmp/serial.log', |
Lines 192-200
Link Here
|
192 |
if options.cdrom: |
135 |
if options.cdrom: |
193 |
qemu_args += ('-cdrom', options.cdrom,) |
136 |
qemu_args += ('-cdrom', options.cdrom,) |
194 |
|
137 |
|
195 |
if not options.kvm: |
|
|
196 |
qemu_args += ('-no-kvm',) |
197 |
|
198 |
if options.debugger: |
138 |
if options.debugger: |
199 |
qemu_args += ('-s',) |
139 |
qemu_args += ('-s',) |
200 |
|
140 |
|