Hi! I've modified "lvmcreate_initrd" in such a way that it can be used to build a customizable rescue system. Instead of taking the files to be copied to the RAM disk from a variable, as the present "lvmcreate_initrd" does, I'm gathering this information from several files: - binary_files_for_initrd: contains assorted binaries from /bin, /sbin, /usr/bin, and /usr/sbin - config_files_for_initrd: the desired config files from the /etc dir - auxiliary_files_for_initrd: contains additional files that don't fit in any of the above categories, e.g. everything under /usr/lib/terminfo - symlinks_for_initrd: contains the name of the symlink and the file/dir the link points to. Each of this file contains one entry per line. Those entries may also contain wildcards, e.g. "/etc/lvm*". Comments start with a "#". The problem I'm currently having with this approach, however, is that when booting from LILO, a "Loading rescue......................" message is displayed on the screen. Then my machine hangs (normally it should simply boot the kernel at that point). What can be the cause of this behavior? All the work is done by "main.sh" (a rather unfortunate name, I admit it). "constants" contains some constants which are needed inside "main.sh". "glob_vars" holds all the global variables, and "functions" has all function declaration, some of which are not used yet. One of the main differences (apart from the fact that it doesn't work yet (-, ) from the present "lvmcreate_initrd" script is that it uses a file along with a loop device associated with it in order to hold the RAM disk's contents (the present "lvmcreate_initrd" uses the RAM disk straight ahead and this would take too much RAM by far for what I'm trying to achieve). The system I'm using for this is a SuSE 6.4 system (glibc 2.1.1 based) with reiserfs 3.5.18 and lvm 0.8e. The reason why I'm actually changing the "lvmcreate_initrd" script is that I want a rescue system that can live in "/boot" independently of the remaining file systems on the hard disk. This would be particularly useful when switching distributions and yet wanting to preserve existing logical volumes. Please tell me what you think of this idea. Any help is greatly appreciated! Greetings, Holger
Attachment:
main.sh
Description: Bourne shell script
#
# Functions
#
# Get constants
. constants
# Get global variables
. glob_vars
# Trap important signals
trap "
echo 'interrupted --- cleaning up'
cd /
$RM -rf $toplevel_dir
$UMOUNT $DEVLOOP
$LOSETUP -d $DEVLOOP
" 1 2 3 15
# Creates a small but sufficient fstab file for our ramdisk image
function create_fstab {
echo "# Automatically generated by $CMD on `$DATE +%Y/%m/%d` at `$DATE +%H:%M`
/dev/ram / ext2 defaults 1 0
none /proc proc defaults 0 0
/dev/cdrom /cdrom iso9660 user,ro,exec,noauto 0 0
# End of automatically generated section
" > etc/fstab
if [ $? -ne 0 ] ; then
echo "$CMD --- ERROR: create_fstab: Unable to write etc/fstab file"
exit 1
fi
$CHMOD 644 etc/fstab
if [ $? -ne 0 ] ; then
echo "$CMD --- ERROR: ${CHMOD}: Unable to chmod etc/fstab file"
exit 1
fi
}
# Creates a linuxrc file for our ramdisk image
# (It is executed immediately after the contents of the image file are stored
# in RAM)
function create_linuxrc {
echo "#!/bin/sh
# Autmatically generated by $CMD on `$DATE +%Y/%m/%d` at `$DATE +%H:%M`
$INSMOD lvm
$MOUNT /proc
$VGSCAN
$VGCHANGE -a y
$UMOUNT /proc
# End of automatically generated section
" > linuxrc
if [ $? -ne 0 ] ; then
echo "$CMD --- ERROR: create_linuxrc: Unable to write linuxrc file"
exit 1
fi
$CHMOD 555 linuxrc
if [ $? -ne 0 ] ; then
echo "$CMD --- ERROR: ${CHMOD}: Unable to chmod linuxrc file"
exit 1
fi
}
# reads the contents of the file specified by $1 to directory $toplevel_dir
function copy_files {
while read file ; do
`echo $file | $EGREP -q '^ *\#|^ *$'` && continue
file=`echo -n $file | $SED 's/\( |\t\)*\#\(.*\)$//'`
file=`echo -n $file | $PERL -pe 's/\n//'`
#echo $file
# $FIND $file -print0 | $CPIO -pdm $toplevel_dir 2> /dev/null
( $FIND $file -depth -print0 | $TAR -cpf - --null -T - 2>/dev/null ) | ( $TAR -C $toplevel_dir -xpf - --null 2>/dev/null )
# Commented out because of "Unable to link to ..." errors from tar
# When checking the results, these proved to be false
# The errors resulted from the order of the file names returned by the shell
# when expanding the wildcards. More precisely, they occured when the name
# of an ordinary file was preceded by that of a symbolic link. That meant tar
# was unable to create the link since the file the link pointed to did not yet
# exist.
# Commenting out the following code snippet, however, means that the remaining
# - and possibly real - error conditions are not taken into account either.
# This is rather unfortunate, of course, but I don't know what to do about it.
# if [ $? -ne 0 ] ; then
# echo "$CMD --- ERROR: copy_files: Unable to cpio files to \"$toplevel_dir\""
# exit 1
# fi
done < $1
}
# Determines the sizes of all the files specified in $1 and calculates the sum
# In case the file read in is the file containing the binaries, the sizes
# of the shared libs are taken into account as well.
function determine_file_size {
while read file ; do
sizes=`$LS -l $file | $AWK '{ print $5 }'`
for size in $sizes ; do
final_size=`$EXPR $final_size + $size`
done
if [ "$1" == "$BIN_CFG_FILE" ] ; then
shlibs=`$LDD $file | $AWK '{ if (/=>/) { print $3} }' | $SORT -u 2>/dev/null`
for lib in $shlibs ; do
libsize=`$LS -Ll $lib | $AWK '{ print $5 }'`
final_size=`$EXPR $final_size + $size`
done
fi
done < $1
}
# Prints an informational message and terminates the program
function bye {
echo "Sorry. There is no way to enlarge the file system."
echo "Please reconsider your choices in binary_files_for_initrd"
echo "or auxiliary_files_for_initrd, respectively."
exit 1
}
# used to ask the user a question that can only be answered by "yes" or "no"
function ask_user {
while $TRUE ; do
echo -n "$1"
read choice
case "$choice" in
[yYnN])
break
;;
*)
echo "Please press the correspondig key for \"yes\" or \"no\""
esac
done
}
# Checks whether the mount point given as the first argument belongs to
# a file system residing on a separate logical volume
# If so, it asks the user whether the file system (and thus the underlying
# logical volume) may be resized
function check_sep_lv {
echo -n "Checking whether $1 resides on a logical volume..."
lv=`$DF -k | $EGREP "$1\$" | $AWK '{ print $1 }' | egrep 'lv$'`
if [ -z "$lv" ] ; then
echo "no."
if [ "$1" == "$PREFERED_DIR" ] ; then
bye
fi
echo "So I will take a look at the next file system"
next_fs=1
else
echo "yes."
echo "I can extend the file system in case it's a Reiser fs."
echo -n "Checking whether it's a Reiser file system..."
reiserfs=`$DF -Tk | $EGREP "$1\$" | $GREP "reiserfs"`
if [ -z "$reiserfs" ] ; then
echo "no."
if [ "$1" == "$PREFERED_DIR" ] ; then
bye
fi
echo "So I will take a look at the next file system"
next_fs=1
else
echo "yes."
ask_user "Do you want me to extend the $1 file system (yY/nN)? "
case "$choice" in
[yY])
echo -n "All righty. Let's get this party started ,-)..."
$LVEXTEND -L ${required_size}M $lv
$RESIZE_REISERFS -s${required_size}M -f $lv
echo "done."
# Ok (put the files there)
echo "Putting files in extended $1 file system"
toplevel_dir="$1/mnt.$$"
#exit 0
;;
[nN])
if [ "$1" != "$PREFERED_DIR" ] ; then
echo "Ok, I will take a look at the next file system"
next_fs=1
else
echo "Sorry, but if you don't let me extend the $PREFERED_DIR file system, I can not do anything."
bye
fi
;;
esac
fi
fi
}
# Checks which ext2/reiserfs file systems are available in addition to "/",
# "/boot", and $PREFERED_DIR
# For each of these file systems
# - whether it is large enough to hold the files
# - if so, ask the user whether this file system should be used
# * in case the user confirms, store the files in this place
# * in case he denies, go on with the next file system
# - if the file system is not large enough, invoke check_sep_lv on that fs
# in order to determine whether it's been created on top of a logical volume
function check_other_fs {
for mount_point in `$DF -Tk | $EGREP "reiserfs|ext2" | $EGREP -v "/\$|/boot\$|$PREFERED_DIR\$" | $AWK '{ print $6 }'` ; do
# Find the device for each mount point
device=`$DF | $GREP "$mount_point" | $AWK '{ print $1 }'`
# Check whether there is enough space in the file system
echo -n "Checking whether there is enough free space in $mount_point..." free_space`$DF -k | $GREP "$mount_point" | $AWK '{ print $4 }'`
if [ "$free_space" -ge "$required_space" ] ; then
echo "yes."
ask_user "Do you want to store your files there (yY/nN)? "
# Ok (put the files there)
case "$choice" in
[yY])
# Ok (put the files there)
echo "Putting files in $mount_point"
toplevel_dir="${mount_point}/mnt.$$"
break
#exit 0
;;
[nN])
# continue for loop
continue
;;
esac
else
# There is not enough space in $mount_point
echo "no."
check_sep_lv $mount_point
if [ "$next_fs" -eq 1 ] ; then
continue
fi
fi
done
}
function copy_all_files {
echo "*** Copying all required files to $toplevel_dir ***"
echo -n "$CMD --- 1. Copying binaries to $toplevel_dir..."
copy_files $BIN_CFG_FILE
echo "done."
echo -n "$CMD --- 2. Determining required shared libraries..."
while read file ; do
shlibs=`$LDD $file | $AWK '{ if (/=>/) { print $3} }' | $SORT -u 2>/dev/null`
# $FIND $shlibs | $CPIO -Lpdm $toplevel_dir 2> /dev/null
( $TAR -chpf - $shlibs 2>/dev/null ) | ( $TAR -C $toplevel_dir -xhpf - 2>/dev/null )
for lib in $shlibs ; do
$STRIP $toplevel_dir/$lib
done
done < $BIN_CFG_FILE
echo "done."
echo -n "$CMD --- 3. Copying config files to $toplevel_dir..."
copy_files $CONF_CFG_FILE
echo "done."
echo -n "$CMD --- 4. Copying auxiliary files to $toplevel_dir..."
copy_files $AUX_CFG_FILE
echo "done."
}
function modify_lilo_conf {
echo "
# beginning of section added by $CMD on `$DATE +%Y/%m/%d` at `$DATE +%H:%M`
image = $BOOT_KERNEL
initrd = $INITRD
root = $ROOT_PARTITION
label = rescue
# end of section added by $CMD on `$DATE +%Y/%m/%d` at `$DATE +%H:%M`
" >> /etc/lilo.conf
if [ $? -ne 0 ] ; then
echo "$CMD --- ERROR: modify_lilo_conf: Unable to modify \"$LILO_CONF\""
exit 1
fi
}
# # Global Variables # # The amount of space the files will need (in Mbytes) final_size=0 # Used as a synonym, but in a different context required_space=0 # A flag used to decide whether more file systems should be processed next_fs=0 # The actual directory containing the file system layout for the (uncompressed) # ramdisk image toplevel_dir="" # The file system containing $wanted_dir fs=""
# # Constants # # The root partition of your hard disk ROOT_PARTITION="/dev/hda6" # The kernel to be booted BOOT_KERNEL="/boot/vmlinuz" # The name of the script CMD="main.sh" # The file containing the names of the binaries that are supposed to be # included in the ramdisk image (taken from /bin, /sbin/, /usr/bin, /usr/sbin) BIN_CFG_FILE="binary_files_for_initrd" # The same for config files (taken from /etc) CONF_CFG_FILE="config_files_for_initrd" # The same for auxiliary files (various files from /lib and /usr/lib) AUX_CFG_FILE="auxiliary_files_for_initrd" # The file containing the symlinks SYMLINK_CFG_FILE="symlinks_for_initrd" # The config file for LILO LILO_CONF="/etc/lilo.conf" # The kernel version (needed in order to figure out which kernel # modules we need) VERSION="$1" [ -z "$VERSION" ] && VERSION=`uname -r` # The path to the kernel modules MODULES="/lib/modules/$VERSION" # The loop device DEVLOOP="/dev/loop0" # The file system containing the file system layout for the ramdisk image PREFERED_DIR="/tmp" # The compressed ramdisk image is stored here INITRD="/boot/initrd.gz" # The temporary file used in conjunction with $DEVLOOP TMP_FILE="$$" ### Various Linux/Unix tools RM="/bin/rm" LS="/bin/ls" LNS="/bin/ln -s" DD="/bin/dd" MOUNT="/bin/mount" UMOUNT="/bin/umount" LOSETUP="/sbin/losetup" CHMOD="/bin/chmod" EGREP="/usr/bin/egrep" GREP="/usr/bin/grep" SED="/usr/bin/sed" PERL="/usr/bin/perl" STRIP="/usr/bin/strip" FIND="/usr/bin/find" AWK="/usr/bin/awk" CPIO="/usr/bin/cpio" GZIP="/usr/bin/gzip" EXPR="/usr/bin/expr" LDD="/usr/bin/ldd" SORT="/usr/bin/sort" DF="/bin/df" WC="/usr/bin/wc" TAR="/bin/tar" PWD="/bin/pwd" MKDIR="/bin/mkdir" TRUE="/bin/true" VGSCAN="/sbin/vgscan" VGCHANGE="/sbin/vgchange" LVEXTEND="/sbin/lvextend" RESIZE_REISERFS="/sbin/resize_reiserfs" MKE2FS="/sbin/mke2fs" LILO="/sbin/lilo" DATE="/bin/date" INSMOD="/sbin/insmod" DEPMOD="/sbin/depmod" # The name of the directory the config files reside in CFG_FILE_DIR=`$PWD`
# This file contains the binaries that are supposed to be included in the # RAM disk image # Files in /bin /bin/bash /bin/cat /bin/chgrp /bin/chmod /bin/chown /bin/cp /bin/date /bin/dd /bin/dd_rescue /bin/df /bin/dmesg /bin/echo /bin/ed /bin/false /bin/fuser /bin/gzip /bin/hostname /bin/kill /bin/ln /bin/loadkeys /bin/login /bin/ls /bin/mkdir /bin/mknod /bin/mktemp /bin/more /bin/mount /bin/mv /bin/netstat /bin/ping /bin/ps /bin/pwd /bin/rescan-scsi-bus.sh /bin/rm /bin/rmdir /bin/rpm /bin/sleep /bin/stty /bin/su /bin/sync /bin/tar /bin/tcsh /bin/true /bin/umount /bin/uname /bin/vim # Files in /sbin /sbin/activate /sbin/badblocks /sbin/checkproc /sbin/ctrlaltdel /sbin/e2fsck /sbin/fdisk /sbin/fsck /sbin/fsck.ext2 /sbin/halt /sbin/fsck.minix /sbin/hdparm /sbin/hwclock /sbin/ifconfig /sbin/init /sbin/killall5 /sbin/killproc /sbin/lilo /sbin/mingetty /sbin/mke2fs /sbin/mkfs /sbin/mkfs.ext2 /sbin/mkfs.minix /sbin/mkswap /sbin/restore /sbin/route /sbin/sfdisk /sbin/shutdown /sbin/startproc /sbin/sulogin /sbin/swapon /sbin/tune2fs /sbin/update /sbin/arp /sbin/dump /sbin/cfdisk /sbin/ckraid /sbin/depmod /sbin/e2fsadm /sbin/insmod.static /sbin/insmod_ksymoops_clean /sbin/installpkg /sbin/kbdrate /sbin/kerneld /sbin/ldconfig /sbin/losetup /sbin/lspci /sbin/lv* /sbin/mdadd /sbin/mdcreate /sbin/mkpv /sbin/mkraid /sbin/mkreiserfs /sbin/mkswap /sbin/modinfo /sbin/pkgtool /sbin/pv* /sbin/quotacheck /sbin/quotaon /sbin/raidstart /sbin/rctab /sbin/removepkg /sbin/rmt /sbin/runlevel /sbin/setpci /sbin/setserial /sbin/setserialbits /sbin/sln /sbin/start-stop-daemon /sbin/sysctl /sbin/vg* # Files in /usr/sbin /usr/sbin/klogd /usr/sbin/mklost+found /usr/sbin/rdev /usr/sbin/syslogd /usr/sbin/chpasswd /usr/sbin/cron /usr/sbin/edquota /usr/sbin/gpm /usr/sbin/groupadd /usr/sbin/groupmod /usr/sbin/groupdel /usr/sbin/grpck /usr/sbin/inetd /usr/sbin/in.rshd /usr/sbin/in.telnetd /usr/sbin/in.ftpd /usr/sbin/in.fingerd /usr/sbin/in.rlogind /usr/sbin/john /usr/sbin/klogconsole /usr/sbin/newusers /usr/sbin/pwck /usr/sbin/pwconv /usr/sbin/pwunconv /usr/sbin/quotastats /usr/sbin/raidconvert.sh /usr/sbin/raw /usr/sbin/rdev /usr/sbin/repquota /usr/sbin/safe_finger /usr/sbin/setquota /usr/sbin/sgcheck /usr/sbin/sitar.pl /usr/sbin/stinit /usr/sbin/sshd /usr/sbin/suserundig /usr/sbin/syslogd /usr/sbin/tcpd /usr/sbin/tcpdchk /usr/sbin/tcpdmatch /usr/sbin/tcpdump /usr/sbin/tcpslice /usr/sbin/temp-watch /usr/sbin/traceroute /usr/sbin/useradd /usr/sbin/useradd.local /usr/sbin/userdel /usr/sbin/userdel.local /usr/sbin/usermod /usr/sbin/vipw /usr/sbin/visudo /usr/sbin/warnquota # Files in /usr/bin /usr/bin/afio /usr/bin/agrep /usr/bin/alien /usr/bin/basename /usr/bin/bc /usr/bin/bonnie /usr/bin/bunzip2 /usr/bin/bzcat /usr/bin/bzip2 /usr/bin/bzip2recover /usr/bin/cal /usr/bin/cat2 /usr/bin/chage /usr/bin/chattr /usr/bin/chfn /usr/bin/chkdupexe /usr/bin/chroot /usr/bin/chsh /usr/bin/cksum /usr/bin/clear /usr/bin/cmp /usr/bin/cmp2 /usr/bin/colrm /usr/bin/column /usr/bin/comm /usr/bin/compress /usr/bin/cpio /usr/bin/crontab /usr/bin/csplit /usr/bin/cut /usr/bin/des /usr/bin/dialog /usr/bin/diff /usr/bin/diff3 /usr/bin/dir /usr/bin/dircolors /usr/bin/dirname /usr/bin/du /usr/bin/egrep /usr/bin/env /usr/bin/expand /usr/bin/export /usr/bin/expr /usr/bin/factor /usr/bin/faillog /usr/bin/fdformat /usr/bin/fgrep /usr/bin/file /usr/bin/find /usr/bin/find2perl /usr/bin/finger /usr/bin/fiz /usr/bin/fmt /usr/bin/fold /usr/bin/free /usr/bin/ftp /usr/bin/funzip /usr/bin/gawk /usr/bin/gcal /usr/bin/gcal2txt /usr/bin/getopt /usr/bin/gpart /usr/bin/gpasswd /usr/bin/gpm-root /usr/bin/grep /usr/bin/gzexe /usr/bin/h2ph /usr/bin/h2xs /usr/bin/head /usr/bin/hex /usr/bin/hexdump /usr/bin/hostid /usr/bin/id /usr/bin/install /usr/bin/ipcrm /usr/bin/ipcs /usr/bin/jed /usr/bin/joe /usr/bin/join /usr/bin/jove /usr/bin/killall /usr/bin/last /usr/bin/lastlog /usr/bin/ldd /usr/bin/lddlibc4 /usr/bin/lddlibc5 /usr/bin/less /usr/bin/lessecho /usr/bin/lesskey /usr/bin/lesspipe.sh /usr/bin/lha /usr/bin/locate /usr/bin/lockfile /usr/bin/logger /usr/bin/logname /usr/bin/logsurfer /usr/bin/look /usr/bin/lsattr /usr/bin/lsdev /usr/bin/lsof /usr/bin/ltrace /usr/bin/lynx /usr/bin/m4 /usr/bin/mail /usr/bin/mtools /usr/bin/mcheck /usr/bin/mcomp /usr/bin/md5sum /usr/bin/merge /usr/bin/mesg /usr/bin/mkinfodir /usr/bin/mkmanifest /usr/bin/mmv /usr/bin/mt /usr/bin/mtools /usr/bin/mtst /usr/bin/mxtar /usr/bin/namei /usr/bin/nc /usr/bin/newgrp /usr/bin/nice /usr/bin/nl /usr/bin/nm /usr/bin/nohup /usr/bin/objdump /usr/bin/od /usr/bin/old /usr/bin/passwd /usr/bin/paste /usr/bin/patch /usr/bin/pathchk /usr/bin/pdiff /usr/bin/perl /usr/bin/perlcc /usr/bin/perldoc /usr/bin/pgrep /usr/bin/pilot /usr/bin/pinky /usr/bin/pkgmake /usr/bin/pkgpack /usr/bin/pl2pm /usr/bin/pr /usr/bin/printenv /usr/bin/printf /usr/bin/procinfo /usr/bin/quota /usr/bin/rcp /usr/bin/recode /usr/bin/remsync /usr/bin/rename /usr/bin/renice /usr/bin/rev /usr/bin/rgrep /usr/bin/rpm2cpio /usr/bin/rpm2html /usr/bin/rpmlocate /usr/bin/rsh /usr/bin/s2p /usr/bin/scan_scsi.linux /usr/bin/scp /usr/bin/script /usr/bin/scsi_inquiry /usr/bin/scsiformat /usr/bin/scsiinfo /usr/bin/sdiff /usr/bin/sed /usr/bin/seq /usr/bin/setfdprm /usr/bin/setterm /usr/bin/sg* /usr/bin/shar /usr/bin/size /usr/bin/skill /usr/bin/snice /usr/bin/socklist /usr/bin/sort /usr/bin/sperl5.00503 /usr/bin/splain /usr/bin/split /usr/bin/sprof /usr/bin/ssh* /usr/bin/strace /usr/bin/strings /usr/bin/strip /usr/bin/su1 /usr/bin/sudo /usr/bin/suidperl /usr/bin/tac /usr/bin/tail /usr/bin/tailf /usr/bin/talk /usr/bin/targ /usr/bin/tarl /usr/bin/tcal /usr/bin/teachjove /usr/bin/tee /usr/bin/telnet /usr/bin/tgz /usr/bin/tic /usr/bin/tidy /usr/bin/time /usr/bin/tload /usr/bin/top /usr/bin/touch /usr/bin/tput /usr/bin/tset /usr/bin/tr /usr/bin/tty /usr/bin/tzselect /usr/bin/uemacs /usr/bin/unarj /usr/bin/unexpand /usr/bin/uniq /usr/bin/units /usr/bin/unrar /usr/bin/unshar /usr/bin/unzip /usr/bin/unzipsfx /usr/bin/updatedb /usr/bin/uptime /usr/bin/users /usr/bin/utmpdump /usr/bin/uudecode /usr/bin/uudepipe /usr/bin/uudeview /usr/bin/uuencode /usr/bin/uuenview /usr/bin/vdir /usr/bin/vimtutor /usr/bin/vmstat /usr/bin/vpass /usr/bin/w /usr/bin/w3m /usr/bin/wall /usr/bin/watch /usr/bin/wc /usr/bin/wdiff /usr/bin/weblint /usr/bin/wget /usr/bin/whereis /usr/bin/which /usr/bin/who /usr/bin/whoami /usr/bin/wipe /usr/bin/word2x /usr/bin/write /usr/bin/xargs /usr/bin/yes /usr/bin/ytree /usr/bin/zdiff /usr/bin/zforce /usr/bin/zgrep /usr/bin/zip /usr/bin/zipcloak /usr/bin/zipgrep /usr/bin/zipnote /usr/bin/zipsplit /usr/bin/zmore /usr/bin/znew /usr/bin/zoo /usr/bin/zsh
/etc/DIR_COLORS /etc/HOSTNAME /etc/fstab /etc/group /etc/host.conf /etc/hosts /etc/hushlogins /etc/inittab /etc/inputrc /etc/issue /etc/issue.net /etc/ld.so.cache /etc/ld.so.conf /etc/lesskey /etc/lesskey.bin /etc/logfiles /etc/motd /etc/mtab /etc/netgroup /etc/networks /etc/nsswitch.conf /etc/passwd /etc/profile* /etc/protocols /etc/rc.config* /etc/services /etc/shells /etc/syslog.conf /etc/termcap /etc/ttytype /etc/vimrc /etc/crontab /etc/cron.* /etc/fdprm /etc/filesystems /etc/gshadow /etc/hosts.equiv /etc/identd.conf /etc/inetd.conf /etc/jed.rc /etc/modules.conf /etc/mime.types /etc/mtools.conf /etc/pam* /etc/perm* /etc/printcap /etc/apsfilter* /etc/pwdb.conf /etc/resolv.conf /etc/rpc /etc/runlevel.fallback /etc/securetty /etc/securi* /etc/shadow /etc/ske* /etc/ss* /etc/su1* /etc/sudoers /etc/csh.login /etc/csh.cshrc /etc/zshrc /etc/wgetrc /etc/mailcap /etc/lvm*
/lib/libresolv.so.2 /lib/libpwdb.so.0.61 /lib/security/* /lib/*pam* /usr/share/terminfo/* /dev/* /sbin/init.d/*
bin/awk ../usr/bin/awk bin/basename ../usr/bin/basename bin/compress ../usr/bin/compress bin/csh tcsh bin/egrep ../usr/bin/egrep bin/gawk ../usr/bin/gawk bin/grep ../usr/bin/grep bin/gtar tar bin/gunzip ../usr/bin/gunzip bin/mail ../usr/bin/mail bin/sed ../usr/bin/sed bin/sh bash bin/touch ../usr/bin/touch bin/uncompress ../usr/bin/compress bin/vi vim bin/reboot ../sbin/halt bin/pidof ../sbin/killall5 sbin/swapoff swapon sbin/telinit init sbin/insmod insmod.static sbin/ksyms ksyms.static sbin/ksyms.static insmod sbin/lsmod insmod sbin/lsmod.static lsmod sbin/mdrun mdadd sbin/mdstop mdadd sbin/modprobe insmod sbin/modprobe.static modprobe sbin/quotaoff quotaon sbin/raid0run raidstart sbin/raidhotadd raidhotremove sbin/raidhotremove raidstart sbin/raidstop raidstart sbin/rmmod insmod sbin/rmmod.static rmmod sbin/rdump dump sbin/rrestore restore usr/sbin/unique john usr/sbin/unshadow john usr/sbin/vidmode rdev usr/sbin/ramsize rdev usr/sbin/rootflags rdev usr/sbin/swapdev rdev usr/bin/awk gawk usr/bin/bash ../../bin/bash usr/bin/ash ../../bin/tcsh usr/bin/ed ../../bin/ed usr/bin/edit vim usr/bin/ex vim usr/bin/gunzip gzip usr/bin/gzip ../../bin/gzip usr/bin/jmacs joe usr/bin/lastb last usr/bin/loadkeys ../../bin/loadkeys usr/bin/mad mmv usr/bin/mailx mail usr/bin/mattrib mtools usr/bin/mbadblocks mtools usr/bin/mcat mtools usr/bin/mcd mtools usr/bin/mcopy mtools usr/bin/mcp mmv usr/bin/mdel mtools usr/bin/mdeltree mtools usr/bin/mdu mtools usr/bin/mformat mtools usr/bin/minfo mtools usr/bin/mlabel mtools usr/bin/mln mmv usr/bin/mmd mtools usr/bin/mmount mtools usr/bin/mmove mtools usr/bin/mpartition mtools usr/bin/mrd mtools usr/bin/mread mtools usr/bin/mren mtools usr/bin/mtoolstest mtools usr/bin/mtype mtools usr/bin/mzip mtools usr/bin/rbash ../../bin/bash usr/bin/red ed usr/bin/rjoe joe usr/bin/slogin ssh usr/bin/tcsh ../../bin/tcsh usr/bin/uncompress compress usr/bin/vi vim usr/bin/view vim usr/bin/vim ../../bin/vim usr/bin/zcat gzip usr/bin/zcmp zdiff usr/bin/zipinfo unzip usr/bin/zless zmore etc/conf.modules modules.conf etc/rc.d ../sbin/init.d usr/lib/terminfo ../../usr/share/terminfo