source: postlfs/virtualization/qemu.xml@ 670f775

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 7.10 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts lazarus lxqt nosym perl-modules plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition trunk upgradedb xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since 670f775 was 670f775, checked in by Bruce Dubbs <bdubbs@…>, 9 years ago

Simplify qemu configuration instructions for connecting to a network bridge.

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/trunk/BOOK@15134 af4574ff-66df-0310-9fd7-8a98e5e911e0

  • Property mode set to 100644
File size: 15.2 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4 <!ENTITY % general-entities SYSTEM "../../general.ent">
5 %general-entities;
6
7 <!ENTITY qemu-download-http "http://wiki.qemu.org/download/qemu-&qemu-version;.tar.bz2">
8 <!ENTITY qemu-download-ftp " ">
9 <!ENTITY qemu-md5sum "0ff197c4ed4b695620bc4734e77c888f">
10 <!ENTITY qemu-size "22 MB">
11 <!ENTITY qemu-buildsize "286 MB">
12 <!ENTITY qemu-time "1.6 SBU">
13]>
14
15<sect1 id="qemu" xreflabel="qemu-&qemu-version;">
16 <?dbhtml filename="qemu.html"?>
17
18 <sect1info>
19 <othername>$LastChangedBy$</othername>
20 <date>$Date$</date>
21 </sect1info>
22
23 <title>qemu-&qemu-version;</title>
24
25 <indexterm zone="qemu">
26 <primary sortas="a-qemu">qemu</primary>
27 </indexterm>
28
29 <sect2 role="package">
30 <title>Introduction to qemu</title>
31
32 <para><application>qemu</application> is a full virtualization solution
33 for Linux on x86 hardware containing virtualization extensions (Intel VT or
34 AMD-V).</para>
35
36 &lfs76_checked;
37
38 <bridgehead renderas="sect3">Package Information</bridgehead>
39 <itemizedlist spacing="compact">
40 <listitem>
41 <para>Download (HTTP): <ulink url="&qemu-download-http;"/></para>
42 </listitem>
43 <listitem>
44 <para>Download (FTP): <ulink url="&qemu-download-ftp;"/></para>
45 </listitem>
46 <listitem>
47 <para>Download MD5 sum: &qemu-md5sum;</para>
48 </listitem>
49 <listitem>
50 <para>Download size: &qemu-size;</para>
51 </listitem>
52 <listitem>
53 <para>Estimated disk space required: &qemu-buildsize;</para>
54 </listitem>
55 <listitem>
56 <para>Estimated build time: &qemu-time;</para>
57 </listitem>
58 </itemizedlist>
59
60 <bridgehead renderas="sect3">Qemu Dependencies</bridgehead>
61
62 <bridgehead renderas="sect4">Required</bridgehead>
63 <para role="required">
64 <xref linkend="glib2"/>,
65 <xref linkend="python2"/>, and
66 <xref linkend="x-window-system"/>
67 </para>
68
69 <bridgehead renderas="sect4">Recommended</bridgehead>
70 <para role="recommended">
71 <xref linkend="sdl"/>
72 </para>
73
74 <bridgehead renderas="sect4">Optional</bridgehead>
75 <para role="optional">
76 <xref linkend="alsa"/>,
77 <xref linkend="check"/>,
78 <xref linkend="curl"/>,
79 <xref linkend="mesalib"/>, and
80 <xref linkend="cyrus-sasl"/>
81 </para>
82
83 <note>
84 <para>
85 This optional dependencies list is not comprehensive. See the output of
86 <command>./configure --help</command> for a more complete list.
87 </para>
88 </note>
89
90 <para condition="html" role="usernotes">User Notes:
91 <ulink url="&blfs-wiki;/qemu"/></para>
92
93 </sect2>
94
95 <sect2 id='qemu-prereq'>
96 <title>KVM Prerequisites</title>
97
98 <para>Before building <application>qemu</application>, check to see if
99 your processor supports Virtualization Technology (VT):</para>
100
101 <screen><userinput>egrep '^flags.*(vmx|svm)' /proc/cpuinfo</userinput></screen>
102
103 <para>If you get any output, you have VT technology (vmx for Intel
104 processors and svm for AMD processors). You then need to go into your
105 system BIOS and ensure it is enabled. After enabing, reboot back to your
106 LFS instance.</para>
107
108 </sect2>
109
110 <sect2 role="kernel" id='qemu-kernel'>
111 <title>Kernel Configuration</title>
112
113 <para>Enable the following options in the kernel configuration and
114 recompile the kernel if necessary:</para>
115
116<screen><literal>[*] Virtualization: ---&gt; [CONFIG_VIRTUALIZATION]
117 &lt;*/M&gt; Kernel-based Virtual Machine (KVM) support [CONFIG_KVM]
118 &lt;*/M&gt; KVM for Intel processors support [CONFIG_KVM_INTEL]
119 &lt;*/M&gt; KVM for AMD processors support [CONFIG_KVM_AMD]</literal></screen>
120
121 <indexterm zone="qemu qemu-kernel">
122 <primary sortas="d-qemu">qemu</primary>
123 </indexterm>
124
125 <para>The Intel or AMD settings are not both required, but the one matching
126 your system processor is required.</para>
127
128 <para>For networking, check that <xref linkend='bridgeutils'/> is installed
129 and the following options in the kernel configuration are enabled:</para>
130
131<screen><literal>[*] Networking support ---&gt; [CONFIG_NET]
132 Networking options ---&gt;
133 &lt;*/M&gt; 802.1d Ethernet Bridging [CONFIG_BRIDGE]
134Device Drivers ---&gt;
135 [*] Network device support ---&gt; [CONFIG_NETDEVICES]
136 &lt;*/M&gt; Universal TUN/TAP device driver support [CONFIG_TUN]</literal></screen>
137
138 </sect2>
139
140 <sect2 role="installation">
141 <title>Installation of qemu</title>
142
143 <para>Install <application>qemu</application> by running the following
144 commands:</para>
145
146<screen><userinput>./configure --prefix=/usr \
147 --sysconfdir=/etc \
148 --docdir=/usr/share/doc/qemu-&qemu-version; \
149 --target-list=x86_64-softmmu &amp;&amp;
150make</userinput></screen>
151
152 <para>To run the built in tests, run <command>make V=1 check</command>.</para>
153
154 <para>Now, as the <systemitem class="username">root</systemitem> user:</para>
155
156<screen role="root"><userinput>make install &amp;&amp;
157[ -e /usr/lib/libcacard.so ] &amp;&amp; chmod -v 755 /usr/lib/libcacard.so</userinput></screen>
158
159 <para>
160 You will need a dedicated group that will contain users (other than root)
161 allowed to access the KVM device. Add the group by running the following
162 command as the <systemitem class="username">root</systemitem> user:
163 </para>
164
165<screen role="root"><userinput>groupadd -g 61 kvm</userinput></screen>
166
167 <para>
168 Add any users that might use the KVM device to that group:
169 </para>
170
171<screen role="root"><userinput>usermod -a -G kvm <replaceable>&lt;username&gt;</replaceable></userinput></screen>
172
173 <para>
174 You will also need to add a Udev rule so that the KVM device gets correct
175 permissions:
176 </para>
177
178<screen role="root"><userinput>cat > /lib/udev/rules.d/65-kvm.rules &lt;&lt; "EOF"
179<literal>KERNEL=="kvm", GROUP="kvm", MODE="0660"</literal>
180EOF</userinput></screen>
181
182 <note><!--<para>The main program <command>qemu-system-x86_64</command> doesn't
183 make a distinction between i386 and x86_64 so even on an i386 system you
184 should use <emphasis>qemu-system-x86_64</emphasis></para>
185 -->
186
187 <para>For convenience you may want to create a symbolic link to run
188 <command>qemu-system-x86_64</command>:</para>
189
190 <screen role="root"><userinput>ln -sv qemu-system-x86_64 /usr/bin/qemu</userinput></screen>
191 </note>
192
193 </sect2>
194
195 <sect2 role="commands">
196 <title>Command Explanations</title>
197
198 <para><parameter>--target-list=x86_64-softmmu</parameter>: This switch
199 limits the build target to the x86_64 architecture. For other
200 hardware emulation see the --target-list list in <command>configure</command>'s
201 help output. Omitting this option will build all architectures.</para>
202
203 <para>
204 <option>--audio-drv-list=alsa</option>: This switch sets the audio driver
205 to ALSA. For other drivers see the --audio-drv-list list in
206 <command>configure</command>'s help output. The default audio driver is
207 OSS.
208 </para>
209
210 </sect2>
211
212 <sect2 role="configuration">
213 <title>Configuring qemu</title>
214
215 <para>To generate an image, run:</para>
216
217 <screen><userinput>qemu-img create -f qcow2 vdisk.img 10G</userinput></screen>
218
219 <para>Adjust the virtual disk size and image filename as desired. The
220 actual size of the file will be less than specified, but will expand as it
221 is used.</para>
222
223 <note><para>The following instructions assume you have created the optional
224 symbolic link, <userinput>qemu</userinput>. Additionally, you must run
225 <userinput>qemu</userinput> from an X Window System based terminal.</para></note>
226
227 <para>To install an operating system, download an iso of your choice or use
228 a pre-installed cdrom device. For the purposes of this example, use
229 Fedora 16 that is downloaded as
230 <filename>Fedora-16-x86_64-Live-LXDE.iso</filename> in the current
231 directory. Run the following:</para>
232
233<screen><userinput>qemu -enable-kvm -hda vdisk.img \
234 -cdrom Fedora-16-x86_64-Live-LXDE.iso \
235 -boot d \
236 -m 384</userinput></screen>
237
238 <para>Follow the normal installation procedures for the chosen
239 distribution. The -boot option specifies the boot order of drives as a
240 string of drive letters. Valid drive letters are: a, b (floppy 1 and 2), c
241 (first hard disk), d (first CD-ROM). The -m option is the amount of memory
242 to use for the virtual machine. If you have sufficient memory (2G or
243 more), 1G is a reasonable value. For computers with 512MB of RAM it's safe
244 to use -m 192, or even -m 128 (the default). The -enable-kvm option allows
245 for hardware acceleeration. Without this switch, the emulation is
246 relatively slow.</para>
247
248 <para>To run the newly installed operating system, run:</para>
249
250<screen><userinput>qemu -enable-kvm vdisk.img -m 384</userinput></screen>
251
252 <para>To add networking to the instance add "-net nic -net user" to the
253 command above. qemu provides a DHCP server for the VM and, depending on
254 the client system, sets up networking though the host.</para>
255
256 <para>One problem with the above networking solution is that it does not
257 provide the ability to connect with the local network. To do that, there are
258 several additional steps that need to be done, all as the <systemitem
259 class="username">root</systemitem> user:</para>
260
261 <itemizedlist spacing="compact">
262 <listitem>
263 <para>Set up bridging with <xref linkend='bridgeutils'/>.</para>
264 </listitem>
265
266 <listitem>
267 <para>Allow the host system to forward IP packets.</para>
268
269<screen role="root"><userinput>sysctl -w net.ipv4.ip_forward=1</userinput></screen>
270
271 <para>To make this permanent, add the command to
272 <filename>/etc/syssysctl.conf:</filename></para>
273
274<screen role="root"><userinput>cat &gt;&gt; /etc/sysctl.conf &lt;&lt; EOF
275net.ipv4.ip_forward=1
276EOF</userinput></screen>
277
278 </listitem>
279
280 <listitem>
281 <para>Allow the network connection when running as a part of the
282 kvm group:</para>
283
284<screen role="root"><userinput>chgrp kvm /usr/libexec/qemu-bridge-helper &amp;&amp;
285chmod 4750 /usr/libexec/qemu-bridge-helper</userinput></screen>
286
287 </listitem>
288
289 <listitem>
290 <para>Set up a required configuration file:</para>
291
292<screen role="root"><userinput>echo 'allow br0' &gt; /etc/qemu/bridge.conf</userinput></screen>
293
294 </listitem>
295
296
297
298
299<!--
300 <listitem>
301 <para>Create scripts for qemu to attach the client network
302 device, usually visible as tap0, to the host bridge.</para>
303
304<screen role="root"><userinput>cat &gt; /etc/qemu-ifup &lt;&lt; EOF
305#!/bin/bash
306
307switch=br0
308
309if [ -n "\$1" ]; then
310 # Add new tap0 interface to bridge
311 /sbin/ip link set \$1 up
312 sleep 0.5s
313 /usr/sbin/brctl addif \$switch \$1
314else
315 echo "Error: no interface specified"
316 exit 1
317fi
318
319exit 0
320EOF
321
322chmod +x /etc/qemu-ifup</userinput></screen>
323
324<screen role="root"><userinput>cat &gt; /etc/qemu-ifdown &lt;&lt; EOF
325#!/bin/bash
326
327switch=br0
328
329if [ -n "\$1" ]; then
330 # Remove tap0 interface from bridge
331 /usr/sbin/brctl delif \$switch \$1
332else
333 echo "Error: no interface specified"
334 exit 1
335fi
336
337exit 0
338EOF
339
340chmod +x /etc/qemu-ifdown</userinput></screen>
341
342 </listitem>
343 </itemizedlist>
344
345 <note><para>The backslashes in the above script are for convenience
346 for cut/paste operations. The backslashes should <emphasis>not</emphasis>
347 appear in the final scripts.</para></note>
348
349 <itemizedlist spacing="compact"> -->
350 <listitem>
351 <!--<para>Start qemu with "-net nic -net tap" options. </para>-->
352 <para>Start qemu with "-net nic -net bridge" options. </para>
353 </listitem>
354
355 <listitem>
356 <para>If a connection, such as ssh, from the local network to the
357 client VM is desired, the client should be configured
358 with a static IP address.</para>
359 </listitem>
360
361 </itemizedlist>
362
363 </sect2>
364
365 <sect2 role="content">
366 <title>Contents</title>
367
368 <segmentedlist>
369 <segtitle>Installed Programs</segtitle>
370 <segtitle>Installed Library</segtitle>
371 <segtitle>Installed Directories</segtitle>
372
373 <seglistitem>
374 <seg>
375 qemu-ga,
376 qemu-img,
377 qemu-io,
378 qemu-nbd,
379 qemu-system-x86_64,
380 virtfs-proxy-helper, and
381 vscclient
382 </seg>
383 <seg>libcacard.so</seg>
384 <seg>
385 /etc/qemu,
386 /usr/include/cacard,
387 /usr/lib/qemu,
388 /usr/share/qemu, and
389 /usr/share/doc/qemu-&qemu-version;
390 </seg>
391 </seglistitem>
392 </segmentedlist>
393
394 <variablelist>
395 <bridgehead renderas="sect3">Short Description</bridgehead>
396 <?dbfo list-presentation="list"?>
397 <?dbhtml list-presentation="table"?>
398
399 <varlistentry id="qemu-ga">
400 <term><command>qemu-ga</command></term>
401 <listitem>
402 <para>implements support for QMP (QEMU Monitor Protocol) commands and
403 events that terminate and originate respectively within the guest
404 using an agent built as part of QEMU.</para>
405 <indexterm zone="qemu qemu-ga">
406 <primary sortas="b-qemu-ga">qemu-ga</primary>
407 </indexterm>
408 </listitem>
409 </varlistentry>
410
411 <varlistentry id="qemu-img">
412 <term><command>qemu-img</command></term>
413 <listitem>
414 <para>provides commands to manage QEMU disk images.</para>
415 <indexterm zone="qemu qemu-img">
416 <primary sortas="b-qemu-img">qemu-img</primary>
417 </indexterm>
418 </listitem>
419 </varlistentry>
420
421 <varlistentry id="qemu-io">
422 <term><command>qemu-io</command></term>
423 <listitem>
424 <para>is a diagnostic and manipulation program for (virtual) memory
425 media. It is still at an early stage of development.</para>
426 <indexterm zone="qemu qemu-io">
427 <primary sortas="b-qemu-io">qemu-io</primary>
428 </indexterm>
429 </listitem>
430 </varlistentry>
431
432 <varlistentry id="qemu-nbd">
433 <term><command>qemu-nbd</command></term>
434 <listitem>
435 <para>exports Qemu disk images using the QEMU Disk Network Block
436 Device (NBD) protocol.</para>
437 <indexterm zone="qemu qemu-nbd">
438 <primary sortas="b-qemu-nbd">qemu-nbd</primary>
439 </indexterm>
440 </listitem>
441 </varlistentry>
442
443 <varlistentry id="qemu-system">
444 <term><command>qemu-system-x86_64</command></term>
445 <listitem>
446 <para>is the QEMU PC System emulator.</para>
447 <indexterm zone="qemu qemu-system">
448 <primary sortas="b-qemu-system">qemu-system-x86_64</primary>
449 </indexterm>
450 </listitem>
451 </varlistentry>
452
453 <varlistentry id="libcacard">
454 <term><filename class="libraryfile">libcacard.so</filename></term>
455 <listitem>
456 <para>is the Virtual Smart Card Emulator library.</para>
457 <indexterm zone="qemu libcacard">
458 <primary sortas="c-libcacard">libcacard.so</primary>
459 </indexterm>
460 </listitem>
461 </varlistentry>
462
463 </variablelist>
464
465 </sect2>
466
467</sect1>
Note: See TracBrowser for help on using the repository browser.