OpenBSD Анонимные CVS сервера


Анонимный CVS позволяет поддерживать локальный репозиторий с исходниками OpenBSD в актуальном состоянии, учитывая изменения в репозитории OpenBSD. С его помощью можно так же отслеживать исправления ошибок, допущенных в релизе.

Анонимный CVS работает напрямую с центральным репозиторием. Это значит, что вам предлагается полный набор CVS-команд для обновления и объединения ваших изменений с другими изменениями в коде, создания diff'ов, просмотра истории изменений и других запросов к центральному репозиторию. В случае, если изменения не могут быть полностью объединены, CVS предоставляет возможность "мягкого отката", отмечая изменения в локальной копии, сохраняя немодифицированную копию ваших изменений и продолжая обновление других запрошенных модулей.

Проект OpenBSD на текущий момент имеет четыре репозитория:

Что такое CVS?

CVS это централизованная система управления версиями, используемая для работы с деревом исходных кодов OpenBSD. CVS использует центральный репозиторий для хранения исходников с их историей изменений, что позволяет разработчикам поддерживать свои локальные копии исходников с внесенными в них изменениями.

Существуют два уровня доступа к дереву исходных кодов:

Предварительная загрузка исходников

Хотя вы можете скачать себе весь репозиторий с исходниками, используя AnonCVS, можно сберечь и время и пропускную способность сети, предварительно загрузив себе тарболы с исходниками. Этот способ особенно подходит при использовании -stable, так как разница между release и -stable как правило незначительна.

Файлы с исходными кодами для загрузки с зеркал разделены на две части, чтобы сократить время загрузки для тех, кто хочет работать только с одной из них. Исходники ядра находятся в sys.tar.gz, а исходники userland - в src.tar.gz.

При выполнении следующих командах подразумевается, что вы выполнили эти инструкции, наделив не-root-пользователя правами на запись в каталогах src, ports и xenocara.

$ cd /usr/src
$ tar xzf /tmp/src.tar.gz
$ tar xzf /tmp/sys.tar.gz
$ cd /usr
$ tar xzf /tmp/ports.tar.gz
$ cd /usr/xenocara
$ tar xzf /tmp/xenocara.tar.gz

Использование CVS для загрузки или обновления исходников (source trees)

cvs(1) был разработан таким образом, чтобы у пользователей не возникало никаких проблем с загрузкой и обновлением исходников. Сначала надо решить, с каким branch вы хотите работать: с -current или -stable. В -current branch есть все последние изменения, в то время как в -stable содержится только исходники последнего релиза, плюс патчи критических багов и другие исправления проблем. Для получения дополнительной информации о flavors OpenBSD, смотрите пятую главу FAQ.

Для начала выберите анонимный CVS-сервер, которым собираетесь пользоваться. Если вы начинаете с src.tar.gz и sys.tar.gz, как указано выше, вы можете пропустить команду checkout и перейти к обновлению.

Внимание: при использовании cvs помните о том, что текущий каталог должен находится либо в корне дерева, на которое вы ссылаетесь, либо в другом месте, например в /tmp. Некоторые команды, такие как cvs checkout, могут создать произвольное поддерево (sub-tree) в текущем каталоге, и последующее обновление рекурсивно расширит это поддерево.

Загрузка исходного дерева с файлами

Следующая комада подразумевает, что вы уже входите в wsrc группу; замените anoncvs.example.org на зеркало из списка ниже.

Если вы хотите использовать -current:

$ cd /usr
$ cvs -qd anoncvs@anoncvs.example.org:/cvs checkout -P src

Если вы хотите использовать 7.6 -stable branch:

$ cd /usr
$ cvs -qd anoncvs@anoncvs.example.org:/cvs checkout -rOPENBSD_7_6 -P src

Анонимный CVS использует SSH для транспортировки данных. Пароль не нужен. Если вы впервые подключаетесь к серверу, вам будет предложено подтвердить SSH fingerprint, чтобы убедиться, что вы подключаетесь к ожидаемому серверу:

$ cvs -d anoncvs@anoncvs.spacehopper.org:/cvs checkout -P src
The authenticity of host 'anoncvs.spacehopper.org (2001:67c:15f4:a423::28)' can't be established.
ED25519 key fingerprint is SHA256:oaJ7VEyjt2EHMeixzKn9zJGiV5YlWHIUls070tKdBzI.
Are you sure you want to continue connecting (yes/no)?

Приведенный ниже список как правило включает в себя и fingerprint сервера, поэтому вы можете сравнить его с отображаемым при подключении fingerprint в качестве дополнительной проверки того, что подключаетесь к нужному серверу. Подтвердите установку соединения, и fingerprint будет сохранен (как и обычно при нормальном SSH соединении).

Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'anoncvs.spacehopper.org' (ED25519) to the list of known hosts.

Обновление существующего дерева с исходниками

Если вы используете -current:

$ cd /usr/src
$ cvs -q up -Pd -A

Если вы используете 7.6 -stable branch:

$ cd /usr/src
$ cvs -q up -Pd -rOPENBSD_7_6

Каждый раз, когда вы запустите приведенную выше команду, cvs(1) попытается синхронизировать ваш /usr/src с изменениями, добавленными на сервере. Это не поломает какие-любо локальные изменения; вместо этого cvs попытается объединить (merge) их.

Использование другого сервера

Если вы хотите обновить дерево каталогов с исходниками, которые загрузили себе первоночально с другого сервера или распаковали из тарбола, вы должны добавить -d [cvsroot] параметр cvs(1).

$ cd /usr/src
$ cvs -d anoncvs@anoncvs.example.org:/cvs -q up -Pd

Загрузка исходников, содержащих ports и xenocara

Убедитесь, что ваш пользователь входит в группу wsrc и каталог /usr/ports открыт на запись группе wsrc. Замените ports на xenocara, чтобы загрузить или обновить дерево с исходниками xenocara.

Создание Diff

Чтобы создать diff того или иного файла, после того как вы его изменили (в это примере это файл cd.c) для, к примеру, использования в отчете об ошибке:

$ cd /usr/src
$ cvs diff -u sys/scsi/cd.c > /tmp/patch

Пример использования

$ cd /tmp
$ cvs -d anoncvs@anoncvs.example.org:/cvs checkout -P src/sys/arch/sparc
[copies the files from the repository to your machine]
$ cd src/sys/arch/sparc
$ cvs log locore.s
[shows the commit log for the chosen file]
$ cvs diff -bc -r1.1 -r1.5 locore.s
[shows the changes between revisions 1.1 and rev 1.5]

Зеркалим репозиторий

Как уже упоминалось, некоторые зеркала с репозиториями поддерживают rsync. Используйте скрипт reposync, который проверяет наличие обновлений CVSROOT/ChangeLog и в некоторых случаях избегает полного сканирования каталогов, когда обновление не обнаружено. Он также поддерживает SSH port-forwarding для зеркал, где это возможно, позволяя подключаться к серверу "rsync --daemon" по аутентифицированному и зашифрованному каналу.

Установите пакет reposync, создайте нового пользователя и каталог, куда будет скачен репозиторий, а также каталог, необходимый для самого reposync:

# pkg_add reposync
# useradd cvs
# install -d -o cvs /home/cvs /var/db/reposync

После этого следующая команда может использоваться для зеркалирования или обновления репозитория. Если выбранное вами зеркало не поддерживает SSH port-forwarding, либо переключитесь на другое зеркало, либо используйте «reposync -p».

# su -m cvs -c "reposync rsync://mirror.example.org/cvs /home/cvs"

После создания зеркала можно использовать локальный каталог в качестве вашего cvsroot, например:

$ cd /usr/src
$ cvs -d /home/cvs -q up -Pd
В марте 2024 года размер репозиториев был таким:
$ du -shc *
224M    CVSROOT
1.6G    ports
3.9G    src
936M    www
2.3G    xenocara
9.0G    total

Общий размер репозитория в настоящее время увеличивается примерно на 530 МБ в год. Репозиторий src увеличивается примерно на 220 МБ.

Доступные анонимные CVS сервера

Список anoncvs серверов можно найти на оригинальной английской странице. Нет смысла дублировать этот список сюда, так как его синхронизация займет слишком много сил и времени.

Используйте traceroute(8) чтобы найти ближайший к вам сервер. При возникновении проблем с сервером свяжитесь с его мейнтейнером.

В случае, если вы в целях безопасности не хотите или не можете использовать исходящие SSH-соединения на 22 порт (используется по умолчанию), некоторые CVS-серверы позволяют подключаться на альтернативный порт (обычно 2022). Об этом должно быть указано в списке серверов. Для использования другого порта настройте ваш ssh-клиент добавив Host секцию в $HOME/.ssh/config, например:

Host anoncvs.example.org
    Port 2022

Настройка anoncvs зеркала

Anoncvs зеркала в настоящее время требуется около 9 ГБ свободного места на диске (и со временем будут требовать больше!). И для каждого anoncvs-пользователя требуется до 64 МБ swap (при условии, что пользователь выполняет сложные операции; в то время как простые операции используют меньше ресурсов, anoncvs по-прежнему требует гораздо большее ресурсов чем ftp). Такие anoncvs-машины должны иметь быстрое и стабильное сетевое соединение. Ознакомьтесь с документом, где описывается процесс настройки anoncvs-серверов.

Пару слов вместо заключения

После обновления дерева с исходниками вы должны прочитать комментарии в верхней части /usr/src/Makefile файла, прежде чем пытаться выполнить сборку. Кроме того, вы должны собрать новое ядро прежде чем делать make build, если это возможно. В некоторых случаях может потребоваться пересобрать и установить утилиту config, прежде чем вы сможете собрать ядро. Например, если config GENERIC по той или иной причине у вас не сработает.

Важно отметить, что обновление с release до current путем пересборки/компиляции исходников не поддерживается. Поэтому рекомендуется сначала установить последний snapshot, прежде чем пытаться собрать current из исходников.