User:Bcl
From FedoraProject
(→Build with a test anaconda.rpm) |
(→mock setup) |
||
| Line 21: | Line 21: | ||
* <code> yum install mock </code> | * <code> yum install mock </code> | ||
| + | * Edit the <code>/etc/mock/site-defaults.cfg</code> file to bind your working directories inside the mock root. This keeps mock from wiping those directories on --init | ||
| + | <pre> | ||
| + | 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' )) | ||
| + | </pre> | ||
* Edit the <code>/etc/mock/</code> file for the distribution or copy it to a new name and edit | * Edit the <code>/etc/mock/</code> file for the distribution or copy it to a new name and edit | ||
** Add <code>proxy=http://proxy.home:3128</code> to the main section. | ** Add <code>proxy=http://proxy.home:3128</code> to the main section. | ||
| Line 55: | Line 62: | ||
Now you have a mock chroot environment setup that will use the proxy cache for packages. | Now you have a mock chroot environment setup that will use the proxy cache for packages. | ||
| − | |||
== Building boot images == | == Building boot images == | ||
Revision as of 18:04, 22 July 2010
Newbie on the anaconda team
Maintainer of:
- pylint fedora package
- python-logilab-common fedora package
- python-logilab-astng fedora package
Contents |
Anaconda Development
Development System
- Fedora 12
- 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.cfgfile 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:3128to 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
- Add
- 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
-
- Enter the chroot -
mock -r fedora-13-i386 --shell- Edit
/usr/lib/anaconda-runtime/buildinstall- add
proxy=http://proxy.home:3128to the main section of the yum config embedded in it.
- add
- Edit
/usr/lib/python2.6/site-packages/pypungi/__init__.pyto add:
- Edit
diff --git a/src/pypungi/__init__.py b/src/pypungi/__init__.py
index e57e72a..d30eefa 100644
--- a/src/pypungi/__init__.py
+++ b/src/pypungi/__init__.py
@@ -206,6 +206,8 @@ class Pungi(pypungi.PungiBase):
thisrepo.cost = repo.cost
if repo.ignoregroups:
thisrepo.enablegroups = 0
+ if repo.proxy:
+ thisrepo.proxy = repo.proxy
self.ayum.repos.add(thisrepo)
self.ayum.repos.enableRepo(thisrepo.id)
self.ayum._getRepos(thisrepo=thisrepo.id, doSetup = True)
--
1.6.6.1
This patch should be in the next release of pungi, but check to make sure just to be safe.
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:
- pungi.ks
# un-comment the applicable repo repo --name=fedora --baseurl=http://mirrors.cat.pdx.edu/fedora/linux/development/13/i386/os/ --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=/extra/released/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.
-
git clone git://git.fedorahosted.org/anaconda.git -
cd anaconda; git checkout -b build-upates
-
- bind the anaconda directory to the mock being used (needs to be done as root)
-
mkdir /var/lib/mock/fedora-13-i386/root/root/anaconda/ -
mount -o bind /home/bcl/projs/anaconda/ /var/lib/mock/fedora-13-i386/root/root/anaconda/
-
- enter the chroot
-
mock -v -r fedora-13-i386 --shell - Install the development tools group
-
yum groupinstall "development tools"
-
- 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.
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)
-
mount -o bind /home/bcl/Red_Hat/projs/anaconda/ /var/lib/mock/fedora-13-i386/root/root/anaconda/ -
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 /extra/released/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.ksand 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.