Anaconda documents

Taylor, ForrestX forrestx.taylor at intel.com
Fri Nov 21 21:58:50 UTC 2003


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 at 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 at email.address.com” -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







More information about the fedora-docs-list mailing list