version 1.12, 2000/11/17 19:11:33 |
version 1.13, 2001/01/01 22:01:21 |
|
|
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#23238E"> |
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#23238E"> |
|
|
<center> |
<center> |
<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> |
|
|
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- or |
cvs-tree if you have a bad internet connection - for instance via modem. |
CVS tree if you have a bad Internet connection, for instance via modem. |
|
|
<P> |
<P> |
Ctm uses very low bandwidth for distributing the changes to the |
Ctm uses very low bandwidth for distributing the changes to the tree, |
tree, and compresses them using gzip -9. |
and compresses them using gzip -9. In contrast to <a |
|
href="cvsup.html">CVSup</a>, ctm is written in plain C and therefore |
|
available for every platform supported by OpenBSD. |
|
|
<H3>How does it work?</H3> |
<H3>How does it work?</H3> |
|
|
|
|
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 set of differences is called a "delta". |
|
|
<P> |
<P> |
You begin with a base set against which later deltas are patched. |
You begin with a base set, against which later deltas are patched. To |
To begin using ctm you must grab the latest base set and all deltas |
begin using ctm you download the latest base set and all deltas |
after that; once you have processed those you can process later |
generated after that. Once you have processed those you can process |
deltas you receive on the mailing list. The base sets are split |
later deltas you receive from the mailing list. The base sets are split |
into pieces of 1400k each for easier downloading over bad lines |
into pieces of 1400kB each for easier downloading over bad lines, and |
and you can even put them onto floppies this way. |
you can even put them onto floppies this way. |
|
|
<P> |
<P> |
Bases are generated approximately once every 100 relative deltas, so you never |
Base sets are generated once every 50 relative deltas, so you never |
have to grab more than 100 deltas to catch up. |
have to grab more than 50 deltas to catch up. |
|
|
|
<P> |
|
There are currently two kinds of base delta. For quite a while we |
|
were making <tt><b>tar.gz</b></tt> files manually, but we are |
|
switching back to real ctm base deltas. The latter contain md5 |
|
checksums and are generated automatically, thus are a bit safer. You |
|
can distinguish these two kinds of base delta by their filename. An |
|
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 |
|
would be named <tt><b>OpenBSD-cvs.1500A.gz</b></tt>. See below for |
|
detailed instructions. |
|
|
<H3>How much bandwidth does ctm use?</H3> |
<H3>How much bandwidth does ctm use?</H3> |
|
|
<P> |
<P> |
As mentioned above, the base set contains a full source tree in TAR format, |
You obtain the base set and all relative deltas up to the recent one |
and is thus quite large. You must obtain the base set and all relative |
via ftp from the sites listed below. Sizes are: |
deltas up to present via ftp from the site listed below. Sizes are: |
|
|
|
<ul> |
<ul> |
<li> approximately 115Mb for OpenBSD-cvs |
<li>Approximately 115MB for OpenBSD-cvs. |
<li> approximately 37Mb for OpenBSD-cvs-x11 |
<li>Approximately 37MB for OpenBSD-cvs-x11. |
<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 that are compressed sizes - count about five times |
<li>Keep in mind that these are compressed sizes. The uncompressed |
of those sizes for the unpacked files |
files are about five times as large. |
<li> relative deltas vary from 10k to 100k, and occasionally a couple of Mb |
<li>Relative deltas vary from 10kB to 100kB, and occasionally a couple of |
<li> ctm always splits deltas into 100k messages which are reassembled |
megabytes. |
automatically |
<li>ctm always splits deltas into 100kB messages which are reassembled |
|
automatically. |
|
<li>If a delta is larger than 5MB, it is not sent via mail. Instead, you |
|
will receive a notification to get the delta by ftp. |
</ul> |
</ul> |
|
|
<P> |
<P> |
Larger ctm updates are rare, though, usually occurring only after a major |
Larger ctm updates are rare, though, usually occurring only after a major |
import of something like binutils, perl, etc. |
import of something like binutils, perl, gcc, etc. |
|
|
<H3>How do I use ctm?</H3> |
<H3>How do I use ctm?</H3> |
|
|
|
|
<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 updates to cvs tree, a list for the source tree, a list |
updates to the CVS tree, 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 seeing log messages from the ctm delta generator 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: |
<br><br><tt> |
<p> |
For the cvs tree (without the X11 part):<br> |
For the CVS tree (without the X11 part): |
<b>echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.org</b><br> |
<pre> |
For the X11 part of the cvs tree:<br> |
echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.org |
<b>echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.org</b><br> |
</pre> |
For the source tree (without the X11 part): <br> |
For the X11 part of the CVS tree: |
<b>echo subscribe OpenBSD-src | mail majordomo@OpenBSD.org</b><br> |
<pre> |
For the X11 part of the source tree: <br> |
echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.org |
<b>echo subscribe OpenBSD-src-x11 | mail majordomo@OpenBSD.org</b><br> |
</pre> |
For the ports tree: <br> |
For the source tree (without the X11 part): |
<b>echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.org</b><br> |
<pre> |
For the ctm log list:<br> |
echo subscribe OpenBSD-src | mail majordomo@OpenBSD.org |
<b>echo subscribe ctm-log | mail majordomo@OpenBSD.org</b><br> |
</pre> |
</tt><br> |
For the X11 part of the source tree: |
|
<pre> |
|
echo subscribe OpenBSD-src-x11 | mail majordomo@OpenBSD.org |
|
</pre> |
|
For the ports tree: |
|
<pre> |
|
echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.org |
|
</pre> |
|
For the ctm log list: |
|
<pre> |
|
echo subscribe ctm-log | mail majordomo@OpenBSD.org |
|
</pre> |
|
|
<LI>Wait until you get your first delta. |
<p> |
|
<li>Install the ctm program from a package or from the ports |
|
collection. You'll find the port at |
|
<tt><b>/usr/ports/devel/ctm</b></tt>. |
|
|
<LI>Unpack and assemble the ctm delta using ctm_rmail. |
</ul> |
<br> |
<b>Note:</b> The examples below just cover OpenBSD-cvs for clarity. The |
<br> |
other source sets are handled in the same fashion. |
<tt> |
|
<b>ctm_rmail -p. -d. -b. folder</b> |
<p><ul> |
</tt> |
|
<br><br> |
<li>Download the base set from an FTP site. You'll find it in the |
where <b>folder</b> is the mail folder containing the delta mail. |
subdirectory <tt><b>base/OpenBSD-cvs</b></tt>. Get all files in |
<br> |
that directory. Once you have them all you can create the base set |
This will decode the ctm delta and place it in the working directory. |
file and unpack it with the following commands, depending on the kind |
The delta will be a file of the form OpenBSD-XXX.YYYY.gz, where XXX is |
of base delta you got: |
either "src" or "cvs", and YYYY is the number of the delta. |
|
|
<pre> |
|
cat split/OpenBSD-cvs.1500A.gz.* > OpenBSD-cvs.1500A.gz |
|
cd target |
|
ctm -v -v -v .../OpenBSD-cvs.1500A.gz |
|
</pre> |
<p> |
<p> |
|
or |
|
|
<li>Grab the base set from the ftp site below, in the subdirectory |
<pre> |
<b>base/OpenBSD-cvs</b> (for OpenBSD-cvs) or <b>base/OpenBSD-src</b> |
cat split/OpenBSD-cvs.1500.tar.gz.* > OpenBSD-cvs.1500.tar.gz |
(for OpenBSD-src). Grab all files in that directory, and once you have |
cd target |
them all you can create the base source tree with the following command: |
tar -xzvf .../OpenBSD-cvs.1500.tar.gz |
|
</pre> |
|
|
<br><br> |
<p> |
<tt> |
where <tt><b>split</b></tt> is the directory in which you have |
<b>cd target <br> |
placed the files you downloaded and <tt><b>target</b></tt> is the |
cat /split/OpenBSD-* | tar zxf - <br> |
place you have chosen for the source set. |
</b></tt><br> |
|
|
|
where <b>split</b> is the directory in which you placed the files you |
<p> |
grabbed. |
It is not necessary to keep these files around, if you're sure you've |
|
got a complete tree. But you can keep the base set file(s) for backup |
|
purposes. However, be sure to note the number of the base set before |
|
continuing. |
|
|
<p> |
<p> |
It is no longer necessary to keep these files around, if you're sure |
<li>You now need to get the deltas which have been generated since the |
you've got a complete tree. However, be sure to note the number of the |
base set. Go to the FTP site in the subdirectory |
base, before continuing. |
<tt><b>OpenBSD-cvs</b></tt> and download every file whose number is |
|
<em>larger</em> than the number of the base set you used. Then apply |
|
these deltas: |
|
|
|
<pre> |
|
cd target |
|
ctm -v -v -v deltas/OpenBSD-cvs.* |
|
</pre> |
|
|
<p> |
<p> |
You now need to grab the deltas which have been generated since the base |
where <tt><b>target</b></tt> is the directory where your source set |
was generated. Go to the ftp site below in the subdirectory |
tree is, and <tt><b>deltas</b></tt> is where you have stored the |
<b>OpenBSD-cvs</b> or <b>OpenBSD-src</b> for instance and grab |
deltas. |
every file whose number is <it>larger</it> than the number of the |
|
base you used. |
|
|
|
<p> |
<p> |
The addresses for the base and deltas are: |
<LI>Wait until you get your first delta from the mailing list. |
|
<p> |
|
<LI>Unpack, assemble, and apply the ctm delta using ctm_rmail. |
|
<p> |
|
|
|
<pre> |
|
ctm_rmail -p /tmp -d deltas -b target folder |
|
</pre> |
|
|
|
<p> |
|
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 |
|
<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> |
|
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 |
|
unpacked the base delta. |
|
|
|
<p> |
|
Repeat this last step every time you receive a delta from the |
|
mailing list. If you like you can automate this step using procmail |
|
or any similar program. |
|
</ul> |
|
|
|
<p> |
|
The addresses for the deltas are: |
|
|
<ul> |
<ul> |
<li><a href="ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm/"> |
<li><a href="ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm/"> |
ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm/ |
ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm/ |
|
|
</ul> |
</ul> |
|
|
<p> |
<p> |
<ul> |
<b>NOTE:</b> I'm very interested in finding other sites around the world |
<li><b>NOTE:</b> I'm very interested in finding other sites around the world |
that would like to mirror these deltas. |
that would be interested in mirroring these deltas. |
|
</ul> |
|
<p> |
<p> |
|
|
<LI> Run ctm. |
<h3>Should I choose the source or CVS tree?</h3> |
<br> |
|
<br> |
|
<tt> |
|
<b>cd target<br> |
|
ctm -v -v /deltas/OpenBSD-cvs.*</b><br></tt> |
|
where <b>target</b> is the directory where you want your cvs tree to be, |
|
and <b>deltas</b> is where you have stored the deltas. |
|
<p> |
|
It will take some time to run all of the deltas, but the daily invocations |
|
of <b>ctm_rmail</b> and <b>ctm</b> will not take nearly as long. |
|
</ul> |
|
|
|
<h3>Should I choose the source or cvs tree?</h3> |
|
|
|
<P> |
<P> |
This depends on your diskspace, among other factors. Since ctm doesn't |
This depends on your diskspace, among other factors. Since ctm |
yet deal with files which have been modified outside of the ctm process, |
doesn't deal with files which have been modified locally, the "better" |
the "better" choice is probably the cvs-tree. Then you can check out |
choice is probably the CVS tree. You then can check out your working |
your working source tree from your cvs-tree, and keep your local mods |
source tree from your CVS tree, and keep your local modifications in |
in your source tree, leaving only ctm to touch your cvs tree. |
your source tree, because cvs is smart enough to merge in your local |
|
changes. |
|
|
<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 checked-out |
source tree takes about 300Mb or so, but if you have your own cvs tree you |
source tree takes about 350MB or so, but if you have your own cvs tree you |
need 400Mb or so for it, <b>plus</b> another 300Mb for the checked out tree. |
need about 1Gb for it, <b>plus</b> another 350MB for the checked out tree. |
|
|
<p> |
<p> |
This doesn't count the 100Mb or more you will need to do a build (depending |
This doesn't count the 100MB or more (depending on the architecture) |
on the architecture). |
you will need to do a build, i.e. compile the sources. |
|
|
<p> |
<p> |
If you just get the source tree, you will need to deal with local |
If you just get the source tree, you will need to deal with local |
|
|
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 <b>/usr/src-ctm</b>, and your real |
Suppose your ctm-updated tree is in <tt><b>/usr/src-ctm</b></tt>, and |
source tree, the one you make your modifications to and do your builds from, |
your real source tree, the one you make your modifications to and do |
is in <b>/usr/src</b>. <b>/usr/src</b> should be initially an empty |
your builds from, is in <tt><b>/usr/src</b></tt>. |
directory. The following command will set up the union mount: |
<tt><b>/usr/src</b></tt> should be initially an empty directory. The |
<br><br> |
following command will set up the union mount: |
<tt> |
|
<b>mount -t union -o -b /usr/src-ctm /usr/src</b> |
<pre> |
</tt> |
mount -t union -o -b /usr/src-ctm /usr/src |
<br><br> |
</pre> |
|
|
|
<p> |
Modifications made to files in /usr/src will become a file contained within |
Modifications made to files in /usr/src will become a file contained within |
/usr/src, hiding the one in src-ctm. If changes are made via ctm to the |
/usr/src, hiding the one in src-ctm. If changes are made via ctm to the |
underlying src-ctm tree, those changes will <b>not</b> be seen if there is |
underlying src-ctm tree, those changes will <b>not</b> be seen if there is |
|
|
<p> |
<p> |
You should periodically unmount the |
You should periodically unmount the |
union and search for files which are local to the union filesystem. |
union and search for files which are local to the union filesystem. |
<br><br> |
|
<tt> |
|
<b>umount /usr/src <br> |
|
find /usr/src -type f</b> <br> |
|
</tt> |
|
<br><br> |
|
The commands <b>ls -W</b> and <b>rm -W</b> will be useful too, as objects |
|
named "whiteouts" in /usr/src will also hide files in src-ctm. |
|
|
|
|
<pre> |
|
umount /usr/src |
|
find /usr/src -type f |
|
</pre> |
|
|
<p> |
<p> |
If you get the cvs-tree, you can use the "cvs checkout" command to check |
The commands <tt><b>ls -W</b></tt> and <tt><b>rm -W</b></tt> will be |
out a source tree from it, and each time you update with ctm you can use |
useful too, as objects named "whiteouts" in /usr/src will also hide |
the "cvs update" command to update your source tree. |
files in src-ctm. |
|
|
<br><br> |
<p> |
To get an initial src tree:<br> |
If you get the CVS tree, you can use the <tt><b>cvs checkout</b></tt> |
<tt> |
command to check out a source tree from it, and each time you update |
<b>cd /usr <br> |
with ctm you can use the <tt><b>cvs update</b></tt> command to |
cvs -qd YOUR_CVS_TREE checkout src</b> <br><br> |
update your source tree. |
</tt> |
|
and after each ctm update:<br> |
|
<tt> |
|
<b>cd /usr/src <br> |
|
cvs -q update -PAd</b> <br> |
|
</tt> |
|
|
|
|
<p> |
|
To get an initial src tree: |
|
<pre> |
|
cd /usr |
|
cvs -qd YOUR_CVS_TREE checkout -A src |
|
</pre> |
|
<p> |
|
and after each ctm update: |
|
<pre> |
|
cd /usr/src |
|
cvs -q update -PAd |
|
</pre> |
|
|
<H3>How stable is ctm for OpenBSD?</H3> |
<H3>How stable is ctm for OpenBSD?</H3> |
|
|
Ctm has been in use for over a year for OpenBSD, and for FreeBSD for a |
Ctm has been in use for over four years for OpenBSD, and for FreeBSD |
number of years. Ctm is quite reliable and stable. |
for an even longer period of time. Ctm is very reliable and stable. |
|
|
<H3>More information</H3> |
<H3>More information</H3> |
|
|
If you have problems with ctm, a good place to start is the FreeBSD |
If you want to learn more about ctm, a good place to start with is the |
handbook: |
FreeBSD Handbook: |
|
|
<ul> |
<ul> |
<li> <a href="http://www.FreeBSD.org/handbook/ctm.html"> |
<li> <a href="http://www.FreeBSD.org/handbook/ctm.html"> |
|
|
</a> |
</a> |
</ul> |
</ul> |
|
|
There are also man pages for all of the ctm utilities included in the |
There are also man pages for all of the ctm utilities. |
source package. If you have OpenBSD, you should already have the man |
|
pages, source, and binaries. If not you can obtain them from the same |
|
ftp site as the deltas below. |
|
|
|
<p> |
<p> |
You can also contact the OpenBSD mailing lists or myself if you have |
|
difficulties with ctm, although my free time tends to be rather limited. |
|
|
|
<p> |
|
Summary: |
Summary: |
|
|
<p> |
<p> |
|
|
<li> Mailing lists: |
<li> Mailing lists: |
|
|
<ul> |
<ul> |
<li> <b>echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.org</b> |
<li><tt>echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.org</tt> |
<li> <b>echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.org</b> |
<li><tt>echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.org</tt> |
<li> <b>echo subscribe OpenBSD-src | mail majordomo@OpenBSD.org</b> |
<li><tt>echo subscribe OpenBSD-src | mail majordomo@OpenBSD.org</tt> |
<li> <b>echo subscribe OpenBSD-src-x11 | mail majordomo@OpenBSD.org</b> |
<li><tt>echo subscribe OpenBSD-src-x11 | mail majordomo@OpenBSD.org</tt> |
<li> <b>echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.org</b> |
<li><tt>echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.org</tt> |
<li> <b>echo subscribe ctm-log | mail majordomo@OpenBSD.org</b> |
<li><tt>echo subscribe ctm-log | mail majordomo@OpenBSD.org</tt> |
</ul> |
</ul> |
|
|
<li> FTP (for base and relative deltas; and OpenBSD has ctm in the source |
<li> FTP (for base and relative deltas): |
tree, but if you don't have source or binaries, the source is here too): |
|
|
|
<ul> |
<ul> |
<li> <a href="ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm"> |
<li> <a href="ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm"> |
ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm |
ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm</a> |
</a> |
|
<li> <a href="ftp://ctm.ca.OpenBSD.org:/pub/OpenBSD-ctm"> |
<li> <a href="ftp://ctm.ca.OpenBSD.org:/pub/OpenBSD-ctm"> |
ftp://ctm.ca.OpenBSD.org:/pub/OpenBSD-ctm |
ftp://ctm.ca.OpenBSD.org:/pub/OpenBSD-ctm</a> |
</a> |
|
<li> <a href="ftp://ctm.se.OpenBSD.org:/pub/OpenBSD-ctm"> |
<li> <a href="ftp://ctm.se.OpenBSD.org:/pub/OpenBSD-ctm"> |
ftp://ctm.se.OpenBSD.org:/pub/OpenBSD-ctm |
ftp://ctm.se.OpenBSD.org:/pub/OpenBSD-ctm</a> |
</a> |
|
</ul> |
</ul> |
</ul> |
</ul> |
|
|
<p> |
<p> |
I will make any important notes and announcements about ctm in: |
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 |
</ul> |
</ul> |
|
|
<p> |
<p> |
<b>NOTE:</b> If you use ctm for OpenBSD, please send me email so I |
|
know how many people are using it! |
|
|
|
<H3>Acknowledgements</H3> |
<H3>Acknowledgements</H3> |
|
|
|
<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 |
me 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 giving me the resources i 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 |
|
|
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 bases and deltas on ctm.*OpenBSD.org |
|
|
<li> ... and all the others who contributed indirectly .. |
<li> Thomas Graichen (graichen@OpenBSD.org) for starting ctm for |
</ul> |
OpenBSD and maintaining it all those years |
|
|
<P> |
<li> Wim Vandeputte (wvdeputte@OpenBSD.org) for hosting ctm now |
Good luck! |
|
|
|
<P> |
<li> ... and all the others who contributed indirectly |
t |
</ul> |
|
|
<HR> |
|
|
|
<ADDRESS><A HREF="mailto:graichen@OpenBSD.org">Thomas Graichen</A></ADDRESS> |
<p> |
<br> |
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> |
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>. |
<p> |
<p> |
<hr> |
<hr> |
<a href="index.html"><img height="24" width="24" src="back.gif" border="0" alt="OpenBSD" /></a> |
<a href="index.html"><img height="24" width="24" src="back.gif" border="0" alt="OpenBSD" /></a> |
<a href="mailto:www@openbsd.org">www@openbsd.org</a> |
<a href="mailto:www@openbsd.org">www@openbsd.org</a> |
</br> |
<br> |
<small>$OpenBSD$</small> |
<small>$OpenBSD$</small> |
|
|
</body> |
</body> |
</html> |
</html> |
|
|