Added GRUB docs, Added netboot.xyz
This commit is contained in:
parent
637d9037dc
commit
8f9ccbfa39
35 changed files with 6482 additions and 28 deletions
|
@ -1,5 +1,7 @@
|
||||||
Grubby Data Partition
|
Grubby Data Partition
|
||||||
================================================
|
================================================
|
||||||
|
[Git Source](https://git.deboone.nl/ericteunis/grubby.git)
|
||||||
|
|
||||||
|
|
||||||
If you've found this USB stick, please get in
|
If you've found this USB stick, please get in
|
||||||
touch via ericteunis@deboone.nl,
|
touch via ericteunis@deboone.nl,
|
||||||
|
@ -35,6 +37,10 @@ mkdir "${DATA_MNT}/boot"
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Some Funny Things
|
||||||
|
================================================
|
||||||
|
- [Grub invaders](http://www.erikyyy.de/invaders/)
|
||||||
|
- [netboot.xyz](https://netboot.xyz) A PXE boot environment
|
||||||
|
|
||||||
Inspiration & Links
|
Inspiration & Links
|
||||||
================================================
|
================================================
|
||||||
|
|
|
@ -5,50 +5,154 @@ set timeout=30
|
||||||
insmod all_video
|
insmod all_video
|
||||||
set gfxpayload=keep
|
set gfxpayload=keep
|
||||||
|
|
||||||
|
# ISOs configuration
|
||||||
|
set isoconfig="/boot/isos.cfg"
|
||||||
|
export isoconfig
|
||||||
|
|
||||||
|
# Persistent folder
|
||||||
|
set persistent="${prefix}/persistent"
|
||||||
|
export persistent
|
||||||
|
|
||||||
# Enable GUI
|
# Enable GUI
|
||||||
terminal_output gfxterm
|
terminal_output gfxterm
|
||||||
|
|
||||||
|
# Get the ROOTUUID of this USB stick
|
||||||
probe -u $root --set=rootuuid
|
probe -u $root --set=rootuuid
|
||||||
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
|
set imgdevpath="/dev/disk/by-uuid/$rootuuid"
|
||||||
export imgdevpath rootuuid
|
export imgdevpath rootuuid
|
||||||
set isopath="/boot/isos"
|
|
||||||
export isopath
|
|
||||||
|
|
||||||
|
# Enable the Pager
|
||||||
set pager=1
|
set pager=1
|
||||||
|
|
||||||
if [ -f "${prefix}/theming.cfg" ];
|
# Get theming
|
||||||
source "${prefix}/theming.cfg"
|
if [ -f "${prefix}/theming.cfg" ]; then
|
||||||
|
#source "${prefix}/theming.cfg"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
menuentry "Local Boot" {
|
# Start the menuentries
|
||||||
|
##############
|
||||||
|
|
||||||
|
menuentry "[c] CPU info " --hotkey=c {
|
||||||
|
if cpuid -l ; then
|
||||||
|
echo "This CPU supports 64-bit."
|
||||||
|
else
|
||||||
|
echo "This CPU does not support 64-bit."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if cpuid -p ; then
|
||||||
|
echo "This CPU supports PAE."
|
||||||
|
else
|
||||||
|
echo "This CPU does not support PAE."
|
||||||
|
fi
|
||||||
|
sleep --interruptible 10
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "[l] Local Boot" --hotkey=l {
|
||||||
insmod chain
|
insmod chain
|
||||||
|
|
||||||
chainloader +1
|
chainloader +1
|
||||||
}
|
}
|
||||||
menuentry "Show Drives" {
|
|
||||||
ls
|
|
||||||
|
if [ -f "${isoconfig}" ]; then
|
||||||
|
menuentry ' ' { true }
|
||||||
|
|
||||||
|
menuentry "[i] Inspect Isos >" --hotkey=i --default {
|
||||||
|
echo "Loading various ISO configurations"
|
||||||
|
configfile "${isoconfig}"
|
||||||
}
|
}
|
||||||
|
|
||||||
menuentry "Enable LVMs" {
|
menuentry ' ' { true }
|
||||||
|
fi
|
||||||
|
|
||||||
|
submenu "GRUB2 options -> "{
|
||||||
|
menuentry "Show Drives" {
|
||||||
|
ls -l
|
||||||
|
sleep --interruptible 9999
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Enable LVM support" {
|
||||||
insmod lvm
|
insmod lvm
|
||||||
}
|
}
|
||||||
|
|
||||||
|
menuentry "Enable RAID support" {
|
||||||
|
insmod dm_nv
|
||||||
|
insmod mdraid09_be
|
||||||
|
insmod mdraid09
|
||||||
|
insmod mdradi1x
|
||||||
|
insmod raid5rec
|
||||||
|
insmod raid6rec
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Enable PATA support" {
|
||||||
|
insmod ata
|
||||||
|
update_paths
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Mount encrypted volumnes (LUKS and geli)" {
|
||||||
|
insmod luks
|
||||||
|
insmod geli
|
||||||
|
cryptomount -a
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Enable Serial Terminal" {
|
||||||
|
serial
|
||||||
|
terminal_input --append serial
|
||||||
|
terminal_output --apend serial
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Enable USB support *experimental*" {
|
||||||
|
insmod ohci
|
||||||
|
insmod uhci
|
||||||
|
insmod usbms
|
||||||
|
update_paths
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ ${grub_platform} == "efi" ]; then
|
||||||
|
# place UEFI-only menu entries here
|
||||||
|
menuentry "Firmware Setup " --class efi {
|
||||||
|
fwsetup
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "UEFI Shell" --class efi {
|
||||||
|
insmod fat
|
||||||
|
insmod chain
|
||||||
|
search --no-floppy --set=root --file /shellx64.efi
|
||||||
|
chainloader /shellx64.efi
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ -f "${prefix}/isos.cfg" ]; then
|
|
||||||
menuentry ' ' { // Empty Line
|
menuentry ' ' { // Empty Line
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
menuentry "Inspect Isos" {
|
menuentry "[i] Invaders" --hotkey=i --class=game --class=invaders {
|
||||||
echo "Loading Iso Configs"
|
echo "Starting Invaders"
|
||||||
source "${prefix}/isos.cfg"
|
linux16 "${prefix}/persist/invaders/invaders"
|
||||||
|
boot
|
||||||
}
|
}
|
||||||
fi
|
|
||||||
|
|
||||||
|
menuentry "[b] netboot.xyz" --hotkey=b --class=netboot {
|
||||||
|
echo "Using netboot.xyz"
|
||||||
if [ ${grub_platform} == "efi" ]; then
|
if [ ${grub_platform} == "efi" ]; then
|
||||||
# place UEFI-only menu entries here
|
chainloader "${persistent}/netboot.xyz/netboot.xyz.efi"
|
||||||
|
else
|
||||||
|
linux16 "${persistent}/netboot.xyz/netboot.xyz.lkrn"
|
||||||
fi
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "[d] read Grub2 Documentation" --hotkey=d --class=docs {
|
||||||
|
docs="${persistent}/docs"
|
||||||
|
export docs
|
||||||
|
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "[m] MemTest86+" --hotkey=m {
|
||||||
|
linux16 "${persistent}/memtest86/memtest+-5.31b.bin"
|
||||||
|
}
|
||||||
|
|
||||||
menuentry ' ' { // Empty Line
|
menuentry ' ' { // Empty Line
|
||||||
true
|
true
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
if [ -d "${prefix}/isos.d" ]; then
|
|
||||||
for conf in isos.d/*.cfg; do
|
|
||||||
source "$conf"
|
|
||||||
done
|
|
||||||
fi
|
|
540
boot/grub/persistent/docs/000_license
Normal file
540
boot/grub/persistent/docs/000_license
Normal file
|
@ -0,0 +1,540 @@
|
||||||
|
|
||||||
|
Appendix D Copying This Manual
|
||||||
|
******************************
|
||||||
|
|
||||||
|
D.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.
|
||||||
|
|
||||||
|
D.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
|
||||||
|
*****
|
||||||
|
|
||||||
|
* Menu:
|
||||||
|
|
||||||
|
* [: [. (line 3653)
|
||||||
|
* acpi: acpi. (line 3659)
|
||||||
|
* authenticate: authenticate. (line 3679)
|
||||||
|
* background_color: background_color. (line 3688)
|
||||||
|
* background_image: background_image. (line 3701)
|
||||||
|
* badram: badram. (line 3711)
|
||||||
|
* blocklist: blocklist. (line 3732)
|
||||||
|
* boot: boot. (line 3738)
|
||||||
|
* cat: cat. (line 3746)
|
||||||
|
* chainloader: chainloader. (line 3761)
|
||||||
|
* clear: clear. (line 3773)
|
||||||
|
* CMOS: cmosdump. (line 3786)
|
||||||
|
* cmosclean: cmosclean. (line 3779)
|
||||||
|
* cmostest: cmostest. (line 3793)
|
||||||
|
* cmp: cmp. (line 3801)
|
||||||
|
* configfile: configfile. (line 3817)
|
||||||
|
* cpuid: cpuid. (line 3826)
|
||||||
|
* crc: crc. (line 3842)
|
||||||
|
* cryptomount: cryptomount. (line 3849)
|
||||||
|
* date: date. (line 3864)
|
||||||
|
* devicetree: devicetree. (line 3876)
|
||||||
|
* distrust: distrust. (line 3885)
|
||||||
|
* drivemap: drivemap. (line 3899)
|
||||||
|
* echo: echo. (line 3920)
|
||||||
|
* eval: eval. (line 3959)
|
||||||
|
* export: export. (line 3966)
|
||||||
|
* false: false. (line 3974)
|
||||||
|
* FDL, GNU Free Documentation License: GNU Free Documentation License.
|
||||||
|
(line 6124)
|
||||||
|
* gettext: gettext. (line 3981)
|
||||||
|
* gptsync: gptsync. (line 3992)
|
||||||
|
* halt: halt. (line 4010)
|
||||||
|
* hashsum: hashsum. (line 4018)
|
||||||
|
* help: help. (line 4041)
|
||||||
|
* initrd: initrd. (line 4052)
|
||||||
|
* initrd16: initrd16. (line 4061)
|
||||||
|
* insmod: insmod. (line 4072)
|
||||||
|
* keystatus: keystatus. (line 4078)
|
||||||
|
* linux: linux. (line 4091)
|
||||||
|
* linux16: linux16. (line 4108)
|
||||||
|
* list_env: list_env. (line 4124)
|
||||||
|
* list_trusted: list_trusted. (line 4134)
|
||||||
|
* loadfont: loadfont. (line 4180)
|
||||||
|
* load_env: load_env. (line 4145)
|
||||||
|
* loopback: loopback. (line 4188)
|
||||||
|
* ls: ls. (line 4201)
|
||||||
|
* lsfonts: lsfonts. (line 4217)
|
||||||
|
* lsmod: lsmod. (line 4223)
|
||||||
|
* md5sum: md5sum. (line 4229)
|
||||||
|
* menuentry: menuentry. (line 3515)
|
||||||
|
* module: module. (line 4236)
|
||||||
|
* multiboot: multiboot. (line 4243)
|
||||||
|
* nativedisk: nativedisk. (line 4264)
|
||||||
|
* net_add_addr: net_add_addr. (line 4817)
|
||||||
|
* net_add_dns: net_add_dns. (line 4827)
|
||||||
|
* net_add_route: net_add_route. (line 4834)
|
||||||
|
* net_bootp: net_bootp. (line 4845)
|
||||||
|
* net_del_addr: net_del_addr. (line 4879)
|
||||||
|
* net_del_dns: net_del_dns. (line 4885)
|
||||||
|
* net_del_route: net_del_route. (line 4891)
|
||||||
|
* net_get_dhcp_option: net_get_dhcp_option.
|
||||||
|
(line 4897)
|
||||||
|
* net_ipv6_autoconf: net_ipv6_autoconf. (line 4906)
|
||||||
|
* net_ls_addr: net_ls_addr. (line 4914)
|
||||||
|
* net_ls_cards: net_ls_cards. (line 4920)
|
||||||
|
* net_ls_dns: net_ls_dns. (line 4926)
|
||||||
|
* net_ls_routes: net_ls_routes. (line 4932)
|
||||||
|
* net_nslookup: net_nslookup. (line 4938)
|
||||||
|
* normal: normal. (line 4273)
|
||||||
|
* normal_exit: normal_exit. (line 4291)
|
||||||
|
* parttool: parttool. (line 4298)
|
||||||
|
* password: password. (line 4332)
|
||||||
|
* password_pbkdf2: password_pbkdf2. (line 4339)
|
||||||
|
* play: play. (line 4347)
|
||||||
|
* probe: probe. (line 4364)
|
||||||
|
* pxe_unload: pxe_unload. (line 4372)
|
||||||
|
* rdmsr: rdmsr. (line 4380)
|
||||||
|
* read: read. (line 4397)
|
||||||
|
* reboot: reboot. (line 4405)
|
||||||
|
* regexp: regexp. (line 4411)
|
||||||
|
* rmmod: rmmod. (line 4421)
|
||||||
|
* save_env: save_env. (line 4427)
|
||||||
|
* search: search. (line 4448)
|
||||||
|
* sendkey: sendkey. (line 4466)
|
||||||
|
* serial: serial. (line 3568)
|
||||||
|
* set: set. (line 4602)
|
||||||
|
* sha1sum: sha1sum. (line 4609)
|
||||||
|
* sha256sum: sha256sum. (line 4616)
|
||||||
|
* sha512sum: sha512sum. (line 4623)
|
||||||
|
* sleep: sleep. (line 4630)
|
||||||
|
* source: source. (line 4639)
|
||||||
|
* submenu: submenu. (line 3550)
|
||||||
|
* terminal_input: terminal_input. (line 3589)
|
||||||
|
* terminal_output: terminal_output. (line 3606)
|
||||||
|
* terminfo: terminfo. (line 3623)
|
||||||
|
* test: test. (line 4650)
|
||||||
|
* true: true. (line 4723)
|
||||||
|
* trust: trust. (line 4730)
|
||||||
|
* unset: unset. (line 4744)
|
||||||
|
* verify_detached: verify_detached. (line 4755)
|
||||||
|
* videoinfo: videoinfo. (line 4774)
|
||||||
|
* wrmsr: wrmsr. (line 4781)
|
||||||
|
* xen_hypervisor: xen_hypervisor. (line 4795)
|
||||||
|
* xen_module: xen_module. (line 4804)
|
||||||
|
|
269
boot/grub/persistent/docs/00_index
Normal file
269
boot/grub/persistent/docs/00_index
Normal file
|
@ -0,0 +1,269 @@
|
||||||
|
GNU GRUB manual
|
||||||
|
1 Introduction to GRUB
|
||||||
|
1.1 Overview
|
||||||
|
1.2 History of GRUB
|
||||||
|
1.3 Differences from previous versions
|
||||||
|
1.4 GRUB features
|
||||||
|
1.5 The role of a boot loader
|
||||||
|
2 Naming convention
|
||||||
|
3 OS-specific notes about grub tools
|
||||||
|
4 Installation
|
||||||
|
4.1 Installing GRUB using grub-install
|
||||||
|
4.2 Making a GRUB bootable CD-ROM
|
||||||
|
4.3 The map between BIOS drives and OS devices
|
||||||
|
4.4 BIOS installation
|
||||||
|
5 Booting
|
||||||
|
5.1 How to boot operating systems
|
||||||
|
5.1.1 How to boot an OS directly with GRUB
|
||||||
|
5.1.2 Chain-loading an OS
|
||||||
|
5.2 Loopback booting
|
||||||
|
5.3 Some caveats on OS-specific issues
|
||||||
|
5.3.1 GNU/Hurd
|
||||||
|
5.3.2 GNU/Linux
|
||||||
|
5.3.3 NetBSD
|
||||||
|
5.3.4 DOS/Windows
|
||||||
|
6 Writing your own configuration file
|
||||||
|
6.1 Simple configuration handling
|
||||||
|
6.2 Root Identifcation Heuristics
|
||||||
|
6.3 Writing full configuration files directly
|
||||||
|
6.4 Multi-boot manual config
|
||||||
|
6.5 Embedding a configuration file into GRUB
|
||||||
|
7 Theme file format
|
||||||
|
7.1 Introduction
|
||||||
|
7.2 Theme Elements
|
||||||
|
7.2.1 Colors
|
||||||
|
7.2.2 Fonts
|
||||||
|
7.2.3 Progress Bar
|
||||||
|
7.2.4 Circular Progress Indicator
|
||||||
|
7.2.5 Labels
|
||||||
|
7.2.6 Boot Menu
|
||||||
|
7.2.7 Styled Boxes
|
||||||
|
7.2.8 Creating Styled Box Images
|
||||||
|
7.3 Theme File Manual
|
||||||
|
7.3.1 Global Properties
|
||||||
|
7.3.2 Format
|
||||||
|
7.3.3 Global Property List
|
||||||
|
7.3.4 Component Construction
|
||||||
|
7.3.5 Component List
|
||||||
|
7.3.6 Common properties
|
||||||
|
8 Booting GRUB from the network
|
||||||
|
9 Using GRUB via a serial line
|
||||||
|
10 Using GRUB with vendor power-on keys
|
||||||
|
11 GRUB image files
|
||||||
|
12 Core image size limitation
|
||||||
|
13 Filesystem syntax and semantics
|
||||||
|
13.1 How to specify devices
|
||||||
|
13.2 How to specify files
|
||||||
|
13.3 How to specify block lists
|
||||||
|
14 GRUB's user interface
|
||||||
|
14.1 The flexible command-line interface
|
||||||
|
14.2 The simple menu interface
|
||||||
|
14.3 Editing a menu entry
|
||||||
|
15 GRUB environment variables
|
||||||
|
15.1 Special environment variables
|
||||||
|
15.1.1 biosnum
|
||||||
|
15.1.2 check_signatures
|
||||||
|
15.1.3 chosen
|
||||||
|
15.1.4 cmdpath
|
||||||
|
15.1.5 color_highlight
|
||||||
|
15.1.6 color_normal
|
||||||
|
15.1.7 config_directory
|
||||||
|
15.1.8 config_file
|
||||||
|
15.1.9 debug
|
||||||
|
15.1.10 default
|
||||||
|
15.1.11 fallback
|
||||||
|
15.1.12 gfxmode
|
||||||
|
15.1.13 gfxpayload
|
||||||
|
15.1.14 gfxterm_font
|
||||||
|
15.1.15 grub_cpu
|
||||||
|
15.1.16 grub_platform
|
||||||
|
15.1.17 icondir
|
||||||
|
15.1.18 lang
|
||||||
|
15.1.19 locale_dir
|
||||||
|
15.1.20 menu_color_highlight
|
||||||
|
15.1.21 menu_color_normal
|
||||||
|
15.1.22 net_<INTERFACE>_boot_file
|
||||||
|
15.1.23 net_<INTERFACE>_dhcp_server_name
|
||||||
|
15.1.24 net_<INTERFACE>_domain
|
||||||
|
15.1.25 net_<INTERFACE>_extensionspath
|
||||||
|
15.1.26 net_<INTERFACE>_hostname
|
||||||
|
15.1.27 net_<INTERFACE>_ip
|
||||||
|
15.1.28 net_<INTERFACE>_mac
|
||||||
|
15.1.29 net_<INTERFACE>_next_server
|
||||||
|
15.1.30 net_<INTERFACE>_rootpath
|
||||||
|
15.1.31 net_default_interface
|
||||||
|
15.1.32 net_default_ip
|
||||||
|
15.1.33 net_default_mac
|
||||||
|
15.1.34 net_default_server
|
||||||
|
15.1.35 pager
|
||||||
|
15.1.36 prefix
|
||||||
|
15.1.37 pxe_blksize
|
||||||
|
15.1.38 pxe_default_gateway
|
||||||
|
15.1.39 pxe_default_server
|
||||||
|
15.1.40 root
|
||||||
|
15.1.41 superusers
|
||||||
|
15.1.42 theme
|
||||||
|
15.1.43 timeout
|
||||||
|
15.1.44 timeout_style
|
||||||
|
15.2 The GRUB environment block
|
||||||
|
16 The list of available commands
|
||||||
|
16.1 The list of commands for the menu only
|
||||||
|
16.1.1 menuentry
|
||||||
|
16.1.2 submenu
|
||||||
|
16.2 The list of general commands
|
||||||
|
16.2.1 serial
|
||||||
|
16.2.2 terminal_input
|
||||||
|
16.2.3 terminal_output
|
||||||
|
16.2.4 terminfo
|
||||||
|
16.3 The list of command-line and menu entry commands
|
||||||
|
16.3.1 [
|
||||||
|
16.3.2 acpi
|
||||||
|
16.3.3 authenticate
|
||||||
|
16.3.4 background_color
|
||||||
|
16.3.5 background_image
|
||||||
|
16.3.6 badram
|
||||||
|
16.3.7 blocklist
|
||||||
|
16.3.8 boot
|
||||||
|
16.3.9 cat
|
||||||
|
16.3.10 chainloader
|
||||||
|
16.3.11 clear
|
||||||
|
16.3.12 cmosclean
|
||||||
|
16.3.13 cmosdump
|
||||||
|
16.3.14 cmostest
|
||||||
|
16.3.15 cmp
|
||||||
|
16.3.16 configfile
|
||||||
|
16.3.17 cpuid
|
||||||
|
16.3.18 crc
|
||||||
|
16.3.19 cryptomount
|
||||||
|
16.3.20 date
|
||||||
|
16.3.21 linux
|
||||||
|
16.3.22 distrust
|
||||||
|
16.3.23 drivemap
|
||||||
|
16.3.24 echo
|
||||||
|
16.3.25 eval
|
||||||
|
16.3.26 export
|
||||||
|
16.3.27 false
|
||||||
|
16.3.28 gettext
|
||||||
|
16.3.29 gptsync
|
||||||
|
16.3.30 halt
|
||||||
|
16.3.31 hashsum
|
||||||
|
16.3.32 help
|
||||||
|
16.3.33 initrd
|
||||||
|
16.3.34 initrd16
|
||||||
|
16.3.35 insmod
|
||||||
|
16.3.36 keystatus
|
||||||
|
16.3.37 linux
|
||||||
|
16.3.38 linux16
|
||||||
|
16.3.39 list_env
|
||||||
|
16.3.40 list_trusted
|
||||||
|
16.3.41 load_env
|
||||||
|
16.3.42 loadfont
|
||||||
|
16.3.43 loopback
|
||||||
|
16.3.44 ls
|
||||||
|
16.3.45 lsfonts
|
||||||
|
16.3.46 lsmod
|
||||||
|
16.3.47 md5sum
|
||||||
|
16.3.48 module
|
||||||
|
16.3.49 multiboot
|
||||||
|
16.3.50 nativedisk
|
||||||
|
16.3.51 normal
|
||||||
|
16.3.52 normal_exit
|
||||||
|
16.3.53 parttool
|
||||||
|
16.3.54 password
|
||||||
|
16.3.55 password_pbkdf2
|
||||||
|
16.3.56 play
|
||||||
|
16.3.57 probe
|
||||||
|
16.3.58 pxe_unload
|
||||||
|
16.3.59 rdmsr
|
||||||
|
16.3.60 read
|
||||||
|
16.3.61 reboot
|
||||||
|
16.3.62 regexp
|
||||||
|
16.3.63 rmmod
|
||||||
|
16.3.64 save_env
|
||||||
|
16.3.65 search
|
||||||
|
16.3.66 sendkey
|
||||||
|
16.3.67 set
|
||||||
|
16.3.68 sha1sum
|
||||||
|
16.3.69 sha256sum
|
||||||
|
16.3.70 sha512sum
|
||||||
|
16.3.71 sleep
|
||||||
|
16.3.72 source
|
||||||
|
16.3.73 test
|
||||||
|
16.3.74 true
|
||||||
|
16.3.75 trust
|
||||||
|
16.3.76 unset
|
||||||
|
16.3.77 uppermem
|
||||||
|
16.3.78 verify_detached
|
||||||
|
16.3.79 videoinfo
|
||||||
|
16.3.80 wrmsr
|
||||||
|
16.3.81 xen_hypervisor
|
||||||
|
16.3.82 xen_module
|
||||||
|
16.4 The list of networking commands
|
||||||
|
16.4.1 net_add_addr
|
||||||
|
16.4.2 net_add_dns
|
||||||
|
16.4.3 net_add_route
|
||||||
|
16.4.4 net_bootp
|
||||||
|
16.4.5 net_del_addr
|
||||||
|
16.4.6 net_del_dns
|
||||||
|
16.4.7 net_del_route
|
||||||
|
16.4.8 net_get_dhcp_option
|
||||||
|
16.4.9 net_ipv6_autoconf
|
||||||
|
16.4.10 net_ls_addr
|
||||||
|
16.4.11 net_ls_cards
|
||||||
|
16.4.12 net_ls_dns
|
||||||
|
16.4.13 net_ls_routes
|
||||||
|
16.4.14 net_nslookup
|
||||||
|
17 Internationalisation
|
||||||
|
17.1 Charset
|
||||||
|
17.2 Filesystems
|
||||||
|
17.3 Output terminal
|
||||||
|
17.4 Input terminal
|
||||||
|
17.5 Gettext
|
||||||
|
17.6 Regexp
|
||||||
|
17.7 Other
|
||||||
|
18 Security
|
||||||
|
18.1 Authentication and authorisation in GRUB
|
||||||
|
18.2 Using digital signatures in GRUB
|
||||||
|
18.3 UEFI secure boot and shim support
|
||||||
|
18.4 Measuring boot components
|
||||||
|
19 Platform limitations
|
||||||
|
20 Outline
|
||||||
|
21 Supported boot targets
|
||||||
|
21.1 Boot tests
|
||||||
|
22 Error messages produced by GRUB
|
||||||
|
22.1 GRUB only offers a rescue shell
|
||||||
|
22.2 Firmware stalls instead of booting GRUB
|
||||||
|
23 Invoking grub-install
|
||||||
|
24 Invoking grub-mkconfig
|
||||||
|
25 Invoking grub-mkpasswd-pbkdf2
|
||||||
|
26 Invoking grub-mkrelpath
|
||||||
|
27 Invoking grub-mkrescue
|
||||||
|
28 Invoking grub-mount
|
||||||
|
29 Invoking grub-probe
|
||||||
|
30 Invoking grub-script-check
|
||||||
|
Appendix A How to obtain and build GRUB
|
||||||
|
Appendix B Reporting bugs
|
||||||
|
Appendix C Where GRUB will go
|
||||||
|
Appendix D Copying This Manual
|
||||||
|
D.1 GNU Free Documentation License
|
||||||
|
D.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 a wide range of
|
||||||
|
architectures.
|
||||||
|
|
||||||
|
This edition documents version 2.04.
|
||||||
|
|
||||||
|
This manual is for GNU GRUB (version 2.04, 24 June 2019).
|
||||||
|
|
||||||
|
Copyright (C)
|
||||||
|
1999,2000,2001,2002,2004,2006,2008,2009,2010,2011,2012,2013 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.
|
312
boot/grub/persistent/docs/01_introduction
Normal file
312
boot/grub/persistent/docs/01_introduction
Normal file
|
@ -0,0 +1,312 @@
|
||||||
|
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.
|
||||||
|
|
||||||
|
(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.
|
||||||
|
|
||||||
|
Over the next few years, GRUB was extended to meet many needs, but it
|
||||||
|
quickly became clear that its design was not keeping up with the
|
||||||
|
extensions being made to it, and we reached the point where it was very
|
||||||
|
difficult to make any further changes without breaking existing
|
||||||
|
features. Around 2002, Yoshinori K. Okuji started work on PUPA
|
||||||
|
(Preliminary Universal Programming Architecture for GNU GRUB), aiming to
|
||||||
|
rewrite the core of GRUB to make it cleaner, safer, more robust, and
|
||||||
|
more powerful. PUPA was eventually renamed to GRUB 2, and the original
|
||||||
|
version of GRUB was renamed to GRUB Legacy. Small amounts of
|
||||||
|
maintenance continued to be done on GRUB Legacy, but the last release
|
||||||
|
(0.97) was made in 2005 and at the time of writing it seems unlikely
|
||||||
|
that there will be another.
|
||||||
|
|
||||||
|
By around 2007, GNU/Linux distributions started to use GRUB 2 to
|
||||||
|
limited extents, and by the end of 2009 multiple major distributions
|
||||||
|
were installing it by default.
|
||||||
|
|
||||||
|
1.3 Differences from previous versions
|
||||||
|
======================================
|
||||||
|
|
||||||
|
GRUB 2 is a rewrite of GRUB (*note History::), although it shares many
|
||||||
|
characteristics with the previous version, now known as GRUB Legacy.
|
||||||
|
Users of GRUB Legacy may need some guidance to find their way around
|
||||||
|
this new version.
|
||||||
|
|
||||||
|
* The configuration file has a new name ('grub.cfg' rather than
|
||||||
|
'menu.lst' or 'grub.conf'), new syntax (*note Configuration::) and
|
||||||
|
many new commands (*note Commands::). Configuration cannot be
|
||||||
|
copied over directly, although most GRUB Legacy users should not
|
||||||
|
find the syntax too surprising.
|
||||||
|
|
||||||
|
* 'grub.cfg' is typically automatically generated by 'grub-mkconfig'
|
||||||
|
(*note Simple configuration::). This makes it easier to handle
|
||||||
|
versioned kernel upgrades.
|
||||||
|
|
||||||
|
* Partition numbers in GRUB device names now start at 1, not 0 (*note
|
||||||
|
Naming convention::).
|
||||||
|
|
||||||
|
* The configuration file is now written in something closer to a full
|
||||||
|
scripting language: variables, conditionals, and loops are
|
||||||
|
available.
|
||||||
|
|
||||||
|
* A small amount of persistent storage is available across reboots,
|
||||||
|
using the 'save_env' and 'load_env' commands in GRUB and the
|
||||||
|
'grub-editenv' utility. This is not available in all
|
||||||
|
configurations (*note Environment block::).
|
||||||
|
|
||||||
|
* GRUB 2 has more reliable ways to find its own files and those of
|
||||||
|
target kernels on multiple-disk systems, and has commands (*note
|
||||||
|
search::) to find devices using file system labels or Universally
|
||||||
|
Unique Identifiers (UUIDs).
|
||||||
|
|
||||||
|
* GRUB 2 is available for several other types of system in addition
|
||||||
|
to the PC BIOS systems supported by GRUB Legacy: PC EFI, PC
|
||||||
|
coreboot, PowerPC, SPARC, and MIPS Lemote Yeeloong are all
|
||||||
|
supported.
|
||||||
|
|
||||||
|
* Many more file systems are supported, including but not limited to
|
||||||
|
ext4, HFS+, and NTFS.
|
||||||
|
|
||||||
|
* GRUB 2 can read files directly from LVM and RAID devices.
|
||||||
|
|
||||||
|
* A graphical terminal and a graphical menu system are available.
|
||||||
|
|
||||||
|
* GRUB 2's interface can be translated, including menu entry names.
|
||||||
|
|
||||||
|
* The image files (*note Images::) that make up GRUB have been
|
||||||
|
reorganised; Stage 1, Stage 1.5, and Stage 2 are no more.
|
||||||
|
|
||||||
|
* GRUB 2 puts many facilities in dynamically loaded modules, allowing
|
||||||
|
the core image to be smaller, and allowing the core image to be
|
||||||
|
built in more flexible ways.
|
||||||
|
|
||||||
|
1.4 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(1) (*note
|
||||||
|
Features-Footnote-1::), 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 "Amiga Fast FileSystem (AFFS)", "AtheOS fs", "BeFS",
|
||||||
|
"BtrFS" (including raid0, raid1, raid10, gzip and lzo), "cpio"
|
||||||
|
(little- and big-endian bin, odc and newc variants), "Linux
|
||||||
|
ext2/ext3/ext4", "DOS FAT12/FAT16/FAT32", "exFAT", "F2FS", "HFS",
|
||||||
|
"HFS+", "ISO9660" (including Joliet, Rock-ridge and multi-chunk
|
||||||
|
files), "JFS", "Minix fs" (versions 1, 2 and 3), "nilfs2", "NTFS"
|
||||||
|
(including compression), "ReiserFS", "ROMFS", "Amiga Smart
|
||||||
|
FileSystem (SFS)", "Squash4", "tar", "UDF", "BSD UFS/UFS2", "XFS",
|
||||||
|
and "ZFS" (including lzjb, gzip, zle, mirror, stripe, raidz1/2/3
|
||||||
|
and encryption in AES-CCM and AES-GCM). *Note Filesystem::, for
|
||||||
|
more information.
|
||||||
|
|
||||||
|
Support automatic decompression
|
||||||
|
Can decompress files which were compressed by 'gzip' or 'xz'(2)
|
||||||
|
(*note Features-Footnote-2::). 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.(3) (*note Features-Footnote-3::)
|
||||||
|
|
||||||
|
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) The NetBSD/i386 kernel is Multiboot-compliant, but lacks support
|
||||||
|
for Multiboot modules.
|
||||||
|
|
||||||
|
(2) Only CRC32 data integrity check is supported (xz default is CRC64
|
||||||
|
so one should use -check=crc32 option). LZMA BCJ filters are supported.
|
||||||
|
|
||||||
|
(3) There are a few pathological cases where loading a very badly
|
||||||
|
organized ELF kernel might take longer, but in practice this never
|
||||||
|
happen.
|
||||||
|
|
||||||
|
1.5 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.
|
||||||
|
|
71
boot/grub/persistent/docs/02_naming_convention
Normal file
71
boot/grub/persistent/docs/02_naming_convention
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
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,msdos2)
|
||||||
|
|
||||||
|
Here, 'hd' means it is a hard disk drive. The first integer '0'
|
||||||
|
indicates the drive number, that is, the first hard disk, the string
|
||||||
|
'msdos' indicates the partition scheme, while the second integer, '2',
|
||||||
|
indicates the partition number (or the PC slice number in the BSD
|
||||||
|
terminology). The partition numbers are counted from _one_, not from
|
||||||
|
zero (as was the case in previous versions of GRUB). 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,msdos5)
|
||||||
|
|
||||||
|
This specifies the first "extended partition" of the first hard disk
|
||||||
|
drive. Note that the partition numbers for extended partitions are
|
||||||
|
counted from '5', regardless of the actual number of primary partitions
|
||||||
|
on your hard disk.
|
||||||
|
|
||||||
|
(hd1,msdos1,bsd1)
|
||||||
|
|
||||||
|
This means the BSD 'a' partition on first PC slice number of the
|
||||||
|
second hard disk.
|
||||||
|
|
||||||
|
Of course, to actually access the disks or partitions with GRUB, you
|
||||||
|
need to use the device specification in a command, like 'set root=(fd0)'
|
||||||
|
or 'parttool (hd0,msdos3) hidden-'. 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
|
||||||
|
|
||||||
|
set 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,msdos1)/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.
|
||||||
|
|
49
boot/grub/persistent/docs/03_os_specific_notes
Normal file
49
boot/grub/persistent/docs/03_os_specific_notes
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
3 OS-specific notes about grub tools
|
||||||
|
************************************
|
||||||
|
|
||||||
|
On OS which have device nodes similar to Unix-like OS GRUB tools use the
|
||||||
|
OS name. E.g. for GNU/Linux:
|
||||||
|
|
||||||
|
# grub-install /dev/sda
|
||||||
|
|
||||||
|
On AROS we use another syntax. For volumes:
|
||||||
|
|
||||||
|
//:<volume name>
|
||||||
|
|
||||||
|
E.g.
|
||||||
|
|
||||||
|
//:DH0
|
||||||
|
|
||||||
|
For disks we use syntax:
|
||||||
|
//:<driver name>/unit/flags
|
||||||
|
|
||||||
|
E.g.
|
||||||
|
|
||||||
|
# grub-install //:ata.device/0/0
|
||||||
|
|
||||||
|
On Windows we use UNC path. For volumes it's typically
|
||||||
|
|
||||||
|
\\?\Volume{<GUID>}
|
||||||
|
\\?\<drive letter>:
|
||||||
|
|
||||||
|
E.g.
|
||||||
|
|
||||||
|
\\?\Volume{17f34d50-cf64-4b02-800e-51d79c3aa2ff}
|
||||||
|
\\?\C:
|
||||||
|
|
||||||
|
For disks it's
|
||||||
|
|
||||||
|
\\?\PhysicalDrive<number>
|
||||||
|
|
||||||
|
E.g.
|
||||||
|
|
||||||
|
# grub-install \\?\PhysicalDrive0
|
||||||
|
|
||||||
|
Beware that you may need to further escape the backslashes depending
|
||||||
|
on your shell.
|
||||||
|
|
||||||
|
When compiled with cygwin support then cygwin drive names are
|
||||||
|
automatically when needed. E.g.
|
||||||
|
|
||||||
|
# grub-install /dev/sda
|
||||||
|
|
240
boot/grub/persistent/docs/04_installation
Normal file
240
boot/grub/persistent/docs/04_installation
Normal file
|
@ -0,0 +1,240 @@
|
||||||
|
4 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) by using the utility 'grub-install' (*note
|
||||||
|
Invoking grub-install::) on a UNIX-like OS.
|
||||||
|
|
||||||
|
GRUB comes with boot images, which are normally put in the directory
|
||||||
|
'/usr/lib/grub/<cpu>-<platform>' (for BIOS-based machines
|
||||||
|
'/usr/lib/grub/i386-pc'). Hereafter, the directory where GRUB images
|
||||||
|
are initially placed (normally '/usr/lib/grub/<cpu>-<platform>') will be
|
||||||
|
called the "image directory", and the directory where the boot loader
|
||||||
|
needs to find them (usually '/boot') will be called the "boot
|
||||||
|
directory".
|
||||||
|
|
||||||
|
4.1 Installing GRUB using grub-install
|
||||||
|
======================================
|
||||||
|
|
||||||
|
For information on where GRUB should be installed on PC BIOS platforms,
|
||||||
|
*note BIOS installation::.
|
||||||
|
|
||||||
|
In order 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 has to be either a device file (like '/dev/hda'). For example,
|
||||||
|
under Linux the following will install GRUB into the MBR of the first
|
||||||
|
IDE disk:
|
||||||
|
|
||||||
|
# grub-install /dev/sda
|
||||||
|
|
||||||
|
Likewise, under GNU/Hurd, this has the same effect:
|
||||||
|
|
||||||
|
# grub-install /dev/hd0
|
||||||
|
|
||||||
|
But all the above examples assume that GRUB should put images under
|
||||||
|
the '/boot' directory. If you want GRUB to put images under a directory
|
||||||
|
other than '/boot', you need to specify the option '--boot-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
|
||||||
|
# mkdir /mnt/boot
|
||||||
|
# grub-install --boot-directory=/mnt/boot /dev/fd0
|
||||||
|
# umount /mnt
|
||||||
|
|
||||||
|
Some BIOSes have a bug of exposing the first partition of a USB drive
|
||||||
|
as a floppy instead of exposing the USB drive as a hard disk (they call
|
||||||
|
it "USB-FDD" boot). In such cases, you need to install like this:
|
||||||
|
|
||||||
|
# losetup /dev/loop0 /dev/sdb1
|
||||||
|
# mount /dev/loop0 /mnt/usb
|
||||||
|
# grub-install --boot-directory=/mnt/usb/bugbios --force --allow-floppy /dev/loop0
|
||||||
|
|
||||||
|
This install doesn't conflict with standard install as long as they
|
||||||
|
are in separate directories.
|
||||||
|
|
||||||
|
Note that 'grub-install' is actually just a shell script and the real
|
||||||
|
task is done by other tools such as 'grub-mkimage'. Therefore, you may
|
||||||
|
run those commands 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.
|
||||||
|
|
||||||
|
On EFI systems for fixed disk install you have to mount EFI System
|
||||||
|
Partition. If you mount it at '/boot/efi' then you don't need any
|
||||||
|
special arguments:
|
||||||
|
|
||||||
|
# grub-install
|
||||||
|
|
||||||
|
Otherwise you need to specify where your EFI System partition is
|
||||||
|
mounted:
|
||||||
|
|
||||||
|
# grub-install --efi-directory=/mnt/efi
|
||||||
|
|
||||||
|
For removable installs you have to use '--removable' and specify both
|
||||||
|
'--boot-directory' and '--efi-directory':
|
||||||
|
|
||||||
|
# grub-install --efi-directory=/mnt/usb --boot-directory=/mnt/usb/boot --removable
|
||||||
|
|
||||||
|
4.2 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 image called
|
||||||
|
'cdboot.img', which is concatenated with 'core.img'. The 'core.img'
|
||||||
|
used for this should be built with at least the 'iso9660' and 'biosdisk'
|
||||||
|
modules. Your bootable CD-ROM will usually also need to include a
|
||||||
|
configuration file 'grub.cfg' and some other GRUB modules.
|
||||||
|
|
||||||
|
To make a simple generic GRUB rescue CD, you can use the
|
||||||
|
'grub-mkrescue' program (*note Invoking grub-mkrescue::):
|
||||||
|
|
||||||
|
$ grub-mkrescue -o grub.iso
|
||||||
|
|
||||||
|
You will often need to include other files in your image. To do
|
||||||
|
this, first make a top directory for the bootable image, say, 'iso':
|
||||||
|
|
||||||
|
$ mkdir iso
|
||||||
|
|
||||||
|
Make a directory for GRUB:
|
||||||
|
|
||||||
|
$ mkdir -p iso/boot/grub
|
||||||
|
|
||||||
|
If desired, make the config file 'grub.cfg' under 'iso/boot/grub'
|
||||||
|
(*note Configuration::), and copy any files and directories for the disc
|
||||||
|
to the directory 'iso/'.
|
||||||
|
|
||||||
|
Finally, make the image:
|
||||||
|
|
||||||
|
$ grub-mkrescue -o grub.iso iso
|
||||||
|
|
||||||
|
This produces a file named 'grub.iso', which then can be burned into
|
||||||
|
a CD (or a DVD), or written to a USB mass storage device.
|
||||||
|
|
||||||
|
The root device will be set up appropriately on entering your
|
||||||
|
'grub.cfg' configuration file, so you can refer to file names on the CD
|
||||||
|
without needing to use an explicit device name. This makes it easier to
|
||||||
|
produce rescue images that will work on both optical drives and USB mass
|
||||||
|
storage devices.
|
||||||
|
|
||||||
|
(1) El Torito is a specification for bootable CD using BIOS
|
||||||
|
functions.
|
||||||
|
|
||||||
|
4.3 The map between BIOS drives and OS devices
|
||||||
|
==============================================
|
||||||
|
|
||||||
|
If the device map file exists, the GRUB utilities ('grub-probe', etc.)
|
||||||
|
read 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.
|
||||||
|
|
||||||
|
Historically, the device map file was used because GRUB device names
|
||||||
|
had to be used in the configuration file, and they were derived from
|
||||||
|
BIOS drive numbers. The map between BIOS drives and OS devices cannot
|
||||||
|
always be guessed correctly: for example, GRUB will get the order wrong
|
||||||
|
if you exchange the boot sequence between IDE and SCSI in your BIOS.
|
||||||
|
|
||||||
|
Unfortunately, even OS device names are not always stable. Modern
|
||||||
|
versions of the Linux kernel may probe drives in a different order from
|
||||||
|
boot to boot, and the prefix ('/dev/hd*' versus '/dev/sd*') may change
|
||||||
|
depending on the driver subsystem in use. As a result, the device map
|
||||||
|
file required frequent editing on some systems.
|
||||||
|
|
||||||
|
GRUB avoids this problem nowadays by using UUIDs or file system
|
||||||
|
labels when generating 'grub.cfg', and we advise that you do the same
|
||||||
|
for any custom menu entries you write. If the device map file does not
|
||||||
|
exist, then the GRUB utilities will assume a temporary device map on the
|
||||||
|
fly. This is often good enough, particularly in the common case of
|
||||||
|
single-disk systems.
|
||||||
|
|
||||||
|
However, the device map file is not entirely obsolete yet, and it is
|
||||||
|
used for overriding when current environment is different from the one
|
||||||
|
on boot. Most common case is if you use a partition or logical volume
|
||||||
|
as a disk for virtual machine. You can put any comments in the file if
|
||||||
|
needed, as the GRUB utilities assume that a line is just a comment if
|
||||||
|
the first character is '#'.
|
||||||
|
|
||||||
|
4.4 BIOS installation
|
||||||
|
=====================
|
||||||
|
|
||||||
|
MBR
|
||||||
|
===
|
||||||
|
|
||||||
|
The partition table format traditionally used on PC BIOS platforms is
|
||||||
|
called the Master Boot Record (MBR) format; this is the format that
|
||||||
|
allows up to four primary partitions and additional logical partitions.
|
||||||
|
With this partition table format, there are two ways to install GRUB: it
|
||||||
|
can be embedded in the area between the MBR and the first partition
|
||||||
|
(called by various names, such as the "boot track", "MBR gap", or
|
||||||
|
"embedding area", and which is usually at least 31 KiB), or the core
|
||||||
|
image can be installed in a file system and a list of the blocks that
|
||||||
|
make it up can be stored in the first sector of that partition.
|
||||||
|
|
||||||
|
Each of these has different problems. There is no way to reserve
|
||||||
|
space in the embedding area with complete safety, and some proprietary
|
||||||
|
software is known to use it to make it difficult for users to work
|
||||||
|
around licensing restrictions; and systems are sometimes partitioned
|
||||||
|
without leaving enough space before the first partition. On the other
|
||||||
|
hand, installing to a filesystem means that GRUB is vulnerable to its
|
||||||
|
blocks being moved around by filesystem features such as tail packing,
|
||||||
|
or even by aggressive fsck implementations, so this approach is quite
|
||||||
|
fragile; and this approach can only be used if the '/boot' filesystem is
|
||||||
|
on the same disk that the BIOS boots from, so that GRUB does not have to
|
||||||
|
rely on guessing BIOS drive numbers.
|
||||||
|
|
||||||
|
The GRUB development team generally recommends embedding GRUB before
|
||||||
|
the first partition, unless you have special requirements. You must
|
||||||
|
ensure that the first partition starts at least 31 KiB (63 sectors) from
|
||||||
|
the start of the disk; on modern disks, it is often a performance
|
||||||
|
advantage to align partitions on larger boundaries anyway, so the first
|
||||||
|
partition might start 1 MiB from the start of the disk.
|
||||||
|
|
||||||
|
GPT
|
||||||
|
===
|
||||||
|
|
||||||
|
Some newer systems use the GUID Partition Table (GPT) format. This was
|
||||||
|
specified as part of the Extensible Firmware Interface (EFI), but it can
|
||||||
|
also be used on BIOS platforms if system software supports it; for
|
||||||
|
example, GRUB and GNU/Linux can be used in this configuration. With
|
||||||
|
this format, it is possible to reserve a whole partition for GRUB,
|
||||||
|
called the BIOS Boot Partition. GRUB can then be embedded into that
|
||||||
|
partition without the risk of being overwritten by other software and
|
||||||
|
without being contained in a filesystem which might move its blocks
|
||||||
|
around.
|
||||||
|
|
||||||
|
When creating a BIOS Boot Partition on a GPT system, you should make
|
||||||
|
sure that it is at least 31 KiB in size. (GPT-formatted disks are not
|
||||||
|
usually particularly small, so we recommend that you make it larger than
|
||||||
|
the bare minimum, such as 1 MiB, to allow plenty of room for growth.)
|
||||||
|
You must also make sure that it has the proper partition type. Using
|
||||||
|
GNU Parted, you can set this using a command such as the following:
|
||||||
|
|
||||||
|
# parted /dev/DISK set PARTITION-NUMBER bios_grub on
|
||||||
|
|
||||||
|
If you are using gdisk, set the partition type to '0xEF02'. With
|
||||||
|
partitioning programs that require setting the GUID directly, it should
|
||||||
|
be '21686148-6449-6e6f-744e656564454649'.
|
||||||
|
|
||||||
|
*Caution:* Be very careful which partition you select! When GRUB
|
||||||
|
finds a BIOS Boot Partition during installation, it will automatically
|
||||||
|
overwrite part of it. Make sure that the partition does not contain any
|
||||||
|
other data.
|
||||||
|
|
244
boot/grub/persistent/docs/05_booting
Normal file
244
boot/grub/persistent/docs/05_booting
Normal file
|
@ -0,0 +1,244 @@
|
||||||
|
5 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.
|
||||||
|
|
||||||
|
5.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.
|
||||||
|
|
||||||
|
5.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::).
|
||||||
|
|
||||||
|
FIXME: this section is incomplete.
|
||||||
|
|
||||||
|
1. 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.
|
||||||
|
|
||||||
|
5.1.2 Chain-loading an OS
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Operating systems that do not support Multiboot and do not have specific
|
||||||
|
support in GRUB (specific support is available for Linux, FreeBSD,
|
||||||
|
NetBSD and OpenBSD) must be chain-loaded, which involves loading another
|
||||||
|
boot loader and jumping to it in real mode.
|
||||||
|
|
||||||
|
The 'chainloader' command (*note chainloader::) is used to set this
|
||||||
|
up. It is normally also necessary to load some GRUB modules and set the
|
||||||
|
appropriate root device. Putting this together, we get something like
|
||||||
|
this, for a Windows system on the first partition of the first hard
|
||||||
|
disk:
|
||||||
|
|
||||||
|
menuentry "Windows" {
|
||||||
|
insmod chain
|
||||||
|
insmod ntfs
|
||||||
|
set root=(hd0,1)
|
||||||
|
chainloader +1
|
||||||
|
}
|
||||||
|
|
||||||
|
On systems with multiple hard disks, an additional workaround may be
|
||||||
|
required. *Note DOS/Windows::.
|
||||||
|
|
||||||
|
Chain-loading is only supported on PC BIOS and EFI platforms.
|
||||||
|
|
||||||
|
5.2 Loopback booting
|
||||||
|
====================
|
||||||
|
|
||||||
|
GRUB is able to read from an image (be it one of CD or HDD) stored on
|
||||||
|
any of its accessible storages (refer to *note loopback:: command).
|
||||||
|
However the OS itself should be able to find its root. This usually
|
||||||
|
involves running a userspace program running before the real root is
|
||||||
|
discovered. This is achieved by GRUB loading a specially made small
|
||||||
|
image and passing it as ramdisk to the kernel. This is achieved by
|
||||||
|
commands 'kfreebsd_module', 'knetbsd_module_elf', 'kopenbsd_ramdisk',
|
||||||
|
'initrd' (*note initrd::), 'initrd16' (*note initrd::),
|
||||||
|
'multiboot_module', 'multiboot2_module' or 'xnu_ramdisk' depending on
|
||||||
|
the loader. Note that for knetbsd the image must be put inside
|
||||||
|
miniroot.kmod and the whole miniroot.kmod has to be loaded. In kopenbsd
|
||||||
|
payload this is disabled by default. Aditionally behaviour of initial
|
||||||
|
ramdisk depends on command line options. Several distributors provide
|
||||||
|
the image for this purpose or it's integrated in their standard ramdisk
|
||||||
|
and activated by special option. Consult your kernel and distribution
|
||||||
|
manual for more details. Other loaders like appleloader, chainloader
|
||||||
|
(BIOS, EFI, coreboot), freedos, ntldr and plan9 provide no possibility
|
||||||
|
of loading initial ramdisk and as far as author is aware the payloads in
|
||||||
|
question don't support either initial ramdisk or discovering loopback
|
||||||
|
boot in other way and as such not bootable this way. Please consider
|
||||||
|
alternative boot methods like copying all files from the image to actual
|
||||||
|
partition. Consult your OS documentation for more details
|
||||||
|
|
||||||
|
5.3 Some caveats on OS-specific issues
|
||||||
|
======================================
|
||||||
|
|
||||||
|
Here, we describe some caveats on several operating systems.
|
||||||
|
|
||||||
|
5.3.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. The
|
||||||
|
command 'search --set=root --file /boot/gnumach.gz' or similar may
|
||||||
|
help you (*note search::).
|
||||||
|
|
||||||
|
2. Load the kernel and the modules, like this:
|
||||||
|
|
||||||
|
grub> multiboot /boot/gnumach.gz root=device:hd0s1
|
||||||
|
grub> module /hurd/ext2fs.static ext2fs --readonly \
|
||||||
|
--multiboot-command-line='${kernel-command-line}' \
|
||||||
|
--host-priv-port='${host-port}' \
|
||||||
|
--device-master-port='${device-port}' \
|
||||||
|
--exec-server-task='${exec-task}' -T typed '${root}' \
|
||||||
|
'$(task-create)' '$(task-resume)'
|
||||||
|
grub> module /lib/ld.so.1 exec /hurd/exec '$(exec-task=task-create)'
|
||||||
|
|
||||||
|
3. Finally, run the command 'boot' (*note boot::).
|
||||||
|
|
||||||
|
5.3.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. The
|
||||||
|
command 'search --set=root --file /vmlinuz' or similar may help you
|
||||||
|
(*note search::).
|
||||||
|
|
||||||
|
2. Load the kernel using the command 'linux' (*note linux::):
|
||||||
|
|
||||||
|
grub> linux /vmlinuz root=/dev/sda1
|
||||||
|
|
||||||
|
If you need to specify some kernel parameters, just append them to
|
||||||
|
the command. For example, to set 'acpi' to 'off', do this:
|
||||||
|
|
||||||
|
grub> linux /vmlinuz root=/dev/sda1 acpi=off
|
||||||
|
|
||||||
|
See the documentation in the Linux source tree for complete
|
||||||
|
information on the available options.
|
||||||
|
|
||||||
|
With 'linux' GRUB uses 32-bit protocol. Some BIOS services like
|
||||||
|
APM or EDD aren't available with this protocol. In this case you
|
||||||
|
need to use 'linux16'
|
||||||
|
|
||||||
|
grub> linux16 /vmlinuz root=/dev/sda1 acpi=off
|
||||||
|
|
||||||
|
3. If you use an initrd, execute the command 'initrd' (*note initrd::)
|
||||||
|
after 'linux':
|
||||||
|
|
||||||
|
grub> initrd /initrd
|
||||||
|
|
||||||
|
If you used 'linux16' you need to use 'initrd16':
|
||||||
|
|
||||||
|
grub> initrd16 /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.
|
||||||
|
|
||||||
|
5.3.3 NetBSD
|
||||||
|
------------
|
||||||
|
|
||||||
|
Booting a NetBSD kernel from GRUB is also relatively easy: first set
|
||||||
|
GRUB's root device, then load the kernel and the modules, and finally
|
||||||
|
run 'boot'.
|
||||||
|
|
||||||
|
1. Set GRUB's root device to the partition holding the NetBSD root
|
||||||
|
file system. For a disk with a NetBSD disk label, this is usually
|
||||||
|
the first partition (a:). In that case, and assuming that the
|
||||||
|
partition is on the first hard disk, set GRUB's root device as
|
||||||
|
follows:
|
||||||
|
|
||||||
|
grub> insmod part_bsd
|
||||||
|
grub> set root=(hd0,netbsd1)
|
||||||
|
|
||||||
|
For a disk with a GUID Partition Table (GPT), and assuming that the
|
||||||
|
NetBSD root partition is the third GPT partition, do this:
|
||||||
|
|
||||||
|
grub> insmod part_gpt
|
||||||
|
grub> set root=(hd0,gpt3)
|
||||||
|
|
||||||
|
2. Load the kernel using the command 'knetbsd':
|
||||||
|
|
||||||
|
grub> knetbsd /netbsd
|
||||||
|
|
||||||
|
Various options may be given to 'knetbsd'. These options are, for
|
||||||
|
the most part, the same as in the NetBSD boot loader. For
|
||||||
|
instance, to boot the system in single-user mode and with verbose
|
||||||
|
messages, do this:
|
||||||
|
|
||||||
|
grub> knetbsd /netbsd -s -v
|
||||||
|
|
||||||
|
3. If needed, load kernel modules with the command
|
||||||
|
'knetbsd_module_elf'. A typical example is the module for the root
|
||||||
|
file system:
|
||||||
|
|
||||||
|
grub> knetbsd_module_elf /stand/amd64/6.0/modules/ffs/ffs.kmod
|
||||||
|
|
||||||
|
4. Finally, run the command 'boot' (*note boot::).
|
||||||
|
|
||||||
|
5.3.4 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 'drivemap' (*note drivemap::), like this:
|
||||||
|
|
||||||
|
drivemap -s (hd0) (hd1)
|
||||||
|
|
||||||
|
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 "hides" a DOS (or Windows) partition (*note parttool::), DOS
|
||||||
|
(or Windows) will ignore the partition. If GRUB "unhides" a DOS (or
|
||||||
|
Windows) partition, 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:
|
||||||
|
|
||||||
|
parttool (hd0,1) hidden-
|
||||||
|
parttool (hd0,2) hidden+
|
||||||
|
set root=(hd0,1)
|
||||||
|
chainloader +1
|
||||||
|
parttool ${root} boot+
|
||||||
|
boot
|
||||||
|
|
740
boot/grub/persistent/docs/06_your_own_configuration_file
Normal file
740
boot/grub/persistent/docs/06_your_own_configuration_file
Normal file
|
@ -0,0 +1,740 @@
|
||||||
|
6 Writing your own configuration file
|
||||||
|
*************************************
|
||||||
|
|
||||||
|
GRUB is configured using 'grub.cfg', usually located under '/boot/grub'.
|
||||||
|
This file is quite flexible, but most users will not need to write the
|
||||||
|
whole thing by hand.
|
||||||
|
|
||||||
|
6.1 Simple configuration handling
|
||||||
|
=================================
|
||||||
|
|
||||||
|
The program 'grub-mkconfig' (*note Invoking grub-mkconfig::) generates
|
||||||
|
'grub.cfg' files suitable for most cases. It is suitable for use when
|
||||||
|
upgrading a distribution, and will discover available kernels and
|
||||||
|
attempt to generate menu entries for them.
|
||||||
|
|
||||||
|
'grub-mkconfig' does have some limitations. While adding extra
|
||||||
|
custom menu entries to the end of the list can be done by editing
|
||||||
|
'/etc/grub.d/40_custom' or creating '/boot/grub/custom.cfg', changing
|
||||||
|
the order of menu entries or changing their titles may require making
|
||||||
|
complex changes to shell scripts stored in '/etc/grub.d/'. This may be
|
||||||
|
improved in the future. In the meantime, those who feel that it would
|
||||||
|
be easier to write 'grub.cfg' directly are encouraged to do so (*note
|
||||||
|
Booting::, and *note Shell-like scripting::), and to disable any system
|
||||||
|
provided by their distribution to automatically run 'grub-mkconfig'.
|
||||||
|
|
||||||
|
The file '/etc/default/grub' controls the operation of
|
||||||
|
'grub-mkconfig'. It is sourced by a shell script, and so must be valid
|
||||||
|
POSIX shell input; normally, it will just be a sequence of 'KEY=value'
|
||||||
|
lines, but if the value contains spaces or other special characters then
|
||||||
|
it must be quoted. For example:
|
||||||
|
|
||||||
|
GRUB_TERMINAL_INPUT="console serial"
|
||||||
|
|
||||||
|
Valid keys in '/etc/default/grub' are as follows:
|
||||||
|
|
||||||
|
'GRUB_DEFAULT'
|
||||||
|
The default menu entry. This may be a number, in which case it
|
||||||
|
identifies the Nth entry in the generated menu counted from zero,
|
||||||
|
or the title of a menu entry, or the special string 'saved'. Using
|
||||||
|
the id may be useful if you want to set a menu entry as the default
|
||||||
|
even though there may be a variable number of entries before it.
|
||||||
|
|
||||||
|
For example, if you have:
|
||||||
|
|
||||||
|
menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
then you can make this the default using:
|
||||||
|
|
||||||
|
GRUB_DEFAULT=example-gnu-linux
|
||||||
|
|
||||||
|
Previously it was documented the way to use entry title. While
|
||||||
|
this still works it's not recommended since titles often contain
|
||||||
|
unstable device names and may be translated
|
||||||
|
|
||||||
|
If you set this to 'saved', then the default menu entry will be
|
||||||
|
that saved by 'GRUB_SAVEDEFAULT' or 'grub-set-default'. This
|
||||||
|
relies on the environment block, which may not be available in all
|
||||||
|
situations (*note Environment block::).
|
||||||
|
|
||||||
|
The default is '0'.
|
||||||
|
|
||||||
|
'GRUB_SAVEDEFAULT'
|
||||||
|
If this option is set to 'true', then, when an entry is selected,
|
||||||
|
save it as a new default entry for use by future runs of GRUB. This
|
||||||
|
is only useful if 'GRUB_DEFAULT=saved'; it is a separate option
|
||||||
|
because 'GRUB_DEFAULT=saved' is useful without this option, in
|
||||||
|
conjunction with 'grub-set-default'. Unset by default. This
|
||||||
|
option relies on the environment block, which may not be available
|
||||||
|
in all situations (*note Environment block::).
|
||||||
|
|
||||||
|
'GRUB_TIMEOUT'
|
||||||
|
Boot the default entry this many seconds after the menu is
|
||||||
|
displayed, unless a key is pressed. The default is '5'. Set to
|
||||||
|
'0' to boot immediately without displaying the menu, or to '-1' to
|
||||||
|
wait indefinitely.
|
||||||
|
|
||||||
|
If 'GRUB_TIMEOUT_STYLE' is set to 'countdown' or 'hidden', the
|
||||||
|
timeout is instead counted before the menu is displayed.
|
||||||
|
|
||||||
|
'GRUB_TIMEOUT_STYLE'
|
||||||
|
If this option is unset or set to 'menu', then GRUB will display
|
||||||
|
the menu and then wait for the timeout set by 'GRUB_TIMEOUT' to
|
||||||
|
expire before booting the default entry. Pressing a key interrupts
|
||||||
|
the timeout.
|
||||||
|
|
||||||
|
If this option is set to 'countdown' or 'hidden', then, before
|
||||||
|
displaying the menu, GRUB will wait for the timeout set by
|
||||||
|
'GRUB_TIMEOUT' to expire. If <ESC> is pressed during that time, it
|
||||||
|
will display the menu and wait for input. If a hotkey associated
|
||||||
|
with a menu entry is pressed, it will boot the associated menu
|
||||||
|
entry immediately. If the timeout expires before either of these
|
||||||
|
happens, it will boot the default entry. In the 'countdown' case,
|
||||||
|
it will show a one-line indication of the remaining time.
|
||||||
|
|
||||||
|
'GRUB_DEFAULT_BUTTON'
|
||||||
|
'GRUB_TIMEOUT_BUTTON'
|
||||||
|
'GRUB_TIMEOUT_STYLE_BUTTON'
|
||||||
|
'GRUB_BUTTON_CMOS_ADDRESS'
|
||||||
|
Variants of the corresponding variables without the '_BUTTON'
|
||||||
|
suffix, used to support vendor-specific power buttons. *Note
|
||||||
|
Vendor power-on keys::.
|
||||||
|
|
||||||
|
'GRUB_DISTRIBUTOR'
|
||||||
|
Set by distributors of GRUB to their identifying name. This is
|
||||||
|
used to generate more informative menu entry titles.
|
||||||
|
|
||||||
|
'GRUB_TERMINAL_INPUT'
|
||||||
|
Select the terminal input device. You may select multiple devices
|
||||||
|
here, separated by spaces.
|
||||||
|
|
||||||
|
Valid terminal input names depend on the platform, but may include
|
||||||
|
'console' (native platform console), 'serial' (serial terminal),
|
||||||
|
'serial_<port>' (serial terminal with explicit port selection),
|
||||||
|
'at_keyboard' (PC AT keyboard), or 'usb_keyboard' (USB keyboard
|
||||||
|
using the HID Boot Protocol, for cases where the firmware does not
|
||||||
|
handle this).
|
||||||
|
|
||||||
|
The default is to use the platform's native terminal input.
|
||||||
|
|
||||||
|
'GRUB_TERMINAL_OUTPUT'
|
||||||
|
Select the terminal output device. You may select multiple devices
|
||||||
|
here, separated by spaces.
|
||||||
|
|
||||||
|
Valid terminal output names depend on the platform, but may include
|
||||||
|
'console' (native platform console), 'serial' (serial terminal),
|
||||||
|
'serial_<port>' (serial terminal with explicit port selection),
|
||||||
|
'gfxterm' (graphics-mode output), 'vga_text' (VGA text output),
|
||||||
|
'mda_text' (MDA text output), 'morse' (Morse-coding using system
|
||||||
|
beeper) or 'spkmodem' (simple data protocol using system speaker).
|
||||||
|
|
||||||
|
'spkmodem' is useful when no serial port is available. Connect the
|
||||||
|
output of sending system (where GRUB is running) to line-in of
|
||||||
|
receiving system (usually developer machine). On receiving system
|
||||||
|
compile 'spkmodem-recv' from 'util/spkmodem-recv.c' and run:
|
||||||
|
|
||||||
|
parecord --channels=1 --rate=48000 --format=s16le | ./spkmodem-recv
|
||||||
|
|
||||||
|
The default is to use the platform's native terminal output.
|
||||||
|
|
||||||
|
'GRUB_TERMINAL'
|
||||||
|
If this option is set, it overrides both 'GRUB_TERMINAL_INPUT' and
|
||||||
|
'GRUB_TERMINAL_OUTPUT' to the same value.
|
||||||
|
|
||||||
|
'GRUB_SERIAL_COMMAND'
|
||||||
|
A command to configure the serial port when using the serial
|
||||||
|
console. *Note serial::. Defaults to 'serial'.
|
||||||
|
|
||||||
|
'GRUB_CMDLINE_LINUX'
|
||||||
|
Command-line arguments to add to menu entries for the Linux kernel.
|
||||||
|
|
||||||
|
'GRUB_CMDLINE_LINUX_DEFAULT'
|
||||||
|
Unless 'GRUB_DISABLE_RECOVERY' is set to 'true', two menu entries
|
||||||
|
will be generated for each Linux kernel: one default entry and one
|
||||||
|
entry for recovery mode. This option lists command-line arguments
|
||||||
|
to add only to the default menu entry, after those listed in
|
||||||
|
'GRUB_CMDLINE_LINUX'.
|
||||||
|
|
||||||
|
'GRUB_CMDLINE_NETBSD'
|
||||||
|
'GRUB_CMDLINE_NETBSD_DEFAULT'
|
||||||
|
As 'GRUB_CMDLINE_LINUX' and 'GRUB_CMDLINE_LINUX_DEFAULT', but for
|
||||||
|
NetBSD.
|
||||||
|
|
||||||
|
'GRUB_CMDLINE_GNUMACH'
|
||||||
|
As 'GRUB_CMDLINE_LINUX', but for GNU Mach.
|
||||||
|
|
||||||
|
'GRUB_CMDLINE_XEN'
|
||||||
|
'GRUB_CMDLINE_XEN_DEFAULT'
|
||||||
|
The values of these options are passed to Xen hypervisor Xen menu
|
||||||
|
entries, for all respectively normal entries.
|
||||||
|
|
||||||
|
'GRUB_CMDLINE_LINUX_XEN_REPLACE'
|
||||||
|
'GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT'
|
||||||
|
The values of these options replace the values of
|
||||||
|
'GRUB_CMDLINE_LINUX' and 'GRUB_CMDLINE_LINUX_DEFAULT' for Linux and
|
||||||
|
Xen menu entries.
|
||||||
|
|
||||||
|
'GRUB_EARLY_INITRD_LINUX_CUSTOM'
|
||||||
|
'GRUB_EARLY_INITRD_LINUX_STOCK'
|
||||||
|
List of space-separated early initrd images to be loaded from
|
||||||
|
'/boot'. This is for loading things like CPU microcode, firmware,
|
||||||
|
ACPI tables, crypto keys, and so on. These early images will be
|
||||||
|
loaded in the order declared, and all will be loaded before the
|
||||||
|
actual functional initrd image.
|
||||||
|
|
||||||
|
'GRUB_EARLY_INITRD_LINUX_STOCK' is for your distribution to declare
|
||||||
|
images that are provided by the distribution. It should not be
|
||||||
|
modified without understanding the consequences. They will be
|
||||||
|
loaded first.
|
||||||
|
|
||||||
|
'GRUB_EARLY_INITRD_LINUX_CUSTOM' is for your custom created images.
|
||||||
|
|
||||||
|
The default stock images are as follows, though they may be
|
||||||
|
overridden by your distribution:
|
||||||
|
intel-uc.img intel-ucode.img amd-uc.img amd-ucode.img early_ucode.cpio microcode.cpio
|
||||||
|
|
||||||
|
'GRUB_DISABLE_LINUX_UUID'
|
||||||
|
Normally, 'grub-mkconfig' will generate menu entries that use
|
||||||
|
universally-unique identifiers (UUIDs) to identify the root
|
||||||
|
filesystem to the Linux kernel, using a 'root=UUID=...' kernel
|
||||||
|
parameter. This is usually more reliable, but in some cases it may
|
||||||
|
not be appropriate. To disable the use of UUIDs, set this option
|
||||||
|
to 'true'.
|
||||||
|
|
||||||
|
'GRUB_DISABLE_LINUX_PARTUUID'
|
||||||
|
If 'grub-mkconfig' cannot identify the root filesystem via its
|
||||||
|
universally-unique indentifier (UUID), 'grub-mkconfig' can use the
|
||||||
|
UUID of the partition containing the filesystem to identify the
|
||||||
|
root filesystem to the Linux kernel via a 'root=PARTUUID=...'
|
||||||
|
kernel parameter. This is not as reliable as using the filesystem
|
||||||
|
UUID, but is more reliable than using the Linux device names. When
|
||||||
|
'GRUB_DISABLE_LINUX_PARTUUID' is set to 'false', the Linux kernel
|
||||||
|
version must be 2.6.37 (3.10 for systems using the MSDOS partition
|
||||||
|
scheme) or newer. This option defaults to 'true'. To enable the
|
||||||
|
use of partition UUIDs, set this option to 'false'.
|
||||||
|
|
||||||
|
'GRUB_DISABLE_RECOVERY'
|
||||||
|
If this option is set to 'true', disable the generation of recovery
|
||||||
|
mode menu entries.
|
||||||
|
|
||||||
|
'GRUB_VIDEO_BACKEND'
|
||||||
|
If graphical video support is required, either because the
|
||||||
|
'gfxterm' graphical terminal is in use or because
|
||||||
|
'GRUB_GFXPAYLOAD_LINUX' is set, then 'grub-mkconfig' will normally
|
||||||
|
load all available GRUB video drivers and use the one most
|
||||||
|
appropriate for your hardware. If you need to override this for
|
||||||
|
some reason, then you can set this option.
|
||||||
|
|
||||||
|
After 'grub-install' has been run, the available video drivers are
|
||||||
|
listed in '/boot/grub/video.lst'.
|
||||||
|
|
||||||
|
'GRUB_GFXMODE'
|
||||||
|
Set the resolution used on the 'gfxterm' graphical terminal. Note
|
||||||
|
that you can only use modes which your graphics card supports via
|
||||||
|
VESA BIOS Extensions (VBE), so for example native LCD panel
|
||||||
|
resolutions may not be available. The default is 'auto', which
|
||||||
|
tries to select a preferred resolution. *Note gfxmode::.
|
||||||
|
|
||||||
|
'GRUB_BACKGROUND'
|
||||||
|
Set a background image for use with the 'gfxterm' graphical
|
||||||
|
terminal. The value of this option must be a file readable by GRUB
|
||||||
|
at boot time, and it must end with '.png', '.tga', '.jpg', or
|
||||||
|
'.jpeg'. The image will be scaled if necessary to fit the screen.
|
||||||
|
|
||||||
|
'GRUB_THEME'
|
||||||
|
Set a theme for use with the 'gfxterm' graphical terminal.
|
||||||
|
|
||||||
|
'GRUB_GFXPAYLOAD_LINUX'
|
||||||
|
Set to 'text' to force the Linux kernel to boot in normal text
|
||||||
|
mode, 'keep' to preserve the graphics mode set using
|
||||||
|
'GRUB_GFXMODE', 'WIDTHxHEIGHT'['xDEPTH'] to set a particular
|
||||||
|
graphics mode, or a sequence of these separated by commas or
|
||||||
|
semicolons to try several modes in sequence. *Note gfxpayload::.
|
||||||
|
|
||||||
|
Depending on your kernel, your distribution, your graphics card,
|
||||||
|
and the phase of the moon, note that using this option may cause
|
||||||
|
GNU/Linux to suffer from various display problems, particularly
|
||||||
|
during the early part of the boot sequence. If you have problems,
|
||||||
|
set this option to 'text' and GRUB will tell Linux to boot in
|
||||||
|
normal text mode.
|
||||||
|
|
||||||
|
'GRUB_DISABLE_OS_PROBER'
|
||||||
|
Normally, 'grub-mkconfig' will try to use the external 'os-prober'
|
||||||
|
program, if installed, to discover other operating systems
|
||||||
|
installed on the same system and generate appropriate menu entries
|
||||||
|
for them. Set this option to 'true' to disable this.
|
||||||
|
|
||||||
|
'GRUB_OS_PROBER_SKIP_LIST'
|
||||||
|
List of space-separated FS UUIDs of filesystems to be ignored from
|
||||||
|
os-prober output. For efi chainloaders it's <UUID>@<EFI FILE>
|
||||||
|
|
||||||
|
'GRUB_DISABLE_SUBMENU'
|
||||||
|
Normally, 'grub-mkconfig' will generate top level menu entry for
|
||||||
|
the kernel with highest version number and put all other found
|
||||||
|
kernels or alternative menu entries for recovery mode in submenu.
|
||||||
|
For entries returned by 'os-prober' first entry will be put on top
|
||||||
|
level and all others in submenu. If this option is set to 'y',
|
||||||
|
flat menu with all entries on top level will be generated instead.
|
||||||
|
Changing this option will require changing existing values of
|
||||||
|
'GRUB_DEFAULT', 'fallback' (*note fallback::) and 'default' (*note
|
||||||
|
default::) environment variables as well as saved default entry
|
||||||
|
using 'grub-set-default' and value used with 'grub-reboot'.
|
||||||
|
|
||||||
|
'GRUB_ENABLE_CRYPTODISK'
|
||||||
|
If set to 'y', 'grub-mkconfig' and 'grub-install' will check for
|
||||||
|
encrypted disks and generate additional commands needed to access
|
||||||
|
them during boot. Note that in this case unattended boot is not
|
||||||
|
possible because GRUB will wait for passphrase to unlock encrypted
|
||||||
|
container.
|
||||||
|
|
||||||
|
'GRUB_INIT_TUNE'
|
||||||
|
Play a tune on the speaker when GRUB starts. This is particularly
|
||||||
|
useful for users unable to see the screen. The value of this
|
||||||
|
option is passed directly to *note play::.
|
||||||
|
|
||||||
|
'GRUB_BADRAM'
|
||||||
|
If this option is set, GRUB will issue a *note badram:: command to
|
||||||
|
filter out specified regions of RAM.
|
||||||
|
|
||||||
|
'GRUB_PRELOAD_MODULES'
|
||||||
|
This option may be set to a list of GRUB module names separated by
|
||||||
|
spaces. Each module will be loaded as early as possible, at the
|
||||||
|
start of 'grub.cfg'.
|
||||||
|
|
||||||
|
The following options are still accepted for compatibility with
|
||||||
|
existing configurations, but have better replacements:
|
||||||
|
|
||||||
|
'GRUB_HIDDEN_TIMEOUT'
|
||||||
|
Wait this many seconds before displaying the menu. If <ESC> is
|
||||||
|
pressed during that time, display the menu and wait for input
|
||||||
|
according to 'GRUB_TIMEOUT'. If a hotkey associated with a menu
|
||||||
|
entry is pressed, boot the associated menu entry immediately. If
|
||||||
|
the timeout expires before either of these happens, display the
|
||||||
|
menu for the number of seconds specified in 'GRUB_TIMEOUT' before
|
||||||
|
booting the default entry.
|
||||||
|
|
||||||
|
If you set 'GRUB_HIDDEN_TIMEOUT', you should also set
|
||||||
|
'GRUB_TIMEOUT=0' so that the menu is not displayed at all unless
|
||||||
|
<ESC> is pressed.
|
||||||
|
|
||||||
|
This option is unset by default, and is deprecated in favour of the
|
||||||
|
less confusing 'GRUB_TIMEOUT_STYLE=countdown' or
|
||||||
|
'GRUB_TIMEOUT_STYLE=hidden'.
|
||||||
|
|
||||||
|
'GRUB_HIDDEN_TIMEOUT_QUIET'
|
||||||
|
In conjunction with 'GRUB_HIDDEN_TIMEOUT', set this to 'true' to
|
||||||
|
suppress the verbose countdown while waiting for a key to be
|
||||||
|
pressed before displaying the menu.
|
||||||
|
|
||||||
|
This option is unset by default, and is deprecated in favour of the
|
||||||
|
less confusing 'GRUB_TIMEOUT_STYLE=countdown'.
|
||||||
|
|
||||||
|
'GRUB_HIDDEN_TIMEOUT_BUTTON'
|
||||||
|
Variant of 'GRUB_HIDDEN_TIMEOUT', used to support vendor-specific
|
||||||
|
power buttons. *Note Vendor power-on keys::.
|
||||||
|
|
||||||
|
This option is unset by default, and is deprecated in favour of the
|
||||||
|
less confusing 'GRUB_TIMEOUT_STYLE=countdown' or
|
||||||
|
'GRUB_TIMEOUT_STYLE=hidden'.
|
||||||
|
|
||||||
|
For more detailed customisation of 'grub-mkconfig''s output, you may
|
||||||
|
edit the scripts in '/etc/grub.d' directly. '/etc/grub.d/40_custom' is
|
||||||
|
particularly useful for adding entire custom menu entries; simply type
|
||||||
|
the menu entries you want to add at the end of that file, making sure to
|
||||||
|
leave at least the first two lines intact.
|
||||||
|
|
||||||
|
6.2 Root Identifcation Heuristics
|
||||||
|
=================================
|
||||||
|
|
||||||
|
If the target operating system uses the Linux kernel, 'grub-mkconfig'
|
||||||
|
attempts to identify the root file system via a heuristic algoirthm.
|
||||||
|
This algorithm selects the identification method of the root file system
|
||||||
|
by considering three factors. The first is if an initrd for the target
|
||||||
|
operating system is also present. The second is
|
||||||
|
'GRUB_DISABLE_LINUX_UUID' and if set to 'true', prevents 'grub-mkconfig'
|
||||||
|
from identifying the root file system by its UUID. The third is
|
||||||
|
'GRUB_DISABLE_LINUX_PARTUUID' and if set to 'true', prevents
|
||||||
|
'grub-mkconfig' from identifying the root file system via the UUID of
|
||||||
|
its enclosing partition. If the variables are assigned any other value,
|
||||||
|
that value is considered equivalent to 'false'. The variables are also
|
||||||
|
considered to be set to 'false' if they are not set.
|
||||||
|
|
||||||
|
When booting, the Linux kernel will delegate the task of mounting the
|
||||||
|
root filesystem to the initrd. Most initrd images determine the root
|
||||||
|
file system by checking the Linux kernel's command-line for the 'root'
|
||||||
|
key and use its value as the identification method of the root file
|
||||||
|
system. To improve the reliability of booting, most initrd images also
|
||||||
|
allow the root file system to be identified by its UUID. Because of this
|
||||||
|
behavior, the 'grub-mkconfig' command will set 'root' to 'root=UUID=...'
|
||||||
|
to provide the initrd with the filesystem UUID of the root file system.
|
||||||
|
|
||||||
|
If no initrd is detected or 'GRUB_DISABLE_LINUX_UUID' is set to
|
||||||
|
'true' then 'grub-command' will identify the root filesystem by setting
|
||||||
|
the kernel command-line variable 'root' to 'root=PARTUUID=...' unless
|
||||||
|
'GRUB_DISABLE_LINUX_PARTUUID' is also set to 'true'. If
|
||||||
|
'GRUB_DISABLE_LINUX_PARTUUID' is also set to 'true', 'grub-command' will
|
||||||
|
identify by its Linux device name.
|
||||||
|
|
||||||
|
The following table summarizes the behavior of the 'grub-mkconfig'
|
||||||
|
command.
|
||||||
|
|
||||||
|
Initrd GRUB_DISABLE_LINUX_PARTUUID GRUB_DISABLE_LINUX_UUID Linux Root
|
||||||
|
detected Set To Set To ID Method
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
false false false part UUID
|
||||||
|
false false true part UUID
|
||||||
|
false true false dev name
|
||||||
|
false true true dev name
|
||||||
|
true false false fs UUID
|
||||||
|
true false true part UUID
|
||||||
|
true true false fs UUID
|
||||||
|
true true true dev name
|
||||||
|
|
||||||
|
Remember, 'GRUB_DISABLE_LINUX_PARTUUID' and 'GRUB_DISABLE_LINUX_UUID'
|
||||||
|
are also considered to be set to 'false' when they are unset.
|
||||||
|
|
||||||
|
6.3 Writing full configuration files directly
|
||||||
|
=============================================
|
||||||
|
|
||||||
|
'grub.cfg' is written in GRUB's built-in scripting language, which has a
|
||||||
|
syntax quite similar to that of GNU Bash and other Bourne shell
|
||||||
|
derivatives.
|
||||||
|
|
||||||
|
Words
|
||||||
|
=====
|
||||||
|
|
||||||
|
A "word" is a sequence of characters considered as a single unit by
|
||||||
|
GRUB. Words are separated by "metacharacters", which are the following
|
||||||
|
plus space, tab, and newline:
|
||||||
|
|
||||||
|
{ } | & $ ; < >
|
||||||
|
|
||||||
|
Quoting may be used to include metacharacters in words; see below.
|
||||||
|
|
||||||
|
Reserved words
|
||||||
|
==============
|
||||||
|
|
||||||
|
Reserved words have a special meaning to GRUB. The following words are
|
||||||
|
recognised as reserved when unquoted and either the first word of a
|
||||||
|
simple command or the third word of a 'for' command:
|
||||||
|
|
||||||
|
! [[ ]] { }
|
||||||
|
case do done elif else esac fi for function
|
||||||
|
if in menuentry select then time until while
|
||||||
|
|
||||||
|
Not all of these reserved words have a useful purpose yet; some are
|
||||||
|
reserved for future expansion.
|
||||||
|
|
||||||
|
Quoting
|
||||||
|
=======
|
||||||
|
|
||||||
|
Quoting is used to remove the special meaning of certain characters or
|
||||||
|
words. It can be used to treat metacharacters as part of a word, to
|
||||||
|
prevent reserved words from being recognised as such, and to prevent
|
||||||
|
variable expansion.
|
||||||
|
|
||||||
|
There are three quoting mechanisms: the escape character, single
|
||||||
|
quotes, and double quotes.
|
||||||
|
|
||||||
|
A non-quoted backslash (\) is the "escape character". It preserves
|
||||||
|
the literal value of the next character that follows, with the exception
|
||||||
|
of newline.
|
||||||
|
|
||||||
|
Enclosing characters in single quotes preserves the literal value of
|
||||||
|
each character within the quotes. A single quote may not occur between
|
||||||
|
single quotes, even when preceded by a backslash.
|
||||||
|
|
||||||
|
Enclosing characters in double quotes preserves the literal value of
|
||||||
|
all characters within the quotes, with the exception of '$' and '\'.
|
||||||
|
The '$' character retains its special meaning within double quotes. The
|
||||||
|
backslash retains its special meaning only when followed by one of the
|
||||||
|
following characters: '$', '"', '\', or newline. A backslash-newline
|
||||||
|
pair is treated as a line continuation (that is, it is removed from the
|
||||||
|
input stream and effectively ignored(1) (*note Shell-like
|
||||||
|
scripting-Footnote-1::)). A double quote may be quoted within double
|
||||||
|
quotes by preceding it with a backslash.
|
||||||
|
|
||||||
|
Variable expansion
|
||||||
|
==================
|
||||||
|
|
||||||
|
The '$' character introduces variable expansion. The variable name to
|
||||||
|
be expanded may be enclosed in braces, which are optional but serve to
|
||||||
|
protect the variable to be expanded from characters immediately
|
||||||
|
following it which could be interpreted as part of the name.
|
||||||
|
|
||||||
|
Normal variable names begin with an alphabetic character, followed by
|
||||||
|
zero or more alphanumeric characters. These names refer to entries in
|
||||||
|
the GRUB environment (*note Environment::).
|
||||||
|
|
||||||
|
Positional variable names consist of one or more digits. They
|
||||||
|
represent parameters passed to function calls, with '$1' representing
|
||||||
|
the first parameter, and so on.
|
||||||
|
|
||||||
|
The special variable name '?' expands to the exit status of the most
|
||||||
|
recently executed command. When positional variable names are active,
|
||||||
|
other special variable names '@', '*' and '#' are defined and they
|
||||||
|
expand to all positional parameters with necessary quoting, positional
|
||||||
|
parameters without any quoting, and positional parameter count
|
||||||
|
respectively.
|
||||||
|
|
||||||
|
Comments
|
||||||
|
========
|
||||||
|
|
||||||
|
A word beginning with '#' causes that word and all remaining characters
|
||||||
|
on that line to be ignored.
|
||||||
|
|
||||||
|
Simple commands
|
||||||
|
===============
|
||||||
|
|
||||||
|
A "simple command" is a sequence of words separated by spaces or tabs
|
||||||
|
and terminated by a semicolon or a newline. The first word specifies
|
||||||
|
the command to be executed. The remaining words are passed as arguments
|
||||||
|
to the invoked command.
|
||||||
|
|
||||||
|
The return value of a simple command is its exit status. If the
|
||||||
|
reserved word '!' precedes the command, then the return value is instead
|
||||||
|
the logical negation of the command's exit status.
|
||||||
|
|
||||||
|
Compound commands
|
||||||
|
=================
|
||||||
|
|
||||||
|
A "compound command" is one of the following:
|
||||||
|
|
||||||
|
for NAME in WORD ...; do LIST; done
|
||||||
|
The list of words following 'in' is expanded, generating a list of
|
||||||
|
items. The variable NAME is set to each element of this list in
|
||||||
|
turn, and LIST is executed each time. The return value is the exit
|
||||||
|
status of the last command that executes. If the expansion of the
|
||||||
|
items following 'in' results in an empty list, no commands are
|
||||||
|
executed, and the return status is 0.
|
||||||
|
|
||||||
|
if LIST; then LIST; [elif LIST; then LIST;] ... [else LIST;] fi
|
||||||
|
The 'if' LIST is executed. If its exit status is zero, the 'then'
|
||||||
|
LIST is executed. Otherwise, each 'elif' LIST is executed in turn,
|
||||||
|
and if its exit status is zero, the corresponding 'then' LIST is
|
||||||
|
executed and the command completes. Otherwise, the 'else' LIST is
|
||||||
|
executed, if present. The exit status is the exit status of the
|
||||||
|
last command executed, or zero if no condition tested true.
|
||||||
|
|
||||||
|
while COND; do LIST; done
|
||||||
|
until COND; do LIST; done
|
||||||
|
The 'while' command continuously executes the 'do' LIST as long as
|
||||||
|
the last command in COND returns an exit status of zero. The
|
||||||
|
'until' command is identical to the 'while' command, except that
|
||||||
|
the test is negated; the 'do' LIST is executed as long as the last
|
||||||
|
command in COND returns a non-zero exit status. The exit status of
|
||||||
|
the 'while' and 'until' commands is the exit status of the last
|
||||||
|
'do' LIST command executed, or zero if none was executed.
|
||||||
|
|
||||||
|
function NAME { COMMAND; ... }
|
||||||
|
This defines a function named NAME. The "body" of the function is
|
||||||
|
the list of commands within braces, each of which must be
|
||||||
|
terminated with a semicolon or a newline. This list of commands
|
||||||
|
will be executed whenever NAME is specified as the name of a simple
|
||||||
|
command. Function definitions do not affect the exit status in
|
||||||
|
'$?'. When executed, the exit status of a function is the exit
|
||||||
|
status of the last command executed in the body.
|
||||||
|
|
||||||
|
menuentry TITLE ['--class=class' ...] ['--users=users'] ['--unrestricted'] ['--hotkey=key'] ['--id=id'] { COMMAND; ... }
|
||||||
|
*Note menuentry::.
|
||||||
|
|
||||||
|
Built-in Commands
|
||||||
|
=================
|
||||||
|
|
||||||
|
Some built-in commands are also provided by GRUB script to help script
|
||||||
|
writers perform actions that are otherwise not possible. For example,
|
||||||
|
these include commands to jump out of a loop without fully completing
|
||||||
|
it, etc.
|
||||||
|
|
||||||
|
break ['n']
|
||||||
|
Exit from within a 'for', 'while', or 'until' loop. If 'n' is
|
||||||
|
specified, break 'n' levels. 'n' must be greater than or equal to
|
||||||
|
1. If 'n' is greater than the number of enclosing loops, all
|
||||||
|
enclosing loops are exited. The return value is 0 unless 'n' is
|
||||||
|
not greater than or equal to 1.
|
||||||
|
|
||||||
|
continue ['n']
|
||||||
|
Resume the next iteration of the enclosing 'for', 'while' or
|
||||||
|
'until' loop. If 'n' is specified, resume at the 'n'th enclosing
|
||||||
|
loop. 'n' must be greater than or equal to 1. If 'n' is greater
|
||||||
|
than the number of enclosing loops, the last enclosing loop (the
|
||||||
|
"top-level" loop) is resumed. The return value is 0 unless 'n' is
|
||||||
|
not greater than or equal to 1.
|
||||||
|
|
||||||
|
return ['n']
|
||||||
|
Causes a function to exit with the return value specified by 'n'.
|
||||||
|
If 'n' is omitted, the return status is that of the last command
|
||||||
|
executed in the function body. If used outside a function the
|
||||||
|
return status is false.
|
||||||
|
|
||||||
|
setparams ['arg'] ...
|
||||||
|
Replace positional parameters starting with '$1' with arguments to
|
||||||
|
'setparams'.
|
||||||
|
|
||||||
|
shift ['n']
|
||||||
|
The positional parameters from 'n'+1 ... are renamed to '$1'....
|
||||||
|
Parameters represented by the numbers '$#' down to '$#'-'n'+1 are
|
||||||
|
unset. 'n' must be a non-negative number less than or equal to
|
||||||
|
'$#'. If 'n' is 0, no parameters are changed. If 'n' is not
|
||||||
|
given, it is assumed to be 1. If 'n' is greater than '$#', the
|
||||||
|
positional parameters are not changed. The return status is
|
||||||
|
greater than zero if 'n' is greater than '$#' or less than zero;
|
||||||
|
otherwise 0.
|
||||||
|
|
||||||
|
(1) Currently a backslash-newline pair within a variable name is not
|
||||||
|
handled properly, so use this feature with some care.
|
||||||
|
|
||||||
|
6.4 Multi-boot manual config
|
||||||
|
============================
|
||||||
|
|
||||||
|
Currently autogenerating config files for multi-boot environments
|
||||||
|
depends on os-prober and has several shortcomings. While fixing it is
|
||||||
|
scheduled for the next release, meanwhile you can make use of the power
|
||||||
|
of GRUB syntax and do it yourself. A possible configuration is detailed
|
||||||
|
here, feel free to adjust to your needs.
|
||||||
|
|
||||||
|
First create a separate GRUB partition, big enough to hold GRUB. Some
|
||||||
|
of the following entries show how to load OS installer images from this
|
||||||
|
same partition, for that you obviously need to make the partition large
|
||||||
|
enough to hold those images as well. Mount this partition on/mnt/boot
|
||||||
|
and disable GRUB in all OSes and manually install self-compiled latest
|
||||||
|
GRUB with:
|
||||||
|
|
||||||
|
'grub-install --boot-directory=/mnt/boot /dev/sda'
|
||||||
|
|
||||||
|
In all the OSes install GRUB tools but disable installing GRUB in
|
||||||
|
bootsector, so you'll have menu.lst and grub.cfg available for use.
|
||||||
|
Also disable os-prober use by setting:
|
||||||
|
|
||||||
|
'GRUB_DISABLE_OS_PROBER=true'
|
||||||
|
|
||||||
|
in /etc/default/grub
|
||||||
|
|
||||||
|
Then write a grub.cfg (/mnt/boot/grub/grub.cfg):
|
||||||
|
|
||||||
|
|
||||||
|
menuentry "OS using grub2" {
|
||||||
|
insmod xfs
|
||||||
|
search --set=root --label OS1 --hint hd0,msdos8
|
||||||
|
configfile /boot/grub/grub.cfg
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "OS using grub2-legacy" {
|
||||||
|
insmod ext2
|
||||||
|
search --set=root --label OS2 --hint hd0,msdos6
|
||||||
|
legacy_configfile /boot/grub/menu.lst
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Windows XP" {
|
||||||
|
insmod ntfs
|
||||||
|
search --set=root --label WINDOWS_XP --hint hd0,msdos1
|
||||||
|
ntldr /ntldr
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Windows 7" {
|
||||||
|
insmod ntfs
|
||||||
|
search --set=root --label WINDOWS_7 --hint hd0,msdos2
|
||||||
|
ntldr /bootmgr
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "FreeBSD" {
|
||||||
|
insmod zfs
|
||||||
|
search --set=root --label freepool --hint hd0,msdos7
|
||||||
|
kfreebsd /freebsd@/boot/kernel/kernel
|
||||||
|
kfreebsd_module_elf /freebsd@/boot/kernel/opensolaris.ko
|
||||||
|
kfreebsd_module_elf /freebsd@/boot/kernel/zfs.ko
|
||||||
|
kfreebsd_module /freebsd@/boot/zfs/zpool.cache type=/boot/zfs/zpool.cache
|
||||||
|
set kFreeBSD.vfs.root.mountfrom=zfs:freepool/freebsd
|
||||||
|
set kFreeBSD.hw.psm.synaptics_support=1
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "experimental GRUB" {
|
||||||
|
search --set=root --label GRUB --hint hd0,msdos5
|
||||||
|
multiboot /experimental/grub/i386-pc/core.img
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Fedora 16 installer" {
|
||||||
|
search --set=root --label GRUB --hint hd0,msdos5
|
||||||
|
linux /fedora/vmlinuz lang=en_US keymap=sg resolution=1280x800
|
||||||
|
initrd /fedora/initrd.img
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Fedora rawhide installer" {
|
||||||
|
search --set=root --label GRUB --hint hd0,msdos5
|
||||||
|
linux /fedora/vmlinuz repo=ftp://mirror.switch.ch/mirror/fedora/linux/development/rawhide/x86_64 lang=en_US keymap=sg resolution=1280x800
|
||||||
|
initrd /fedora/initrd.img
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Debian sid installer" {
|
||||||
|
search --set=root --label GRUB --hint hd0,msdos5
|
||||||
|
linux /debian/dists/sid/main/installer-amd64/current/images/hd-media/vmlinuz
|
||||||
|
initrd /debian/dists/sid/main/installer-amd64/current/images/hd-media/initrd.gz
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
* Argument to search after -label is FS LABEL. You can also use UUIDs
|
||||||
|
with -fs-uuid UUID instead of -label LABEL. You could also use
|
||||||
|
direct 'root=hd0,msdosX' but this is not recommended due to device
|
||||||
|
name instability.
|
||||||
|
|
||||||
|
6.5 Embedding a configuration file into GRUB
|
||||||
|
============================================
|
||||||
|
|
||||||
|
GRUB supports embedding a configuration file directly into the core
|
||||||
|
image, so that it is loaded before entering normal mode. This is
|
||||||
|
useful, for example, when it is not straightforward to find the real
|
||||||
|
configuration file, or when you need to debug problems with loading that
|
||||||
|
file. 'grub-install' uses this feature when it is not using BIOS disk
|
||||||
|
functions or when installing to a different disk from the one containing
|
||||||
|
'/boot/grub', in which case it needs to use the 'search' command (*note
|
||||||
|
search::) to find '/boot/grub'.
|
||||||
|
|
||||||
|
To embed a configuration file, use the '-c' option to 'grub-mkimage'.
|
||||||
|
The file is copied into the core image, so it may reside anywhere on the
|
||||||
|
file system, and may be removed after running 'grub-mkimage'.
|
||||||
|
|
||||||
|
After the embedded configuration file (if any) is executed, GRUB will
|
||||||
|
load the 'normal' module (*note normal::), which will then read the real
|
||||||
|
configuration file from '$prefix/grub.cfg'. By this point, the 'root'
|
||||||
|
variable will also have been set to the root device name. For example,
|
||||||
|
'prefix' might be set to '(hd0,1)/boot/grub', and 'root' might be set to
|
||||||
|
'hd0,1'. Thus, in most cases, the embedded configuration file only
|
||||||
|
needs to set the 'prefix' and 'root' variables, and then drop through to
|
||||||
|
GRUB's normal processing. A typical example of this might look like
|
||||||
|
this:
|
||||||
|
|
||||||
|
search.fs_uuid 01234567-89ab-cdef-0123-456789abcdef root
|
||||||
|
set prefix=($root)/boot/grub
|
||||||
|
|
||||||
|
(The 'search_fs_uuid' module must be included in the core image for
|
||||||
|
this example to work.)
|
||||||
|
|
||||||
|
In more complex cases, it may be useful to read other configuration
|
||||||
|
files directly from the embedded configuration file. This allows such
|
||||||
|
things as reading files not called 'grub.cfg', or reading files from a
|
||||||
|
directory other than that where GRUB's loadable modules are installed.
|
||||||
|
To do this, include the 'configfile' and 'normal' modules in the core
|
||||||
|
image, and embed a configuration file that uses the 'configfile' command
|
||||||
|
to load another file. The following example of this also requires the
|
||||||
|
'echo', 'search_label', and 'test' modules to be included in the core
|
||||||
|
image:
|
||||||
|
|
||||||
|
search.fs_label grub root
|
||||||
|
if [ -e /boot/grub/example/test1.cfg ]; then
|
||||||
|
set prefix=($root)/boot/grub
|
||||||
|
configfile /boot/grub/example/test1.cfg
|
||||||
|
else
|
||||||
|
if [ -e /boot/grub/example/test2.cfg ]; then
|
||||||
|
set prefix=($root)/boot/grub
|
||||||
|
configfile /boot/grub/example/test2.cfg
|
||||||
|
else
|
||||||
|
echo "Could not find an example configuration file!"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
The embedded configuration file may not contain menu entries
|
||||||
|
directly, but may only read them from elsewhere using 'configfile'.
|
||||||
|
|
520
boot/grub/persistent/docs/07_themes
Normal file
520
boot/grub/persistent/docs/07_themes
Normal file
|
@ -0,0 +1,520 @@
|
||||||
|
7 Theme file format
|
||||||
|
*******************
|
||||||
|
|
||||||
|
7.1 Introduction
|
||||||
|
================
|
||||||
|
|
||||||
|
The GRUB graphical menu supports themes that can customize the layout
|
||||||
|
and appearance of the GRUB boot menu. The theme is configured through a
|
||||||
|
plain text file that specifies the layout of the various GUI components
|
||||||
|
(including the boot menu, timeout progress bar, and text messages) as
|
||||||
|
well as the appearance using colors, fonts, and images. Example is
|
||||||
|
available in docs/example_theme.txt
|
||||||
|
|
||||||
|
7.2 Theme Elements
|
||||||
|
==================
|
||||||
|
|
||||||
|
7.2.1 Colors
|
||||||
|
------------
|
||||||
|
|
||||||
|
Colors can be specified in several ways:
|
||||||
|
|
||||||
|
* HTML-style "#RRGGBB" or "#RGB" format, where *R*, *G*, and *B* are
|
||||||
|
hexadecimal digits (e.g., "#8899FF")
|
||||||
|
* as comma-separated decimal RGB values (e.g., "128, 128, 255")
|
||||||
|
* with "SVG 1.0 color names" (e.g., "cornflowerblue") which must be
|
||||||
|
specified in lowercase.
|
||||||
|
|
||||||
|
7.2.2 Fonts
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The fonts GRUB uses "PFF2 font format" bitmap fonts. Fonts are
|
||||||
|
specified with full font names. Currently there is no provision for a
|
||||||
|
preference list of fonts, or deriving one font from another. Fonts are
|
||||||
|
loaded with the "loadfont" command in GRUB (*note loadfont::). To see
|
||||||
|
the list of loaded fonts, execute the "lsfonts" command (*note
|
||||||
|
lsfonts::). If there are too many fonts to fit on screen, do "set
|
||||||
|
pager=1" before executing "lsfonts".
|
||||||
|
|
||||||
|
7.2.3 Progress Bar
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Figure 7.1
|
||||||
|
|
||||||
|
Figure 7.2
|
||||||
|
|
||||||
|
Progress bars are used to display the remaining time before GRUB boots
|
||||||
|
the default menu entry. To create a progress bar that will display the
|
||||||
|
remaining time before automatic boot, simply create a "progress_bar"
|
||||||
|
component with the id "__timeout__". This indicates to GRUB that the
|
||||||
|
progress bar should be updated as time passes, and it should be made
|
||||||
|
invisible if the countdown to automatic boot is interrupted by the user.
|
||||||
|
|
||||||
|
Progress bars may optionally have text displayed on them. This text
|
||||||
|
is controlled by variable "text" which contains a printf template with
|
||||||
|
the only argument %d is the number of seconds remaining. Additionally
|
||||||
|
special values "@TIMEOUT_NOTIFICATION_SHORT@",
|
||||||
|
"@TIMEOUT_NOTIFICATION_MIDDLE@", "@TIMEOUT_NOTIFICATION_LONG@" are
|
||||||
|
replaced with standard and translated templates.
|
||||||
|
|
||||||
|
7.2.4 Circular Progress Indicator
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
The circular progress indicator functions similarly to the progress bar.
|
||||||
|
When given an id of "__timeout__", GRUB updates the circular progress
|
||||||
|
indicator's value to indicate the time remaining. For the circular
|
||||||
|
progress indicator, there are two images used to render it: the *center*
|
||||||
|
image, and the *tick* image. The center image is rendered in the center
|
||||||
|
of the component, while the tick image is used to render each mark along
|
||||||
|
the circumference of the indicator.
|
||||||
|
|
||||||
|
7.2.5 Labels
|
||||||
|
------------
|
||||||
|
|
||||||
|
Text labels can be placed on the boot screen. The font, color, and
|
||||||
|
horizontal alignment can be specified for labels. If a label is given
|
||||||
|
the id "__timeout__", then the "text" property for that label is also
|
||||||
|
updated with a message informing the user of the number of seconds
|
||||||
|
remaining until automatic boot. This is useful in case you want the
|
||||||
|
text displayed somewhere else instead of directly on the progress bar.
|
||||||
|
|
||||||
|
7.2.6 Boot Menu
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The boot menu where GRUB displays the menu entries from the "grub.cfg"
|
||||||
|
file. It is a list of items, where each item has a title and an
|
||||||
|
optional icon. The icon is selected based on the *classes* specified
|
||||||
|
for the menu entry. If there is a PNG file named "myclass.png" in the
|
||||||
|
"grub/themes/icons" directory, it will be displayed for items which have
|
||||||
|
the class *myclass*. The boot menu can be customized in several ways,
|
||||||
|
such as the font and color used for the menu entry title, and by
|
||||||
|
specifying styled boxes for the menu itself and for the selected item
|
||||||
|
highlight.
|
||||||
|
|
||||||
|
7.2.7 Styled Boxes
|
||||||
|
------------------
|
||||||
|
|
||||||
|
One of the most important features for customizing the layout is the use
|
||||||
|
of *styled boxes*. A styled box is composed of 9 rectangular (and
|
||||||
|
potentially empty) regions, which are used to seamlessly draw the styled
|
||||||
|
box on screen:
|
||||||
|
|
||||||
|
Northwest (nw) North (n) Northeast (ne)
|
||||||
|
West (w) Center (c) East (e)
|
||||||
|
Southwest (sw) South (s) Southeast (se)
|
||||||
|
|
||||||
|
To support any size of box on screen, the center slice and the slices
|
||||||
|
for the top, bottom, and sides are all scaled to the correct size for
|
||||||
|
the component on screen, using the following rules:
|
||||||
|
|
||||||
|
1. The edge slices (north, south, east, and west) are scaled in the
|
||||||
|
direction of the edge they are adjacent to. For instance, the west
|
||||||
|
slice is scaled vertically.
|
||||||
|
2. The corner slices (northwest, northeast, southeast, and southwest)
|
||||||
|
are not scaled.
|
||||||
|
3. The center slice is scaled to fill the remaining space in the
|
||||||
|
middle.
|
||||||
|
|
||||||
|
As an example of how an image might be sliced up, consider the styled
|
||||||
|
box used for a terminal view.
|
||||||
|
|
||||||
|
Figure 7.3
|
||||||
|
|
||||||
|
7.2.8 Creating Styled Box Images
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
The Inkscape_ scalable vector graphics editor is a very useful tool for
|
||||||
|
creating styled box images. One process that works well for slicing a
|
||||||
|
drawing into the necessary image slices is:
|
||||||
|
|
||||||
|
1. Create or open the drawing you'd like use.
|
||||||
|
2. Create a new layer on the top of the layer stack. Make it visible.
|
||||||
|
Select this layer as the current layer.
|
||||||
|
3. Draw 9 rectangles on your drawing where you'd like the slices to
|
||||||
|
be. Clear the fill option, and set the stroke to 1 pixel wide
|
||||||
|
solid stroke. The corners of the slices must meet precisely; if it
|
||||||
|
is off by a single pixel, it will probably be evident when the
|
||||||
|
styled box is rendered in the GRUB menu. You should probably go to
|
||||||
|
File | Document Properties | Grids and enable a grid or create a
|
||||||
|
guide (click on one of the rulers next to the drawing and drag over
|
||||||
|
the drawing; release the mouse button to place the guide) to help
|
||||||
|
place the rectangles precisely.
|
||||||
|
4. Right click on the center slice rectangle and choose Object
|
||||||
|
Properties. Change the "Id" to "slice_c" and click Set. Repeat
|
||||||
|
this for the remaining 8 rectangles, giving them Id values of
|
||||||
|
"slice_n", "slice_ne", "slice_e", and so on according to the
|
||||||
|
location.
|
||||||
|
5. Save the drawing.
|
||||||
|
6. Select all the slice rectangles. With the slice layer selected,
|
||||||
|
you can simply press Ctrl+A to select all rectangles. The status
|
||||||
|
bar should indicate that 9 rectangles are selected.
|
||||||
|
7. Click the layer hide icon for the slice layer in the layer palette.
|
||||||
|
The rectangles will remain selected, even though they are hidden.
|
||||||
|
8. Choose File | Export Bitmap and check the *Batch export 9 selected
|
||||||
|
objects* box. Make sure that *Hide all except selected* is
|
||||||
|
unchecked. click *Export*. This will create PNG files in the same
|
||||||
|
directory as the drawing, named after the slices. These can now be
|
||||||
|
used for a styled box in a GRUB theme.
|
||||||
|
|
||||||
|
7.3 Theme File Manual
|
||||||
|
=====================
|
||||||
|
|
||||||
|
The theme file is a plain text file. Lines that begin with "#" are
|
||||||
|
ignored and considered comments. (Note: This may not be the case if the
|
||||||
|
previous line ended where a value was expected.)
|
||||||
|
|
||||||
|
The theme file contains two types of statements:
|
||||||
|
1. Global properties.
|
||||||
|
2. Component construction.
|
||||||
|
|
||||||
|
7.3.1 Global Properties
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
7.3.2 Format
|
||||||
|
------------
|
||||||
|
|
||||||
|
Global properties are specified with the simple format:
|
||||||
|
* name1: value1
|
||||||
|
* name2: "value which may contain spaces"
|
||||||
|
* name3: #88F
|
||||||
|
|
||||||
|
In this example, name3 is assigned a color value.
|
||||||
|
|
||||||
|
7.3.3 Global Property List
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
title-text Specifies the text to display at the top
|
||||||
|
center of the screen as a title.
|
||||||
|
title-font Defines the font used for the title
|
||||||
|
message at the top of the screen.
|
||||||
|
title-color Defines the color of the title message.
|
||||||
|
message-font Currently unused. Left for backward
|
||||||
|
compatibility.
|
||||||
|
message-color Currently unused. Left for backward
|
||||||
|
compatibility.
|
||||||
|
message-bg-color Currently unused. Left for backward
|
||||||
|
compatibility.
|
||||||
|
desktop-image Specifies the image to use as the
|
||||||
|
background. It will be scaled to fit the
|
||||||
|
screen size or proportionally scaled
|
||||||
|
depending on the scale method.
|
||||||
|
desktop-image-scale-methodSpecifies the scaling method for the
|
||||||
|
*desktop-image*. Options are "stretch",
|
||||||
|
"crop", "padding", "fitwidth",
|
||||||
|
"fitheight". "stretch" for fitting the
|
||||||
|
screen size. Otherwise it is
|
||||||
|
proportional scaling of a part of
|
||||||
|
*desktop-image* to the part of the
|
||||||
|
screen. "crop" part of the
|
||||||
|
*desktop-image* will be proportionally
|
||||||
|
scaled to fit the screen sizes.
|
||||||
|
"padding" the entire *desktop-image* will
|
||||||
|
be contained on the screen. "fitwidth"
|
||||||
|
for fitting the *desktop-image*'s width
|
||||||
|
with screen width. "fitheight" for
|
||||||
|
fitting the *desktop-image*'s height with
|
||||||
|
the screen height. Default is "stretch".
|
||||||
|
desktop-image-h-align Specifies the horizontal alignment of the
|
||||||
|
*desktop-image* if
|
||||||
|
*desktop-image-scale-method* isn't equeal
|
||||||
|
to "stretch". Options are "left",
|
||||||
|
"center", "right". Default is "center".
|
||||||
|
desktop-image-v-align Specifies the vertical alignment of the
|
||||||
|
*desktop-image* if
|
||||||
|
*desktop-image-scale-method* isn't equeal
|
||||||
|
to "stretch". Options are "top",
|
||||||
|
"center", "bottom". Default is "center".
|
||||||
|
desktop-color Specifies the color for the background if
|
||||||
|
*desktop-image* is not specified.
|
||||||
|
terminal-box Specifies the file name pattern for the
|
||||||
|
styled box slices used for the command
|
||||||
|
line terminal window. For example,
|
||||||
|
"terminal-box: terminal_*.png" will use
|
||||||
|
the images "terminal_c.png" as the center
|
||||||
|
area, "terminal_n.png" as the north (top)
|
||||||
|
edge, "terminal_nw.png" as the northwest
|
||||||
|
(upper left) corner, and so on. If the
|
||||||
|
image for any slice is not found, it will
|
||||||
|
simply be left empty.
|
||||||
|
terminal-border Specifies the border width of the
|
||||||
|
terminal window.
|
||||||
|
terminal-left Specifies the left coordinate of the
|
||||||
|
terminal window.
|
||||||
|
terminal-top Specifies the top coordinate of the
|
||||||
|
terminal window.
|
||||||
|
terminal-width Specifies the width of the terminal
|
||||||
|
window.
|
||||||
|
terminal-height Specifies the height of the terminal
|
||||||
|
window.
|
||||||
|
|
||||||
|
7.3.4 Component Construction
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
Greater customizability comes is provided by components. A tree of
|
||||||
|
components forms the user interface. *Containers* are components that
|
||||||
|
can contain other components, and there is always a single root
|
||||||
|
component which is an instance of a *canvas* container.
|
||||||
|
|
||||||
|
Components are created in the theme file by prefixing the type of
|
||||||
|
component with a '+' sign:
|
||||||
|
|
||||||
|
' + label { text="GRUB" font="aqui 11" color="#8FF" } '
|
||||||
|
|
||||||
|
properties of a component are specified as "name = value" (whitespace
|
||||||
|
surrounding tokens is optional and is ignored) where *value* may be:
|
||||||
|
* a single word (e.g., "align = center", "color = #FF8080"),
|
||||||
|
* a quoted string (e.g., "text = "Hello, World!""), or
|
||||||
|
* a tuple (e.g., "preferred_size = (120, 80)").
|
||||||
|
|
||||||
|
7.3.5 Component List
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The following is a list of the components and the properties they
|
||||||
|
support.
|
||||||
|
|
||||||
|
* label A label displays a line of text.
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
id Set to "__timeout__" to display the time elapsed
|
||||||
|
to an automatical boot of the default entry.
|
||||||
|
text The text to display. If "id" is set to
|
||||||
|
"__timeout__" and no "text" property is set then
|
||||||
|
the amount of seconds will be shown. If set to
|
||||||
|
"@KEYMAP_SHORT@", "@KEYMAP_MIDDLE@" or
|
||||||
|
"@KEYMAP_LONG@" then predefined hotkey
|
||||||
|
information will be shown.
|
||||||
|
font The font to use for text display.
|
||||||
|
color The color of the text.
|
||||||
|
align The horizontal alignment of the text within the
|
||||||
|
component. Options are "left", "center" and
|
||||||
|
"right".
|
||||||
|
visible Set to "false" to hide the label.
|
||||||
|
|
||||||
|
* image A component that displays an image. The image is scaled to
|
||||||
|
fit the component.
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
|
||||||
|
file The full path to the image file to load.
|
||||||
|
|
||||||
|
* progress_bar Displays a horizontally oriented progress bar. It can
|
||||||
|
be rendered using simple solid filled rectangles, or using a pair
|
||||||
|
of pixmap styled boxes.
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
|
||||||
|
id Set to "__timeout__" to display the time elapsed
|
||||||
|
to an automatical boot of the default entry.
|
||||||
|
fg_color The foreground color for plain solid color
|
||||||
|
rendering.
|
||||||
|
bg_color The background color for plain solid color
|
||||||
|
rendering.
|
||||||
|
border_color The border color for plain solid color
|
||||||
|
rendering.
|
||||||
|
text_color The text color.
|
||||||
|
bar_style The styled box specification for the frame of
|
||||||
|
the progress bar. Example:
|
||||||
|
"progress_frame_*.png" If the value is equal to
|
||||||
|
"highlight_style" then no styled boxes will be
|
||||||
|
shown.
|
||||||
|
highlight_styleThe styled box specification for the highlighted
|
||||||
|
region of the progress bar. This box will be
|
||||||
|
used to paint just the highlighted region of the
|
||||||
|
bar, and will be increased in size as the bar
|
||||||
|
nears completion. Example: "progress_hl_*.png".
|
||||||
|
If the value is equal to "bar_style" then no
|
||||||
|
styled boxes will be shown.
|
||||||
|
highlight_overlayIf this option is set to "true" then the
|
||||||
|
highlight box side slices (every slice except
|
||||||
|
the center slice) will overlay the frame box
|
||||||
|
side slices. And the center slice of the
|
||||||
|
highlight box can move all the way (from top to
|
||||||
|
bottom), being drawn on the center slice of the
|
||||||
|
frame box. That way we can make a progress bar
|
||||||
|
with round-shaped edges so there won't be a free
|
||||||
|
space from the highlight to the frame in top and
|
||||||
|
bottom scrollbar positions. Default is "false".
|
||||||
|
font The font to use for progress bar.
|
||||||
|
text The text to display on the progress bar. If the
|
||||||
|
progress bar's ID is set to "__timeout__" and
|
||||||
|
the value of this property is set to
|
||||||
|
"@TIMEOUT_NOTIFICATION_SHORT@",
|
||||||
|
"@TIMEOUT_NOTIFICATION_MIDDLE@" or
|
||||||
|
"@TIMEOUT_NOTIFICATION_LONG@", then GRUB will
|
||||||
|
update this property with an informative message
|
||||||
|
as the timeout approaches.
|
||||||
|
|
||||||
|
* circular_progress Displays a circular progress indicator. The
|
||||||
|
appearance of this component is determined by two images: the
|
||||||
|
*center* image and the *tick* image. The center image is generally
|
||||||
|
larger and will be drawn in the center of the component. Around
|
||||||
|
the circumference of a circle within the component, the tick image
|
||||||
|
will be drawn a certain number of times, depending on the
|
||||||
|
properties of the component.
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
|
||||||
|
id Set to "__timeout__" to display the time
|
||||||
|
elapsed to an automatical boot of the
|
||||||
|
default entry.
|
||||||
|
center_bitmap The file name of the image to draw in the
|
||||||
|
center of the component.
|
||||||
|
tick_bitmap The file name of the image to draw for
|
||||||
|
the tick marks.
|
||||||
|
num_ticks The number of ticks that make up a full
|
||||||
|
circle.
|
||||||
|
ticks_disappear Boolean value indicating whether tick
|
||||||
|
marks should progressively appear, or
|
||||||
|
progressively disappear as *value*
|
||||||
|
approaches *end*. Specify "true" or
|
||||||
|
"false". Default is "false".
|
||||||
|
start_angle The position of the first tick mark to
|
||||||
|
appear or disappear. Measured in
|
||||||
|
"parrots", 1 "parrot" = 1 / 256 of the
|
||||||
|
full circle. Use values "xxx deg" or
|
||||||
|
"xxx \xc2\xb0" to set the angle in
|
||||||
|
degrees.
|
||||||
|
|
||||||
|
* boot_menu Displays the GRUB boot menu. It allows selecting items
|
||||||
|
and executing them.
|
||||||
|
|
||||||
|
Properties:
|
||||||
|
|
||||||
|
item_font The font to use for the menu item
|
||||||
|
titles.
|
||||||
|
selected_item_font The font to use for the selected
|
||||||
|
menu item, or "inherit" (the
|
||||||
|
default) to use "item_font" for
|
||||||
|
the selected menu item as well.
|
||||||
|
item_color The color to use for the menu item
|
||||||
|
titles.
|
||||||
|
selected_item_color The color to use for the selected
|
||||||
|
menu item, or "inherit" (the
|
||||||
|
default) to use "item_color" for
|
||||||
|
the selected menu item as well.
|
||||||
|
icon_width The width of menu item icons.
|
||||||
|
Icons are scaled to the specified
|
||||||
|
size.
|
||||||
|
icon_height The height of menu item icons.
|
||||||
|
item_height The height of each menu item in
|
||||||
|
pixels.
|
||||||
|
item_padding The amount of space in pixels to
|
||||||
|
leave on each side of the menu
|
||||||
|
item contents.
|
||||||
|
item_icon_space The space between an item's icon
|
||||||
|
and the title text, in pixels.
|
||||||
|
item_spacing The amount of space to leave
|
||||||
|
between menu items, in pixels.
|
||||||
|
menu_pixmap_style The image file pattern for the
|
||||||
|
menu frame styled box. Example:
|
||||||
|
"menu_*.png" (this will use images
|
||||||
|
such as "menu_c.png",
|
||||||
|
"menu_w.png", 'menu_nw.png", etc.)
|
||||||
|
item_pixmap_style The image file pattern for the
|
||||||
|
item styled box.
|
||||||
|
selected_item_pixmap_style The image file pattern for the
|
||||||
|
selected item highlight styled
|
||||||
|
box.
|
||||||
|
scrollbar Boolean value indicating whether
|
||||||
|
the scroll bar should be drawn if
|
||||||
|
the frame and thumb styled boxes
|
||||||
|
are configured.
|
||||||
|
scrollbar_frame The image file pattern for the
|
||||||
|
entire scroll bar. Example:
|
||||||
|
"scrollbar_*.png"
|
||||||
|
scrollbar_thumb The image file pattern for the
|
||||||
|
scroll bar thumb (the part of the
|
||||||
|
scroll bar that moves as scrolling
|
||||||
|
occurs). Example:
|
||||||
|
"scrollbar_thumb_*.png"
|
||||||
|
scrollbar_thumb_overlay If this option is set to "true"
|
||||||
|
then the scrollbar thumb side
|
||||||
|
slices (every slice except the
|
||||||
|
center slice) will overlay the
|
||||||
|
scrollbar frame side slices. And
|
||||||
|
the center slice of the
|
||||||
|
scrollbar_thumb can move all the
|
||||||
|
way (from top to bottom), being
|
||||||
|
drawn on the center slice of the
|
||||||
|
scrollbar frame. That way we can
|
||||||
|
make a scrollbar with round-shaped
|
||||||
|
edges so there won't be a free
|
||||||
|
space from the thumb to the frame
|
||||||
|
in top and bottom scrollbar
|
||||||
|
positions. Default is "false".
|
||||||
|
scrollbar_slice The menu frame styled box's slice
|
||||||
|
in which the scrollbar will be
|
||||||
|
drawn. Possible values are
|
||||||
|
"west", "center", "east"
|
||||||
|
(default). "west" - the scrollbar
|
||||||
|
will be drawn in the west slice
|
||||||
|
(right-aligned). "east" - the
|
||||||
|
scrollbar will be drawn in the
|
||||||
|
east slice (left-aligned).
|
||||||
|
"center" - the scrollbar will be
|
||||||
|
drawn in the center slice. Note:
|
||||||
|
in case of "center" slice: a) If
|
||||||
|
the scrollbar should be drawn then
|
||||||
|
boot menu entry's width is
|
||||||
|
decreased by the scrollbar's width
|
||||||
|
and the scrollbar is drawn at the
|
||||||
|
right side of the center slice.
|
||||||
|
b) If the scrollbar won't be drawn
|
||||||
|
then the boot menu entry's width
|
||||||
|
is the width of the center slice.
|
||||||
|
c) We don't necessary need the
|
||||||
|
menu pixmap box to display the
|
||||||
|
scrollbar.
|
||||||
|
scrollbar_left_pad The left scrollbar padding in
|
||||||
|
pixels. Unused if
|
||||||
|
"scrollbar_slice" is "west".
|
||||||
|
scrollbar_right_pad The right scrollbar padding in
|
||||||
|
pixels. Unused if
|
||||||
|
"scrollbar_slice" is "east".
|
||||||
|
scrollbar_top_pad The top scrollbar padding in
|
||||||
|
pixels.
|
||||||
|
scrollbar_bottom_pad The bottom scrollbar padding in
|
||||||
|
pixels.
|
||||||
|
visible Set to "false" to hide the boot
|
||||||
|
menu.
|
||||||
|
|
||||||
|
* canvas Canvas is a container that allows manual placement of
|
||||||
|
components within it. It does not alter the positions of its child
|
||||||
|
components. It assigns all child components their preferred sizes.
|
||||||
|
|
||||||
|
* hbox The *hbox* container lays out its children from left to right,
|
||||||
|
giving each one its preferred width. The height of each child is
|
||||||
|
set to the maximum of the preferred heights of all children.
|
||||||
|
|
||||||
|
* vbox The *vbox* container lays out its children from top to bottom,
|
||||||
|
giving each one its preferred height. The width of each child is
|
||||||
|
set to the maximum of the preferred widths of all children.
|
||||||
|
|
||||||
|
7.3.6 Common properties
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
The following properties are supported by all components:
|
||||||
|
'left'
|
||||||
|
The distance from the left border of container to left border of
|
||||||
|
the object in either of three formats:
|
||||||
|
x Value in pixels
|
||||||
|
p% Percentage
|
||||||
|
p%+x mixture of both
|
||||||
|
'top'
|
||||||
|
The distance from the left border of container to left border of
|
||||||
|
the object in same format.
|
||||||
|
'width'
|
||||||
|
The width of object in same format.
|
||||||
|
'height'
|
||||||
|
The height of object in same format.
|
||||||
|
'id'
|
||||||
|
The identifier for the component. This can be any arbitrary
|
||||||
|
string. The ID can be used by scripts to refer to various
|
||||||
|
components in the GUI component tree. Currently, there is one
|
||||||
|
special ID value that GRUB recognizes:
|
||||||
|
|
||||||
|
"__timeout__" Component with this ID will be updated by GRUB
|
||||||
|
and will indicate time elapsed to an automatical
|
||||||
|
boot of the default entry. Affected components:
|
||||||
|
"label", "circular_progress", "progress_bar".
|
||||||
|
|
79
boot/grub/persistent/docs/08_network_booting
Normal file
79
boot/grub/persistent/docs/08_network_booting
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
8 Booting GRUB from the network
|
||||||
|
*******************************
|
||||||
|
|
||||||
|
The following instructions don't work for *-emu, i386-qemu,
|
||||||
|
i386-coreboot, i386-multiboot, mips_loongson, mips-arc and
|
||||||
|
mips_qemu_mips
|
||||||
|
|
||||||
|
To generate a netbootable directory, run:
|
||||||
|
|
||||||
|
grub-mknetdir --net-directory=/srv/tftp --subdir=/boot/grub -d /usr/lib/grub/<platform>
|
||||||
|
|
||||||
|
E.g. for i386-pc:
|
||||||
|
|
||||||
|
grub-mknetdir --net-directory=/srv/tftp --subdir=/boot/grub -d /usr/lib/grub/i386-pc
|
||||||
|
|
||||||
|
Then follow instructions printed out by grub-mknetdir on configuring
|
||||||
|
your DHCP server.
|
||||||
|
|
||||||
|
After GRUB has started, files on the TFTP server will be accessible
|
||||||
|
via the '(tftp)' device.
|
||||||
|
|
||||||
|
The server IP address can be controlled by changing the '(tftp)'
|
||||||
|
device name to '(tftp,SERVER-IP)'. Note that this should be changed
|
||||||
|
both in the prefix and in any references to the device name in the
|
||||||
|
configuration file.
|
||||||
|
|
||||||
|
GRUB provides several environment variables which may be used to
|
||||||
|
inspect or change the behaviour of the PXE device. In the following
|
||||||
|
description <INTERFACE> is placeholder for the name of network interface
|
||||||
|
(platform dependent):
|
||||||
|
|
||||||
|
'net_<INTERFACE>_ip'
|
||||||
|
The network interface's IP address. Read-only.
|
||||||
|
|
||||||
|
'net_<INTERFACE>_mac'
|
||||||
|
The network interface's MAC address. Read-only.
|
||||||
|
|
||||||
|
'net_<INTERFACE>_hostname'
|
||||||
|
The client host name provided by DHCP. Read-only.
|
||||||
|
|
||||||
|
'net_<INTERFACE>_domain'
|
||||||
|
The client domain name provided by DHCP. Read-only.
|
||||||
|
|
||||||
|
'net_<INTERFACE>_rootpath'
|
||||||
|
The path to the client's root disk provided by DHCP. Read-only.
|
||||||
|
|
||||||
|
'net_<INTERFACE>_extensionspath'
|
||||||
|
The path to additional DHCP vendor extensions provided by DHCP.
|
||||||
|
Read-only.
|
||||||
|
|
||||||
|
'net_<INTERFACE>_boot_file'
|
||||||
|
The boot file name provided by DHCP. Read-only.
|
||||||
|
|
||||||
|
'net_<INTERFACE>_dhcp_server_name'
|
||||||
|
The name of the DHCP server responsible for these boot parameters.
|
||||||
|
Read-only.
|
||||||
|
|
||||||
|
'net_<INTERFACE>_next_server'
|
||||||
|
The IP address of the next (usually, TFTP) server provided by DHCP.
|
||||||
|
Read-only.
|
||||||
|
|
||||||
|
'net_default_interface'
|
||||||
|
Initially set to name of network interface that was used to load
|
||||||
|
grub. Read-write, although setting it affects only interpretation
|
||||||
|
of 'net_default_ip' and 'net_default_mac'
|
||||||
|
|
||||||
|
'net_default_ip'
|
||||||
|
The IP address of default interface. Read-only. This is alias for
|
||||||
|
the 'net_${net_default_interface}_ip'.
|
||||||
|
|
||||||
|
'net_default_mac'
|
||||||
|
The default interface's MAC address. Read-only. This is alias for
|
||||||
|
the 'net_${net_default_interface}_mac'.
|
||||||
|
|
||||||
|
'net_default_server'
|
||||||
|
The default server used by network drives (*note Device syntax::).
|
||||||
|
Read-write, although setting this is only useful before opening a
|
||||||
|
network device.
|
||||||
|
|
43
boot/grub/persistent/docs/09_serial_line
Normal file
43
boot/grub/persistent/docs/09_serial_line
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
9 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. Here is an example:
|
||||||
|
|
||||||
|
grub> serial --unit=0 --speed=9600
|
||||||
|
grub> terminal_input serial; terminal_output 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 commands 'terminal_input' (*note terminal_input::) and
|
||||||
|
'terminal_output' (*note terminal_output::) choose 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_input serial console'. In this case, a terminal in which you
|
||||||
|
press any key will be selected as a GRUB terminal. In the example
|
||||||
|
above, note that you need to put both commands on the same command line,
|
||||||
|
as you will lose the ability to type commands on the console after the
|
||||||
|
first command.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
54
boot/grub/persistent/docs/10_vendor_poweron_keys
Normal file
54
boot/grub/persistent/docs/10_vendor_poweron_keys
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
10 Using GRUB with vendor power-on keys
|
||||||
|
***************************************
|
||||||
|
|
||||||
|
Some laptop vendors provide an additional power-on button which boots
|
||||||
|
another OS. GRUB supports such buttons with the 'GRUB_TIMEOUT_BUTTON',
|
||||||
|
'GRUB_TIMEOUT_STYLE_BUTTON', 'GRUB_DEFAULT_BUTTON', and
|
||||||
|
'GRUB_BUTTON_CMOS_ADDRESS' variables in default/grub (*note Simple
|
||||||
|
configuration::). 'GRUB_TIMEOUT_BUTTON', 'GRUB_TIMEOUT_STYLE_BUTTON',
|
||||||
|
and 'GRUB_DEFAULT_BUTTON' are used instead of the corresponding
|
||||||
|
variables without the '_BUTTON' suffix when powered on using the special
|
||||||
|
button. 'GRUB_BUTTON_CMOS_ADDRESS' is vendor-specific and partially
|
||||||
|
model-specific. Values known to the GRUB team are:
|
||||||
|
|
||||||
|
<Dell XPS M1330M>
|
||||||
|
121:3
|
||||||
|
<Dell XPS M1530>
|
||||||
|
85:3
|
||||||
|
<Dell Latitude E4300>
|
||||||
|
85:3
|
||||||
|
<Asus EeePC 1005PE>
|
||||||
|
84:1 (unconfirmed)
|
||||||
|
<LENOVO ThinkPad T410s (2912W1C)>
|
||||||
|
101:3
|
||||||
|
|
||||||
|
To take full advantage of this function, install GRUB into the MBR
|
||||||
|
(*note Installing GRUB using grub-install::).
|
||||||
|
|
||||||
|
If you have a laptop which has a similar feature and not in the above
|
||||||
|
list could you figure your address and contribute? To discover the
|
||||||
|
address do the following:
|
||||||
|
* boot normally
|
||||||
|
* sudo modprobe nvram
|
||||||
|
sudo cat /dev/nvram | xxd > normal_button.txt
|
||||||
|
* boot using vendor button
|
||||||
|
* sudo modprobe nvram
|
||||||
|
sudo cat /dev/nvram | xxd > normal_vendor.txt
|
||||||
|
|
||||||
|
Then compare these text files and find where a bit was toggled. E.g.
|
||||||
|
in case of Dell XPS it was:
|
||||||
|
byte 0x47: 20 --> 28
|
||||||
|
It's a bit number 3 as seen from following table:
|
||||||
|
0 01
|
||||||
|
1 02
|
||||||
|
2 04
|
||||||
|
3 08
|
||||||
|
4 10
|
||||||
|
5 20
|
||||||
|
6 40
|
||||||
|
7 80
|
||||||
|
|
||||||
|
0x47 is decimal 71. Linux nvram implementation cuts first 14 bytes
|
||||||
|
of CMOS. So the real byte address in CMOS is 71+14=85 So complete
|
||||||
|
address is 85:3
|
||||||
|
|
113
boot/grub/persistent/docs/11_grub_image_files
Normal file
113
boot/grub/persistent/docs/11_grub_image_files
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
11 GRUB image files
|
||||||
|
*******************
|
||||||
|
|
||||||
|
GRUB consists of several images: a variety of bootstrap images for
|
||||||
|
starting GRUB in various ways, a kernel image, and a set of modules
|
||||||
|
which are combined with the kernel image to form a core image. Here is
|
||||||
|
a short overview of them.
|
||||||
|
|
||||||
|
'boot.img'
|
||||||
|
On PC BIOS systems, this image is the first part of GRUB to start.
|
||||||
|
It is written to a master boot record (MBR) or to the boot sector
|
||||||
|
of a partition. Because a PC boot sector is 512 bytes, the size of
|
||||||
|
this image is exactly 512 bytes.
|
||||||
|
|
||||||
|
The sole function of 'boot.img' is to read the first sector of the
|
||||||
|
core image from a local disk and jump to it. Because of the size
|
||||||
|
restriction, 'boot.img' cannot understand any file system
|
||||||
|
structure, so 'grub-install' hardcodes the location of the first
|
||||||
|
sector of the core image into 'boot.img' when installing GRUB.
|
||||||
|
|
||||||
|
'diskboot.img'
|
||||||
|
This image is used as the first sector of the core image when
|
||||||
|
booting from a hard disk. It reads the rest of the core image into
|
||||||
|
memory and starts the kernel. Since file system handling is not
|
||||||
|
yet available, it encodes the location of the core image using a
|
||||||
|
block list format.
|
||||||
|
|
||||||
|
'cdboot.img'
|
||||||
|
This image is used as the first sector of the core image when
|
||||||
|
booting from a CD-ROM drive. It performs a similar function to
|
||||||
|
'diskboot.img'.
|
||||||
|
|
||||||
|
'pxeboot.img'
|
||||||
|
This image is used as the start of the core image when booting from
|
||||||
|
the network using PXE. *Note Network::.
|
||||||
|
|
||||||
|
'lnxboot.img'
|
||||||
|
This image may be placed at the start of the core image in order to
|
||||||
|
make GRUB look enough like a Linux kernel that it can be booted by
|
||||||
|
LILO using an 'image=' section.
|
||||||
|
|
||||||
|
'kernel.img'
|
||||||
|
This image contains GRUB's basic run-time facilities: frameworks
|
||||||
|
for device and file handling, environment variables, the rescue
|
||||||
|
mode command-line parser, and so on. It is rarely used directly,
|
||||||
|
but is built into all core images.
|
||||||
|
|
||||||
|
'core.img'
|
||||||
|
This is the core image of GRUB. It is built dynamically from the
|
||||||
|
kernel image and an arbitrary list of modules by the 'grub-mkimage'
|
||||||
|
program. Usually, it contains enough modules to access
|
||||||
|
'/boot/grub', and loads everything else (including menu handling,
|
||||||
|
the ability to load target operating systems, and so on) from the
|
||||||
|
file system at run-time. The modular design allows the core image
|
||||||
|
to be kept small, since the areas of disk where it must be
|
||||||
|
installed are often as small as 32KB.
|
||||||
|
|
||||||
|
*Note BIOS installation::, for details on where the core image can
|
||||||
|
be installed on PC systems.
|
||||||
|
|
||||||
|
'*.mod'
|
||||||
|
Everything else in GRUB resides in dynamically loadable modules.
|
||||||
|
These are often loaded automatically, or built into the core image
|
||||||
|
if they are essential, but may also be loaded manually using the
|
||||||
|
'insmod' command (*note insmod::).
|
||||||
|
|
||||||
|
For GRUB Legacy users
|
||||||
|
=====================
|
||||||
|
|
||||||
|
GRUB 2 has a different design from GRUB Legacy, and so correspondences
|
||||||
|
with the images it used cannot be exact. Nevertheless, GRUB Legacy
|
||||||
|
users often ask questions in the terms they are familiar with, and so
|
||||||
|
here is a brief guide to how GRUB 2's images relate to that.
|
||||||
|
|
||||||
|
'stage1'
|
||||||
|
Stage 1 from GRUB Legacy was very similar to 'boot.img' in GRUB 2,
|
||||||
|
and they serve the same function.
|
||||||
|
|
||||||
|
'*_stage1_5'
|
||||||
|
In GRUB Legacy, Stage 1.5's function was to include enough
|
||||||
|
filesystem code to allow the much larger Stage 2 to be read from an
|
||||||
|
ordinary filesystem. In this respect, its function was similar to
|
||||||
|
'core.img' in GRUB 2. However, 'core.img' is much more capable
|
||||||
|
than Stage 1.5 was; since it offers a rescue shell, it is sometimes
|
||||||
|
possible to recover manually in the event that it is unable to load
|
||||||
|
any other modules, for example if partition numbers have changed.
|
||||||
|
'core.img' is built in a more flexible way, allowing GRUB 2 to
|
||||||
|
support reading modules from advanced disk types such as LVM and
|
||||||
|
RAID.
|
||||||
|
|
||||||
|
GRUB Legacy could run with only Stage 1 and Stage 2 in some limited
|
||||||
|
configurations, while GRUB 2 requires 'core.img' and cannot work
|
||||||
|
without it.
|
||||||
|
|
||||||
|
'stage2'
|
||||||
|
GRUB 2 has no single Stage 2 image. Instead, it loads modules from
|
||||||
|
'/boot/grub' at run-time.
|
||||||
|
|
||||||
|
'stage2_eltorito'
|
||||||
|
In GRUB 2, images for booting from CD-ROM drives are now
|
||||||
|
constructed using 'cdboot.img' and 'core.img', making sure that the
|
||||||
|
core image contains the 'iso9660' module. It is usually best to
|
||||||
|
use the 'grub-mkrescue' program for this.
|
||||||
|
|
||||||
|
'nbgrub'
|
||||||
|
There is as yet no equivalent for 'nbgrub' in GRUB 2; it was used
|
||||||
|
by Etherboot and some other network boot loaders.
|
||||||
|
|
||||||
|
'pxegrub'
|
||||||
|
In GRUB 2, images for PXE network booting are now constructed using
|
||||||
|
'pxeboot.img' and 'core.img', making sure that the core image
|
||||||
|
contains the 'pxe' and 'pxecmd' modules. *Note Network::.
|
||||||
|
|
48
boot/grub/persistent/docs/12_core_image_size_limitation
Normal file
48
boot/grub/persistent/docs/12_core_image_size_limitation
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
12 Core image size limitation
|
||||||
|
*****************************
|
||||||
|
|
||||||
|
Heavily limited platforms:
|
||||||
|
* i386-pc (normal and PXE): the core image size (compressed) is
|
||||||
|
limited by 458240 bytes. kernel.img (.text + .data + .bss,
|
||||||
|
uncompressed) is limited by 392704 bytes. module size
|
||||||
|
(uncompressed) + kernel.img (.text + .data, uncompressed) is
|
||||||
|
limited by the size of contiguous chunk at 1M address.
|
||||||
|
* sparc64-ieee1275: kernel.img (.text + .data + .bss) + modules +
|
||||||
|
256K (stack) + 2M (heap) is limited by space available at 0x4400.
|
||||||
|
On most platforms it's just 3 or 4M since ieee1275 maps only so
|
||||||
|
much.
|
||||||
|
* i386-ieee1275: kernel.img (.text + .data + .bss) + modules is
|
||||||
|
limited by memory available at 0x10000, at most 596K
|
||||||
|
|
||||||
|
Lightly limited platforms:
|
||||||
|
|
||||||
|
* *-xen: limited only by adress space and RAM size.
|
||||||
|
* i386-qemu: kernel.img (.text + .data + .bss) is limited by 392704
|
||||||
|
bytes. (core.img would be limited by ROM size but it's unlimited
|
||||||
|
on qemu
|
||||||
|
* All EFI platforms: limited by contiguous RAM size and possibly
|
||||||
|
firmware bugs
|
||||||
|
* Coreboot and multiboot. kernel.img (.text + .data + .bss) is
|
||||||
|
limited by 392704 bytes. module size is limited by the size of
|
||||||
|
contiguous chunk at 1M address.
|
||||||
|
* mipsel-loongson (ELF), mips(el)-qemu_mips (ELF): if uncompressed:
|
||||||
|
kernel.img (.text + .data) + modules is limited by the space from
|
||||||
|
80200000 forward if compressed: kernel.img (.text + .data,
|
||||||
|
uncompressed) + modules (uncompressed) + (modules + kernel.img
|
||||||
|
(.text + .data)) (compressed) + decompressor is limited by the
|
||||||
|
space from 80200000 forward
|
||||||
|
* mipsel-loongson (Flash), mips(el)-qemu_mips (Flash): kernel.img
|
||||||
|
(.text + .data) + modules is limited by the space from 80200000
|
||||||
|
forward core.img (final) is limited by flash size (512K on yeeloong
|
||||||
|
and fulooong)
|
||||||
|
* mips-arc: if uncompressed: kernel.img (.text + .data) is limited by
|
||||||
|
the space from 8bd00000 forward modules + dummy decompressor is
|
||||||
|
limited by the space from 8bd00000 backward if compressed:
|
||||||
|
kernel.img (.text + .data, uncompressed) is limited by the space
|
||||||
|
from 8bd00000 forward modules (uncompressed) + (modules +
|
||||||
|
kernel.img (.text + .data)) (compressed, aligned to 1M) + 1M
|
||||||
|
(decompressor + scratch space) is limited by the space from
|
||||||
|
8bd00000 backward
|
||||||
|
* powerpc-ieee1275: kernel.img (.text + .data + .bss) + modules is
|
||||||
|
limited by space available at 0x200000
|
||||||
|
|
117
boot/grub/persistent/docs/13_filesystem_syntax
Normal file
117
boot/grub/persistent/docs/13_filesystem_syntax
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
13 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 'search' (*note
|
||||||
|
search::).
|
||||||
|
|
||||||
|
13.1 How to specify devices
|
||||||
|
===========================
|
||||||
|
|
||||||
|
The device syntax is like this:
|
||||||
|
|
||||||
|
(DEVICE[,PARTMAP-NAME1PART-NUM1[,PARTMAP-NAME2PART-NUM2[,...]]])
|
||||||
|
|
||||||
|
'[]' means the parameter is optional. DEVICE depends on the disk
|
||||||
|
driver in use. BIOS and EFI disks use either 'fd' or 'hd' followed by a
|
||||||
|
digit, like 'fd0', or 'cd'. AHCI, PATA (ata), crypto, USB use the name
|
||||||
|
of driver followed by a number. Memdisk and host are limited to one
|
||||||
|
disk and so it's refered just by driver name. RAID (md), ofdisk
|
||||||
|
(ieee1275 and nand), LVM (lvm), LDM, virtio (vdsk) and arcdisk (arc) use
|
||||||
|
intrinsic name of disk prefixed by driver name. Additionally just
|
||||||
|
"nand" refers to the disk aliased as "nand". Conflicts are solved by
|
||||||
|
suffixing a number if necessarry. Commas need to be escaped. Loopback
|
||||||
|
uses whatever name specified to 'loopback' command. Hostdisk uses names
|
||||||
|
specified in device.map as long as it's of the form [fhc]d[0-9]* or
|
||||||
|
hostdisk/<OS DEVICE>. For crypto and RAID (md) additionally you can use
|
||||||
|
the syntax <driver name>uuid/<uuid>. For LVM additionally you can use
|
||||||
|
the syntax lvmid/<volume-group-uuid>/<volume-uuid>.
|
||||||
|
|
||||||
|
(fd0)
|
||||||
|
(hd0)
|
||||||
|
(cd)
|
||||||
|
(ahci0)
|
||||||
|
(ata0)
|
||||||
|
(crypto0)
|
||||||
|
(usb0)
|
||||||
|
(cryptouuid/123456789abcdef0123456789abcdef0)
|
||||||
|
(mduuid/123456789abcdef0123456789abcdef0)
|
||||||
|
(lvm/system-root)
|
||||||
|
(lvmid/F1ikgD-2RES-306G-il9M-7iwa-4NKW-EbV1NV/eLGuCQ-L4Ka-XUgR-sjtJ-ffch-bajr-fCNfz5)
|
||||||
|
(md/myraid)
|
||||||
|
(md/0)
|
||||||
|
(ieee1275/disk2)
|
||||||
|
(ieee1275//pci@1f\,0/ide@d/disk@2)
|
||||||
|
(nand)
|
||||||
|
(memdisk)
|
||||||
|
(host)
|
||||||
|
(myloop)
|
||||||
|
(hostdisk//dev/sda)
|
||||||
|
|
||||||
|
PART-NUM represents the partition number of DEVICE, starting from
|
||||||
|
one. PARTNAME is optional but is recommended since disk may have
|
||||||
|
several top-level partmaps. Specifying third and later component you
|
||||||
|
can access to subpartitions.
|
||||||
|
|
||||||
|
The syntax '(hd0)' represents using the entire disk (or the MBR when
|
||||||
|
installing GRUB), while the syntax '(hd0,1)' represents using the first
|
||||||
|
partition of the disk (or the boot sector of the partition when
|
||||||
|
installing GRUB).
|
||||||
|
|
||||||
|
(hd0,msdos1)
|
||||||
|
(hd0,msdos1,msdos5)
|
||||||
|
(hd0,msdos1,bsd3)
|
||||||
|
(hd0,netbsd1)
|
||||||
|
(hd0,gpt1)
|
||||||
|
(hd0,1,3)
|
||||||
|
|
||||||
|
If you enabled the network support, the special drives
|
||||||
|
'(PROTOCOL[,SERVER])' are also available. Supported protocols are
|
||||||
|
'http' and 'tftp'. If SERVER is omitted, value of environment variable
|
||||||
|
'net_default_server' is used. 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.
|
||||||
|
|
||||||
|
13.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,1)/boot/grub/grub.cfg'. This means the file '/boot/grub/grub.cfg'
|
||||||
|
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,1)' by the
|
||||||
|
command 'set root=(hd1,1)' (*note set::), then '/boot/kernel' is the
|
||||||
|
same as '(hd1,1)/boot/kernel'.
|
||||||
|
|
||||||
|
On ZFS filesystem the first path component must be
|
||||||
|
VOLUME'@'[SNAPSHOT]. So '/rootvol@snap-129/boot/grub/grub.cfg' refers
|
||||||
|
to file '/boot/grub/grub.cfg' in snapshot of volume 'rootvol' with name
|
||||||
|
'snap-129'. Trailing '@' after volume name is mandatory even if
|
||||||
|
snapshot name is omitted.
|
||||||
|
|
||||||
|
13.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,2)+1' is the same as '+1' when the root device is '(hd0,2)'.
|
||||||
|
|
120
boot/grub/persistent/docs/14_user_interface
Normal file
120
boot/grub/persistent/docs/14_user_interface
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
14 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.
|
||||||
|
|
||||||
|
14.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.
|
||||||
|
|
||||||
|
14.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.
|
||||||
|
|
||||||
|
14.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.
|
||||||
|
|
||||||
|
Each line in the menu entry can be edited freely, and you can add new
|
||||||
|
lines by pressing <RET> at the end of a line. To boot the edited entry,
|
||||||
|
press <Ctrl-x>.
|
||||||
|
|
||||||
|
Although GRUB unfortunately does not support "undo", you can do
|
||||||
|
almost the same thing by just returning to the main menu using <ESC>.
|
||||||
|
|
459
boot/grub/persistent/docs/15_environment_variables.txt
Normal file
459
boot/grub/persistent/docs/15_environment_variables.txt
Normal file
|
@ -0,0 +1,459 @@
|
||||||
|
15 GRUB environment variables
|
||||||
|
*****************************
|
||||||
|
|
||||||
|
GRUB supports environment variables which are rather like those offered
|
||||||
|
by all Unix-like systems. Environment variables have a name, which is
|
||||||
|
unique and is usually a short identifier, and a value, which is an
|
||||||
|
arbitrary string of characters. They may be set (*note set::), unset
|
||||||
|
(*note unset::), or looked up (*note Shell-like scripting::) by name.
|
||||||
|
|
||||||
|
A number of environment variables have special meanings to various
|
||||||
|
parts of GRUB. Others may be used freely in GRUB configuration files.
|
||||||
|
|
||||||
|
15.1 Special environment variables
|
||||||
|
==================================
|
||||||
|
|
||||||
|
These variables have special meaning to GRUB.
|
||||||
|
|
||||||
|
15.1.1 biosnum
|
||||||
|
--------------
|
||||||
|
|
||||||
|
When chain-loading another boot loader (*note Chain-loading::), GRUB may
|
||||||
|
need to know what BIOS drive number corresponds to the root device
|
||||||
|
(*note root::) so that it can set up registers properly. If the BIOSNUM
|
||||||
|
variable is set, it overrides GRUB's own means of guessing this.
|
||||||
|
|
||||||
|
For an alternative approach which also changes BIOS drive mappings
|
||||||
|
for the chain-loaded system, *note drivemap::.
|
||||||
|
|
||||||
|
15.1.2 check_signatures
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
This variable controls whether GRUB enforces digital signature
|
||||||
|
validation on loaded files. *Note Using digital signatures::.
|
||||||
|
|
||||||
|
15.1.3 chosen
|
||||||
|
-------------
|
||||||
|
|
||||||
|
When executing a menu entry, GRUB sets the CHOSEN variable to the title
|
||||||
|
of the entry being executed.
|
||||||
|
|
||||||
|
If the menu entry is in one or more submenus, then CHOSEN is set to
|
||||||
|
the titles of each of the submenus starting from the top level followed
|
||||||
|
by the title of the menu entry itself, separated by '>'.
|
||||||
|
|
||||||
|
15.1.4 cmdpath
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The location from which 'core.img' was loaded as an absolute directory
|
||||||
|
name (*note File name syntax::). This is set by GRUB at startup based
|
||||||
|
on information returned by platform firmware. Not every platform
|
||||||
|
provides this information and some may return only device without path
|
||||||
|
name.
|
||||||
|
|
||||||
|
15.1.5 color_highlight
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
This variable contains the "highlight" foreground and background
|
||||||
|
terminal colors, separated by a slash ('/'). Setting this variable
|
||||||
|
changes those colors. For the available color names, *note
|
||||||
|
color_normal::.
|
||||||
|
|
||||||
|
The default is 'black/light-gray'.
|
||||||
|
|
||||||
|
15.1.6 color_normal
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
This variable contains the "normal" foreground and background terminal
|
||||||
|
colors, separated by a slash ('/'). Setting this variable changes those
|
||||||
|
colors. Each color must be a name from the following list:
|
||||||
|
|
||||||
|
* black
|
||||||
|
* blue
|
||||||
|
* green
|
||||||
|
* cyan
|
||||||
|
* red
|
||||||
|
* magenta
|
||||||
|
* brown
|
||||||
|
* light-gray
|
||||||
|
* dark-gray
|
||||||
|
* light-blue
|
||||||
|
* light-green
|
||||||
|
* light-cyan
|
||||||
|
* light-red
|
||||||
|
* light-magenta
|
||||||
|
* yellow
|
||||||
|
* white
|
||||||
|
|
||||||
|
The default is 'light-gray/black'.
|
||||||
|
|
||||||
|
The color support support varies from terminal to terminal.
|
||||||
|
|
||||||
|
'morse' has no color support at all.
|
||||||
|
|
||||||
|
'mda_text' color support is limited to highlighting by black/white
|
||||||
|
reversal.
|
||||||
|
|
||||||
|
'console' on ARC, EMU and IEEE1275, 'serial_*' and 'spkmodem' are
|
||||||
|
governed by terminfo and support only 8 colors if in modes 'vt100-color'
|
||||||
|
(default for console on emu), 'arc' (default for console on ARC),
|
||||||
|
'ieee1275' (default for console on IEEE1275). When in mode 'vt100' then
|
||||||
|
the color support is limited to highlighting by black/white reversal.
|
||||||
|
When in mode 'dumb' there is no color support.
|
||||||
|
|
||||||
|
When console supports no colors this setting is ignored. When
|
||||||
|
console supports 8 colors, then the colors from the second half of the
|
||||||
|
previous list are mapped to the matching colors of first half.
|
||||||
|
|
||||||
|
'console' on EFI and BIOS and 'vga_text' support all 16 colors.
|
||||||
|
|
||||||
|
'gfxterm' supports all 16 colors and would be theoretically
|
||||||
|
extendable to support whole rgb24 palette but currently there is no
|
||||||
|
compelling reason to go beyond the current 16 colors.
|
||||||
|
|
||||||
|
15.1.7 config_directory
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
This variable is automatically set by GRUB to the directory part of
|
||||||
|
current configuration file name (*note config_file::).
|
||||||
|
|
||||||
|
15.1.8 config_file
|
||||||
|
------------------
|
||||||
|
|
||||||
|
This variable is automatically set by GRUB to the name of configuration
|
||||||
|
file that is being processed by commands 'configfile' (*note
|
||||||
|
configfile::) or 'normal' (*note normal::). It is restored to the
|
||||||
|
previous value when command completes.
|
||||||
|
|
||||||
|
15.1.9 debug
|
||||||
|
------------
|
||||||
|
|
||||||
|
This variable may be set to enable debugging output from various
|
||||||
|
components of GRUB. The value is a list of debug facility names
|
||||||
|
separated by whitespace or ',', or 'all' to enable all available
|
||||||
|
debugging output. The facility names are the first argument to
|
||||||
|
grub_dprintf. Consult source for more details.
|
||||||
|
|
||||||
|
15.1.10 default
|
||||||
|
---------------
|
||||||
|
|
||||||
|
If this variable is set, it identifies a menu entry that should be
|
||||||
|
selected by default, possibly after a timeout (*note timeout::). The
|
||||||
|
entry may be identified by number (starting from 0 at each level of the
|
||||||
|
hierarchy), by title, or by id.
|
||||||
|
|
||||||
|
For example, if you have:
|
||||||
|
|
||||||
|
menuentry 'Example GNU/Linux distribution' --class gnu-linux --id example-gnu-linux {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
then you can make this the default using:
|
||||||
|
|
||||||
|
default=example-gnu-linux
|
||||||
|
|
||||||
|
If the entry is in a submenu, then it must be identified using the
|
||||||
|
number, title, or id of each of the submenus starting from the top
|
||||||
|
level, followed by the number, title, or id of the menu entry itself,
|
||||||
|
with each element separated by '>'. For example, take the following
|
||||||
|
menu structure:
|
||||||
|
|
||||||
|
GNU/Hurd --id gnu-hurd
|
||||||
|
Standard Boot --id=gnu-hurd-std
|
||||||
|
Rescue shell --id=gnu-hurd-rescue
|
||||||
|
Other platforms --id=other
|
||||||
|
Minix --id=minix
|
||||||
|
Version 3.4.0 --id=minix-3.4.0
|
||||||
|
Version 3.3.0 --id=minix-3.3.0
|
||||||
|
GRUB Invaders --id=grub-invaders
|
||||||
|
|
||||||
|
The more recent release of Minix would then be identified as 'Other
|
||||||
|
platforms>Minix>Version 3.4.0', or as '1>0>0', or as
|
||||||
|
'other>minix>minix-3.4.0'.
|
||||||
|
|
||||||
|
This variable is often set by 'GRUB_DEFAULT' (*note Simple
|
||||||
|
configuration::), 'grub-set-default', or 'grub-reboot'.
|
||||||
|
|
||||||
|
15.1.11 fallback
|
||||||
|
----------------
|
||||||
|
|
||||||
|
If this variable is set, it identifies a menu entry that should be
|
||||||
|
selected if the default menu entry fails to boot. Entries are
|
||||||
|
identified in the same way as for 'default' (*note default::).
|
||||||
|
|
||||||
|
15.1.12 gfxmode
|
||||||
|
---------------
|
||||||
|
|
||||||
|
If this variable is set, it sets the resolution used on the 'gfxterm'
|
||||||
|
graphical terminal. Note that you can only use modes which your
|
||||||
|
graphics card supports via VESA BIOS Extensions (VBE), so for example
|
||||||
|
native LCD panel resolutions may not be available. The default is
|
||||||
|
'auto', which selects a platform-specific default that should look
|
||||||
|
reasonable. Supported modes can be listed by 'videoinfo' command in
|
||||||
|
GRUB.
|
||||||
|
|
||||||
|
The resolution may be specified as a sequence of one or more modes,
|
||||||
|
separated by commas (',') or semicolons (';'); each will be tried in
|
||||||
|
turn until one is found. Each mode should be either 'auto',
|
||||||
|
'WIDTHxHEIGHT', or 'WIDTHxHEIGHTxDEPTH'.
|
||||||
|
|
||||||
|
15.1.13 gfxpayload
|
||||||
|
------------------
|
||||||
|
|
||||||
|
If this variable is set, it controls the video mode in which the Linux
|
||||||
|
kernel starts up, replacing the 'vga=' boot option (*note linux::). It
|
||||||
|
may be set to 'text' to force the Linux kernel to boot in normal text
|
||||||
|
mode, 'keep' to preserve the graphics mode set using 'gfxmode', or any
|
||||||
|
of the permitted values for 'gfxmode' to set a particular graphics mode
|
||||||
|
(*note gfxmode::).
|
||||||
|
|
||||||
|
Depending on your kernel, your distribution, your graphics card, and
|
||||||
|
the phase of the moon, note that using this option may cause GNU/Linux
|
||||||
|
to suffer from various display problems, particularly during the early
|
||||||
|
part of the boot sequence. If you have problems, set this variable to
|
||||||
|
'text' and GRUB will tell Linux to boot in normal text mode.
|
||||||
|
|
||||||
|
The default is platform-specific. On platforms with a native text
|
||||||
|
mode (such as PC BIOS platforms), the default is 'text'. Otherwise the
|
||||||
|
default may be 'auto' or a specific video mode.
|
||||||
|
|
||||||
|
This variable is often set by 'GRUB_GFXPAYLOAD_LINUX' (*note Simple
|
||||||
|
configuration::).
|
||||||
|
|
||||||
|
15.1.14 gfxterm_font
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
If this variable is set, it names a font to use for text on the
|
||||||
|
'gfxterm' graphical terminal. Otherwise, 'gfxterm' may use any
|
||||||
|
available font.
|
||||||
|
|
||||||
|
15.1.15 grub_cpu
|
||||||
|
----------------
|
||||||
|
|
||||||
|
In normal mode (*note normal::), GRUB sets the 'grub_cpu' variable to
|
||||||
|
the CPU type for which GRUB was built (e.g. 'i386' or 'powerpc').
|
||||||
|
|
||||||
|
15.1.16 grub_platform
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
In normal mode (*note normal::), GRUB sets the 'grub_platform' variable
|
||||||
|
to the platform for which GRUB was built (e.g. 'pc' or 'efi').
|
||||||
|
|
||||||
|
15.1.17 icondir
|
||||||
|
---------------
|
||||||
|
|
||||||
|
If this variable is set, it names a directory in which the GRUB
|
||||||
|
graphical menu should look for icons after looking in the theme's
|
||||||
|
'icons' directory. *Note Theme file format::.
|
||||||
|
|
||||||
|
15.1.18 lang
|
||||||
|
------------
|
||||||
|
|
||||||
|
If this variable is set, it names the language code that the 'gettext'
|
||||||
|
command (*note gettext::) uses to translate strings. For example,
|
||||||
|
French would be named as 'fr', and Simplified Chinese as 'zh_CN'.
|
||||||
|
|
||||||
|
'grub-mkconfig' (*note Simple configuration::) will try to set a
|
||||||
|
reasonable default for this variable based on the system locale.
|
||||||
|
|
||||||
|
15.1.19 locale_dir
|
||||||
|
------------------
|
||||||
|
|
||||||
|
If this variable is set, it names the directory where translation files
|
||||||
|
may be found (*note gettext::), usually '/boot/grub/locale'. Otherwise,
|
||||||
|
internationalization is disabled.
|
||||||
|
|
||||||
|
'grub-mkconfig' (*note Simple configuration::) will set a reasonable
|
||||||
|
default for this variable if internationalization is needed and any
|
||||||
|
translation files are available.
|
||||||
|
|
||||||
|
15.1.20 menu_color_highlight
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
This variable contains the foreground and background colors to be used
|
||||||
|
for the highlighted menu entry, separated by a slash ('/'). Setting
|
||||||
|
this variable changes those colors. For the available color names,
|
||||||
|
*note color_normal::.
|
||||||
|
|
||||||
|
The default is the value of 'color_highlight' (*note
|
||||||
|
color_highlight::).
|
||||||
|
|
||||||
|
15.1.21 menu_color_normal
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
This variable contains the foreground and background colors to be used
|
||||||
|
for non-highlighted menu entries, separated by a slash ('/'). Setting
|
||||||
|
this variable changes those colors. For the available color names,
|
||||||
|
*note color_normal::.
|
||||||
|
|
||||||
|
The default is the value of 'color_normal' (*note color_normal::).
|
||||||
|
|
||||||
|
15.1.22 net_<INTERFACE>_boot_file
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.23 net_<INTERFACE>_dhcp_server_name
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.24 net_<INTERFACE>_domain
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.25 net_<INTERFACE>_extensionspath
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.26 net_<INTERFACE>_hostname
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.27 net_<INTERFACE>_ip
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.28 net_<INTERFACE>_mac
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.29 net_<INTERFACE>_next_server
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.30 net_<INTERFACE>_rootpath
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.31 net_default_interface
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.32 net_default_ip
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.33 net_default_mac
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.34 net_default_server
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.35 pager
|
||||||
|
-------------
|
||||||
|
|
||||||
|
If set to '1', pause output after each screenful and wait for keyboard
|
||||||
|
input. The default is not to pause output.
|
||||||
|
|
||||||
|
15.1.36 prefix
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The location of the '/boot/grub' directory as an absolute file name
|
||||||
|
(*note File name syntax::). This is normally set by GRUB at startup
|
||||||
|
based on information provided by 'grub-install'. GRUB modules are
|
||||||
|
dynamically loaded from this directory, so it must be set correctly in
|
||||||
|
order for many parts of GRUB to work.
|
||||||
|
|
||||||
|
15.1.37 pxe_blksize
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.38 pxe_default_gateway
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.39 pxe_default_server
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
*Note Network::.
|
||||||
|
|
||||||
|
15.1.40 root
|
||||||
|
------------
|
||||||
|
|
||||||
|
The root device name (*note Device syntax::). Any file names that do
|
||||||
|
not specify an explicit device name are read from this device. The
|
||||||
|
default is normally set by GRUB at startup based on the value of
|
||||||
|
'prefix' (*note prefix::).
|
||||||
|
|
||||||
|
For example, if GRUB was installed to the first partition of the
|
||||||
|
first hard disk, then 'prefix' might be set to '(hd0,msdos1)/boot/grub'
|
||||||
|
and 'root' to 'hd0,msdos1'.
|
||||||
|
|
||||||
|
15.1.41 superusers
|
||||||
|
------------------
|
||||||
|
|
||||||
|
This variable may be set to a list of superuser names to enable
|
||||||
|
authentication support. *Note Security::.
|
||||||
|
|
||||||
|
15.1.42 theme
|
||||||
|
-------------
|
||||||
|
|
||||||
|
This variable may be set to a directory containing a GRUB graphical menu
|
||||||
|
theme. *Note Theme file format::.
|
||||||
|
|
||||||
|
This variable is often set by 'GRUB_THEME' (*note Simple
|
||||||
|
configuration::).
|
||||||
|
|
||||||
|
15.1.43 timeout
|
||||||
|
---------------
|
||||||
|
|
||||||
|
If this variable is set, it specifies the time in seconds to wait for
|
||||||
|
keyboard input before booting the default menu entry. A timeout of '0'
|
||||||
|
means to boot the default entry immediately without displaying the menu;
|
||||||
|
a timeout of '-1' (or unset) means to wait indefinitely.
|
||||||
|
|
||||||
|
If 'timeout_style' (*note timeout_style::) is set to 'countdown' or
|
||||||
|
'hidden', the timeout is instead counted before the menu is displayed.
|
||||||
|
|
||||||
|
This variable is often set by 'GRUB_TIMEOUT' (*note Simple
|
||||||
|
configuration::).
|
||||||
|
|
||||||
|
15.1.44 timeout_style
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
This variable may be set to 'menu', 'countdown', or 'hidden' to control
|
||||||
|
the way in which the timeout (*note timeout::) interacts with displaying
|
||||||
|
the menu. See the documentation of 'GRUB_TIMEOUT_STYLE' (*note Simple
|
||||||
|
configuration::) for details.
|
||||||
|
|
||||||
|
15.2 The GRUB environment block
|
||||||
|
===============================
|
||||||
|
|
||||||
|
It is often useful to be able to remember a small amount of information
|
||||||
|
from one boot to the next. For example, you might want to set the
|
||||||
|
default menu entry based on what was selected the last time. GRUB
|
||||||
|
deliberately does not implement support for writing files in order to
|
||||||
|
minimise the possibility of the boot loader being responsible for file
|
||||||
|
system corruption, so a GRUB configuration file cannot just create a
|
||||||
|
file in the ordinary way. However, GRUB provides an "environment block"
|
||||||
|
which can be used to save a small amount of state.
|
||||||
|
|
||||||
|
The environment block is a preallocated 1024-byte file, which
|
||||||
|
normally lives in '/boot/grub/grubenv' (although you should not assume
|
||||||
|
this). At boot time, the 'load_env' command (*note load_env::) loads
|
||||||
|
environment variables from it, and the 'save_env' (*note save_env::)
|
||||||
|
command saves environment variables to it. From a running system, the
|
||||||
|
'grub-editenv' utility can be used to edit the environment block.
|
||||||
|
|
||||||
|
For safety reasons, this storage is only available when installed on
|
||||||
|
a plain disk (no LVM or RAID), using a non-checksumming filesystem (no
|
||||||
|
ZFS), and using BIOS or EFI functions (no ATA, USB or IEEE1275).
|
||||||
|
|
||||||
|
'grub-mkconfig' uses this facility to implement 'GRUB_SAVEDEFAULT'
|
||||||
|
(*note Simple configuration::).
|
1462
boot/grub/persistent/docs/16_available_commands.txt
Normal file
1462
boot/grub/persistent/docs/16_available_commands.txt
Normal file
File diff suppressed because it is too large
Load diff
136
boot/grub/persistent/docs/17_internationalisation
Normal file
136
boot/grub/persistent/docs/17_internationalisation
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
17 Internationalisation
|
||||||
|
***********************
|
||||||
|
|
||||||
|
17.1 Charset
|
||||||
|
============
|
||||||
|
|
||||||
|
GRUB uses UTF-8 internally other than in rendering where some
|
||||||
|
GRUB-specific appropriate representation is used. All text files
|
||||||
|
(including config) are assumed to be encoded in UTF-8.
|
||||||
|
|
||||||
|
17.2 Filesystems
|
||||||
|
================
|
||||||
|
|
||||||
|
NTFS, JFS, UDF, HFS+, exFAT, long filenames in FAT, Joliet part of
|
||||||
|
ISO9660 are treated as UTF-16 as per specification. AFS and BFS are
|
||||||
|
read as UTF-8, again according to specification. BtrFS, cpio, tar,
|
||||||
|
squash4, minix, minix2, minix3, ROMFS, ReiserFS, XFS, ext2, ext3, ext4,
|
||||||
|
FAT (short names), F2FS, RockRidge part of ISO9660, nilfs2, UFS1, UFS2
|
||||||
|
and ZFS are assumed to be UTF-8. This might be false on systems
|
||||||
|
configured with legacy charset but as long as the charset used is
|
||||||
|
superset of ASCII you should be able to access ASCII-named files. And
|
||||||
|
it's recommended to configure your system to use UTF-8 to access the
|
||||||
|
filesystem, convmv may help with migration. ISO9660 (plain) filenames
|
||||||
|
are specified as being ASCII or being described with unspecified escape
|
||||||
|
sequences. GRUB assumes that the ISO9660 names are UTF-8 (since any
|
||||||
|
ASCII is valid UTF-8). There are some old CD-ROMs which use CP437 in
|
||||||
|
non-compliant way. You're still able to access files with names
|
||||||
|
containing only ASCII characters on such filesystems though. You're
|
||||||
|
also able to access any file if the filesystem contains valid Joliet
|
||||||
|
(UTF-16) or RockRidge (UTF-8). AFFS, SFS and HFS never use unicode and
|
||||||
|
GRUB assumes them to be in Latin1, Latin1 and MacRoman respectively.
|
||||||
|
GRUB handles filesystem case-insensitivity however no attempt is
|
||||||
|
performed at case conversion of international characters so e.g. a file
|
||||||
|
named lowercase greek alpha is treated as different from the one named
|
||||||
|
as uppercase alpha. The filesystems in questions are NTFS (except POSIX
|
||||||
|
namespace), HFS+ (configurable at mkfs time, default insensitive), SFS
|
||||||
|
(configurable at mkfs time, default insensitive), JFS (configurable at
|
||||||
|
mkfs time, default sensitive), HFS, AFFS, FAT, exFAT and ZFS
|
||||||
|
(configurable on per-subvolume basis by property "casesensitivity",
|
||||||
|
default sensitive). On ZFS subvolumes marked as case insensitive files
|
||||||
|
containing lowercase international characters are inaccessible. Also
|
||||||
|
like all supported filesystems except HFS+ and ZFS (configurable on
|
||||||
|
per-subvolume basis by property "normalization", default none) GRUB
|
||||||
|
makes no attempt at check of canonical equivalence so a file name
|
||||||
|
u-diaresis is treated as distinct from u+combining diaresis. This
|
||||||
|
however means that in order to access file on HFS+ its name must be
|
||||||
|
specified in normalisation form D. On normalized ZFS subvolumes
|
||||||
|
filenames out of normalisation are inaccessible.
|
||||||
|
|
||||||
|
17.3 Output terminal
|
||||||
|
====================
|
||||||
|
|
||||||
|
Firmware output console "console" on ARC and IEEE1275 are limited to
|
||||||
|
ASCII.
|
||||||
|
|
||||||
|
BIOS firmware console and VGA text are limited to ASCII and some
|
||||||
|
pseudographics.
|
||||||
|
|
||||||
|
None of above mentioned is appropriate for displaying international
|
||||||
|
and any unsupported character is replaced with question mark except
|
||||||
|
pseudographics which we attempt to approximate with ASCII.
|
||||||
|
|
||||||
|
EFI console on the other hand nominally supports UTF-16 but actual
|
||||||
|
language coverage depends on firmware and may be very limited.
|
||||||
|
|
||||||
|
The encoding used on serial can be chosen with 'terminfo' as either
|
||||||
|
ASCII, UTF-8 or "visual UTF-8". Last one is against the specification
|
||||||
|
but results in correct rendering of right-to-left on some readers which
|
||||||
|
don't have own bidi implementation.
|
||||||
|
|
||||||
|
On emu GRUB checks if charset is UTF-8 and uses it if so and uses
|
||||||
|
ASCII otherwise.
|
||||||
|
|
||||||
|
When using gfxterm or gfxmenu GRUB itself is responsible for
|
||||||
|
rendering the text. In this case GRUB is limited by loaded fonts. If
|
||||||
|
fonts contain all required characters then bidirectional text, cursive
|
||||||
|
variants and combining marks other than enclosing, half (e.g. left half
|
||||||
|
tilde or combining overline) and double ones. Ligatures aren't
|
||||||
|
supported though. This should cover European, Middle Eastern (if you
|
||||||
|
don't mind lack of lam-alif ligature in Arabic) and East Asian scripts.
|
||||||
|
Notable unsupported scripts are Brahmic family and derived as well as
|
||||||
|
Mongolian, Tifinagh, Korean Jamo (precomposed characters have no
|
||||||
|
problem) and tonal writing (2e5-2e9). GRUB also ignores deprecated (as
|
||||||
|
specified in Unicode) characters (e.g. tags). GRUB also doesn't handle
|
||||||
|
so called "annotation characters" If you can complete either of two
|
||||||
|
lists or, better, propose a patch to improve rendering, please contact
|
||||||
|
developer team.
|
||||||
|
|
||||||
|
17.4 Input terminal
|
||||||
|
===================
|
||||||
|
|
||||||
|
Firmware console on BIOS, IEEE1275 and ARC doesn't allow you to enter
|
||||||
|
non-ASCII characters. EFI specification allows for such but author is
|
||||||
|
unaware of any actual implementations. Serial input is currently
|
||||||
|
limited for latin1 (unlikely to change). Own keyboard implementations
|
||||||
|
(at_keyboard and usb_keyboard) supports any key but work on
|
||||||
|
one-char-per-keystroke. So no dead keys or advanced input method. Also
|
||||||
|
there is no keymap change hotkey. In practice it makes difficult to
|
||||||
|
enter any text using non-Latin alphabet. Moreover all current input
|
||||||
|
consumers are limited to ASCII.
|
||||||
|
|
||||||
|
17.5 Gettext
|
||||||
|
============
|
||||||
|
|
||||||
|
GRUB supports being translated. For this you need to have language *.mo
|
||||||
|
files in $prefix/locale, load gettext module and set "lang" variable.
|
||||||
|
|
||||||
|
17.6 Regexp
|
||||||
|
===========
|
||||||
|
|
||||||
|
Regexps work on unicode characters, however no attempt at checking
|
||||||
|
cannonical equivalence has been made. Moreover the classes like
|
||||||
|
[:alpha:] match only ASCII subset.
|
||||||
|
|
||||||
|
17.7 Other
|
||||||
|
==========
|
||||||
|
|
||||||
|
Currently GRUB always uses YEAR-MONTH-DAY HOUR:MINUTE:SECOND [WEEKDAY]
|
||||||
|
24-hour datetime format but weekdays are translated. GRUB always uses
|
||||||
|
the decimal number format with [0-9] as digits and . as descimal
|
||||||
|
separator and no group separator. IEEE1275 aliases are matched
|
||||||
|
case-insensitively except non-ASCII which is matched as binary. Similar
|
||||||
|
behaviour is for matching OSBundleRequired. Since IEEE1275 aliases and
|
||||||
|
OSBundleRequired don't contain any non-ASCII it should never be a
|
||||||
|
problem in practice. Case-sensitive identifiers are matched as raw
|
||||||
|
strings, no canonical equivalence check is performed. Case-insenstive
|
||||||
|
identifiers are matched as RAW but additionally [a-z] is equivalent to
|
||||||
|
[A-Z]. GRUB-defined identifiers use only ASCII and so should
|
||||||
|
user-defined ones. Identifiers containing non-ASCII may work but aren't
|
||||||
|
supported. Only the ASCII space characters (space U+0020, tab U+000b,
|
||||||
|
CR U+000d and LF U+000a) are recognised. Other unicode space characters
|
||||||
|
aren't a valid field separator. 'test' (*note test::) tests <, >, <=,
|
||||||
|
>=, -pgt and -plt compare the strings in the lexicographical order of
|
||||||
|
unicode codepoints, replicating the behaviour of test from coreutils.
|
||||||
|
environment variables and commands are listed in the same order.
|
||||||
|
|
186
boot/grub/persistent/docs/18_security
Normal file
186
boot/grub/persistent/docs/18_security
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
18 Security
|
||||||
|
***********
|
||||||
|
|
||||||
|
18.1 Authentication and authorisation in GRUB
|
||||||
|
=============================================
|
||||||
|
|
||||||
|
By default, the boot loader interface is accessible to anyone with
|
||||||
|
physical access to the console: anyone can select and edit any menu
|
||||||
|
entry, and anyone can get direct access to a GRUB shell prompt. For
|
||||||
|
most systems, this is reasonable since anyone with direct physical
|
||||||
|
access has a variety of other ways to gain full access, and requiring
|
||||||
|
authentication at the boot loader level would only serve to make it
|
||||||
|
difficult to recover broken systems.
|
||||||
|
|
||||||
|
However, in some environments, such as kiosks, it may be appropriate
|
||||||
|
to lock down the boot loader to require authentication before performing
|
||||||
|
certain operations.
|
||||||
|
|
||||||
|
The 'password' (*note password::) and 'password_pbkdf2' (*note
|
||||||
|
password_pbkdf2::) commands can be used to define users, each of which
|
||||||
|
has an associated password. 'password' sets the password in plain text,
|
||||||
|
requiring 'grub.cfg' to be secure; 'password_pbkdf2' sets the password
|
||||||
|
hashed using the Password-Based Key Derivation Function (RFC 2898),
|
||||||
|
requiring the use of 'grub-mkpasswd-pbkdf2' (*note Invoking
|
||||||
|
grub-mkpasswd-pbkdf2::) to generate password hashes.
|
||||||
|
|
||||||
|
In order to enable authentication support, the 'superusers'
|
||||||
|
environment variable must be set to a list of usernames, separated by
|
||||||
|
any of spaces, commas, semicolons, pipes, or ampersands. Superusers are
|
||||||
|
permitted to use the GRUB command line, edit menu entries, and execute
|
||||||
|
any menu entry. If 'superusers' is set, then use of the command line
|
||||||
|
and editing of menu entries are automatically restricted to superusers.
|
||||||
|
Setting 'superusers' to empty string effectively disables both access to
|
||||||
|
CLI and editing of menu entries.
|
||||||
|
|
||||||
|
Other users may be allowed to execute specific menu entries by giving
|
||||||
|
a list of usernames (as above) using the '--users' option to the
|
||||||
|
'menuentry' command (*note menuentry::). If the '--unrestricted' option
|
||||||
|
is used for a menu entry, then that entry is unrestricted. If the
|
||||||
|
'--users' option is not used for a menu entry, then that only superusers
|
||||||
|
are able to use it.
|
||||||
|
|
||||||
|
Putting this together, a typical 'grub.cfg' fragment might look like
|
||||||
|
this:
|
||||||
|
|
||||||
|
set superusers="root"
|
||||||
|
password_pbkdf2 root grub.pbkdf2.sha512.10000.biglongstring
|
||||||
|
password user1 insecure
|
||||||
|
|
||||||
|
menuentry "May be run by any user" --unrestricted {
|
||||||
|
set root=(hd0,1)
|
||||||
|
linux /vmlinuz
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Superusers only" --users "" {
|
||||||
|
set root=(hd0,1)
|
||||||
|
linux /vmlinuz single
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "May be run by user1 or a superuser" --users user1 {
|
||||||
|
set root=(hd0,2)
|
||||||
|
chainloader +1
|
||||||
|
}
|
||||||
|
|
||||||
|
The 'grub-mkconfig' program does not yet have built-in support for
|
||||||
|
generating configuration files with authentication. You can use
|
||||||
|
'/etc/grub.d/40_custom' to add simple superuser authentication, by
|
||||||
|
adding 'set superusers=' and 'password' or 'password_pbkdf2' commands.
|
||||||
|
|
||||||
|
18.2 Using digital signatures in GRUB
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
GRUB's 'core.img' can optionally provide enforcement that all files
|
||||||
|
subsequently read from disk are covered by a valid digital signature.
|
||||||
|
This document does *not* cover how to ensure that your platform's
|
||||||
|
firmware (e.g., Coreboot) validates 'core.img'.
|
||||||
|
|
||||||
|
If environment variable 'check_signatures' (*note check_signatures::)
|
||||||
|
is set to 'enforce', then every attempt by the GRUB 'core.img' to load
|
||||||
|
another file 'foo' implicitly invokes 'verify_detached foo foo.sig'
|
||||||
|
(*note verify_detached::). 'foo.sig' must contain a valid digital
|
||||||
|
signature over the contents of 'foo', which can be verified with a
|
||||||
|
public key currently trusted by GRUB (*note list_trusted::, *note
|
||||||
|
trust::, and *note distrust::). If validation fails, then file 'foo'
|
||||||
|
cannot be opened. This failure may halt or otherwise impact the boot
|
||||||
|
process.
|
||||||
|
|
||||||
|
GRUB uses GPG-style detached signatures (meaning that a file
|
||||||
|
'foo.sig' will be produced when file 'foo' is signed), and currently
|
||||||
|
supports the DSA and RSA signing algorithms. A signing key can be
|
||||||
|
generated as follows:
|
||||||
|
|
||||||
|
gpg --gen-key
|
||||||
|
|
||||||
|
An individual file can be signed as follows:
|
||||||
|
|
||||||
|
gpg --detach-sign /path/to/file
|
||||||
|
|
||||||
|
For successful validation of all of GRUB's subcomponents and the
|
||||||
|
loaded OS kernel, they must all be signed. One way to accomplish this
|
||||||
|
is the following (after having already produced the desired 'grub.cfg'
|
||||||
|
file, e.g., by running 'grub-mkconfig' (*note Invoking grub-mkconfig::):
|
||||||
|
|
||||||
|
# Edit /dev/shm/passphrase.txt to contain your signing key's passphrase
|
||||||
|
for i in `find /boot -name "*.cfg" -or -name "*.lst" -or \
|
||||||
|
-name "*.mod" -or -name "vmlinuz*" -or -name "initrd*" -or \
|
||||||
|
-name "grubenv"`;
|
||||||
|
do
|
||||||
|
gpg --batch --detach-sign --passphrase-fd 0 $i < \
|
||||||
|
/dev/shm/passphrase.txt
|
||||||
|
done
|
||||||
|
shred /dev/shm/passphrase.txt
|
||||||
|
|
||||||
|
See also: *note check_signatures::, *note verify_detached::, *note
|
||||||
|
trust::, *note list_trusted::, *note distrust::, *note load_env::, *note
|
||||||
|
save_env::.
|
||||||
|
|
||||||
|
Note that internally signature enforcement is controlled by setting
|
||||||
|
the environment variable 'check_signatures' equal to 'enforce'. Passing
|
||||||
|
one or more '--pubkey' options to 'grub-mkimage' implicitly defines
|
||||||
|
'check_signatures' equal to 'enforce' in 'core.img' prior to processing
|
||||||
|
any configuration files.
|
||||||
|
|
||||||
|
Note that signature checking does *not* prevent an attacker with
|
||||||
|
(serial, physical, ...) console access from dropping manually to the
|
||||||
|
GRUB console and executing:
|
||||||
|
|
||||||
|
set check_signatures=no
|
||||||
|
|
||||||
|
To prevent this, password-protection (*note Authentication and
|
||||||
|
authorisation::) is essential. Note that even with GRUB password
|
||||||
|
protection, GRUB itself cannot prevent someone with physical access to
|
||||||
|
the machine from altering that machine's firmware (e.g., Coreboot or
|
||||||
|
BIOS) configuration to cause the machine to boot from a different
|
||||||
|
(attacker-controlled) device. GRUB is at best only one link in a secure
|
||||||
|
boot chain.
|
||||||
|
|
||||||
|
18.3 UEFI secure boot and shim support
|
||||||
|
======================================
|
||||||
|
|
||||||
|
The GRUB, except the 'chainloader' command, works with the UEFI secure
|
||||||
|
boot and the shim. This functionality is provided by the shim_lock
|
||||||
|
module. It is recommend to build in this and other required modules
|
||||||
|
into the 'core.img'. All modules not stored in the 'core.img' and the
|
||||||
|
ACPI tables for the 'acpi' command have to be signed, e.g. using PGP.
|
||||||
|
Additionally, the 'iorw', the 'memrw' and the 'wrmsr' commands are
|
||||||
|
prohibited if the UEFI secure boot is enabled. This is done due to
|
||||||
|
security reasons. All above mentioned requirements are enforced by the
|
||||||
|
shim_lock module. And itself it is a persistent module which means that
|
||||||
|
it cannot be unloaded if it was loaded into the memory.
|
||||||
|
|
||||||
|
18.4 Measuring boot components
|
||||||
|
==============================
|
||||||
|
|
||||||
|
If the tpm module is loaded and the platform has a Trusted Platform
|
||||||
|
Module installed, GRUB will log each command executed and each file
|
||||||
|
loaded into the TPM event log and extend the PCR values in the TPM
|
||||||
|
correspondingly. All events will be logged into the PCR described below
|
||||||
|
with a type of EV_IPL and an event description as described below.
|
||||||
|
|
||||||
|
Event type PCR Description
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
Command 8 All executed commands (including those
|
||||||
|
from configuration files) will be logged
|
||||||
|
and measured as entered with a prefix of
|
||||||
|
"grub_cmd: "
|
||||||
|
Kernel command line 8 Any command line passed to a kernel will
|
||||||
|
be logged and measured as entered with a
|
||||||
|
prefix of "kernel_cmdline: "
|
||||||
|
Module command line 8 Any command line passed to a kernel
|
||||||
|
module will be logged and measured as
|
||||||
|
entered with a prefix of "module_cmdline:
|
||||||
|
"
|
||||||
|
Files 9 Any file read by GRUB will be logged and
|
||||||
|
measured with a descriptive text
|
||||||
|
corresponding to the filename.
|
||||||
|
|
||||||
|
GRUB will not measure its own 'core.img' - it is expected that
|
||||||
|
firmware will carry this out. GRUB will also not perform any
|
||||||
|
measurements until the tpm module is loaded. As such it is recommended
|
||||||
|
that the tpm module be built into 'core.img' in order to avoid a
|
||||||
|
potential gap in measurement between 'core.img' being loaded and the tpm
|
||||||
|
module being loaded.
|
||||||
|
|
||||||
|
Measured boot is currently only supported on EFI platforms.
|
||||||
|
|
148
boot/grub/persistent/docs/19_platform_limitations
Normal file
148
boot/grub/persistent/docs/19_platform_limitations
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
19 Platform limitations
|
||||||
|
***********************
|
||||||
|
|
||||||
|
GRUB2 is designed to be portable and is actually ported across
|
||||||
|
platforms. We try to keep all platforms at the level. Unfortunately
|
||||||
|
some platforms are better supported than others. This is detailed in
|
||||||
|
current and 2 following sections.
|
||||||
|
|
||||||
|
ARC platform is unable to change datetime (firmware doesn't seem to
|
||||||
|
provide a function for it). EMU has similar limitation.
|
||||||
|
|
||||||
|
On EMU platform no serial port is available.
|
||||||
|
|
||||||
|
Console charset refers only to firmware-assisted console. gfxterm is
|
||||||
|
always Unicode (see Internationalisation section for its limitations).
|
||||||
|
Serial is configurable to UTF-8 or ASCII (see Internationalisation). In
|
||||||
|
case of qemu and coreboot ports the refered console is vga_text.
|
||||||
|
Loongson always uses gfxterm.
|
||||||
|
|
||||||
|
Most limited one is ASCII. CP437 provides additionally
|
||||||
|
pseudographics. GRUB2 doesn't use any language characters from CP437 as
|
||||||
|
often CP437 is replaced by national encoding compatible only in
|
||||||
|
pseudographics. Unicode is the most versatile charset which supports
|
||||||
|
many languages. However the actual console may be much more limited
|
||||||
|
depending on firmware
|
||||||
|
|
||||||
|
On BIOS network is supported only if the image is loaded through
|
||||||
|
network. On sparc64 GRUB is unable to determine which server it was
|
||||||
|
booted from.
|
||||||
|
|
||||||
|
Direct ATA/AHCI support allows to circumvent various firmware
|
||||||
|
limitations but isn't needed for normal operation except on baremetal
|
||||||
|
ports.
|
||||||
|
|
||||||
|
AT keyboard support allows keyboard layout remapping and support for
|
||||||
|
keys not available through firmware. It isn't needed for normal
|
||||||
|
operation except baremetal ports.
|
||||||
|
|
||||||
|
Speaker allows morse and spkmodem communication.
|
||||||
|
|
||||||
|
USB support provides benefits similar to ATA (for USB disks) or AT
|
||||||
|
(for USB keyboards). In addition it allows USBserial.
|
||||||
|
|
||||||
|
Chainloading refers to the ability to load another bootloader through
|
||||||
|
the same protocol
|
||||||
|
|
||||||
|
Hints allow faster disk discovery by already knowing in advance which
|
||||||
|
is the disk in question. On some platforms hints are correct unless you
|
||||||
|
move the disk between boots. On other platforms it's just an educated
|
||||||
|
guess. Note that hint failure results in just reduced performance, not
|
||||||
|
a failure
|
||||||
|
|
||||||
|
BadRAM is the ability to mark some of the RAM as "bad". Note: due to
|
||||||
|
protocol limitations mips-loongson (with Linux protocol) and
|
||||||
|
mips-qemu_mips can use only memory up to first hole.
|
||||||
|
|
||||||
|
Bootlocation is ability of GRUB to automatically detect where it
|
||||||
|
boots from. "disk" means the detection is limited to detecting the disk
|
||||||
|
with partition being discovered on install time. "partition" means that
|
||||||
|
disk and partiton can be automatically discovered. "file" means that
|
||||||
|
boot image file name as well as disk and partition can be discovered.
|
||||||
|
For consistency default install ignores partition and relies solely on
|
||||||
|
disk detection. If no bootlocation discovery is available or boot and
|
||||||
|
grub-root disks are different, UUID is used instead. On ARC if no
|
||||||
|
device to install to is specified, UUID is used instead as well.
|
||||||
|
|
||||||
|
BIOS Coreboot Multiboot Qemu
|
||||||
|
video yes yes yes yes
|
||||||
|
console CP437 CP437 CP437 CP437
|
||||||
|
charset
|
||||||
|
network yes (*) no no no
|
||||||
|
ATA/AHCI yes yes yes yes
|
||||||
|
AT keyboard yes yes yes yes
|
||||||
|
Speaker yes yes yes yes
|
||||||
|
USB yes yes yes yes
|
||||||
|
chainloader local yes yes no
|
||||||
|
cpuid partial partial partial partial
|
||||||
|
rdmsr partial partial partial partial
|
||||||
|
wrmsr partial partial partial partial
|
||||||
|
hints guess guess guess guess
|
||||||
|
PCI yes yes yes yes
|
||||||
|
badram yes yes yes yes
|
||||||
|
compression always pointless no no
|
||||||
|
exit yes no no no
|
||||||
|
bootlocation disk no no no
|
||||||
|
|
||||||
|
ia32 EFI amd64 EFI ia32 Itanium
|
||||||
|
IEEE1275
|
||||||
|
video yes yes no no
|
||||||
|
console Unicode Unicode ASCII Unicode
|
||||||
|
charset
|
||||||
|
network yes yes yes yes
|
||||||
|
ATA/AHCI yes yes yes no
|
||||||
|
AT keyboard yes yes yes no
|
||||||
|
Speaker yes yes yes no
|
||||||
|
USB yes yes yes no
|
||||||
|
chainloader local local no local
|
||||||
|
cpuid partial partial partial no
|
||||||
|
rdmsr partial partial partial no
|
||||||
|
wrmsr partial partial partial no
|
||||||
|
hints guess guess good guess
|
||||||
|
PCI yes yes yes no
|
||||||
|
badram yes yes no yes
|
||||||
|
compression no no no no
|
||||||
|
exit yes yes yes yes
|
||||||
|
bootlocation file file file, file
|
||||||
|
ignored
|
||||||
|
|
||||||
|
Loongson sparc64 Powerpc ARC
|
||||||
|
video yes no yes no
|
||||||
|
console N/A ASCII ASCII ASCII
|
||||||
|
charset
|
||||||
|
network no yes (*) yes no
|
||||||
|
ATA/AHCI yes no no no
|
||||||
|
AT keyboard yes no no no
|
||||||
|
Speaker no no no no
|
||||||
|
USB yes no no no
|
||||||
|
chainloader yes no no no
|
||||||
|
cpuid no no no no
|
||||||
|
rdmsr no no no no
|
||||||
|
wrmsr no no no no
|
||||||
|
hints good good good no
|
||||||
|
PCI yes no no no
|
||||||
|
badram yes (*) no no no
|
||||||
|
compression configurable no no configurable
|
||||||
|
exit no yes yes yes
|
||||||
|
bootlocation no partition file file (*)
|
||||||
|
|
||||||
|
MIPS qemu emu xen
|
||||||
|
video no yes no
|
||||||
|
console CP437 Unicode (*) ASCII
|
||||||
|
charset
|
||||||
|
network no yes no
|
||||||
|
ATA/AHCI yes no no
|
||||||
|
AT keyboard yes no no
|
||||||
|
Speaker no no no
|
||||||
|
USB N/A yes no
|
||||||
|
chainloader yes no yes
|
||||||
|
cpuid no no yes
|
||||||
|
rdmsr no no yes
|
||||||
|
wrmsr no no yes
|
||||||
|
hints guess no no
|
||||||
|
PCI no no no
|
||||||
|
badram yes (*) no no
|
||||||
|
compression configurable no no
|
||||||
|
exit no yes no
|
||||||
|
bootlocation no file no
|
||||||
|
|
33
boot/grub/persistent/docs/20_outline
Normal file
33
boot/grub/persistent/docs/20_outline
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
20 Outline
|
||||||
|
**********
|
||||||
|
|
||||||
|
Some platforms have features which allows to implement some commands
|
||||||
|
useless or not implementable on others.
|
||||||
|
|
||||||
|
Quick summary:
|
||||||
|
|
||||||
|
Information retrieval:
|
||||||
|
|
||||||
|
* mipsel-loongson: lsspd
|
||||||
|
* mips-arc: lsdev
|
||||||
|
* efi: lsefisystab, lssal, lsefimmap, lsefi
|
||||||
|
* i386-pc: lsapm
|
||||||
|
* i386-coreboot: lscoreboot, coreboot_boottime, cbmemc
|
||||||
|
* acpi-enabled (i386-pc, i386-coreboot, i386-multiboot, *-efi):
|
||||||
|
lsacpi
|
||||||
|
|
||||||
|
Workarounds for platform-specific issues:
|
||||||
|
* i386-efi/x86_64-efi: loadbios, fakebios, fix_video
|
||||||
|
* acpi-enabled (i386-pc, i386-coreboot, i386-multiboot, *-efi): acpi
|
||||||
|
(override ACPI tables)
|
||||||
|
* i386-pc: drivemap
|
||||||
|
* i386-pc: sendkey
|
||||||
|
|
||||||
|
Advanced operations for power users:
|
||||||
|
* x86: iorw (direct access to I/O ports)
|
||||||
|
|
||||||
|
Miscelaneous:
|
||||||
|
* cmos (x86-*, ieee1275, mips-qemu_mips, mips-loongson): cmostest
|
||||||
|
(used on some laptops to check for special power-on key), cmosclean
|
||||||
|
* i386-pc: play
|
||||||
|
|
152
boot/grub/persistent/docs/21_supported_boot_targets
Normal file
152
boot/grub/persistent/docs/21_supported_boot_targets
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
21 Supported boot targets
|
||||||
|
*************************
|
||||||
|
|
||||||
|
X86 support is summarised in the following table. "Yes" means that the
|
||||||
|
kernel works on the given platform, "crashes" means an early kernel
|
||||||
|
crash which we hope will be fixed by concerned kernel developers. "no"
|
||||||
|
means GRUB doesn't load the given kernel on a given platform.
|
||||||
|
"headless" means that the kernel works but lacks console drivers (you
|
||||||
|
can still use serial or network console). In case of "no" and "crashes"
|
||||||
|
the reason is given in footnote.
|
||||||
|
BIOS Coreboot
|
||||||
|
BIOS chainloading yes no (1)
|
||||||
|
NTLDR yes no (1)
|
||||||
|
Plan9 yes no (1)
|
||||||
|
Freedos yes no (1)
|
||||||
|
FreeBSD bootloader yes crashes (1)
|
||||||
|
32-bit kFreeBSD yes crashes (5)
|
||||||
|
64-bit kFreeBSD yes crashes (5)
|
||||||
|
32-bit kNetBSD yes crashes (1)
|
||||||
|
64-bit kNetBSD yes crashes
|
||||||
|
32-bit kOpenBSD yes yes
|
||||||
|
64-bit kOpenBSD yes yes
|
||||||
|
Multiboot yes yes
|
||||||
|
Multiboot2 yes yes
|
||||||
|
32-bit Linux (legacy protocol) yes no (1)
|
||||||
|
64-bit Linux (legacy protocol) yes no (1)
|
||||||
|
32-bit Linux (modern protocol) yes yes
|
||||||
|
64-bit Linux (modern protocol) yes yes
|
||||||
|
32-bit XNU yes ?
|
||||||
|
64-bit XNU yes ?
|
||||||
|
32-bit EFI chainloader no (2) no (2)
|
||||||
|
64-bit EFI chainloader no (2) no (2)
|
||||||
|
Appleloader no (2) no (2)
|
||||||
|
|
||||||
|
Multiboot Qemu
|
||||||
|
BIOS chainloading no (1) no (1)
|
||||||
|
NTLDR no (1) no (1)
|
||||||
|
Plan9 no (1) no (1)
|
||||||
|
FreeDOS no (1) no (1)
|
||||||
|
FreeBSD bootloader crashes (1) crashes (1)
|
||||||
|
32-bit kFreeBSD crashes (5) crashes (5)
|
||||||
|
64-bit kFreeBSD crashes (5) crashes (5)
|
||||||
|
32-bit kNetBSD crashes (1) crashes (1)
|
||||||
|
64-bit kNetBSD yes yes
|
||||||
|
32-bit kOpenBSD yes yes
|
||||||
|
64-bit kOpenBSD yes yes
|
||||||
|
Multiboot yes yes
|
||||||
|
Multiboot2 yes yes
|
||||||
|
32-bit Linux (legacy protocol) no (1) no (1)
|
||||||
|
64-bit Linux (legacy protocol) no (1) no (1)
|
||||||
|
32-bit Linux (modern protocol) yes yes
|
||||||
|
64-bit Linux (modern protocol) yes yes
|
||||||
|
32-bit XNU ? ?
|
||||||
|
64-bit XNU ? ?
|
||||||
|
32-bit EFI chainloader no (2) no (2)
|
||||||
|
64-bit EFI chainloader no (2) no (2)
|
||||||
|
Appleloader no (2) no (2)
|
||||||
|
|
||||||
|
ia32 EFI amd64 EFI
|
||||||
|
BIOS chainloading no (1) no (1)
|
||||||
|
NTLDR no (1) no (1)
|
||||||
|
Plan9 no (1) no (1)
|
||||||
|
FreeDOS no (1) no (1)
|
||||||
|
FreeBSD bootloader crashes (1) crashes (1)
|
||||||
|
32-bit kFreeBSD headless headless
|
||||||
|
64-bit kFreeBSD headless headless
|
||||||
|
32-bit kNetBSD crashes (1) crashes (1)
|
||||||
|
64-bit kNetBSD yes yes
|
||||||
|
32-bit kOpenBSD headless headless
|
||||||
|
64-bit kOpenBSD headless headless
|
||||||
|
Multiboot yes yes
|
||||||
|
Multiboot2 yes yes
|
||||||
|
32-bit Linux (legacy protocol) no (1) no (1)
|
||||||
|
64-bit Linux (legacy protocol) no (1) no (1)
|
||||||
|
32-bit Linux (modern protocol) yes yes
|
||||||
|
64-bit Linux (modern protocol) yes yes
|
||||||
|
32-bit XNU yes yes
|
||||||
|
64-bit XNU yes (4) yes
|
||||||
|
32-bit EFI chainloader yes no (3)
|
||||||
|
64-bit EFI chainloader no (3) yes
|
||||||
|
Appleloader yes yes
|
||||||
|
|
||||||
|
ia32 IEEE1275
|
||||||
|
BIOS chainloading no (1)
|
||||||
|
NTLDR no (1)
|
||||||
|
Plan9 no (1)
|
||||||
|
FreeDOS no (1)
|
||||||
|
FreeBSD bootloader crashes (1)
|
||||||
|
32-bit kFreeBSD crashes (5)
|
||||||
|
64-bit kFreeBSD crashes (5)
|
||||||
|
32-bit kNetBSD crashes (1)
|
||||||
|
64-bit kNetBSD ?
|
||||||
|
32-bit kOpenBSD ?
|
||||||
|
64-bit kOpenBSD ?
|
||||||
|
Multiboot ?
|
||||||
|
Multiboot2 ?
|
||||||
|
32-bit Linux (legacy protocol) no (1)
|
||||||
|
64-bit Linux (legacy protocol) no (1)
|
||||||
|
32-bit Linux (modern protocol) ?
|
||||||
|
64-bit Linux (modern protocol) ?
|
||||||
|
32-bit XNU ?
|
||||||
|
64-bit XNU ?
|
||||||
|
32-bit EFI chainloader no (2)
|
||||||
|
64-bit EFI chainloader no (2)
|
||||||
|
Appleloader no (2)
|
||||||
|
|
||||||
|
1. Requires BIOS
|
||||||
|
2. EFI only
|
||||||
|
3. 32-bit and 64-bit EFI have different structures and work in
|
||||||
|
different CPU modes so it's not possible to chainload 32-bit
|
||||||
|
bootloader on 64-bit platform and vice-versa
|
||||||
|
4. Some modules may need to be disabled
|
||||||
|
5. Requires ACPI
|
||||||
|
|
||||||
|
PowerPC, IA64 and Sparc64 ports support only Linux. MIPS port
|
||||||
|
supports Linux and multiboot2.
|
||||||
|
|
||||||
|
21.1 Boot tests
|
||||||
|
===============
|
||||||
|
|
||||||
|
As you have seen in previous chapter the support matrix is pretty big
|
||||||
|
and some of the configurations are only rarely used. To ensure the
|
||||||
|
quality bootchecks are available for all x86 targets except EFI
|
||||||
|
chainloader, Appleloader and XNU. All x86 platforms have bootcheck
|
||||||
|
facility except ieee1275. Multiboot, multiboot2, BIOS chainloader,
|
||||||
|
ntldr and freebsd-bootloader boot targets are tested only with a fake
|
||||||
|
kernel images. Only Linux is tested among the payloads using Linux
|
||||||
|
protocols.
|
||||||
|
|
||||||
|
Following variables must be defined:
|
||||||
|
|
||||||
|
GRUB_PAYLOADS_DIR directory containing the required kernels
|
||||||
|
GRUB_CBFSTOOL cbfstool from Coreboot package (for coreboot
|
||||||
|
platform only)
|
||||||
|
GRUB_COREBOOT_ROM empty Coreboot ROM
|
||||||
|
GRUB_QEMU_OPTS additional options to be supplied to QEMU
|
||||||
|
|
||||||
|
Required files are:
|
||||||
|
|
||||||
|
kfreebsd_env.i386 32-bit kFreeBSD device hints
|
||||||
|
kfreebsd.i386 32-bit FreeBSD kernel image
|
||||||
|
kfreebsd.x86_64, same from 64-bit kFreeBSD
|
||||||
|
kfreebsd_env.x86_64
|
||||||
|
knetbsd.i386 32-bit NetBSD kernel image
|
||||||
|
knetbsd.miniroot.i386 32-bit kNetBSD miniroot.kmod.
|
||||||
|
knetbsd.x86_64, same from 64-bit kNetBSD
|
||||||
|
knetbsd.miniroot.x86_64
|
||||||
|
kopenbsd.i386 32-bit OpenBSD kernel bsd.rd image
|
||||||
|
kopenbsd.x86_64 same from 64-bit kOpenBSD
|
||||||
|
linux.i386 32-bit Linux
|
||||||
|
linux.x86_64 64-bit Linux
|
||||||
|
|
71
boot/grub/persistent/docs/22_error_messages
Normal file
71
boot/grub/persistent/docs/22_error_messages
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
22 Error messages produced by GRUB
|
||||||
|
**********************************
|
||||||
|
|
||||||
|
22.1 GRUB only offers a rescue shell
|
||||||
|
====================================
|
||||||
|
|
||||||
|
GRUB's normal start-up procedure involves setting the 'prefix'
|
||||||
|
environment variable to a value set in the core image by 'grub-install',
|
||||||
|
setting the 'root' variable to match, loading the 'normal' module from
|
||||||
|
the prefix, and running the 'normal' command (*note normal::). This
|
||||||
|
command is responsible for reading '/boot/grub/grub.cfg', running the
|
||||||
|
menu, and doing all the useful things GRUB is supposed to do.
|
||||||
|
|
||||||
|
If, instead, you only get a rescue shell, this usually means that
|
||||||
|
GRUB failed to load the 'normal' module for some reason. It may be
|
||||||
|
possible to work around this temporarily: for instance, if the reason
|
||||||
|
for the failure is that 'prefix' is wrong (perhaps it refers to the
|
||||||
|
wrong device, or perhaps the path to '/boot/grub' was not correctly made
|
||||||
|
relative to the device), then you can correct this and enter normal mode
|
||||||
|
manually:
|
||||||
|
|
||||||
|
# Inspect the current prefix (and other preset variables):
|
||||||
|
set
|
||||||
|
# Find out which devices are available:
|
||||||
|
ls
|
||||||
|
# Set to the correct value, which might be something like this:
|
||||||
|
set prefix=(hd0,1)/grub
|
||||||
|
set root=(hd0,1)
|
||||||
|
insmod normal
|
||||||
|
normal
|
||||||
|
|
||||||
|
However, any problem that leaves you in the rescue shell probably
|
||||||
|
means that GRUB was not correctly installed. It may be more useful to
|
||||||
|
try to reinstall it properly using 'grub-install DEVICE' (*note Invoking
|
||||||
|
grub-install::). When doing this, there are a few things to remember:
|
||||||
|
|
||||||
|
* Drive ordering in your operating system may not be the same as the
|
||||||
|
boot drive ordering used by your firmware. Do not assume that your
|
||||||
|
first hard drive (e.g. '/dev/sda') is the one that your firmware
|
||||||
|
will boot from. 'device.map' (*note Device map::) can be used to
|
||||||
|
override this, but it is usually better to use UUIDs or file system
|
||||||
|
labels and avoid depending on drive ordering entirely.
|
||||||
|
|
||||||
|
* At least on BIOS systems, if you tell 'grub-install' to install
|
||||||
|
GRUB to a partition but GRUB has already been installed in the
|
||||||
|
master boot record, then the GRUB installation in the partition
|
||||||
|
will be ignored.
|
||||||
|
|
||||||
|
* If possible, it is generally best to avoid installing GRUB to a
|
||||||
|
partition (unless it is a special partition for the use of GRUB
|
||||||
|
alone, such as the BIOS Boot Partition used on GPT). Doing this
|
||||||
|
means that GRUB may stop being able to read its core image due to a
|
||||||
|
file system moving blocks around, such as while defragmenting,
|
||||||
|
running checks, or even during normal operation. Installing to the
|
||||||
|
whole disk device is normally more robust.
|
||||||
|
|
||||||
|
* Check that GRUB actually knows how to read from the device and file
|
||||||
|
system containing '/boot/grub'. It will not be able to read from
|
||||||
|
encrypted devices with unsupported encryption scheme, nor from file
|
||||||
|
systems for which support has not yet been added to GRUB.
|
||||||
|
|
||||||
|
22.2 Firmware stalls instead of booting GRUB
|
||||||
|
============================================
|
||||||
|
|
||||||
|
The EFI implementation of some older MacBook laptops stalls when it gets
|
||||||
|
presented a grub-mkrescue ISO image for x86_64-efi target on an USB
|
||||||
|
stick. Affected are models of year 2010 or earlier. Workaround is to
|
||||||
|
zeroize the bytes 446 to 461 of the EFI partition, where mformat has put
|
||||||
|
a partition table entry which claims partition start at block 0. This
|
||||||
|
change will not hamper bootability on other machines.
|
||||||
|
|
120
boot/grub/persistent/docs/show-docs.cfg
Normal file
120
boot/grub/persistent/docs/show-docs.cfg
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
menuentry "License" --class docs {
|
||||||
|
cat "${docs}/000_license"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Index" --class docs {
|
||||||
|
cat "${docs}/00_index"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Introduction" --class docs {
|
||||||
|
cat "${docs}/01_introduction"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Naming Convention" --class docs {
|
||||||
|
cat "${docs}/02_naming_convention"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "OS Specific Notes" --class docs {
|
||||||
|
cat "${docs}/03_os_specific_notes"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Installation" --class docs {
|
||||||
|
cat "${docs}/04_installation"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Booting" --class docs {
|
||||||
|
cat "${docs}/05_booting"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Your own Configuration File" --class docs {
|
||||||
|
cat "${docs}/06_your_own_configuration_file"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Themes" --class docs {
|
||||||
|
cat "${docs}/07_themes"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Network Booting" --class docs {
|
||||||
|
cat "${docs}/08_network_booting"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Serial Line" --class docs {
|
||||||
|
cat "${docs}/09_serial_line"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Vendor Power-on Keys" --class docs {
|
||||||
|
cat "${docs}/10_vendor_poweron_keys"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Grub Image Files" --class docs {
|
||||||
|
cat "${docs}/11_grub_image_files"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Core Image Size Limitation" --class docs {
|
||||||
|
cat "${docs}/12_core_image_size_limitation"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Filesystem Syntax" --class docs {
|
||||||
|
cat "${docs}/13_filesystem_syntax"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "User Interface" --class docs {
|
||||||
|
cat "${docs}/14_user_interface"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Environment Variables.txt" --class docs {
|
||||||
|
cat "${docs}/15_environment_variables.txt"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Available Commands.txt" --class docs {
|
||||||
|
cat "${docs}/16_available_commands.txt"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Internationalisation" --class docs {
|
||||||
|
cat "${docs}/17_internationalisation"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Security" --class docs {
|
||||||
|
cat "${docs}/18_security"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Platform Limitations" --class docs {
|
||||||
|
cat "${docs}/19_platform_limitations"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Outline" --class docs {
|
||||||
|
cat "${docs}/20_outline"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Supported Boot Targets" --class docs {
|
||||||
|
cat "${docs}/21_supported_boot_targets"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
||||||
|
menuentry "Error Messages" --class docs {
|
||||||
|
cat "${docs}/22_error_messages"
|
||||||
|
configfile "${docs}/show-docs.cfg"
|
||||||
|
}
|
||||||
|
|
BIN
boot/grub/persistent/memtest86/memtest86+-5.31b.bin
Normal file
BIN
boot/grub/persistent/memtest86/memtest86+-5.31b.bin
Normal file
Binary file not shown.
BIN
boot/grub/persistent/netboot/netboot.xyz.efi
Normal file
BIN
boot/grub/persistent/netboot/netboot.xyz.efi
Normal file
Binary file not shown.
BIN
boot/grub/persistent/netboot/netboot.xyz.lkrn
Normal file
BIN
boot/grub/persistent/netboot/netboot.xyz.lkrn
Normal file
Binary file not shown.
|
@ -1,4 +1,8 @@
|
||||||
|
|
||||||
set theme="${prefix}/themes/stylish_dark/theme.txt"
|
set theme_name="Cyberpunk"
|
||||||
set icondir="${prefix}/themes/icons"
|
insmod jpeg
|
||||||
export theme icondir
|
insmod png
|
||||||
|
|
||||||
|
set theme="${prefix}/themes/${theme_name}/theme.txt"
|
||||||
|
set icondir="${prefix}/themes/${theme_name}/icons"
|
||||||
|
export theme icondir theme_name
|
||||||
|
|
17
boot/isos.cfg
Normal file
17
boot/isos.cfg
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# Load ISO configuration files
|
||||||
|
|
||||||
|
set isopath="/boot/isos"
|
||||||
|
export isopath
|
||||||
|
|
||||||
|
set isoconfdir="${isoconfig}.d"
|
||||||
|
export isoconfdir
|
||||||
|
|
||||||
|
if [ -d "${isoconfdir}" ]; then
|
||||||
|
echo "${isoconfdir} is a directory"
|
||||||
|
for conf in isoconfdir/*.cfg; do
|
||||||
|
echo "Sourcing $conf"
|
||||||
|
source "$conf"
|
||||||
|
done
|
||||||
|
else
|
||||||
|
echo "Cannot read ${isoconfdir}"
|
||||||
|
fi
|
2
boot/isos/.gitignore
vendored
Normal file
2
boot/isos/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# This is merely as a keeper for this directory
|
||||||
|
*
|
Loading…
Reference in a new issue