diff options
-rw-r--r-- | archlive_hook | 15 | ||||
-rw-r--r-- | default-config/boot/grub/help.lst | 9 | ||||
-rw-r--r-- | default-config/boot/grub/menu.lst | 16 | ||||
-rw-r--r-- | default-config/boot/grub/tools.lst | 16 | ||||
-rw-r--r-- | default-config/boot/help/grub.txt | 4220 | ||||
-rw-r--r-- | default-config/boot/lilo_diagnostic1.img | bin | 5040 -> 0 bytes | |||
-rw-r--r-- | default-config/boot/lilo_diagnostic2.img | bin | 17932 -> 0 bytes | |||
-rw-r--r-- | default-config/boot/x86test.img | bin | 37671 -> 0 bytes | |||
-rw-r--r-- | default-config/etc/archiso/functions | 24 | ||||
-rw-r--r-- | default-config/etc/inittab | 17 | ||||
-rw-r--r-- | default-config/etc/issue | 3 | ||||
-rw-r--r-- | default-config/etc/passwd | 2 | ||||
-rw-r--r-- | default-config/etc/rc.conf | 16 | ||||
-rw-r--r-- | default-config/etc/rc.sysinit-proxy | 16 | ||||
-rwxr-xr-x | mkarchiso | 49 | ||||
-rw-r--r-- | testiso | 13 |
16 files changed, 77 insertions, 4339 deletions
diff --git a/archlive_hook b/archlive_hook index 754c266..0b3ea1b 100644 --- a/archlive_hook +++ b/archlive_hook @@ -15,9 +15,8 @@ run_hook () squashimg="/tmpfs/bootcd/archlive.sqfs" /bin/modprobe -q isofs >/dev/null 2>&1 - PS1="ramfs$ " /bin/sh -i for cdrom in /dev/cd/*; do - if mount -r -t isofs "${cdrom}" /tmpfs/bootcd >/dev/null 2>&1; then + if mount -r -t iso9660 "${cdrom}" /tmpfs/bootcd >/dev/null 2>&1; then if [ -e "${squashimg}" ]; then squashfound=1 msg "${cdrom}" @@ -34,26 +33,24 @@ run_hook () exit 1 fi - if [ "${copytoram}" == "y" ]; then + if [ "${copytoram}" = "y" ]; then /bin/cat /tmpfs/bootcd/archlive.sqfs > /tmpfs/archlive.sqfs squashimg="/tmpfs/archlive.sqfs" fi - msg -n ":: Mounting squashfs image..." + msg ":: Mounting squashfs image" /bin/modprobe -q squashfs >/dev/null 2>&1 /bin/mkdir -p /tmpfs/squashfs_root - if ! /bin/losetup /dev/loop0 "${squashimg}"; then + if ! /bin/losetup /dev/loop0 "${squashimg}" >/dev/null 2>&1; then echo "ERROR: Cannot mount loop device /dev/loop0...aborting" exit 1 fi /bin/mount -r -t squashfs /dev/loop0 /tmpfs/squashfs_root - msg "done." - msg -n ":: Mounting root (union) filesystem..." + msg ":: Mounting root (union) filesystem" /bin/modprobe -q unionfs >/dev/null 2>&1 - /bin/mount -t unionfs -o dirs=/tmpfs=rw:/tmpfs/squashfs_root=ro,debug=0 none /real_root - msg "done." + /bin/mount -t unionfs -o dirs=/tmpfs=rw:/tmpfs/squashfs_root=ro none /real_root if [ -d /proc/sys/dev/cdrom ]; then echo 0 > /proc/sys/dev/cdrom/lock diff --git a/default-config/boot/grub/help.lst b/default-config/boot/grub/help.lst index 623e7c1..b9468eb 100644 --- a/default-config/boot/grub/help.lst +++ b/default-config/boot/grub/help.lst @@ -14,12 +14,3 @@ pause Press enter to continue... 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 2edc59a..f25c9fe 100644 --- a/default-config/boot/grub/menu.lst +++ b/default-config/boot/grub/menu.lst @@ -8,18 +8,18 @@ title Boot ArchLive kernel /boot/vmlinuz26 lang=en locale=en_US.UTF-8 ramdisk_size=75%
initrd /boot/archlive.img
-title Shutdown the Computer
-halt
-
-title Reboot the Computer
-reboot
-
title Tools...
-configgile /boot/grub/tools.lst
+configfile /boot/grub/tools.lst
title View Help...
configfile /boot/grub/help.lst
-
title More Options...
configfile /boot/grub/more.lst
+
+title Shutdown the Computer
+halt
+
+title Reboot the Computer
+reboot
+
diff --git a/default-config/boot/grub/tools.lst b/default-config/boot/grub/tools.lst index 583ee4b..ef7cabc 100644 --- a/default-config/boot/grub/tools.lst +++ b/default-config/boot/grub/tools.lst @@ -9,27 +9,19 @@ 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
+kernel /boot/x86test_zImage.bin
+#wget http://www.vortex.prodigynet.co.uk/x86test/x86test_zImage.bin
-# 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 LILO Diagnostic
+kernel /boot/diag2.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/grub.txt b/default-config/boot/help/grub.txt deleted file mode 100644 index b0197e1..0000000 --- a/default-config/boot/help/grub.txt +++ /dev/null @@ -1,4220 +0,0 @@ -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 <TAB>-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 <TAB>, 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 <p> 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: - -<C-f> -<PC right key> - Move forward one character. - -<C-b> -<PC left key> - Move back one character. - -<C-a> -<HOME> - Move to the start of the line. - -<C-e> -<END> - Move the the end of the line. - -<C-d> -<DEL> - Delete the character underneath the cursor. - -<C-h> -<BS> - Delete the character to the left of the cursor. - -<C-k> - Kill the text from the current cursor position to the end of the - line. - -<C-u> - Kill backward from the cursor to the beginning of the line. - -<C-y> - Yank the killed text back into the buffer at the cursor. - -<C-p> -<PC up key> - Move up through the history list. - -<C-n> -<PC down key> - 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 <TAB> key (or <C-i>) -will display a listing of the available commands, and if the cursor is -after the first word, the `<TAB>' 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 <RET> 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 <c> -(which operates exactly like the non-config-file version of GRUB, but -allows one to return to the menu if desired by pressing <ESC>) or to -edit any of the "boot entries" by pressing <e>. - - If you protect the menu interface with a password (*note Security::), -all you can do is choose an entry by pressing <RET>, or press <p> 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 <ESC> 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 <RET>, GRUB replaces the line in question in the boot entry -with the changes (unless it was aborted via <ESC>, in which case the -changes are thrown away). - - If you want to add a new line to the menu entry, press <o> if adding -a line after the current line or press <O> if before the current line. - - To delete a line, hit the key <d>. 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 <ESC>. - - 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 <ESC> 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 <ESC> 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 - `<PARTITION-OFFSET-SECTOR, BYTE-OFFSET, BYTE-LENGTH>' 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 `<CTRL>-<ALT>-<DEL>' 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 -`<CTRL>-<ALT>-<DEL>' 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 <C-c>. - - 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 <<EOT 1>/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 -<bug-grub@gnu.org>, 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 -<bug-grub@gnu.org>. 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/lilo_diagnostic1.img b/default-config/boot/lilo_diagnostic1.img Binary files differdeleted file mode 100644 index 5d286bd..0000000 --- a/default-config/boot/lilo_diagnostic1.img +++ /dev/null diff --git a/default-config/boot/lilo_diagnostic2.img b/default-config/boot/lilo_diagnostic2.img Binary files differdeleted file mode 100644 index 0b7cefd..0000000 --- a/default-config/boot/lilo_diagnostic2.img +++ /dev/null diff --git a/default-config/boot/x86test.img b/default-config/boot/x86test.img Binary files differdeleted file mode 100644 index 7a7a721..0000000 --- a/default-config/boot/x86test.img +++ /dev/null diff --git a/default-config/etc/archiso/functions b/default-config/etc/archiso/functions index 2972013..d668b4c 100644 --- a/default-config/etc/archiso/functions +++ b/default-config/etc/archiso/functions @@ -1,11 +1,13 @@ -# vim: set ft=sh:
-cmdline_param ()
-{
- while param do;
- case "${param}" in
- $1=*) echo "${param##*=}"; break ;;
- *) continue ;;
- esac
- echo "${2}"
- done < read /proc/cmdline
-}
+# vim: set ft=sh: + +cmdline_param () +{ + read cmdline < /proc/cmdline + for param in ${cmdline}; do + case "${param}" in + $1=*) echo "${param##*=}"; break ;; + *) continue ;; + esac + done + [ -n "${2}" ] && echo "${2}" +} diff --git a/default-config/etc/inittab b/default-config/etc/inittab deleted file mode 100644 index c9ffeea..0000000 --- a/default-config/etc/inittab +++ /dev/null @@ -1,17 +0,0 @@ -# runlevel 4 is typically "text mode", but is not specified in LSB -id:4:initdefault: - -rc::sysinit:/etc/rc.sysinit-proxy -rs:S1:wait:/etc/rc.single -rm:2345:wait:/etc/rc.multi -rh:06:wait:/etc/rc.shutdown -su:S:wait:/sbin/sulogin -p - -c1:2345:respawn:/sbin/agetty 38400 vc/1 linux -c2:2345:respawn:/sbin/agetty 38400 vc/2 linux -c3:2345:respawn:/sbin/agetty 38400 vc/3 linux -c4:2345:respawn:/sbin/agetty 38400 vc/4 linux -c5:2345:respawn:/sbin/agetty 38400 vc/5 linux -c6:2345:respawn:/sbin/agetty 38400 vc/6 linux - -ca::ctrlaltdel:/sbin/shutdown -t3 -r now diff --git a/default-config/etc/issue b/default-config/etc/issue index 9f3773c..3abbcf5 100644 --- a/default-config/etc/issue +++ b/default-config/etc/issue @@ -1,3 +1,4 @@ +[H[2J Arch Linux Live ISO 0.1 (Snicklefritz) \n [\s \m \r] (\n) -Started at \b \t +\s-\r \v \m started at \d \t Default login is "arch" with no password. diff --git a/default-config/etc/passwd b/default-config/etc/passwd index 6f69ed0..fc64eab 100644 --- a/default-config/etc/passwd +++ b/default-config/etc/passwd @@ -4,4 +4,4 @@ daemon:x:2:2:daemon:/sbin: mail:x:8:12:mail:/var/spool/mail:
ftp:x:14:11:ftp:/home/ftp:
nobody:x:99:99:nobody:/:
-arch::1000:100::/home/arch:/bin/bash
+arch::1000:100:users:/home/arch:/bin/bash
diff --git a/default-config/etc/rc.conf b/default-config/etc/rc.conf index 1b8b9c9..ed069e4 100644 --- a/default-config/etc/rc.conf +++ b/default-config/etc/rc.conf @@ -1,12 +1,18 @@ # # /etc/rc.conf - Main Configuration for Arch Linux -LOCALE="##LOCALE##" +. /etc/archiso/functions + +LOCALE_DEFAULT="en_US.UTF-8" +TIMEZONE_DEFAULT="America/Chicago" +KEYMAP_DEFAULT="us" + +LOCALE="$(cmdline_param locale ${LOCALE_DEFAULT})" HARDWARECLOCK="UTC" -TIMEZONE="##TIMEZONE##" -KEYMAP="##KEYMAP##" -CONSOLEFONT="" -CONSOLEMAP="" +TIMEZONE="$(cmdline_param timezone ${TIMEZONE_DEFAULT})" +KEYMAP="$(cmdline_param keymap ${KEYMAP_DEFAULT})" +CONSOLEFONT="$(cmdline_param consolefont)" +CONSOLEMAP="$(cmdline_param consolefont)" USECOLOR="yes" MOD_AUTOLOAD="yes" diff --git a/default-config/etc/rc.sysinit-proxy b/default-config/etc/rc.sysinit-proxy deleted file mode 100644 index f47156e..0000000 --- a/default-config/etc/rc.sysinit-proxy +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash
-# we need a proxy script here to convert some /proc/cmdline
-# parameters to rc.conf settings.
-
-. /etc/archlive/functions
-
-LOCALE_DEFAULT="en_US.UTF-8"
-TIMEZONE_DEFAULT="America/Chicago"
-KEYMAP_DEFAULT="us"
-
-sed -i "s|##LOCALE##|$(cmdline_param locale ${LOCALE_DEFAULT})|" /etc/rc.conf
-sed -i "s|##TIMEZONE##|$(cmdline_param timezone ${TIMEZONE_DEFAULT})|" /etc/rc.conf
-sed -i "s|##KEYMAP##|$(cmdline_param keymap ${KEYMAP_DEFAULT})|" /etc/rc.conf
-
-#now go to the real sysinit
-exec /etc/rc.sysinit
@@ -32,17 +32,18 @@ usage () exit 1 } -while getopts 'c:i:n:s:pvh' arg; do +while getopts 'c:i:fvh' arg; do case "${arg}" in c) CONFIG="${OPTARG}" ;; i) CPIOCONFIG="${OPTARG}" ;; - v) FORCE="f" ;; + f) FORCE="y" ;; v) QUIET="n" ;; h|?) usage ;; *) echo "invalid argument '${arg}'"; usage ;; esac done shift $(($OPTIND - 1)) +echo "ARGS: $@" [ $# -le 1 ] && usage @@ -57,23 +58,6 @@ esac [ "x${work_dir}" = "x" ] && (echo "please specify a working directory" && usage) -if [ -e "${work_dir}" -a "${FORCE}" = "n" ]; then - echo "Working dir '${work_dir}' already exists, aborting..." - exit 1 -fi - -if [ "${command_name}" = "iso" -o "${command_name}" = "all" ]; then - [ "x${isoname}" = "x" ] && (echo "please specify an iso name" && usage) - if [ -e "${isoname}" -a "${FORCE}" = "n"]; then - echo "ISO Image '${isoname}' already exists, aborting..." - exit 1 - fi - if [ -e "${CPIOCONFIG}" ]; then - echo "mkinitcpio config '${CPIOCONFIG}' does not exist, aborting..." - exit 1 - fi -fi - #TODO - do we even need a config file? if [ -e "${CONFIG}" ]; then source "${CONFIG}" @@ -134,6 +118,11 @@ install_pkgfile () } if [ "${command_name}" = "install" -o "${command_name}" = "all" ]; then + if [ -e "${work_dir}" -a "${FORCE}" = "n" ]; then + echo "Working dir '${work_dir}' already exists, aborting..." + exit 1 + fi + mkdir -p "${isoroot}" mkdir -p "${instroot}" @@ -176,7 +165,7 @@ if [ "${command_name}" = "install" -o "${command_name}" = "all" ]; then find "${instroot}/boot" -name *.img -delete #TODO, will this delete our special stuff? echo "Applying default configuration for the Arch ISO." - cp -rf ${DEF_CONFIG_DIR}/* "${instroot}" + cp -rfa ${DEF_CONFIG_DIR}/* "${instroot}" echo "Copyright (C) 2006, Arch Linux (Judd Vinet)" > "${instroot}/etc/copyright" @@ -228,6 +217,20 @@ if [ "${command_name}" = "squash" -o "${command_name}" = "all" ]; then fi if [ "${command_name}" = "iso" -o "${command_name}" = "all" ]; then + [ "x${isoname}" = "x" ] && (echo "please specify an iso name" && usage) + if [ -e "${isoname}" ]; then + if [ "${FORCE}" = "y" ]; then + rm -rf "${isoname}" + else + echo "ISO Image '${isoname}' already exists, aborting..." + exit 1 + fi + fi + if [ ! -e "${CPIOCONFIG}" ]; then + echo "mkinitcpio config '${CPIOCONFIG}' does not exist, aborting..." + exit 1 + fi + kernelver=$(_kversion) basedir=${instroot} [ "${instroot:0:1}" != "/" ] && basedir="$(pwd)/${instroot}" @@ -238,13 +241,11 @@ if [ "${command_name}" = "iso" -o "${command_name}" = "all" ]; then fi cp ${instroot}/usr/lib/grub/i386-pc/* "${isoroot}/boot/grub" -fi -if [ "${SKIP_ISO}" = "n" ]; then echo "Creating ISO image..." q="" - [ "${QUIET}" = "y" ] && q="-q" - mkisofs "${q}" -r -l -b "boot/grub/stage2_eltorito" -uid 0 -gid 0 -no-emul-boot \ + #[ "${QUIET}" = "y" ] && q="-q" + mkisofs ${q} -r -l -b "boot/grub/stage2_eltorito" -uid 0 -gid 0 -no-emul-boot \ -boot-load-size 4 -boot-info-table -publisher "Arch Linux <archlinux.org>" \ -input-charset=UTF-8 -p "prepared by $NAME" -A "Arch Linux Live/Rescue CD" \ -copyright /etc/copyright -o "${isoname}" "${isoroot}" @@ -1,6 +1,7 @@ -#!/bin/sh
-
-if [ $# -ne 1 ]; then
- echo "usage: testiso <iso name>"
-fi
-qemu -boot d -kernel-kqemu -cdrom "${1}"
+#!/bin/sh + +if [ $# -ne 1 ]; then + echo "usage: testiso <iso name>" + exit 1 +fi +qemu -boot d -kernel-kqemu -cdrom "${1}" |