boot cd-rom network install on system with no display using vnc
Charles Polisher
cpolish at surewest.net
Fri Feb 25 14:39:11 UTC 2011
> On Thu, 2011-02-24 at 18:51 -0800, Peter Allen wrote:
> > Thanks. Do I need to use Kickstart? Is Kickstart necessary to open
> > the VNC server session?
> >
> you don't need a kickstart for that.
> >
> >
> > I cannot place the Kickstart file on the CD, right?
> afaik, you can, but i never really tried it.
>
> btw: why not use pxe? is it because you can't manage dhcp/dns? if thats
> the case, another alternative is to put gpxe on a usb/cdrom, and let it
> fetch the kernel, initrd etc over the network.
>
> this way, you dont need to create a cdrom each time you want to change
> something.
>
> but really, if you do that more than once, consider provisioning using a
> tool, like cobbler or foreman.
Here's what I use to do what the OP wants to do. I edited
the script to remove some code that steps outside their stated
requirements, so this is an untested script, but has a good
likelihood of working. Also note that the while the target system
is CentOS5, the generating system was not, so some tweaks
to the top set of definitions may be needed for your system.
Hope that helps,
--
Charles Polisher
#!/bin/bash
# Author: Charles Polisher
# Starting with a downloaded CentOS 5.5 image,
# build and burn a custom .iso with a kickstart script
# uncomment the following line to debug
# set -x
export PROJECTROOT=~chas/PROJECTS/foo
export KICKSTART=$PROJECTROOT/ks.template
export ISOIMAGE=/tmp/CentOS-5.5-i386-PUT-YOUR-IMAGE-NAME-HERE.iso
export MOUNTPOINTDIR=/mnt/iso
export TEMPFILESYS=`mktemp -d -t isofilesys_XXXXXX`
export OUTPUT_ISO=$PROJECTROOT/CentOS-5.5-i386-foo.iso
export SYSLINUXBIN=/usr/lib/syslinux/isolinux.bin
export BURNPROG=/usr/X11R6/bin/cdrecord
function cleanup () {
echo "[1;33mCleaning up temporary files.[m"
if [ "X$TEMPFILESYS" != X ] ; then
rm -rf $TEMPFILESYS
fi
}
trap cleanup 0 SIGHUP SIGKILL SIGTERM
if [ ! -f $ISOIMAGE ]
then
echo "[1;33mMissing the source .iso image file - aborting.[m"
exit 1
fi
if [ ! -x /usr/bin/checkisomd5 ]
then
echo "[1;33mcheckisomd5 not installed - aborting.[m"
exit 1
fi
if [ ! -x /usr/bin/implantisomd5 ]
then
echo "[1;33mimplantisomd5 not installed - aborting.[m"
exit 1
fi
if [ ! -r $ISOIMAGE ]
then
echo "[1;33mStock .iso image not found or not readable - aborting.[m"
exit 1
fi
if [ ! -r $SYSLINUXBIN ]
then
echo "[1;33mBoot loader isolinux.bin not found or not readable - aborting.[m"
exit 1
fi
if [ ${EUID} != '0' ]
then
echo "[1;33mMust run as root - aborting.[m"
exit 1
fi
if [ ! -d $MOUNTPOINTDIR ]
then
mkdir $MOUNTPOINTDIR || exit 1
fi
if [ ! -r $KICKSTART ]
then
echo "[1;33mCan't find the kickstart file - aborting.[m"
exit 1
fi
# Mount the original .iso image onto a loopback device
losetup /dev/loop0 $ISOIMAGE || exit 1
mount -t iso9660 /dev/loop0 $MOUNTPOINTDIR || exit 1
# Unpack the original (read-only) iso9660 filesystem into a directory
cd $MOUNTPOINTDIR
tar cf - ./* | (cd $TEMPFILESYS ; tar xf -)
# Copy the kickstart file into the writeable copy of the .iso filesystem
cp $KICKSTART $TEMPFILESYS/isolinux/ks.cfg
cp $KICKSTART $TEMPFILESYS/ks.cfg
# copy a syslinux bootable binary into the writeable copy
cp $SYSLINUXBIN $TEMPFILESYS/isolinux.bin
cp $SYSLINUXBIN $TEMPFILESYS/isolinux/isolinux.bin
chmod 555 $TEMPFILESYS/isolinux.bin
chmod 555 $TEMPFILESYS/isolinux/isolinux.bin
# copy a modified isolinux configuration file into the writeable copy
# (it's basically a grub.conf file)
cat > $TEMPFILESYS/isolinux/isolinux.cfg << EOF1
default ks
prompt 1
timeout 600
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label linux
kernel vmlinuz
append initrd=initrd.img noapic
label text
kernel vmlinuz
append initrd=initrd.img text noapic
label ks
kernel vmlinuz
append ks=cdrom:ks.cfg initrd=initrd.img noapic
label local
localboot 1
label memtest86
kernel memtest
append -
EOF1
# Create a new "el-torito" style .iso filesystem from the writeable copy
# cf. http://syslinux.zytor.com/wiki/index.php/ISOLINUX#How_Can_I_Make_a_Bootable_CD_With_ISOLINUX.3F
pushd $TEMPFILESYS
# Isolinux will not overwrite an existing boot.cat, so remove it first
rm -f isolinux/boot.cat
mkisofs -o $OUTPUT_ISO \
-b isolinux.bin \
-c boot.cat \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table -r -J \
-T .
# Reach into the built .iso image and update the md5sum
/usr/bin/implantisomd5 --force --supported-iso $OUTPUT_ISO
# Burn the new .iso file to a blank cd-rom
read -p "[1;33mInsert blank cd-rom then press enter:[m " i
$BURNPROG -v gracetime=4 \
dev=/dev/sr0 \
speed=1 \
-dao \
driveropts=burnfree \
-eject \
-data \
-tsize=4862s \
$OUTPUT_ISO
popd
More information about the Kickstart-list
mailing list