1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE section [
<!ENTITY % general-entities SYSTEM "../general.ent">
%general-entities;
]>
<section xmlns="http://docbook.org/docbook-ng"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:id="ch-bootable-grub">
<title>Making the LFS system bootable</title>
<?dbhtml filename="grub.html"?>
<indexterm zone="ch-bootable-grub">
<primary sortas="a-Grub">Grub</primary>
<secondary>configuring</secondary></indexterm>
<para>Your shiny new LFS system is almost complete. One of the last things to
do is ensure you can boot it. The instructions below apply only to computers of
IA-32 architecture, meaning mainstream PCs. Information on <quote>boot
loading</quote> for other architectures should be available in the usual
resource-specific locations for those architectures.</para>
<para>Boot loading can be a complex area. First, a few cautionary words. You
really should be familiar with your current boot loader and any other
operating systems present on your hard drive(s) that you might wish to keep
bootable. Please make sure that you have an emergency boot disk ready, so that
you can rescue your computer if, by any chance, your computer becomes unusable
(un-bootable).</para>
<para>Earlier, we compiled and installed the Grub boot loader software in
preparation for this step. The procedure involves writing some special Grub
files to specific locations on the hard drive. Before we get to that, we
highly recommend that you create a Grub boot floppy diskette just in case.
Insert a blank floppy diskette and run the following commands:</para>
<screen><userinput>dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1</userinput></screen>
<para>Remove the diskette and store it somewhere safe. Now we'll run the
<command>grub</command> shell:</para>
<screen><userinput>grub</userinput></screen>
<para>Grub uses its own naming structure for drives and partitions, in the form
of (hdn,m), where <emphasis>n</emphasis> is the hard drive number, and
<emphasis>m</emphasis> the partition number, both starting from zero. This
means, for instance, that partition <filename class="partition">hda1</filename> is (hd0,0) to
Grub, and <filename class="partition">hdb2</filename> is (hd1,1). In contrast to Linux, Grub
doesn't consider CD-ROM drives to be hard drives, so if you have a CD on
<filename class="partition">hdb</filename>, for example, and a second hard drive on
<filename class="partition">hdc</filename>, that second hard drive would still be (hd1).</para>
<para>Using the above information, determine the appropriate designator for
your root partition (or boot partition, if you use a separate one). For the
following example, we'll assume your root (or separate boot) partition is
<filename class="partition">hda4</filename>.</para>
<para>First, tell Grub where to search for its <filename>stage{1,2}</filename>
files -- you can use the Tab key everywhere to make Grub show the alternatives:</para>
<screen><userinput>root (hd0,3)</userinput></screen>
<warning><para>The following command will overwrite your current boot loader.
Don't run the command if this is not what you want. For example, you may be
using a third party boot manager to manage your MBR (Master Boot Record). In
this scenario, it would probably make more sense to install Grub into the
<quote>boot sector</quote> of the LFS partition, in which case this next command
would become: <userinput>setup (hd0,3)</userinput>.</para></warning>
<para>Tell Grub to install itself into the MBR (Master Boot Record) of
<filename class="partition">hda</filename>:</para>
<screen><userinput>setup (hd0)</userinput></screen>
<para>If all is well, Grub will have reported finding its files in
<filename class="directory">/boot/grub</filename>. That's all there is to it:</para>
<screen><userinput>quit</userinput></screen>
<para>Now we need to create a <quote>menu list</quote> file, defining Grub's
boot menu:</para>
<screen><userinput>cat > /boot/grub/menu.lst << "EOF"
# Begin /boot/grub/menu.lst
# By default boot the first menu entry.
default 0
# Allow 30 seconds before booting the default.
timeout 30
# Use prettier colors.
color green/black light-green/black
# The first entry is for LFS.
title LFS &version;
root (hd0,3)
kernel /boot/lfskernel-&linux-version; root=/dev/hda4
EOF</userinput></screen>
<para>You may want to add an entry for your host distribution. It might look
like this:</para>
<screen><userinput>cat >> /boot/grub/menu.lst << "EOF"
title Red Hat
root (hd0,2)
kernel /boot/kernel-2.4.20 root=/dev/hda3
initrd /boot/initrd-2.4.20
EOF</userinput></screen>
<para>Also, if you happen to dual-boot Windows, the following entry should
allow booting it:</para>
<screen><userinput>cat >> /boot/grub/menu.lst << "EOF"
title Windows
rootnoverify (hd0,0)
chainloader +1
EOF</userinput></screen>
<para>If <command>info grub</command> doesn't tell you all you want to
know, you can find more information regarding Grub on its website, located at:
<uri xlink:href="http://www.gnu.org/software/grub/"/>.</para>
<para>The FHS stipulates that Grub's menu.lst file should be symlinked to
/etc/grub/menu.lst. To satisfy this requirement, issue the following
command:</para>
<screen><userinput>mkdir /etc/grub &&
ln -s /boot/grub/menu.lst /etc/grub</userinput></screen>
</section>
|