Создание рабочей копии удаленной реплики, если вам надоело лазить куда то далеко и хотите что бы всё лежало под боком у вас.
Теперь добавим в крон (это не обязательно если вы хотели просто перенести репу к себе) для автоматической синхронизации
источник: http://www.gyry.com.ua/article/svn-replikaciya-ili-prosto-kopiya
Создадим репозиторий для копии
Перейдем в папку hooks нового репозитория
Видим шаблоны хуков (*.tmpl). Создадим пустой хук в зеркале
$ svnadmin create /storage/mirror_svn
Перейдем в папку hooks нового репозитория
$ cd /storage/mirror_svn/hooks
Видим шаблоны хуков (*.tmpl). Создадим пустой хук в зеркале
$ echo "#!/bin/sh" > hooks/pre-revprop-change
$ chmod 755 hooks/pre-revprop-change
Инициализируем репозиторий-зеркало
$ svnsync init file:///storage/mirror_svn http://master.svn/svn/ --source-username логин --source-password пароль
Будут установлены ряд свойств репозитория-зеркала, в нём же будет сохранён адрес удалённого репозитория.
Запустим передачу данных (синхронизируем репозиторий-зеркало с удалённым)
$ svnsync sync file:///storage/mirror_svn --source-username логин --source-password пароль
В некоторых случаях (например, если предыдущая синхронизация оборвалась аварийно), svnsync может жаловаться на то, что не может заблокировать репозиторий-зеркало. В этих случаях помогает такая команда:
$ svn propdel svn:sync-lock --revprop -r 0 ${COPYSVN} file:///storage/mirror_svn
$ sudo nano /etc/cron.daily/svnsync
Содержимое:
#!/bin/bash
if [ $(svn proplist --revprop -r 0 file:///storage/mirror_svn | grep sync-lock | wc -l) -ne 0 ]; then
sleep 15
svn propdel svn:sync-lock --revprop -r 0 file:///storage/mirror_svn
fi
SVN_OUT=`svnsync --non-interactive sync file:///storage/mirror_svn --source-username логин--source-password пароль`
echo $SVN_OUT
Проблемы, которые возникли и их рещения.
- Происходило все под Ubuntu 12.04. А там neon в пакетах с проблемной работой через SSL. Ошибку сыпал при svnsync init - "OPTIONS of ': SSL handshake failed: SSL disabled due to library version mismatch ()"
Удаляем libneon$ aptitude purge libneon27
Берем deb пакет тут
Устанавливаем зависимый libssl$ aptitude install libssl0.9.8
Устанавливаем скаченный пакет$ dpkg -i libneon27_0.29.3-3_amd64.deb
Меняем симлинки$ mv /usr/lib/libneon-gnutls.so.27 /usr/lib/libneon-gnutls.so.27.old $ ln -s /usr/lib/libneon.so.27 /usr/lib/libneon-gnutls.so.27Теперь успешно работает subversion по https протоколу - Синхронизация остановилась с ошибкой - "svnsync: Path 'script' not present".
Проблема связанна с тем, что просмотр содержимого папки script для меня запрещен. В папку script/branches доступ у меня есть, но свн хочет получить список всех папок внутри script. А т.к. прав нет, то останавливается.
Решение нашел тут. Subversion нужно пропатчить.
Скачаем исходбники для Ubuntu 12.04. Работает от пользователя, а не рута$ cd ~/ $ apt-get source subversionСоздадим фаил патча
$ nano ~/patch-subversion--svnsync--sync.c
Содержимое файла--- subversion/svnsync/main.c.orig 2012-11-28 13:42:57.933697896 +0200 +++ subversion/svnsync/main.c 2012-11-28 13:48:41.961690982 +0200 @@ -963,10 +963,29 @@ node_baton_t *pb = parent_baton; edit_baton_t *eb = pb->edit_baton; node_baton_t *db = apr_palloc(pool, sizeof(*db)); + svn_error_t *err; - SVN_ERR(eb->wrapped_editor->open_directory(path, pb->wrapped_node_baton, + err = eb->wrapped_editor->open_directory(path, pb->wrapped_node_baton, base_revision, pool, - &db->wrapped_node_baton)); + &db->wrapped_node_baton); + + if (err) + { + if (err->apr_err != SVN_ERR_FS_NOT_DIRECTORY) + SVN_ERR(err); + + /* + * In case we try to open a non-existent directory, this means we did + * not have visibility on the parent path when this directory was created, + * so just create it now. + */ + svn_error_clear (err); + SVN_ERR(eb->wrapped_editor->add_directory(path, pb->wrapped_node_baton, + /*copyfrom_path*/ NULL, + /*copyfrom_revision*/SVN_INVALID_REVNUM, + pool, + &db->wrapped_node_baton)); + } db->edit_baton = eb; *child_baton = db;Патчим$ cd ~/subversion-1.6.17dfsg/ $ patch -p0 < ../patch-subversion--svnsync--sync.cСтавим зависимости, чтоб собрать subversion
$ sudo aptitude install debhelper libneon27-gnutls-dev libserf-0-0-dev libserf-dev libapr1-dev libaprutil1-dev libdb4.8-dev libsasl2-dev apache2-threaded-dev libsqlite3-dev libgnome-keyring-dev libdbus-1-dev kdelibs5-dev quilt doxygen swig python-all-dev python-all-dbg libperl-dev ruby1.8 ruby1.8-dev default-jdk junit
Другой вариант установки зависимостей
$ sudo apt-get build-dep subversion
Запускаем сборку deb пакета. Внимание, под root работать не будет.
$ dpkg-buildpackage
У меня предыдушая команда не прошла вконце юнит тестирование. Я запустил без проверки
$ DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage
Установим новый пакет$ cd ../; $ sudo dpkg -i subversion_1.6.17dfsg-3ubuntu3_i386.debСнова необходимо перебить линки$ mv /usr/lib/libneon-gnutls.so.27 /usr/lib/libneon-gnutls.so.27.old $ ln -s /usr/lib/libneon.so.27 /usr/lib/libneon-gnutls.so.27 - Для хранилища, чтоб клиенты могли свободно переключаться на зеркало, нужно установить тот же UUID, что у мастер-репозитория. Сказано, сделано.
Читаем в фаиил UUID$ svnadmin dump -r0 /storage/mirror_svn | head -n 3 > saved-uuid
Записываем$ svnadmin load --force-uuid /storage/mirror_svn < saved-uuid
Терь все. Имеем всегда актуальную копию SVN репозитория.
источник: http://www.gyry.com.ua/article/svn-replikaciya-ili-prosto-kopiya
Комментариев нет:
Отправить комментарий