4.1. Зачем нужна коллекция портов?
4.2. Как коллекция портов работает?
4.3. Где взять FreeBSD порт
4.4. Примеры
4.5. Это кажется НЕ работает?!
4.6. Некоторые вопросы и ответы
Коллекция портов FreeBSD позволяет Вам скомпилировать и установить
обширное множество приложений с минимальными усилиями.
Со всеми этими мифами про отрытые стандарты, достичь того, чтобы
программа работала на различных версиях Unix-а, может оказаться вовсе не
тривиальной и утомительной работой
(тот, кто хоть раз пробовал, знает о чем это я).
Вы будете счастливы, обнаружив, что нужная вам программа,
без всяких проблем скомпилировалась
на вашей системе, инсталировалась во все правильные места,
да еще и работает, но, к сожалению, это встречается редко.
С большинством программ вам придется
получиться, и в результате попыток работать с некоторыми
программами возможно к преждевременное поседение или даже к
хроническая апокалепсия ...
Некоторые программные дистрибуции решили эту проблему предоставлением
конфигурационных скриптов. Некоторые из них очень умные, но, к сожалению, они
имеют тенденцию торжественно заявить, что ваша система есть что-то, о чем Вы
даже никогда не слышали и затем зададут вам ряд вопросов, которые похожы на
экзаменационные вопросы по систеному программированию Unix-a (``Does
your system's gethitlist function return a const pointer to a fromboz or a
pointer to a const fromboz? Do you have Foonix style unacceptable exception
handling? And if not, why not?'').
К счастью, с коллекцией портов вся тяжелая работа уже сделана и Вам
остается только запустить 'make install', чтобы получить работающую
программу.
4.1. Зачем нужна коллеция портов?
Базовая система FreeBSD поставляется с огромным количеством инструмнтов,
системных утилит, но большинство популярных программ не включены в базовую
систему по ряду причин:
- ``Я не могу жить без x, y и z на моей машине''
(т.е. без каких-нибудь основанных на Lisp редакторов,
или без mtools - набора программ
для работы с DOS-ими дискетами),
но это слишком субъективно
(многие люди никогда не запускают Emacs и/или никогда не
используют DOS-дискеты и кажется не очень от этого страдают)
- Слишком специализированны, чтобы включить в базовую систему
(CAD, базы данных).
- Программы, которые попадают в категорию "Я взгляну на них, когда у
меня будет свободная минутка", прямая противоположность системно-критическим
программам (некоторые языки).
- ``Wow fab this is way cool'' прикольные программы, которые
не могут поставляться с серьезными ОС подобно FreeBSD ;-)
- в любом случае, сколько бы программ вы не включили в базовую
систему, люди всегда будут хотеть большего, так что должна быть
проведена граница (иначе дистрибуции FreeBSD будут огромными).
Очевидно, что нельзя ожидать от каждого, что он
сам будет портировать свои любимые
программы
(не говоря о огромном количестве двойной работы),
так что в рамках проекта FreeBSD предлагается
способ использования стандартных средств,
который помогает автоматизировать процесс.
Между прочим, это является прекрасной иллюстрацией того, как "UNix-ий
метод" работает на деле, создавая из множество простых, но очень гибких
инструментов что-то очень довольно сложное и полезное.
4.2. Как работает коллекция портов FreeBSD?
Программы обычно расспространаятся на Интернет как
tarball, состоящие из
Makefile, исходных текстов программ, и обычно некоторых инструкций
(которые, к сожалению, не всегда поучительны, как могло бы быть),
и возможно конфигурационных скриптов.
Стандартный набор действий заключается в том, что вы должны
ftp-уть tarball, расспоковать его, выполнить конфигурационный скрипт,
и использовать стандартную программу 'make', чтобы скомпилировать и
инсталировать программу.
Порты FreeBSD все еще используют механизм tarball,
но используют каркас(skeleton),
чтобы управлять "знанием" о том, как получить работающую
программу на FreeBSD, вместо того, чтобы ожидать от пользователя, чтобы
он добился этого сам.
Порты также содержат их собственные Makefile,
так что почти каждый порт м.б. построен одним и тем же способом.
Если вы смотрите на каркас порта (либо на
вашей FreeBSD системе или на FTP узле )
и ожидаете найти что-то сверхумное, то вы будете разочарованы
парой простеньких файлов и директорий, которые вы там найдете.
(Мы уделим этому минутку в секции
Где взять FreeBSD порт ).
''Как такое может быть?'' - Я слышу ваш крик.
''Здесь нет даже исходных текстов!''
Не бойтесь, все скоро станет ясно. Давайте посмотрим,
что произойдет, если мы попытаемся инсталировать порт.
Я выбрал 'bash', также известный как Bourne-Again Shell,
так как это кажется наиболее типичным.
Замечание:
Если вы пытаетесь сделать это дома, вам необходимо зайти как root.
# cd /usr/ports/shells/bash
# make install
Checksums OK.
===> Extracting for bash-1.14.5
===> Patching for bash-1.14.5
===> Applying FreeBSD patches for bash-1.14.5
===> Configuring for bash-1.14.5
===> Building for bash-1.14.5
[lots and lots of compiler output here...]
===> Installing for bash-1.14.5
make -f bash-Makefile bindir=/usr/local/bin prefix=/usr/local install
(cd ./documentation/; make )
rm -f builtins.txt
nroff -man builtins.1 > builtins.txt
install -c -o bin -g bin -m 555 bash /usr/local/bin/bash
install -c -o bin -g bin -m 555 bashbug /usr/local/bin/bashbug
( cd ./documentation/ ; make mandir=/usr/local/man/man1 man3dir=/usr/local/man/man3
infodir=/usr/local/info install )
[ -d /usr/local/man/man1 ] || mkdir /usr/local/man/man1
[ -d /usr/local/info ] || mkdir /usr/local/info
../support/install.sh -c -m 644 bash.1 /usr/local/man/man1
../support/install.sh -c -m 644 builtins.1 /usr/local/man/man1/bash_builtins.1
../support/install.sh -c -m 644 features.info /usr/local/info/bash.info
gzip -9nf /usr/local/man/man1/bash.1 /usr/local/man/man1/bash_builtins.1
===> Registering installation for bash-1.14.5
Чтобы избежать проблем, приводящих в замешательство, я слегка обрезал
выводимую информацию во время инсталяции, а также полностью удалил
выводимую информацию во время build. Если вы попробуете это сами, то
вы получили в начале что-то вроде этого:-
>> bash-1.14.5.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://slc2.ins.cwru.edu/pub/dist/.
Программа 'make' заметила, что вы не имеете локальной копии
исходных текстов и попыталась FTP-уть их (вы начинаете удивляться? 8-)).
В моем случае я уже имею исходники, так что здесь нет необходимости их
доставать .
Давайте посмотрим, что программа 'make' делала.
- Находит исходный код tarball.
Если он не доступен локально, пытается взять его с FTP узла.
- Выполняет checksum, чтобы
проверить, что tarball не был подделанным, случайно обрезанным и т.д..
- Распаковывает tarball во временную рабочую директорию.
- Применяет всякие
патчи,
необходимые, чтобы получить исходники компилируемыми и исполнимыми под
FreeBSD.
- Выполняет конфигурационный скрипт, необходимый для процесса построения
и корректно отвечает на вопросы.
- (Последнее!) Компилирует код.
- Устанавливает исполняемые программы и другие файлы, man страницы,
и др. в соответствующие директории в /usr/local,
где они не будут перемешиваться с системными программами.
Это позволяет быть уверенным, что все порты, которые вы инсталируете,
будут находиться в одном и том же месте, а не валяться где попало.
- Регистрирует установку в базе данных.
Это означает, что если вам программа не понравилась, вы можете
просто удалить все следы
о программе в системе.
Посмотрите, можете ли вы обнаружить эти действия в выводимой информации.
И если вы еще не были удивленны, то вы должны это сделать сейчас!
4.3. Где взять FreeBSD порт
Есть два пути получения FreeBSD port программы (port -- программа,
перенесенная на FreeBSD). Первый требует
FreeBSD CDROM,
другой требует наличия
подключения к Internet.
4.3.1. Компиляция портов, находящихся на CDROM
Если на вопрос ``Do you want to link the ports
collection to your CDROM'', который был задан вовремя установки FreeBSD, вы
ответили "yes", то начальные установки уже сделаны системой.
Если нет, то проверьте, что FreeBSD CDROM находится в дисководе
для CDROM и смонтирован, например, на /cdrom . Выполните следующие команды
# mkdir /usr/ports
# cd /usr/ports
# ln -s /cdrom/ports/distfiles distfiles
это позволяет механизму make находить tarballs (*tar.gz), которые нужны
ports (make считает, что они должны находиться в /usr/ports/distfiles,
поэтому и надо сделать ссылку из директории на CDROM, в которой хранятся
tarballs (*tar.gz)).
Допустим, вам нужно установить программу gnats из директории databases.
Вот как надо это делать:-
# cd /usr/ports
# mkdir databases
# cp -R /cdrom/ports/databases/gnats databases
# cd databases/gnats
# make install
Или если вы серьезно работаете с базами данных и вам надо сравнить
все базы данных доступные в Ports collection, сделайте так
# cd /usr/ports
# cp -R /cdrom/ports/databases .
# cd databases
# make install
(в команде cp действительно надо ставить точку, это не ошибка.
В Unix, точка обозначает текущую директорию)
и механизм make в ports автоматически скомпилирует и установит
все ports (port -- программа, перенесенная на FreeBSD) в директории databases!
Если вам такой способ не нравится, есть
совершенно другой способдостичь того же результата:-
Создайте "дерево ссылок" для ports, хранящихся на CDROM, при помощи
команды lndir(1), которая входит в дистрибутив
XFree86. Найдите свободное место у себя на диске, создайте там
директорию и войдите в нее. Затем вызовите команду lndir(1),
в качестве первого аргумента этой команды задайте полный путь
директории на CDROM, где хранятся ``ports'', а в качестве второго
аргумента, используйте . (текущую директорию).
Это, например, может быть так:
lndir /cdrom/ports .
Теперь вы можете строить ports прямо из CDROM, и они будут строиться
в "дереве ссылок", которое вы создали.
Заметим, что есть ports, исходники которых не выкладываются на
CDROM, из-за ограничений в лицензии по распространению. В этом случае
посмотрите раздел
Компилирование с использованием
доступа к Internet.
4.3.2. Компиляция портов из Internet
Если у вас нет CDROM, или вы хотите быть уверены, что у вас самая
последняя версия нужного вам port, вам нужно скачать
каркас(skeleton) для port.
Это может прозвучать, как достаточно грязная работа, полная ловушек, как
например скачивание
patches в директорию pkg
по ошибке, но это достаточно просто.
Смысл в том, что сервер FreeBSD FTP может создавать
tarballs(*tar.gz или *tgz) на
лету. Вот как это работает на примере программы
gnats из директории databases (в квадратных скобках -- комментарии, не
вводите их в командной строке!):-
# cd /usr/ports
# mkdir databases
# cd databases
# ftp ftp.freebsd.org
[войти под именем `ftp' и в качестве пароля ввести свой почтовый адрес
(e-mail). Помните, что надо использовать режим binary (двоичный)!]
> cd /pub/FreeBSD/ports/databases
> get gnats.tar.gz [скачать tarballs (архив) с gnats]
> quit
# tar xzf gnats.tar.gz [распаковать gnats]
# cd gnats
# make install [скомпилировать и установить gnats]
Что мы делали сейчас? Мы соединились с FTP сервером и вошли в директорию
с базами данных (СУБД). Затем мы дали серверу команду
`get gnats.tar.gz', FTP сервер
заархивировал директорию gnats
и даже сжал файл перед отправкой, что ускорило передачу данных.
Затем мы распаковали этот файл и вошли в директорию gnats, чтобы
построить port. Как мы объясняли
ранее,
make сообщил, что на локальной машине нет исходников, поэтому make
пытается достать исходники сам, если не получается, то он сообщает об этом
и просит пользователя достать исходники и положить их в нужное место..
Попробуем что-нибудь более сожное. Вместо одного каркаса(skeleton) для
port, попробуем скачать целую директорию, например всю директорию
database в ports collection. Это делается почти так же:-
# cd /usr/ports
# ftp ftp.freebsd.org
[войти под именем `ftp' и в качестве пароля ввести свой почтовый адрес
(e-mail). Помните, что надо использовать режим binary (двоичный)!]
> cd /pub/FreeBSD/ports
> get databases.tar.gz [скачиваем директорию databases]
> quit
# tar xzf databases.tar.gz [распаковываем архив database]
# cd databases
# make install [компилируем и устанавливаем все ports в директории database]
С помощью шести команд, мы построили несколько программ, с помощью
которых можно работать с несколькими СУБД на нашей машине с
FreeBSD! All we did that was
different from getting a single port skeleton and building it was that
we got a whole directory at once, and compiled everything in it at
once. Pretty impressive, no?
Если вы собираетесь устанавливать больше, чем
один или два портаIf you expect to be installing more than one or two ports, it is
probably worth downloading all the ports directories - this involves
downloading 2 or 3MB, when they are compressed. However, don't get
carried away and type 'get ports.tar.gz' unless you are prepared to
download the distfiles directory as well - this contains the source
code for every single port and will take a very long time to download!
4.4.Каркасы (Sceletons)
Команда измученных программистов, которые забыли про еду
в фанатичной попытке успеть к директивному сроку?
Нет, каркас здесь - это минимальная конструкция, которая содержит
все что нужно для того чтобы магия портов работала.
4.4.1. Makefile
Наиболее важной частью каркаса является Makefile. В нем находятся
разлицные спецификации, показывающие как надо компилировать и
устанавливать порт. Например, возьмем Makefile для bash:
# New ports collection makefile for: bash
# Version required: 1.14.5
# Date created: 21 August 1994
# Whom: jkh
#
# Makefile,v 1.13 1995/10/04 14:45:01 asami Exp
#
DISTNAME= bash-1.14.5
CATEGORIES= shells
MASTER_SITES= ftp://slc2.ins.cwru.edu/pub/dist/
MAINTAINER= ache@FreeBSD.ORG
post-install:
.if !defined(NOMANCOMPRESS)
gzip -9nf ${PREFIX}/man/man1/bash.1 ${PREFIX}/man/man1/bash_builtins.1
.endif
.include <bsd.port.mk>
Строки начинающиеся с символа
"#" sign - это комментарии,
использующиеся только для удобства человека
(как и в большинстве файлов со скриптами в Unix).
`DISTNAME" указывает имя
tarball,
но без суффикса.
`CATEGORIES" описывает категорию, к которой принадлежит эта программы.
`MASTER_SITES" это список адресов FTP-узлов, которые используются
для того чтобы скачать
tarball,
если его нет на локальной машине.
Эти узлы обычно имеют хорошую репутацию, и, почти всегда, один из них
- это узел с которого эта программа оффициально распространяется
(конечно, если она вообще "оффициально" распостраняется по
Интернет)
`MAINTAINER" - это email человека, который ответственнен за
освежение этого каркаса, например, в случае выхода новой версии программы.
(Замечание: звание "maintainer" - в основном чисто
административный; это не означает, что этот человек
занимается поддержкой этой программы.
Если у вас есть какие-нибудь
проблемы с портом, то, пожалуйста пишите в список рассылки FreeBSD
freebsd-ports@FreeBSD.ORG
, а не по email, указанному в этом поле. Спасибо!)
Давайте ненадолго пропустим несколько следующих строчек,
и посмотрим на строку
.include <bsd.port.mk>
в которой говорится что все прочие команды и правила
необходимые для того, чтобы создать порт находятся в стандартном файле
`bsd.port.mk". Так как они одинаковы для всех портов,
то нет необходимости повторять их в каждом файле,
поэтому они и хранятся в отдельном стандартном файле.
Это скорее всего не самое правильное место для того, чтобы
лезть в детали того, как работают эти Makefile;
Достаточно сказать, что строки, начиная с .ost-install"
переопределяют инструкции в bsd.port.mk
о том что делать после установки программы,
так что справочная информация
может быть сжата после того, как ее уже положили
на место назначения.
4.4.2. Каталог files
Файл содержащий
контрольные суммы
для порта называется
"md5", из-за использования MD5 в качестве алгоритма
Он находится в директории "files"
Этот каталог может также содержать прочие файлы, которые необходимы порту
и не подходят к другим каталогам.
4.4.3. Каталог patches
Эта директория содержит
патчи,
которые нужны для того чтобы все работало нормально под FreeBSD.
4.4.4. Каталог pkg
Этот каталог содержит три довольно полезных файла:-
- COMMENT - описание программы одной строкой
- DESCR - более подробное описание
- PLIST - Список всех файлов, которые создаются при установке порта
4.5. Это кажется не работает?!
Ох. Вы можете сделать одно из четырех (4) :
- Исправиить это самостоятельно.
- Жалуйтесь. Делайте это *ТОЛЬКО* по электронной почте!
Люди из Walnut Creek не отвечают за функциональность (или ее отсутствие)
системы FreeBSD в целом, и в особенности
за коллекцию портов, большинство которой сделанно внешними людьми.
(Если вы мне не верите, то посмотрите каталог, в частности
строку в которой сказано "Мы не можем предоставить техническую поддержку для
этого продукта"). Используйте e-mail адрес списка рассылки FreeBSD, посвященного
коллекции портов,
freebsd-ports@FreeBSD.ORG.
Пожалуйста, включите в ваше письмо подробности про порт,
откуда вы получили исходники порта и исходники дистрибутивов,
а также какие какие были ошибки.
Замечание:
Во время написания этого документа, lang/Sather кажется
не работает на Пентиумах из-за проклятья Intel
(имеется ввиду ``Ошибка деления чисел с плавающей точкой'')
Пожалуйста не пишите нам об этом - жалуйтесь прямо в Intel -
это их проблема!
- Забыть про это. Это самый легкий способ - обычно
только несколько программ вам действительно необходимы!
- Скачайте скомпилированный пакет с ftp-сервера.
Основная коллекция пакетов находится на FTP-сервере FreeBSD
в каталоге
packages.
Хотя вначале лучше посмотреть на ближайшем к вам ``зеркале''.
Они должны сработать с большей вероятностью, чем
попытки компилирование из исходных текстов, и это намного быстрее!
Используйте команду pkg_add(1) для установки таких пакетов
на вашу машину.
4.6. Некоторые вопросы и ответы
- В. Я думал здесь обсуждаются модемы??!
О. Вы должно быть думаете о последовательных портах на
обратной стороны вашего компьютера. Мы используем слово `порт'
здесь для обозначения результата `переноса' программы с одной версии Unix
на другую. (Использование одного и того же слова для
обозначения совершенно разных вещей, к сожалению,
стало плохой привычкой всех в околокомпьютерном мире.
- В. Я думал, что предполагается использовать пакеты
для инсталяции дополнительных программ?
О. Совершенно верно, это обычно самый быстрый и простой способ
сделать это.
- В. Так зачем тогда беспокоиться о портах?
О. Есть несколько причин:-
- Лицензионные ограничения некоторых программ разрешают
распространять их только в виде исходных текстов,
а не исполняемых файлов.
-
Некоторые люди не доверяют двоичным пакетам. Если у вас есть
исходный текст, то вы можете (в теории) просмотреть его
на предмет потенциальных проблем самостоятельно.
-
Если у вас есть свои патчи, вам необходимо применить их к
исходникам самостоятельно.
-
У вас может быть другое мнение о том как эта программа должна быть
скомпилирована, чем у того кто сделал пакет -
некоторые имеют свою точку зрения на то какая должна быть оптимизация,
нужна ли отладочная информация и тому подобное.
-
Некоторым нравиться иметь исходники под рукой, так что они
смогут читать их со скуки, модифицировать, переиспользовать
куски кода (конечно с учетом лицензии) и так далее.
- И наконец - если у вас нет исходников, то где же собственно софт? ;-)
-
В. Что такое патч?
О.
Патч - это маленький (обычно) файл, в котором описано как изменить
одну версию файла до другой.
Он содержит текст который, в действительности, состоит из
вещей вроде ``удалить строку 23'', ``добавить эти две строки после
строки 468'' или ``изменить строку 197 на эту''.
Он также известен как ``diff'', поскольку так называется
программа, которая их генерирует.
-
В. Что такое tarball?
О. Это файл с заканчивающийся на .tar.gz
(возможно .tar.Z, или даже .tgz)
По существу, это архив структуры каталогов (.tar),
а потом сжатый (.gz).
Изначально эта технология использовалась для архивов на лентах
(Tape ARchive - отсюда и название `tar'),
но сейчас это один из наиболее широко применяемых методов распространения
исходных текстов программ по Интернет.
Вы можете посмотреть какие файлы находятся внутри, или даже
разархивировать их самостоятельно, используя стандартную
утилиту UNIX - tar. Она поставляется вместе с базовой системой
FreeBSD. Например:
tar tvzf foobar.tar.gz # Показывает содержимое foobar.tar.gz
tar xzvf foobar.tar.gz # Разархивирует файлы в текущий каталог
-
В. Что такое контрольная сумма (checksum)?
О.
Это число, являеющееся результатом суммирования
всех байт файла который вы проверяете. Если значение какого-нибудь
байта поменяется, контрольная сумма поменяется тоже, так что
простое сравнение с эталоном позволит определить что файл был изменен.
(На практике используется более сложные алгоритмы, чем простое
суммирование, для того чтобы замечать такие ``сложные'' изменения файлов, как
перестановка байт.
- В. Я действовал по вашим
инструкциям компиляции портов с CDROM
и все работало отлично до тех пор пока я не попробовал установить
порт kermit :-
# make install
>> cku190.tar.gz doesn't seem to exist on this system.
>> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/.
Почему он не существует? У меня бракованный диск?
О. Условия лицензии для kermit не позволяют нам
положить его tarball на CDROM, так что вам придется скачать его
самостоятельно.
Причина, из-за которой вы получили эти сообщения об ошибках, -
это отсутствие подключения к Интернет в тот момент.
Как только вы скачаете нужный tarball откуда-нибудь,
вы можете повторить попытку сделать порт.
(скачивайте его с ближайшего к вам места, так вы сохраните и ваше время
и пропускные способности Интернет)
- В. Я сделал это, но когда я попробовал положить его в
/usr/ports/distfiles я получил сообщение об отсутствии
прав доступа.
О. Механизм портов по умолчанию ищет tarball в каталоге
/usr/ports/distfiles, но у вас не получится ничего туда добавить,
потому что это символьная ссылка на CDROM, запись на который невозможна.
Но вы можете изменить место поиска tarball с помощью команды:
DISTDIR=/where/you/put/it make install
- В.
Механизм портов работает только если вы все кладете в /usr/ports?
Мой системный администратор сказал, что я должен хранить все
только под /u/people/guests/wurzburger, и у меня не
получается сделать порт.
О. Вы можете использовать переменные PORTSDIR и PREFIX
для указания необходимости использовать другие директории.
Например,
PORTSDIR=/u/people/guests/wurzburger/ports make install
Эта команда компилирует порт в /u/people/guests/wurzburger/ports
и устанавливает в /usr/local?.
а следующая команда откомпилирует порт в /usr/ports
и установит в /u/people/guests/wurzburger/local:
PREFIX=/u/people/guests/wurzburger/local make install
И наконец
PORTSDIR=.../ports PREFIX=.../local make install
объединяет оба эффекта (полная команда слишком длинна
и не влезает целиком на страницу, но я уверен, что вы уже поняли идею)
Если вы не хотите набирать такие строки каждый раз при инсталляции
порта, то вставьте эти переменные в свое окружение (environment).
- В.
У меня нет FreeBSD CDROM, но я хочу скопировать все нужные tarball
к себе заранее, чтобы мне не приходилось долго ждать каждый раз
когда я устанавливаю port. Существует ли простой способ
скачать их все сразу?
О. Для того чтобы скачать все tarball для коллекции портов,
запустите:
# cd /usr/ports
# make fetch
Для того чтобы скачать все tarball для отдельной директории, запустите:
# cd /usr/ports/directory
# make fetch
Ну я думаю вы уже догадались как скачать tarball для одного порта.
- В.
Мне кажется что будет быстрее скачать все tarball с одного
из соседних зеркал FreeBSD. Существует ли способ указать
адресс для скачивания, отличный от тех, которые указаны в
MASTER_SITES?
О. Да. если вы например думаете, что ftp.FreeBSD.ORG
намного ближе, чем узлы из списка MASTER_SITES,
то используйте следующий пример.
# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.ORG/pub/FreeBSD/distfiles/ fetch
- В.
Я хотел бы узнать какие файлы нужны для компиляции, до того как make
будет их скачивать.
О. 'make fetch-list' покажет вам список файлов необходимых этому порту.
- В. Есть ли способ предотвратить компиляцию? Я хочу
сделать некоторые исправления в исходниках перед тем как компилировать,
но меня утомляет идея караулить момент когда нажать control-C.
О. Использование 'make extract' остановит процесс после скачивания
и распаковки исходных текстов.
- В.
Я пытаюсь сделать мой собственный порт и хочу иметь возможность
останавливать процесс до компиляции, чтобы посмотреть как
работают мои патчи. Есть ли что-нибудь вроде 'make extract', но для
патчей?
О. Да, 'make patch' - это то что вы ищете. И кстати, спасибо
за то что вы это делаете!
- В.
Я слышал, что некоторые опции компилятара могут стать причиной
ошибок. Это правда? Как мне быть увереным, что я откомпилировал
порт с правильными опциями?
О.
Да, в gcc версии 2.6.3 (эта версия поставлялась вместе с FreeBSD 2.1.0
и 2.1.5), опция -O2 могла приводить к коду с ошибками,
если не использовать опцию -fno-strength-reduce.
(Большинство поротов не использует -O2).
У вас должна быть возможность указывать флаги,
используя что-нибудь вроде:
# CFLAGS='-O2 -fno-strength-reduce' make install
или при помощи редактирования /etc/make.conf,
но это кажется не всегда срабатывает.
наиболее надежный способ - использовать 'make configure',
после чего зайти в каталог с исходными текстами и проверить
Makefile, но это может быть затруднительно если дерево
исходных текстов содержит кучу подкаталогов,
в каждом из которых есть свой Makefile.
- В. Слишком много разных портов - тяжело найти тот,
который нужен мне. Есть ли нде-нибудь список всех портов?
О. Смотрите INDEX в каталоге /usr/ports.
- В.
Я собиралсяустановить 'foo' порт, но система внезапно остановилась и
начала компилировать порт 'bar'. Что произошло?
О. Порт 'foo' требует что-нибудь, что поставляется вместе с 'bar' -
рапример, если 'foo' использует графику, то 'bar' может иметь
библиотеку с полезными графическими процедурами.
Или 'bar' может быть инструментом, который нужен для
компиляции порта 'foo'.
-
В. Я установил огромную программу и, мне кажется, это просто
бесполезно занятое место на диске. Я хотел бы удалить ее,
но не знаю где лежат входящие в этот пакет файлы. Есть идеи?
О. Нет проблем, просто запустите
pkg_delete grizzle-6.5
-
В. Подождите секундочку, вы должны знать номер версию для того чтобы
использовать такую команду. Вы серьезно ожидаете, что я ее помню??
О. Нет, конечно, вы можете узнать его следующим образом
pkg_info -a | grep grizzle
Результатом будет что-то вроде:-
Information for grizzle-6.5:
grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game.
- В. К вопросу о месте на диске,
каталог портов кажется занимает кучу места.
Безопасно ли удалить часть файлов в нем?
О. Да, если вы уже установили программу и не собираетесь
переустанавливать ее снова, то нет никакой необходимости
хранить исходники. Самый лучший способ избавиться от них - это:
# cd /usr/ports
# make clean
В результате во всех подкаталогах /usr/ports
будут удалены все файлы кроме входящих в каркас.
- В. я сделал это, но в каталоге distfiles все еще сохранились эти
tarball или как вы их там называете. Могу я их удалить?
О. Да, если вы уверены, что они вам больше не нужны.
- В. Мне нравиться иметь кучу программ. Есть ли возможность
установить все порты сразу?
О. Просто сделайте
# cd /usr/ports
# make install
- В. Ok, я сделал это, но, хоть я и думал,
что это займет много времени, так что я пошел спать и
оставил компьютер работать. С утра я обнаружил, что сделанно
только три с половиной порта. Что нибудь не так?
О. Нет, проблема в том, что некоторые порты начинают
задавать вопросы
(например - ``Вы используете бумагу формата A4 или Letter?'')
и им нужен кто-то кто введет ответ.
- В.
Но мне вовсе не хочется провести целый день уставившись в монитор.
Есть идеи получше?
О. Ok, сделайте это перед тем как идти в кровать/на работу/местный парк :-
# cd /usr/ports
# make -DBATCH install
В результате будут установленны все порты которые
НЕ требуют участия человека в установке.
Потом, когда вы вернетесь, запустите
# cd /usr/ports
# make -DIS_INTERACTIVE install
для того чтобы закончить работу.
- В.
На работе мы используем frobble, который есть в вашей коллекции
портов, но мы сильно модифицировали нашу версию для
достижения нужных нам эффектов.
Существует ли способ сделать наши собственные пакеты,
чтобы мы могли легко распространять их по нашим компьютерам?
О. Никаких проблем, если вы знаете как сделать патчи
соответствующие вашим изменениям:
# cd /usr/ports/somewhere/frobble
# make extract
# cd work/frobble-2.8
[Добавьте ваши патчи]
# cd ../..
# make package
- В. Эта система довольно хитра. Я жажду разобраться как
это работает. в чем секрет?
О. Никаких секретов. Просто смотрите в файлы
bsd.ports.mk и
bsd.ports.subdir.mk в каталоге /localhost/usr/share/mk/ с makefiles.
(Замечание: Читателям с отвращением к замысловатым shell-скриптам
рекомендуем пропустить эту ссылку ...)
|