* Upgrade to iproute2-2.6.11-050330
[linux_from_scratch.git] / chapter08 / grub.xml
blobd962d4e6f5c57366adb88ad5826392befe29d126
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
3   <!ENTITY % general-entities SYSTEM "../general.ent">
4   %general-entities;
5 ]>
6 <sect1 id="ch-bootable-grub">
7 <title>Making the LFS System Bootable</title>
8 <?dbhtml filename="grub.html"?>
10 <indexterm zone="ch-bootable-grub">
11 <primary sortas="a-Grub">Grub</primary>
12 <secondary>configuring</secondary></indexterm>
14 <para>Your shiny new LFS system is almost complete. One of the last
15 things to do is to ensure that the system can be properly booted. The
16 instructions below apply only to computers of IA-32 architecture,
17 meaning mainstream PCs. Information on <quote>boot loading</quote> for
18 other architectures should be available in the usual resource-specific
19 locations for those architectures.</para>
21 <para>Boot loading can be a complex area, so a few cautionary
22 words are in order. Be familiar with the current boot loader and any other
23 operating systems present on the hard drive(s) that need to be
24 bootable. Make sure that an emergency boot disk is ready to
25 <quote>rescue</quote> the computer if the computer becomes
26 unusable (un-bootable).</para>
28 <para>Earlier, we compiled and installed the Grub boot loader software
29 in preparation for this step. The procedure involves writing some
30 special Grub files to specific locations on the hard drive. We highly
31 recommend creating a Grub boot floppy diskette as a backup. Insert a
32 blank floppy diskette and run the following commands:</para>
34 <screen><userinput>dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
35 dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1</userinput></screen>
37 <para>Remove the diskette and store it somewhere safe. Now, run the
38 <command>grub</command> shell:</para>
40 <screen><userinput>grub</userinput></screen>
42 <para>Grub uses its own naming structure for drives and partitions in
43 the form of <emphasis>(hdn,m)</emphasis>, where <emphasis>n</emphasis>
44 is the hard drive number and <emphasis>m</emphasis> is the partition
45 number, both starting from zero. For example, partition <filename
46 class="partition">hda1</filename> is <emphasis>(hd0,0)</emphasis> to
47 Grub and <filename class="partition">hdb3</filename> is
48 <emphasis>(hd1,2)</emphasis>. In contrast to Linux, Grub does not
49 consider CD-ROM drives to be hard drives. For example, if using a CD
50 on <filename class="partition">hdb</filename> and a second hard drive
51 on <filename class="partition">hdc</filename>, that second hard drive
52 would still be <emphasis>(hd1)</emphasis>.</para>
54 <para>Using the above information, determine the appropriate
55 designator for the root partition (or boot partition, if a separate
56 one is used). For the following example, it is assumed that the root
57 (or separate boot) partition is <filename
58 class="partition">hda4</filename>.</para>
60 <para>Tell Grub where to search for its
61 <filename>stage{1,2}</filename> files. The Tab key can be used
62 everywhere to make Grub show the alternatives:</para>
64 <screen><userinput>root (hd0,3)</userinput></screen>
66 <warning><para>The following command will overwrite the current boot
67 loader. Do not run the command if this is not desired, for example, if
68 using a third party boot manager to manage the Master Boot Record
69 (MBR). In this scenario, it would make more sense to install
70 Grub into the <quote>boot sector</quote> of the LFS partition. In this
71 case, this next command would become <userinput>setup
72 (hd0,3)</userinput>.</para></warning>
74 <para>Tell Grub to install itself into the MBR of
75 <filename class="partition">hda</filename>:</para>
77 <screen><userinput>setup (hd0)</userinput></screen>
79 <para>If all went well, Grub will have reported finding its files in
80 <filename class="directory">/boot/grub</filename>. That's all there is
81 to it. Quit the <command>grub</command> shell:</para>
83 <screen><userinput>quit</userinput></screen>
85 <para>Create a <quote>menu list</quote> file defining Grub's boot menu:</para>
87 <screen><userinput>cat &gt; /boot/grub/menu.lst &lt;&lt; "EOF"
88 <literal># Begin /boot/grub/menu.lst
90 # By default boot the first menu entry.
91 default 0
93 # Allow 30 seconds before booting the default.
94 timeout 30
96 # Use prettier colors.
97 color green/black light-green/black
99 # The first entry is for LFS.
100 title LFS &version;
101 root (hd0,3)
102 kernel /boot/lfskernel-&linux-version; root=/dev/hda4</literal>
103 EOF</userinput></screen>
105 <para>Add an entry for the host distribution if desired. It might look
106 like this:</para>
108 <screen><userinput>cat &gt;&gt; /boot/grub/menu.lst &lt;&lt; "EOF"
109 <literal>title Red Hat
110 root (hd0,2)
111 kernel /boot/kernel-2.6.5 root=/dev/hda3
112 initrd /boot/initrd-2.6.5</literal>
113 EOF</userinput></screen>
115 <para>If dual-booting Windows, the following entry will allow
116 booting it:</para>
118 <screen><userinput>cat &gt;&gt; /boot/grub/menu.lst &lt;&lt; "EOF"
119 <literal>title Windows
120 rootnoverify (hd0,0)
121 chainloader +1</literal>
122 EOF</userinput></screen>
124 <para>If <command>info grub</command> does not provide all necessary material, additional
125 information regarding Grub is located on its website at:
126 <ulink url="http://www.gnu.org/software/grub/"/>.</para>
128 <para>The FHS stipulates that Grub's <filename>menu.lst</filename> file should be symlinked to
129 <filename class="symlink">/etc/grub/menu.lst</filename>.  To satisfy this requirement, issue the 
130 following command:</para>
132 <screen><userinput>mkdir /etc/grub &amp;&amp;
133 ln -s /boot/grub/menu.lst /etc/grub</userinput></screen>
135 </sect1>