igNix.ru
Опубликовано igNix.ru (http://www.ignix.ru)

Главная > Версия для печати > Версия для печати

Дополнительно

Ваша оценка: Нет Средняя: 5 (9 голосов)

BsdRAR

RAR — распространённый проприетарный формат сжатия данных и так же называется программа-архиватор.

Формат разработан российским программистом Евгением Рошалом (отсюда и название RAR: Roshal Archiver). Он написал программу-архиватор для упаковки/распаковки RAR, изначально под DOS, затем и для других операционных систем. Версия для Microsoft Windows распространяется в составе многоформатного архиватора с графическим интерфейсом WinRAR.

Программа распространяется как условно-бесплатное программное обеспечение (shareware).

Для файлов формата RAR обычно используется расширение ".rar" и MIME-тип "application/x-rar-compressed".

# cd /usr/ports/archivers/rar/ && make install clean
~~~
# rar
 
RAR 3.93   Copyright (c) 1993-2010 Alexander Roshal   15 Mar 2010
Shareware version         Type RAR -? for help 

Затем качаем кейген, создаём файл rarreg.key
перемещаем его в /etc

# ls -l /etc/|grep rar
-rw-r--r--  1 root  wheel       482 28 дек 09:30 rarreg.key

И получаем слудующее:

# rar
 
RAR 3.93   Copyright (c) 1993-2010 Alexander Roshal   15 Mar 2010
Registered to ttys

ВложениеРазмер
keygen.tar.gz216.46 КБ
Ваша оценка: Нет Средняя: 5 (13 голосов)

Midnight Commander - настройка скинов

Как выяснилось есть возможность настраивать Midnight Commander

И есть возможность менять шкурки!!!

По умолчанию они лежат в следующей директории:

ls -l /usr/local/share/mc/skins/

total 10
-r--r--r--  1 root  wheel  1946 15 мар 14:44 darkfar.ini
-r--r--r--  1 root  wheel  1604 15 мар 14:44 default.ini
-r--r--r--  1 root  wheel  1546 15 мар 14:44 double-lines.ini
-r--r--r--  1 root  wheel  1849 15 мар 14:44 featured.ini
-r--r--r--  1 root  wheel  1340 15 мар 14:44 gotar.ini

В домашнем каталоге пользователя есть директория /.mc
и в ней файл ini

vi ~/.mc/ini

В строке
skin=default

Значение default это имя скина его меняем на название скина из директории /usr/local/share/mc/skins/

Дополнительные опции МС:

mc -h

Параметры справки:
-h, --help                     Показать параметры справки
--help-all                     Показать все параметры справки
--help-terminal                Опции терминала
--help-color                   Цветовые опции
Параметры приложения:
-V, --version                  Показать текущую версию
-f, --datadir                  Распечатать имя каталога для данных
-P, --printwd=<file>           Записать последний рабочий каталог в указанный файл
-u, --nosubshell               Отключить поддержку встроенной командной оболочки
-l, --ftplog=<file>            Записывать диалог с FTP в заданный файл
-D, --debuglevel=<integer>     Установить уровень отладки
-v, --view=<file>              Просматривать файл
-e, --edit=<file>              Редактировать файл
-U, --subshell                 Включить поддержку встроенной командной оболочки
                               (по умолчанию)

Эти значения можно добавить в alias как это сделать написано в разделе

  • Настройка консоли

Ваша оценка: Нет Средняя: 2.8 (4 голоса)

RCS - Ведение истории изменений в UNIX

Иногда очень важно знать, что изменилось в конкретном файле на критическом важном сервере с последующим восстановлением конфигурационного файла. А так же, кто, когда и что там менял. Для этого есть встроенная утилита Revision Control System (RCS). Пользоваться ей очень легко только нужно привыкнуть к работе с ней.

Директория

Создайте в той директории, где находится файл директорию "./RCS" там будут лежать контрольные версии файлов данной директории. Пример:

# mkdir /etc/RCS 

Ну вот и все готово =) теперь воспользуемся ей. Для примера возьмем /etc/rc.conf.

Регистрация файла

Для начала ведения истории необходима команда "ci -l".

ci - сокращение от "check in" регистрация - помещает содержимого файла в архивный файл, хранящий его предыдущие версии (а точнее, изменения между его версиями) называемый также RCS-файлом.

Пример:

# ci -l /etc/rc.conf
/etc/RCS/rc.conf,v  <--  /etc/rc.conf
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> .
initial revision: 1.1
done
# ll /etc/RCS/
total 4
-r--r--r--  1 root  wheel   2,1K 25 окт 13:25 rc.conf,v

Теперь история изменений файла будет хранится в созданной директории /etc/RCS в одноименном файле с пометкой ",v".

Редактирование файла

Для редактирования файла запишите его контрольное значение с помощью команды "co -l".

co - сокращение от "check out" представляют собой получение копии некоторой версии из RCS-архива.

Пример:

# co -l /etc/rc.conf
/etc/RCS/rc.conf,v  -->  /etc/rc.conf
revision 1.1 (locked)
writable /etc/rc.conf exists; remove it? [ny](n): n
co: checkout aborted

Затем измените этот файл своим редактором.

Когда изменения будут внесены подтвердите изменения командой "ci -u":
Пример:

# ci -u /etc/rc.conf
/etc/RCS/rc.conf,v  <--  /etc/rc.conf
new revision: 1.2; previous revision: 1.1
enter log message, terminated with single '.' or end of file:
>> .
done

Контроль работы с файлом

Так же полезно запускать "rcsdiff" перед запуском "co" таким образом вы уведите, кто внес изменение в файл и забыл воспользоваться RCS.

# rcsdiff /etc/rc.conf
===================================================================
RCS file: /etc/RCS/rc.conf,v
retrieving revision 1.2
diff -r1.2 /etc/rc.conf

Тут все в порядке.

Ели вы увидели, что, кто то внес изменения в этот файл как в примере ниже:

# rcsdiff /etc/rc.conf
===================================================================
RCS file: /etc/RCS/rc.conf,v
retrieving revision 1.2
diff -r1.2 /etc/rc.conf
83d82
< #TEST

То можете подтвердить это изменение командой "rcs -l", а затем выполнить обычную команду подтверждения изменений "ci -u" :
# rcs -l /etc/rc.conf
RCS file: /etc/RCS/rc.conf,v
done
# ci -u /etc/rc.conf
/etc/RCS/rc.conf,v  <--  /etc/rc.conf
new revision: 1.3; previous revision: 1.2
enter log message, terminated with single '.' or end of file:
>> .
done

Восстановления файла

Восстановление до последней текущий ревизии.

# co rc.conf
RCS/rc.conf,v  -->  rc.conf
revision 1.2

До конкретной версии файла
# co -r1.1 rc.conf
RCS/rc.conf,v  -->  rc.conf
revision 1.1
done

Освоение этих нескольких команд позволит вам сохранить свои нервы и сэкономить время в дальнейшем.

В RCS есть много полезных команд "rlog" для отображении истории изменения файла, а так же как выглядят предыдущие версии "co -p -rX.X" и тп.

Дополнительные материалы
Ссылки: 
>>ВЕТКА ФОРУМА<<
Ваша оценка: Нет Средняя: 4.6 (16 голосов)

pkg_tree - Визуальное дерево пакетов и их зависимостей

Эта небольшая утилита помогает мне разобраться на серверах с установленными не мною портами и отсеять зерна от плевел и надеюсь вам она тоже понравится.

# cd /usr/ports/
# make search key=pkg_tree
Port:   pkg_tree-1.1_1
Path:   /usr/ports/ports-mgmt/pkg_tree
Info:   Get a 'graphical' tree-overview of installed packages
Maint:  edwin@mavetju.org
B-deps: perl-5.10.1
R-deps: perl-5.10.1
WWW:    _http://www.mavetju.org/
 
# cd /usr/ports/ports-mgmt/pkg_tree ; make install clean

Чтобы показать зависимости всех пакетов, запустите без аргументов (для удобства чтения используйте контейнер с more):

# pkg_tree |more
ImageMagick-nox11-6.5.8.10_1
|\__ expat-2.0.1_1
|\__ gsfonts-8.11_5
|\__ python26-2.6.4
|\__ perl-5.8.9_3
|\__ png-1.2.42
|\__ libfpx-1.2.0.12_1
|\__ lcms-1.18a_1,1
|\__ jpeg-7
|\__ jbigkit-1.6
|\__ tiff-3.9.2
|\__ pkg-config-0.23_1
|\__ freetype2-2.3.11
|\__ fontconfig-2.8.0,1
|\__ pcre-8.00
|\__ libltdl-2.2.6b
|\__ libiconv-1.13.1_1
|\__ libxml2-2.7.6_1
|\__ gettext-0.17_1
|\__ libgpg-error-1.7
|\__ libgcrypt-1.4.4
--More--(byte 421)

Чтобы отобразить зависимости одного пакета, запустите его с нужным аргументом:

# pkg_tree zabbix-server-1.8.2_1,2
zabbix-server-1.8.2_1,2
|\__ libssh2-1.2.4,2
|\__ ca_root_nss-3.12.4
|\__ openldap-client-2.4.21
|\__ fping-2.4b2_1
|\__ perl-5.8.9_3
|\__ net-snmp-5.4.2.1_6
|\__ curl-7.19.7_1
|\__ pkg-config-0.23_1
|\__ mysql-client-5.0.89
|\__ libiconv-1.13.1_1
|\__ gettext-0.17_1
|\__ libgpg-error-1.7
|\__ libgcrypt-1.4.4
|\__ gnutls-2.8.3
 \__ iksemel-1.4_1

Чтобы отобразить зависимости зависимостей, используйте параметр -v:

# pkg_tree -v zabbix-server-1.8.2_1,2
zabbix-server-1.8.2_1,2
|\__ libssh2-1.2.4,2
|\__ ca_root_nss-3.12.4
|\__ openldap-client-2.4.21
|\__ fping-2.4b2_1
|\__ perl-5.8.9_3
|\__ net-snmp-5.4.2.1_6
|      \__ perl-5.8.9_3
|\__ curl-7.19.7_1
|      \__ ca_root_nss-3.12.4
|\__ pkg-config-0.23_1
|\__ mysql-client-5.0.89
|\__ libiconv-1.13.1_1
|\__ gettext-0.17_1
|      \__ libiconv-1.13.1_1
|\__ libgpg-error-1.7
|     |\__ libiconv-1.13.1_1
|      \__ gettext-0.17_1
|            \__ libiconv-1.13.1_1
|\__ libgcrypt-1.4.4
|     |\__ libiconv-1.13.1_1
|     |\__ gettext-0.17_1
|     |      \__ libiconv-1.13.1_1
|      \__ libgpg-error-1.7
|           |\__ libiconv-1.13.1_1
|            \__ gettext-0.17_1
|                  \__ libiconv-1.13.1_1
|\__ gnutls-2.8.3
|     |\__ pkg-config-0.23_1
|     |\__ libiconv-1.13.1_1
|     |\__ gettext-0.17_1
|     |      \__ libiconv-1.13.1_1
|     |\__ libgpg-error-1.7
|     |     |\__ libiconv-1.13.1_1
|     |      \__ gettext-0.17_1
|     |            \__ libiconv-1.13.1_1
|      \__ libgcrypt-1.4.4
|           |\__ libiconv-1.13.1_1
|           |\__ gettext-0.17_1
|           |      \__ libiconv-1.13.1_1
|            \__ libgpg-error-1.7
|                 |\__ libiconv-1.13.1_1
|                  \__ gettext-0.17_1
|                        \__ libiconv-1.13.1_1
 \__ iksemel-1.4_1
      |\__ pkg-config-0.23_1
      |\__ libiconv-1.13.1_1
      |\__ gettext-0.17_1
      |      \__ libiconv-1.13.1_1
      |\__ libgpg-error-1.7
      |     |\__ libiconv-1.13.1_1
      |      \__ gettext-0.17_1
      |            \__ libiconv-1.13.1_1
      |\__ libgcrypt-1.4.4
      |     |\__ libiconv-1.13.1_1
      |     |\__ gettext-0.17_1
      |     |      \__ libiconv-1.13.1_1
      |      \__ libgpg-error-1.7
      |           |\__ libiconv-1.13.1_1
      |            \__ gettext-0.17_1
      |                  \__ libiconv-1.13.1_1
       \__ gnutls-2.8.3
            |\__ pkg-config-0.23_1
            |\__ libiconv-1.13.1_1
            |\__ gettext-0.17_1
            |      \__ libiconv-1.13.1_1
            |\__ libgpg-error-1.7
            |     |\__ libiconv-1.13.1_1
            |      \__ gettext-0.17_1
            |            \__ libiconv-1.13.1_1
             \__ libgcrypt-1.4.4
                  |\__ libiconv-1.13.1_1
                  |\__ gettext-0.17_1
                  |      \__ libiconv-1.13.1_1
                   \__ libgpg-error-1.7
                        |\__ libiconv-1.13.1_1
                         \__ gettext-0.17_1
                               \__ libiconv-1.13.1_1

-v - зависимости зависимостей.
-t - чтобы показывать только верхнего уровня пакетов.
-b - чтобы показать только нижний уровень пакеты.
-t -q - даст список верхнего уровня пакетов без их зависимостей, установка только этих пакетов должны установить всех установленных пакетов.

Надеюсь вам это поможет немного разобраться в помоечке установленных портов. =)

Ваша оценка: Нет Средняя: 5 (4 голоса)

Защита ssh от брутфорса

Содержание:

  • Блокировка брутфорс атак на ssh средствами Packet Filter (pf)
  • Блокировка брутфорс атак на ssh при помощи sshguard
  • Документация

Блокировка брутфорс атак на ssh средствами Packet Filter (pf)

PF поддерживает как IPv4 так и IPv6

OpenSSH предоставляет защищенную альтернативу протоколам первого поколения, таким как telnet и ftp, где логины и пароли передаются открытым текстом. Но простого использования SSH вместо telnet в наше время уже не достаточно.
Если используются простые пароли в SSH, то взломать их также легко, как если бы они передавались открытым текстом.

И нам предстоит защититься от перебора паролей средствами Packet Filter (pf)

Есть и другие способы защиты, такие как sshguard-ipfilter, sshguard-ipfw, sshguard-pf, sshguard.

Редактируем файл конфигурации PF:

vi /etc/pf.conf

table <sshblock> persist #создаём таблицу
set skip on lo0 #пропускаем проверку на петле
set block-policy return #для отброшенных пакетов TCP отсылается пакет TCP RST
#для прочих ICMP Unreachable
#если DOSят то можно указать "drop"
# set block-policy drop #пакет молча отбрасывается
scrub in all #собираем все части пакета перед отправкой
block all #запретим все отовсюду
block in log quick from <sshblock> #блокируем тех кто попал в sshblock
 
pass in on $int_if proto tcp from $int_if:network to $int_if port ssh \
synproxy state (max-src-conn-rate 2/60, overload <sshblock> flush global)
#пропускаем на ssh из внутренней подсети, а злодеев заносим в таблицу
pass in on $ext_if proto tcp from any to $ext_if port ssh \
synproxy state (max-src-conn-rate 2/60, overload <sshblock> flush global)
#пропускаем на ssh из вешней подсети, и тоже заносим злодеев в таблицу
pass in on $int_if from any to any #разрешаем всё из локальной сети 
pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет 
pass in inet proto icmp all icmp-type echoreq #разрешаем ping 

Если вы получаете ip адрес по DHCP, то вместо переменной $ext_if вы можете указать имя WAN интерфейса в круглых скобках (rl0), тогда при смене ip адреса pf подменит его на лету.

посмотреть тех кто в таблице можно так:
pfctl -t sshblock -T show

Удалить ip адрес (например 192.168.1.9), из таблицы можно так:
pfctl -t sshblock -T delete 192.168.1.9

осталось настроить cron
crontab -e

30 * * * * root /sbin/pfctl -t sshblock -T expire 86400

Каждые час (в 30 минут) "-T expire 86400" удаляет все записи из таблицы старше 86400 секунд (сутки)

max number

Ограничение максимального количества записей в таблице состояний, которое может сделать данное правило. По достижении этого предела, будет отброшен любой пакет, который должен был бы завести новую запись в таблице состояний. Пакеты будут отбрасываться до тех пор, пока число записей в таблице состояний не уменьшится.

source-track

Эта опция даёт возможность отслеживать количество записей в таблице состояний в пересчёте на каждый адрес источника. Возможные форматы опции:

* source-track rule — Максимальное количество записей в таблице состояний созданных данным правилом ограничивается опциями max-src-nodes и max-src-states, заданными в этом правиле. Счётчики заводятся не глобальные, а локальные.

* source-track global — То же что и в предыдущем слуаче, но счётчики ведутся глобально. При этом каждое правило может иметь свои пределы max-src-nodes и max-src-states, однако счётчики будут общими для всех правил.

Общее количество адресов источников, для которых осуществляется глобальный контроль количества строк в таблице состояний, ограничивается при помощи опции src-nodes.

max-src-nodes number

При использовании опции source-track опция max-src-nodes ограничивает количество IP-адресов с которых можно одновременно открыть соединения.

max-src-states number

При использовании опции source-track опция max-src-states ограничивает количество соединений с одного IP-адреса.

max-src-conn number

Ограничение максимального количества TCP соединений прошедших тройное рукопожатие, которые можно открыть с одного IP-адреса.
max-src-conn-rate number / interval

Ограничение скорости с которой можно открывать новые соединения. Задаётся количество соединений за интервал времени.

Обе опции автоматически включают опцию state-track rule и не совместимы с state-track global.

В комбинации с данными опциями можно употреблять более агрессивные опции, для «наказания» «провинившихся».overload

При превышении лимитов занести адрес источника в таблицу.
flash [global]

Уничтожить все записи в таблице состояний соответствующие соединениям с данного IP-адреса. При указании опции global записи в таблице состояний сбрасываются независимо от того, какое правило её создало.

Блокировка брутфорс атак на ssh при помощи sshguard

Нам предстоит защититься от перебора паролей средствами sshguard который контролирует активность на 22м порту.

Sshguard работает с любыми фаервол системами PF, netfilter/iptables, IPFIREWALL/ipfw, IPFILTER. Он следит за количеством и попытками входа и заносит ip адреса атакующих в таблицу.По умолчанию sshguard добавляет ip адрес в таблицу после 4-х неудачных попыток входа за 20-ти минутный период.
Блокировка происходит по следующей схеме:

первый раз блокируется на 420 секунд и удаляется через 7 минут
второй раз на 2*420 у удаляется через 14 минут
третий раз на 2*2*420 и удаляется через 28 минут и тд...
2^(N-1)*420 N-й раз.


Для использования sshguard-pf необходим Packet Filter (pf)

Устанавливаем sshguard-pf:

cd /usr/ports/security/sshguard-pf && make install clean

Редактируем syslog.conf:
vi /etc/syslog.conf

auth.info;authpriv.info     |exec /usr/local/sbin/sshguard

перезапускаем syslogd
killall -HUP syslogd

Редактируем файл конфигурации PF и добавляем эту строку в раздел таблиц:
vi /etc/pf.conf

table <sshguard> persist

Добавляем эту строку в раздел фильтрации:
block in log quick on $ext_if proto tcp from <sshguard> to any port \
ssh label "ssh bruteforce"

Если вам необходимо заблокировать весь трафик атакующего ip (а не только SSH) то необходимо добавить эту строку вместо предыдущей:
block in log quick from <sshguard> label "ssh bruteforce"


Перечитаем правила pf
pfctl -f /etc/pf.conf 

Просмотрим набор ip адресов, заблокированных sshguard:
pfctl -t sshguard -T show

Удалить ip адрес (например 192.168.1.9), заблокированный sshguard можно так:
pfctl -t sshguard -T delete 192.168.1.9

Документация:

Документация по sshguard

Документация по Packet Filter (pf)

Ваша оценка: Нет Средняя: 5 (2 голоса)

Миграция c MYSQL-50 до MYSQL-51

Пришло время обновлять mysql, но вот незадача версия 50 уже не поддерживаться и обновиться до 51 с ходу не получиться.
1) Сохраняем данные

tar -czvf mysql.tgz /var/db/mysql
mysqldump -u root -p’password’ —all-databases > mysqldump.sql

2)Удаляем старый сервер, клиент mysql

pkg_info | grep mysql
mysql-client-5.0.95
mysql-server-5.0.95
pkg_delete -rf mysql-client-5.0.95 mysql-server-5.0.95

4)Устанавливаем сервер

cd /usr/ports/databases/mysql51-server && make install clean

5)Стартуем новый сервер

/usr/local/etc/rc.d/mysql-server start

6)Обновляем таблицы с помощью mysql-upgrade

mysql-upgrade —user=mysql —password=password —default-character-set=utf8

7)Смотрим , что выводит и далее следуем указаниям. При необходимости нужно починить таблицы каждую выбрать и починить:

mysql -u root -p
repair table `table_name`;

Или в phpMyAdmin Нужные таблицы выделить и восстановить (там же можно анализ ломаных таблиц сделать).

Дополнительные материалы
Ссылки: 
Форум - раздел Статьи
Ваша оценка: Нет Средняя: 4.9 (13 голосов)

Оптимизации работы сервера для работы с CMS\CMF

Друг попросил настроить FreeBSD на котором, он держал с десяток сайтов среди них были самописные, CMS и CMF так чтобы они эффективно использовали систему, ресурсы компьютера и выводили результат за менее короткий срок. И так в задаче нам дано FreeBSD 8.1 в которой необходимо настроить систему для улучшения отклика веб сервера и скорости выдачи запросов.

Содержание:

  • Узкие места
  • PHP
  • Memcached
  • APACHE
    • FastCGI
    • Nginx
  • MYSQL
  • TMPFS
  • Заключение

Узкие места

Немного теории.

Выявите обжор.
Необходимо посмотреть утилитой top и выявить проблемы, связанные с загруженностью процессора и объемом используемой оперативной памяти. Если ЦП загружен на 100% (выше 5ки) и\или оперативной памяти не хватает (ПО уходят в своп), то необходимо выяснить, что потребляет все ресурсы и попытаться исправить положение. Это может быть и сам веб сервер, CMS\CMF, СУБД и тп. Может в действительности слишком мало RAM или сильно нагружен слабый процессор.

Проверьте дисковую подсистему
(Разбивка HDD корректировка Swap и диагностика дисковой системы.) инструментом типа vmstat. И если вы видите, что дисковая активность неадекватна при наличии достаточного объема оперативной памяти и не загруженного ЦП значит у вас проблема ввода-вывода. Это может быть связанно с работой большого кол-ва БД, фонового выполнения тяжелых сценариев, неподходящее использование RAID для приложения с частыми операциями чтения\записи, использованием неэффективных ATA, SATA жеских дисков, контроллеров и т.п.

Убедитесь в эффективности SWAP и TMP.
Системе возможно не хватает памяти и она обращается в SWAP. Бывает SWAP находится на медленном или постоянно занятом работой диске [swapinfo].
Решений два:

  • увеличение RAM, чтобы система не просила SWAP
  • увеличение размера SWAP и возможен вариант переноса его на другой менее загруженный диск

Решение для TMP это использование [tmpfs] об этом чуть ниже.

Проблемы с WAN
Бывает так, что канал в WAN перегружен или у вас проблемы с хостингом. Удостоверьтесь что линия связи не перегружена.
Решений два:

  • увеличение скорости канала связи
  • сжимание передаваемых данных

Оптимизация
Оптимизируйте ваши CMS\CMF для этого существуют интересные продукты, например плагины для Firefox.

  • Firebug.
  • Page Speed
  • YSlow [doc]

Эти плагины позволят вам найти причины тормознутости ваших сайтов.
К примеру YSlow сможет помочь в поисках причины, почему странички на сайте не грузятся так быстро, как хотелось бы, тогда как ЦП, память, дисковая подсистема не уперлись в потолок.

PHP

Выполнение PHP кода - большая часть обслуживания запроса и нам необходимо его ускорить. Существенное увеличение производительности можно получить кэшированием кодов операций PHP после компиляции. При каждом запросе PHP анализирует и компилирует весь код в промежуточную форму для каждого запроса. Кэширование позволяет избавится от многократного анализа и компиляции и использовать предварительно скомпилированный код.
Распространенные продукты кэширования операций:

  • eAccelerator
  • Zend Performance Suite (проприетарный продукт)
  • Alternative PHP Cache (имеется web интерфейс)
  • XCache

Я использую eAccelerator, и мы начнем его установку.

# cd /usr/ports/ && make search name=eaccelerator
Port:   eaccelerator-0.9.5.3
Path:   /usr/ports/www/eaccelerator
Info:   An opcode cache for PHP with encoder and loader
Maint:  ale@FreeBSD.org
B-deps: autoconf-2.62 autoconf-wrapper-20071109 libiconv-1.11_1 
libxml2-2.7.3 m4-1.4.12,1 perl-5.8.9_2 php5-5.2.9 php5-session-5.2.9 
pkg-config-0.23_1
R-deps: libiconv-1.11_1 libxml2-2.7.3 php5-5.2.9 php5-session-5.2.9 
pkg-config-0.23_1
WWW:    _http://eaccelerator.net/
 
# cd /usr/ports/www/eaccelerator && make install clean
~~~~
 
You have installed the eaccelerator package.
 
Edit /usr/local/etc/php.ini and add:
 
zend_extension="/usr/local/lib/php/20060613/eaccelerator.so"
 
Then create the cache directory:
 
mkdir /tmp/eaccelerator
chown www /tmp/eaccelerator
chmod 0700 /tmp/eaccelerator

Создадим директорию tmp акселератору.

# mkdir /tmp/eaccelerator && chown www /tmp/eaccelerator && chmod 0700 /tmp/eaccelerator

Прописываем запуск модуля в основной php.ini, но если у вас FastCGI, то у каждого хоста\юзверя будет свой файл и необходимо добавлять эту строчку в нужный php.ini.

# echo "zend_extension="/usr/local/lib/php/20060613/eaccelerator.so"" >> /usr/local/etc/php.ini

Если вы хотите всем и сразу внедрить eAccelerator, то правильней будет добавлять здесь.

# echo "zend_extension="/usr/local/lib/php/20060613/eaccelerator.so"" >> /usr/local/etc/php/extensions.ini

Но ввиду того что были 2-3 проекта которым акселератор был не нужен я добавлял индивидуально.

Информацию о eAccelerator можно прочитать здесь.

# cat /usr/local/share/doc/eaccelerator/README |more

Меня, например не устраивало расположение eaccelerator.cache_dir и я его поменял и тп.

# Для установки как модуля Zend:
 
  zend_extension="/usr/lib/php4/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"
 
# Если вы используете нити безопасной сборки PHP то вы должны использовать
# "zend_extension_ts" вместо "zend_extension". 
 
# Для установки как модуля 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.shm_size - Объем общей памяти (в мегабайтах), который будет использовать, eAccelerator. "0" назначается ОС по умолчанию. Значение по умолчанию "0".

eaccelerator.cache_dir - Каталог, который используется для дискового кэша. Здесь eAccelerator хранит скомпилированный код, данные сессии, содержание записей пользователей. Те же данные могут храниться в общей памяти (для более быстрого доступа). Значение по умолчанию "/tmp/eaccelerator".

eaccelerator.enable - Включение или выключение eAccelerator. Включение "1" и чтобы отключить "0". Значение по умолчанию "1".

eaccelerator.optimizer - Включение или выключение внутреннего оптимизатора, которых может ускорить выполнение кода. Необходимо включить "1" и для того чтобы отключить "0". Значение по умолчанию "1".

eaccelerator.debug - Включение или выключение журнала отладки. Должно быть "1" для включения или "0" чтобы отключить. По умолчанию значение "0"

eaccelerator.check_mtime - Включение или выключение проверки изменения файлов PHP. Должно быть "1" для включения или "0" чтобы отключить. Вы должны выставить значение на "1", если потребуется проверить перекомпиляцию PHP файлов после изменения. Значение по умолчанию "1".

eaccelerator.filter - Определите, какие файлы PHP должна быть кэшированы. Вы можете указать типы шаблонов (например, "*.php *.phtml"), которое указывают направлять это в кэш или нет. Если шаблон начинается со символа "!" то это означает игнорировать файлы которые сопоставляются по следующему шаблону. Значение по умолчанию "", что означает, все PHP скрипты будут кэшироваться.

eaccelerator.shm_max - Отключает, размещения больших значений в общую память "eaccelerator_put ()" функции. Он указывает на большой допустимый размер в байтах (10240, 10K, 1М). "0" отключает лимит. Значение по умолчанию "0".

eaccelerator.shm_ttl - Когда eAccelerator не может получить в общей памяти место для нового сценария она удаляет все скрипты, которые не обращались к ней последние "shm_ttl" секунд из общей памяти. Значение по умолчанию "0", что означает - не удалять никакие файлы из общей памяти.

eaccelerator.shm_prune_period - Когда eAccelerator не может получить общей памяти для нового скрипта он должен удалить старый скрипт, если предыдущие попытки были сделаны более чем "shm_prune_period" секунд назад. Значение по умолчанию "0", что означает - не не удалять файлы из общей памяти.

eaccelerator.shm_only - Включение или выключение кэширование скомпилированных скриптов на диске. Это никак не влияет на данные сессии или содержание кэша. Значение по умолчанию "0", что означает - использовать диск и общую память для кэширования.

eaccelerator.compress - Включение или выключение сжатия кэшированного контента. Значение по умолчанию "1", что включает сжатие.

eaccelerator.compress_level - Уровень сжатия, использованный для содержимого кэша. Значение по умолчанию "9", что является максимальным значением.

eaccelerator.name_space - Эта строка для всех ключей. Она позволяет двум приложениям, которые используют одни и те же ключевые имена запускаться на том же хосте, установив это в htaccess либо в основном конфигурационном файле веб-сервера.

eaccelerator.keys
eaccelerator.sessions
eaccelerator.content
Определите, какие ключи, данные сеанса и содержимого будут кэшироваться. Возможны следущие значения:
"shm_and_disk" - кэш данных в общей памяти и на диске (значение по умолчанию)
"shm" - данные кэша в общей памяти или на диске в общей памяти и при большом заполнением данными применяется "eaccelerator.shm_max"
"shm_only" - данные в кэше в общей памяти
"disk_only" - данные в кэше в диске
"none" - не кэшировать данные

eaccelerator.allowed_admin_path - Путь для скриптов, которым разрешено получать информацию и управление администратора.

После включения eAcceleratorа вы уже можете почувствовать разницу =)

Memcached

Часто система показывает падение производительности MYSQL, например, когда данные должны быть перемещены на более медленное устройство, например HDD и\или получены с него. Можно обойти эту ситуацию для данных, которых сохранять не нужно (например, данные о сеансе). Для этого можно использовать Memcached.

Port:   pecl-memcached-0.1.4
Path:   /usr/ports/databases/pecl-memcached
Info:   PHP extension for interfacing with memcached via libmemcached library
Maint:  gslin@gslin.org
B-deps: ~~~
R-deps: ~~~
WWW:    _http://pecl.php.net/package/memcached

Memcached не работает с CGI версией php5 и ему нужен CLI, а это убивает желание его использовать в моем примере, но вы можете его попробовать.

This port requires the CLI version of PHP, but you have already
installed a PHP port without CLI.

Mmemcached сохраняет данные в RAM и обслуживает данные с максимальной возможной скоростью недоступной HDD отсюда следует прирост производительности.

Apache

Теперь Apache...
RAM - во первых отключите в Apache те модули, которые вами не используются.

MaxClients - RAM не резиновый и надо его экономить для этого будем корректировать [i]MaxClients[/i]. Воспользуемся утилитой [i]top[/i] чтобы понять сколько в среднем используется памяти для каждого запроса, у меня составило примерно 15 Mb на процесс вычислим значение, к примеру, у меня 1,5 Gb Ram.
1024 Ram / 15 Ram на процесс = 70 (68,266) MaxClients
Вот это значение 70 мы и выставляем в MaxClients.
Но незабываем, что есть другие процессы которым тоже нужна RAM и поэтому учитывайте это при расчетах.

MaxRequestsPerChild - если RAM на сервере мало, а CPU быстрый то можно сделать так. При использовании памяти процессами, веб сервер имеет тенденцию увеличится до уровня самой требовательной к памяти страницы, которую обслуживает этот дочерний процесс, память можно вернуть установим низкое значение [i]MaxRequestsPerChild[/i] к примеру 300-400 (в зависимости от ситуации) Работа Apache несколько замедлится тк ему придется генерировать новые дочерние процессы, однако последние будут использовать меньше оперативной памяти. И в итоге мы сможем обслужить больше запросов при меньшем объеме памяти. Значение [i]0[/i] - означает, что дочерние процессы никогда не завершаются.

mod_expires - Этот модуль Apache позволяет посылать HTTP-заголовки Expires, кэшируя все статические файлы в пользовательском браузере, например в течение 2х недель либо до появления новых версий файлов. Касаемо файлов изображений, CSS, JavaScript и тп. В выводе меньший трафик и освобождение полосы пропускания.

# cat /usr/local/etc/apache2/httpd.conf |grep expires
LoadModule expires_module libexec/apache2/mod_expires.so

И в .htaccess вашего CMS включите следующее.

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Разрешить истечение срока.
  ExpiresActive On
 
  # Кешировать все файлы сроком на 2 недели после доступа(A).
  ExpiresDefault A1209600
 
  # Не кешировать динамически генерируемые страницы.
  ExpiresByType text/html A1
</IfModule>

.htaccess - так же можно перенести директивы из .htaccess в httpd.conf. Поиск, чтение и разбор файлов .htaccess происходит при каждом запросе. С другой стороны httpd.conf читается один раз при запуске Apache. Вам будет необходимо перенести содержимое .htaccess в httpd.conf и запретить поиск файлов .htaccess в пределах корневого каталога сервера, установив AllowOverride в None

<Directory />
AllowOverride None
...
</Directory>

Это запретит Apache при каждом запросе проходить по дереву каталога в поисках .htaccess для его выполнения. В результате меньше работы и быстрее выполняется запрос.

FastCGI

Рекомендую использовать FastCGI в виду конечной скорости обработки. Не буду изобретать велосипед см Apache2 + php5 + mod_fastcgi
Процитирую wiki:

Интерфейс FastCGI — клиент-серверный протокол взаимодействия вебсервера и приложения, дальнейшее развитие технологии CGI. По сравнению с CGI является более производительным и безопасным.
FastCGI ликвидирует множество ограничений CGI-программ. Проблема CGI-программ в том, что они должны быть перезапущены веб-сервером при каждом запросе, что приводит к понижению производительности.

Nginx

Так же на фронт можно установить и Nginx - про частичную установку его можно прочитать тут Веб сервер на много коннектов и высокую нагрузку (nginx+php-fpm+mysql)

MYSQL

Дошли и до муси. В MYSQL есть возможность кэширования часто встречающихся запросов в оперативной памяти, и при поступлении конкретного запроса в MYSQL она возвратит его непосредственно из кеша. Однако в MYSQL по умолчанию эта функция отключена. И нам необходимо править конфигурационный файл MYSQL my.cnf. Для примера добавим кэш размером в 64МБ. И на будущее с этим кэшом необходимо экспериментировать, чтобы добиться максимальной эффективности. Слишком маленький кэш приведет к тому, что кэшируемые запросы очень часто будут недействительными, а чересчур большой повлечет за собой относительно длительный поиск в кэше. Память будет неэффективно использоваться хотя, могла бы пригодится другим службам.

# Включаем кэш запросов равным 64МБ
query_cache_size=64M
# Для индификации ресурсоемких запросов включаем следующее.
long_query_time = 5
log-slow-queries = /var/log/mysql/slow.log
# Что приведет к регистрации всех запросов,
# для которых требуется больше 5 секунд (порог можете менять)

Создаем лог меделенных запросов.

# touch /var/log/mysql/slow.log
# chown mysql:mysql /var/log/mysql/slow.log

Перезапустим mysql-server

/usr/local/etc/rc.d/mysql-server restart

Проверим настройку

mysql -u otor --password=*****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 692516
Server version: 5.0.77 FreeBSD port: mysql-server-5.0.77_1
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql> show variables like 'query_cache%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 67108864 |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+------------------------------+----------+
5 rows in set (0.00 sec)

Как видим мы включили кэш (query_cache_type ON) и установили размер его равным 64МБ (query_cache_size 67108864)

Изменение типа таблиц с MyISAM на InnoDB

MYSQL использует два варианта типа таблиц MyISAM и InnoDB. По умолчанию MYSQL использует MyISAM.
MyISAM использует блокировку на уровне таблиц, а InnoDB на уровне строк. Блокировка очень важна для сохранения целостности базы данных она препятствует одновременному обновлению одних и тех же данных двумя разными процессами БД. Посмотрим, является ли причиной плохой производительности блокировка таблиц. Для этого посмотрим кол-во конфликтных блокировок в MySQL это Table_locks_immediate и Table_locks_waited

mysql> show status like 'Table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Table_locks_immediate | 29958 |
| Table_locks_waited    | 0     |
+-----------------------+-------+
2 rows in set (0.00 sec)

Table_locks_immediate - количество случаев, когда блокировка таблицы была получена немедленно.
Table_locks_waited - когда получение блокировки таблиц сопровождалось ожиданием. Если это значение велико, то у вас проблемы =)
Если у вас CMS, например Drupal то можно некоторые таблицы преобоазовать в InnoDB, например cache, watchdog, session, acceslog делается это так.

mysql> alter table cache type='InnoDB';

(Для настройки производительности MYSQL можно загрузить сценарий MySQL Performance Tuning Primer Script) который позволяет корректировать переменные сервера MySQL.

TMPFS

TMPFS - нахождение tmp в RAM, что быстрей и эффективней чем бы, он располагался на диске. TMPFS появился только в 7.x версии FreeBSD.
Посмотрим настройки.
Для включения в ядро добавьте:

options TMPFS

Если не хотите встраивать в ядро можете добавить модуль в loader.conf:

tmpfs_load="YES"

Переменные

gid - root группа(group) id.
uid - root пользователь(user) id.
mode - разрешений в восьмеричной форме.
inodes - максимальное количество индексных дескрипторов.
size - максимальный размер (в байтах) для файловой системы.

Вручную можно примонтировать так:

mount -t tmpfs -o size=1024M tmpfs /tmp

Незабудем добавить в fstab и закомментить старый слайс tmp и добавить новый.

#/dev/mirror/gm0s1f      /tmp            ufs     rw              2       2
tmpfs                   /tmp            tmpfs   rw              0       0

Совет

Для корректной работы MSQL с TMPFS вам необходимо выставить правильные права на директорию /tmp и примонтировать tmpfs или перезагрузится.

chmod 1777 /tmp

Перезагрузитесь и tmpfs вас порадует. =)

Заключение

В свете вышесказанного и при применении даже некоторой части рекомендованного здесь вы увидите как ваш веб сервер "оживет". Ну, если этого не произошло или вы не добились значительных результатов, то видимо вам пришло время закупать более мощное железо и не выдумывать "изощренные" методы оптимизации.

Дополнительные материалы
Ссылки: 
>>ВЕТКА ФОРУМА<<
eAccelerator
Zend Performance Suite
Alternative PHP Cache
XCache
TMPFS
Ваша оценка: Нет Средняя: 5 (21 голос)

Полезные мелочи

Содержание:

  • Порты
    • Удобный поиск и установка
    • Что нужно обновлять?
  • Демоны
    • Подсчет процессов занятых пользователем
  • Железо
    • Скорость чтения HDD
    • Какой процесс нагружает HDD
  • Уборка
    • Уборка после пересборки ядра

Порты

Удобный поиск и установка

Иногда приходится сталкиваться с тем что не знаешь, где конкретно искать тот или иной порт для этого есть такая вещь как "whereis"
И чтобы совсем было удобно пустим по конвейеру те поставим точку с запятой ";"

и укажем что делать дальше "make config-recursive install clean", опция config-recursive позволяет сразу рекурсивно сконфигурировать все зависимости дабы не сидеть и не подтверждать каждый пакет

cd `whereis -q desktopbsd-tools`;make config-recursive install clean

Если собрали порт без поддержки какой нибудь опции, а нужно что то добавить или убрать, делаем следующее:

В диалоге настройки выбираем опции те что необходимы или убираем ненужные
cd /usr/ports/www/squid/ && make config

И собираем пакет
make FORCE_PKG_REGISTER=yes install clean

Что нужно обновлять?

Отобразить только необходимые программы для обновления.

/usr/sbin/pkg_version -v |grep '<'

Или вот так:
pkg_version -vIL=

Демоны

Подсчет процессов занятых пользователем

ps -auxww | grep Raven2000 | wc -l

Железо

Скорость чтения HDD

dd if=/dev/ad4 of=/dev/null bs=1m count=1024

Какой процесс нагружает HDD

# top -m io -o total

Уборка

Уборка после пересборки ядра

Я создал себе такой файлик:

vi /uborka

#!/bin/sh
chflags -R noschg /usr/obj/usr
rm -rf /usr/obj/usr
cd /usr/src
make cleandir
make cleandir

chmod 777 /uborka

и после пересборки ядра просто запускаю его
/uborka

можно ещё удалить старое ядро:
rm -rf /boot/kernel.old

Ваша оценка: Нет Средняя: 4.8 (13 голосов)

Создание пакетов

Столкнулся с тем что понадобилось сделать пакет

если очень медленный инет из разряда GPRS или его вовсе нет, а надо поставить софт которого в пакетах нету, есть, но только в портах (например openoffice или gtk-qt-engine).

Надоело смотреть на квадратный filezilla и openoffice, решил поставить gtk-qt-engine.

Для начала необходимо создать директорию куда будут попадать пакеты:

mkdir -p /usr/ports/packages

Теперь создадим пакет =):
cd /usr/ports/x11-themes/gtk-qt-engine

make package

если пакет уже установлен то выдаст примерно это
===>   gtk-qt-engine-0.8_6 is already installed
      You may wish to ``make deinstall'' and install this port again
      by ``make reinstall'' to upgrade it properly.
      If you really wish to overwrite the old port of x11-themes/gtk-qt-engine
      without deleting it first, set the variable "FORCE_PKG_REGISTER"
      in your environment or the "make install" command line.
*** Error code 1
 
Stop in /usr/ports/x11-themes/gtk-qt-engine.
*** Error code 1
 
Stop in /usr/ports/x11-themes/gtk-qt-engine.

тогда делаем что советует "make":
make FORCE_PKG_REGISTER=yes package

и получаем
Creating bzip'd tar ball in '/usr/ports/packages/All/gtk-qt-engine-0.8_6.tbz'

проверяем
ll /usr/ports/packages/All/gtk-qt-engine-0.8_6.tbz
-rw-r--r--  1 root  wheel    99K 19 апр 14:24 /usr/ports/packages/All/gtk-qt-engine-0.8_6.tbz

Вот и все, готово.

Ваша оценка: Нет Средняя: 4.7 (12 голосов)

Источник (получено 16/06/2025 - 00:56): http://www.ignix.ru/book/freebsd/bonus