ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
4.6. Некоторые вопросы и ответы
По существу, это архив структуры каталогов (.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-скриптам рекомендуем пропустить эту ссылку ...) |