CTM został zaprojektowany przez Poula-Henning Kampa, by umożliwić uaktualnianie drzewa źródeł poprzez pocztę elektroniczną. System ten będzie użyteczny w przypadku gdy chcesz posiadać aktualne źródła, a wolne połączenie z Internetem doskonale temu zapobiega.
CTM rozsyła wszystkie moduły znajdujące się repozytorium CVS OpenBSD, a także uaktualnione wersje tych modułów. W trakcie pracy CTM wymaga naprawde niewielkiej przepustowości sieci, a dodatkowo wysyłane dane kompresowane są przy użyciu gzip -9. W przeciwieństwie do CVSup, CTM został napisany w języku C i dzięki temu jest dostępny dla każdej platformy obsługiwanej przez OpenBSD. Implementacja CTM przy aktualizacji używa, tak zwanego, trybu wpychania (ang. push model), w przeciwieństwie do innych metod dostępu do repozytorium CVS używających trybu ściągania (ang. pull model).
Jakiekolwiek problemy, sugestie, komentarze i pytania dotyczące CTM powinny być zgłaszane do koordynatora CTM - Hans Günter Weigand. (Nie jest dobrym pomysłem zasypywanie pytaniami dotyczącymi CTM innych ludzi z Projektu OpenBSD. Maja tak wiele spraw na głowie, że będzie im to przeszkadzać w pracy.)
Ideą, która leży u podstaw CTM, jest utworzenie specjalnej listy mailingowej dla każdego modułu w repozytorium CVS. Użytkownicy mogą zapisać się na dowolną z tych list. Każdego dnia subskrybenci otrzymywać będą mail zawierajacy wszsytkie zmiany jakie zaszły w drzewie źródeł w ciągu ustalonego okresu czasu. List zawierający zestaw wszystkich różnic pomiędzy źródłami nazywany jest delta. Obecnie, serwer CTM tworzy nową deltę co dwanaście godzin.
Działanie CTM opiera się na tzw. zestawie podstawowym, do którego odnosić się będą wszystki nadsyłane pliki delta. Jeśli dopiero zaczynasz prace z CTM powinieneś pobrać zestaw podstawowy, a także wszysktie pliki delta wygenerowane dla niego. Po takim przygotowaniu, można już odbierać i nakładać łaty z nowych plików delta nadsyłanych przez listę mailingową. Zestaw podstawowy został podzielony na pliki wielkości 1400kB, aby ułatwić jego pobieranie przez łącza złej jakości.
Zestaw podstawowy generowany jest co 50 plików delta, tak więc nigdy nie będziesz zmuszony pobierać więcej niż 50 tych plików.
Obecnie istnieją dwa rodzaje plików z zestawem podstawowym. Jakiś czas temu były to pliki tar.gz tworzone ręcznie, ale teraz znów są to prawdziwe pliki bazowe CTM. Każdy mail z systemu CTM zawiera sumę kontrolną md5(1). Dzięki temu wzrasta choć troszkę bezpieczeństwo. Aby rozróżnić te dwa rodzaje plików wystarczy porównać ich nazwy. Na przykład plik tar.gz może być nazwany OpenBSD-cvs.1450.tar.gz, podczas gdy nazwą bazowego pliku CTM będzie OpenBSD-cvs.1500A.gz. W dalszej części dokumentu zostało to opisane dokładniej.
Możesz pobrać zestaw podstawowy i wszystkie delty przygotowane dla niego z serwera FTP, których lista zamieszczona jest poniżej. Przybliżony rozmiar plików:
Istnieje kilka list związanych z systemem CTM. Jest lista wysyłająca uaktulanienia zmian jakie zaszły w repozytorium CVS, lista odpowiedzialna za aktualizację drzewa źródeł, lista dla X11, odrębna dla drzewa portów, oraz specjalna lista rozsyłająca logi powstające podczas generowania plików delta.
Następujące komendy pomogą subskrybować interesującą Cię listę:
Repozytorium CVS (moduły CVSROOT, ports, src i www, bez X11 i XF4):
echo subscribe OpenBSD-cvs | mail majordomo@OpenBSD.orgModuł X11 repozytrium CVS:
echo subscribe OpenBSD-cvs-x11 | mail majordomo@OpenBSD.orgModuł XF4:
echo subscribe OpenBSD-cvs-xf4 | mail majordomo@OpenBSD.orgZrzut modułu src:
echo subscribe OpenBSD-src | mail majordomo@OpenBSD.orgZrzut modułu X11:
echo subscribe OpenBSD-src-x11 | mail majordomo@OpenBSD.orgZrzut modułu ports:
echo subscribe OpenBSD-ports-ctm | mail majordomo@OpenBSD.orgInformacje odnośnie plików delta:
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
lub
cat split/OpenBSD-cvs.1450.tar.gz.* > OpenBSD-cvs.1450.tar.gz cd target tar -xzvf .../OpenBSD-cvs.1450.tar.gz
gdzie split oznacza katalog zawierający pobrane z serwera FTP elementy, a target wskazuje miejsce gdzie ma zostać rozpakowany przygotowany zestaw podstawowy.
Po rozpakowaniu tak spreparowanego pliku, nie jest konieczne przechowywanie plików służących do przygotowania zestawu podstawowego. Można zostawić sam skompresowany zestaw podstawowy jako kopię bezpieczeństwa. Najważniejsze jest jednak zapamiętanie numeru wersji zanim podążysz dalej za tym opisem.
cd target ctm -v -v -v deltas/OpenBSD-cvs.*
gdzie target jest katalogiem w którym znajduje się drzewo źródeł, a deltas wskazuje miejsce w którym są pobrane pliki delta.
ctm_rmail -p /tmp -d deltas -b target folder
gdzie folder jest skrzynką pocztową zawierającą pliki delta. Powyższe polecenie wydrębni pliki delta i zapisze go w katalogu deltas. Powstała delta będzie miała nazwę w formacie OpenBSD-cvs.XXXX.gz, gdzie XXXX jest numerem kolejnym. Następnie zostaną naniesione zmiany na źródła znajdujące się w katalogu target, czyli tam, gdzie umieściłeś zestaw podstawowy.
Powyższe czynności należy powtórzyć dla każdego nowootrzymanego pliku delta. Cały proces można zautomatyzować używając programów procmail, maildrop lub podobnego z kolekcji portów.
Poniższa lista zawiera spis serwerów FTP, na których znajdują się pliki delta:
ftp://openbsd.rug.ac.be:/pub/OpenBSD-ctm/ .
Serwer ten jest automatycznie aktualizowany podczas tworzenia plików delta. Zestaw podstawowy, jako jeden duży plik, znajduje się w katalogu base. Jego wersja podzielona na mniejsze pliki jest w base-split.
Aktualizacja tego serwera odbywa się poprzez pliki CTM delta odebrane z listy mailingowej. Dodatkowo w katalogu base znajduje się kopia podzielonego zestawu podstawowe z serwera ftp://openbsd.rug.ac.be:/pub/OpenBSD-ctm/ .
jest identyczny jak
i jest mirrorem ftp://ctm.se.OpenBSD.org .
UWAGA: Jestem bardzo zainteresowany lokalizacją innych serwerów prowadzących mirrory CTM.
Odpowiedź na to pytanie zależna jest, obok innych czynników, od tego jak wiele wolnej przestrzeni masz na dysku. Ponieważ CTM nie radzi sobie zbyt dobrze z plikami, które zostały zmodyfikowane w lokalnej kopii źródeł lepszym wyborem jest oczywiście repozytorium CVS. Możesz pobrać kopię źródeł z repozytorium, wprowadzić swoje własne zmiany, a CVS jest na tyle sprytnym programem, że pozwoli połączyć lokalne modyfikacje ze zmianami w repozytorium podczas aktualizacji drzewa źródeł. Można używać większości poleceń CVS, za wyjątkiem takich komend jak cvs commit i cvs tag.
Oczywiście nie ma róży bez kolców i pomimo wszystkich swoich zalet repozytorium CVS potrzebuje ogromnych ilości wolnego miejsca na dysku. Drzewo źródeł zajmuje około 370 MB, ale jeśli chcesz mieć własne repozytorim CVS będziesz potrzebował więcej niż 1 GB, plus dodatkowe 370 MB na drzewo źródeł. Dodatkowo niezbęde będzie 100 MB lub więcej (w zależności od posiadanej architektury sprzętowej) na pliki generowane podczas kompilacji źródeł.
Decydując się na drzewo źródeł, należy jakoś poradzić sobie ze zmodyfikowanymi lokalnie plikami. Jednym ze sposobów obejścia tego problemu może być użycie systemu plików union, (więcej szczegółów mount_union(8)). Należy uważać jednak gdyż system plików union może być niestabilny jeśli warstwa dolna i górna znajdują się na tym samym fizycznym systemie plików. Umieszczając warstwę dolną i górną na innych partycjach nie powinny pojawić się żadne kłopoty. Przykład zastosowania union opisany jest poniżej:
Załóżmy, że drzwo zaktualizowane drzewo CTM znajduje się w /usr/src-ctm, a aktualne drzewo źródeł, czyli to w którym znajdują się modyfikacje użytkownika i z którego budowany jest system, umieszczone jest w /usr/src. Zanim zacznie się kożystać z systemu plików union /usr/src powinien być pustym katalogiem. Poniższa komenda zamontuje system plików union:
mount -t union -o -b /usr/src-ctm /usr/src
Zmiany poczynione w plika znajdujących się w /usr/src zostaną przeniesione tylko na pliki znajdujące się w /usr/src przesłaniając pliki z src-ctm. Łaty nadesłane przez CTM i zaaplikowane na pliki w src-ctm nie będą widoczne jeśli istnieje zmodyfikowany plik w górnej warstwie.
Co pewien czas należy odmontować unię i poszukać plików, które przysłaniają pliki z niżeszj warstwy.
umount /usr/src find /usr/src -type f
Pomocne mogą być również polecenia ls -W i rm -W, obiekty nazwane "whiteouts" w katalogu /usr/src będą przykrywać pliki z src-ctm.
Jeśli chcesz pobrać repozytorim CVS, użyj komendy cvs checkout. Każdorazowo, po uaktualnieniu źródeł przez CTM, użyj polecenia cvs update aby uaktualnić repozytorium CVS.
Zainicjowanie repozytorium CVS:
cd /usr cvs -qd REPOZYTORIUM_CVS checkout -P src
i po każdym uaktualnieniu przez CTM:
cd /usr/src cvs -q update -Pd
Ważne uwagi i informacje na temat CTM umieszczane są także na liście mailingowej announce@OpenBSD.org.
Logo OpenBSD/CTM dla Projektu OpenBSD opracował Phillip F Knaack.