<H3><A name="15">15</A>) How are RPM's packaged?</H3>
-<P>This was written by Lamar Owen:</P>
-<P>
+ <P>This was written by Lamar Owen:</P>
<PRE>
As to how the RPMs are built -- to answer that question sanely requires
me to know how much experience you have with the whole RPM paradigm.
'How is the RPM built?' is a multifaceted question. The obvious simple
answer is that I maintain:
- 1.) A set of patches to make certain portions of the source
- tree 'behave' in the different environment of the RPMset;
- 2.) The initscript;
- 3.) Any other ancilliary scripts and files;
- 4.) A README.rpm-dist document that tries to adequately document
- both the differences between the RPM build and the WHY of the
- differences, as well as useful RPM environment operations
- (like, using syslog, upgrading, getting postmaster to
- start at OS boot, etc);
- 5.) The spec file that throws it all together. This is not a
- trivial undertaking in a package of this size.
+ 1.) A set of patches to make certain portions of the source
+ tree 'behave' in the different environment of the RPMset;
+ 2.) The initscript;
+ 3.) Any other ancilliary scripts and files;
+ 4.) A README.rpm-dist document that tries to adequately document
+ both the differences between the RPM build and the WHY of the
+ differences, as well as useful RPM environment operations
+ (like, using syslog, upgrading, getting postmaster to
+ start at OS boot, etc);
+ 5.) The spec file that throws it all together. This is not a
+ trivial undertaking in a package of this size.
I then download and build on as many different canonical distributions
as I can -- currently I am able to build on Red Hat 6.2, 7.0, and 7.1 on
Of course, there are many projects that DO include all the files
necessary to build RPMs from their Official Tarball (TM).
</PRE>
-<P>
<H3><A name="16">16</A>) How are CVS branches managed?</H3>
-<P>This was written by Tom Lane:
-<P>
+
+ <P>This was written by Tom Lane:</P>
<PRE>
-If you just do basic "cvs checkout", "cvs update", "cvs commit", then
+If you just do basic "cvs checkout", "cvs update", "cvs commit", then
you'll always be dealing with the HEAD version of the files in CVS.
That's what you want for development, but if you need to patch past
stable releases then you have to be able to access and update the
-"branch" portions of our CVS repository. We normally fork off a branch
+"branch" portions of our CVS repository. We normally fork off a branch
for a stable release just before starting the development cycle for the
next release.
The first thing you have to know is the branch name for the branch you
are interested in getting at. Unfortunately Marc has been less than
100% consistent in naming the things. One way to check is to apply
-"cvs log" to any file that goes back a long time, for example HISTORY
+"cvs log" to any file that goes back a long time, for example HISTORY
in the top directory:
$ cvs log HISTORY | more
total revisions: 129; selected revisions: 129
More---q
-Unfortunately "cvs log" isn't all that great about distinguishing
-branches from tags --- it calls 'em all "symbolic names". (A "tag" just
+Unfortunately "cvs log" isn't all that great about distinguishing
+branches from tags --- it calls 'em all "symbolic names". (A "tag" just
marks a specific timepoint across all files --- it's essentially a
snapshot whereas a branch is a changeable fileset.) Rule of thumb is
that names attached to four-number versions where the third number is
zero represent branches, the others are just tags. Here we can see that
the extant branches are
- REL7_1_STABLE
- REL7_0_PATCHES
- REL6_5_PATCHES
+ REL7_1_STABLE
+ REL7_0_PATCHES
+ REL6_5_PATCHES
The next commit to the head will be revision 1.107, whereas any changes
committed into the REL7_1_STABLE branch will have revision numbers like
1.106.2.*, corresponding to the branch number 1.106.0.2 (don't ask where
stable branch, you'd better be doubly sure that it's correct.)
Normally, to checkout the head branch, you just cd to the place you
-want to contain the toplevel "pgsql" directory and say
+want to contain the toplevel "pgsql" directory and say
- cvs ... checkout pgsql
+ cvs ... checkout pgsql
To get a past branch, you cd to whereever you want it and say
- cvs ... checkout -r BRANCHNAME pgsql
+ cvs ... checkout -r BRANCHNAME pgsql
For example, just a couple days ago I did
- mkdir ~postgres/REL7_1
- cd ~postgres/REL7_1
- cvs ... checkout -r REL7_1_STABLE pgsql
+ mkdir ~postgres/REL7_1
+ cd ~postgres/REL7_1
+ cvs ... checkout -r REL7_1_STABLE pgsql
and now I have a maintenance copy of 7.1.*.
-When you've done a checkout in this way, the branch name is "sticky":
+When you've done a checkout in this way, the branch name is "sticky":
CVS automatically knows that this directory tree is for the branch,
-and whenever you do "cvs update" or "cvs commit" in this tree, you'll
+and whenever you do "cvs update" or "cvs commit" in this tree, you'll
fetch or store the latest version in the branch, not the head version.
Easy as can be.
or two, so that we won't have to double-patch the first wave of fixes.
</PRE>
-<P>Also, Ian Lance Taylor points out that branches and tags can be
-distiguished by using "cvs status -v".</P>
-
+ <P>Also, Ian Lance Taylor points out that branches and tags can be
+ distiguished by using "cvs status -v".</P>
</BODY>
</HTML>