The purpose of this document is threefold:
Describe how to update Fedora Core 3 distribution CDs and then create new, updated iso images.
Describe how to create DVD images instead of CD images.
Given an updated distribution, create an updated RescueCD which, optionally, is modified to add additional software.
Some of the information in this document is based on information in Updating and Rebuilding Fedora Core 2 Installation CDs . There is also the currently unmaintained AnacondaDocumentationProject.
While this document describes the process for the i386 distribution, it also applies to the Fedora Core 3 x86_64 distribution and may also be extended to the development tree.
Fedora Core 3 comes with all of the tools necessary to update and rebuild the installation CDs. To perform this does require a fair amount of disk space - approximately 22 GB. Fedora Core 3 is distributed on CD ISO images which total about 4.5 GB. The space requirements are as follows:
Space for the distributed ISO images (4.5 GB).
Space for the expanded installation tree built from the ISO images (4.5 GB). This tree will be updated during the update/rebuild process.
Space for the split trees which will divide the installation tree into ISO image size pieces (4.5 GB).
Space for the updated ISO images (4.5 GB).
Extra working space used during the rebuild process (1 to 3 GB).
Rounding up and being generous results in needing about 2 GB of space. If you rebuild the optional RescueCD, you will need an addition 1 to 2 GB of space.
Although updating and rebuilding the installation CDs could be performed on some other system, we assume this is being done on a Fedora Core 3 system. You will need to install the following packages:
anaconda-10.1.0.2-1
anaconda-help-10.1.0-1
anaconda-runtime-10.1.0.2-1
busybox-anaconda-1.00.rc1-5
Next you need to build the installation tree. All of the following needs to be performed as "root". Assuming that the distributes ISO images are located in another partition, the partition needs to have at least 10 GB of available space (or 15 GB if the new ISO images are to be pleaced there also). In a subdirectory on that partition, execute the following:
export PYTHONPATH=/usr/lib/anaconda
export PATH="$PATH:/usr/lib/anaconda-runtime"
export FCBASE=`pwd`
mkdir -p $FCBASE/fc3/i386
This sets things up. Now do the following:
mount -o ro,loop FC3-i386-disc1.iso /mnt
cp -a /mnt/* $FCBASE/fc3/i386/
umount /mnt/
Then repeat the above for each of the other three ISO binary (i386) images and the four SRPMS ISO images.
Note: If you have the DVD ISO image then you can use it in place of the four binary ISO images. However, you will still need to copy the contents of the four CD SRPMS ISO images.
Note: If you already have an expanded tree which is being used for NFS, etc. installs, then simply copy it.
You have now created the installation tree.
In general, updating a distribution consists of replacing the RPMs and src RPMs with updated versions. You need to make sure you delete the older (replaced) versions. Since the file names will differ between to old and the updated versions of the packages, this can be a lengthy manual process. I am sure that someone has created a script which will remove the older packages and only leave the updated versions.
Caution: A few packages have multiple architectures and you need to be careful not to delete the extra architectures. Specifically on the i386 distribution:
The glibc, nptl, and openssl packages have both i386 and i686 versions of packages.
The kernel and kernel-smp packages have i586 and i686 versions of packages (but no i386).
The x86_64 distribution of Fedora Core 3 contains many packages which have both x86_64 and i386 (or i686 in some case) versions of packages so that both 32-bit and 64-bit applications can be supported.
If you need a special kernel to support what you are doing, you can use the src RPM to rebuild a custom kernel package and then use these rebuilt packages in the updated distribution. How you do this kernel package rebuilding is beyond the scope of this document.
You can also add packages to the distribution by copying them to the $FCBASE/fc3/i386/Fedora/RPMS directory and the $FCBASE/fc3/i386/SRPMS directory (for src.rpm).
To edit the comps file, please see Editing the Comps File.
The original build which created the ISO images leaves some extra files which can be removed with the following command:
find $FCBASE/fc3 -name TRANS.TBL -exec rm -f {} \;
find $FCBASE/fc3 -name boot.cat -exec rm -f {} \;
OK, you now have an updated installation tree and you need to execute the following commands:
Update the hdlist file with the following command:
genhdlist --productpath=Fedora $FCBASE/fc3/i386
Next, create the package order file:
pkgorder $FCBASE/fc3/i386 i386 Fedora | tee \
$FCBASE/fc3/pkgfile
Next, update the installation files:
buildinstall --pkgorder $FCBASE/fc3/pkgfile \
--version 3 --product "Fedora Core" \
--release "Fedora Core 3" \
--prodpath Fedora \
$FCBASE/fc3/i386
To create CD ISO images, you will need to split the binary and SRPMS into eight CD trees:
rm -fr $FCBASE/fc3/i386-disc[1-9]
splittree.py --arch=i386 \
--total-discs=8 --bin-discs=4 --src-discs=4 \
--release-string="Fedora Core 3" \
--pkgorderfile=$FCBASE/fc3/pkgfile \
--distdir=$FCBASE/fc3/i386 \
--srcdir=$FCBASE/fc3/i386/SRPMS \
--productpath=Fedora
rm -f $FCBASE/fc3/i386-disc1/Fedora/base/hdlist
genhdlist --productpath=Fedora --withnumbers \
--fileorder $FCBASE/fc3/pkgfile \
$FCBASE/fc3/i386-disc[1234]
The split trees are created in $FCBASE/fc3 and are named i386-disc[1-8].
NOTE: The "--distdir=$FCBASE/fc3/i386" parameter DOES NOT end with a "/" intentionally. If it does end with "/", then the split trees will be named -disc[12345678] and be sub-directories of $FCBASE/fc3/i386/ instead of being i386-disc[1-8] under subdirectory $FCBASE/fc3.
The splittree.py program does not currently support splitting the installation tree into DVD size trees. However, this can be performed manually. The options are to modify the installation tree which you just created or to create two new DVD-sized trees. For purposes of this HOWTO, two new direcoty trees will be created:
mkdir -p $FCBASE/fc3/i386-dvd1
mkdir -p $FCBASE/fc3/i386-dvd2
cp -a $FCBASE/fc3/i386/* $FCBASE/fc3/i386-dvd1/
cp -p $FCBASE/fc3/i386/.discinfo $FCBASE/fc3/i386-dvd1/
cp -p $FCBASE/fc3/i386/* $FCBASE/fc3/i386-dvd2/
mv $FCBASE/i386-dvd1/SRPMS $FCBASE/fc3/i386-dvd2/
Another approach (thanks to Andrew Mann) for creating DVD
images was simply described in anaconda-devel-list
message. This describes the changes needed to splittree.py to
handle DVD images:
cp /usr/lib/anaconda-runtime/splittree.py \then around line 79, change
./splittree-dvd.py
self.target_size = 640.0 * 1024.0 * 1024to be
self.target_size = 4.4 * 1024.0 * 1024.0 * 1024
You can also change all of the "-disc" to "-dvd" so
that both CD
and DVD split trees can coexist.
rm -fr $FCBASE/fc3/i386-dvd[1-9]
./splittree.py --arch=i386 \
--total-dvds=2 --bin-dvds=1 --src-dvds=1 \
--release-string="Fedora Core 3" \
--pkgorderfile=$FCBASE/fc3/pkgfile \
--distdir=$FCBASE/fc3/i386 \
--srcdir=$FCBASE/fc3/i386/SRPMS \
--productpath=Fedora
Now go to step 6 but only create the first (bootable) image and the single SRPMS image.
The first binary or installation image differs from the other images because it is bootable. The following command will create this ISO image:
cd $FCBASE/fc3
mkisofs -R -J -T -v \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-V "Fedora Core 3 (update or whatever)" \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-x "lost+found" \
-o FC3-i386-disc1.iso\
i386-disc1
or, if you are creating a DVD image, then use:
mkisofs -R -J -T -v \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-V "Fedora Core 3 (updated or whatever)" \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-x "lost+found" \
-o FC3-i386-dvd1.iso \
i386-dvd1
Continue to create the other CD binary discs ISO images with (skip if doing DVD images):
mkisofs -R -J -T -v \
-V "Fedora Core 3 (updated or whatever)" \
-x "lost+found" \
-o FC3-i386-disc2.iso \
i386-disc2
which is repeated for disc3 and disc4.
Then do the SRPMS which is similar to that done for disc[2-4]:
mkisofs -R -J -R -v \which is repeated for disc6 -> disc2.iso, disc7 ->disc3.iso, and disc8 -> disc4.iso.
-V "Fedora Core 3 (updated or whatever)" \
-x "lost+found" \
-o FC3-i386-SRPMS-disc1.iso \
i386-disc5
If you are creating a DVD SRPMS image, then do:
mkisofs -R -J -R -v \
-V "Fedora Core 3 (updated or whatever)" \
-x "lost+found" \
-o FC3-i386-SRPMS-dvd1.iso \
i386-dvd2
cd $FCBASE
All done!
The following process assumes that you have the trees, etc. described above.
Run the commands:
rm -fr $FCBASE/fc3/i386-rescueimage
mk-rescuecd.i386 $FCBASE/fc3/i386 \
$FCBASE/fc3 \
"FC 3" \
Fedora
If you only want a RescueCD with software from the updated packages (such as an updated kernel), then skip to step 4.
If you would like to increase the size of the ramdisk you boot into, then do the following:
Edit $FCBASE/rescue/i386-rescue/isolinux/isolinux.cfg and change the ramdisk_size values from their standard setting of 8192 to something larger such as 16384.
Do:
gunzip < $FCBASE/fc3/i386-rescueimage/isolinux/initrd.img \
> /tmp/initrd.old
mount -o ro,loop /tmp/initrd.old /mnt/xx
Then create the updated image:
dd if=/dev/zero of=/tmp/initrd.new bs=1k count=12288
mke2fs -F -i 4086 /tmp/initrd.new
mount -o loop /tmp/initrd.new /mnt/zz
cp -va /mnt/xx/* /mnt/zz
cp -vp /mnt/xx/.buildstamp /mnt/zz
umount /mnt/xx
umount /mnt/zz
Now gzip and replace the original initrd.img:
gzip -9 </tmp/initrd.new \
> $FCBASE/fc3/i386-rescueimage/isolinux/initrd.img
Do the following:
mount -o ro,loop \
$FCBASE/fc3/i386-rescueimage/Fedora/base/stage2.img \
/mnt/xx
mkdir $FCBASE/stage2
cp -va /mnt/xx/* $FCBASE/stage2
cp -vp /mnt/xx/.buildstamp $FCBASE/stage2
Now update the stage2 directory with your stuff such as programs into $FCBASE/stage2/usr/bin. Be careful that your software does not need additional libraries, etc. [statically linked programs are the way to go]. Once you have everything updated, then do:
mkcramfs $FCBASE/stage2/ /tmp/stage2.new
cp -vp /tmp/stage2.new \
$FCBASE/fc3/i386-rescueimage/Fedora/base/stage2
Similar to the bootable installation CD, do the following:
cd $FCBASE/fc3
mkisofs -R -J -T -v \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-V "Fedora Core 3 Rescue CD (or whatever)" \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-x "lost+found" \
-o FC3-i386-rescuecd.iso \
i386-rescue
cd $FCBASE