4 Samples

Contents of this section

4.1 Disk Directory Listings

This lists the contents of files and directories that I keep on my hard disk to use when building boot/root and utility diskettes. It shows which files I put in the /etc and /bin directories on my diskettes.

The sample shell scripts in the next section use these directories and files as a model to build the diskettes.

Boot/Root Disk ls-lR Directory Listing

The boot/root listing is of directory boot_disk:

total 226
drwxr-xr-x   2 root     root         1024 Oct  8 13:40 bin/
drwxr-xr-x   2 root     root         3072 Sep  8 16:37 dev/
drwxr-xr-x   2 root     root         1024 Oct  8 12:38 etc/
drwxr-xr-x   2 root     root         1024 Sep 10 14:58 lib/
-rw-r--r--   1 root     root       297956 Jan 25 21:55 vmlinux

boot_disk/bin:
total 366
-rwxr-xr-x   1 root     root         4376 Sep  9 21:34 cat*
-rwxr-xr-x   1 root     root         4112 Sep  9 21:34 chown*
-rwxr-xr-x   1 root     root        12148 Sep  9 21:34 cp*
-rwxr-xr-x   1 root     root         4376 Sep  9 21:34 cut*
-rwxr-xr-x   1 root     root         7660 Sep  9 21:34 dd*
-rwxr-xr-x   1 root     root         4696 Sep  9 21:34 df*
-rwx--x--x   1 root     root         1392 Sep 10 14:13 hostname*
-rwxr-xr-x   1 root     root         5252 Sep  9 21:34 ln*
-rwsr-xr-x   1 root     root         6636 Sep  9 21:34 login*
-rwxr-xr-x   1 root     root        13252 Sep  9 21:34 ls*
-rwxr-xr-x   1 root     root         4104 Sep  9 21:34 mkdir*
-rwxr-xr-x   1 root     root        21504 Sep 10 15:27 more*
-rwxr-xr-x   1 root     root         6744 Sep  9 21:34 mv*
-rwxr-xr-x   1 root     root         9780 Sep  9 21:34 ps*
-rwxr-xr-x   1 root     root         5076 Sep  9 21:34 rm*
-r-xr-xr-x   1 root     root        12604 Sep  9 21:34 sed*
-rwxr-xr-x   1 root     root       222208 Sep  9 21:34 sh*
-rws--x--x   1 root     root        16464 Sep  9 21:34 su*
-rwxr-xr-x   1 root     root         1216 Sep  9 21:34 sync*

boot_disk/dev:
total 73
-rwxr-xr-x   1 root     root         8331 Sep  8 16:31 MAKEDEV*
crw-r--r--   1 root     root      10,   3 Sep  8 16:31 bmouseatixl
crw-r--r--   1 root     root      10,   0 Sep  8 16:31 bmouselogitec
crw-r--r--   1 root     root      10,   2 Sep  8 16:31 bmousems
crw-r--r--   1 root     root      10,   1 Sep  8 16:31 bmouseps2
crw-------   1 root     root       0,   0 Sep  8 16:31 boot0
crw-r--r--   1 root     root       4,   0 Sep  8 16:31 console
crw-r--r--   1 root     root       5,  64 Sep  8 16:31 cua0
crw-r--r--   1 root     root       5,  65 Sep  8 16:31 cua1
crw-r--r--   1 root     root       5,  66 Sep  8 16:31 cua2
crw-r--r--   1 root     root       5,  67 Sep  8 16:31 cua3
brw-r--r--   1 root     root       2,   0 Sep  8 16:31 fd0
brw-r--r--   1 root     root       2,  12 Sep  8 16:31 fd0D360
brw-r--r--   1 root     root       2,  16 Sep  8 16:31 fd0D720
brw-r--r--   1 root     root       2,  28 Sep  8 16:31 fd0H1440
brw-r--r--   1 root     root       2,  12 Sep  8 16:31 fd0H360
brw-r--r--   1 root     root       2,  16 Sep  8 16:31 fd0H720
brw-r--r--   1 root     root       2,  16 Sep  8 16:31 fd0Q720
brw-r--r--   1 root     root       2,   4 Sep  8 16:31 fd0d360
brw-r--r--   1 root     root       2,   8 Sep  8 16:31 fd0h1200
brw-r--r--   1 root     root       2,  20 Sep  8 16:31 fd0h360
brw-r--r--   1 root     root       2,  24 Sep  8 16:31 fd0h720
brw-r--r--   1 root     root       2,  24 Sep  8 16:31 fd0q720
brw-r--r--   1 root     root       2,   1 Sep  8 16:31 fd1
brw-r--r--   1 root     root       2,  13 Sep  8 16:31 fd1D360
brw-r--r--   1 root     root       2,  17 Sep  8 16:31 fd1D720
brw-r--r--   1 root     root       2,  29 Sep  8 16:31 fd1H1440
brw-------   1 root     root       2,  31 Sep  8 16:31 fd1H1722
brw-r--r--   1 root     root       2,  13 Sep  8 16:31 fd1H360
brw-r--r--   1 root     root       2,  17 Sep  8 16:31 fd1H720
brw-r--r--   1 root     root       2,  17 Sep  8 16:31 fd1Q720
brw-r--r--   1 root     root       2,   5 Sep  8 16:31 fd1d360
brw-r--r--   1 root     root       2,   9 Sep  8 16:31 fd1h1200
brw-r--r--   1 root     root       2,  21 Sep  8 16:31 fd1h360
brw-r--r--   1 root     root       2,  25 Sep  8 16:31 fd1h720
brw-r--r--   1 root     root       2,  25 Sep  8 16:31 fd1q720
brw-r-----   1 root     root       3,   0 Sep  8 16:31 hda
brw-r-----   1 root     root       3,   1 Sep  8 16:31 hda1
brw-r-----   1 root     root       3,   2 Sep  8 16:31 hda2
brw-r-----   1 root     root       3,   3 Sep  8 16:31 hda3
brw-r-----   1 root     root       3,   4 Sep  8 16:31 hda4
brw-r-----   1 root     root       3,   5 Sep  8 16:31 hda5
brw-r-----   1 root     root       3,   6 Sep  8 16:31 hda6
brw-r-----   1 root     root       3,   7 Sep  8 16:31 hda7
brw-r-----   1 root     root       3,   8 Sep  8 16:31 hda8
brw-r-----   1 root     root       3,  64 Sep  8 16:31 hdb
brw-r-----   1 root     root       3,  65 Sep  8 16:31 hdb1
brw-r-----   1 root     root       3,  66 Sep  8 16:31 hdb2
brw-r-----   1 root     root       3,  67 Sep  8 16:31 hdb3
brw-r-----   1 root     root       3,  68 Sep  8 16:31 hdb4
brw-r-----   1 root     root       3,  69 Sep  8 16:31 hdb5
brw-r-----   1 root     root       3,  70 Sep  8 16:31 hdb6
brw-r-----   1 root     root       3,  71 Sep  8 16:31 hdb7
brw-r-----   1 root     root       3,  72 Sep  8 16:31 hdb8
crw-r-----   1 root     root       1,   2 Sep  8 16:31 kmem
brw-------   1 root     root      12,   0 Sep  8 16:31 loop0
brw-------   1 root     root      12,   1 Sep  8 16:31 loop1
crw-r--r--   1 root     root       6,   0 Sep  8 16:31 lp0
crw-r--r--   1 root     root       6,   1 Sep  8 16:31 lp1
crw-r--r--   1 root     root       6,   2 Sep  8 16:31 lp2
brw-r--r--   1 root     root      12,   0 Sep  8 16:31 mcd0
crw-r-----   1 root     root       1,   1 Sep  8 16:31 mem
crw-r--r--   1 root     root       5,  65 Sep  8 16:31 modem
crw-r--r--   1 root     root       5,  64 Sep  8 16:31 mouse
crw-r--r--   1 root     root      27,   4 Sep  8 16:31 nrft0
crw-r--r--   1 root     root      27,   5 Sep  8 16:31 nrft1
crw-r--r--   1 root     root      27,   6 Sep  8 16:31 nrft2
crw-r--r--   1 root     root      27,   7 Sep  8 16:31 nrft3
crw-------   1 root     root       9, 128 Sep  8 16:31 nrmt0
crw-r--r--   1 root     root       1,   3 Sep  8 16:31 null
crw-r-----   1 root     root       6,   0 Sep  8 16:31 par0
crw-r-----   1 root     root       6,   1 Sep  8 16:31 par1
crw-r-----   1 root     root       6,   2 Sep  8 16:31 par2
crw-r-----   1 root     root       1,   4 Sep  8 16:31 port
crw-r--r--   1 root     root      10,   1 Sep  8 16:31 ps2aux
crw-r--r--   1 root     root       4, 128 Sep  8 16:31 ptyp0
crw-r--r--   1 root     root       4, 129 Sep  8 16:31 ptyp1
crw-r--r--   1 root     root       4, 130 Sep  8 16:31 ptyp2
crw-r--r--   1 root     root       4, 131 Sep  8 16:31 ptyp3
crw-r--r--   1 root     root       4, 132 Sep  8 16:31 ptyp4
crw-r--r--   1 root     root       4, 133 Sep  8 16:31 ptyp5
crw-r--r--   1 root     root       4, 134 Sep  8 16:31 ptyp6
crw-r--r--   1 root     root       4, 135 Sep  8 16:31 ptyp7
crw-r--r--   1 root     root       4, 136 Sep  8 16:31 ptyp8
crw-r--r--   1 root     root       4, 137 Sep  8 16:31 ptyp9
crw-r--r--   1 root     root       4, 138 Sep  8 16:31 ptypa
crw-r--r--   1 root     root       4, 139 Sep  8 16:31 ptypb
crw-r--r--   1 root     root       4, 140 Sep  8 16:31 ptypc
crw-r--r--   1 root     root       4, 141 Sep  8 16:31 ptypd
crw-r--r--   1 root     root       4, 142 Sep  8 16:31 ptype
crw-r--r--   1 root     root       4, 143 Sep  8 16:31 ptypf
brw-r-----   1 root     root       1,   0 Sep  8 16:31 ram
crw-r--r--   1 root     root      27,   0 Sep  8 16:31 rft0
crw-r--r--   1 root     root      27,   1 Sep  8 16:31 rft1
crw-r--r--   1 root     root      27,   2 Sep  8 16:31 rft2
crw-r--r--   1 root     root      27,   3 Sep  8 16:31 rft3
crw-------   1 root     root       9,   0 Sep  8 16:31 rmt0
brw-r-----   1 root     root       8,   0 Sep  8 16:31 sda
brw-r-----   1 root     root       8,   1 Sep  8 16:31 sda1
brw-r-----   1 root     root       8,   2 Sep  8 16:31 sda2
brw-r-----   1 root     root       8,   3 Sep  8 16:31 sda3
brw-r-----   1 root     root       8,   4 Sep  8 16:31 sda4
brw-r-----   1 root     root       8,   5 Sep  8 16:31 sda5
brw-r-----   1 root     root       8,   6 Sep  8 16:31 sda6
brw-r-----   1 root     root       8,   7 Sep  8 16:31 sda7
brw-r-----   1 root     root       8,   8 Sep  8 16:31 sda8
brw-r-----   1 root     root       8,  16 Sep  8 16:31 sdb
brw-r-----   1 root     root       8,  17 Sep  8 16:31 sdb1
brw-r-----   1 root     root       8,  18 Sep  8 16:31 sdb2
brw-r-----   1 root     root       8,  19 Sep  8 16:31 sdb3
brw-r-----   1 root     root       8,  20 Sep  8 16:31 sdb4
brw-r-----   1 root     root       8,  21 Sep  8 16:31 sdb5
brw-r-----   1 root     root       8,  22 Sep  8 16:31 sdb6
brw-r-----   1 root     root       8,  23 Sep  8 16:31 sdb7
brw-r-----   1 root     root       8,  24 Sep  8 16:31 sdb8
brw-------   1 root     root       8,  32 Sep  8 16:31 sdc
brw-------   1 root     root       8,  33 Sep  8 16:31 sdc1
brw-------   1 root     root       8,  34 Sep  8 16:31 sdc2
brw-------   1 root     root       8,  35 Sep  8 16:31 sdc3
brw-------   1 root     root       8,  36 Sep  8 16:31 sdc4
brw-------   1 root     root       8,  37 Sep  8 16:31 sdc5
brw-------   1 root     root       8,  38 Sep  8 16:31 sdc6
brw-------   1 root     root       8,  39 Sep  8 16:31 sdc7
brw-------   1 root     root       8,  40 Sep  8 16:31 sdc8
brw-------   1 root     root       8,  48 Sep  8 16:31 sdd
brw-------   1 root     root       8,  49 Sep  8 16:31 sdd1
brw-------   1 root     root       8,  50 Sep  8 16:31 sdd2
brw-------   1 root     root       8,  51 Sep  8 16:31 sdd3
brw-------   1 root     root       8,  52 Sep  8 16:31 sdd4
brw-------   1 root     root       8,  53 Sep  8 16:31 sdd5
brw-------   1 root     root       8,  54 Sep  8 16:31 sdd6
brw-------   1 root     root       8,  55 Sep  8 16:31 sdd7
brw-------   1 root     root       8,  56 Sep  8 16:31 sdd8
brw-------   1 root     root       8,  64 Sep  8 16:31 sde
brw-------   1 root     root       8,  65 Sep  8 16:31 sde1
brw-------   1 root     root       8,  66 Sep  8 16:31 sde2
brw-------   1 root     root       8,  67 Sep  8 16:31 sde3
brw-------   1 root     root       8,  68 Sep  8 16:31 sde4
brw-------   1 root     root       8,  69 Sep  8 16:31 sde5
brw-------   1 root     root       8,  70 Sep  8 16:31 sde6
brw-------   1 root     root       8,  71 Sep  8 16:31 sde7
brw-------   1 root     root       8,  72 Sep  8 16:31 sde8
brw-r--r--   1 root     root      11,   0 Sep  8 16:31 sr0
brw-r-----   1 root     root      11,   1 Sep  8 16:31 sr1
brw-r-----   1 root     root      11,   2 Sep  8 16:31 sr2
brw-r-----   1 root     root       3,   1 Sep  8 16:31 swap
crw-r--r--   1 root     root       5,   0 Sep  8 16:31 tty
crw-r--r--   1 root     root       4,   0 Sep  8 16:31 tty0
crw-------   1 root     root       4,   1 Sep  8 16:31 tty1
crw-r--r--   1 root     root       4,   2 Sep  8 16:31 tty2
-rw-r--r--   1 root     root           20 Sep  8 16:31 tty21
crw-r--r--   1 root     root       4,   3 Sep  8 16:31 tty3
crw-r--r--   1 root     root       4,   4 Sep  8 16:31 tty4
crw-r--r--   1 root     root       4,   5 Sep  8 16:31 tty5
crw-r--r--   1 root     root       4,   6 Sep  8 16:31 tty6
crw-------   1 root     root       4,   7 Sep  8 16:31 tty7
crw-------   1 root     root       4,   8 Sep  8 16:31 tty8
crw-r--r--   1 root     root       4,  64 Sep  8 16:31 ttyS0
crw-r--r--   1 root     root       4,  65 Sep  8 16:31 ttyS1
crw-r--r--   1 root     root       4,  66 Sep  8 16:31 ttyS2
crw-r--r--   1 root     root       4, 192 Sep  8 16:31 ttyp0
crw-r--r--   1 root     root       4, 193 Sep  8 16:31 ttyp1
crw-r--r--   1 root     root       4, 194 Sep  8 16:31 ttyp2
crw-r--r--   1 root     root       4, 195 Sep  8 16:31 ttyp3
crw-r--r--   1 root     root       4, 196 Sep  8 16:31 ttyp4
crw-r--r--   1 root     root       4, 197 Sep  8 16:31 ttyp5
crw-r--r--   1 root     root       4, 198 Sep  8 16:31 ttyp6
crw-r--r--   1 root     root       4, 199 Sep  8 16:31 ttyp7
crw-r--r--   1 root     root       4, 200 Sep  8 16:31 ttyp8
crw-r--r--   1 root     root       4, 201 Sep  8 16:31 ttyp9
crw-r--r--   1 root     root       4, 202 Sep  8 16:31 ttypa
crw-r--r--   1 root     root       4, 203 Sep  8 16:31 ttypb
crw-r--r--   1 root     root       4, 204 Sep  8 16:31 ttypc
crw-r--r--   1 root     root       4, 205 Sep  8 16:31 ttypd
crw-r--r--   1 root     root       4, 206 Sep  8 16:31 ttype
crw-r--r--   1 root     root       4, 207 Sep  8 16:31 ttypf
-rw-------   1 root     root        63488 Sep  8 16:31 ttys0
crw-r--r--   1 root     root       4,  67 Sep  8 16:31 ttys3
crw-r--r--   1 root     root       1,   5 Sep  8 16:31 zero

boot_disk/etc:
total 173
-rw-r--r--   1 root     root           53 Sep  8 18:48 boot.env
-rwxr-xr-x   1 root     root        27408 Sep  8 18:48 e2fsck*
-rwxr-xr-x   1 root     root        18540 Sep  8 18:48 fdisk*
-rw-r--r--   1 root     root           69 Oct  8 12:27 fstab
-r-x------   1 root     root        13312 Sep  8 18:48 getty*
-rw-r--r--   1 root     root          334 Sep  8 18:48 group
-rw-r--r--   1 root     root           12 Sep  8 18:48 host.conf
-rw-r--r--   1 root     root           62 Sep  8 18:48 hosts
-r-x------   1 root     root         6684 Sep  8 18:48 ifconfig*
-rwxr-xr-x   1 root     root        11492 Sep  8 18:48 init*
-rw-r--r--   1 root     root         1017 Sep  9 22:12 inittab
-rw-r--r--   1 root     root            0 Oct  8 12:19 issue
-rw-r-----   1 root     root         5137 Sep  8 18:48 login.defs
-rwxr-xr-x   1 root     root        14028 Sep  8 18:48 mke2fs*
-rwxr-x---   1 root     root         2436 Sep  8 18:48 mkswap*
-rwxr-xr-x   1 root     root        11288 Sep  8 18:48 mount*
-rw-r--r--   1 root     root          327 Sep  8 18:48 passwd
-rwxr-xr-x   1 root     root          383 Sep 10 16:02 profile*
-rw-r--r--   1 root     root           94 Sep  8 18:48 protocols
-rwxr-xr-x   1 root     root          334 Oct  8 12:27 rc*
-rwxr-xr-x   1 root     root         9220 Sep  8 18:48 reboot*
-r-x------   1 root     root         4092 Sep  8 18:48 route*
-rw-r--r--   1 root     root           20 Sep  8 18:48 securetty
-rw-r--r--   1 root     root         9749 Sep  8 18:48 services
-rw-r--r--   1 root     root           36 Sep  8 18:48 shells
-rwxr-xr-x   1 root     root        13316 Sep  8 18:48 shutdown*
-rwxr-xr-x   1 root     root         2496 Sep  8 18:48 swapoff*
-rwxr-xr-x   1 root     root         2496 Sep  8 18:48 swapon*
-rw-r--r--   1 root     root         5314 Sep  8 18:48 termcap
-rwxr-xr-x   1 root     root         5412 Sep  8 18:48 umount*
-rw-r--r--   1 root     root          224 Sep  8 18:48 utmp
-rw-r--r--   1 root     root          280 Sep  8 18:48 wtmp

boot_disk/lib:
total 629
-rwxr-xr-x   1 root     root        17412 Sep 10 14:58 ld.so*
-rwxr-xr-x   1 root     root       623620 Sep  8 18:33 libc.so.4*

<sect2>Utility Disk ls-lR Directory Listing
<p>
The utility listing is of directory util_disk:

total 1
drwxr-xr-x   2 root     root         1024 Sep 10 16:05 bin/

util_disk/bin:
total 897
-rwxr-xr-x   1 root     root        41984 Sep 10 14:11 cpio*
-rwxr-xr-x   1 root     root       504451 Sep  9 21:39 ftape.o*
-rwxr-xr-x   1 root     root        63874 Sep  9 21:40 gzip*
-rwxr-xr-x   1 root     root        13316 Sep  9 21:34 insmod*
-rwxr-xr-x   1 root     root           58 Sep  9 21:34 lsmod*
-rwxr-xr-x   1 root     root         3288 Sep  9 21:34 mknod*
-rwxr-xr-x   1 root     root         9220 Sep  9 21:34 rmmod*
-rwxr-xr-x   1 root     root       226308 Sep  9 22:13 tar*

4.2 Shell Scripts to Build Diskettes

There are two shell scripts:

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. Then check the configuration variables in the shell scripts and change them as required before running the scripts.

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 1994. 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/vmlinux $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

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 1994. 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

Next Chapter, Previous Chapter

Table of contents of this chapter, General table of contents

Top of the document, Beginning of this Chapter