I have a consulting client who has a Linux based storage appliance which is based on Fedora Core 2. I'll pause here while you laugh...
They need to upgrade to something more easily supported and CentOS is the chosen distro. They have the source RPM's for their old system stored in CVS and have a very weird/complicated build system to turn it all into an iso which I am still figuring out. They version control their source rpm's but don't really use CVS version numbers to number their distros. Instead they build an iso and name/number that and then have to keep the iso around forever.
I want to go through their CVS, pick out the stuff we want to port to CentOS and trash the rest. And keep it all version controlled at the same time. The current thinking is that we want to get off of CVS and move to Mercurial.
Given the above and that we want to customize our CentOS build what is the best way to do that? I am thinking we would like to work with the source rpm's. Putting binaries under version control which can just be built from the source seems silly. If we put the source rpm's and any associated build scripts in version control then given any particular repository version number we should be able to reproduce any installable ISO we created in the past.
I am imagining that we will have a huge source tree of exploded SRPMS and we will go through the old CVS and evaluate all of the customizations they made and whichever are worthy can be hacked into the SRPMS, RPM's get built out of these, and an ISO gets built out of the RPM's.
Does all of this sound feasible?
Does CentOS already have tools for automating a complete iso build from an SRPM repository?
Thanks!
Tracy R Reed wrote:
I have a consulting client who has a Linux based storage appliance which is based on Fedora Core 2. I'll pause here while you laugh...
They need to upgrade to something more easily supported and CentOS is the chosen distro. They have the source RPM's for their old system stored in CVS and have a very weird/complicated build system to turn it all into an iso which I am still figuring out. They version control their source rpm's but don't really use CVS version numbers to number their distros. Instead they build an iso and name/number that and then have to keep the iso around forever.
I want to go through their CVS, pick out the stuff we want to port to CentOS and trash the rest. And keep it all version controlled at the same time. The current thinking is that we want to get off of CVS and move to Mercurial.
Given the above and that we want to customize our CentOS build what is the best way to do that? I am thinking we would like to work with the source rpm's. Putting binaries under version control which can just be built from the source seems silly. If we put the source rpm's and any associated build scripts in version control then given any particular repository version number we should be able to reproduce any installable ISO we created in the past.
I am imagining that we will have a huge source tree of exploded SRPMS and we will go through the old CVS and evaluate all of the customizations they made and whichever are worthy can be hacked into the SRPMS, RPM's get built out of these, and an ISO gets built out of the RPM's.
We install the SRPMS and move all the tar files out of SVN and into a directory, keeping all the patches and text files in SVN. We put the tarballs in a webdav directory (in a subdirectory under SRPM name)
Does all of this sound feasible?
yes
Does CentOS already have tools for automating a complete iso build from an SRPM repository?
No ... we maintain a package tree, and build the ISO from that.
For CentOS-5, building an ISO uses the anaconda runtime and the buildinstall command. Here is documentation on the buildinstall command:
Johnny Hughes wrote:
We install the SRPMS and move all the tar files out of SVN and into a directory, keeping all the patches and text files in SVN. We put the tarballs in a webdav directory (in a subdirectory under SRPM name)
How do you know which tarballs go with which SRPMS and then how do you put them back into place so you can build the RPM?
For CentOS-5, building an ISO uses the anaconda runtime and the buildinstall command. Here is documentation on the buildinstall command:
Thanks!
Tracy R Reed wrote:
Johnny Hughes wrote:
We install the SRPMS and move all the tar files out of SVN and into a directory, keeping all the patches and text files in SVN. We put the tarballs in a webdav directory (in a subdirectory under SRPM name)
How do you know which tarballs go with which SRPMS and then how do you put them back into place so you can build the RPM?
First, the reason we take them out ... svn does not do well with big files like tarballs in it's file system.
The spec file calls out all the sources ... so you can look for them first in SVN (or CVS, Hg, etc.), then use something like wget to look for them.
first export the files in the sources directory from SVN ...
we use a package called rpmdevtools from fedora that has a script called spectool which can be called like this:
#====== for f in `spectool -n -S -P *.spec | awk '{FS=" ";print $2}' \ | sed -e "s/.*///g"`
do # some source files are already here, so only download missing # (compressed) ones. if [ ! -e $rpmroot/SOURCES/$f ]; then
wget --http-user=$wget_user --http-password=$wget_passwd \ -P ../SOURCES http://$SERVER_NAME/sources/$f
fi
done #=====
For CentOS-5, building an ISO uses the anaconda runtime and the buildinstall command. Here is documentation on the buildinstall command:
Thanks!
Johnny Hughes wrote:
First, the reason we take them out ... svn does not do well with big files like tarballs in it's file system.
That makes sense.
The spec file calls out all the sources ... so you can look for them first in SVN (or CVS, Hg, etc.), then use something like wget to look for them.
first export the files in the sources directory from SVN ...
But since you keep the tarballs outside of the svn on a webserver somewhere you wouldn't normally expect the script to find the tarball, right? Unless you had already run this build once and downloaded it perhaps.
And when you are done you check in any of changes then delete the working directory where you had the sources checked out and tarball downloaded into? Or do you just leave it all alone? I guess anyone working on it would know not to check in the tarball.