CVS е мъртъв, да живее SVN

Може би все още не всички знаят, че експортирането от SVN към CVS е деактивирано за портове за повече от месец и може да закъснее доста за сортировчиците.

За тези, които по някаква причина не се чувстват комфортно с чисто двоична актуализация на базовата система и/или актуализиране на дървото на портовете чрез portsnap, е време да преминат към използване на SVN, ако вече не са.

Поради факта, че официалното хранилище на бинарни пакети в момента не е налично , за да използвате SVN, трябва или да инсталирате SVN като пакет от хранилища на трети страни (заедно с всички зависимости), или да изградите доста "тежък" SVN порт от портове, което не намалява проблема на много зависимости. Преди FreeBSD-6 (чиято базова система въведе командата csup, която изтегля актуализации от CVS хранилището), се използваше програмата cvsup, написана на Modula-2. Следователно компилацията cvsup включва компилаторната компилация Modula-2, която също беше доста "тежка" зависимост от хардуера по това време. Поради това беше често срещано използването на "двоичен" порт или пакета cvsup, който инсталира двоичен файл, който беше статично свързан към библиотеките на Modula-2, без да ги тегли като зависимости. Или дори напълно статичен двоичен файл, който дори libc не изисква.

Последната опция е много удобна за "крайни" системи, които трябва само да могат да изтеглят актуализации, плюс може би да ги разпространяват до тесен кръг от доверени локални хостове. Удобно е, защото такъв напълно статичен пакет се инсталира бързо и във всяка второстепенна версия на основна версия, включително дори по-стари второстепенни версии (актуализацията е особено подходяща за тях ). И гарантирана работа, прекъсвайки потенциалния цикъл "за да инсталирате svn, трябва да актуализирате портовете иза актуализиране на портове, инсталиране на svn" в случай, че portsnap е станал недостъпен по някаква причина поради модела си на централизирано разпространение .

Събра напълно статични пакети за различни версии/архитектури и ги публикува тук: http://www.grosbein.net/freebsd/svn/

Пакетите се инсталират с една команда от формата: pkg_add http://www.grosbein.net/freebsd/svn/subversion-static-1.7.8.amd64.83.nocona.tbz

subversion-static-1.7.8.amd64.91.core2.tbz - изграден на FreeBSD-9.1/amd64 с оптимизация на кода за core2, ще работи на 9.0 и по-нови;

subversion-static-1.7.8.amd64.83.nocona.tbz - изграден на FreeBSD-8.3/amd64 с оптимизация на кода за Pentium-4 (няма да работи на по-стари процесори), ще работи на 8.0 и по-нови;

subversion-static-1.7.8.i386.83.core2.tbz - изграден на FreeBSD-8.3/i386 с core2 оптимизации, ще работи на 8.0 и по-нови.

subversion-static-1.7.8.i386.74.i386.tbz - изграден на FreeBSD-7.4/i386 (без оптимизация на кода за 486 и по-нови), ще работи на 7.0 и по-нови;

subversion-static-1.7.8.i386.64.i386.tbz - изграден на FreeBSD-6.4/i386 (без оптимизация на кода за 486 и по-нови), ще работи на 6.0 и по-нови.

Вече нямам по-стари системи.

* Актуализиране на дървото на портовете/изходния код чрез SVN.

Пакетът svn е достатъчен за изтегляне на SVN версията на изходното дърво на желания клон и/или портове. Актуализирането на съществуващо дърво чрез SVN, получено от CVS или по някакъв друг начин - не от SVN - е невъзможно, предварителнопреименуване/премахване на старата директория. Струва си да се отбележи, че локално копие на дървото на портовете/изходния код, заредено по този начин ще заема два пъти повече място на диска отколкото преди (чрез CVS) поради поради факта, че SVN, в допълнение към локалното дърво, евентуално модифицирано по-късно с локални корекции, съхранява второ копие на дървото в поддиректорията .svn в неговия вътрешен формат, което ви позволява бързо да върнете всички локални промени без достъп до мрежата.

svn проверка svn://svn.freebsd.org/base/stable/9 /usr/src svn проверка svn://svn.freebsd.org/ports/head /usr/ports

Трябва да ги актуализирате по-късно, като просто отидете на /usr/src или /usr/ports и изпълните команда svn update.

За CVS имаше cvsup-mirror порт, с помощта на който беше възможно да имате себе си не само някои отделни клонове от хранилището, но да отразявате цялото хранилище , като по този начин се превръщате в пълноценно огледало на хранилището, от което крайните локални хостове могат да актуализират различни клонове. Същото може да се направи със SVN. Най-лесният начин да направите това е да изтеглите първоначалния "seed" от тук: ftp://ftp.freebsd.org/pub/FreeBSD/development/subversion/

Преди да надстроите, можете да използвате следната команда, за да видите откъде ще се актуализира огледалото:

svn propget svn:sync-from-url --revprop -r 0 file:///home/svnmirror/base

Ако желаете, можете да смените огледалото с друго:

svn propset svn:sync-from-url --revprop -r 0 svn://anotherhost/base file:///home/svnmirror/base

Където file:///home/svnmirror/base е URL адресът на локалното хранилище. За хранилище на портове това може да бъде file:///home/svnmirror/ports

Актуализирането на хранилище се извършва по различен начин от актуализирането на "само" дърво портове/източници. Ще ви трябва скрипт като този:

за репо в базови портове do url="file:///home/svnmirror/$repo" svn propdel svn:sync-lock --revprop -r 0 $url svnsync --non-interactive sync $url done

* Мрежов достъп до вашето хранилище.

За да предоставите достъп до вашето огледало през мрежата в режим "само за четене", трябва да добавите към /etc/rc.conf:

svnserve_enable="ДА" svnserve_flags="-d -R --listen-host 0.0.0.0" svnserve_data="/home/svnmirror" svnserve_user="svn" svnserve_group="svn"