I basically wrote my notes in the TOC, but this is what I have. I added
the notes from Alexander, and I have question marks near the things that
I don't know about.
Forrest
TOC
I.Introduction
Red Hat Installation Program (Anaconda)
Anaconda is the installation program for Red Hat distributions. During
installation, the system's hardware is identified and configured, and
the appropriate file systems for the system's architecture are created.
Finally, it allows the user to install the operating system software on
the system. Optionally, it can upgrade existing Red Hat installations.
Anaconda can run in a fully interactive mode (text or graphical), or in
a kickstart mode, which is allows the installation to be scripted for
unattended operation. This makes deploying hundreds or thousands of
systems very easy. Anaconda is written in Python and C, and is
distributed under the GPL. The graphical frontend is written with
PyGtk. Using a scripting language (Python) for the majority of the code
allows for easily distribution of updates and the quick development of
new features.
II.How anaconda works
A. boot process
B. actual anaconda process
i. probing for hardware (what is happening behind the scenes/what
programs are doing what)
ii. language selection
iii. harddrive setup
III. Installation
IV. What is needed to rebuild anaconda
A. Disk space 30-45 MB
B. Required packages
i. rpm-build (for /usr/src/redhat/*)
ii. pump-devel (add something for RHEL about missing -devel
packages)
iii. kudzu-devel, pciutils-devel, bzip2-devel, e2fsprogs-devel,
python-devel, gtk2-devel, rpm-python, newt-devel, rpm-devel, gettext,
modutils-devel, rhpl, booty, libxml2-python, zlib-devel, bogl-devel,
bogl-bterm, elfutils-devel, beecrypt-devel, dietlibc, parted (plus
dependencies: Xfree86-devel, atk-devel, glib2-devel, pango-devel, bogl,
gd, fontconfig-devel, freetype-devel)
C. Required patches
i. Patch for buildinstall (dies when trying to run buildinstall the
second time)
ii. Patch for changing RedHat to Fedora
iii. Patch for new files (build-fc1, mkfedora-cd*, etc.)
D. Time (on my Intel Pentium III 600 Mhz processor 256 MB RAM)
i. rpmbuild -bp anaconda.spec – 0:11
ii. rpmbuild -bb anaconda.spec – 4:48
iii. rpmbuild -ba anaconda.spec – 4:49
V. Tree structure – about 2GB for the distribution without SRPMS (4GB
with SRPMS), plus another 2GB (4GB with SRPMS) for the iso images.
A. /fedora (I usually create a directory in a partition that has
room, and then create a symlink for /fedora)
B. /fedora/i386 – RPM packages
C. /fedora/SRPMS – SRPM packages
D. /fedora/build-fc1 – build script
E. /fedora/new/new – directory for new and updated packages
F. /fedora/RHupdates – directory for testing updated anaconda files
VI. Anaconda binaries (just quick explanation with details in later
chapters)
A. buildinstall – script that builds the distribution
B. checkcards.py – ??
C. checkisomd5 – see implantiosmd5
D. check-repository.py – old script that was used to check the
repository for missing dependencies – we need to check if this still
works FIX-ME It does not work for me even after changing RedHat to
Fedora. It seems to need the original comps file (not comps.xml). Talk
to Jeremy about getting it removed or replaced.
E. filtermoddeps – ??
F. genhdlist – script that generated the hdlist (you must use the
full path to your directories)
G. getkeymaps – ??
H. implantiosmd5/checkisomd5 – script to implant/check the md5 sum
used during installation to verify the discs (mediacheck boot option)
I. libunicode-lite.so.1 – some library
J. loader/ – directory that contains the loader programs
K. makestamp.py – script that makes the .discinfo?
L. mapshdr – ??
M. mk-images* – architecture-specific scripts that are called by
buildinstall
N. mk-rescueimage.i386 – creates the rescue image?
O. moddeps – modify dependencies?
P. modlist – modify list?
Q. pkgorder – creates a package order—now called by buildinstall
R. pyiosmd5sum.so – used by implantiosmd5/checkisomd5?
S. pythondeps – python dependencies
T. readmap – Read map?
U. screenfont-i386.gz – fonts for the installer?
V. scrubtree – scrub the installation tree—called by buildinstall
W. splittree.py – formerly splitdistro—used to split the distribution
into discs
X. trimmodmap/trimpcitable – trim the modmap/pcitable?
Y. upd-instroot – called by buildinstall—actual function??
Z. EXTRAS (that I use)
i. build-fc1 – runs the needed scripts to generate a distribution
ii. mkdvd – creates a DVD iso image
iii. mkfedora-cd* – creates CD iso images
iv. rpmupdates – copies the new/updated RPMs in /fedora/new/new to
the installation area and moves out the old RPMs.
VII. Mini HowTo editing and making rpms from source
A. We need to decide if we are going to encourage using root to
rebuild, or if we should document how to setup a build environment for a
standard user. We have to be root to install rpms, so I guess that we
should just do it as root
B. Remove debug packages
i. echo "%debug_package %{nil}" >> /root/.rpmmacros
C. Let's show an example for anaconda
i. Install the source rpm file
a) rpm -ivh anaconda-9.2-2.src.rpm (notice the src.rpm
extension)
ii. Rebuild the original anaconda with any patches included
a) cd /usr/src/redhat/SPEC
b) rpmbuild -bp anaconda.spec
iii. Go to the BUILD directory and make a copy of the original
directory
a) cd /usr/src/redhat/BUILD
b) cp -a anaconda-9.0 anaconda-9.0.orig
iv. Make your changes in the anaconda-9.0 directory
v. Return to the BUILD directory and make a patch of the changes
a) cd /usr/src/redhat/BUILD
b) diff -urN anaconda-9.0.orig anaconda-9.0 > \
../SOURCES/my-changes.patch
vi. Edit the spec file and rebuild
a) cd /usr/src/redhat/SPECS
b) Edit anaconda.spec
Below Source: anaconda-%{PACKAGE_VERSION}.tar.bz2, add this
line:
Patch1: my-changes.patch
Below %setup -q, add this line:
%patch1 -p1
Below %changelog, add a few lines about what you did, using
the same format as you see there. You will need to change
the %{date} (if it exists) to a real date. To get the real
date that it was created, run this command and replace the
%{date} line with this output (this is the output that I get)
rpm -qp --changelog anaconda-9.2-2.src.rpm | head -1
* Thu Oct 30 2003 Anaconda team <bugzilla(a)redhat.com>
c) rpmbuild -ba anaconda.spec
This will create the anaconda source rpm in
/usr/src/redhat/SPMS, and the anaconda and
anaconda-runtime i386.rpm files in
/usr/src/redhat/RPMS/i386 (assuming that you use x86)
d) Copy the binary files to /fedora/new/new, and the source file
to /fedora/SRPMS. Run rpmupdates to copy the new files to
the installation tree.
VIII. Set up your build environment (tree structures needed and so on)
A. Look at V.
IX. The comps.xml chapter (explanation and making your own comps.xml)
A. Formerly, we had the comps tarball as explained on the anaconda
site, but now, it looks like we should just edit
/fedora/i386/base/comps.xml directly.
X. Step by step walkthrough the whole buildinstall process
A. Running build-fc1
B. Time to build (35 minutes on my Dual Intel Pentium III 500MHz with
1GB RAM)
XI. Splitting distros
A. I have a seperate script for this.
i. rm -rf i386-disc[123456789] (otherwise splittree.py will
complain)
ii. splittree.py --arch=i386 --total-discs=3 --bin-discs=3 \
--src-discs=1 --release-string=”Fedora Core 1”
--pkgorderfile=pkgfile --distdir=i386 --srcdir=SRPMS
--productpath=Fedora
XII. burning distros mkisofs
A. I use a script for mkisofs
i. genhdlist --withnumbers --fileorder pkgfile \
/fedora/i386-disc[123]
ii. mkisofs -b isolinux/isolinux.bin -c isolinux/boot.cat -J -p \
“my(a)email.address.xn--com-9o0a -V “Fedora Core 1 with updates disc 1” \
-r -T -v -A “Fedora Core Linux/i386 1” \
fedoracore1-disc1.iso -no-emul-boot -boot-load-size 4 \
-boot-info-table i386-disc1
iii. implantisomd5 --supported-iso fedoracore1-disc1.iso
B. I use xcdroast to burn the iso images—recommend using CD-RWs
XIII. How to test anaconda without burning discs
A. anaconda --test -m nfs:/fedora/i386 (you don't need to run an
NFS server for this to work, although it is easy to setup NFS and it is
easy to do a network installation)
XIV. Links and useful tools
XV. Acknowledgements
A. Jeremy Katz, et al.
B. Alexander Rau