Систему CTM разработал Poul-Henning Kamp для внесения изменений в дерево исходных текстов по электрoнной почте. Это хороший способ отслеживать текущее состояние исходных текстов или CVS репозитория при медленном соединении с интернет - например, если у вас модем.
OpenBSD CTM распространяет все модули OpenBSD CVS репозитория и некоторые извлечённые версии этих модулей. При передаче изменений исходных текстов CTM использует очень малую пропускную полосу, при этом они сжимаются при помощи gzip -9. В отличие от CVSup, CTM написан на языке C и поэтому доступен для любой платформы, которую поддерживает OpenBSD. CTM использует, так называемую, толкающею модель обновления исходных текстов, тогда как другие методы доступа к OpenBSD CVS используют вытягивающую модель.
По любым проблемам, предложениям и вопросам относительно CTM, свяжитесь с администратором CTM Hans Günter Weigand. (Пожалуйста, не беспокойте других людей из OpenBSD по поводу CTM, так как они заняты решением других проблем. Спасибо.)
Основная идея CTM заключается в том, что вы подписываетесь на специальный список рассылки для конкретного CVS модуля или дерева исходных текстов. Каждый день вы получаете почтовое сообщение, содержащее все изменения в данном дереве за этот период. Каждый такой набор изменений называется дельтой. На самом деле, CTM сервер создаёт новые дельты каждые 12 часов.
Вы начинаете с базового набора, на который накладываются последующие дельты. Для того, чтобы начать использовать CTM, вы должны взять последний базовый набор и все дельты, которые появились после него. Базовые наборы разбиты на части по 1400kB, для облегчения загрузки по плохим линиям.
Базовые наборы создаются примерно через 50 дельт, поэтому вам не придётся загружать более 50 дельт для синхронизации исходных текстов.
В настоящий момент существует два типа базовых набора. Долгое время мы делали файлы tar.gz вручную, но теперь мы создаём истинные базовые CTM дельты. Они также содержат контрольную сумму md5(1) и генерируются автоматически, поэтому немного безопаснее. Вы можете различить эти два типа базовых набора по их названию. Пример tar.gz файла: OpenBSD-cvs.1450.tar.gz, тогда как базовая CTM дельта будет называться: OpenBSD-cvs.1500A.gz.
Вы получаете базовый набор и все дельты до текущего момента с ftp серверов, приведённых ниже. Размеры:
Существует несколько списков рассылки CTM. Список для получения изменений в CVS репозитории, список для дерева исходных текстов, список для X11, список для дерева портов, а также список для просмотра регистрационных сообщений, возникающих при генерации CTM дельт.
При помощи этих команд вы можете подписаться на необходимый вам список:
Для CVS репозитория (CVSROOT, ports, src и www модули, без X11 и XF4):
echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.orgДля модуля X11 CVS репозитория:
echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.orgДля модуля XF4 CVS репозитория:
echo subscribe OpenBSD-cvs-xf4 | mail majordomo@OpenBSD.orgДля извлечённого модуля src:
echo subscribe OpenBSD-src | mail majordomo@OpenBSD.orgДля извлечённого модуля X11:
echo subscribe OpenBSD-src-x11 | mail majordomo@OpenBSD.orgДля извлечённого модуля портов:
echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.orgДля регистрационных сообщений CTM:
echo subscribe ctm-log | mail majordomo@OpenBSD.org
cat split/OpenBSD-cvs.1500A.gz.* > OpenBSD-cvs.1500A.gz cd target ctm -v -v -v .../OpenBSD-cvs.1500A.gz
или
cat split/OpenBSD-cvs.1450.tar.gz.* > OpenBSD-cvs.1450.tar.gz cd target tar -xzvf .../OpenBSD-cvs.1450.tar.gz
где split директория, в которую вы поместили скопированные файлы и target директория, куда вы собираетесь их распаковать.
Если вы уверены, что у вас все необходимое дерево, вам больше нет необходимости хранить этот базовый набор. Но вы можете оставить его для резервной копии. Прежде чем продолжать, запомните номер базового набора.
cd target ctm -v -v -v deltas/OpenBSD-cvs.*
где target директория, в которой вы поместили исходное дерево и deltas директория, куда вы переписали дельты.
ctm_rmail -p /tmp -d deltas -b target folder
где folder директория, в которой содержатся почтовые сообщения с дельтами. Эта команда распакует CTM дельту и поместит её в директорию deltas. Дельта будет файлом в виде OpenBSD-cvs.XXXX.gz, где XXXX номер дельты. После чего, дельта будет добавлена в target, где находится базовый набор.
Повторяйте этот шаг каждый раз, как вы получаете дельту из списка рассылки. Вы можете автоматизировать этот процесс используя procmail, maildrop или любую схожею программу из коллекции портов.
Список FTP серверов на которых вы можете найти CTM дельты:
ftp://openbsd.rug.ac.be:/pub/OpenBSD-ctm/
Этот сервер автоматически обновляется при генерации CTM дельт. Базовые наборы доступны в больших одиночных файлах в директории base. Разделённые файлы в base-split.
Сервер обновляется, как только получает CTM дельты из списков рассылки. Кроме того, он содержит разделённые базовые наборы в директории base, зеркалируемые с ftp://openbsd.rug.ac.be:/pub/OpenBSD-ctm/
идентичен
зеркало ftp://ctm.se.OpenBSD.org .
Примечание: Мне хотелось бы найти другие сервера по всему миру, которые захотели бы размещать у себя эти дельты.
Это зависит, среди прочего, от свободного места на вашем диске. Так как CTM ещё не умеет работать с файлами, которые были изменены локально, лучшим вариантом конечно будет CVS репозиторий. Тогда вы сможете извлечь рабочее дерево исходных текстов из вашего CVS репозитория, и хранить ваши локальные изменения в вашем дереве, можете следить за стабильной веткой. CVS достаточно силен, чтобы объединить ваши локальные изменения. Вы сможете использовать любые команды CVS, за исключением cvs commit и cvs tag.
Недостатком, однако, является тот объем дискового пространства, который при этом используется. Извлечённое дерево исходных текстов занимает примерно 370MB, но если вы содержите свой CVS репозиторий, вам потребуется на него более 1Gb, плюс другие 370MB для извлечённого дерева исходных текстов. При этом не берутся в расчёт ещё около 100Mb или более (в зависимости от архитектуры), которые потребуются для компилирования исходных текстов.
Если вы только хотите иметь дерево исходных текстов, вам придётся самому разбираться с локальными изменениями. Один из способ сделать это - использовать файловую систему union (смотрите mount_union(8)), хотя были сообщения, что файловая система union может быть нестабильна если оба уровня - верхний и нижний находятся на одной физической файловой системе. Если вы разместите нижний и верхний уровни на разных файловых системах, у вас не должно возникнуть таких проблем. Пример этого:
Предположим, что дерево обновляемое через CTM, находится в /usr/src-ctm, и ваше настоящее дерево исходных текстов, то, в котором вы делаете изменения и которое вы компилируете, находится в /usr/src. /usr/src должен быть пустой директорией. Данная команда выполнит объединённое монтирование файловых систем:
mount -t union -o -b /usr/src-ctm /usr/src
Изменения, сделанные в файлах на /usr/src, становятся файлами, находящимися в /usr/src, и скрывающими те, что находятся в src-ctm. Если изменения были внесены CTM в низлежащее дерево src-ctm, они не будут видны, если есть файлы на верхнем уровне, скрывающие их.
Вы должны периодически размонтировать объединённую файловую систему и искать файлы, которые являются локальными для этой файловой системы.
umount /usr/src find /usr/src -type f
Команды ls -W и rm -W будут так же полезны, поскольку объекты называемые "whiteouts" в /usr/src, будут также скрывать файлы в src-ctm.
Если вы выбрали CVS репозиторий, вы можете использовать команду cvs checkout для извлечения дерева исходных текстов из него. Каждый раз, когда вы производите обновление при помощи CTM, вы можете использовать команду cvs update для обновления дерева исходных текстов.
Чтобы получить начальный src репозиторий:
cd /usr cvs -qd YOUR_CVS_REPOSITORY checkout -P src
и после каждого CTM обновления:
cd /usr/src cvs -q update -Pd
Важные замечания и объявления по CTM будут посланы в список рассылки announce@OpenBSD.org.
Логотип OpenBSD/CTM для проекта OpenBSD создал Phillip F Knaack.