| FreeBSD и третичное программное обеспечение. | Главная |
|
|
|
Прим: заготовка для будущего расширенного руководства, данный
вариант как быстрое пособие был написан для forum.opennet.ru. FreeBSD и третичное программное обеспечение. В системах FreeBSD, OpenBSD и NetBSD существует два подхода к установке дополнительного программного обеспечения, так называемых портов и пакетов, в данном руководстве я буду опираться лишь на подход в OS FreeBSD: ports, packages. Packages или пакеты, это уже собранные(binaries - исполняемый код) пакеты для того или иного FreeBSD RELEASE из портов для этих RELEASE. Порты постоянно обновляются, поэтому готовые пакеты собираются и проверяются только для выпускаемого RELEASE. Термин port - сокращение от portability, портабельность, существует много программного обеспечения Freeware или под лицензиями GPL (http://www.gnu.org/licenses/licenses.html) и "AS IS" BSD-лицензия (http://www.bsdnewsletter.com/bsd/license.html), команда разработчиков FreeBSD занимается адоптацией или портированием такого программного обеспечения для OS FreeBSD. Это касательно портов, пакеты - это собранные порты за конкретную дату, те(то есть) порты для выпущенного FreeBSD RELEASE. Обычно собранные для RELEASE пакеты идут на 3 и 4'ом ISO-Images и доступны: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/X.Y[.Z]/ где X.Y[.Z] цифры соответствующие тому или иному релизу или ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-X.Y[.Z]-release/ в то время как полное дерево портов для каждого релиза можно взять: ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/X.Y[.Z]-RELEASE/ports/ports.tgz или используя cvsup: - установить cvsupit из портов (/usr/ports/net/cvsupit/), а лучше взять готовый пакет: cvsup16.1e советую брать без GUI, гораздо удобнее использовать командную строку и скрипты, например: скрипты cvsup Совет: всегда сохраняйте сперва предыдущую копию портов, на всякий случай отдельные порты можно выкачивать, например bash2: сохраняем на всякий случай старый порт # cd /usr/ports/shells # mv bash2 bash2.old выкачиваем свежий порт # wget -Y off -t 0 -c -r -nH --cut-dirs=6 ftp://ftp.ru.freebsd.org/pub/FreeBSD/branches/-current/ports/shells/bash2/ когда выкачиваете отдельные порты, имейте ввиду что они могут требовать других свежих портов, ищите в Makefile'е интересующего вас порта ключевые слова DEPENDS, кроме этого могут изменяться *.mk файлы для утилиты make: /usr/ports/Mk/, из-за чего возникают ошибки при сборке портов на этапе разбора самого Makefile'а. прим: чтобы не загружать основные сервера ftp.freebsd.org или cvsup.freebsd.org используйте ближайшие к вам географические зеркала: http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html man ports - всегда поможет и ответит на многие вопросы дерево портов: /usr/ports/категория конкретный порт: /usr/ports/категория/название_порта содержимое директории порта: /usr/ports/категория/название_порта/Makefile - файл сборки проекта /usr/ports/категория/название_порта/distinfo - md5 контрольные суммы дистрибутивов которые будут собраны /usr/ports/категория/название_порта/files - директория в которой содержатся freebsd-related патчи для данного программного продукта /usr/ports/категория/название_порта/scripts - директория со скриптами создания дополнительной конфигурации или зависимого Makefile.inc файлы: pkg-comment - краткое описание данного продукта pkg-desc - чуть более расширенное описание данного продукта pkg-plist - список всего что будет установлено в систему посредством make install pkg-message - важное сообщение которое будет выдано после make install pkg-install - обычно скрипт дополнительняющий набор необходимых действий при "make install" терминология структуры портов: /usr/ports - все дерево портов /usr/ports/INDEX - список всех портов /usr/ports/INDEX.db - база портов /usr/ports/README - прочти меня /usr/ports/distfiles - место куда будет затягиваться дистрибутив необходимый для сборки порта /usr/ports/Mk - необходимые make includes файлы для сборки портов в дополнение к /usr/share/mk обычный или mini-port - обычный порт мета, meta-port - порт большого программного продукта, в реалии пустышка из нескольких mini-port'ов необходимых для сборки ПОЛНОГО meta-port'а. прим.: когда то вместо meta портов, были мега порты, которые удобней было собирать в отличие от мета портов, имейте ввиду что для сборки XFree86, mozilla, openoffice вам понадобится очень много free-space и возможно потребуется переопределить рабочую директорию через переменную WRKDIR. Например: /usr/ports/x11/XFree86-4 - это мета-порт объединяющий установку нескольких мини-портов необходимых для установки всего XFree86-4, список мини-портов указан в /usr/ports/x11/XFree86-4/Makefile прим.: если у вас уже установлен предыдущий порт XFree86-4, и вы скачали новый и хотите его установить, лучше удалить предыдущий XFree86 и все его depends, в этом случае проблем не будет. Сборка: 1) cd /usr/ports/категория/название_порта 2) make по команде make, будет просматриваться содержимое /usr/ports/distfiles на предмет наличия в нем дистрибутива[ов] cat distinfo, если таковые отсутствуют там, будет производиться скачивание данного дистрибутива с основного сайта: ftp.freebsd.org. Управлять этим процессом можно определив ряд необходимых переменных в файле /etc/make.conf (который создается на основе /etc/defaults/make.conf) MASTER_SITE_BACKUP?= ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ закоментарим две верхние строчки и зададим ближайший к нам сайт с зеркалом distfiles, например: #MASTER_SITE_BACKUP?= # ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ #--lavr MASTER_SITE_BACKUP?= ftp://ftp.ru.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ MASTER_SITE_OVERRIDE?= ${MASTER_SITE_BACKUP} MASTER_SORT_REGEX?= ^file: ^ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/local-distfiles/ ://[^/]*.ru/ ://[^/]*.ru. если у нас выход в Internet через PROXY, определяем следующие переменные в том же файле, если PROXY с авторизацией, man 3 fetch: FETCH_ENV= FTP_PROXY=ftp://10.0.0.1:21 FETCH_ENV= HTTP_PROXY=http://10.0.0.1:80 При сборке портов можно использовать много полезных переменных среды, полезно в тех или иных случаях: # less /usr/share/mk/bsd.README # less /usr/ports/Mk/bsd.port.mk # man ports некоторые наиболее полезные переменные: - PORTSDIR - WRKDIR - DISTDIR - PREFIX - BATCH с их помощью можно изменять директории структуры портов, местонахождения sources, рабочую директории для сборки, путь установки и тд и тп. При сборке порта, как уже было сказано, ищется дистрибутив, проверяется его контрольная сумма по md5: имя дистрибутива обычно указыватся в файле distinfo, например, рассмотрим mpg123 из портов: [alone]~ > ls -la /usr/ports/audio/mpg123 total 24 drwxr-xr-x 3 root wheel 512 Feb 11 12:21 . drwxr-xr-x 336 root wheel 6656 Feb 12 12:04 .. -rw-r--r-- 1 root wheel 2662 Feb 11 12:21 Makefile -rw-r--r-- 1 root wheel 268 Apr 10 2001 distinfo drwxr-xr-x 2 root wheel 512 Feb 11 12:21 files -rw-r--r-- 1 root wheel 52 Jul 10 1997 pkg-comment -rw-r--r-- 1 root wheel 242 Aug 5 1999 pkg-descr -rw-r--r-- 1 root wheel 11 Aug 17 1998 pkg-plist [alone]~ > Makefile - проект сборки distinfo - файл содержаший md5 контрольные суммы дистрибутива, той или иной версии, патчи и другие необходимые sources: [alone]~ > cat /usr/ports/audio/mpg123/distinfo MD5 (mpg123-0.59r-pl1.tar.gz) = 2648708fac9203ef58292adf5e54e4ba MD5 (mpg123-059r-v6-20000713b.diff.gz) = b830cefc8805c8ad827f73985c03d27f MD5 (l3.diff.gz) = b8749f4709ed1a9df8a00d51c4a02dd5 MD5 (mpg123-059r-recode-20010410.diff.gz) = 8f9e18cf27f9e048c5369cf3b78b6b11 [alone]~ > files - если в порту есть такая директория, она обычно содержит патчи и дополнительные файлы конфигурации данного порта pkg-comment и pkg-descr - файлы описания данного порта-продукта, короткое описание и более полное pkg-plist - это список всех файлов которые будут установлены в систему относительно пути в PREFIX и некоторые дополнительные действия которые будут произведены при `make install` 3) make install после успешной сборки п.2, произвести установку собранного продукта в систему, обычно: PREFIX=/usr/local, где /usr/local - альтернативная структура базовой системы: "/", "/etc", "/bin", "/sbin", "/usr/lib" и тд 4) make clean удалить все что осталось после сборки, обычно директорию work в данном продукте и всех зависимостях которые были собраны и автоматически установлены при сборке данного продукта Удалить установленные порты или пакеты можно: # make de-install или man pkg_delete при сборке порта, в пункте 2) make - производит несколько операций, скачивание, накладывание патчей, конфигурирование проекта перед сборкой и саму сборку, при необходимости, мы можем выполнять по шагам вместо make: make fetch make checksum make depends make extract make patch make configure make build все вышеуказанные действия могут быть выполнены самостоятельно и по шагам, допустим мы хотим поправить некий порт под себя, шаги: - скачиваем порт: # make fetch - проверка контрольной суммы дистрибутива: # make checksum - разврачиваем дистрибутив в рабочую директорию, у большинства портов это директория /usr/ports/category/portname/work # make extract - если используется многоплатформенный гнушный конфигуратор configure # make configure теперь мы можем наложить свои патчи, затем при помощи команды diff создать нужные нам правки: файлы patch-xy, где xy - это буквы aa/ab/ac/... и тд и тп и положить их в директорию files - все порт с нашими правками готов, теперь можно его очистить: # make clean и собрать по шагам, чтобы убедиться что нет ошибок или затратить меньше времени на их исправления, все - наш порт, порт с нашими правками готов. чтобы в реалии не выполнять make, а лишь посмотреть что будет сделано: # make -n [install|или другие опции] иногда удобно в командной строке задать все необходимые команды (см. используемый вами SHELL): # cd /usr/ports/категория/название_порта # make && make install && make clean однако некоторые порты требуют интерактивного вмешательства, чтобы этого не произошло, необходимо посмотреть Makefile, записать все необходимые опции с которыми мы будем собирать данный порт и выполнить: make WITH_ИМЯОПЦИИ=yes WITHOUT_ИМЯОПЦИИ=yes BATCH=yes install && make clean BATCH=yes обеспечивает пакетную сборку порта. Материал для изучения: http://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/index.html http://www.FreeBSD.org.ua/porters-handbook/ - на русском прим.: конечно можно и нужно удалять то что осталось после сборки портов, глобально: # cd /usr/ports # make clean можно для каждой категории: # cd /usr/ports/category # make clean зависимости тоже будут удалены, но все это очень долгая история, лично мне удобнее прежде посмотреть, что не было очищено после установки того или иного порта: # find /usr/ports/ -name "work" -print или # find /usr/ports/ -name ".instal*" -print после чего без всякий `make clean` - это ну очень долго, использовать: # find /usr/ports/ -name "work" -exec rm -rf {} ; все что нужно удалено, быстро и удобно. После установки портов и пакетов, в директории /var/db ведется база установленных пакетов и портов (для последних можно использовать переменную FORCE_PKG_REGISTER= YES в файле /etc/make.conf, это очень удобно. в директории /var/db/pkg - можно найти весь список портов, это директории с именами: /var/db/pkg/PortName-Version, внутри которых есть несколько информативных файлов, например: [alone]~ > ls -la /var/db/pkg/mpg123-esound-0.59r_8/ total 28 -rw-r--r-- 1 root wheel 52 Feb 11 12:05 +COMMENT -rw-r--r-- 1 root wheel 660 Feb 11 12:05 +CONTENTS -rw-r--r-- 1 root wheel 242 Feb 11 12:05 +DESC -r--r--r-- 1 root wheel 7457 Feb 11 12:05 +MTREE_DIRS -rw-r--r-- 1 root wheel 14 Feb 16 21:28 +REQUIRED_BY drwxr-xr-x 2 root wheel 512 Feb 16 21:28 . drwxr-xr-x 371 root wheel 9728 May 22 15:47 .. [alone]~ > если вспомнить описанную ранее структуру порта: +COMMENT - комментарий (pkg-comment) +CONTENTS - то что было установлено в систему (pkg-plist) +DESC - описание (pkg-descr) +MTREE_DIRS - дерево с указанием владельца и режимов файлов и директорий +REQUIRED_BY - если есть, то для какого порта или пакета, данный програмный продукт был зависимостью Packages - пакеты. |
|