The Kickstart HOWTO is very very good.
One note, I think it would be a good if someone made a follow-up article for other Linux distributions. I would be more than happy to help.
KickStart for RedHat makes it so you can do a quick installation of RedHat 6.0 without having to go through all the installation menus. It automates it for you from start to finish (assuming nothing goofs up in between). This is handy for multiple installations. All you have to do is create a "ks.cfg" file on the RedHat 6.0 boot disk. Then boot off of the disk, type in the command "linux ks=floppy" on the first screen, and if you are lucky, when it starts the installation process, it should be able to grab that file and do the whole installation for you.
Here are the key points you need to be aware of,
Copy what is between the lines to a file called "ks.cfg" to your boot disk.
Then, when you get to the
first screen of the Linux installation, type "linux ks=floppy". Also,
before you do this, make sure the BIOS in your computer is set to boot
off of the floppy drive.
# Copy this file as "ks.cfg" to the boot disk that comes with
# RedHat 6.0. Or make your own boot disk. Anyways, the
# bootdisk is formatted msdos, so you can use a Windows
# computer to copy this file to it. Also, when the prompt
# comes up after you boot off of the floppy disk, type
# linux ks=floppy
# and press enter.
# This is just the configuration you need to do an upgrade using a cdrom.
#
#
### Choose the most popular language in the world.
### This always upsets the French.
lang en
### Tell it to use the cdrom to get the rpms
cdrom
### Tell it to use a us keyboard
keyboard us
### Tell it this is an upgrade and not a regular install
upgrade
### Tell it to install Lilo at the master boot record
lilo --location mbr
%post
echo "Hey dude, this is an example of a post install command using echo."
echo "You probably won't be able to see it though if perl isn't executed."
PATH=$PATH;/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
export PATH
ldconfig
perl -e '$A = 50; print "\nSleeping for 20 seconds. Test variable = $A\n"'
perl -e 'sleep 20'
Well, this configuration uses ftp, and if you wanted to use nfs, you could comment the ftp option and uncomment the nfs option. All you need is a floppy drive and a network card. Makes things a little easier if you can cut out a cdrom drive in each of your computers. Also, use a 100 mbit network. My installations using ftp were actually faster than installing off of the cdrom when I had a 100 mbit network. A 40 speed cdrom still isn't as good as a fast network with a few computers. A 100 mbit hub is really cheap these days.
#----------
# Copy this file as "ks.cfg" to the boot disk that comes with
# RedHat 6.0. Or make your own boot disk. Anyways, the
# bootdisk is formatted msdos, so you can use a Windows
# computer to copy this file to it. Also, when the prompt
# comes up after you boot off of the floppy disk, type
# linux ks=floppy
# and press enter.
### Choose the most popular language in the world.
### This always upsets the French.
lang en
### Tell it what the ethernet cards settings should be
### If your nameserver 10.0.1.15 doesn't exist or doesn't
### have 10.0.1.21 listed in it, it will ask you for a name.
network --bootproto static --ip 10.0.1.10 --netmask 255.255.255.0 --gateway 10.0.1.15 --nameserver 10.0.1.15
### Uncomment this if you have nfs setup on the server
### If so, comment the "url" line.
### If you decide to use an nfs server, make sure you
### put "/home/ftp/RedHat60" in your /etc/exports file.
# nfs --server 10.0.1.15 --dir /home/ftp/RedHat60
### Make sure /home/ftp/RedHat60 exists on the server
### Also, have the cdrom mounted to /home/ftp/RedHat60 on the server.
### You can do this with
### mkdir -p /home/ftp/RedHat60
### mount /dev/cdrom /home/ftp/RedHat60
### In case you don't have a nameserver, use numbers for the url
url --url ftp://10.0.1.15/RedHat60
### Tell it to use the cdrom to get the rpms
# cdrom
### Tell it to use an Intel 10/100 EtherExpress ethernet Card
device ethernet eepro100
### Tell it to use a us keyboard
keyboard us
### Tell it to blow away the master boot record on the hard drive
zerombr yes
### Tell it to do a dumb move and blow away all partitions
clearpart --all
### Make a swap partition, and unfortunately, this will go on a
### logical partition.
part swap --size 100
### It will make a primary partition for root, 2 gigs
### I couldn't find a command to check for bad sectors. Is there one?
### I don't think "grow" will work here, unfortunately
part / --size 2000
### Make a directory /OtherDir which is at least 1 gig and grows
### to fill out the rest of the hard drive
### Since "Kickstart" is literally an unintelligent program,
### it will put this partition on a logical partition
### even though there are plenty of primary partitions to use.
part /Backups --size 1000 --grow
### Tell it to use a MicroSoft compatible mouse
mouse --kickstart microsoft --device ttyS1
### Let it know we are doing an install and not an upgrade
install
### Tell the timezone we are in
timezone --utc US/Eastern
### Tell it to use standard VGA 16, but sometimes it croaks
### at this point and asks you anyways to select a card
### I really wish you could force to install for a particular
### card so that you can "configure" Xwindows after installation
### Xconfigurator gets it wrong %50 of the time for my cards
xconfig --server XF86_VGA16
#### Give it a dumb root password
rootpw MyPassword
#### Tell it to use shadow passwording
auth --useshadow
### Tell it to install Lilo at the master boot record
lilo --location mbr
### Now let us install packages, is there a simple command for all?
%packages
### Select the packages to install, I think this is all of them
### Unlike the installation program which only installs one X Server,
### my options installs all of them in case you switch video cards,
### which I do a lot.
@ Base
@ Printer Support
@ X Window System
@ GNOME
@ KDE
@ Mail/WWW/News Tools
@ DOS/Windows Connectivity
@ File Managers
@ Graphics Manipulation
@ Console Games
@ X Games
@ Console Multimedia
@ X multimedia support
@ Networked Workstation
@ Dialup Workstation
@ News Server
@ NFS Server
@ SMB (Samba) Connectivity
@ IPX/Netware(tm) Connectivity
@ Anonymous FTP Server
@ Web Server
@ DNS Name Server
@ Postgres (SQL) Server
@ Network Management Workstation
@ TeX Document Formatting
@ Emacs
@ Emacs with X windows
@ C Development
@ Development Libraries
@ C++ Development
@ X Development
@ GNOME Development
@ Kernel Development
@ Extra Documentation
AfterStep
AfterStep-APPS
AnotherLevel
ElectricFence
GXedit
ImageMagick
ImageMagick-devel
MAKEDEV
ORBit
ORBit-devel
SVGATextMode
SysVinit
WindowMaker
X11R6-contrib
XFree86-100dpi-fonts
XFree86
XFree86-3DLabs
XFree86-75dpi-fonts
XFree86-8514
XFree86-AGX
XFree86-FBDev
XFree86-I128
XFree86-ISO8859-2
XFree86-ISO8859-2-100dpi-fonts
XFree86-ISO8859-2-75dpi-fonts
XFree86-ISO8859-2-Type1-fonts
XFree86-ISO8859-9-100dpi-fonts
XFree86-ISO8859-9
XFree86-ISO8859-9-75dpi-fonts
XFree86-Mach32
XFree86-Mach64
XFree86-Mach8
XFree86-Mono
XFree86-P9000
XFree86-S3
XFree86-S3V
XFree86-SVGA
XFree86-VGA16
XFree86-W32
XFree86-XF86Setup
XFree86-Xnest
XFree86-Xvfb
XFree86-cyrillic-fonts
XFree86-devel
XFree86-doc
XFree86-libs
XFree86-xfs
Xaw3d
Xaw3d-devel
Xconfigurator
adjtimex
aktion
am-utils
anonftp
apache
apache-devel
apmd
arpwatch
ash
at
audiofile
audiofile-devel
aumix
authconfig
autoconf
autofs
automake
awesfx
basesystem
bash
bash2
bash2-doc
bc
bdflush
bin86
bind
bind-devel
bind-utils
binutils
bison
blt
bootparamd
byacc
bzip2
caching-nameserver
cdecl
cdp
chkconfig
chkfontpath
cleanfeed
comanche
compat-binutils
compat-egcs
compat-egcs-c++
compat-egcs-g77
compat-egcs-objc
compat-glibc
compat-libs
comsat
console-tools
control-center
control-center-devel
control-panel
cpio
cpp
cproto
cracklib
cracklib-dicts
crontabs
ctags
cvs
cxhextris
desktop-backgrounds
dev
dhcp
dhcpcd
dialog
diffstat
diffutils
dip
dosemu
dosemu-freedos
dump
e2fsprogs
e2fsprogs-devel
ed
ee
efax
egcs
egcs-c++
egcs-g77
egcs-objc
eject
elm
emacs
emacs-X11
emacs-el
emacs-leim
emacs-nox
enlightenment
enlightenment-conf
enscript
esound
esound-devel
etcskel
exmh
expect
ext2ed
faces
faces-devel
faces-xface
faq
fbset
fetchmail
fetchmailconf
file
filesystem
fileutils
findutils
finger
flex
fnlib
fnlib-devel
fortune-mod
freetype
freetype-devel
ftp
fvwm
fvwm2
fvwm2-icons
fwhois
gated
gawk
gd
gd-devel
gdb
gdbm
gdbm-devel
gdm
gedit
gedit-devel
genromfs
gettext
getty_ps
gftp
ghostscript
ghostscript-fonts
giftrans
gimp
gimp-data-extras
gimp-devel
gimp-libgimp
gimp-manual
git
glib
glib-devel
glib10
glibc
glibc-devel
glibc-profile
gmc
gmp
gmp-devel
gnome-audio
gnome-audio-extra
gnome-core
gnome-core-devel
gnome-games
gnome-games-devel
gnome-libs
gnome-libs-devel
gnome-linuxconf
gnome-media
gnome-objc
gnome-objc-devel
gnome-pim
gnome-pim-devel
gnome-users-guide
gnome-utils
gnorpm
gnotepad+
gnuchess
gnumeric
gnuplot
gperf
gpm
gpm-devel
gqview
grep
groff
groff-gxditview
gsl
gtk+
gtk+-devel
gtk+10
gtk-engines
gtop
guavac
guile
guile-devel
gv
gzip
gzip
hdparm
helptool
howto
howto-chinese
howto-croatian
howto-french
howto-german
howto-greek
howto-html
howto-indonesian
howto-italian
howto-japanese
howto-korean
howto-polish
howto-serbian
howto-sgml
howto-slovenian
howto-spanish
howto-swedish
howto-turkish
ical
imap
imlib
imlib-cfgeditor
imlib-devel
indent
indexhtml
inews
info
initscripts
inn
inn-devel
install-guide
intimed
ipchains
ipxutils
ircii
isapnptools
isicom
ispell
itcl
jed
jed-common
jed-xjed
joe
kaffe
kbdconfig
kdeadmin
kdebase
kdegames
kdegraphics
kdelibs
kdemultimedia
kdenetwork
kdesupport
kdeutils
kernel
kernel
kernel
kernel-BOOT
kernel-doc
kernel-headers
kernel-ibcs
kernel-pcmcia-cs
kernel-smp
kernel-smp
kernel-smp
kernel-source
kernelcfg
knfsd
knfsd-clients
korganizer
kpilot
kpppload
kterm
ld.so
ldconfig
less
lha
libPropList
libc
libelf
libghttp
libghttp-devel
libgr
libgr-devel
libgr-progs
libgtop
libgtop-devel
libgtop-examples
libjpeg
libjpeg-devel
libjpeg6a
libpcap
libpng
libpng-devel
libstdc++
libtermcap
libtermcap-devel
libtiff
libtiff-devel
libtool
libungif
libungif-devel
libungif-progs
libxml
libxml-devel
lilo
linuxconf
linuxconf-devel
logrotate
losetup
lout
lout-doc
lpg
lpr
lrzsz
lslk
lsof
ltrace
lynx
m4
macutils
mailcap
mailx
make
man
man-pages
mars-nwe
mawk
mc
mcserv
metamail
mgetty
mgetty-sendfax
mgetty-viewfax
mgetty-voice
mikmod
mingetty
minicom
mkbootdisk
mkdosfs-ygg
mkinitrd
mkisofs
mkkickstart
mktemp
mkxauth
mod_perl
mod_php
mod_php3
modemtool
modutils
mount
mouseconfig
mpage
mpg123
mt-st
mtools
multimedia
mutt
mxp
nag
nc
ncftp
ncompress
ncpfs
ncurses
ncurses-devel
ncurses3
net-tools
netcfg
netkit-base
netscape-common
netscape-communicator
netscape-navigator
newt
newt-devel
nmh
nscd
ntsysv
open
p2c
p2c-devel
pam
passwd
patch
pciutils
pdksh
perl
perl-MD5
pidentd
pilot-link
pilot-link-devel
pine
playmidi
playmidi-X11
pmake
pmake-customs
popt
portmap
postgresql
postgresql-clients
postgresql-devel
ppp
printtool
procinfo
procmail
procps
procps-X11
psacct
psmisc
pump
pwdb
pygnome
pygtk
python
python-devel
python-docs
pythonlib
qt
qt-devel
quota
raidtools
rcs
rdate
rdist
readline
readline-devel
redhat-logos
redhat-release
rgrep
rhl-alpha-install-addend-en
rhl-getting-started-guide-en
rhl-install-guide-en
rhmask
rhs-hwdiag
rhs-printfilters
rhsound
rmt
rootfiles
routed
rpm
rpm-devel
rsh
rsync
rusers
rwall
rwho
rxvt
sag
samba
sash
screen
sed
sendmail
sendmail-cf
sendmail-doc
setconsole
setserial
setup
setuptool
sgml-tools
sh-utils
shadow-utils
shapecfg
sharutils
slang
slang-devel
sliplogin
slocate
slrn
slrn-pull
sndconfig
sox
sox-devel
specspo
squid
stat
statserial
strace
svgalib
svgalib-devel
swatch
switchdesk
switchdesk-gnome
switchdesk-kde
symlinks
sysklogd
talk
taper
tar
tcl
tclx
tcp_wrappers
tcpdump
tcsh
telnet
termcap
tetex
tetex-afm
tetex-doc
tetex-dvilj
tetex-dvips
tetex-latex
tetex-xdvi
texinfo
textutils
tftp
time
timeconfig
timed
timetool
tin
tix
tk
tkinter
tksysv
tmpwatch
traceroute
transfig
tree
trn
trojka
tunelp
ucd-snmp
ucd-snmp-devel
ucd-snmp-utils
umb-scheme
unarj
units
unzip
urlview
urw-fonts
usermode
usernet
utempter
util-linux
uucp
vim-X11
vim-common
vim-enhanced
vim-minimal
vixie-cron
vlock
w3c-libwww
w3c-libwww-apps
w3c-libwww-devel
wget
which
wmakerconf
wmconfig
words
wu-ftpd
x11amp
x11amp-devel
x3270
xanim
xbanner
xbill
xboard
xboing
xchat
xcpustate
xdaliclock
xdosemu
xearth
xfig
xfishtank
xfm
xgammon
xinitrc
xjewel
xlispstat
xloadimage
xlockmore
xmailbox
xmorph
xntp3
xosview
xpaint
xpat2
xpdf
xpilot
xpm
xpm-devel
xpuzzles
xrn
xscreensaver
xsysinfo
xtoolwait
xtrojka
xwpick
xxgdb
yp-tools
ypbind
ypserv
ytalk
zgv
zip
zlib
zlib-devel
zsh
### Anything after %post gets interpreted as a post install command
### and will be chrooted to the mount point of "/" for the
### new installation
%post
# add another nameserver
echo "nameserver 10.0.1.10" >> /etc/resolv.conf
echo "10.0.1.10 server.local server" >> /etc/resolv.conf
Overall, I give Kickstart method a "B" for 6.0, and a "C" for the 5.2 version. It is cool compared to the corrupted commercial alternative which forces you to reboot 10 times before it is done installing. The potential for Linux is amazing compared to commercial closed sourced alternatives. When software is written not because of profit but because it is cool and/or because people want it done right, the long term potential far outweighs the short-term profit-minded mentality of people who cannot write good software or who just want things done "just to get it to work". Kickstart has the potential to reduce the overall cost of consulting and the time it takes to install Linux systems on a mass scale (which benefits the novice and expert computer consultant). It is funny to watch commercial companies who are trying to emulate what Linux and other UNIX systems can do. I see commercial products out there which attempt to do mass installations for closed sourced corrupted operating systems and I laugh at all the hard work they have to do. I want to stress something, this method I have shown today is not the easiest method to install Linux. I will explain this in another article someday. It will make any commercial or closed sourced operating system look like garbage compared to Linux.
#!/usr/bin/perl
my @RPMS = </home/ftp/RedHat60/RedHat/RPMS/*.rpm>;
my $Dest = "/tmp/List_2.txt";
open(FILE,">$Dest");
foreach $Rpm (@RPMS)
{
## Would be easier if I had used ? instead of /
$Rpm =~ s/\/home\/ftp\/RedHat60\/RedHat\/RPMS\///;
if ($Rpm =~ /\-[0-9]+\-[0-9]+\./)
{($Rpm,$Junk) = split(/\-[0-9]+\-[0-9]\./, $Rpm,2);}
elsif ($Rpm =~ /\-[0-9]+\./)
{($Rpm,$Junk) = split(/\-[0-9]+\./, $Rpm,2);}
else {($Rpm,$Junk) = split(/\-[0-9]/, $Rpm,2);}
print FILE "$Rpm\n";
}