mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-12 18:34:36 +08:00
Update FAQ_DEV.
This commit is contained in:
parent
970dcf2776
commit
00836012c6
@ -12,7 +12,7 @@
|
||||
<H1>Developer's Frequently Asked Questions (FAQ) for
|
||||
PostgreSQL</H1>
|
||||
|
||||
<P>Last updated: Tue Dec 4 01:14:35 EST 2001</P>
|
||||
<P>Last updated: Tue Dec 4 01:20:03 EST 2001</P>
|
||||
|
||||
|
||||
<P>Current maintainer: Bruce Momjian (<A href=
|
||||
@ -549,37 +549,38 @@
|
||||
<H3><A name="15">15</A>) How are RPM's packaged?</H3>
|
||||
|
||||
<P>This was written by Lamar Owen:</P>
|
||||
<PRE>
|
||||
2001-05-03
|
||||
<P>2001-05-03
|
||||
|
||||
As to how the RPMs are built -- to answer that question sanely requires
|
||||
<P>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:
|
||||
|
||||
<P>
|
||||
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
|
||||
<P> 2.) The initscript;
|
||||
<P> 3.) Any other ancilliary scripts and files;
|
||||
<P> 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
|
||||
<P> 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
|
||||
<P>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
|
||||
my personal hardware. Occasionally I receive opportunity from certain
|
||||
commercial enterprises such as Great Bridge and PostgreSQL, Inc. to
|
||||
build on other distributions.
|
||||
|
||||
I test the build by installing the resulting packages and running the
|
||||
<P>I test the build by installing the resulting packages and running the
|
||||
regression tests. Once the build passes these tests, I upload to the
|
||||
postgresql.org ftp server and make a release announcement. I am also
|
||||
responsible for maintaining the RPM download area on the ftp site.
|
||||
|
||||
You'll notice I said 'canonical' distributions above. That simply means
|
||||
<P>You'll notice I said 'canonical' distributions above. That simply means
|
||||
that the machine is as stock 'out of the box' as practical -- that is,
|
||||
everything (except select few programs) on these boxen are installed by
|
||||
RPM; only official Red Hat released RPMs are used (except in unusual
|
||||
@ -592,7 +593,7 @@ possible. Only the standard released 'official to that release'
|
||||
compiler is used -- and only the standard official kernel is used as
|
||||
well.
|
||||
|
||||
For a time I built on Mandrake for RedHat consumption -- no more.
|
||||
<P>For a time I built on Mandrake for RedHat consumption -- no more.
|
||||
Nonstandard RPM building systems are worse than useless. Which is not
|
||||
to say that Mandrake is useless! By no means is Mandrake useless --
|
||||
unless you are building Red Hat RPMs -- and Red Hat is useless if you're
|
||||
@ -600,12 +601,12 @@ trying to build Mandrake or SuSE RPMs, for that matter. But I would be
|
||||
foolish to use 'Lamar Owen's Super Special RPM Blend Distro 0.1.2' to
|
||||
build for public consumption! :-)
|
||||
|
||||
I _do_ attempt to make the _source_ RPM compatible with as many
|
||||
<P>I _do_ attempt to make the _source_ RPM compatible with as many
|
||||
distributions as possible -- however, since I have limited resources (as
|
||||
a volunteer RPM maintainer) I am limited as to the amount of testing
|
||||
said build will get on other distributions, architectures, or systems.
|
||||
|
||||
And, while I understand people's desire to immediately upgrade to the
|
||||
<P>And, while I understand people's desire to immediately upgrade to the
|
||||
newest version, realize that I do this as a side interest -- I have a
|
||||
regular, full-time job as a broadcast
|
||||
engineer/webmaster/sysadmin/Technical Director which occasionally
|
||||
@ -613,7 +614,7 @@ prevents me from making timely RPM releases. This happened during the
|
||||
early part of the 7.1 beta cycle -- but I believe I was pretty much on
|
||||
the ball for the Release Candidates and the final release.
|
||||
|
||||
I am working towards a more open RPM distribution -- I would dearly love
|
||||
<P>I am working towards a more open RPM distribution -- I would dearly love
|
||||
to more fully document the process and put everything into CVS -- once I
|
||||
figure out how I want to represent things such as the spec file in a CVS
|
||||
form. It makes no sense to maintain a changelog, for instance, in the
|
||||
@ -624,7 +625,7 @@ before building the RPM. IOW, I need to rethink the process -- and then
|
||||
go through the motions of putting my long RPM history into CVS one
|
||||
version at a time so that version history information isn't lost.
|
||||
|
||||
As to why all these files aren't part of the source tree, well, unless
|
||||
<P>As to why all these files aren't part of the source tree, well, unless
|
||||
there was a large cry for it to happen, I don't believe it should.
|
||||
PostgreSQL is very platform-agnostic -- and I like that. Including the
|
||||
RPM stuff as part of the Official Tarball (TM) would, IMHO, slant that
|
||||
@ -636,17 +637,16 @@ instinct says they're not likely to be), I am opposed to the idea -- not
|
||||
to keep the stuff to myself, but to not hinder the platform-neutral
|
||||
stance. IMHO, of course.
|
||||
|
||||
Of course, there are many projects that DO include all the files
|
||||
<P>Of course, there are many projects that DO include all the files
|
||||
necessary to build RPMs from their Official Tarball (TM).
|
||||
</PRE>
|
||||
|
||||
<H3><A name="16">16</A>) How are CVS branches managed?</H3>
|
||||
|
||||
<P>This was written by Tom Lane:</P>
|
||||
<PRE>
|
||||
<P>
|
||||
2001-05-07
|
||||
|
||||
If you just do basic "cvs checkout", "cvs update", "cvs commit", then
|
||||
<P>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
|
||||
@ -654,17 +654,19 @@ stable releases then you have to be able to access and update the
|
||||
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
|
||||
<P>The first thing you have to know is the branch name for the branch you
|
||||
are interested in getting at. To do this, look at some long-lived file,
|
||||
say the top-level HISTORY file, with "cvs status -v" to see what the
|
||||
branch names are. (Thanks to Ian Lance Taylor for pointing out that
|
||||
this is the easiest way to do it.) Typical branch names are:
|
||||
|
||||
<PRE>
|
||||
REL7_1_STABLE
|
||||
REL7_0_PATCHES
|
||||
REL6_5_PATCHES
|
||||
</PRE>
|
||||
|
||||
OK, so how do you do work on a branch? By far the best way is to create
|
||||
<P>OK, so how do you do work on a branch? By far the best way is to create
|
||||
a separate checkout tree for the branch and do your work in that. Not
|
||||
only is that the easiest way to deal with CVS, but you really need to
|
||||
have the whole past tree available anyway to test your work. (And you
|
||||
@ -672,73 +674,88 @@ have the whole past tree available anyway to test your work. (And you
|
||||
with very little beta testing --- so whenever you commit an update to a
|
||||
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
|
||||
<P>Normally, to checkout the head branch, you just cd to the place you
|
||||
want to contain the toplevel "pgsql" directory and say
|
||||
|
||||
<PRE>
|
||||
cvs ... checkout pgsql
|
||||
</PRE>
|
||||
|
||||
To get a past branch, you cd to whereever you want it and say
|
||||
<P>To get a past branch, you cd to whereever you want it and say
|
||||
|
||||
<PRE>
|
||||
cvs ... checkout -r BRANCHNAME pgsql
|
||||
</PRE>
|
||||
|
||||
For example, just a couple days ago I did
|
||||
<P>For example, just a couple days ago I did
|
||||
|
||||
<PRE>
|
||||
mkdir ~postgres/REL7_1
|
||||
cd ~postgres/REL7_1
|
||||
cvs ... checkout -r REL7_1_STABLE pgsql
|
||||
</PRE>
|
||||
|
||||
and now I have a maintenance copy of 7.1.*.
|
||||
<P>and now I have a maintenance copy of 7.1.*.
|
||||
|
||||
When you've done a checkout in this way, the branch name is "sticky":
|
||||
<P>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
|
||||
fetch or store the latest version in the branch, not the head version.
|
||||
Easy as can be.
|
||||
|
||||
So, if you have a patch that needs to apply to both the head and a
|
||||
<P>So, if you have a patch that needs to apply to both the head and a
|
||||
recent stable branch, you have to make the edits and do the commit
|
||||
twice, once in your development tree and once in your stable branch
|
||||
tree. This is kind of a pain, which is why we don't normally fork
|
||||
the tree right away after a major release --- we wait for a dot-release
|
||||
or two, so that we won't have to double-patch the first wave of fixes.
|
||||
</PRE>
|
||||
|
||||
<H3><A name="17">17</A>) How go I get involved in PostgreSQL
|
||||
development?</H3>
|
||||
<P>This was written by Lamar Owen:</P>
|
||||
<PRE>
|
||||
<P>
|
||||
2001-06-22
|
||||
|
||||
<P>
|
||||
> If someone was interested in joining the development team, where would
|
||||
<BR>
|
||||
> they...
|
||||
<BR>
|
||||
> - Find a description of the open source development process used by the
|
||||
<BR>
|
||||
> PostgreSQL team.
|
||||
<BR>
|
||||
|
||||
Read HACKERS for six months (or a full release cycle, whichever is longer).
|
||||
<P>Read HACKERS for six months (or a full release cycle, whichever is longer).
|
||||
Really. HACKERS _is_the process. The process is not well documented (AFAIK
|
||||
-- it may be somewhere that I am not aware of) -- and it changes continually.
|
||||
|
||||
<P>
|
||||
> - Find the development environment (OS, system, compilers, etc)
|
||||
<BR>
|
||||
> required to develop code.
|
||||
<BR>
|
||||
|
||||
<a href="developers.postgresql.org">Developers Corner</a> on the website
|
||||
<P><a href="developers.postgresql.org">Developers Corner</a> on the website
|
||||
has links to this information. The distribution tarball itself
|
||||
includes all the extra tools and documents that go beyond a good
|
||||
Unix-like development environment. In general, a modern unix with a
|
||||
modern gcc, GNU make or equivalent, autoconf (of a particular version),
|
||||
and good working knowledge of those tools are required.
|
||||
|
||||
<P>
|
||||
> - Find an area or two that needs some support.
|
||||
<BR>
|
||||
|
||||
The TODO list.
|
||||
<P>The TODO list.
|
||||
|
||||
You've made the first step, by finding and subscribing to HACKERS. Once you
|
||||
<P>You've made the first step, by finding and subscribing to HACKERS. Once you
|
||||
find an area to look at in the TODO, and have read the documentation on the
|
||||
internals, etc, then you check out a current CVS,write what you are going to
|
||||
write (keeping your CVS checkout up to date in the process), and make up a
|
||||
patch (as a context diff only) and send to the PATCHES list, prefereably.
|
||||
|
||||
Discussion on the patch typically happens here. If the patch adds a major
|
||||
<P>Discussion on the patch typically happens here. If the patch adds a major
|
||||
feature, it would be a good idea to talk about it first on the HACKERS list,
|
||||
in order to increase the chances of it being accepted, as well as toavoid
|
||||
duplication of effort. Note that experienced developers with a proven track
|
||||
@ -746,22 +763,20 @@ record usually get the big jobs -- for more than one reason. Also note that
|
||||
PostgreSQL is highly portable -- nonportable code will likely be dismissed
|
||||
out of hand.
|
||||
|
||||
Once your contributions get accepted, things move from there. Typically, you
|
||||
<P>Once your contributions get accepted, things move from there. Typically, you
|
||||
would be added as a developer on the list on the website when one of the
|
||||
other developers recommends it. Membership on the steering committee is by
|
||||
invitation only, by the other steering committee members, from what I have
|
||||
gathered watching froma distance.
|
||||
|
||||
I make these statements from having watched the process for over two years.
|
||||
<P>I make these statements from having watched the process for over two years.
|
||||
|
||||
To see a good example of how one goes about this, search the archives for the
|
||||
<P>To see a good example of how one goes about this, search the archives for the
|
||||
name 'Tom Lane' and see what his first post consisted of, and where he took
|
||||
things. In particular, note that this hasn't been _that_ long ago -- and his
|
||||
bugfixing and general deep knowledge with this codebase is legendary. Take a
|
||||
few days to read after him. And pay special attention to both the sheer
|
||||
quantity as well as the painstaking quality of his work. Both are in high
|
||||
demand.
|
||||
</PRE>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
Loading…
Reference in New Issue
Block a user