Установка ПО в операциононй системе 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. При этом надо помнить про пути установки, флаги оптимизации, дополнительные зависимости, писать вручную скрипты автозапуска.... А при установке из портов все делается ровно в две команды: Code: cd /usr/ports/databases/php5-extensions make install clean Q: Где читать про то, что нужно поставить из портов для нормальной работы какого-либо пакета чтобы потом не тыкаться в ошибки? A: Система портов сделана так, что она автоматически находит все зависимости. Поэтому не надо беспокоиться, что система что-то "забудет" поставить. Будет установлено только то, что нужно для работы. Например, надо поставиь поддержку mysql для PHP5, но мы не знаем, в каком порте искать. Делаем: Code: 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 Code: /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 мегабайт, но потом будет обновлять только измененные порты, а это совсем небольшой трафик. Первый запуск: Code: portsnap fetch portsnap extract portsnap update Последующие запуски: Code: portsnap fetch portsnap update На старых версиях (FreeBSD 4.X и FreeBSD 5.X до версии 5.5) можно воспользоваться cvsup (или csup - аналог cvsup, который полностью переписан с Modula-3 на C) или поставить из портов portsnap cvsup: Code: /usr/ports/net/cvsup-without-gui csup: /usr/ports/net/csup Обновление выглядит так: Code: cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile csup -g -L 2 /usr/share/examples/cvsup/ports-supfile предварительно указав в файле ports-supfile хост, с которого будет скачиваться обновленно дерево портов. portsnap: Code: /usr/ports/sysutils/portsnap Q: Как обновлять установленные порты? A: Порты следует обновлять программой portupgrade Поставить ее можно из портов: Code: cd /usr/ports/ports-mgmt/portupgrade make install clean Q: Как проверить установленное ПО на уязвимость? A: Очень просто: установив и запустив программу portaudit. Code: cd /usr/ports/security/portaudit make install clean или: Code: cd /usr/ports/ports-mgmt/portaudit make install clean Вся процедура аудита очень проста: Code: 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: Не всегда ведь в портах используются по умолчанию те опции, которые нужны. Как правильно их изменять? Если по умолчанию не установлены необходимые опции, их можно указать при сборке, например Code: make -DWITHOUT_IPV6=YES WITH_STATIC_SUPPORT или установив переменные окружения Code: tcsh: setenv WITHOUT_IPV6 YES bash: export WITHOUT_IPV6=YES или - прописав в файле /etc/make.conf Code: .if ${.CURDIR:N*/ports/<категория>/<название>} == "" WITHOUT_IPV6=YES <...> <другие опции> .endif Q: Как изменить опции сборки (те что выбираются в синем окне)? A: В директории порта выполните: Code: make rmconfig make config Q: Как правильно накладывать патчи? A: Для грамотного наложения патча нужно выполнить следующие действия: Code: 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: Code: setenv HTTP_PROXY http://user:[email protected]:3128 setenv FTP_PROXY ftp://user:[email protected]:3128 Для bash: Code: export HTTP_PROXY=http://user:[email protected]:3128 export FTP_PROXY=ftp://user:[email protected]:3128 Кроме того, в специфических случаях скрипт portsnap можно отредактировать под свои нужды. Q: Где прописать в системе откуда ей стоит брать порты? A: Всё в том же /etc/make.conf Code: 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 При запуске - требуется указать путь к репозиторию и имя порта с категорией, например: Code: # portdowngrade -s:pserver:[email protected]:/home/ncvs net-mgmt/zabbix-agent$ утилита выведет вам историю ревизий порта, где вы сможете выбрать нужную вам версию: Code: ================================================================================================================= 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: Code: portupgrade -f zabbix-agent Вот и все. Подробности в man portdowngrade Q: Как мне "заморозить" порт (или категорию портов) чтобы он не обновлялся при обновлении всего дерева портов? A: Перейдите с использования portsnap (если используется portsnap) на csup и используйте refuse файлы. refuse файл содержит шаблон, описывающий файлы, не требущие обновления. например: Code: ports/java/jboss4 объяснит csup, что не нужно обновлять jboss4 refuse файлы модно класть в каталог /foo/sup, где foo - каталог описанный директивой base supfile (опция -b при запуске csup), например для base=/usr: Code: /usr/sup/refuse /usr/sup/ports-all/refuse /usr/sup/src-all/refuse (c) .sysfaq.ru
док хороший. про то что нуно ставить тока из портов - бред. порты не всегда пополняются так оперативно как хотелось бы. в портах не всегда есть то что тебе нужно на данный момент и иногда действительно легче ставить из сорсов.
Установка Apache+MySQL+PHP (сборка с тутариала) Code: аналог wget на FreeBSD должен быть fetch Линки на свежие дистрибутивы: Code: Apache 2.2.9 (New) - http://apache.infocom.ua/httpd/httpd-2.2.9.tar.gz Apache 1.3.41 (Stable) - http://apache.infocom.ua/httpd/apache_1.3.41.tar.gz GD-2.0.35 - http://www.libgd.org/releases/gd-2.0.35.tar.gz MySQL-5.0.67 (New) - http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.67.tar.gz/from/pick#mirrors phpMyAdmin-2.11.8.1 (all-languages, NEW) - http://sourceforge.net/project/showfiles.php?group_id=23067&package_id=287971&release_id=620064 PHP 5.2.6 Release (NEW Stable) - http://www.php.net/get/php-5.2.6.tar.gz/from/a/mirror PHP 6.0 Beta New Tech (NEW Beta) - http://snaps.php.net/php6.0-200808261830.tar.gz Скачать последнюю версию Apache всегда можно на http://httpd.apache.org/ , а PHP на http://www.php.net/.Качаем исходники MySQL с http://mysql.com и дополнительные файлам по ссылкам выше Установка с портов: Ставить ее на FreeBSD при наличии портов очень просто: MySQL: Code: cd /usr/ports/databases/mysql51-server/ make install clean После установки: скрипт для запуска Code: /usr/local/etc/rc.d/mysql-server Стартуем и устанавливаем пароль рута: /etc/rc.conf Code: mysql_enable="YES" Code: /usr/local/etc/rc.d/mysql-server start /usr/local/bin/mysqladmin -u root password 'new-password' new-password - это пароль от root юзера мускула. Apache: Code: cd /usr/ports/www/apache22/ make install clean для автозапуска: в /etc/rc.conf Code: apache22_enable="YES" запускаем Code: apachectl start ВСЁ. PHP: Code: cd /usr/ports/lang/php5 make install clean cd /usr/ports/lang/php5-extensions/ make install clean phpMyAdmin: Code: make install clean Потом Редактируем файл конфигурации апача, например с помощью ее: ee /usr/local/etc/apache22/httpd.conf или если есть Миднайт, то Code: mcedit /usr/local/etc/apache22/httpd.conf ищем строчки с надписями AddType и дописываем туда: Code: AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps Так мы обьясняем апачу что делать с файлами с расширениями php и phps Ищем опять похожи строчки, и добавляем ниже: Alias /phpmyadmin/ "/usr/local/www/phpMyAdmin/" так мы делаем алиас на папку в которой стоит PHPMYADMIN , имя любое можно так, писать короче: Alias /pma/ "/usr/local/www/phpMyAdmin/" (если параноик, имя можно не стандартное) Насчёт слешей в конце путей не уверен, вроде не нужны, хз и так и так работает и ещё добавляем: Code: <Directory "/usr/local/www/phpMyAdmin/"> Options none AllowOverride Limit Order Deny,Allow Deny from all Allow from 127.0.0.1 .example.com </Directory> Этим мы типа как выставляем права на папку с пма. .example.com заменяем на ай-пи откуда будем заходить в ПМА. И ЕЩЁ. Ищем строки Code: <IfModule dir_module> DirectoryIndex index.html </IfModule> И меняем их на: <IfModule dir_module> DirectoryIndex index.html index.shtml index.htm index.php </IfModule> Так мы объясняем апаче, что файлы index.shtml index.htm index.php тоже нада открывать первыми, так же как индекс.хтмль Сохраняем. Рестартуем апач. apachectl restart Заиплось, почти. уже сейчас, зайдя по адрессу http://moyservak/pma Мы кое-что увидим, но не то что нам нада. Потому что нада ещё отконфигурить pma. Можно сделать это самому скопировав и отредактировав пример. Можно запустить скрипт http://moyservak/pma/scripts/setup.php ( только не вьехал как с него сохранять, но во всяком случае полученный конфиг можно увидеть и скопипастить) ......Скопипастить в: /usr/local/www/phpMyAdmin/config.inc.php Получиться ,что то типа такого: Code: <?php /* $FreeBSD: ports/databases/phpmyadmin/files/config.inc.php.sample,v 1.3 2006/05/16 06:43:23 clsung Exp $ * * Skeleton configuration file -- this file is empty on a fresh * installaton of phpmyadmin. * * Copy any settings you want to override from * libraries/config.default.php or use scripts/setup.php to generate a * basic configuration file * */ /* Servers configuration */ $i = 0; /* Server localhost (http) [1] */ $i++; $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['extension'] = 'mysql'; $cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['auth_type'] = 'http'; /* End of servers configuration */ ?> ВСЁ. Теперь Должно Заевестись!!! На всякий, проверить работоспособность , верисю, модули и тд в пхп, - нада создать файл index.php c текстом: Code: <?phpinfo()?> Нарушишь порядок, или спутаешь версии - иди покупай бубен, будешь шаманить. Установка из исходников (оффтоп): Code: cd /usr/ports/graphics/gd make install создания папок для дистибутивов и распакованых исходников: Code: mkdir /usr/local/distr mkdir /usr/local/src Разпаковка TAR: Code: tar -zxvf <ФАЙЛ> -C <Путь_куда_распаковывать> пример: Code: tar -zxvf apache_1.3.41.tar.gz -C /usr/local/src Помощь (параметры настройки): Code: ./configure --help конфигурирование (с параметрами настройки) Code: ./configure (параметры.. ... ) Установка из исходников: Code: make make install Удаление из исходников: Code: cd <путь к исходным текстам> make uninstall / make distclean make clean
При установке из портов,все что надо само выкачаеться и все зависимости будут удовлетворены. Сразу оговорюсь - иксы и кеды ставить с портов не советую Хотя можно.
Что не нравится он же указал sysfaq.ru,там закрепили за wiki,чтобы была всегда на виду.В первые она появилась на http://sysadmins.ru/topic107676.html .
Настраиваем PHP+MemCached 1. Устанавливаем сервер memcached PHP: cd /usr/ports/databases/memcached make && make install && make clean Настраиваем. По умолчанию memcached слушает на всех адресах, чего нам не нужно (достаточно localhost). PHP: #./memcached -d -m 2048 -p 11211 -u nobody -l 127.0.0.1 # в rc.conf memcached_enable="YES" memcached_flags="-l 127.0.0.1" 2. Устанавливаем расширение для php PHP: pecl install memcache Прошло нормально? Значит повезло. У меня FreeBSD пятерка, возникли некоторые проблемы: PHP: /usr/local/bin/phpize: /tmp/download/memcache-2.2.3/build/shtool: Permission denied Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable is set correctly and then rerun this script. которые решались следующим образом. PHP: export PHP_AUTOCONF=autoconf export PHP_AUTOHEADER=autoheader phpize ./configure make make install Installing shared extensions: /usr/local/lib/php/20060613/ То есть установка ручками. Настраиваем php для работы с новоиспеченным модулем. PHP: [root@host /usr/local/etc/php]# tail ./extensions.ini extension=memcache.so 3. Перезагрузка сервисов PHP: /usr/local/etc/rc.d/memcached.sh start apachectl restart 4. Проверяем работу PHP: #!/usr/local/bin/php <?php $memcache = new Memcache; $memcache->connect('localhost', 11211) or die ("Could not connect"); $version = $memcache->getVersion(); echo "Server's version: ".$version."<br/>\n"; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server"); echo "Store data in the cache (data will expire in 10 seconds)<br/>\n"; $get_result = $memcache->get('key'); echo "Data from the cache:<br/>\n"; var_dump($get_result); Tip's: Для фряхи модуль для php лучше собрать из портов, чтобы удобнее обновлять PHP: /usr/ports/databases/pecl-memcache Класс для работы с memcached из php можно найти на phpclasses.org, например: http://www.phpclasses.org/browse/file/17230.html
Установка eAccelerator на FreeBSD Устанавливаем сервер eAccelerator из портов PHP: cd /usr/ports/www/eaccelerator make make install изменяем файл php.ini Code: vi /usr/local/Zend/etc/php.ini по умолчанию где он находится иначе введите свой путь добавляем строчки PHP: zend_extension="/usr/local/lib/php/20020429/eaccelerator.so" eaccelerator.shm_size="32" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" Комментируем следующие строчки в конфиге: PHP: zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-2.5.7 zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-2.5.7 Если вы не используете Zend optimiser добавить следующее к php.ini: PHP: extension="eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" Создать каталог для кеша eAccelerator: PHP: mkdir /tmp/eaccelerator chmod 0777 /tmp/eaccelerator Вы можете проверить, работает ли eAccelerator скопировав в вашу папку htdocs: Code: /usr/ports/www/eaccelerator/work/eaccelerator/eaccelerator.php
LightHTTPd Install for FreeBSD FreeBSD FreeBSD has the ports and lighttpd is in this tree for a long time now. Code: # cd /usr/ports/www/lighttpd # make install clean Code: # cd /usr/ports/lang/php5/ # make install clean Make sure you enable FastCGI support in the configuration dialog. If you don't get the configuration dialog, do "make config" first. The additional CONFIG_ARGS for the PHP5 installation force cgi-fcgi support in /usr/local/bin/php. The option '--with-pcre-regex' is needed to support several functions that use regular expressions like 'preg_match'. php -v should give you something like this: PHP 5.2.5 with Suhosin-Patch 0.9.6.2 (cli) (built: Dec 8 2007 05:47:06) Copyright (c) 1997-2007 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies PHP extensions are in /usr/ports/lang/php5-extensions/. If you need mySQL support, that is where you can find it, select only extensions that you actually need. During compiling when it asks you to install UTF8 support, I suggest you install it. Code: # cd /usr/ports/lang/php5-extensions # make config # make install clean Now that everything is installed, enable Lighttpd in rc.conf and edit it's configuration: Code: # echo lighttpd_enable=\"YES\" >> /etc/rc.conf # cd /usr/local/etc/ # cp lighttpd.conf.sample lighttpd.conf # cp php.ini-recommended php.ini You will probably need to create some directories and files, since the port neglects to do them for you (as of 2008 February 24): Code: # mkdir /var/log/lighttpd # touch /var/log/lighttpd/lighttpd.error.log # touch /var/log/lighttpd/lighttpd.access.log Make your new directories and files accessible by the user and group "www" that Lighttpd operates as: Code: # chown www:www /var/log/lighttpd # chown www:www /var/log/lighttpd/lighttpd.error.log # chown www:www /var/log/lighttpd/lighttpd.access.log Edit lighttpd.conf to use the new directories and files as follows: Code: * server.errorlog = "/var/log/lighttpd/lighttpd.error.log" * accesslog.filename = "/var/log/lighttpd/lighttpd.access.log" Edit lighttpd.conf docroot: Code: * server.document-root = "/usr/local/www/" Test to make sure Lighttpd starts up properly: Code: # /usr/local/etc/rc.d/lighttpd start If you need to, you may shutdown lighttpd this way: Code: # /usr/local/etc/rc.d/lighttpd stop And then restart it with this: Code: # /usr/local/etc/rc.d/lighttpd restart If you get an error that says "permission denied", check to make sure that the files and directories mentioned exist AND that user www has permission to operate on them. Also be sure that lighttpd.conf has been corrected from the non-working default version. If you get no errors, put an HTML file in /usr/local/www/ and try to load it up in your browser. If everything works, now enable PHP: * In section "server.modules" uncomment the line "mod_fastcgi" * uncomment the entire section "fastcgi.server" * add the following lines under "socket" in the "fastcgi.server" section: Code: "bin-path" => "/usr/local/bin/php-cgi", "broken-scriptfilename" => "enable" Now make some more files and directories that are missing from the port (as of 2008 Feb 29): Code: # mkdir /var/run/lighttpd # touch /var/run/lighttpd/php-fastcgi.socket Make your new directories and files accessible by the user and group "www" that Lighttpd operates as: Code: # chown www:www /var/run/lighttpd # chown www:www /var/run/lighttpd/php-fastcgi.socket