User:Bcl

From FedoraProject

(Difference between revisions)
Jump to: navigation, search
(Add docs on doing an anaconda build)
Line 8: Line 8:
 
* [https://admin.fedoraproject.org/pkgdb/acls/name/python-logilab-astng python-logilab-astng] fedora package
 
* [https://admin.fedoraproject.org/pkgdb/acls/name/python-logilab-astng python-logilab-astng] fedora package
 
* [https://admin.fedoraproject.org/pkgdb/acls/name/gnupg gnupg] fedora package (note, v1.4.10 not gnupg2)
 
* [https://admin.fedoraproject.org/pkgdb/acls/name/gnupg gnupg] fedora package (note, v1.4.10 not gnupg2)
 +
* [https://admin.fedoraproject.org/pkgdb/acls/name/livecd-tools livecd-tools] fedora package
 +
* [https://admin.fedoraproject.org/pkgdb/acls/name/parted parted] fedora package
  
 
== Anaconda Development ==
 
== Anaconda Development ==
Line 147: Line 149:
  
 
Note, this script currently only works with x86 due to the fact that I borrowed part of it from the <code>mk-images.x86</code> script and haven't built on other architectures yet.
 
Note, this script currently only works with x86 due to the fact that I borrowed part of it from the <code>mk-images.x86</code> script and haven't built on other architectures yet.
 +
 +
== Releasing anaconda ==
 +
 +
This requires permission to upload new anaconda files.
 +
 +
* <code>./autogen.sh</code>
 +
* <code>./configure</code>
 +
** If that fails for deps: <code>yum-builddep anaconda.src.rpm</code>
 +
** Alternatively grab the tarball using <code> fedpkg sources </code> and build an src.rpm using <code> fedpkg srpm </code> and run yum-builddep on that.
 +
* <code> make bumpver </code>
 +
* Make sure anaconda.spec.in looks ok
 +
* <code> git add anaconda.spec.in configure.ac po/anaconda.pot </code>
 +
* <code> git commit -m "New version" </code>
 +
* <code> make archive </code>
 +
* <code> git push </code>
 +
* <code> git push --tags </code>
 +
 +
In the fedora package then do:
 +
* <code> fedpkg switch-branch fXX-branch </code>
 +
* Copy the anaconda.spec and anaconda-*tar.gz over to the package directory
 +
* Make sure anaconda.spec looks ok
 +
* <code> fedpkg new-sources anaconda-XX.XX-X.tar.gz </code>
 +
* <code> fedpkg clog </code>
 +
* <code> git add sources .gitignore anaconda.spec </code>
 +
* <code> git commit -F clog </code>
 +
* <code> git push </code>
 +
* <code> fedpkg build </code>

Revision as of 23:29, 18 October 2010

Newbie on the anaconda team

Personal homepage

Maintainer of:

Contents

Anaconda Development

Development System

  • Fedora 13
  • squid proxy to cache packages
  • lighttpd to serve up updates.img
  • tftpd to serve up pxe boot images
  • mock + pungi for building

mock setup

  • yum install mock
  • Edit the /etc/mock/site-defaults.cfg file to bind your working directories inside the mock root. This keeps mock from wiping those directories on --init
config_opts['plugin_conf']['bind_mount_enable'] = True
config_opts['plugin_conf']['bind_mount_opts']['dirs'].append(('/home/user/projs/anaconda', '/root/anaconda' ))
config_opts['plugin_conf']['bind_mount_opts']['dirs'].append(('/local/repo', '/repo' ))
config_opts['plugin_conf']['bind_mount_opts']['dirs'].append(('/local/pungi', '/pungi' ))
  • Edit the /etc/mock/ file for the distribution or copy it to a new name and edit
    • Add proxy=http://proxy.home:3128 to the main section.
    • comment out mirrorlist entries
    • Open up the mirror list url(s) in a browser and pick a mirror, use the same one for base and updates
    • Add baseurl=<mirror url> in each section instead of mirrorlist
    • Do this for each section with a mirrorlist
  • Setup the initial mock environment, replace the fedora-13-i386 with the mock file edited above
    • mock -r fedora-13-i386 --init
    • mock -r fedora-13-i386 --no-clean --install pungi

Now you have a mock chroot environment setup that will use the proxy cache for packages.

Building boot images

Use the compose and pungi.ks files below, place them into /root/ in the mock to be built. Replace REPO_URL_HERE with the same repo you selected for the mock's yum.conf file.

  • pungi.ks
# un-comment the applicable repo

repo --name=fedora --baseurl=REPO_URL_HERE --proxy=http://proxy.home:3128

# Very small install footprint
%packages
@base
kernel
syslinux
nomtools
anaconda
%end
  • compose
#!/bin/bash
echo "*** Running pungi --force --nosource --nodebuginfo --nosplitmedia -G -C -B -c /root/pungi.ks --ver=13"

pungi --cachedir=/pungi/cache --force --nosource --nodebuginfo --nosplitmedia -G -C -B -c /root/pungi.ks --ver=13
echo "*** Done."
  • chmod a+x compose
  • exit
  • mock -r fedora-13-i386 --chroot "/root/compose"

Change the --ver to match whichever release you are building for

Building updates

Anaconda includes the ability to update itself by passing updates=http://path/to/update.img to the kernel at boot time. This allows you to use the same boot media and test changes to stage2 of the installer.

  • This assumes a working mock chroot (ie. I built boot images with this one first)
  • You need a git repo of Anaconda, I branch for the build so I don't clutter up master with build by-products.
  • bind the anaconda directory to the mock being used by editing /etc/mock/site-defaults.cfg as described above.
    • NOTE: DO NOT use mount -o bind to mount directories inside the mock. They will be obliterated the next time --init is run.
  • Install the development tools group
    • mock -r fedora-13-i386 --install @development-tools
    • mock -r fedora-13-i386 --install yum-utils
  • enter the chroot
    • mock -v -r fedora-13-i386 --shell
    • grab a copy of the current anaconda*src.rpm from someplace and install the dependencies with:
      • yum-builddep anaconda*src.rpm
    • now build anaconda
      • ./autogen.sh
      • ./configure
      • make updates
    • exit
  • copy the updates.img over to the updates directory and optionally rename it
    • cp /var/lib/mock/fedora-13-i386/root/root/anaconda/updates.img /home/tftpboot/images/updates/

You can skip installing development tools and anaconda deps for subsequent iterations.

Now add updates=http://proxy.home/updates/updates.img to the kernel parameters when booting the install media.

NOTE: By running yum inside the chroot you may mess up the rpmdb version, this depends on how close your host system is to the target system. So YMMV

Build with a test anaconda.rpm

NOTE: This doesn't actually seem to work when the released anaconda version matches that in the branch. buildinstall isn't letting the local repo override the one in the repo

Normally when a punji build is done it pulls anaconda from the repo/proxy cache. Instead you want it to use your new build (ie. when doing stage1 development which cannot be updated by updates= being passed to the kernel)

  • make sure mock is mounting your anaconda directory as described above. Again, do not use mount -o bind to do it.
  • mock -v -r fedora-13-i386-proxy --shell
  • cd /root/anaconda
  • Removed the cached files. Otherwise it pull pull from there and not update to the latest
    • rm -rf /13
    • rm -rf /pungi/cache/local
  • ./autogen.sh
  • ./configure
  • make scratch
  • rpmbuild -ts --nodeps anaconda...tar.gz
  • yum-builddep /builddir/build/SRPMS/anaconda...src.rpm
  • rpmbuild --rebuild /builddir/build/SRPMS/anaconda...src.rpm
  • mkdir /repo
  • cp /builddir/build/RPMS/anaconda...rpm /repo
  • createrepo /repo
  • edit /root/pungi.ks and add
    • repo --name=local --baseurl=file:///repo/
  • exit
  • mock -v -r fedora-13-i386 --chroot "/root/compose"
  • rsync -avc /var/lib/mock/fedora-13-i386/root/13/i386/os/images/ /home/tftpboot/images/fedora/13/i386/

Boot with the pxe image and see what happens.

NOTE: The removal of the local repo cache is needed because yum gets confused by its presence.

Update boot.iso with new anaconda rpm

After you have a working boot.iso you can easily update it with the files from the new anaconda rpm you built above. Use the [| upd_bootiso] script to do this:

upd_bootiso boot.iso anaconda-13.35-1.fc13.i686.rpm

This will extract the files from initrd.img and install.img on the boot.iso, update the files and then re-build the boot.iso

This is considerably faster than using mock + pungi to compose a whole new iso from scratch.

Note, this script currently only works with x86 due to the fact that I borrowed part of it from the mk-images.x86 script and haven't built on other architectures yet.

Releasing anaconda

This requires permission to upload new anaconda files.

  • ./autogen.sh
  • ./configure
    • If that fails for deps: yum-builddep anaconda.src.rpm
    • Alternatively grab the tarball using fedpkg sources and build an src.rpm using fedpkg srpm and run yum-builddep on that.
  • make bumpver
  • Make sure anaconda.spec.in looks ok
  • git add anaconda.spec.in configure.ac po/anaconda.pot
  • git commit -m "New version"
  • make archive
  • git push
  • git push --tags

In the fedora package then do:

  • fedpkg switch-branch fXX-branch
  • Copy the anaconda.spec and anaconda-*tar.gz over to the package directory
  • Make sure anaconda.spec looks ok
  • fedpkg new-sources anaconda-XX.XX-X.tar.gz
  • fedpkg clog
  • git add sources .gitignore anaconda.spec
  • git commit -F clog
  • git push
  • fedpkg build