From 7e3a0aab547917ba3066a015f4ec4cc8e87c505f Mon Sep 17 00:00:00 2001 From: Aaron Griffin Date: Tue, 12 Sep 2006 15:16:59 +0000 Subject: Mucked with grub help git-svn-id: http://phraktured.net/archiso@6 00a9fe69-e71b-0410-bb23-df0e5024db41 --- default-config/boot/grub/help.lst | 23 +- default-config/boot/grub/menu.lst | 7 +- default-config/boot/grub/more.lst | 27 +- default-config/boot/grub/tools.lst | 35 + default-config/boot/help/bootexisting | 23 - default-config/boot/help/bootexisting.txt | 23 + default-config/boot/help/grub.txt | 4220 +++++++++++++++++++++++++++++ default-config/boot/invaders.img | Bin 0 -> 3464 bytes default-config/boot/lilo_diagnostic1.img | Bin 0 -> 5040 bytes default-config/boot/lilo_diagnostic2.img | Bin 0 -> 17932 bytes default-config/boot/x86test.img | Bin 0 -> 37671 bytes 11 files changed, 4313 insertions(+), 45 deletions(-) create mode 100644 default-config/boot/grub/tools.lst delete mode 100644 default-config/boot/help/bootexisting create mode 100644 default-config/boot/help/bootexisting.txt create mode 100644 default-config/boot/help/grub.txt create mode 100644 default-config/boot/invaders.img create mode 100644 default-config/boot/lilo_diagnostic1.img create mode 100644 default-config/boot/lilo_diagnostic2.img create mode 100644 default-config/boot/x86test.img diff --git a/default-config/boot/grub/help.lst b/default-config/boot/grub/help.lst index 4018a27..623e7c1 100644 --- a/default-config/boot/grub/help.lst +++ b/default-config/boot/grub/help.lst @@ -1,14 +1,25 @@ # Help files must be exactly 23 lines long. -timeout 60 +timeout 300 default 0 +color light-blue/blue black/light-grey +splashimage=/boot/splash.xpm.gz -title Back to main menu +title << Back to main menu configfile /boot/grub/menu.lst -title HOW-TO: Boot an existing system -cat /boot/help/bootexisting +title HOW-TO: Boot an existing system +cat /boot/help/bootexisting.txt pause Press enter to continue... -title HOW-TO: Do some other shit -cat /boot/help/bootexisting +title HOW-TO: Do some other shit +cat /boot/help/othershit.txt pause Press enter to continue... + +title MANUAL: Grub +cat /boot/help/grub.txt +pause Press enter to continue... + +title MANUAL: Lilo +cat /boot/help/lilo.txt +pause Press enter to continue... + diff --git a/default-config/boot/grub/menu.lst b/default-config/boot/grub/menu.lst index 4650a92..2edc59a 100644 --- a/default-config/boot/grub/menu.lst +++ b/default-config/boot/grub/menu.lst @@ -1,6 +1,5 @@ -#TODO add options + graphical stuff -timeout 30 +timeout 300 default 0 color light-blue/blue black/light-grey splashimage=/boot/splash.xpm.gz @@ -15,8 +14,12 @@ halt title Reboot the Computer reboot +title Tools... +configgile /boot/grub/tools.lst + title View Help... configfile /boot/grub/help.lst + title More Options... configfile /boot/grub/more.lst diff --git a/default-config/boot/grub/more.lst b/default-config/boot/grub/more.lst index 1fe37fc..a8450f3 100644 --- a/default-config/boot/grub/more.lst +++ b/default-config/boot/grub/more.lst @@ -1,21 +1,20 @@ -timeout 60 +timeout 300 default 0 +color light-blue/blue black/light-grey +splashimage=/boot/splash.xpm.gz -title Boot Existing Linux Install -root (hd0,2) -kernel /vmlinuz26 root=/dev/hda1 ro +title << Back to Main Menu +configfile /boot/grub/menu.lst -title Boot Existing Windows Install +title Attempt existing Linux detection +configfile /boot/grub/tryboot.lst + +title [EDIT ME] Boot Existing Linux Install +root (hd0,1) +kernel /vmlinuz26 root=/dev/hda3 ro + +title [EDIT ME] Boot Existing Windows Install rootnoverify (hd0,0) makeactive chainloader +1 -title Install GRUB to HD0 -root (hd0,0) -setup (hd0) - -title Run Ranish Partition Manager -kernel /boot/ranish/part.exe - -title Run memtest86+ -kernel /boot/memtest86+/memtest.bin diff --git a/default-config/boot/grub/tools.lst b/default-config/boot/grub/tools.lst new file mode 100644 index 0000000..583ee4b --- /dev/null +++ b/default-config/boot/grub/tools.lst @@ -0,0 +1,35 @@ +timeout 300 +default 0 +color light-blue/blue black/light-grey +splashimage=/boot/splash.xpm.gz + +title << Back to Main Menu +configfile /boot/grub/menu.lst + +title Run memtest86+ (Memory Testing) +kernel /boot/memtest86+/memtest.bin + +# TODO package +# http://www.vortex.prodigynet.co.uk/x86test/ +title Run x86test (CPU Info) +kernel /boot/x86test.img + +# TODO package +# http://home.san.rr.com/johninsd/pub/linux/lilo/boot/ +title LILO Diagnostic 1 (diag1) +kernel /boot/lilo_diagnostic1.img + +title LILO Diagnostic 2 (diag1) +kernel /boot/lilo_diagnostic2.img + +title Install GRUB to hd0 MBR +root (hd0,0) +setup (hd0) + +title Install GRUB to hd1 MBR +root (hd1,0) +setup (hd1) + +# http://www.erikyyy.de/invaders/ +title Space Invaders!! +kernel /boot/invaders.img diff --git a/default-config/boot/help/bootexisting b/default-config/boot/help/bootexisting deleted file mode 100644 index 1c27625..0000000 --- a/default-config/boot/help/bootexisting +++ /dev/null @@ -1,23 +0,0 @@ -This is a helpfile - -Hopefully grub will make this happy.... - - - - - - - - - - - - - - - - - - - - diff --git a/default-config/boot/help/bootexisting.txt b/default-config/boot/help/bootexisting.txt new file mode 100644 index 0000000..1c27625 --- /dev/null +++ b/default-config/boot/help/bootexisting.txt @@ -0,0 +1,23 @@ +This is a helpfile + +Hopefully grub will make this happy.... + + + + + + + + + + + + + + + + + + + + diff --git a/default-config/boot/help/grub.txt b/default-config/boot/help/grub.txt new file mode 100644 index 0000000..b0197e1 --- /dev/null +++ b/default-config/boot/help/grub.txt @@ -0,0 +1,4220 @@ +Table of Contents +***************** + +GNU GRUB manual +1 Introduction to GRUB + 1.1 Overview + 1.2 History of GRUB + 1.3 GRUB features + 1.4 The role of a boot loader +2 Naming convention +3 Installation + 3.1 Creating a GRUB boot floppy + 3.2 Installing GRUB natively + 3.3 Installing GRUB using grub-install + 3.4 Making a GRUB bootable CD-ROM +4 Booting + 4.1 How to boot operating systems + 4.1.1 How to boot an OS directly with GRUB + 4.1.2 Load another boot loader to boot unsupported operating systems + 4.2 Some caveats on OS-specific issues + 4.2.1 GNU/Hurd + 4.2.2 GNU/Linux + 4.2.3 FreeBSD + 4.2.4 NetBSD + 4.2.5 OpenBSD + 4.2.6 DOS/Windows + 4.2.7 SCO UnixWare + 4.2.8 QNX + 4.3 How to make your system robust + 4.3.1 Booting once-only + 4.3.2 Booting fallback systems +5 Configuration +6 Downloading OS images from a network + 6.1 How to set up your network + 6.2 Booting from a network +7 Using GRUB via a serial line +8 Embedding a configuration file into GRUB +9 Protecting your computer from cracking +10 GRUB image files +11 Filesystem syntax and semantics + 11.1 How to specify devices + 11.2 How to specify files + 11.3 How to specify block lists +12 GRUB's user interface + 12.1 The flexible command-line interface + 12.2 The simple menu interface + 12.3 Editing a menu entry + 12.4 The hidden menu interface +13 The list of available commands + 13.1 The list of commands for the menu only + 13.1.1 default + 13.1.2 fallback + 13.1.3 hiddenmenu + 13.1.4 timeout + 13.1.5 title + 13.2 The list of general commands + 13.2.1 bootp + 13.2.2 color + 13.2.3 device + 13.2.4 dhcp + 13.2.5 hide + 13.2.6 ifconfig + 13.2.7 pager + 13.2.8 partnew + 13.2.9 parttype + 13.2.10 password + 13.2.11 rarp + 13.2.12 serial + 13.2.13 setkey + 13.2.14 terminal + 13.2.15 terminfo + 13.2.16 tftpserver + 13.2.17 unhide + 13.3 The list of command-line and menu entry commands + 13.3.1 blocklist + 13.3.2 boot + 13.3.3 cat + 13.3.4 chainloader + 13.3.5 cmp + 13.3.6 configfile + 13.3.7 debug + 13.3.8 displayapm + 13.3.9 displaymem + 13.3.10 embed + 13.3.11 find + 13.3.12 fstest + 13.3.13 geometry + 13.3.14 halt + 13.3.15 help + 13.3.16 impsprobe + 13.3.17 initrd + 13.3.18 install + 13.3.19 ioprobe + 13.3.20 kernel + 13.3.21 lock + 13.3.22 makeactive + 13.3.23 map + 13.3.24 md5crypt + 13.3.25 module + 13.3.26 modulenounzip + 13.3.27 pause + 13.3.28 quit + 13.3.29 reboot + 13.3.30 read + 13.3.31 root + 13.3.32 rootnoverify + 13.3.33 savedefault + 13.3.34 setup + 13.3.35 testload + 13.3.36 testvbe + 13.3.37 uppermem + 13.3.38 vbeprobe +14 Error messages reported by GRUB + 14.1 Errors reported by the Stage 1 + 14.2 Errors reported by the Stage 1.5 + 14.3 Errors reported by the Stage 2 +15 Invoking the grub shell + 15.1 Introduction into the grub shell + 15.2 How to install GRUB via `grub' + 15.3 The map between BIOS drives and OS devices +16 Invoking grub-install +17 Invoking grub-md5-crypt +18 Invoking grub-terminfo +19 Invoking grub-set-default +20 Invoking mbchk +Appendix A How to obtain and build GRUB +Appendix B Reporting bugs +Appendix C Where GRUB will go +Appendix D Hacking GRUB + D.1 The memory map of various components + D.2 Embedded variables in GRUB + D.3 The generic interface for filesystems + D.4 The generic interface for built-ins + D.5 The bootstrap mechanism used in GRUB + D.6 How to probe I/O ports used by INT 13H + D.7 How to detect all installed RAM + D.8 INT 13H disk I/O interrupts + D.9 The structure of Master Boot Record + D.10 The format of partition tables + D.11 Where and how you should send patches +Appendix E Copying This Manual + E.1 GNU Free Documentation License + E.1.1 ADDENDUM: How to use this License for your documents +Index + + +GNU GRUB manual +*************** + +This is the documentation of GNU GRUB, the GRand Unified Bootloader, a +flexible and powerful boot loader program for PCs. + + This edition documents version 0.97. + + This manual is for GNU GRUB (version 0.97, 8 May 2005). + + Copyright (C) 1999,2000,2001,2002,2004,2006 Free Software +Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.2 or any later version published by the Free Software + Foundation; with no Invariant Sections, with the Front-Cover Texts + being "A GNU Manual," and with the Back-Cover Texts as in (a) + below. A copy of the license is included in the section entitled + "GNU Free Documentation License." + + (a) The FSF's Back-Cover Text is: "You have freedom to copy and + modify this GNU Manual, like GNU software. Copies published by + the Free Software Foundation raise funds for GNU development." + +1 Introduction to GRUB +********************** + +1.1 Overview +============ + +Briefly, a "boot loader" is the first software program that runs when a +computer starts. It is responsible for loading and transferring +control to an operating system "kernel" software (such as Linux or GNU +Mach). The kernel, in turn, initializes the rest of the operating +system (e.g. a GNU system). + + GNU GRUB is a very powerful boot loader, which can load a wide +variety of free operating systems, as well as proprietary operating +systems with chain-loading(1) (*note Overview-Footnote-1::). GRUB is +designed to address the complexity of booting a personal computer; both +the program and this manual are tightly bound to that computer platform, +although porting to other platforms may be addressed in the future. + + One of the important features in GRUB is flexibility; GRUB +understands filesystems and kernel executable formats, so you can load +an arbitrary operating system the way you like, without recording the +physical position of your kernel on the disk. Thus you can load the +kernel just by specifying its file name and the drive and partition +where the kernel resides. + + When booting with GRUB, you can use either a command-line interface +(*note Command-line interface::), or a menu interface (*note Menu +interface::). Using the command-line interface, you type the drive +specification and file name of the kernel manually. In the menu +interface, you just select an OS using the arrow keys. The menu is +based on a configuration file which you prepare beforehand (*note +Configuration::). While in the menu, you can switch to the command-line +mode, and vice-versa. You can even edit menu entries before using them. + + In the following chapters, you will learn how to specify a drive, a +partition, and a file name (*note Naming convention::) to GRUB, how to +install GRUB on your drive (*note Installation::), and how to boot your +OSes (*note Booting::), step by step. + + Besides the GRUB boot loader itself, there is a "grub shell" `grub' +(*note Invoking the grub shell::) which can be run when you are in your +operating system. It emulates the boot loader and can be used for +installing the boot loader. + + (1) "chain-load" is the mechanism for loading unsupported operating +systems by loading another boot loader. It is typically used for +loading DOS or Windows. + +1.2 History of GRUB +=================== + +GRUB originated in 1995 when Erich Boleyn was trying to boot the GNU +Hurd with the University of Utah's Mach 4 microkernel (now known as GNU +Mach). Erich and Brian Ford designed the Multiboot Specification +(*note Multiboot Specification: (multiboot)Top.), because they were +determined not to add to the large number of mutually-incompatible PC +boot methods. + + Erich then began modifying the FreeBSD boot loader so that it would +understand Multiboot. He soon realized that it would be a lot easier to +write his own boot loader from scratch than to keep working on the +FreeBSD boot loader, and so GRUB was born. + + Erich added many features to GRUB, but other priorities prevented him +from keeping up with the demands of its quickly-expanding user base. In +1999, Gordon Matzigkeit and Yoshinori K. Okuji adopted GRUB as an +official GNU package, and opened its development by making the latest +sources available via anonymous CVS. *Note Obtaining and Building +GRUB::, for more information. + +1.3 GRUB features +================= + +The primary requirement for GRUB is that it be compliant with the +"Multiboot Specification", which is described in *Note Multiboot +Specification: (multiboot)Top. + + The other goals, listed in approximate order of importance, are: + + * Basic functions must be straightforward for end-users. + + * Rich functionality to support kernel experts and designers. + + * Backward compatibility for booting FreeBSD, NetBSD, OpenBSD, and + Linux. Proprietary kernels (such as DOS, Windows NT, and OS/2) are + supported via a chain-loading function. + + Except for specific compatibility modes (chain-loading and the Linux +"piggyback" format), all kernels will be started in much the same state +as in the Multiboot Specification. Only kernels loaded at 1 megabyte or +above are presently supported. Any attempt to load below that boundary +will simply result in immediate failure and an error message reporting +the problem. + + In addition to the requirements above, GRUB has the following +features (note that the Multiboot Specification doesn't require all the +features that GRUB supports): + +Recognize multiple executable formats + Support many of the "a.out" variants plus "ELF". Symbol tables are + also loaded. + +Support non-Multiboot kernels + Support many of the various free 32-bit kernels that lack Multiboot + compliance (primarily FreeBSD, NetBSD, OpenBSD, and Linux). + Chain-loading of other boot loaders is also supported. + +Load multiples modules + Fully support the Multiboot feature of loading multiple modules. + +Load a configuration file + Support a human-readable text configuration file with preset boot + commands. You can also load another configuration file dynamically + and embed a preset configuration file in a GRUB image file. The + list of commands (*note Commands::) are a superset of those + supported on the command-line. An example configuration file is + provided in *Note Configuration::. + +Provide a menu interface + A menu interface listing preset boot commands, with a programmable + timeout, is available. There is no fixed limit on the number of + boot entries, and the current implementation has space for several + hundred. + +Have a flexible command-line interface + A fairly flexible command-line interface, accessible from the menu, + is available to edit any preset commands, or write a new boot + command set from scratch. If no configuration file is present, + GRUB drops to the command-line. + + The list of commands (*note Commands::) are a subset of those + supported for configuration files. Editing commands closely + resembles the Bash command-line (*note Bash: (features)Command + Line Editing.), with -completion of commands, devices, + partitions, and files in a directory depending on context. + +Support multiple filesystem types + Support multiple filesystem types transparently, plus a useful + explicit blocklist notation. The currently supported filesystem + types are "BSD FFS", "DOS FAT16 and FAT32", "Minix fs", "Linux + ext2fs", "ReiserFS", "JFS", "XFS", and "VSTa fs". *Note + Filesystem::, for more information. + +Support automatic decompression + Can decompress files which were compressed by `gzip'. This + function is both automatic and transparent to the user (i.e. all + functions operate upon the uncompressed contents of the specified + files). This greatly reduces a file size and loading time, a + particularly great benefit for floppies.(1) (*note + Features-Footnote-1::) + + It is conceivable that some kernel modules should be loaded in a + compressed state, so a different module-loading command can be + specified to avoid uncompressing the modules. + +Access data on any installed device + Support reading data from any or all floppies or hard disk(s) + recognized by the BIOS, independent of the setting of the root + device. + +Be independent of drive geometry translations + Unlike many other boot loaders, GRUB makes the particular drive + translation irrelevant. A drive installed and running with one + translation may be converted to another translation without any + adverse effects or changes in GRUB's configuration. + +Detect all installed RAM + GRUB can generally find all the installed RAM on a PC-compatible + machine. It uses an advanced BIOS query technique for finding all + memory regions. As described on the Multiboot Specification (*note + Multiboot Specification: (multiboot)Top.), not all kernels make + use of this information, but GRUB provides it for those who do. + +Support Logical Block Address mode + In traditional disk calls (called "CHS mode"), there is a geometry + translation problem, that is, the BIOS cannot access over 1024 + cylinders, so the accessible space is limited to at least 508 MB + and to at most 8GB. GRUB can't universally solve this problem, as + there is no standard interface used in all machines. However, + several newer machines have the new interface, Logical Block + Address ("LBA") mode. GRUB automatically detects if LBA mode is + available and uses it if available. In LBA mode, GRUB can access + the entire disk. + +Support network booting + GRUB is basically a disk-based boot loader but also has network + support. You can load OS images from a network by using the "TFTP" + protocol. + +Support remote terminals + To support computers with no console, GRUB provides remote terminal + support, so that you can control GRUB from a remote host. Only + serial terminal support is implemented at the moment. + + (1) There are a few pathological cases where loading a very badly +organized ELF kernel might take longer, but in practice this never +happen. + +1.4 The role of a boot loader +============================= + +The following is a quotation from Gordon Matzigkeit, a GRUB fanatic: + + Some people like to acknowledge both the operating system and + kernel when they talk about their computers, so they might say + they use "GNU/Linux" or "GNU/Hurd". Other people seem to think + that the kernel is the most important part of the system, so they + like to call their GNU operating systems "Linux systems." + + I, personally, believe that this is a grave injustice, because the + _boot loader_ is the most important software of all. I used to + refer to the above systems as either "LILO"(1) (*note Role of a + boot loader-Footnote-1::) or "GRUB" systems. + + Unfortunately, nobody ever understood what I was talking about; + now I just use the word "GNU" as a pseudonym for GRUB. + + So, if you ever hear people talking about their alleged "GNU" + systems, remember that they are actually paying homage to the best + boot loader around... GRUB! + + We, the GRUB maintainers, do not (usually) encourage Gordon's level +of fanaticism, but it helps to remember that boot loaders deserve +recognition. We hope that you enjoy using GNU GRUB as much as we did +writing it. + + (1) The LInux LOader, a boot loader that everybody uses, but nobody +likes. + +2 Naming convention +******************* + +The device syntax used in GRUB is a wee bit different from what you may +have seen before in your operating system(s), and you need to know it so +that you can specify a drive/partition. + + Look at the following examples and explanations: + + (fd0) + + First of all, GRUB requires that the device name be enclosed with +`(' and `)'. The `fd' part means that it is a floppy disk. The number +`0' is the drive number, which is counted from _zero_. This expression +means that GRUB will use the whole floppy disk. + + (hd0,1) + + Here, `hd' means it is a hard disk drive. The first integer `0' +indicates the drive number, that is, the first hard disk, while the +second integer, `1', indicates the partition number (or the PC slice +number in the BSD terminology). Once again, please note that the +partition numbers are counted from _zero_, not from one. This +expression means the second partition of the first hard disk drive. In +this case, GRUB uses one partition of the disk, instead of the whole +disk. + + (hd0,4) + + This specifies the first "extended partition" of the first hard disk +drive. Note that the partition numbers for extended partitions are +counted from `4', regardless of the actual number of primary partitions +on your hard disk. + + (hd1,a) + + This means the BSD `a' partition of the second hard disk. If you +need to specify which PC slice number should be used, use something +like this: `(hd1,0,a)'. If the PC slice number is omitted, GRUB +searches for the first PC slice which has a BSD `a' partition. + + Of course, to actually access the disks or partitions with GRUB, you +need to use the device specification in a command, like `root (fd0)' or +`unhide (hd0,2)'. To help you find out which number specifies a +partition you want, the GRUB command-line (*note Command-line +interface::) options have argument completion. This means that, for +example, you only need to type + + root ( + + followed by a , and GRUB will display the list of drives, +partitions, or file names. So it should be quite easy to determine the +name of your target partition, even with minimal knowledge of the +syntax. + + Note that GRUB does _not_ distinguish IDE from SCSI - it simply +counts the drive numbers from zero, regardless of their type. Normally, +any IDE drive number is less than any SCSI drive number, although that +is not true if you change the boot sequence by swapping IDE and SCSI +drives in your BIOS. + + Now the question is, how to specify a file? Again, consider an +example: + + (hd0,0)/vmlinuz + + This specifies the file named `vmlinuz', found on the first +partition of the first hard disk drive. Note that the argument +completion works with file names, too. + + That was easy, admit it. Now read the next chapter, to find out how +to actually install GRUB on your drive. + +3 Installation +************** + +In order to install GRUB as your boot loader, you need to first install +the GRUB system and utilities under your UNIX-like operating system +(*note Obtaining and Building GRUB::). You can do this either from the +source tarball, or as a package for your OS. + + After you have done that, you need to install the boot loader on a +drive (floppy or hard disk). There are two ways of doing that - either +using the utility `grub-install' (*note Invoking grub-install::) on a +UNIX-like OS, or by running GRUB itself from a floppy. These are quite +similar, however the utility might probe a wrong BIOS drive, so you +should be careful. + + Also, if you install GRUB on a UNIX-like OS, please make sure that +you have an emergency boot disk ready, so that you can rescue your +computer if, by any chance, your hard drive becomes unusable +(unbootable). + + GRUB comes with boot images, which are normally put in the directory +`/usr/lib/grub/i386-pc'. If you do not use grub-install, then you need +to copy the files `stage1', `stage2', and `*stage1_5' to the directory +`/boot/grub', and run the `grub-set-default' (*note Invoking +grub-set-default::) if you intend to use `default saved' (*note +default::) in your configuration file. Hereafter, the directory where +GRUB images are initially placed (normally `/usr/lib/grub/i386-pc') +will be called the "image directory", and the directory where the boot +loader needs to find them (usually `/boot/grub') will be called the +"boot directory". + +3.1 Creating a GRUB boot floppy +=============================== + +To create a GRUB boot floppy, you need to take the files `stage1' and +`stage2' from the image directory, and write them to the first and the +second block of the floppy disk, respectively. + + *Caution:* This procedure will destroy any data currently stored on +the floppy. + + On a UNIX-like operating system, that is done with the following +commands: + + # cd /usr/lib/grub/i386-pc + # dd if=stage1 of=/dev/fd0 bs=512 count=1 + 1+0 records in + 1+0 records out + # dd if=stage2 of=/dev/fd0 bs=512 seek=1 + 153+1 records in + 153+1 records out + # + + The device file name may be different. Consult the manual for your +OS. + +3.2 Installing GRUB natively +============================ + +*Caution:* Installing GRUB's stage1 in this manner will erase the +normal boot-sector used by an OS. + + GRUB can currently boot GNU Mach, Linux, FreeBSD, NetBSD, and OpenBSD +directly, so using it on a boot sector (the first sector of a +partition) should be okay. But generally, it would be a good idea to +back up the first sector of the partition on which you are installing +GRUB's stage1. This isn't as important if you are installing GRUB on +the first sector of a hard disk, since it's easy to reinitialize it +(e.g. by running `FDISK /MBR' from DOS). + + If you decide to install GRUB in the native environment, which is +definitely desirable, you'll need to create a GRUB boot disk, and +reboot your computer with it. Otherwise, see *Note Installing GRUB +using grub-install::. + + Once started, GRUB will show the command-line interface (*note +Command-line interface::). First, set the GRUB's "root device"(1) +(*note Installing GRUB natively-Footnote-1::) to the partition +containing the boot directory, like this: + + grub> root (hd0,0) + + If you are not sure which partition actually holds this directory, +use the command `find' (*note find::), like this: + + grub> find /boot/grub/stage1 + + This will search for the file name `/boot/grub/stage1' and show the +devices which contain the file. + + Once you've set the root device correctly, run the command `setup' +(*note setup::): + + grub> setup (hd0) + + This command will install the GRUB boot loader on the Master Boot +Record (MBR) of the first drive. If you want to put GRUB into the boot +sector of a partition instead of putting it in the MBR, specify the +partition into which you want to install GRUB: + + grub> setup (hd0,0) + + If you install GRUB into a partition or a drive other than the first +one, you must chain-load GRUB from another boot loader. Refer to the +manual for the boot loader to know how to chain-load GRUB. + + After using the setup command, you will boot into GRUB without the +GRUB floppy. See the chapter *Note Booting:: to find out how to boot +your operating systems from GRUB. + + (1) Note that GRUB's root device doesn't necessarily mean your OS's +root partition; if you need to specify a root partition for your OS, +add the argument into the command `kernel'. + +3.3 Installing GRUB using grub-install +====================================== + +*Caution:* This procedure is definitely less safe, because there are +several ways in which your computer can become unbootable. For example, +most operating systems don't tell GRUB how to map BIOS drives to OS +devices correctly--GRUB merely "guesses" the mapping. This will succeed +in most cases, but not always. Therefore, GRUB provides you with a map +file called the "device map", which you must fix if it is wrong. *Note +Device map::, for more details. + + If you still do want to install GRUB under a UNIX-like OS (such as +GNU), invoke the program `grub-install' (*note Invoking grub-install::) +as the superuser ("root"). + + The usage is basically very simple. You only need to specify one +argument to the program, namely, where to install the boot loader. The +argument can be either a device file (like `/dev/hda') or a partition +specified in GRUB's notation. For example, under Linux the following +will install GRUB into the MBR of the first IDE disk: + + # grub-install /dev/hda + + Likewise, under GNU/Hurd, this has the same effect: + + # grub-install /dev/hd0 + + If it is the first BIOS drive, this is the same as well: + + # grub-install '(hd0)' + + Or you can omit the parentheses: + + # grub-install hd0 + + But all the above examples assume that GRUB should use images under +the root directory. If you want GRUB to use images under a directory +other than the root directory, you need to specify the option +`--root-directory'. The typical usage is that you create a GRUB boot +floppy with a filesystem. Here is an example: + + # mke2fs /dev/fd0 + # mount -t ext2 /dev/fd0 /mnt + # grub-install --root-directory=/mnt fd0 + # umount /mnt + + Another example is when you have a separate boot partition which is +mounted at `/boot'. Since GRUB is a boot loader, it doesn't know +anything about mountpoints at all. Thus, you need to run `grub-install' +like this: + + # grub-install --root-directory=/boot /dev/hda + + By the way, as noted above, it is quite difficult to guess BIOS +drives correctly under a UNIX-like OS. Thus, `grub-install' will prompt +you to check if it could really guess the correct mappings, after the +installation. The format is defined in *Note Device map::. Please be +quite careful. If the output is wrong, it is unlikely that your +computer will be able to boot with no problem. + + Note that `grub-install' is actually just a shell script and the +real task is done by the grub shell `grub' (*note Invoking the grub +shell::). Therefore, you may run `grub' directly to install GRUB, +without using `grub-install'. Don't do that, however, unless you are +very familiar with the internals of GRUB. Installing a boot loader on a +running OS may be extremely dangerous. + +3.4 Making a GRUB bootable CD-ROM +================================= + +GRUB supports the "no emulation mode" in the El Torito specification(1) +(*note Making a GRUB bootable CD-ROM-Footnote-1::). This means that you +can use the whole CD-ROM from GRUB and you don't have to make a floppy +or hard disk image file, which can cause compatibility problems. + + For booting from a CD-ROM, GRUB uses a special Stage 2 called +`stage2_eltorito'. The only GRUB files you need to have in your +bootable CD-ROM are this `stage2_eltorito' and optionally a config file +`menu.lst'. You don't need to use `stage1' or `stage2', because El +Torito is quite different from the standard boot process. + + Here is an example of procedures to make a bootable CD-ROM image. +First, make a top directory for the bootable image, say, `iso': + + $ mkdir iso + + Make a directory for GRUB: + + $ mkdir -p iso/boot/grub + + Copy the file `stage2_eltorito': + + $ cp /usr/lib/grub/i386-pc/stage2_eltorito iso/boot/grub + + If desired, make the config file `menu.lst' under `iso/boot/grub' +(*note Configuration::), and copy any files and directories for the +disc to the directory `iso/'. + + Finally, make a ISO9660 image file like this: + + $ mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot \ + -boot-load-size 4 -boot-info-table -o grub.iso iso + + This produces a file named `grub.iso', which then can be burned into +a CD (or a DVD). `mkisofs' has already set up the disc to boot from +the `boot/grub/stage2_eltorito' file, so there is no need to setup GRUB +on the disc. (Note that the `-boot-load-size 4' bit is required for +compatibility with the BIOS on many older machines.) + + You can use the device `(cd)' to access a CD-ROM in your config +file. This is not required; GRUB automatically sets the root device to +`(cd)' when booted from a CD-ROM. It is only necessary to refer to +`(cd)' if you want to access other drives as well. + + (1) El Torito is a specification for bootable CD using BIOS +functions. + +4 Booting +********* + +GRUB can load Multiboot-compliant kernels in a consistent way, but for +some free operating systems you need to use some OS-specific magic. + +4.1 How to boot operating systems +================================= + +GRUB has two distinct boot methods. One of the two is to load an +operating system directly, and the other is to chain-load another boot +loader which then will load an operating system actually. Generally +speaking, the former is more desirable, because you don't need to +install or maintain other boot loaders and GRUB is flexible enough to +load an operating system from an arbitrary disk/partition. However, the +latter is sometimes required, since GRUB doesn't support all the +existing operating systems natively. + +4.1.1 How to boot an OS directly with GRUB +------------------------------------------ + +Multiboot (*note Multiboot Specification: (multiboot)Top.) is the +native format supported by GRUB. For the sake of convenience, there is +also support for Linux, FreeBSD, NetBSD and OpenBSD. If you want to +boot other operating systems, you will have to chain-load them (*note +Chain-loading::). + + Generally, GRUB can boot any Multiboot-compliant OS in the following +steps: + + 1. Set GRUB's root device to the drive where the OS images are stored + with the command `root' (*note root::). + + 2. Load the kernel image with the command `kernel' (*note kernel::). + + 3. If you need modules, load them with the command `module' (*note + module::) or `modulenounzip' (*note modulenounzip::). + + 4. Run the command `boot' (*note boot::). + + Linux, FreeBSD, NetBSD and OpenBSD can be booted in a similar +manner. You load a kernel image with the command `kernel' and then run +the command `boot'. If the kernel requires some parameters, just append +the parameters to `kernel', after the file name of the kernel. Also, +please refer to *Note OS-specific notes::, for information on your +OS-specific issues. + +4.1.2 Load another boot loader to boot unsupported operating systems +-------------------------------------------------------------------- + +If you want to boot an unsupported operating system (e.g. Windows 95), +chain-load a boot loader for the operating system. Normally, the boot +loader is embedded in the "boot sector" of the partition on which the +operating system is installed. + + 1. Set GRUB's root device to the partition by the command + `rootnoverify' (*note rootnoverify::): + + grub> rootnoverify (hd0,0) + + 2. Set the "active" flag in the partition using the command + `makeactive'(1) (*note Chain-loading-Footnote-1::) (*note + makeactive::): + + grub> makeactive + + 3. Load the boot loader with the command `chainloader' (*note + chainloader::): + + grub> chainloader +1 + + `+1' indicates that GRUB should read one sector from the start of + the partition. The complete description about this syntax can be + found in *Note Block list syntax::. + + 4. Run the command `boot' (*note boot::). + + However, DOS and Windows have some deficiencies, so you might have to +use more complicated instructions. *Note DOS/Windows::, for more +information. + + (1) This is not necessary for most of the modern operating systems. + +4.2 Some caveats on OS-specific issues +====================================== + +Here, we describe some caveats on several operating systems. + +4.2.1 GNU/Hurd +-------------- + +Since GNU/Hurd is Multiboot-compliant, it is easy to boot it; there is +nothing special about it. But do not forget that you have to specify a +root partition to the kernel. + + 1. Set GRUB's root device to the same drive as GNU/Hurd's. Probably + the command `find /boot/gnumach' or similar can help you (*note + find::). + + 2. Load the kernel and the module, like this: + + grub> kernel /boot/gnumach root=hd0s1 + grub> module /boot/serverboot + + 3. Run the command `boot' (*note boot::). + +4.2.2 GNU/Linux +--------------- + +It is relatively easy to boot GNU/Linux from GRUB, because it somewhat +resembles to boot a Multiboot-compliant OS. + + 1. Set GRUB's root device to the same drive as GNU/Linux's. Probably + the command `find /vmlinuz' or similar can help you (*note find::). + + 2. Load the kernel: + + grub> kernel /vmlinuz root=/dev/hda1 + + If you need to specify some kernel parameters, just append them to + the command. For example, to set `vga' to `ext', do this: + + grub> kernel /vmlinuz root=/dev/hda1 vga=ext + + See the documentation in the Linux source tree for complete + information on the available options. + + 3. If you use an initrd, execute the command `initrd' (*note + initrd::) after `kernel': + + grub> initrd /initrd + + 4. Finally, run the command `boot' (*note boot::). + + *Caution:* If you use an initrd and specify the `mem=' option to the +kernel to let it use less than actual memory size, you will also have +to specify the same memory size to GRUB. To let GRUB know the size, run +the command `uppermem' _before_ loading the kernel. *Note uppermem::, +for more information. + +4.2.3 FreeBSD +------------- + +GRUB can load the kernel directly, either in ELF or a.out format. But +this is not recommended, since FreeBSD's bootstrap interface sometimes +changes heavily, so GRUB can't guarantee to pass kernel parameters +correctly. + + Thus, we'd recommend loading the very flexible loader `/boot/loader' +instead. See this example: + + grub> root (hd0,a) + grub> kernel /boot/loader + grub> boot + +4.2.4 NetBSD +------------ + +GRUB can load NetBSD a.out and ELF directly, follow these steps: + + 1. Set GRUB's root device with `root' (*note root::). + + 2. Load the kernel with `kernel' (*note kernel::). You should append + the ugly option `--type=netbsd', if you want to load an ELF + kernel, like this: + + grub> kernel --type=netbsd /netbsd-elf + + 3. Run `boot' (*note boot::). + + For now, however, GRUB doesn't allow you to pass kernel parameters, +so it may be better to chain-load it instead. For more information, +please see *Note Chain-loading::. + +4.2.5 OpenBSD +------------- + +The booting instruction is exactly the same as for NetBSD (*note +NetBSD::). + +4.2.6 DOS/Windows +----------------- + +GRUB cannot boot DOS or Windows directly, so you must chain-load them +(*note Chain-loading::). However, their boot loaders have some critical +deficiencies, so it may not work to just chain-load them. To overcome +the problems, GRUB provides you with two helper functions. + + If you have installed DOS (or Windows) on a non-first hard disk, you +have to use the disk swapping technique, because that OS cannot boot +from any disks but the first one. The workaround used in GRUB is the +command `map' (*note map::), like this: + + grub> map (hd0) (hd1) + grub> map (hd1) (hd0) + + This performs a "virtual" swap between your first and second hard +drive. + + *Caution:* This is effective only if DOS (or Windows) uses BIOS to +access the swapped disks. If that OS uses a special driver for the +disks, this probably won't work. + + Another problem arises if you installed more than one set of +DOS/Windows onto one disk, because they could be confused if there are +more than one primary partitions for DOS/Windows. Certainly you should +avoid doing this, but there is a solution if you do want to do so. Use +the partition hiding/unhiding technique. + + If GRUB "hide"s a DOS (or Windows) partition (*note hide::), DOS (or +Windows) will ignore the partition. If GRUB "unhide"s a DOS (or +Windows) partition (*note unhide::), DOS (or Windows) will detect the +partition. Thus, if you have installed DOS (or Windows) on the first +and the second partition of the first hard disk, and you want to boot +the copy on the first partition, do the following: + + grub> unhide (hd0,0) + grub> hide (hd0,1) + grub> rootnoverify (hd0,0) + grub> chainloader +1 + grub> makeactive + grub> boot + +4.2.7 SCO UnixWare +------------------ + +It is known that the signature in the boot loader for SCO UnixWare is +wrong, so you will have to specify the option `--force' to +`chainloader' (*note chainloader::), like this: + + grub> rootnoverify (hd1,0) + grub> chainloader --force +1 + grub> makeactive + grub> boot + +4.2.8 QNX +--------- + +QNX seems to use a bigger boot loader, so you need to boot it up, like +this: + + grub> rootnoverify (hd1,1) + grub> chainloader +4 + grub> boot + +4.3 How to make your system robust +================================== + +When you test a new kernel or a new OS, it is important to make sure +that your computer can boot even if the new system is unbootable. This +is crucial especially if you maintain servers or remote systems. To +accomplish this goal, you need to set up two things: + + 1. You must maintain a system which is always bootable. For instance, + if you test a new kernel, you need to keep a working kernel in a + different place. And, it would sometimes be very nice to even have + a complete copy of a working system in a different partition or + disk. + + 2. You must direct GRUB to boot a working system when the new system + fails. This is possible with the "fallback" system in GRUB. + + The former requirement is very specific to each OS, so this +documentation does not cover that topic. It is better to consult some +backup tools. + + So let's see the GRUB part. There are two possibilities: one of them +is quite simple but not very robust, and the other is a bit complex to +set up but probably the best solution to make sure that your system can +start as long as GRUB itself is bootable. + +4.3.1 Booting once-only +----------------------- + +You can teach GRUB to boot an entry only at next boot time. Suppose +that your have an old kernel `old_kernel' and a new kernel +`new_kernel'. You know that `old_kernel' can boot your system +correctly, and you want to test `new_kernel'. + + To ensure that your system will go back to the old kernel even if the +new kernel fails (e.g. it panics), you can specify that GRUB should try +the new kernel only once and boot the old kernel after that. + + First, modify your configuration file. Here is an example: + + default saved # This is important!!! + timeout 10 + + title the old kernel + root (hd0,0) + kernel /old_kernel + savedefault + + title the new kernel + root (hd0,0) + kernel /new_kernel + savedefault 0 # This is important!!! + + Note that this configuration file uses `default saved' (*note +default::) at the head and `savedefault 0' (*note savedefault::) in the +entry for the new kernel. This means that GRUB boots a saved entry by +default, and booting the entry for the new kernel saves `0' as the +saved entry. + + With this configuration file, after all, GRUB always tries to boot +the old kernel after it booted the new one, because `0' is the entry of +`the old kernel'. + + The next step is to tell GRUB to boot the new kernel at next boot +time. For this, execute `grub-set-default' (*note Invoking +grub-set-default::): + + # grub-set-default 1 + + This command sets the saved entry to `1', that is, to the new kernel. + + This method is useful, but still not very robust, because GRUB stops +booting, if there is any error in the boot entry, such that the new +kernel has an invalid executable format. Thus, it it even better to use +the "fallback" mechanism of GRUB. Look at next subsection for this +feature. + +4.3.2 Booting fallback systems +------------------------------ + +GRUB supports a fallback mechanism of booting one or more other entries +if a default boot entry fails. You can specify multiple fallback +entries if you wish. + + Suppose that you have three systems, `A', `B' and `C'. `A' is a +system which you want to boot by default. `B' is a backup system which +is supposed to boot safely. `C' is another backup system which is used +in case where `B' is broken. + + Then you may want GRUB to boot the first system which is bootable +among `A', `B' and `C'. A configuration file can be written in this way: + + default saved # This is important!!! + timeout 10 + fallback 1 2 # This is important!!! + + title A + root (hd0,0) + kernel /kernel + savedefault fallback # This is important!!! + + title B + root (hd1,0) + kernel /kernel + savedefault fallback # This is important!!! + + title C + root (hd2,0) + kernel /kernel + savedefault + + Note that `default saved' (*note default::), `fallback 1 2' and +`savedefault fallback' are used. GRUB will boot a saved entry by +default and save a fallback entry as next boot entry with this +configuration. + + When GRUB tries to boot `A', GRUB saves `1' as next boot entry, +because the command `fallback' specifies that `1' is the first fallback +entry. The entry `1' is `B', so GRUB will try to boot `B' at next boot +time. + + Likewise, when GRUB tries to boot `B', GRUB saves `2' as next boot +entry, because `fallback' specifies `2' as next fallback entry. This +makes sure that GRUB will boot `C' after booting `B'. + + It is noteworthy that GRUB uses fallback entries both when GRUB +itself fails in booting an entry and when `A' or `B' fails in starting +up your system. So this solution ensures that your system is started +even if GRUB cannot find your kernel or if your kernel panics. + + However, you need to run `grub-set-default' (*note Invoking +grub-set-default::) when `A' starts correctly or you fix `A' after it +crashes, since GRUB always sets next boot entry to a fallback entry. +You should run this command in a startup script such as `rc.local' to +boot `A' by default: + + # grub-set-default 0 + + where `0' is the number of the boot entry for the system `A'. + + If you want to see what is current default entry, you can look at the +file `/boot/grub/default' (or `/grub/default' in some systems). Because +this file is plain-text, you can just `cat' this file. But it is +strongly recommended *not to modify this file directly*, because GRUB +may fail in saving a default entry in this file, if you change this +file in an unintended manner. Therefore, you should use +`grub-set-default' when you need to change the default entry. + +5 Configuration +*************** + +You've probably noticed that you need to type several commands to boot +your OS. There's a solution to that - GRUB provides a menu interface +(*note Menu interface::) from which you can select an item (using arrow +keys) that will do everything to boot an OS. + + To enable the menu, you need a configuration file, `menu.lst' under +the boot directory. We'll analyze an example file. + + The file first contains some general settings, the menu interface +related options. You can put these commands (*note Menu-specific +commands::) before any of the items (starting with `title' (*note +title::)). + + # + # Sample boot menu configuration file + # + + As you may have guessed, these lines are comments. Lines starting +with a hash character (`#'), and blank lines, are ignored by GRUB. + + # By default, boot the first entry. + default 0 + + The first entry (here, counting starts with number zero, not one!) +will be the default choice. + + # Boot automatically after 30 secs. + timeout 30 + + As the comment says, GRUB will boot automatically in 30 seconds, +unless interrupted with a keypress. + + # Fallback to the second entry. + fallback 1 + + If, for any reason, the default entry doesn't work, fall back to the +second one (this is rarely used, for obvious reasons). + + Note that the complete descriptions of these commands, which are menu +interface specific, can be found in *Note Menu-specific commands::. +Other descriptions can be found in *Note Commands::. + + Now, on to the actual OS definitions. You will see that each entry +begins with a special command, `title' (*note title::), and the action +is described after it. Note that there is no command `boot' (*note +boot::) at the end of each item. That is because GRUB automatically +executes `boot' if it loads other commands successfully. + + The argument for the command `title' is used to display a short +title/description of the entry in the menu. Since `title' displays the +argument as is, you can write basically anything there. + + # For booting GNU/Hurd + title GNU/Hurd + root (hd0,0) + kernel /boot/gnumach.gz root=hd0s1 + module /boot/serverboot.gz + + This boots GNU/Hurd from the first hard disk. + + # For booting GNU/Linux + title GNU/Linux + kernel (hd1,0)/vmlinuz root=/dev/hdb1 + + This boots GNU/Linux, but from the second hard disk. + + # For booting Mach (getting kernel from floppy) + title Utah Mach4 multiboot + root (hd0,2) + pause Insert the diskette now^G!! + kernel (fd0)/boot/kernel root=hd0s3 + module (fd0)/boot/bootstrap + + This boots Mach with a kernel on a floppy, but the root filesystem at +hd0s3. It also contains a `pause' line (*note pause::), which will +cause GRUB to display a prompt and delay, before actually executing the +rest of the commands and booting. + + # For booting FreeBSD + title FreeBSD + root (hd0,2,a) + kernel /boot/loader + + This item will boot FreeBSD kernel loaded from the `a' partition of +the third PC slice of the first hard disk. + + # For booting OS/2 + title OS/2 + root (hd0,1) + makeactive + # chainload OS/2 bootloader from the first sector + chainloader +1 + # This is similar to "chainload", but loads a specific file + #chainloader /boot/chain.os2 + + This will boot OS/2, using a chain-loader (*note Chain-loading::). + + # For booting Windows NT or Windows95 + title Windows NT / Windows 95 boot menu + root (hd0,0) + makeactive + chainloader +1 + # For loading DOS if Windows NT is installed + # chainload /bootsect.dos + + The same as the above, but for Windows. + + # For installing GRUB into the hard disk + title Install GRUB into the hard disk + root (hd0,0) + setup (hd0) + + This will just (re)install GRUB onto the hard disk. + + # Change the colors. + title Change the colors + color light-green/brown blink-red/blue + + In the last entry, the command `color' is used (*note color::), to +change the menu colors (try it!). This command is somewhat special, +because it can be used both in the command-line and in the menu. GRUB +has several such commands, see *Note General commands::. + + We hope that you now understand how to use the basic features of +GRUB. To learn more about GRUB, see the following chapters. + +6 Downloading OS images from a network +************************************** + +Although GRUB is a disk-based boot loader, it does provide network +support. To use the network support, you need to enable at least one +network driver in the GRUB build process. For more information please +see `netboot/README.netboot' in the source distribution. + +6.1 How to set up your network +============================== + +GRUB requires a file server and optionally a server that will assign an +IP address to the machine on which GRUB is running. For the former, only +TFTP is supported at the moment. The latter is either BOOTP, DHCP or a +RARP server(1) (*note General usage of network support-Footnote-1::). +It is not necessary to run both the servers on one computer. How to +configure these servers is beyond the scope of this document, so please +refer to the manuals specific to those protocols/servers. + + If you decided to use a server to assign an IP address, set up the +server and run `bootp' (*note bootp::), `dhcp' (*note dhcp::) or `rarp' +(*note rarp::) for BOOTP, DHCP or RARP, respectively. Each command will +show an assigned IP address, a netmask, an IP address for your TFTP +server and a gateway. If any of the addresses is wrong or it causes an +error, probably the configuration of your servers isn't set up properly. + + Otherwise, run `ifconfig', like this: + + grub> ifconfig --address=192.168.110.23 --server=192.168.110.14 + + You can also use `ifconfig' in conjuction with `bootp', `dhcp' or +`rarp' (e.g. to reassign the server address manually). *Note +ifconfig::, for more details. + + Finally, download your OS images from your network. The network can +be accessed using the network drive `(nd)'. Everything else is very +similar to the normal instructions (*note Booting::). + + Here is an example: + + grub> bootp + Probing... [NE*000] + NE2000 base ... + Address: 192.168.110.23 Netmask: 255.255.255.0 + Server: 192.168.110.14 Gateway: 192.168.110.1 + + grub> root (nd) + grub> kernel /tftproot/gnumach.gz root=sd0s1 + grub> module /tftproot/serverboot.gz + grub> boot + + (1) RARP is not advised, since it cannot serve much information + +6.2 Booting from a network +========================== + +It is sometimes very useful to boot from a network, especially when you +use a machine which has no local disk. In this case, you need to obtain +a kind of Net Boot ROM, such as a PXE ROM or a free software package +like Etherboot. Such a Boot ROM first boots the machine, sets up the +network card installed into the machine, and downloads a second stage +boot image from the network. Then, the second image will try to boot an +operating system actually from the network. + + GRUB provides two second stage images, `nbgrub' and `pxegrub' (*note +Images::). These images are the same as the normal Stage 2, except that +they set up a network automatically, and try to load a configuration +file from the network, if specified. The usage is very simple: If the +machine has a PXE ROM, use `pxegrub'. If the machine has an NBI loader +such as Etherboot, use `nbgrub'. There is no difference between them +except their formats. Since the way to load a second stage image you +want to use should be described in the manual on your Net Boot ROM, +please refer to the manual, for more information. + + However, there is one thing specific to GRUB. Namely, how to specify +a configuration file in a BOOTP/DHCP server. For now, GRUB uses the tag +`150', to get the name of a configuration file. The following is an +example with a BOOTP configuration: + + .allhost:hd=/tmp:bf=null:\ + :ds=145.71.35.1 145.71.32.1:\ + :sm=255.255.254.0:\ + :gw=145.71.35.1:\ + :sa=145.71.35.5: + + foo:ht=1:ha=63655d0334a7:ip=145.71.35.127:\ + :bf=/nbgrub:\ + :tc=.allhost:\ + :T150="(nd)/tftpboot/menu.lst.foo": + + Note that you should specify the drive name `(nd)' in the name of +the configuration file. This is because you might change the root drive +before downloading the configuration from the TFTP server when the +preset menu feature is used (*note Preset Menu::). + + See the manual of your BOOTP/DHCP server for more information. The +exact syntax should differ a little from the example. + +7 Using GRUB via a serial line +****************************** + +This chapter describes how to use the serial terminal support in GRUB. + + If you have many computers or computers with no display/keyboard, it +could be very useful to control the computers through serial +communications. To connect one computer with another via a serial line, +you need to prepare a null-modem (cross) serial cable, and you may need +to have multiport serial boards, if your computer doesn't have extra +serial ports. In addition, a terminal emulator is also required, such as +minicom. Refer to a manual of your operating system, for more +information. + + As for GRUB, the instruction to set up a serial terminal is quite +simple. First of all, make sure that you haven't specified the option +`--disable-serial' to the configure script when you built your GRUB +images. If you get them in binary form, probably they have serial +terminal support already. + + Then, initialize your serial terminal after GRUB starts up. Here is +an example: + + grub> serial --unit=0 --speed=9600 + grub> terminal serial + + The command `serial' initializes the serial unit 0 with the speed +9600bps. The serial unit 0 is usually called `COM1', so, if you want to +use COM2, you must specify `--unit=1' instead. This command accepts +many other options, so please refer to *Note serial::, for more details. + + The command `terminal' (*note terminal::) chooses which type of +terminal you want to use. In the case above, the terminal will be a +serial terminal, but you can also pass `console' to the command, as +`terminal serial console'. In this case, a terminal in which you press +any key will be selected as a GRUB terminal. + + However, note that GRUB assumes that your terminal emulator is +compatible with VT100 by default. This is true for most terminal +emulators nowadays, but you should pass the option `--dumb' to the +command if your terminal emulator is not VT100-compatible or implements +few VT100 escape sequences. If you specify this option then GRUB +provides you with an alternative menu interface, because the normal +menu requires several fancy features of your terminal. + +8 Embedding a configuration file into GRUB +****************************************** + +GRUB supports a "preset menu" which is to be always loaded before +starting. The preset menu feature is useful, for example, when your +computer has no console but a serial cable. In this case, it is +critical to set up the serial terminal as soon as possible, since you +cannot see any message until the serial terminal begins to work. So it +is good to run the commands `serial' (*note serial::) and `terminal' +(*note terminal::) before anything else at the start-up time. + + How the preset menu works is slightly complicated: + + 1. GRUB checks if the preset menu feature is used, and loads the + preset menu, if available. This includes running commands and + reading boot entries, like an ordinary configuration file. + + 2. GRUB checks if the configuration file is available. Note that this + check is performed *regardless of the existence of the preset + menu*. The configuration file is loaded even if the preset menu was + loaded. + + 3. If the preset menu includes any boot entries, they are cleared when + the configuration file is loaded. It doesn't matter whether the + configuration file has any entries or no entry. The boot entries + in the preset menu are used only when GRUB fails in loading the + configuration file. + + To enable the preset menu feature, you must rebuild GRUB specifying a +file to the configure script with the option `--enable-preset-menu'. +The file has the same semantics as normal configuration files (*note +Configuration::). + + Another point you should take care is that the diskless support +(*note Diskless::) diverts the preset menu. Diskless images embed a +preset menu to execute the command `bootp' (*note bootp::) +automatically, unless you specify your own preset menu to the configure +script. This means that you must put commands to initialize a network in +the preset menu yourself, because diskless images don't set it up +implicitly, when you use the preset menu explicitly. + + Therefore, a typical preset menu used with diskless support would be +like this: + + # Set up the serial terminal, first of all. + serial --unit=0 --speed=19200 + terminal --timeout=0 serial + + # Initialize the network. + dhcp + +9 Protecting your computer from cracking +**************************************** + +You may be interested in how to prevent ordinary users from doing +whatever they like, if you share your computer with other people. So +this chapter describes how to improve the security of GRUB. + + One thing which could be a security hole is that the user can do too +many things with GRUB, because GRUB allows one to modify its +configuration and run arbitrary commands at run-time. For example, the +user can even read `/etc/passwd' in the command-line interface by the +command `cat' (*note cat::). So it is necessary to disable all the +interactive operations. + + Thus, GRUB provides a "password" feature, so that only administrators +can start the interactive operations (i.e. editing menu entries and +entering the command-line interface). To use this feature, you need to +run the command `password' in your configuration file (*note +password::), like this: + + password --md5 PASSWORD + + If this is specified, GRUB disallows any interactive control, until +you press the key

and enter a correct password. The option `--md5' +tells GRUB that `PASSWORD' is in MD5 format. If it is omitted, GRUB +assumes the `PASSWORD' is in clear text. + + You can encrypt your password with the command `md5crypt' (*note +md5crypt::). For example, run the grub shell (*note Invoking the grub +shell::), and enter your password: + + grub> md5crypt + Password: ********** + Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb. + + Then, cut and paste the encrypted password to your configuration +file. + + Also, you can specify an optional argument to `password'. See this +example: + + password PASSWORD /boot/grub/menu-admin.lst + + In this case, GRUB will load `/boot/grub/menu-admin.lst' as a +configuration file when you enter the valid password. + + Another thing which may be dangerous is that any user can choose any +menu entry. Usually, this wouldn't be problematic, but you might want to +permit only administrators to run some of your menu entries, such as an +entry for booting an insecure OS like DOS. + + GRUB provides the command `lock' (*note lock::). This command always +fails until you enter the valid password, so you can use it, like this: + + title Boot DOS + lock + rootnoverify (hd0,1) + makeactive + chainload +1 + + You should insert `lock' right after `title', because any user can +execute commands in an entry until GRUB encounters `lock'. + + You can also use the command `password' instead of `lock'. In this +case the boot process will ask for the password and stop if it was +entered incorrectly. Since the `password' takes its own PASSWORD +argument this is useful if you want different passwords for different +entries. + +10 GRUB image files +******************* + +GRUB consists of several images: two essential stages, optional stages +called "Stage 1.5", one image for bootable CD-ROM, and two network boot +images. Here is a short overview of them. *Note Internals::, for more +details. + +`stage1' + This is an essential image used for booting up GRUB. Usually, this + is embedded in an MBR or the boot sector of a partition. Because a + PC boot sector is 512 bytes, the size of this image is exactly 512 + bytes. + + All `stage1' must do is to load Stage 2 or Stage 1.5 from a local + disk. Because of the size restriction, `stage1' encodes the + location of Stage 2 (or Stage 1.5) in a block list format, so it + never understand any filesystem structure. + +`stage2' + This is the core image of GRUB. It does everything but booting up + itself. Usually, this is put in a filesystem, but that is not + required. + +`e2fs_stage1_5' +`fat_stage1_5' +`ffs_stage1_5' +`jfs_stage1_5' +`minix_stage1_5' +`reiserfs_stage1_5' +`vstafs_stage1_5' +`xfs_stage1_5' + These are called "Stage 1.5", because they serve as a bridge + between `stage1' and `stage2', that is to say, Stage 1.5 is loaded + by Stage 1 and Stage 1.5 loads Stage 2. The difference between + `stage1' and `*_stage1_5' is that the former doesn't understand + any filesystem while the latter understands one filesystem (e.g. + `e2fs_stage1_5' understands ext2fs). So you can move the Stage 2 + image to another location safely, even after GRUB has been + installed. + + While Stage 2 cannot generally be embedded in a fixed area as the + size is so large, Stage 1.5 can be installed into the area right + after an MBR, or the boot loader area of a ReiserFS or a FFS. + +`stage2_eltorito' + This is a boot image for CD-ROMs using the "no emulation mode" in + El Torito specification. This is identical to Stage 2, except that + this boots up without Stage 1 and sets up a special drive `(cd)'. + +`nbgrub' + This is a network boot image for the Network Image Proposal used + by some network boot loaders, such as Etherboot. This is mostly + the same as Stage 2, but it also sets up a network and loads a + configuration file from the network. + +`pxegrub' + This is another network boot image for the Preboot Execution + Environment used by several Netboot ROMs. This is identical to + `nbgrub', except for the format. + +11 Filesystem syntax and semantics +********************************** + +GRUB uses a special syntax for specifying disk drives which can be +accessed by BIOS. Because of BIOS limitations, GRUB cannot distinguish +between IDE, ESDI, SCSI, or others. You must know yourself which BIOS +device is equivalent to which OS device. Normally, that will be clear if +you see the files in a device or use the command `find' (*note find::). + +11.1 How to specify devices +=========================== + +The device syntax is like this: + + `(DEVICE[,PART-NUM][,BSD-SUBPART-LETTER])' + + `[]' means the parameter is optional. DEVICE should be either `fd' +or `hd' followed by a digit, like `fd0'. But you can also set DEVICE +to a hexadecimal or a decimal number which is a BIOS drive number, so +the following are equivalent: + + (hd0) + (0x80) + (128) + + PART-NUM represents the partition number of DEVICE, starting from +zero for primary partitions and from four for extended partitions, and +BSD-SUBPART-LETTER represents the BSD disklabel subpartition, such as +`a' or `e'. + + A shortcut for specifying BSD subpartitions is +`(DEVICE,BSD-SUBPART-LETTER)', in this case, GRUB searches for the +first PC partition containing a BSD disklabel, then finds the +subpartition BSD-SUBPART-LETTER. Here is an example: + + (hd0,a) + + The syntax `(hd0)' represents using the entire disk (or the MBR when +installing GRUB), while the syntax `(hd0,0)' represents using the first +partition of the disk (or the boot sector of the partition when +installing GRUB). + + If you enabled the network support, the special drive, `(nd)', is +also available. Before using the network drive, you must initialize the +network. *Note Network::, for more information. + + If you boot GRUB from a CD-ROM, `(cd)' is available. *Note Making a +GRUB bootable CD-ROM::, for details. + +11.2 How to specify files +========================= + +There are two ways to specify files, by "absolute file name" and by +"block list". + + An absolute file name resembles a Unix absolute file name, using `/' +for the directory separator (not `\' as in DOS). One example is +`(hd0,0)/boot/grub/menu.lst'. This means the file `/boot/grub/menu.lst' +in the first partition of the first hard disk. If you omit the device +name in an absolute file name, GRUB uses GRUB's "root device" +implicitly. So if you set the root device to, say, `(hd1,0)' by the +command `root' (*note root::), then `/boot/kernel' is the same as +`(hd1,0)/boot/kernel'. + +11.3 How to specify block lists +=============================== + +A block list is used for specifying a file that doesn't appear in the +filesystem, like a chainloader. The syntax is +`[OFFSET]+LENGTH[,[OFFSET]+LENGTH]...'. Here is an example: + + `0+100,200+1,300+300' + + This represents that GRUB should read blocks 0 through 99, block 200, +and blocks 300 through 599. If you omit an offset, then GRUB assumes +the offset is zero. + + Like the file name syntax (*note File name syntax::), if a blocklist +does not contain a device name, then GRUB uses GRUB's "root device". So +`(hd0,1)+1' is the same as `+1' when the root device is `(hd0,1)'. + +12 GRUB's user interface +************************ + +GRUB has both a simple menu interface for choosing preset entries from a +configuration file, and a highly flexible command-line for performing +any desired combination of boot commands. + + GRUB looks for its configuration file as soon as it is loaded. If one +is found, then the full menu interface is activated using whatever +entries were found in the file. If you choose the "command-line" menu +option, or if the configuration file was not found, then GRUB drops to +the command-line interface. + +12.1 The flexible command-line interface +======================================== + +The command-line interface provides a prompt and after it an editable +text area much like a command-line in Unix or DOS. Each command is +immediately executed after it is entered(1) (*note Command-line +interface-Footnote-1::). The commands (*note Command-line and menu +entry commands::) are a subset of those available in the configuration +file, used with exactly the same syntax. + + Cursor movement and editing of the text on the line can be done via a +subset of the functions available in the Bash shell: + + + + Move forward one character. + + + + Move back one character. + + + + Move to the start of the line. + + + + Move the the end of the line. + + + + Delete the character underneath the cursor. + + + + Delete the character to the left of the cursor. + + + Kill the text from the current cursor position to the end of the + line. + + + Kill backward from the cursor to the beginning of the line. + + + Yank the killed text back into the buffer at the cursor. + + + + Move up through the history list. + + + + Move down through the history list. + + When typing commands interactively, if the cursor is within or before +the first word in the command-line, pressing the key (or ) +will display a listing of the available commands, and if the cursor is +after the first word, the `' will provide a completion listing of +disks, partitions, and file names depending on the context. Note that +to obtain a list of drives, one must open a parenthesis, as `root ('. + + Note that you cannot use the completion functionality in the TFTP +filesystem. This is because TFTP doesn't support file name listing for +the security. + + (1) However, this behavior will be changed in the future version, in +a user-invisible way. + +12.2 The simple menu interface +============================== + +The menu interface is quite easy to use. Its commands are both +reasonably intuitive and described on screen. + + Basically, the menu interface provides a list of "boot entries" to +the user to choose from. Use the arrow keys to select the entry of +choice, then press to run it. An optional timeout is available +to boot the default entry (the first one if not set), which is aborted +by pressing any key. + + Commands are available to enter a bare command-line by pressing +(which operates exactly like the non-config-file version of GRUB, but +allows one to return to the menu if desired by pressing ) or to +edit any of the "boot entries" by pressing . + + If you protect the menu interface with a password (*note Security::), +all you can do is choose an entry by pressing , or press

to +enter the password. + +12.3 Editing a menu entry +========================= + +The menu entry editor looks much like the main menu interface, but the +lines in the menu are individual commands in the selected entry instead +of entry names. + + If an is pressed in the editor, it aborts all the changes made +to the configuration entry and returns to the main menu interface. + + When a particular line is selected, the editor places the user in a +special version of the GRUB command-line to edit that line. When the +user hits , GRUB replaces the line in question in the boot entry +with the changes (unless it was aborted via , in which case the +changes are thrown away). + + If you want to add a new line to the menu entry, press if adding +a line after the current line or press if before the current line. + + To delete a line, hit the key . Although GRUB unfortunately does +not support "undo", you can do almost the same thing by just returning +to the main menu. + +12.4 The hidden menu interface +============================== + +When your terminal is dumb or you request GRUB to hide the menu +interface explicitly with the command `hiddenmenu' (*note +hiddenmenu::), GRUB doesn't show the menu interface (*note Menu +interface::) and automatically boots the default entry, unless +interrupted by pressing . + + When you interrupt the timeout and your terminal is dumb, GRUB falls +back to the command-line interface (*note Command-line interface::). + +13 The list of available commands +********************************* + +In this chapter, we list all commands that are available in GRUB. + + Commands belong to different groups. A few can only be used in the +global section of the configuration file (or "menu"); most of them can +be entered on the command-line and can be used either anywhere in the +menu or specifically in the menu entries. + +13.1 The list of commands for the menu only +=========================================== + +The semantics used in parsing the configuration file are the following: + + * The menu-specific commands have to be used before any others. + + * The files _must_ be in plain-text format. + + * `#' at the beginning of a line in a configuration file means it is + only a comment. + + * Options are separated by spaces. + + * All numbers can be either decimal or hexadecimal. A hexadecimal + number must be preceded by `0x', and is case-insensitive. + + * Extra options or text at the end of the line are ignored unless + otherwise specified. + + * Unrecognized commands are added to the current entry, except + before entries start, where they are ignored. + + These commands can only be used in the menu: + +13.1.1 default +-------------- + + -- Command: default num + Set the default entry to the entry number NUM. Numbering starts + from 0, and the entry number 0 is the default if the command is not + used. + + You can specify `saved' instead of a number. In this case, the + default entry is the entry saved with the command `savedefault'. + *Note savedefault::, for more information. + +13.1.2 fallback +--------------- + + -- Command: fallback num... + Go into unattended boot mode: if the default boot entry has any + errors, instead of waiting for the user to do something, + immediately start over using the NUM entry (same numbering as the + `default' command (*note default::)). This obviously won't help if + the machine was rebooted by a kernel that GRUB loaded. You can + specify multiple fallback entry numbers. + +13.1.3 hiddenmenu +----------------- + + -- Command: hiddenmenu + Don't display the menu. If the command is used, no menu will be + displayed on the control terminal, and the default entry will be + booted after the timeout expired. The user can still request the + menu to be displayed by pressing before the timeout expires. + See also *Note Hidden menu interface::. + +13.1.4 timeout +-------------- + + -- Command: timeout sec + Set a timeout, in SEC seconds, before automatically booting the + default entry (normally the first entry defined). + +13.1.5 title +------------ + + -- Command: title name ... + Start a new boot entry, and set its name to the contents of the + rest of the line, starting with the first non-space character. + +13.2 The list of general commands +================================= + +Commands usable anywhere in the menu and in the command-line. + +13.2.1 bootp +------------ + + -- Command: bootp [`--with-configfile'] + Initialize a network device via the "BOOTP" protocol. This command + is only available if GRUB is compiled with netboot support. See + also *Note Network::. + + If you specify `--with-configfile' to this command, GRUB will + fetch and load a configuration file specified by your BOOTP server + with the vendor tag `150'. + +13.2.2 color +------------ + + -- Command: color normal [highlight] + Change the menu colors. The color NORMAL is used for most lines in + the menu (*note Menu interface::), and the color HIGHLIGHT is used + to highlight the line where the cursor points. If you omit + HIGHLIGHT, then the inverted color of NORMAL is used for the + highlighted line. The format of a color is + `FOREGROUND/BACKGROUND'. FOREGROUND and BACKGROUND are symbolic + color names. A symbolic color name must be one of these: + + * black + + * blue + + * green + + * cyan + + * red + + * magenta + + * brown + + * light-gray + + *These below can be specified only for the foreground.* + + * dark-gray + + * light-blue + + * light-green + + * light-cyan + + * light-red + + * light-magenta + + * yellow + + * white + + But only the first eight names can be used for BACKGROUND. You can + prefix `blink-' to FOREGROUND if you want a blinking foreground + color. + + This command can be used in the configuration file and on the + command line, so you may write something like this in your + configuration file: + + # Set default colors. + color light-gray/blue black/light-gray + + # Change the colors. + title OS-BS like + color magenta/blue black/magenta + +13.2.3 device +------------- + + -- Command: device drive file + In the grub shell, specify the file FILE as the actual drive for a + BIOS drive DRIVE. You can use this command to create a disk image, + and/or to fix the drives guessed by GRUB when GRUB fails to + determine them correctly, like this: + + grub> device (fd0) /floppy-image + grub> device (hd0) /dev/sd0 + + This command can be used only in the grub shell (*note Invoking + the grub shell::). + +13.2.4 dhcp +----------- + + -- Command: dhcp [-with-configfile] + Initialize a network device via the "DHCP" protocol. Currently, + this command is just an alias for `bootp', since the two protocols + are very similar. This command is only available if GRUB is + compiled with netboot support. See also *Note Network::. + + If you specify `--with-configfile' to this command, GRUB will + fetch and load a configuration file specified by your DHCP server + with the vendor tag `150'. + +13.2.5 hide +----------- + + -- Command: hide partition + Hide the partition PARTITION by setting the "hidden" bit in its + partition type code. This is useful only when booting DOS or + Windows and multiple primary FAT partitions exist in one disk. See + also *Note DOS/Windows::. + +13.2.6 ifconfig +--------------- + + -- Command: ifconfig [`--server=server'] [`--gateway=gateway'] + [`--mask=mask'] [`--address=address'] + Configure the IP address, the netmask, the gateway, and the server + address of a network device manually. The values must be in dotted + decimal format, like `192.168.11.178'. The order of the options is + not important. This command shows current network configuration, + if no option is specified. See also *Note Network::. + +13.2.7 pager +------------ + + -- Command: pager [flag] + Toggle or set the state of the internal pager. If FLAG is `on', + the internal pager is enabled. If FLAG is `off', it is disabled. + If no argument is given, the state is toggled. + +13.2.8 partnew +-------------- + + -- Command: partnew part type from len + Create a new primary partition. PART is a partition specification + in GRUB syntax (*note Naming convention::); TYPE is the partition + type and must be a number in the range `0-0xff'; FROM is the + starting address and LEN is the length, both in sector units. + +13.2.9 parttype +--------------- + + -- Command: parttype part type + Change the type of an existing partition. PART is a partition + specification in GRUB syntax (*note Naming convention::); TYPE is + the new partition type and must be a number in the range 0-0xff. + +13.2.10 password +---------------- + + -- Command: password [`--md5'] passwd [new-config-file] + If used in the first section of a menu file, disable all + interactive editing control (menu entry editor and command-line) + and entries protected by the command `lock'. If the password + PASSWD is entered, it loads the NEW-CONFIG-FILE as a new config + file and restarts the GRUB Stage 2, if NEW-CONFIG-FILE is + specified. Otherwise, GRUB will just unlock the privileged + instructions. You can also use this command in the script + section, in which case it will ask for the password, before + continuing. The option `--md5' tells GRUB that PASSWD is + encrypted with `md5crypt' (*note md5crypt::). + +13.2.11 rarp +------------ + + -- Command: rarp + Initialize a network device via the "RARP" protocol. This command + is only available if GRUB is compiled with netboot support. See + also *Note Network::. + +13.2.12 serial +-------------- + + -- Command: serial [`--unit=unit'] [`--port=port'] [`--speed=speed'] + [`--word=word'] [`--parity=parity'] [`--stop=stop'] + [`--device=dev'] + Initialize a serial device. UNIT is a number in the range 0-3 + specifying which serial port to use; default is 0, which + corresponds to the port often called COM1. PORT is the I/O port + where the UART is to be found; if specified it takes precedence + over UNIT. SPEED is the transmission speed; default is 9600. WORD + and STOP are the number of data bits and stop bits. Data bits must + be in the range 5-8 and stop bits must be 1 or 2. Default is 8 data + bits and one stop bit. PARITY is one of `no', `odd', `even' and + defaults to `no'. The option `--device' can only be used in the + grub shell and is used to specify the tty device to be used in the + host operating system (*note Invoking the grub shell::). + + The serial port is not used as a communication channel unless the + `terminal' command is used (*note terminal::). + + This command is only available if GRUB is compiled with serial + support. See also *Note Serial terminal::. + +13.2.13 setkey +-------------- + + -- Command: setkey [to_key from_key] + Change the keyboard map. The key FROM_KEY is mapped to the key + TO_KEY. If no argument is specified, reset key mappings. Note that + this command _does not_ exchange the keys. If you want to exchange + the keys, run this command again with the arguments exchanged, + like this: + + grub> setkey capslock control + grub> setkey control capslock + + A key must be an alphabet letter, a digit, or one of these symbols: + `escape', `exclam', `at', `numbersign', `dollar', `percent', + `caret', `ampersand', `asterisk', `parenleft', `parenright', + `minus', `underscore', `equal', `plus', `backspace', `tab', + `bracketleft', `braceleft', `bracketright', `braceright', `enter', + `control', `semicolon', `colon', `quote', `doublequote', + `backquote', `tilde', `shift', `backslash', `bar', `comma', + `less', `period', `greater', `slash', `question', `alt', `space', + `capslock', `FX' (`X' is a digit), and `delete'. This table + describes to which character each of the symbols corresponds: + + `exclam' + `!' + + `at' + `@' + + `numbersign' + `#' + + `dollar' + `$' + + `percent' + `%' + + `caret' + `^' + + `ampersand' + `&' + + `asterisk' + `*' + + `parenleft' + `(' + + `parenright' + `)' + + `minus' + `-' + + `underscore' + `_' + + `equal' + `=' + + `plus' + `+' + + `bracketleft' + `[' + + `braceleft' + `{' + + `bracketright' + `]' + + `braceright' + `}' + + `semicolon' + `;' + + `colon' + `:' + + `quote' + `'' + + `doublequote' + `"' + + `backquote' + ``' + + `tilde' + `~' + + `backslash' + `\' + + `bar' + `|' + + `comma' + `,' + + `less' + `<' + + `period' + `.' + + `greater' + `>' + + `slash' + `/' + + `question' + `?' + + `space' + ` ' + +13.2.14 terminal +---------------- + + -- Command: terminal [`--dumb'] [`--no-echo'] [`--no-edit'] + [`--timeout=secs'] [`--lines=lines'] [`--silent'] [`console'] + [`serial'] [`hercules'] + Select a terminal for user interaction. The terminal is assumed to + be VT100-compatible unless `--dumb' is specified. If both + `console' and `serial' are specified, then GRUB will use the one + where a key is entered first or the first when the timeout + expires. If neither are specified, the current setting is + reported. This command is only available if GRUB is compiled with + serial support. See also *Note Serial terminal::. + + This may not make sense for most users, but GRUB supports Hercules + console as well. Hercules console is usable like the ordinary + console, and the usage is quite similar to that for serial + terminals: specify `hercules' as the argument. + + The option `--lines' defines the number of lines in your terminal, + and it is used for the internal pager function. If you don't + specify this option, the number is assumed as 24. + + The option `--silent' suppresses the message to prompt you to hit + any key. This might be useful if your system has no terminal + device. + + The option `--no-echo' has GRUB not to echo back input characters. + This implies the option `--no-edit'. + + The option `--no-edit' disables the BASH-like editing feature. + +13.2.15 terminfo +---------------- + + -- Command: terminfo `--name=name' `--cursor-address=seq' + [`--clear-screen=seq'] [`--enter-standout-mode=seq'] + [`--exit-standout-mode=seq'] + Define the capabilities of your terminal. Use this command to + define escape sequences, if it is not vt100-compatible. You may + use `\e' for and `^X' for a control character. + + You can use the utility `grub-terminfo' to generate appropriate + arguments to this command. *Note Invoking grub-terminfo::. + + If no option is specified, the current settings are printed. + +13.2.16 tftpserver +------------------ + + -- Command: tftpserver ipaddr + *Caution:* This command exists only for backward compatibility. + Use `ifconfig' (*note ifconfig::) instead. + + Override a TFTP server address returned by a BOOTP/DHCP/RARP + server. The argument IPADDR must be in dotted decimal format, like + `192.168.0.15'. This command is only available if GRUB is compiled + with netboot support. See also *Note Network::. + +13.2.17 unhide +-------------- + + -- Command: unhide partition + Unhide the partition PARTITION by clearing the "hidden" bit in its + partition type code. This is useful only when booting DOS or + Windows and multiple primary partitions exist on one disk. See also + *Note DOS/Windows::. + +13.3 The list of command-line and menu entry commands +===================================================== + +These commands are usable in the command-line and in menu entries. If +you forget a command, you can run the command `help' (*note help::). + +13.3.1 blocklist +---------------- + + -- Command: blocklist file + Print the block list notation of the file FILE. *Note Block list + syntax::. + +13.3.2 boot +----------- + + -- Command: boot + Boot the OS or chain-loader which has been loaded. Only necessary + if running the fully interactive command-line (it is implicit at + the end of a menu entry). + +13.3.3 cat +---------- + + -- Command: cat file + Display the contents of the file FILE. This command may be useful + to remind you of your OS's root partition: + + grub> cat /etc/fstab + +13.3.4 chainloader +------------------ + + -- Command: chainloader [`--force'] file + Load FILE as a chain-loader. Like any other file loaded by the + filesystem code, it can use the blocklist notation to grab the + first sector of the current partition with `+1'. If you specify the + option `--force', then load FILE forcibly, whether it has a + correct signature or not. This is required when you want to load a + defective boot loader, such as SCO UnixWare 7.1 (*note SCO + UnixWare::). + +13.3.5 cmp +---------- + + -- Command: cmp file1 file2 + Compare the file FILE1 with the file FILE2. If they differ in + size, print the sizes like this: + + Differ in size: 0x1234 [foo], 0x4321 [bar] + + If the sizes are equal but the bytes at an offset differ, then + print the bytes like this: + + Differ at the offset 777: 0xbe [foo], 0xef [bar] + + If they are completely identical, nothing will be printed. + +13.3.6 configfile +----------------- + + -- Command: configfile file + Load FILE as a configuration file. + +13.3.7 debug +------------ + + -- Command: debug + Toggle debug mode (by default it is off). When debug mode is on, + some extra messages are printed to show disk activity. This global + debug flag is mainly useful for GRUB developers when testing new + code. + +13.3.8 displayapm +----------------- + + -- Command: displayapm + Display APM BIOS information. + +13.3.9 displaymem +----------------- + + -- Command: displaymem + Display what GRUB thinks the system address space map of the + machine is, including all regions of physical RAM installed. GRUB's + "upper/lower memory" display uses the standard BIOS interface for + the available memory in the first megabyte, or "lower memory", and + a synthesized number from various BIOS interfaces of the memory + starting at 1MB and going up to the first chipset hole for "upper + memory" (the standard PC "upper memory" interface is limited to + reporting a maximum of 64MB). + +13.3.10 embed +------------- + + -- Command: embed stage1_5 device + Embed the Stage 1.5 STAGE1_5 in the sectors after the MBR if + DEVICE is a drive, or in the "boot loader" area if DEVICE is a FFS + partition or a ReiserFS partition.(1) (*note embed-Footnote-1::) + Print the number of sectors which STAGE1_5 occupies, if successful. + + Usually, you don't need to run this command directly. *Note + setup::. + + (1) The latter feature has not been implemented yet. + +13.3.11 find +------------ + + -- Command: find filename + Search for the file name FILENAME in all mountable partitions and + print the list of the devices which contain the file. The file + name FILENAME should be an absolute file name like + `/boot/grub/stage1'. + +13.3.12 fstest +-------------- + + -- Command: fstest + Toggle filesystem test mode. Filesystem test mode, when turned + on, prints out data corresponding to all the device reads and what + values are being sent to the low-level routines. The format is + `' for + high-level reads inside a partition, and `[DISK-OFFSET-SECTOR]' + for low-level sector requests from the disk. Filesystem test mode + is turned off by any use of the `install' (*note install::) or + `testload' (*note testload::) commands. + +13.3.13 geometry +---------------- + + -- Command: geometry drive [cylinder head sector [total_sector]] + Print the information for the drive DRIVE. In the grub shell, you + can set the geometry of the drive arbitrarily. The number of + cylinders, the number of heads, the number of sectors and the + number of total sectors are set to CYLINDER, HEAD, SECTOR and + TOTAL_SECTOR, respectively. If you omit TOTAL_SECTOR, then it will + be calculated based on the C/H/S values automatically. + +13.3.14 halt +------------ + + -- Command: halt `--no-apm' + The command halts the computer. If the `--no-apm' option is + specified, no APM BIOS call is performed. Otherwise, the computer + is shut down using APM. + +13.3.15 help +------------ + + -- Command: help `--all' [pattern ...] + Display helpful information about builtin commands. If you do not + specify PATTERN, this command shows short descriptions of most of + available commands. If you specify the option `--all' to this + command, short descriptions of rarely used commands (such as *Note + testload::) are displayed as well. + + If you specify any PATTERNS, it displays longer information about + each of the commands which match those PATTERNS. + +13.3.16 impsprobe +----------------- + + -- Command: impsprobe + Probe the Intel Multiprocessor Specification 1.1 or 1.4 + configuration table and boot the various CPUs which are found into + a tight loop. This command can be used only in the Stage 2, but + not in the grub shell. + +13.3.17 initrd +-------------- + + -- Command: initrd file ... + Load an initial ramdisk for a Linux format boot image and set the + appropriate parameters in the Linux setup area in memory. See also + *Note GNU/Linux::. + +13.3.18 install +--------------- + + -- Command: install [`--force-lba'] [`--stage2=os_stage2_file'] + stage1_file [`d'] dest_dev stage2_file [addr] [`p'] + [config_file] [real_config_file] + This command is fairly complex, and you should not use this command + unless you are familiar with GRUB. Use `setup' (*note setup::) + instead. + + In short, it will perform a full install presuming the Stage 2 or + Stage 1.5(1) (*note install-Footnote-1::) is in its final install + location. + + In slightly more detail, it will load STAGE1_FILE, validate that + it is a GRUB Stage 1 of the right version number, install in it a + blocklist for loading STAGE2_FILE as a Stage 2. If the option `d' + is present, the Stage 1 will always look for the actual disk + STAGE2_FILE was installed on, rather than using the booting drive. + The Stage 2 will be loaded at address ADDR, which must be `0x8000' + for a true Stage 2, and `0x2000' for a Stage 1.5. If ADDR is not + present, GRUB will determine the address automatically. It then + writes the completed Stage 1 to the first block of the device + DEST_DEV. If the options `p' or CONFIG_FILE are present, then it + reads the first block of stage2, modifies it with the values of + the partition STAGE2_FILE was found on (for `p') or places the + string CONFIG_FILE into the area telling the stage2 where to look + for a configuration file at boot time. Likewise, if + REAL_CONFIG_FILE is present and STAGE2_FILE is a Stage 1.5, then + the Stage 2 CONFIG_FILE is patched with the configuration file + name REAL_CONFIG_FILE. This command preserves the DOS BPB (and for + hard disks, the partition table) of the sector the Stage 1 is to + be installed into. + + *Caution:* Several buggy BIOSes don't pass a booting drive + properly when booting from a hard disk drive. Therefore, you will + unfortunately have to specify the option `d', whether your Stage2 + resides at the booting drive or not, if you have such a BIOS. We + know these are defective in this way: + + + Fujitsu LifeBook 400 BIOS version 31J0103A + + + HP Vectra XU 6/200 BIOS version GG.06.11 + + *Caution2:* A number of BIOSes don't return a correct LBA support + bitmap even if they do have the support. So GRUB provides a + solution to ignore the wrong bitmap, that is, the option + `--force-lba'. Don't use this option if you know that your BIOS + doesn't have LBA support. + + *Caution3:* You must specify the option `--stage2' in the grub + shell, if you cannot unmount the filesystem where your stage2 file + resides. The argument should be the file name in your operating + system. + + (1) They're loaded the same way, so we will refer to the Stage 1.5 +as a Stage 2 from now on. + +13.3.19 ioprobe +--------------- + + -- Command: ioprobe drive + Probe I/O ports used for the drive DRIVE. This command will list + the I/O ports on the screen. For technical information, *Note + Internals::. + +13.3.20 kernel +-------------- + + -- Command: kernel [`--type=type'] [`--no-mem-option'] file ... + Attempt to load the primary boot image (Multiboot a.out or ELF, + Linux zImage or bzImage, FreeBSD a.out, NetBSD a.out, etc.) from + FILE. The rest of the line is passed verbatim as the "kernel + command-line". Any modules must be reloaded after using this + command. + + This command also accepts the option `--type' so that you can + specify the kernel type of FILE explicitly. The argument TYPE must + be one of these: `netbsd', `freebsd', `openbsd', `linux', + `biglinux', and `multiboot'. However, you need to specify it only + if you want to load a NetBSD ELF kernel, because GRUB can + automatically determine a kernel type in the other cases, quite + safely. + + The option `--no-mem-option' is effective only for Linux. If the + option is specified, GRUB doesn't pass the option `mem=' to the + kernel. This option is implied for Linux kernels 2.4.18 and newer. + +13.3.21 lock +------------ + + -- Command: lock + Prevent normal users from executing arbitrary menu entries. You + must use the command `password' if you really want this command to + be useful (*note password::). + + This command is used in a menu, as shown in this example: + + title This entry is too dangerous to be executed by normal users + lock + root (hd0,a) + kernel /no-security-os + + See also *Note Security::. + +13.3.22 makeactive +------------------ + + -- Command: makeactive + Set the active partition on the root disk to GRUB's root device. + This command is limited to _primary_ PC partitions on a hard disk. + +13.3.23 map +----------- + + -- Command: map to_drive from_drive + Map the drive FROM_DRIVE to the drive TO_DRIVE. This is necessary + when you chain-load some operating systems, such as DOS, if such + an OS resides at a non-first drive. Here is an example: + + grub> map (hd0) (hd1) + grub> map (hd1) (hd0) + + The example exchanges the order between the first hard disk and the + second hard disk. See also *Note DOS/Windows::. + +13.3.24 md5crypt +---------------- + + -- Command: md5crypt + Prompt to enter a password, and encrypt it in MD5 format. The + encrypted password can be used with the command `password' (*note + password::). See also *Note Security::. + +13.3.25 module +-------------- + + -- Command: module file ... + Load a boot module FILE for a Multiboot format boot image (no + interpretation of the file contents are made, so the user of this + command must know what the kernel in question expects). The rest + of the line is passed as the "module command-line", like the + `kernel' command. You must load a Multiboot kernel image before + loading any module. See also *Note modulenounzip::. + +13.3.26 modulenounzip +--------------------- + + -- Command: modulenounzip file ... + The same as `module' (*note module::), except that automatic + decompression is disabled. + +13.3.27 pause +------------- + + -- Command: pause message ... + Print the MESSAGE, then wait until a key is pressed. Note that + placing <^G> (ASCII code 7) in the message will cause the speaker + to emit the standard beep sound, which is useful when prompting + the user to change floppies. + +13.3.28 quit +------------ + + -- Command: quit + Exit from the grub shell `grub' (*note Invoking the grub shell::). + This command can be used only in the grub shell. + +13.3.29 reboot +-------------- + + -- Command: reboot + Reboot the computer. + +13.3.30 read +------------ + + -- Command: read addr + Read a 32-bit value from memory at address ADDR and display it in + hex format. + +13.3.31 root +------------ + + -- Command: root device [hdbias] + Set the current "root device" to the device DEVICE, then attempt + to mount it to get the partition size (for passing the partition + descriptor in `ES:ESI', used by some chain-loaded boot loaders), + the BSD drive-type (for booting BSD kernels using their native + boot format), and correctly determine the PC partition where a BSD + sub-partition is located. The optional HDBIAS parameter is a + number to tell a BSD kernel how many BIOS drive numbers are on + controllers before the current one. For example, if there is an + IDE disk and a SCSI disk, and your FreeBSD root partition is on + the SCSI disk, then use a `1' for HDBIAS. + + See also *Note rootnoverify::. + +13.3.32 rootnoverify +-------------------- + + -- Command: rootnoverify device [hdbias] + Similar to `root' (*note root::), but don't attempt to mount the + partition. This is useful for when an OS is outside of the area of + the disk that GRUB can read, but setting the correct root device + is still desired. Note that the items mentioned in `root' above + which derived from attempting the mount will _not_ work correctly. + +13.3.33 savedefault +------------------- + + -- Command: savedefault num + Save the current menu entry or NUM if specified as a default + entry. Here is an example: + + default saved + timeout 10 + + title GNU/Linux + root (hd0,0) + kernel /boot/vmlinuz root=/dev/sda1 vga=ext + initrd /boot/initrd + savedefault + + title FreeBSD + root (hd0,a) + kernel /boot/loader + savedefault + + With this configuration, GRUB will choose the entry booted + previously as the default entry. + + You can specify `fallback' instead of a number. Then, next + fallback entry is saved. Next fallback entry is chosen from + fallback entries. Normally, this will be the first entry in + fallback ones. + + See also *Note default:: and *Note Invoking grub-set-default::. + +13.3.34 setup +------------- + + -- Command: setup [`--force-lba'] [`--stage2=os_stage2_file'] + [`--prefix=dir'] install_device [image_device] + Set up the installation of GRUB automatically. This command uses + the more flexible command `install' (*note install::) in the + backend and installs GRUB into the device INSTALL_DEVICE. If + IMAGE_DEVICE is specified, then find the GRUB images (*note + Images::) in the device IMAGE_DEVICE, otherwise use the current + "root device", which can be set by the command `root'. If + INSTALL_DEVICE is a hard disk, then embed a Stage 1.5 in the disk + if possible. + + The option `--prefix' specifies the directory under which GRUB + images are put. If it is not specified, GRUB automatically + searches them in `/boot/grub' and `/grub'. + + The options `--force-lba' and `--stage2' are just passed to + `install' if specified. *Note install::, for more information. + +13.3.35 testload +---------------- + + -- Command: testload file + Read the entire contents of FILE in several different ways and + compare them, to test the filesystem code. The output is somewhat + cryptic, but if no errors are reported and the final `i=X, + filepos=Y' reading has X and Y equal, then it is definitely + consistent, and very likely works correctly subject to a + consistent offset error. If this test succeeds, then a good next + step is to try loading a kernel. + +13.3.36 testvbe +--------------- + + -- Command: testvbe mode + Test the VESA BIOS EXTENSION mode MODE. This command will switch + your video card to the graphics mode, and show an endless + animation. Hit any key to return. See also *Note vbeprobe::. + +13.3.37 uppermem +---------------- + + -- Command: uppermem kbytes + Force GRUB to assume that only KBYTES kilobytes of upper memory + are installed. Any system address range maps are discarded. + + *Caution:* This should be used with great caution, and should only + be necessary on some old machines. GRUB's BIOS probe can pick up + all RAM on all new machines the author has ever heard of. It can + also be used for debugging purposes to lie to an OS. + +13.3.38 vbeprobe +---------------- + + -- Command: vbeprobe [mode] + Probe VESA BIOS EXTENSION information. If the mode MODE is + specified, show only the information about MODE. Otherwise, this + command lists up available VBE modes on the screen. See also *Note + testvbe::. + +14 Error messages reported by GRUB +********************************** + +This chapter describes error messages reported by GRUB when you +encounter trouble. *Note Invoking the grub shell::, if your problem is +specific to the grub shell. + +14.1 Errors reported by the Stage 1 +=================================== + +The general way that the Stage 1 handles errors is to print an error +string and then halt. Pressing `--' will reboot. + + The following is a comprehensive list of error messages for the +Stage 1: + +Hard Disk Error + The stage2 or stage1.5 is being read from a hard disk, and the + attempt to determine the size and geometry of the hard disk failed. + +Floppy Error + The stage2 or stage1.5 is being read from a floppy disk, and the + attempt to determine the size and geometry of the floppy disk + failed. It's listed as a separate error since the probe sequence + is different than for hard disks. + +Read Error + A disk read error happened while trying to read the stage2 or + stage1.5. + +Geom Error + The location of the stage2 or stage1.5 is not in the portion of + the disk supported directly by the BIOS read calls. This could + occur because the BIOS translated geometry has been changed by the + user or the disk is moved to another machine or controller after + installation, or GRUB was not installed using itself (if it was, + the Stage 2 version of this error would have been seen during that + process and it would not have completed the install). + +14.2 Errors reported by the Stage 1.5 +===================================== + +The general way that the Stage 1.5 handles errors is to print an error +number in the form `Error NUM' and then halt. Pressing +`--' will reboot. + + The error numbers correspond to the errors reported by Stage 2. +*Note Stage2 errors::. + +14.3 Errors reported by the Stage 2 +=================================== + +The general way that the Stage 2 handles errors is to abort the +operation in question, print an error string, then (if possible) either +continue based on the fact that an error occurred or wait for the user +to deal with the error. + + The following is a comprehensive list of error messages for the +Stage 2 (error numbers for the Stage 1.5 are listed before the colon in +each description): + +1 : Filename must be either an absolute filename or blocklist + This error is returned if a file name is requested which doesn't + fit the syntax/rules listed in the *Note Filesystem::. + +2 : Bad file or directory type + This error is returned if a file requested is not a regular file, + but something like a symbolic link, directory, or FIFO. + +3 : Bad or corrupt data while decompressing file + This error is returned if the run-length decompression code gets an + internal error. This is usually from a corrupt file. + +4 : Bad or incompatible header in compressed file + This error is returned if the file header for a supposedly + compressed file is bad. + +5 : Partition table invalid or corrupt + This error is returned if the sanity checks on the integrity of the + partition table fail. This is a bad sign. + +6 : Mismatched or corrupt version of stage1/stage2 + This error is returned if the install command points to + incompatible or corrupt versions of the stage1 or stage2. It can't + detect corruption in general, but this is a sanity check on the + version numbers, which should be correct. + +7 : Loading below 1MB is not supported + This error is returned if the lowest address in a kernel is below + the 1MB boundary. The Linux zImage format is a special case and + can be handled since it has a fixed loading address and maximum + size. + +8 : Kernel must be loaded before booting + This error is returned if GRUB is told to execute the boot sequence + without having a kernel to start. + +9 : Unknown boot failure + This error is returned if the boot attempt did not succeed for + reasons which are unknown. + +10 : Unsupported Multiboot features requested + This error is returned when the Multiboot features word in the + Multiboot header requires a feature that is not recognized. The + point of this is that the kernel requires special handling which + GRUB is probably unable to provide. + +11 : Unrecognized device string + This error is returned if a device string was expected, and the + string encountered didn't fit the syntax/rules listed in the *Note + Filesystem::. + +12 : Invalid device requested + This error is returned if a device string is recognizable but does + not fall under the other device errors. + +13 : Invalid or unsupported executable format + This error is returned if the kernel image being loaded is not + recognized as Multiboot or one of the supported native formats + (Linux zImage or bzImage, FreeBSD, or NetBSD). + +14 : Filesystem compatibility error, cannot read whole file + Some of the filesystem reading code in GRUB has limits on the + length of the files it can read. This error is returned when the + user runs into such a limit. + +15 : File not found + This error is returned if the specified file name cannot be found, + but everything else (like the disk/partition info) is OK. + +16 : Inconsistent filesystem structure + This error is returned by the filesystem code to denote an internal + error caused by the sanity checks of the filesystem structure on + disk not matching what it expects. This is usually caused by a + corrupt filesystem or bugs in the code handling it in GRUB. + +17 : Cannot mount selected partition + This error is returned if the partition requested exists, but the + filesystem type cannot be recognized by GRUB. + +18 : Selected cylinder exceeds maximum supported by BIOS + This error is returned when a read is attempted at a linear block + address beyond the end of the BIOS translated area. This generally + happens if your disk is larger than the BIOS can handle (512MB for + (E)IDE disks on older machines or larger than 8GB in general). + +19 : Linux kernel must be loaded before initrd + This error is returned if the initrd command is used before + loading a Linux kernel. + +20 : Multiboot kernel must be loaded before modules + This error is returned if the module load command is used before + loading a Multiboot kernel. It only makes sense in this case + anyway, as GRUB has no idea how to communicate the presence of + such modules to a non-Multiboot-aware kernel. + +21 : Selected disk does not exist + This error is returned if the device part of a device- or full + file name refers to a disk or BIOS device that is not present or + not recognized by the BIOS in the system. + +22 : No such partition + This error is returned if a partition is requested in the device + part of a device- or full file name which isn't on the selected + disk. + +23 : Error while parsing number + This error is returned if GRUB was expecting to read a number and + encountered bad data. + +24 : Attempt to access block outside partition + This error is returned if a linear block address is outside of the + disk partition. This generally happens because of a corrupt + filesystem on the disk or a bug in the code handling it in GRUB + (it's a great debugging tool). + +25 : Disk read error + This error is returned if there is a disk read error when trying to + probe or read data from a particular disk. + +26 : Too many symbolic links + This error is returned if the link count is beyond the maximum + (currently 5), possibly the symbolic links are looped. + +27 : Unrecognized command + This error is returned if an unrecognized command is entered on the + command-line or in a boot sequence section of a configuration file + and that entry is selected. + +28 : Selected item cannot fit into memory + This error is returned if a kernel, module, or raw file load + command is either trying to load its data such that it won't fit + into memory or it is simply too big. + +29 : Disk write error + This error is returned if there is a disk write error when trying + to write to a particular disk. This would generally only occur + during an install of set active partition command. + +30 : Invalid argument + This error is returned if an argument specified to a command is + invalid. + +31 : File is not sector aligned + This error may occur only when you access a ReiserFS partition by + block-lists (e.g. the command `install'). In this case, you should + mount the partition with the `-o notail' option. + +32 : Must be authenticated + This error is returned if you try to run a locked entry. You should + enter a correct password before running such an entry. + +33 : Serial device not configured + This error is returned if you try to change your terminal to a + serial one before initializing any serial device. + +34 : No spare sectors on the disk + This error is returned if a disk doesn't have enough spare space. + This happens when you try to embed Stage 1.5 into the unused + sectors after the MBR, but the first partition starts right after + the MBR or they are used by EZ-BIOS. + +15 Invoking the grub shell +************************** + +This chapter documents the grub shell `grub'. Note that the grub shell +is an emulator; it doesn't run under the native environment, so it +sometimes does something wrong. Therefore, you shouldn't trust it too +much. If there is anything wrong with it, don't hesitate to try the +native GRUB environment, especially when it guesses a wrong map between +BIOS drives and OS devices. + +15.1 Introduction into the grub shell +===================================== + +You can use the command `grub' for installing GRUB under your operating +systems and for a testbed when you add a new feature into GRUB or when +fixing a bug. `grub' is almost the same as the Stage 2, and, in fact, +it shares the source code with the Stage 2 and you can use the same +commands (*note Commands::) in `grub'. It is emulated by replacing BIOS +calls with UNIX system calls and libc functions. + + The command `grub' accepts the following options: + +`--help' + Print a summary of the command-line options and exit. + +`--version' + Print the version number of GRUB and exit. + +`--verbose' + Print some verbose messages for debugging purpose. + +`--device-map=FILE' + Use the device map file FILE. The format is described in *Note + Device map::. + +`--no-floppy' + Do not probe any floppy drive. This option has no effect if the + option `--device-map' is specified (*note Device map::). + +`--probe-second-floppy' + Probe the second floppy drive. If this option is not specified, + the grub shell does not probe it, as that sometimes takes a long + time. If you specify the device map file (*note Device map::), the + grub shell just ignores this option. + +`--config-file=FILE' + Read the configuration file FILE instead of `/boot/grub/menu.lst'. + The format is the same as the normal GRUB syntax. See *Note + Filesystem::, for more information. + +`--boot-drive=DRIVE' + Set the stage2 BOOT_DRIVE to DRIVE. This argument should be an + integer (decimal, octal or hexadecimal). + +`--install-partition=PAR' + Set the stage2 INSTALL_PARTITION to PAR. This argument should be + an integer (decimal, octal or hexadecimal). + +`--no-config-file' + Do not use the configuration file even if it can be read. + +`--no-curses' + Do not use the screen handling interface by the curses even if it + is available. + +`--batch' + This option has the same meaning as `--no-config-file --no-curses'. + +`--read-only' + Disable writing to any disk. + +`--hold' + Wait until a debugger will attach. This option is useful when you + want to debug the startup code. + +15.2 How to install GRUB via `grub' +=================================== + +The installation procedure is the same as under the "native" Stage 2. +*Note Installation::, for more information. The command `grub'-specific +information is described here. + + What you should be careful about is "buffer cache". `grub' makes use +of raw devices instead of filesystems that your operating systems +serve, so there exists a potential problem that some cache +inconsistency may corrupt your filesystems. What we recommend is: + + * If you can unmount drives to which GRUB may write any amount of + data, unmount them before running `grub'. + + * If a drive cannot be unmounted but can be mounted with the + read-only flag, mount it in read-only mode. That should be secure. + + * If a drive must be mounted with the read-write flag, make sure + that no activity is being done on it while the command `grub' is + running. + + * Reboot your operating system as soon as possible. This is probably + not required if you follow the rules above, but reboot is the most + secure way. + + In addition, enter the command `quit' when you finish the +installation. That is _very important_ because `quit' makes the buffer +cache consistent. Do not push . + + If you want to install GRUB non-interactively, specify `--batch' +option in the command-line. This is a simple example: + + #!/bin/sh + + # Use /usr/sbin/grub if you are on an older system. + /sbin/grub --batch </dev/null 2>/dev/null + root (hd0,0) + setup (hd0) + quit + EOT + +15.3 The map between BIOS drives and OS devices +=============================================== + +When you specify the option `--device-map' (*note Basic usage::), the +grub shell creates the "device map file" automatically unless it +already exists. The file name `/boot/grub/device.map' is preferred. + + If the device map file exists, the grub shell reads it to map BIOS +drives to OS devices. This file consists of lines like this: + + DEVICE FILE + + DEVICE is a drive specified in the GRUB syntax (*note Device +syntax::), and FILE is an OS file, which is normally a device file. + + The reason why the grub shell gives you the device map file is that +it cannot guess the map between BIOS drives and OS devices correctly in +some environments. For example, if you exchange the boot sequence +between IDE and SCSI in your BIOS, it gets the order wrong. + + Thus, edit the file if the grub shell makes a mistake. You can put +any comments in the file if needed, as the grub shell assumes that a +line is just a comment if the first character is `#'. + +16 Invoking grub-install +************************ + +The program `grub-install' installs GRUB on your drive using the grub +shell (*note Invoking the grub shell::). You must specify the device +name on which you want to install GRUB, like this: + + grub-install INSTALL_DEVICE + + The device name INSTALL_DEVICE is an OS device name or a GRUB device +name. + + `grub-install' accepts the following options: + +`--help' + Print a summary of the command-line options and exit. + +`--version' + Print the version number of GRUB and exit. + +`--force-lba' + Force GRUB to use LBA mode even for a buggy BIOS. Use this option + only if your BIOS doesn't work properly in LBA mode even though it + supports LBA mode. + +`--root-directory=DIR' + Install GRUB images under the directory DIR instead of the root + directory. This option is useful when you want to install GRUB + into a separate partition or a removable disk. Here is an example + in which you have a separate "boot" partition which is mounted on + `/boot': + + grub-install --root-directory=/boot hd0 + +`--grub-shell=FILE' + Use FILE as the grub shell. You can append arbitrary options to + FILE after the file name, like this: + + grub-install --grub-shell="grub --read-only" /dev/fd0 + +`--recheck' + Recheck the device map, even if `/boot/grub/device.map' already + exists. You should use this option whenever you add/remove a disk + into/from your computer. + +17 Invoking grub-md5-crypt +************************** + +The program `grub-md5-crypt' encrypts a password in MD5 format. This +is just a frontend of the grub shell (*note Invoking the grub shell::). +Passwords encrypted by this program can be used with the command +`password' (*note password::). + + `grub-md5-crypt' accepts the following options: + +`--help' + Print a summary of the command-line options and exit. + +`--version' + Print the version information and exit. + +`--grub-shell=FILE' + Use FILE as the grub shell. + +18 Invoking grub-terminfo +************************* + +The program `grub-terminfo' generates a terminfo command from a +terminfo name (*note terminfo::). The result can be used in the +configuration file, to define escape sequences. Because GRUB assumes +that your terminal is vt100-compatible by default, this would be useful +only if your terminal is uncommon (such as vt52). + + `grub-terminfo' accepts the following options: + +`--help' + Print a summary of the command-line options and exit. + +`--version' + Print the version information and exit. + + You must specify one argument to this command. For example: + + grub-terminfo vt52 + +19 Invoking grub-set-default +**************************** + +The program `grub-set-default' sets the default boot entry for GRUB. +This automatically creates a file named `default' under your GRUB +directory (i.e. `/boot/grub'), if it is not present. This file is used +to determine the default boot entry when GRUB boots up your system when +you use `default saved' in your configuration file (*note default::), +and to save next default boot entry when you use `savedefault' in a +boot entry (*note savedefault::). + + `grub-set-default' accepts the following options: + +`--help' + Print a summary of the command-line options and exit. + +`--version' + Print the version information and exit. + +`--root-directory=DIR' + Use the directory DIR instead of the root directory (i.e. `/') to + define the location of the default file. This is useful when you + mount a disk which is used for another system. + + You must specify a single argument to `grub-set-default'. This +argument is normally the number of a default boot entry. For example, +if you have this configuration file: + + default saved + timeout 10 + + title GNU/Hurd + root (hd0,0) + ... + + title GNU/Linux + root (hd0,1) + ... + + and if you want to set the next default boot entry to GNU/Linux, you +may execute this command: + + grub-set-default 1 + + Because the entry for GNU/Linux is `1'. Note that entries are +counted from zero. So, if you want to specify GNU/Hurd here, then you +should specify `0'. + + This feature is very useful if you want to test a new kernel or to +make your system quite robust. *Note Making your system robust::, for +more hints about how to set up a robust system. + +20 Invoking mbchk +***************** + +The program `mbchk' checks for the format of a Multiboot kernel. We +recommend using this program before booting your own kernel by GRUB. + + `mbchk' accepts the following options: + +`--help' + Print a summary of the command-line options and exit. + +`--version' + Print the version number of GRUB and exit. + +`--quiet' + Suppress all normal output. + +Appendix A How to obtain and build GRUB +*************************************** + + *Caution:* GRUB requires binutils-2.9.1.0.23 or later because the + GNU assembler has been changed so that it can produce real 16bits + machine code between 2.9.1 and 2.9.1.0.x. See + `http://sources.redhat.com/binutils/', to obtain information on + how to get the latest version. + + GRUB is available from the GNU alpha archive site +`ftp://alpha.gnu.org/gnu/grub' or any of its mirrors. The file will be +named grub-version.tar.gz. The current version is 0.97, so the file you +should grab is: + + `ftp://alpha.gnu.org/gnu/grub/grub-0.97.tar.gz' + + To unbundle GRUB use the instruction: + + zcat grub-0.97.tar.gz | tar xvf - + + which will create a directory called `grub-0.97' with all the +sources. You can look at the file `INSTALL' for detailed instructions +on how to build and install GRUB, but you should be able to just do: + + cd grub-0.97 + ./configure + make install + + This will install the grub shell `grub' (*note Invoking the grub +shell::), the Multiboot checker `mbchk' (*note Invoking mbchk::), and +the GRUB images. This will also install the GRUB manual. + + Also, the latest version is available from the CVS. See +`http://savannah.gnu.org/cvs/?group=grub' for more information. + +Appendix B Reporting bugs +************************* + +These are the guideline for how to report bugs. Take a look at this +list below before you submit bugs: + + 1. Before getting unsettled, read this manual through and through. + Also, see the GNU GRUB FAQ + (http://www.gnu.org/software/grub/grub-faq.html). + + 2. Always mention the information on your GRUB. The version number + and the configuration are quite important. If you build it + yourself, write the options specified to the configure script and + your operating system, including the versions of gcc and binutils. + + 3. If you have trouble with the installation, inform us of how you + installed GRUB. Don't omit error messages, if any. Just `GRUB hangs + up when it boots' is not enough. + + The information on your hardware is also essential. These are + especially important: the geometries and the partition tables of + your hard disk drives and your BIOS. + + 4. If GRUB cannot boot your operating system, write down _everything_ + you see on the screen. Don't paraphrase them, like `The foo OS + crashes with GRUB, even though it can boot with the bar boot + loader just fine'. Mention the commands you executed, the messages + printed by them, and information on your operating system + including the version number. + + 5. Explain what you wanted to do. It is very useful to know your + purpose and your wish, and how GRUB didn't satisfy you. + + 6. If you can investigate the problem yourself, please do. That will + give you and us much more information on the problem. Attaching a + patch is even better. + + When you attach a patch, make the patch in unified diff format, and + write ChangeLog entries. But, even when you make a patch, don't + forget to explain the problem, so that we can understand what your + patch is for. + + 7. Write down anything that you think might be related. Please + understand that we often need to reproduce the same problem you + encounterred in our environment. So your information should be + sufficient for us to do the same thing--Don't forget that we + cannot see your computer directly. If you are not sure whether to + state a fact or leave it out, state it! Reporting too many things + is much better than omitting something important. + + If you follow the guideline above, submit a report to the Bug +Tracking System (http://savannah.gnu.org/bugs/?group=grub). +Alternatively, you can submit a report via electronic mail to +, but we strongly recommend that you use the Bug +Tracking System, because e-mail can be passed over easily. + + Once we get your report, we will try to fix the bugs. + +Appendix C Where GRUB will go +***************************** + +We started the next generation of GRUB, GRUB 2. This will include +internationalization, dynamic module loading, real memory management, +multiple architecture support, a scripting language, and many other +nice feature. If you are interested in the development of GRUB 2, take +a look at the homepage (http://www.gnu.org/software/grub/grub.html). + +Appendix D Hacking GRUB +*********************** + +This chapter documents the user-invisible aspect of GRUB. + + As a general rule of software development, it is impossible to keep +the descriptions of the internals up-to-date, and it is quite hard to +document everything. So refer to the source code, whenever you are not +satisfied with this documentation. Please assume that this gives just +hints to you. + +D.1 The memory map of various components +======================================== + +GRUB consists of two distinct components, called "stages", which are +loaded at different times in the boot process. Because they run +mutual-exclusively, sometimes a memory area overlaps with another +memory area. And, even in one stage, a single memory area can be used +for various purposes, because their usages are mutually exclusive. + + Here is the memory map of the various components: + +0 to 4K-1 + BIOS and real mode interrupts + +0x07BE to 0x07FF + Partition table passed to another boot loader + +down from 8K-1 + Real mode stack + +0x2000 to ? + The optional Stage 1.5 is loaded here + +0x2000 to 0x7FFF + Command-line buffer for Multiboot kernels and modules + +0x7C00 to 0x7DFF + Stage 1 is loaded here by BIOS or another boot loader + +0x7F00 to 0x7F42 + LBA drive parameters + +0x8000 to ? + Stage2 is loaded here + +The end of Stage 2 to 416K-1 + Heap, in particular used for the menu + +down from 416K-1 + Protected mode stack + +416K to 448K-1 + Filesystem buffer + +448K to 479.5K-1 + Raw device buffer + +479.5K to 480K-1 + 512-byte scratch area + +480K to 512K-1 + Buffers for various functions, such as password, command-line, cut + and paste, and completion. + +The last 1K of lower memory + Disk swapping code and data + + See the file `stage2/shared.h', for more information. + +D.2 Embedded variables in GRUB +============================== + +Stage 1 and Stage 2 have embedded variables whose locations are +well-defined, so that the installation can patch the binary file +directly without recompilation of the stages. + + In Stage 1, these are defined: + +`0x3E' + The version number (not GRUB's, but the installation mechanism's). + +`0x40' + The boot drive. If it is 0xFF, use a drive passed by BIOS. + +`0x41' + The flag for if forcing LBA. + +`0x42' + The starting address of Stage 2. + +`0x44' + The first sector of Stage 2. + +`0x48' + The starting segment of Stage 2. + +`0x1FE' + The signature (`0xAA55'). + + See the file `stage1/stage1.S', for more information. + + In the first sector of Stage 1.5 and Stage 2, the block lists are +recorded between `firstlist' and `lastlist'. The address of `lastlist' +is determined when assembling the file `stage2/start.S'. + + The trick here is that it is actually read backward, and the first +8-byte block list is not read here, but after the pointer is decremented +8 bytes, then after reading it, it decrements again, reads, and so on, +until it is finished. The terminating condition is when the number of +sectors to be read in the next block list is zero. + + The format of a block list can be seen from the example in the code +just before the `firstlist' label. Note that it is always from the +beginning of the disk, but _not_ relative to the partition boundaries. + + In the second sector of Stage 1.5 and Stage 2, these are defined: + +`0x6' + The version number (likewise, the installation mechanism's). + +`0x8' + The installed partition. + +`0xC' + The saved entry number. + +`0x10' + The identifier. + +`0x11' + The flag for if forcing LBA. + +`0x12' + The version string (GRUB's). + +`0x12' + "the length of the version string" + The name of a configuration file. + + See the file `stage2/asm.S', for more information. + +D.3 The generic interface for filesystems +========================================= + +For any particular partition, it is presumed that only one of the +"normal" filesystems such as FAT, FFS, or ext2fs can be used, so there +is a switch table managed by the functions in `disk_io.c'. The notation +is that you can only "mount" one at a time. + + The block list filesystem has a special place in the system. In +addition to the "normal" filesystem (or even without one mounted), you +can access disk blocks directly (in the indicated partition) via the +block list notation. Using the block list filesystem doesn't effect any +other filesystem mounts. + + The variables which can be read by the filesystem backend are: + +`current_drive' + The current BIOS drive number (numbered from 0, if a floppy, and + numbered from 0x80, if a hard disk). + +`current_partition' + The current partition number. + +`current_slice' + The current partition type. + +`saved_drive' + The "drive" part of the root device. + +`saved_partition' + The "partition" part of the root device. + +`part_start' + The current partition starting address, in sectors. + +`part_length' + The current partition length, in sectors. + +`print_possibilities' + True when the `dir' function should print the possible completions + of a file, and false when it should try to actually open a file of + that name. + +`FSYS_BUF' + Filesystem buffer which is 32K in size, to use in any way which the + filesystem backend desires. + + The variables which need to be written by a filesystem backend are: + +`filepos' + The current position in the file, in sectors. + + *Caution:* the value of FILEPOS can be changed out from under the + filesystem code in the current implementation. Don't depend on it + being the same for later calls into the backend code! + +`filemax' + The length of the file. + +`disk_read_func' + The value of DISK_READ_HOOK _only_ during reading of data for the + file, not any other fs data, inodes, FAT tables, whatever, then + set to `NULL' at all other times (it will be `NULL' by default). + If this isn't done correctly, then the `testload' and `install' + commands won't work correctly. + + The functions expected to be used by the filesystem backend are: + +`devread' + Only read sectors from within a partition. Sector 0 is the first + sector in the partition. + +`grub_read' + If the backend uses the block list code, then `grub_read' can be + used, after setting BLOCK_FILE to 1. + +`print_a_completion' + If PRINT_POSSIBILITIES is true, call `print_a_completion' for each + possible file name. Otherwise, the file name completion won't work. + + The functions expected to be defined by the filesystem backend are +described at least moderately in the file `filesys.h'. Their usage is +fairly evident from their use in the functions in `disk_io.c', look for +the use of the FSYS_TABLE array. + + *Caution:* The semantics are such that then `mount'ing the +filesystem, presume the filesystem buffer `FSYS_BUF' is corrupted, and +(re-)load all important contents. When opening and reading a file, +presume that the data from the `mount' is available, and doesn't get +corrupted by the open/read (i.e. multiple opens and/or reads will be +done with only one mount if in the same filesystem). + +D.4 The generic interface for built-ins +======================================= + +GRUB built-in commands are defined in a uniformal interface, whether +they are menu-specific or can be used anywhere. The definition of a +builtin command consists of two parts: the code itself and the table of +the information. + + The code must be a function which takes two arguments, a command-line +string and flags, and returns an `int' value. The "flags" argument +specifies how the function is called, using a bit mask. The return +value must be zero if successful, otherwise non-zero. So it is normally +enough to return ERRNUM. + + The table of the information is represented by the structure `struct +builtin', which contains the name of the command, a pointer to the +function, flags, a short description of the command and a long +description of the command. Since the descriptions are used only for +help messages interactively, you don't have to define them, if the +command may not be called interactively (such as `title'). + + The table is finally registered in the table BUILTIN_TABLE, so that +`run_script' and `enter_cmdline' can find the command. See the files +`cmdline.c' and `builtins.c', for more details. + +D.5 The bootstrap mechanism used in GRUB +======================================== + +The disk space can be used in a boot loader is very restricted because +a MBR (*note MBR::) is only 512 bytes but it also contains a partition +table (*note Partition table::) and a BPB. So the question is how to +make a boot loader code enough small to be fit in a MBR. + + However, GRUB is a very large program, so we break GRUB into 2 (or 3) +distinct components, "Stage 1" and "Stage 2" (and optionally "Stage +1.5"). *Note Memory map::, for more information. + + We embed Stage 1 in a MBR or in the boot sector of a partition, and +place Stage 2 in a filesystem. The optional Stage 1.5 can be installed +in a filesystem, in the "boot loader" area in a FFS or a ReiserFS, and +in the sectors right after a MBR, because Stage 1.5 is enough small and +the sectors right after a MBR is normally an unused region. The size of +this region is the number of sectors per head minus 1. + + Thus, all Stage1 must do is just load Stage2 or Stage1.5. But even if +Stage 1 needs not to support the user interface or the filesystem +interface, it is impossible to make Stage 1 less than 400 bytes, because +GRUB should support both the CHS mode and the LBA mode (*note Low-level +disk I/O::). + + The solution used by GRUB is that Stage 1 loads only the first +sector of Stage 2 (or Stage 1.5) and Stage 2 itself loads the rest. The +flow of Stage 1 is: + + 1. Initialize the system briefly. + + 2. Detect the geometry and the accessing mode of the "loading drive". + + 3. Load the first sector of Stage 2. + + 4. Jump to the starting address of the Stage 2. + + The flow of Stage 2 (and Stage 1.5) is: + + 1. Load the rest of itself to the real starting address, that is, the + starting address plus 512 bytes. The block lists are stored in the + last part of the first sector. + + 2. Long jump to the real starting address. + + Note that Stage 2 (or Stage 1.5) does not probe the geometry or the +accessing mode of the "loading drive", since Stage 1 has already probed +them. + +D.6 How to probe I/O ports used by INT 13H +========================================== + +FIXME: I will write this chapter after implementing the new technique. + +D.7 How to detect all installed RAM +=================================== + +FIXME: I doubt if Erich didn't write this chapter only himself wholly, +so I will rewrite this chapter. + +D.8 INT 13H disk I/O interrupts +=============================== + +FIXME: I'm not sure where some part of the original chapter is derived, +so I will rewrite this chapter. + +D.9 The structure of Master Boot Record +======================================= + +FIXME: Likewise. + +D.10 The format of partition tables +=================================== + +FIXME: Probably the original chapter is derived from "How It Works", so +I will rewrite this chapter. + +D.11 Where and how you should send patches +========================================== + +When you write patches for GRUB, please send them to the mailing list +. Here is the list of items of which you should take +care: + + * Please make your patch as small as possible. Generally, it is not + a good thing to make one big patch which changes many things. + Instead, segregate features and produce many patches. + + * Use as late code as possible, for the original code. The CVS + repository always has the current version (*note Obtaining and + Building GRUB::). + + * Write ChangeLog entries. *Note Change Logs: (standards)Change + Logs, if you don't know how to write ChangeLog. + + * Make patches in unified diff format. `diff -urN' is appropriate in + most cases. + + * Don't make patches reversely. Reverse patches are difficult to + read and use. + + * Be careful enough of the license term and the copyright. Because + GRUB is under GNU General Public License, you may not steal code + from software whose license is incompatible against GPL. And, if + you copy code written by others, you must not ignore their + copyrights. Feel free to ask GRUB maintainers, whenever you are + not sure what you should do. + + * If your patch is too large to send in e-mail, put it at somewhere + we can see. Usually, you shouldn't send e-mail over 20K. + +Appendix E Copying This Manual +****************************** + +E.1 GNU Free Documentation License +================================== + + Version 1.2, November 2002 + + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. + +E.1.1 ADDENDUM: How to use this License for your documents +---------------------------------------------------------- + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + +Index +***** + +blocklist: See 13.3.1. (line 2252) +boot: See 13.3.2. (line 2259) +bootp: See 13.2.1. (line 1862) +cat: See 13.3.3. (line 2267) +chainloader: See 13.3.4. (line 2276) +cmp: See 13.3.5. (line 2288) +color: See 13.2.2. (line 1874) +configfile: See 13.3.6. (line 2304) +current_drive: See D.3. (line 3498) +current_partition: See D.3. (line 3502) +current_slice: See D.3. (line 3505) +debug: See 13.3.7. (line 2310) +default: See 13.1.1. (line 1810) +device: See 13.2.3. (line 1935) +devread: See D.3. (line 3550) +dhcp: See 13.2.4. (line 1950) +disk_read_func: See D.3. (line 3541) +displayapm: See 13.3.8. (line 2319) +displaymem: See 13.3.9. (line 2325) +embed: See 13.3.10. (line 2338) +fallback: See 13.1.2. (line 1822) +FDL, GNU Free Documentation License: See E.1. (line 3716) +filemax: See D.3. (line 3538) +filepos: See D.3. (line 3531) +find: See 13.3.11. (line 2352) +fstest: See 13.3.12. (line 2361) +FSYS_BUF: See D.3. (line 3525) +geometry: See 13.3.13. (line 2374) +grub_read: See D.3. (line 3554) +halt: See 13.3.14. (line 2385) +help: See 13.3.15. (line 2393) +hiddenmenu: See 13.1.3. (line 1833) +hide: See 13.2.5. (line 1963) +ifconfig: See 13.2.6. (line 1973) +impsprobe: See 13.3.16. (line 2406) +initrd: See 13.3.17. (line 2415) +install: See 13.3.18. (line 2425) +ioprobe: See 13.3.19. (line 2483) +kernel: See 13.3.20. (line 2491) +lock: See 13.3.21. (line 2513) +makeactive: See 13.3.22. (line 2530) +map: See 13.3.23. (line 2537) +md5crypt: See 13.3.24. (line 2551) +module: See 13.3.25. (line 2559) +modulenounzip: See 13.3.26. (line 2570) +pager: See 13.2.7. (line 1983) +part_length: See D.3. (line 3517) +part_start: See D.3. (line 3514) +partnew: See 13.2.8. (line 1991) +parttype: See 13.2.9. (line 2000) +password: See 13.2.10. (line 2008) +pause: See 13.3.27. (line 2577) +print_a_completion: See D.3. (line 3558) +print_possibilities: See D.3. (line 3520) +quit: See 13.3.28. (line 2586) +rarp: See 13.2.11. (line 2023) +read: See 13.3.30. (line 2599) +reboot: See 13.3.29. (line 2593) +root: See 13.3.31. (line 2606) +rootnoverify: See 13.3.32. (line 2623) +saved_drive: See D.3. (line 3508) +saved_partition: See D.3. (line 3511) +savedefault: See 13.3.33. (line 2633) +serial: See 13.2.12. (line 2033) +setkey: See 13.2.13. (line 2055) +setup: See 13.3.34. (line 2665) +terminal: See 13.2.14. (line 2180) +terminfo: See 13.2.15. (line 2212) +testload: See 13.3.35. (line 2685) +testvbe: See 13.3.36. (line 2697) +tftpserver: See 13.2.16. (line 2225) +timeout: See 13.1.4. (line 1843) +title: See 13.1.5. (line 1850) +unhide: See 13.2.17. (line 2237) +uppermem: See 13.3.37. (line 2705) +vbeprobe: See 13.3.38. (line 2717) diff --git a/default-config/boot/invaders.img b/default-config/boot/invaders.img new file mode 100644 index 0000000..e100781 Binary files /dev/null and b/default-config/boot/invaders.img differ diff --git a/default-config/boot/lilo_diagnostic1.img b/default-config/boot/lilo_diagnostic1.img new file mode 100644 index 0000000..5d286bd Binary files /dev/null and b/default-config/boot/lilo_diagnostic1.img differ diff --git a/default-config/boot/lilo_diagnostic2.img b/default-config/boot/lilo_diagnostic2.img new file mode 100644 index 0000000..0b7cefd Binary files /dev/null and b/default-config/boot/lilo_diagnostic2.img differ diff --git a/default-config/boot/x86test.img b/default-config/boot/x86test.img new file mode 100644 index 0000000..7a7a721 Binary files /dev/null and b/default-config/boot/x86test.img differ -- cgit v1.2.3-70-g09d2