Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  начальная настройка
  Установка FreeBSD
  DUMMYNET
  Сборка ядра
  IPFW
  обновление
  portsnap
  CP1251 на FreeBSD
  loader.conf
  defaults/rc.conf
  jail
  Ntpdate/Ntpd
  diskless
  Обновление мира ("world")
  PBR & PF
  bsnmpd
  newsyslog
  if_bridge
  make.conf
  PBR & IPFW
  Работа с HDD
  sshd & AD
  Удаленное разбиение HDD
  Заметки об IPFW
  FreeBSD на VDS
  CVSUP и софт через Proxy
  i386=>amd64
  ALTQ в IPFW
  Виртуальный свитч
  VPN сервер по средствам mpd5.
  NTP
  sysupdate
  mpd5 L2TP
  freebsd + webcamera
  IPFW policy (PBR)
  RAID1 via LAN
  зеркальный RAID1 на ОС FreeBSD
  4.x => 7.x
  portdowngrade
  Быстрое обновление портов
  ipfw nat
  Использование csup
  UTF-8 console
  dump/restore
  hast carp zfs ucarp cluster
  ng_nat
  Wi-FI роутер + DHCP + DNS
  backup/restore & ZFS
  Обновление ОС и портов через SVN.
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> настройка —> Обновление ОС и портов через SVN.

Обновление ОС и портов через SVN.

Автор: Al.


В связи с тем, что проект FreeBSD окончательно перешел на SVN, небольшая заметка на тему что это такое и как этим пользоваться. Я не претендую на полное описание SVN. Это не более, чем краткий справочник использования SVN в контексте исходных кодов FreeBSD.

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

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

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

Простое обновление.

Ставим легковесный SVN-клиент svnup
#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 svnup-0.56/svnup /usr/local/bin/
install  -o root -g wheel -m 444 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

Обновляем порты с SVN.
# svnup -h svn.freebsd.org -b /ports/head -l /usr/ports

В связи с выходом новой версии svnup, обновление будет выглядеть вот так
# svnup ports -h svn.freebsd.org -b /ports/head -l /usr/ports/ -p svn

Где
-h - хост, откуда берем исходники.
-b - ветка, которую тянем.
-l - куда кладем.
-r - еще можно указать ревизию тут. Если не указано, берется самая последняя.
-p - протокол, используемый для подключения к серверу SVN.
ports - секция из файла /usr/local/etc/svnup.conf. Можно создать несколько секций (для портов, релиза, стейбла), указать в каждой все необходимые параметры заранее и запускать обновление просто указав необходимую секцию. Например, так
# svnup ports

В моем же примере я переопределил все нужные мне параметры в командной строке несмотря на то, что часть из них уже имеется в конфиге. В секция defaults задаются глобальные параметры svnup, которые учитываются при работе с любой другой секцией. Указать ее явно (# svnup defaults) нельзя.
Секции используются либо не используются в зависимости от версии svnup.

Аналогично и для исходников. Не забудьте сделать копию конфигурационного файла ядра.
# svnup -h svn.freebsd.org -b /base/releng/9.1/ -l /usr/src

Отдельный разговор про ветки.
Заходим на http://svnweb.freebsd.org/. Тут можно посмотреть содержимое svn-сервера svn.freebsd.org в веб-формате. Ветка с исходниками - base. В ней нас интересуют 4 ветки:

head    - тут текущая основная разрабатываемая версия.
release - После выпуска релиза он попадает сюда.
releng  - текущая ветка с версией. Сюда добавляются только фиксы/секюрити/исправления багов после релиза. Рекомендуется для обновлений.
stable  - Текущая ветка для разработки. Релизы выпускаются из нее, в нее же добавляются новые фичи, багфиксы и т.п на стадии тестирования. К слову, security advisories сначала появляются тут и тестируются тут же, после чего уже попадают в releng. Но код все еще может быть нестабильным. Это еще одна ветка при разработке, а не ресурс для конечных пользователей (C)handbook

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

Создание собственного зеркала

Если хочется иметь локальную копию svn-сервера и/или возможность коммитить и удобно откатываться, ставим subversion. Пакет содержит как серверную часть, так и клиентскую.
#cd /usr/ports/devel/subversion
#make all install clean

Сервер. Установка 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/www/svn+apache+trac/), можно через встроенный svnserve.
Второе - более простой вариант. Добавляем необходимое в /etc/rc.conf. Флаг -R переключает сервер в режим "только для чтения", т.е. клиент сможет получать файлы, но не сможет их менять на сервере несмотря на настройки в конфигурационный файлах (ports/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. Ему соответствует ревизия 309326. Синхронизируем.
#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) = c5bf...7e4

В догонку смотрим отличия между r309326 и текущей ревизией (HEAD)
#svn diff -r 309326:HEAD /usr/ports/lang/php5/Makefile
#svn diff -r 309326:HEAD /usr/ports/lang/php5/Makefile | grep PORTVERSION



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=39228&p=346547.

размещено: 2013-04-29,
последнее обновление: 2013-08-20,
автор: Al

оценить статью:

Alex Keda, 2013-05-27 в 11:08:28

всегда приятно найти неизвестную статью на своём же сайте...
да ещё и первой ссылкой в яндексе =))

quest, 2013-08-20 в 11:27:39

В строке для обновления портов
# svnup ports -h svn.freebsd.org -b /ports/head -l /usr/src/ -p svn
по видимому ошибка, место назначения для портов /usr/ports/, а то скопипастил и зафигачил себе порты в src

Al, 2013-08-20 в 12:02:35

Поправил)

Игорь, 2013-11-01 в 13:47:15

svn co svn://svn.FreeBSD.org/ports/head /usr/ports
svn co svn://svn.freebsd.org/base/releng/9.2 /usr/src
все...


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 30 чел.
За последние 30 мин было: 78 человек
За сегодня было
2416 показов,
590 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0982 секунд
Из них PHP: 71%; SQL: 29%; Число SQL-запросов: 76 шт.
Исходный размер: 118080; Сжатая: 20427