Перевод: Сгибнев Михаил
Часто задаваемые вопросы
Часто задаваемые вопросы
Разработчики NetBSD сделали доступной текущую версию системы руководствуясь несколькими мотивами.
В целом, использование NetBSD-current позволяет получить более стабильную и доступную систему.
Доступность NetBSD-current способствует к привлечению новых людей к работе над NetBSD, позволяет пользователям видеть пути развития системы, а
разработчикам легко интегрировать в систему новые идеи.
Так же появляется возможность проводить более тщательное тестирование программного обеспечения. Пользователи NetBSD-current
посылают
отчеты об ошибках в текущих версиях и это помогает в поисках и устранении ошибок.
Поскольку люди проверяют программное обеспечение вскоре после того, как оно было написано, больше ошибок может быть найдено и устранено.
Скачать исходные тексты -current можно используя
anoncvs, через
ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/tar_files/src/, или
sup.
Также Вы можете посетить ближайшее к Вам
зеркало NetBSD. Для обновления уже скачанного используйте команду 'cvs -q update -dP' в корне дерева исходных текстов.
Пожалуйста, не забудьте использовать флажок -P для cvs, даже если Вы проверяете новую копию.
Если Вы хотите отслеживать локальные изменения дерева исходных текстов NetBSD, то Вам лучше будет установить локальный CVS, потом
экспортировать изменения sup.
Пожалуйста, не забывайте проверять
src/BUILDING и
src/UPDATING, для ознакомления с последними изменениями.
В каталоге исходных текстов запустите скрипт './build.sh -D DESTDIR -R RELEASEDIR release' с правами пользователя root.
Где DESTDIR каталог, имеющий достаточно места для установки и RELEASEDIR каталог, имеющий достаточно места для установки tarfiles.
После окончания сборки у Вас должен быть полный комплект, необходимый для установки.
Если Вы хотите провести компиляцию для другой архитектуры, добавьте к аргументам скрипта '-a ARCH'. Для получения более детальной информации смотри
BUILDING или выполните './build.sh -h'.
Этот процесс складывается из компиляции и установки нового ядра и затем следует обновление пользовательского окружения.
Пожалуйста, всегда смотрите файл
UPDATING перед началом обновления, чтобы
убедиться, что знаете обо всех произошедших изменениях.
Перезагружаемся с новым ядром
Запускаем ./build.sh distribution
Устанавливаем новое пользовательское окружение ./build.sh install=/
По желанию перезагружаемся для гарантии того, что сервисы стартуют, используя новые бинарные файлы
-
При переходе к более свежей версии -current Вы всегда должны скомпилировать и загрузить новое ядро перед установкой любых новых lib(*).
Вообще лучший подход состоит в том, чтобы пробовать новое ядро прежде, чем что ни будь еще, и если появились проблемы (смотри Kernel FAQ),
компилируйте и установите минимальные необходимые дополнительные инструментальные средства, чтобы завершить инсталляцию ядра.
Как только ядро будет установлено, просмотрите файл BUILDING, который находится в корне исходных текстов и используйте скрипт build.sh для формирования нового пользовательского окружения.
- При компилировании -current ядра не забывайте включать опцию COMPAT_ (например, COMPAT_14).
Поскольку -current отличается от последнего stable, будет добавляться код обеспечения совместимости, но только в том случае, если эта опция будет явно указана.
При минимальной установке Вы будете нуждаться в этом коде в период между этапами загрузки нового ядра и окончанием формирования утилитой build.sh нового пользовательского окружения.
- Крутые пиплы, которые используют NetBSD-current! Подпишитесь на почтовую рассылку current-users. Почтовая рассылка source-changes также представляет интерес.
Самое очевидное, это 'make build' из /usr/src/Makefile, что установит обновленные файлы 'mk', include, libs, а затем пересоберет систему.
Если Вы обновляетесь из исходных текстов, то Вы должны скомпилировать и установить новое ядро, перед тем как выполнять какие-либо другие операции.
Другие полезные переменные задокументированы в
/usr/src/share/mk/bsd.README, который устанавливается в /usr/share/mk/.
Использование 'make build' не приветствуется и не рекомендуется.
Документация относительно использования новых утилит сборки через сценарий 'build.sh' находится в файле
BUILDING.
Установка
Эти инструкции подходят для нешифрованного anoncvs соединения. Если Вы используете протокол шифрования, то см. раздел ниже.
-
Установка cvs.
Если собираемая NetBSD-current помечена датой 2000-09-04, то cvs уже установлен. Внимание: некоторые версии cvs (такие как 1.11.5) могут вызывать ошибку
при использовании флага '-z'. Подробности
- Установите переменную окружения CVSROOT, необходимую для доступа к серверу anoncvs.
- Для пользователей sh(1), ksh(1) или bash2
$ CVSROOT=:pserver:[email protected]:/cvsroot; export CVSROOT
-
$ cd /usr
$ cvs login
(Используйте пароль 'anoncvs')
Вы должны иметь права на запись в каталог, где инициируется checkout; после этого Вы можете предоставить привилегии на использование дерева другому пользователю.
Возможным путем является инициализация checkout как root, с последующей передачей дерева исходных текстов другому пользователю для использования.
- Проверяем только исходные тексты ядра:
$ cvs checkout -P src/sys
Это поместит исходные тексты ядра в /usr/src/sys. Информация по компилированию нового так же доступна.
-
Получить все дерево исходных текстов (включая ядро)
$ cvs checkout -P src
Вы получите весь код NetBSD.
Обратите внимание: значительно быстрее будет получить через FTP текущий tarballs, а уже затем выполнить cvs.
Это позволит минимизировать обьем трафика.
-
Делегировать права другому пользователю.
# chown -R user /usr/src
Обновление исходных текстов:
$ cd /usr/src
$ cvs update -dP
Обратите внимание: команда cvs checkout -d dir src (или для любого другого раздела src*) не сработает и Вы получите сообщение об ошибке подобное "existing repository ... does not match ...; ignoring module _gnusrc-cmp".
Опция -d должна быть пропущена и cvs самостоятельно создаст каталог по умолчанию.
Проверять с некоторой даты:
$ cvs checkout -D 20020501-UTC src
Проверять определенный выпуск:
$ cvs checkout -rnetbsd-1-6 src
Смотри
src/doc/BRANCHES для получения более полной информации о выпусках.
Полезные советы:
Вы должны использовать директорию obj, если хтите, чтобы cvs работал правильно. Если Вы получаете подобные ошибки:
cvs [update aborted]: could not chdir to gnu/usr.bin/gdb/gdb: Not a directory
Вы должны выполнить "make cleandir" и попробовать снова. Так же попробуйте запустить "make obj" после обновления cvs.
Если скорость Вашего соединения очень мала, то Вы можете добавить параметр -z5 (или любое другое число в диапазоне от 1 до 9) перед командой обновления (для примера "cvs -z5 update -dP") для включения
компрессии данных. Имейте в виду, что это создаст дополнительную нагрузку на сервер cvs!
Обратите внимание: некоторые версии cvs (особенно версия 1.11.5) могут выдать ошибку при использовании флага '-z'.
В случае этой ошибки обновите версию CVS или не используйте сжатие.
Вы можете поместить определенные команды в файл .cvsrc, расположенный в Вашем домашнем каталоге. Например:
cvs -q -z5
update -dP
checkout -P
diff -u
Сборка NetBSD из исходных текстов:
Считаем, что исходные тексты находятся в /usr/src и BSDOBJDIR является /usr/obj
Собираем пользовательское окружение:
# mkdir /usr/obj
# cd /usr/src
# ./build.sh -O /usr/obj -D /usr/NetBSD-new-build -T /usr/tools build
# ./build.sh -O /usr/obj -D /usr/NetBSD-new-build -T /usr/tools install=/
Когда Вы впервые формируете вашу систему, используя build.sh, набор инструментальных средств для будущего использования будет также сформирован. Любая последующая трансляция может использовать уже откомпилированные инструментальные средства, и таким образом занимать меньше времени.
И конечно, не вызывайте ./build.sh install=/ если ./build.sh build выдало ошибку.
Для обновления окружения пользователя после CVS:
# cd /usr/src
# ./build.sh -D /usr/NetBSD-new-build -O /usr/obj -T /usr/tools -u build
# ./build.sh -D /usr/NetBSD-new-build -O /usr/obj -T /usr/tools -u install=/
Это установит новые бинарные файлы на работающую ситему, перезагрузитесь, для вступления изменений в силу.
Если Вы модифицируете систему часто и хотите, чтобы компоновка непосредственно модифицировала вашу систему,то Вы можете использовать режим "expert" и проводить сборку с использованием директивы DESTDIR=/.
# ./build.sh -E -O /usr/obj -T /usr/tools -u build
Имейте в виду, что это рекомендуется использовать только опытным пользователям, так как Вы легко можете привести свою систему в состояние, когда вообще ничего не сможете откомпилировать.
Используйте этот режим, только когда абсалютно уререны в благоприятном завершении сборки.
Методы, описанные в использовании anoncvs могут также использоваться и для работы через ssh, для гарантии целостности получаемых исходных текстов.
Те серверы в
anoncvs mirror list, которые поддерживают ssh подключения, перечисляют всю необходимую для подключения информацию.
Чтобы использовать anoncvs через ssh, удалите ':pserver: ' префикс на cvsroot, и установите переменную CVS_RSH в 'ssh', используя метод, применимый для Вашего командной оболочки.
Введение
Current может быть прослежен следующим способом. Базовое дерево исходных текстов обновляется через cvs раз в неделю.
Это базовое дерево исходников импортируется в локальный репозиторий CVS. Current в этом случае будет собираться из проверенной копии репозитория.
Есть три главные причины, почему стоит так поступать:
- Отслеживаются изменения дерева исходных текстов
- Отслеживаются локальные изменения, которые обьединяются с обновленными исходными текстами
- Всегда имеется немодифицированная версия NetBSD-current, если возникают проблемы при компиляции
Единственный недостаток такого подхода - наличие трех независимых копий исходных текстов, что увеличивает расход дискового пространства и
составляет примерно 150 МБ, не считая места, необходимого для сборки.
Требования
- CVS 1.9 или более старшей версии (уже установлен, если вы используете -current после 2000-09-04). CVS 1.10 или более поздние предпочтительнее, поскольку лучше
отрабатывают обьединение.
- Установленный SUP.
- Установленный Perl 5 для запуска скриптов (дополнительно).
Подробности
Отслеживание и сборка -current состоит из 6 этапов:
- Внедрение обновлений в главное дерево исходных текстов
- Импортирование обновленных исходников в CVS и модифицирование рабочей копии исходных текстов.
- Объединение новых исходников и локальных изменений
- Сборка и установка -current
- Маркировка исходников для успешной сборки в репозитории.
Получение
Исходные тексты могут быть получены с любого NetBSD sup server и вывод SUP должен быть сохранен в файл для дальнейшего использования.
Импорт и обьединение исходных текстов
Исходники импортируются следующим образом:
$ cvs -d /misc/cvsrep import -I ! -I CVS netbsd netbsd current-date
Где date заменяется на дату проведения SUP. Опции -I ! -I CVS гарантируют, что никакой файл в исходном дереве не игнорируется кроме каталогов 'CVS'.
Это делается потому, что некоторые исходные файлы NetBSD имеют расширения, которые обычно игнорируются SUP.
Если есть конфликты с локальными исправлениями, команда импорта сообщит о них, а команда обьединения покажет их:
$ cvs checkout -jnetbsd:yesterday -jnetbsd netbsd
Команда объединения правильно объединит импортированные исходные тексты NetBSD, но не будет обрабатывать локальное удаление файлов, которые были уже удалены процессом SUP.
Чтобы правильно обработать это, необходима команда:
$ cvs update -jprevious import tag -j current-date
Где тэг previous import должен быть заменен названием тэга, используемого для предыдущего импорта cvs.
date должна быть заменена текущей датой, чтобы привести к тому же самому тэгу, который используется на текущем импорте, только что объединенном.
Конфликты, о которых сообщает команда импорта - потенциальные конфликты. Они обычно объединяются командой обновления, но в некоторых случаях происходит реальный конфликт.
В этих случаях требуется ручное объединение противоречивых строк. О реальном конфликте будет сообщено в выводе обновления cvs, вместе с именем файла.
Объединение конфликтов вручную - не простой процесс, но в большинстве случаев это может быть решено, путем удаления локальных изменений и делая файл подобно оригинальному в исходниках NetBSD.
CVS отмечает конфликты следующим образом:
<<<<<<
code from local file
======
code from imported file
>>>>>> local revision number of newly imported revision
Даже если импорт не сообщает ни о каких конфликтах, проверенная копия дерева должна быть модифицирована точно тем же самым способом, как и в случае регистрации конфликтов.
Все обновления и команды отладки должны быть сделаны в каталоге, где источники были проверены. На моей системе это - /usr/src/netbsd .
Если это - первый импорт тогда не будет никаких проверенных источников. Предположим, что мы хотим создать исходное дерево в '/usr/src/netbsd'. Следующая команда, проверит исходники и пропустит шаг слияния.
$ cd /usr/src
$ cvs -d /misc/cvsrep checkout netbsd
Сборка current
- Конфигурирование, сборка, установка нового ядра и пререзагрузка.
- Переход в корень исходных текстов -current и выполнение ./build.sh -T /usr/tools -O /usr/obj
- Возможно придется сравнить изменения, произошедшие в файлах каталого /etc
Маркировка успешной сборки
Если сборка прошла успешно и работают бинарные файлы, может быть полезным отметить исходные тексты, из которых была собрана система.
Это позволит перемещаться к работающему дереву используя единственную команду CVS, если вдруг текущее дерево становиться несобираемым.
Делается это так:
$ cvs tag successful-build-build date
Примечания
- If the NetBSD customised version of CVS, which recognises $NetBSD$ markers in files, is not used, the NetBSD revision number of the file is available for reference purposes when build problems occur.
- Последовательность sup/import/merge легко автоматизируется.
#!/usr/pkg/bin/perl
#
# Script to SUP NetBSD-current, import it into CVS and merge it with
# any local changes.
#
# NOTES:
# This script does no error handling so is not really suitable for
# non-interactive use.
#
# This script has only been test with cvs-1.10.1 and cvs-1.9.18.
#
$SRCROOT="/usr/src/netbsd";
$IMPORTROOT="/misc/import";
$CVSROOT="/misc/cvsrep";
#run the sup into a perl stream
system "/usr/sbin/sup -zsv" ; # This may need to change for none
# current systems
# now import the new files into CVS
chdir $IMPORTROOT or die "Could not cd to $IMPORTROOT\n";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
$date = localtime;
$shortdate = sprintf "%02d%02d%04d",$mday,$mon+1,1900+$year;
system "/usr/local/bin/cvs -d$CVSROOT import -I ! -m\"SUP Import $date\" netbsd netbsd current-$shortdate ";
# make the working directory the local NetBSD Tree
chdir $SRCROOT or die "Could not change to $SRCROOT directory\n";
# Now do the import.
$lastimport = `cat /usr/src/netbsd/.tag`; # `s are backquotes
$lastimport =~ s/\n//; # strip off any trailing newline in the string
system "/usr/local/bin/cvs update -j $lastimport -j
current-$shortdate ";
# Now write the current file into tag save file
open TAG,">$SRCROOT/.tag" or die "Could not open new tag file";
print TAG "current-$shortdate";
close TAG;
Этот сценарий был написан в Perl, так как это - средство создания сценариев, с которым автор имеет опыт работы.
По этому же принципу можно написать скрипт на языке shell.
Технология отслеживания current через CVS была неоднократно рассмотрена в списках рассылки NetBSD current-users. Если интересно - ищите там.
Если у Вас есть комментарии и предложения, пишите Mike Pumford
[email protected] (ведет эту тему) или на
[email protected].
Все описанные выше процедуры позволяют Вам сохранять изменения в Вашем собственном архиве, что имеет смысл только в том случае, если Вы
разрабатываете ваше собственное программное обеспечение, основанное на NetBSD. Если Вы не хотите обслуживать собственный репозиторий CVS, но
хотите отразить репозиторий CVS NetBSD, то есть четыре пути добиться этого:
Каждый из методов доставит на Вашу машину копию NetBSD CVS (т.е. RCS ,v files, not the checked out files!).
Вы можете тогда установить Ваш собственный anoncvs сервер или обращаться к локальному жесткому диску.
sup:
Если Вы уже используете sup для получения каких либо частей кода NetBSD, то просто добавьте эту строку в файл конфигурации sup.
anoncvs release=all host=sup.NetBSD.org hostbase=/ftp/pub base=/usr prefix=/usr backup use-rel-suffix compress
После этого выполните "sup /path/to/supfile anoncvs" для получения файлов.
ftp:
rsync:
Обратите внимание, что rsync достаточно нагружает наш rsync сервер и число параллельных rsync пользователей ограничено.
rsync -v -a rsync://rsync.NetBSD.org/anoncvs/
Пожалуйста, смотрите
список доступных серверов rsync
cvsup:
CVSup в настоящее время доступен не для всех платформ, на которых работает NetBSD, так как не был портирован компилятор M3.
Для i386 Вы можете получить доступ к репозиторию установив пакет cvsup и выполнив следующий конфигурационный скрипт:
*default host=cvsup.de.NetBSD.org
*default base=/usr
*default prefix=/local/NetBSD-cvs
*default release=cvs
*default delete use-rel-suffix
*default compress
netbsd
Пожалуйста, смотрите
список доступных серверов CVSup
Если Вы собираете -current, не паникуйте. Попробуйте выполнить следующие шаги:
- Прочитайте файл UPDATING, того релиза, который вы пытаетесь собрать.
- Изучите current-users archive, может быть там Вы найдете подсказку.
- Проведите обновление снова. Вполне возможно, что Вы скачивали архив во время его обновления или проблема уже устранена.
- Если проблема все еще остается, пошлите сообщение о проблеме current-users. Включите дату, время, и метод, которым Вы получили исходные тексты, так же как любые локальные изменения, которые Вы сделали.
Краткий обзор
etcupdate - сценарий, чтобы помочь пользователям сравнивать, объединять и устанавливать новую конфигурационные файлы и стартовые скрипты (файлы, найденные в etc.tgz дистрибутивном наборе) в /dev, /etc и /root после выполнения обновления операционной системы.
Обновление операционной системы может быть выполнено путем компиляции из исходных текстов или путем установки дистрибутива.
Установка etcupdate
-
Получите последнюю версию etcupdate, если NetBSD сформирована из -current, etcupdate уже установлен.
# cd /usr/pkgsrc/sysutils
# cvs update -dP etcupdate
-
Установите из pkgsrc
# cd /usr/pkgsrc/sysutils/etcupdate
# make install clean
Использование etcupdate с исходными файлами
В случае нахождения исходных текстов в /usr/src, будет достаточно такой команды:
# etcupdate
А если исходные тексты находятся в другом месте, например в /home/jdoe/netbsd/src? Это тоже не проблема, просто укажите etcupdate каталог, используя опцию s srcdir:
# etcupdate -s /home/jdoe/netbsd/src/etc
Использование etcupdate с бинарным дистрибутивом
Иногда становится невозможным модифицировать файлы конфигурации и стартовые скрипты. решение состоит в том, чтобы
извлечь желательные дистрибутивные файлы (как минимум etc.tgz) и используя директиву -b srcdir для указания etcupdate работать с дистрибутивом, а не исходными текстами
# mkdir /tmp/temproot
# cd /tmp/temproot
# tar xpzf /some/where/etc.tgz
# etcupdate -b /tmp/temproot