source: postlfs/config/bootdisk.xml@ 1ea79a1

10.0 10.1 11.0 11.1 11.2 11.3 12.0 12.1 6.0 6.1 6.2 6.2.0 6.2.0-rc1 6.2.0-rc2 6.3 6.3-rc1 6.3-rc2 6.3-rc3 7.10 7.4 7.5 7.6 7.6-blfs 7.6-systemd 7.7 7.8 7.9 8.0 8.1 8.2 8.3 8.4 9.0 9.1 basic bdubbs/svn elogind gnome kde5-13430 kde5-14269 kde5-14686 kea ken/TL2024 ken/inkscape-core-mods ken/tuningfonts krejzi/svn lazarus lxqt nosym perl-modules plabs/newcss plabs/python-mods python3.11 qt5new rahul/power-profiles-daemon renodr/vulkan-addition systemd-11177 systemd-13485 trunk upgradedb v5_1 xry111/intltool xry111/llvm18 xry111/soup3 xry111/test-20220226 xry111/xf86-video-removal
Last change on this file since 1ea79a1 was 1ea79a1, checked in by Bruce Dubbs <bdubbs@…>, 20 years ago

Typos and punctuation

git-svn-id: svn://svn.linuxfromscratch.org/BLFS/trunk/BOOK@2236 af4574ff-66df-0310-9fd7-8a98e5e911e0

  • Property mode set to 100644
File size: 32.2 KB
Line 
1<sect1 id="postlfs-config-bootdisk">
2<?dbhtml filename="bootdisk.html"?>
3<title>Creating a Custom Boot Disk</title>
4
5<sect2>
6<title>Decent Rescue Boot Disk Needs</title>
7<para>This section is really about creating a <emphasis>rescue</emphasis>
8diskette. As the name <emphasis>rescue</emphasis> implies, the host
9system has a problem, often lost partition information or corrupted file
10systems, that prevents it from booting and/or operating normally. For
11this reason, you <emphasis>must not</emphasis> depend on resources from
12the host being "rescued". To presume that any given partition or hard
13drive <emphasis>will</emphasis> be available is a risky presumption.</para>
14
15<para>Heeding the warning, the rescue disk created here has no
16dependency on the host system's resources, other than basic bootability
17and hardware soundness. At a minimum, the most common sorts of failures
18requiring a rescue boot disk should be addressed by the contents of the
19boot disk. This would include the common loss of partitioning (master
20boot record is lost or corrupted), file system corruption, and the need
21to allow creation and editing of files that may have been lost or
22corrupted, possibly as an effect of the other two problems.</para>
23
24<para>Additional utilities should be available to search for text or
25files, copy, move and remove files, and many other normal operations
26that might be expected to be needed when reconstructing.</para>
27</sect2>
28
29<sect2>
30<title>This Minimal Decent Rescue Disk</title>
31
32<para>The intent here is to create a "rescue boot disk" that will support
33the common operations listed above. These functions are provided by
34including selected executables from <application><ulink
35url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox
36</ulink></application> and <application><ulink
37url="http://freshmeat.net/projects/e2fsprogs/">e2fsprogs</ulink></application>.
38A basic editor and rudimentary disk partitioning utility may also be
39optionally included.</para>
40
41<para>This, however, is not the limit. A minimal disk is described
42here, but you can add anything you can fit on the floppy. Furthermore,
43if one floppy is not enough to meet your needs, you can make a
44multi-diskette rescue set that means, essentially, the sky is the limit.
45This is discussed below. The number of other possible variations are
46just too numerous to mention here.</para>
47</sect2>
48
49<sect2>
50<title>Build the Rescue Boot Disk</title>
51<sect3>
52<title>Prerequisites</title>
53
54<para>You should have known-good floppy diskettes available. Some
55people prefer to use the <command>fdformat</command> command to prepare
56these because it also does a verification. See the man page for more
57details. Another good idea is to always prepare duplicates of the
58rescue diskette. Media does deteriorate.</para>
59
60<para>These instructions presume a base <acronym>LFS</acronym> install
61using ext2/ext3 file systems.</para>
62
63<para>You need to have loopback device support enabled in your host's
64kernel to use this procedure.</para>
65
66<para>You should make a custom kernel that includes only those features
67needed to rescue your system, so it will have the least size. No
68sense in building in support for things like <application>XFree86</application>,
69<application>DRI</application>, etc, as most rescues are performed from the
70command prompt. Along the same lines, if you have <xref linkend="gcc2"/>, it
71is known to produce smaller kernels. So you might want to use that
72compiler for this kernel. If you do so, don't overlook any loadable
73modules (which are not addressed here) you might need - they need to be
74compiled with the same compiler used to make the kernel.</para>
75
76<para>The rescue image must include support for the file system of your
77choice (we presume ext2/3 here), ramdisk and initial ramdisk (initrd).
78Disable everything that you can in the kernel configuration. You should
79keep support for the proc file system and tempfs file system enabled
80because of their general utility. The proc file system is needed for
81the <command>mount</command> to report properly.</para>
82
83<para>If you install <emphasis>only</emphasis> the minimal set of
84components shown in this document, you will need a kernel that is 643 or
85fewer blocks in size. If you want the optional programs - a very basic
86editor, like <command>ed</command>, and rudimentary disk partitioning, like
87<command>sfdisk</command> - the kernel will need to be 595 or fewer blocks in
88size. This should not be a major problem unless your needs are fairly
89esoteric. On the system used to develop this version of the procedures, using
90only ext2 file systems and not using networking or <acronym>CD</acronym>s for
91recovery, the kernel image is only 481 blocks. And there may be more to gain - it has not been closely examined for additional gains.</para>
92
93<para>This kernel image will be called "rescueimage" hereinafter. You
94can actually name your image anything you like and just use its name
95instead in any commands that include "rescueimage".</para>
96
97<para>If you can not get your rescueimage down to the size needed to allow
98all you need on the ramdisk image, don't fret. You can always build a
99two diskette set, one boot and one root diskette. The kernel will prompt
100you to insert the root file system diskette. This will allow room for a
101compressed ramdisk image of 1440 blocks and a rescueimage of the same
102size.</para>
103
104<para>The rescueimage size limits given above are likely to vary as
105local system-specific configurations change. Use them only as a
106guideline and not as gospel. The size of rescueimage as shown by
107<command>ls -sk</command> is only an approximation because of some
108"overhead". On the system used to develop this version of these
109procedures, that command shows 488 blocks but the actual number of
110blocks written is only 480 and a fraction, which means that 481 blocks
111are actually used.</para>
112</sect3>
113
114<sect3>
115<title>Rescue Disk Build Process</title>
116
117<para>The basic process will be:</para>
118<itemizedlist>
119<listitem><para>make a mount point for a file system</para></listitem>
120<listitem><para>make an empty file to hold the file system</para></listitem>
121<listitem><para>bind the empty file to a loopback device</para></listitem>
122<listitem><para>make a 4MB file system</para></listitem>
123<listitem><para>mount the file system</para></listitem>
124<listitem><para>add components to the file system</para></listitem>
125<listitem><para>make the compressed initrd</para></listitem>
126<listitem><para>join rescueimage and initrd onto a diskette</para></listitem>
127</itemizedlist>
128
129<para>The initial ramdisk will be automatically loaded at boot time if
130setup is done correctly.</para>
131
132<para><emphasis>Make a mount point and an empty file to hold a file
133system</emphasis></para>
134
135<screen><userinput><command>mkdir -p /mnt/loop1
136dd if=/dev/zero of=/tmp/rfloppy bs=1k count=4096</command></userinput></screen>
137
138<para><emphasis>Command explanations</emphasis></para>
139
140<para><command>dd</command>: This is a generalized input-to-output copy
141utility that also has many transformation capabilities.</para>
142
143<para><parameter>if=/dev/zero</parameter>: This parameter assigns
144<command>dd</command>'s input file to a device that returns an infinite
145stream of zeroes.</para>
146
147<para><parameter>of=/tmp/rfloppy</parameter>: This parameter directs
148<command>dd</command>'s output to <filename>/tmp/rfloppy</filename>.</para>
149
150<para><parameter>bs=1k count=4096</parameter>: These parameters tell
151<command>dd</command> to read and write in "chunks" of 1024 bytes and
152process 4096 "chunks".</para>
153
154<para><emphasis>Bind the file to a loopback device, make a file system and mount it.</emphasis></para>
155
156<para>The reason these commands are used is that they work regardless of
157the version of <command>mount</command> (older ones don't have the
158<userinput>-o loop</userinput> option) or if <filename>/etc/mtab</filename>
159is symlinked to <filename class="directory">/proc</filename> (which causes mount to be
160unable to properly "unbind" a loop device, due to "lost" information).
161An alternate set of commands is provided, after these three commands,
162that you can use if you don't have either of these situations.</para>
163
164<screen><userinput><command>losetup /dev/loop1 /tmp/rfloppy
165mke2fs -m 0 -N 504 /dev/loop1
166mount -t ext2 /dev/loop1 /mnt/loop1</command></userinput></screen>
167
168<para><emphasis>Command explanations</emphasis></para>
169
170<para><command>losetup /dev/loop1 /tmp/rfloppy</command>: This
171command "binds" a loopback device to the empty file.</para>
172
173<para><command>mke2fs -m 0 -N 504 /dev/loop1</command>: This
174command makes an ext2 file system on the loopback device (which really
175means it is created in the file to which the loopback device is bound)
176and reserves no blocks. The <userinput>-N 504</userinput> parameter causes
177only 504 inodes to be allocated, leaving more space for other things needed
178in the file system.</para>
179
180<para><command>mount -t ext2 /dev/loop1 /mnt/loop1</command>: This
181mounts the file system just created, just as if it were a real device,
182like a hard drive or diskette. This allows all the normal system I/O
183commands to operate as if a real device were present.</para>
184
185<para>If your <command>mount</command> supports the
186<option>-o loop</option> option <emphasis>and</emphasis> your
187<filename>/etc/mtab</filename> is a real file, rather than a symlink to
188<filename class="directory">/proc</filename>, the three above commands can be replaced
189by these next two commands.</para>
190
191<screen><userinput><command>mke2fs -F -m 0 -N 504 /tmp/rfloppy
192mount -o loop /tmp/rfloppy /mnt/loop1</command></userinput></screen>
193
194<para><emphasis>Command explanations</emphasis></para>
195
196<para><command>mke2fs -F -m 0 -N 504 /tmp/rfloppy</command>: As before,
197a file system is made, with only 504 inodes and no reserved blocks, that
198will be bound to a loopback device. The <userinput>-F</userinput> parameter
199just suppresses an irritating question issued when
200<command>mke2fs</command> realizes that you are not accessing a
201device.</para>
202
203<para><command>mount -o loop /tmp/rfloppy /mnt/loop1</command>: This
204command tells <command>mount</command> to bind the named file to a
205loopback device it automatically selects (the first available) and mount
206the device on <filename class="directory">/mnt/loop1</filename>.</para>
207
208<para><emphasis>Add components to the file system</emphasis></para>
209
210<para><emphasis>A cautionary note:</emphasis> if you are not running in a
211<command>chroot</command> environment, be sure that you do not accidentally
212omit the <filename class="directory">/mnt/loop1</filename> reference in the commands. If
213you do so, you might replace the equivalent components on your host with
214the components that are installed by these procedures. Even if you are
215in a chroot environment, you may need to be careful if the environment
216is your freshly built <acronym>LFS</acronym> system which you intend to
217use as a host in the future.</para>
218
219<para>First, to have as much free space as possible, remove the
220<filename>lost+found</filename> directory, which is not needed because
221it is only used by <command>fsck</command>. Since <command>fsck</command>
222will never be run on this file system, it is unneeded.</para>
223
224<screen><userinput><command>rmdir /mnt/loop1/lost+found/</command></userinput></screen>
225
226<para>Now make a minimal set of directories.</para>
227
228<screen><userinput><command>mkdir /mnt/loop1/{dev,proc,etc,sbin,bin,lib,mnt,usr,var}</command></userinput></screen>
229
230<para>Add needed device files to the initrd image. If you use devfs,
231the following command works well, as you only have the devices you use
232anyway.</para>
233
234<screen><userinput><command>cp -dpR /dev/* /mnt/loop1/dev</command></userinput></screen>
235
236<para>If you used <command>MAKEDEV</command> to create your devices on
237your host, you'll want to use something similar to this longer command,
238to minimize wasting space with unneeded inodes.</para>
239
240<para><emphasis>You must modify this to suit your rescueimage configuration and
241other needs.</emphasis> For example, you may need
242<acronym>SCSI</acronym> devices and may not need
243frame buffer devices or the pseudo-terminal directory. Also, the number
244of hard drives and partitions that you include should be the minimal
245that you need. Extensive analysis has not been done on the list below,
246so there are more inodes and space to be gained by "fine tuning" this
247set.</para>
248
249<screen><userinput><command>mkdir /mnt/loop1/dev/pts
250cp -a \
251&nbsp;&nbsp;&nbsp;&nbsp;/dev/null /dev/console \
252&nbsp;&nbsp;&nbsp;&nbsp;/dev/fb[0-7] /dev/fd /dev/fd0 /dev/fd0h1440 /dev/full \
253&nbsp;&nbsp;&nbsp;&nbsp;/dev/hda* /dev/hdb* /dev/hdc* /dev/hdd* /dev/initctl /dev/kmem \
254&nbsp;&nbsp;&nbsp;&nbsp;/dev/loop[0-3] /dev/lp0 /dev/mem /dev/port \
255&nbsp;&nbsp;&nbsp;&nbsp;/dev/psaux /dev/ram \
256&nbsp;&nbsp;&nbsp;&nbsp;/dev/ram0 /dev/ram1 /dev/ram2 /dev/ram3 /dev/random /dev/rtc \
257&nbsp;&nbsp;&nbsp;&nbsp;/dev/shm /dev/stderr /dev/stdin /dev/stdout /dev/tty \
258&nbsp;&nbsp;&nbsp;&nbsp;/dev/tty[0-9] /dev/ttyS0 /dev/ttyS1 /dev/urandom /dev/zero \
259&nbsp;&nbsp;/mnt/loop1/dev</command></userinput></screen>
260
261<para><emphasis>What is needed in the <filename class="directory">/etc</filename>
262directory</emphasis></para>
263
264<para>If you choose, you can copy all or selected parts of your
265<filename>/etc/passwd</filename> and <filename>/etc/group</filename>
266files. But even if each is less than 1024 bytes, you will lose two
267inodes and two blocks of space on the initial ramdisk. This only really
268matters because of trying to squeeze everything onto a 1.44MB
269diskette. Every little bit helps. The strategy taken here is to create
270these two files as part of the rescue boot and initialization process.
271The commands that make the two files will be embedded inside the
272<filename>rcS</filename> script that <filename>linuxrc</filename>
273(really <application><ulink
274url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox
275</ulink></application>) invokes after the initrd is
276loaded. This way no more inodes or blocks are used on the
277diskette to carry these files.</para>
278
279<para>Some might like to copy their <filename class="directory">/etc/rc*</filename>
280directory into the ramdisk image, but this may have no value, other
281than archival use, in a worst-case recovery scenario. If you want
282automatic initialization of the system after repair, they may have some
283value. But few people need or want this to happen. If the file system
284on the hard drives are corrupted, what good will mount scripts do? Some
285scripts may be useful, like access to a network to copy over backup data
286when the hard drive's file systems are usable again. The point is that
287you should copy only the parts that you can use because space is at a
288premium on the diskette.</para>
289
290<para>Here, only the <filename>fstab</filename> will be included. This
291is handy because it eases mounting of partitions that may be useful and
292also can be examined and used as a guide as to what is available and
293what may need reconstruction. Because it may be larger than needed, you
294should edit it to remove any useless entries and minimize commentary.
295No other editing is needed because the boot scripts are not included and
296no automatic mounting will be done using the <filename>fstab</filename>.
297If you decide to include some boot scripts that might try to mount
298things, change the <filename>fstab</filename>'s entries to
299<command>noauto</command> in the options field so they don't cause an
300attempt to mount a potentially corrupt partition. Copy it to
301<filename class="directory">/tmp</filename>, edit it as desired and then:</para>
302
303<screen><userinput><command>cp -a /tmp/fstab /mnt/loop1/etc</command></userinput></screen>
304
305<para>Now the initialization script will be added. As mentioned above,
306<command>linuxrc</command> is symlinked to <application><ulink
307url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox
308</ulink></application>.
309After the kernel and initial ramdisk have been loaded, the kernel gives
310control to <command>linuxrc</command> (<application><ulink
311url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox
312</ulink></application>). It wants to run an <filename class="directory">/etc/init.d/rcS</filename>
313script to do any initial setup.</para>
314
315<para>If you use devfsd, you will need to set up the
316<filename>rcS</filename> script to handle the devfsd startup. Put the
317following commands in <filename class="directory">/mnt/loop1/etc/init.d/rcS</filename>.
318You may also want to add some of the processes shown in the non-devfs
319version that follows.</para>
320
321<screen><userinput>#!/bin/sh
322mount -t devfs devfs /dev
323/sbin/devfsd /dev</userinput></screen>
324
325<para>If you don't use devfsd, but created a static <filename
326class="directory">/dev</filename>
327directory using <command>MAKEDEV</command>, or any similar process, the
328<filename>rcS</filename> script will do slightly different things.
329Also, don't forget that it is creating the
330<filename>/etc/passwd</filename> and <filename>/etc/group</filename>
331files, thus saving space on the diskette.</para>
332
333<para>The script made next will mount <filename class="directory">/proc</filename>, turn
334on swap (no harm is done if it fails), make the
335<filename>/etc/passwd</filename> and <filename>/etc/group</filename>
336files, create a log directory and turn on swapping. Create the script
337with:</para>
338
339<screen><userinput><command>mkdir -p /mnt/loop1/etc/init.d
340cat &gt;/mnt/loop1/etc/init.d/rcS &lt;&lt; EOD</command>
341#!/bin/sh
342mount -t proc proc /proc
343swapon -a
344
345echo "root:x:0:0:root:/root:/bin/bash" &gt; /etc/passwd
346
347<command>cat &gt; /etc/group &lt;&lt;EOF</command>
348root:x:0:
349bin:x:1:
350sys:x:2:
351kmem:x:3:
352tty:x:4:
353tape:x:5:
354daemon:x:6:
355floppy:x:7:
356disk:x:8:
357lp:x:9:
358dialout:x:10:
359audio:x:11:
360<command>EOF
361chmod 644 /etc/passwd /etc/group</command>
362
363mkdir /var/log
364
365<command>EOD
366chmod u+x /mnt/loop1/etc/init.d/rcS</command></userinput></screen>
367
368<para>Unless you add a lot to this script, which <emphasis>is</emphasis>
369encouraged, the above should be reasonably close to what you need.</para>
370
371<para><emphasis>Install packages</emphasis></para>
372
373<para>There are two packages that must be installed. The <application><ulink
374url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox</ulink></application>
375package incorporates the core functions that provide a shell and many
376basic utilities. A file system package, like <application><ulink
377url="http://freshmeat.net/projects/e2fsprogs/">e2fsprogs</ulink></application>, or
378a package for the file system you are using, will provide a minimal
379set of utilities for file system checking and reconstruction. The whole
380package will not be installed, but only certain needed components.</para>
381
382<para>If you use devfsd, you will also need to install that software.</para>
383
384<para>Install <application><ulink
385url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox</ulink></application>
386into the initial ramdisk image. Busybox incorporates many Unix utility
387program functions into a single small executable file.</para>
388
389<screen><userinput><command>make &amp;&amp;
390make PREFIX=/mnt/loop1 install &amp;&amp;
391&gt; /mnt/loop1/var/utmp</command></userinput></screen>
392
393<para>A <filename>var/utmp</filename> is made because <application><ulink
394url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox</ulink></application>
395needs it for the reboot command to work properly. If this file doesn't
396exist when <application><ulink
397url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox</ulink></application>
398is started, the reboot command will not work. This would be a bad thing
399for people that have no reset button available to them.</para>
400
401<para>If you use devfs to create devices on the fly and free up precious
402inodes on the floppy, you'll also install devfsd to facilitate the
403devices that <application><ulink
404url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox</ulink></application>
405expects to find. Use the following commands to do the install.</para>
406
407<screen><userinput><command>mv GNUmakefile Makefile &amp;&amp;
408make &amp;&amp;
409make PREFIX=/mnt/loop1 install</command></userinput></screen>
410
411<para><emphasis>Install part of <application>e2fsprogs</application></emphasis></para>
412
413<para>If you use the ext2 or ext3 (journaling) file system, you can use
414the commands below to install the minimal functionality that should
415allow you to get your hard drives usable again. If you use ext3, keep in
416mind that it is a part of the <application>e2fsprogs</application>
417package and you can get the components, which are mostly hard links,
418from the same places shown below. If you use some other file system,
419such as reiserfs, you should apply the <emphasis>principals</emphasis>
420you see here to install parts of that package instead.</para>
421
422<screen><userinput><command>LDFLAGS='-s'
423mkdir build &amp;&amp;
424cd build &amp;&amp;
425../configure --prefix=/mnt/loop1/usr --with-root-prefix="" \
426 --disable-swapfs --disable-debugfs \
427 --enable-dynamic-e2fsck --disable-nls --disable-evms \
428 --disable-rpath &amp;&amp;
429make LDFLAGS="$LDFLAGS" &amp;&amp;
430strip -p --strip-unneeded --remove-section=.comment \
431 -o /mnt/loop1/sbin/mke2fs misc/mke2fs &amp;&amp;
432strip -p --strip-unneeded --remove-section=.comment \
433 -o /mnt/loop1/sbin/e2fsck e2fsck/e2fsck &amp;&amp;
434chmod 555 /mnt/loop1/sbin/{mke2fs,e2fsck}
435</command></userinput></screen>
436
437<para><emphasis>Two useful utilities</emphasis></para>
438
439<para>There are two very useful utilities that any rescue disk should
440have, to help in faster and more accurate recovery. The first is a
441partitioning utility. The <command>sfdisk</command> program is
442used here because of its small size and great power. Be warned though -
443it is not what is considered to be "user friendly". But the
444<command>fdisk</command> and <command>cfdisk</command> programs are
445substantially larger or require more shared objects, like <application>ncurses
446</application>.</para>
447
448<para>The second utility is an editor. Most graphical editors are
449inherently too large and also require additional shared objects. For
450this reason, <command>ed</command> is used here. It is small, requires
451no additional shared objects and is a regex-based editor that is the
452ancestor to almost all subsequent editors that support regex-based
453editing, whether graphical or not. It is a "context editor" and offers
454powerful, but non-graphical, editing features. There are many other
455editors that may be suitable - feel free to use one of them instead.</para>
456
457<para>Read the <application>busybox</application>
458<filename>INSTALL</filename> and <filename>README</filename> files to
459see how to include a <command>vi</command> editor. It has not been
460investigated here yet, so it may or may not easily fit onto a single
461diskette image such as is made here.</para>
462
463<para>You can install these or not, but it is important for you to have
464some capability such as these offer. Exactly how you would install the
465utilities you choose will have to be determined by you.</para>
466
467<para><command>Sfdisk</command> and <command>ed</command> are installed
468by, essentially, copying them from your host. Strip is used, just to
469assure that they carry no "excess baggage", even though the base
470<acronym>LFS</acronym> install should have stripped them already. Use
471the following commands:</para>
472
473<screen><userinput><command>strip -p --strip-unneeded --remove-section=.comment \
474 -o /mnt/loop1/sbin/sfdisk /sbin/sfdisk
475strip -p --strip-unneeded --remove-section=.comment \
476 -o /mnt/loop1/bin/ed /bin/ed
477chmod 555 /mnt/loop1/sbin/sfdisk /mnt/loop1/bin/ed</command></userinput></screen>
478
479<para>Also, keeping in mind your space limitations, copy any other
480binaries and libraries you need to the image. Use the
481<command>ldd</command> command to see which libraries you will need to
482copy over for any executables. Don't forget to also strip them
483<emphasis>before</emphasis> copying them to the ramdisk image or use the
484<command>strip</command>, as above, to "copy" them.</para>
485
486<para><emphasis>Set up the lib directory</emphasis></para>
487
488<para>Once you have installed all the utilities from above and any
489additional ones you want, use the <command>ldd</command> command, as
490mentioned above, on those that were not listed in this document. If
491any additional libraries are needed, add them into the setup commands
492shown next.</para>
493
494<para>If you installed only those things shown above, the shared objects
495needed will be minimal. You can add them to the ramdisk image with:</para>
496
497<screen><userinput><command>strip -p --strip-unneeded --remove-section=.comment \
498&nbsp;&nbsp;&nbsp;&nbsp;-o /mnt/loop1/lib/libc.so.6 /lib/libc-2.3.3.so &amp;&amp;
499strip -p --strip-unneeded --remove-section=.comment \
500&nbsp;&nbsp;&nbsp;&nbsp;-o /mnt/loop1/lib/ld-linux.so.2 /lib/ld-2.3.3.so &amp;&amp;
501strip -p --strip-unneeded --remove-section=.comment \
502&nbsp;&nbsp;&nbsp;&nbsp;-o /mnt/loop1/lib/libdl.so.2 /lib/libdl-2.3.3.so &amp;&amp;
503chmod 555 /mnt/loop1/lib/{libc.so.6,ld-linux.so.2,libdl.so.2}</command></userinput></screen>
504
505<para>Note that the above commands change the names of the libraries,
506eliminating the need for the usual symlinks. If you add any additional
507shared objects, be alert for similar opportunities and also the pitfalls
508that may be present.</para>
509
510<para><emphasis>Make the compressed initrd</emphasis></para>
511
512<para>Unmount the loopback file. If you used <command>mount</command>'s
513<option>-o loop</option> option, the "bond" between the loop device
514and the file will be removed when the unmount is done. Just omit the
515<command>losetup -d /dev/loop1</command> from the following
516sequence. The <userinput>-9</userinput> parameter is used with
517<command>gzip</command> to make the smallest possible compressed image. To
518make sure it will fit on the diskette, list the file's size.</para>
519
520<screen><userinput><command>umount /mnt/loop1 &amp;&amp;
521losetup -d /dev/loop1 &amp;&amp; # Omit if mount's -o loop was used
522gzip -9 &lt; /tmp/rfloppy &gt; /tmp/rootfs.gz
523ls -l /tmp/rootfs.gz</command></userinput></screen>
524
525<para><emphasis>Join rescueimage and initrd onto a diskette</emphasis></para>
526
527<para>Now the rescueimage and initial ramdisk image will be written to
528the boot diskette. Before doing this, calculate the number of blocks
529needed for rescueimage and for <filename>/tmp/rootfs.gz</filename>
530(the initial ramdisk), individually, by dividing each
531size by 1024 and adding one if there is any remainder. Add these two
532results together. They must total 1,440 or fewer blocks. If they total
533more than this, don't worry too much. Changes to make a two-diskette
534set are presented later. Of course, you could reexamine your choices and
535try to shrink either the rescueimage or the initial ramdisk image.</para>
536
537<para>To make a single-floppy rescue, using devfs, use the following
538commands. If you use the static <filename class="directory">/dev</filename> setup, use
539<filename>/dev/fd0</filename> instead of the /dev/floppy/0.</para>
540
541<screen><userinput><command>dd if=rescueimage of=/dev/floppy/0 bs=1k
542rdev /dev/floppy/0 0,0
543rdev -R /dev/floppy/0 0</command></userinput></screen>
544
545<para><emphasis>Command explanations</emphasis></para>
546
547<para><command>rdev /dev/floppy/0 0,0</command>: sets the root file system
548the kernel will use when it boots. Because it loads an initrd, it will
549automatically set that as the root device, initially. So, the
550<option>0,0</option> gives it "no value", telling the kernel to not
551mount any other device. Some folks give <filename>/dev/fd0</filename> or
552something similar. But this has effect <emphasis>only</emphasis> when
553<command>linuxrc</command> (really <application><ulink
554url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox
555</ulink></application>) exits and the normal <command>init</command>
556processes get invoked. Since this is not being done here, and the floppy
557is <emphasis>not</emphasis> a valid file system, it would be useless
558here. A hard drive would be a better choice if you are looking to
559automatically bring the system up after repair. Since <application><ulink
560url="http://www.busybox.net/downloads/busybox-0.60.4.tar.bz2">busybox
561</ulink></application> provides the <command>reboot</command> command,
562automatic initialization is not needed.</para>
563
564<para>The <command>rdev -R /dev/floppy/0 0</command> will set the
565"root flags" to zero. They have no use in this application.</para>
566
567<para>The <command>dd</command> from above showed some results, like</para>
568
569<screen> 480+1 records in
570 480+1 records out</screen>
571
572<para>In this example the rescueimage (kernel) was 480+1 blocks in size.
573Make sure that this number, which may be different for you, matches your
574calculations from above. You need to calculate a "magic number" now
575that will be inserted into rescueimage. The value consists of three
576significant parts. Two are discussed here. The third is touched upon
577later.</para>
578
579<para>Bits 0 - 10 will contain the size of rescueimage, in blocks,
580that you calculated above, and which should match the results from the
581dd above. Bit 14 (the 15th bit, which is 2 to the 14th power, or 16,384)
582is a flag that, when set to 1, tells the kernel an initial ramdisk is to
583be loaded. So for the single-floppy rescue diskette, the two numbers
58416,384 and 481 (or whatever number is right for your rescueimage size) are
585added together to produce a decimal value, like 16865. This value is
586inserted into the proper place in rescueimage by the
587<command>rdev</command> command done next.</para>
588
589<para>Insert the "magic number" into rescueimage and then write the
590root file system right after rescueimage on the floppy by executing the
591following commands, with the proper numbers inserted. Notice that the
592<command>seek</command> parameter's number must be the size, in blocks,
593of your rescueimage. If you use the static <filename class="directory">/dev</filename>
594setup, use <filename>/dev/fd0</filename> in the commands below, instead
595of <filename>/dev/floppy/0</filename>.</para>
596
597<screen><userinput><command>rdev -r /dev/floppy/0 <replaceable>16865</replaceable>
598dd if=/tmp/rootfs.gz of=/dev/floppy/0 bs=1k seek=<replaceable>481</replaceable></command></userinput></screen>
599
600<para>In this command, <command>seek</command> was used to position to
601the block following the end of the rescueimage (480+1) and begin writing the
602root file system to the floppy.</para>
603</sect3>
604</sect2>
605
606<sect2>
607<title>A Two-diskette Rescue Setup</title>
608
609<para>If you just can't live with a single-diskette rescue system, here
610is what to do to make a simple two-diskette system. Note that the
611endless possibilities presented by the availability of
612<command>linuxrc</command> and other components are not addressed
613here. Here you will just use the kernel's ability to prompt for a second
614diskette that contains the initrd image and load it.</para>
615
616<para>Modify the above instructions as follows. First a different magic
617number is needed. The 15th bit (bit 14) still needs to be set, but the
618size of the rescueimage, in blocks, is replaced with a zero. The third
619component, which was not discussed above, is now used. This is the 16th
620bit (bit 15) of the "magic number". When set, it tells the kernel to ask
621the user to insert the "root" floppy. It then loads the initrd image
622from that diskette. Because the size of the rescueimage was replaced
623by zero, the kernel starts loading from the "zero'th" block (the first
624one) on the second diskette.</para>
625
626<para>The 16th bit (bit 15) represents 2 raised to the 15th power, or
62732,768. So the new magic number is 32,768 + 16384, which is 49,152. This
628value tells the kernel to prompt for, and then load, an initial ramdisk
629image from the first block on the inserted floppy. So your first
630modification is to the command to write the "magic number" to the rescueimage
631image on the diskette.</para>
632
633<screen><userinput><command>rdev -r /dev/floppy/0 <replaceable>49152</replaceable></command></userinput></screen>
634
635<para>Note that the initrd image is <emphasis>not</emphasis> copied to
636the diskette yet. Remove the boot diskette and insert another diskette
637that will hold your root file system. Run this modified command (don't
638forget to use <filename>/dev/fd0</filename> if you don't use devfs).
639Note that no <command>seek</command> parameter is used.</para>
640
641<screen><userinput><command>dd if=/tmp/rootfs.gz of=/dev/floppy/0 bs=1k</command></userinput></screen>
642
643<para>That's all there is to it. The possibilities from here are limited only
644by your imagination and tenacity in pursuing enhancements. And your
645willingness to research available documentation. A good starting point
646is the "Documentation" directory in your kernel source tree. More help
647may be gained at
648<ulink url="http://linuxfromscratch.org/hints/news.html"><acronym>LFS </acronym> Hints</ulink>
649(please use a mirror site that is suitable) and
650<ulink url="http://www.tldp.org">TLDP</ulink>.</para>
651
652</sect2>
653</sect1>
Note: See TracBrowser for help on using the repository browser.