/[gentoo]/xml/htdocs/doc/en/uml.xml
Gentoo

Contents of /xml/htdocs/doc/en/uml.xml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (hide annotations) (download) (as text)
Tue Feb 11 15:16:31 2003 UTC (15 years, 7 months ago) by zhen
Branch: MAIN
Changes since 1.3: +6 -6 lines
File MIME type: application/xml
re bug 15643

1 zhen 1.3 <?xml version='1.0' encoding="UTF-8"?>
2 drobbins 1.1 <?xml-stylesheet href="/xsl/guide.xsl" type="text/xsl"?>
3    
4     <!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
5    
6 zhen 1.2 <guide link="/doc/en/uml.xml">
7 drobbins 1.1 <title>Gentoo Linux Developer's guide to system testing with User-Mode Linux</title>
8     <author title="Editor"><mail link="g2boojum@gentoo.org">Grant Goodyear</mail></author>
9    
10     <abstract>
11     This guide shows Gentoo Linux developers how to set up and use
12     user-mode linux for testing potentially system-breaking changes.
13     </abstract>
14    
15 zhen 1.4 <version>0.06</version>
16     <date>11 February 2003</date>
17 drobbins 1.1
18     <chapter>
19     <title>Obtaining User-Mode Linux</title>
20     <section>
21     <body>
22     <p>As the user-mode linux website
23     (<uri>http://user-mode-linux.sourceforge.net</uri>)
24     states, user-mode linux
25     allows a user to "run Linux inside itself". Specifically,
26     user-mode linux provides a virtual machine on which a user can "[r]un buggy
27     software, experiment with new Linux kernels or distributions, and poke around
28     in the internals of Linux, all without risking your main Linux setup." Changes
29     to Gentoo core packages such as <e>sys-apps/baselayout</e> or <e>sys-libs/glibc</e>
30     have the potential to break the system and render it unbootable; with user-mode
31     linux we can test these changes without having to worry about breaking the live
32     system.
33     </p>
34     <p>
35     Installing user-mode linux is essentially identical to a normal kernel
36     install. First install the kernel sources (appropriately patched for
37     user-mode linux), and then configure the user-mode linux kernel in the
38     usual fashion:
39     </p>
40     <pre>
41     # <i>emerge sys-kernel/usermode-sources</i>
42     # <i>cd /usr/src/uml/linux</i>
43     # <i>make menuconfig <comment>ARCH=um</comment></i>
44     # <i>make linux <comment>ARCH=um</comment></i>
45     # <i>cp linux /usr/local/bin/linux</i>
46     </pre>
47     <warn>The <e>ARCH=um</e> fragment is <e>extremely</e> important!</warn>
48     <impo>
49     For the user-mode linux kernel to properly boot a Gentoo system the
50     kernel needs to be configured to <e>not</e> automatically mount
51     <path>/dev</path> (devfs) by default.
52     Also, you will almost certainly
53     want to make sure that you have <e>tmpfs</e> (the "Virtual Memory
54     Filesystem") compiled in, since by default the Gentoo linux bootscripts
55     store their information in a small tmpfs partition.
56     (The binary kernels available
57     from the user-mode website do automatically mount <path>/dev</path>,
58     and they don't have tmpfs compiled in; don't bother with them.)
59     </impo>
60     <p>I highly recommend reading the user-mode linux documentation, but the
61     basic idea is that running the <path>/usr/local/bin/linux</path> program
62     boots the user-mode kernel and tries to bring up the system stored in
63     the file <path>root_fs</path> that should be located in the current working
64     directory.</p>
65     <p>It won't hurt to also install the user-mode linux tools.</p>
66     <pre>
67     # <i>emerge sys-apps/usermode-utilities</i>
68     </pre>
69     <p>These tools facilitate networking (among other things)
70     between the user-mode linux virtual system
71     and the host Linux system.</p>
72     </body>
73     </section>
74     </chapter>
75    
76     <chapter>
77     <title>Creating <path>root_fs</path></title>
78    
79     <section>
80     <title>Making the Gentoo chroot</title>
81     <body>
82     <p>
83     The <path>root_fs</path> file needed for user-mode linux is
84     a single file that contains an entire Gentoo Linux filesystem.
85     To generate this file you will need to have Loopback device
86     support enabled in the host (non-user-mode) kernel.
87     </p>
88     <p>Generating the <path>root_fs</path> file itself will be
89     our last step. First we will generate a Gentoo filesystem in
90 zhen 1.4 an ordinary chroot. We need the stage tarball available, which
91     could be downloaded separately, extracted from a liveCD, or
92     extracted from a liveCD .iso.
93 drobbins 1.1 </p>
94 zhen 1.4 <pre caption="Mounting a liveCD .iso">
95 drobbins 1.1 # <i>mkdir /mnt/loop</i>
96     # <i>mount -o loop /path/to/build-&lt;TAB&gt;.iso /mnt/loop</i>
97     </pre>
98     <p>
99     Setting up the chroot is essentially identical to an ordinary Gentoo
100     Linux build.
101     </p>
102     <pre>
103     # <i>mkdir /mnt/gentoo</i>
104     # <i>cd /mnt/gentoo</i>
105     # <i>tar xvjpf /path/to/build-&lt;TAB&gt;.tar.bz2</i>
106     </pre>
107     <p>
108     Go ahead and unmount the .iso. You don't need it anymore.
109     </p>
110     <pre>
111     # <i>cp /etc/resolv.conf /mnt/gentoo/etc/</i>
112     # <i>mount -o bind /proc /mnt/gentoo/proc</i>
113     # <i>mkdir -p /mnt/gentoo/usr/portage/distfiles</i>
114     # <i>mkdir -p /mnt/gentoo/usr/portage/packages</i>
115     # <i>mount -o bind /usr/portage/distfiles /mnt/gentoo/usr/portage/distfiles</i>
116     # <i>mount -o bind /usr/portage/packages /mnt/gentoo/usr/portage/packages</i>
117     # <i>chroot /mnt/gentoo /bin/bash</i>
118     # <i>env-update</i>
119     # <i>source /etc/profile</i>
120     </pre>
121     <p>
122     By bind-mounting <path>/usr/portage/distfiles</path> and
123     <path>/usr/portage/packages</path> we avoid having to download
124     or build packages that are already present on the Gentoo host.
125     </p>
126     <p>
127     Bootstrap and build the system in the usual fashion:
128     </p>
129     <pre>
130     # <i>emerge rsync</i>
131     # <i>cd /usr/portage</i>
132     # <i>nano -w /etc/make.conf</i>
133     # <i>nano -w /etc/make.profile/packages</i>
134     # <i>nano -w /usr/portage/profiles/package.mask</i>
135     # <i>scripts/bootstrap.sh &amp;&amp; emerge --usepkg system</i>
136     </pre>
137     <warn>
138     The <path>/etc/make.profile/packages</path> file needs to be
139     edited to remove grub from the default system (just remove the "*"
140     from the beginning of the "*sys-apps/grub" line). The grub ebuild
141     tries to mount the /boot partition, which will fail in our chroot.
142     </warn>
143     <note>
144     Make sure you examine <path>/etc/make.profile/packages</path>
145     and <path>/usr/portage/profiles/package.mask</path> to be sure that
146     any to-be-tested packages that you want to install aren't masked out.
147     As currently written, <path>scripts/bootstrap.sh</path> will compile
148     the bootstrap packages from source. To use already-existing packages,
149     add <c>alias emerge="emerge --usepkg"</c> somewhere near the top of
150     the bootstrap script.
151     </note>
152     <p>
153     Add any additional packages you desire. Feel free to give your virtual
154     Gentoo system a hostname, if you so desire. In <path>/etc/fstab</path>
155     you will want <path>/dev/ROOT</path> to be <path>/dev/ubd/0</path>, with
156     a fs type of either ext2, ext3, or reiserfs. Set <path>/dev/SWAP</path>
157     to be <path>/dev/ubd/1</path>, and comment out <path>/dev/BOOT</path>.
158     </p>
159     <p>
160     Exit the chroot, unmount all of the bind mounts,
161     tar up the new Gentoo distro, and clean up:
162     </p>
163     <pre>
164     # <i>exit</i>
165     # <i>umount /mnt/gentoo/usr/portage/distfiles</i>
166     # <i>umount /mnt/gentoo/usr/portage/packages</i>
167     # <i>umount /mnt/gentoo/proc</i>
168     # <i>du -ks /mnt/gentoo</i>
169     261744 /mnt/gentoo
170     # <i>tar cvjpf ~/gentoo.tbz2 *</i>
171     # <i>cd</i>
172     # <i>rm -rf /mnt/gentoo</i>
173     </pre>
174     </body>
175     </section>
176    
177     <section>
178     <title>Making <path>root_fs</path></title>
179     <body>
180     <p>
181     Our Gentoo chroot is nearly 300 MB in size, so
182     <path>root_fs</path> needs to be at least that size.
183     We'll choose 0.5 GB as a reasonable size.
184     </p>
185     <pre>
186     # <i>dd if=/dev/zero of=root_fs seek=500 count=1 bs=1M</i>
187     # <i>mke2fs -F root_fs</i>
188     # <i>mount -o loop root_fs /mnt/loop</i>
189     # <i>tar xvjpf gentoo.tbz2 -C /mnt/loop</i>
190     # <i>umount /mnt/loop</i>
191     </pre>
192     <p>
193     It would also be nice to have a 0.5 GB swap partition.
194     </p>
195     <pre>
196     # <i>dd if=/dev/zero of=swap_fs seek=500 count=1 bs=1M</i>
197     # <i>mkswap -f swap_fs</i>
198     </pre>
199     <p>
200     Now see if it works!
201     </p>
202     <pre>
203     # <i>linux ubd0=root_fs ubd1=swap_fs</i>
204     </pre>
205     <note>
206     User-mode linux uses xterms for the virtual consoles that
207     are run at boot time, so you need to make sure that the
208     terminal from which you run user-mode linux has $DISPLAY
209     properly set (along with proper xhost/xauth permissions).
210     </note>
211     <p>
212     With any luck you should be able to log into your user-mode linux
213     Gentoo system. The only thing keeping this user-mode linux version
214     of Gentoo from being fully functional is networking from the virtual
215     machine to the host. Such networking is supposed to be trivial,
216     but I have yet to get it to work for me. Should you find a workable
217     solution, please let me know!
218     </p>
219     </body>
220     </section>
221     </chapter>
222    
223     <chapter>
224     <title>Networking</title>
225    
226     <section>
227     <body>
228     <p>
229     Thanks to Martin Schlemmer (Azarah), I now know how
230     to get networking to function from within a user-mode
231     system. The idea is that we set up a private network
232     consisting of the user-mode system and the host system,
233     and then the user-mode system routes all of its packets
234     to the host, which then forwards packets to the net.
235     Make sure that the host kernel has
236     Networking --> IP: Netfilter Configuration --> IP tables support
237     --> Full NAT --> MASQUERADE target support and
238     Network Device Support --> Ethertap network tap
239     compiled as modules; then do the following on the
240     <e>host</e> machine:
241     </p>
242     <pre>
243     # <i>modprobe ethertap</i>
244     # <i>modprobe iptable_nat</i>
245     # <i>iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE</i>
246     # <i>echo 1 > /proc/sys/net/ipv4/ip_forward</i>
247     </pre>
248     <p>
249     The iptables line sets up IP Masquerading between the private
250     network that our user-mode system will be on and the internet
251     (reachable via <c>eth0</c> in our case). The echo line then
252     turns on packet forwarding between the private network and the
253     interface that the default gateway is on (eth0 for us).
254     </p>
255     <p>
256     Now we bring up the user-mode system and see if networking
257     is functional.
258     </p>
259     <pre>
260     # <i>linux ubd0=root_fs ubd1=swap_fs eth0=ethertap,tap0,,192.168.0.254</i>
261     <comment>(login to user-mode system)</comment>
262     # <i>ifconfig eth0 192.168.0.1 up</i>
263     # <i>ping -c 2 192.168.0.254</i>
264     PING 192.168.0.254 (192.168.0.254): 56 octets data
265     64 octets from 192.168.0.254: icmp_seq=0 ttl=255 time=0.8 ms
266     64 octets from 192.168.0.254: icmp_seq=1 ttl=255 time=0.6 ms
267    
268     --- 192.168.0.254 ping statistics ---
269     2 packets transmitted, 2 packets received, 0% packet loss
270     round-trip min/avg/max = 0.6/0.7/0.8 ms
271     <i>route add default gw 192.168.0.254</i>
272     <i>netstat -rn</i>
273     Kernel IP routing table
274     Destination Gateway Genmask Flags MSS Window irtt Iface
275     192.168.0.0 0.0.0.0 255.255.255.0 U 40 0 0 eth0
276     0.0.0.0 192.168.0.254 0.0.0.0 UG 40 0 0 eth0
277     <i>scp user@192.168.0.254:/etc/resolv.conf /etc/resolv.conf</i> <comment>(if needed)</comment>
278     <i>ping -c 2 www.gentoo.org</i>
279     PING www.gentoo.org (207.170.82.202): 56 octets data
280     64 octets from 207.170.82.202: icmp_seq=0 ttl=240 time=119.6 ms
281     64 octets from 207.170.82.202: icmp_seq=1 ttl=240 time=92.0 ms
282    
283     --- www.gentoo.org ping statistics ---
284     2 packets transmitted, 2 packets received, 0% packet loss
285     round-trip min/avg/max = 92.0/105.8/119.6 ms
286     </pre>
287     <p>
288     On the user-mode system we assign the user-mode eth0 interface
289     the private IP address 192.168.0.1 and bring up the interface. The
290     host has private IP address 192.168.0.254, and we ping it to make sure
291     that our networking is, indeed, up. The route line adds a default
292     gateway, namely our host, we use scp to retrieve a working
293     <path>/etc/resolv.conf</path> (if necessary), and we ping www.gentoo.org
294     to make sure that name resolution (and general access to the internet)
295     is working from our user-mode system. Now the user-mode system can
296     <c>emerge</c> at will!
297     </p>
298     </body>
299     </section>
300     </chapter>
301    
302     <chapter>
303     <title>Testing the .iso</title>
304    
305     <section>
306     <body>
307     <p>
308     Perhaps the true ideal of Gentoo Linux testing would be
309     to boot the .iso with user-mode linux and do the complete
310     Gentoo install from within the user-mode linux virtual system.
311     </p>
312     <p>
313     Booting the .iso, or actually the initrd from the .iso, is pretty
314     straightforward.
315     </p>
316     <pre>
317     # <i>mount -o loop /path/to/build-&lt;TAB&gt;.iso /mnt/loop</i>
318     # <i>cp /mnt/loop/isolinux/rescue.gz .</i>
319     # <i>linux load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=22000 \</i>
320     &gt; <i>initrd=rescue.gz root=/dev/ram0 ubd0=root_fs ubd1=swap_fs \</i>
321     &gt; <i>ubd2=/dev/cdroms/cdrom0 eth0=ethertap,tap0,,192.168.0.254</i>
322     </pre>
323     <p>Now you can follow the Gentoo install doc essentially verbatim,
324     although you'll need to know that the root filesystem will be
325     <path>/dev/ubd/0</path>, the swap "partition"
326     will be <path>/dev/ubd/1</path>, and the CD rom
327     will be <path>/dev/ubd/2</path>.</p>
328     </body>
329     </section>
330     </chapter>
331    
332    
333     </guide>

  ViewVC Help
Powered by ViewVC 1.1.20