Added a few comments here and there
[linux_from_scratch.git] / BOOK / chapter08 / grub.xml
blobe934b7c9fb681e31c90d20b7c9176e05704f8127
1 <sect1 id="ch-bootable-grub">
2 <title>Making the LFS system bootable</title>
3 <?dbhtml filename="grub.html" dir="chapter08"?>
5 <para>Your shiny new LFS system is almost complete. One of the last things to
6 do is ensure you can boot it. The instructions below apply only to computers
7 of IA-32 architecture, i.e. mainstream PC's. Information on "boot loading" for
8 other architectures should be available in the usual resource specific
9 locations for those architectures.</para>
11 <para>Boot loading can be a complex area. First, a few cautionary words. You
12 really should be familiar with your current boot loader and any other
13 operating systems present on your hard drive(s) that you might wish to keep
14 bootable. Please make sure that you have an emergency boot disk ready, so that
15 you can rescue your computer if, by any chance, your computer becomes unusable
16 (unbootable).</para>
18 <para>Earlier, we compiled and installed the Grub boot loader software in
19 preparation for this step. The procedure involves writing some special Grub
20 files to specific locations on the hard drive. Before we get to that, we
21 highly recommend that you create a Grub boot floppy diskette just in case.
22 Insert a blank floppy diskette and run the following commands:</para>
24 <screen><userinput>dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
25 dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1</userinput></screen>
27 <para>Remove the diskette and store it somewhere safe. Now we'll run the
28 <userinput>grub</userinput> shell:</para>
30 <screen><userinput>grub</userinput></screen>
32 <para>Grub uses its own naming structure for drives and partitions, in the form
33 of (hdn,m), where <emphasis>n</emphasis> is the hard drive number, and
34 <emphasis>m</emphasis> the partition number, both starting from zero. This
35 means, for instance, that partition <filename>hda1</filename> is (hd0,0) to
36 Grub, and <filename>hdb2</filename> is (hd1,1). In contrast to Linux, Grub
37 doesn't consider CD-ROM drives to be hard drives, so if you have a CD on
38 <filename>hdb</filename>, for example, and a second hard drive on
39 <filename>hdc</filename>, that second hard drive would still be (hd1).</para>
41 <para>Using the above information, determine the appropriate designator for
42 your root partition. For the following example, we'll assume your root
43 partition is <filename>hda4</filename>.</para>
45 <para>First, tell Grub where to search for its <filename>stage{1,2}</filename>
46 files -- you can use Tab everywhere to make Grub show the alternatives:</para>
48 <screen><userinput>root (hd0,3)</userinput></screen>
50 <!-- HACK - Force some whitespace to appease tidy -->
51 <literallayout></literallayout>
53 <warning><para>The following command will overwrite your current boot loader.
54 Don't run the command if this is not what you want. For example, you may be
55 using a third party boot manager to manage your MBR (Master Boot Record). In
56 this scenario, it would probably make more sense to install Grub into the
57 "boot sector" of the LFS partition, in which case the command would become:
58 <userinput>setup (hd0,3)</userinput>.</para></warning>
60 <!-- HACK - Force some whitespace to appease tidy -->
61 <literallayout></literallayout>
63 <para>Then tell it to install itself into the MBR (Master Boot Record) of
64 <filename>hda</filename>:</para>
66 <screen><userinput>setup (hd0)</userinput></screen>
68 <para>If all is well, Grub will have reported finding its files in
69 <filename>/boot/grub</filename>. That's all there is to it:</para>
71 <screen><userinput>quit</userinput></screen>
73 <para>Now we need to create a "menu list" file, defining Grub's boot
74 menu:</para>
76 <screen><userinput>cat &gt; /boot/grub/menu.lst &lt;&lt; "EOF"</userinput>
77 # Begin /boot/grub/menu.lst
79 # By default boot the first menu entry.
80 default 0
82 # Allow 30 seconds before booting the default.
83 timeout 30
85 # Use prettier colors.
86 color green/black light-green/black
88 # The first entry is for LFS.
89 title LFS &milestone;
90 root (hd0,3)
91 kernel --no-mem-option /boot/lfskernel root=/dev/hda4
92 <userinput>EOF</userinput></screen>
94 <note><para>By default, Grub will automatically pass a "mem=xxx" command line
95 argument to the kernel. However, Grub occasionally gets the amount of memory
96 wrong which can lead to problems in some circumstances. It's best to disable
97 this functionality and let the kernel determine the amount of memory itself,
98 hence the use of the <emphasis>--no-mem-option</emphasis> above.</para></note>
100 <para>You may want to add an entry for your host distribution. It might look
101 like this:</para>
103 <screen><userinput>cat &gt;&gt; /boot/grub/menu.lst &lt;&lt; "EOF"</userinput>
104 title Red Hat
105 root (hd0,2)
106 kernel /boot/kernel-2.4.20 root=/dev/hda3
107 initrd /boot/initrd-2.4.20
108 <userinput>EOF</userinput></screen>
110 <para>Also, if you happen to dual-boot Windows, the following entry should
111 allow booting it:</para>
113 <screen><userinput>cat &gt;&gt; /boot/grub/menu.lst &lt;&lt; "EOF"</userinput>
114 title Windows
115 rootnoverify (hd0,0)
116 chainloader +1
117 <userinput>EOF</userinput></screen>
119 <para>If <command>info grub</command> doesn't tell you all you want to
120 know, you can find more information regarding Grub on its website, located at:
121 <ulink url="http://www.gnu.org/software/grub"/>.</para>
123 </sect1>