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' делала.

  1. Находит исходный код tarball. Если он не доступен локально, пытается взять его с FTP узла.
  2. Выполняет checksum, чтобы проверить, что tarball не был подделанным, случайно обрезанным и т.д..
  3. Распаковывает tarball во временную рабочую директорию.
  4. Применяет всякие патчи, необходимые, чтобы получить исходники компилируемыми и исполнимыми под FreeBSD.
  5. Выполняет конфигурационный скрипт, необходимый для процесса построения и корректно отвечает на вопросы.
  6. (Последнее!) Компилирует код.
  7. Устанавливает исполняемые программы и другие файлы, man страницы, и др. в соответствующие директории в /usr/local, где они не будут перемешиваться с системными программами. Это позволяет быть уверенным, что все порты, которые вы инсталируете, будут находиться в одном и том же месте, а не валяться где попало.
  8. Регистрирует установку в базе данных. Это означает, что если вам программа не понравилась, вы можете просто удалить все следы о программе в системе.

Посмотрите, можете ли вы обнаружить эти действия в выводимой информации.

И если вы еще не были удивленны, то вы должны это сделать сейчас!

Назад | Содержание | Вперед

Обновлено: 13.03.2015