[FAQ-Index] [Глава 14 - Работа с дисками]
Большая часть стороннего софта доступна для использования в OpenBSD. Для того, чтобы сделать эти программы простыми в установке и управлении, а также помочь им следовать политике и целям OpenBSD, этот сторонний софт портируется на OpenBSD. Такое портирование включает в себя множество различных вещей. К примеру: создание софта, использующего характерное для OpenBSD расположение файлов (конфигурационные файлы хранятся в /etc), приспосабливание к разделяемым библиотекам, создание безопасного, насколько это возможно, софта и так далее.
Конечным результатом такого портирования является готовый к установке бинарный пакет. Основной целью системы пакетов является содержание установленного софта, таким способом, чтобы его можно было в любое время легко обновить или удалить. Такой подход, без потери файлов, помогает пользователям поддерживать систему в чистоте. Система пакетов также помогает гарантировать, что ничего не будет удалено случайным образом, останавливая работу софта должным образом. Другая особенность заключается в том, что пользователям необязательно собирать софта из исходников, так как пакеты содержат уже скомпилированный и готовый к работе на OpenBSD софт. За считанные минуты может быть скачано и правильно установлено большое количество пакетов.
Коллекция пакетов и портов не проходит столь тщательного аудита как ОС OpenBSD. Но все же мы стремимся сохранять качество коллекции пакетов на высоте, мы просто не имеем достаточного ресурса людей, чтобы гарантировать такой же уровень работоспособности и безопасности. Конечно, обновления безопасности для различных приложений коммитятся в дерево портов как можно скорее, а также собираются пакеты с security updates, которые доступны в качестве снапшотов (snapshots) для -current ветки.
Пакеты - это бинарники наиболее используемого стороннего доступного софта. Пакеты могут легко управляться с помощью различных утилит, таких как pkg*:
Допустим для корректного запуска приложению X требуется наличие приложений Y и Z. Приложение X говорит о своей зависимости от этих приложений, именно по этому Y и Z называют зависимостями X. Y может требовать наличия P и Q, а Z в свою очередь наличие R для корректного функционирования. Таким образом формируется дерево зависимостей.
Пакеты выглядят подобно простым .tgz пакетам. Но есть одно очень важное отличие: пакет содержит дополнительную информацию для распаковки. Эта информация используется pkg_add(1) для нескольких целей:
Вы можете "упростить себе жизнь" используя переменную окружения PKG_PATH. Просто укажите местоположение ваших пакетов, и pkg_add(1) автоматически просмотрит эту директорию в поиске необходимого пакета, а так же скачает и установит все необходимые зависимости для этого пакета.
Список возможных мест для скачивания пакетов приведен в следующем разделе.
Пример 1: Получение с CD-ROM, смонтированного в /mnt/cdrom:
$ export PKG_PATH=/mnt/cdrom/5.2/packages/`machine -a`/
Пример 2: Получение с ближайшего FTP зеркала
$ export PKG_PATH=ftp://your.ftp.mirror/pub/OpenBSD/5.2/packages/`machine -a`/
Хорошей практикой является определение переменной PKG_PATH в ~/.profile. Она определяется подобно переменной окружения PATH, т.е. может содержать и несколько каталогов. Не забывайте только, что, начиная с OpenBSD 4.4, каждый путь в PKG_PATH должен содержать в конце обратный слэш (/). Такой путь pkg_add(1) раскроет верно, даже если URL содержит двоеточие. Если первая запись в PKG_PATH ошибочна, то будет использована следующая, и так до тех пор, пока пакет не будет найден. Если все записи ошибочны, то будет выдана ошибка.
Использование machine(1) в командной строке позволяет автоматически определить архитектуру машины, а следовательно и устанавливаемого пакета. Конечно, если вы используете snapshots, вы должны заменить »5.2« на »snapshots«.
Если у вас установлена коллекция портов, вы можете быстро найти необходимый пакет, используя поиск по дереву портов.
Вы заметите, что некоторые пакеты доступны в нескольких различных вариантах, называемых »flavors«. Другие части некоторых приложений могут быть установлены отдельно. Они называются »subpackages«. Более детально они будут рассмотрены в разделе "Использование flavors и subpackages". Флэйворс означает конфигурирование с различной устновкой опций. Сейчас многие пакеты имеют флэйворс, к примеру: поддержка БД, поддержка системы без среды X, поддержка SSL или IPV6. Каждый флэйвор пакета будет иметь различный суффикс в названии этого пакета. Более детальную информацию об именах пакетов можно прочесть в packages-specs(7).
Замечание: Не все пакеты доступны на наших FTP серверах. Некоторые приложения просто не работают на всех архитектурах, некоторые не могут распространятся через FTP (или CD-ROM) по лицензионным причинам. Также возможно, что порт имеет множество различных комбинаций flavors, и у проекта OpenBSD просто не хватает ресурсов собрать их все. Если вам необходима комбинация, которая не доступна, то вы можете собрать порт из исходников. Для более подробной информации как это сделать прочтите Использование flavors и subpackages в разделе портов этого документа.
$ sudo pkg_add -v screen-4.0.3p1 parsing screen-4.0.3p1 installed /etc/screenrc from /usr/local/share/examples/screen/screenrc | 71% screen-4.0.3p1: complete
В этом примере используется флаг -v для отображения более подробной информации. Эта опция не нужна, но она помогает при отладке, и была установлена для демонстрации, что же все таки делает pkg_add(1). Заметьте, в сообщении упоминается /etc/screenrc. Многократная установка флага -v выдаст еще более детальную информацию.
$ sudo pkg_add -i screen
Ambiguous: screen could be screen-4.0.3p1 screen-4.0.3p1-shm screen-4.0.3p1-static
Choose one package
0: <None>
1: screen-4.0.3p1
2: screen-4.0.3p1-shm
3: screen-4.0.3p1-static
Your choice: 1
screen-4.0.3p1: complete
Для некоторых пакетов отображается важная информация о конфигурации или использовании приложения на OpenBSD. Если информация действительно важна, то будет показана, даже если флаг -v не указан. Вот один из таких случаев:
$ sudo pkg_add ghostscript-fonts-8.11 ghostscript-fonts-8.11: complete You may wish to update your font path for /usr/local/share/ghostscript/fonts --- ghostscript-fonts-8.11 ------------------- To install these fonts for X11, just make sure that the fontpath lists the 75dpi or 100dpi bitmap fonts before the ghostscript fonts, and make sure you have the string ":unscaled" appended to the bitmap font's fontpath. This way, the bitmap fonts will be used if they match, and the Type 1 versions will be used if the font needs to be scaled. Below is the relevant section from a typical xorg.conf file. FontPath "/usr/X11R6/lib/X11/fonts/misc/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled" FontPath "/usr/local/lib/X11/fonts/ghostscript/" FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
А теперь продолжим примером пакета, имеющего зависимости:
Опять мы используем флаг -v для того, чтобы увидеть что происходит. После исследования распаковочной информации, были сначала найдены и установлены необходимые зависимости. Вы также можете увидеть, что был установлен пакет gettext, который имеет зависимость libiconv. Прежде чем установить пакет gettext извлечена распаковочная информацию и проверено наличие установленного libiconv.$ sudo pkg_add -v tin-1.8.2p0 parsing tin-1.8.2p0 Dependencies for tin-1.6.2 resolve to: gettext-0.14.6, libutf8-0.8, pcre-6.4p1, libiconv-1.9.2p3 (todo: libiconv-1.9.2p3,gettext-0.14.6,pcre-6.4p1,libutf8-0.8) tin-1.8.2p0:parsing libiconv-1.9.2p3 tin-1.8.2p0:libiconv-1.9.2p3: complete tin-1.8.2p0:parsing gettext-0.14.6 Dependencies for gettext-0.14.6 resolve to: expat-2.0.0, libiconv-1.9.2p3 (todo: expat-2.0.0) tin-1.8.2p0:parsing expat-2.0.0 tin-1.8.2p0:expat-2.0.0: complete tin-1.8.2p0:gettext-0.14.6: complete tin-1.8.2p0:parsing pcre-6.4p1 tin-1.8.2p0:pcre-6.4p1: complete tin-1.8.2p0:parsing libutf8-0.8 tin-1.8.2p0:libutf8-0.8: complete tin-1.8.2p0: complete
Также возможно указывать несколько имен пакета в строке, они будут установлены по очереди со всеми зависимостями.
Если в силу каких-то причин, вы не используете переменную PKG_PATH, то можно указать абсолютный путь к пакету в командной строке. Этот путь может быть как локальным путем, так и ссылкой на FTP, HTTP, или SCP. Посмотрим пример установки через FTP в следующем примере:
$ sudo pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/5.2/packages/`machine -a`/screen-4.0.3p1.tgz screen-4.0.3p1: complete
Флаг -v не был использован, поэтому отобразились только необходимые сообщения. Обратим внимание - имя файла завершается добавлением суффикса .tgz. Суффикс можно опустить, pkg_add(1) добавитего автоматически.
Замечание: Не все архитектуры имеют одинаковые пакеты. Некоторые порты не работают на определенных архитектурах, и производительность ограничена числом пакетов, которые могут быть использованы на других.
Внимание, pkg_add(1) не перезаписывает модифицированные конфигарционные файлы повторно устанавливаемых пакетов. Информацию о таких файлах можно получить, используя флаг -v:
Временами вы можете сталкиваться с ошибкой, приведенной в следующем примере:$ sudo pkg_add -v screen-4.0.3p1 parsing screen-4.0.3p1 The existing file /etc/screenrc has NOT been changed** | 71% It does NOT match the sample file /usr/local/share/examples/screen/screenrc You may wish to update it manually screen-4.0.3p1: complete
$ sudo pkg_add xv-3.10ap4
xv-3.10ap4:jpeg-6bp3: complete
xv-3.10ap4:png-1.2.14p0: complete
xv-3.10ap4:tiff-3.8.2p0: complete
Can't install xv-3.10ap4: lib not found X11.9.0
Even by looking in the dependency tree:
tiff-3.8.2p0, jpeg-6bp3, png-1.2.14p0
Maybe it's in a dependent package, but not tagged with @lib ?
(check with pkg_info -K -L)
If you are still running 3.6 packages, update them.
Установка xv была прервана pkg_add(1) во время установки зависимостей.
Сработал еще один из механизмов системы безопасности, доступный с версии
OpenBSD 3.7. Мета-информация содержит так же информацию о разделяемых
библиотеках (shared libraries), если одна из таких библиотек не будет
найдена, пакет не будет установлен.
Для разрешения конфликтов такого типа необходимо найти и установить требуемые библиотеки в вашу систему. Что можно проверить:
$ pkg_info aterm-0.4.2p1 color vt102 terminal emulator with transparency support bzip2-1.0.4 block-sorting file compressor, unencumbered expat-2.0.0 XML 1.0 parser written in C fluxbox-0.9.15.1p0 window manager based on the original Blackbox code gettext-0.14.6 GNU gettext imlib2-1.3.0 image manipulation library jpeg-6bp3 IJG's JPEG compression utilities libiconv-1.9.2p3 character set conversion library libltdl-1.5.22p1 GNU libtool system independent dlopen wrapper libungif-4.1.4p0 tools and library routines for working with GIF images libutf8-0.8 provides UTF-8 locale support mutt-1.4.2.2i tty-based e-mail client pcre-6.4p1 perl-compatible regular expression library png-1.2.14p0 library for manipulating PNG images screen-4.0.3p1 multi-screen window manager tcsh-6.14.00p1 extended C-shell with many useful features tiff-3.8.2p0 tools and library routines for working with TIFF images tin-1.8.2p0 threaded NNTP and spool based UseNet newsreader
Когда задано имя пакета (или его расположение), pkg_info(1) отобразит о нем более подробную информацию.
Допустим вы имели старую версию пакета unzip перед обновлением OpenBSD 5.1 до 5.2. Теперь вы можете легко обновить его более новым пакетем из 5.2 следующим образом:
$ sudo pkg_add -u unzip unzip-5.52p0 (extracting): complete unzip-5.52 (deleting): complete unzip-5.52p0 (installing): complete Clean shared items: complete
Использование pkg_add(1) с флагом -u и без указания имени пакета приводит к проверке всех установленных пакетов на предмет обновления. Если пакет имеет зависимости, то они так же будут проверены для обновления.
Замечание: Флаг -u использует переменную окружения PKG_PATH. Если она не установлена, то pkg_add(1) не сможет найти обновления.
Начиная с OpenBSD 4.2 имеется несколько записей в PKG_PATH. Это не означает, что для обновления будут использованы они все. Напротив, pkg_add(1) остановится на первом найденном значении.
Если в системе имеются модифицированные конфигурационные файлы старой версии пакета, то они не будут затронуты при обновлении. Однако, вы можете заменить их файлами по умолчанию, передав pkg_add(1) флаг -c.
Для удаления пакета просто возьмите имя пакета, показываемое pkg_info(1) (смотрите Просмотр установленных пакетов выше) и используйте pkg_delete(1). В примере ниже был удален пакет screen. Запомните, что в некоторых случаях есть файлы, которые нужно удалить, но которые не удалил pkg_delete(1). Так же как и в утилите pkg_add(1), вы можете использовать флаг -v для получения более подробной информации.
$ sudo pkg_delete screen screen-4.0.3p1: complete Clean shared items: complete
Замечание: Чаще всего необязательно указывать версию или flavors в имени пакета, так как pkg_delete(1) обычно в состоянии найти полное имя пакета. Необходимо указывать полное имя пакета (к примеру screen-4.0.3p1) только если возможна двусмысленность из-за множества установленных пакетов с таким же названием. В этом случае pkg_delete(1) не сможет узнать какой пакет удалить.
К сведению, pkg_delete(1) не удалит конфигурационные файлы, если они были модифицированы. Об этом вам будет сообщено как указано ниже:
$ sudo pkg_delete screen screen-4.0.3p1: complete Clean shared items: complete --- screen-4.0.3p1 ------------------- You should also remove /etc/screenrc (which was modified)
Если вы желаете удалить такие конфигурационные файлы автоматически, передайте pkg_add(1) флаг -c.
$ sudo pkg_add screen-4.0.3p1 screen-4.0.3p1: complete Adjusting md5 for /usr/local/info/screen.info-3 from 49fb3fe1cc3a3b0057518459811b6dac to 3b9c7811244fb9f8d83bb27d3a0f60d8 /usr/sbin/pkg_add: Installation of screen-4.0.3p1 failed , partial installation recorded as partial-screen-4.0.3p1
Хорошей идеей является удаление "частичных" пакетов из системы и устранение потенциальных проблем, приводящих к ошибке. Это признак того, что у вас нет чистой системы с софтом, установленным из пакетов, возможно пакеты смешались с другим софтом, установленным из исходников напрямую.
ВАЖНОЕ ЗАМЕЧАНИЕ:: Использование дерева портов педназначается для продвинутых пользователей. Для всех рекомендуется использование бинарных пакетов. НЕ задавайте детских вопросов в рассылке, подобных "How can I get the ports tree working?". Если у вас есть вопрос по дереву портов, то это подразумевает, что вы прочитали страницы man + этот FAQ, и вы готовы к работе с ними.
Кроме Makefile, каждый порт также содержит:
Вся эта информация хранится в /usr/ports, в котором есть три подкаталога:
Wenn ein Benutzer make(1) in einem Unterverzeichnis einer speziellen Portierungen aufruft, dann wird das System rekursiv den Abhängigkeitsbaum durchgehen und prüfen, ob alle benötigten Abhängigkeiten bereits installiert wurden, die fehlenden Abhängigkeiten übersetzen und installieren und dann mit der Erzeugung der gewünschten Portierung fortsetzen. All dies passiert in dem Arbeitsverzeichnis, das die Portierung erstellt. Normalerweise ist dies unterhalb von ${WRKOBJDIR}, das den Standardwert /usr/ports/pobj hat, was aber überschrieben werden kann (siehe Konfiguration des Portierungssystems). Wenn WRKOBJDIR explizit entfernt wurde, so wird stattdessen ein Unterverzeichnis des Portierungs-Hauptverzeichnisses (Paketname mit vorangestelltem »w-«) benutzt.
Замечание: порты никогда не устанавливаются непосредственно в систему! Для их установки используется fake installation directory. Всё, что установится в него, собирается вместе в пакет (который сохраняется в подкаталоге packages/ дерева портов, как упоминалось ранее). Установка порта в действительности означает: создание пакета и его установку!
Подробная информация о системе портов может быть найдена на страницах man:
| Источник | Form | Flavors | |||
| -release | -stable | snapshots | -current | ||
| CD-ROM | .tar.gz | x | - | - | - |
| FTP зеркала | .tar.gz | x | - | x | - |
| AnonCVS | cvs checkout | x | x | - | x |
На CD-ROM или зеркале FTP найдите файл ports.tar.gz. Вы должны его распаковать в /usr/, что приведет к созданию /usr/ports и вложенной структуры. К примеру:
$ cd /tmp $ ftp ftp://ftp.openbsd.org/pub/OpenBSD/5.2/ports.tar.gz $ cd /usr $ sudo tar xzf /tmp/ports.tar.gz
Snapshot'ы доступны на наших FTP-зеркалах и создаются ежедневно -current деревья портов. Также вы можете найти snapshots в pub/OpenBSD/snapshots. Если вы используете snapshot дерева портов, вы должны использовать snapshot OpenBSD. Не забывайте синхронизировать версии OpenBSD и портов!
Для дополнительной информации о получении дерева портов читайте страницу о AnonCVS, где содержатся информация о доступных серверах, а также примеры его использования.
ВНИМАНИЕ: В этом разделе рассказывается о некоторых глобальных установках для сборки приложений из портов. Вы можете пропустить этот раздел, но тогда вам придется запускать от root многие из вызовов make(1), приведенные в примерах инструкции.
Поскольку проект OpenBSD не имеет ресурсов для полного аудита кодов всех программ, содержащихся в дереве портов, вы можете сконфигурировать систему портов для принятия дополнительных мер безопасности. Инфрастуктура портов может быть построена от обычного пользователя, и только несколько шагов потребуют прав root. Например fake и install make targets. Однако, поскольку права root все равно потребуются на определенном этапе, система портов не сможет защитить вас при сборке вредоносного приложения.
SUDO=/usr/bin/sudo
# chgrp -R wsrc /usr/ports
# find /usr/ports -type d -exec chmod g+w {} \;
Это предписывает процедуре сборки находиться в разрешенных каталогах и предотвращает запись в недопустимых местах, таким образом риск повреждения системы значительно снижается. Обратите внимание, использование systrace(1) добавит ко времени на сборку примерно 20%.USE_SYSTRACE=Yes
Также возможно использование доступного только для чтения дерева портов, разрешив запись только в указанные вами необходимые для сборки каталоги:
Если необходимо, вы можете также сменить владельца этих каталогов на локального пользователя и группу так, чтобы система портов могла создать директории от обычного пользователя.WRKOBJDIR=/usr/obj/ports DISTDIR=/usr/distfiles PACKAGE_REPOSITORY=/usr/packages
Результат поиска будет содержать краткое описание каждого найденного приложения: имя порта, путь к порту, краткому описанию, ментейнера порта, ключи, зависимости library/build/runtime, архитектуры, на которых порт работает.$ cd /usr/ports $ make search key=rsnapshot Port: rsnapshot-1.3.1p0 Path: net/rsnapshot Info: remote filesystem snapshot utility Maint: Antoine Jacoutot <ajacoutot@openbsd.org> Index: net sysutils L-deps: B-deps: :net/rsync R-deps: :devel/p5-Lchown :net/rsync Archs: any
Этот механизм очень прост, в нем используется awk(1). Начиная с OpenBSD 4.0 создан новый механизм, порт "sqlports", позволяющий осуществлять поиск с помощью SQL. Это база данных SQLite о инфраструктуре портов, которую нужно создать. Порт sqlports содержит скрипт для генерации базы данных, который может быть взят за основу при создании баз данных в разных форматах.
Просто используйте pkg_add(1) для пакета sqlports, и, в этом случае, запустится sqlite3. Пример сессии выглядит примерно так:
Приведен пример, конечно, очень простого поиска. SQL позволяет гораздо большее, включая зависимости, конфигурационные опции, используемые библиотеки и так далее.$ sqlite3 /usr/local/share/sqlports SQLite version 3.3.12 Enter ".help" for instructions sqlite> SELECT FULLPKGNAME,COMMENT FROM Ports WHERE COMMENT LIKE '%statistics%'; Guppi-0.40.3p1|GNOME-based plot program with statistics capabilities mailgraph-1.12|a RRDtool frontend for Postfix statistics R-2.4.1|clone of S, a powerful math/statistics/graphics language py-probstat-0.912p0|probability and statistics utilities for Python darkstat-3.0.540p1|network statistics gatherer with graphs pfstat-2.2p0|packet filter statistics visualization tcpstat-1.4|report network interface statistics wmwave-0.4p2|Window Maker dockapp to display wavelan statistics diffstat-1.43p0|accumulates and displays statistics from a diff file sqlite>
$ cd /usr/ports/net/rsnapshot $ make install ===> Checking files for rsnapshot-1.2.9 >> rsnapshot-1.2.9.tar.gz doesn't seem to exist on this system. >> Fetch http://www.rsnapshot.org/downloads/rsnapshot-1.2.9.tar.gz. 100% |**************************************************| 173 KB 00:02 >> Size matches for /usr/ports/distfiles/rsnapshot-1.2.9.tar.gz >> Checksum OK for rsnapshot-1.2.9.tar.gz. (sha1) ===> rsnapshot-1.2.9 depends on: rsync-2.6.9 - not found ===> Verifying install for rsync-2.6.9 in net/rsync ===> Checking files for rsync-2.6.9 >> rsync-2.6.9.tar.gz doesn't seem to exist on this system. >> Fetch ftp://ftp.samba.org/pub/rsync/old-versions/rsync-2.6.9.tar.gz. 100% |**************************************************| 792 KB 00:31 >> Size matches for /usr/ports/distfiles/rsync-2.6.9.tar.gz >> Checksum OK for rsync-2.6.9.tar.gz. (sha1) ===> Verifying specs: c ===> found c.40.3 ===> Extracting for rsync-2.6.9 ===> Patching for rsync-2.6.9 ===> Configuring for rsync-2.6.9 [... Schnipp ...] ===> Building for rsync-2.6.9 [... Schnipp ...] ===> Faking installation for rsync-2.6.9 [... Schnipp ...] ===> Building package for rsync-2.6.9 Link to /usr/ports/packages/i386/ftp/rsync-2.6.9.tgz Link to /usr/ports/packages/i386/cdrom/rsync-2.6.9.tgz ===> Installing rsync-2.6.9 from /usr/ports/packages/i386/all/rsync-2.6.9.tgz rsync-2.6.9: complete ===> Returning to build of rsnapshot-1.2.9 ===> rsnapshot-1.2.9 depends on: rsync-2.6.9 - found ===> Extracting for rsnapshot-1.2.9 ===> Patching for rsnapshot-1.2.9 ===> Configuring for rsnapshot-1.2.9 [... Schnipp ...] ===> Building for rsnapshot-1.2.9 [... Schnipp ...] ===> Faking installation for rsnapshot-1.2.9 [... Schnipp ...] ===> Building package for rsnapshot-1.2.9 Link to /usr/ports/packages/i386/ftp/rsnapshot-1.2.9.tgz Link to /usr/ports/packages/i386/cdrom/rsnapshot-1.2.9.tgz ===> rsnapshot-1.2.9 depends on: rsync-2.6.9 - found ===> Installing rsnapshot-1.2.9 from /usr/ports/packages/i386/all/rsnapshot-1.2.9.tgz rsnapshot-1.2.9: complete
Как мы видим, система портов многие вещи делает автоматически. Это получение, распаковка, наложение патчей на исходный код, конфигурирование и сборка (компиляция) из исходников, установка в заданное место, сборка пакета (регистрация в списке пакетов) и установка готового пакета в систему (обычно в /usr/local/). Все это делается рекурсивно для всех зависимостей порта. Обратите внимание на »===> Verifying install for ...« и »===> Returning to build of ...« в выводе команды, указывающих на прохождение по дереву портов.
Если предыдущая версия устанавливаемого приложения уже установлена в систему вы дожны использовать make update вместо make install. Это вызовет исполнение pkg_add(1) с ключом -r.
Внимание: Большие приложения могут потребовать значительных системных ресурсов. Хороший пример - компиляторы вроде GCC 4.0 или Java 2 Software Development Kit. Если вы получили сообщение об ошибке "out of memory" при сборке порта, это скорее всего вызвано одной из двух причин:
Вы также можете очистить рабочие каталоги всех зависимостей:$ make clean ===> Cleaning for rsnapshot-1.2.9
Если вы желаете очистить исходные коды дистрибутивов использованного порта:$ make clean=depends ===> Cleaning for rsync-2.6.9 ===> Cleaning for rsnapshot-1.2.9
Если вы собирали различные flavor порта, вы можете очистить рабочие каталоги всех flavor:$ make clean=dist ===> Cleaning for rsnapshot-1.2.9 ===> Dist cleaning for rsnapshot-1.2.9
Вы также можете установить переменную, с помощью которой чистка системы после сборки пакета будет происходить автоматически:$ make clean=flavors
$ make package BULK=Yes
Эта команда используе pkg_delete(1) для удаления соответствующего пакета из системы. При необходимости вы можете удалить пакет и повторно его установить, используя команду reinstall:$ make uninstall ===> Deinstalling for rsnapshot-1.2.9 rsnapshot-1.2.9: complete Clean shared items: complete
Если вы хотите удалить пакеты, которые вы только что собрали, сделайте следующее:$ make reinstall ===> Cleaning for rsnapshot-1.2.9 /usr/sbin/pkg_delete rsnapshot-1.2.9 rsnapshot-1.2.9: complete Clean shared items: complete ===> Installing rsnapshot-1.2.9 from /usr/ports/packages/i386/all/rsnapshot-1.2.9.tgz rsnapshot-1.2.9: complete
$ make clean=packages ===> Cleaning for rsnapshot-1.2.9 rm -f /usr/ports/packages/i386/all/rsnapshot-1.2.9.tgz
Первый механизм - flavors. Flavor обычно указывает на опции при компиляции приложения. К примеру, некоторые приложения имеют "no_x11" flavor, указывающий, что приложение будет использоваться без X. Некоторые оболочки имеют "static" flavor, что указывает на сборку статический слинкованой версии. Некоторые порты могут быть собранны с использованием различных средств разработки графических приложений. Другие примеры: работа с разными базами данных, различными сетевыми опциями (SSL, IPv6, ...), различными размерами страниц и т.д.
Резюме: наиболее вероятно, что вы будете использовать flavors когда нет пакета с необходимым для вас flavor. В этом случае вы зададите желаемый flavor и соберете порт самостоятельно.
Каждый flavor порта будет иметь свой рабочий каталог для сборки и каждый собранный пакет будет иметь свое соответствующее название для избежания бардака. Чтобы просмотреть различные flavors порта, смените каталог и выполните команду:
Также вы должны не забывать про файл DESCR, где описываются имеющиеся flavors.$ make show=FLAVORS
Второй механизм называется subpackages. Собирающий порт может решить создать subpackages для логически разделенных различных составляющих того же самого приложения. Часто можно наблюдать subpackages для серверной и клиентской частей приложения. Иногда значительная по размеру документация выделяется в отдельный подпакет для экономии дискового пространства. Дополнительная функциональность, повлекшая большое количество зависимостей часто делается отдельным пакетом. Разработчик порта также должен принять решение, какие subpackages должны входить в главный, устанавливаемый по умолчанию subpackage. Другие примеры: наборы тестовых программ, различные модули для поддержки разных опций и т.д.
Резюме: Некоторые порты разделены на несколько различных пакетов. При использовании make install повлечет только установку основного subpackage.
Список пакетов, собранных в порт:
$ make show=PKGNAMES
При использовании make install будет установлен только основной subpackage. Для установки всех:
$ make install-all
Показать список различных subpackages, доступных для порта:
Можно выбрать какие subpackage'ы установить для порта. После некоторых проверок будет вызвана pkg_add(1) для установки желаемых subpackage.$ make show=MULTI_PACKAGES
$ env SUBPACKAGE="-server" make install
Примечание: механизм subpackages работает с пакетами, не изменяя конфигурационные параметры перед сборкой порта. Для их изменения используйте flavors.
будет читать список пакетов pkgpath(7) из ~/localports и собирать их. Он может также установить пакеты, после того как они будут собранны. По умолчанию ~/localports выглядит так:/usr/ports/infrastructure/bin/dpb -P ~/localports
Если вы не предоставите список портов, который хотите собрать в пакеты, в командной строке или через параметр -P или -I, dpb(1) соберет все из дерева портов.net/cvsync www/mozilla-firefox net/rsync net/nfsen textproc/mupdf misc/magicpoint lang/sbcl editors/emacs23
Это означает, что все, что вам нужно сделать, это убедиться, что вы используете правильную ветку дерева портов, и собираете ПО для него. Не забывайте синхронизировать дерево исходников, используемое вами, с CVS, а также подпишитесь на почтовую рассылку, чтобы всегда быть в курсе последних обновлений безопасности (security updates) в дереве портов.
Не забывайте также, что обновления безопасности поступают сначала в -current, а уже затем в -stable ветку.
Чтобы начать сборку подписанного пакета, мы должны сначала создать CA (»root CA«, »Certificate Authority«) и ключ. Для примера, мы будем использовать срок действия в 10 лет.
Теперь мы собираемся создать build-сертификат и ключ, который будет использоваться для подписи наших пакетов. Для примера, мы будем использовать срок действия в 1 год. Мы также создадим соответствующий запрос на подпись сертификата, который будет использоваться нашими CA для подписи сертификата.# openssl req -x509 -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/pkgca.key -out /etc/ssl/pkgca.pem
Теперь давайте подпишем сертификат, с помощью CA, который мы создали в первом шаге.# openssl genrsa -out /etc/ssl/private/pkg.key 2048 # openssl req -new -key /etc/ssl/private/pkg.key -out /etc/ssl/private/pkg.csr
# openssl x509 -req -days 365 -in /etc/ssl/private/pkg.csr -CA /etc/ssl/pkgca.pem -CAkey /etc/ssl/private/pkgca.key -CAcreateserial -out /etc/ssl/pkg.crt # rm /etc/ssl/private/pkg.csr
Наконец, мы добавляем следующую строку в /etc/mk.conf для установки по умолчанию опции сборки с подписью.
PKG_CREATE=/usr/sbin/pkg_create -s x509 -s /etc/ssl/pkg.crt -s /etc/ssl/private/pkg.key
При установке подписанных пакетов, вы увидите дополнительную строку в конце вывода, которая проинформирует вас о количестве установленных подписаных пакетов.
$ sudo pkg_add vte-0.24.3.tgz vte-0.24.3: ok Packages with signatures: 1
Если у вас возникли проблемы с подписанными пакетами (например, истек срок действия сертификата... ), вы можете (пере-)установить и/или удалить их с помощью одной из следующих команд:
$ sudo pkg_add -r -D installed PKGNAME $ sudo pkg_add -D nosig PKGNAME $ sudo pkg_delete -q PKGNAME
Скорее всего вы используете не синхронизованные версию системы и дерево портов.
То есть?
Еще одна частая проблема - отсутствие установленной X11. Даже если собираемый вами порт не имеет прямых зависимостей с X11, его subpackage или их зависимости могут требовать библиотеки (headers + libraries) X11. Собранные порты не поддерживаются на системах без X11, поэтому вы должны принимать это во внимание. Тем не менеее, есть много портов с flavor »no_x11«, которые не требуют установки X11.
ВНИМАНИЕ: НЕ ПУТАЙТЕ версии портов и используюмую ветку OpenBSD!
Смешивая их, рано или поздно (скорее всего рано) вы погрязнете в самых разнообразных ошибках системы и конфликтах пакетов.
Но у меня же -current!
Коллекция портов поддерживается добровольцами. Иногда проект просто не имеет ресурсов разработчиков, чтобы поддерживать актуальность порта. Разработчики зачастую собирают те пакеты, которые считают нужными и имеют возможность испытать на имеющемся оборудовании. Ваши пожертвования помогают увеличить количество платформ и портов. Некоторые отдельные порты могут быть не так актуальны в связи с этим. Коллекция портов может содержать январьскую версию программы в то время как новый релиз программы выпущен разработчиком в мае, три месяца назад. Часто это мотивированное решение; новая версия может иметь нерешенные на данный момент мантейнером проблемы работы на OpenBSD, или приложение работает хуже, чем более старая версия: OpenBSD может иметь цели отличные от целей разработчиков других проектов, которые приводят к результату, неприемлимому c точки зрения разработчиков OpenBSD. Обновление также может быть отложено, исходя из соображений, что в новую версию не было внесено принципиальных изменений по сравнению с предыдущей версией.
Если вы действительно нуждаетесь в последней версии данной программы, то можно обратиться к мантейнеру с соответствующей просьбой (ниже указано, как посмотреть, кто является мантейнером). Будет еще лучше, если вы поможете в этой работе.
Однако вы можете изменить эту ситуацию. Создайте свой собственный порт. Документация по этой теме: Создание порта OpenBSD. Прочтите её, а потом... прочтите снова. Особенно ту часть, где описывается процесс поддержки вашего порта. После этого, попробуйте создать новый порт и тщательно его проверьте, шаг за шагом. Если, наконец-то, он работает на вашей системе без ошибок, то отошлите его в почтовую рассылку ports@openbsd.org. Вполне возможно, что вы получите некоторые отзывы и результаты тестов от других людей. Если эти результаты окажутся положительными, то ваш порт будет включён в общее дерево портов.
Более подробные ответы на этот вопрос можно также найти в FAQ 1.
Сборка приложения из исходников не является простой задачей. Должно быть скомпилировано не только само приложение, но и используемые им инструментальные средства и зависимости. К сожалению, совместно работающие OpenBSD инструменты и приложения изменяются в процессе разработки. Это приводит к тому, что изменения, от которых зависит работоспособность данного порта, могут поломать порт. Каждые шесть месяцев, с выходом нового релиза OpenBSD, делается проверка на сборку каждого порта на каждой поддерживаемой платформе, но в процессе разработки системы, порты могут оказаться нерабочими.
К проблемам с зависимостями добавляется и тот факт, что на сборку из исходников тратятся время и ресурсы. Для примера, CVSup, инструмент для отслеживания исходного дерева OpenBSD: для его установки на средней платформе с быстрым каналом в интернет в случае использования пакета потребуется примерно десять секунд. Это время на загрузку и распаковку 779kB-ного пакета. Сборка CVSup на той же машине из исходников - это длительная и серъезная задача, требующая использования многих инструментов работы компилятора, на её выполнение потребуется как минимум полчаса. Другие приложения, как Mozilla или KDE потребуют часы работы и очень большое количество дискового пространства, памяти и swap. Зачем тратить время и загружать компьютер, когда на CD-ROM или FTP есть уже скомпиллированные и готовые к использованию приложения.
Конечно, есть несколько серьезных оснований использовать порты:
$ cd /usr/ports/archivers/unzip $ make show=MAINTAINER
В противном случае, если мантейнера нет, либо вы не смогли с ним связаться, отправьте e-mail в почтовую рассылку OpenBSD ports: ports@openbsd.org. Пожалуйста, НЕ используйте рассылку misc@openbsd.org для сообщений о портах.
В репорте об ошибке сообщите:
$ mkdir ~/portslogs
$ cd /usr/ports/archivers/unzip
$ make clean install 2>&1 | /usr/ports/infrastructure/bin/portslogger \
~/portslogs
После этих действий в ~/portslogs директории вы получите logfile, который надо
отправить мантейнеру порта. Удостовертесь также, не использовалось ли при сборке
особых настроек (например, в /etc/mk.conf).
В качестве альтернативы вы также можете:
Пожертвования различного оборудования может помочь в тестировании OpenBSD портов на различных платформах.
Внимание: Для всех работ по созданию и проверке обновлений вы должны использовать -current! В общем-то, это нежелательно, потому что окружение такой системы постоянно изменяется, поэтому продолжайте в ней работать только если вы действительно уверены в том, что будете вносить изменения в эту ветку.
[FAQ-Index] [Глава 14 - Работа с дисками]