aboutsummaryrefslogtreecommitdiffstats
path: root/chapter08/grub.xml
blob: 142c78460925c4f62ff066767f3361a96420e918 (plain)
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
  <!ENTITY % general-entities SYSTEM "../general.ent">
  %general-entities;
]>

<sect1 id="ch-bootable-grub" role="wrap">
  <?dbhtml filename="grub.html"?>

  <sect1info condition="script">
    <productname>grub</productname>
    <productnumber>&grub-version;</productnumber>
    <address>&grub-url;</address>
  </sect1info>

  <title>Using GRUB to Set Up the Boot Process</title>

  <sect2>
    <title>Introduction</title>

    <para>Boot loading can be a complex area, so a few cautionary
    words are in order. Be familiar with the current boot loader and any other
    operating systems present on the hard drive(s) that need to be
    bootable. Make sure that an emergency boot disk is ready to
    <quote>rescue</quote> the computer if the computer becomes
    unusable (un-bootable).</para>

    <para>The procedure involves writing some special GRUB files to specific
    locations on the hard drive. We highly recommend creating a GRUB boot
    floppy diskette as a backup. Insert a blank floppy diskette and run the
    following commands:</para>

<screen role="nodump"><userinput>cd /tmp
grub-mkrescue --image-type=floppy floppy.img
dd if=floppy.img of =/def/fd0 bs=1440 count=1</userinput></screen>

    <para>GRUB uses its own naming structure for drives and partitions in
    the form of <emphasis>(hdn,m)</emphasis>, where <emphasis>n</emphasis>
    is the hard drive number and <emphasis>m</emphasis> is the partition
    number. The hard drive number starts from zero, but he partition number
    starts from one for normal partitions and five for extended partitions.  
    Note that this is different form earlier versions where 
    both numbers started from zero. For example, partition <filename
    class="partition">sda1</filename> is <emphasis>(hd0,1)</emphasis> to
    GRUB and <filename class="partition">sdb3</filename> is
    <emphasis>(hd1,3)</emphasis>. In contrast to Linux, GRUB does not
    consider CD-ROM drives to be hard drives. For example, if using a CD
    on <filename class="partition">hdb</filename> and a second hard drive
    on <filename class="partition">hdc</filename>, that second hard drive
    would still be <emphasis>(hd1)</emphasis>.</para>

    <para>You can determine what GRUB thinks your disk devices are by running:</para>

<screen role="nodump"><userinput>grub-mkdevicemap --device-map=device.map
cat device.map</userinput></screen>

    <para>The location of the boot partition is a choice of the user that
    affects the configuration.  One recommendation is to have a separate small
    (suggested size is 100 MB) partition just for boot information.  That way
    each build, whether LFS or some commercial distro, can access the same boot
    files and access can be made from any booted system.  If you choose to do
    this, you will need to mount the separate partition, move all files in the
    current <filename class="directory">/boot</filename> directory (e.g. the
    linux kernel you just built in the previous section) to the new partition.
    You will then need to unmount the partition and remount it as <filename
    class="directory">/boot</filename>.  If you do this, be sure to update
    <filename>/etc/fstab</filename>.</para>

    <para>Using the current lfs partition will also work, but configuration
    for multiple systems is more difficult.</para>
  </sect2>

  <sect2>
    <title>Setting Up the Configuration</title>

    <para>Using the above information, determine the appropriate
    designator for the root partition (or boot partition, if a separate
    one is used). For the following example, it is assumed that the root
    (or separate boot) partition is <filename
    class="partition">sda2</filename>.</para>

    <para>Install the GRUB files into <filename
    class="directory">/boot/grub</filename>:</para> 

<screen role="nodump"><userinput>grub-install --grub-setup=/bin/true /dev/sda</userinput></screen>

    <para>We use --grub-setup=/bin/true for now to prevent update the 
    Master Boot Record (MBR).  In this way, we can test our installation 
    before committing to a change that is hard to revert.</para>

    <para>Generate <filename>/boot/grub/grub.cfg</filename>:</para>

<screen role="nodump"><userinput>grub-mkconfig -o /boot/grub/grub.cfg</userinput></screen>

    <para>Here <command>grub-mkconfig</command> uses the files in <filename
    class="directory">/etc/grub.d/</filename> to determine the contents
    of this file. The configuration file will look something like:</para>
<screen><computeroutput>#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set default=0
set timeout=5
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry "GNU/Linux, Linux 2.6.30.2-lfs65" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 915852a7-859e-45a6-9ff0-d3ebfdb5cea2
        linux   /boot/vmlinux-&linux-version;-lfs-&version; root=/dev/sda2 ro
}
menuentry "GNU/Linux, Linux 2.6.30.2-lfs65 (recovery mode)" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 915852a7-859e-45a6-9ff0-d3ebfdb5cea2
        linux   /boot/vmlinux-&linux-version;-lfs-&version; root=/dev/sda2 ro single
}
menuentry "GNU/Linux, Linux 2.6.28-11-server" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 6b4c0339-5501-4a85-8351-e398e5252be8
        linux   /boot/vmlinuz-2.6.28-11-server root=UUID=6b4c0339-5501-4a85-8351-e398e5252be8 ro
        initrd  /boot/initrd.img-2.6.28-11-server
}
menuentry "GNU/Linux, Linux 2.6.28-11-server (recovery mode)" {
        insmod ext2
        set root=(hd0,2)
        search --no-floppy --fs-uuid --set 6b4c0339-5501-4a85-8351-e398e5252be8
        linux   /boot/vmlinuz-2.6.28-11-server root=UUID=6b4c0339-5501-4a85-8351-e398e5252be8 ro single
        initrd  /boot/initrd.img-2.6.28-11-server
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###
</computeroutput></screen>

  <para>Note that even though there is a warning not to edit the file, you can
  do so as long as you do not re-reun <command>grub-mkconfig</command>.  The
  <emphasis>search</emphasis> lines are not meaningful for LFS systems as that
  command needs an initrd image for processing. If installing on a separate
  partition the linux and initrd lines will not have the /boot on the file
  names.  In this example the kernel files for a Ubuntu installation are
  also found in <filename class="directory">/boot</filename>.</para>

  </sect2>
   
  <sect2>
     <title>Testing the Configuration</title>

     <para>The core image of GRUB is also a Multiboot kernel, so if you already
     have GRUB Legacy loaded you can load GRUB-&grub-version; through your old
     boot loader.  To accomplish this, you will need to exit the
     <command>chroot</command> environment and re-enter it to finish the
     few remaining portions of the book.</para>

<screen role="nodump"><userinput>/sbin/reboot
...
grub> root (hd0,1)
grub> kernel /boot/grub/core.img
grub> boot</userinput></screen>

     <para>Note that the GRUB commands above are assumed to be GRUB Legacy.
     At this point the GRUB prompt will appear (very similar to GRUB Legacy) and
     you can explore the interface or boot to one of the systems in the grub.cfg 
     file.</para>
   
   </sect2>

  <sect2>
     <title>Updating the Master Boot Record</title>

     <para>If you tested the GRUB configuration as specified above, re-enter
     the <command>chroot</command> envronment.</para>

    <warning>
      <para>The following command will overwrite the current boot loader. Do not
      run the command if this is not desired, for example, if using a third party
      boot manager to manage the Master Boot Record (MBR).</para> 
    </warning>

    <para>Update the MBR with:</para>

<screen role="nodump"><userinput>grub-setup</userinput></screen>

    <para>This program uses the following defaults and are correct if you did not
    deviate from the instructions above:</para>

    <itemizedlist>
      <listitem><para>boot image  - boot.img  </para></listitem>
      <listitem><para>core image  - core.img  </para></listitem>
      <listitem><para>directory   - /boot/grub</para></listitem>
      <listitem><para>device map  - device.map</para></listitem>
      <listitem><para>root device - guessed   </para></listitem>
    </itemizedlist>

   </sect2>

</sect1>