blob: 68e6169949aafd5d95ea8cf2131cabca305b6dff [file] [log] [blame]
#!/bin/bash
# This is the file containing the filesystem. You probably shouldn't change
# it since the kernel has this name hard-wired.
FSFILE=root_fs
# Increase this if you add more stuff and 100 Meg isn't enough.
FSMEGS=100
# This is a temporary mount point which will be used to mount the new
# filesystem while it's being built.
MNTDIR=mnt
# Change these if your distribution is located someplace else
CDDIR=/mnt/cdrom
RPMDIR=$CDDIR/RedHat/RPMS
# These are to get bash off the ground. You probably shouldn't change them.
BASH_RPMS="filesystem- ldconfig- glibc- libtermcap- bash-"
# These are all the others. Add new rpms to this list if you want more stuff
# in your filesystem.
REST="bdflush- fileutils- grep- mingetty- mount- net-tools- textutils- \
shadow-utils- chkconfig- procps- sed- mktemp- vixie-cron- modutils- \
e2fsprogs- logrotate- sysklogd- console-tools- gawk- initscripts- quota- \
slang- pwdb- cracklib- cracklib-dicts- compat-glibc- glib- pam- \
sh-utils- util-linux- SysVinit- tcp_wrappers- tcsh- gdbm- perl-5.00503- \
netkit-base- telnet- ftp- wu-ftpd- indexhtml- zlib- lynx- findutils-"
function rpm_file()
{
local name=$1
set $RPMDIR/$1[-0-9.i]*.rpm
if [ $# -ne 1 ]
then
echo
echo Found too many rpms for $name 2>&1
elif [ ! -f $1 ]
then
echo
echo Found no rpms for $name 2>&1
fi
echo $1
}
echo Creating an empty file...
dd if=/dev/zero of=$FSFILE bs=$((1024 * 1024)) count=$FSMEGS || exit 1
echo Making a file system in it...
sudo mke2fs -F $FSFILE || exit 1
echo Mounting it on $MNTDIR
sudo mount -o loop $FSFILE $MNTDIR || exit 1
cd $MNTDIR
sudo mkdir -p var/lib/rpm/ || exit 1
sudo mkdir -p var/tmp/ || exit 1
echo Forcibly installing the rpms that bash needs
for rpm in $BASH_RPMS
do
rpm_file=`rpm_file $rpm`
echo Installing $rpm_file
sudo rpm -i --nodeps --root `pwd` $rpm_file
done
echo Bash should now work
sudo rpm -i --root `pwd` `rpm_file setup-`
echo -n Making devices...
sudo mkdir dev
echo -n "pts "
sudo mkdir dev/pts
echo -n "null "
sudo mknod dev/null c 1 3
echo -n "console "
sudo mknod dev/console c 5 1
echo -n "fhd0 "
sudo mknod dev/fhd0 b 62 0
echo -n "tty0 "
sudo mknod dev/tty0 c 4 0
echo -n "cua0 "
sudo mknod dev/cua0 c 5 64
echo -n "ptmx "
sudo mknod dev/ptmx c 5 2
sudo chmod 666 dev/ptmx
echo ptys
for i in 0 1 2 3 4 5 6 7 8 9
do
sudo mknod dev/ptyp$i c 2 $i
sudo mknod dev/ttyp$i c 3 $i
sudo chmod 666 dev/ptyp$i dev/ttyp$i
done
echo Installing a couple of rpms for info
sudo rpm -i --root `pwd` `rpm_file info-` `rpm_file ncurses-`
echo Here are all the rest
for rpm in $REST
do
file=`rpm_file $rpm`
echo $file
sudo rpm -i --root `pwd` $file
done
echo Setting up /etc/inittab
sudo bash -c 'cat > etc/inittab' <<EOF
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Things to run in every runlevel.
ud::once:/sbin/update
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels
0:2345:respawn:/sbin/mingetty tty0
c:2345:respawn:/sbin/mingetty cua0
# Run xdm in runlevel 5
# xdm is now a separate service
x:5:respawn:/etc/X11/prefdm -nodaemon
EOF
echo Setting up /etc/passwd
sudo bash -c 'cat > etc/passwd' <<EOF
root::0:0:root:/root:/bin/bash
user::1:1:user:/home/user:/bin/bash
EOF
echo Setting up /etc/group
sudo bash -c 'cat > etc/group' <<EOF
root::0:root
user::1:user
utmp:x:16:
EOF
echo Setting up etc/fstab
sudo bash -c 'cat > etc/fstab' <<EOF
/dev/fhd0 / ext2 defaults 1 1
none /proc proc defaults
none /dev/pts devpts mode=0622 0 0
EOF
echo Setting up etc/sysconfig/keyboard
sudo bash -c 'cat > etc/sysconfig/keyboard' <<EOF
KEYTABLE=us
EOF
echo Setting up etc/securetty
sudo bash -c 'cat >> etc/securetty' <<EOF
cua0
tty0
EOF
echo Setting up etc/issue
sudo bash -c 'cat > etc/issue' <<EOF
Welcome to the user-mode kernel.
EOF
echo Copying /bin/true over /sbin/hwclock
sudo cp bin/true sbin/hwclock
echo Setting up etc/pam.d so you can log in
sudo rm etc/pam.d/*
sudo bash -c 'cat > etc/pam.d/other' <<EOF
#%PAM-1.0
auth required pam_unix_auth.so
account required pam_unix_acct.so
password required pam_unix_passwd.so
session required pam_unix_session.so
EOF
sudo bash -c 'cat > etc/pam.d/ftp' <<EOF
#%PAM-1.0
auth required pam_unix_auth.so
account required pam_unix_acct.so
password required pam_unix_passwd.so
session required pam_unix_session.so
EOF
echo Setting up /etc/sysconfig/network
sudo bash -c 'cat > etc/sysconfig/network' <<EOF
NETWORKING=yes
FORWARD_IPV4=false
HOSTNAME=uml
EOF
echo Setting up /etc/sysconfig/network-scripts/ifcfg-umn
sudo bash -c 'cat > etc/sysconfig/network-scripts/ifcfg-umn' <<EOF
DEVICE=umn
IPADDR=192.168.0.253
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes
EOF
echo Setting up /etc/sysconfig/network-scripts/ifup-umn
sudo bash -c 'cat > etc/sysconfig/network-scripts/ifup-umn' <<EOF
#!/bin/bash
cd /etc/sysconfig/network-scripts
. network-functions
CONFIG=\$1
source_config
if [ "\$2" != "boot" ]
then
exit 0
fi
ether=""
for n in \`echo \$IPADDR | sed 's/\./ /g'\`
do
ether="\$ether\`echo \$n | awk '{printf "%x", \$0}'\`:"
done
ether="\$ether"0:0
ifconfig \$DEVICE \$IPADDR hw ether \$ether
exit 0
EOF
sudo chmod 755 etc/sysconfig/network-scripts/ifup-umn
cd ..
sudo umount $MNTDIR || exit 1
echo All set