PDA

Просмотр полной версии : Установка ПО в системе FreeBSD


PandoraBox
26.08.2008, 18:33
Установка ПО в операциононй системе 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 файл содержит шаблон, описывающий файлы, не требущие обновления. например:

ports/java/jboss4

объяснит 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

zythar
26.08.2008, 22:08
док хороший. про то что нуно ставить тока из портов - бред. порты не всегда пополняются так оперативно как хотелось бы. в портах не всегда есть то что тебе нужно на данный момент и иногда действительно легче ставить из сорсов.

PandoraBox
26.08.2008, 23:19
аналог wget на FreeBSD должен быть fetch

Линки на свежие дистрибутивы:
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:
cd /usr/ports/databases/mysql51-server/
make install clean
После установки:
скрипт для запуска
/usr/local/etc/rc.d/mysql-serverСтартуем и устанавливаем пароль рута:
/etc/rc.conf
mysql_enable="YES"/usr/local/etc/rc.d/mysql-server start
/usr/local/bin/mysqladmin -u root password 'new-password'
new-password - это пароль от root юзера мускула.

Apache:
cd /usr/ports/www/apache22/
make install cleanдля автозапуска:
в
/etc/rc.confapache22_enable="YES"
запускаем
apachectl start
ВСЁ.

PHP:
cd /usr/ports/lang/php5
make install clean
cd /usr/ports/lang/php5-extensions/
make install clean

phpMyAdmin:
make install clean
Потом
Редактируем файл конфигурации апача, например с помощью ее:
ee /usr/local/etc/apache22/httpd.conf
или если есть Миднайт, то
mcedit /usr/local/etc/apache22/httpd.conf
ищем строчки с надписями AddType и дописываем туда:

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/" (если параноик, имя можно не стандартное)
Насчёт слешей в конце путей не уверен, вроде не нужны, хз и так и так работает
и ещё добавляем:
<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 заменяем на ай-пи откуда будем заходить в ПМА.

И ЕЩЁ.
Ищем строки
<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

Получиться ,что то типа такого:
<?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 текстом:


<?phpinfo()?>


Нарушишь порядок, или спутаешь версии - иди покупай бубен, будешь шаманить.

Установка из исходников (оффтоп):

cd /usr/ports/graphics/gd
make installсоздания папок для дистибутивов и распакованых исходников:mkdir /usr/local/distr
mkdir /usr/local/srcРазпаковка TAR:

tar -zxvf <ФАЙЛ> -C <Путь_куда_распаковывать>пример:tar -zxvf apache_1.3.41.tar.gz -C /usr/local/srcПомощь (параметры настройки):./configure --helpконфигурирование (с параметрами настройки) ./configure (параметры.. ... )Установка из исходников:

make
make install

Удаление из исходников:
cd <путь к исходным текстам>
make uninstall / make distclean
make clean

procedure
09.09.2008, 14:05
ТС сам писал?

А если мне не нужно устанавливать какую либо или несколько зависимых библиотек?

Alexsize
09.09.2008, 14:36
ТС сам писал?

А если мне не нужно устанавливать какую либо или несколько зависимых библиотек?
При установке из портов,все что надо само выкачаеться и все зависимости будут удовлетворены.
Сразу оговорюсь - иксы и кеды ставить с портов не советую :D Хотя можно.

NuR
09.09.2008, 15:04
копипастер, оригинал тут http://wiki.sysfaq.ru/w/index.php/Установка_ПО_в_системе_FreeBSD

Dober'man
09.09.2008, 15:53
Ох ё, уже википедию копирайтить начали...
ps/ может хэндбук под себя заточить?! :D
копипастер, оригинал тут http://wiki.sysfaq.ru/w/index.php/Установка_ПО_в_системе_FreeBSD
Причем жёсткий!!!

SpangeBoB
09.09.2008, 16:15
Что не нравится он же указал sysfaq.ru,там закрепили за wiki,чтобы была всегда на виду.В первые она появилась на http://sysadmins.ru/topic107676.html .

PandoraBox
04.01.2009, 03:12
1. Устанавливаем сервер memcached
cd /usr/ports/databases/memcached
make && make install && make clean
Настраиваем.
По умолчанию memcached слушает на всех адресах, чего нам не нужно (достаточно localhost).
#./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
pecl install memcache

Прошло нормально? Значит повезло.
У меня FreeBSD пятерка, возникли некоторые проблемы:
/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.

которые решались следующим образом.
export PHP_AUTOCONF=autoconf
export PHP_AUTOHEADER=autoheader

phpize
./configure
make
make install

Installing shared extensions: /usr/local/lib/php/20060613/

То есть установка ручками.
Настраиваем php для работы с новоиспеченным модулем.
[root@host /usr/local/etc/php]# tail ./extensions.ini
extension=memcache.so

3. Перезагрузка сервисов
/usr/local/etc/rc.d/memcached.sh start
apachectl restart

4. Проверяем работу
#!/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 лучше собрать из портов, чтобы удобнее обновлять
/usr/ports/databases/pecl-memcache

Класс для работы с memcached из php можно найти на phpclasses.org, например:
http://www.phpclasses.org/browse/file/17230.html

PandoraBox
07.02.2009, 13:51
Устанавливаем сервер eAccelerator из портов
cd /usr/ports/www/eaccelerator
make
make install
изменяем файл php.ini
vi /usr/local/Zend/etc/php.ini
по умолчанию где он находится иначе введите свой путь :p
добавляем строчки
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"
Комментируем следующие строчки в конфиге:
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:
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:
mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
Вы можете проверить, работает ли eAccelerator скопировав в вашу папку htdocs:
/usr/ports/www/eaccelerator/work/eaccelerator/eaccelerator.php

PandoraBox
16.02.2009, 22:34
FreeBSD

FreeBSD has the ports and lighttpd is in this tree for a long time now.

# cd /usr/ports/www/lighttpd
# make install clean

# 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.

# 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:

# 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):

# 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:

# 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:

* server.errorlog = "/var/log/lighttpd/lighttpd.error.log"
* accesslog.filename = "/var/log/lighttpd/lighttpd.access.log"

Edit lighttpd.conf docroot:

* server.document-root = "/usr/local/www/"

Test to make sure Lighttpd starts up properly:

# /usr/local/etc/rc.d/lighttpd start

If you need to, you may shutdown lighttpd this way:

# /usr/local/etc/rc.d/lighttpd stop

And then restart it with this:

# /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:

"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):

# 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:

# chown www:www /var/run/lighttpd
# chown www:www /var/run/lighttpd/php-fastcgi.socket