home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-07-11 | 75.9 KB | 1,882 lines |
- The Linux Bootdisk HOWTO
- Graham Chapman, grahamc@zeta.org.au
- v1.02, 25 June 1995
-
- This document describes how to create Linux boot, boot/root and util¡
- ity maintenance disks. These disks could be used as rescue disks or to
- test new kernels.
-
- 1. Introduction
-
- 1.1. Why Build Boot Disks?
-
- Linux boot disks are useful in a number of situations, such as:
-
- ╖ Testing a new kernel.
-
- ╖ Recovering from disk or system failure. Such a failure could be
- anything from a lost boot sector to a disk head crash.
-
- There are several ways of producing boot disks:
-
- ╖ Use one from a distribution such as Slackware. This will at least
- allow you to boot.
-
- ╖ Use a rescue package to set up disks designed to be used as rescue
- disks.
-
- ╖ Learn what is required for each of the various types of disk to
- operate, then build your own.
-
- I originally chose the last option - learn how it works so that you
- can do it yourself. That way, if something breaks, you can work out
- what to do to fix it. Plus you learn a lot about how Linux works along
- the way. Once I understood how it all worked, then I changed to using
- the Bootkit rescue package to maintain my boot disks.
-
- Experienced Linux users may find little of use in this document.
- However users new to Linux system administration who wish to protect
- against root disk loss and other mishaps may find it useful.
-
- A note on versions - this document has been updated to support the
- following packages and versions:
-
- ╖ Linux 1.2.0
-
- ╖ LILO 0.15
-
- Copyright (c) Graham Chapman 1995.
-
- Permission is granted for this material to be freely used and
- distributed, provided the source is acknowledged. No warranty of any
- kind is provided. You use this material at your own risk.
-
- 1.2. Feedback and Credits
-
- I welcome any feedback, good or bad, on the content of this document.
- Please let me know if you find any errors or omissions.
-
- I thank the following people for correcting errors and providing
- useful suggestions for improvement:
-
- Randolph Bentson
- Grant R. Bowman
- Scott Burkett
- Bruce Elliot
- HARIGUCHI Youichi
- Bjxrn-Helge Mevik
- Dwight Spencer
- Cameron Spitzer
- Johannes Stille
-
- 1.3. Change History
-
- v1.02, 25 June 1995
-
- ╖ Add: FAQ question on oversize ramdisk filesystems.
-
- ╖ Add: if using mkfs, use the -i option.
-
- ╖ Add: can use cp as well as dd to copy to raw disk.
-
- ╖ Chg: correct explanation of /dev/fd0 vs /dev/fd0H1440.
-
- ╖ Chg: use "zImage" terminology to conform to standard usage.
-
- ╖ Add: mke2fs -m 0 will provide more usable disk space.
-
- ╖ Add: re-run LILO if the kernel has changed.
-
- ╖ Add: move rescue packages to new section under "References".
-
- ╖ Add: new rescue packages Bootkit and CatRescue.
-
- ╖ Add: FAQ question on cannot execute errors.
-
- ╖ Add: shell scripts are samples only - I now use Bootkit.
-
- ╖ Chg: stop using < and > in command examples - too confusing.
-
- ╖ Chg: sample directory listings are now of diskettes, not model.
-
- ╖ Chg: use more consistent terminology with ramdisks.
-
- v1.01, 6 February 1995
-
- ╖ Fix: DO NOT cp kernel_filename /dev/fd0 - this will overwrite any
- file system on the diskette.
-
- ╖ Fix: Put LILO boot.b and map files on target disk.
-
- ╖ Add: -dp flags to cp commands to avoid problems.
-
- ╖ Chg: restructure to try to improve readability.
-
- ╖ Add: can now use ext2 filesystem on root diskettes.
-
- ╖ Chg: can now separate boot and root diskettes.
-
- ╖ Add: credits section in Introduction.
-
- ╖ Add: FAQ.
-
- v1.0, 2 January 1995
-
- ╖ Converted to conform to HOWTO documentation standards.
-
- ╖ Added new section - Change History.
-
- ╖ Various minor corrections.
-
- v0.10, 1 November 1994 Original version, labelled "draft".
-
- 2. Disks
-
- 2.1. Summary of Disk Types
-
- I classify boot-related disks into 4 types. The discussion here and
- throughout this document uses the term "disk" to refer to diskettes
- unless otherwise specified. Most of the discussion could be equally
- well applied to hard disks.
-
- A summary of disk types and uses is:
-
- boot
- A disk containing a kernel which can be booted. The disk can
- contain a filesystem and use a boot loader to boot, or it can
- simply contain the kernel only at the start of the disk. The
- disk can be used to boot the kernel using a root file system on
- another disk. This could be useful if you lost your boot loader
- due to, for example, an incorrect installation attempt.
-
- root
- A disk with a file system containing everything required to run
- a Linux system. It does not necessarily contain either a kernel
- or a boot loader.
-
- This disk can be used to run the system independently of any
- other disks, once the kernel has been booted. A special kernel
- feature allows a separate root disk to be mounted after booting,
- with the root disk being automatically copied to a ramdisk.
-
- You could use this type of disk to check another disk for
- corruption without mounting it, or to restore another disk after
- a disk failure or loss of files.
-
- boot/root
- A disk which is the same as a root disk, but contains a kernel
- and a boot loader. It can be used to boot from, and to run the
- system. The advantage of this type of disk is that is it compact
- - everything required is on a single disk. However the
- gradually increasing size of everything means that it won't
- necessarily always be possbile to fit everything on a single
- diskette.
-
- utility
- A disk which contains a file system, but is not intended to be
- mounted as a root file system. It is an additional data disk.
- You would use this type of disk to carry additional utilities
- where you have too much to fit on your root disk.
-
- The term "utility" only really applies to diskettes, where you
- would use a utility disk to store additional recovery utility
- software.
- 2.2. Boot
-
- 2.2.1. Overview
-
- All PC systems start the boot process by executing code in ROM to load
- the sector from sector 0, cylinder 0 of the boot drive and try and
- execute it. On most bootable disks, sector 0, cylinder 0 contains
- either:
-
- ╖ code from a boot loader such as LILO, which locates the kernel,
- loads it and executes it to start the boot proper.
-
- ╖ the start of an operating system kernel, such as Linux.
-
- If a Linux kernel has been written to a diskette as a raw device, then
- the first sector will be the first sector of the Linux kernel itself,
- and this sector will continue the boot process by loading the rest of
- the kernel and running Linux. For a more detailed description of the
- boot sector contents, see the documentation in lilo-01.5 or higher.
-
- An alternative method of storing a kernel on a boot disk is to create
- a filesystem, not as a root filesystem, but simply as a means of
- installing LILO and thus allowing boot-time command line options to be
- specified. For example, the same kernel could then be used to boot
- using a hard disk root filesystem, or a diskette root filesystem. This
- could be useful if you were trying to rebuild the hard disk
- filesystem, and wanted to repeatedly test results.
-
- 2.2.2. Setting Pointer to Root
-
- The kernel must somehow obtain a pointer to the drive and partititon
- to be mounted as the root drive. This can be provided in several ways:
-
- ╖ By setting ROOT_DEV = devicename in the Linux kernel makefile and
- rebuilding the kernel (for advice on how to rebuild the kernel,
- read the Linux FAQ and look in /usr/src/linux). Comments in the
- Linux makefile describe the valid values for devicename.
-
- ╖ By running the rdev utility:
-
- rdev filename devicename
-
- This will set the root device of the kernel contained in filename to
- be devicename. For example:
-
- rdev zImage /dev/sda1
-
- This sets the root device in the kernel in zImage to the first parti¡
- tion on the first SCSI drive.
-
- There are some alternative ways of issuing the rdev command. Try:
-
- rdev -h
-
- and it will display command usage.
-
- There is usually no need to configure the root device for boot
- diskette use, because the kernel currently used to boot from probably
- already points to the root drive device. The need can arise, howoever,
- if you obtain a kernel from another machine, for example, from a
- distribution, or if you want to use the kernel to boot a root
- diskette. It is probably a good idea to check the current root drive
- setting, just in case it is wrong. To get rdev to check the current
- root device in a kernel file, enter the command:
-
- rdev <filename>
-
- It is possible to change the root device set in a kernel by means
- other than using rdev. For details, see the FAQ at the end of this
- document.
-
- 2.2.3. Copying Kernel to Boot Diskette
-
- Once the kernel has been configured then it must be copied to the boot
- diskette.
-
- The commands described below (and throughout the HOWTO) assume that
- the diskettes have been formatted. If not, then use fdformat to format
- the diskettes before continuing.
-
- If the disk is not intended to contain a file system, then the kernel
- can be copied using the dd command, as follows:
-
- dd if=infilename of=devicename
-
- where infilename is the name of the kernel
- and devicename is the diskette raw device,
- usually /dev/fd0
-
- The cp command can also be used:
-
- cp filename devicename
-
- For example:
-
- dd if=zImage of=/dev/fd0
- or
- cp zImage /dev/fd0
-
- The seek parameter to the dd command should NOT be used. The file must
- be copied to start at the boot sector (sector 0, cylinder 0), and
- omitting the seek parameter will do this.
-
- The output device name to be used is usually /dev/fd0 for the primary
- diskette drive (i.e. drive "A:" in DOS), and /dev/fd1 for the
- secondary. These device names will cause the kernel to autodetect the
- attributes of the drives. Drive attributes can be specified to the
- kernel by using other device names: for example /dev/fd0H1440
- specifies a high density 1.44 Mb drive. It is rare to need to use
- these specific device names.
-
- Where the kernel is to be copied to a boot disk containing a
- filesystem, then the disk is mounted at a suitable point in a
- currently-mounted filesystem, then the cp command is used. For
- example:
-
- mount -t ext2 /dev/fd0 /mnt
- cp zImage /mnt
- umount /mnt
-
- Note that for almost all operations in this HOWTO, the user should be
- operating as the superuser.
-
- 2.3. Root
-
- 2.3.1. Overview
-
- A root disk contains a complete working Linux system, but without
- necessarily including a kernel. In other words, the disk may not be
- bootable, but once the kernel is running, the root disk contains
- everything needed to support a full Linux system. To be able to do
- this, the disk must include the minimum requirements for a Linux
- system:
-
- ╖ File system.
-
- ╖ Minimum set of directories - dev, proc, bin, etc, lib, usr, tmp.
-
- ╖ Basic set of utilities - bash (to run a shell), ls, cp etc.
-
- ╖ Minimum set of config files - rc, inittab, fstab etc.
-
- ╖ Runtime library to provide basic functions used by utilities.
-
- Of course, any system only becomes useful when you can run something
- on it, and a root diskette usually only becomes useful when you can do
- something like:
-
- ╖ Check a file system on another drive, for example to check your
- root file system on your hard drive, you need to be able to boot
- Linux from another drive, as you can with a root diskette system.
- Then you can run fsck on your original root drive while it is not
- mounted.
-
- ╖ Restore all or part of your original root drive from backup using
- archive/compression utilities including cpio, tar, gzip and ftape.
-
- 2.4. Boot/Root
-
- This is essentially the same as the root disk, with the addition of a
- kernel and a boot loader such as LILO.
-
- With this configuration, a kernel file is copied to the root file
- system, and LILO is then run to install a configuration which points
- to the kernel file on the target disk. At boot time, LILO will boot
- the kernel from the target disk.
-
- Several files must be copied to the diskette for this method to work.
- Details of these files and the required LILO configuration, including
- a working sample, are given below in the section titled "LILO".
-
- 2.4.1. RAM Disks and Root Filesystems on Diskette
-
- For a diskette root filesystem to be efficient, you need to be able to
- run it from a ramdisk, i.e. an emulated disk drive in main memory.
- This avoids having the system run at a snail's pace, which a diskette
- would impose. The Ftape HOWTO states that a ramdisk will be required
- when using Ftape because Ftape requires exclusive use of the diskette
- controller.
-
- There is an added benefit from using a ramdisk - the Linux kernel
- includes an automatic ramdisk root feature, whereby it will, under
- certain circumstances, automatically copy the contents of a root
- diskette to a ramdisk, and then switch the root drive to be the
- ramdisk instead of the diskette. This has two major benefits:
-
- ╖ The system runs a lot faster.
-
- ╖ The diskette drive is freed up to allow other diskettes to be used
- on a single-diskette drive system.
-
- The requirements for this feature to be invoked are:
-
- ╖ The file system on the diskette drive must be either a minix or an
- ext2 file system. The ext2 file system is generally the preferred
- file system to use. Note that if you have a Linux kernel earlier
- than 1.1.73, then you should see the comments in the section titled
- "File Systems" to see whether your kernel will support ext2. If
- your kernel is old then you may have to use minix. This will not
- cause any significant problems.
-
- ╖ A ramdisk must be configured into the kernel, and it must be at
- least as big as the diskette drive.
-
- A ramdisk can be configured into the kernel in several ways:
-
- ╖ By uncommenting the RAMDISK macro in the Linux kernel makefile, so
- that it reads:
-
- RAMDISK = -DRAMDISK=1440
-
- to define a ramdisk of 1440 1K blocks, the size of a high-density
- diskette.
-
- ╖ By running the rdev utility, available on most Linux systems. This
- utility displays or sets values for several things in the kernel,
- including the desired size for a ramdisk. To configure a ramdisk of
- 1440 blocks into a kernel in a file named zImage, enter:
- rdev -r zImage 1440
-
- this might change in the future, of course. To see what your version
- of rdev does, enter the command:
-
- rdev -h
-
- and it should display its options.
-
- ╖ By using the boot loader package LILO to configure it into your
- kernel at boot time. This can be done using the LILO configuration
- parameter:
-
- ramdisk = 1440
-
- to request a ramdisk of 1440 1K blocks at boot time.
-
- ╖ By interrupting a LILO automatic boot and adding ramdisk=1440 to
- the command line. For example, such a command line might be:
-
- zImage ramdisk=1440
-
- See the section on LILO for more details.
-
- ╖ By editing the kernel file and altering the values near the start
- of the file which record the ramdisk size. This is definitely a
- last resort, but can be done. See the FAQ near the end of this
- document for more details.
-
- The easiest of these methods is LILO configuration, because you need
- to set up a LILO configuration file anyway, so why not add the ramdisk
- size here?
-
- LILO configuration is briefly described in a section titled "LILO"
- below, but it is advisable to obtain the latest stable version of LILO
- from your nearest Linux mirror site, and read the documentation that
- comes with it.
-
- Ramdisks can be made larger than the size of a diskette, and made to
- contain a filesystem as large as the ramdisk. This can be useful to
- load all the software required for rescue work onto a single high-
- performance ramdisk. The method of doing this is described in the FAQ
- section under the question "How can I create an oversize ramdisk
- filesystem?"
-
- 2.5. Utility
-
- Often one disk is not sufficient to hold all the software you need to
- be able to perform rescue functions of analysing, repairing and
- restoring corrupted disk drives. By the time you include tar, gzip
- e2fsck, fdisk, Ftape and so on, there is enough for a whole new
- diskette, maybe even more if you want lots of tools.
-
- This means that a rescue set often requires a utility diskette, with a
- file system containing any extra files required. This file system can
- then be mounted at a convenient point, such as /usr, on the boot/root
- system.
-
- Creating a file system is fairly easy, and is described in the section
- titled "File Systems".
-
- 3. Components
-
- 3.1. File Systems
-
- The Linux kernel now supports two file system types for root disks to
- be automatically copied to ramdisk. These are minix and ext2, of which
- ext2 is the preferred file system. The ext2 support was added
- sometime between 1.1.17 and 1.1.57, I'm not sure exactly which. If you
- have a kernel within this range then edit
- /usr/src/linux/drivers/block/ramdisk.c and look for the word "ext2".
- If it is not found, then you will have to use a minix file system, and
- therefore the "mkfs" command to create it. (If using mkfs, use the -i
- option to specify more inodes than the default; -i 2000 is suggested).
-
- To create an ext2 file system on a diskette on my system, I issue the
- following command:
-
- mke2fs -m 0 /dev/fd0
-
- The mke2fs command will automatically detect the space available and
- configure itself accordingly. If desired, the diskette size in 1Kb
- blocks can be specified to speed up mke2fs operation. The -m 0
- parameter prevents it from reserving space for root, and hence
- provides more usable space on the disk.
-
- An easy way to test the result is to create a system using the above
- command or similar, and then attempt to mount the diskette. If it is
- an ext2 system, then the command:
-
- mount -t ext2 /dev/fd0 /<mount point>
-
- should work.
-
- 3.2. Kernel
-
- 3.2.1. Building a Custom Kernel
-
- In most cases it would be possible to copy your current kernel and
- boot the diskette from that. However there may be cases where you wish
- to build a separate one.
-
- One reason is size. The kernel is one of the largest files in a
- minimum system, so if you want to build a boot/root diskette, then you
- will have to reduce the size of the kernel as much as possible. The
- kernel now supports changing the diskette after booting and before
- mounting root, so it is not necessary any more to squeeze the kernel
- into the same disk as everything else, therefore these comments apply
- only if you choose to build a boot/root diskette.
-
- There are two ways of reducing kernel size:
-
- ╖ Building it with the minumum set of facilities necessary to support
- the desired system. This means leaving out everything you don't
- need. Networking is a good thing to leave out, as well as support
- for any disk drives and other devices which you don't need when
- running your boot/root system.
-
- ╖ Compressing it, using the standard compressed-kernel option
- included in the makefile:
-
- make zImage
-
- Refer to the documentation included with the kernel source for up-to-
- date information on building compressed kernels. Note that the kernel
- source is usually in /usr/src/linux.
-
- Having worked out a minimum set of facilities to include in a kernel,
- you then need to work out what to add back in. Probably the most
- common uses for a boot/root diskette system would be to examine and
- restore a corrupted root file system, and to do this you may need
- kernel support.
-
- For example, if your backups are all held on tape using Ftape to
- access your tape drive, then, if you lose your current root drive and
- drives containing Ftape, then you will not be able to restore from
- your backup tapes. You will have to reinstall Linux, download and
- reinstall Ftape, and then try and read your backups.
-
- It is probably desirable to maintain a copy of the same version of
- backup utilities used to write the backups, so that you don't waste
- time trying to install versions that cannot read your backup tapes.
-
- The point here is that, whatever I/O support you have added to your
- kernel to support backups should also be added into your boot/root
- kernel.
-
- The procedure for actually building the kernel is described in the
- documentation that comes with the kernel. It is quite easy to follow,
- so start by looking in /usr/src/linux. Note that if you have trouble
- building a kernel, then you should probably not attempt to build
- boot/root systems anyway.
-
- 3.3. Devices
-
- A /dev directory containing a special file for all devices to be used
- by the system is mandatory for any Linux system. The directory itself
- is a normal directory, and can be created with the mkdir command in
- the normal way. The device special files, however, must be created in
- a special way, using the mknod command.
-
- There is a shortcut, though - copy your existing /dev directory
- contents, and delete the ones you don't want. The only requirement is
- that you copy the device special files using the -R option. This will
- copy the directory without attempting to copy the contents of the
- files. Note that if you use lower caser, as in "-r", there will be a
- vast difference, because you will probably end up copying the entire
- contents of all of your hard disks - or at least as much of them as
- will fit on a diskette! Therefore, take care, and use the command:
-
- cp -dpR /dev /mnt
-
- assuming that the diskette is mounted at /mnt. The dp switches ensure
- that symbolic links are copied as links (rather than the target file
- being copied) and that the original file attributes are preserved,
- thus preserving ownership information.
-
- If you want to do it the hard way, use ls -l to display the major and
- minor device numbers for the devices you want, and create them on the
- diskette using mknod.
-
- Many distributions include a shell script called MAKEDEV in the /dev
- directory. This shell script could be used to create the devices, but
- it is probably easier to just copy your existing ones, especially for
- rescue disk purposes.
-
- Whichever way the device directory is copied, it is worth checking
- that any special devices you need have been placed on the rescue
- diskette. For example, Ftape uses tape devices, so you will need to
- copy all of these.
-
- 3.4. Directories
-
- It might be possible to get away with just /dev, /proc and /etc to run
- a Linux system. I don't know - I've never tested it. However a
- reasonable minimum set of directories consists of the following:
-
- /dev
- Required to perform I/O with devices
-
- /proc
- Required by the ps command
-
- /etc
- System configuration files
-
- /bin
- Utility executables considered part of the system
-
- /lib
- Shared libraries to provide run-time support
-
- /mnt
- A mount point for maintenance on other disks
-
- /usr
- Additional utilities and applications
-
- Note that the directory tree presented here is for root diskette use
- only. Refer to the Linux File System Standard for much better
- information on how file systems should be structured in "standard"
- Linux systems.
-
- Four of these directories can be created very easily:
-
- ╖ /dev is described above in the section titled DEVICES.
-
- ╖ /proc only needs to exist. Once the directory is created using
- mkdir, nothing more is required.
-
- ╖ Of the others, /mnt and /usr are included in this list only as
- mount points for use after the boot/root system is running. Hence
- again, these directories only need to be created.
-
- The remaining 3 directories are described in the following sections.
-
- 3.4.1. /etc
-
- This directory must contain a number of configuration files. On most
- systems, these can be divided into 3 groups:
-
- ╖ Required at all times, e.g. rc, fstab, passwd.
-
- ╖ May be required, but no-one is too sure.
-
- ╖ Junk that crept in.
-
- Files which are not essential can be identified with the command:
-
- ls -ltru
-
- This lists files in reverse order of date last accessed, so if any
- files are not being accessed, then they can be omitted from a root
- diskette.
-
- On my root diskettes, I have the number of config files down to 15.
- This reduces my work to dealing with three sets of files:
-
- ╖ The ones I must configure for a boot/root system:
-
- rc system startup script
- fstab list of file systems to be mounted
- inittab parameters for the init process - the
- first process started at boot time.
-
- ╖ the ones I should tidy up for a boot/root system:
-
- passwd list of logins
- shadow contains passwords
-
- These should be pruned on secure systems to avoid copying user's pass¡
- words off the system, and so that when you boot from diskette,
- unwanted logins are rejected.
-
- ╖ The rest. They work at the moment, so I leave them alone.
-
- Out of this, I only really have to configure two files, and what they
- should contain is suprisingly small.
-
- ╖ rc should contain:
-
- #!/bin/sh
- /etc/mount -av
- /bin/hostname boot_root
-
- and I don't really need to run hostname - it just looks nicer if I do.
- Even mount is actually only needed to mount /proc to support the ps
- command - Linux will run without it.
-
- ╖ fstab should contain:
-
- /dev/fd0 / ext2 defaults
- /proc /proc proc defaults
-
- I don't think that the first entry is really needed, but I find that
- if I leave it out, mount won't mount /proc.
-
- Inittab should be ok as is, unless you want to ensure that users on
- serial ports cannot login. To prevent this, comment out all the
- entries for /etc/getty which include a ttys or ttyS device at the end
- of the line. Leave in the tty ports so that you can login at the
- console.
-
- Inittab defines what the system will run or rerun in various states
- including startup, move to multi-user mode, powerfail, and others. A
- point to be careful of here is to carefully check that the commands
- entered in inittab refer to programs which are present and to the
- correct directory. If you place your command files on your rescue disk
- using the sample directory listing in this HOWTO as a guide, and then
- copy your inittab to your rescue disk without checking it, then the
- probability of failure will be quite high, because half of the inittab
- entries will refer to missing programs or to the wrong directory.
-
- It is worth noting here as well that some programs cannot be moved
- from one directory to another or they will fail at runtime because
- they have hardcoded the name of another program which they attempt to
- run. For example on my system, /etc/shutdown has hardcoded in it
- /etc/reboot. If I move reboot to /bin/reboot, and then issue a
- shutdown command, it will fail because it can't find the reboot file.
-
- For the rest, just copy all the text files in your /etc directory,
- plus all the executables in your /etc directory that you cannot be
- sure you do not need. As a guide, consult the sample ls listing in
- "Sample Boot/Root ls-lR Directory Listing" - this is what I have, so
- probably it will be sufficient for you if you copy only those files.
-
- In practice, a single rc file is restrictive; most systems now use an
- /etc/rc.d directory containing shell scripts for different run levels.
- The absolute minimum is a single rc script, but it will probably be a
- lot simpler in practice to copy the inittab and /etc/rc.d directory
- from your existing system, and prune the shell scripts in the rc.d
- directory to remove processing not relevent to a diskette system
- environment.
-
- 3.4.2. /bin
-
- Here is a convenient point to place the extra utilities you need to
- perform basic operations, utilities such as ls, mv, cat, dd etc.
-
- See the section titled "Sample Boot/Root ls-lR Directory Listing" for
- the list of files that I place in my boot/root /bin directory. You may
- notice that it does not include any of the utilities required to
- restore from backup, such as cpio, tar, gzip etc. That is because I
- place these on a separate utility diskette, to save space on the
- boot/root diskette. Once I have booted my boot/root diskette, it then
- copies itself to the ramdisk leaving the diskette drive free to mount
- another diskette, the utility diskette. I usually mount this as /usr.
-
- Creation of a utility diskette is described below in the section
- titled "Adding Utility Diskettes".
-
- 3.4.3. /lib
-
- Two libraries are required to run many facilities under Linux:
-
- ╖ ld.so
-
- ╖ libc.so.4
-
- If they are not found in your /lib directory then the system will be
- unable to boot. If you're lucky you may see an error message telling
- you why.
-
- These should be present in you existing /lib directory. Note that
- libc.so.4 may be a symlink to a libc library with version number in
- the filename. If you issue the command:
-
- ls -l /lib
-
- you will see something like:
-
- libc.so.4 -> libc.so.4.5.21
-
- In this case, the libc library you want is libc.so.4.5.21.
-
- 3.5. LILO
-
- 3.5.1. Overview
-
- For the boot/root to be any use, it must be bootable. To achieve this,
- the easiest way is to install a boot loader, which is a piece of
- executable code stored at sector 0, cylinder 0 of the diskette. See
- the section above titled "BOOT DISKETTE" for an overview of the boot
- process.
-
- LILO is a tried and trusted boot loader available from any Linux
- mirror site. It allows you to configure the boot loader, including:
-
- ╖ Which device is to be mounted as the root drive.
-
- ╖ Whether to use a ramdisk.
-
- 3.5.2. Sample LILO Configuration
-
- This provides a very convenient place to specify to the kernel how it
- should boot. My root/boot LILO configuration file, used with LILO
- 0.15, is:
-
- ______________________________________________________________________
- boot = /dev/fd0
- install = ./mnt/boot.b
- map = ./mnt/lilo.map
- delay = 50
- message = ./mnt/lilo.msg
- timeout = 150
- compact
- image = ./mnt/zImage
- ramdisk = 1440
- root = /dev/fd0
- ______________________________________________________________________
-
- Note that boot.b, lilo.msg and the kernel must first have been copied
- to the diskette using a command similar to:
-
- ______________________________________________________________________
- cp /boot/boot.b ./mnt
- ______________________________________________________________________
-
- If this is not done, then LILO will not run correctly at boot time if
- the hard disk is not available, and there is little point setting up a
- rescue disk which requires a hard disk in order to boot.
-
- I run lilo using the command:
-
- /sbin/lilo -C <configfile>
-
- I run it from the directory containing the mnt directory where I have
- mounted the diskette. This means that I am telling LILO to install a
- boot loader on the boot device (/dev/fd0 in this case), to boot a
- kernel in the root directory of the diskette.
-
- I have also specified that I want the root device to be the diskette,
- and I want a ramdisk created of 1440 1K blocks, the same size as the
- diskette. Since I have created an ext2 file system on the diskette,
- this completes all the conditions required for Linux to automatically
- switch the root device to the ramdisk, and copy the diskette contents
- there as well.
-
- The ramdisk features of Linux are described further in the section
- above titled "RAM DISKS AND BOOT/ROOT SYSTEMS".
-
- It is also worth considering using the "single" parameter to cause
- Linux to boot in single-user mode. This could be useful to prevent
- users logging in on serial ports.
-
- I also use the "DELAY" "MESSAGE" and "TIMEOUT" statements so that when
- I boot the disk, LILO will give me the opportunity to enter command
- line options if I wish. I don't need them at present, but I never know
- when I might want to set a different root device or mount a filesystem
- read-only.
-
- The message file I use contains the message:
-
- Linux Boot/Root Diskette
- ========================
-
- Enter a command line of the form:
-
- zImage [ command-line options]
-
- If nothing is entered, linux will be loaded with
- defaults after 15 seconds.
-
- This is simply a reminder to myself what my choices are.
-
- Readers are urged to read the LILO documentation carefully before
- atttempting to install anything. It is relatively easy to destroy
- partitions if you use the wrong "boot = " parameter. If you are
- inexperienced, do NOT run LILO until you are sure you understand it
- and you have triple-checked your parameters.
-
- Note that you must re-run LILO every time you change the kernel, so
- that LILO can set up its map file to correctly describe the new kernel
- file. It is in fact possible to replace the kernel file with one which
- is almost identical without rerunning LILO, but it is far better not
- to gamble - if you change the kernel, re-run LILO.
-
- 3.5.3. Removing LILO
-
- One other thing I might as well add here while I'm on the LILO topic:
- if you mess up lilo on a drive containing DOS, you can always replace
- the boot sector with the DOS boot loader by issuing the DOS command:
-
- FDISK /MBR
-
- where MBR stands for "Master Boot Record". Note that some purists
- disagree with this, and they may have grounds, but it works.
-
- 3.5.4. Useful LILO Options
-
- LILO has several useful options which are worth keeping in mind when
- building boot disks:
-
- ╖ Command line options - you can enter command line options to set
- the root device, ramdisk size, special device parameters, or other
- things. If you include the DELAY = nn statement in your LILO
- configuration file, then LILO will pause to allow you to select a
- kernel image to boot, and to enter, on the same line, any options.
- For example:
-
- zImage aha152x=0x340,11,3,1 ro
-
- will pass the aha152x parameters through to the aha152x scsi disk
- driver (provided that driver has been included when the kernel was
- built) and will ask for the root filesystem to be mounted read-only.
-
- ╖ Command line "lock" option - this option asks LILO to store the
- command line entered as the default command line to be used for all
- future boots. This is particularly useful where you have a device
- which cannot be autoselected. By using "lock" you can avoid having
- to type in the device parameter string every time you boot. For
- example:
-
- zImage aha152x=0x340,11,3,1 root=/dev/sda8 ro lock
-
- ╖ APPEND configuration statement - this allows device parameter
- strings to be stored in the configuration, as an alternative to
- using the "lock" command line option. Note that any keywords of the
- form word=value MUST be enclosed in quotes. For example:
-
- APPEND = "aha152x=0x340,11,3,1"
-
- ╖ DELAY configuration statement - this pauses for DELAY tenths of
- seconds and allows the user to interrupt the automatic boot of the
- default command line, so that the user can enter an alternate
- command line.
-
- 4. Samples
-
- 4.1. Disk Directory Listings
-
- This lists the contents of directories from my root and utility
- diskettes. These lists are provided as an example only of the files
- included to create a working system. The disks were created using the
- Bootkit package, which copies to diskette only those files that you
- want copied.
-
- 4.1.1. Root Disk ls-lR Directory Listing
-
- The root listing is of a diskette mounted at /mnt.
-
- total 27
- drwx------ 2 root root 1024 Jun 11 23:23 bin/
- drwxr-xr-x 2 root root 3072 Jun 11 23:24 dev/
- drwxr-xr-x 3 root root 1024 May 30 06:38 etc/
- drwxr-xr-x 2 root root 1024 Jun 11 23:24 home/
- drwxr-xr-x 2 root root 1024 Jun 11 23:24 lib/
- drwxr-xr-x 2 root root 12288 Jun 11 23:23 lost+found/
- drwxr-xr-x 2 root root 1024 Jun 11 23:24 mnt/
- drwxr-xr-x 2 root root 1024 Jun 11 23:24 proc/
- drwxr-xr-x 2 root root 1024 May 30 05:56 root/
- drwxr-xr-x 2 root root 1024 Jun 3 23:39 sbin/
- drwxr-xr-x 2 root root 1024 Jun 11 23:24 tmp/
- drwxr-xr-x 3 root root 1024 May 30 05:48 usr/
- drwxr-xr-x 2 root root 1024 Jun 11 23:24 util/
- drwxr-xr-x 5 root root 1024 May 30 05:58 var/
-
- /mnt/bin:
- total 664
- -rwxr-xr-x 1 root root 222208 Sep 7 1992 bash*
- -rwxr-xr-x 1 root other 4376 Sep 8 1992 cat*
- -rwxr-xr-x 1 root other 5088 Sep 4 1992 chmod*
- -rwxr-xr-x 1 root other 4024 Sep 4 1992 chown*
- -rwxr-xr-x 1 root other 12104 Sep 4 1992 cp*
- -rwxr-xr-x 1 root other 4376 Sep 5 1992 cut*
- -rwxr-xr-x 1 root other 7592 Sep 4 1992 dd*
- -rwxr-xr-x 1 root other 4656 Sep 4 1992 df*
- -rwxr-xr-x 1 root root 37892 May 5 1994 e2fsck*
- -rwx--x--x 1 root root 14396 Sep 20 1992 fdisk*
- -r-x--x--x 1 bin bin 3536 Feb 19 19:14 hostname*
- -rwxr-xr-x 1 root other 5292 Sep 4 1992 ln*
- -rws--x--x 1 root root 24352 Jan 16 1993 login*
- -rwxr-xr-x 1 root other 4104 Sep 4 1992 mkdir*
- -rwxr-xr-x 1 root root 21508 May 5 1994 mke2fs*
- -rwxr-xr-x 1 root other 3336 Sep 4 1992 mknod*
- -rwx--x--x 1 root root 2432 Sep 20 1992 mkswap*
- -rwxr-xr-x 1 root root 9596 Jun 10 22:12 mount*
- -rwxr-xr-x 1 root other 6724 Sep 4 1992 mv*
- -rwxr-xr-x 1 root root 11132 Apr 10 1993 ps*
- -rwxr-xr-x 1 root other 5056 Sep 4 1992 rm*
- -rwxr-xr-x 1 root root 222208 Sep 7 1992 sh*
- -rws--x--x 1 root root 16464 Jan 16 1993 su*
- -rwxr-xr-x 1 root root 1204 Sep 17 1992 sync*
- -rwxr-xr-x 1 root root 6188 Apr 17 1993 umount*
-
- /mnt/dev:
- total 72
- -rwxr-xr-x 1 root root 8331 Mar 14 1993 MAKEDEV*
- lrwxrwxrwx 1 root root 4 Jun 11 23:24 console -> tty0
- crw-rw-rw- 1 root tty 5, 64 Apr 1 1993 cua0
- crw-rw-rw- 1 root tty 5, 65 Mar 19 19:35 cua1
- crw-rw-rw- 1 root tty 5, 66 Apr 10 1993 cua2
- crw-rw-rw- 1 root tty 5, 67 Apr 10 1993 cua3
- brw-r--r-- 1 root root 2, 0 Aug 29 1992 fd0
- brw-r--r-- 1 root root 2, 12 Aug 29 1992 fd0D360
- brw-r--r-- 1 root root 2, 16 Aug 29 1992 fd0D720
- brw-r--r-- 1 root root 2, 28 Aug 29 1992 fd0H1440
- brw-r--r-- 1 root root 2, 12 Aug 29 1992 fd0H360
- brw-r--r-- 1 root root 2, 16 Aug 29 1992 fd0H720
- brw-r--r-- 1 root root 2, 4 Aug 29 1992 fd0d360
- brw-r--r-- 1 root root 2, 8 Jan 15 1993 fd0h1200
- brw-r--r-- 1 root root 2, 20 Aug 29 1992 fd0h360
- brw-r--r-- 1 root root 2, 24 Aug 29 1992 fd0h720
- brw-r--r-- 1 root root 2, 1 Aug 29 1992 fd1
- brw-r--r-- 1 root root 2, 13 Aug 29 1992 fd1D360
- brw-r--r-- 1 root root 2, 17 Aug 29 1992 fd1D720
- brw-r--r-- 1 root root 2, 29 Aug 29 1992 fd1H1440
- brw-r--r-- 1 root root 2, 13 Aug 29 1992 fd1H360
- brw-r--r-- 1 root root 2, 17 Aug 29 1992 fd1H720
- brw-r--r-- 1 root root 2, 5 Aug 29 1992 fd1d360
- brw-r--r-- 1 root root 2, 9 Aug 29 1992 fd1h1200
- brw-r--r-- 1 root root 2, 21 Aug 29 1992 fd1h360
- brw-r--r-- 1 root root 2, 25 Aug 29 1992 fd1h720
- brw-r----- 1 root root 3, 0 Aug 29 1992 hda
- brw-r----- 1 root root 3, 1 Aug 29 1992 hda1
- brw-r----- 1 root root 3, 2 Aug 29 1992 hda2
- brw-r----- 1 root root 3, 3 Aug 29 1992 hda3
- brw-r----- 1 root root 3, 4 Aug 29 1992 hda4
- brw-r----- 1 root root 3, 5 Aug 29 1992 hda5
- brw-r----- 1 root root 3, 6 Aug 29 1992 hda6
- brw-r----- 1 root root 3, 7 Aug 29 1992 hda7
- brw-r----- 1 root root 3, 8 Aug 29 1992 hda8
- brw-r----- 1 root root 3, 64 Aug 29 1992 hdb
- brw-r----- 1 root root 3, 65 Aug 29 1992 hdb1
- brw-r----- 1 root root 3, 66 Aug 29 1992 hdb2
- brw-r----- 1 root root 3, 67 Aug 29 1992 hdb3
- brw-r----- 1 root root 3, 68 Aug 29 1992 hdb4
- brw-r----- 1 root root 3, 69 Aug 29 1992 hdb5
- brw-r----- 1 root root 3, 70 Aug 29 1992 hdb6
- brw-r----- 1 root root 3, 71 Aug 29 1992 hdb7
- brw-r----- 1 root root 3, 72 Aug 29 1992 hdb8
- crw-r----- 1 root kmem 1, 2 Aug 29 1992 kmem
- crw-rw-rw- 1 root root 6, 0 Aug 29 1992 lp0
- crw-rw-rw- 1 root root 6, 1 Aug 29 1992 lp1
- crw-rw-rw- 1 root root 6, 2 Aug 29 1992 lp2
- crw-r----- 1 root sys 1, 1 Aug 29 1992 mem
- lrwxrwxrwx 1 root root 4 Jun 11 23:24 mouse -> cua1
- crw-rw-rw- 1 root root 27, 4 Jul 31 1994 nrft0
- crw-rw-rw- 1 root root 27, 5 Jul 31 1994 nrft1
- crw-rw-rw- 1 root root 27, 6 Jul 31 1994 nrft2
- crw-rw-rw- 1 root root 27, 7 Jul 31 1994 nrft3
- crw------- 1 root root 9, 128 Jan 23 1993 nrmt0
- crw-rw-rw- 1 root root 1, 3 Aug 29 1992 null
- crw-r----- 1 root root 6, 0 Aug 29 1992 par0
- crw-r----- 1 root root 6, 1 Aug 29 1992 par1
- crw-r----- 1 root root 6, 2 Aug 29 1992 par2
- crw-r----- 1 root root 1, 4 Aug 29 1992 port
- crw-rw-rw- 1 root root 4, 128 Jun 10 00:10 ptyp0
- crw-rw-rw- 1 root root 4, 129 Apr 10 14:51 ptyp1
- crw-rw-rw- 1 root root 4, 130 Aug 21 1994 ptyp2
- crw-rw-rw- 1 root root 4, 131 Apr 12 1993 ptyp3
- crw-rw-rw- 1 root tty 4, 132 Jan 3 1993 ptyp4
- crw-rw-rw- 1 root tty 4, 133 Jan 3 1993 ptyp5
- crw-rw-rw- 1 root tty 4, 134 Jan 3 1993 ptyp6
- crw-rw-rw- 1 root tty 4, 135 Jan 3 1993 ptyp7
- crw-rw-rw- 1 root tty 4, 136 Jan 3 1993 ptyp8
- crw-rw-rw- 1 root tty 4, 137 Jan 3 1993 ptyp9
- crw-rw-rw- 1 root tty 4, 138 Jan 3 1993 ptypa
- crw-rw-rw- 1 root tty 4, 139 Jan 3 1993 ptypb
- crw-rw-rw- 1 root tty 4, 140 Jan 3 1993 ptypc
- crw-rw-rw- 1 root tty 4, 141 Jan 3 1993 ptypd
- crw-rw-rw- 1 root tty 4, 142 Jan 3 1993 ptype
- crw-rw-rw- 1 root tty 4, 143 Jan 3 1993 ptypf
- brw-rw---- 1 root root 1, 0 Jun 8 18:49 ram
- crw-rw-rw- 1 root root 27, 0 Jul 31 1994 rft0
- crw-rw-rw- 1 root root 27, 1 Jul 31 1994 rft1
- crw-rw-rw- 1 root root 27, 2 Jul 31 1994 rft2
- crw-rw-rw- 1 root root 27, 3 Jul 31 1994 rft3
- crw------- 1 root root 9, 0 Jan 23 1993 rmt0
- brw-r----- 1 root root 8, 0 Aug 29 1992 sda
- brw-r----- 1 root root 8, 1 Aug 29 1992 sda1
- brw-r----- 1 root root 8, 2 Aug 29 1992 sda2
- brw-r----- 1 root root 8, 3 Aug 29 1992 sda3
- brw-r----- 1 root root 8, 4 Aug 29 1992 sda4
- brw-r----- 1 root root 8, 5 Aug 29 1992 sda5
- brw-r----- 1 root root 8, 6 Aug 29 1992 sda6
- brw-r----- 1 root root 8, 7 Aug 29 1992 sda7
- brw-r----- 1 root root 8, 8 Aug 29 1992 sda8
- brw-r----- 1 root root 8, 16 Aug 29 1992 sdb
- brw-r----- 1 root root 8, 17 Aug 29 1992 sdb1
- brw-r----- 1 root root 8, 18 Aug 29 1992 sdb2
- brw-r----- 1 root root 8, 19 Aug 29 1992 sdb3
- brw-r----- 1 root root 8, 20 Aug 29 1992 sdb4
- brw-r----- 1 root root 8, 21 Aug 29 1992 sdb5
- brw-r----- 1 root root 8, 22 Aug 29 1992 sdb6
- brw-r----- 1 root root 8, 23 Aug 29 1992 sdb7
- brw-r----- 1 root root 8, 24 Aug 29 1992 sdb8
- brw------- 1 bin bin 8, 32 Jun 30 1992 sdc
- brw------- 1 bin bin 8, 33 Jun 30 1992 sdc1
- brw------- 1 bin bin 8, 34 Jun 30 1992 sdc2
- brw------- 1 bin bin 8, 35 Jun 30 1992 sdc3
- brw------- 1 bin bin 8, 36 Jun 30 1992 sdc4
- brw------- 1 bin bin 8, 37 Jun 30 1992 sdc5
- brw------- 1 bin bin 8, 38 Jun 30 1992 sdc6
- brw------- 1 bin bin 8, 39 Jun 30 1992 sdc7
- brw------- 1 bin bin 8, 40 Jun 30 1992 sdc8
- brw------- 1 bin bin 8, 48 Jun 30 1992 sdd
- brw------- 1 bin bin 8, 49 Jun 30 1992 sdd1
- brw------- 1 bin bin 8, 50 Jun 30 1992 sdd2
- brw------- 1 bin bin 8, 51 Jun 30 1992 sdd3
- brw------- 1 bin bin 8, 52 Jun 30 1992 sdd4
- brw------- 1 bin bin 8, 53 Jun 30 1992 sdd5
- brw------- 1 bin bin 8, 54 Jun 30 1992 sdd6
- brw------- 1 bin bin 8, 55 Jun 30 1992 sdd7
- brw------- 1 bin bin 8, 56 Jun 30 1992 sdd8
- brw------- 1 bin bin 8, 64 Jun 30 1992 sde
- brw------- 1 bin bin 8, 65 Jun 30 1992 sde1
- brw------- 1 bin bin 8, 66 Jun 30 1992 sde2
- brw------- 1 bin bin 8, 67 Jun 30 1992 sde3
- brw------- 1 bin bin 8, 68 Jun 30 1992 sde4
- brw------- 1 bin bin 8, 69 Jun 30 1992 sde5
- brw------- 1 bin bin 8, 70 Jun 30 1992 sde6
- brw------- 1 bin bin 8, 71 Jun 30 1992 sde7
- brw------- 1 bin bin 8, 72 Jun 30 1992 sde8
- crw-rw-rw- 1 root root 5, 0 Apr 16 1994 tty
- crw-rw-rw- 1 grahamc other 4, 0 Jun 11 23:21 tty0
- crw--w--w- 1 root root 4, 1 Jun 11 23:23 tty1
- crw-rw-rw- 1 root root 4, 2 Jun 11 23:21 tty2
- crw-rw-rw- 1 root root 4, 3 Jun 11 23:21 tty3
- crw-rw-rw- 1 root other 4, 4 Jun 11 23:21 tty4
- crw-rw-rw- 1 root other 4, 5 Jun 11 23:21 tty5
- crw-rw-rw- 1 root root 4, 6 Jun 11 23:21 tty6
- crw--w--w- 1 grahamc other 4, 7 Apr 15 1993 tty7
- crw--w--w- 1 root root 4, 8 Apr 15 1993 tty8
- crw-rw-rw- 1 root root 4, 64 Mar 30 1993 ttyS0
- crw-rw-rw- 1 root users 4, 65 Mar 31 1993 ttyS1
- crw-rw-rw- 1 root root 4, 66 Jan 23 1980 ttyS2
- crw-rw-rw- 1 root root 4, 192 Jun 10 00:10 ttyp0
- crw-rw-rw- 1 root root 4, 193 Apr 10 14:51 ttyp1
- crw-rw-rw- 1 root root 4, 194 Aug 21 1994 ttyp2
- crw-rw-rw- 1 root root 4, 195 Apr 12 1993 ttyp3
- crw-rw-rw- 1 root tty 4, 196 Jan 3 1993 ttyp4
- crw-rw-rw- 1 root tty 4, 197 Jan 3 1993 ttyp5
- crw-rw-rw- 1 root tty 4, 198 Jan 3 1993 ttyp6
- crw-rw-rw- 1 root tty 4, 199 Jan 3 1993 ttyp7
- crw-rw-rw- 1 root tty 4, 200 Jan 3 1993 ttyp8
- crw-rw-rw- 1 root tty 4, 201 Jan 3 1993 ttyp9
- crw-rw-rw- 1 root tty 4, 202 Jan 3 1993 ttypa
- crw-rw-rw- 1 root tty 4, 203 Jan 3 1993 ttypb
- crw-rw-rw- 1 root tty 4, 204 Jan 3 1993 ttypc
- crw-rw-rw- 1 root tty 4, 205 Jan 3 1993 ttypd
- crw-rw-rw- 1 root tty 4, 206 Jan 3 1993 ttype
- crw-rw-rw- 1 root tty 4, 207 Jan 3 1993 ttypf
- -rw------- 1 root root 63488 Mar 14 1993 ttys0
- crw-rw-rw- 1 root root 4, 67 Oct 14 1992 ttys3
- crw-r--r-- 1 root root 1, 5 Aug 29 1992 zero
-
- /mnt/etc:
- total 108
- -rw-r--r-- 1 root root 94 May 30 06:15 fstab
- -rwx------ 1 root root 25604 Mar 17 1993 getty*
- -rw------- 1 root root 566 Dec 30 1992 gettydefs
- -rw-rw-r-- 1 root shadow 321 Oct 3 1994 group
- -rwxr-xr-x 1 bin bin 9220 Mar 17 1993 halt*
- -rw-r--r-- 1 root root 26 Feb 19 19:07 host.conf
- -rw-r--r-- 1 root root 506 Feb 19 19:07 hosts
- -rwxr-xr-x 1 bin bin 17412 Mar 17 1993 init*
- -rw-r--r-- 1 root root 1354 Jun 3 23:42 inittab
- -rwxr-xr-x 1 root root 1478 Mar 17 18:29 issue*
- -rw-rw---- 1 root shadow 5137 Dec 4 1992 login.defs
- -rw-r--r-- 1 sysadmin bin 42 Mar 17 18:30 motd
- -rw-r--r-- 1 root shadow 525 Jun 11 23:24 passwd
- -rwxr-xr-x 1 root root 1476 Aug 17 1994 profile*
- -rw-r--r-- 1 root root 715 Feb 19 19:02 protocols
- drwxr-xr-x 2 root root 1024 May 30 06:05 rc.d/
- -rwxr-xr-x 1 bin bin 9220 Mar 17 1993 reboot*
- -r--r--r-- 1 bin bin 57 Nov 28 1992 securetty
- -rw-r--r-- 1 root root 3316 Feb 19 19:01 services
- -rwxr-xr-x 1 bin bin 13316 Mar 17 1993 shutdown*
- -rwxr-xr-x 1 root root 3212 Apr 17 1993 swapoff*
- -rwxr-xr-x 1 root root 3212 Apr 17 1993 swapon*
- -rw-r--r-- 1 root root 817 Jun 11 23:23 termcap
- -rwxr-xr-x 1 root root 6188 Apr 17 1993 umount*
- -rw-r--r-- 1 root root 12264 Jun 11 23:22 utmp
- -rw-r--r-- 1 root root 56 Jun 11 23:22 wtmp
-
- /mnt/etc/rc.d:
- total 4
- -rwxr-xr-- 1 root root 450 May 30 06:05 rc.0*
- -rwxr-xr-- 1 root root 390 May 30 06:05 rc.K*
- -rwxr-xr-- 1 root root 683 May 30 06:06 rc.M*
- -rwxr-xr-- 1 root root 498 Jun 11 18:44 rc.S*
-
- /mnt/home:
- total 0
-
- /mnt/lib:
- total 287
- -rwxr-xr-x 1 root root 17412 Jun 11 23:24 ld.so*
- lrwxrwxrwx 1 root root 14 Jun 11 23:24 libc.so.4 -> libc.so.4.5.21*
- -rwxr-xr-x 1 root root 623620 May 22 1994 libc.so.4.5.21*
-
- /mnt/lost+found:
- total 0
-
- /mnt/mnt:
- total 0
-
- /mnt/proc:
- total 0
-
- /mnt/root:
- total 0
-
- /mnt/sbin:
- total 15
- -rwxr-xr-x 1 root root 16885 Jun 13 1994 update*
-
- /mnt/tmp:
- total 0
-
- /mnt/usr:
- total 1
- drwxr-xr-x 2 root root 1024 May 30 05:49 bin/
-
- /mnt/usr/bin:
- total 217
- -rwxr-xr-x 1 root root 1560 Sep 17 1992 basename*
- -rws--x--x 1 root root 8232 Jan 16 1993 chsh*
- -rwxr-xr-x 1 root root 1308 Jan 23 1980 clear*
- -rwxr-xr-x 1 root other 91136 Sep 4 1992 elvis*
- -rwxr-xr-x 1 root root 13252 Sep 17 1992 ls*
- -rwxr-xr-x 1 bin bin 21504 Oct 2 1992 more*
- -rwxr-xr-x 1 root other 91136 Sep 4 1992 vi*
-
- /mnt/util:
- total 0
-
- /mnt/var:
- total 3
- drwxr-xr-x 2 root root 1024 May 30 05:58 adm/
- drwxr-xr-x 2 root root 1024 Jun 11 23:24 logs/
- drwxr-xr-x 2 root root 1024 Jun 11 23:24 run/
-
- /mnt/var/adm:
- total 0
- -rw-r--r-- 1 root root 0 May 30 05:58 utmp
- -rw-r--r-- 1 root root 0 May 30 05:58 wtmp
-
- /mnt/var/logs:
- total 0
-
- /mnt/var/run:
- total 0
-
- 4.1.2. Utility Disk ls-lR Directory Listing
-
- The utility listing is of a diskette mounted at /mnt.
-
- total 15
- drwx------ 2 root root 1024 Jun 18 19:57 bin/
- drwxr-xr-x 2 root root 12288 Jun 18 19:57 lost+found/
- drwx------ 2 root root 1024 Jun 18 19:57 sbin/
- drwxr-xr-x 4 root root 1024 May 5 16:30 usr/
-
- /mnt/bin:
- total 13
- -rwxr-xr-x 1 root root 3180 Apr 10 1993 free*
- -rwxr-xr-x 1 root root 10687 Feb 10 1994 pwd*
- -rwx--x--x 1 root root 3672 Nov 17 1992 rdev*
-
- /mnt/lost+found:
- total 0
-
- /mnt/sbin:
- total 18
- -rwxr-xr-x 1 root root 16336 Jun 18 14:31 insmod*
- -rwxr-xr-x 1 root root 68 Jun 18 14:31 lsmod*
- lrwxrwxrwx 1 root root 6 Jun 18 19:57 rmmod -> insmod*
-
- /mnt/usr:
- total 2
- drwx------ 2 root root 1024 Jun 18 19:57 bin/
- drwxr-xr-x 3 root root 1024 Jun 18 19:57 local/
-
- /mnt/usr/bin:
- total 411
- -rwxr-xr-x 1 root bin 111616 Sep 9 1992 awk*
- -rwxr-xr-x 1 root root 41984 Dec 23 1992 cpio*
- -rwxr-xr-x 1 root root 50176 Dec 23 1992 find*
- -rwxr-xr-x 1 root root 115712 Sep 17 1992 gawk*
- -rwxr-xr-x 1 root bin 37888 Sep 4 1992 grep*
- -rwxr-xr-x 1 root root 63874 May 1 1994 gzip*
- -rwxr-xr-x 1 root root 2044 Sep 17 1992 kill*
- -rwx--x--x 1 root root 3132 Jan 24 1993 mt*
- -rwxr-xr-x 1 root root 3416 Sep 22 1992 strings*
- -rwxr-xr-x 1 root other 3848 Sep 4 1992 who*
-
- /mnt/usr/local:
- total 1
- drwx------ 2 root root 1024 Jun 18 19:57 bin/
-
- /mnt/usr/local/bin:
- total 374
- -rwxr-xr-x 1 root root 155542 Jun 18 17:07 ftape.o*
- -rwxr-xr-x 1 root root 226308 Jun 13 1994 tar*
-
- 4.2. Shell Scripts to Build Diskettes
-
- These shell scripts are provided as examples only. I no longer use
- them because I now use and recommend Scott Burkett's Bootkit package
- to manage rescue diskette contents and creation. Bootkit is based on
- these scripts, and does essentially the same thing, but it is much
- tidier, nicer and easier to use. However, the sample shell scripts
- here will still provide working diskettes.
-
- There are two shell scripts:
-
- ╖ mkroot - builds a root or boot/root diskette.
-
- ╖ mkutil - builds a utility diskette.
-
- Both are currently configured to run in the parent directory of
- boot_disk and util_disk, each of which contains everything to be
- copied to it's diskette. Note that these shell scripts will *NOT*
- automatically set up and copy all the files for you - you work out
- which files are needed, set up the directories and copy the files to
- those directories. The shell scripts are samples which will copy the
- contents of those directories. Note that they are primitive shell
- scripts and are not meant for the novice user.
-
- The scripts both contain configuration variables at the start which
- allow them to be easily configured to run anywhere. First, set up the
- model directories and copy all the required files into them. To see
- what directories and files are needed, have a look at the sample
- directory listings in the previous sections.
-
- Check the configuration variables in the shell scripts and change them
- as required before running the scripts.
-
- 4.2.1. mkroot - Make Root or Boot/Root Diskette
-
- ______________________________________________________________________
- # mkroot: make a boot/boot disk - creates a boot/root diskette
- # by building a file system on it, then mounting it and
- # copying required files from a model.
- # Note: the model to copy from from must dirst be set up,
- # then change the configuration variables below to suit
- # your system.
- #
- # usage: mkroot [nokernel]
- # if the parameter is omitted, then the kernel and LILO
- # are copied.
-
- # Copyright (c) Graham Chapman 1995. All rights reserved.
- # Permission is granted for this material to be freely
- # used and distributed, provided the source is acknowledged.
- # No warranty of any kind is provided. You use this material
- # at your own risk.
-
- # Configuration variables...
- BOOTDISKDIR=./boot_disk # name of boot disk directory
- MOUNTPOINT=./mnt # temporary mount point for diskette
- LILODIR=/sbin # directory containing lilo
- LILOBOOT=/boot/boot.b # lilo boot sector
- LILOMSG=./lilo.msg # lilo message to display at boot time
- LILOCONFIG=./lilo.conf # lilo parms for boot/root diskette
- DISKETTEDEV=/dev/fd0 # device name of diskette drive
-
- echo $0: create boot/root diskette
- echo Warning: data on diskette will be overwritten!
- echo Insert diskette in $DISKETTEDEV and and press any key...
- read anything
-
- mke2fs $DISKETTEDEV
- if [ $? -ne 0 ]
- then
- echo mke2fs failed
- exit
- fi
-
- mount -t ext2 $DISKETTEDEV $MOUNTPOINT
- if [ $? -ne 0 ]
- then
- echo mount failed
- exit
- fi
-
- # copy the directories containing files
- for i in bin etc lib
- do
- cp -dpr $BOOTDISKDIR/$i $MOUNTPOINT
- done
-
- # copy dev *without* trying to copy the files in it
- cp -dpR $BOOTDISKDIR/dev $MOUNTPOINT
-
- # create empty directories required
- mkdir $MOUNTPOINT/proc
- mkdir $MOUNTPOINT/tmp
- mkdir $MOUNTPOINT/mnt
- mkdir $MOUNTPOINT/usr
-
- # copy the kernel
- if [ "$1" != "nokernel" ]
- then
- echo "Copying kernel"
- cp $BOOTDISKDIR/zImage $MOUNTPOINT
- echo kernel copied
-
- # setup lilo
- cp $LILOBOOT $MOUNTPOINT
- cp $LILOMSG $MOUNTPOINT
- $LILODIR/lilo -C $LILOCONFIG
- echo LILO installed
- fi
-
- umount $MOUNTPOINT
-
- echo Root diskette complete
- ______________________________________________________________________
-
- 4.2.2. mkutil - Make Utility Diskette
-
- ______________________________________________________________________
- # mkutil: make a utility diskette - creates a utility diskette
- # by building a file system on it, then mounting it and
- # copying required files from a model.
- # Note: the model to copy from from must first be set up,
- # then change the configuration variables below to suit
- # your system.
-
- # Copyright (c) Graham Chapman 1995. All rights reserved.
- # Permission is granted for this material to be freely
- # used and distributed, provided the source is acknowledged.
- # No warranty of any kind is provided. You use this material
- # at your own risk.
-
- # Configuration variables...
- UTILDISKDIR=./util_disk # name of directory containing model
- MOUNTPOINT=./mnt # temporary mount point for diskette
- DISKETTEDEV=/dev/fd0 # device name of diskette drive
-
- echo $0: create utility diskette
- echo Warning: data on diskette will be overwritten!
- echo Insert diskette in $DISKETTEDEV and and press any key...
- read anything
-
- mke2fs $DISKETTEDEV
- if [ $? -ne 0 ]
- then
- echo mke2fs failed
- exit
- fi
-
- # Any file system type would do here
- mount -t ext2 $DISKETTEDEV $MOUNTPOINT
- if [ $? -ne 0 ]
- then
- echo mount failed
- exit
- fi
-
- # copy the directories containing files
- cp -dpr $UTILDISKDIR/bin $MOUNTPOINT
-
- umount $MOUNTPOINT
-
- echo Utility diskette complete
- ______________________________________________________________________
-
- 5. FAQ
-
- 5.1. Q. How can I make a boot disk with a XXX driver?
-
- The easiest way is to obtain a Slackware kernel from your nearest
- Slackware mirror site. Slackware kernels are generic kernels which
- atttempt to include drivers for as many devices as possible, so if you
- have a SCSI or IDE controller, chances are that a driver for it is
- included in the Slackware kernel.
-
- Go to the a1 directory and select either IDE or SCSI kernel depending
- on the type of controller you have. Check the xxxxkern.cfg file for
- the selected kernel to see the drivers which have been included in
- that kernel. If the device you want is in that list, then the
- corresponding kernel should boot your computer. Download the
- xxxxkern.tgz file and copy it to your boot diskette as described above
- in the section on making boot disks.
-
- You must then check the root device in the kernel, using the rdev
- command:
-
- rdev zImage
-
- Rdev will then display the current root device in the kernel. If this
- is not the same as the root device you want, then use rdev to change
- it. For example, the kernel I tried was set to /dev/sda2, but my root
- scsi partition is /dev/sda8. To use a root diskette, you would have to
- use the command:
-
- rdev zImage /dev/fd0
-
- If you want to know how to set up a Slackware root disk as well,
- that's outside the scope of this HOWTO, so I suggest you check the
- Linux Install Guide or get the Slackware distribution. See the section
- in this HOWTO titled "References".
-
- 5.2. Q. How do I update my boot floppy with a new kernel?
-
- Just copy the kernel to your boot diskette using the dd command for a
- boot diskette without a filesystem, or the cp command for a boot/root
- disk. Refer to the section in this HOWTO titled "Boot" for details on
- creating a boot disk. The description applies equally to updating a
- kernel on a boot disk.
-
- 5.3. Q. How do I remove LILO so that I can use DOS to boot again?
-
- This is not really a Bootdisk topic, but it is asked so often, so: the
- answer is, use the DOS command:
-
- FDISK /MBR
-
- MBR stands for Master Boot Record, and it replaces the boot sector
- with a clean DOS one, without affecting the partition table. Some
- purists disagree with this, but even the author of LILO, Werner
- Almesberger, suggests it. It is easy, and it works.
-
- You can also use the dd command to copy the backup saved by LILO to
- the boot sector - refer to the LILO documentation if you wish to do
- this.
-
- 5.4. Q. How can I boot if I've lost my kernel AND my boot disk?
-
- If you don't have a boot disk standing by, then probably the easiest
- method is to obtain a Slackware kernel for your disk controller type
- (IDE or SCSI) as described above for "How do I make a boot disk with a
- XXX driver?". You can then boot your computer using this kernel, then
- repair whatever damage there is.
-
- The kernel you get may not have the root device set to the disk type
- and partition you want. For example, Slackware's generic scsi kernel
- has the root device set to /dev/sda2, whereas my root Linux partition
- happens to be /dev/sda8. In this case the root device in the kernel
- will have to be changed.
-
- You can still change the root device and ramdisk settings in the
- kernel even if all you have is a kernel, and some other operating
- system, such as DOS.
-
- Rdev changes kernel settings by changing the values at fixed offsets
- in the kernel file, so you can do the same if you have a hex editor
- available on whatever systems you do still have running - for example,
- Norton Utilities Disk Editor under DOS. You then need to check and if
- necessary change the values in the kernel at the following offsets:
-
- 0x01F8 Low byte of RAMDISK size
- 0x01F9 High byte of RAMDISK size
- 0x01FC Root minor device number - see below
- 0X01FD Root major device number - see below
-
- The ramdisk size is the number of blocks of ramdisk to create. If you
- want to boot from a root diskette then set this to decimal 1440, which
- is 0x05A0, thus set offset 0x01F8 to 0xA0 and offset 0x01F9 to 0x05.
- This will allocate enough space for a 1.4Mb diskette.
-
- The major and minor device numbers must be set to the device you want
- to mount your root filesystem on. Some useful values to select from
- are:
-
- device major minor
- /dev/fd0 2 0 1st floppy drive
- /dev/hda1 3 1 partition 1 on 1st IDE drive
- /dev/sda1 8 1 partition 1 on 1st scsi drive
- /dev/sda8 8 8 partition 8 on 1st scsi drive
-
- Once you have set these values then you can write the file to a
- diskette using either Norton Utilities Disk Editor, or a program
- called rawrite.exe. This program is included in several distributions,
- including the SLS and Slackware distributions. It is a DOS program
- which writes a file to the "raw" disk, starting at the boot sector,
- instead of writing it to the file system. If you use Norton Utilities,
- then you must write the file to a physical disk starting at the
- beginning of the disk.
-
- 5.5. Q. How can I make extra copies of boot/root diskettes?
-
- It is never desirable to have just one set of rescue disks - 2 or 3
- should be kept in case one is unreadable.
-
- The easiest way of making copies of any diskettes, including bootable
- and utility diskettes, is to use the dd command to copy the contents
- of the original diskette to a file on your hard drive, and then use
- the same command to copy the file back to a new diskette. Note that
- you do not need to, and should not, mount the diskettes, because dd
- uses the raw device interface.
-
- To copy the original, enter the command:
-
- dd if=devicename of=filename
- where devicename the device name of the diskette
- drive
- and filename the name of the file where you
- want to copy to
-
- For example, to copy from /dev/fd0 to a temporary file called
- /tmp/diskette.copy, I would enter the command:
-
- dd if=/dev/fd0 of=/tmp/diskette.copy
-
- Omitting the "count" parameter, as we have done here, means that the
- whole diskette of 2880 (for a high-density) blocks will be copied.
-
- To copy the resulting file back to a new diskette, insert the new
- diskette and enter the reverse command:
-
- dd if=filename of=devicename
-
- Note that the above discussion assumes that you have only one diskette
- drive. If you have two of the same type, then you can copy diskettes
- using a command like:
-
- dd if=/dev/fd0 of=/dev/fd1
-
- 5.6. Q. How can I boot without typing in "ahaxxxx=nn,nn,nn" every
- time?
-
- Where a disk device cannot be autodetected it is necessary to supply
- the kernel with a command device parameter string, such as:
-
- aha152x=0x340,11,3,1
-
- This parameter string can be supplied in several ways using LILO:
-
- ╖ By entering it on the command line every time the system is booted
- via LILO. This is boring, though.
-
- ╖ By using the LILO "lock" keyword to make it store the command line
- as the default command line, so that LILO will use the same options
- every time it boots.
-
- ╖ By using the APPEND statement in the lilo config file. Note that
- the parameter string must be enclosed in quotes.
-
- For example, a sample command line using the above parameter string
- would be:
-
- zImage aha152x=0x340,11,3,1 root=/dev/sda1 lock
-
- This would pass the device parameter string through, and also ask the
- kernel to set the root device to /dev/sda1 and save the whole command
- line and reuse it for all future boots.
-
- A sample APPEND statement is:
-
- APPEND = "aha152x=0x340,11,3,1"
-
- Note that the parameter string must NOT be enclosed in quotes on the
- command line, but it MUST be enclosed in quotes in the APPEND
- statement.
-
- Note also that for the parameter string to be acted on, the kernel
- must contain the driver for that disk type. If it does not, then there
- is nothing listening for the parameter string, and you will have to
- rebuild the kernel to include the required driver. For details on
- rebuilding the kernel, cd to /usr/src/linux and read the README, and
- read the Linux FAQ and Installation HOWTO. Alternatively you could
- obtain a generic kernel for the disk type and install that.
-
- Readers are strongly urged to read the LILO documentation before
- experimenting with LILO installation. Incautious use of the "BOOT"
- statement can damage partitions.
-
- 5.7. Q. How can I create an oversize ramdisk filesystem?
-
- An oversize ramdisk filesystem is a filesystem in a ramdisk larger
- than the size of the root disk it was loaded from. This can be
- extremely useful when using Ftape, which requires exclusive use of the
- floppy disk controller (see the Ftape HOWTO for details.)
-
- Two things are required: create an oversize file system on the root
- diskette, and then patch the kernel so that it will not try to load
- blocks off the end of the diskette.
-
- To create an oversize filesystem, two methods are possible:
-
- ╖ Use the "blocks" e2fsck parameter to specify the size of filesystem
- that you eventually want in the ramdisk. For example:
-
- mke2fs /dev/fd0 3000
-
- will create a filesystem on the diskette of 3000 1Kb blocks. The
- diskette only has 1440 blocks, but mke2fs does not care about this.
- E2fs will care about it if you try to use more than 1440 blocks of
- data (allowing for blocks used as inodes and reserved etc), but up to
- this point it is quite safe. You will soon find out if you try to load
- too much on the diskette because an I/O error will result.
-
- ╖ Create a partition on your hard disk as large as the filesystem you
- want on the ramdisk. Then create a filesystem on it and load in the
- files you want. Then use dd to copy only the first 1440 blocks to
- diskette, and then check that there was nothing in the uncopied
- part of the filesystem. For example:
-
- dd if=/dev/hdb of=/dev/fd0 bs=1024 count=1440
- dd if=/dev/hdb of=tailpart bs=1024 skip=1440
- cmp -l tailparm /dev/zero
-
- Of the two, I prefer the first method - it appears easier and safer.
-
- The second thing required to get an oversized filesystem is to get the
- kernel to stop loading at the end of the physical diskette when it
- tries to load the root diskette into ramdisk. To do this, a simple
- patch can be applied to the ramdisk driver, which should be found in
- /usr/src/linux/drivers/block/ramdisk.c. The following patch has been
- contributed by Bruce Elliot. It is for kernel version 1.2.0, but it
- should be fairly easy to apply to later versions. Even if the patch
- will not apply, the code is not complex, so the patch could easily be
- modified until it worked.
-
- =================================================================
- X--- ramdisk.c~ Mon Jan 23 13:04:09 1995
- X+++ ramdisk.c Mon May 29 00:54:52 1995
- X@@ -113,6 +113,7 @@
- X (struct ext2_super_block *)&sb;
- X int block, tries;
- X int i = 1;
- X+ int fblocks;
- X int nblocks;
- X char *cp;
- X
- X@@ -168,12 +169,16 @@
- X nblocks, rd_length >> BLOCK_SIZE_BITS);
- X return;
- X }
- X- printk("RAMDISK: Loading %d blocks into RAM disk", nblocks);
- X+ fblocks = blk_size[MAJOR(ROOT_DEV)][MINOR(ROOT_DEV)];
- X+ if (fblocks > nblocks)
- X+ fblocks = nblocks;
- X+ printk("RAMDISK: Loading %d blocks into %d block filesystem "
- X+ "in RAM disk", fblocks, nblocks);
- X
- X /* We found an image file system. Load it into core! */
- X cp = rd_start;
- X- while (nblocks) {
- X- if (nblocks > 2)
- X+ while (fblocks) {
- X+ if (fblocks > 2)
- X bh = breada(ROOT_DEV, block, BLOCK_SIZE, 0, PAGE_SIZE);
- X else
- X bh = bread(ROOT_DEV, block, BLOCK_SIZE);
- X@@ -184,7 +189,7 @@
- X }
- X (void) memcpy(cp, bh->b_data, BLOCK_SIZE);
- X brelse(bh);
- X- if (!(nblocks-- & 15)) printk(".");
- X+ if (!(fblocks-- & 15)) printk(".");
- X cp += BLOCK_SIZE;
- X block++;
- X i++;
- =================================================================
-
- With this patch, the kernel stops loading at the end of the physical
- diskette, leaving a filesystem larger than the disk.
-
- Some warnings: I have been able to create stable ramdisk filesystems
- in this fashion of 3500 blocks, but if I try 3600 or more then the
- kernel collapses with an error something like "fixup table corrupt".
- I have not been able to track down why, but obviously something is
- overflowing. Up to 3500 blocks, though, I have had no problems.
-
- 5.8. Q. At boot time, I get error A: cannot execute B. Why?
-
- There are several cases of program names being hardcoded in various
- utilities. These cases do not occur everywhere, but they may explain
- why an executable apparently cannot be found on your system even
- though you can see that it is there. You can find out if a given
- program has the name of another hardcoded by using the "strings"
- command and piping the output through grep.
-
- Known examples of hardcoding are:
-
- ╖ Shutdown in some versions has /etc/reboot hardcoded, so reboot must
- be placed in the /etc directory.
-
- ╖ Init has caused problems for at least one person, with the kernel
- being unable to find init.
-
- To fix these problems, either move the programs to the correct
- directory, or change configuration files (e.g. inittab) to point to
- the correct directory. If in doubt, put programs in the same
- directories as they are on your hard disk, and use the same inittab
- and /etc/rc.d files as they appear on your hard disk.
-
- 6. References
-
- In this section, vvv is used in package names in place of the version,
- to avoid referring here to specific versions. When retrieving a
- package, always get the latest version unless you have good reasons
- for not doing so.
-
- 6.1. LILO - Linux Loader
-
- Written by Werner Almesberger. Excellent boot loader, and the
- documentation includes information on the boot sector contents and the
- early stages of the boot process.
-
- Ftp from: tsx-11.mit.edu: /pub/linux/packages/lilo/lilo.vvv.tar.gz
- also on sunsite and mirror sites.
-
- 6.2. Linux FAQ and HOWTOs
-
- These are available from many sources. Look at the usenet newsgroups
- news.answers and comp.os.linux.announce.
-
- Ftp from: sunsite.unc.edu:/pub/Linux/docs
-
- ╖ FAQ is in /pub/linux/docs/faqs/linux-faq
-
- ╖ HOWTOs are in /pub/Linux/docs/HOWTO
-
- For WWW, start at the Linux documentation home page:
-
- http://sunsite.unc.edu/mdw/linux.html
-
- If desperate, send mail to:
-
- mail-server@rtfm.mit.edu
-
- with the word "help" in the message, then follow the mailed
- instructions.
-
- Note: if you haven't read the Linux FAQ and related documents such as
- the Linux Installation HOWTO and the Linux Install Guide, then you
- should not be trying to build boot diskettes.
-
- 6.3. Rescue Packages
-
- 6.3.1. Bootkit
-
- Written by Scott Burkett. Bootkit provides a flexible menu-driven
- framework for managing rescue disk creation and contents. It uses the
- Dialog package to provide nice menus, and a straight-forward directory
- tree to contain definitions of rescue disk contents. The package
- includes samples of the main files needed. The package aims to provide
- only the framework; it is up to the user to work out what to put on
- the disks and set up the config files accordingly. For those users
- who don't mind doing this, it is a good choice. I use this package
- myself.
-
- Ftp from: sunsite.unc.edu: /pub/Linux/system/Recovery/Bootkit-
- vvv.tar.gz
-
- 6.3.2. CatRescue
-
- Written by Oleg Kibirev. This package concentrates on saving space on
- the rescue diskettes by extensive use of compression, and by
- implementing executables as shells scripts. The doco includes some
- tips on what to do in various disaster situations.
-
- Ftp from: gd.cs.csufresno.edu/pub/sun4bin/src/CatRescue100.tgz
-
- 6.3.3. Rescue Shell Scripts
-
- Written by Thomas Heiling. This contains shell scripts to produce boot
- and boot/root diskettes. It has some dependencies on specific versions
- of other software such as LILO, and so might need some effort to
- convert to your system, but it might be useful as a starting point if
- you wanted more comprehensive shell scripts than are provided in this
- document.
-
- Ftp from: sunsite.unc.edu:/pub/Linux/system/Recovery/rescue.tgz
-
- 6.3.4. SAR - Search and Rescue
-
- Written by Karel Kubat. SAR produces a rescue diskette, using several
- techniques to minimize the space required on the diskette. The manual
- includes a description of the Linux boot/login process.
-
- Ftp from: ftp.icce.rug.nl:/pub/unix/SAR-vvv.tar.gz
-
- The manual is available via WWW from:
-
- http://www.icce.rug.nl/karel/programs/SAR.html
-
- 6.4. Slackware Distribution
-
- Apart from being one of the more popular Linux distributions around,
- it is also a good place to get a generic kernel. It is available from
- almost everywhere, so there is little point in putting addresses here.
-
-