1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
\r
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
\r
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
\r
5 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
\r
6 <meta name="generator" content="AsciiDoc 8.6.6" />
\r
7 <title>grml2iso(8)</title>
\r
8 <style type="text/css">
\r
9 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */
\r
13 font-family: Georgia,serif;
\r
17 h1, h2, h3, h4, h5, h6,
\r
18 div.title, caption.title,
\r
19 thead, p.table.header,
\r
21 #author, #revnumber, #revdate, #revremark,
\r
23 font-family: Arial,Helvetica,sans-serif;
\r
27 margin: 1em 5% 1em 5%;
\r
32 text-decoration: underline;
\r
48 h1, h2, h3, h4, h5, h6 {
\r
51 margin-bottom: 0.5em;
\r
56 border-bottom: 2px solid silver;
\r
76 border: 1px solid silver;
\r
81 margin-bottom: 0.5em;
\r
87 ul > li { color: #aaa; }
\r
88 ul > li > * { color: black; }
\r
102 #revnumber, #revdate, #revremark {
\r
107 border-top: 2px solid silver;
\r
108 padding-top: 0.5em;
\r
113 padding-bottom: 0.5em;
\r
117 padding-bottom: 0.5em;
\r
122 margin-bottom: 1.5em;
\r
124 div.imageblock, div.exampleblock, div.verseblock,
\r
125 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
\r
126 div.admonitionblock {
\r
128 margin-bottom: 1.5em;
\r
130 div.admonitionblock {
\r
132 margin-bottom: 2.0em;
\r
137 div.content { /* Block element content. */
\r
141 /* Block element titles. */
\r
142 div.title, caption.title {
\r
147 margin-bottom: 0.5em;
\r
153 td div.title:first-child {
\r
156 div.content div.title:first-child {
\r
159 div.content + div.title {
\r
163 div.sidebarblock > div.content {
\r
164 background: #ffffee;
\r
165 border: 1px solid #dddddd;
\r
166 border-left: 4px solid #f0f0f0;
\r
170 div.listingblock > div.content {
\r
171 border: 1px solid #dddddd;
\r
172 border-left: 5px solid #f0f0f0;
\r
173 background: #f8f8f8;
\r
177 div.quoteblock, div.verseblock {
\r
178 padding-left: 1.0em;
\r
179 margin-left: 1.0em;
\r
181 border-left: 5px solid #f0f0f0;
\r
185 div.quoteblock > div.attribution {
\r
186 padding-top: 0.5em;
\r
190 div.verseblock > pre.content {
\r
191 font-family: inherit;
\r
192 font-size: inherit;
\r
194 div.verseblock > div.attribution {
\r
195 padding-top: 0.75em;
\r
198 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */
\r
199 div.verseblock + div.attribution {
\r
203 div.admonitionblock .icon {
\r
204 vertical-align: top;
\r
207 text-decoration: underline;
\r
209 padding-right: 0.5em;
\r
211 div.admonitionblock td.content {
\r
212 padding-left: 0.5em;
\r
213 border-left: 3px solid #dddddd;
\r
216 div.exampleblock > div.content {
\r
217 border-left: 3px solid #dddddd;
\r
218 padding-left: 0.5em;
\r
221 div.imageblock div.content { padding-left: 0; }
\r
222 span.image img { border-style: none; }
\r
223 a.image:visited { color: white; }
\r
227 margin-bottom: 0.8em;
\r
232 font-style: normal;
\r
235 dd > *:first-child {
\r
240 list-style-position: outside;
\r
243 list-style-type: decimal;
\r
246 list-style-type: lower-alpha;
\r
249 list-style-type: upper-alpha;
\r
252 list-style-type: lower-roman;
\r
255 list-style-type: upper-roman;
\r
258 div.compact ul, div.compact ol,
\r
259 div.compact p, div.compact p,
\r
260 div.compact div, div.compact div {
\r
262 margin-bottom: 0.1em;
\r
274 margin-bottom: 0.8em;
\r
277 padding-bottom: 15px;
\r
279 dt.hdlist1.strong, td.hdlist1.strong {
\r
283 vertical-align: top;
\r
284 font-style: normal;
\r
285 padding-right: 0.8em;
\r
289 vertical-align: top;
\r
291 div.hdlist.compact tr {
\r
297 background: yellow;
\r
300 .footnote, .footnoteref {
\r
304 span.footnote, span.footnoteref {
\r
305 vertical-align: super;
\r
309 margin: 20px 0 20px 0;
\r
310 padding: 7px 0 0 0;
\r
313 #footnotes div.footnote {
\r
319 border-top: 1px solid silver;
\r
328 padding-right: 0.5em;
\r
329 padding-bottom: 0.3em;
\r
330 vertical-align: top;
\r
332 div.colist td img {
\r
337 #footer-badges { display: none; }
\r
341 margin-bottom: 2.5em;
\r
349 margin-bottom: 0.1em;
\r
352 div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
\r
369 span.aqua { color: aqua; }
\r
370 span.black { color: black; }
\r
371 span.blue { color: blue; }
\r
372 span.fuchsia { color: fuchsia; }
\r
373 span.gray { color: gray; }
\r
374 span.green { color: green; }
\r
375 span.lime { color: lime; }
\r
376 span.maroon { color: maroon; }
\r
377 span.navy { color: navy; }
\r
378 span.olive { color: olive; }
\r
379 span.purple { color: purple; }
\r
380 span.red { color: red; }
\r
381 span.silver { color: silver; }
\r
382 span.teal { color: teal; }
\r
383 span.white { color: white; }
\r
384 span.yellow { color: yellow; }
\r
386 span.aqua-background { background: aqua; }
\r
387 span.black-background { background: black; }
\r
388 span.blue-background { background: blue; }
\r
389 span.fuchsia-background { background: fuchsia; }
\r
390 span.gray-background { background: gray; }
\r
391 span.green-background { background: green; }
\r
392 span.lime-background { background: lime; }
\r
393 span.maroon-background { background: maroon; }
\r
394 span.navy-background { background: navy; }
\r
395 span.olive-background { background: olive; }
\r
396 span.purple-background { background: purple; }
\r
397 span.red-background { background: red; }
\r
398 span.silver-background { background: silver; }
\r
399 span.teal-background { background: teal; }
\r
400 span.white-background { background: white; }
\r
401 span.yellow-background { background: yellow; }
\r
403 span.big { font-size: 2em; }
\r
404 span.small { font-size: 0.6em; }
\r
406 span.underline { text-decoration: underline; }
\r
407 span.overline { text-decoration: overline; }
\r
408 span.line-through { text-decoration: line-through; }
\r
417 font-family: monospace;
\r
418 font-size: inherit;
\r
424 margin-bottom: 1.5em;
\r
426 div.tableblock > table {
\r
427 border: 3px solid #527bbd;
\r
429 thead, p.table.header {
\r
436 /* Because the table frame attribute is overriden by CSS in most browsers. */
\r
437 div.tableblock > table[frame="void"] {
\r
438 border-style: none;
\r
440 div.tableblock > table[frame="hsides"] {
\r
441 border-left-style: none;
\r
442 border-right-style: none;
\r
444 div.tableblock > table[frame="vsides"] {
\r
445 border-top-style: none;
\r
446 border-bottom-style: none;
\r
456 font-family: monospace;
\r
457 font-size: inherit;
\r
463 margin-bottom: 1.5em;
\r
465 thead, p.tableblock.header {
\r
474 border-spacing: 0px;
\r
475 border-style: solid;
\r
476 border-color: #527bbd;
\r
477 border-collapse: collapse;
\r
479 th.tableblock, td.tableblock {
\r
482 border-style: solid;
\r
483 border-color: #527bbd;
\r
486 table.tableblock.frame-topbot {
\r
487 border-left-style: hidden;
\r
488 border-right-style: hidden;
\r
490 table.tableblock.frame-sides {
\r
491 border-top-style: hidden;
\r
492 border-bottom-style: hidden;
\r
494 table.tableblock.frame-none {
\r
495 border-style: hidden;
\r
498 th.tableblock.halign-left, td.tableblock.halign-left {
\r
501 th.tableblock.halign-center, td.tableblock.halign-center {
\r
502 text-align: center;
\r
504 th.tableblock.halign-right, td.tableblock.halign-right {
\r
508 th.tableblock.valign-top, td.tableblock.valign-top {
\r
509 vertical-align: top;
\r
511 th.tableblock.valign-middle, td.tableblock.valign-middle {
\r
512 vertical-align: middle;
\r
514 th.tableblock.valign-bottom, td.tableblock.valign-bottom {
\r
515 vertical-align: bottom;
\r
525 padding-top: 0.5em;
\r
526 padding-bottom: 0.5em;
\r
527 border-top: 2px solid silver;
\r
528 border-bottom: 2px solid silver;
\r
531 border-style: none;
\r
533 body.manpage div.sectionbody {
\r
538 body.manpage div#toc { display: none; }
\r
541 <script type="text/javascript">
\r
543 var asciidoc = { // Namespace.
\r
545 /////////////////////////////////////////////////////////////////////
\r
546 // Table Of Contents generator
\r
547 /////////////////////////////////////////////////////////////////////
\r
549 /* Author: Mihai Bazon, September 2002
\r
550 * http://students.infoiasi.ro/~mishoo
\r
552 * Table Of Content generator
\r
555 * Feel free to use this script under the terms of the GNU General Public
\r
556 * License, as long as you do not remove or alter this notice.
\r
559 /* modified by Troy D. Hanson, September 2006. License: GPL */
\r
560 /* modified by Stuart Rackham, 2006, 2009. License: GPL */
\r
562 // toclevels = 1..4.
\r
563 toc: function (toclevels) {
\r
565 function getText(el) {
\r
567 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
568 if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
\r
570 else if (i.firstChild != null)
\r
571 text += getText(i);
\r
576 function TocEntry(el, text, toclevel) {
\r
579 this.toclevel = toclevel;
\r
582 function tocEntries(el, toclevels) {
\r
583 var result = new Array;
\r
584 var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');
\r
585 // Function that scans the DOM tree for header elements (the DOM2
\r
586 // nodeIterator API would be a better technique but not supported by all
\r
588 var iterate = function (el) {
\r
589 for (var i = el.firstChild; i != null; i = i.nextSibling) {
\r
590 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
\r
591 var mo = re.exec(i.tagName);
\r
592 if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
\r
593 result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
\r
603 var toc = document.getElementById("toc");
\r
608 // Delete existing TOC entries in case we're reloading the TOC.
\r
609 var tocEntriesToRemove = [];
\r
611 for (i = 0; i < toc.childNodes.length; i++) {
\r
612 var entry = toc.childNodes[i];
\r
613 if (entry.nodeName == 'div'
\r
614 && entry.getAttribute("class")
\r
615 && entry.getAttribute("class").match(/^toclevel/))
\r
616 tocEntriesToRemove.push(entry);
\r
618 for (i = 0; i < tocEntriesToRemove.length; i++) {
\r
619 toc.removeChild(tocEntriesToRemove[i]);
\r
622 // Rebuild TOC entries.
\r
623 var entries = tocEntries(document.getElementById("content"), toclevels);
\r
624 for (var i = 0; i < entries.length; ++i) {
\r
625 var entry = entries[i];
\r
626 if (entry.element.id == "")
\r
627 entry.element.id = "_toc_" + i;
\r
628 var a = document.createElement("a");
\r
629 a.href = "#" + entry.element.id;
\r
630 a.appendChild(document.createTextNode(entry.text));
\r
631 var div = document.createElement("div");
\r
632 div.appendChild(a);
\r
633 div.className = "toclevel" + entry.toclevel;
\r
634 toc.appendChild(div);
\r
636 if (entries.length == 0)
\r
637 toc.parentNode.removeChild(toc);
\r
641 /////////////////////////////////////////////////////////////////////
\r
642 // Footnotes generator
\r
643 /////////////////////////////////////////////////////////////////////
\r
645 /* Based on footnote generation code from:
\r
646 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
\r
649 footnotes: function () {
\r
650 // Delete existing footnote entries in case we're reloading the footnodes.
\r
652 var noteholder = document.getElementById("footnotes");
\r
656 var entriesToRemove = [];
\r
657 for (i = 0; i < noteholder.childNodes.length; i++) {
\r
658 var entry = noteholder.childNodes[i];
\r
659 if (entry.nodeName == 'div' && entry.getAttribute("class") == "footnote")
\r
660 entriesToRemove.push(entry);
\r
662 for (i = 0; i < entriesToRemove.length; i++) {
\r
663 noteholder.removeChild(entriesToRemove[i]);
\r
666 // Rebuild footnote entries.
\r
667 var cont = document.getElementById("content");
\r
668 var spans = cont.getElementsByTagName("span");
\r
671 for (i=0; i<spans.length; i++) {
\r
672 if (spans[i].className == "footnote") {
\r
674 var note = spans[i].getAttribute("data-note");
\r
676 // Use [\s\S] in place of . so multi-line matches work.
\r
677 // Because JavaScript has no s (dotall) regex flag.
\r
678 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
\r
679 spans[i].innerHTML =
\r
680 "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
\r
681 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
682 spans[i].setAttribute("data-note", note);
\r
684 noteholder.innerHTML +=
\r
685 "<div class='footnote' id='_footnote_" + n + "'>" +
\r
686 "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
\r
687 n + "</a>. " + note + "</div>";
\r
688 var id =spans[i].getAttribute("id");
\r
689 if (id != null) refs["#"+id] = n;
\r
693 noteholder.parentNode.removeChild(noteholder);
\r
695 // Process footnoterefs.
\r
696 for (i=0; i<spans.length; i++) {
\r
697 if (spans[i].className == "footnoteref") {
\r
698 var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
\r
699 href = href.match(/#.*/)[0]; // Because IE return full URL.
\r
701 spans[i].innerHTML =
\r
702 "[<a href='#_footnote_" + n +
\r
703 "' title='View footnote' class='footnote'>" + n + "</a>]";
\r
709 install: function(toclevels) {
\r
712 function reinstall() {
\r
713 asciidoc.footnotes();
\r
715 asciidoc.toc(toclevels);
\r
719 function reinstallAndRemoveTimer() {
\r
720 clearInterval(timerId);
\r
724 timerId = setInterval(reinstall, 500);
\r
725 if (document.addEventListener)
\r
726 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
\r
728 window.onload = reinstallAndRemoveTimer;
\r
732 asciidoc.install(2);
\r
736 <body class="article">
\r
738 <h1>grml2iso(8)</h1>
\r
740 <div id="toctitle">Table of Contents</div>
741 <noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
745 <div class="sect1">
\r
746 <h2 id="_name">1. Name</h2>
\r
747 <div class="sectionbody">
\r
748 <div class="paragraph"><p>grml2iso - create a multiboot grml ISO using grml2usb</p></div>
\r
751 <div class="sect1">
\r
752 <h2 id="_synopsis">2. Synopsis</h2>
\r
753 <div class="sectionbody">
\r
754 <div class="paragraph"><p>grml2iso -o <target.iso> <ISO[s]></p></div>
\r
755 <div class="sidebarblock">
\r
756 <div class="content">
\r
757 <div class="paragraph"><p>Important! The grml team does not take responsibility for loss of any data!</p></div>
\r
761 <div class="sect1">
\r
762 <h2 id="_introduction">3. Introduction</h2>
\r
763 <div class="sectionbody">
\r
764 <div class="paragraph"><p>grml2iso allows you to create a multiboot grml ISO. You can specify
\r
765 two or more grml ISOs and will get one single multiboot ISO as a result.
\r
766 grml2iso requires and uses grml2usb for this task and installs grub2
\r
767 as bootmanager on the multiboot ISO.</p></div>
\r
770 <div class="sect1">
\r
771 <h2 id="_options">4. Options</h2>
\r
772 <div class="sectionbody">
\r
773 <div class="paragraph"><p>grml2iso supports the environment variables GRML2USB and WRKDIR.
\r
774 GRML2USB specifies the path to the grml2usb script you’d like to use.
\r
775 WRKDIR specifies the work directory for creating the filesystem.
\r
776 The work directory needs at least as much free disk space as the sum
\r
777 of all specified ISOs.</p></div>
\r
778 <div class="dlist"><dl>
\r
779 <dt class="hdlist1">
\r
780 <strong>\-o <target.iso></strong>
\r
784 This option is mandatory and specifies where the resulting multiboot grml ISO
\r
785 should be placed. Note that (to avoid any possible data loss) grml2iso will exit
\r
786 if the specified target.iso exists already.
\r
789 <dt class="hdlist1">
\r
790 <strong>\-c <directory></strong>
\r
794 The content of the specified directory will be copied to the resulting
\r
795 multiboot grml ISO.
\r
798 <dt class="hdlist1">
\r
799 <strong>\-b <boot params></strong>
\r
803 Use specified default bootoptions as default.
\r
806 <dt class="hdlist1">
\r
811 Force the program to run and overwrite an existing iso image.
\r
814 <dt class="hdlist1">
\r
815 <strong>\-r <boot param></strong>
\r
819 Remove specified boot parameter from existing command line. Could be specified multiple times.
\r
822 <dt class="hdlist1">
\r
823 <strong>\-p <grml2usb param></strong>
\r
827 Execute grml2usb with the specified parameters. For a list of valid parameters have a look at the <a href="http://grml.org/grml2usb/">grml2usb webpage</a> or the grml2usb manpage
\r
830 <dt class="hdlist1">
\r
831 <strong>\-s <URI></strong>
\r
835 Generate a small iso file which downloads the squashfs file from the specified URI. Due to current limitations in busyboxs wget and DNS resolution, an URL can not contain a hostname but an IP only. This is useful if you want to boot systems which support booting iso image from your local system. Besides the iso image this command also copies the squashfs file to the output directory.
\r
841 <div class="sect1">
\r
842 <h2 id="_usage_examples">5. Usage examples</h2>
\r
843 <div class="sectionbody">
\r
844 <div class="literalblock">
\r
845 <div class="content">
\r
846 <pre><tt># grml2iso -o /tmp/grml.iso grml_2009.05.iso grml64_2009.05.iso</tt></pre>
\r
848 <div class="paragraph"><p>Create multiboot ISO /tmp/grml.iso with grml_2009.05.iso and grml64_2009.05.iso.</p></div>
\r
849 <div class="literalblock">
\r
850 <div class="content">
\r
851 <pre><tt># grml2iso -b 'lang=de ssh=passwd' -c /tmp/grml-content -o /srv/grml.iso /srv/grml/grml_2009.10.iso</tt></pre>
\r
853 <div class="paragraph"><p>Create a new iso with additional boot parameters and copy the content from /tmp/grml-content to the generated iso image.</p></div>
\r
854 <div class="literalblock">
\r
855 <div class="content">
\r
856 <pre><tt># grml2iso -r quiet -r vga=791 -o /srv/grml.iso /srv/grml-small_2009.10.iso</tt></pre>
\r
858 <div class="paragraph"><p>Create a new iso and remove existing boot parameters quiet and vga=791.</p></div>
\r
859 <div class="literalblock">
\r
860 <div class="content">
\r
861 <pre><tt># GRML2USB=/srv/git/grml2usb grml2iso -o /srv/grml.iso /srv/grml/grml_2009.05.iso /srv/grml/grml64-medium_2009.05.iso</tt></pre>
\r
863 <div class="paragraph"><p>Create multiboot ISO /srv/grml.iso with grml_2009.05.iso and
\r
864 grml64-medium_2009.05.iso using /srv/git/grml2usb as grml2usb script.</p></div>
\r
865 <div class="literalblock">
\r
866 <div class="content">
\r
867 <pre><tt># WRKDIR=/mnt/test/grml-tmp grml2iso -o /mnt/test/grml.iso grml_2009.05.iso grml64_2009.05.iso</tt></pre>
\r
869 <div class="paragraph"><p>Use /mnt/test/grml-tmp as working directory for creating the multiboot ISO
\r
870 /mnt/test/grml.iso with grml_2009.05.iso and grml64_2009.05.iso.</p></div>
\r
871 <div class="literalblock">
\r
872 <div class="content">
\r
873 <pre><tt># grml2iso -p --skip-addons -o /srv/grml.iso /srv/grml-small_2009.10.iso /srv/grml64-small_2009.10.iso</tt></pre>
\r
875 <div class="paragraph"><p>Don’t copy the addons from the specified iso images</p></div>
\r
878 <div class="sect1">
\r
879 <h2 id="_online_ressources">6. Online Ressources</h2>
\r
880 <div class="sectionbody">
\r
881 <div class="paragraph"><p>Check out the <a href="http://grml.org/grml2usb/">grml2usb webpage</a> and the
\r
882 <a href="http://git.grml.org/?p=grml2usb.git">grml2usb git repository</a>.</p></div>
\r
885 <div class="sect1">
\r
886 <h2 id="_bugs">7. Bugs</h2>
\r
887 <div class="sectionbody">
\r
888 <div class="paragraph"><p>Please report feedback, bugreports and wishes <a href="#X7">to the author</a>.</p></div>
\r
891 <div class="sect1">
\r
892 <h2 id="X7">8. Authors</h2>
\r
893 <div class="sectionbody">
\r
894 <div class="paragraph"><p>Michael Prokop <<a href="mailto:mika@grml.org">mika@grml.org</a>> and Thorsten Glaser <<a href="mailto:tg@mirbsd.org">tg@mirbsd.org</a>></p></div>
\r
898 <div id="footnotes"><hr /></div>
\r
900 <div id="footer-text">
\r
901 Last updated 2011-12-25 18:20:03 CET
\r