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 | ||||
| ================================================ | ||||
| [Git Source](https://git.deboone.nl/ericteunis/grubby.git) | ||||
| 
 | ||||
| 
 | ||||
| If you've found this USB stick, please get in | ||||
|  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 | ||||
| ================================================ | ||||
|  |  | |||
|  | @ -5,51 +5,155 @@ set timeout=30 | |||
| insmod all_video | ||||
| set gfxpayload=keep | ||||
| 
 | ||||
| # ISOs configuration | ||||
| set isoconfig="/boot/isos.cfg" | ||||
| export isoconfig | ||||
| 
 | ||||
| # Persistent folder | ||||
| set persistent="${prefix}/persistent" | ||||
| export persistent | ||||
| 
 | ||||
| # Enable GUI | ||||
| terminal_output gfxterm | ||||
| 
 | ||||
| # Get the ROOTUUID of this USB stick | ||||
| probe -u $root --set=rootuuid | ||||
| set imgdevpath="/dev/disk/by-uuid/$rootuuid" | ||||
| export imgdevpath rootuuid | ||||
| set isopath="/boot/isos" | ||||
| export isopath | ||||
| 
 | ||||
| # Enable the Pager | ||||
| set pager=1 | ||||
| 
 | ||||
| if [ -f "${prefix}/theming.cfg" ]; | ||||
| 	source "${prefix}/theming.cfg" | ||||
| # Get theming | ||||
| if [ -f "${prefix}/theming.cfg" ]; then | ||||
| 	#source "${prefix}/theming.cfg" | ||||
| 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 | ||||
| 
 | ||||
| 	chainloader +1 | ||||
| } | ||||
| menuentry "Show Drives" { | ||||
| 	ls  | ||||
| } | ||||
| 
 | ||||
| menuentry "Enable LVMs" { | ||||
| 	insmod lvm | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| if [ -f "${isoconfig}" ]; then | ||||
| 	menuentry ' ' { true } | ||||
| 
 | ||||
| if [ -f "${prefix}/isos.cfg" ]; then | ||||
| 	menuentry ' ' { // Empty Line | ||||
| 		true | ||||
| 	menuentry "[i] Inspect Isos >" --hotkey=i --default { | ||||
| 		echo "Loading various ISO configurations" | ||||
| 		configfile "${isoconfig}" | ||||
| 	} | ||||
| 
 | ||||
| 	menuentry "Inspect Isos" { | ||||
| 		echo "Loading Iso Configs" | ||||
| 	    source "${prefix}/isos.cfg" | ||||
| 	} | ||||
| 	menuentry ' ' { true } | ||||
| fi | ||||
| 
 | ||||
| submenu "GRUB2 options -> "{ | ||||
| 	menuentry "Show Drives" { | ||||
| 		ls  -l | ||||
| 		sleep --interruptible 9999 | ||||
| 	} | ||||
| 
 | ||||
| 	menuentry "Enable LVM support" { | ||||
| 		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 | ||||
| 
 | ||||
| 
 | ||||
| menuentry ' ' { // Empty Line | ||||
| 	true | ||||
| } | ||||
| 
 | ||||
| menuentry "[i] Invaders" --hotkey=i --class=game --class=invaders { | ||||
| 	echo "Starting Invaders" | ||||
| 	linux16 "${prefix}/persist/invaders/invaders" | ||||
| 	boot | ||||
| } | ||||
| 
 | ||||
| menuentry "[b] netboot.xyz" --hotkey=b --class=netboot { | ||||
| 	echo "Using netboot.xyz" | ||||
| 	if [ ${grub_platform} == "efi" ]; then | ||||
| 		chainloader "${persistent}/netboot.xyz/netboot.xyz.efi" | ||||
| 	else | ||||
| 		linux16 "${persistent}/netboot.xyz/netboot.xyz.lkrn" | ||||
| 	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 | ||||
| 	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 icondir="${prefix}/themes/icons" | ||||
| export theme icondir | ||||
| set theme_name="Cyberpunk" | ||||
| insmod jpeg | ||||
| 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…
	
	Add table
		Add a link
		
	
		Reference in a new issue