1 | <?xml version='1.0'?> |
1 | <?xml version='1.0' encoding="UTF-8"?> |
2 | <?xml-stylesheet href="/xsl/guide.xsl" type="text/xsl"?> |
2 | <!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/uml.xml,v 1.26 2006/06/26 16:16:58 nightmorph Exp $ --> |
3 | |
3 | |
4 | <!DOCTYPE guide SYSTEM "/dtd/guide.dtd"> |
4 | <!DOCTYPE guide SYSTEM "/dtd/guide.dtd"> |
5 | |
5 | |
6 | <guide link="/doc/uml.html"> |
6 | <guide link="/doc/en/uml.xml"> |
7 | <title>Gentoo Linux Developer's guide to system testing with User-Mode Linux</title> |
7 | <title>Gentoo Linux Developer's guide to system testing with User-Mode Linux</title> |
|
|
8 | |
|
|
9 | <author title="Editor"> |
8 | <author title="Editor"><mail link="g2boojum@gentoo.org">Grant Goodyear</mail></author> |
10 | <mail link="g2boojum@gentoo.org">Grant Goodyear</mail> |
|
|
11 | </author> |
|
|
12 | <author title="Editor"><!-- zhen@gentoo.org --> |
|
|
13 | John Davis |
|
|
14 | </author> |
|
|
15 | <author title="Editor"> |
|
|
16 | <mail link="swift@gentoo.org">Sven Vermeulen</mail> |
|
|
17 | </author> |
|
|
18 | <author title="Editor"> |
|
|
19 | <mail link="bennyc@gentoo.org">Benny Chuang</mail> |
|
|
20 | </author> |
9 | |
21 | |
10 | <abstract> |
22 | <abstract> |
11 | This guide shows Gentoo Linux developers how to set up and use |
23 | This guide shows Gentoo Linux developers how to set up and use |
12 | user-mode linux for testing potentially system-breaking changes. |
24 | user-mode linux for testing potentially system-breaking changes. |
13 | </abstract> |
25 | </abstract> |
14 | |
26 | |
|
|
27 | <!-- The content of this document is licensed under the CC-BY-SA license --> |
|
|
28 | <!-- See http://creativecommons.org/licenses/by-sa/2.5 --> |
|
|
29 | <license/> |
|
|
30 | |
15 | <version>0.05</version> |
31 | <version>0.14</version> |
16 | <date>5 Mar 2002</date> |
32 | <date>2006-06-26</date> |
17 | |
33 | |
18 | <chapter> |
34 | <chapter> |
19 | <title>Obtaining User-Mode Linux</title> |
35 | <title>Obtaining User-Mode Linux</title> |
20 | <section> |
36 | <section> |
21 | <body> |
37 | <body> |
|
|
38 | |
|
|
39 | <impo> |
|
|
40 | Before you can use user-mode Linux, you <e>must</e> be using a non-NPTL |
|
|
41 | profile, and you must be using <<c>glibc</c>-2.4. Follow the instructions |
|
|
42 | for <uri link="/doc/en/gentoo-upgrading.xml#instructions">changing |
|
|
43 | profiles</uri>. You will need to run <c>emerge -e world</c> after switching to |
|
|
44 | a non-NPTL profile. |
|
|
45 | </impo> |
|
|
46 | |
|
|
47 | <p> |
22 | <p>As the user-mode linux website |
48 | As the user-mode Linux website |
23 | (<uri>http://user-mode-linux.sourceforge.net</uri>) |
49 | (<uri>http://user-mode-linux.sourceforge.net</uri>) states, user-modeL linux |
24 | states, user-mode linux |
|
|
25 | allows a user to "run Linux inside itself". Specifically, |
50 | 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 |
51 | 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 |
52 | 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 |
53 | in the internals of Linux, all without risking your main Linux setup." |
29 | to Gentoo core packages such as <e>sys-apps/baselayout</e> or <e>sys-libs/glibc</e> |
54 | Experimental changes to Gentoo core packages such as <e>sys-apps/baselayout</e> |
30 | have the potential to break the system and render it unbootable; with user-mode |
55 | or <e>sys-libs/glibc</e> have the potential to break the system and render it |
31 | linux we can test these changes without having to worry about breaking the live |
56 | unbootable; with user-mode Linux we can test these changes without having to |
32 | system. |
57 | worry about breaking the live system. |
33 | </p> |
|
|
34 | <p> |
58 | </p> |
35 | Installing user-mode linux is essentially identical to a normal kernel |
59 | |
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> |
60 | <p> |
|
|
61 | Most 2.6 kernels have UML support. Although you can use your current kernel |
|
|
62 | sources, it might be wiser to keep the UML kernel tree(s) separate. After all, |
|
|
63 | you'll be building a new kernel with a different configuration and you might |
|
|
64 | want to have heterogenous systems on your main Linux system (several different |
|
|
65 | UML kernels). |
|
|
66 | </p> |
|
|
67 | |
40 | <pre> |
68 | <p> |
41 | # <i>emerge sys-kernel/usermode-sources</i> |
69 | So download a nice kernel tree (like the vanilla one from <uri |
|
|
70 | link="http://www.kernel.org">kernel.org</uri>) and extract it to some local |
|
|
71 | development location. |
|
|
72 | </p> |
|
|
73 | |
|
|
74 | <p> |
|
|
75 | Next, configure this UML kernel as you would do for any other system, but append |
|
|
76 | <e>ARCH=um</e> so that the kernel build software knows that the kernel |
|
|
77 | is meant to run as a guest process on the main system. |
|
|
78 | </p> |
|
|
79 | |
|
|
80 | <pre caption="Building the UML kernel"> |
42 | # <i>cd /usr/src/uml/linux</i> |
81 | # <i>cd /srv/aegis/src/uml-linux</i> |
43 | # <i>make menuconfig <comment>ARCH=um</comment></i> |
82 | # <i>make menuconfig <comment>ARCH=um</comment></i> |
44 | # <i>make linux <comment>ARCH=um</comment></i> |
83 | # <i>make linux <comment>ARCH=um</comment></i> |
45 | # <i>cp linux /usr/local/bin/linux</i> |
84 | # <i>cp linux /usr/local/bin/linux</i> |
46 | </pre> |
85 | </pre> |
|
|
86 | |
|
|
87 | <warn> |
47 | <warn>The <e>ARCH=um</e> fragment is <e>extremely</e> important!</warn> |
88 | The <e>ARCH=um</e> fragment is <e>extremely</e> important! |
48 | <impo> |
89 | </warn> |
|
|
90 | |
|
|
91 | <p> |
|
|
92 | Make sure that <path>/usr/local/bin</path> is in your path. Edit |
|
|
93 | <path>/etc/env.d/00basic</path> to that the PATH variable contains |
|
|
94 | <path>/usr/local/bin</path> and rerun <c>env-update</c>: |
|
|
95 | </p> |
|
|
96 | |
|
|
97 | <pre caption="Editing 00basic"> |
|
|
98 | # <i>nano -w /etc/env.d/00basic</i> |
|
|
99 | # <i>env-update</i> |
|
|
100 | # <i>source /etc/profile</i> |
|
|
101 | </pre> |
|
|
102 | |
|
|
103 | <p> |
49 | For the user-mode linux kernel to properly boot a Gentoo system the |
104 | 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 |
105 | kernel needs to be configured to <e>not</e> automatically mount |
51 | <path>/dev</path> (devfs) by default. |
106 | <path>/dev</path> (devfs) by default. Also, you will almost certainly |
52 | Also, you will almost certainly |
|
|
53 | want to make sure that you have <e>tmpfs</e> (the "Virtual Memory |
107 | want to make sure that you have <e>tmpfs</e> (the "Virtual Memory |
54 | Filesystem") compiled in, since by default the Gentoo linux bootscripts |
108 | Filesystem") compiled in, since by default the Gentoo Linux bootscripts |
55 | store their information in a small tmpfs partition. |
109 | store their information in a small tmpfs partition. |
56 | (The binary kernels available |
110 | (The binary kernels available from the user-mode website do automatically |
57 | from the user-mode website do automatically mount <path>/dev</path>, |
111 | mount <path>/dev</path>, and they don't have tmpfs compiled in; don't bother |
58 | and they don't have tmpfs compiled in; don't bother with them.) |
112 | with them). |
59 | </impo> |
113 | </p> |
|
|
114 | |
|
|
115 | <p> |
60 | <p>I highly recommend reading the user-mode linux documentation, but the |
116 | 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 |
117 | 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 |
118 | 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 |
119 | the file <path>root_fs</path> that should be located in the current working |
64 | directory.</p> |
120 | directory. |
|
|
121 | </p> |
|
|
122 | |
|
|
123 | <p> |
65 | <p>It won't hurt to also install the user-mode linux tools.</p> |
124 | It won't hurt to also install the user-mode Linux tools. |
66 | <pre> |
125 | </p> |
|
|
126 | |
|
|
127 | <pre caption="Installing UML tools"> |
67 | # <i>emerge sys-apps/usermode-utilities</i> |
128 | # <i>emerge sys-apps/usermode-utilities</i> |
68 | </pre> |
129 | </pre> |
|
|
130 | |
|
|
131 | <p> |
69 | <p>These tools facilitate networking (among other things) |
132 | These tools facilitate networking (among other things) between the user-mode |
70 | between the user-mode linux virtual system |
133 | Linux virtual system and the host Linux system. |
71 | and the host Linux system.</p> |
134 | </p> |
|
|
135 | |
72 | </body> |
136 | </body> |
73 | </section> |
137 | </section> |
74 | </chapter> |
138 | </chapter> |
75 | |
139 | |
76 | <chapter> |
140 | <chapter> |
77 | <title>Creating <path>root_fs</path></title> |
141 | <title>Creating root_fs</title> |
78 | |
|
|
79 | <section> |
142 | <section> |
80 | <title>Making the Gentoo chroot</title> |
143 | <title>Making the Gentoo chroot</title> |
81 | <body> |
144 | <body> |
|
|
145 | |
82 | <p> |
146 | <p> |
83 | The <path>root_fs</path> file needed for user-mode linux is |
147 | The <path>root_fs</path> file needed for user-mode linux is |
84 | a single file that contains an entire Gentoo Linux filesystem. |
148 | a single file that contains an entire Gentoo Linux filesystem. |
85 | To generate this file you will need to have Loopback device |
149 | To generate this file you will need to have Loopback device |
86 | support enabled in the host (non-user-mode) kernel. |
150 | support enabled in the host (non-user-mode) kernel. |
87 | </p> |
151 | </p> |
|
|
152 | |
|
|
153 | <p> |
88 | <p>Generating the <path>root_fs</path> file itself will be |
154 | Generating the <path>root_fs</path> file itself will be |
89 | our last step. First we will generate a Gentoo filesystem in |
155 | our last step. First we will generate a Gentoo filesystem in |
90 | an ordinary chroot. We need the build tarball available, which |
156 | an ordinary chroot. We need the stage tarball available, which |
91 | could be downloaded separately, extracted from a build cd, or |
157 | could be downloaded separately, extracted from an Installation CD, or |
92 | extracted from a build .iso. |
158 | extracted from an Installation CD .iso. |
93 | </p> |
159 | </p> |
|
|
160 | |
94 | <pre caption="Mounting a build .iso"> |
161 | <pre caption="Mounting an Installation CD .iso"> |
95 | # <i>mkdir /mnt/loop</i> |
162 | # <i>mkdir /mnt/loop</i> |
96 | # <i>mount -o loop /path/to/build-<TAB>.iso /mnt/loop</i> |
163 | # <i>mount -o loop /path/to/install-<TAB>.iso /mnt/loop</i> |
97 | </pre> |
164 | </pre> |
|
|
165 | |
98 | <p> |
166 | <p> |
99 | Setting up the chroot is essentially identical to an ordinary Gentoo |
167 | Setting up the chroot is essentially identical to an ordinary Gentoo |
100 | Linux build. |
168 | Linux build. |
101 | </p> |
169 | </p> |
102 | <pre> |
170 | |
|
|
171 | <pre caption="Creating the Gentoo chroot mount"> |
103 | # <i>mkdir /mnt/gentoo</i> |
172 | # <i>mkdir /mnt/gentoo</i> |
104 | # <i>cd /mnt/gentoo</i> |
173 | # <i>cd /mnt/gentoo</i> |
105 | # <i>tar xvjpf /path/to/build-<TAB>.tar.bz2</i> |
174 | # <i>tar xvjpf /path/to/stage<TAB>.tar.bz2</i> |
106 | </pre> |
175 | </pre> |
|
|
176 | |
107 | <p> |
177 | <p> |
108 | Go ahead and unmount the .iso. You don't need it anymore. |
178 | Go ahead and unmount the .iso. You don't need it anymore. |
109 | </p> |
179 | </p> |
110 | <pre> |
180 | |
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> |
181 | <p> |
|
|
182 | Build the system in the usual fashion: chroot into <path>/mnt/gentoo</path> and |
|
|
183 | follow the Gentoo installation instructions. |
126 | <p> |
184 | </p> |
127 | Bootstrap and build the system in the usual fashion: |
185 | |
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 && 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> |
186 | <p> |
153 | Add any additional packages you desire. Feel free to give your virtual |
187 | 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> |
188 | 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 |
189 | you will want <path>/dev/ROOT</path> to be <path>/dev/ubda</path>, with |
156 | a fs type of either ext2, ext3, or reiserfs. Set <path>/dev/SWAP</path> |
190 | 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>. |
191 | to be <path>/dev/ubdb</path>, and comment out <path>/dev/BOOT</path>. |
|
|
192 | </p> |
|
|
193 | |
158 | </p> |
194 | <p> |
|
|
195 | At this point, remember to set your root password. |
|
|
196 | </p> |
|
|
197 | |
|
|
198 | <pre caption="Setting root password"> |
|
|
199 | # <i>passwd</i> |
|
|
200 | </pre> |
|
|
201 | |
|
|
202 | <p> |
|
|
203 | Now we need to make some changes to the boot scripts. Remove consolefont and |
|
|
204 | keymaps from the boot runlevel: |
|
|
205 | </p> |
|
|
206 | |
|
|
207 | <pre caption="Removing unneeded initscripts"> |
|
|
208 | # <i>rc-update del consolefont boot</i> |
|
|
209 | # <i>rc-update del keymaps boot</i> |
|
|
210 | </pre> |
|
|
211 | |
159 | <p> |
212 | <p> |
160 | Exit the chroot, unmount all of the bind mounts, |
213 | Exit the chroot, unmount all of the bind mounts, |
161 | tar up the new Gentoo distro, and clean up: |
214 | tar up the new Gentoo distro, and clean up. |
162 | </p> |
215 | </p> |
163 | <pre> |
216 | |
164 | # <i>exit</i> |
217 | <pre caption="Finalising the installation"> |
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> |
218 | # <i>cd /mnt/gentoo</i> |
169 | 261744 /mnt/gentoo |
|
|
170 | # <i>tar cvjpf ~/gentoo.tbz2 *</i> |
219 | # <i>tar cvjpf ~/gentoo.tbz2 *</i> |
171 | # <i>cd</i> |
220 | # <i>cd</i> |
172 | # <i>rm -rf /mnt/gentoo</i> |
221 | # <i>rm -rf /mnt/gentoo</i> |
173 | </pre> |
222 | </pre> |
174 | </body> |
|
|
175 | </section> |
|
|
176 | |
223 | |
|
|
224 | </body> |
177 | <section> |
225 | </section> |
|
|
226 | <section> |
178 | <title>Making <path>root_fs</path></title> |
227 | <title>Making root_fs</title> |
179 | <body> |
228 | <body> |
|
|
229 | |
180 | <p> |
230 | <p> |
181 | Our Gentoo chroot is nearly 300 MB in size, so |
231 | Our Gentoo chroot is nearly 300 MB in size, so |
182 | <path>root_fs</path> needs to be at least that size. |
232 | <path>root_fs</path> needs to be at least that size. |
183 | We'll choose 0.5 GB as a reasonable size. |
233 | We'll choose 0.5 GB as a reasonable size. |
184 | </p> |
234 | </p> |
185 | <pre> |
235 | |
|
|
236 | <pre caption="Creating UML files"> |
186 | # <i>dd if=/dev/zero of=root_fs seek=500 count=1 bs=1M</i> |
237 | # <i>dd if=/dev/zero of=root_fs seek=500 count=1 bs=1M</i> |
187 | # <i>mke2fs -F root_fs</i> |
238 | # <i>mke2fs -F root_fs</i> |
188 | # <i>mount -o loop root_fs /mnt/loop</i> |
239 | # <i>mount -o loop root_fs /mnt/loop</i> |
189 | # <i>tar xvjpf gentoo.tbz2 -C /mnt/loop</i> |
240 | # <i>tar xvjpf gentoo.tbz2 -C /mnt/loop</i> |
190 | # <i>umount /mnt/loop</i> |
241 | # <i>umount /mnt/loop</i> |
191 | </pre> |
242 | </pre> |
|
|
243 | |
192 | <p> |
244 | <p> |
193 | It would also be nice to have a 0.5 GB swap partition. |
245 | It would also be nice to have a 0.5 GB swap partition. |
194 | </p> |
246 | </p> |
195 | <pre> |
247 | |
|
|
248 | <pre caption="Create swap partition"> |
196 | # <i>dd if=/dev/zero of=swap_fs seek=500 count=1 bs=1M</i> |
249 | # <i>dd if=/dev/zero of=swap_fs seek=500 count=1 bs=1M</i> |
197 | # <i>mkswap -f swap_fs</i> |
250 | # <i>mkswap -f swap_fs</i> |
198 | </pre> |
251 | </pre> |
|
|
252 | |
199 | <p> |
253 | <p> |
200 | Now see if it works! |
254 | Now see if it works! |
201 | </p> |
255 | </p> |
202 | <pre> |
256 | |
|
|
257 | <pre caption="Start UML kernel thread"> |
203 | # <i>linux ubd0=root_fs ubd1=swap_fs</i> |
258 | # <i>linux ubd0=root_fs ubd1=swap_fs</i> |
204 | </pre> |
259 | </pre> |
205 | <note> |
260 | |
|
|
261 | <p> |
206 | User-mode linux uses xterms for the virtual consoles that |
262 | User-mode Linux uses xterms for the virtual consoles that |
207 | are run at boot time, so you need to make sure that the |
263 | are run at boot time, so you need to make sure that the |
208 | terminal from which you run user-mode linux has $DISPLAY |
264 | terminal from which you run user-mode Linux has $DISPLAY |
209 | properly set (along with proper xhost/xauth permissions). |
265 | properly set (along with proper xhost/xauth permissions). |
210 | </note> |
|
|
211 | <p> |
266 | </p> |
|
|
267 | |
|
|
268 | <p> |
212 | With any luck you should be able to log into your user-mode linux |
269 | 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 |
270 | Gentoo system. The only thing keeping this user-mode Linux version |
214 | of Gentoo from being fully functional is networking from the virtual |
271 | of Gentoo from being fully functional is networking from the virtual |
215 | machine to the host. Such networking is supposed to be trivial, |
272 | machine to the host. |
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> |
273 | </p> |
|
|
274 | |
219 | </body> |
275 | </body> |
220 | </section> |
276 | </section> |
221 | </chapter> |
277 | </chapter> |
222 | |
278 | |
223 | <chapter> |
279 | <chapter> |
224 | <title>Networking</title> |
280 | <title>Networking</title> |
225 | |
|
|
226 | <section> |
281 | <section> |
|
|
282 | <title>Using an Existing Network</title> |
227 | <body> |
283 | <body> |
228 | <p> |
284 | |
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> |
285 | <p> |
|
|
286 | Make sure that the host kernel has the following settings compiled as modules: |
|
|
287 | </p> |
|
|
288 | |
|
|
289 | <pre caption="Host kernel configuration"> |
|
|
290 | Networking --> |
|
|
291 | IP: Netfilter Configuration --> |
|
|
292 | IP tables support --> |
|
|
293 | Full NAT --> |
|
|
294 | <M> MASQUERADE target support |
|
|
295 | |
|
|
296 | Network Device Support --> |
|
|
297 | <M> TUN/TAP Support |
242 | <pre> |
298 | </pre> |
|
|
299 | |
|
|
300 | <p> |
|
|
301 | Run the following commands on the <e>host</e> machine: |
|
|
302 | </p> |
|
|
303 | |
|
|
304 | <pre caption="Setup networking"> |
243 | # <i>modprobe ethertap</i> |
305 | # <i>modprobe tun</i> |
|
|
306 | <comment>(If you receive a FATAL error here, try deleting /dev/net/tun and retry)</comment> |
244 | # <i>modprobe iptable_nat</i> |
307 | # <i>modprobe iptable_nat</i> |
245 | # <i>iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE</i> |
308 | # <i>iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE</i> |
246 | # <i>echo 1 > /proc/sys/net/ipv4/ip_forward</i> |
309 | # <i>echo 1 > /proc/sys/net/ipv4/ip_forward</i> |
247 | </pre> |
310 | </pre> |
|
|
311 | |
248 | <p> |
312 | <p> |
249 | The iptables line sets up IP Masquerading between the private |
313 | The iptables line sets up IP Masquerading between the private |
250 | network that our user-mode system will be on and the internet |
314 | 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 |
315 | (reachable via <c>eth0</c> in our case). The echo line then |
252 | turns on packet forwarding between the private network and the |
316 | turns on packet forwarding between the private network and the |
253 | interface that the default gateway is on (eth0 for us). |
317 | interface that the default gateway is on (eth0 for us). |
254 | </p> |
318 | </p> |
|
|
319 | |
255 | <p> |
320 | <p> |
256 | Now we bring up the user-mode system and see if networking |
321 | Now we bring up the user-mode system and see if networking |
257 | is functional. |
322 | is functional. |
258 | </p> |
323 | </p> |
259 | <pre> |
324 | |
|
|
325 | <pre caption="Get UML up and running"> |
260 | # <i>linux ubd0=root_fs ubd1=swap_fs eth0=ethertap,tap0,,192.168.0.254</i> |
326 | # <i>linux ubd0=root_fs ubd1=swap_fs eth0=tuntap,,,192.168.0.254</i> |
261 | <comment>(login to user-mode system)</comment> |
327 | <comment>(login to user-mode system)</comment> |
262 | # <i>ifconfig eth0 192.168.0.1 up</i> |
328 | # <i>ifconfig eth0 192.168.0.1 up</i> |
263 | # <i>ping -c 2 192.168.0.254</i> |
329 | # <i>ping -c 2 192.168.0.254</i> |
264 | PING 192.168.0.254 (192.168.0.254): 56 octets data |
330 | 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 |
331 | 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 |
332 | 64 octets from 192.168.0.254: icmp_seq=1 ttl=255 time=0.6 ms |
267 | |
333 | |
268 | --- 192.168.0.254 ping statistics --- |
334 | --- 192.168.0.254 ping statistics --- |
269 | 2 packets transmitted, 2 packets received, 0% packet loss |
335 | 2 packets transmitted, 2 packets received, 0% packet loss |
270 | round-trip min/avg/max = 0.6/0.7/0.8 ms |
336 | round-trip min/avg/max = 0.6/0.7/0.8 ms |
271 | <i>route add default gw 192.168.0.254</i> |
337 | # <i>route add default gw 192.168.0.254</i> |
272 | <i>netstat -rn</i> |
338 | # <i>netstat -rn</i> |
273 | Kernel IP routing table |
339 | Kernel IP routing table |
274 | Destination Gateway Genmask Flags MSS Window irtt Iface |
340 | 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 |
341 | 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 |
342 | 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> |
343 | # <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> |
344 | # <i>ping -c 2 www.gentoo.org</i> |
279 | PING www.gentoo.org (207.170.82.202): 56 octets data |
345 | 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 |
346 | 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 |
347 | 64 octets from 207.170.82.202: icmp_seq=1 ttl=240 time=92.0 ms |
282 | |
348 | |
283 | --- www.gentoo.org ping statistics --- |
349 | --- www.gentoo.org ping statistics --- |
284 | 2 packets transmitted, 2 packets received, 0% packet loss |
350 | 2 packets transmitted, 2 packets received, 0% packet loss |
285 | round-trip min/avg/max = 92.0/105.8/119.6 ms |
351 | round-trip min/avg/max = 92.0/105.8/119.6 ms |
286 | </pre> |
352 | </pre> |
|
|
353 | |
287 | <p> |
354 | <p> |
288 | On the user-mode system we assign the user-mode eth0 interface |
355 | 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 |
356 | 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 |
357 | 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 |
358 | that our networking is, indeed, up. The route line adds a default |
… | |
… | |
293 | <path>/etc/resolv.conf</path> (if necessary), and we ping www.gentoo.org |
360 | <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) |
361 | 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 |
362 | is working from our user-mode system. Now the user-mode system can |
296 | <c>emerge</c> at will! |
363 | <c>emerge</c> at will! |
297 | </p> |
364 | </p> |
|
|
365 | |
|
|
366 | </body> |
|
|
367 | </section> |
|
|
368 | <section> |
|
|
369 | <title>Using a Virtual Network</title> |
|
|
370 | <body> |
|
|
371 | |
|
|
372 | <p> |
|
|
373 | Before you get all too excited, this is not a virtual private network. It is a |
|
|
374 | network that is only accessible by the UML instances. The |
|
|
375 | <c>usermode-utilities</c> package provides a tool called <c>uml_switch</c> which |
|
|
376 | defines the end points of the switch. |
|
|
377 | </p> |
|
|
378 | |
|
|
379 | <pre caption="Activating end points of a UML switch"> |
|
|
380 | <comment>(If the switch information should stay in the foreground:)</comment> |
|
|
381 | $ <i>uml_switch -unix ~/tmp/switch.sock</i> |
|
|
382 | |
|
|
383 | <comment>(If it should be backgrounded:)</comment> |
|
|
384 | $ <i>uml_switch -unix ~/tmp/switch.sock &> ~/tmp/switch.log &</i> |
|
|
385 | </pre> |
|
|
386 | |
|
|
387 | <p> |
|
|
388 | To start the UML instances on the switch, run the next command. Your |
|
|
389 | (virtual) network interface will be connected to the <c>uml_switch</c> process |
|
|
390 | and will be using the given MAC address. |
|
|
391 | </p> |
|
|
392 | |
|
|
393 | <pre caption="Running first UML instance"> |
|
|
394 | $ <i>linux ubd0=first_rootfs ubd1=first_swapfs eth0=daemon,10:00:01:02:00:00,,~/tmp/switch.sock</i> |
|
|
395 | </pre> |
|
|
396 | |
|
|
397 | <p> |
|
|
398 | You can still connect the system to the existing network, or have a second |
|
|
399 | process attached to both the virtual one and the existing one: |
|
|
400 | </p> |
|
|
401 | |
|
|
402 | <pre caption="Running second UML instance"> |
|
|
403 | $ <i>linux ubd0=second_rootfs ubd1=second_swapfs eth0=daemon,10:00:01:02:00:01,,~/tmp/switch.sock \ |
|
|
404 | eth1=tuntap,,,192.168.1.43</i> |
|
|
405 | </pre> |
|
|
406 | |
|
|
407 | <p> |
|
|
408 | More information about the tuntap setting can be found in the previous section. |
|
|
409 | </p> |
|
|
410 | |
298 | </body> |
411 | </body> |
299 | </section> |
412 | </section> |
300 | </chapter> |
413 | </chapter> |
301 | |
|
|
302 | <chapter> |
414 | <chapter> |
303 | <title>Testing the .iso</title> |
415 | <title>Testing the .iso</title> |
304 | |
|
|
305 | <section> |
416 | <section> |
306 | <body> |
417 | <body> |
|
|
418 | |
307 | <p> |
419 | <p> |
308 | Perhaps the true ideal of Gentoo Linux testing would be |
420 | Perhaps the true ideal of Gentoo Linux testing would be |
309 | to boot the .iso with user-mode linux and do the complete |
421 | to boot the .iso with user-mode Linux and do the complete |
310 | Gentoo install from within the user-mode linux virtual system. |
422 | Gentoo install from within the user-mode Linux virtual system. |
311 | </p> |
423 | </p> |
|
|
424 | |
312 | <p> |
425 | <p> |
313 | Booting the .iso, or actually the initrd from the .iso, is pretty |
426 | Booting the .iso, or actually the initrd from the .iso, is pretty |
314 | straightforward. |
427 | straightforward. |
315 | </p> |
428 | </p> |
316 | <pre> |
429 | |
|
|
430 | <pre caption="Booting the ISO"> |
317 | # <i>mount -o loop /path/to/build-<TAB>.iso /mnt/loop</i> |
431 | # <i>mount -o loop /path/to/install-<TAB>.iso /mnt/loop</i> |
318 | # <i>cp /mnt/loop/isolinux/rescue.gz .</i> |
432 | # <i>cp /mnt/loop/isolinux/gentoo.igz .</i> |
319 | # <i>linux load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=22000 \</i> |
433 | # <i>linux load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=22000 \</i> |
320 | > <i>initrd=rescue.gz root=/dev/ram0 ubd0=root_fs ubd1=swap_fs \</i> |
434 | > <i>initrd=rescue.gz root=/dev/ram0 ubd0=root_fs ubd1=swap_fs \</i> |
321 | > <i>ubd2=/dev/cdroms/cdrom0 eth0=ethertap,tap0,,192.168.0.254</i> |
435 | > <i>ubd2=/dev/cdroms/cdrom0 eth0=tuntap,,,192.168.0.254</i> |
322 | </pre> |
436 | </pre> |
|
|
437 | |
|
|
438 | <p> |
323 | <p>Now you can follow the Gentoo install doc essentially verbatim, |
439 | Now you can follow the Gentoo install doc essentially verbatim, |
324 | although you'll need to know that the root filesystem will be |
440 | although you'll need to know that the root filesystem will be |
325 | <path>/dev/ubd/0</path>, the swap "partition" |
441 | <path>/dev/ubd/0</path>, the swap "partition" |
326 | will be <path>/dev/ubd/1</path>, and the CD rom |
442 | will be <path>/dev/ubd/1</path>, and the CD rom |
327 | will be <path>/dev/ubd/2</path>.</p> |
443 | will be <path>/dev/ubd/2</path>. |
|
|
444 | </p> |
|
|
445 | |
328 | </body> |
446 | </body> |
329 | </section> |
447 | </section> |
330 | </chapter> |
448 | </chapter> |
331 | |
449 | |
|
|
450 | <chapter> |
|
|
451 | <title>Resources</title> |
|
|
452 | <section> |
|
|
453 | <body> |
|
|
454 | |
|
|
455 | <ul> |
|
|
456 | <li> |
|
|
457 | <uri link="http://edeca.net/articles/bridging/index.html">Bridging with |
|
|
458 | UML</uri> |
|
|
459 | </li> |
|
|
460 | <li> |
|
|
461 | <uri link="http://user-mode-linux.sourceforge.net/">UML Homepage</uri> |
|
|
462 | </li> |
|
|
463 | <li> |
|
|
464 | <uri link="http://www.theshore.net/~caker/uml/">Caker's UML Notes</uri> |
|
|
465 | </li> |
|
|
466 | <li> |
|
|
467 | <uri link="http://sourceforge.net/mailarchive/forum.php?forum_id=3647">UML |
|
|
468 | Mailinglist archives</uri> |
|
|
469 | </li> |
|
|
470 | </ul> |
|
|
471 | |
|
|
472 | </body> |
|
|
473 | </section> |
|
|
474 | </chapter> |
332 | |
475 | |
333 | </guide> |
476 | </guide> |