added some old but useful reference files
This commit is contained in:
parent
894d28134c
commit
4b0d121574
|
@ -0,0 +1,264 @@
|
||||||
|
CREDIT: http://www.tldp.org/HOWTO/Bootdisk-HOWTO/buildroot.html
|
||||||
|
|
||||||
|
|
||||||
|
/dev -- Device files, required to perform I/O
|
||||||
|
|
||||||
|
/proc -- Directory stub required by the proc filesystem
|
||||||
|
|
||||||
|
/etc -- System configuration files
|
||||||
|
|
||||||
|
/sbin -- Critical system binaries
|
||||||
|
|
||||||
|
/bin -- Essential binaries 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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Three of these directories will be empty on the root filesystem, so they only need to be created with mkdir.
|
||||||
|
The /proc directory is basically a stub under which the proc filesystem is placed. The directories /mnt and /usr
|
||||||
|
are only mount points for use after the boot/root system is running. Hence again, these directories only need to be created.
|
||||||
|
|
||||||
|
|
||||||
|
4.3.1. /dev
|
||||||
|
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 mkdir 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 devices files from your existing hard disk /dev directory. The only requirement is
|
||||||
|
that you copy the device special files using -R option. This will copy the directory without attempting to copy the contents
|
||||||
|
of the files. Be sure to use an upper case R. For example:
|
||||||
|
|
||||||
|
cp -dpR /dev/fd[01]* /mnt/dev
|
||||||
|
cp -dpR /dev/tty[0-6] /mnt/dev
|
||||||
|
|
||||||
|
|
||||||
|
assuming that the diskette is mounted at /mnt. The dp switches ensure that symbolic links are copied as links, rather
|
||||||
|
than using the target file, 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.
|
||||||
|
|
||||||
|
However the devices files are created, check 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 if you intend to access your floppy tape drive
|
||||||
|
from the bootdisk.
|
||||||
|
|
||||||
|
Note that one inode is required for each device special file, and inodes can at times be a scarce resource, especially on
|
||||||
|
diskette filesystems. You'll need to be selective about the device files you include. For example, if you do not have SCSI
|
||||||
|
disks you can safely ignore /dev/sd*; if you don't intend to use serial ports you can ignore /dev/ttyS*.
|
||||||
|
|
||||||
|
If, in building your root filesystem, you get the error No space left on device but a df command shows space still available,
|
||||||
|
you have probably run out of inodes. A df -i will display inode usage.
|
||||||
|
|
||||||
|
Important: Be sure to include the following files from this directory: console, kmem, mem, null, ram0 and tty1.
|
||||||
|
|
||||||
|
|
||||||
|
4.3.2. /etc
|
||||||
|
|
||||||
|
The /etc directory contains configuration files. What it should contain depends on what programs you intend to run. On most
|
||||||
|
systems, these can be divided into three 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 usually 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, 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.d/* -- system startup and run level change scripts
|
||||||
|
|
||||||
|
fstab -- list of file systems to be mounted
|
||||||
|
|
||||||
|
inittab -- parameters for the init process, the first process started at boot time.
|
||||||
|
|
||||||
|
gettydefs -- parameters for the init process, the first process started at boot time.
|
||||||
|
|
||||||
|
The ones I should tidy up for a boot/root system:
|
||||||
|
|
||||||
|
passwd -- Critical list of users, home directories, etc.
|
||||||
|
|
||||||
|
group -- user groups.
|
||||||
|
|
||||||
|
shadow -- passwords of users. You may not have this.
|
||||||
|
|
||||||
|
termcap -- the terminal capability database.
|
||||||
|
|
||||||
|
If security is important, passwd and shadow should be pruned to avoid copying user passwords off the system, and so that
|
||||||
|
unwanted logins are rejected when you boot from diskette. Be sure that passwd contains at least root. If you intend other
|
||||||
|
users to login, be sure their home directories and shells exist. termcap, the terminal database, is typically several
|
||||||
|
hundred kilobytes. The version on your boot/root diskette should be pruned down to contain only the terminal(s) you use,
|
||||||
|
which is usually just the linux or linux-console entry. 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 surprisingly small.
|
||||||
|
|
||||||
|
rc should contain:
|
||||||
|
|
||||||
|
#!/bin/sh
|
||||||
|
/bin/mount -av
|
||||||
|
/bin/hostname Kangaroo
|
||||||
|
|
||||||
|
Be sure it is executable, be sure it has a "#!" line at the top, and be sure any absolute filenames are correct.
|
||||||
|
You don't really need to run hostname — it just looks nicer if you do.
|
||||||
|
|
||||||
|
fstab should contain at least:
|
||||||
|
|
||||||
|
/dev/ram0 / ext2 defaults
|
||||||
|
/dev/fd0 / ext2 defaults
|
||||||
|
/proc /proc proc defaults
|
||||||
|
|
||||||
|
|
||||||
|
You can copy entries from your existing fstab, but you should not automatically mount any of your hard disk partitions;
|
||||||
|
use the noauto keyword with them. Your hard disk may be damaged or dead when the bootdisk is used.
|
||||||
|
|
||||||
|
Your inittab should be changed so that its sysinit line runs rc or whatever basic boot script will be used.
|
||||||
|
Also, if you want to ensure that users on serial ports cannot login, comment out all the entries for 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.
|
||||||
|
|
||||||
|
A minimal inittab file looks like this:
|
||||||
|
|
||||||
|
id:2:initdefault:
|
||||||
|
si::sysinit:/etc/rc
|
||||||
|
1:2345:respawn:/sbin/getty 9600 tty1
|
||||||
|
2:23:respawn:/sbin/getty 9600 tty2
|
||||||
|
|
||||||
|
The inittab file defines what the system will run in various states including startup, move to multi-user mode, etc.
|
||||||
|
Check carefully the filenames mentioned in inittab; if init cannot find the program mentioned the bootdisk will hang,
|
||||||
|
and you may not even get an error message.
|
||||||
|
|
||||||
|
Note that some programs cannot be moved elsewhere because other programs have hardcoded their locations. 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 cannot 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 listing in Appendix C. Probably it will suffice to copy
|
||||||
|
only those files, but systems differ a great deal, so you cannot be sure that the same set of files on your system is equivalent
|
||||||
|
to the files in the list. The only sure method is to start with inittab and work out what is required.
|
||||||
|
|
||||||
|
Most systems now use an /etc/rc.d/ directory containing shell scripts for different run levels. The minimum is a single rc script,
|
||||||
|
but it may be simpler just to copy inittab and the /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.
|
||||||
|
|
||||||
|
|
||||||
|
4.3.3. /bin and /sbin
|
||||||
|
|
||||||
|
The /bin directory is a convenient place for extra utilities you need to perform basic operations, utilities such as ls, mv,
|
||||||
|
cat and dd. See Appendix C for an example list of files that go in a /bin and /sbin directories. It does not include any of
|
||||||
|
the utilities required to restore from backup, such as cpio, tar and gzip. That is because I place these on a separate utility
|
||||||
|
diskette, to save space on the boot/root diskette. Once the boot/root diskette is booted, it is copied 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 Section 9.2. It is probably desirable to maintain a copy of the same version
|
||||||
|
of backup utilities used to write the backups so you don't waste time trying to install versions that cannot read your backup tapes.
|
||||||
|
|
||||||
|
Important: Be sure to include the following programs: init, getty or equivalent, login, mount, some shell capable of running
|
||||||
|
your rc scripts, a link from sh to the shell.
|
||||||
|
|
||||||
|
|
||||||
|
4.3.4. /lib
|
||||||
|
In /lib you place necessary shared libraries and loaders. If the necessary libraries 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.
|
||||||
|
|
||||||
|
Nearly every program requires at least the libc library, libc.so.N, where N is the current version number. Check your /lib directory.
|
||||||
|
The file libc.so.N is usually a symlink to a filename with a complete version number:
|
||||||
|
|
||||||
|
% ls -l /lib/libc*
|
||||||
|
-rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so*
|
||||||
|
lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so*
|
||||||
|
|
||||||
|
In this case, you want libc-2.1.1.so. To find other libraries you should go through all the binaries you plan to include and check
|
||||||
|
their dependencies with ldd. For example:
|
||||||
|
|
||||||
|
% ldd /sbin/mke2fs
|
||||||
|
libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000)
|
||||||
|
libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000)
|
||||||
|
libuuid.so.1 => /lib/libuuid.so.1 (0x40028000)
|
||||||
|
libc.so.6 => /lib/libc.so.6 (0x4002c000)
|
||||||
|
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
|
||||||
|
|
||||||
|
Each file on the right-hand side is required. The file may be a symbolic link.
|
||||||
|
|
||||||
|
Note that some libraries are quite large and will not fit easily on your root filesystem. For example, the libc.so listed above is
|
||||||
|
about 4 meg. You will probably need to strip libraries when copying them to your root filesystem. See Section 8 for instructions.
|
||||||
|
|
||||||
|
In /lib you must also include a loader for the libraries. The loader will be either ld.so (for A.OUT libraries, which are no longer
|
||||||
|
common) or ld-linux.so (for ELF libraries). Newer versions of ldd tell you exactly which loader is needed, as in the example above,
|
||||||
|
but older versions may not. If you're unsure which you need, run the file command on the library. For example:
|
||||||
|
|
||||||
|
% file /lib/libc.so.4.7.2 /lib/libc.so.5.4.33 /lib/libc-2.1.1.so
|
||||||
|
/lib/libc.so.4.7.2: Linux/i386 demand-paged executable (QMAGIC), stripped
|
||||||
|
/lib/libc.so.5.4.33: ELF 32-bit LSB shared object, Intel 80386, version 1, stripped
|
||||||
|
/lib/libc-2.1.1.so: ELF 32-bit LSB shared object, Intel 80386, version 1, not stripped
|
||||||
|
|
||||||
|
The QMAGIC indicates that 4.7.2 is for A.OUT libraries, and ELF indicates that 5.4.33 and 2.1.1 are for ELF.
|
||||||
|
|
||||||
|
Copy the specific loader(s) you need to the root filesystem you're building. Libraries and loaders should be checked carefully against
|
||||||
|
the included binaries. If the kernel cannot load a necessary library, the kernel may hang with no error message.
|
||||||
|
|
||||||
|
|
||||||
|
4.6. Some final details
|
||||||
|
Some system programs, such as login, complain if the file /var/run/utmp and the directory /var/log do not exist. So:
|
||||||
|
|
||||||
|
mkdir -p /mnt/var/{log,run}
|
||||||
|
touch /mnt/var/run/utmp
|
||||||
|
|
||||||
|
Finally, after you have set up all the libraries you need, run ldconfig to remake /etc/ld.so.cache on the root filesystem.
|
||||||
|
The cache tells the loader where to find the libraries. You can do this with:
|
||||||
|
|
||||||
|
ldconfig -r /mnt
|
||||||
|
|
||||||
|
4.7. Wrapping it up
|
||||||
|
|
||||||
|
When you have finished constructing the root filesystem, unmount it, copy it to a file and compress it:
|
||||||
|
|
||||||
|
umount /mnt
|
||||||
|
dd if=DEVICE bs=1k | gzip -v9 > rootfs.gz
|
||||||
|
|
||||||
|
When this finishes you will have a file rootfs.gz. This is your compressed root filesystem. You should check its size to
|
||||||
|
make sure it will fit on a diskette; if it doesn't you'll have to go back and remove some files. Some suggestions for
|
||||||
|
reducing root filesystem size appear in Section 8.
|
||||||
|
|
||||||
|
Notes [1] The directory structure presented here is for root diskette use only. Real Linux systems have a more complex
|
||||||
|
and disciplined set of policies, called the Filesystem Hierarchy Standard, for determining where files should go.)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue