Annotation of www/ctm.html, Revision 1.25
1.24 xsa 1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2: "http://www.w3.org/TR/html4/loose.dtd">
3: <html>
4: <head>
5: <title>CTM</title>
6: <link rev="made" href="mailto:www@openbsd.org">
7: <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
8: <meta name="resource-type" content="document">
9: <meta name="description" content="the OpenBSD/CTM page">
10: <meta name="keywords" content="openbsd,ctm">
11: <meta name="distribution" content="global">
12: <meta name="copyright" content="This document copyright 1996-2004 by OpenBSD.">
13: </head>
14: <body bgcolor="#FFFFFF" text="#000000" link="#23238E">
1.1 graichen 15:
1.5 flipk 16: <center>
1.13 naddy 17: <img alt="CTM for OpenBSD" src="images/bsdctm.gif" width="401" height="126">
1.5 flipk 18: </center>
1.1 graichen 19:
1.24 xsa 20: <h3><font color="#0000e0">What is CTM?</font></h3>
1.1 graichen 21:
1.24 xsa 22: <p>
1.14 naddy 23: CTM is a system which was designed by Poul-Henning Kamp for making
1.19 naddy 24: changes to a source tree available on a regular basis by email.
1.14 naddy 25: This is a good way to stay up to date with the current source tree or
26: CVS repository if you have a slow Internet connection, for instance via modem.
1.1 graichen 27:
1.24 xsa 28: <p>
1.19 naddy 29: OpenBSD CTM distributes all modules of the OpenBSD CVS repository
1.21 pvalchev 30: plus checked out versions of several of these modules.
1.14 naddy 31: CTM uses very low bandwidth for distributing the changes to the tree,
32: and compresses them using <tt><b>gzip -9</b></tt>. In contrast to
33: <a href="cvsup.html">CVSup</a>, CTM is written in plain C language
34: and therefore available for every platform supported by OpenBSD.
1.19 naddy 35: CTM implements a so called push system, while all other methods to
36: get access to the OpenBSD CVS repository are pull systems.
1.14 naddy 37:
38: <p>
1.16 horacio 39: For <b>any</b> problems, suggestions, reports and questions regarding CTM,
1.14 naddy 40: contact the CTM maintainer
41: <a href="mailto:hgw@d1906.inka.de">Hans Günter Weigand</a>.
42: <small>(Please do not ask other OpenBSD people for CTM support,
43: as they are busy doing other things. Thank you.)</small>
1.1 graichen 44:
1.24 xsa 45: <h3><font color="#0000e0">How does it work?</font></h3>
1.1 graichen 46:
1.24 xsa 47: <p>
1.14 naddy 48: The basic idea of CTM is that you subscribe to a special mailing list
1.19 naddy 49: for a particular CVS module or source tree. Each day you receive email messages
1.5 flipk 50: containing all the changes to that tree during that period.
1.14 naddy 51: One such set of differences is called a <b>delta</b>.
1.15 naddy 52: Actually, the CTM server makes new deltas every twelve hours.
1.1 graichen 53:
1.5 flipk 54: <P>
1.13 naddy 55: You begin with a base set, against which later deltas are patched. To
1.14 naddy 56: begin using CTM you download the latest base set and all deltas
1.13 naddy 57: generated after that. Once you have processed those you can process
58: later deltas you receive from the mailing list. The base sets are split
1.14 naddy 59: into pieces of 1400kB each for easier downloading over bad lines.
1.1 graichen 60:
1.5 flipk 61: <P>
1.13 naddy 62: Base sets are generated once every 50 relative deltas, so you never
63: have to grab more than 50 deltas to catch up.
64:
65: <P>
1.14 naddy 66: There are currently two kinds of base set files. For quite a while we
1.13 naddy 67: were making <tt><b>tar.gz</b></tt> files manually, but we are
1.19 naddy 68: back to real CTM base deltas. The latter contain
1.23 naddy 69: <a href="http://www.openbsd.org/cgi-bin/man.cgi?query=md5&sektion=1">md5(1)</a>
1.13 naddy 70: checksums and are generated automatically, thus are a bit safer. You
1.16 horacio 71: can distinguish these two kinds of base sets by their filename. An
1.13 naddy 72: example for a <tt><b>tar.gz</b></tt> file is
1.14 naddy 73: <tt><b>OpenBSD-cvs.1450.tar.gz</b></tt>, whereas a CTM base delta
1.13 naddy 74: would be named <tt><b>OpenBSD-cvs.1500A.gz</b></tt>. See below for
75: detailed instructions.
1.1 graichen 76:
1.24 xsa 77: <h3><font color="#0000e0">How much bandwidth does CTM use?</font></h3>
1.1 graichen 78:
1.24 xsa 79: <p>
1.13 naddy 80: You obtain the base set and all relative deltas up to the recent one
81: via ftp from the sites listed below. Sizes are:
1.5 flipk 82:
83: <ul>
1.19 naddy 84: <li>Approximately 215MB for OpenBSD-cvs.
85: <li>Approximately 40MB for OpenBSD-cvs-x11.
86: <li>Approximately 65MB for OpenBSD-cvs-xf4.
87: <li>Approximately 83MB for OpenBSD-src.
88: <li>Approximately 36MB for OpenBSD-src-x11.
89: <li>Approximately 4MB for OpenBSD-ports.
1.14 naddy 90: <br>Keep in mind that these are compressed sizes. The uncompressed
1.13 naddy 91: files are about five times as large.
1.14 naddy 92: <li>Relative deltas vary from 10kB to 500kB, and occasionally a couple of
1.13 naddy 93: megabytes.
1.14 naddy 94: <li>CTM always splits deltas into 100kB mail messages which are reassembled
1.13 naddy 95: automatically.
1.14 naddy 96: <li>If a delta is larger than 5MB, it is not sent via mail. Instead,
97: you will receive a notification to get the delta by ftp. Larger
98: CTM updates are rare, though, usually occurring only after a major
1.19 naddy 99: import of something like binutils, Perl, gcc, XFree86, etc., or applying a
100: tag to the CVS repository.
1.5 flipk 101: </ul>
1.1 graichen 102:
1.24 xsa 103: <h3><font color="#0000e0">How do I use CTM?</font></h3>
1.1 graichen 104:
1.24 xsa 105: <ul>
106: <li>Subscribe to the CTM mailing list for the source set you want.
1.5 flipk 107: <p>
1.14 naddy 108: There are several mailing lists related to CTM. There is a list for
109: updates to the CVS repository, a list for the source tree, a list
1.13 naddy 110: for the X11 part of both, and one for the ports tree, plus
1.14 naddy 111: a list for log messages from the CTM delta generation runs.
1.5 flipk 112: <p>
113: The following commands will subscribe you to the appropriate lists:
1.13 naddy 114: <p>
1.19 naddy 115: For the CVS repository (CVSROOT, ports, src and www modules,
116: but not X11 and XF4):
1.13 naddy 117: <pre>
118: echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.org
119: </pre>
1.15 naddy 120: For the X11 module of the CVS repository:
1.13 naddy 121: <pre>
122: echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.org
123: </pre>
1.19 naddy 124: For the XF4 module of the CVS repository:
125: <pre>
126: echo subscribe OpenBSD-cvs-xf4 | mail majordomo@OpenBSD.org
127: </pre>
128: For a checked out copy of the src module:
1.13 naddy 129: <pre>
130: echo subscribe OpenBSD-src | mail majordomo@OpenBSD.org
131: </pre>
1.19 naddy 132: For a checked out copy of the X11 module:
1.13 naddy 133: <pre>
134: echo subscribe OpenBSD-src-x11 | mail majordomo@OpenBSD.org
135: </pre>
1.19 naddy 136: For a checked out copy of the ports module:
1.13 naddy 137: <pre>
138: echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.org
139: </pre>
1.14 naddy 140: For the CTM log list:
1.13 naddy 141: <pre>
142: echo subscribe ctm-log | mail majordomo@OpenBSD.org
143: </pre>
144:
145: <p>
1.14 naddy 146: <li>Install the CTM program from a package or from the ports
1.13 naddy 147: collection. You'll find the port at
148: <tt><b>/usr/ports/devel/ctm</b></tt>.
149:
150: </ul>
151: <b>Note:</b> The examples below just cover OpenBSD-cvs for clarity. The
152: other source sets are handled in the same fashion.
153:
154: <p><ul>
155:
156: <li>Download the base set from an FTP site. You'll find it in the
157: subdirectory <tt><b>base/OpenBSD-cvs</b></tt>. Get all files in
158: that directory. Once you have them all you can create the base set
1.14 naddy 159: file and unpack it with the following commands, depending on the type
160: of file you got:
1.13 naddy 161:
162: <pre>
163: cat split/OpenBSD-cvs.1500A.gz.* > OpenBSD-cvs.1500A.gz
164: cd target
165: ctm -v -v -v .../OpenBSD-cvs.1500A.gz
166: </pre>
167: <p>
168: or
169:
170: <pre>
1.19 naddy 171: cat split/OpenBSD-cvs.1450.tar.gz.* > OpenBSD-cvs.1450.tar.gz
1.13 naddy 172: cd target
1.19 naddy 173: tar -xzvf .../OpenBSD-cvs.1450.tar.gz
1.13 naddy 174: </pre>
175:
176: <p>
177: where <tt><b>split</b></tt> is the directory in which you have
178: placed the files you downloaded and <tt><b>target</b></tt> is the
1.14 naddy 179: place you have chosen for unpacking the source set.
1.5 flipk 180:
1.14 naddy 181: <p> It is not necessary to keep these base set files around, if
182: you're sure you've got a complete tree. But you can keep the base set
183: file(s) for backup purposes. However, be sure to note the number of
184: the base set before continuing.
1.5 flipk 185:
186: <p>
1.13 naddy 187: <li>You now need to get the deltas which have been generated since the
1.19 naddy 188: base set. Go to one of the FTP sites listed below into the subdirectory
1.13 naddy 189: <tt><b>OpenBSD-cvs</b></tt> and download every file whose number is
190: <em>larger</em> than the number of the base set you used. Then apply
191: these deltas:
1.5 flipk 192:
1.13 naddy 193: <pre>
194: cd target
195: ctm -v -v -v deltas/OpenBSD-cvs.*
196: </pre>
1.5 flipk 197:
1.13 naddy 198: <p>
199: where <tt><b>target</b></tt> is the directory where your source set
200: tree is, and <tt><b>deltas</b></tt> is where you have stored the
201: deltas.
1.5 flipk 202:
1.13 naddy 203: <p>
1.25 ! xsa 204: <li>Wait until you get your first delta from the mailing list.
1.13 naddy 205: <p>
1.25 ! xsa 206: <li>Unpack, assemble, and apply the CTM delta using <tt><b>ctm_rmail</b></tt>.
1.13 naddy 207: <p>
208:
209: <pre>
210: ctm_rmail -p /tmp -d deltas -b target folder
211: </pre>
1.5 flipk 212:
213: <p>
1.13 naddy 214: where <tt><b>folder</b></tt> is the mail folder containing the delta
1.14 naddy 215: mail. This will decode the CTM delta and save it in the
1.13 naddy 216: <tt><b>deltas</b></tt> directory. The delta will be a file of the
217: form <tt><b>OpenBSD-cvs.<var>XXXX</var>.gz</b></tt>, where <var>XXXX</var>
218: is the number of the delta. Then the delta will be applied to the
219: directory tree located at <tt><b>target</b></tt>, the place where you
1.14 naddy 220: unpacked the base set.
1.5 flipk 221:
222: <p>
1.13 naddy 223: Repeat this last step every time you receive a delta from the
1.19 naddy 224: mailing list. If you like, you can automate this step using procmail,
225: maildrop, or any similar program from the
226: <a href="ports.html">ports collection</a>.
1.13 naddy 227: </ul>
1.5 flipk 228:
229: <p>
1.19 naddy 230: Here is the list of FTP servers carrying CTM deltas:
1.10 deraadt 231:
232: <ul>
1.15 naddy 233: <li>The primary FTP server can be reached at:
234: <p>
1.17 jufi 235: <a href="ftp://openbsd.rug.ac.be:/pub/OpenBSD-ctm/">
236: ftp://openbsd.rug.ac.be:/pub/OpenBSD-ctm/
1.15 naddy 237: </a>.
238: <p>
239: This server is automatically updated by the CTM delta generation process.
240: Base sets are
241: available as big single files in the <tt><b>base</b></tt> directory.
242: The split files are in <tt><b>base-split</b></tt>.
1.10 deraadt 243: </ul>
244:
245: <ul>
246: <li><a href="ftp://ctm.se.OpenBSD.org:/pub/OpenBSD-ctm/">
247: ftp://ctm.se.OpenBSD.org:/pub/OpenBSD-ctm/
1.5 flipk 248: </a>
1.15 naddy 249: <p>
250: This server is updated by CTM deltas received from the mailing lists. It
251: additionally has the split base deltas in the <tt><b>base</b></tt>
1.19 naddy 252: subdirectory, mirrored from
253: <a href="ftp://openbsd.rug.ac.be:/pub/OpenBSD-ctm/">
254: ftp://openbsd.rug.ac.be:/pub/OpenBSD-ctm/
255: </a>.
1.5 flipk 256: </ul>
257:
1.14 naddy 258: <ul>
1.15 naddy 259: <li><a href="ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm/">
260: ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm/
261: </a>
262: <p>
263: is identical to
264: <p>
265: <li><a href="ftp://ctm.ca.OpenBSD.org:/pub/OpenBSD-ctm/">
266: ftp://ctm.ca.OpenBSD.org:/pub/OpenBSD-ctm/
267: </a>
268: <p>
269: and is a mirror of
270: <a href="ftp://ctm.se.OpenBSD.org:/pub/OpenBSD-ctm/">
271: ftp://ctm.se.OpenBSD.org
272: </a>
273: .
1.14 naddy 274: </ul>
275:
1.5 flipk 276: <p>
1.14 naddy 277: <b>NOTE:</b> <a href="mailto:hgw@d1906.inka.de">I'm</a> very interested
278: in finding other sites around the world that would like to
279: mirror these deltas.
1.5 flipk 280: <p>
1.1 graichen 281:
1.19 naddy 282: <h3><font color="#0000e0">Should I choose the source tree or the CVS repository?</font></h3>
1.1 graichen 283:
1.24 xsa 284: <p>
1.14 naddy 285: This depends on your diskspace, among other factors. Since CTM
286: doesn't deal very well with files which have been modified locally,
1.19 naddy 287: the better choice is surely the <a href="anoncvs.html">CVS</a>
1.16 horacio 288: repository. You can check out your working copy of the source tree
1.19 naddy 289: from your CVS repository then, can track a stable branch,
290: and keep your local modifications in
1.16 horacio 291: your source tree. CVS is smart enough to merge in your local changes.
1.19 naddy 292: You can also use the full range of CVS commands except commands like
293: <tt><b>cvs commit</b></tt> and <tt><b>cvs tag</b></tt>.
1.5 flipk 294:
295: <p>
1.14 naddy 296: The drawback, however, is the amount of diskspace it takes. A
1.19 naddy 297: checked-out source tree takes about 370MB or so, but if you have your
1.14 naddy 298: own CVS repository you need more than 1Gb for it, <b>plus</b> another
1.19 naddy 299: 370MB for the checked out tree.
1.13 naddy 300: This doesn't count the 100MB or more (depending on the architecture)
1.19 naddy 301: you will need for generated files during a build, i.e. compiling the sources.
1.5 flipk 302:
303: <p>
304: If you just get the source tree, you will need to deal with local
305: modifications. One way to do this is to use the <b>union</b> filesystem,
1.23 naddy 306: (see <a href="http://www.openbsd.org/cgi-bin/man.cgi?query=mount_union&sektion=8">mount_union(8)</a>)
1.16 horacio 307: although there have been reports that the <b>union</b> filesystem can be
308: unstable if both the upper and lower layers reside on the same physical
309: filesystem. If you place your upper and lower layers on separate
310: filesystems you should have no problems. A sample of this is as follows:
1.5 flipk 311:
312: <p>
1.14 naddy 313: Suppose your CTM-updated tree is in <tt><b>/usr/src-ctm</b></tt>, and
1.13 naddy 314: your real source tree, the one you make your modifications to and do
315: your builds from, is in <tt><b>/usr/src</b></tt>.
316: <tt><b>/usr/src</b></tt> should be initially an empty directory. The
317: following command will set up the union mount:
318:
319: <pre>
320: mount -t union -o -b /usr/src-ctm /usr/src
321: </pre>
322:
323: <p>
1.14 naddy 324: Modifications made to files in <tt><b>/usr/src</b></tt> will become a
325: file contained within <tt><b>/usr/src</b></tt>, hiding the one in
326: <tt><b>src-ctm</b></tt>. If changes are made via CTM to the
327: underlying <tt><b>src-ctm</b></tt> tree, those changes will <b>not</b>
328: be seen if there is a file in the upper layer hiding it.
1.5 flipk 329:
330: <p>
331: You should periodically unmount the
332: union and search for files which are local to the union filesystem.
1.13 naddy 333:
334: <pre>
335: umount /usr/src
336: find /usr/src -type f
337: </pre>
338:
339: <p>
340: The commands <tt><b>ls -W</b></tt> and <tt><b>rm -W</b></tt> will be
1.19 naddy 341: useful too, as objects named "whiteouts" in <tt><b>/usr/src</b></tt>
342: will also hide files in <tt><b>src-ctm</b></tt>.
1.13 naddy 343:
344: <p>
1.14 naddy 345: If you get the CVS repository, you can use the <tt><b>cvs checkout</b></tt>
346: command to check out a source tree from it. Each time you update
347: with CTM you can use the <tt><b>cvs update</b></tt> command to
348: update your source repository.
1.13 naddy 349:
350: <p>
1.14 naddy 351: To get an initial src repository:
1.13 naddy 352: <pre>
353: cd /usr
1.20 chris 354: cvs -qd YOUR_CVS_REPOSITORY checkout -P src
1.13 naddy 355: </pre>
356: <p>
1.14 naddy 357: and after each CTM update:
1.13 naddy 358: <pre>
359: cd /usr/src
1.20 chris 360: cvs -q update -Pd
1.13 naddy 361: </pre>
1.5 flipk 362:
1.24 xsa 363: <h3><font color="#0000e0">How stable is CTM for OpenBSD?</font></h3>
1.5 flipk 364:
1.19 naddy 365: CTM has been in use for over five years for OpenBSD, and for FreeBSD
1.14 naddy 366: for an even longer period of time. CTM is very reliable and stable.
367:
1.19 naddy 368: <h3><font color="#0000e0">What does the future hold for CTM?</font></h3>
1.14 naddy 369:
370: There are numerous (small) changes and optimizations possible.
1.15 naddy 371: Among them:
1.14 naddy 372:
373: <ul>
1.15 naddy 374: <li> CTM never sends a delta bigger than 5MB via mail. This could be
1.14 naddy 375: changed in two ways: The maximum delta size could be increased,
376: or a queue could be installed, from which only a certain number
1.15 naddy 377: of messages are mailed out daily. E. g., if a delta is 6MB in
1.14 naddy 378: size, it is split into 96 mail messages. These are put into a
379: queue. On the first day, the first 50 messages are sent, on the
380: second day the remaining 46, plus the first 4 messages of the
381: following delta.
1.15 naddy 382: <li> The CTM software could be rewritten, or at least fixed in a
1.22 miod 383: better manner. Its C implementation is not an example of good
1.15 naddy 384: programming. That would also be a nice opportunity for adding
385: new features, like signing CTM deltas with PGP.
1.14 naddy 386: </ul>
1.5 flipk 387:
1.19 naddy 388: Mail <a href="mailto:hgw@d1906.inka.de">me</a> your opinions and wishes!
389:
1.24 xsa 390: <h3><font color="#0000e0">More information</font></h3>
1.5 flipk 391:
1.14 naddy 392: If you want to learn more about CTM, a good place to start with is the
1.13 naddy 393: FreeBSD Handbook:
1.5 flipk 394:
395: <ul>
396: <li> <a href="http://www.FreeBSD.org/handbook/ctm.html">
397: http://www.FreeBSD.org/handbook/ctm.html
398: </a>
399: </ul>
400:
1.14 naddy 401: There are also man pages for all of the CTM utilities.
1.5 flipk 402:
1.19 naddy 403: <h3><font color="#0000e0">Summary:</font></h3>
1.5 flipk 404:
405: <p>
406: <ul>
407: <li> Mailing lists:
408:
409: <ul>
1.13 naddy 410: <li><tt>echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.org</tt>
411: <li><tt>echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.org</tt>
1.19 naddy 412: <li><tt>echo subscribe OpenBSD-cvs-xf4 | mail majordomo@OpenBSD.org</tt>
1.13 naddy 413: <li><tt>echo subscribe OpenBSD-src | mail majordomo@OpenBSD.org</tt>
414: <li><tt>echo subscribe OpenBSD-src-x11 | mail majordomo@OpenBSD.org</tt>
415: <li><tt>echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.org</tt>
416: <li><tt>echo subscribe ctm-log | mail majordomo@OpenBSD.org</tt>
1.5 flipk 417: </ul>
1.15 naddy 418: <p>
1.14 naddy 419: <li> FTP (for base sets and relative deltas):
1.5 flipk 420:
421: <ul>
1.18 jufi 422: <li> <a href="ftp://openbsd.rug.ac.be:/pub/OpenBSD-ctm/">
423: ftp://openbsd.rug.ac.be:/pub/OpenBSD-ctm/</a>
424: <li> <a href="ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm/">
425: ftp://ctm.OpenBSD.org:/pub/OpenBSD-ctm/</a>
426: <li> <a href="ftp://ctm.ca.OpenBSD.org:/pub/OpenBSD-ctm/">
427: ftp://ctm.ca.OpenBSD.org:/pub/OpenBSD-ctm/</a>
428: <li> <a href="ftp://ctm.se.OpenBSD.org:/pub/OpenBSD-ctm/">
429: ftp://ctm.se.OpenBSD.org:/pub/OpenBSD-ctm/</a>
1.5 flipk 430: </ul>
431: </ul>
432:
433: <p>
1.19 naddy 434: Important notes and announcements about CTM will be posted to the
435: announce@OpenBSD.org mailing list.
1.5 flipk 436:
437: <p>
438:
1.24 xsa 439: <h3><font color="#0000e0">Acknowledgements</font></h3>
1.5 flipk 440:
1.13 naddy 441: <ul>
1.14 naddy 442: <li> Poul-Henning Kamp (phk@FreeBSD.org) for making CTM possible and helping
1.13 naddy 443: getting the delta generation running
1.5 flipk 444:
445: <li> Theo de Raadt (deraadt@theos.com) for making OpenBSD possible and
1.14 naddy 446: initially providing the resources needed for creating the CTM
1.13 naddy 447: deltas on cvs.OpenBSD.org (now they are generated elsewhere), and
1.10 deraadt 448: for the nameserver magic
449:
450: <li> Todd C. Miller (millert@OpenBSD.org) for setting up and
1.14 naddy 451: maintaining the CTM mailinglists
1.10 deraadt 452:
453: <li> Bob Beck (beck@OpenBSD.org), Artur Grabowski (art@OpenBSD.org),
454: Magnus Holmberg (mho@OpenBSD.org) and
455: Wolfram Schneider (wosch@FreeBSD.org) for setting up the ftp space
1.14 naddy 456: for the base sets and deltas on ctm.*OpenBSD.org
1.1 graichen 457:
1.14 naddy 458: <li> Thomas Graichen (graichen@OpenBSD.org) for starting CTM for
1.13 naddy 459: OpenBSD and maintaining it all those years
1.1 graichen 460:
1.14 naddy 461: <li> Wim Vandeputte (wvdputte@OpenBSD.org) for hosting CTM now
1.1 graichen 462:
1.13 naddy 463: <li> ... and all the others who contributed indirectly
464: </ul>
1.1 graichen 465:
466:
1.13 naddy 467: <p>
1.5 flipk 468: OpenBSD/CTM logo designed for the OpenBSD Project by
469: <a href="mailto:flipk@openbsd.org">Phillip F Knaack</a>.
1.12 jufi 470: <p>
471: <hr>
472: <a href="index.html"><img height="24" width="24" src="back.gif" border="0" alt="OpenBSD" /></a>
473: <a href="mailto:www@openbsd.org">www@openbsd.org</a>
1.13 naddy 474: <br>
1.25 ! xsa 475: <small>$OpenBSD: ctm.html,v 1.24 2004/02/09 08:55:32 xsa Exp $</small>
1.1 graichen 476:
1.12 jufi 477: </body>
478: </html>