version 1.13, 2001/01/01 22:01:21 |
version 1.14, 2001/02/24 23:37:06 |
|
|
<img alt="CTM for OpenBSD" src="images/bsdctm.gif" width="401" height="126"> |
<img alt="CTM for OpenBSD" src="images/bsdctm.gif" width="401" height="126"> |
</center> |
</center> |
|
|
<H3>What is ctm?</H3> |
<H3>What is CTM?</H3> |
|
|
<P> |
<P> |
Ctm is a system which was designed by Poul-Henning Kamp for making |
CTM is a system which was designed by Poul-Henning Kamp for making |
changes to a source tree available on a daily basis by email. |
changes to a source tree available on a daily basis by email. |
This is a good way to stay up to date with the current source- or |
This is a good way to stay up to date with the current source tree or |
CVS tree if you have a bad Internet connection, for instance via modem. |
CVS repository if you have a slow Internet connection, for instance via modem. |
|
|
<P> |
<P> |
Ctm uses very low bandwidth for distributing the changes to the tree, |
CTM uses very low bandwidth for distributing the changes to the tree, |
and compresses them using gzip -9. In contrast to <a |
and compresses them using <tt><b>gzip -9</b></tt>. In contrast to |
href="cvsup.html">CVSup</a>, ctm is written in plain C and therefore |
<a href="cvsup.html">CVSup</a>, CTM is written in plain C language |
available for every platform supported by OpenBSD. |
and therefore available for every platform supported by OpenBSD. |
|
|
|
<p> |
|
For <b>any</b> problems, suggestions, reports and questions regarding CTM |
|
contact the CTM maintainer |
|
<a href="mailto:hgw@d1906.inka.de">Hans Günter Weigand</a>. |
|
<small>(Please do not ask other OpenBSD people for CTM support, |
|
as they are busy doing other things. Thank you.)</small> |
|
|
<H3>How does it work?</H3> |
<H3>How does it work?</H3> |
|
|
<P> |
<P> |
The basic idea of ctm is that you subscribe to a special mailing list |
The basic idea of CTM is that you subscribe to a special mailing list |
for a particular source tree. Each day you receive an email message |
for a particular source tree. Each day you receive an email message |
containing all the changes to that tree during that period. |
containing all the changes to that tree during that period. |
One set of differences is called a "delta". |
One such set of differences is called a <b>delta</b>. |
|
|
<P> |
<P> |
You begin with a base set, against which later deltas are patched. To |
You begin with a base set, against which later deltas are patched. To |
begin using ctm you download the latest base set and all deltas |
begin using CTM you download the latest base set and all deltas |
generated after that. Once you have processed those you can process |
generated after that. Once you have processed those you can process |
later deltas you receive from the mailing list. The base sets are split |
later deltas you receive from the mailing list. The base sets are split |
into pieces of 1400kB each for easier downloading over bad lines, and |
into pieces of 1400kB each for easier downloading over bad lines. |
you can even put them onto floppies this way. |
|
|
|
<P> |
<P> |
Base sets are generated once every 50 relative deltas, so you never |
Base sets are generated once every 50 relative deltas, so you never |
have to grab more than 50 deltas to catch up. |
have to grab more than 50 deltas to catch up. |
|
|
<P> |
<P> |
There are currently two kinds of base delta. For quite a while we |
There are currently two kinds of base set files. For quite a while we |
were making <tt><b>tar.gz</b></tt> files manually, but we are |
were making <tt><b>tar.gz</b></tt> files manually, but we are |
switching back to real ctm base deltas. The latter contain md5 |
switching back to real CTM base deltas. The latter contain MD5 |
checksums and are generated automatically, thus are a bit safer. You |
checksums and are generated automatically, thus are a bit safer. You |
can distinguish these two kinds of base delta by their filename. An |
can distinguish these two kinds of base set by their filename. An |
example for a <tt><b>tar.gz</b></tt> file is |
example for a <tt><b>tar.gz</b></tt> file is |
<tt><b>OpenBSD-cvs.1450.tar.gz</b></tt>, whereas a ctm base delta |
<tt><b>OpenBSD-cvs.1450.tar.gz</b></tt>, whereas a CTM base delta |
would be named <tt><b>OpenBSD-cvs.1500A.gz</b></tt>. See below for |
would be named <tt><b>OpenBSD-cvs.1500A.gz</b></tt>. See below for |
detailed instructions. |
detailed instructions. |
|
|
<H3>How much bandwidth does ctm use?</H3> |
<H3>How much bandwidth does CTM use?</H3> |
|
|
<P> |
<P> |
You obtain the base set and all relative deltas up to the recent one |
You obtain the base set and all relative deltas up to the recent one |
|
|
<li>Approximately 65MB for OpenBSD-src. |
<li>Approximately 65MB for OpenBSD-src. |
<li>Approximately 35MB for OpenBSD-src-x11. |
<li>Approximately 35MB for OpenBSD-src-x11. |
<li>Approximately 2MB for OpenBSD-ports. |
<li>Approximately 2MB for OpenBSD-ports. |
<li>Keep in mind that these are compressed sizes. The uncompressed |
<br>Keep in mind that these are compressed sizes. The uncompressed |
files are about five times as large. |
files are about five times as large. |
<li>Relative deltas vary from 10kB to 100kB, and occasionally a couple of |
<li>Relative deltas vary from 10kB to 500kB, and occasionally a couple of |
megabytes. |
megabytes. |
<li>ctm always splits deltas into 100kB messages which are reassembled |
<li>CTM always splits deltas into 100kB mail messages which are reassembled |
automatically. |
automatically. |
<li>If a delta is larger than 5MB, it is not sent via mail. Instead, you |
<li>If a delta is larger than 5MB, it is not sent via mail. Instead, |
will receive a notification to get the delta by ftp. |
you will receive a notification to get the delta by ftp. Larger |
|
CTM updates are rare, though, usually occurring only after a major |
|
import of something like binutils, perl, gcc, etc, or applying a |
|
CVS tag to the CVS repository. |
</ul> |
</ul> |
|
|
<P> |
<H3>How do I use CTM?</H3> |
Larger ctm updates are rare, though, usually occurring only after a major |
|
import of something like binutils, perl, gcc, etc. |
|
|
|
<H3>How do I use ctm?</H3> |
|
|
|
<UL> |
<UL> |
<LI>Subscribe to the ctm mailing list for the source set you want. |
<LI>Subscribe to the CTM mailing list for the source set you want. |
<p> |
<p> |
There are several mailing lists related to ctm. There is a list for |
There are several mailing lists related to CTM. There is a list for |
updates to the CVS tree, a list for the source tree, a list |
updates to the CVS repository, a list for the source tree, a list |
for the X11 part of both, and one for the ports tree, plus |
for the X11 part of both, and one for the ports tree, plus |
a list for log messages from the ctm delta generation runs. |
a list for log messages from the CTM delta generation runs. |
<p> |
<p> |
The following commands will subscribe you to the appropriate lists: |
The following commands will subscribe you to the appropriate lists: |
<p> |
<p> |
For the CVS tree (without the X11 part): |
For the CVS repository (without the X11 part): |
<pre> |
<pre> |
echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.org |
echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.org |
</pre> |
</pre> |
For the X11 part of the CVS tree: |
For the X11 part of the CVS repository: |
<pre> |
<pre> |
echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.org |
echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.org |
</pre> |
</pre> |
|
|
<pre> |
<pre> |
echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.org |
echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.org |
</pre> |
</pre> |
For the ctm log list: |
For the CTM log list: |
<pre> |
<pre> |
echo subscribe ctm-log | mail majordomo@OpenBSD.org |
echo subscribe ctm-log | mail majordomo@OpenBSD.org |
</pre> |
</pre> |
|
|
<p> |
<p> |
<li>Install the ctm program from a package or from the ports |
<li>Install the CTM program from a package or from the ports |
collection. You'll find the port at |
collection. You'll find the port at |
<tt><b>/usr/ports/devel/ctm</b></tt>. |
<tt><b>/usr/ports/devel/ctm</b></tt>. |
|
|
|
|
<li>Download the base set from an FTP site. You'll find it in the |
<li>Download the base set from an FTP site. You'll find it in the |
subdirectory <tt><b>base/OpenBSD-cvs</b></tt>. Get all files in |
subdirectory <tt><b>base/OpenBSD-cvs</b></tt>. Get all files in |
that directory. Once you have them all you can create the base set |
that directory. Once you have them all you can create the base set |
file and unpack it with the following commands, depending on the kind |
file and unpack it with the following commands, depending on the type |
of base delta you got: |
of file you got: |
|
|
<pre> |
<pre> |
cat split/OpenBSD-cvs.1500A.gz.* > OpenBSD-cvs.1500A.gz |
cat split/OpenBSD-cvs.1500A.gz.* > OpenBSD-cvs.1500A.gz |
|
|
<p> |
<p> |
where <tt><b>split</b></tt> is the directory in which you have |
where <tt><b>split</b></tt> is the directory in which you have |
placed the files you downloaded and <tt><b>target</b></tt> is the |
placed the files you downloaded and <tt><b>target</b></tt> is the |
place you have chosen for the source set. |
place you have chosen for unpacking the source set. |
|
|
<p> |
<p> It is not necessary to keep these base set files around, if |
It is not necessary to keep these files around, if you're sure you've |
you're sure you've got a complete tree. But you can keep the base set |
got a complete tree. But you can keep the base set file(s) for backup |
file(s) for backup purposes. However, be sure to note the number of |
purposes. However, be sure to note the number of the base set before |
the base set before continuing. |
continuing. |
|
|
|
<p> |
<p> |
<li>You now need to get the deltas which have been generated since the |
<li>You now need to get the deltas which have been generated since the |
|
|
<p> |
<p> |
<LI>Wait until you get your first delta from the mailing list. |
<LI>Wait until you get your first delta from the mailing list. |
<p> |
<p> |
<LI>Unpack, assemble, and apply the ctm delta using ctm_rmail. |
<LI>Unpack, assemble, and apply the CTM delta using <tt><b>ctm_rmail</b></tt>. |
<p> |
<p> |
|
|
<pre> |
<pre> |
|
|
|
|
<p> |
<p> |
where <tt><b>folder</b></tt> is the mail folder containing the delta |
where <tt><b>folder</b></tt> is the mail folder containing the delta |
mail. This will decode the ctm delta and save it in the |
mail. This will decode the CTM delta and save it in the |
<tt><b>deltas</b></tt> directory. The delta will be a file of the |
<tt><b>deltas</b></tt> directory. The delta will be a file of the |
form <tt><b>OpenBSD-cvs.<var>XXXX</var>.gz</b></tt>, where <var>XXXX</var> |
form <tt><b>OpenBSD-cvs.<var>XXXX</var>.gz</b></tt>, where <var>XXXX</var> |
is the number of the delta. Then the delta will be applied to the |
is the number of the delta. Then the delta will be applied to the |
directory tree located at <tt><b>target</b></tt>, the place where you |
directory tree located at <tt><b>target</b></tt>, the place where you |
unpacked the base delta. |
unpacked the base set. |
|
|
<p> |
<p> |
Repeat this last step every time you receive a delta from the |
Repeat this last step every time you receive a delta from the |
|
|
</ul> |
</ul> |
|
|
<p> |
<p> |
The addresses for the deltas are: |
The addresses of the FTP servers carrying CTM deltas are: |
|
|
<ul> |
<ul> |
<li><a href="ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm/"> |
<li><a href="ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm/"> |
|
|
</a> |
</a> |
</ul> |
</ul> |
|
|
|
<ul> |
|
<li>An experimental server can be reached at |
|
<a href="ftp://openbsd.rug.ac.be:/ftp/pub/OpenBSD-ctm/"> |
|
ftp://openbsd.rug.ac.be:/ftp/pub/OpenBSD-ctm/ |
|
</a>. |
|
This server has a slightly different directory layout. Base sets are |
|
available as big single files in the <tt><b>base</b></tt> directory. |
|
The split files are in <tt><b>base-split</b></tt>. |
|
</ul> |
|
|
<p> |
<p> |
<b>NOTE:</b> I'm very interested in finding other sites around the world |
<b>NOTE:</b> <a href="mailto:hgw@d1906.inka.de">I'm</a> very interested |
that would like to mirror these deltas. |
in finding other sites around the world that would like to |
|
mirror these deltas. |
<p> |
<p> |
|
|
<h3>Should I choose the source or CVS tree?</h3> |
<h3>Should I choose the source tree or the CVS repository?</h3> |
|
|
<P> |
<P> |
This depends on your diskspace, among other factors. Since ctm |
This depends on your diskspace, among other factors. Since CTM |
doesn't deal with files which have been modified locally, the "better" |
doesn't deal very well with files which have been modified locally, |
choice is probably the CVS tree. You then can check out your working |
the "better" choice is probably the CVS repository. You can check out |
source tree from your CVS tree, and keep your local modifications in |
your working copy of the source tree from your CVS repository then, |
your source tree, because cvs is smart enough to merge in your local |
and keep your local modifications in your source tree. CVS is |
changes. |
smart enough to merge in your local changes. You can also use the |
|
full range of CVS commands except <tt><b>cvs commit</b></tt>. |
|
|
<p> |
<p> |
The drawback, however, is the amount of diskspace it takes. A checked-out |
The drawback, however, is the amount of diskspace it takes. A |
source tree takes about 350MB or so, but if you have your own cvs tree you |
checked-out source tree takes about 350MB or so, but if you have your |
need about 1Gb for it, <b>plus</b> another 350MB for the checked out tree. |
own CVS repository you need more than 1Gb for it, <b>plus</b> another |
|
350MB for the checked out tree. |
<p> |
|
This doesn't count the 100MB or more (depending on the architecture) |
This doesn't count the 100MB or more (depending on the architecture) |
you will need to do a build, i.e. compile the sources. |
you will need to do a build, i.e. compile the sources. |
|
|
|
|
you should have no problems. A sample of this is as follows: |
you should have no problems. A sample of this is as follows: |
|
|
<p> |
<p> |
Suppose your ctm-updated tree is in <tt><b>/usr/src-ctm</b></tt>, and |
Suppose your CTM-updated tree is in <tt><b>/usr/src-ctm</b></tt>, and |
your real source tree, the one you make your modifications to and do |
your real source tree, the one you make your modifications to and do |
your builds from, is in <tt><b>/usr/src</b></tt>. |
your builds from, is in <tt><b>/usr/src</b></tt>. |
<tt><b>/usr/src</b></tt> should be initially an empty directory. The |
<tt><b>/usr/src</b></tt> should be initially an empty directory. The |
|
|
</pre> |
</pre> |
|
|
<p> |
<p> |
Modifications made to files in /usr/src will become a file contained within |
Modifications made to files in <tt><b>/usr/src</b></tt> will become a |
/usr/src, hiding the one in src-ctm. If changes are made via ctm to the |
file contained within <tt><b>/usr/src</b></tt>, hiding the one in |
underlying src-ctm tree, those changes will <b>not</b> be seen if there is |
<tt><b>src-ctm</b></tt>. If changes are made via CTM to the |
a file in the upper layer hiding it. |
underlying <tt><b>src-ctm</b></tt> tree, those changes will <b>not</b> |
|
be seen if there is a file in the upper layer hiding it. |
|
|
<p> |
<p> |
You should periodically unmount the |
You should periodically unmount the |
|
|
|
|
<p> |
<p> |
The commands <tt><b>ls -W</b></tt> and <tt><b>rm -W</b></tt> will be |
The commands <tt><b>ls -W</b></tt> and <tt><b>rm -W</b></tt> will be |
useful too, as objects named "whiteouts" in /usr/src will also hide |
useful too, as objects named "whiteouts" in <tt><b>/usr/src</b></tt> will also hide |
files in src-ctm. |
files in <tt><b>src-ctm</b></tt>. |
|
|
<p> |
<p> |
If you get the CVS tree, you can use the <tt><b>cvs checkout</b></tt> |
If you get the CVS repository, you can use the <tt><b>cvs checkout</b></tt> |
command to check out a source tree from it, and each time you update |
command to check out a source tree from it. Each time you update |
with ctm you can use the <tt><b>cvs update</b></tt> command to |
with CTM you can use the <tt><b>cvs update</b></tt> command to |
update your source tree. |
update your source repository. |
|
|
<p> |
<p> |
To get an initial src tree: |
To get an initial src repository: |
<pre> |
<pre> |
cd /usr |
cd /usr |
cvs -qd YOUR_CVS_TREE checkout -A src |
cvs -qd YOUR_CVS_REPOSITORY checkout -A src |
</pre> |
</pre> |
<p> |
<p> |
and after each ctm update: |
and after each CTM update: |
<pre> |
<pre> |
cd /usr/src |
cd /usr/src |
cvs -q update -PAd |
cvs -q update -PAd |
</pre> |
</pre> |
|
|
<H3>How stable is ctm for OpenBSD?</H3> |
<H3>How stable is CTM for OpenBSD?</H3> |
|
|
Ctm has been in use for over four years for OpenBSD, and for FreeBSD |
CTM has been in use for over four years for OpenBSD, and for FreeBSD |
for an even longer period of time. Ctm is very reliable and stable. |
for an even longer period of time. CTM is very reliable and stable. |
|
|
|
<h3>What does the future hold for CTM?</h3> |
|
|
|
There are numerous (small) changes and optimizations possible. |
|
Among them are: |
|
|
|
<ul> |
|
<li> CTM never sents a delta bigger than 5MB via mail. This could be |
|
changed in two ways: The maximum delta size could be increased, |
|
or a queue could be installed, from which only a certain number |
|
of messages are mailed out daily. I. e., if a delta is 6MB in |
|
size, it is split into 96 mail messages. These are put into a |
|
queue. On the first day, the first 50 messages are sent, on the |
|
second day the remaining 46, plus the first 4 messages of the |
|
following delta. |
|
|
|
<li> CTM could be run two times per day. |
|
|
|
</ul> |
|
|
<H3>More information</H3> |
<H3>More information</H3> |
|
|
If you want to learn more about ctm, a good place to start with is the |
If you want to learn more about CTM, a good place to start with is the |
FreeBSD Handbook: |
FreeBSD Handbook: |
|
|
<ul> |
<ul> |
|
|
</a> |
</a> |
</ul> |
</ul> |
|
|
There are also man pages for all of the ctm utilities. |
There are also man pages for all of the CTM utilities. |
|
|
<p> |
<h3>Summary:</h3> |
Summary: |
|
|
|
<p> |
<p> |
|
|
|
|
<li><tt>echo subscribe ctm-log | mail majordomo@OpenBSD.org</tt> |
<li><tt>echo subscribe ctm-log | mail majordomo@OpenBSD.org</tt> |
</ul> |
</ul> |
|
|
<li> FTP (for base and relative deltas): |
<li> FTP (for base sets and relative deltas): |
|
|
<ul> |
<ul> |
<li> <a href="ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm"> |
<li> <a href="ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm"> |
|
|
</ul> |
</ul> |
|
|
<p> |
<p> |
Important notes and announcements about ctm will be posted to: |
Important notes and announcements about CTM will be posted to: |
<ul> |
<ul> |
<li> misc@OpenBSD.org |
<li> misc@OpenBSD.org |
<li> announce@OpenBSD.org |
<li> announce@OpenBSD.org |
|
|
<H3>Acknowledgements</H3> |
<H3>Acknowledgements</H3> |
|
|
<ul> |
<ul> |
<li> Poul-Henning Kamp (phk@FreeBSD.org) for making ctm possible and helping |
<li> Poul-Henning Kamp (phk@FreeBSD.org) for making CTM possible and helping |
getting the delta generation running |
getting the delta generation running |
|
|
<li> Theo de Raadt (deraadt@theos.com) for making OpenBSD possible and |
<li> Theo de Raadt (deraadt@theos.com) for making OpenBSD possible and |
initially providing the resources needed for creating the ctm |
initially providing the resources needed for creating the CTM |
deltas on cvs.OpenBSD.org (now they are generated elsewhere), and |
deltas on cvs.OpenBSD.org (now they are generated elsewhere), and |
for the nameserver magic |
for the nameserver magic |
|
|
<li> Todd C. Miller (millert@OpenBSD.org) for setting up and |
<li> Todd C. Miller (millert@OpenBSD.org) for setting up and |
maintaining the ctm mailinglists |
maintaining the CTM mailinglists |
|
|
<li> Bob Beck (beck@OpenBSD.org), Artur Grabowski (art@OpenBSD.org), |
<li> Bob Beck (beck@OpenBSD.org), Artur Grabowski (art@OpenBSD.org), |
Magnus Holmberg (mho@OpenBSD.org) and |
Magnus Holmberg (mho@OpenBSD.org) and |
Wolfram Schneider (wosch@FreeBSD.org) for setting up the ftp space |
Wolfram Schneider (wosch@FreeBSD.org) for setting up the ftp space |
for the bases and deltas on ctm.*OpenBSD.org |
for the base sets and deltas on ctm.*OpenBSD.org |
|
|
<li> Thomas Graichen (graichen@OpenBSD.org) for starting ctm for |
<li> Thomas Graichen (graichen@OpenBSD.org) for starting CTM for |
OpenBSD and maintaining it all those years |
OpenBSD and maintaining it all those years |
|
|
<li> Wim Vandeputte (wvdeputte@OpenBSD.org) for hosting ctm now |
<li> Wim Vandeputte (wvdputte@OpenBSD.org) for hosting CTM now |
|
|
<li> ... and all the others who contributed indirectly |
<li> ... and all the others who contributed indirectly |
</ul> |
</ul> |
|
|
|
|
<p> |
|
For any problems, suggestions, reports and questions regarding ctm |
|
contact the ctm maintainer |
|
<a href="mailto:hgw@d1906.inka.de">Hans Günter Weigand</a>. |
|
<p> |
<p> |
OpenBSD/CTM logo designed for the OpenBSD Project by |
OpenBSD/CTM logo designed for the OpenBSD Project by |
<a href="mailto:flipk@openbsd.org">Phillip F Knaack</a>. |
<a href="mailto:flipk@openbsd.org">Phillip F Knaack</a>. |