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

Обсуждаем сайт и форум.

Модератор: f0s

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

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

Непрочитанное сообщение Al » 2013-04-19 10:49:05

В связи с тем, что проект 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

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

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

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

Непрочитанное сообщение vadim64 » 2013-04-22 14:29:30

с тех пор как умер cvs, юзаю портснап
раскажите как 2 командами обновлять порты через свн
пожалуйста
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

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

Непрочитанное сообщение Al » 2013-04-23 12:45:17

Самое простое

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

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

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

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

Непрочитанное сообщение Al » 2013-04-24 8:33:13

К слову, если надо просто скачать последние исходники-порты, можно поставить простую утилитку 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

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

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

Непрочитанное сообщение Al » 2013-04-29 9:11:33

Отдельно добавлю про обновление исходников. На примере 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

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

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

Непрочитанное сообщение Al » 2013-04-29 10:32:53

Итоговая статья.
http://www.lissyara.su/?id=2235

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

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

Непрочитанное сообщение Alex Keda » 2013-04-29 13:44:50

по ширине, однако, не вписываетесь...
Убей их всех! Бог потом рассортирует...

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

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

Непрочитанное сообщение Al » 2013-04-29 13:54:52

Всмысле?

mozgua
проходил мимо
Сообщения: 2
Зарегистрирован: 2010-02-05 19:03:48

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

Непрочитанное сообщение mozgua » 2013-05-10 13:57:44

Товарищи, подскажите, пожалуйста, как автоматизировать процесс синхронизации с центральным репозиторием?

Если добавить задачи обновления в 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

Al
ст. прапорщик
Сообщения: 501
Зарегистрирован: 2007-10-18 13:42:48
Откуда: Тверь
Контактная информация:

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

Непрочитанное сообщение Al » 2013-05-11 13:32:26

Что в логах?
Попробуйте запустить от рута или проверьте все пермишены.
Зачем так часто обновляете? КОнкурирующих процессов не возникает?

mozgua
проходил мимо
Сообщения: 2
Зарегистрирован: 2010-02-05 19:03:48

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

Непрочитанное сообщение mozgua » 2013-05-12 14:50:32

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

strelokr
мл. сержант
Сообщения: 93
Зарегистрирован: 2011-01-11 15:17:14
Контактная информация:

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

Непрочитанное сообщение strelokr » 2013-05-16 10:04:09

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


strelokr
мл. сержант
Сообщения: 93
Зарегистрирован: 2011-01-11 15:17:14
Контактная информация:

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

Непрочитанное сообщение strelokr » 2013-05-16 10:18:13

И как я понял если были в портах скопиленые приложения то он их убирвает к черту как и distfiles

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

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

Непрочитанное сообщение f_andrey » 2013-05-16 10:59:46

strelokr писал(а):И как я понял если были в портах скопиленые приложения то он их убирвает к черту как и distfiles
Да сырое оно ещё, я пока за полноценный svn, пусть жирный, но пока без вариантов, svnup глядишь через годик допилят, там будет можно смотреть.
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

strelokr
мл. сержант
Сообщения: 93
Зарегистрирован: 2011-01-11 15:17:14
Контактная информация:

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

Непрочитанное сообщение strelokr » 2013-05-16 11:04:08

т.е. svn checkout svn://svn.freebsd.org/ports/head /usr/ports
так?

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

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

Непрочитанное сообщение f_andrey » 2013-05-16 11:09:25

checkout только первый раз, потом апдейт up

UPD: кстати, не обяхательно с главного тянуть, уже есть пара зеркал http://www.freebsd.org/doc/en_US.ISO885 ... rrors.html правда оба американские :(
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308