The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

NetBSD документация: Трэкинг NetBSD-current (netbsd build cvs make)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: netbsd, build, cvs, make,  (найти похожие документы)
From: Михаил Сгибнев <mixa(@).dreamcatcher.ru> Date: 2006-09-13 11:26:22 Subject: NetBSD документация: Трэкинг NetBSD-current


Перевод: Сгибнев Михаил

Часто задаваемые вопросы

Часто задаваемые вопросы

Почему отслеживается NetBSD-current?

Разработчики NetBSD сделали доступной текущую версию системы руководствуясь несколькими мотивами. В целом, использование NetBSD-current позволяет получить более стабильную и доступную систему.

Доступность NetBSD-current способствует к привлечению новых людей к работе над NetBSD, позволяет пользователям видеть пути развития системы, а разработчикам легко интегрировать в систему новые идеи.

Так же появляется возможность проводить более тщательное тестирование программного обеспечения. Пользователи NetBSD-current посылают отчеты об ошибках в текущих версиях и это помогает в поисках и устранении ошибок. Поскольку люди проверяют программное обеспечение вскоре после того, как оно было написано, больше ошибок может быть найдено и устранено.

Скачиваем 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 tools' с правами root. Утилиты будут собраны в tools/obj/tools./bin.
  • Собираем и устанавливаем ядро:
      
      # ./build.sh kernel=GENERIC
      # mv /netbsd /onetbsd
      # mv sys/arch//compile/GENERIC/netbsd /
      
      
  • Перезагружаемся с новым ядром
  • Запускаем ./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 также представляет интерес.

Переменные Makefile, необходимые для сборки

Самое очевидное, это 'make build' из /usr/src/Makefile, что установит обновленные файлы 'mk', include, libs, а затем пересоберет систему. Если Вы обновляетесь из исходных текстов, то Вы должны скомпилировать и установить новое ядро, перед тем как выполнять какие-либо другие операции. Другие полезные переменные задокументированы в /usr/src/share/mk/bsd.README, который устанавливается в /usr/share/mk/. Использование 'make build' не приветствуется и не рекомендуется. Документация относительно использования новых утилит сборки через сценарий 'build.sh' находится в файле BUILDING.

Отслеживание NetBSD-current через anoncvs

Установка

Эти инструкции подходят для нешифрованного anoncvs соединения. Если Вы используете протокол шифрования, то см. раздел ниже.
  1. Установка cvs. Если собираемая NetBSD-current помечена датой 2000-09-04, то cvs уже установлен. Внимание: некоторые версии cvs (такие как 1.11.5) могут вызывать ошибку при использовании флага '-z'. Подробности
  2. Установите переменную окружения CVSROOT, необходимую для доступа к серверу anoncvs.
    • Для пользователей csh(1) или tcsh
        
        	% setenv CVSROOT :pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot
        	
        
    • Для пользователей sh(1), ksh(1) или bash2
        
        	$ CVSROOT=:pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot; export CVSROOT
        	
        
    • 
      $ cd /usr
      $ cvs login
      
      
    (Используйте пароль 'anoncvs')
    Вы должны иметь права на запись в каталог, где инициируется checkout; после этого Вы можете предоставить привилегии на использование дерева другому пользователю. Возможным путем является инициализация checkout как root, с последующей передачей дерева исходных текстов другому пользователю для использования.
  3. Проверяем только исходные тексты ядра:
      
      $ cvs checkout -P src/sys
      
      
    Это поместит исходные тексты ядра в /usr/src/sys. Информация по компилированию нового так же доступна.
  4. Получить все дерево исходных текстов (включая ядро)
      
      $ cvs checkout -P src
      
      
    Вы получите весь код NetBSD.

    Обратите внимание: значительно быстрее будет получить через FTP текущий tarballs, а уже затем выполнить cvs. Это позволит минимизировать обьем трафика.
  5. Делегировать права другому пользователю.
      
      # 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 для получения более полной информации о выпусках.

Полезные советы:
  • Если Вы хотите проверить только некоторую часть дерева исходных текстов и при этом не хотите обновлять уже существующие файлы, то советуем просто создать новый каталог.
      
      $ cd /parent/dir/to/checkout/into
      $ mkdir NewName-temp
      $ cd NewName-temp
      $ cvs checkout ... src
      $ mv src ../NewName
      $ cd ..
      $ rmdir NewName-temp
      
      
  • Вы должны использовать директорию 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 могут также использоваться и для работы через ssh, для гарантии целостности получаемых исходных текстов.

Те серверы в anoncvs mirror list, которые поддерживают ssh подключения, перечисляют всю необходимую для подключения информацию.

Чтобы использовать anoncvs через ssh, удалите ':pserver: ' префикс на cvsroot, и установите переменную CVS_RSH в 'ssh', используя метод, применимый для Вашего командной оболочки.

Отслеживание NetBSD-current с использованием SUP в CVS

Введение

Current может быть прослежен следующим способом. Базовое дерево исходных текстов обновляется через cvs раз в неделю. Это базовое дерево исходников импортируется в локальный репозиторий CVS. Current в этом случае будет собираться из проверенной копии репозитория. Есть три главные причины, почему стоит так поступать:
  • Отслеживаются изменения дерева исходных текстов
  • Отслеживаются локальные изменения, которые обьединяются с обновленными исходными текстами
  • Всегда имеется немодифицированная версия NetBSD-current, если возникают проблемы при компиляции
Единственный недостаток такого подхода - наличие трех независимых копий исходных текстов, что увеличивает расход дискового пространства и составляет примерно 150 МБ, не считая места, необходимого для сборки.

Требования

  • CVS 1.9 или более старшей версии (уже установлен, если вы используете -current после 2000-09-04). CVS 1.10 или более поздние предпочтительнее, поскольку лучше отрабатывают обьединение.
  • Установленный SUP.
  • Установленный Perl 5 для запуска скриптов (дополнительно).


Подробности

Отслеживание и сборка -current состоит из 6 этапов:
  1. Внедрение обновлений в главное дерево исходных текстов
  2. Импортирование обновленных исходников в CVS и модифицирование рабочей копии исходных текстов.
  3. Объединение новых исходников и локальных изменений
  4. Сборка и установка -current
  5. Маркировка исходников для успешной сборки в репозитории.


Получение

Исходные тексты могут быть получены с любого 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

  1. Конфигурирование, сборка, установка нового ядра и пререзагрузка.
  2. Переход в корень исходных текстов -current и выполнение ./build.sh -T /usr/tools -O /usr/obj
  3. Возможно придется сравнить изменения, произошедшие в файлах каталого /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 mpumford@black-star.demon.co.uk (ведет эту тему) или на www@NetBSD.org.

Получение целого архива

Все описанные выше процедуры позволяют Вам сохранять изменения в Вашем собственном архиве, что имеет смысл только в том случае, если Вы разрабатываете ваше собственное программное обеспечение, основанное на 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, не паникуйте. Попробуйте выполнить следующие шаги:
  1. Прочитайте файл UPDATING, того релиза, который вы пытаетесь собрать.
  2. Изучите current-users archive, может быть там Вы найдете подсказку.
  3. Проведите обновление снова. Вполне возможно, что Вы скачивали архив во время его обновления или проблема уже устранена.
  4. Если проблема все еще остается, пошлите сообщение о проблеме current-users. Включите дату, время, и метод, которым Вы получили исходные тексты, так же как любые локальные изменения, которые Вы сделали.

Обновление конфигурации и стартовых скриптов с etcupdate



Краткий обзор

etcupdate - сценарий, чтобы помочь пользователям сравнивать, объединять и устанавливать новую конфигурационные файлы и стартовые скрипты (файлы, найденные в etc.tgz дистрибутивном наборе) в /dev, /etc и /root после выполнения обновления операционной системы. Обновление операционной системы может быть выполнено путем компиляции из исходных текстов или путем установки дистрибутива.

Установка etcupdate

  1. Получите последнюю версию etcupdate, если NetBSD сформирована из -current, etcupdate уже установлен.
      
      # cd /usr/pkgsrc/sysutils
      # cvs update -dP etcupdate
      
      
  2. Установите из 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
    
    

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor