[OpenBSD]

Anonimowy CVS


Spis treści


Co to jest Anonimowy CVS?

Anonimowy CVS (ang. Anonymous CVS) jest sposobem utrzymywania aktualnej, lokalnej kopii źródeł OpenBSD z uwzględnieniem zmian dokonanych na bieżących źródłach OpenBSD. Dodatkowo, podążając za bieżącym rozwojem, jest również możliwe śledzenie łat z erraty do wydania.

Główną zaletą Anonimowego CVS ponad innymi technikami aktualizacji kodu źródłowego jest to, że działa bezpośrednio na centralnym repozytorium albo mirrorze. Oznacza to, że masz dostępny pełen zestaw komend CVS aby kontrolować łączenie i aktualizację Twoich zmian z innymi zmianami w źródłach oraz oglądać różnice, historie zmian i zadawać inne zapytania do centralnego repozytorium.

Projekt OpenBSD aktualnie posiada sześć głównych repozytoriów źródeł:

Podsumowując, prawdziwą siłą używania Anonimowego CVS jest to, że jest to "tolerancyjny" system kontroli kodu źródłowego - respektuje zmiany, których dokonałeś w Twoich lokalnych źródłach i dokłada "najlepszych starań" aby zaktualizować Twoje całe drzewo źródeł, zamiast zostawiać listę niezrozumiałych problemów, które muszą być rozwiązane aby móc kontynuować.

Co to jest CVS?

CVS jest systemem kontroli kodu źródłowego, używanym do zarządzania drzewem źródeł OpenBSD. Wprowadza centralne repozytorium dla wszystkich oficjalnie wydanych źródeł i zmian, jednocześnie pozwalając developerom na zarządzanie lokalnymi kopiami kodu źródłowego wraz z roboczymi zmianami. Istnieją dwa poziomy dostępu do drzewa kodów źródłowych:

Podstawową siłą CVS jest to, że posiada on zdolność wykonywania inteligentnych połączeń zmian w centralnym repozytorium ze zmianami, które wykonałeś w Twojej lokalnej kopii. Oznacza to, że jeśli zrobiłeś zmianę w module i wykonujesz aktualizację, Twoje zmiany nie "ulecą", a CVS dołoży najlepszych starań aby połączyć zmiany dokonane w centralnych źródłach ze zmianami, których dokonałeś w Twojej lokalnej kopii.

W wypadku, gdy zmiany nie mogą być kompletnie połączone, CVS umożliwia "łagodne wycofanie się", dodając opisane zmiany w Twojej lokalnej kopii, pozostawiając niezmodyfikowaną kopię Twojej wersji i kontynuuje aktualizację pozostałych modułów.

Zaczynamy korzystać z Anonymous CVS

Możesz ściągnąć cale drzewo źródeł z serwera AnonCVS, możesz również zaoszczędzić czas i łącze poprzez przegranie drzewa źródeł z płyty CD OpenBSD lub z serwera FTP. Szczególnie gdy używasz wersji -stable; ponieważ niewiele plików zostało zmienionych pomiędzy -release i -stable.

Aby rozpakować drzewo źródeł z CD do /usr/src (zakładając, że CD jest zamontowany w /mnt):

    # cd /usr/src; tar xzf /mnt/src.tar.gz
    # cd /usr; tar xzf /mnt/XF4.tar.gz
    # tar xzf /mnt/ports.tar.gz
Pliki źródłowe dostępne do ściągnięcia z serwerów FTP są podzielone na dwa pliki aby zminimalizować czas ściągania dla tych, którzy chcą pracować tylko z jedną częścią drzewa. Te pliki to sys.tar.gz, który zawiera pliki używane do tworzenia jądra oraz src.tar.gz, który zawiera wszystkie inne narzędzia przestrzeni użytkownika. Jednakże zwykle będziesz potrzebował ich obu. Zakładając, że ściągnięte pliki src.tar.gz i sys.tar.gz znajdują się w /usr:
    # cd /usr/src
    # tar xzf ../sys.tar.gz
    # tar xzf ../src.tar.gz
    # cd /usr
    # tar xzf XF4.tar.gz
    # tar xzf ports.tar.gz

Nie wszyscy będą chcieli rozpakować wszystkie zestawy plików, jednak system musi być zsynchronizowany i generalnie będziesz potrzebował przygotować wszystkie drzewa.

Można również po prostu użyć cvs(1) do "checkout" repozytorium źródłowego. Zostało to przedstawione w następnej sekcji.

Po tych poleceniach, /usr/src będzie dobrym miejscem gdzie wszystkie polecenia cvs(1) będą działać poprawnie.

Używanie CVS do uaktualnienia drzewa źródeł

CVS został zaprojektowany tak aby dawać prostą metodę do sprowadzania i uaktualniania źródeł. Musisz najpierw zdecydować co chcesz śledzić -current czy gałąź łat). Drzewo current posiada wszystkie najaktualniejsze zmiany, podczas gdy gałąź łat zawiera formalne wydanie plus zaaplikowane łaty z erraty. Aby dowiedzieć się więcej o tych "odmianach" OpenBSD, zobacz tutaj.

Jeśli już zdecydowałeś, jakiego drzewa się trzymać, musisz wybrać serwer Anonymous CVS, z którego będziesz korzystać. Lista tych serwerów znajduje się poniżej.

Gdy już wybrałeś Serwer Anonymous CVS z którego będziesz korzystał, możesz zacząć używać cvs. Ci z Was, którzy posiadają płyty CD, mogą rozpocząć ze źródłami z płyty, używając metody opisanej powyżej. Jeśli nie posiadasz CD, użyj poniższej metody aby sprowadzić źródła. Metoda ta wrzuca źródła OpenBSD do /usr/src.

	# cd /usr; cvs checkout -P src

Powyższe polecenie sprowadzi źródła z drzewa -current. Większość z Was będzie jedynie chciała źródła z gałęzi łat (ang. patch branch). Aby sprowadzić takie źródła, musisz określić w poleceniu "tag". Na przykład:

        # cd /usr; cvs checkout -P -rOPENBSD_4_2 src

Lub OPENBSD_4_1 dla 4.1, itd.

Tag OPENBSD_4_2 zawiera źródła z wydania i nałożone już poprawki.

Dostępne serwery Anonymous CVS

Zerknij na notę o ssh kontra rsh poniżej

Uwaga: Jeśli Twój serwer jest umieszczony tutaj z niedokładnymi albo nieznanymi informacjami, proszę skontaktuj się z beck@openbsd.org

Możesz użyć traceroute(8) aby określić, który serwer jest najbliżej Ciebie. Problemy z serwerem powinny być zgłaszane do opiekuna serwera.

Pobieranie oprogramowania kryptograficznego przez cvs(1)

WAŻNA UWAGA: Istnieje kilka zagadnień w odniesieniu do oprogramowania kryptograficznego, z których wszyscy powinni zdawać sobie sprawę:

Przykłady użycia cvs(1)

UWAGA: Jeśli chcesz zaktualizować gałąź (tak jak patch branch) do current, możesz dodać flagę -A do cvs, jednakże flaga ta jest mało użyteczna. Niektóre starsze wersje dokumentacji OpenBSD zalecały użycie tej flagi w wielu przykładach. Nie zalecamy tej flagi dopóki nie jest to absolutnie konieczne.

Przykładem użycia serwera anoncvs może być:

$ cd /tmp
$ cvs -d anoncvs@anoncvs.ca.openbsd.org:/cvs get src/sys/arch/sparc
    [kopiuje pliki z repozytorium na Twoją maszynę]
$ cd src/sys/arch/sparc
$ cvs log locore.s
    [pokazuje log zatwierdzeń (commit log) dla wybranego pliku]
$ cvs diff -bc -r1.1 -r1.5 locore.s
    [pokazuje zmiany między rewizjami 1.1 i 1.5]

Aby używać cvs ``pserver'' (bezpośrednie połączenie TCP, zamiast ssh lub rsh) musisz się raz zalogować:

$ cvs -d :pserver:anoncvs@anoncvs.ca.openbsd.org:/cvs login
(Loguje do anoncvs@anoncvs1.ca.openbsd.org)
CVS password: anoncvs
 [Zapisuje to linię do ~/.cvspass (nazwa pliku nadpisywana przez CVS_PASSFILE).]
 [Przykładowa linia z ~/.cvspass po wpisaniu 'blah' jako powyższe hasło to:    ]
 [:pserver:anoncvs@anoncvs5.usa.openbsd.org:/cvs Au'yc                         ]
 [Po JEDNOKROTNYM zalogowaniu, każde inne użycie powyższego CVSROOT            ]
 [będzie działać.                                                              ]
$ cvs -d :pserver:anoncvs@anoncvs.ca.openbsd.org:/cvs get ksrc-i386 ksrc-common
 [Pozwala na otrzymanie TYLKO tego co niezbędne do przebudowania jądra i386.   ]

Tutaj pokazano, jak ktoś używając anoncvs regularnie może aktualizować swoje drzewo źródeł:

Używanie portów, jest podobne do src:

W powyższym przykładzie, -q jest opcjonalne, przeznaczone tylko do zminimalizowania wyjścia z cvs. Ci, którzy lubią oglądać ekrany pełne komunikatów, mogą pominąć tą flagę.

Aby zrobić diff-a z lokalnie poprawionego modułu (tutaj cd.c) do załączenia do raportu o błędzie:

	# cd /usr
	# cvs diff -u src/sys/scsi/cd.c > /tmp/patch

Strona podręcznika cvs(1) (załączona ze źródłami CVS) zawiera wiele więcej informacji jak używać CVS.

UWAGA: Używając cvs, powinieneś zadbać o to aby Twój bieżący katalog był katalogiem głównym (root) drzewa, do którego się odnosisz albo oddzielnym miejscem jak /tmp. Niektóre polecenia, jak "get", mogą utworzyć dowolne poddrzewo w bieżącym katalogu i następne aktualizacje będą je rekursywnie powiększać.

Usługa anoncvs daje możliwość początkującym developerom nauczenia się działania CVS i dokładnego poznania procesu konstrukcji przed otrzymaniem dostępu typu "commit" -- jako wynik wykazania się użytecznymi umiejętnościami i wysokiej jakości wynikami można w późniejszym czasie otrzymać pełen dostęp. Dodatkowo, osoby dostarczające poprawki, mogą tworzyć "diff"-y względem drzewa CVS, co uprości integrację.

Używać rsh(1) czy ssh(1)?

CVS umożliwia klientowi CVS dostęp do serwera CVS trzema metodami:

INFORMACJA: Dla użytkowników pragnących używać rsh: konieczne jest wcześniejsze ustawienie zmiennej środowiskowej CVS_RSH aby wskazywała program rsh(1):

Domyślnie, klient CVS systemu OpenBSD używa ssh ("secure shell": OpenSSH) do komunikacji z serwerem CVS.

Wiele serwerów CVS nie wspiera dłużej rsh ze względów bezpieczeństwa. Lokalne problemy, takie jak ściany ogniowe czy niedoskonałe emulatory protokołów jak slirp mogą również przeszkodzić w używaniu rsh. Jednak jeśli rsh jest pożądane, musi zostać ustawiona zmienna środowiskowa CVS_RSH, wskazująca na rsh. (standardowo /usr/bin/rsh).

Jeśli lokalna polityka nie zezwala na wychodzące połączenia na domyślny 22-gi port ssh, może zostać użyty port 2022. Zauważ jednakże, że nie wszystkie serwery anoncvs akceptują połączenie ssh na tym porcie. Dodatkowo, większość serwerów anoncvs nie akceptuje dłużej braku szyfrowania, jako że jest to wyłączone w aktualnych wersjach ssh, ze względów bezpieczeństwa. Nie próbuj również włączać kompresji: CVS kompresuje.

Można określić coś na wzór poniższego w pliku konfiguracyjnym $HOME/.ssh/config aby uniknąć pułapek i restrykcji wspomnianych wyżej:

	Host anoncvs.ca.openbsd.org
	    Compression no
	    Port 2022

CVS jest trochę "hałaśliwy" podczas uruchomienia; aby go trochę uciszyć możesz wykonać:

	$ export CVS_CLIENT_PORT=-1

Mirrorowanie repozytorium CVS poprzez sup(1)

Użytkownicy pragnący mirrorować sobie drzewo OpenBSD CVS mogą zrobić to z anoncvs.usa.openbsd.org lub anoncvs3.usa.openbsd.org (są to różne maszyny). Zauważ, że jest to drzewo cvs, a nie sprowadzone (checked out) drzewo źródeł. Jest użyteczne tylko jeśli chcesz mieć możliwość wykonywania szybkich operacji cvs (diff, annotate, itp.) lub jeśli posiadasz wiele drzew źródeł i chcesz tylko raz przesłać nowe dane (możesz wtedy sprowadzać drzewo z twojego lokalnego mirroru cvs).

Przykładowym supfile może być:

	cvs host=anoncvs.usa.openbsd.org hostbase=/ base=/home delete

który skopiuje drzewo cvs do /home/cvs z plikami danych sup kończącymi się w /home/sup. Pełne drzewo cvs OpenBSD posiada aktualnie rozmiar około 3.5GB, który oczywiście stale się zwiększa.

Zakładanie mirroru anoncvs

Jeśli chcesz ustawić nowy mirror anoncvs i udostępnić go ogółowi, proszę skontaktuj się z opiekunem anoncvs. Mirrory anoncvs wymagają około 3.5GB (będą rosły!) na dysku i używają do 32MB swap-u dla każdego użytkownika (zakładając, że użytkownik wykonuje duże operacje; podczas gdy mniejsze używają mniej zasobów, anoncvs ciągle ma większy wpływ niż ftp czy sup). Maszyny takie powinny posiadać znakomite połączenie sieciowe dla obszaru, któremu będą udostępniać dane. Dostępny jest dokument, który opisuje ustawienia serwerów anoncvs.

Końcowe uwagi

Po zaktualizowaniu źródeł, powinieneś przeczytać komentarze na początku /usr/src/Makefile przed przystąpieniem do budowania. Powinieneś również, jeśli to możliwe, zbudować nowe jądro przed wykonaniem make build. W niektórych wypadkach, może okazać się konieczna przebudowa i instalacja narzędzia config zanim będziesz mógł zbudować jądro. Jeśli config GENERIC zawiedzie jest to prawdopodobnie ten przypadek.

Ważnym jest aby zauważyć, że aktualizacja z wersji release do current poprzez przebudowę źródeł, może być raczej ciężka z powodu zależności, które często nie są oczywiste. Dla tego zaleca się, abyś najpierw zainstalował najnowszy snapshot, przed przystąpieniem do budowania ze źródeł.


OpenBSD www@openbsd.org
$OpenBSD$