Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Установка ПО в системе FreeBSD |

26.08.2008, 18:33
|
|
Постоянный
Регистрация: 06.05.2007
Сообщений: 393
Провел на форуме: 1510937
Репутация:
398
|
|
Установка ПО в системе FreeBSD
Установка ПО в операциононй системе FreeBSD или Почему надо ставить программы из портов, а не руками
Q: Почему вы советуете все ставить из портов?
A: Потому, что порты - это стандартный способ установки ПО в системе. Это значит, что программы, справочная документация, разделяемые библиотеки и файлы заголовков ставятся именно туда, куда надо, и потому нет необходимости в дальнейшем заниматься долгими поисками.
Более того, система аудита FreeBSD работает только с ПО, установленным из портов, а значит, что устанавливая из исходников, Вы будете сами отвечаьт за безопасность системы и сами искать сообщения о критических уязвимостях программ и их новых версиях.
Q: Ведь действительно проще ставить из исходников где все включено и компилируется с необходимыми опциями?
A: На самом деле - не проще, а сложнее. Потому, что система портов сама находит зависимости и автоматически ставит необходимое ПО. В случае установки вручную, придется самостоятельно ставить необходимые библиотеки, которые, в свою очередь, зависят от других библиотек, которые тоже зависят от библиотек, которые.....
И это - полбеды. Беда приходит тогда, когда надо обновить какой-либо пакет; например, при обнаружении какой-либо уязвимости или при смене версии.
Представьте себе, что возникла необходимость обновить libfreetype. Если у нас установлен PHP5 с поддержкой gd, нам (возможно) придется пересобрать libfreetype, libgd и php-gd. И все это вручную, с вспоминанием опций, с которыми собирали все это в прошлый раз, с предварительной чисткой системы от старой версии и т.д. Но если мы собирали из портов, все решается ровно одной командой: portupgrade freetype-1.2.3. Все остальное система сделает сама.
Q: Но я сам ставил из исходников - все работало и не надо было заморачиваться.
A: Да, работало. Но сколько времени потребовалось, чтобы все это поставить, разобраться в зависимостях и заставить работать так, как надо?
Для установки того же Apache + PHP5 + MySQL + Gd вручную, надо:
- собрать библотеки gd, jpeg, png, freetype
- собрать и установить mysql
- собрать и установить apache
- собрать PHP5.
При этом надо помнить про пути установки, флаги оптимизации, дополнительные зависимости, писать вручную скрипты автозапуска....
А при установке из портов все делается ровно в две команды:
Код:
cd /usr/ports/databases/php5-extensions
make install clean
Q: Где читать про то, что нужно поставить из портов для нормальной работы какого-либо пакета чтобы потом не тыкаться в ошибки?
A: Система портов сделана так, что она автоматически находит все зависимости. Поэтому не надо беспокоиться, что система что-то "забудет" поставить. Будет установлено только то, что нужно для работы.
Например, надо поставиь поддержку mysql для PHP5, но мы не знаем, в каком порте искать. Делаем:
Код:
cd /usr/ports
make search name=php5 | grep mysql
Получаем ответ:
Port: php5-mysql-5.1.2_1
Path: /usr/ports/databases/php5-mysql
Info: The mysql shared extension for php
Можно воспользоваться утилитой portsearch
Код:
/usr/ports/Tools/scripts/portsearch -n mysql -d php5
Q: А вот при использовании исходников и чтении документации в них проблем - минимум.
A: Неправда. Проблем больше. Потому, что надо помнить, что и куда было установлено, какой версии и для чего именно. При этом, через полгода вы все равно забудете про то, что и куда ставили.
Q: А как на счет оптимизации?
A: Если вам действительно нужна скорость, ставьте ТОЛЬКО из портов. Как правило, порты имеют дополнительные флаги для сборки оптимизированного кода в зависимости от конкретной архитектуры. Так, mysql и openssl на x86 / amd64 собираются с широким использованием кода, написанного на ассемблере.
Q: Где искать порты?
A: На http://www.freshports.org/, и.... (о чудо!) на http://www.freebsd.org/
Q: Как обновлять дерево портов?
A: На FreeBSD версии 5.5 и 6.X - при помощи программы portsnap, которая является частью базовой системы. В первый раз она скачает достаточно много, порядка 45 мегабайт, но потом будет обновлять только измененные порты, а это совсем небольшой трафик. Первый запуск:
Код:
portsnap fetch
portsnap extract
portsnap update
Последующие запуски:
Код:
portsnap fetch
portsnap update
На старых версиях (FreeBSD 4.X и FreeBSD 5.X до версии 5.5) можно воспользоваться cvsup (или csup - аналог cvsup, который полностью переписан с Modula-3 на C) или поставить из портов portsnap
cvsup:
Код:
/usr/ports/net/cvsup-without-gui
csup:
/usr/ports/net/csup
Обновление выглядит так:
Код:
cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile
csup -g -L 2 /usr/share/examples/cvsup/ports-supfile
предварительно указав в файле ports-supfile хост, с которого будет скачиваться обновленно дерево портов.
portsnap:
Код:
/usr/ports/sysutils/portsnap
Q: Как обновлять установленные порты?
A: Порты следует обновлять программой portupgrade
Поставить ее можно из портов:
Код:
cd /usr/ports/ports-mgmt/portupgrade
make install clean
Q: Как проверить установленное ПО на уязвимость?
A: Очень просто: установив и запустив программу portaudit.
Код:
cd /usr/ports/security/portaudit
make install clean
или:
Код:
cd /usr/ports/ports-mgmt/portaudit
make install clean
Вся процедура аудита очень проста:
Код:
portaudit -Fda
auditfile.tbz 100% of 33 kB 40 kBps
New database installed.
Database created: вторник, 28 февраля 2006 г. 17:10:12 (MSK)
0 problem(s) in your installed packages found.
Q: Не всегда ведь в портах используются по умолчанию те опции, которые нужны. Как правильно их изменять? Если по умолчанию не установлены необходимые опции, их можно указать при сборке, например
Код:
make -DWITHOUT_IPV6=YES WITH_STATIC_SUPPORT
или установив переменные окружения
Код:
tcsh: setenv WITHOUT_IPV6 YES
bash: export WITHOUT_IPV6=YES
или - прописав в файле /etc/make.conf
Код:
.if ${.CURDIR:N*/ports/<категория>/<название>} == ""
WITHOUT_IPV6=YES
<...>
<другие опции>
.endif
Q: Как изменить опции сборки (те что выбираются в синем окне)?
A: В директории порта выполните:
Код:
make rmconfig
make config
Q: Как правильно накладывать патчи?
A: Для грамотного наложения патча нужно выполнить следующие действия:
Код:
cd /usr/ports/some/prog
fetch http://host.org/patch
mv patch files/patch-some.patch
make build
При таком подходе больше не придется каждый раз руками накладывать данный патч, система сделает все сама.
Q: Можно ли заставить portsnap работать через proxy?
A: Можно. portsnap это скрипт, который использует fetch. Достаточно установить в шелле переменные окружения HTTP_PROXY и FTP_PROXY (man 3 fetch).
Для tcsh:
Код:
setenv HTTP_PROXY http://user:pass@192.168.0.1:3128
setenv FTP_PROXY ftp://user:pass@192.168.0.1:3128
Для bash:
Код:
export HTTP_PROXY=http://user:pass@192.168.0.1:3128
export FTP_PROXY=ftp://user:pass@192.168.0.1:3128
Кроме того, в специфических случаях скрипт portsnap можно отредактировать под свои нужды.
Q: Где прописать в системе откуда ей стоит брать порты?
A: Всё в том же /etc/make.conf
Код:
MASTER_SITE_OVERRIDE=http://ftp7.ua.freebsd.org/pub/FreeBSD/ports/distfiles/ \
http://ftp2.ua.freebsd.org/pub/FreeBSD/ports/distfiles/
Q: Свежая версия порта не работает/работает не так как я хочу. как мне откатится назад?
A: воспользуйтесь утилитой /usr/ports/ports-mgmt/portdowngrade При запуске - требуется указать путь к репозиторию и имя порта с категорией, например:
Код:
# portdowngrade -s:pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs net-mgmt/zabbix-agent$
утилита выведет вам историю ревизий порта, где вы сможете выбрать нужную вам версию:
Код:
=================================================================================================================
number date portversion comment
1 2007/12/17 18:27:53 1.4.4 - Update to 1.4.4 (bugfix-only)
2 2007/12/13 08:36:15 1.4.3_1 - Add support for IPv6
3 2007/12/12 23:02:06 1.4.3 Update to 1.4.3
4 2007/08/27 18:35:50 1.4.2 - Update to 1.4.2
5 2007/06/30 06:49:18 1.4.1 - Update to 1.4.1
6 2007/06/22 15:10:34 1.4 - Move zabbix from UID 112 to 122 to avoid conflict with dcc
<...>
после чего, необходимо сделать для данного порта portupgrade:
Код:
portupgrade -f zabbix-agent
Вот и все. Подробности в man portdowngrade
Q: Как мне "заморозить" порт (или категорию портов) чтобы он не обновлялся при обновлении всего дерева портов?
A: Перейдите с использования portsnap (если используется portsnap) на csup и используйте refuse файлы. refuse файл содержит шаблон, описывающий файлы, не требущие обновления. например:
объяснит csup, что не нужно обновлять jboss4
refuse файлы модно класть в каталог /foo/sup, где foo - каталог описанный директивой base supfile (опция -b при запуске csup), например для base=/usr:
Код:
/usr/sup/refuse
/usr/sup/ports-all/refuse
/usr/sup/src-all/refuse
(c) .sysfaq.ru
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|