Linux-Noob Forums

Full Version: making custom linux inst. cd.
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
How do i make a custom fedora linux install cd? Linux Kickstart documentation talks about installing from ftp or http but not off a cd. I want to make 1 cd with the whole isntall on it. Does Fedora Core1 come with documentation on how to do this?

You ask, aeio answers. Hold on to your hats folks, because this ain't for those with heart or back conditions or those who think they might be pregnant. As with any CD compilation making, you should first consult your physician.


Well with that out of the way!


1. Download all the ISOs for Fedora (just the 3 binary rpm ones)


2. Create /mnt/fedora_c1.


3. Create /mnt/fedora_c1/1, 2 and 3.


4. Mount each of the isos on those stubs (mount -o loop /path/yarrow-i386-disc1 /mnt/fedora_c1/1 for example, repeat for the other 2).


5. Make a directory where you'll build your distro. I use /root/fedora.


6. Under this directory make the following directories:












The builders don't behave if you name the directory 'Fedora', I've never really tried to figgure out why. If it bothers you that much then you debug and let me know =)


7. Install the following RPM packages (there are updates for some already, so watch out): anaconda, anaconda-runtime, anaconda-images and anaconda-help.


8. Under /root/fedora make a script called with this in it:


#!/bin/bash -x


# build it

cd /root/fedora


ln -s /root/fedora/build_necessary_rpms/*.rpm /root/fedora/i386/RedHat/RPMS



# clean it

cd /root/fedora/i386

find -type l -exec rm -vf {} \;

rm -rvf ./dosutils

rm -rvf ./isolinux/

rm -vf ./rpmorder

rm -rvf ./images/pxeboot/

rm -vf ./images/README

rm -vf ./images/pcmciadd.img

rm -vf ./images/boot.iso

rm -rvf /tmp/hdstg2.img.* /tmp/instimage.mnt.* /tmp/keymaps-i386.* /tmp/netstg2.img.* /tmp/pkgorder-* /tmp/treedir.*


# boot it

mkdir tmp

mount -o loop ./images/bootdisk.img ./tmp

rm -vf ./tmp/*.msg

rm -vf ./tmp/syslinux.cfg

rm -vf ./tmp/splash.lss

cp /root/fedora/configs/syslinux.cfg ./tmp

cp /root/fedora/configs/boot.msg ./tmp

umount tmp

rmdir tmp


# iso it

mkisofs -v -r -T -J -V 'MYBURN RC1 Fedora Core 1' -b images/bootdisk.img -c -l -R -o /root/fedora/iso/fedora-rc1.iso .


9. Under /root/fedora/build_necessary_rpms copy the latest RPMs of these packages: anaconda, anaconda-runtime, bogl, booty, busybox, gtk2, kernel-BOOT, libxml2, pango and parted.


10. Under configs make 4 files:


boot.msg: This text will display when you boot the CD.

<?xml version="1.0"?>

<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">



<!-- <meta> -->

<!-- Meta information will go here eventually -->

<!-- </meta> -->





<description>MYDIST Default Burn</description>











<name>Base Package</name>


<description>MYDIST Default Supplementary Entry</description>



<packagereq type="mandatory">zip</packagereq>






<name>MYDIST Default Burn</name>












default linux

display boot.msg

prompt 1

timeout 600

label linux

kernel vmlinuz

append ks=cdrom:/ks.cfg initrd=initrd.img ramdisk_size=8192


11. Under scripts make the following scripts:







echo "Making the package list."

rpm --nosignature --queryformat="%{name}\n" -qp $RELEASEDIR/RPMS/*.rpm | sort | uniq > /tmp/pkglist.tmp


echo "Picking out the ones not to be installed."

for i in `cat /tmp/pkglist.tmp` ; do if [ "`grep -c ^$i\$ $CONFIGDIR/excluderpm.txt`" = "0" ] ; then echo $i >> /tmp/pkglist ; fi ; done


echo "Writing comps.xml file."

cat $CONFIGDIR/ > $RELEASEDIR/base/comps.xml

for i in `cat /tmp/pkglist` ; do echo " <packagereq type=\"mandatory\">$i</packagereq>" ; done >> $RELEASEDIR/base/comps.xml

rm -f /tmp/pkglist /tmp/pkglist.tmp

cat $CONFIGDIR/comps.bottom >> $RELEASEDIR/base/comps.xml


#!/bin/bash -x


export PATH="$PATH:/usr/lib/anaconda-runtime"

export BASE=/root/fedora/i386

export PYTHONPATH=/usr/lib/anaconda

export PRODUCT=RedHat


# generate hdlists*

echo "Generating hdlists..."

/bin/cat /dev/null > $BASE/$PRODUCT/base/hdlist

/bin/cat /dev/null > $BASE/$PRODUCT/base/hdlist2

/usr/lib/anaconda-runtime/genhdlist $BASE


# generate the package ordering

echo "Generating package ordering..."

/usr/lib/anaconda-runtime/pkgorder $BASE i386 > $BASE/rpmorder


# Building images...

# If you use this, the boot*img files are created. Hence, you'll need

# to use the images created by this script just to perform a kickstart.

# So, I never use this part of the script. I just keep using the original

# boot images from the ftp site or cdrom... :)

/usr/lib/anaconda-runtime/buildinstall --pkgorder $BASE/rpmorder --product $PRODUCT --version 1 --release 1 $BASE


echo "Regenerating hdlists..."

# now generate hdlists* with the correct ordering

/usr/lib/anaconda-runtime/genhdlist --withnumbers --fileorder $BASE/rpmorder $BASE


echo "Done..."

# done!


12. Under i386 make your kickstart file named ks.cfg (see the RedHat/Fedora Documentation). Be sure to put these commands in there:


%packages --resolvedeps

@ Core




13. Now the fun part. Under /root/fedora/i386/RedHat/RPMS put the RPMS you want to install. You'll have to put in those you want, run the following commands, satisfy dependencies and repeat.


mkdir /tmp/testdb (only has to be done once)

rpm --initdb --dbpath /tmp/testdb (only has to be done once)

rpm --test --dbpath /tmp/testdb -Uvh *.rpm (this is the important one)


14. Run the script! This should create a bootble single disc fedora burn that will impress your friends and shock your neighbors. The iso is obviously located in the /root/fedora/iso directory.




- aeio

quite a good explanatory way..


i tried it but my cd did noot booted at all.. i am using vmware to test the same and as soon it start got hanged not even reaching to boot steps. .. any idea where may be i am wrong.