Страница 1 из 1

Переход на SVN. Заметка.

Добавлено: 2013-04-19 10:49:05
Al
В связи с тем, что проект FreeBSD окончательно перешел на SVN, небольшая заметка на тему что это такое и как этим пользоваться. Я не претендую на полное описание SVN. Это не более, чем краткий справочник использования SVN в контексте исходных кодов FreeBSD.

Subversion (также известная как «SVN») — свободная централизованная система управления версиями, официально выпущенная в 2004 году компанией CollabNet Inc.
wikipedia(c)

Русским языком SVN - это некая база для хранения файлов с историей их изменений и комментариями. Основная целевая аудитория - разработчики, которые используют ее для хранения исходных текстов программ и истории изменения.
SVN можно условно разделить на клиентскую часть и серверную. Серверная - локально хранит исходники, историю и т.п. Клиент же только получает необходимые файлы с сервера.
Для рядового обновления нескольких серверов, я думаю, нет смысла держать полную копию у себя (ставить серверную часть). Можно просто ограничиться скачиванием необходимых файлов.

Установка SVN сервера с использованием уже имеющейся базы. Для настройки сервера используется утилита svnsync.

1. Качаем SVN базу с

Код: Выделить всё

#ftp://ftp.freebsd.org/pub/FreeBSD/development/subversion/
Например, если мы хотим держать порты, качаем svnmirror-ports-r301235.tar.xz. Аналогично для исходников и документации.

2. Распаковываем ее в папку, где будет лежать база. Назовем ее, наример, /var/svn/

Код: Выделить всё

#mkdir /var/svn/
#cd /var/svn/
#tar -vxf  svnmirror-ports-r301235.tar.xz
3. Обновляем базу до текущей версии. Сервер, откуда обновляться, уже установлен.

Код: Выделить всё

#svnsync sync file:////var/svn/ports
Можно посмотреть, что получилось

Код: Выделить всё

#svnsync info file:////storage/local_pool/svn/ports
Source URL: svn://svn.freebsd.org/ports
Source Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
Last Merged Revision: 315795
4. Теперь раздаем базу. Рпздавать можно через модуль apache - mod_dav_svn ( оьб этом подробнее расписано в http://www.lissyara.su/articles/freebsd ... ache+trac/), можно через встроенный svnserve.
Второе - более простой вариант. Добавляем в /etc/rc.conf. Флаг -R переключает сервер в режим "только для чтения", т.к. клиент сможет получить файлы, но не сможет их менять на сервере несмотря на настройки в конфигурационный файлах (base/conf/svnserve.conf, например).

Код: Выделить всё

svnserve_enable="YES"
svnserve_flags="-d -R --log-file=/var/log/svn.log --listen-port=3690"
svnserve_data="/var/svn"
svnserve_user="svn"
svnserve_group="svn"
И запускаем сервер

Код: Выделить всё

#/usr/local/etc/rc.d/svnserve start
Клиент. Для работы в качестве клиента используется утилита svn
В данном примере используется локальный сервер SVN. Если установка локального сервера не проводилась, следует заменить его адрес на адрес публичного сервера.

Скачиваем коллекцию портов. Есть два варианта получить порты. Первый - порты и историю коммитов (изменений) или просто коллекцию портов. Первый вариант "тяжелее" примерно на 500Мб, но зато позволяет "откатываться" до предыдущих версий.

Первый вариант. Обновляем все, включая историю версий

Код: Выделить всё

#svn checkout svn://127.0.0.1/ports/head /usr/ports
Второй вариант. Получаем только порты. Без дополнительной информации. --force если папка ports не пуста.

Код: Выделить всё

#svn export --force svn://127.0.0.1/ports/head /usr/ports/
Если использовался первый вариант, можно посмотреть историю изменения и, при случае, откатиться

1. Смотрим изменения через svn. Последние 5 изменений.

Код: Выделить всё

#svn log --limit=5 /usr/ports/lang/php5/
------------------------------------------------------------------------
r314716 | ale | 2013-03-20 12:15:37 +0400 (ср, 20 мар 2013) | 5 lines

Update to 5.4.13 release.

PR:		ports/177082
Submitted by:	Rustem Alimov <rustem.alimov@gmail.com>

------------------------------------------------------------------------
r313958 | ale | 2013-03-12 14:33:04 +0400 (вт, 12 мар 2013) | 5 lines

Suhosin will never reappear, remove commented out code.
Fix plist when CLI is not selected [1].

Submitted by:	Gergely CZUCZY <gergely.czuczy@harmless.hu> [1]

------------------------------------------------------------------------
r312912 | ale | 2013-02-25 14:30:40 +0400 (пн, 25 фев 2013) | 2 lines

Update to 5.4.12 release.

------------------------------------------------------------------------
r310812 | ale | 2013-01-22 12:20:05 +0400 (вт, 22 янв 2013) | 2 lines

Update to 5.4.11 release.

------------------------------------------------------------------------
r309326 | ale | 2012-12-21 01:15:05 +0400 (пт, 21 дек 2012) | 2 lines

Update to 5.4.10 release.

-------------------------------------------------------

2. Например, нам надо поставить порт php 5.4.10. Ему соответствует r309326. Синхронизируем.

Код: Выделить всё

#svn up -r 309326 /usr/ports/lang/php5/
3. Проверяем
Смотрим информацию о каталоге.

Код: Выделить всё

#svn info /usr/ports/lang/php5
Path: /usr/ports/lang/php5
Working Copy Root Path: /usr/ports
URL: svn://127.0.0.1/ports/head/lang/php5
Repository Root: svn://127.0.0.1/ports
Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
Revision: 309326
Node Kind: directory
Schedule: normal
Last Changed Author: ale
Last Changed Rev: 309326
Last Changed Date: 2012-12-21 01:15:05 +0400 (пт, 21 дек 2012)
Убеждаемся, что версия соответствует.

Код: Выделить всё

#cat /usr/ports/lang/php5/distinfo 
SHA256 (php-5.4.10.tar.bz2) = c5bffda2154aedd9851c1e9b7da66f6c44c199716bd202054dd5d4a4f5f997e4
...

Смотрим отличия между r309326 и текущей версией (HEAD)

Код: Выделить всё

#svn diff -r 309326:HEAD /usr/ports/lang/php5/Makefile | grep PORTVERSION

Ваши длополнения?
ЗЫ, оставить тут или оформить как статью?

Re: Переход на SVN. Заметка.

Добавлено: 2013-04-22 14:29:30
vadim64
с тех пор как умер cvs, юзаю портснап
раскажите как 2 командами обновлять порты через свн
пожалуйста

Re: Переход на SVN. Заметка.

Добавлено: 2013-04-23 12:45:17
Al
Самое простое

Код: Выделить всё

svn export --force svn://svn.freebsd.org/ports/head /usr/ports/
Для обновления портов 1-3 серверов на последние версии, согласен, большого смысла не имеет. Изначально удобно для даунгрейда и пересборки исходников ОС (мира, ядра).

Re: Переход на SVN. Заметка.

Добавлено: 2013-04-24 8:33:13
Al
К слову, если надо просто скачать последние исходники-порты, можно поставить простую утилитку svnup. Она гораздо проще subversion и умеет только стягивать ветки.

Код: Выделить всё

#cd /usr/ports/net/svnup
#make all install clean
===>  License BSD accepted by the user
=> svnup-0.56.tar.xz doesn't seem to exist in /var/distfiles/.
=> Attempting to fetch http://jcm.dsl.visi.com/freebsd/svnup/svnup-0.56.tar.xz
svnup-0.56.tar.xz                             100% of 9536  B   17 kBps
===> Fetching all distfiles required by svnup-0.56 for building
===>  Extracting for svnup-0.56
=> SHA256 Checksum OK for svnup-0.56.tar.xz.
===>  Patching for svnup-0.56
===>  Configuring for svnup-0.56
===>  Building for svnup-0.56
cd /var/tmp/ports/usr/ports/net/svnup/work/svnup-0.56 &&  cc -o svnup -O2 -pipe -fno-strict-aliasing svnup.c  -lmd
===>  Installing for svnup-0.56
===>   Generating temporary packing list
===>  Checking if net/svnup already installed
install  -s -o root -g wheel -m 555 /var/tmp/ports/usr/ports/net/svnup/work/svnup-0.56/svnup /usr/local/bin/
install  -o root -g wheel -m 444 /var/tmp/ports/usr/ports/net/svnup/work/svnup-0.56/svnup.1 /usr/local/man/man1/
===>   Compressing manual pages for svnup-0.56
===>   Registering installation for svnup-0.56
===>  Cleaning for svnup-0.56
Использовать можно так

Код: Выделить всё

# svnup -h svn.freebsd.org -b /ports/head -l /usr/ports
Где
-h - хост, откуда берем исходники
-b - ветка, которую тянем
-l - куда кладем
-r - еще можно указать ревизию тут. Если не указано, берется самая последняя.

Аналогично и для исходников.

P.S. посмотреть ветки через веб можно тут http://svnweb.freebsd.org

Re: Переход на SVN. Заметка.

Добавлено: 2013-04-29 9:11:33
Al
Отдельно добавлю про обновление исходников. На примере svnup.

Обновляется аналогично портам
# svnup -h svn.freebsd.org -b /base/releng/9.1/ -l /usr/src
Отдельный разговор про ветки. Если понял неправильно, поправьте.
Заходим на http://svnweb.freebsd.org/ тут можно посмотреть содержимое svn в веб-формате. Ветка с исходниками - base. В ней нас интересуют 4 ветки

head - тут текущая основная разрабатываемая версия.
release - После выпуска релиза он попадает сюда.
releng - текущая ветка с версией. Из нее создается релиз + все фиксы после релиза вносятся опять же в нее.
stable - Текущая стабильная ветка.

Как итог. Если мы хотим обновиться до, например, 8.3 со всеми текущими фиксами, используем /base/releng/8.3/. Если хотим обновиться до последней версии восьмерки, используем /base/stable/8/ и получим 8.4

Re: Переход на SVN. Заметка.

Добавлено: 2013-04-29 10:32:53
Al
Итоговая статья.
http://www.lissyara.su/?id=2235

Re: Переход на SVN. Заметка.

Добавлено: 2013-04-29 13:44:50
Alex Keda
по ширине, однако, не вписываетесь...

Re: Переход на SVN. Заметка.

Добавлено: 2013-04-29 13:54:52
Al
Всмысле?

Re: Переход на SVN. Заметка.

Добавлено: 2013-05-10 13:57:44
mozgua
Товарищи, подскажите, пожалуйста, как автоматизировать процесс синхронизации с центральным репозиторием?

Если добавить задачи обновления в cron, то они запускаются, но процесс обновления не происходит:
0/15 * * * * svn /usr/local/bin/svnsync --non-interactive sync file:////var/svn/base
0/16 * * * * svn /usr/local/bin/svnsync sync file:////var/svn/ports

Re: Переход на SVN. Заметка.

Добавлено: 2013-05-11 13:32:26
Al
Что в логах?
Попробуйте запустить от рута или проверьте все пермишены.
Зачем так часто обновляете? КОнкурирующих процессов не возникает?

Re: Переход на SVN. Заметка.

Добавлено: 2013-05-12 14:50:32
mozgua
Al писал(а):Что в логах?
Попробуйте запустить от рута или проверьте все пермишены.
Зачем так часто обновляете? КОнкурирующих процессов не возникает?
Во время процесса обновления в логи ничего не пишется.
Вчера перенес задачи в cron пользователя root и все заработало.
Проблема возникала из-за того, что задачи запускались от пользователя svnserve, а прав доступа на каталог репозитория не было.
После того как сделал владельцем svnserve обновления по засписанию проходили успешно.
Я выставил такую периодичность обновления для того чтоб не ждать обновления по расписанию слишком долго :smile:

Итоговое расписание:

Код: Выделить всё

05     */1     *       *       *       /usr/local/bin/svnsync sync -q file:////var/svn/ports
10     */2     *       *       *       /usr/local/bin/svnsync sync -q file:////var/svn/base
15     */2     *       *       *       /usr/local/bin/svnsync sync -q file:////var/svn/doc

Re: Переход на SVN. Заметка.

Добавлено: 2013-05-16 10:04:09
strelokr
svnup не обновляет порты полностью

Код: Выделить всё

Cannot remove /var/ports/mail/php53-imap/work/php-5.3.23/ext/imap/.libs: Directory not empty
сам файл запуска

Код: Выделить всё

#!/bin/sh

#cvsup -g -L 2 portsupfile
svnup -h svn.freebsd.org -b ports/head -l /var/ports


Re: Переход на SVN. Заметка.

Добавлено: 2013-05-16 10:18:13
strelokr
И как я понял если были в портах скопиленые приложения то он их убирвает к черту как и distfiles

Re: Переход на SVN. Заметка.

Добавлено: 2013-05-16 10:59:46
f_andrey
strelokr писал(а):И как я понял если были в портах скопиленые приложения то он их убирвает к черту как и distfiles
Да сырое оно ещё, я пока за полноценный svn, пусть жирный, но пока без вариантов, svnup глядишь через годик допилят, там будет можно смотреть.

Re: Переход на SVN. Заметка.

Добавлено: 2013-05-16 11:04:08
strelokr
т.е. svn checkout svn://svn.freebsd.org/ports/head /usr/ports
так?

Re: Переход на SVN. Заметка.

Добавлено: 2013-05-16 11:09:25
f_andrey
checkout только первый раз, потом апдейт up

UPD: кстати, не обяхательно с главного тянуть, уже есть пара зеркал http://www.freebsd.org/doc/en_US.ISO885 ... rrors.html правда оба американские :(