/[gentoo]/xml/htdocs/doc/en/handbook/hb-install-config.xml
Gentoo

Contents of /xml/htdocs/doc/en/handbook/hb-install-config.xml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.85 - (hide annotations) (download) (as text)
Sat Oct 21 01:13:51 2006 UTC (7 years, 10 months ago) by nightmorph
Branch: MAIN
Changes since 1.84: +8 -3 lines
File MIME type: application/xml
additional note for users to thoroughly read net.example when trying advanced configuration, thanks to Weeve for reporting via IRC

1 swift 1.18 <?xml version='1.0' encoding='UTF-8'?>
2     <!DOCTYPE sections SYSTEM "/dtd/book.dtd">
3    
4 swift 1.4 <!-- The content of this document is licensed under the CC-BY-SA license -->
5 fox2mike 1.68 <!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
6 swift 1.4
7 nightmorph 1.85 <!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/handbook/hb-install-config.xml,v 1.84 2006/09/12 20:07:02 nightmorph Exp $ -->
8 swift 1.8
9 swift 1.2 <sections>
10 swift 1.50
11 nightmorph 1.85 <version>7.4</version>
12     <date>2006-10-20</date>
13 swift 1.50
14 swift 1.1 <section>
15     <title>Filesystem Information</title>
16 swift 1.3 <subsection>
17     <title>What is fstab?</title>
18 swift 1.1 <body>
19    
20     <p>
21 swift 1.3 Under Linux, all partitions used by the system must be listed in
22 neysx 1.79 <path>/etc/fstab</path>. This file contains the mount points of those partitions
23 swift 1.3 (where they are seen in the file system structure), how they should be mounted
24 neysx 1.45 and with what special options (automatically or not, whether users can mount
25     them or not, etc.)
26 swift 1.1 </p>
27    
28     </body>
29 swift 1.3 </subsection>
30     <subsection>
31     <title>Creating /etc/fstab</title>
32     <body>
33    
34     <p>
35 swift 1.17 <path>/etc/fstab</path> uses a special syntax. Every line consists of six
36 swift 1.9 fields, separated by whitespace (space(s), tabs or a mixture). Each field has
37 swift 1.3 its own meaning:
38     </p>
39    
40     <ul>
41     <li>
42     The first field shows the <b>partition</b> described (the path to the device
43     file)
44     </li>
45     <li>
46 neysx 1.79 The second field shows the <b>mount point</b> at which the partition should be
47 swift 1.3 mounted
48     </li>
49     <li>
50     The third field shows the <b>filesystem</b> used by the partition
51     </li>
52     <li>
53 neysx 1.79 The fourth field shows the <b>mount options</b> used by <c>mount</c> when it
54     wants to mount the partition. As every filesystem has its own mount options,
55 swift 1.49 you are encouraged to read the mount man page (<c>man mount</c>) for a full
56 neysx 1.79 listing. Multiple mount options are comma-separated.
57 swift 1.3 </li>
58     <li>
59     The fifth field is used by <c>dump</c> to determine if the partition needs to
60     be <b>dump</b>ed or not. You can generally leave this as <c>0</c> (zero).
61     </li>
62     <li>
63 swift 1.17 The sixth field is used by <c>fsck</c> to determine the order in which
64     filesystems should be <b>check</b>ed if the system wasn't shut down properly.
65     The root filesystem should have <c>1</c> while the rest should have <c>2</c>
66 neysx 1.45 (or <c>0</c> if a filesystem check isn't necessary).
67 swift 1.3 </li>
68     </ul>
69    
70 neysx 1.79 <impo>
71 nightmorph 1.77 The default <path>/etc/fstab</path> file provided by Gentoo <e>is not a valid
72 neysx 1.79 fstab file</e>, You <b>have to create</b> your own <path>/etc/fstab</path>.
73     </impo>
74 swift 1.3
75     <pre caption="Opening /etc/fstab">
76     # <i>nano -w /etc/fstab</i>
77     </pre>
78    
79 neysx 1.79 </body>
80     <body test="func:keyval('/boot')">
81    
82 swift 1.3 <p>
83 swift 1.17 Let us take a look at how we write down the options for the <path>/boot</path>
84 neysx 1.79 partition. This is just an example, if you didn't or couldn't create a
85     <path>/boot</path>, don't copy it.
86 swift 1.3 </p>
87    
88 neysx 1.79 <p test="contains(func:keyval('/boot'), '/dev/hd')">
89     In our default <keyval id="arch"/> partitioning example, <path>/boot</path> is
90     usually the <path><keyval id="/boot"/></path> partition (or
91     <path>/dev/sda*</path> if you use SCSI or SATA drives), with <c>ext2</c> as
92     filesystem. It needs to be checked during boot, so we would write down:
93     </p>
94    
95     <p test="contains(func:keyval('/boot'), '/dev/sd')">
96     In our default <keyval id="arch"/> partitioning example, <path>/boot</path> is
97     usually the <path><keyval id="/boot"/></path> partition, with <c>ext2</c> as
98     filesystem. It needs to be checked during boot, so we would write down:
99 swift 1.3 </p>
100    
101     <pre caption="An example /boot line for /etc/fstab">
102 neysx 1.79 <keyval id="/boot"/> /boot ext2 defaults 1 2
103 swift 1.3 </pre>
104    
105     <p>
106 swift 1.35 Some users don't want their <path>/boot</path> partition to be mounted
107 swift 1.43 automatically to improve their system's security. Those people should
108     substitute <c>defaults</c> with <c>noauto</c>. This does mean that you need to
109     manually mount this partition every time you want to use it.
110 swift 1.35 </p>
111    
112 neysx 1.79 </body>
113     <body>
114    
115     <p test="not(func:keyval('arch')='SPARC')">
116     Add the rules that match your partitioning scheme and append rules for
117     <path>/proc</path>, <c>tmpfs</c>, for your CD-ROM drive(s), and of course, if
118     you have other partitions or drives, for those too.
119     </p>
120    
121     <p test="func:keyval('arch')='SPARC'">
122     Add the rules that match your partitioning schema and append rules for
123     <path>/proc/openprom</path>, <path>/proc</path>, <c>tmpfs</c> , for your CD-ROM
124     drive(s), and of course, if you have other partitions or drives, for those too.
125     </p>
126    
127 swift 1.35 <p>
128 neysx 1.79 Now use the <e>example</e> below to create your <path>/etc/fstab</path>:
129 swift 1.3 </p>
130    
131 neysx 1.79 <pre caption="A full /etc/fstab example" test="func:keyval('arch')='AMD64' or func:keyval('arch')='x86'">
132     <keyval id="/boot"/> /boot ext2 defaults,noatime 1 2
133     /dev/hda2 none swap sw 0 0
134     /dev/hda3 / ext3 noatime 0 1
135    
136     none /proc proc defaults 0 0
137     none /dev/shm tmpfs nodev,nosuid,noexec 0 0
138    
139     /dev/cdrom /mnt/cdrom auto noauto,user 0 0
140 swift 1.3 </pre>
141    
142 neysx 1.79 <pre caption="A full /etc/fstab example" test="func:keyval('arch')='HPPA'">
143     <keyval id="/boot"/> /boot ext2 defaults,noatime 1 2
144     /dev/sda3 none swap sw 0 0
145     /dev/sda4 / ext3 noatime 0 1
146    
147     none /proc proc defaults 0 0
148     none /dev/shm tmpfs nodev,nosuid,noexec 0 0
149    
150     /dev/cdrom /mnt/cdrom auto noauto,user 0 0
151     </pre>
152    
153     <pre caption="A full /etc/fstab example" test="func:keyval('arch')='Alpha' or func:keyval('arch')='MIPS'">
154     <keyval id="/boot"/> /boot ext2 defaults,noatime 1 2
155     /dev/sda2 none swap sw 0 0
156     /dev/sda3 / ext3 noatime 0 1
157    
158     none /proc proc defaults 0 0
159     none /dev/shm tmpfs nodev,nosuid,noexec 0 0
160    
161     /dev/cdrom /mnt/cdrom auto noauto,user 0 0
162     </pre>
163    
164     <pre caption="A full /etc/fstab example" test="func:keyval('arch')='SPARC'">
165     /dev/sda1 / ext3 noatime 0 1
166     /dev/sda2 none swap sw 0 0
167     /dev/sda4 /usr ext3 noatime 0 2
168     /dev/sda5 /var ext3 noatime 0 2
169     /dev/sda6 /home ext3 noatime 0 2
170    
171     none /proc/openprom openpromfs defaults 0 0
172     none /proc proc defaults 0 0
173     none /dev/shm tmpfs nodev,nosuid,noexec 0 0
174 swift 1.3
175 neysx 1.79 /dev/cdrom /mnt/cdrom auto noauto,user 0 0
176 swift 1.3 </pre>
177    
178 neysx 1.79 <note test="func:keyval('arch')='PPC'">
179     There are important variations between PPC machine types. Please make sure you
180     adapt the following example to your system.
181     </note>
182    
183     <pre caption="A full /etc/fstab example" test="func:keyval('arch')='PPC'">
184     /dev/hda4 / ext3 noatime 0 1
185     /dev/hda3 none swap sw 0 0
186    
187     none /proc proc defaults 0 0
188     none /dev/shm tmpfs nodev,nosuid,noexec 0 0
189    
190     /dev/cdrom /mnt/cdrom auto noauto,user 0 0
191     </pre>
192 swift 1.3
193 neysx 1.79 <pre caption="A full /etc/fstab example" test="func:keyval('arch')='PPC64'">
194     /dev/sda4 / ext3 noatime 0 1
195     /dev/sda3 none swap sw 0 0
196 swift 1.3
197 neysx 1.79 none /proc proc defaults 0 0
198     none /dev/shm tmpfs nodev,nosuid,noexec 0 0
199 swift 1.3
200 neysx 1.79 /dev/cdrom /mnt/cdrom auto noauto,user 0 0
201 swift 1.3 </pre>
202    
203     <p>
204     <c>auto</c> makes <c>mount</c> guess for the filesystem (recommended for
205     removable media as they can be created with one of many filesystems) and
206     <c>user</c> makes it possible for non-root users to mount the CD.
207     </p>
208    
209     <p>
210 neysx 1.79 To improve performance, most users would want to add the <c>noatime</c>
211     mount option, which results in a faster system since access times
212     aren't registered (you don't need those generally anyway).
213 swift 1.3 </p>
214    
215 swift 1.5 <p>
216 neysx 1.34 Double-check your <path>/etc/fstab</path>, save and quit to continue.
217 swift 1.3 </p>
218    
219     </body>
220     </subsection>
221 swift 1.2 </section>
222     <section>
223 swift 1.1 <title>Networking Information</title>
224 swift 1.3 <subsection>
225 nightmorph 1.84 <title>Host name, Domainname, etc</title>
226 swift 1.3 <body>
227    
228     <p>
229 swift 1.33 One of the choices the user has to make is name his/her PC. This seems to be
230     quite easy, but <e>lots</e> of users are having difficulties finding the
231     appropriate name for their Linux-pc. To speed things up, know that any name you
232     choose can be changed afterwards. For all we care, you can just call your system
233 swift 1.3 <c>tux</c> and domain <c>homenetwork</c>.
234     </p>
235    
236 neysx 1.79 <pre caption="Setting the host name">
237 swift 1.66 # <i>nano -w /etc/conf.d/hostname</i>
238    
239 neysx 1.79 <comment>(Set the HOSTNAME variable to your host name)</comment>
240 swift 1.66 HOSTNAME="<i>tux</i>"
241 swift 1.3 </pre>
242    
243 nightmorph 1.84 <p>
244     Second we set the domainname in <path>/etc/conf.d/net</path>:
245     </p>
246    
247     <pre caption="Setting the domainname">
248     # <i>nano -w /etc/conf.d/net</i>
249    
250     <comment>(Set the dns_domain variable to your domain name)</comment>
251     dns_domain_lo="<i>homenetwork</i>"
252     </pre>
253    
254     <p>
255     If you have a NIS domain (if you don't know what that is, then you don't have
256     one), you need to define that one too:
257     </p>
258    
259     <pre caption="Setting the NIS domainname">
260     # <i>nano -w /etc/conf.d/net</i>
261    
262     <comment>(Set the nis_domain variable to your NIS domain name)</comment>
263     nis_domain_lo="<i>my-nisdomain</i>"
264     </pre>
265    
266 nightmorph 1.85 <note>
267     For more information on configuring DNS and NIS, please read the examples
268     provided in <path>/etc/conf.d/net.example</path>.
269     </note>
270    
271 swift 1.3 </body>
272     </subsection>
273     <subsection>
274     <title>Configuring your Network</title>
275     <body>
276    
277     <p>
278     Before you get that "Hey, we've had that already"-feeling, you should remember
279 fox2mike 1.67 that the networking you set up in the beginning of the Gentoo installation was
280 swift 1.3 just for the installation. Right now you are going to configure networking for
281     your Gentoo system permanently.
282     </p>
283    
284 fox2mike 1.65 <note>
285     More detailed information about networking, including advanced topics like
286 swift 1.72 bonding, bridging, 802.1Q VLANs or wireless networking is covered in the <uri
287 fox2mike 1.65 link="?part=4">Gentoo Network Configuration</uri> section.
288     </note>
289    
290 swift 1.3 <p>
291     All networking information is gathered in <path>/etc/conf.d/net</path>. It uses
292 swift 1.48 a straightforward yet not intuitive syntax if you don't know how to set up
293 neysx 1.69 networking manually. But don't fear, we'll explain everything. A fully
294     commented example that covers many different configurations is available in
295     <path>/etc/conf.d/net.example</path>.
296 swift 1.3 </p>
297    
298     <p>
299 neysx 1.83 DHCP is used by default. For DHCP to work, you will need to install a DHCP
300     client. This is described later in <uri
301     link="?part=1&amp;chap=9#networking-tools">Installing Necessary System
302     Tools</uri>. Do not forget to install a DHCP client.
303 neysx 1.69 </p>
304    
305     <p>
306     If you need to configure your network connection either because you need
307     specific DHCP options or because you do not use DHCP at all, open
308     <path>/etc/conf.d/net</path> with your favorite editor (<c>nano</c> is used in
309     this example):
310 swift 1.3 </p>
311    
312     <pre caption="Opening /etc/conf.d/net for editing">
313     # <i>nano -w /etc/conf.d/net</i>
314     </pre>
315    
316 swift 1.58 <p>
317 neysx 1.69 You will see the following file:
318 swift 1.58 </p>
319    
320 neysx 1.69 <pre caption="Default /etc/conf.d/net">
321     # This blank configuration will automatically use DHCP for any net.*
322     # scripts in /etc/init.d. To create a more complete configuration,
323     # please review /etc/conf.d/net.example and save your configuration
324     # in /etc/conf.d/net (this file :]!).
325 swift 1.58 </pre>
326    
327     <p>
328 neysx 1.69 To enter your own IP address, netmask and gateway, you need
329 swift 1.58 to set both <c>config_eth0</c> and <c>routes_eth0</c>:
330     </p>
331    
332     <pre caption="Manually setting IP information for eth0">
333 swift 1.74 config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )
334 swift 1.58 routes_eth0=( "default gw 192.168.0.1" )
335     </pre>
336    
337     <p>
338 neysx 1.69 To use DHCP and add specific DHCP options, define <c>config_eth0</c> and
339     <c>dhcp_eth0</c>:
340     </p>
341    
342     <pre caption="Automatically obtaining an IP address for eth0">
343     config_eth0=( "dhcp" )
344     dhcp_eth0="nodns nontp nonis"
345     </pre>
346    
347     <p>
348     Please read <path>/etc/conf.d/net.example</path> for a list of all available
349     options.
350     </p>
351    
352     <p>
353 swift 1.58 If you have several network interfaces repeat the above steps for
354     <c>config_eth1</c>, <c>config_eth2</c>, etc.
355     </p>
356    
357 swift 1.3 <p>
358     Now save the configuration and exit to continue.
359     </p>
360    
361     </body>
362     </subsection>
363     <subsection>
364     <title>Automatically Start Networking at Boot</title>
365 swift 1.1 <body>
366    
367     <p>
368 neysx 1.45 To have your network interfaces activated at boot, you need to add them to the
369 swift 1.3 default runlevel. If you have PCMCIA interfaces you should skip this action as
370     the PCMCIA interfaces are started by the PCMCIA init script.
371     </p>
372    
373     <pre caption="Adding net.eth0 to the default runlevel">
374     # <i>rc-update add net.eth0 default</i>
375     </pre>
376    
377     <p>
378     If you have several network interfaces, you need to create the appropriate
379     <path>net.eth1</path>, <path>net.eth2</path> etc. initscripts for those. You can
380     use <c>ln</c> to do this:
381 swift 1.1 </p>
382    
383 swift 1.3 <pre caption="Creating extra initscripts">
384     # <i>cd /etc/init.d</i>
385 swift 1.80 # <i>ln -s net.lo net.eth1</i>
386 swift 1.3 # <i>rc-update add net.eth1 default</i>
387     </pre>
388    
389 swift 1.1 </body>
390 swift 1.3 </subsection>
391     <subsection>
392     <title>Writing Down Network Information</title>
393     <body>
394    
395     <p>
396     You now need to inform Linux about your network. This is defined in
397 neysx 1.79 <path>/etc/hosts</path> and helps in resolving host names to IP addresses for
398 neysx 1.78 hosts that aren't resolved by your nameserver. You need to define your system.
399     You may also want to define other systems on your network if you don't want to
400     set up your own internal DNS system.
401 swift 1.3 </p>
402    
403     <pre caption="Opening /etc/hosts">
404     # <i>nano -w /etc/hosts</i>
405     </pre>
406    
407     <pre caption="Filling in the networking information">
408 neysx 1.78 <comment>(This defines the current system)</comment>
409     127.0.0.1 tux.homenetwork tux localhost
410    
411     <comment>(Define extra systems on your network,
412     they need to have a static IP to be defined this way.)</comment>
413 swift 1.22 192.168.0.5 jenny.homenetwork jenny
414     192.168.0.6 benny.homenetwork benny
415 swift 1.3 </pre>
416    
417     <p>
418     Save and exit the editor to continue.
419     </p>
420    
421 neysx 1.79 <p test="func:keyval('arch')='AMD64' or func:keyval('arch')='x86' or substring(func:keyval('arch'),1,3)='PPC'">
422 swift 1.3 If you don't have PCMCIA, you can now continue with <uri
423 neysx 1.79 link="#sysinfo">System Information</uri>. PCMCIA-users should read the
424 swift 1.3 following topic on PCMCIA.
425     </p>
426    
427     </body>
428     </subsection>
429 neysx 1.79 <subsection test="func:keyval('arch')='AMD64' or func:keyval('arch')='x86' or substring(func:keyval('arch'),1,3)='PPC'">
430 swift 1.3 <title>Optional: Get PCMCIA Working</title>
431     <body>
432    
433     <p>
434 swift 1.46 PCMCIA-users should first install the <c>pcmcia-cs</c> package. This also
435     includes users who will be working with a 2.6 kernel (even though they won't be
436     using the PCMCIA drivers from this package). The <c>USE="-X"</c> is necessary
437     to avoid installing xorg-x11 at this moment:
438 swift 1.3 </p>
439    
440     <pre caption="Installing pcmcia-cs">
441 swift 1.30 # <i>USE="-X" emerge pcmcia-cs</i>
442 swift 1.3 </pre>
443    
444     <p>
445 swift 1.19 When <c>pcmcia-cs</c> is installed, add <c>pcmcia</c> to the <e>default</e>
446 swift 1.3 runlevel:
447     </p>
448    
449 swift 1.19 <pre caption="Adding pcmcia to the default runlevel">
450     # <i>rc-update add pcmcia default</i>
451 swift 1.3 </pre>
452    
453     </body>
454     </subsection>
455 swift 1.2 </section>
456 neysx 1.79
457     <section id="sysinfo">
458 swift 1.1 <title>System Information</title>
459 swift 1.41 <subsection>
460     <title>Root Password</title>
461     <body>
462    
463     <p>
464     First we set the root password by typing:
465     </p>
466    
467     <pre caption="Setting the root password">
468     # <i>passwd</i>
469     </pre>
470    
471     <p>
472     If you want root to be able to log on through the serial console, add
473     <c>tts/0</c> to <path>/etc/securetty</path>:
474     </p>
475    
476     <pre caption="Adding tts/0 to /etc/securetty">
477     # <i>echo "tts/0" &gt;&gt; /etc/securetty</i>
478     </pre>
479    
480     </body>
481     </subsection>
482     <subsection>
483     <title>System Information</title>
484 swift 1.1 <body>
485    
486     <p>
487 swift 1.3 Gentoo uses <path>/etc/rc.conf</path> for general, system-wide configuration.
488     Open up <path>/etc/rc.conf</path> and enjoy all the comments in that file :)
489     </p>
490    
491     <pre caption="Opening /etc/rc.conf">
492     # <i>nano -w /etc/rc.conf</i>
493     </pre>
494    
495     <p>
496 fox2mike 1.67 When you're finished configuring <path>/etc/rc.conf</path>, save and exit.
497     </p>
498    
499     <p>
500 swift 1.3 As you can see, this file is well commented to help you set up the necessary
501 neysx 1.69 configuration variables. You can configure your system to use unicode and
502     define your default editor and your display manager (like gdm or kdm).
503 fox2mike 1.67 </p>
504    
505     <p>
506     Gentoo uses <path>/etc/conf.d/keymaps</path> to handle keyboard configuration.
507     Edit it to configure your keyboard.
508     </p>
509    
510     <pre caption="Opening /etc/conf.d/keymaps">
511     # <i>nano -w /etc/conf.d/keymaps</i>
512     </pre>
513    
514     <p>
515     Take special care with the <c>KEYMAP</c> variable. If you select the wrong
516     <c>KEYMAP</c>, you will get weird results when typing on your keyboard.
517 swift 1.16 </p>
518    
519 neysx 1.79 <note test="func:keyval('arch')='SPARC'">
520     Users of USB-based SPARC systems and SPARC clones might need to select an i386
521     keymap (such as "us") instead of "sunkeymap".
522     </note>
523    
524     <note test="substring(func:keyval('arch'),1,3)='PPC'">
525     PPC uses x86 keymaps on most systems. Users who want to be able to use ADB
526     keymaps on boot have to enable ADB keycode sendings in their kernel and have to
527     set a mac/ppc keymap in <path>/etc/conf.d/keymaps</path>.
528 swift 1.16 </note>
529    
530     <p>
531 fox2mike 1.67 When you're finished configuring <path>/etc/conf.d/keymaps</path>, save and
532     exit.
533     </p>
534    
535     <p>
536     Gentoo uses <path>/etc/conf.d/clock</path> to set clock options. Edit it
537     according to your needs.
538 swift 1.29 </p>
539    
540 fox2mike 1.67 <pre caption="Opening /etc/conf.d/clock">
541     # <i>nano -w /etc/conf.d/clock</i>
542     </pre>
543    
544 swift 1.29 <p>
545 nightmorph 1.82 If your hardware clock is not using UTC, you need to add <c>CLOCK="local"</c>
546     to the file. Otherwise you will notice some clock skew.
547 swift 1.61 </p>
548    
549     <p>
550 fox2mike 1.67 When you're finished configuring <path>/etc/conf.d/clock</path>, save and
551     exit.
552 swift 1.59 </p>
553    
554 neysx 1.79 <p test="not(func:keyval('arch')='PPC64')">
555     Please continue with <uri link="?part=1&amp;chap=9">Installing Necessary System
556     Tools</uri>.
557 swift 1.59 </p>
558    
559     </body>
560     </subsection>
561 neysx 1.79 <subsection test="func:keyval('arch')='PPC64'">
562 swift 1.59 <title>Configuring the Console</title>
563     <body>
564    
565     <p>
566 neysx 1.79 If you are using a virtual console, you must uncomment the appropriate line in
567     <path>/etc/inittab</path> for the virtual console to spawn a login prompt.
568 swift 1.59 </p>
569    
570 swift 1.70 <pre caption="Enabling hvc or hvsi support in /etc/inittab">
571     hvc0:12345:respawn:/sbin/agetty -L 9600 hvc0
572     hvsi:12345:respawn:/sbin/agetty -L 19200 hvsi0
573 swift 1.59 </pre>
574    
575     <p>
576 swift 1.70 You should also take this time to verify that the appropriate console is
577 jkt 1.71 listed in <path>/etc/securetty</path>.
578 swift 1.70 </p>
579    
580     <p>
581 swift 1.59 You may now continue with <uri link="?part=1&amp;chap=9">Installing Necessary
582     System Tools</uri>.
583 swift 1.1 </p>
584    
585     </body>
586 swift 1.41 </subsection>
587 swift 1.1 </section>
588 swift 1.2 </sections>

  ViewVC Help
Powered by ViewVC 1.1.20