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

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

FreeBSD

freebsd

FreeBSD — свободная UNIX-подобная операционная система, потомок AT&T Unix по линии BSD, созданной в университете Беркли. FreeBSD работает на PC-совместимых системах семейства x86, включая Microsoft Xbox, а также на DEC Alpha, Sun UltraSPARC, IA-64, AMD64, PowerPC, NEC PC-98, ARM. Готовится поддержка архитектуры MIPS.

FreeBSD разрабатывается как целостная операционная система. Исходный код ядра, драйверов устройств и базовых пользовательских программ (т. н. userland), таких как командные оболочки и т. п., содержится в одном дереве системы управления версиями (до 31 мая 2008 — CVS, сейчас — SVN). Это отличает FreeBSD от GNU/Linux — другой свободной UNIX-подобной операционной системы — в которой ядро разрабатывается одной группой разработчиков, а набор пользовательских программ — другими (например, проект GNU), а многочисленные группы собирают это всё в единое целое и выпускают в виде различных дистрибутивов GNU/Linux.

FreeBSD хорошо зарекомендовала себя как система для построения интранет- и интернет-серверов. Она предоставляет достаточно надёжные сетевые службы и эффективное управление памятью. FreeBSD широко представлена в списке веб-серверов с наибольшим временем непрерывной работы (согласно исследованию компании Netcraft).

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

Установка

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

FreeBSD: Начало

Одежда в земле,
Хоть и праздничный день у
Ловцов улиток.
===
Мацуо Басе

FreeBSD — свободная UNIX-подобная операционная система, потомок AT&T Unix по линии BSD, созданной в университете Беркли. FreeBSD работает на PC-совместимых системах семейства x86, включая Microsoft Xbox, а также на DEC Alpha, Sun UltraSPARC, IA-64, AMD64, PowerPC, NEC PC-98, ARM. Готовится поддержка архитектуры MIPS.

FreeBSD разрабатывается как целостная операционная система. Исходный код ядра, драйверов устройств и базовых пользовательских программ (т. н. userland), таких как командные оболочки и т. п., содержится в одном дереве системы управления версиями (до 31 мая 2008 — CVS, сейчас — SVN). Это отличает FreeBSD от GNU/Linux — другой свободной UNIX-подобной операционной системы — в которой ядро разрабатывается одной группой разработчиков, а набор пользовательских программ — другими (например, проект GNU), а многочисленные группы собирают это всё в единое целое и выпускают в виде различных дистрибутивов GNU/Linux.

FreeBSD хорошо зарекомендовала себя как система для построения интранет и интернет-серверов. Она предоставляет достаточно надёжные сетевые службы и эффективное управление памятью. FreeBSD широко представлена в списке веб-серверов с наибольшим временем непрерывной работы (согласно исследованию компании Netcraft).

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

Содержание:

  • Подготовка
  • Дистрибутив
  • Установка
    • Сбор информации
    • Sysinstall
  • Custom Installation
    • Partition
    • Label
    • Distributions
    • Commit
  • Configuration Menu
    • Root Password
    • User Management
    • Console
    • Time Zone
    • Network
  • Завершение установки
  • Что дальше?

Подготовка

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

  • Выбрать и скачать нужную версию и архитектуру можно на сайте FreeBSD.
  • Купить можно в Linuxcenter.ru

Будет неплохо если вы проверите контрольную сумму загруженного образа (MD5) его оригинальную сумму смотрите в директории дистрибутива под именем CHECKSUMS.MD5

Дистрибутив

Выберете дистрибутив под нужную вам архитектуру это зависит от процессора и коственно от количества RAM. Так же если вы закупаете сервер необходимо проверить его комплектующие на "Аппаратную совместимость" для удостоверения все ли у вас будет опознаваться и работать в ОС.

Установка

И так дистрибутив записан на диск теперь вы выставляете в BIOS своего сервера загрузку с диска вставляете дистрибутив и как говорил Гагарин "Поехали!"(с) Ю.А. Гагарин.

Совет: для начала не используйте реальные компьютеры и тем более не свой личный компьютер. Вы можете случайно удалить все ваши данные. Для начало воспользуйтесь ПО VirtualBox вы сможете на нем потренироваться и дальше после наработки достаточного опыта приступать к установке на реальные сервера.

Сбор информации

До начала установки вам необходимо знать как вы назовете свою машину ее будущие сетевые настройки (IP-адрес, DNS-сервер, шлюз по умолчанию, имя домена) и для чего вы будете его использовать от этого может зависеть разбивка диска. Если вы не уверены в том, что FreeBSD поддерживает ваше оборудование то лучше заранее обратиться к списку совместимого оборудования для вашего релиза.

Sysinstall

И так загрузка с диска прошла успешно и перед вами начало установки и собственно часть Sysinstall в котором вам нужно выбрать свою страну.
Совет: движение по меню — стрелками вверх-вниз или [TAB], выбор пункта - [ПРОБЕЛ] или [ENTER].
FreeBSD Country Selection

В следующем разделе вам предлагается для системной консоли выбрать раскладку клавиатуры. По умолчанию установленна "American" нам необходимо выбрать свою "Russia KOI8-R".
FreeBSD System Console Keymap

Вот мы и подошли к Sysinstall тут можно установить систему, прочитать документацию, обновить существующую систему и тд. Вам необходимо выбрать пункт "Custom" вы конечно можете конечно выбрать и пункт "Standart" который более лояльно относиться к новичкам, но в данной статье мы выберем вариант "Custom".
FreeBSD Sysinstall
Как вы ведите некоторые начальные буквы подсвечены и чтобы активизировать данный пункт нужно лишь сочетать с нажатием [ALT+БУКВА].
Рассмотрим основные пункты меню:

  • Usage - описание использования системы меню (навигация, горячие клавиши и т.п.)
  • Standart - начать установку в стандартном режиме (рекомендуется для начинающих)
  • Express - быстрая установка (для нетерпеливых, но будьте внимательней с этим пунктом)
  • Custom - режим установки для экспертов
  • Configure - выполнить пост-инсталяционную настройку FreeBSD
  • Doc - инструкции по установке и т.п.
  • Keymap - выбор раскладки клавиатуры
  • Options - просмотр/выбор различных опций перед началом инсталляции
  • Fixit - режим ремонта, запуск оболочки на четвертой консоли (shell)
  • Upgrade - обновление существующей операционной системы
  • Load Config.. - загрузка конфигурации установки по умолчанию
  • Index - глоссарий функций

Custom Installation

Данный раздел разбит на 7 пунктов и вы будете еще не раз возвращаться в это меню:
FreeBSD Custom Installation Options

  • X Exit - выход из меню (в предыдущее)
  • 2 Options - просмотр и установка установочных опций
  • 3 Partition - выделение места на диске для системы
  • 4 Label - разметка выделенного места на диска под разделы
  • 5 Distributions - выбор устанавливаемых файлов (исходники, man, doc и тп)
  • 6 Media - изменения типа установочного носителя (CD/FTP/NFS/т.п.)
  • 7 Commit - выполнить все выбранные вами действия такие как выделение места на диске/создание разделов/распаковка дистрибутива

Начнем с 3го пункта Partition.

Partition

Как вы видете у меня пустой диск и я хочу использовать его весь для этого нажмем [А]. Если у вас на диске присутсвуют ненужные слайсы (slice) то выберите их (стрелки вверх-вниз) нажмите [D] и удалите ненужные и дальше снова нажмем кнопку [А]. На диске их может быть создано не более четырёх (по количеству записей в таблице разделов).
FreeBSD Partition Clean

Необходимо сделать раздел freebsd загрузочным для этого выберем раздел "freebsd" (он будет между двух разделов) и нажмем [S]. В колонке Flags напротив вашего раздела появиться флаг (А).
FreeBSD Partition

Заканчиваем разбивку диска и выходим кнопкой [Q], при этом, он спрашивает про Boot Manager мы выбираем "Standart" остальные два нужны в случае при установке и проживания FreeBSD с другими ОС на сервере.
FreeBSD Boot Manager

Label

Попадем опять в "Custom Instalation" там выбираем 4й пункта Label в котором размечаем разделы в выделенном слайсе (slice). Разделы, располагаемые внутри слайса, обозначаются буквой с A до H и могут содержать только одну ФС. Для разделов A, B, C и D существуют определенные соглашения:

  • A - корневая файловая система
  • B - раздел подкачки swap
  • C - создается такого же размера, что и весь слайс, - это позволяет утилитам (пример сканер сбойных блоков), которым необходимо работать над всем слайсом работать с разделом С
  • D - для специальных целей и не используется

Полное имя раздела состоит из имени дискового устройства, номера слайса и буквенного обозначения раздела. К примеру ad0s2a - корневой раздел слайса номер 2 ведущего (master) ATA-диска расположенным на первом контроллере.

Можно нажать кнопку [А] и тогда система автоматически разобьет разделы, но это не эффективно и часто очень странно разбиваеться. Вот как раз пример такой разбивки.
FreeBSD disklabel Label

Мы будем разбивать по своему усмотрению и я покажу основные этапы.
Нажмем [C] укажем нужный размер и значение, а так же укажем чем измерять указанный объем в M - Mb или G - Gb.
FreeBSD disklabel Value Required

Укажем тип раздела - основной или раздел подкачки.
FreeBSD disklabel partition type

Укажем точку монтирования в данном случае я указываю корневую точку монтирования.
FreeBSD disklabel root Value Required

После всех манипуляций у вас не должно остаться "лишних" мегабайтов и должно разбито примерно так (размеры свои вы ставите самостоятельно):
FreeBSD disklabel final
Нажимаете [Q] завершаете работу со слайсами.

Distributions

И тут опять попадаете в Custom Instalation, где выбираете пункт 5 Distributions. Теперь вам необходимо выбрать, какой именно дистрибутивный набор вам нужно установить. Выберите пункт "B Custom"
FreeBSD Distributions

Вот целый список всего, что хотите и вам нужно указать необходимое:

Вот примерно что должно получиться. Выбираем [OK] и попадаем опять в Custom Instalation.

Commit

В Custom Instalation выбираете пункт 7 Commit.
FreeBSD Commit

После страшного предупреждения об откачке надежды и задраивания люков приступаем к погружению.

Во время установки, проходящей на нулевой консоли [F1], доступна командная строка по [F4] и подробности установки на [F2].

Configuration Menu

После окончания работ выходим и соглашаемся на визит в Configuration Menu.
FreeBSD Configuration

Перед вами будет указан большой список пост-инсталяционных переменных пройдемся по основным параметрам.
FreeBSD Configuration Menu

Root Password

Укажем пароль root и подтверждение всё что вписываете остается невидимым такая специфика так что не бойтесь.
FreeBSD Root Password

User Management

Добавим нового пользователя в систему.
FreeBSD User
Укажем его имя, добавим в группу wheel для того чтобы он мог работать от имени root и при необходимости можете изменить shell.
FreeBSD User Management

Console

В этом меню вы указываете раскладки, шрифты, отображения и тип терминала.
FreeBSD Console Configuration
FreeBSD System Console Font
FreeBSD System Console Keymap
FreeBSD System Console Screenmap
FreeBSD System Console Terminal Type

Time Zone

Следующи шагом вам необходимо настроить часовой пояс. На запрос о том настроенны ли CMOS-часы на UTC отвечайте "NO" затем выберете регион, страну и часовой пояс.
FreeBSD UTC
FreeBSD Zone Selector
FreeBSD Countries in Europe
FreeBSD Time Zone

Network

Попадаем в Configuration Menu там выбираем Network в нем заходим в Interfaces находите свой интерфейс предварительно отказавшись от IPv6 и DHCP.
FreeBSD Network
Настраиваете свою сетевую карту согласно предварительно записанным настройкам.
FreeBSD Network Configuration

Не забудьте пометить SSHD в этом разделе чтобы вы могли удаленно по протоколу SSH заходить на эту машину.

Завершение установки

Выбираетесь в основное меню и нажимаете "X Exit Instalation"
FreeBSD Sysinstall
Вас переспросят действительно ли вы хотите выйти и перезагрузить машину?
FreeBSD Exit Instalation
А так же вежливо предложат убрать загрузочный диск. После этого перезагрузится система и все будет готово к дальнейшей работе.
FreeBSD END

Что дальше?

Вам необходимо научиться элементарно работать с системой это можно и по хенбуку и по книгам (см "Дополнительные материалы" в конце статьи) дополнительно можете посмотреть следующие статьи.

  • Настройка консоли (видео статья)
  • Локальное и удаленное обновление FreeBSD

И вы сможете сделать все что угодно если будете иметь терпение и захотите заставить работать свои мозги в нужном и правильном направлении. Удачи!

Welcome to Hell!

Дополнительные материалы
Ссылки: 
Задать вопрос по статье [Форум]
Скачать книги по FreeBSD [Библиотека]
Проект FreeBSD
Руководство FreeBSD (handbook)
Маны
Ваша оценка: Нет Средняя: 5 (12 голосов)

Настройка

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

Jail - механизм виртуализации в системе FreeBSD

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

  • Имеется незагруженный сервер который может дать большое кол-во ресурсов.
  • Нежелание засорять систему программами которые можно было вынести на другие сервера.
  • Иметь тестовый полигон на реальном железе.

Содержание:

  • Введение
  • Создание клетки
    • Конфигурация rc.conf
    • Конфигурация сети
  • Запуск
  • Дополнительная настройка
    • Окружение
    • Экспорт портов
  • Ограничения
  • Автоматизируем птицеферму
  • Заключение

Введение

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

Создание клетки

Необходимо провести несколько манипуляций:

  1. bsd# setenv D /usr/home/jails/test.local
  2. bsd# mkdir -p $D
  3. bsd# cd /usr/src
  4. bsd# make buildworld
  5. bsd# make installworld DESTDIR=$D
  6. bsd# make distribution DESTDIR=$D
  7. bsd# mount -t devfs devfs $D/dev

1. Укажем переменную имени к окружению.
2. Создадим домашнюю директорию по переменной.
5. Заполним каталог поддерева необходимыми двоичными файлами, библиотеками, справочниками и так далее.
6. Установим все необходимые файлы из /usr/src/etc/ и /etc в каталог клетки $D/etc/.

Конфигурация rc.conf

# Значения для всех клеток
jail_enable="YES"     # Включаем jail
jail_interface="em0"    # Сетевой интерфейс
jail_devfs_enable="YES"  # Монтируем devfs в клетках
jail_procfs_enable="YES" # Монтируем procfs в клетках
jail_set_hostname_allow="YES"
 
# Список клеток
jail_list="test"     # Имя клеток через пробел для списка клеток
 
# Значения для созданной клетки "test"
jail_test_rootdir="/usr/home/jails/test.local"     # Рутовая директория jail
jail_test_hostname="test.local"     # Имя хоста клетки
jail_test_ip="192.168.0.4"     # IP адрес хоста клетки
#jail_test_interface="em0"     # Сетевой интерфейс клетки (если нужен)
#jail_test_devfs_enable="YES"     # Монтируем devfs в клетке
#jail_test_procfs_enable="YES" # Монтируем procfs в клетке
 
jail_test_exec_start="/bin/sh /etc/rc"
jail_test_exec_stop="/bin/sh /etc/rc.shutdown"
jail_test_flags="-l -U root"      # Необходимые флаги для клетки

Конфигурация сети

Необходимо создать сетевые алиасы для ваших клеток. Они нужны чтобы клетки могли корректно работать в сети. Алиасы создаются на материнской системе:

bsd# cat /etc/rc.conf |grep if
ifconfig_em0="inet 192.168.0.2  netmask 255.255.255.0"
# Алиас для первой клетки
ifconfig_em0_alias0="inet 192.168.0.4 netmask 255.255.255.255"

Запуск

Для запуска всех клеток используйте:

bsd# /etc/rc.d/jail start
bsd# /etc/rc.d/jail stop


Для запуска необходимой клетки используйте ее имя:
bsd# /etc/rc.d/jail start test
bsd# /etc/rc.d/jail stop test

Выведем список работающих клеток:

bsd# jls
   JID  IP Address      Hostname                      Path
     1  192.168.0.4     test.local               /usr/home/jails/test.local
     2  192.168.0.5     jabber.local             /usr/home/jails/jabber.local

Зайдем в первую клетку:

bsd# jexec 1 tcsh
test#

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

Дополнительная настройка

Окружение

FSTAB

Создадим в клетке пустой файл /etc/fstab чтобы при ее запуске не появлялось сообщение об отсутствующем файле fstab.

bsd# touch /home/jails/test.local/etc/fstab

PORT MAPPER

Выключите в клетке port mapper.

bsd# cat /home/jails/test.local/etc/rc.conf |grep rpcbind
rpcbind_enable="NO"

RESOLV

Настроим resolv.conf так, чтобы разрешение имен в клетке работало правильно. Создадим в клетке файл с нужным DNS сервером или скопируем с основной машины в клетку.

bsd# cat /home/jails/test.local/etc/resolv.conf
nameserver 192.168.0.1

SENDMAIL

Запустим в клетке newaliases чтобы при запуске не появлялось сообщение от sendmail.

test# /etc/mail/ && newaliases

IFCONFIG

Отключим сетевой конфигурационный интерфейс чтобы при запуске не появлялось сообщение от ifconfig.

bsd# cat /home/jails/test.local/etc/rc.conf |grep network
network_interfaces = ""

Пароли

Обязательно измените пароль root в клетке (сделайте отличным от основной машины).

Создадим нового пользователя. Для этого есть штатная утилита jexec с помощью нее мы добавим нового пользователя состоящего в группе wheel [цифра это JID клетки]:

bsd# jexec 1 adduser
Username: alex
Full name: Alex Ign
Uid (Leave empty for default):
Login group [alex]:
Login group is alex. Invite alex into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh nologin) [sh]: csh
Home directory [/home/alex]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : alex
Password   : *****
Full Name  : Alex Ign
Uid        : 1003
Class      :
Groups     : alex wheel
Home       : /home/alex
Home Mode  :
Shell      : /bin/csh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (alex) to the user database.
Add another user? (yes/no): no
Goodbye!

SSH

Для работы с клеткой посредством ssh необходимо настроить демон sshd.
Для этого на основной машине в /etc/ssh/sshd_config укажем нужный для прослушивания IP.

bsd# cat /etc/ssh/sshd_config | grep ListenAddress
#ListenAddress 0.0.0.0
ListenAddress 192.168.0.2
#ListenAddress ::

Перезапустим демон и проверим его работу.
bsd# /etc/rc.d/sshd restart
bsd# sockstat -l |grep sshd
root     sshd       1216  3  tcp4   192.168.0.4:22        *:*
root     sshd       978   3  tcp4   *:22                  *:*

Добавим в конфигурационный файл rc.conf клетки.
bsd# cat /home/jails/test.local/etc/rc.conf |grep sshd
sshd_enable="YES"

TIMEZONE

Установите нужную временую зону в клетке.

Экспорт портов

Экспортируем существующие порты в клетку. Вы можете также скопировать их в нужную директорию или создать симлинк.

bsd# mkdir /home/jails/test.local/usr/ports
bsd# mount_nullfs /usr/ports /home/jails/test.local/usr/ports
bsd# cat /etc/fstab |grep jail
/usr/ports              /home/jails/test.local/usr/ports nullfs rw 0 0

Ограничения

Вы можете настроить некоторые переменные sysctl в основной системе для настройки работы клеток.

  1. security.jail.set_hostname_allowed: 1 # Возможность менять hostname внутри клетки.
  2. security.jail.socket_unixiproute_only: 1 # Создавать сокет в клетке можно только для PF_LOCAL, PF_INET или PF_ROUT иначе, возвращается ошибка
  3. security.jail.sysvipc_allowed: 0 # Возможность использовать System V IPC
  4. security.jail.enforce_statfs: 2 # Возможность видеть клетке все смонтированные устройства
  5. security.jail.allow_raw_sockets: 0 # Возможность использования низкоуровневых сокетов (ping и тп)
  6. security.jail.chflags_allowed: 0 # Возможность менять системные флаги файлов
  7. security.jail.jailed: 0 # Видеть список запущенных клеток
  8. security.jail.getfsstatroot_only: 1 # - клетка получает только информацию о ФС, например, возвращается df, для корневой файловой системы.

Для некоторого ограничения ресурсов клетки используйте совместно с ограничениями в /etc/login.conf ;)

Автоматизируем птицеферму

Написать о самописном скрипте или о порте который может управлять клетками?

Заключение

Теперь вы можете создавать и работать с клетками. Есть конечно недостатки клеток такие как отсутствие ограничений на использование ресурсов процессора или памяти без серьезной распилки и применения специальных патчей и многое другое. Но зато все работает нативно и быстро в данном случае мы добились желаемого.

Дополнительные материалы
Ссылки: 
Ветка форума
Handbook - Arch
Ваша оценка: Нет Средняя: 5 (33 голоса)

Локальное и удаленное обновление FreeBSD

Написал краткую справку об обновлении локальных и удаленных серверов в пределах одной ветки.

Обновление csup

Сначала вам нужно обновить исходные коды системы, и мы будем использовать штатные средства операционной системы csup. Конфигурационный файл готов, его необходимо скопировать и изменить, он находится в директории:

# cd /usr/share/examples/cvsup/
# ls
README           gnats-supfile    refuse.README    www-supfile
cvs-supfile      ports-supfile    stable-supfile
doc-supfile      refuse           standard-supfile

Укажем нужную версию операционной системы.
В существующем конфигурационном файле стоит текущая версия.

# cat standard-supfile | grep default
*default host=CHANGE_THIS.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_7_1
*default delete use-rel-suffix
*default compress
src-all

Скопируем файл и немного изменим:

# cp standard-supfile standard-supfile-RELENG_8_2
# cat standard-supfile-RELENG_8_2 | grep default
*default host=CHANGE_THIS.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_8_2
*default delete use-rel-suffix
*default compress
src-all

Теперь нам необходимо синхронизировать src делается просто:

# /usr/bin/csup -h cvsup4.ru.freebsd.org -g -L 2 \
/usr/share/examples/cvsup/standard-supfile-RELENG_8_2

Когда синхронизация завершилась, приступим к обновлению системы (не забываем прочитать файл UPDATING чтобы все прошло гладко). Предупреждаю, что сначала мы будем устанавливать, ядро GENERIC и если все пройдет гладко и вы протестируете хотя бы один день сервер то можете, скомпилируйте свое ядро.
Очистим директории, от предыдущего мусора соберем мир и ядро и установим ядро:

# cd /usr/obj  ;chflags -R noschg * ;rm -rf *
# cd /usr/src
# make -j4 buildworld
# make -j4 buildkernel KERNCONF=GENERIC
# make installkernel KERNCONF=GENERIC

Теперь начинаются различия обновления локального и удаленного серверов. Рассмотрим два этих варианта:

Локальный сервер

Для безопасного и корректного обновления необходимо ввести машину в single mode можно сделать двумя способами:

  • Перезагрузкой и выбором в стартовом меню загрузку в single mode (номер 4).
    # shutdown -r now
  • Или напрямую активировать данный режим:
    # shutdown now

Удаленный сервер

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

  • Отключить в /etc/rc.conf все службы, в которых нет необходимости для запуска системы это СУБД, FTP, Apache и т.д. (sshd не выключать!)
  • Перезагрузить сервер

Можно и самим остановить эти службы без перезагрузки системы.

Продолжаем обновление

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

# /sbin/mount -u /
# /sbin/mount -a
# csh
# su
# mergemaster -p

Установим мир и удалим старые файлы.

# cd /usr/src
# make installworld
# make delete-old

Для автоматизации удаления старых версий выполните:
yes | make delete-old

mergemaster

Запустим mergemaster для синхронизации файлов, библиотек, конфигурационных файлов с новыми версиями.

# mergemaster -cv   (c-контекстный diffs вместо унифицированного)

mergemaster сравнивает существующие конфигурационные файлы с теми, которые предлагаются новой версией FreeBSD. И если существуют отличия, то появляется сообщение об этом. Первой строкой в нем идет имя файла, который не соответствует новым требованиям, а ниже сами отличия.
Знаки:

  • - - этим знаком помечаются строки, которые mergemaster собирается удалить.
  • + - этим знаком помечаются строки, которые будут добавлены.

Есть несколько вариантов управления и в низу mergemaster предлагают следующие варианты работы с текущим файлом:

  • d - удалить предлагаемый вариант оставить старый.
  • i - установить предлагаемый вариант, удалив старый.
  • m - сравнить и объединить при необходимости построчно старый и новый вариант.
  • v - посмотреть отличия в файлах снова.

При построчном сравнивании экран делится на две части, слева строки из старого файла, а справа из предлагаемого. При нажатии на "Enter" выводятся возможные варианты последующих действий:

  • l - использовать вариант с левой стороны.
  • r - использовать вариант с правой стороны.

и т.д.

После того как сравнение файла закончилось, предлагаются следующие варианты:

  • i - установить получившийся файл.
  • r - повторить сравнение снова.
  • v - просмотреть получившийся файл.

Бывает, что с новой версией системы появляются новые файлы, которых до этого не было. В таком случае предлагается 2 варианта:

  • d - удалить предлагаемый вариант и оставить старый.
  • i - установить предлагаемый вариант, удалив старый.

И так сравниваются все файлы.

Завершение

Когда закончите, объединять файлы перезапустите систему и удалите старые библиотеки, а так же проверьте версию системы:

# shutdown -r now
# cd /usr/src/
# make delete-old-libs
# uname -a
FreeBSD bsd.ampul.local 8.2-RELEASE FreeBSD 8.2-RELEASE #1: Tue May 19 09:55:51 MSD 2009
Raven2000@bsd.ampul.local:/usr/obj/usr/src/sys/MYKERNEL  i386

Обновление портов

/usr/bin/csup -h cvsup4.ru.freebsd.org -g -L 2 /usr/share/examples/cvsup/ports-supfile \
&&  cd /usr/ports/ && make fetchindex

Обновление по крону

# crontab -l |grep csup
1  8  *  *  *  (/usr/bin/csup -h cvsup4.ru.freebsd.org -g -L 2 \
/usr/share/examples/cvsup/ports-supfile \
&&  cd /usr/ports/ && make fetchindex) >/dev/null 2>&1

Проблемы

В. Не запускаются программы требуют старые библиотеки
О. Есть два варианта. Пересобрать ПО или установить библиотеки нужной версии ОС:

# /usr/ports/misc/compat
compat3x/ compat4x/ compat5x/ compat6x/ compat7x/

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

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

Для начала:
  • заменяем стандартные цвета консоли (серый на чёрном) на (светло зелёный на чёрном)>
  • меняем разрешения c 720x400 на 1024x768
  • настраиваем splash - графическая картинка при загрузке системы
  • локализуем консоль
  • настраиваем shell
  • работаем под root'ом
  • используем i386 платформу
  • в версии 8.1 amd64 уже работает

Для этого нам необходимо откорректировать ядро.
Копируем ядро GENERIC под другим именем и редактируем:

cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/CUSTOM
vi /usr/src/sys/i386/conf/CUSTOM

Добавляем следующее:

options		VGA_WIDTH90
options		VESA
# Добавить поддержку растрового режима
options 	SC_PIXEL_MODE
# Цвет консольного шрифта
options 	SC_NORM_ATTR="(FG_LIGHTGREEN|BG_BLACK)"
# Цвет выделенного консольного шрифта
options 	SC_NORM_REV_ATTR="(FG_YELLOW|BG_GREEN)"
# Цвет сообщений ядра
options 	SC_KERNEL_CONS_ATTR="(FG_YELLOW|BG_BLACK)"
# Цвет выделенных сообщений ядра
options 	SC_KERNEL_CONS_REV_ATTR="(FG_BLACK|BG_RED)"

Собираем и устанавливаем ядро.

Настроим подходящее разрешение, и set prompt

Выводим список возможных разрешений:

vidcontrol -i mode

в указанном списке выбираем то, что нравится, и пробуем:
vidcontrol MODE_XXX #(XXX) номер режима

Указываем чтобы наш режим стартовал на всех консолях при загрузки системы.
vi /etc/rc.conf

allscreens_flags="MODE_XXX"

Делаем set prompt цветным:

надо выполнять для каждого пользователя отдельно
echo 'set prompt="(%l)[%{\033[36m%}`whoami`@%{\033[1;33m%}%m:%{\033[0;32m%}%~%{\033[0m%}]%# "' >> ~/.cshrc

Можно сделать чтобы root был подсвечен красным, а все остальные светлосиним
vi ~/.cshrc 

set COLORLOGIN="%{\033[36m%}"
if( `whoami` == root ) then
        set COLORLOGIN="%{\e[00;31m%}"
endif
set prompt="(%l)[$COLORLOGIN`whoami`%{\033[36m%}@%{\033[1;33m%}%m:%{\033[0;32m%}%~%{\033[0m%}]%# "

При желании можно настроить splash.

для этого надо:

vi /boot/loader.conf

autoboot_delay="4" #задержка перед запуском в секундах
loader_logo="beastie" #чертёнок вместо надписи FreeBSD
splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bmp"

и положить свой файл (картинку) в /boot/

Локализация консоли:

sysinstall

>Configure >Console

>Font экранный шрифт - IBM 866
>Keymap раскладка клавиатуры - Russia KOI8-R
>Screenmap таблица перекодировки - KOI8-R to IBM866
>Ttys тип терменала - KOI8-R cons25r
В завершении укажем язык пользователя.
pw usermod root -L russian
pw usermod <user> -L russian

После перезагрузки консоль начнет говорить с вами по русски.

Настройка shell:

vi ~/.cshrc 

для удобства можно добавить алиасы
alias ls        ls -GAFfawlh #флаг G - цветной вывод команды
alias df        df -h #вывод в более приемлемом виде (Kb,Mb,Gb)
alias halt      halt -p #аналог shutdown -p now
alias top       top -s 1 #обновление раз в секунду
alias grep      grep --colour=auto
 
#при условии установленного colorize "/usr/ports/sysutils/colorize"
#alias tail      "/usr/bin/tail \!* | /usr/local/bin/colorize"
#alias cat       "/bin/cat \!* | /usr/local/bin/colorize"

ещё можно заменить редактор по умолчанию vi на ee или mcedit

для этого надо указать нужный нам редактор в поле setenv EDITOR
vi ~/.cshrc 

setenv  EDITOR  ee

для того чтобы, при нажатии TAB выводился список возможных вариантов после автодополнение (когда вариантов автодополнение больше одного), нужно добавить такой параметр:
vi ~/.cshrc 

set autolist #выводит листинг при первом нажатии TAB

set autolist = ambiguous #выводит листинг при втором нажатии TAB

Настройка zsh:

Ставим zsh

pkg_add -r zsh

либо
cd /usr/ports/shells/zsh ; make install clean

Устанавливаем zsh оболочкой по умолчанию:
chsh -s /usr/local/bin/zsh

И настраиваем zsh
vi ~/.zshrc

bindkey "^[[2~" yank
bindkey "^[[3~" delete-char
bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history
bindkey "^[[7~" beginning-of-line
bindkey "^[[8~" end-of-line
bindkey "^[e" expand-cmd-path
bindkey "^[[A" up-line-or-search
bindkey "^[[B" down-line-or-search
bindkey " " magic-space
PROMPT=$'%{\e[1;32m%}[%{\e[1;34m%} %n@%M %/ %{\e[1;32m%}] %{\e[1;31m%}%# %{\e[0m%}'
RPROMPT=$'%{\e[1;32m%}[%{\e[1;34m%} %T %{\e[1;32m%}]%{\e[0m%}' 
alias df='df -h'
alias ls='ls -GAFfawl'
alias top='top -s 1'
EDITOR=/usr/bin/ee
export EDITOR

Дополнительные материалы
Ссылки: 
Ветка форума
Ваша оценка: Нет Средняя: 4.3 (8 голосов)

Демоны

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

Bacula


Bacula — кроссплатформенное клиент-серверное программное обеспечение, позволяющее централизованно управлять резервным копированием, восстановлением, и проверкой данных по сети. Bacula также может работать на единственном сервере или, распределёно на нескольких, может записывать резервные копии на различные типы носителей, включая ленты, ленточные библиотеки, диски. Предлагает широкие возможности для управления хранилищами данных, облегчает поиск и восстановление потерянных или повреждённых файлов. Благодаря модульной структуре, Bacula легко масштабируемая система и может работать как в маленьких так и в крупных сетях. Дает возможность управления через CLI, GUI и веб-интерфейс.

Содержание:

  • Введение
  • Планирование
  • Установка
    • База данных
  • Настройка
    • Director (DIR)
    • Storage Daemon (SD)
    • Console
    • File Daemon (FD)
  • Запуск
    • Сохранение данных
    • Восстановление
    • Гибридный метод
    • Переменные
  • Управление
    • Webacula
    • BAT, tray-monitor
  • FAQ
  • Книги

Введение

Bacula разделена на несколько отдельных модулей это придает ей гибкости в работе:

  • Director (DIR) (порт 9101) — директор осуществляет централизованный контроль и администрирование всего комплекса задач. Планирование и управление заданиями на резервное копирование (Job). Обслуживание Каталога (Catalog) — центральной БД для хранения метаданных.
  • Storage Daemon (SD) (порт 9103) — сервер хранения читает и пишет данные на физический носитель: диск, ленту, DVD, USB.
  • File Daemon (FD) (порт 9102) — клиент выполняющий непосредственное копирование, восстановление и проверку данных по запросу Director. File Daemon должен быть установлен на нужной клиентской машине и он обменивается информацией с Director и Storage Daemon.
  • Console — консоль управления для администратора. Поддерживает списки ACL для разных пользователей консоли. Типы консолей: TTY, wxWidgets (GUI) для Linux, Unix, Win32, GNOME (GUI), несколько веб-интерфейсов, Qt4.
  • Catalog database — база данных для хранения метаданных SQL: MySQL, PostgreSQL, или SQLite.
  • Tray Monitor — апплет GNOME/KDE/Win32 GUI для показа активности Director, File daemons, Storage daemon в реальном времени.

Планирование

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

Оборудование
  • thor.kmps.local - FreeBSD 8.2 amd64. ISC-DHCP, Web, NUT, Bacula и т.п. [DIR, SD, FD]
  • srv1.kmps.local - Windows 2003, AD, сетевые директории, DNS, SEP, WSUS, Bacula и т.п. [FD]
  • srv2.kmps.local - Windows 2003 БД 1С, Гарант, Консультант+, Bacula и т.п. [FD]

Как я сказал Bacula может быть распределена в сети и при грамотном ведении хозяйства и бюджета наша задача выглядит примерно так.

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

К слову сказать готовые ленты желательно переносить в другое здание (или помещение) тк от чрезвычайных случаев никто не застрахован. И вот еще я как и все вы живем в России обычно бюджет фирм на ИТ небольшой и приходиться выкручиваться самому так, что реальная схема часто выглядит так.

Схема резервного копирования

Для начала вам понадобится нарисовать простую таблицу примерно такого вида.

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

Типы резервного копирования

Дополнительно опишем типы резервного копирования их плюсы и минусы:

  1. Полное копирование (Full backup) - производится копирование данных в полном объеме. Самый надежный способ копирования. В случае выхода из строя свежей копии данные можно восстановить из предыдущих копий. Эффективный и быстрый метод восстановления. Недостаток - требует носителей большого объема и длительного времени выполнения.
  2. Дифференциальное копирование (Differential backup) - копируются файлы, изменившиеся после последнего Full backup. Данные копируются "нарастающим итогом", так что последняя копия всегда будет содержать все изменения с момента последнего Full backup. Выполняется быстрее чем Full backup, при повреждении одной из копий не приводит к потере всех данных за последующий и предыдущий период (при наличии живого Full backup). Так или иначе требуется регулярный Full backup и бывает что последняя копия (при длительной работе) по размеру изменений приближается к Full backup.
  3. Инкрементное копирование (Incremental backup) - выполняется копирование только информации, измененной после выполнения предыдущего Incremental backup. Это самый быстрый метод резервирования и занимает меньше всего объема, но и самый ненадежный метод. В случае повреждения одной из копий все последующие становятся шлаком. И соответственно при повреждении Full backup все становиться негодным. Восстановление данных занимает продолжительное время.

Предпочтителен Full backup но это"дорого" обходиться. Если данные не очень ценны или ресурсов мало то используйте Incremental backup. Differential backup это компромисс, но бывает что последняя копия приближается объему полного копирования так что следите за ним =). Есть еще и другие типы копирования такие как VirtualFull и Base вы можете познакомиться с ними сами.

Установка

Установка стандартна так что следуйте за белым кроликом...

# make search name=bacula-server
Port:   bacula-server-5.0.3
Path:   /usr/ports/sysutils/bacula-server
Info:   The network backup solution (server)
Maint:  dan@langille.org
B-deps: gettext-0.18.1.1 libiconv-1.13.1_1 postgresql-client-8.3.15,1
R-deps: gettext-0.18.1.1 libiconv-1.13.1_1 postgresql-client-8.3.15,1
WWW:    _http://www.bacula.org/
 
# cd /usr/ports/sysutils/bacula-server
# make config
 
Options for bacula-server 5.0.3
 
[ ] SQLITE3     Use SQLite-3 database
[X] MYSQL       Use MySQL database
[ ] POSTGRESQL  Use PostgreSQL database
[ ] MTX         Install mtx for control of autochanger devices
[X] NLS         Native Language Support via gettext utilities
[X] OPENSSL     Enable OpenSSL for encrypted communication
 
# make install clean
You may use the following build options (or make config):
 
  WITH_CLIENT_ONLY=yes  if you only want the file daemon.
  WITH_MTX=yes          if you want to use mtx instead of chio for autochanger control.
  WITH_SQLITE3=yes      if you want SQLite-3 as the database (not recommended).
  WITH_OPENSSL=yes      Enable OpenSSL for encrypted communication.
~~~
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/lib/libbac.so.5
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/bacula-sd
/usr/local/etc/rc.d/bacula-dir
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.bacula.org/
===>  Cleaning for bacula-server-5.0.3

База данных

Для работы Bacula Director ему необходима база данных для накопления и оперирования всевозможными данными о собранных резервных копиях. Такая база называется Каталог (Catalog) и храниться она в СУРБД (MySQL, Postgres). Каталогов может быть несколько, в зависимости от потребностей. Перед запуском, необходимо подготовить хотя бы один.
Cоздадим базу данных в MYSQL, например BACULA_DB, и пользователя имеющего полные права на эту базу данных.

# mysqladmin -uADMIN_USER -pADMIN_PASS create BACULA_DB
# mysql -uADMIN_USER -pADMIN_PASS -e"GRANT ALL ON BACULA_DB.* TO \
 BACULA_USER@localhost IDENTIFIED BY 'BACULA_USER_PASS'" BACULA_DB

Для заполнения базы необходимыми таблицами есть готовый скрипт находящийся /usr/local/share/bacula/make_mysql_tables. В нем по умолчанию используется база данных с именем bacula. Кто использует другое имя БД для Bacula то вам необходимо внести изменение в этот скрипт и запустить его.
# /usr/local/share/bacula/make_mysql_tables -u BACULA_USER -pBACULA_USER_PASS
Creation of Bacula MySQL tables succeeded.

Настройка

Необходимо создать директорию (а лучше взять новый диск для хранения резервных копий и еще лучше это использовать ленточный накопитель) куда будем писать резервные копии, и даем доступ на запись пользователю bacula и примонтируем (в моем случае) диск для бекапов:

# mkdir /home/bacula/backup
# chown bacula:bacula /home/bacula/backup
# mount /dev/ad6s1d /home/bacula/backup

Добавим в fstab строчку про монтирование диска (в моем случае).

# cat /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/mirror/gm0s1b              none            swap    sw              0       0
/dev/mirror/gm0s1a              /               ufs     rw              1       1
/dev/mirror/gm0s1f              /home           ufs     rw              2       2
/dev/mirror/gm0s1d              /usr            ufs     rw              2       2
/dev/mirror/gm0s1e              /var            ufs     rw              2       2
/dev/ad6s1d              /home/bacula/backup    ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0
tmpfs                   /tmp            tmpfs   rw              0       0

Заметка: лучше всего монтировать сразу к корневому каталогу, а не выстраивать лесенок, так как могут быть последствия некорректного монтирования при недоступности вашей директории.

Director (DIR)

Необходимо создать конфигурационные файлы для DIR и SD на основе шаблонов и отредактировать их в соответствии с желаемой конфигурацией.

# cd /usr/local/etc
# ll |grep bacula
-r--r--r--  1 root  wheel    949B 11 май 11:56 bacula-barcodes.samples
-rw-r-----  1 root  bacula   8,8K 11 май 11:56 bacula-dir.conf.sample
-rw-r-----  1 root  wheel    5,8K 11 май 11:56 bacula-sd.conf.sample
# cp bacula-dir.conf.sample bacula-dir.conf
# cp bacula-sd.conf.sample bacula-sd.conf

Разберем дефолтный конфигурационный файл DIR:

# cat bacula-dir.conf
 
#
# Дефолтный файл конфигурации Bacula Director 
#
# Единственное, что должно быть изменено, это добавить одну или
# несколько имен файлов или директорий в директиве Include
# набора FileSet.
#
# Для Bacula релиза 5.0.3 (04 августа 2010) - FreeBSD 8.2-RELEASE
#
# Вы также можете изменить адрес электронной почты по умолчанию
# от root до вашего адреса. См. директивы "mail" и "operator"
# в ресурсах сообщения.
#
 
Director {                            # Определим себя
  Name = thor.kmps.local-dir          # Имя
  DIRport = 9101                      # Порт который слушает DIR
  QueryFile = "/usr/local/share/bacula/query.sql"
  WorkingDirectory = "/var/db/bacula" # Рабочий каталог
  PidDirectory = "/var/run"
  Maximum Concurrent Jobs = 1  # Максимальное количество
                               # параллельных заданий. Не рекомендуется
                               # одновременно записывать
                               # несколько заданий в один пул.
  Password = "SECRET"          # Пароль для анонимной консоли (фулл контрол)
  Messages = Daemon            # Набор настроек для отправки сообщений
}
 
JobDefs {                     # Дефолтное задание
  Name = "DefaultJob"         # Имя задания
  Type = Backup               # Тип (backup, restore и т.д.)
  Level = Incremental         # Уровень бэкапа (Full, Incremental, Differential и тп)
  Client = thor.kmps.local-fd # Имя клиента
  FileSet = "Full Set"        # Набора файлов для сохранения.
  Schedule = "WeeklyCycle"    # Расписание
  Storage = File              # Файловое хранилище
  Messages = Standard         # Поведение уведомлений
  Pool = File                 # Пул, куда будем писать бэкапы
  Priority = 10               # Приоритет. Давая заданиям приоритеты
                              # от 1 (max) до 10 (min), можно регулировать
                              # последовательность выполнения.
  Write Bootstrap = "/var/db/bacula/%c.bsr" # Файл хранит информацию откуда извлекать
                                            # данные при восстановлении
}
# Определим основные ночные сохранения заданий резервного копирования
# По умолчанию, работа резервного копирование будет на диске в /tmp
Job {
  Name = "BackupClient1"
  JobDefs = "DefaultJob"
}
 
#Job {
#  Name = "BackupClient2"
#  Client = thor.kmps.local2-fd
#  JobDefs = "DefaultJob"
#}
 
# Резервное копирование каталога базы данных (после ночных сохранений)
Job {
  Name = "BackupCatalog"
  JobDefs = "DefaultJob"
  Level = Full
  FileSet="Catalog"
  Schedule = "WeeklyCycleAfterBackup"
  # Это создает копию ASCII из каталога
  # Аргументы make_catalog_backup.pl являются:
  #  make_catalog_backup.pl <catalog-name>
  RunBeforeJob = "/usr/local/share/bacula/make_catalog_backup.pl MyCatalog"
  # Это удаляет копию каталога
  RunAfterJob  = "/usr/local/share/bacula/delete_catalog_backup"
  Write Bootstrap = "/var/db/bacula/%n.bsr"
  Priority = 11                   # после основного резервного копирования
}
#
# Стандартный шаблон восстановления, который может изменен консольной программой
# Только одна такая работа необходима для всех Работа/Клиентов/Хранилищ...
# [единственное я изменил путь к Where для клиента thor.kmps.local-fd
# это куда Bacula будет складывать восстановленные из архивов файлы]
Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=thor.kmps.local-fd
  FileSet="Full Set"
  Storage = File
  Pool = Default
  Messages = Standard
  #Where = /tmp/bacula-restores
  Where = /home/bacula/bacula-restores
}
 
 
# Список файлов для резервного копирования
FileSet {               # Список файлов
  Name = "Full Set"     # Имя списка файлов
  Include {
    Options {
      signature = MD5   # Тип сигнатур MD5\SHA1
    }
#
# Поместить список файлов, вы можете предшествует 'File =', по одному на строку
# или включить внешний список:
#
#    File = <file-name
#
# Обратите внимание: "/" резервное копирование всего корневого раздела.
# если у вас есть другие разделы, такие как "/usr" / или "/home"
# вероятно, вы захотите, чтобы добавить их тоже.
#
# По умолчанию это определяется, чтобы указать для Bacula бинарный
# каталог, чтобы дать набор файлов для резервного копирования на
# диск во время начального тестирования.
#
    File = /usr/local/sbin
  }
#
# Если вы сохраняете корневой каталог, следующие два исключения 
# файлов могут быть полезны
#
  Exclude {                # Исключения
    File = /var/db/bacula  ##Исключаемые директории
    File = /tmp            ##
    File = /proc           ##
    File = /tmp            ##
    File = /.journal       ###Исключаемые файлы
    File = /.fsck          ###
  }
}
 
#
# Когда делать резервные копии, полную резервную копию в первое
# воскресенье месяца, дифференциальный (т.е. дополнительные к полной)
# каждые остальные воскресенья, так и инкрементный в другие дни.
Schedule {                                # Планировщик
  Name = "WeeklyCycle"                    # Имя планировщика
  Run = Full 1st sun at 23:05             # Запуск полного бекапа в..
  Run = Differential 2nd-5th sun at 23:05 # Запуск диф. бекапа в..
  Run = Incremental mon-sat at 23:05      # Запуск инк. бекапа в..
}
 
# Этот график для каталога. Он запускается после WeeklyCycle
Schedule {
  Name = "WeeklyCycleAfterBackup"
  Run = Full sun-sat at 23:10
}
 
# Это резервное копирование каталога Bacula [изменил из-за БД имя]
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
    #File = "/var/db/bacula/bacula.sql"
    File = "/var/db/bacula/BACULA_DB.sql"
  }
}
 
Client {
  Name = thor.kmps.local-fd        # Имя клиента
  Address = thor.kmps.local        # Адрес
  FDPort = 9102                    # Порт на котором клиент сидит
  Catalog = MyCatalog              # Каталог в MySQL
  Password = "SECRET"              # пароль для FileDaemon
  File Retention = 30 days         # 30 дней - период, на протяжении
                                   # которого в каталоге будет храниться 
                                   # инфа о файлах этого клиента
  Job Retention = 6 months         # 6 месяцев - тоже, но про задания
  AutoPrune = yes                  # Удаление истекших заданий/файлов
}
 
#
# Второй клиент (File Services) для резервного копирования
# Вы должны изменить имя, адрес и пароль, прежде чем использовать
#
#Client {
#  Name = thor.kmps.local2-fd
#  Address = localhost2
#  FDPort = 9102
#  Catalog = MyCatalog
#  Password = "SECRET"                 # пароль для FileDaemon 2
#  File Retention = 30 days            # 30 дней
#  Job Retention = 6 months            # 6 месяцев
#  AutoPrune = yes                     # Удаление истекших заданий/файлов
#}
 
 
# Определение устройства хранения файлов
Storage {
  Name = File                 # Имя. Используется в определениях job
# Не используйте здесь "localhost"
  Address = thor.kmps.local   # Здесь использовать полное имя
  SDPort = 9103               # Порт SD
  Password = "SECRET"         # Пароль к SD
  Device = FileStorage        # Устройство. Должно быть определено
                              # в настройках секции Device сервера хранения
  Media Type = File           # Файл, диск, лента
}
# Определение DDS ленточного устройство хранения данных
#Storage {
#  Name = DDS-4
#  Не используйте здесь "localhost"
#  Address = localhost             # Здесь использовать полное имя
#  SDPort = 9103                   # Порт SD
#  Password = "SECRET"             # пароль для Storage daemon
#  Device = DDS-4                  # должен быть таким же, как Device в Storage daemon
#  Media Type = DDS-4              # должен быть таким же, как MediaType в Storage daemon
#  Autochanger = yes               # включить для авточейнджера устройства
#}
 
# Определение 8мм устройства хранения ленты
#Storage {
#  Name = "8mmDrive"
#  Не используйте здесь "localhost"
#  Address = localhost
#  SDPort = 9103
#  Password = "SECRET"
#  Device = "Exabyte 8mm"
#  MediaType = "8mm"
#}
 
# Определение DVD накопителя
#Storage {
#  Name = "DVD"
#  Не используйте здесь "localhost"
#  Address = localhost
#  SDPort = 9103
#  Password = "SECRET"
#  Device = "DVD Writer"
#  MediaType = "DVD"
#}
 
# Службы общего каталога
Catalog {
  Name = MyCatalog
# Раскомментируйте следующую строку, если вы хотите использовать dbi драйвера
# dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport =
  dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport = 3306
  dbname = "kmps_bacula"; dbuser = "kmps_bacula"; dbpassword = "PASSWORD"
}
 
# Умеренная доставки сообщения - отправить большинство сообщений на адрес
# электронной почты и консоль
Messages {
  Name = Standard
#
# ПРИМЕЧАНИЕ! Если вы отправляете на два почтовых адреса или более 
# адресов электронной почты, необходимо будет заменить %r в поле 
# (-f части) с одиним действительным адресом электронной почты в 
# обоих mailcommand, так и operatorcommand. Что это делает, он
# устанавливает адрес электронной почты, сообщения электронной почты
# будет отображаться в поле «ОТ», который является по умолчанию 
# такое же письмо, как они его передали. Однако если вы отправляете
# сообщение на более чем один адрес, то вам придется вручную,
# установить адреса на один адрес. Например, «no-reply@mydomain.com»,
# лучше так, что стремится сказать (большинству) людей, которые
# его получат с автоматизированного источника рассылки сообщений.
 
  mailcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" /
-s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" /
-s \"Bacula: Intervention needed for %j\" %r"
  mail = root@localhost = all, !skipped
  operator = root@localhost = mount
  console = all, !skipped, !saved
#
# ВНИМАНИЕ! Переменная указанная ниже создаст файл, который вам
# нужно будет ротировать newsyslog'ом Однако, он также будет
# держать все ваши сообщения, если они просматриваются
# с консоли.
  append = "/var/db/bacula/log" = all, !skipped
  catalog = all
}
 
#
# Доставка сообщений для демона сообщений (не работы).
Messages {
  Name = Daemon
  mailcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" /
-s \"Bacula daemon message\" %r"
  mail = root@localhost = all, !skipped
  console = all, !skipped, !saved
  append = "/var/db/bacula/log" = all, !skipped
}
 
# Определение пула по умолчанию
# Pool - отдельное описание для каждого набора томов (лент, DVD, файлов)
# используется при описании задания для указания пула из которого 
# должен быть взят том. В каждый пул может входить несколько томов.
 
Pool {                         # Пул
  Name = Default               # Имя пула
  Pool Type = Backup           # Тип пула
  Recycle = yes                # Bacula может автоматически рециркулировать тома (Volumes)
  AutoPrune = yes              # Удалять из каталога записи о файлах и
                               # заданиях, срок хранения которых истёк в
                               # соответствии с Volume Retention, 
                               # при поиске доступного на запись тома.
  Volume Retention = 365 days  # Через один год
}
 
# Определения пула файлов
Pool {                         # Пул
  Name = File                  # Имя пула
  Pool Type = Backup           # Тип пула
  Recycle = yes                # Bacula может автоматически рециркулировать тома (Volumes)
  AutoPrune = yes              # Удаление истекших томов (Volumes)
  Volume Retention = 365 days  # через один год
  Maximum Volume Bytes = 50G   # Ограничение размера тома
  Maximum Volumes = 100        # Ограничить количество томов в пуле
}
 
# Определения пула Scratch
# Scratch зарезервировано для пула запасных том - при необходимости
# система самостоятельно переводит том из него в требуемый пул
Pool {
  Name = Scratch
  Pool Type = Backup
}
 
#
# Ограниченная консоль, используемая в трей мониторе для получения
# статуса директора DIR
#
Console {
  Name = thor.kmps.local-mon
  Password = "SECRET"
  CommandACL = status, .status
}
 
# Свои конфигурационные файлы
#@/usr/local/etc/client_schedule.conf
@/usr/local/etc/client_thor.conf
@/usr/local/etc/client_srv1.conf
@/usr/local/etc/client_srv2.conf

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

Последовательность действий

Что бы эффективно управлять системой резервного копирования, нужно как следует подумать и попрактиковаться, пока не придет понимание как эта система работает. В конфигурационном файле вы должны описать к примеру работу для одного клиента несколькими переменными такими как Job, Storage, Pool, Client, FileSet, Schedule. Каждой переменной присваивается понятное имя и далее в Job указываются необходимые имена переменных чтобы это было законченной задачей и могло работать согласно вашим указаниям. Рабочий клиент состоит из 6ти элементов:

  • Job (Работа) - это объект которому присваивают понятное имя и это совокупность вещей и указаний как, кого, что и куда будем резервировать. По его имени эту задачу можно определять, исполнять и вызывать из консоли.
  • Client (Клиент) - здесь указывается имя клиента для этой работы, сам клиент и его имя определяется отдельно.
  • FileSet (Набор файлов) - указывается набор файлов\директорий и их исключений для этой работы, сам набор файлов и его имя определяется отдельно.
  • Schedule (Планировщик) - планировщик для этой работы, в нем описываем периодичность работы и перераспределение ресурсов это когда делать полное копирование когда дифференциальное и тд. Сам планировщик и его имя определяется отдельно и вы можете для удобства завести отдельный конфиг.
  • Storage (Хранилище) - Определение устройства хранения файлов для этой работы. В этом хранилище есть секция Device (см по имени) в котором есть указание, где будем хранить резервные копии.
  • Pool (Пул) - определяем для работы нужный нам Пул это отдельное описание для каждого набора томов (лент, DVD, файлов)

Примечание: Все переменные вы можете использовать в различных комбинациях указав нужное имя в нужной работе к примеру Schedule с именем Weekly_1st можете использовать в разных работах которым необходимо одинаковое время и периодичность работ.

Свои конфигурационные файлы

Создадим дополнительные конфигурационный файлы для трех серверов и включим их в bacula-dir.conf.
Клиент THOR

# cat client_thor.conf
# Клиент Thor
# Создаем задание thor_backup-job и указываем ресурсы.
Job {
  Name = "thor_backup-job"          # Имя задания
  Type = Backup                     # Тип (backup, restore и т.д.)
  Level = Full                      # Уровень бэкапа
  Client = thor-fd                  # Имя клиента
  FileSet = "thor-fileset"          # Набора файлов для сохранения.
  Schedule = "Month-1hrs-sun"       # Расписание
  Storage = backup-disk1            # Файловое хранилище
  Messages = Daemon                 # Поведение уведомлений
  Pool = thor-pool                  # Пул, куда будем писать бэкапы
  Priority = 10                     # Приоритет. Давая заданиям приоритеты
                                    # от 1 до 10, можно регулировать
                                    # последовательность выполнения.
  Write Bootstrap = "/var/db/bacula/thor_backup-job.bsr"
}
 
# Определяем список резервируемых файлов
FileSet {
  Name = "thor-fileset"     # Имя списка
  Include {
    Options {
      signature = MD5
    }
    File = /etc             # Указываем каталоги, который будем бэкапить
    File = /home/Raven2000
  }
  Exclude {                 # Исключим пару каталогов
    File = /home/Raven2000/www/tmp
    File = /home/Raven2000/www/log
  }
}
 
# Pool - описание набора  устройств хранение
# В каждый пул будет входить несколько томов. Регулировать, в какой конкретно
# том бакула будет писать задание нельзя. Я хотел, чтобы каждое задание
# у меня писалось в отдельный файл, поэтому на каждый backup job у меня
# будет отдельный пул.
Pool {
  Name = thor-pool             # Имя пула
  Pool Type = Backup           # Тип пула
  Recycle = yes                # Автоматически менять тома.
  AutoPrune = yes              # Автоматическое удаление из БД заданий с
                               # истекшим сроком годности.
  Volume Retention = 365 days  # Срок, по истечении которого тома будут
                               # удаляться из пула.
  Maximum Volume Bytes = 50G   # Ограничение размера тома
  Maximum Volumes = 100        # Ограничить количество томов в пуле
  Label Format = "thor-"       # Шаблон для создания имени тома при
                               # автоматическом создании метки тома
                               # требует указания Label Media в 
                               # настройках сервера хранения.
  Recycle Oldest Volume = yes  # Удаляем старые копии при нехватке места для новых
}
 
# Определения клиентов
Client {
  Name = thor-fd              # Имя клиента
  Address = thor.kmps.local   # адрес
  FDPort = 9102               # Порт, на котором клиент нас ждет
  Catalog = "MyCatalog"       # Каталог в MySQL
  Password = "SECRET"         # Пароль к клиенту
  File Retention = 30 days    # Период, на протяжении которого в каталоге
                              # будет храниться инфа о файлах этого клиента
  Job Retention = 3 months    # То же, только о заданиях этого клиента
  AutoPrune = yes             # Удалять из каталога
                              # данные о файлах и заданиях, срок хранения
                              # которых истек.
}
 
# Определения файловых хранилищ.
Storage {
  Name = backup-disk1       # Имя хранилища будет использоваться в
                            # определениях job
  Address = thor.kmps.local # Адрес сервера хранения. Настоятельно не
                            # рекомендуется использовать localhost
  SDPort = 9103             # Порт, где file storage нас ждет
  Password = "SECRET"       # Пароль к нему
  Device = backup-disk1     # Устройство. Должно быть определено
                            # в настройках секции Device сервера хранения
  Media Type = File         # Файл, диск, лента и т.д.
}
 
# Планировщик
Schedule {
  Name = "Month-1hrs-sun"
  Run = Full 1st sun at 1:00
  Run = Differential 2nd-5th sun at 1:00
  Run = Incremental mon-sat at 1:00
}

Клиент SRV1

# cat client_srv1.conf
# Клиент SRV1
# Создаем задание srv1_backup-job и указываем ресурсы.
Job {
  Name = "srv1_backup-job"
  Type = Backup
  Level = Full
  Client = srv1-fd
  FileSet = "srv1-fileset"
  Schedule = "Month-1hrs-sun-srv1"
  Storage = File-SRV1
  Messages = Daemon
  Pool = srv1-pool
  Priority = 10
  Write Bootstrap = "/var/db/bacula/srv1_backup-job.bsr"
}
 
FileSet {
  Name = "srv1-fileset"
  Enable VSS = YES      # Использовать Volume Shadow Copy Service (VSS) для клиента Win32
                        # VSS позволяет Bacula копировать открытых файлы
  Include {
    Options {
      compression = GZIP  # Сжатие производится на стороне клиента пофайлово в один поток
      signature = MD5     # Тип сигнатур MD5\SHA1
      portable = no       # переносимый формат сохраняет не все атрибуты NTFS
      noatime = yes       # Позволяет читать файлы без изменения времён atime и ctime
      checkfilechanges = yes # Выдаётся предупреждение, если размер или время
                             # модификации файла изменяется при резервном копировании
      Ignore Case = yes   # Игнор-ть регистр букв при сопост-и шаблонов и рег-х выражений
      wildfile = "*.avi"  # Шаблон
      wildfile = "*.wmv"  # Шаблон
      wildfile = "*.mp3"  # Шаблон
      wildfile = "pagefile.sys"  # Шаблон
      wildfile = "hiberfil.sys"  # Шаблон
      wilddir = "System Volume Information"  # Шаблон
      wilddir = "TEMP"  # Шаблон
      exclude = yes # Подошедшие под шаблоны файлы исключаются из списка
    }
    File = "D:/Shared_buch"      # Что резервируем
    File = "E:/Backup/Windows"   # Что резервируем
  }
}
 
Pool {
  Name = srv1-pool
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 365 days
  Maximum Volume Bytes = 50G
  Maximum Volumes = 100
  Recycle Oldest Volume = yes  # Удаляем старые копии при нехватке места для новых
  Label Format = "srv1-"       # Шаблон для создания имени тома при
                               # автоматическом создании метки тома
                               # требует указания Label Media в 
                               # настройках сервера хранения.
}
 
Client {
  Name = srv1-fd
  Address = srv1.kmps.local
  FDPort = 9102
  Catalog = MyCatalog
  Password = "QbTQzNv/823/spZGTu4buOxFuKT/tiBfg+ZlESr3R1lU"
  File Retention = 30 days
  Job Retention = 6 months
  AutoPrune = yes
}
 
Storage {
  Name = File-SRV1
  Address = thor.kmps.local
  SDPort = 9103
  Password = "SECRET"
  Device = FileStorage-srv1
  Media Type = File
}
 
Schedule {
  Name = "Month-1hrs-sun-srv1"
  Run = Full 1st sun at 3:00
  Run = Differential 2nd-5th sun at 3:00
  Run = Incremental mon-sat at 3:00
}

Клиент SRV2

# cat client_srv2.conf
# Клиент SRV2
# Создаем задание srv2_backup-job и указываем ресурсы.
Job {
  Name = "srv2_backup-job"
  Type = Backup
  Level = Full
  Client = srv2-fd
  FileSet = "srv2-fileset"
  Schedule = "Month-1hrs-sun"
  Storage = backup-disk1
  Messages = Daemon
  Pool = srv2-pool
  Priority = 10
  Write Bootstrap = "/var/db/bacula/srv2_backup-job.bsr"
}
 
FileSet {
  Name = "srv2-fileset"
  Enable VSS = YES
  Include {
    Options {
      compression = GZIP
      signature = MD5
      portable=no
      noatime = yes
      checkfilechanges = yes
      Ignore Case = yes
      wildfile = "*.avi"
      wildfile = "*.wmv"
      wildfile = "*.mp3"
      wildfile = "pagefile.sys"
      wildfile = "hiberfil.sys"
      wilddir = "System Volume Information"
      wilddir = "TEMP"
      exclude = yes
    }
    File = "D:/1SBase"
    File = "E:/Backup/Windows"
  }
}
 
Pool {
  Name = srv2-pool
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 365 days
  Maximum Volume Bytes = 50G
  Maximum Volumes = 100
  Recycle Oldest Volume = yes  # Удаляем старые копии при нехватке места для новых
  Label Format = "srv2-"       # Шаблон для создания имени тома при
                               # автоматическом создании метки тома
                               # требует указания Label Media в 
                               # настройках сервера хранения.
}
 
Client {
  Name = srv2-fd
  Address = srv2.kmps.local
  FDPort = 9102
  Catalog = MyCatalog
  Password = "MkfdcfGqds5qFoSL/W2uBG0DqIvY5bbVDWq/ZuHN39Ct"
  File Retention = 30 days
  Job Retention = 6 months
  AutoPrune = yes
}
 
Storage {
  Name = File-SRV2
  Address = thor.kmps.local
  SDPort = 9103
  Password = "SECRET"
  Device = FileStorage-srv2
  Media Type = File
}
 
Schedule {
  Name = "Month-1hrs-sun-srv2"
  Run = Full 1st sun at 6:00
  Run = Differential 2nd-5th sun at 6:00
  Run = Incremental mon-sat at 6:00
}


Заметка: привыкайте делать включения в основной конфигурационный файл так будет аккуратней и проще в работе и эксплуатации.
Включим ваши конфиги в конец файла bacula-dir.conf

# cat bacula-dir.conf |grep client
#@/usr/local/etc/client_schedule.conf
@/usr/local/etc/client_thor.conf
@/usr/local/etc/client_srv1.conf
@/usr/local/etc/client_srv2.conf

Протестируем конфигурационный файл

# bacula-dir -t -d /usr/local/etc/bacula-dir.conf
# bacula-dir -t -d /usr/local/etc/client_thor.conf
# bacula-dir -t -d /usr/local/etc/client_srv1.conf
# bacula-dir -t -d /usr/local/etc/client_srv2.conf

Если шибок не выдало значит все в порядке.

Storage Daemon (SD)

# vi bacula-sd.conf
#
# Дефолтный файл конфигурации Bacula Storage Daemon
#
# Для Bacula релиза 5.0.3 (04 августа 2010) — FreeBSD 8.2-RELEASE
#
# Может потребоваться изменить имя вашего накопителя в директиве 
# «Archive Device» в устройство ресурсов. Если изменить имя и/или
# «Тип носителя» в ресурсе устройства, убедитесь, что bacula-dir.conf
# имеет соответствующие изменения.
#
 
Storage {                             # Определим себя
  Name = thor.kmps.local-sd           # Имя
  SDPort = 9103                       # Порт, где ждать директора
  WorkingDirectory = "/var/db/bacula" 
  Pid Directory = "/var/run"          # Собственно PID
  Maximum Concurrent Jobs = 20        # Дополнительные ограничения
}
 
#
# Список директоров, которым разрешается связаться с Демоном хранения (SD)
#
Director {
  Name = thor.kmps.local-dir       # Имя директора
  Password = "SECRET"              # Пароль
}
 
#
# Ограниченный директор, используемые в трей мониторе
# для получения статуса демона хранения
#
Director {
  Name = thor.kmps.local-mon       # Имя директора
  Password = "SECRET"              # Пароль
  Monitor = yes
}
 
#
# Примечание, список дополнительных шаблонов устройств смотрите в 
# каталоге <bacula-source>/examples/devices
# Или перейдите по следующей ссылке:
#  _http://bacula.svn.sourceforge.net/viewvc/bacula/trunk/bacula/examples/devices/
#
 
#
# Устройства записи, поддерживаемые данным Демоном хранения (SD)
# это жесткий диск, ленточный накопитель, dvd.
# Для подключения, устройства к директору в bacula-dir.conf
# должны иметь то же Name и MediaType.
#
 
Device {
  Name = FileStorage             # Имя 
  Media Type = File              # Укажем, что будем бекапить 
  Archive Device = /tmp          # Каталог для бекапов
  LabelMedia = yes;              # разрешить Bacula размечать тома
  Random Access = Yes;
  AutomaticMount = yes;          # когда устройство открыто, читать его
  RemovableMedia = no;
  AlwaysOpen = no;
}
#
# Авточенджер с двумя дисками
#
#Autochanger {
#  Name = Autochanger
#  Device = Drive-1
#  Device = Drive-2
#  Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
#  Changer Device = /dev/sg0
#}
 
#Device {
#  Name = Drive-1                      #
#  Drive Index = 0
#  Media Type = DLT-8000
#  Archive Device = /dev/nst0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  AutoChanger = yes
#  #
#  # Включить команду Alert, только если у вас есть MTX пакет загрузки
#  # Обратите внимание, по-видимому, в некоторых системах, tapeinfo
#  # сбрасывает контроллер SCSI. Tаким образом если вы включаете это,
#  # убедитесь, что он не сбрасывает ваш контроллер SCSI. У меня
#  # никогда не было каких-либо проблем, и smartctl, по-видимому,
#  # не вызывают таких проблем.
#  #
# Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
# Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
# Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
 
#Device {
#  Name = Drive-2                      #
#  Drive Index = 1
#  Media Type = DLT-8000
#  Archive Device = /dev/nst1
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
#  Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
#  Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
#  Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# Linux или Solaris LTO-2 ленточный накопитель
#
#Device {
#  Name = LTO-2
#  Media Type = LTO-2
#  Archive Device = /dev/nrsa0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  Maximum File Size = 3GB
## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
## Changer Device = /dev/sg0
## AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
## Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
 
#
# Linux или Solaris LTO-3 ленточный накопитель
#
#Device {
#  Name = LTO-3
#  Media Type = LTO-3
#  Archive Device = /dev/nrsa0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  Maximum File Size = 4GB
## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
## Changer Device = /dev/sg0
## AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
## Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# Linux или Solaris LTO-4 ленточный накопитель
#
#Device {
#  Name = LTO-4
#  Media Type = LTO-4
#  Archive Device = /dev/nrsa0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  Maximum File Size = 5GB
## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
## Changer Device = /dev/sg0
## AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
## Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# FreeBSD ленточный накопитель
#
#Device {
#  Name = DDS-4
#  Description = "DDS-4 for FreeBSD"
#  Media Type = DDS-4
#  Archive Device = /dev/nsa1
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes
#  Offline On Unmount = no
#  Hardware End of Medium = no
#  BSF at EOM = yes
#  Backward Space Record = no
#  Fast Forward Space File = no
#  TWO EOF = yes
#  IIf you have smartctl, enable this, it has more info than tapeinfo
#  Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# Передать все сообщения директора, mount сообщения 
# также отправляются на адрес электронной почты
#
Messages {                            # Будем отправлять все сообщения DIR
  Name = Standard
  director = thor.kmps.local-dir = all
}

Теперь соберем свой конфигурационный файл:

# cat bacula-sd.conf | grep -v ^#
 
Storage {
  Name = thor.kmps.local-sd
  SDPort = 9103
  WorkingDirectory = "/var/db/bacula"
  Pid Directory = "/var/run"
  Maximum Concurrent Jobs = 20
}
 
Director {
  Name = thor.kmps.local-dir
  Password = "SECRET"
}
 
Director {
  Name = thor.kmps.local-mon
  Password = "SECRET"
  Monitor = yes
}
 
Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /home/bacula/backup
  #Archive Device = /tmp
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}
 
Device {
 Name = backup-disk1
 Media Type = File
 Archive Device = /home/bacula/backup
 LabelMedia = yes;
 Random Access = Yes;
 AutomaticMount = yes;
 RemovableMedia = no;
 AlwaysOpen = no;
}
 
Device {
 Name = FileStorage-srv1
 Media Type = File
 Archive Device = /home/bacula/SRV1
 LabelMedia = yes;
 Random Access = Yes;
 AutomaticMount = yes;
 RemovableMedia = no;
 AlwaysOpen = no;
}
 
Device {
 Name = FileStorage-srv2
 Media Type = File
 Archive Device = /home/bacula/SRV2
 LabelMedia = yes;
 Random Access = Yes;
 AutomaticMount = yes;
 RemovableMedia = no;
 AlwaysOpen = no;
}
 
Messages {
  Name = Standard
  director = thor.kmps.local-dir = all
}

Протестируем

# bacula-sd -t /usr/local/etc/bacula-sd.conf

Ничего не выдало значит все в порядке.

Console

Настроим консоль

# cd /usr/local/etc
# cp bconsole.conf.sample bconsole.conf
# cat bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#
 
Director {
  Name = thor.kmps.local-dir
  DIRport = 9101
  address = localhost
  Password = "SECRET"
}

Посмотрим, что она может и отработаем несколько операций:

# /usr/local/sbin/bconsole
Connecting to Director localhost:9101
1000 OK: thor.kmps.local-dir Version: 5.0.3 (04 August 2010)
Enter a period to cancel a command.
 
*help
  Command       Description
  =======       ===========
  add           Добавить новый том к пулу в каталоге; для 
                форматирования тома используйте команду label
  autodisplay   Выдаётся извещение о наличии новых сообщений от директора
  automount     Лента монтируется автоматически после форматирования
                командой label
  cancel        Отменить задание
  create        Создать запись Пула в БД из описания ресурса в файле  
  delete        Удалить из каталога информацию о задании, томе
                или пуле вместе со всеми зависимостями
  disable       Запретить автоматическое планирование работы задания
  enable        Разрешить автоматическое планирование работы задания
  estimate      Считает приблизительный объём сохраняемых данных до 
                сжатия, листинг дает полный список
  exit          Прекращение сессии Bconsole
  gui           Не интерактивный режим gui
  help          Печать справки по определенной команде
  label         Добавить новый том к пулу в БД и форматировать том;
                предварительно может потребоваться размонтировать ленту;
                если лента уже отформатирована, то требуется выполнить
                команды purge и relabel
  list          Список объектов из каталога БД
  llist         Полный или длинный список, как список команд
  messages      вывести накопившиеся сообщения от директора
  memory        Вывести текущее использование памяти DIR
  mount         Монтировать хранилище
  prune         Удалить из БД информацию о файлах, заданиях или томах с
                истёкшим сроком хранения и всё с нею связанное
  purge         Очистка записей из каталога о файлах, заданиях или томах
                с истёкшим сроком хранения и всё с нею связанное
  python        Команда управления Python
  quit          Прекращение сессии Bconsole
  query         Запрос каталога
  restore       Восстановить файлы
  relabel       Заново отформатировать старый том (должен быть в 
                состоянии Purged или Recycle)
  release       перемотать ленту (перед следующим использованием
                заново прочесть метку)
  reload        Перечитать заново конфигурационный файл bacula-dir.conf
  run           Запустить задание\работу
  status        Отчет о состоянии
  setdebug      Устанавить уровень отладки
  setip         Установить новый адрес клиента - если рзрешено
  show          Показать текущее значение ресурсов файла настройки
  sqlquery      Использование SQL для запроса каталога
  time          Показать текущее временя
  trace         Включение / выключение трассировки в файл
  unmount       Размонтирование хранилища
  umount        Размонтировать - для старых Unix парней, см. unmount =)
  update        Обновить информацию томов, пула или статистики 
  use           Использовать каталог xxx
  var           Подстановка переменных
  version       Показать версию DIR
  wait          Ждать завершения задания
 
В режиме ввода команд, введите точку что бы отменить командный режим
 
Вам сообщение.

Работа с Томами

Добавим новый том и отформатируем его (это при условии что вы не выставили в Pool, Label Format = "ИМЯ_ТОМА" при этом том автоматически форматируется и добавляется). Для этого выберем нужный SD (backup-disk1) укажем название Тома (как он будет сохраняться на HDD) и выберем нужный Пул.

# bconsole
Connecting to Director localhost:9101
1000 OK: thor.kmps.local-dir Version: 5.0.3 (04 August 2010)
Enter a period to cancel a command.
*label
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
The defined Storage resources are:
     1: File
     2: backup-disk1
     3: File-SRV1
     4: File-SRV2
Select Storage resource (1-4): 3
Enter new Volume name: srv1_volume
Defined Pools:
     1: Default
     2: Scratch
     3: thor-pool
     4: File
     5: srv2-pool
     6: srv1-pool
Select the Pool (1-6): 6
Connecting to Storage daemon File-SRV1 at thor.kmps.local:9103 ...
Sending label command for Volume "srv1_volume" Slot 0 ...
3000 OK label. VolBytes=213 DVD=0 Volume="srv1_volume" Device="FileStorage-srv1"
 (/home/bacula/SRV1)
Catalog record for Volume "srv1_volume", Slot 0  successfully created.
Requesting to mount FileStorage-srv1 ...
3906 File device "FileStorage-srv1" (/home/bacula/SRV1) is always mounted.
You have messages.
 
*label
The defined Storage resources are:
     1: File
     2: backup-disk1
     3: File-SRV1
     4: File-SRV2
Select Storage resource (1-4): 4
Enter new Volume name: srv2_volume
Defined Pools:
     1: Default
     2: Scratch
     3: thor-pool
     4: File
     5: srv2-pool
     6: srv1-pool
Select the Pool (1-6): 5
Connecting to Storage daemon File-SRV2 at thor.kmps.local:9103 ...
Sending label command for Volume "srv2_volume" Slot 0 ...
3000 OK label. VolBytes=213 DVD=0 Volume="srv2_volume" Device="FileStorage-srv2"
 (/home/bacula/SRV2)
Catalog record for Volume "srv2_volume", Slot 0  successfully created.
Requesting to mount FileStorage-srv2 ...
3906 File device "FileStorage-srv2" (/home/bacula/SRV2) is always mounted.
 
*label
The defined Storage resources are:
     1: File
     2: backup-disk1
Select Storage resource (1-2): 2
Enter new Volume name: thor_volume
Defined Pools:
     1: Default
     2: File
     3: Scratch
     4: thor-pool
Select the Pool (1-4): 4
Connecting to Storage daemon backup-disk1 at thor.kmps.local:9103 ...
Sending label command for Volume "thor_volume" Slot 0 ...
3000 OK label. VolBytes=213 DVD=0 Volume="thor_volume" Device="backup-disk1"
 (/home/bacula/backup)
Catalog record for Volume "thor_vol", Slot 0  successfully created.
Requesting to mount backup-disk1 ...
3906 File device "backup-disk1" (/home/bacula/backup) is always mounted.

Как видим создался Том thor_volume

# ll /home/bacula/backup/
total 8450
-rw-r-----  1 bacula  bacula   8,2M 17 май 23:50 FileDefault
-rw-r-----  1 bacula  bacula   213B 18 май 14:59 thor_volume

File Daemon (FD)
UNIX клиент

Установим клиента на UNIX машине:

# cd /usr/ports/sysutils/bacula-client
# make config
 
Options for bacula-client 5.0.3
 
[ ] WXCONSOLE  Build with wxGTK based GUI console: deprecated
[ ] SFDAEMON   Build with staticly compiled file daemon
[X] NLS        Native Language Support via gettext utilities
[X] OPENSSL    Enable OpenSSL for encrypted communication
 
# make install clean
~~
################################################################################
 
NOTE:
Sample files are installed in /usr/local/etc:
bconsole.conf.sample, bacula-barcodes.sample, bacula-fd.conf.sample
 
  Please read this file:
 
        /usr/local/share/doc/bacula/ReleaseNotes
 
  as installed by docs port for the upgrade procedure.
 
Read the ReleaseNotes for further information.
 
################################################################################
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===>   Registering installation for bacula-client-5.0.3
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/lib/libbac.so.5
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/bacula-fd
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.bacula.org/
===>  Cleaning for bacula-client-5.0.3

Скопируем конфигурационный файл и изменим его настройки.
# cp /usr/local/etc/bacula-fd.conf.sample /usr/local/etc/bacula-fd.conf

Разберемся что внутри:

#cat/usr/local/etc/bacula-fd.conf
#
# Дефолтный файл конфигурации Bacula File Daemon
#
# Для Bacula релиза 5.0.3 (04 августа 2010) — FreeBSD 8.2-RELEASE
#
# Тут не так много, чтобы менять здесь, за исключением, возможно,
# Имени File Daemon
#
 
#
#Список директоров, которым разрешено связаться с этим File Daemon
#
 
Director {
  Name = thor.kmps.local-dir
  Password = "sIad48UBgVYD2gNAh6mRWKahMFtzjwRWNjtL8p28ma3Z"
}
 
#
# Ограничение директора, используемого в tray-monitor, 
# для получения статуса File Daemon
#
Director {
  Name = thor.kmps.local-mon
  Password = "GkSSv/HoUCX7Y7Pi5m62xRD0cnykZnzaYTinCqdhM8t3"
  Monitor = yes
}
 
#
# "Глобальные" спецификации конфигурации File daemon
#
FileDaemon {                     # Определим FD
  Name = thor.kmps.local-fd      # Имя FD
  FDport = 9102                  # Где слушать директора
  WorkingDirectory = /var/db/bacula
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20   # Максимальное кол-во заданий
}
 
# Отправить все сообщения, за исключением пропущенных файлов
# обратно Директору
Messages {
  Name = Standard
  director = thor.kmps.local-dir = all, !skipped, !restored

Теперь соберем свой конфигурационный файл:

# cat bacula-fd.conf | grep -v ^#
 
Director {
  Name = thor.kmps.local-dir
  Password = "SECRET"
}
 
Director {
  Name = thor.kmps.local-mon
  Password = "SECRET"
  Monitor = yes
}
 
FileDaemon {
  Name = thor.kmps.local-fd
  FDport = 9102
  WorkingDirectory = /var/db/bacula
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20
}
 
Messages {
  Name = Standard
  director = thor.kmps.local-dir = all, !skipped, !restored
}

Проверим на наличие ошибок и добавим в rc.conf для запуска при старте ОС.

# bacula-fd -t -d /usr/local/etc/bacula-fd.conf
# echo 'bacula_fd_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/bacula-fd start
Starting bacula_fd.
# sockstat | grep bacula
root     bacula-fd  9295  3  tcp4   *:9102                *:*
bacula   bacula-sd  97221 3  tcp4   *:9103                *:*
bacula   bacula-dir 97212 4  tcp4   *:9101                *:*

Windows клиент

Загружаем программу клиент Win32_64 и запускаем установку программы там указываем следующее.

Тип установки:
Instalation Type: Automatic (так же вы можете поставить только fd без консоли и доков.)

Указываем характеристики DIR:
DIR name: thor.kmps.local-dir
DIR Password: SECRET
DIR Adress: thor.kmps.local

В конце установки предложили сохранить файл C:\srv2-fd.conf такого содержания:

# Client (File Services) to backup
Client {
  Name = srv2-fd
  Address = srv2.kmps.local
  FDPort = 9102
  Catalog = MyCatalog
  Password = "MkfdcfGqds5qFoSL/W2uBG0DqIvY5bbVDWq/ZuHN39Ct"      # password for FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

Вы можете эту информацию с последующим изменением пароля копировать в файл конфигурации сервера DIR, где формируется работа по этому клиенту. После корректной установки FD в Windows становиться службой и в трее висит монитор клиента, где можно посмотреть статус.

Запуск

Для автоматического запуска DIR, SD и FD сервисов при запуске сервера необходимо добавить строчки в /etc/rc.conf:

# echo 'bacula_dir_enable="YES"' >> /etc/rc.conf
# echo 'bacula_sd_enable="YES"' >> /etc/rc.conf
# echo 'bacula_fd_enable="YES"' >> /etc/rc.conf

Запуск сервисов:

# /usr/local/etc/rc.d/bacula-dir.sh start
# /usr/local/etc/rc.d/bacula-sd.sh start
# /usr/local/etc/rc.d/bacula-fd start
# ps -ax | grep bacula
 2060  ??  Is     0:00,19 /usr/local/sbin/bacula-fd -u root -g wheel -v -c /usr/local/etc/bacula-fd.conf
56766  ??  Is     0:19,37 /usr/local/sbin/bacula-sd -u bacula -g bacula -v -c /usr/local/etc/bacula-sd.conf
61339  ??  Ss     0:00,14 /usr/local/sbin/bacula-dir -u bacula -g bacula -v -c /usr/local/etc/bacula-dir.conf
64965   0  S+     0:00,00 grep bacula
 
# sockstat | grep bacula
bacula   bacula-dir 61339 5  tcp4   *:9101                *:*
bacula   bacula-dir 61339 6  dgram  -> /var/run/log
bacula   bacula-sd  56766 4  tcp4   *:9103                *:*
root     bacula-fd  2060  3  tcp4   *:9102                *:*

Сохранение данных

Автоматическое сохранение данных уже настроено и поэтому вы должны следить чтобы все работы шли без ошибок, проверять оставшееся место на HDD. Если вы выполните команду run без параметров она вам выдаст все созданные задачи и вы можете выбрать и запустить нужную. Вы можете сразу запустить нужную задачу с указанным именем задачи *run job=имя-задания.

*run
A job name must be specified.
The defined Job resources are:
     1: BackupClient1
     2: BackupCatalog
     3: RestoreFiles
     4: thor_backup-job
     5: srv1_backup-job
     6: srv2_backup-job
Select Job resource (1-6): 6
Run Backup job
JobName:  srv2_backup-job
Level:    Full
Client:   srv2-fd
FileSet:  srv2-fileset
Pool:     srv2-pool (From Job resource)
Storage:  File-SRV2 (From Job resource)
When:     2011-05-20 23:56:51
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=79

Проверим выполнение задачи и объем на HDD
*status dir
thor.kmps.local-dir Version: 5.0.3 (04 August 2010) amd64-portbld-freebsd8.2 freebsd 8.2-
Daemon started 20-май-11 23:32, 5 Jobs run since started.
Heap: heap=0 smbytes=102,439 max_bytes=237,812 bufs=365 max_bufs=395
~~~~~~~~
 
Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name
====================================================================
    75  Full        831    717.5 M  OK       20-май-11 23:34 srv1_backup-job
    76              831    800.9 M  OK       20-май-11 23:39 RestoreFiles
    77                1    6.825 K  OK       20-май-11 23:44 RestoreFiles
    78                1    6.825 K  OK       20-май-11 23:48 RestoreFiles
    79  Full        109    29.67 M  OK       20-май-11 23:57 srv2_backup-job
====

Все в порядке как мы видим задача выполнена ему присвоен JobId=79 сохранено файлов 109 общим обьемом 29 Мб.

Восстановление

И так с имитируем следующую ситуацию потеря\удаления файла\директории. Восстановим из архива данный файл с помощью bconsole. Директория E:/SIT_v1.1 утеряна вся.
Управление при перемещении и маркировки файлов в этом режиме довольно необычны так, что привыкайте.

*restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
 
Сначала выберите один или несколько JobIds, которые содержат файлы
которые должны быть восстановлены. Вам будет предложен ряд методов
указания JobIds. Тогда вам будет разрешено выбрать, какие 
файлы из этих JobIds должны быть восстановлены.
 
To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13): 1
+-------+--------------------+---------------------+----------+----------+-------------+
| JobId | Client             | StartTime           | JobLevel | JobFiles | JobBytes    |
+-------+--------------------+---------------------+----------+----------+-------------+
| 79    | srv2-fd            | 2011-05-20 23:56:55 | F        | 109      | 29670528    |
| 75    | srv1-fd            | 2011-05-20 23:32:37 | F        | 831      | 717551775   |
| 74    | srv1-fd            | 2011-05-20 23:30:46 | F        | 0        | 0           |
| 73    | srv2-fd            | 2011-05-20 23:29:24 | F        | 109      | 29670528    |
| 72    | srv2-fd            | 2011-05-20 23:26:51 | F        | 109      | 29670528    |
+-------+--------------------+---------------------+----------+----------+-------------+
Для выбора JobIds, у вас есть следующие варианты [дальше лучше без перевода]:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13): 3
Enter JobId(s), comma separated, to restore: 79
You have selected the following JobId: 79
 
Building directory tree for JobId(s) 79 ...  ++++++++++++++++++++++++++++++++
97 files inserted into the tree.
 
Сейчас вы работаете в режиме выбора файла, где вы добавляете (mark) и
удалять (unmark) файлы, котоfрые будут восстановлены. Нет изначально
добавленных файлов, вы можете использовать ключевое слов "all" в 
командной строке чтобы отметить всё.
Введите "done ", чтобы завершить этот режим.
 
cwd is: /
$ ls
E:/
$ cd E:/
cwd is: E:/
$ ls
SIT_v1.1/
$ mark SIT_v1.1
109 files marked.
$ done
Bootstrap records written to /var/db/bacula/thor.kmps.local-dir.restore.4.bsr
 
The job will require the following
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================
    srv2_volume               File-SRV2                 FileStorage-srv2        
Volumes marked with "*" are online.
 
109 files selected to be restored.
 
Defined Clients:
     1: srv1-fd
     2: srv2-fd
     3: thor-fd
     4: thor.kmps.local-fd
Select the Client (1-4): 2
Run Restore job
JobName:         RestoreFiles
Bootstrap:       /var/db/bacula/thor.kmps.local-dir.restore.4.bsr
Where:           /home/bacula/bacula-restores
Replace:         always
FileSet:         Full Set
Backup Client:   srv2-fd
Restore Client:  srv2-fd
Storage:         File-SRV2
When:            2011-05-21 00:01:10
Catalog:         MyCatalog
Priority:        10
Plugin Options:  *None*
OK to run? (yes/mod/no): yes
Job queued. JobId=80

Посмотрим статус директора и что он сказал на эту работу:

*status dir
thor.kmps.local-dir Version: 5.0.3 (04 August 2010) amd64-portbld-freebsd8.2 freebsd 8.2-
Daemon started 20-май-11 23:32, 6 Jobs run since started.
 Heap: heap=0 smbytes=103,909 max_bytes=240,228 bufs=366 max_bufs=395
 
~~~
 
Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name
====================================================================
~~~
    78                1    6.825 K  OK       20-май-11 23:48 RestoreFiles
    79  Full        109    29.67 M  OK       20-май-11 23:57 srv2_backup-job
    80              109    29.67 M  OK       21-май-11 00:01 RestoreFiles
====

Все в порядке данные восстановлены (JobId=80).

Проверка

Заходим на srv2.kmps.local и на диске C:\ появляется с восставленная директория.
C:\home\bacula\bacula-restores\E\SIT_v1.1
Восстановление файлов на Unix клиентах рассматривать не буду в виду аналогичной работы.

Гибридный метод

Я сторонник простых и надежных решений, а так же дублирующих систем. К примеру у меня как и у всех стоит RAID-1 на всех серверах и это хорошо. Идем дальше у меня до бакулы на серверах был отдельный раздел\слайс\жеский диск созданный специально для бекапов и туда резервные копии складывает утилита или скрипт. К примеру:

  • Windows сервера обрабатывает утилита ntbackup она сохраняет весь системный диск и складывает копии в директорию E:/Backup/Windows каждое 1й понедельник месяца.
  • Unix сервера обрабатывает утилита dump сохраняя необходимые разделы в /backup каждый 1й понедельник месяца.

Бакула дополнила существующую схема:

  • Windows сервера - копирует E:/Backup/Windows, расшаренные ресурсы и 1С.
  • Unix сервера - копирует /backup и некоторые слайсы.

Переменные

Pool

Пул это описание для набора томов. Тома это файлы, ленты и DVD. Он используется при описании задания для указания нужного тома.

  • Name - наименование пула
  • Maximum Volumes (0 - бесконечность) - ограничить количество томов в пуле
  • Pool Type - Backup остальные не реализованы, Archive, Cloned, Migration, Copy, Save
  • Storage - описывает сервер хранения, он перекрывает значение, заданное в Job и Schedule и необходимо для работы заданий миграции
  • Maximum Volume Jobs (0 - бесконечность) - по достижении указанного числа заданий, записанных на том, том переводится в состояние Used (плохо совместим с одновременной записью нескольких заданий на том)
  • Maximum Volume Files (0 - бесконечность) - по достижении указанного числа файлов, записанных на том, том переводится в состояние Used. Проверка производится только в конце задания
  • Maximum Volume Bytes (0 - бесконечность) - по достижении указанного числа байт, записанных на том, том переводится в состояние Used
  • Volume Use Duration (0 - бесконечность) - отсчитывается с момента первой записи по достижении которой том переводится в состояние Used
  • Catalog Files - заносить информацию о сохранённых файлах в каталог
  • Volume Retention - время хранения информации о заданиях и файлах на данном томе в каталоге. Отсчёт начинается с момента перехода из состояния Appendable в Full или Used. Так же не рекомендуется устанавливать меньше 2х интервалов между полным сохранением. Сами данные не стираются
  • AutoPrune - удалять из каталога записи о файлах и заданиях, срок хранения которых истёк в соответствии с Volume Retention, при поиске доступного на запись тома
  • RecyclePool - в какой пул переводить том при освобождении места по умолчанию - оставлять в текущем
  • Recycle - если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то bacule ищет том, все задания и файлы которого удалены из каталога (состояние Purged) по истечению срока хранения или вручную, и использует его, переведя в состояние Recycled
  • Recycle Oldest Volume - если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то она очистит самый старый том (удалит информацию из каталога в соответствии со сроками хранения Job Retention, File Retention и Volume Retention). Если на томе не осталось ничего полезного, то повторно использовать его. Не использовать, если в пуле всего 1 том
  • Recycle Current Volume - попробовать освободить смонтированный том. Не использовать, если в пуле всего 1 том
  • Purge Oldest Volume - если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то удаляются из каталога все записи о заданиях и файлах на самом старом томе независимо от срока хранения и том повторно используется. Не рекомендуетс)
  • Cleaning Prefix - если имя тома начинается с указанной строки, то том считается чистящей лентой и запись на него не производится - для автомагазинов со штриховыми метками
  • Label Format - шаблон для создания имени тома при автоматическом создании метки тома. Требует указания Label Media в настройках сервера хранения. Имя тома может содержать буквы, цифры и '-_:.'; шаблон заключается в кавычки; шаблон может включать имена переменных - начинаются с '$', '${' или '['; переменные делятся на счётчики, переменные окружения и внутренние переменные (Year, Month, Day, Hour, Minute, Second, WeekDay, Job, Dir (имя директора), Level, Type, JobId, JobName, Storage, Client, NumVols, Pool (не рекомендуется, т.к. это может оказаться не тот пул), Catalog, MediaType); определено множество функций над переменными, но привыкать к ним не надо, т.к. в новых версиях Label Format заменена скриптом на python; если имена переменных в шаблоне не используются, то имя тома образуется из строки, к которой добавляется число томов в пуле + 1, дополненное нулями до 4 цифр ("File-" => "File-0003"); не стоит использовать NumVols, если вы предполагаете удаление томов)
  • Next Pool - имя пула назначения для задания миграции
  • Migration Time - максимальное время хранения заданий в томах для отбора при миграции типа PoolTime
  • Migration High Bytes -максимальный граница размера пула для задания миграции типа PoolOccupancy
  • Migration Low Bytes - нижняя граница размера пула для задания миграции типа PoolOccupancy
  • JobRetention - интервал хранения информации о заданиях, приоритет над описанием клиента
  • FileRetention - интервал хранения информации о файлах, приоритет над описанием клиента
  • ActionOnPurge - Truncate обнуление размера файла при очистке тома)
Консоль

Аутентификация и авторизация доступа к директору может быть 3 типов:

  • Анонимная консоль со всеми правами (пароль доступа к директору указывается в ресурсе Director настройки консоли и должен соответствовать директиве Password ресурса Director настройки директора)
  • "Именованная" консоль в настройках консоли и директора необходимо сконфигурировать ресурсы Console, в которых указывается имя консоли и пароль доступа к директору. Права доступа определяются с помощью ACL в ресурсе Console настройки директора.
  • Если имя консоли совпадает с именем клиента, то данная консоль имеет права выполнять команду SetIP, чтобы изменить значение Address соответствующего ресурса Client в настройке директора на IP консоли (необходимо при использовании динамических адресов DHCP); команда SetIP должна быть разрешена в ACL

Права доступа для именованной консоли по умолчанию - права отсутствуют, восстанавливать можно только в место по умолчанию.

  • Name - должно быть указано в настройках консоли в ресурсе Console
  • Password - должно быть указано в настройках консоли в ресурсе Console
  • JobACL - список через запятую имён ресурсов заданий, к которым имеет доступ данная консоль можно использовать ключевое слово "all"; можно использовать несколько директив.
  • ClientACL - разрешенные клиенты
  • StorageACL - разрешенные хранялища
  • ScheduleACL - разрешенные планировщики
  • PoolACL - разрешенные пулы
  • FileSetACL - разрешенные наборы файлов
  • CatalogACL - разрешенные каталоги
  • CommandACL - разрешенный список команд, к которым имеет доступ данная консоль
  • WhereACL - куда можно восстанавливать файлы можно использовать ключевое слово "all"; "/" означает восстановление на исходное место; можно использовать несколько директив
Schedule

Описание расписания запуска заданий и переопределения ресурсов Level, Pool, Storage, Messages для задания. Используется в описании задания для указания времени автоматического запуска.

  • Name - Имя расписания
  • Run - [переназначение ресурсов] [дата и время выполнения] можно описывать несколько запусков. К примеру в начале каждого часа (0-23), каждого дня недели (Monday-Sunday), каждого дня месяца (1-31), каждой недели (first-fifth), каждого месяца (january-december), и года. Ограничивающая маска может состоять из элементов или интервалов к примеру неделя начинается в понедельник. Используются шаблоны к примеру: monday-friday, daily, first (первая неделя месяца), w02 - вторая неделя года, а w01 - это соответственно первая неделя).

Остальные переменные буду добавлять по надобности.

Управление

Webacula

Воспользуемся Webacula это PHP (Zend Framework) веб-интерфейс для мониторинга и восстановление файлов.
Основные особенности программы:

  • Полная поддержка MySQL, PostgreSQL и Sqlite баз данных.
  • Запуск Задач
  • Восстановление всех файлов или выбранных файлов из Задач по JobId
  • Восстановление последней резервной копии клиента
  • Восстановление резервной копии клиента до указанного времени
  • Показывает линию времени для Заданий
  • Монтирует и размонтирует Хранилища
  • Показывает Задания, которые выполняются с ошибками (последние 7 дней)
  • Показывает состояние вашего Тома
  • Показывает запланированные задания (на 24 часа вперед)
  • Показывает все запущенные Задания
  • Показывает законченные Задачи (выполненных за последние 24 часа)
  • Поиск Задач по нескольким условиям
  • Подробная информация о Pools, Volumes, Storages и Clients
  • Лента RSS
  • Многоязычная поддержка - стандартный gettext (*.mo) файлы. В данный момент поддерживаются языки: английский, французский, немецкий, португальский, русский.
Установка

Для начала скачаем Webacula и ZendFramework к ней. (следите за новыми версиями и сами корректируйте линки для fetch). Установим последнюю версию, распакуем и дадим нужные права.

# cd /usr/local/www/
# fetch _http://sourceforge.net/projects/webacula/files/webacula/5.5.0/webacula-5.5.tar.gz
# fetch _http://framework.zend.com/releases/ZendFramework-1.11.6/ZendFramework-1.11.6-minimal.tar.gz
 
# tar zxvf webacula-5.5.tar.gz
# mv webacula-5.5 webacula
 
# tar zxvf ZendFramework-1.11.6-minimal.tar.gz
# cd ZendFramework-1.11.6-minimal/library/
# ls
Zend
# cp -R Zend/ /usr/local/www/webacula/library/Zend/
 
# cd /usr/local/www/
# chown -R www:www webacula/
 
# rm webacula-5.5.tar.gz ZendFramework-1.11.6-minimal.tar.gz

Проверка модулей

Проверим необходимые модули

# cd /usr/local/www/webacula/install/
# php-cgi  check_system_requirements.php
sqlite3: not found
X-Powered-By: PHP/5.3.6
Content-type: text/html
 
 
Webacula check System Requirements...
 
Current MySQL version = 5.0.92  OK
Current PostgreSQL version = 8.4.7      OK
 
Current PHP version = 5.3.6     OK
 
php pdo installed.      OK
php gd installed.       OK
php xml installed.      OK
php dom installed.      OK
 
php pdo_mysql installed.        OK
Warning. PHP extension pdo_pgsql not installed.
Warning. PHP extension pdo_sqlite not installed.
php-dom, php-xml installed.     OK

Кому, что не хватает тот доставит.

Конфигурационные файлы

Отредактируем конфигурационный файл webacula:

# cat /usr/local/www/webacula/application/config.ini
[general]
db.adapter = PDO_MYSQL
db.config.host = localhost
db.config.username = BACULA_USER
db.config.password = BACULA_USER_PASS
db.config.dbname = BACULA_DB
 
def.timezone = "Europe/Moscow"
locale = "ru"
 
bacula.sudo = "/usr/local/bin/sudo"
bacula.bconsole = "/usr/local/sbin/bconsole"
bacula.bconsolecmd = "-n -c /usr/local/etc/bconsole.conf"
 
[timeline]
fontsize   = 10
 
[webacula]
email.to_admin = root@localhost
email.from = webacula@localhost
 
[feed]
feed_title = "My Bacula backup server #1"
feed_desc  = "Description feed here"
 
[layout]
path = "default"

Отредактируем конфигурационный файл DB:

# vi /usr/local/www/webacula/install/db.conf
db_name="BACULA_DB"
db_user="BACULA_USER"
db_pwd="BACULA_USER_PASS"
 
# Веб аккаунт 'root', а пароль к нему укажите ниже
#
webacula_root_pwd="WEB_WEBACULA_PASSWORD"

База в MySQL

В новой версии Webacula 5.5 таблицы Bacula и Webacula совмещены те располагаются в одной БД.
Теперь нам необходимо добавить нужные таблицы и заполнить ACL:

# cd /usr/local/www/webacula/install/MySql/
# sh ./10_make_tables.sh
Creation of webacula MySQL tables succeeded.
# sh ./20_acl_make_tables.sh
Creation of Webacula ACLs MySQL tables succeeded.

Добавим права на запуск /usr/sbin/bconsole от имени www.

# visudo
WWW_USER ALL=NOPASSWD: /usr/local/sbin/bconsole

Веб-интерфейс

Я слинковал публичный html в нужную мне директорию своего веб сервера:

# cd /home/serv/www/data/
# ll
lrwxr-xr-x  1 root  serv     20B  5 авг  2010 glpi -> /usr/local/www/glpi/
lrwxr-xr-x  1 root  serv     26B  5 авг  2010 phpMyAdmin -> /usr/local/www/phpMyAdmin/
-rw-r--r--  1 serv  serv     21B  5 авг  2010 phpinfo.php
lrwxr-xr-x  1 root  serv     27B  5 авг  2010 phpldapadmin -> /usr/local/www/phpldapadmin
lrwxr-xr-x  1 root  serv     20B 17 авг  2010 sarg -> /usr/local/www/sarg/
drwxr-xr-x  3 serv  serv    512B 12 авг  2010 sqstat
lrwxr-xr-x  1 root  serv     29B 27 май 09:17 webacula -> /usr/local/www/webacula/html/

Отредактировал .htaccess

# vi /usr/local/www/webacula/html/.htaccess
SetEnv APPLICATION_ENV development
 SetEnv APPLICATION_ENV production
 
#php_flag magic_quotes_gpc off
#php_flag register_globals off
 
RewriteEngine On
 
# edit RewriteBase if necessary
RewriteBase   /webacula
 
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Запускаем:
http://webserver.local/webacula

BAT, tray-monitor

Для мониторинга и удобной работы с бакулой есть несколько утилит доступных в Unix системах:
BAT (Bacula Admin Tool) - графический интерфейс к бакуле скриншоты

Port:   bacula-bat-5.0.3
Path:   /usr/ports/sysutils/bacula-bat
Info:   The network backup solution (GUI)
Maint:  dan@langille.org
B-deps: expat-2.0.1_1 fixesproto-4.1.2 fontconfig-2.8.0,1 freetype2-2.4.4...
R-deps: expat-2.0.1_1 fixesproto-4.1.2 fontconfig-2.8.0,1 freetype2-2.4.4...
WWW:    _http://www.bacula.org/

tray-monitor - это Bacula KDE/GNOME tray monitor applet. Она вам показывает статус работы сервера.

Заметка: в опциях bacula-client еще есть WXCONSOLE Build with wxGTK based GUI console: deprecated.

Web интерфейсы - их достаточное количество и на любой вкус список.

FAQ

В) У меня не работают встроенные задания (к примеру BackupCatalog)
О) Проверьте разрешение на чтение пользователем bacula.

# ll bacula-dir.conf
-rw-r-----  1 root  bacula   9,4K 26 май 16:12 bacula-dir.conf
# ll bacula-sd.conf
-rw-r-----  1 root  bacula   6,7K 24 май 14:05 bacula-sd.conf
# ll bconsole.conf
-rw-r-----  1 root  bacula   279B 17 май 11:52 bconsole.conf

В) В самом начале статье было упоминание о утилите ntbackup где, для чего вы ее применяете.
О) До бакулы я сохранял образ системы с помощью этой утилиты с периодичностью раз в месяц и мне не хотелось ломать установленный порядок. Так же я настроил теневое копирование с переодичностью 1 раз в 4 часа для БД и расшаренных директорий и пользователи могут откатывать нужные файлы на нужную дату и время.

В) Что делать если сервер Windows\Unix сломался и не загружаться, но есть резервные копии диска C:\ (файл ntbackup) и\или дампы ФС.
О) Попробуем описать ход работы:
а1) Запускаете Recovery Console (Консоль Восстановления) с диска ОС в нем восстанавливаете загрузочные файлы и при удачном раскладе загружаетесь. Далее вытаскиваете из архива бакулы файл ntbackup для этого клиента и заливаете на него. Далее через “Мастер восстановления” утилиты ntbackup все разворачиваете обратно.
а2) Бывает что вариант а1 не работает никак не удается загрузить систему. Есть вариант с ASR, но требуется создание аварийной дискеты в ntbackup для этой машины. Восстановите файл ntbackup на любую машину с последующим копированием этого файла на сдохший сервер (возьмите любую LiveCD сбору WinPE\Linux) и далее запускаете CD c ОС выбирается восстановление ASR вставляете дискету и выполняете работу.
а3) Disast Recove Using Bacula (bacula rescue disk)

б1) Для Unix пытайтесь загрузиться или воспользуйтесь Unix LiveCD и подмонтируйте фс с последующим разворотом архивов\файлов в нужные слайсы.

Книги

  • Bacula_PDC_backup.pdf
  • Short_Doc_Bacula.pdf
  • Unix.Backup.And.Recovery(1999)_EN.pdf

Дополнительные материалы
Ссылки: 
>>Ветка форума<<
Bacula, the Open Source, Enterprise ready, Network Backup Tool for Linux, Unix, and Windows
Webacula
Bog BOS: Сетевая система резервного копирования и восстановления данных bacula
Ваша оценка: Нет Средняя: 4.5 (28 голосов)

MySQL

ДЕМО ЧИСТО ДЛЯ КОНФИГА. СТАТЬЯ БУДЕТ ДОПИСАНА ПОЗЖЕ
===

# vi /etc/make.conf
# MySQL
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-server
#BUILD_OPTIMIZED=yes
#BUILD_STATIC=yes
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
#WITHOUT_INNODB=yes
WITH_ARCHIVE=yes
.endif
 
# MySQL client
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-client
#BUILD_OPTIMIZED=yes
#BUILD_STATIC=yes
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
.endif

Создание дампа

# mysqldump -uUser -h127.0.0.1 -p Name_DB> Name_DB.sql

Ресторинг дампа

# cat Name_DB.sql | mysql -uUser -pUser_password Name_DB

ВложениеРазмер
my.cnf2.84 КБ
Голосов пока нет

Network UPS Tools

Network UPS Tools - набор программ, которые обеспечивают интерфейс для сетевого мониторинга и управления UPS оборудованием. NUT позволяет работать нескольким серверам с одним UPS и позволяет штатно отключать необходимые серверы в случае разрядки батареи, а так же возможен мониторинг текущего состояния UPS (нагрузка/зарядка/входная мощность). В данной статье рассматривается использование ПО Network UPS Tools для обеспечения бесперебойной работы трех серверов от одного UPS с мониторингом через веб-интерфейс и снятием статистики в Cacti.

Инвентарь:

  • UPS APC Smart-UPS 2200VA USB & Serial RM 2U 230V - 1 шт.
  • серверы на Intel® SR1630HGP с Windows 2003 - 2 шт.
  • компьютер на Intel® S3000AH с FreeBSD 8.2 с подключенным UPS APC Smart-UPS 2200 - 1 шт.

Содержание:

  • Введение
  • Установка
  • Подготовка к работе
  • Конфигурационные файлы
    • ups.conf
    • upsd.conf
    • upsd.users
    • upsmon.conf
  • Запуск NUT
    • Разрешения
    • Запуск демона
    • Проверка
    • rc.conf
  • Клиенты
  • Мониторинг
    • Web интерфейс
    • Cacti
  • Тестирование
  • USB UPS
  • FAQ

Введение

Рассмотрим разные примеры подключения UPS. Их несколько видов и все они стандартные.

Простая конфигурация


Один UPS подключен к одному компьютеру. Эту конфигурацию используют большинство пользователей, но в серверной среде такая конфигурация редко встречается. Вам потребуется только upsd и upsmon.

Расширенная конфигурация


Один UPS питает несколько серверов. Только один сервер из них подключен кабелем управления к ИБП это и есть "Master" система с демонами upsd и upsmon в режиме мастера. Остальные системы это "Slave" для них необходимы только upsmon в подчиненном режиме. Все команды от мастер системы подчиненные получают по сети. Это полезно, когда у вас есть очень мощный ИБП который может "вытянуть" несколько серверов.

Конфигурация большого ящика


Некоторые системы имеют несколько источников питания. Как правило, это высокопроизводительные сервера. Некоторые с горячей заменой БП и другими причудами. В этом случае используйте несколько драйверов (по одному на UPS) один upsd и upsmon (как мастер для UPS 1 и 2)

По этой причине, каждому UPS присваивается "энергетическая ценность" - количество блоков питания для питания системой. Общий объем доступной "энергетической ценности" является (по сравнению с минимумом) необходимым для этого оборудования. Например, если у вас есть 3 источника питания и 3 ИБП, но только 2 блока должна быть запущена в любой момент времени этот минимум будет составлять 2. Это означает, что вы можете спокойно потерять один ИБП и NUT будет обрабатывать это правильно.

Причудливая конфигурация


Серия UPS подключены последовательным портом с одним "Master" сервером который раздает команды остальным и таких UPS может быть с десяток.

Установка

Подключение UPS

В состав APC Smart-UPS 2200VA входил COM кабель им мы и воспользуемся. Так же есть возможность докупить USB кабель, но с USB бывают проблемы подключения которые можно решить при некотором упорстве. Посмотрим, что нашлось:

# dmesg -a | grep sio0
sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
sio0: type 16550A
sio0: [FILTER]

Посмотрим в устройствах.

% ls /dev/cuau*
/dev/cuau0      /dev/cuau0.init /dev/cuau0.lock

Наше устройство на порту cuau0.

Порт

Найдем и установим порт, а так же выберем необходимые опции.

# cd /usr/ports && make search name='nut-2'
Port:   nut-2.4.1_6
Path:   /usr/ports/sysutils/nut
Info:   Network UPS Tools
Maint:  itetcu@FreeBSD.org
B-deps: autoconf-2.68 autoconf-wrapper-20101119...
R-deps: expat-2.0.1_1 gettext-0.18.1.1 libiconv-1.13.1_1...
WWW:    _http://www.networkupstools.org/
 
# cd /usr/ports/sysutils/nut && make config
 
     ??????????????????????????????????????????????????????????????????????
     ?                     Options for nut 2.4.1_6                        ?
     ? ?????????????????????????????????????????????????????????????????? ?
     ? ?               [X] SERIAL  SERIAL support                       ? ?
     ? ?               [ ] USB     USB support                          ? ?
     ? ?               [ ] SNMP    SNMP support                         ? ?
     ? ?               [X] NEON    NEON XML/HTTP support                ? ?
     ? ?               [ ] PDU     Powerman PDU support                 ? ?
     ? ?               [ ] HAL     HAL support                          ? ?
     ? ?               [ ] IPV6    IPV6 support                         ? ?
     ? ?               [X] CGI     Web CGI interface                    ? ?
     ? ?????????????????????????????????????????????????????????????????? ?
     ?                       [  OK  ]       Cancel                        ?
     ??????????????????????????????????????????????????????????????????????

Уберите ненужные опции или добавьте необходимые, например отключите IPV6 и оставьте только необходимую поддержку SERIAL/USB (зависит от подключения к UPS), добавьте CGI, если вам требуется мониторить UPS через веб интерфейс. И дальше приступим к установке.

# cd /usr/ports/sysutils/nut && make install clean
~~~~~~~~~~~
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/nut_upsmon
/usr/local/etc/rc.d/nut_upslog
/usr/local/etc/rc.d/nut
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
_http://www.networkupstools.org/

Подготовка к работе

Найдем драйвер APC Smart-UPS в списке поддерживаемого оборудования NUT.

# cd /usr/local/etc/nut
# cat driver.list | grep Smart-UPS
## <manufacturer> <model name> <model extra> <driver> ##
 
"APC"   "Smart-UPS"             ""      "apcsmart"
"APC"   "Smart-UPS USB"         "USB"   "usbhid-ups"

Так же вы можете посетить веб страницу Список поддерживаемого оборудования.
Поддержка обнаружена и я могу использовать драйвера для USB и COM порта. На данный момент буду использовать драйвер "apcsmart" для COM порта.

Конфигурационные файлы

Все конфигурационные файлы находятся в директории "/usr/local/etc/nut"

  • ups.conf - настройки NUT для работы с UPS (драйвер/порт/наименование).
  • upsd.conf - настройка основного демона upsd Network UPS Tools.
  • upsd.users - контроль доступа к UPS демону (профили пользователей).
  • upsmon.conf - настройка текущего клиентского агента.

ups.conf

В этом конфигурационном файле вы указываете настройки подключения UPS.
Скопируем дефолтный конфигурационном файл.

# cd /usr/local/etc/nut
# cp ups.conf.sample ups.conf

Добавим свой UPS и настроим подключение к нему.

[APC]
driver = apcsmart
port = /dev/cuau0
cable = 940-1524C
desc = "APC Smart-UPS 2200"

cable - используется для специфичных COM кабелей которые используют к примеру фирма APC вместо стандартных. И вам это нужно указывать лишь при необходимости указанной в документациях NUT и производителя UPS см "/usr/local/share/doc/nut/cables/"

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

  • [ups_name] - это имя используется как адрес вашего UPS. Вы можете его изменить на любое произвольное имя.
  • driver - драйвер, используемый для работы с UPS.
  • port - порт, на котором висит UPS (для подключения через USB указываете значение "auto"). Для snmp-ups: имя хоста SNMP агента. Для newhidups: значение "auto" для автоматического соединения с USB UPS.
  • desc - описание устройства.
  • sdorder - необязательный элемент. При наличии нескольких UPS подключенных к этому серверу можно выключать UPS в определенном порядке. используя upsdrvctl к примеру можно выключить все 0s или 1s, 2s и тд. Для исключения последовательной остановки используйте -1.
  • nolock - необязательный элемент, его не рекомендуется использовать в его этом конфиге. Он служит для отключения блокировки порта при пользовании утилитой.
  • maxstartdelay - необязательный элемент. Может быть, заданна как глобальная переменная выше вашего первого UPS. Это значение определяет, сколько upsdrvctl будет ожидать окончания запуска драйвера. Данная возможность предоставляет стабильность в работе. Значение по умолчанию равно 45 секундам.
  • cable - Если драйвер UPS требует дополнительных параметров, вы можете указать их здесь. Например, для флага "cable" в данной статье я ставлю значение 940-1524C. Это индекс вашего кабеля и вы можете посмотреть его тут "/usr/local/share/doc/nut/cables". Не указывайте это значение, если ваше подключение к UPS стандартно.

upsd.conf

Служит для контроля доступа к серверу и для установки других значений конфигурации. Этот файл содержит подробные сведения об предоставления доступа, таким образом, обеспечивается безопасность. В идеальном случае, только процесс upsd должен иметь возможность прочитать данные из этого файла.

Создадим конфигурационный файл.

# cp upsd.conf.sample upsd.conf

Добавим следующие значения для прослушивания следующих IP для запросов о состоянии UPS клиентов:

LISTEN 127.0.0.1
LISTEN 192.168.0.6

Опишем параметры:

  • MAXAGE - по умолчанию 15 секунд. Это частота обновления данных клиентов после остановки драйвера UPS. Следует использовать другое значение только в том случае, если у вас трудности с обновлением данных. См syslog.
  • LISTEN address port - здесь указывается IP адрес и порт 3493 (по умолчанию) для прослушивания подключений.
  • MAXCONN connections - по умолчанию используется 1024 подключений. Каждый UPS, каждого LISTEN адреса и каждого клиента считается как одно подключение. Если на сервере заполнятся количество подключений, он больше не будет принимать новых входящих клиентских подключений

upsd.users

Контроль доступа для UPS демона (профили пользователей). Именно в этом файле вы указываете, кто и в какой мере будет работать с NUT.

# cp upsd.users.sample upsd.users
# cat upsd.users
[admin]
password = upsadminpass
actions = SET
instcmds = ALL
 
[monmaster]
password = upsmonmasterpass
upsmon master
 
[monslave]
password = upsmonslavepass
upsmon slave

Значения:

  • [NAME] - имя пользователя
  • password - пароль пользователя
  • actions - возможность настройки см ниже.
  • instcmds - выполняемые команды см ниже.
  • upsmon - вид подключения клиентов см ниже.

Каждый UPS монитор может определяться как один из трех возможных типов:
upsmon master - полные полномочия управлением питания подключенных к системе. UPS под управлением этого upsmon и отвечает за выключение разряженного аккумулятора. Выключение происходит после безопасного выключения всех slave мониторов. Если ваш UPS подключен непосредственно к системе через последовательный порт, то для upsmon этой системы следует определить его как master.

upsmon slave - эта система, под управлением upsmon master и она не выключается непосредственно. Операционная система будет выключена перед отключением питания master. Используйте этот режим при запуске монитора на других серверах работающих на том же UPS. И очевидно, что только один сервер может быть подключен к последовательному порту на UPS, коим будет является master. Все остальные сервера будут slave.

upsmon monitor-only - при этом режиме будут создаваться уведомления о состоянии или изменении работы батареи, переключении на линию и т.д., но не будет завершать работу системы.

actions - Действия пользователя с применением upsd.
- SET - изменить значения определенных переменных в UPS
- FSD - установка флага "принудительного выключения" для UPS

instcmds - разрешения пользователю на инициирование конкретных команд. Применяя "ALL" вы разрешаете использовать все команды, Существует множество команд выполните "upscmd -l" чтобы увидеть, что ваше оборудование поддерживает. Вот, к примеру, несколько команд.

  • test.panel.start - старт теста передней панели
  • test.battery.start - старт теста батареи
  • test.battery.stop - остановка теста батареи
  • calibrate.start - запуск калибровки батареи
  • calibrate.stop - остановка калибровки батареи

upsmon.conf

Этот конфигурационный файл предоставляет основные функции в программе мониторинга UPS, например это безопасное завершений работы при сбое питания, уведомления и другие переменные. В многоуровневой схеме утилиты NUT это клиент.

# cp upsmon.conf.sample upsmon.conf
# cat upsmon.conf | grep -v ^#
MONITOR APC@localhost 1 monmaster upsmonmasterpass master
MINSUPPLIES 1
 
SHUTDOWNCMD "/sbin/shutdown -p +0"
 
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
 
NOTIFYFLAG ONLINE       SYSLOG+WALL
NOTIFYFLAG ONBATT       SYSLOG+WALL
NOTIFYFLAG LOWBATT      SYSLOG+WALL
NOTIFYFLAG SHUTDOWN     SYSLOG+WALL
 
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

Мы добавили значения MONITOR в котором необходимо добавить свое значение. Формат таков:
MONITOR [system] [powervalue] [username] [password] [type]

Рассмотрим некоторые значения переменных:

  • MINSUPPLIES - указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной. Большинство систем имеют один БП. Но дорогие сервера, например HP NetServer LH4 могут работать с 2 из 4 БП и ему нужно ставить 2.
  • SHUTDOWNCMD - upsmon выполняет эту команду, когда системе необходимо выключить.
  • POLLFREQ - опрос мониторами с частотой (измеряется в секундах) для обычной деятельности. Вы можете отрегулировать это частоту опроса, чтобы upsmon не “зашумлял” вашу сеть, но не вносите слишком большие значения тк. оно может пропустить отключение питания.
  • POLLFREQALERT - опрос UPS с частотой в секундах. Можно сделать значение поменьше, чем POLLFREQ для лучшей чувствительности работы батареи.
  • HOSTSYNC - как долго upsmon будет ждать перед переходом к следующему upsmon. master upsmon использует это число при ожидании slaves чтобы отключиться после того как он установил флаг принудительное завершение работы (FSD). И если slaves не отключаться после этого тайм аута, то выключение продолжится без них.
  • DEADTIME - интервал ожидания перед объявлением статуса UPS как «мертвый» upsmon требует, чтобы UPS предоставлял свою статус информацию, каждые несколько секунд (см. POLLFREQ и POLLFREQALERT). Если статус загрузки, UPS помечен fails. И если оно остается fails более чем DEADTIME секунд, то UPS помечается «мертвый».
  • POWERDOWNFLAG - флаг файла для форсирования завершения работы UPS в master системе.
  • NOTIFYMSG - изменение сообщения, отправленные upsmon при возникновении определенных событий.
  • NOTIFYCMD - upsmon отправляет сообщение при происшествиях.
  • NOTIFYFLAG - изменение поведения upsmon при возникновении событий NOTIFY.
  • RBWARNTIME - предупреждение замены аккумулятора в секундах.
  • NOCOMMWARNTIME - предупреждение по времени при не общении к UPS в секундах.
  • FINALDELAY - через сколько выполнить SHUTDOWNCMD.

Запуск NUT

Разрешения

Проверьте разрешения на директорию "/var/db/nut" текущий пользователь должен быть uucp (или другой NUT_USER) и права 0750:

# ls -ld /var/db/nut/
drwxr-x---  2 uucp  uucp  512 18 июн 22:21 /var/db/nut/
# ls -ls /var/db/nut/
total 8
0 srw-rw----  1 uucp  uucp  0 18 июн 22:21 apcsmart-APC
2 -rw-r--r--  1 uucp  uucp  5 18 июн 22:21 apcsmart-APC.pid
2 -rw-r--r--  1 uucp  uucp  5 18 июн 22:21 upsd.pid
2 -rw-r--r--  1 root  uucp  5 18 июн 22:21 upslog.pid
2 -rw-r--r--  1 root  uucp  5 18 июн 22:21 upsmon.pid

Измените разрешения на конфигурационные файлы: они должны читаться пользователем uucp (или другим пользователем NUT_USER):

# cd /usr/local/etc/nut/
# chown uucp:wheel upsd.conf upsd.users upsmon.conf
# chmod 0640 upsd.conf upsd.users upsmon.conf
# ls -l *.conf
-rw-r--r--  1 root  wheel   1106 17 авг  2010 hosts.conf
-rw-r--r--  1 uucp  wheel   3750 17 авг  2010 ups.conf
-rw-r-----  1 uucp  wheel     36  5 авг  2010 upsd.conf
-rw-r-----  1 uucp  wheel  12068 23 авг  2010 upsmon.conf
-rw-r--r--  1 root  wheel   1416 17 авг  2010 upsset.conf

Запуск демона

Запустим в ручную

# /usr/local/etc/rc.d/nut start
Network UPS Tools - UPS driver controller 2.4.1
Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1)
APC command table version 2.0
 
Broadcast Message from root@thor.kmps.local
        (no tty) at 12:51 MSD...
 
Communications with UPS APC@localhost lost
 
Detected Smart-UPS 2200 RM [JS0605026405] on /dev/cuau0
Starting nut.
Network UPS Tools upsd 2.4.1
listening on 192.168.0.6 port 3493
listening on 127.0.0.1 port 3493
Connected to UPS [APC]: apcsmart-APC
 
Broadcast Message from root@thor.kmps.local
        (no tty) at 12:51 MSD...
 
Communications with UPS APC@localhost established

NUT запустилcя нормально, UPS подхватился и порт слушается.

Проверка

Проверим, все ли в порядке.

# ps -ax | grep nut
 1030  ??  Ss     0:06,30 /usr/local/libexec/nut/apcsmart -a APC
12400   1  S+     0:00,00 grep nut
# ps -ax | grep ups
 1032  ??  Ss     0:01,43 /usr/local/sbin/upsd
 1040  ??  Is     0:00,04 /usr/local/bin/upslog -s myups@localhost -l /var/log/ups.log -i 300
 1048  ??  Is     0:00,00 /usr/local/sbin/upsmon localhost
 1050  ??  S      0:00,46 /usr/local/sbin/upsmon localhost
12414   1  S+     0:00,00 grep ups

Все замечательно, демон работает и ведет логи.

Проверим как живет UPS

# upsc APC@localhost
battery.alarm.threshold: 0
battery.charge: 100.0
battery.charge.restart: 15
battery.date: 01/28/06
battery.packs: 000
battery.runtime: 2820
battery.runtime.low: 120
battery.voltage: 54.54
battery.voltage.nominal: 048
driver.name: apcsmart
driver.parameter.cable: 940-1524C
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/cuau0
driver.version: 2.4.1
driver.version.internal: 2.00
input.frequency: 50.00
input.quality: FF
input.sensitivity: H
input.transfer.high: 253
input.transfer.low: 208
input.transfer.reason: S
input.voltage: 224.6
input.voltage.maximum: 224.6
input.voltage.minimum: 224.6
output.voltage: 224.6
output.voltage.nominal: 230
ups.delay.shutdown: 180
ups.delay.start: 000
ups.firmware: 665.6.I
ups.id: UPS_IDEN
ups.load: 018.8
ups.mfr: APC
ups.mfr.date: 01/28/06
ups.model: Smart-UPS 2200 RM
ups.serial: JS0605026405
ups.status: OL
ups.temperature: 035.1
ups.test.interval: 1209600
ups.test.result: NO

Если кому-то нужен более краткий отчет, то выполните следующую команду.

# upsc APC@localhost ups.status
OL

  • OL - система работает на линии (on line power)
  • OB - система работает от батареи (on battery)
  • LB - система работает от севшей батареи (low battery)

Можно посмотреть общий монитор.

# upsmon
Network UPS Tools upsmon 2.4.1
UPS: APC@localhost (master) (power value 1)
Using power down flag file /etc/killpower

rc.conf

Для запуска NUT при старте FreeBSD добавляем в /etc/rc.conf следующее:

nut_enable="YES"
nut_upslog_enable="YES"
nut_upsmon_enable="YES"

Перезагрузим FreeBSD и увидим при загрузке следующее.

Network UPS Tools - UPS driver controller 2.4.1
Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1)
APC command table version 2.0
Detected Smart-UPS 2200 RM [JS0605026405] on /dev/cuau0
Starting nut.
Network UPS Tools upsd 2.4.1
listening on 192.168.0.6 port 3493
listening on 127.0.0.1 port 3493
Connected to UPS [APC]: apcsmart-APC
Starting nut_upslog.
Network UPS Tools upslog 2.4.1
logging status of myups@localhost to /var/log/ups.log (300s intervals)
Starting nut_upsmon.
Network UPS Tools upsmon 2.4.1
UPS: APC@localhost (master) (power value 1)
Using power down flag file /etc/killpower

Клиенты

Подключим сервера Windows 2003 в качестве клиентов. Для этого необходимо установить и настроить необходимое ПО. Список клиентских программ смотрите тут Client projects. Мне был необходим WinNUT. Программу необходимо скачать и установить, а так же настроить его под свои параметры. После установки начинаете редактировать конфигурационный файл через WinNUT Configuration Tool

Конфигурационный файл будет представлять следующее:

MONITOR APC@192.168.0.6 1 monslave upsmonslavepass slave
MINSUPPLIES 1
NOTIFYCMD "c:\\Program Files\\WinNUT\\alertPopup.exe"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

После настройки проследите чтобы было активированная функция Install As Service и нажмите Apply and Start WinNUT. Состояние программы вы можете увидеть в строке "Status" в данном случае он запущен как сервис Running as Service, открыв логи вы можете убедиться, что все впорядке.

Мониторинг

Web интерфейс

Web-интерфейс проверки статуса UPS и изменения некоторых параметров батареи. Как вы помните при установке NUT вам было предложенно установить CGI - Web CGI interface надеюсь вы его выбрали для установки. И так вы можете посмотреть, что upsstats может нам предложить.

# man 8 upsstats.cgi

Или же следовать за мной:
upsset.conf - конфигурация Network UPS Tools для upsset.cgi.
Скопируем примеры конфигурационных файлов и отредактируем их:
# cd /usr/local/etc/nut
# cp upsset.conf.sample upsset.conf
# cp upsstats.html.sample upsstats.html
# cp upsstats-single.html.sample upsstats-single.html

Раскоментируем строчку.

# cat upsset.conf
I_HAVE_SECURED_MY_CGI_DIRECTORY

В конфигурационный файл Apache добавим следующее:

<VirtualHost *:80>
ServerName ups.kmps.local
ServerAlias ups
ServerAdmin admin@localhost
Options Indexes FollowSymlinks MultiViews +ExecCGI
AddHandler cgi-script .cgi
DocumentRoot /usr/local/www/nut/
#AccessFileName .htaccess
</VirtualHost>

Перезапустите Apache и зайдите на http://ups И при переходе на ваш адрес у вас должна отобразится страница Network UPS Tools с вкладками:

  • Statistics – здесь вы можете просмотреть статус вашего UPS, а так же посмотреть текущее состояние в графическом виде.
  • Settings – здесь вы можете настроит UPS (пользователя берете согласно содержимому upsd.users)
Statistics

Статистика и краткая характеристика:

Наглядный график с обновлением через F5 ):

Settings

Настройки доступны после ввода логина и пароля указанных в конфигурационных файлов (admin).

Обратите внимание на параметр "Minimum battery level for restart after power off (percent)" при каком заряде батареи подавать питание.

Cacti

Для сбора статистики вы можете использовать кактус для этого нужно следующее:
1. Скачать скрипт cacti-nut.0.5.tar_.gz (новая версия cacti-nut.0.6.tar_.gz) и распаковать.

Скопируйте файл scripts/ss_nut_ups_status.php в директорию cacti/scripts/
Скопируйте файл resource/nut_ups_status.xml в директорию cacti/resource/script_server/

2. Импортировать шаблон из архива

Console > Import Templates > Views [cacti_data_query_nut_ups_statistics.xml]

3. Создать данные. В разделе Console > Devices > [сервер с NUT] и на панели Associated Data Queries добавляем Data Query: NUT — UPS Statistics > Add. В добавленной строчке в столбце status должны увидеть:

Success [2 Items, 1 Row]

4. Создать график для этих данных на странице параметров устройств строка Create Graphs for this Host. Там мы есть Data Query [NUT — UPS Statistics] в строке которой расположены наши UPS. Отмечаем галочкой нужный и выбираем graph type:

  • UPS Load Capacity — уровень загруженности UPS.
  • UPS Power Signal — входящее напряжение и частота.
  • UPS Temperature — температура UPS.

Нажимаем Create и через некоторое время мы уведем такой график:

Тестирование

Обязательным составляющим будет проверка работы NUT сначала программная, а потом реальное отключения питания.
К примеру, когда upsmon необходимо быстро выключить локальную систему, она устанавливает флаг "FSD" (forced shutdown - принудительное отключение) для любых UPS, на котором она выполняется в master режиме. Данная возможность используется и для синхронизации slaves компьютеров в том случае, если master UPS передает событие и всем рассылается сообщение о немедленном прекращении работы. Можно вручную вызвать этот режим на master upsmon, запустив другой экземпляр с флагом '-c fsd '. Это полезно, когда вы хотите инициировать shutdown перед критическим этапом. Эмулируем падение мощности:

# upsmon -c fsd

Если система корректно выключилась, то все в порядке.

Проведем практические испытания - выключим электричество на входе UPS'а и посмотрим, как отреагирует сервер и клиент. В моем случае как и было задумано, сперва штатно выключились два сервера Windows 2003 (при зарядке батареи 10%), а затем - FreeBSD (при зарядке батареи 5%)

June  19 14:04:03 thor upsmon[770]: UPS APC@localhost on battery
June  19 14:41:43 thor upsmon[770]: UPS APC@localhost battery is low
June  19 14:41:43 thor upsmon[770]: Executing automatic power-fail shutdown
 
Broadcast Message from root@thor.kmps.local
        (no tty) at 14:41 MSD...
 
UPS APC@localhost battery is low
 
Broadcast Message from root@thor.kmps.local
        (no tty) at 14:41 MSD...
 
Executing automatic power-fail shutdown
 
June  19 14:41:43 thor upsmon[770]: Auto logout and shutdown proceeding
 
Broadcast Message from root@thor.kmps.local
        (no tty) at 14:41 MSD...
 
Auto logout and shutdown proceeding
 
*** FINAL System shutdown message from root@thor.kmps.local ***
System going down IMMEDIATELY
 
June  19 14:41:48 thor shutdown: halt by root:
June  19 14:42:20 thor rc.shutdown: 30 second watchdog timeout expired. Shutdown terminated.

USB UPS

Подключаем UPS

# usbconfig
ugen0.1: <OHCI root HUB SiS> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE
ugen1.1: <OHCI root HUB SiS> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE
ugen2.1: <EHCI root HUB SiS> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE
ugen0.2: <Smart-UPS 1000 FW652.19.I USB FW11.03 American Power Conversion> at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON

Находим точный адрес ugen0.2.

# ll /dev/ugen0.2
lrwxr-xr-x  1 root  wheel     9B 23 май 02:14 /dev/ugen0.2 -> usb/0.2.0
# ll /dev/usb/0.2.0
crw-------  1 uucp  operator    0, 106 23 май 02:14 /dev/usb/0.2.0

Далее ищем и добавляем строку с chown с нужным портом.

# vi /usr/local/etc/rc.d/nut
nut_prestart() {
        chown -h uucp /dev/usb/0.2.0
        ${nut_prefix}/libexec/nut/upsdrvctl start
}

Добавляем в конфигурационный файл NUT свой UPS.

# vi /usr/local/etc/nut/ups.conf
[APC]
driver = usbhid-ups
port = auto
desc = "APC Smart-UPS 1000"

И запускаем.

FAQ

В) Как после включения питания автоматически запускать сервера?
О) В BIOS серверов укажите включение при появление питания. А так же в веб интерфейсе NUT во вкладке настройка укажите необходимый процент"Minimum battery level for restart after power off (percent)" для подачи питания на машины.

В)Можно ли настроить nut, чтобы он выключал компы сразу, как только уровень заряда батареи достигнет какого-то определенного значения, например, при 60% заряда?
О) Можно поиграться с настройками (в веб морде)
Remaining battery runtime when UPS switches to LB (Оставшееся время работы от батареи в сек, когда ИБП переходит в LB (LB - система работает от севшей батареи (low battery)) отсюда и отключение клиентов и как следственно увеличение обьема оставшегося заряда на упсе.

ВложениеРазмер
cacti-nut.0.6.tar_.gz7.89 КБ
Дополнительные материалы
Ссылки: 
ВЕТКА ФОРУМА
Документация # cd /usr/local/share/doc/nut/
Network UPS Tools
Список поддерживаемого оборудования
Клиенты NUT
[ Cacti Plugin ]
Ваша оценка: Нет Средняя: 5 (17 голосов)

OpenLDAP, addressbook, web интерфейс и все все все

По просьбам трудящихся, из-за отсутствия простого мануала для всех начинающих, светлых администраторов UNIX, и внедрению технологий светлых в тыл компаний и корпораций использующих темные силы Микрософта - посвящается сие писание =).

Необходимо:

  • Организовать общую адресную книгу для предприятия.
  • Научится просто и эффективно управлять OpenLDAP и адресной книгой.
  • Подсадить пользователей на правильный почтовый клиент.
  • Предисловие
    • Основные термины
    • Компоненты OpenLDAP
  • Установка
    • Ставим OpenLDAP
    • Настройка OpenLDAP
    • Запуск OpenLDAP
  • Управление
    • Web интерфейс
    • Программное обеспечение
  • Адресная книга в почтовых клиентах
  • FAQ

Предисловие

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

Основные термины

OpenLDAP Software - открытая реализация LDAP, разработанная проектом OpenLDAP Project. Распространяется под собственной лицензией, называемой OpenLDAP Public License. LDAP - платформенно-независимый протокол. В числе прочих есть реализации для различных модификаций BSD, а также GNU/Linux, AIX, HP-UX, Mac OS X, Solaris, Microsoft Windows (2000, XP) и z/OS.

LDAP (Lightweight Directory Access Protocol) представляет средства доступа к логически иерархической БД. Каталог (БД) состоит из записей (объектов). Иерархическая совокупность объектов (вложение контейнеров) определяет дерево каталога. Правила связывания определяются набором правил, который называется схемой каталога (в схему входят также описания классов). Дерево начинается от корневого объекта (класс Top в Active Directory).

Тип объекта (класс) определяется набором атрибутов: имя, тип значения, обязательность. Строки в кодировке UTF-8. Объект может ассоциироваться с несколькими классами. Класс может быть расширением другого класса (наследование). Кроме простых объектов имеются контейнеры (группировка объектов и контейнеров), псевдонимы (символьные ссылки), переадресация клиента к другому каталогу (переход по ссылкам, chasing referrals).

Каждый объект имеет относительное отличительное имя (Relative Distinguished Name). Полное отличительное имя объекта (DN) образуется конкатенацией RDN объекта с DN объекта верхнего уровня (порядок записи - от младшего к старшему, разделитель - точка). Каждый объект имеет владельца. В качестве идентификатора аутентификации также используется DN (cn=,dc=). Имеется выделенный администратор каталога, обладающий корневыми полномочиями. Для аутентификации используется расширяемый механизм SASL.

Поиск объекта в иерархии производится с помощью составного имени с корня вниз (как в DNS). Есть возможность анонимного доступа. Права доступа - чтение и запись и поддерживается репликация LDAP сервера.

Общие имена атрибутов:

  • c - страна
  • st - регион
  • l - местность
  • o - организация
  • ou - подразделение
  • dc - domain container
  • cn - имя
  • sn - фамилия
  • mail - электронный адрес

Возможности клиента:

  • подключиться к серверу БД (запрос привязки), для аутентификации используются механизмы SASL
  • читать значения определённых атрибутов конкретного объекта
  • сравнить значения с атрибутом объекта (полезно для аутентификации сравнением хеша)
  • искать объекты по значениям атрибутов (указывается корень поддерева, максимальное количество результатов, максимальное время поиска, фильтр поиска, перечень желаемых атрибутов)
  • получить список объектов ниже по иерархии
  • отменить предыдущий запрос
  • добавить, изменить или удалить объект
  • переименовать объект

Компоненты OpenLDAP

Открытое программное обеспечение OpenLDAP состоит из нескольких основных компонентов:

  • slapd - независимый LDAP демон (сервер)
  • slurpd - независимый LDAP демон обновления и репликации
  • библиотеки реализующие протокол LDAP, утилиты, инструменты и элементарные клиенты.
    Примеры клиентов: ldapsearch, ldapadd, ldapdelete и других.

Также содержится для OpenLDAP проекта:

  • JLDAP - библиотеки классов LDAP для Java
  • JDBC-LDAP - драйвер интерфейса между Java JDBC - LDAP

Установка

Ставим OpenLDAP

Установка OpenLDAP стандартна и поэтому, вкратце пройдемся по ней:
Мы нашли две версии этого порта 2.3 и 2.4, и я остановился на 2.4 ввиду ее перспективности.

# cd /usr/ports
# make search name=openldap-server
Port:   openldap-server-2.3.43
Path:   /usr/ports/net/openldap23-server
Info:   Open source LDAP server implementation
Maint:  delphij@FreeBSD.org
B-deps: db44-4.4.20.4 libltdl-1.5.26 libtool-1.5.26 openldap-client-2.3.43
R-deps: db44-4.4.20.4 libltdl-1.5.26 openldap-client-2.3.43
WWW:    <a href="http://www.OpenLDAP.org/</p>
<p>Port:" title="http://www.OpenLDAP.org/</p>
<p>Port:">http://www.OpenLDAP.org/</p>
<p>Port:</p></a>   openldap-server-2.4.17
Path:   /usr/ports/net/openldap24-server
Info:   Open source LDAP server implementation
Maint:  delphij@FreeBSD.org
B-deps: db46-4.6.21.4 libltdl-1.5.26 libtool-1.5.26 openldap-client-2.4.17
R-deps: db46-4.6.21.4 libltdl-1.5.26 openldap-client-2.4.17
WWW:    http://www.OpenLDAP.org/

Сконфигурируем и выберем необходимые модули:

# cd /usr/ports/net/openldap24-server/ && make config
 
     ---------------------------------------------------------------------¬
     ¦                Options for openldap-server 2.4.17                  ¦
     ¦ -----------------------------------------------------------------¬ ¦
     ¦ ¦ [ ] SASL              With (Cyrus) SASL2 support               ¦ ¦
     ¦ ¦ [ ] DYNACL            Run-time loadable ACL (experimental)     ¦ ¦
     ¦ ¦ [ ] ACI               Per-object ACI (experimental)            ¦ ¦
     ¦ ¦ [ ] DNSSRV            With Dnssrv backend                      ¦ ¦
     ¦ ¦ [ ] PASSWD            With Passwd backend                      ¦ ¦
     ¦ ¦ [ ] PERL              With Perl backend                        ¦ ¦
     ¦ ¦ [ ] RELAY             With Relay backend                       ¦ ¦
     ¦ ¦ [ ] SHELL             With Shell backend (disables threading)  ¦ ¦
     ¦ ¦ [ ] SOCK              With Sock backend                        ¦ ¦
     ¦ ¦ [ ] ODBC              With SQL backend                         ¦ ¦
     ¦ ¦ [ ] RLOOKUPS          With reverse lookups of client hostnames ¦ ¦
     ¦ ¦ [ ] SLP               With SLPv2 (RFC 2608) support            ¦ ¦
     ¦ ¦ [ ] SLAPI             With Netscape SLAPI plugin API           ¦ ¦
     ¦ ¦ [X] TCP_WRAPPERS      With tcp wrapper support                 ¦ ¦
     ¦ ¦ [X] BDB               With BerkeleyDB support                  ¦ ¦
     ¦ ¦ [ ] ACCESSLOG         With In-Directory Access Logging overlay ¦ ¦
     ¦ ¦ [ ] AUDITLOG          With Audit Logging overlay               ¦ ¦
     ¦ ¦ [ ] COLLECT           With Collect overy Services overlay      ¦ ¦
     ¦ ¦ [ ] CONSTRAINT        With Attribute Constraint overlay        ¦ ¦
     ¦ ¦ [ ] DDS               With Dynamic Directory Services overlay  ¦ ¦
     ¦ ¦ [ ] DEREF             With Dereference overlay                 ¦ ¦
     ¦ ¦ [ ] DYNGROUP          With Dynamic Group overlay               ¦ ¦
     ¦ ¦ [ ] DYNLIST           With Dynamic List overlay                ¦ ¦
     ¦ ¦ [ ] LASTMOD           With Last Modification overlay           ¦ ¦
     ¦ ¦ [ ] MEMBEROF          With Reverse Group Membership overlay    ¦ ¦
     ¦ ¦ [ ] PPOLICY           With Password Policy overlay             ¦ ¦
     ¦ ¦ [ ] PROXYCACHE        With Proxy Cache overlay                 ¦ ¦
     ¦ ¦ [ ] REFINT            With Referential Integrity overlay       ¦ ¦
     ¦ ¦ [ ] RETCODE           With Return Code testing overlay         ¦ ¦
     ¦ ¦ [ ] RWM               With Rewrite/Remap overlay               ¦ ¦
     ¦ ¦ [X] SEQMOD            Sequential Modify overlay                ¦ ¦
     ¦ ¦ [X] SYNCPROV          With Syncrepl Provider overlay           ¦ ¦
     ¦ ¦ [ ] TRANSLUCENT       With Translucent Proxy overlay           ¦ ¦
     ¦ ¦ [ ] UNIQUE            With attribute Uniqueness overlay        ¦ ¦
     ¦ ¦ [ ] VALSORT           With Value Sorting overlay               ¦ ¦
     ¦ ¦ [ ] SMBPWD            With Samba Password hashes overlay       ¦ ¦
     ¦ ¦ [X] DYNAMIC_BACKENDS  Build dynamic backends                   ¦ ¦
     +-L------------------------------------------------------------------+
     ¦                       [  OK  ]       Cancel                        ¦
     L---------------------------------------------------------------------

Начнем установку:

# cd /usr/ports/net/openldap24-server/ && make install clean
~~~~~
*************************************************************
 
The OpenLDAP server package has been successfully installed.
 
In order to run the LDAP server, you need to edit
  /usr/local/etc/openldap/slapd.conf
to suit your needs and add the following lines to /etc/rc.conf:
  slapd_enable="YES"
  slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
  slapd_sockets="/var/run/openldap/ldapi"
 
Then start the server with
  /usr/local/etc/rc.d/slapd start
or reboot.
 
Try `man slapd' and the online manual at
  <a href="http://www.OpenLDAP.org/doc/<br />
for" title="http://www.OpenLDAP.org/doc/<br />
for">http://www.OpenLDAP.org/doc/<br />
for</a> more information.
 
slapd runs under a non-privileged user id (by default `ldap'),
see /usr/local/etc/rc.d/slapd for more information.
 
************************************************************
===> Installing rc.d startup script(s)
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/libexec/openldap
===>   Installing ldconfig configuration file
===>   Registering installation for openldap-server-2.4.17
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/libexec/slapd
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/slapd
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.OpenLDAP.org/

Настройка OpenLDAP

Приступим к настройке OpenLDAP.
Внесем в /etc/rc.conf следующее:

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
slapd_sockets="/var/run/openldap/ldapi"

По умолчанию ldap слушает все интерфейсы ldap://0.0.0.0/, но я укажу конкретно, что ему слушать это localhost и интерфейс сетевой платы. Например, вот так:
slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldap://192.168.0.2/"'
slapd_sockets="/var/run/openldap/ldapi"

Теперь необходимо откорректировать конфигурационный файл OpenLDAP. Скопируем дефолтный конфигурационный файл:
# cd /usr/local/etc/openldap/
# cp slapd.conf.default slapd.conf

Отредактируем slapd.conf.

# cat slapd.conf
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
 
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args
 
modulepath      /usr/local/libexec/openldap
moduleload      back_bdb
 
access to * by * read
 
access to attr=userPassword
  by self write
  by anonymous auth
  by * none
 
database        bdb
suffix          "dc=ampul,dc=local"
rootdn          "cn=root,dc=ampul,dc=local"
 
rootpw          {SSHA}Password
 
directory       /var/db/openldap-data
index   objectClass     eq
index   cn              eq

Пройдемся по конфигурационному файлу:
include - подключаемые схемы; в поставке OpenLDAP их довольно много. И вы подключите только те, которые будете использовать. В принципе, схемы являются частью конфигурационного файла, но для наглядности они вынесены в отдельные фрагменты. С указанием пути откуда они берутся.

modulepath и moduleload - запускаемый сервис и модуль используемого способа хранения данных.

access - для управления доступом используются списки доступа ACL. В данном примере приводятся два списка — в первом из них ограничивается доступ к атрибуту userPassword (полный доступ к нему могут иметь только сам объект либо администратор базы; для всех остальных доступ запрещён). Второе правило гласит, что всем даётся доступ на чтение любых данных (кроме ограниченного предыдущим правилом).

database - способ хранения данных используемый нами.

suffix - корнем иерархической структуры будет являться некоторый объект например dc=example,dc=com (я буду использовать для примера суффикс
dc=ampul,dc=local) у вас он соответственно будет другим. Суффикс для каталога можно взять любой.

rootdn - DN, описывающий администратора

rootpw - хешированый SSHA пароль администратора (см. slappasswd(8))

Утилита slappasswd позволяет создавать хеш пароля для дальнейшего использования в качестве значения атрибута userPassword или опции rootpw файла slapd.conf.

Параметры:
-v - многословный режим
-u - (пока по умолчанию; создавать хеш для userPassword в формате, определённом RFC 2307)
-s - пароль (если не задан здесь или с помощью ключа -T, то запрашивается в диалоге)
-T - имя файла с паролем
-h - схема ({SSHA}; метод хеширования пароля: {CRYPT}, {MD5}, {SMD5}, {SSHA}, {SHA}, {CLEARTEXT})
-c - формат (формат как в sprintf(3) для преобразования случайной строки символов из диапазона [A-Za-z0-9./]; например, "%.2s" даёт соль для стандартной функции crypt(3); "$1$%.8s" приводит к использованию функцией crypt(3) алгоритма MD5, так что результат можно использовать в /etc/shadow)

Создать хешированный пароль для пользователя root можно так:

# slappasswd -s  root
{SSHA}Password

Запуск OpenLDAP

После изменение slapd.conf запускаем сервис и проверяем работу.

# /usr/local/etc/rc.d/slapd start
# ps -ax | grep slap
35430  ??  Is     0:00,01 /usr/local/libexec/slapd -h ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldap://192.168.0.2/ -u ldap -g ldap
35544  p0  S+     0:00,00 grep slap
# netstat -nap tcp | grep 389
tcp4       0      0 192.168.0.2.389        *.*                    LISTEN
tcp4       0      0 127.0.0.1.389          *.*                    LISTEN

Если вы все корректно сконфигурировали, то openldap запустится без проблем.

Сейчас нам необходимо создать корень:

# cat ampul.local.ldif
dn: dc=ampul,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
dc: ampul
o: FSI Ust-Luga Branch
 
dn: ou=addressbook,dc=ampul,dc=local
objectClass: top
objectClass: organizationalUnit
ou: addressbook

Добавим нашу схему в OpenLDAP.

# ldapadd -x -h localhost -f ampul.local.ldif -D "cn=root,dc=ampul,dc=local" -W
Enter LDAP Password: ****
adding new entry "dc=ampul,dc=local"
 
adding new entry "ou=addressbook,dc=ampul,dc=local"

Управление

Web интерфейс

Я давно подсел на web приложения потому, что я могу запускать их отовсюду и из любой системы будь то *NIX, Windows, Linux и т.п. Простота в обслуживании, обновлении, единая точка входа и управления и т.п. Для OpenLDAP есть несколько приложений которые могут помочь в администрировании OpenLDAP - мой выбор остановился на phpLDAPadmin.

  • Скриншот 1

# cd /usr/ports/
# make search name=phpLDAPadmin
Port:   phpldapadmin-1.1.0.7,1
Path:   /usr/ports/net/phpldapadmin
Info:   A set of PHP-scripts to administer LDAP over the web
Maint:  m.seaman@infracaninophile.co.uk
B-deps:
R-deps: gettext-0.17_1 libiconv-1.13 libxml2-2.7.3 openldap-client-2.4.16..
WWW:    <a href="http://phpldapadmin.sourceforge.net/</p>
<p>#" title="http://phpldapadmin.sourceforge.net/</p>
<p>#">http://phpldapadmin.sourceforge.net/</p>
<p>#</p></a> cd /usr/ports/net/phpldapadmin;make install clean
phpldapadmin-1.1.0.7,1 has been installed into:
 
    /usr/local/www/phpldapadmin
 
Please edit config.php to suit your needs.
 
To make phpLDAPadmin available through your web site, I suggest that
you add something like the following to httpd.conf:
 
    Alias /phpldapadmin/ "/usr/local/www/phpldapadmin/htdocs/"
 
    <Directory "/usr/local/www/phpldapadmin/htdocs">
        Options none
        AllowOverride none
 
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1 .example.com
    </Directory>
 
Please note: if you are upgrading from version 0.9.7 or earlier, the
layout of the phpldapadmin-1.1.0.7,1 files has been completely reworked. You will
need to modify your apache configuration and merge the settings from
your original configuration file:
 
    /usr/local/www/phpldapadmin/config.php
 
 to
 
    /usr/local/www/phpldapadmin/config/config.php
 
===>   Registering installation for phpldapadmin-1.1.0.7,1
===>  Cleaning for phpldapadmin-1.1.0.7,1

  • Добавьте в конфигурационный файл Apache следующие строки предварительно настроив под себя
  •     Alias /phpldapadmin/ "/usr/local/www/phpldapadmin/htdocs/"
     
        <Directory "/usr/local/www/phpldapadmin/htdocs">
            Options none
            AllowOverride none
     
            Order Deny,Allow
            Deny from all
            Allow from 127.0.0.1 .example.com
        </Directory>

  • При необходимости отредактируйте конфигурационный файл phpldapadmin
    /usr/local/www/phpldapadmin/config/config.php
  • При проблемах чтения файлов установите права для Apache на директорию phpldapadmin.
    # chown -R www:www /usr/local/www/phpldapadmin/
  • Теперь в браузере указываете IP адрес или имя с сервера с приставкой phpldapadmin
    http://IP_name/phpldapadmin
    Укажите логин и пароль привилегированного лица например:
    Логин: cn=root,dc=ampul,dc=local
    Пароль: Password

Программное обеспечение

Есть несколько программных продуктов, которые позволяют управлять LDAP серверами, но они, в основном, платные. Я остановился на LDAP Admin, он быстрый, бесплатный и простой, что позволяет его использование обычному пользователю. Настроить его очень легко см скриншоты.

  • Скриншот 1
  • Скриншот 2

Адресная книга в почтовых клиентах

Mozilla Thunderbird

Thunderbird использует LDAPv3. Добавим LDAP-сервер в адресную книгу.

  • Скриншот 1

Введем корректный адрес и данные сервера OpenLDAP

  • Скриншот 1

Поиск производится при введении строки поиска в поле (ничего нажимать не надо, поиск производится по мере ввода) по cn, givenName, sn и считывает следующий список атрибутов: modifytimestamp, xmozillausehtmlmail, description, notes, custom4, custom3, custom2, custom1, birthyear, homeurl, workurl, nscpaimscreenname, countryname, company, o, departmentnumber, department, orgunit, ou, title, zip, postalcode, region, st, locality, l, streetaddress, postofficebox, carphone, cellphone, mobile, pagerphone, pager, facsimiletelephonenumber, fax, homephone, telephonenumber, xmozillasecondemail, mail, xmozillanickname, displayname, commonname, cn, surname, sn, givenname.

  • Скриншот 1

Outlook Express.

Outlook Express использует LDAPv2. Добавим LDAP-сервер в адресную книгу для этого выбираем в меню Сервис -> Учётные записи -> Добавить -> Служба каталогов -> Сервер каталогов (LDAP).
Затем изменить свойствах созданной службы каталогов во вкладке Дополнительно вставте свою Основу поиска например (ou=addressbook,dc=ampul,dc=local).
Поиск производится по нажатию кнопки "Поиск людей", вводу параметров и нажатию кнопки "Найти". Предварительно опрашивается список возможности сервера: subschemaSubentry, dsServiceName, namingContexts, defaultNamingContext, schemaNamingContext, configurationNamingContext, rootDomainNamingContext, supportedControl, supportedLDAPVersion, supportedLDAPPolicies, supportedSASLMechanisms, dnsHostName, ldapServiceName, serverName, supportedCapabilities.
По умолчанию поиск по атрибутам cn, givenName, sn, но можно искать по "имя и адрес" (cn), "электронная почта" (mail), имени (givenName), фамилии (sn), организации (o). Считывает следующий список атрибутов: display-name, cn, commonName, mail, otherMailbox, givenName, sn, surname, st, c, co, organizationName, o, ou, organizationalUnitName, URL, homePhone, facsimileTelephoneNumber, otherFacsimileTelephoneNumber, OfficeFax, mobile, otherPager, OfficePager, pager, info, title, telephoneNumber, l, homePostalAddress, postalAddress, streetAddress, street, department, comment, postalCode, physicalDeliveryOfficeName, initials, conferenceInformation, userCertificate;binary, userSMIMECertificate;binary, labeledURI, Manager, Reports, IPPhone.

Чтобы сохранять всю необходимую информацию о человеке его запись должна иметь классы: top, person, organizationalPerson, inetOrgPerson, residentialPerson.

Outlook 2003
Схема подключения Outlook 2003 к OpenLDAP см прикрепленные файлы к статье.

FAQ

В) Как в адресной книге вывести всех клиентов у которых есть электронная почта
O) Ввести в поле поиска символ "@"

В) Какой порт использует LDAP сервер
О) Стандартный TCP порт LDAP сервера - 389. Для защиты соединения может использоваться TLS (SSL) (порт 636).

В) Я использую php-5.2.10 и у меня при заходе в ПО показывает ошибку

Declaration of AJAXTree::draw_dn() should be compatible with that of
PLMTree::draw_dn()

О) Вам необходимо в файле lib/AJAXTree.php найти и заменить $level=0 на $level в функции draw_dn().
Кусок кода:
draw_dn($dn,$level,$first_child=true,$last_child=true)

В) Какой почтовый клиент может записывать информацию в адресную книгу?
О) Единственный почтовый клиент который может писать в LDAP это Evolution.

ВложениеРазмер
Схема подключения Outlook 2003 к OpenLDAP.zip251.11 КБ
Дополнительные материалы
Ссылки: 
>>ВЕТКА ФОРУМА<<
Ваша оценка: Нет Средняя: 3.7 (52 голоса)

SMART [smartmontools]

S.M.A.R.T. (англ. Self Monitoring Analysing and Reporting Technology) — технология оценки состояния жёсткого диска встроенной аппаратурой самодиагностики, а также механизм предсказания времени выхода его из строя.
Мне было необходимо контролировать работу 4х SATA дисков на одном из серверов с заблаговременным предупреждением о проблемах. Я воспользовался замечательной утилитой smartmontools.

Содержание:

  • Установка
  • Диагностика SMART
  • Атрибуты SMART
  • Конфигурационный файл
  • Syslog и запуск
  • Заключение
  • Ссылки

Установка

# pkg_info |grep smartmontools
smartmontools-5.38_7 S.M.A.R.T. disk monitoring tools
bsd# make search name=smartmontools
Port:   smartmontools-5.38_8
Path:   /usr/ports/sysutils/smartmontools
Info:   S.M.A.R.T. disk monitoring tools
Maint:  marck@FreeBSD.org
B-deps: gettext-0.17_1 gmake-3.81_3 libiconv-1.13.1
R-deps:
WWW:    _http://smartmontools.sourceforge.net
 
# cd /usr/ports/sysutils/smartmontools;make install clean
~~~~
smartmontools has been installed
 
To check the status of drives, use the following:
 
        /usr/local/sbin/smartctl -a /dev/ad0            for first ATA drive
        /usr/local/sbin/smartctl -a /dev/da0            for first SCSI drive
 
To include drive health information in your daily status reports,
add a line like the following to /etc/periodic.conf:
        daily_status_smart_devices="/dev/ad0 /dev/da0"
substituting the appropriate device names for your SMART-capable disks.
 
To enable drive monitoring, you can use /usr/local/sbin/smartd.
A sample configuration file has been installed as
/usr/local/etc/smartd.conf.sample
Copy this file to /usr/local/etc/smartd.conf and edit appropriately
 
To have smartd start at boot
        echo 'smartd_enable="YES"' >> /etc/rc.conf
===> Installing rc.d startup script(s)
===>   Compressing manual pages for smartmontools-5.38_8
===>   Registering installation for smartmontools-5.38_8
===>  Cleaning for smartmontools-5.38_8

Диагностика SMART

Сначала вы убедитесь включен ли у вас SMART в BIOS и существует ли поддержка этой технологии у нужного жесткого диска. Возьмем для примера мой жеский диск ad4. У вас наименование может быть другим смотрите свой dmesg -a.

# atacontrol cap ad4
 
Protocol              SATA revision 2.x
device model          SAMSUNG HD120IJ
serial number         S0AEJ1OA103537
firmware revision     ZL100-33
cylinders             16383
heads                 16
sectors/track         63
lba supported         234441648 sectors
lba48 supported       234441648 sectors
dma supported
overlap not supported
 
Feature                      Support  Enable    Value           Vendor
write cache                    yes      yes
read ahead                     yes      yes
Native Command Queuing (NCQ)   yes       -      31/0x1F
Tagged Command Queuing (TCQ)   no       no      31/0x1F
SMART                          yes      yes
microcode download             yes      yes
security                       yes      no
power management               yes      yes
advanced power management      no       no      0/0x00
automatic acoustic management  yes      no      0/0x00  254/0xFE


Как мы видим SMART включен. Теперь проверим данные жеского диска этой утилитой.
# /usr/local/sbin/smartctl -a /dev/ad4
smartctl version 5.38 [i386-portbld-freebsd7.2] Copyright (C) 2002-8 Bruce Allen
Home page is _http://smartmontools.sourceforge.net/
 
=== START OF INFORMATION SECTION ===
Model Family:     SAMSUNG SpinPoint P80 SD series
Device Model:     SAMSUNG HD120IJ
Serial Number:    S0AEJ1OA103537
Firmware Version: ZL100-33
User Capacity:    120 034 123 776 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   7
ATA Standard is:  ATA/ATAPI-7 T13 1532D revision 4a
Local Time is:    Wed Oct 14 13:48:08 2009 MSD
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
 
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
 
General SMART Values:
Offline data collection status:  (0x82) Offline data collection activity
                                        was completed without error.
                                        Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Total time to complete Offline
data collection:                 (2729) seconds.
Offline data collection
capabilities:                    (0x5b) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        Offline surface scan supported.
                                        Self-test supported.
                                        No Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine
recommended polling time:        (   1) minutes.
Extended self-test routine
recommended polling time:        (  45) minutes.
SCT capabilities:              (0x003f) SCT Status supported.
                                        SCT Feature Control supported.
                                        SCT Data Table supported.
 
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   100   100   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0007   100   100   025    Pre-fail  Always       -       6080
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       197
  5 Reallocated_Sector_Ct   0x0033   253   253   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   253   253   051    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0025   253   253   015    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       24004
 10 Spin_Retry_Count        0x0033   253   253   051    Pre-fail  Always       -       0
 11 Calibration_Retry_Count 0x0012   253   002   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       177
190 Airflow_Temperature_Cel 0x0022   130   067   000    Old_age   Always       -       36
194 Temperature_Celsius     0x0022   130   067   000    Old_age   Always       -       36
195 Hardware_ECC_Recovered  0x001a   100   100   000    Old_age   Always       -       16044483
196 Reallocated_Event_Count 0x0032   253   253   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0012   253   253   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   253   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x000a   100   100   000    Old_age   Always       -       0
201 Soft_Read_Error_Rate    0x000a   100   100   000    Old_age   Always       -       0
202 TA_Increase_Count       0x0032   253   253   000    Old_age   Always       -       0
 
SMART Error Log Version: 1
No Errors Logged
 
SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]
 
 
SMART Selective Self-Test Log Data Structure Revision Number (0) should be 1
SMART Selective self-test log data structure revision number 0
Warning: ATA Specification requires selective self-test log data structure revision number = 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

Атрибуты SMART

Много информации, но вам необходимо внимательно изучить таблицу Vendor Specific SMART Attributes with Thresholds.
Для разбора, что к чему изучите вот этот документ:

  • Атрибуты SMART

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

  • Raw Read Error Rate - Частота появления ошибок при чтении данных с диска. Данный параметр показывает частоту появления ошибок при операциях чтения с поверхности диска по вине аппаратной части накопителя.
  • Reallocated Sectors Count - Количество переназначенных секторов. Когда жесткий диск встречает ошибку чтения/записи/верификации он пытается переместить данные из него в специальную резервную область (spare area) и, в случае успеха, помечает сектор как "переназначенный". Также, этот процесс называют remapping, а переназначенный сектор - remap. Благодаря этой возможности, на современных жестких дисках очень редко видны [при тестировании поверхности] так называемые bad block. Однако, при большом количестве ремапов, на графике чтения с поверхности будут заметны "провалы" - резкое падение скорости чтения (до 10% и более). Поле raw value содержит общее количество переназначенных секторов.
  • UltraDMA CRC Error Count - Число ошибок, возникающих при передаче данных по внешнему интерфейсу. (Менять шлейф)

Типы атрибутов:

  • Pre-failure (PF). Если атрибут имеет этот тип, то поле threshold атрибута содержит минимально допустимое значение атрибута, ниже которого не гарантируется работоспособность накопителя и резко увеличивается вероятность его выхода из строя.
  • On-line collection (OC). Указывает, что значение данного атрибута обновляется (вычисляется) во время выполнения on-line тестов S.M.A.R.T. или же во время обоих видов тестов (on-line/off-line). В противном случае, значение атрибута обновляется только при выполнении off-line тестов.
  • Performance related (PR). Указывает на то, что значение этого атрибута напрямую зависит от производительности накопителя по отдельным показателям (seek/throughput/etc. performance). Обычно обновляется после выполнения self-test`ов SMART.
  • Error rate (ER). Указывает на то, что значение атрибута отражает относительную частоту ошибок по данному параметру (raw read/write, seek, etc.).
  • Events count (EC). Указывает на то, что атрибут является счетчиком событий.
  • Self-preserve (SP). Указывает на то, что значение атрибута обновляется и сохраняется автоматически (обычно при каждом старте накопителя и при выполнении тестов SMART).

Конфигурационный файл

Приступим к созданию конфигурационного файла:

# cd /usr/local/etc/
# cp smartd.conf.sample smartd.conf
# cat smartd.conf
# cat smartd.conf
Пример файла конфигурации для smartd. См. man smartd.conf.
 
# Домашняя страница: _http://smartmontools.sourceforge.net
 
# $Id: smartd.conf,v 1.45 2006/11/12 23:39:04 dpgilbert Exp $
 
# smartd будет перечитывать конфигурационный файл, если он получает сигнал HUP 
# signal
 
# Файл предоставляет список устройств для мониторинга используемого smartd,
# с одним устройством в каждой строке. Текст после решетки (#) игнорируется,
# и вы можете использовать пробелы и табуляцию для свободного пространства.
# Вы можете использовать '\' для продолжения линии. 
 
# Вы можете определить, какие обычно жесткие дискови есть на компьютере,
# Заглянув в /proc/ide и /proc/scsi. (повеяло линусячиной =) )
 
# Переменная DEVICESCAN заставит игнорировать оставшиеся линий в этом
# конфигурационном файле: и укажет для smartd сканировать все
# ATA и SCSI устройств. DEVICESCAN может следовать любое из
# Для найденных устройств будут применены нижеперечисленные директивы.
# Для большинства пользователей рекомендуется закомментировать DEVICESCAN
# и четко вывести список устройств, которые вы хотели бы контролировать. 
#DEVICESCAN
 
# Альтернативные настройки для игнорирования температуры и включения числа
# часов, проведённых во включенном состоянии записываемых отчетов в syslog. 
#DEVICESCAN -I 194 -I 231 -I 9
 
# Альтернативные настройки отчетов с более полезным значений температуры 
# записываемого в syslog
#DEVICESCAN -R 194 -R 231 -I 9
 
# Альтернативные настройки для отчетов значения изменения
# температуры >= 5 по Цельсию и мин/макс температуры. 
#DEVICESCAN -I 194 -I 231 -I 9 -W 5
 
# Первый (primary) ATA/IDE жесткий диск. Следить за всеми атрибутами, позволяющие
# автоматически онлайново собирать данные, автоматическое автосохранение
# атрибутов, и запуском короткой самодиагностики каждый день с 2-3 утра
# , и полный тест в субботам с 3-4 утра. 
#/dev/hda -a -o on -S on -s (S/../.././02|L/../../6/03)
 
# Мониторинг SMART статуса, ATA журнала ошибок, Self-Test
# (короткой самодиагностики) журнала, а также отслеживать
# изменения всех атрибутов, за исключением атрибута 194 
#/dev/hdb -H -l error -l selftest -t -I 194
 
# Мониторинг всех атрибутов, кроме нормированной температуры (обычно 194),
# но отслеживать изменения температуры >= 4 по Цельсию, отчет температуры
# >= 45 по Цельсию, а изменения в Raw значения Reallocated_Sector_Ct (5).
# И отправлять письмо об отказах SMART или при температуре >= 55 по Цельсию. 
#/dev/hdc -a -I 194 -W 4,45,55 -R 5 -m admin@example.com
 
# Диск ATA может выглядеть как устройства SCSI в операционной системе.
# Если к SCSI ATA перевода (SAT) слой между ОС и устройство, а затем
# Это может быть помечено "-d sat 'опцией. Эта ситуация может
# стать общей с дисками SATA в SAS и FC среды. 
# /dev/sda -a -d sat
 
# Тихий тест. Рапортует лишь в случае, если SMART выдает
# ошибку. И шлёт рапорт на почту.
#/dev/hdc -H -C 0 -U 0 -m admin@example.com
 
# Первых два SCSI диска. Это будет следить за всем, что может smartd
# проверить. Начать расширенный тест по средам с 6-7 вечера и
# воскресенье 1-2.
#/dev/sda -d scsi -s L/../../3/18
#/dev/sdb -d scsi -s L/../../7/01
 
# Мониторинг 4х ATA дисков, подключенных к контроллеру 3Ware 6/7/8000 которая
# использует 3W-XXXX драйвер. Начало длинного теста по воскресеньям с 1-2,
#  2-3, 3-4 и 4-5 часов утра.
#/dev/sdc -d 3ware,0 -a -s L/../../7/01
#/dev/sdc -d 3ware,1 -a -s L/../../7/02
#/dev/sdc -d 3ware,2 -a -s L/../../7/03
#/dev/sdc -d 3ware,3 -a -s L/../../7/04
 
# Мониторинг 4х ATA дисков, подключенных к контроллеру 3Ware 9000, который
# использует 3W-9xxx драйвера (Linux, FreeBSD)
# Начало длинного теста по вторникам с 1-2 и 3-4 утра. 
#/dev/twa0 -d 3ware,0 -a -s L/../../2/01
#/dev/twa0 -d 3ware,1 -a -s L/../../2/03
 
# То же самое для Windows. Опция "-d 3ware,N 'не является необходимым,
# Диск (порт) номер, указанный в имени устройства.
# ПРИМЕЧАНИЕ: В Windows DEVICESCAN работает также для контроллеров 3Ware. 
#/dev/hdc,0 -a -s L/../../2/01
#/dev/hdc,1 -a -s L/../../2/03
 
# Мониторинг 3 ATA диски напрямую связано с HighPoint RocketRAID.
# Начало долгого теста по воскресеньям с 1-2, 2-3 и 3-4 утра. 
#/dev/sdd -d hpt,1/1 -a -s L/../../7/01
#/dev/sdd -d hpt,1/2 -a -s L/../../7/02
#/dev/sdd -d hpt,1/3 -a -s L/../../7/03
 
# Мониторинг 2х ATA дисках, подключенных к той же PMPort которые связаны с
# HighPoint RocketRAID. Начало большого теста по вторникам между 1-2 и 3-4 м. 
#/dev/sdd -d hpt,1/4/1 -a -s L/../../2/01
#/dev/sdd -d hpt,1/4/2 -a -s L/../../2/03
 
# Добавляем свои диски
/dev/ad0 -a -m admin@ampul.local -o on -S on -s (S/../.././22|L/../../6/23)
/dev/ad1 -a -m admin@ampul.local -o on -S on -s (S/../.././22|L/../../6/23)
 
# Вот список директив в этом файле конфигурации.
# См. smartd.conf и man для деталей 
#
#   -d TYPE Тип устройства: ata, scsi, marvell, removable, 3ware,N, hpt,L/M/N
#   -T TYPE допустимое отклонение: normal, permissive
#   -o VAL  Включает/выключает автоматические оффлайн тесты (on/off)
#   -S VAL  Включает/выключает автосохранение атрибутов (on/off)
#   -n MODE Не проверять. Один из режимов: never, sleep, standby, idle
#   -H      Мониторить SMART статус, уведомлять только при ошибках.
#   -l TYPE Мониторить SMART логи. Режимы: error, selftest
#   -f      Монитор отказа для любых атрибутов 'Usage'
#   -m ADD  Письмо с варнингами на ADD для -H, -l error, -l selftest, and -f
#   -M TYPE Изменение поведения отсыла е-майлов (см. ман)
#   -s REGE Запустить тест когда дата совпадает с регулярным выражением (см. ман)
#   -p      Сообщать о изменениях в 'Prefailure' атрибутах
#   -u      ообщать о изменениях в 'Usage' атрибутах
#   -t      Эквивалентно -p и -u директивам
#   -r ID   Также сообщать 'RAW' значения атрибутов ID с -p, -u или -t
#   -R ID   Следить за изменениями в атрибуте ID 'Raw' значения -p, -u or -t
#   -i ID   Игнорировать атрибут ID для -f директивы
#   -I ID   Игнорировать атрибут ID для -p, -u или -t директивы
#   -C ID   Рапортовать если счётчик `ждущих` секторов не равен нулю
#   -U ID   Рапортовать если счётчик `некорректируемых` секторов не равен нулю
#   -W D,I,C Monitor Temperature D)ifference, I)nformal limit, C)ritical limit
#   -v N,ST Mодифицировать метку для атрибута N (для нестандартных атрибутов)
#   -a      Дефолт: эквивалентно -H -f -t -l error -l selftest -C 197 -U 198
#   -F TYPE Для ошибок в прошивке. Значения: none, samsung
#   -P TYPE Предустановки для диска: use, ignore, show, showall
#    #      Комментарии: текст после него игнорируется
#    \      Продолжения строки
# Идентификатор атрибута является десятичное целое число 1 <= ID <= 255
# за исключением -C и -U, где ID = 0 выключает их.
# Все биты -d, -m и -M директивы реализуются только для устройств ATA.

Syslog и запуск

Настроим syslog:

# cat /etc/syslog.conf |grep smart
!smartd
*.*                                             /var/log/smartd.log

Создадим лог файл:

# touch /var/log/smartd.log

Перезапустим syslog:

# killall -1 syslogd

Запустим smartmontools:

# /usr/local/etc/rc.d/smartd start
Starting smartd.

Проверим работу:

# ps -ax | grep smart
  664  ??  I      0:00,02 /usr/local/sbin/smartd -p /var/run/smartd.pid --interval=400
 3790  ??  I      0:00,01 smartd
 9597  p0  S+     0:00,00 grep smart

Включим запуск демона при запуски системы и включением проверки с частотой опроса через 400 секунд:

# echo 'smartd_enable="YES"' >> /etc/rc.conf
# echo 'smartd_flags="--interval=400"' >> /etc/rc.conf

Посмотрим лог файл:

# tail -10 /var/log/smartd.log
Oct 14 14:21:35 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 130 to 124
Oct 14 14:26:35 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 124 to 130
Oct 14 14:26:35 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 124 to 130
Oct 14 14:30:54 bsd smartd[3790]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 124 to 130
Oct 14 14:30:54 bsd smartd[3790]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 124 to 130
Oct 14 14:30:54 bsd smartd[3790]: Device: /dev/ad6, SMART Usage Attribute: 194 Temperature_Celsius changed from 107 to 108
Oct 14 14:56:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 130 to 124
Oct 14 14:56:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 130 to 124
Oct 14 15:01:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 124 to 130
Oct 14 15:01:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 124 to 130

Заключение

Ну вот и все. Теперь жеские диски контролируются. И самое главное поменьше вам писем от smartmontools ;).

Ссылки

  • Технология SMART
  • S.M.A.R.T. Self-Monitoring, Analysis and Reporting Technology

Дополнительные материалы
Ссылки: 
Ветка форума
Ваша оценка: Нет Средняя: 4.7 (3 голоса)

Sarg - парсер логов Squid

Сегодня будем разбирать логи Squid и присваивать тариф "Имеемый" человеку стоящему на первом месте в статусе "Загружено мегабайт".

Установка банальна и тривиальна.

# make search name=sarg
Port:   sarg-2.2.7.1_2
Path:   /usr/ports/www/sarg
Info:   Squid log analyzer and HTML report generator
Maint:  garga@FreeBSD.org
B-deps: expat-2.0.1_1 fontconfig-2.8.0,1 freetype2-2.4.2 gd-2.0.35_7,1
R-deps: expat-2.0.1_1 fontconfig-2.8.0,1 freetype2-2.4.2 gd-2.0.35_7,1
WWW:    _http://sarg.sourceforge.net/
 
# cd /usr/ports/www/sarg
# make config
 
Options for sarg 2.2.7.1_2
[X] GD  Enable GD support
 
# make install clean

Настроим по вкусу Sarg я укажу свои настройки вы можете поэкспериментировать:

# cd /usr/local/etc/sarg/
# cp sarg.conf.default sarg.conf
# cat sarg.conf
 
# Укажем нужный язык 
language Russian_koi8
 
# Указываем путь до логов Squid
access_log /var/log/squid/access.log
 
# Включаем построение графиков
graphs yes
graph_days_bytes_bar_color orange
 
title "Squid User Access Reports"
font_face Tahoma,Verdana,Arial
header_color darkblue
header_bgcolor blanchedalmond
font_size 12px
header_font_size 12px
title_font_size 14px
text_bgcolor lavender
logo_text_color #000000
image_size 80 45
 
temporary_dir /tmp
 
# Куда складывать отчеты.
output_dir /usr/local/www/sarg/
 
# Преобразовывать IP в имя по DNS. При большом парке машин 
# или проблема с DNS рекомендую отключать эту опцию.
resolve_ip yes
 
# Сортировка юзеров в выводе по USER CONNECT BYTES TIME
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse
 
date_format e
remove_temp_files yes
index yes
overwrite_report yes
topsites_num 100
index_sort_order D
max_elapsed 28800000
 
# Разнообразные типы отчетов, включим все.
report_type topusers topsites sites_users users_sites
date_time denied auth_failures site_user_time_date downloads
 
date_time_by elap
charset Koi8-r
 
show_sarg_info no
 
download_suffix "zip,arj,bzip,gz,ace,doc,iso,adt,bin,cab,com,dot,drv$,lha,lzh,md
b,mso,ppt,rtf,src,shs,sys,exe,dll,mp3,avi,mpg,mpeg"

Добавляем задачу в Cron каждую пятницу в 23.00 парсим логи и каждый месяц прибираем Squid

# SARG
0       23      *       *       5       /usr/local/bin/sarg > /dev/null 2>&1
 
# Moved Old Squid Log
0       0       1       *       *       /root/scripts/squid_log_moved  > /dev/null 2>&1

В Cron можно и так записывать >>форум<<

Скрипт очисти логов Squid:

# cat /scripts/squid_log_moved
 
#!/bin/sh
#
current_year=`date '+%Y'`
current_month=`date '+%m'`
current_date=`date '+%d'`
## Создаем директорию для логов
log_dir="/var/squid/old_logs/${current_year}/${current_month}"
mkdir -p ${log_dir} 2>/dev/null
 
## Очищаем логи SQUID
cat /var/squid/logs/access.log > /tmp/log.tmp
cat /dev/null > /var/squid/logs/access.log
gzip -c /tmp/log.tmp  > ${log_dir}/squid.log.gz
#gzip -c ${log_dir}/squid.log  > ${log_dir}/squid.log.gz
#rm -R /usr/local/www/sarg/*

В вашей директории технического сайта сделайте символическую ссылку.

% cd /home/serv/www/data
# ln -s /usr/local/www/sarg/ sarg
# ll
total 4
lrwxr-xr-x  1 root  serv    20B  5 авг 11:32 glpi -> /usr/local/www/glpi/
lrwxr-xr-x  1 root  serv    26B  5 авг 11:17 phpMyAdmin -> /usr/local/www/phpMyAdmin/
-rw-r--r--  1 serv  serv    21B  5 авг 10:51 phpinfo.php
lrwxr-xr-x  1 root  serv    27B  5 авг 12:23 phpldapadmin -> /usr/local/www/phpldapadmin
lrwxr-xr-x  1 root  serv    20B 17 авг 13:16 sarg -> /usr/local/www/sarg/
drwxr-xr-x  3 serv  serv   512B 12 авг 13:19 sqstat

Анализируем логи, заходим на технический сайт и смотрим:

# sarg
SARG: Records in file: 8717, reading: 100.00%
SARG: Отчет успешно сгенерирован в: /usr/local/www/sarg//01Feb2011-01Feb2011

Общая история:

Кто тут интернет активный? 192.168.0.56 самый работящий!

Офис должен работать и заниматься делом! Вот как тут и надо бы выписать ему премию. =)

Дополнительные материалы
Ссылки: 
Ветка форума
Ваша оценка: Нет Средняя: 5 (2 голоса)

SqStat - мониторим активные соединения proxy сервера Squid

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

SqStat - это PHP скрипт, позволяющий просматривать из web браузера активные соединения proxy сервера Squid. Для получения данных используется протокол cachemgr.

Устанавливаем:

Скачиваем и распаковываем SqStat в любую директорию хоста, где Apache может запусть этот скрипт.

# fetch _http://samm.kiev.ua/sqstat/sqstat-1.20.tar.gz
sqstat-1.20.tar.gz                            100% of   10 kB  161 kBps
# tar zxvf sqstat-1.20.tar.gz
x sqstat-1.20
x sqstat-1.20/docs
x sqstat-1.20/config.inc.php.defaults
x sqstat-1.20/sqstat.class.php
x sqstat-1.20/sqstat.php
x sqstat-1.20/sqstat.css
x sqstat-1.20/zhabascript.js
x sqstat-1.20/arrow.gif
x sqstat-1.20/docs/FAQ
x sqstat-1.20/docs/TODO
x sqstat-1.20/docs/README
x sqstat-1.20/docs/LICENSE
x sqstat-1.20/docs/CHANGES
# rm sqstat-1.20.tar.gz
# mv sqstat-1.20/ sqstat

Копируем конфигурационный файл:

# cd sqstat/
# cp config.inc.php.defaults config.inc.php
# vi config.inc.php

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

Смотрим что внутри конфигурационного файла и при необходимости меняем значения:

<?php
/* Глобальные настройки */
 
$use_js=true; // Использование JavaScript для инструментов HTML
 
// Максимальная длина URL для отображения в колонке таблицы URI
DEFINE("SQSTAT_SHOWLEN",60);
 
 
/* Параметры прокси-сервера */
 
/* Прокси-сервер Squid IP-адрес или имя хоста */
$squidhost[0]="127.0.0.1";
/* Порт Squid прокси-сервера */
$squidport[0]=3128;
/* сachemgr_passwd в squid.conf. Оставьте пустым, чтобы отключить разрешение */
$cachemgr_passwd[0]="";
/* Преобразовывать IP адреса пользователей или показывать только номера [true|false] */
$resolveip[0]=false;
/* Раскомментируйте следующую строку, если вы хотите использовать хосты, как файл.
   See hosts.txt.dist. */
// $hosts_file[0]="hosts.txt"
/* Группа пользователей с именем хоста - "host" или пользователя - "username".
Имя пользователя работать только с squid 2.6 + */
 
$group_by[0]="host";
 
/* Вы можете указать более одного прокси-сервера в файле конфигурации, например: */
// $squidhost[1]="192.168.0.2";
// $squidport[1]=3129;
// $cachemgr_passwd[1]="secret";
// $resolveip[1]=true;
// $hosts_file[1]="otherhosts.txt"
 
?>

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

Создадим символическую ссылку для того чтобы Apache автоматически запускал скрипт при вхождении в директорию SqStat.
# ln -s sqstat.php index.php

Дополнительные материалы
Ссылки: 
SqStat
Ваша оценка: Нет Средняя: 3.3 (8 голосов)

ssmtp - отправляем логи на почту

Потребовалась отправка логов на нужный е-майл. Раскуривал штатный Sendmail, но выходило довольно монструозно (+ мне нужно было менять заголовки отправителя). Ставить Exim для этой мелочи тоже не хотелось. Посему остановился на утилите ssmtp. Она элементарна и проста в эксплуатации.

Установка

# cd /usr/ports/
# make search name=ssmtp
Port:   ssmtp-2.62.3
Path:   /usr/ports/mail/ssmtp
Info:   Extremely simple MTA to get mail off the system to a mail hub
Maint:  aragon@phat.za.net
B-deps: gettext-0.17_1 gmake-3.81_3 libiconv-1.13.1_1
R-deps:
WWW:    _http://packages.debian.org/stable/mail/ssmtp
 
# cd /usr/ports/mail/ssmtp; make install clean
~~
===> SECURITY REPORT:
      This port has installed the following binaries which execute with
      increased privileges.
/usr/local/sbin/ssmtp
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
_http://packages.debian.org/stable/mail/ssmtp
===>  Cleaning for gmake-3.81_3
===>  Cleaning for ssmtp-2.62.3

Создадим и настроим конфигурационные файлы:

# cd /usr/local/etc/ssmtp/
# ll
total 4
-rw-r-----  1 root  ssmtp   200 Apr 22 11:53 revaliases.sample
-rw-r-----  1 root  ssmtp  1286 Apr 22 11:53 ssmtp.conf.sample
# cp ssmtp.conf.sample ssmtp.conf
# cp revaliases.sample revaliases

Настроим ssmtp.conf

Переведем основной конфигурационный файл:

# cat ssmtp.conf
 
# /etc/ssmtp.conf -- конфигурационный файл для sSMTP sendmail.
#
# Пользователь, который получает всю почту для userids < 1000
# Сделайте пустым для отключения перезаписи. Или укажите пользователя.
# А также вы можете указать нужный е-майл на который будет
# приходить почта для root.
root=postmaster
 
# Место, где идет почта. Настоящее имя машины не требуются
# MX записи. Обычно mailhosts является именем mail.domain.com
# Например если вы находитесь в domain.com ваш mailhub с таким же именем.
mailhub=mail
 
# Пример для SMTP портом 2525
# mailhub=mail.your.domain:2525
# Пример для SMTP портом 25 (Standard/RFC)
# mailhub=mail.your.domain
# Пример для SSL шифрованного соединения
# mailhub=mail.your.domain:465
 
# От кого якобы должна приходить почта?
rewriteDomain=
 
# Полное имя машины
hostname=_HOSTNAME_
 
# Установите это чтобы никогда не переписывать "From:" (если не указано) и
# использовать этот адрес в "from line" оболочки.
#FromLineOverride=YES
 
# Использовать SSL/TLS, чтобы отправить безопасные сообщения на сервер.
#UseTLS=YES
 
# Использовать SSL/TLS сертификат для аутентификации на SMTP-хосте.
#UseTLSCert=YES
 
# Используйте этот сертификат RSA.
#TLSCert=/usr/local/etc/ssmtp/ssmtp.pem
 
# Получить расширенное (* действительно * расширенную) отладочную информацию в логах
# Если вы хотите иметь отладке в конфигурационных отпарсенных файлах, переместите этот
# параметр в начало файла конфигурации и раскомментируйте
#Debug=YES

Мой тестовый конфигурационный файл:

# grep -v '^#' ssmtp.conf |grep -v ^\$
root=Raven2000@lissyara.su
mailhub=mail.ignix.ru
hostname=raven.local

Настроим revaliases

Revaliases нужен для создания псевдонимов (например как файл /etc/mail/aliases для sendmail). Переведем конфигурационный файл:

# cat revaliases
 
# sSMTP псевдонимы
#
# Формат: local_account:outgoing_address:mailhub
#
# Пример: root:your_login@your.domain:mailhub.your.domain[:port]
# где [:port] – это дополнительный номер порта, который по умолчанию 25.

Настроим соответствующим образом:

# grep -v '^#' revaliases |grep -v ^\$
root:root@raven.local:mail.ignix.ru

Система

Остановите Sendmail и приведите конфигурационные файлы к этому виду:

# cat /etc/rc.conf |grep sendmail
sendmail_enable="NONE"
 
# grep -v ^# /etc/mail/mailer.conf |grep -v ^\$
sendmail        /usr/local/sbin/ssmtp
send-mail       /usr/local/sbin/ssmtp
mailq           /usr/local/sbin/ssmtp
newaliases      /usr/local/sbin/ssmtp
hoststat        /usr/local/sbin/ssmtp
purgestat       /usr/local/sbin/ssmtp

Тестируем

Отправим письмо руту:

# mail root
Subject: test ssmtp
test ssmtp
.
EOT

Готово. Если письмо пришло то вас можно поздравить.

Проблемы

А если не пришло то это проблема =).
Для начала нам нужно обнаружить проблемное место. Для этого в конфигурационном файле ssmtp.conf Добавляем в самое начало конфига строчку:

Debug=YES

Далее необходимо смотреть как и куда отправляются письма. Для этого необходимо видеть логи почтового сервера в реальном времени (для удобства). И пробуем отправить письмо заодно смотря логи.
# tail -f /var/log/maillog
Apr 23 11:38:43 bsd sSMTP[72138]: Sent mail for root@raven.local (221 Bye) uid=0
username=root outbytes=296
Apr 23 11:38:51 bsd sSMTP[72143]: Set Root="Raven2000@lissyara.su"
Apr 23 11:38:51 bsd sSMTP[72143]: Set MailHub="mail.ignix.ru"
Apr 23 11:38:51 bsd sSMTP[72143]: Set RemotePort="25"
Apr 23 11:38:51 bsd sSMTP[72143]: Set HostName="raven.local"
Apr 23 11:38:51 bsd sSMTP[72143]: Set MailHub="mail.ignix.ru"
Apr 23 11:38:51 bsd sSMTP[72143]: via SMTP Port Number="25"
Apr 23 11:38:51 bsd sSMTP[72143]: 220 MailServer 2005
Apr 23 11:38:51 bsd sSMTP[72143]: HELO raven.local
Apr 23 11:38:52 bsd sSMTP[72143]: 250 ignix.ru
Apr 23 11:38:52 bsd sSMTP[72143]: MAIL FROM:<root@raven.local>
Apr 23 11:38:52 bsd sSMTP[72143]: 250 Ok
Apr 23 11:38:52 bsd sSMTP[72143]: RCPT TO:<Raven2000@lissyara.su>
Apr 23 11:38:52 bsd sSMTP[72143]: 250 Ok
Apr 23 11:38:52 bsd sSMTP[72143]: DATA
Apr 23 11:38:52 bsd sSMTP[72143]: 354 End data with <CR><LF>.<CR><LF>
Apr 23 11:38:52 bsd sSMTP[72143]: Received: by raven.local (sSMTP sendmail emulation);
Fri, 23 Apr 2010 11:38:51 +0400
Apr 23 11:38:52 bsd sSMTP[72143]: From: "Charlie &" <root@raven.local>
Apr 23 11:38:52 bsd sSMTP[72143]: Date: Fri, 23 Apr 2010 11:38:51 +0400
Apr 23 11:38:52 bsd sSMTP[72143]: To: Raven2000@lissyara.su
Apr 23 11:38:52 bsd sSMTP[72143]: Subject: test ssmtp2
Apr 23 11:38:52 bsd sSMTP[72143]:
Apr 23 11:38:52 bsd sSMTP[72143]: test ssmtp2
Apr 23 11:38:53 bsd sSMTP[72143]: .
Apr 23 11:38:53 bsd sSMTP[72143]: 250 Ok: queued as 50A392BC12D
Apr 23 11:38:53 bsd sSMTP[72143]: QUIT
Apr 23 11:38:53 bsd sSMTP[72143]: 221 Bye
Apr 23 11:38:53 bsd sSMTP[72143]: Sent mail for root@raven.local (221 Bye) uid=0
username=root outbytes=331

Как видим все в порядке это можно проследить по записям. У вас же могут быть несоответствия в работе которые вы заметите и устраните.

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

vnstat - мониторинг сетевого трафика

VNSTAT служит для подсчёта трафика проходящего через сетевой интерфейс, и отображает статистику загрузки в разные периоды времени.

Содержание:

  • Установка
  • Настройка
  • Веб интерфейс
  • FAQ

Установка

Установим vmstat из портов:

cd /usr/ports/net/vnstat && make install clean

Полное разъяснение установки находится в "/usr/local/share/doc/vnstat/INSTALL_BSD"

Создадим конфигурационный файл:

cp /usr/local/etc/vnstat.conf.sample /usr/local/etc/vnstat.conf

Настройка

Необходимо отредактировать конфигурационный файл, указав свой сетевой интерфейс:

cat /usr/local/etc/vnstat.conf|grep Interface
Interface "rl0" #интерфейс

Cоздадим каталог для базы данных vnstat:

mkdir -p /var/db/vnstat && chmod +x /var/db/vnstat/

Сron

Добавим задание в cron чтобы наш vnstat обновлял информацию о трафике:

crontab -l | grep vnstat
*/5     *       *       *       *       /usr/local/bin/vnstat -u

Тестирование

Проверим как работает сбор информации. Введем сетевой интерфейс в работу:

vnstat -D -u -i rl0

Отобразим статистику:
vnstat
 
Database updated: Mon Sep 27 10:35:00 2010
 
   rl0 since 09/27/10
 
          rx:  1.75 MiB      tx:  294 KiB      total:  2.04 MiB
 
   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
       Sep '10      1.75 MiB |     294 KiB |    2.04 MiB |    0.01 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        --     |      --     |      --     |
 
   daily
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
         today      1.75 MiB |     294 KiB |    2.04 MiB |    0.44 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        --     |      --     |      --     |

Веб интерфейс

Для того чтобы можно было смотреть статистику через веб интерфейс нужно установить vnstat PHP frontend.

Apache

Сконфигурируем Apache. Добавим Alias в файл конфигурации веб сервера:

vi /usr/local/etc/apache22/httpd.conf

в раздел добавьте:
    Alias /vnstat "/usr/local/www/vnstat/"
    <Directory "/usr/local/www/vnstat">
        Options Indexes FollowSymlinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

Vnstat PHP frontend

создаём каталог для vnstat PHP frontend

cd /usr/local/www/ ; mkdir -p /usr/local/www/vnstat

скачиваем и распаковываем vnstat PHP frontend
wget -c http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.5.1.tar.gz

или
fetch http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.5.1.tar.gz

tar xzf vnstat_php_frontend-1.5.1.tar.gz

надо переместить файлы в наш каталог /vnstat
mv ./vnstat_php_frontend-1.5.1/* ./vnstat

приводим config.php к такому виду
cat ./config.php | grep -v "//"

<?php
    error_reporting(E_ALL | E_NOTICE);
 
    $locale = 'ru_RU.UTF-8';
    $language = 'ru';
 
    $iface_list = array('rl0');
 
    $iface_title['rl0'] = 'Internet';
 
    $vnstat_bin = '/usr/local/bin/vnstat';
    $data_dir = './dumps';
 
    $graph_format='svg';
 
    define('GRAPH_FONT',dirname(__FILE__).'/VeraBd.ttf');
 
    define('SVG_FONT', 'Verdana');
 
    define('DEFAULT_COLORSCHEME', 'light');
 
?>

Русификация PHP frontend

Качаем русский язык для vnstat PHP frontend и распаковываем:

cd /usr/local/www/vnstat/lang/
wget -c <a href="http://www.ignix.ru/system/files/ru.php_.tar.gz<br />
tar" title="http://www.ignix.ru/system/files/ru.php_.tar.gz<br />
tar">http://www.ignix.ru/system/files/ru.php_.tar.gz<br />
tar</a> xzf ./ru.php_.tar.gz

Готово, можно удалить архив если он мешает =)

По поводу русификации: переводил по смыслу, если что не так, говорите, подправлю.

FAQ

В: У меня ошибка в веб интерфейсе связанное с временной зоной.
О: У меня оказывается не было файла php.ini или если в нём не указана временная зона то надо сделать файл настройки php путём копирования дефолтного файла под другим именем.

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini 

добавляем свою временную зону
cat /usr/local/etc/php.ini | grep Kiev
date.timezone = Europe/Kiev

перезапустим apache
/usr/local/etc/rc.d/apache22 restart

Для того чтобы посмотреть статистику необходимо будет в строке браузера ввести
"http://<адрес сервера где установлен apache>/vnstat/"

по моему всё =)

Скриншоты:
Сводка.

По часам.

ВложениеРазмер
ru.php_.tar.gz624 байта
Дополнительные материалы
Ссылки: 
>>ВЕТКА ФОРУМА<<
Ваша оценка: Нет Средняя: 4.8 (5 голосов)

Простой вариант NAT+PF

Для организации NAT с помощью PF нам понадобится следующее:

Включить pf (packet filter)

vi /etc/rc.conf

gateway_enable="YES"		#Разрешает серверу быть шлюзом 
pf_enable="YES"			#Запуск pf 
pflog_enable="YES"		#не обязательно, возможность писать логи pf
pf_rules="/etc/pf.conf"		#Пуьт к правилам pf
pf_program="/sbin/pfctl"	#Путь к программе управления pf
pf_flags=""			#Необходимо для pfctl
defaultrouter="192.168.1.254"   #Шлюз провайдера

Можно и пересобрать ядро, с поддержкой pf
дабы pf не ругался на отсутствие ALTQ (ограничивать пропускную способность канала) или для его использования
No ALTQ support in kernel 
ALTQ related functions disabled 

добовляем в ядро и ALTQ
cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/ROUTER-PF
vi /usr/src/sys/i386/conf/ROUTER-PF

# pf
device		pf
device		pflog
device		pfsync
options		ALTQ
options		ALTQ_CBQ	# Class Bases Queuing (CBQ)
options		ALTQ_RED	# Random Early Detection (RED)
options		ALTQ_RIO	# RED In/Out
options		ALTQ_HFSC	# Hierarchical Packet Scheduler (HFSC)
options		ALTQ_PRIQ	# Priority Queuing (PRIQ)
options		ALTQ_NOPCC	# Required for SMP build

после установки ядра надо подредактировать правила pf
vi /etc/pf.conf

ext_if="rl1"		 	#Внешний интерфейс (смотрит к провайдеру WAN)
int_if="rl0" 			#Внутренний интерфейс (смотрит в нашу сеть LAN)
 
set skip on lo0 #пропускаем проверку на петле
scrub in all #собираем все части пакета перед отправкой
nat on $ext_if from $int_if:network to any -> ($ext_if)
 
block all #запретим все отовсюду
pass in on $int_if from any to any #разрешаем всё из локальной сети 
pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет 
pass in on $ext_if proto tcp from any to $ext_if port ssh #разрешаем ssh
pass in inet proto icmp all icmp-type echoreq #разрешаем ping 

Готово!

Осталось прочитать правила pf

pfctl -f /etc/pf.conf

pfctl -e #включить pf
pfctl -d #выключить pf

можно натить по ip адресам.
Для этого надо немного поредоктировать pf.conf
vi /etc/pf.conf

ext_if="rl1"		 	#Внешний интерфейс (смотрит к провайдеру WAN)
int_if="rl0" 			#Внутренний интерфейс (смотрит в нашу сеть LAN)
 
table <pf-allow-pc> file "/etc/pf-allow-pc"
set skip on lo0 #пропускаем проверку на петле
scrub in all #собираем все части пакета перед отправкой
nat on $ext_if from <pf-allow-pc> to any -> ($ext_if)
 
block all #запретим все отовсюду
pass in on $int_if from any to any #разрешаем всё из локальной сети 
pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет 
pass in on $ext_if proto tcp from any to $ext_if port ssh #разрешаем ssh
pass in inet proto icmp all icmp-type echoreq #разрешаем ping 

и добавить ip адреса(в строке должен быть один адрес) тех кому разрешено ходить в интернет
vi /etc/pf-allow-pc

192.168.0.2
192.168.0.3
192.168.0.5

P.S. ВАЖНО!

В случае если на сервере не запущен named то на клиентских компьютерах надо в поле DNS указать пограничный DNS сервер, или настраивать named самим

Для того, чтобы настроить named самим, надо сделать следующее:

vi /etc/rc.conf

named_enable="YES"

Затем надо указать в named.conf наш шлюз, для этого:

Надо найти строки listen-on и forwarders и добавьте адрес внутреннего интерфейса
vi /etc/namedb/named.conf

listen-on { 127.0.0.1; 192.168.1.1;};
forwarders { 127.0.0.1; 192.168.1.1;};

Ссылки:

  • О unix системах
  • Учебник FreeBSD, OpenBSD, NetBSD, DragonFly BSD
  • Настройка своего сервера имён
  • ALTQ
Ваша оценка: Нет Средняя: 5 (3 голоса)

Сеть

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

Arpwatch - мониторинг соответствие между IP и MAC-адресами

Устанавливаем arpwatch

Из порта:

cd /usr/ports/net-mgmt/arpwatch && make install clean

Пакетом:
pkg_add -r arpwatch

после чего правим rc.conf для запуска arpwatch при загрузке системы:

vi /etc/rc.conf

arpwatch_enable="YES" #включаем arpwatch
arpwatch_interfaces="nfe0" #какие интерфейсы слушать
#arpwatch_interfaces="" #слушать все интерфейсы
#arpwatch_nfe0_options="-m admin@mydomain.ru" #отправлять лог себе на мыло

Ведение логов

для ведения логов лучше настроить для этого syslog.conf:

vi /etc/syslog.conf

!arpwatch
*.notice /var/log/arpwatch.log

Мониторинг

Таблица соответствия адресов находится в файле /usr/local/arpwatch/arp.<интерфейс>.dat и выглядит как обычный текстовый файл, с MAC-адресом, IP-адресом, временем попадения в таблицу, и именем интерфейса, через который пришёл исходный запрос.

cat /usr/local/arpwatch/arp.nfe0.dat
0:f:ea:63:e2:d7 192.168.1.31    1265370078      oksen
0:1:29:1b:35:7e 192.168.1.18    1265369952      narman
0:2:b3:b2:26:e4 192.168.1.254   1265370062      ns
0:1d:7d:a6:77:64        192.168.1.67    1265368627      r423-1
0:1d:7d:a6:70:80        192.168.1.84    1265370079      lib5
0:1d:7d:70:6f:28        192.168.1.43    1265370029      tender
0:1d:7d:a6:70:35        192.168.1.82    1265370064      lib3
0:c:76:97:51:e5 192.168.1.48    1265368690      jurist
0:b:6a:6d:fd:81 192.168.1.83    1265370048      lib4
0:e0:4d:2a:cd:68        192.168.1.35    1265369127      matbuh2
0:1d:7d:a6:6a:4b        192.168.1.86    1265370064      lib7
0:1a:4d:dc:db:46        192.168.1.65    1265370078      r421a
0:e:a6:27:5a:59 192.168.1.156   1265370034      lib2-ab1
0:2:44:5a:a4:3d 192.168.1.45    1265369568      ois3
0:f:ea:4f:20:89 192.168.1.24    1265370015      glbuh
0:1a:4d:fb:e:a4 192.168.1.152   1265370059      lib2-4z
0:2:b3:b8:8a:36 192.168.1.38    1265370059      serv3

arpwatch формирует события следующих типов:
Важные:

 new activity - Это Ethernet/IP был использован впервые за 6 месяцев.
 new station - Это Ethernet/IP был использована впервые
 flip flop - Замена адреса с одного на другой (оба были в списке).
 changed ethernet address - Замена на новый MAC адрес Ethernet.

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

ethernet broadcast - MAC-адрес хоста является широковещательным. 
ip broadcast - IP-адрес хоста является широковещательным. 
bogon - Адрес отправителя IP-пакета не входит в непосредственно подключённую
        сеть (directly connected network) для заданного интерфейса. 
ethernet broadcast - MAC-адрес отправителя состоит из одних нулей или одних 
                     единиц.
ethernet mismatch - MAC-адрес отправителя пакета не соответствует MAC-адресу, 
                    указанному внутри ARP-запроса. 
reused old ethernet address - Ethernet-адрес изменился с известного адреса на 
                              адрес, который был замечен ранее, но не только 
                              что. (Похоже на flip flop, но чуть-чуть другое.) 
suppressed DECnet flip flop - Сообщение "flip flop" подавлено в связи с тем, 
                              что как минимум один из двух адресов является 
                              адресом DECnet.  

если есть необходимость вести журнал всех событий (не только важных), то меняем (*.notice) на (*.*) в syslog.conf

после чего перезагружаем syslog

killall -HUP syslogd

выглядеть это будет примерно так:
cat /var/log/arpwatch.log
Feb  5 09:27:20 bsd-9 arpwatch: new station 192.168.1.169 0:13:8f:27:2f:6f
Feb  5 09:30:39 bsd-9 arpwatch: new station 192.168.1.29 0:13:8f:24:a3:a
Feb  5 09:35:39 bsd-9 arpwatch: new station 192.168.1.28 0:2:44:5a:69:65
Feb  5 09:53:28 bsd-9 arpwatch: new station 192.168.1.33 0:2:44:5a:69:6b
Feb  5 09:55:40 bsd-9 arpwatch: new station 192.168.1.8 0:1d:7d:a6:6a:73
Feb  5 10:17:35 bsd-9 arpwatch: new station 192.168.1.249 0:13:46:65:81:f5
Feb  5 10:17:36 bsd-9 arpwatch: changed ethernet address 192.168.1.249 0:11:95:b8:96:42 (0:13:46:65:81:f5)
Feb  5 10:41:15 bsd-9 arpwatch: new station 192.168.1.146 0:f:ea:63:f8:40
Feb  5 10:49:11 bsd-9 arpwatch: new station 192.168.1.164 0:19:5b:2f:99:b1
Feb  5 10:52:11 bsd-9 arpwatch: new station 192.168.1.124 0:f:ea:63:f8:32
Feb  5 11:00:57 bsd-9 arpwatch: new station 192.168.1.170 0:f:ea:4f:65:d7

по желанию можно настроить ротацию:

vi /etc/newsyslog.conf

/var/log/arpwatch.log                   644  3     100  *     JC

Установка в OpenBSD

Ставим:
Из порта:

cd /usr/ports/net/arpwatch && make install clean

Пакетом:
wget ftp://ftp.openbsd.org/pub/OpenBSD/4.6/packages/i386/arpwatch-2.1a15p0.tgz

pkg_add ./arpwatch-2.1a15p0.tgz

для запуска arpwatch редактируем rc.local
vi /etc/rc.local

if [ -x /usr/local/sbin/arpwatch -a -d /var/arpwatch ]; then
        /usr/local/sbin/arpwatch -i rl1 && echo -n ' arpwatch'
fi

С флагом "-i" указываем какой конкретно интерфейс слушать "-i rl1"

Ведение логов

Хотя в OpenBSD и так всё заносится в /var/log/messages но среди всего выискивать arpwatch мне не удобно я сделал так:
Редактируем syslog.conf:

vi /etc/syslog.conf

!arpwatch
*.notice;     /var/log/arpwatch

выглядеть это будет примерно так:
cat /var/log/arpwatch
Feb 15 10:32:24 openbsd-9 arpwatch: new station 192.168.1.164 0:19:5b:2f:99:b1
Feb 15 10:39:47 openbsd-9 arpwatch: new station 192.168.1.55 0:1a:4d:65:83:a9
Feb 15 10:41:42 openbsd-9 arpwatch: new station 192.168.1.76 0:1:29:1b:37:1a
Feb 15 11:08:46 openbsd-9 arpwatch: new station 192.168.1.102 0:f:ea:4f:24:1e
Feb 15 11:27:38 openbsd-9 arpwatch: new station 192.168.1.28 0:2:44:5a:69:65
Feb 15 11:28:58 openbsd-9 arpwatch: new station 192.168.1.153 0:13:8f:24:a4:ca
Feb 15 12:00:22 openbsd-9 arpwatch: new station 192.168.1.118 0:1f:d0:b0:bb:91
Feb 15 12:16:09 openbsd-9 arpwatch: new station 192.168.1.26 0:1d:7d:a6:74:b0
Feb 15 13:01:25 openbsd-9 arpwatch: new station 192.168.1.6 0:2:b3:9f:dc:a7
Feb 15 13:05:24 openbsd-9 arpwatch: new station 192.168.1.189 0:1:29:79:10:57
Feb 15 13:11:32 openbsd-9 arpwatch: new station 192.168.1.169 0:13:8f:27:2f:6f
Feb 15 13:27:49 openbsd-9 arpwatch: new station 192.168.1.188 0:24:1d:9d:c8:67
Feb 15 14:25:47 openbsd-9 arpwatch: new station 192.168.1.27 0:1d:7d:a6:70:4d
Feb 15 14:40:54 openbsd-9 arpwatch: new station 192.168.1.64 0:1d:7d:a6:70:76

по желанию можно настроить ротацию:
vi /etc/newsyslog.conf

/var/log/arpwatch                644  3     100  *     JC

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

GLPI - Менеджер ресурсов компании

Прошло 1,5 года с момента написания этой статьи (на ресурсе Lissyara.su). И надо ее обновить с учетом всех возникших за эти годы поправок, созданных в реальной работе. После ввода в эксплуатацию она принесла мне много положительного, например экономия моего времени, а именно - проще стало проводить инвентаризацию, управлять договорами, обрабатывать и учитывать заявки пользователей, вести учет лицензий и ПО, и так же многое другое.

Содержание:

  • Описание
  • Установка
  • Настройка
    • Cron
    • Настройка почты
    • Настройка LDAP
    • Плагины
    • Полезные советы
  • Автоматическая инвентаризация
  • FAQ

Описание

И так, что же такое GLPI и как этот продукт поможет нам в тяжелых буднях?
GLPI - это веб-приложение, разработанное на PHP для работы с ним необходим только доступ к серверу и браузер.

Среди его возможностей:

  • учет компьютеров, периферийного оборудования, сетевых устройств, обычных принтеров и связанных с ними компонентами через интерфейс OCS инвентаризации или FusionInventory.
  • назначение задач, планирование и т.д.
  • управление лицензиями.
  • назначение оборудования по географическим регионам для пользователей и групп.
  • управление деловой и финансовой информацией.
  • управление статусом работы оборудования.
  • управление заявками о помощи для всех видов оборудования.
  • использование нескольких интерфейсов, позволяющих пользователю отправить запрос в службу поддержки (web, e-mail).
  • управление документами, договорами, и связанных с ними товарно-материальных ценностей.
  • резервирование оборудования.
  • создание часто задаваемых вопросов "FAQ" и "Базы знаний".
  • генератор отчетов: аппаратное обеспечение, сети, тех. поддержки и т.п.

Кроме того, GLPI имеет много плагинов для добавления дополнительных функций.

Дополнительная информация:
  • Подробный список особенностей
  • Скриншоты
  • Демо сайт

Установка

Будем устанавливать из портов, но вы можете скачать с сайта разработчика данное ПО и развернуть на веб сервере.

# cd /usr/ports/
bsd# make search name=glpi
Port:   glpi-plugins-tracker-agent-1.5.3_1
Path:   /usr/ports/net-mgmt/glpi-plugins-tracker-agent
Info:   Agent get informations of networking devices by SNMP for GLPI
Maint:  _d.durieux@siprossii.com
B-deps: perl-5.10.1_2
R-deps: expat-2.0.1_1 p5-AppConfig-1.66 p5-Crypt-CBC-2.30...
WWW:
 
Port:   glpi-plugins-tracker-server-2.1.3
Path:   /usr/ports/net-mgmt/glpi-plugins-tracker-server
Info:   Plugin of glpi to get information of networking devices by SNMP
Maint:  _d.durieux@siprossii.com
B-deps:
R-deps: glpi-0.72.4_1 libiconv-1.13.1_1 libxml2-2.7.7 mysql-client..
WWW:
 
Port:   glpi-plugins-AdditionalReports-1.3.0
Path:   /usr/ports/textproc/glpi-plugins-AdditionalReports
Info:   This plugin enables additional reports
Maint:  _d.durieux@siprossii.com
B-deps:
R-deps: glpi-0.72.4_1 libiconv-1.13.1_1 libxml2-2.7.7 mysql-client..
WWW:
 
Port:   glpi-plugins-DataInjection-1.7.2
Path:   /usr/ports/textproc/glpi-plugins-DataInjection
Info:   This glpi plugin allows data import into GLPI using CSV files
Maint:  _d.durieux@siprossii.com
B-deps:
R-deps: glpi-0.72.4_1 libiconv-1.13.1_1 libxml2-2.7.7 mysql-client...
WWW:
 
Port:   glpi-0.72.4_1
Path:   /usr/ports/www/glpi
Info:   Free IT and asset management software
Maint:  _mathias@monnerville.com
B-deps:
R-deps: libiconv-1.13.1_1 libxml2-2.7.7 mysql-client-5.1.50_1...
WWW:    _http://glpi-project.org/

Как видим помимо самого GLPI есть еще и дополнения к нему, некоторые из них мы рассмотрим позже.

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

# cd /usr/ports/www/glpi && make install clean
~~~
*****************************************************************
First time installation notes:
 
Before using GLPI, you will need to configure your database.
Full installation instructions are available here:
 
 _http://glpi-project.org/spip.php?article61
 
If you are using MySQL, here's the short version of the instructions:
 
1. Create a new database:
$ mysqladmin -uroot create glpi
 
2. Grant access to the database:
$ mysql -uroot -e"GRANT ALL ON glpi.* TO USERNAME@localhost IDENTIFIED BY 'PASSWORD'" glpi
(choose your own values for USERNAME and PASSWORD)
 
You will also need to configure Apache.  Consider adding the following
to your httpd.conf:
 
    <Directory /usr/local/www/glpi>
        AllowOverride Options FileInfo
    </Directory>
 
Then restart Apache: 'apachectl graceful'
 
Please visit 'http://{host.domain}/www/glpi/' in a
web-browser and follow the configuration instructions.
*****************************************************************

MYSQL

Cоздадим базу данных в MYSQL, например glpi, и пользователя имеющего полные права на эту базу данных.

# mysqladmin -uADMIN_USER -pADMIN_PASS create glpi
# mysql -uADMIN_USER -pADMIN_PASS -e"GRANT ALL ON glpi.* TO \
GLPI_USER@localhost IDENTIFIED BY 'GLPI_USER_PASS'" glpi

Apache

В конфигурационный файл Apache httpd.conf внесем следующее:

Alias /glpi "/usr/local/www/glpi"
    <Directory /usr/local/www/glpi>
        AllowOverride Options FileInfo
    </Directory>

Перезапустим Apache
# apachectl graceful

Веб установка

Теперь зайдем на созданный сайт и выберем язык установки Russian.

http://{host.domain}/glpi/

Согласимся с лицензией и нажмем кнопку "Установка".
Я не стал публиковать скриншоты установки ибо это тривиально.

Дальше необходимо пройти 5 шагов.
Шаг - 1 Проверка окружения на совместимость с GLPI

Если все в порядке нажимаем кнопку "Продолжить"

Шаг - 2 Установка соединения с базой данных
Укажите корректные параметры созданной базы данных.

Сервер Mysql: localhost
Пользователь Mysql: GLPI_USER
Пароль Mysql: GLPI_USER_PASS

Шаг - 3 Проверка связи с базой данных

Выберем созданную выше БД <strong>glpi</strong> и нажмем "Продолжить"

Шаг - 4 База данных

OK - база данных проинициализирована
Были внесены значения по умолчанию. Можете их удалить
Для первого соединения Вы можете использовать имя пользователя 'glpi' 
и пароль 'xxx' для входа в систему с правами администратора

Шаг - 5 Установка завершена

Стандартные имена пользователей / пароли:
 
glpi/glpi для административной учетной записи
tech/tech для технической учетной записи
normal для обычной учетной записи
post-only/post-only для учетной записи публикатора
 
Вы можете изменить или удалить эти учетные записи также как и первые записи в БД.

Установка завершена нажмем на кнопку "Запустить GLPI"

Настройка

Cron

Необходим для технических работ к примеру для проверки почты, отправки уведомлений и т.п.

# crontab -l |grep glpi
*/5  *  *  *  *  /usr/local/bin/php /usr/local/www/glpi/front/cron.php > /dev/null 2>&1

Настройка почты

Приемник почты

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

Основная панель > Установки > Приемник почты

Отправьте на е-майл заявку и в приемнике почты нажмите на кнопку "Получить заявки сейчас". Если все получилось то двигаемся дальше, если нет то ищем где ошиблись.

Настройка LDAP

Я привык чтобы учетные записи пользователей были в одном месте и все службы брали от туда необходимую им информацию. Как и все я использую LDAP каталоги это может быть как OLDAP так и Active Directory Microsoft. Для примера будем подключаться к Active Directory. Для этого необходимо создать технического пользователя и настроить на получение информации с LDAP. Думаю с пользователем проблем не возникнет (у меня он services), а подключить необходимо так:

LDAP сервер.

Основная панель > Установки > Аутентификация
Выбрать Внешняя аутентификация - LDAP

Укажите:

Имя подключения - LDAP_server
Basedn - OU=USERS_BOX,DC=firma, DC=local
rootdn - CN=services,OU=Work,OU=USERS_BOX,DC=firma,DC=local

Нажмите "Тест подключения к LDAP" если проходит то идем дальше.

Синхронизация учетных записей LDAP сервера

Основная панель > Управление > Пользователь

Кнопка "из LDAP"
Там будут два варианта.

  • Синхронизировать уже импортированных пользователей
  • Импортировать новых пользователей

Вы выберете что вам необходимо. При изменении данных учетных записей в LDAP сервере не забывайте синхронизировать и в GLPI.

Плагины

Установка плагинов производится в директорию /glpi/plugins

  • Cписок плагинов

К примеру установим плагин Network architecture.

# cd /usr/local/www/glpi/plugins/
# rm remove.txt
# fetch _http://glpi-project.org/IMG/gz/glpi-archires-1.6.tar.gz
# tar zxvf glpi-archires-1.6.tar.gz
# rm glpi-archires-1.6.tar.gz

После распаковки плагина зайдем на наш сайт и выберем

Установки > Дополнения

Там установите и включите нужный плагин.

Рекомендуемые плагины:

Look Cacti graphs - просмотр графиков Cacti
Network architecture - просмотр сетевой архитектуры
Send Mail on adding KB Item - уведомление по е-майл при создании нового FAQ
Tree View - дерево образный список с сортировкой по местонахождению

Полезные советы

Уведомления об окончании расходных материалов.

Добавьте принтеры и картриджи и добавьте нужного человека к группе кому будут высылаться уведомления о минимальном кол-ве расходных материалов на складе (кол-во можете установить по каждому типу расходного материала и контролировать не только картриджы, но и диски, термопленки, дискеты и т.п. Минимальное кол-во до оповещения зависит и от организации (бюрократия), времени поставки и т.п.
Каждую неделю GLPI будет сверяться с базой и при нахождении минимального кол-ва расходных материалов высылать письмо со списком необходимого человеку ответственного за их контроль.

База знаний.

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

Администрирование
-Firewall
-Антивирус (SEP)
-Windows 2003
-Windows XP
-ПО
Документация
Информация
Настройка
-Печать
-Почта
Проблемы
Информация

В каждой теме есть посты которые могут читать пользователи вот два примера сообщений.

При проблеме с сетью:

Вопрос
Не работает почта\СКАП\сетевые принтеры и тп.

Ответ
Убедитесь, что с сетью все в порядке [проверка работоспособности сервисов] (линк на карту Zabbix)

* Если не работают сервера SRV1 и\или SRV2 то вам необходимо уведомить:
o А.С. Игнатьев +7-921-333-33-33
o В.В. Мишуткин +7-921-333-33-33

* Если не работают сервера внутренней локальной сети Windows 2003 и\или Zabbix Server то вам необходимо позвонить:
o А.С. Игнатьев +7-921-333-33-33

* Если не работает интерфейс WAN то вам необходимо уведомить:
o А.С. Игнатьев +7-921-333-33-33
o Д.В. Вася +7-333-333-33-33(СЗТ)
o Дежурный по оптоволокну (Связь) 8-81311-34567

Если проблемы с электропитанием:

По умолчанию при сбое питания серверы в Фирме автоматически выключаются и при появлении электропитания автоматически включаются с условием заряда аккумуляторной батареи (UPS) на 15% от номинала (заряжаются 20-30 мин.).

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

* Зайти в каб №ХХ
* Включить UPS APC Smart-UPS 1500 (черное прямоугольное устройство ) нажав на верхнюю кнопку.
* Серверы запустятся автоматически (должны сразу же загореться зеленые кнопки питания на лицевой панели каждого сервера) при необходимости включите самостоятельно.

Заряд аккумулятора можете увидеть на лицевой панели UPS или же воспользоваться Network UPS Tools (линк на NUT) при включенных серверах.

P.S.
Узнать о проблемах электросети на АБК и когда исправят можно у В.В. Мишуткин +7-921-333-33-33 (ОАО Фирма2)

Такие элементарные подсказки дают вам преимущество и пользователи сразу вам говорят что делают и что не работает. Но для начала надо их обучить и заставлять применять это. Но зато когда все наладится все ощутят преимущества данной системы.

Тикет система

Переводите пользователей плавно и постепенно в тикет систему сначала пробное принуждение пользователя о том что нужно записать в нее свои вопросы мотивируя, что можете забыть, сейчас вы находитесь не на месте, не на чем записать и т.п. В будущем все вопросы (но без фанатизма, некоторые вопросы лучше сразу решить без тикетницы) проводить через данную систему. Я рекомендую назначить человека который будет обрабатывать тикет систему. Это очень удобно и так можно выявить кто больше достает админов своей тупостью и в конце года поговорить с начальством, либо об обучении пользователя, либо пускай они с ним разберутся.

Тикет система для администратора

Пишите сами в тикет систему, например, чтобы не забыть (это уже легко сделать например отправить сообщение на е-майл) или зарегистрировать заявку принятую от пользователя по телефону или е-майлу. Это привычка вам сослужит добрую службу и позволит за минуту показать начальству что вы не просто просиживаете (как они думают) 80% своего времени, а тратите на обработку траблов пользователей, работы с глючным железом, старым ПО и т.п. которое вы уже давно требуете закупить\обновить и из-за этого ваш план по улучшению ИТ службы на предприятии накрывается медным тазом. В выводе эффективность предприятия падает к нулю да и зарплату поднять вам неплохо было бы =)

Учет и расходные материалы

Ведите полный учет всего чего есть. Все что на балансе и с инв. номерами вносите сюда это вам очень поможет при инвентаризации. А так же введите все принтеры и все типы картриджев и будет сразу наглядно видно какой идет расход и эффективность принтеров. Например закончился картридж и вы его заменили, сделали тест страницу, посмотрели кол-во отпечатанных листов, зашли в GLPI и установили новый картридж в принтер и добавили кол-во отпечатанных листов и ох**ли т.к. за 15 дней кончился картридж который раньше до 1,5 мес работал. Вы идете бить человека =) И все в таком духе.

Автоматическая инвентаризация

Кто-то ставит к GLPI OCS-NG, но не я т.к. по мне это лишний и ненужный демон для сервера и ставить еще один лишний сервис на ПК пользователям и все для чего, чтобы снять один раз статистику? Нет это не по мне, зачем усложнять систему без видимой эффективности? Я просто один раз при установке ПК на рабочее место снимаю информацию, к примеру ПО EVEREST с заточенным под мои нужды конфигурационным файлом, и приатачиваю к ПК html файл.

FAQ

В. Проблема с читаемостью PDF файлов. Все русские слова отображаются закорючками.
О. Это не баг, а фича разработчики GLPI знают и пока ничем не могут помочь. Единственное есть возможность обхода.
1. Экспортировать в CVS.
2. Открыть файл с помощью OpenOffice, указав кодировку открываемого файла UTF-8.

В. Как пользователям облегчить доступ к веб интерфейсу GLPI?
О. Я создал алиас help и теперь пользователи набрав это слово сразу попадают в GLPI.

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

ISC-DHCP

DHCP - это расширение протокола BOOTP, который был придуман для того, чтобы бездисковые станции UNIX могли загружаться по сети. Подсистема BOOTP предоставляет клиентам IP-адреса, сетевые маски, стандартные шлюзы, а так же информацию, касающуюся начальной загрузки через TFTP. Протокол DHCP не ограничивается этими параметрами, вводя понятие аренды. Хватит пока теории - на практике любому сетевику средних и больших сетей необходима управляемая сетевая структура которая, будет динамично управляться и обновляться при необходимости. Для этого мы и используем протокол DHCP.

Воспользуемся эталонным ПО в реализации DHCP - демон организации Internet Systems Consortium. Мы опишем конфигурацию обеспечивающую, динамическое распределение указанного диапазона IP-адресов, фиксирование IP-адресов за сетевым устройствами, а также передачу клиентам разнообразных параметров необходимых, для работы в сети TCP/IP. А так же реализуем дополнительные трюки, к примеру - запуск в нескольких подсетях, ограничивание неизвестных клиентов, и, живя в эпоху сетевых дикарей, мы будем повышать безопасность демона путем запуска в песочнице (изменение корневого каталога chroot) и работой от имени непривилегированного пользователя. Но и на старуху бывает порнуха - предохраняйтесь и обновляетесь. =)

Содержание:

  • Установка
  • Конфигурация
  • Запуск и работа в chroot
    • Работа в двух подсетях
    • Разрешить или запретить неизвестных клиентов
    • IPv6
  • Логи
  • FAQ

Установка

Установка проста, но не забывайте сначала обновить систему портов. Найдем необходимый нам порт.

# cd /usr/ports/
# make search name=isc-dhcp41-server
Port:   isc-dhcp41-server-4.1.e,2
Path:   /usr/ports/net/isc-dhcp41-server
Info:   The ISC Dynamic Host Configuration Protocol server
Maint:  douglas@douglasthrift.net
B-deps:
R-deps:
WWW:    http://www.isc.org/products/DHCP/

Начнем установку и не забудем, что мы параноики и включим поддержку песочницы.

# cd /usr/ports/net/isc-dhcp41-server
# make config
Options for isc-dhcp41-server 4.1.e,2
 
[X] DHCP_PARANOIA  Enable support for chroot
[ ] DHCP_LDAP      Experimental LDAP backend support
[ ] DHCP_LDAP_SSL  Support LDAP connection over SSL/TLS
 
# make install clean
~~~
    This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/sbin/dhcpd
/usr/local/bin/omshell
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/isc-dhcpd
/usr/local/etc/rc.d/isc-dhcpd6
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.isc.org/products/DHCP/
===>  Cleaning for isc-dhcp41-server-4.1.e,2

Конфигурация

На данном этапе необходимо откорректировать и дополнить конфигурационный файл демона своими параметрами.

# cd /usr/local/etc/
# chmod u+w dhcpd.conf
# cat dhcpd.conf

Этот конфиг разрабатывался с учетом смешанной сети (Windows серверы и клиенты) и некоторые параметры netbios и ntp-servers можно закомментировать.

## Глобальные параметры ##
# указываем доменное имя
option domain-name "firma.local";
# имя DNS сервера
option domain-name-servers ns1.firma.local;
# IP DNS сервер (предыдущая строчка взаимозаменяемая)
#option domain-name-servers 192.168.0.1;
 
# по умолчанию на сколько секунд выдаётся IP-адрес
default-lease-time 600;
# максимальное время на сколько выдаётся IP-адрес
max-lease-time 1200;
# минимальное время на сколько выдаётся IP
#min-lease-time 1000;
 
# указываем, что не будем обновлять DNS-таблицу
ddns-update-style none;
# указываем, что наш сервер будет единственным авторитетным для наших сетей
authoritative;
# отправка логов DHCP в журнал (необходимо изменить syslog.conf)
log-facility local7;
 
## Параметры подсети ##
# задаем нашу подсеть и ее маску
subnet 192.168.0.0 netmask 255.255.255.0 {
        # диапазон выдачи IP адресов (фиксированные IP адреса серверов
        # должны лежат вне этого диапазона)
	range 192.168.0.101 192.168.0.230;
        # маска подсети
	option subnet-mask 255.255.255.0;
        # шлюз по умолчанию
	option routers 192.168.0.3;
        # определяем широковещательный адрес
	option broadcast-address 192.168.0.255;
        # указываем сервер времени (доп.)
	option ntp-servers 192.168.0.1;
        # сообщаем клиенту, должен ли тот реализовывать 
        # широковещательный принцип преобразования адресов 
        # или обращаться к серверу WINS (доп.)
	option netbios-node-type 8;
        # адрес сервера для работы с WINS (доп.)
	option netbios-name-servers 192.168.0.1;
        # параметры для работы с WINS (доп.)
	option netbios-dd-server 192.168.0.1; 
        default-lease-time 6000;
        max-lease-time 72000;
        min-lease-time 72000;
 
}

Некоторые параметры глобальных и субсетей можно менять, заменять и дополнять в зависимости от необходимого результата.

А теперь приступим к формированию групп и привязки IP к MAC адресу сетевого устройства.

group {
host PC0054 {
  hardware ethernet 00:26:5A:13:E7:5C;
  fixed-address 192.168.0.54;
}
host PC0055 {
  hardware ethernet 00:24:54:74:36:14;
  fixed-address 192.168.0.55;
}
}
 
group { 
host PC0060 {
  hardware ethernet 00:17:31:67:E0:29;
  fixed-address 192.168.0.60;
}
host PC0061 {
  hardware ethernet 00:1C:C0:1B:D1:2B;
  fixed-address 192.168.0.61;
}
}

Из этого вам уже понятно, что мы сформировали две группы (для удобства работы и можно добавлять больше групп или вообще без них работать)

  • host - имя сетевого устройства
  • hardware ethernet - его MAC адрес
  • fixed-address - привязанный за ним IP адрес

Запуск и работа в chroot

rc.conf

Для автоматического запуска при перезагрузке сервера внесем в /etc/rc.conf опции и укажем специфичные параметры, такие как: запуск в песочнице, нужный сетевой интерфейс, путь до конфигурационного файла, необходимого пользователя и тп.

# cat /etc/rc.conf |grep dhcpd
dhcpd_enable="YES"                      # включить dhcpd сервер?
dhcpd_flags="-q"                        # командные опции (вкл. тихая работа)
dhcpd_conf="/usr/local/etc/dhcpd.conf"  # конфигурационный файл
dhcpd_ifaces="em0"                      # сетевой интерфейс
dhcpd_withumask="022"                   # маска создаваемых файлов
dhcpd_chuser_enable="YES"               # работать без привелегий?
dhcpd_withuser="dhcpd"                  # имя пользователя для запуска
dhcpd_withgroup="dhcpd"                 # группа для запуска
dhcpd_chroot_enable="YES"               # запускать в песочнице?
dhcpd_devfs_enable="YES"                # использовать devfs если есть?
#dhcpd_makedev_enable="YES"             # использовать MAKEDEV?
dhcpd_rootdir="/var/db/dhcpd"           # каталог работы
dhcpd_includedir="/usr/local/etc"       # включить каталог с конфигурационными файлами
#dhcpd_flags="-early_chroot"             # необходимо для полного корня

Для включения вывода сообщений DHCP-сервера на консоль следует изменить определение переменной dhcpd_flags в файле /etc/rc.conf:
#cat /etc/rc.conf |grep dhcpg_flags
dhcpg_flags="-4"

Запуск

Запустим демон.

# /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.
Internet Systems Consortium DHCP Server 4.1-ESV-R2
Copyright 2004-2011 Internet Systems Consortium.
All rights reserved.
For info, please visit _https://www.isc.org/software/dhcp/
Wrote 0 deleted host decls to leases file.
Wrote 0 new dynamic host decls to leases file.
Wrote 31 leases to leases file.
Listening on BPF/em0/00:16:76:32:c8:a1/192.168.0.0/24
Sending on   BPF/em0/00:16:76:32:c8:a1/192.168.0.0/24
Sending on   Socket/fallback/fallback-net

Посмотрим, создалась ли ФС с песочницей для dhcpd.

#df -h
Filesystem            Size    Used   Avail Capacity  Mounted on
/dev/mirror/gm0s1a    989M    442M    468M    49%    /
devfs                 1.0K    1.0K      0B   100%    /dev
/dev/mirror/gm0s1g     67G     14G     48G    22%    /ftp
/dev/mirror/gm0s1d     19G     15G    2.9G    84%    /usr
/dev/mirror/gm0s1e     19G    3.1G     15G    17%    /var
tmpfs                 2.3G     52K    2.3G     0%    /tmp 
devfs                 1.0K    1.0K      0B   100%    /var/db/dhcpd/dev

Созданная структура песочницы - ОС в миниатюре, и в ней есть всё, что необходимо для запуска этого демона.
# ls /var/db/dhcpd/
dev etc usr var

Запущен ли демон.

# ps -ax | grep dhcp
  975  ??  Ss     0:00,01 /usr/local/sbin/dhcpd -q -cf /usr/local/etc/dhcpd.conf -lf 
/var/db/dhcpd/dhcpd.
 1759   0  S+     0:00,00 grep dhcp

Остановить демон и запустить можно так.

# /usr/local/etc/rc.d/isc-dhcpd stop
Stopping dhcpd.
# /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.

Или так.

# kill `cat /var/db/dhcpd/var/run/dhcpd/dhcpd.pid`
# /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.

Для перечитывания конфигурационного файла можно просто перезапустить демон

# /usr/local/etc/rc.d/isc-dhcpd restart

Сложные вопросы конфигурации

Работа в двух подсетях

Иногда случается, что в одном физическом сегменте сосуществуют несколько IP подсетей. Например, в организации существует требование использовать 8-битные маски подсетей, но сеть разрослась до размеров, превышающих 254 хоста, в этом случае необходимо использовать две подсети с 8-битными масками. В этом случае секции subnet, описывающие две эти подсети, могут быть заключены в секцию shared-network.
Добавляем после указанных глобальных параметров:

# Указываем, что будем использовать разные подсети с названием <strong>mynet</strong>.
shared-network mynet {
### Локальные параметры подсети 192.168.1.0/24: ###
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.200;
option broadcast-address 192.168.1.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.1.1;
option routers 192.168.1.2;
}
 
### Локальные параметры подсети 192.168.2.0/24: ###
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.10 192.168.2.200;
option broadcast-address 192.168.2.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.2.1;
option routers 192.168.2.2;
}
 
host DC23 {
    hardware ethernet 6c:f0:49:e3:92:9d;
    fixed-address 192.168.1.11;
}
 
host RM54 {
    hardware ethernet 0:13:8f:24:a4:d9;
    fixed-address 192.168.2.22;
} 
 
} 

В /etc/rc.conf не забудем внести нужные нам интерфейсы для прослушки - это нужно при использовании к примеру разных сетевых карт.

# cat /etc/rc.conf |grep dhcpd_ifaces
dhcpd_ifaces="em0 em1"   # доп. сетевой интерфейс через пробел

Если у вас alias на сетевой карте - ничего менять не нужно.

Разрешить или запретить неизвестных клиентов

Иногда необходимо ограничивать работу неизвестных клиентов, о которых нет упоминания в dhcp.conf, или использовать разные конфигурации сетей в зависимости от клиента - это делается двумя параметрами.

  • deny unknown-clients - запретить неизвестных клиентов
  • allow unknown-clients - разрешить неизвестных клиентов

shared-network “net” {
# подсеть для известных клиентов
subnet 192.168.1.0 netmask 255.255.255.0
pool {
range 192.168.1.10 192.168.1.200;
option routers 192.168.1.2;
deny unknown-clients;
}
}
 
# подсеть для не известных клиентов
subnet 192.168.2.0 netmask 255.255.255.0
pool {
range 192.168.2.190 192.168.2.200;
allow unknown-clients;
}
}
}

В данном примере в подсети №1 мы запрещаем получать настройки неизвестным клиентам и разрешаем их работу в подсети №2.

IPv6

И так эта версия протокола накладывает свои ограничения на работу DHCP во-первых вы должны сконфигурировать свою сетевую карту на работу с IP6, во-вторых, создать отдельный конфигурационный файл dhcp6.conf, а в в-третьих, запустить отдельный демон для IP6. Небольшой FAQ.
Я пока пропущу данный раздел за ненадобностью мне.

Логи

Обязательно включим логгирование - без этого бывает очень тяжело разобраться в появившейся проблеме. Укажем демону syslogd, чтобы он записывал сообщения DHCP-сервера в лог /var/log/dhcpd.log. Необходимо добавить в /etc/syslog.conf строку:

# cat /etc/syslog.conf |grep dhcp
#local7.*                                        /var/log/dhcpd.log
!dhcpd
*.*                                             /var/log/dhcpd.log
 
# /etc/rc.d/syslogd restart

Создадим лог и дадим права для записи.

# touch /var/log/dhcpd.log
# chown dhcpd:dhcpd /var/log/dhcpd.log
# ll /var/log/dhcpd.log
-rw-r--r--  1 dhcpd  dhcpd     0B 22 апр 21:41 /var/log/dhcpd.log

FAQ

В: Где DHCP хранит списки выданных адресов?
О: У DHCP есть файл базы данных по арендуемым параметрам называемый dhcp.leases также демон периодически делает резервную копию этого файла dhcp.leases~. И при проблемах с основным файлом вы можете его заменить резервным.

Дополнительные материалы
Ссылки: 
DHCP | Internet Systems Consortium
wiki
RFC-2131
Переводы манов
Опция 82 DHCP
Ваша оценка: Нет Средняя: 5 (19 голосов)

Nginx+apache22+PHP 5.2+ffmpeg+flvtool2

Я подумал о создании социальной сети для своего родного города в которой можно смотреть ролики, создавать музыкальные альбомы, слушать музыку он-лайн и так далее. Для начала необходимо создать платформу для нее. С последующей установкой (в следующей статье будет рассмотрена его установка) socengine 3.20. Приступим к установке необходимого программного обеспечения для будущей работы socengine.

Содержание:

  • Подготовка
  • Установка Apache
  • Установка PHP
  • Мод mod_rpaf2
  • MySQL
  • Утилита ffmpeg
  • Дополнительные модули
  • Nginx и Apache
  • eAccelerator
  • Дополнительная настройка системы
  • Запуск

Подготовка

Обновляем исходные коды и порты встроенной утилитой csup, пользуясь статьей Локальное и удаленное обновление FreeBSD

Прежде чем ставить программы идем править make.conf для добавления необходимых флагов компиляции.

cat /etc/make.conf
NO_GAMES= true          # скажем нет играм на сервере
NO_INET6= true          # откажем сборке протокола IP6
 
WITHOUT_X11=yes         # без x11
NO_GUI=yes              #
NO_X11=yes              #
NO_X=yes                #
 
WITHOUT_CUPS=yes
 
# для MYSQL сервера
DEFAULT_MYSQL_VER=50
PORTSDIR?=      /usr/ports
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-server
WITH_CHARSET=utf8
WITH_COLLATION=utf8_bin
#WITH_LINUXTHREADS=yes
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
.endif
 
# для MYSQL клиента
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-client
WITH_CHARSET=utf8
WITH_COLLATION=utf8_bin
BUILD_OPTIMIZED=yes
.endif

Выберем кодировку для MYSQL UTF-8 тогда не будет проблем с кириллицей для любых установленных сайтов.

Установка Apache

cd /usr/ports/www/apache22 && make install clean

Опции сборки:

     THREADS=on "Enable threads support in APR"
     MYSQL=off "Enable MySQL support for apr-dbd"
     PGSQL=off "Enable PostgreSQL support for apr-dbd"
     SQLITE=off "Enable SQLite support for apr-dbd"
     IPV6=on "Enable IPv6 support"
     BDB=off "Enable BerkeleyDB dbm"
     AUTH_BASIC=on "Enable mod_auth_basic"
     AUTH_DIGEST=on "Enable mod_auth_digest"
     AUTHN_FILE=on "Enable mod_authn_file"
     AUTHN_DBD=off "Enable mod_authn_dbd"
     AUTHN_DBM=on "Enable mod_authn_dbm"
     AUTHN_ANON=on "Enable mod_authn_anon"
     AUTHN_DEFAULT=on "Enable mod_authn_default"
     AUTHN_ALIAS=on "Enable mod_authn_alias"
     AUTHZ_HOST=on "Enable mod_authz_host"
     AUTHZ_GROUPFILE=on "Enable mod_authz_groupfile"
     AUTHZ_USER=on "Enable mod_authz_user"
     AUTHZ_DBM=on "Enable mod_authz_dbm"
     AUTHZ_OWNER=on "Enable mod_authz_owner"
     AUTHZ_DEFAULT=on "Enable mod_authz_default"
     CACHE=on "Enable mod_cache"
     DISK_CACHE=on "Enable mod_disk_cache"
     FILE_CACHE=on "Enable mod_file_cache"
     MEM_CACHE=off "Enable mod_mem_cache"
     DAV=on "Enable mod_dav"
     DAV_FS=on "Enable mod_dav_fs"
     BUCKETEER=off "Enable mod_bucketeer"
     CASE_FILTER=off "Enable mod_case_filter"
     CASE_FILTER_IN=off "Enable mod_case_filter_in"
     EXT_FILTER=off "Enable mod_ext_filter"
     LOG_FORENSIC=off "Enable mod_log_forensic"
     OPTIONAL_HOOK_EXPORT=off "Enable mod_optional_hook_export"
     OPTIONAL_HOOK_IMPORT=off "Enable mod_optional_hook_import"
     OPTIONAL_FN_IMPORT=off "Enable mod_optional_fn_import"
     OPTIONAL_FN_EXPORT=off "Enable mod_optional_fn_export"
     LDAP=off "Enable mod_ldap"
     AUTHNZ_LDAP=off "Enable mod_authnz_ldap"
     ACTIONS=on "Enable mod_actions"
     ALIAS=on "Enable mod_alias"
     ASIS=on "Enable mod_asis"
     AUTOINDEX=on "Enable mod_autoindex"
     CERN_META=on "Enable mod_cern_meta"
     CGI=on "Enable mod_cgi"
     CHARSET_LITE=on "Enable mod_charset_lite"
     DBD=off "Enable mod_dbd"
     DEFLATE=on "Enable mod_deflate"
     DIR=on "Enable mod_dir"
     DUMPIO=on "Enable mod_dumpio"
     ENV=on "Enable mod_env"
     EXPIRES=on "Enable mod_expires"
     HEADERS=on "Enable mod_headers"
     IMAGEMAP=on "Enable mod_imagemap"
     INCLUDE=on "Enable mod_include"
     INFO=on "Enable mod_info"
     LOG_CONFIG=on "Enable mod_log_config"
     LOGIO=on "Enable mod_logio"
     MIME=on "Enable mod_mime"
     MIME_MAGIC=on "Enable mod_mime_magic"
     NEGOTIATION=on "Enable mod_negotiation"
     REWRITE=on "Enable mod_rewrite"
     SETENVIF=on "Enable mod_setenvif"
     SPELING=on "Enable mod_speling"
     STATUS=on "Enable mod_status"
     UNIQUE_ID=on "Enable mod_unique_id"
     USERDIR=on "Enable mod_userdir"
     USERTRACK=on "Enable mod_usertrack"
     VHOST_ALIAS=on "Enable mod_vhost_alias"
     FILTER=on "Enable mod_filter"
     VERSION=on "Enable mod_version"
     PROXY=on "Enable mod_proxy"
     PROXY_CONNECT=on "Enable mod_proxy_connect"
     PATCH_PROXY_CONNECT=on "Patch proxy_connect SSL support"
     PROXY_FTP=off "Enable mod_proxy_ftp"
     PROXY_HTTP=on "Enable mod_proxy_http"
     PROXY_AJP=off "Enable mod_proxy_ajp"
     PROXY_BALANCER=off "Enable mod_proxy_balancer"
     PROXY_SCGI=off "Enable mod_proxy_scgi"
     SSL=on "Enable mod_ssl"
     SUEXEC=on "Enable mod_suexec"
     SUEXEC_RSRCLIMIT=off "SuEXEC rlimits based on login class"
     REQTIMEOUT=on "Enable mod_reqtimeout"
     CGID=on "Enable mod_cgid"

Установка PHP

Сразу обращу внимание на то, что не стоит ставить версию php 5.3, так как при работе с socengine наблюдались глюки и я сам первый раз напоролся на эти грабли.

cd /usr/ports/lang/php52 && make install clean

Опции сборки:

     CLI=on "Build CLI version"
     CGI=on "Build CGI version"
     APACHE=on "Build Apache module"
     DEBUG=off "Enable debug"
     SUHOSIN=on "Enable Suhosin protection system (not for jails)"
     MULTIBYTE=off "Enable zend multibyte support"
     IPV6=on "Enable ipv6 support"
     MAILHEAD=off "Enable mail header patch"
     REDIRECT=off "Enable force-cgi-redirect support (CGI only)"
     DISCARD=off "Enable discard-path support (CGI only)"
     FASTCGI=on "Enable fastcgi support (CGI only)"
     FPM=off "Enable fastcgi process manager (CGI only)"
     PATHINFO=on "Enable path-info-check support (CGI only)"

Установка PHP-extensions

Установим необходимые модули php-extensions:

cd /usr/ports/lang/php52-extensions && make install clean

Опции сборки:

     BCMATH=off "bc style precision math functions"
     BZ2=on "bzip2 library support"
     CALENDAR=off "calendar conversion support"
     CTYPE=on "ctype functions"
     CURL=on "CURL support"
     DBA=on "dba support"
     DBASE=off "dBase library support"
     DOM=on "DOM support"
     EXIF=on "EXIF support"
     FILEINFO=on "fileinfo support"
     FILTER=on "input filter support"
     FRIBIDI=on "FriBidi support"
     FTP=on "FTP support"
     GD=on "GD library support"
     GETTEXT=on "gettext library support"
     GMP=off "GNU MP support"
     HASH=on "HASH Message Digest Framework"
     ICONV=on "iconv support"
     IMAP=on "IMAP support"
     INTERBASE=off "Interbase 6 database support (Firebird)"
     JSON=on "JavaScript Object Serialization support"
     LDAP=off "OpenLDAP support"
     MBSTRING=on "multibyte string support"
     MCRYPT=on "Encryption support"
     MHASH=on "Crypto-hashing support"
     MING=off "ming shockwave flash support"
     MSSQL=on "MS-SQL database support"
     MYSQL=on "MySQL database support"
     MYSQLI=off "MySQLi database support"
     NCURSES=off "ncurses support (CLI only)"
     ODBC=off "unixODBC support"
     OPENSSL=on "OpenSSL support"
     PCNTL=off "pcntl support (CLI only)"
     PCRE=on "Perl Compatible Regular Expression support"
     PDF=on "PDFlib support (implies GD)"
     PDO=on "PHP Data Objects Interface (PDO)"
     PDO_SQLITE=on "PDO sqlite driver"
     PDO_MYSQL=on "PDO mysql driver"
     PGSQL=off "PostgreSQL database support"
     POSIX=on "POSIX-like functions"
     PSPELL=off "pspell support"
     READLINE=off "readline support (CLI only)"
     RECODE=off "recode support"
     SESSION=on "session support"
     SHMOP=on "shmop support"
     SIMPLEXML=on "simplexml support"
     SNMP=off "SNMP support"
     SOAP=on "SOAP support"
     SOCKETS=on "sockets support"
     SPL=on "Standard PHP Library"
     SQLITE=on "sqlite support"
     SYBASE_CT=off "Sybase database support"
     SYSVMSG=off "System V message support"
     SYSVSEM=off "System V semaphore support"
     SYSVSHM=off "System V shared memory support"
     TIDY=off "TIDY support"
     TOKENIZER=on "tokenizer support"
     WDDX=off "WDDX support (implies XML)"
     XML=on "XML support"
     XMLREADER=on "XMLReader support"
     XMLRPC=on "XMLRPC-EPI support"
     XMLWRITER=on "XMLWriter support"
     XSL=off "XSL support (Implies DOM)"
     YAZ=on "YAZ support (ANSI/NISO Z39.50)"
     ZIP=on "ZIP support"
     ZLIB=on "ZLIB support"

Мод mod_rpaf2

Соберем данный модуль.

/usr/ports/www/mod_rpaf2 && make install clean

MySQL

Установим и настроим MYSQL:

/usr/ports/databases/mysql50-server && make install clean

Настроим MYSQL и изменим пароль суперпользователя.

/usr/local/bin/mysql_install_db
chown -R mysql /var/db/mysql/
cp /usr/local/share/mysql/my-large.cnf  /usr/local/etc/my.cnf
/usr/local/etc/rc.d/mysql-server onestart
/usr/local/bin/mysqladmin -u root password 'новый пароль'

Изменим конфигурационный файл MYSQL:

# The following options will be passed to all MySQL clients
[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock
 
# The MySQL server
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-locking
key_buffer = 256M
max_allowed_packet = 1M
table_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 2
 
skip-federated
log-bin=mysql-bin
server-id       = 1
 
[mysqldump]
quick
max_allowed_packet = 16M
 
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
 
[isamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
 
[myisamchk]
key_buffer = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
 
[mysqlhotcopy]
interactive-timeout

Утилита ffmpeg

Установим саму утилиту для обработки видео ffmpeg, но тут появились проблемы.

cd /usr/ports/multimedia/ffmpeg

Версия в портах:

Port:   ffmpeg-0.6_3,1
Path:   /usr/ports/multimedia/ffmpeg
Info:   Realtime audio/video encoder/converter and streaming server
Maint:  _mm@FreeBSD.org
B-deps: binutils-2.20.1_3 damageproto-1.2.0 dri2proto-2.2..
WWW:    _http://ffmpeg.mplayerhq.hu/

Эта версия у меня не все форматы кодировала, может быть из-за того что ключи при конвертировании поменялись, может надо было лезть в код и править что то, но я поступил иначе :) Откатываемся на стабильную и рабочую версию ffmpeg при помощи утилиты portdowngrade.

/usr/ports/ports-mgmt/portdowngrade
make DEFAULT_CVS_SERVER="anoncvs@anoncvs1.FreeBSD.org:/home/ncvs" install clean

После установки portdowngrade откатываем нам нужный порт на нужную версию

cd /usr/ports
portdowngrade multimedia/ffmpeg
 
portdowngrade 0.6 by Heiner Eichmann
Please note, that nothing is changed in the ports tree
unless it is explicitly permitted in step 6!
 
Seeking port multimedia/ffmpeg ...
 
Found several matches:
1: multimedia/ffmpeg
2: multimedia/ffmpeg-devel
3: multimedia/ffmpeg2theora
4: multimedia/ffmpegthumbnailer
 
Please choose one: 1
 
Downgrading port: multimedia/ffmpeg
 
Step 1: Checking out port from CVS repository
CVS root directory: anoncvs@anoncvs1.FreeBSD.org:/home/ncvs
 
Step 2: Reading the port history from the CVS repository
 
Step 3: Analyzing the port history from the CVS repository
Step 4: Load port version numbers and present results
Keys: <space> : next page                      d : details
            p : previous page
      <enter> : leave presentation and downdgrade if wanted
===============================
number         date         portversion  comment
    1  2010/08/01 20:41:25  0.6_3        - Fix architecture recognition [1]
    2  2010/07/27 18:53:42  0.6_2        Add VP8 codec support via libvpx and enable by default
    3  2010/07/25 16:18:15  0.6_1        Add missing files to PORTDOCS
    4  2010/07/24 16:38:14  0.6          - Update ffmpeg to 0.6
    5  2010/07/24 15:30:14  0.5.2_3      - Update x264 to 20100624 (build 98)
    6  2010/06/09 16:38:59  0.5.2_2      - Support SSSE3 by default
    7  2010/06/09 16:24:45  0.5.2_2      - Fix CFLAGS
    8  2010/06/06 20:43:54  0.5.2_1      Bump PORTREVISION for ports that depend on libogg, directly or indirectly
    9  2010/05/30 09:17:59  0.5.2        - Update to 0.5.2
   10  2010/04/21 12:56:46  0.5.1_3      - Update x264 to shared library version 85
   11  2010/04/18 20:41:52  0.5.1_2      - Add ssse3 support to OPTIONS
   12  2010/04/18 12:07:45  0.5.1_2      - Fix mmx/sse support in amd64 package [1]
   13  2010/03/27 00:13:31  0.5.1_1      Begin the process of deprecating sysutils/rc_subr by
   14  2010/03/24 18:44:18  0.5.1_1      - Update schroedinger to 1.0.9
   15  2010/03/10 14:03:01  0.5.1        - Fix configure option if building WITH_FAAC
   16  2010/03/10 11:00:00  0.5.1        - Update to 0.5.1
   17  2010/01/19 11:24:04  0.5_2        - Unbreak build if recent multimedia/v4l-compat is installed
   18  2009/12/31 11:15:30  0.5_2        - Move x11grab to OPTIONS as this requires x11, disable by default
   19  2009/10/16 11:24:04  0.5_1        - fix VUPEN/ADV-2009-2678
   20  2009/08/12 10:30:16  0.5          - Add ffmpeg-devel to CONFLICTS
   21  2009/08/12 08:43:17  0.5          - Update ffmpeg to 0.5
   22  2009/07/06 21:25:53  unknown      Bump PORTREVISION after libogg and libvorbisfile major version increment.
   23  2009/03/31 13:58:16  unknown      - Update x264 to 0.0.20081218
   24  2009/03/24 16:58:56  unknown      - Add MAKE_JOBS_SAFE to support SMP compilation
   25  2009/03/16 19:38:08  unknown      - Fix 4xm Processing Memory Corruption Vulnerability
   26  2009/02/21 15:51:14  unknown      - Chase audio/faad shlib bump
   27  2008/09/07 03:31:58  unknown      Force ffserver in to the background.
   28  2008/09/05 15:20:46  unknown      - Fix OPTIMIZED_CFLAGS option on gcc 4.2 (at least): explicitly disable
   29  2008/08/17 02:58:21  unknown      Fix build when ARH_NV or ARM_WB is defined
   30  2008/08/14 22:08:02  unknown      Enable the img_resample (old) code even if ffmpeg is built with libswscale
   31  2008/08/11 04:33:45  unknown      Append -I${includedir}/ffmpeg on to the Cflags in the pkg-config files.
   32  2008/08/11 02:41:45  unknown      Fix the plist after the recent commit.
   33  2008/08/10 19:46:42  unknown      Build libswscale by default once again.  I could not reproduce any problems
   34  2008/08/05 03:02:39  unknown      Fix compat headers installation, bump the PORTREVISION.
   35  2008/07/28 21:17:38  unknown      Install all the ffmpeg headers in a compat location to fix build of many ports
   36  2008/07/27 23:51:20  unknown      Update to 2008-07-27 snapshot
   37  2008/04/27 10:22:56  unknown      - move knobs into OPTIONS, make (almost) everything selectable
Total lines: 124. Command:
Enter version number to change port to (0: exit): 5
 
 
Step 5: Checking out choosen date of the port from the CVS repository
 
Step 6: Modifying the port
Port: multimedia/ffmpeg
at : 2010/07/24 15:30:14
Type 'yes' to bring the port to the state of the date above
or 'no' to exit without changing anything. Note, that this only changes
the port, not the installed software! yes or no:yes
 
The port has been set to the selected version. Install it if you wish.
If you have portupgrade installed, you should run
 
portsdb -Uu
 
now, to see the changes in the ports database. In any case
 
portupgrade -f ffmpeg
 
will install the changed port. Note: if you run cvsup, the port
is changed back to the choosen label!

Проверим что получилось:

PORTNAME=       ffmpeg
PORTVERSION=    0.5.2
PORTREVISION=   3

Установим нужный порт:

cd /usr/ports/multimedia/ffmpeg && make install clean

Опции сборки:

     AMR_NB=off "AMR Narrow Band encoder"
     AMR_WB=off "AMR Wide Band encoder"
     DIRAC=off "Dirac codec via libdirac"
     FAAC=on "FAAC mp4/aac audio encoder"
     FAAD=on "FAAD mp4/aac audio decoder"
     FFSERVER=on "Build and install ffserver"
     GSM=off "GSM audio codec"
     IPV6=on "IPV6 network support"
     LAME=on "LAME MP3 encoder"
     OPENJPEG=on "JPEG 2000 decoder"
     OPTIMIZED_CFLAGS=on "Additional optimizations"
     SCHROEDINGER=on "Dirac codec via libschroedinger"
     SDL=off "SDL support (build ffplay)"
     SPEEX=off "Speex audio decoder"
     SSSE3=on "Enable ssse3 support"
     THEORA=on "Theora encoder (implies OGG)"
     VHOOK=off "Video hook support"
     VORBIS=on "Vorbis encoder via libvorbis (implies OGG)"
     X11GRAB=off "enable X11 grabbing"
     X264=on "H.264 encoder"
     XVID=on "Xvid encoder via xvidcore"

Будьте особо внимательны при выборе опций, не стоит спешить, тогда все будет работать корректно.

Дополнительные модули

Установим модуль php-ffmpeg.

cd /usr/ports/graphics/php5-ffmpeg && make install clean

И утилиту flvtool2, которая будет заниматься созданием превью и записью метаданных видео.

cd /usr/ports/multimedia/ruby-flvtool2 && make install clean

Ставим memcached.

cd /usr/ports/databases/memcached && make install clean

Устанавливаем расширение pecl-memcache.

cd /usr/ports/databases/pecl-memcache && make install clean

Nginx и Apache

Установим Nginx:

cd /usr/ports/www/nginx-devel && make install clean

Опции сборки:

     DEBUG=off "Enable nginx debugging"
     DEBUGLOG=off "Enable debug log (--with-debug)"
     FILE_AIO=off "Enable file aio"
     IPV6=off "Enable IPv6"
     GOOGLE_PERFTOOLS=off "Enable google perftools module"
     HTTP_MODULE=on "Enable HTTP module"
     HTTP_ADDITION_MODULE=on "Enable http_addition module"
     HTTP_CACHE_MODULE=on "Enable http_cache module"
     HTTP_DAV_MODULE=off "Enable http_webdav module"
     HTTP_FLV_MODULE=on "Enable http_flv module"
     HTTP_GEOIP_MODULE=off "Enable http_geoip module"
     HTTP_GZIP_STATIC_MODULE=on "Enable http_gzip_static module"
     HTTP_IMAGE_FILTER_MODULE=on "Enable http_image_filter module"
     HTTP_PERL_MODULE=on "Enable http_perl module"
     HTTP_RANDOM_INDEX_MODULE=on "Enable http_random_index module"
     HTTP_REALIP_MODULE=on "Enable http_realip module"
     HTTP_REWRITE_MODULE=on "Enable http_rewrite module"
     HTTP_SECURE_LINK_MODULE=off "Enable http_secure_link module"
     HTTP_SSL_MODULE=on "Enable http_ssl module"
     HTTP_STATUS_MODULE=on "Enable http_stub_status module"
     HTTP_SUB_MODULE=on "Enable http_sub module"
     HTTP_XSLT_MODULE=off "Enable http_xslt module"
     MAIL_MODULE=on "Enable IMAP4/POP3/SMTP proxy module"
     MAIL_IMAP_MODULE=on "Enable IMAP4 proxy module"
     MAIL_POP3_MODULE=on "Enable POP3 proxy module"
     MAIL_SMTP_MODULE=on "Enable SMTP proxy module"
     MAIL_SSL_MODULE=on "Enable mail_ssl module"
     WWW=on "Enable html sample files"
     CACHE_PURGE_MODULE=on "3rd party cache_purge module"
     ECHO_MODULE=on "3rd party echo module"
     HEADERS_MORE_MODULE=off "3rd party headers_more module"
     HTTP_ACCEPT_LANGUAGE=on "3rd party accept_language module"
     HTTP_ACCESSKEY_MODULE=off "3rd party http_accesskey module"
     HTTP_AUTH_PAM_MODULE=off "3rd party http_auth_pam module"
     HTTP_AUTH_REQ_MODULE=on "3rd party http_auth_request module"
     HTTP_EVAL_MODULE=off "3rd party eval module"
     HTTP_FANCYINDEX_MODULE=on "3rd party http_fancyindex module"
     HTTP_GUNZIP_FILTER=on "3rd party http_gunzip_filter module"
     HTTP_MOGILEFS_MODULE=off "3rd party mogilefs module"
     HTTP_MP4_H264_MODULE=on "3rd party mp4/h264 module"
     HTTP_NOTICE_MODULE=on "3rd party notice module"
     HTTP_PUSH_MODULE=on "3rd party push module"
     HTTP_REDIS_MODULE=off "3rd party http_redis module"
     HTTP_RESPONSE_MODULE=on "3rd party http_response module"
     HTTP_UPLOAD_MODULE=on "3rd party upload module"
     HTTP_UPLOAD_PROGRESS=on "3rd party uploadprogress module"
     HTTP_UPSTREAM_FAIR=on "3rd party upstream fair module"
     HTTP_UPSTREAM_HASH=on "3rd party upstream hash module"
     HTTP_UPSTREAM_KEEPALIVE=on "3rd party upstream keepalive module"
     HTTP_ZIP_MODULE=on "3rd party http_zip module"
     MEMC_MODULE=on "3rd party memc (memcached) module"
     PASSENGER_MODULE=off "3rd party passenger module"
     SLOWFS_CACHE_MODULE=on "3rd party slowfs_cache module"
     SUPERVISORD_MODULE=off "3rd party supervisord module"
     UDPLOG_MODULE=off "3rd party udplog (syslog) module"

Итак , приступим к настройке связки nginx+apache. Принцип работы такой:

Настроим конфигурационный файл апача и приведем его к такому виду:

ee /usr/local/etc/apache22/httpd.conf
Listen 88 # меняем порт , который будет слушать апач
 
#<Directory />  # Эту секцию закомментируем
#    AllowOverride None
#    Order deny,allow
#    Deny from all
#</Directory>
 
<IfModule dir_module>
    DirectoryIndex index.html index.php # добавляем тип расширения
</IfModule>
LoadModule rpaf_module        libexec/apache22/mod_rpaf.so # После установки, строка закомментирована. 
Include etc/apache22/extra/httpd-vhosts.conf # расскоментируем для виртуальных хостов
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1 IP сервера
RPAFheader X-Forwarded-For
 
AddType application/x-httpd-php .php## включаем php
AddType application/x-httpd-php-source .phps

Идем настраивать виртульный хост

ee /usr/local/etc/apache22/extra/httpd-vhosts.conf

Меняем в конфигурационном файле

NameVirtualHost 127.0.0.1:88
<VirtualHost 127.0.0.1:88>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/usr/local/www/domain"
    ServerName domain
    ServerAlias _www.domain
    ErrorLog "/var/log/domain-error_log"
    CustomLog "/var/log/domain-access_log" common
</VirtualHost>

На этом настройка закончена. Далее будем настраивать Nginx.
Внесем основные параметры, а виртуальные хосты вынесем в другую директорию, например vhosts.

mkdir /usr/local/etc/nginx/vhosts 
ee /usr/local/etc/nginx/nginx.conf

nginx.conf

# пользователь от кого запущен nginx
user  www www; 
# количество воркеров как и количество ядер
worker_processes 2;
worker_priority -5;
worker_rlimit_nofile 51200;
 
error_log  logs/error.log info;
 
#pid        logs/nginx.pid;
 
events {
# число одновременных коннектов
    worker_connections  2000;
}
 
http {
    include       mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] $status '
                      '"$request" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "http_x_forwarded_for"';
 
    access_log  logs/access.log  main;
 
sendfile on;
tcp_nopush on;
tcp_nodelay on;
send_lowat 12000;
 
client_header_timeout  3m;
client_body_timeout    3m;
send_timeout           3m;
keepalive_timeout  65;
client_header_buffer_size    1k;
large_client_header_buffers  4 4k;
 
output_buffers   4 32k;
 
#Compressing
gzip on;
proxy_send_timeout   90;
proxy_read_timeout   90;
proxy_buffer_size    8k;
proxy_buffers     16 64k;
proxy_buffering on;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 10m;
#proxy_connect_timeout 120s;
proxy_redirect     off;
 
 
include  vhosts/*.conf;

Идем в vhosts и создаем конфигурационный файл для виртуалхоста:

cd vhosts
vi domain.conf

Пример моей конфигурации:

server {
        listen       80;
        server_name  domain.org _www.domain.org;
 
        access_log  logs/domain.org.access.log  main;
        open_file_cache             max=100000 inactive=40s;
        open_file_cache_valid       60s;
        open_file_cache_min_uses    2;
        open_file_cache_errors      on;
 
        # Main location
        location / {
            proxy_pass         _http://127.0.0.1:88/;
            proxy_redirect     off;
 
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 
            client_max_body_size       1000m;
            client_body_buffer_size    128k;
 
            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
 
            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 10m;
        }
## Эта директива отвечает за отдачу стриминга видео
        location ~ \.flv$ {
        flv;
        }
        # То что отдаем обрабатывать nginx, все что не попало , отдает апач
        location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|flv|rtf|js|swf|iso)$ {
            root   /usr/local/www/domain;
        }
 
    }

eAccelerator

Ставим ускоритель.

cd /usr/ports/www/eaccelerator && make install clean

Cоздаем директорию для кеша и назначаем права

root# mkdir /var/eaccelerator
root# chown www:www /var/eaccelerator
root# chmod 0700 /var/eaccelerator

Вносим изменения в php.ini

cd /usr/local/etc
cp php.ini-dist php.ini
vi php.ini 

И вносим параметры для включения модуля:

zend_extension="/usr/local/lib/php/20060613/eaccelerator.so"
eaccelerator.enable="1"
eaccelerator.shm_size="128"
eaccelerator.cache_dir="/var/eaccelerator"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

Дополнительная настройка системы

Приступаем к дополнительной настройки нашего сервера, идем править rc.conf для внесения нужных нам записей:

apache22_enable="YES"
accf_http_load="YES"
mysql_enable="YES"
memcached_enable="YES"
memcached_flags="-l 127.0.0.1"
nginx_enable="YES"

Настроим sysctl.conf

kern.sync_on_panic=1
kern.coredump=0
security.bsd.conservative_signals=1
security.bsd.unprivileged_proc_debug=0
security.bsd.unprivileged_read_msgbuf=0
security.bsd.unprivileged_get_quota=0
kern.ipc.shmmax=134217728
kern.ipc.shmall=32768
kern.ipc.semmap=256
kern.ipc.nmbclusters=262144
#########
kern.ipc.somaxconn=4096
 
# Shared memory // 7.2+ can use shared memory > 2Gb
kern.ipc.shmmax=2147483648
# Sockets
kern.ipc.maxsockets=204800
# Do not use lager sockbufs on 8.0
# ( _http://old.nabble.com/Significant-performance-regression-for-increased-maxsockbuf-on-8.0-RELEASE-tt26745981.html#a26745981 )
kern.ipc.maxsockbuf=262144
# Every socket is a file, so increase them
kern.maxfiles=204800
kern.maxfilesperproc=200000
kern.maxvnodes=200000
# Small send space is useful for http servers that serve small files
# Autotuned since 7.x
#net.inet.tcp.sendspace=16384
 
# Increase portrange
# For outgoing connections only. Good for seed-boxes and ftp servers.
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65535
# Security
net.inet.ip.redirect=0
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
net.inet.icmp.maskrepl=0
net.inet.icmp.log_redirect=0
net.inet.icmp.drop_redirect=1
net.inet.tcp.drop_synfin=1
# Security
net.inet.udp.blackhole=1
net.inet.tcp.blackhole=2
# Increases default TTL, sometimes useful
# Default is 64
net.inet.ip.ttl=128
# Lessen max segment life to conserve resources
# ACK waiting time in miliseconds (default: 30000 from RFC)
net.inet.tcp.msl=5000
# Max bumber of timewait sockets
net.inet.tcp.maxtcptw=200000
# Should be increased when you have A LOT of files on server
# (Increase until vfs.ufs.dirhash_mem becomes lower)
vfs.ufs.dirhash_maxmem=67108864
 
# Note from commit _http://svn.freebsd.org/base/head@211031 :
# For systems with RAID volumes and/or virtualization envirnments, where
# read performance is very important, increasing this sysctl tunable to 32
# or even more will demonstratively yield additional performance benefits.
vfs.read_max=32

Запуск

Запускаем сервисы

/usr/local/etc/rc.d/apache22 start
/usr/local/etc/rc.d/nginx start
/usr/local/etc/rc.d/memcached start

Проверяем запустились ли корректно сервисы:
httpd:

ps ax | grep httpd
45476  ??  Ss     0:01.72 /usr/local/sbin/httpd -DNOHTTPACCEPT
45477  ??  I      0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
45478  ??  I      1:57.17 /usr/local/sbin/httpd -DNOHTTPACCEPT
45479  ??  S      0:58.02 /usr/local/sbin/httpd -DNOHTTPACCEPT
45480  ??  I      1:20.96 /usr/local/sbin/httpd -DNOHTTPACCEPT
45481  ??  I      0:41.50 /usr/local/sbin/httpd -DNOHTTPACCEPT
45482  ??  I      0:52.08 /usr/local/sbin/httpd -DNOHTTPACCEPT
45483  ??  S      1:06.11 /usr/local/sbin/httpd -DNOHTTPACCEPT
45496  ??  I      0:28.35 /usr/local/sbin/httpd -DNOHTTPACCEPT
51859  ??  I      0:24.14 /usr/local/sbin/httpd -DNOHTTPACCEPT
55619   0  R+     0:00.00 grep httpd

nginx:

ps ax | grep nginx
51854  ??  Is     0:00.00 nginx: master process /usr/local/sbin/nginx
51855  ??  S<     0:05.98 nginx: worker process (nginx)
51856  ??  S<     0:03.93 nginx: worker process (nginx)
55628   0  R+     0:00.00 grep nginx

ps ax | grep memcached
 1121  ??  Is     0:02.31 /usr/local/bin/memcached -l 127.0.0.1 -d -u nobody
55630   0  RL+    0:00.00 grep memcached

В директории сайта создаем файл phpinfo.php и проверяем, работает ли php и загрузились ли все необходимые модули.

<?php
phpinfo();
?>

Если что то не так или не запустилось то, смотрим логи.

Установку ФТП сервера описывать не буду, у каждого свой вкус.
Вот вариант настройки Pure-FTPd+MySQL+Web

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

Redmine - управление проектами (Apache)

Redmine — открытое серверное веб-приложение для управления проектами и отслеживания ошибок. Redmine написан Ruby и представляет собой приложение на основе широко известного веб-фреймворка Ruby on Rails.

Данный продукт предоставляет следующие возможности:

  • ведение нескольких проектов;
  • гибкая система доступа, основанная на ролях;
  • система отслеживания ошибок;
  • диаграммы Ганта и календарь;
  • ведение новостей проекта, документов и управление файлами;
  • оповещение об изменениях с помощью RSS-потоков и электронной почты;
  • вики для каждого проекта;
  • форумы для каждого проекта;
  • учёт временных затрат;
  • настраиваемые произвольные поля для инцидентов, временных затрат, проектов и пользователей;
  • лёгкая интеграция с репозиториями (SVN, CVS, Git, Mercurial, Bazaar и Darcs);
  • создание записей об ошибках на основе полученных писем;
  • поддержка множественной аутентификации LDAP;
  • возможность самостоятельной регистрации новых пользователей;
  • многоязыковой интерфейс (в том числе русский);
  • поддержка СУБД MySQL, PostgreSQL, SQLite, Oracle.

Содержание:

  • Введение
  • Установка Redmine
  • Настройка MYSQL
  • Настройка Ruby
  • Настройка Apache
  • Настройка Redmine
    • Запуск
    • Настройка SMTP сервера
    • Настройка Хранилища
  • Обновление
  • Описание
  • FAQ

Введение

Я буду устанавливать на "голую" FreeBSD 8.0 i386 и поэтому у меня будет больше запросов по установке, а у вас соответственно меньше.

Установка Redmine

Установим классически из портов:

# cd /usr/ports/
bsd# make search name=Redmine
Port:   redmine-0.9.1
Path:   /usr/ports/www/redmine
Info:   A flexible project management web application
Maint:  decke@bluelife.at
B-deps: libiconv-1.13.1 ruby-1.8.7.248,1 ...
R-deps: libiconv-1.13.1 mysql-client-5.0.89 ...
WWW:    _http://www.redmine.org/
 
Port:   redmine-basecamp-20091116
Path:   /usr/ports/www/redmine-basecamp
Info:   Basecamp Theme for Redmine
Maint:  decke@bluelife.at
B-deps:
R-deps: libiconv-1.13.1 mysql-client-5.0.89 ...
WWW:    _http://www.redmine.org/wiki/redmine/ThemeBasecamp
 
# cd /usr/ports/www/redmine && make install clean
 
~~
Options for redmine 0.9.1
 
[X] MYSQL       Enable MySQL Support
[ ] POSTGRESQL  Enable PostgreSQL Support
 
~~
Options for ruby 1.8.7.248,1
 
[ ] ONIGURUMA  Build with oniguruma regular expressions lib
[ ] IPV6       Enable IPv6 support
[X] RDOC       Build and install Rdoc indexes
[ ] DEBUG      Compile-in debug info
 
~~~
 Options for perl 5.8.9_3
 
[ ] DEBUGGING      Build with debugging support
[ ] GDBM           Build GDBM_File extension
[X] PERL_MALLOC    Use Perl malloc
[X] PERL_64BITINT  Use 64 bit integers (on i386)
[ ] THREADS        Build threaded perl
[ ] SUIDPERL       Build set-user-id suidperl binary
[ ] SITECUSTOMIZE  Run-time customization of @INC
[X] USE_PERL       Rewrite links in /usr/bin
 
~~~
Options for m4 1.4.13,1
 
[ ] LIBSIGSEGV  Use libsigsegv for better diagnostics 
 
~~~
Options for libiconv 1.13.1
 
[X] EXTRA_ENCODINGS  Include extra character sets
[ ] EXTRA_PATCHES    Apply patches to fix CP932 add EUCJP-MS
 
~~
=============================================================================
 
Redmine was installed.
 
You now need to setup your Redmine installation so
please have a look at the Installation Guide.
 
_http://www.redmine.org/wiki/redmine/RedmineInstall
 
 
If you are upgrading please read the Upgrading Guide
before starting the new version.
 
_http://www.redmine.org/wiki/redmine/RedmineUpgrade
 
=============================================================================
===>   Registering installation for redmine-0.9.1
===>  Cleaning for ruby-1.8.7.248,1
===>  Cleaning for ruby18-iconv-1.8.7.248,1
===>  Cleaning for rubygem-rake-0.8.7
===>  Cleaning for ruby18-mysql-2.8.1
===>  Cleaning for automake-1.10.1
===>  Cleaning for autoconf-2.62
===>  Cleaning for libiconv-1.13.1
===>  Cleaning for ruby18-gems-1.3.5
===>  Cleaning for mysql-client-5.0.89
===>  Cleaning for perl-5.8.9_3
===>  Cleaning for automake-wrapper-20071109
===>  Cleaning for m4-1.4.13,1
===>  Cleaning for help2man-1.37.1
===>  Cleaning for gmake-3.81_3
===>  Cleaning for autoconf-wrapper-20071109
===>  Cleaning for libtool-2.2.6b
===>  Cleaning for p5-gettext-1.05_2
===>  Cleaning for gettext-0.17_1
===>  Cleaning for redmine-0.9.1

Настройка MYSQL

Создадим пустую БД и пользователя для работы с ней.

# mysql -h localhost --user=admin--password=XXXXX
mysql>create database redmine_project character set utf8;
mysql>create user 'redmine_project'@'localhost' identified by 'my_password';
mysql>grant all privileges on redmine_project.* to 'redmine_project'@'localhost';
mysql>exit;
Bye

Скопируем и изменим конфигурационный файл работы с БД config/database.yml.example в config/database.yml в соответствие с вашими параметрами.

# cd /usr/local/www/redmine/config/
# cp database.yml.example database.yml
# chmod u+w database.yml
# vi database.yml
 
production:
  adapter: mysql
  database: redmine_project
  host: localhost
  username: redmine_project
  password: my_password
  encoding: utf8

Настройка Ruby

Установим необходимые элементы Ruby:

Port:   rubygem-rails-2.3.4
Path:   /usr/ports/www/rubygem-rails
Info:   MVC web application framework
Maint:  pgollucci@FreeBSD.org
B-deps: libiconv-1.13.1 ruby-1.8.7.248,1 ...
R-deps: libiconv-1.13.1 ruby-1.8.7.248,1 ...
WWW:    _http://www.rubyonrails.org/
 
# cd /usr/ports/www/rubygem-rails && make install clean
 
Options for rubygem-rails 2.3.4
 
[X] FCGI             FastCGI support
[ ] MEMCACHE_CLIENT  MemCache-Client support
 
~~~
Options for rubygem-activerecord 2.3.4_1
 
[X] NATIVE_MYSQL       Use native MySQL bindings
[ ] NATIVE_POSTGRESQL  Use native PostgreSQL bindings
[ ] NATIVE_SQLITE3     Use native SQLite3 bindings
 
~~
===>  Cleaning for rubygem-activesupport-2.3.4_1
===>  Cleaning for rubygem-activerecord-2.3.4_1
===>  Cleaning for rubygem-actionpack-2.3.4
===>  Cleaning for rubygem-actionmailer-2.3.4
===>  Cleaning for rubygem-activeresource-2.3.4
===>  Cleaning for ruby18-fcgi-0.8.7
===>  Cleaning for rubygem-rack-1.0.1,1
===>  Cleaning for fcgi-devkit-2.4.0
===>  Cleaning for rubygem-rails-2.3.4

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

# make search name=passenger
Port:   rubygem-passenger-2.2.8
Path:   /usr/ports/www/rubygem-passenger
Info:   Modules for running Ruby on Rails and Rack applications
Maint:  jatzen@gmail.com
B-deps: apache-2.2.14_5 ...
R-deps: apache-2.2.14_5 ...
WWW:    _http://www.modrails.com/
 
# cd /usr/ports/www/rubygem-passenger
# make install clean
===>  rubygem-passenger-2.2.8 : Error from bsd.apache.mk. apache20
 is installed (or APACHE_PORT is defined) and port requires 2.2+.
*** Error code 1
 
Stop in /usr/ports/www/rubygem-passenger.
 
# vi Makefile
USE_APACHE=     2.0+ # 2.2+ > 2.0+
 
# make install clean
Options for rubygem-passenger 2.2.8
 
[X] APACHEPORT  Use apache22
[ ] NGINXPORT   Use nginx
~~
===>   Registering installation for rubygem-passenger-2.2.8
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.8/lib/native_support.so
/usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.8/ext/
apache2/mod_passenger.so
/usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.8/ext/
apache2/ApplicationPoolServerExecutable
/usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.8/
ext/phusion_passenger/native_support.so
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
_http://www.modrails.com/
===>  Cleaning for rubygem-passenger-2.2.8

Настройка Apache

У меня установлен и настроен Apache-2.0.63 с mod_fastcgi-2.4.6

В конфигурацию Apache добавим следующий модуль:

# vi /usr/local/etc/apache2/httpd.conf
LoadModule passenger_module /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.8/
ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.8/gems/passenger-2.2.8

Виртуальный хост рисуем примерно так:

<VirtualHost *:80>
        Alias           /php-fcgi/      /usr/local/etc/fcgi_conf/Raven2000/
        ScriptAlias     /cgi-bin/       "/home/Raven2000/www/data/cgi-bin/"
        ServerAdmin     admin@test.site.local
        SuexecUserGroup Raven2000        Raven2000
        #DocumentRoot    /usr/home/Raven2000/www/data/redmine/public
        DocumentRoot    /usr/local/www/redmine/public
        ServerName      test.site.local
        ServerAlias
        <Directory /usr/local/www/redmine/public/>
                Options         Indexes FollowSymLinks MultiViews
                AllowOverride   All
                Order           deny,allow
                Allow           from all
        </Directory>
        DirectoryIndex  index.php index.html index.htm
        AddType         application/x-httpd-php .php
      ErrorLog        /home/Raven2000/www/log/test.site.local.error.log
      CustomLog       /home/Raven2000/www/log/test.site.local.access.log combined
</VirtualHost>

Настройка Redmine

Redmine хранит данные сессии в куках по умолчанию, который требует секрета и мы его создадим. Это можно сделать командой:

# cd /usr/local/www/redmine
# rake generate_session_store
(in /usr/local/www/redmine)

Для создания структуры базы данных, выполните следующую команду в каталоге Redmine.:

# rake db:migrate RAILS_ENV="production"
(in /usr/local/www/redmine)
~~~~
-- change_column(:wiki_content_versions, :data, :binary, {:limit=>16777216})
   -> 0.0095s
==  ChangeWikiContentsTextLimit: migrated (0.0203s) ===========================

Добавим дополнительные данные конфигурации (по умолчанию) в базу данных, выполнив следующую команду:
# rake redmine:load_default_data RAILS_ENV="production"
(in /usr/local/www/redmine)
 
Select language: bg, bs, ca, cs, da, de, el, en, es, fi, fr, gl, he, hr, hu, id,
it, ja, ko, lt, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sv, th, tr, uk, vi,
zh, zh-TW [en] ru
====================================
Default configuration data loaded.

Укажем Redmine, что нужно использовать php-fcgi.

# cd /usr/local/www/redmine/public/
# cp dispatch.fcgi.example dispatch.fcgi

Запуск

Проверим правильность установки встроенного WEBrick веб-сервера:

# ruby script/server webrick -e production
=> Booting WEBrick
=> Rails 2.3.5 application starting on _http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2010-02-04 12:03:29] INFO  WEBrick 1.3.1
[2010-02-04 12:03:29] INFO  ruby 1.8.7 (2009-12-24) [i386-freebsd8]
[2010-02-04 12:03:29] INFO  WEBrick::HTTPServer#start: pid=15337 port=3000
^C[2010-02-04 12:04:33] INFO  going to shutdown ...
[2010-02-04 12:04:33] INFO  WEBrick::HTTPServer#start done.
Exiting

Итак встроенный веб-сервер работает теперь проверим Apache.

Запускаем Apache и в браузере вводим _http://test.site.local
Вводим учетную запись администратора
Логин: admin
Пароль: admin
В своем профиле меняем язык на Русский. И обязательно меняем дофолтовый пароль на свой.

Настройка SMTP сервера

Настроим систему рассылки сообщений.

# cd /usr/local/www/redmine/config
# cp email.yml.example email.yml
# cat email.yml
production:
  delivery_method: :smtp
  smtp_settings:
    address: mx.mail.ru
    port: 25
    domain: mx.mail.ru
    authentication: :login
    user_name: Raven2000@mail.ru
    password: XXX

Настройка Хранилища

Обновление

Обновлять просто для этого пройдемся по шагам:
0. Проверим рекомендации Requirements
1. Сохраним существующую БД командой mysqldump.
1.1 Оригинальные файлы сохраним tar.

# cd /usr/local/www/
# tar czf redmine.tar.gz redmine/

2.Обновим порты и сделайте portupgrade существующему порту на более новую версию.
3. Обновим структуру
# cd /usr/local/www/redmine
# rake db:migrate RAILS_ENV=production
(in /usr/local/www/redmine)
==  AddIndexOnChangesetsScmid: migrating ======================================
-- add_index(:changesets, [:repository_id, :scmid], {:name=>:changesets_repos_scmid})
   -> 0.3934s
==  AddIndexOnChangesetsScmid: migrated (0.3936s) =============================

3.1 Очистим кеш, tmp и сесии
# rake tmp:cache:clear
(in /usr/local/www/redmine)
 
# rake tmp:sessions:clear
(in /usr/local/www/redmine)

Описание

Пользователи системы

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

Роли

Роли пользователей определяются гибкой моделью определения прав доступа пользователей. Роли включают в себя набор привилегий, позволяющих разграничивать доступ к различным функциям системы.

Пользователям назначается роль в каждом проекте, в котором он участвует, например «менеджер в проекте по разработке сайта А», «разработчик в проекте по поддержанию интранета компании» или «клиент в проекте по рефакторингу информационной системы компании Б».

Проекты

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

Трекеры

Трекеры являются основной классификацией, по которой сортируются задачи в проекте. Само по себе понятие «трекер» восходит к системам учета ошибок (англ. Bug tracking tool), представшим каждая в отдельности один проект.

По сути, в Redmine трекеры представляют собой аналог подклассов класса «Задача» и являются основой для полиморфизма разного рода задач, позволяя определять для каждого их типа различные поля. Примерами трекеров являются «Улучшение», «Ошибка», «Документирование», «Поддержка»,

Задачи

Задачи являются центральным понятием всей системы, описывающим некую задачу, которую необходимо выполнить. У каждой задачи в обязательном порядке есть описание и автор, в обязательном порядке задача привязана к трекеру.

Каждая задача имеет статус. Статусы представляют собой отдельную сущность с возможностью определения прав на назначение статуса для различных ролей (например, статус «отклонен» может присвоить только менеджер) или определение актуальности задачи (например, «открыт», «назначен» — актуальные, а «закрыт», «отклонен» — нет).

Для каждого проекта отдельно определяются набор этапов разработки и набор категорий задач. Среди других полей интересны также «оцененное время», служащее основой для построения управленческих диаграмм, а также поле выбора наблюдателей за задачей (см. «Получение уведомлений»). К задачам имеется возможность прикреплять файлы (имеется отдельная сущность «Приложение»).

Значения других перечислимых свойств (например, приоритетность) хранятся в отдельной общей таблице.

Отслеживание изменения статуса задач

За отслеживание изменений параметров задач пользователями в системе отвечают две сущности: «Запись журнал изменений» и «Измененный параметр». Запись журнала отображает одно действие пользователя по редактированию параметров задачи и/или добавление комментария к ней. То есть служит одновременно инструментом ведения истории задачи и инструментом ведения диалога.

Сущность «Измененный параметр» привязана к отдельной записи журнала и предназначена для хранения старого и нового значения измененного пользователем параметра.

Связи между задачами

Задачи могут быть взаимосвязаны: например, одна задача является подзадачей для другой или предшествовать ей. Эта информация может быть полезна в ходе планирования разработки программы, за ее хранение в Redmine отвечает отдельная сущность.

Учет затраченного на проект времени

Система поддерживает учет затраченного времени благодаря сущности «Затраченное время», связанной с пользователями и задачей. Сущность позволяет хранить затраченное время, вид деятельности пользователя (разработка, проектирование, поддержка) и краткий комментарий к работе. Эти данные могут быть использованы, например, для анализа вклада каждого участника в проект или для оценки фактической трудоемкости и стоимости разработки

Привязка репозиториев

Redmine предоставляет возможность интеграции с различными системами контроля версий (репозиториями). Интеграция заключается в отслеживании изменений во внешнем репозитории, их фиксации в базе данных, анализе изменений с целью их привязки к определенным задачам, . В инфологической структуре системы за интеграцию с внешними репозиториями отвечают три сущности: «Репозиторий», «Редакция» и «Изменение». «Репозиторий» представляет собой связанную с проектом сущность, хранящую тип подключенного репозитория, его местонахождение и идентификационные данные его пользователя.

«Редакция» является отображением редакции репозитория, и, кроме информационных полей, может быть привязана к конкретной задаче (для этого требуется указать в описании изменений «refs #NUM», где NUM — номер задачи), и к пользователю-автору редакции. Сущность «Изменение» предназначена для хранения списка измененных (добавленных, удаленных, перемещенных, модифицированных) файлов в каждой редакции.

Получение уведомлений

Уведомления пользователей об изменениях, происходящих на сайте, осуществляется с помощью сущности «Наблюдатели», связывающей пользователей с объектами различных классов (проекты, задачи, форумы и др.). В базе данных хранятся также ключи доступа к подписке RSS, позволяющие получать уведомления посредством этой технологии, также уведомления рассылаются с помощью электронной почты.

FAQ

В. Проблема после обновления
О. Выполните

# rake config/initializers/session_store.rb
(in /usr/local/www/redmine)
# ruby script/server -e production
=> Booting WEBrick...
=> Rails 2.1.2 application started on <a href="http://0.0.0.0:3000<br />
=>" title="http://0.0.0.0:3000<br />
=>">http://0.0.0.0:3000<br />
=></a> Ctrl-C to shutdown server; call with --help for options

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

Zabbix - SMS

Статей про SMS оповещения от Zabbix уже написано немало и во многих реализованно через скрипт который завязан на любом из платных SMS шлюзов. Вот и компания в которую я перешел также использовался SMS шлюз от одной компании с perl скриптом. Когда я перевел мониторинг с Nagios на Zabbix я конечно переделал скрипт под него с perl на php, но мне нужно была свобода от сторонних фирм к примеру от того же интернета, а так же незабываем, что если отвалился интернет то и SMS не может быть доставлена в SMS шлюз (это зависимость от интернета).
И самое главное, что через эту фирму каждая SMS тарифицировалась по 2 руб. и в месяц уходил примерно 1000 руб.

Самая логичная мысль взять GSM телефон/модем и использовать в своих целях. Почитал, погуглил народ везде начинают указывать на всякие девайсы: GSM-Терминалы с COM портами или использование специфичных/старых телефонов.

Я пошел своей дорогой. У меня валялся обычный модем Huawei E1750 от Мегафона, он USB со всеми вытекающими. Подключил простой тариф без абонентской платы и взял к тарифную опцию Пакет «500 SMS» по 100 руб - 500 SMS.

Подключил модем к FreeBSD 9.0 и в dmesg -a увидел.

ugen1.4: <HUAWEI Technology> at usbus1
ugen1.4: <HUAWEI Technology> at usbus1 (disconnected)
ugen1.4: <HUAWEI Technology> at usbus1
u3g0: <HUAWEI Technology HUAWEI Mobile, class 0/0, rev 2.00/0.00, addr 4> on usbus1
u3g0: Found 3 ports.
umass0: <HUAWEI Technology HUAWEI Mobile, class 0/0, rev 2.00/0.00, addr 4> on usbus1
umass0:  SCSI over Bulk-Only; quirks = 0x0000
umass0:6:0:-1: Attached to scbus6
umass1: <HUAWEI Technology HUAWEI Mobile, class 0/0, rev 2.00/0.00, addr 4> on usbus1
umass1:  SCSI over Bulk-Only; quirks = 0x0000
umass1:7:1:-1: Attached to scbus7
(probe0:umass-sim0:0:0:0): TEST UNIT READY. CDB: 0 0 0 0 0 0 
(probe0:umass-sim0:0:0:0): CAM status: SCSI Status Error
(probe0:umass-sim0:0:0:0): SCSI status: Check Condition
(probe0:umass-sim0:0:0:0): SCSI sense: NOT READY asc:3a,0 (Medium not present)
cd1 at umass-sim0 bus 0 scbus6 target 0 lun 0
cd1: <HUAWEI Mass Storage 2.31> Removable CD-ROM SCSI-2 device 
cd1: 1.000MB/s transfers
cd1: Attempt to query device size failed: NOT READY, Medium not present
(probe1:umass-sim1:1:0:0): TEST UNIT READY. CDB: 0 0 0 0 0 0 
(probe1:umass-sim1:1:0:0): CAM status: SCSI Status Error
(probe1:umass-sim1:1:0:0): SCSI status: Check Condition
(probe1:umass-sim1:1:0:0): SCSI sense: NOT READY asc:3a,0 (Medium not present)
da0 at umass-sim1 bus 1 scbus7 target 0 lun 0
da0: <HUAWEI SD Storage 2.31> Removable Direct Access SCSI-2 device 
da0: 1.000MB/s transfers
da0: Attempt to query device size failed: NOT READY, Medium not present

Так же проверил:

# ls -lah /dev/cuaU*
crw-rw----  1 uucp  dialer    0, 124  3 май 12:43 /dev/cuaU0.0
crw-rw----  1 uucp  dialer    0, 125  3 май 12:33 /dev/cuaU0.0.init
crw-rw----  1 uucp  dialer    0, 126  3 май 12:33 /dev/cuaU0.0.lock
crw-rw----  1 uucp  dialer    0, 130  3 май 12:33 /dev/cuaU0.1
crw-rw----  1 uucp  dialer    0, 131  3 май 12:33 /dev/cuaU0.1.init
crw-rw----  1 uucp  dialer    0, 132  3 май 12:33 /dev/cuaU0.1.lock
crw-rw----  1 uucp  dialer    0, 136  3 май 12:33 /dev/cuaU0.2
crw-rw----  1 uucp  dialer    0, 137  3 май 12:33 /dev/cuaU0.2.init
crw-rw----  1 uucp  dialer    0, 138  3 май 12:33 /dev/cuaU0.2.lock

Модем опознавался как ugen1.4 и еще добавился в девайсы как cuaU0.0 это устройство я и буду использовать.

Необходимо добавить пользователя Zabbix в группу "uucp" и "dialer" для того чтобы можно было использовать модем этим демоном.

# pw groupmod uucp -m zabbix
# pw groupmod dialer -m zabbix
 
# pw groupshow dialer
dialer:*:68:zabbix
# pw groupshow uucp
uucp:*:66:zabbix
# rehash
# /usr/local/etc/rc.d/zabbix_server restart

Далее в Zabbix добавил новый способ оповещения с указанным устройством и настроил уведомлении об использования данного способа оповещения.
Администрирование->Способы оповещений

Тип: SMS
GSM модем: /dev/cuaU0.0

Теперь в своем профиле пользователя необходимо указать свой номер телефона и в Zabbix зайти Настройки->Действия с указанием об отправке уведомлений и по СМС.

Вот и все.

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

Zabbix - Шаблоны и их создание

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

Создание шаблонов для устройств CISCO

Скрипт на perl для генерации xml конфигурационных файлов Cisco Router и Cisco Catalyst.

1. Скачайте и разархивируйте Cisco_xml.zip (приложен к статье)
2. Настройте SNMP доступ на свиче или роутере

 snmp-server community XXXXXXX RO 1
 access-list 1 permit 10.0.2.0 0.0.0.255
 access-list 1 deny any

3. На unix сервере проверить SNMP настройку и выдачу данных с устройства:

snmpwalk -v 2c -c SNMP_community HostIP

4. Запустить скрипт (рекомендуется Perl Lib Net-SNMP)

./cisco_xml.pl Cisco_2960 IP 75 5 SNMP_community 5 Network
~~
.1.3.6.1.2.1.2.2.1.2.10005
.1.3.6.1.2.1.2.2.1.1.11
.1.3.6.1.2.1.2.2.1.3.10012
.1.3.6.1.2.1.2.2.1.3.10102
Num Ports:
Port Index 1:10501
Port Index 2:10009
Port Index 3:10014
Max Port: 10501  5

5. Импорт xml файла Template_Hostname.xml в Zabbix

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

Шаблон для ATC SI2000

Шаблон скачиваем ниже статьи, но требуются следующие движения. Для мониторинга SI2000 через Zabbix нужно добавить нужные переменные в агент Zabbix который имеет доступ к SI2000 и может снимать статистику. Напрямую через SNMP запрашивать по нужному ключу не получиться тк при мониторинге упавших каналов имя порта никак не связано с номером ключа и меняется в зависимости от очередности получения ошибок. Так же необходимо выгружать всю таблицу, а не один ключ ибо не обновиться он. Для этого и добавляем переменную в забикс агенте в котором указываем запросить всю таблицу упавших каналов и по конвейеру отпрасить нужный нам и передать серверу Zabbix: zabbix_agentd.conf

UserParameter=status.port0,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port0"'
UserParameter=status.port1,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port1"'
UserParameter=status.port2,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port2"'
UserParameter=status.port3,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port3"'
UserParameter=status.port4,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port4"'
UserParameter=status.port5,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port5"'
UserParameter=status.port6,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port6"'
UserParameter=status.port7,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port7"'
UserParameter=status.port8,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port8"'
UserParameter=status.port9,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port9"'
UserParameter=status.port10,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port10"'
UserParameter=status.port11,snmpwalk -v2c -c public 192.168.253.17 .1.3.6.1.4.1.1332.1.1.3.1 | grep -c 'STRING: "CLC00/CDG01.Port11"'

Также в Zabbix добавлем шаблон к нужному серверу который может иметь доступ к АТС SIX000. Cнимается статистика для 10 каналов E1 возможно расширение.

Новые шаблоны на сервера:
Загрузил в WIKI и там же буду обновлять и загружать, а тут постить.
Wiki servers
+HP DL380 Gen5
+^HP DL380p Gen7
+^HP DL380p Gen8

Wiki switches|Routers
+Cisco 2960
+Cisco 2960g

Wiki ATC
+ SI2000

==
+ - добавлено
^ - обновлено

Дополнительные материалы
Ссылки: 
Ветка форума
Официальные шаблоны для новых веток Zabbix
Шаблоны на zabbix.com
Шаблоны на zabbix.org
Шаблоны на "зеленое мышко"
Файлы: 
application/zip iconCisco_xml.zip - Perl скрипт для создание шаблонов к cisco
application/zip iconping_check_templates.zip
application/zip iconzbx_templates_si2000.zip
application/zip iconcisco_2911_templates.zip
application/zip iconcisco_2960_templates.zip
application/zip iconcisco_2960g_templates.zip
application/zip iconcisco_3725_templates.zip
application/zip iconcisco_3925_templates.zip
Ваша оценка: Нет Средняя: 4.5 (15 голосов)

Zabbix - мониторим и отслеживаем

Приходит к нам осень.
Упали все листья -
Пора мониторить.
Хайку.

В один из дней я захотел узнавать о неполадках в сетевой инфраструктуре\серверов\сервисов\сайтов и тп не через пользователей или пока сам не споткнусь. А был бы своевременно предупрежден через sms\mail\jabber в ту же минуту когда начались неполадки. Мог посмотреть и визуально контролировать карты моей инфраструктуры удаленных серверов и сервисов и видеть в какой части сети или линии произошел сбой и\или какой сервис стал недоступным. И задумался о системе мониторинга, оповещения и отслеживания статусов разнообразных сервисов в компьютерной сети, серверов и сетевого оборудования.
Долго выбирал из таких систем как Nagios, Zenoss, Zabbix, GroundWork, OpenNMS и Opsview.
Читал информацию по каждой системе, тестировал и сравнивал каждую. Отказывался от проектов по разным причинам например нет нужного функционала или он есть, но не в базовой бесплатной поставке, а в ее коммерческом варианте. Так же в виду неудобной эксплуатации, отсутствие грамотной документации, поддержки, работой серверной части на всякой экзотики типа Zope\Python и тп.

Остановился я на системе Zabbix в виду того что:

  • Хорошо документирована
  • Существует поддержка как бесплатная (форум, Wiki, мануал, IRC, рассылки) так и коммерческая.
  • Создан - Backend на С frontend на php
  • Простое написание шаблонов и триггеров и удобное создание карт с связями по событиям и триггерам.
  • Нативные клиенты под Windows, Linux, MacOS, *BSD.

Содержание:

  • Введение
  • Установка серверной части
    • Создание БД
    • Конфигурационный файл сервера
    • Настройка fping
  • Установка веб-интерфейса
  • Установка клиентской части
    • Конфигурационный файл клиента
  • Запуск
  • Веб-интерфейс
    • Конфигуратор
  • Заключение
  • Дополнительная информация

Введение

ZABBIX состоит из четырех компонентов для основной работы вам потребуется первые три компоненты.
ZABBIX Server - это основное, программное обеспечение ZABBIX. Сервер может удаленно проверить сетевые службы (такие как веб-серверы и почтовые серверы, ssh и тп), используя простые виды проверки, но он также является центральным компонентом которой агенты сообщают о доступности и целостность информации и статистики. Сервер является центральным хранилищем, в котором хранятся все конфигурации, статистические и оперативные данные. ZABBIX, будет активно уведомлять администраторов когда возникают проблемы в любом из контролируемых систем. Он может также контролировать устройства использующих SNMP агентов.

ZABBIX Frontend - веб-интерфейс для обеспечения легкого доступа к данным мониторинга и конфигурации Zabbix откуда угодно и с любой платформы. Веб-интерфейс является частью Zabbix сервера, и, как правило (но не обязательно), запущен на одном физическом сервере, что один Zabbix сервер.

ZABBIX Агент - этот модуль нужен для того, чтобы активно контролировать ресурсы и приложений (таких как HDD, RAM, CPU статистику и т.д.) в сетевых системах, эти системы должны запустить ZABBIX агента. Агент будет собирать информацию с системы, на которой он работает, и представлять эти данные для дальнейшей обработки ZABBIX Server. В случае неудачи (например, жесткий диск заполнился или вышел из строя служебный процесс). ZABBIX Server может активно предупреждать администраторов о проблемах этой машины. ZABBIX агенты являются чрезвычайно эффективными из-за использования нативных системных вызовов для сбора статистической информации.

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

Установка серверной части

# cd /usr/ports/
# make search name=zabbix
 
Port:   zabbix-agent-1.8.2_1,2
Path:   /usr/ports/net-mgmt/zabbix-agent
Info:   Enterprise-class open source distributed monitoring (agent)
Maint:  ports@christianserving.org
B-deps: libiconv-1.13.1_1
R-deps: libiconv-1.13.1_1
WWW:    _http://www.zabbix.com/
 
Port:   zabbix-frontend-1.8.2_1,2
Path:   /usr/ports/net-mgmt/zabbix-frontend
Info:   Enterprise-class open source distributed monitoring (frontend)
Maint:  ports@christianserving.org
B-deps:
R-deps: freetype2-2.3.11 jpeg-8_1 ...
WWW:    _http://www.zabbix.com/
 
Port:   zabbix-proxy-1.8.2_1,2
Path:   /usr/ports/net-mgmt/zabbix-proxy
Info:   Enterprise-class open source distributed monitoring (proxy)
Maint:  ports@christianserving.org
 B-deps: ca_root_nss-3.12.4 curl-7.20.0 gettext-0.17_1 ...
R-deps: ca_root_nss-3.12.4 curl-7.20.0 fping-2.4b2_1 ...
WWW:    _http://www.zabbix.com/
 
Port:   zabbix-server-1.8.2_1,2
Path:   /usr/ports/net-mgmt/zabbix-server
Info:   Enterprise-class open source distributed monitoring (server)
Maint:  ports@christianserving.org
B-deps: ca_root_nss-3.12.4 curl-7.20.0 gettext-0.17_1 ...
R-deps: ca_root_nss-3.12.4 curl-7.20.0 fping-2.4b2_1 ...
WWW:    _http://www.zabbix.com/

Приступим

# cd /usr/ports/net-mgmt/zabbix-server
# make config
 
Опцияs for zabbix-server 1.8.2_1,2              
 
[X] MYSQL   Use MySQL backend
[ ] PGSQL   Use PostgreSQL backend
[X] SQLITE  Use SQLite backend
[  ] IPV6    Support for IPv6
[X] LDAP    Support for checking LDAP servers
[X] JABBER  Use jabber media type
[X] FPING   Use fping for pinging hosts
[  ] SSH     Use libssh2 for SSH-based checks
 
# make install clean
 
Опцияs for libssh2 1.2.4,2
 
[ ] GCRYPT  Use libgcrypt instead of OpenSSL
[ ] TRACE   Enable debug packet traces
[X] ZLIB    Enable compression
 
~~
======================================================================
Zabbix requires a database.  If you are using SQLite, one will be
created automatically.  Otherwise you can install one as follows (<db>
is your database engine and <db_client> is its client program):
 
% cd /usr/local/share/zabbix/server/create
% cat schema/<db>.sql data/data.sql data/images_<db>.sql | <db_client>
 
To upgrade an existing database, see the scripts in
/usr/local/share/zabbix/server/upgrades.
======================================================================
===> Installing rc.d startup script(s)
===>   Compressing manual pages for zabbix-server-1.8.2_1,2
===>   Registering installation for zabbix-server-1.8.2_1,2
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/sbin/zabbix_server
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/zabbix_server
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.zabbix.com/
===>  Cleaning for libssh2-1.2.4,2
===>  Cleaning for zabbix-server-1.8.2_1,2

Создание БД

Создадим БД и пользователя работающего с ней:

# mysql -uroot -proot_pw
mysql> create database db_zabbix character set utf8;
mysql> quit;
# mysql -h localhost --user=root --password=root_pw -e"GRANT ALL ON db_zabbix.* TO /
username_zabbix@localhost IDENTIFIED BY 'username_zabbix_pw'" db_zabbix

Импортируем схемы:

# cd /usr/local/share/zabbix/server/create
# cat schema/mysql.sql data/data.sql data/images_mysql.sql | mysql -uusername_zabbix /
-pusername_zabbix_pw db_zabbix

Конфигурационный файл сервера

Создаем и редактируем конфигурационный файл серверной части:

# cd /usr/local/etc/zabbix
# ls
zabbix_agent.conf.sample  zabbix_agentd.conf.sample zabbix_server.conf.sample
# cp zabbix_server.conf.sample zabbix_server.conf
# chmod u+w zabbix_server.conf
# vi zabbix_server.conf

# Это конфигурационный файл для сервера ZABBIX
# Для получения более подробной информации о ZABBIX,
# посетите _http://www.zabbix.com 
 
 
############ ОСНОВНЫЕ ПАРАМЕТРЫ #################
 
### Опция: NodeID
#	Это определяет уникальные NodeID в распределенной установке,
#	0 - отдельный сервер
#
# Обязательный: no
# Диапазон: 0-999
# По умолчанию:
# NodeID=0
 
 
### Опция: ListenPort
#	Прослушаемый порт для ловушки
#
# Обязательный: no
# Диапазон: 1024-32767
# По умолчанию:
# ListenPort=10051
 
### Опция: SourceIP
#	Исходный IP-адрес для исходящих соединений.
#
# Обязательный: no
# По умолчанию:
# SourceIP=
 
### Опция: LogFile
#	Имя Log Файла
#	Если это не используете, то применяется syslog.
#
# Обязательный: no
# По умолчанию:
# LogFile=
 
LogFile=/tmp/zabbix_server.log
 
### Опция: LogFileSize
#	Максимальный размер файла журнала в MB. 
#	0 - отключения автоматической ротации журнала.
#
# Обязательный: no
# Диапазон: 0-1024
# По умолчанию:
# LogFileSize=1
 
### Опция: DebugLevel
#	Задает уровень отладки
#	0 - debug не создается
#	1 - критическая информация 
#	2 - информация об ошибках
#	3 - предупреждения (по умолчанию)
#	4 - для отладки (много информации) 
#
# Обязательный: no
# Диапазон: 0-4
# По умолчанию:
# DebugLevel=3
 
### Опция: PidFile
#	Имя PID файла.
#
# Обязательный: no
# По умолчанию:
# PidFile=/tmp/zabbix_server.pid
 
### Опция: DBHost
#	Имя хоста базы данных.
#	Если установить как localhost, то сокет используется для MySQL.
#
# Обязательный: no
# По умолчанию:
# DBHost=localhost
 
### Опция: DBName
#	Имя базы данных.
#	SQLite3 примечание: путь к файлу базы данных должны быть предусмотрены.
#	DBUser и DBPassword игнорируются.
#
# Обязательный: yes
# По умолчанию:
# DBName=
 
DBName=db_zabbix
 
### Опция: DBUser
#	База данных пользователя. Игнорируются для SQLite.
#
# Обязательный: no
# По умолчанию:
# DBUser=
 
DBUser=username_zabbix
 
### Опция: DBPassword
#	Пароль базы данных. Игнорируются для SQLite.
#	Закомменируйте эту линию, если пароль не используется.
#
# Обязательный: no
# По умолчанию:
DBPassword=username_zabbix_pw
 
### Опция: DBSocket
#	Путь до MySQL сокета.
#
# Обязательный: no
# По умолчанию:
# DBSocket=/tmp/mysql.sock
 
### Опция: DBPort
#	Порт БД когда не используется локальный сокет. Игнорируются для SQLite.
#
# Обязательный: no
# Диапазон: 1024-65535
# По умолчанию (for MySQL):
# DBPort=3306
 
############ ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ################
 
### Опция: StartPollers
#	Количество pre-forked экземпляров pollers.
#	Вы не должны запускать более 30 pollers.
#
# Обязательный: no
# Диапазон: 0-255
# По умолчанию:
# StartPollers=5
 
### Опция: StartIPMIPollers
#	Количество pre-forked экземпляров pollers IPMI.
#
# Обязательный: no
# Диапазон: 0-255
# По умолчанию:
# StartIPMIPollers=0
 
### Опция: StartPollersUnreachable
#	Количество pre-forked экземпляров pollers для недоступных хостов.
#
# Обязательный: no
# Диапазон: 0-255
# По умолчанию:
# StartPollersUnreachable=1
 
### Опция: StartTrappers
#	Количество pre-forked экземпляров ловушек.
#
# Обязательный: no
# Диапазон: 0-255
# По умолчанию:
# StartTrappers=5
 
### Опция: StartPingers
#	Количество pre-forked экземпляров ICMP опросов.
#
# Обязательный: no
# Диапазон: 0-255
# По умолчанию:
# StartPingers=1
 
### Опция: StartDiscoverers
#	Количество pre-forked экземпляров обнаружений.
#
# Обязательный: no
# Диапазон: 0-255
# По умолчанию:
# StartDiscoverers=1
 
### Опция: StartHTTPPollers
#	Количество pre-forked экземпляров HTTP pollers.
#
# Обязательный: no
# Диапазон: 0-255
# По умолчанию:
# StartHTTPPollers=1
 
### Опция: ListenIP
#	Прослушаемый порт для ловушки.
#	Если этот параметр за комментирован.
#	Прослушивание будет вестись на всех сетевых интерфейсах.
#
# Обязательный: no
# По умолчанию:
# ListenIP=0.0.0.0
 
# ListenIP=127.0.0.1
 
### Опция: HousekeepingFrequency
#	Как часто ZABBIX будет выполнять процедуру домашней работы (в часах).
#	Домашная работа по удаления ненужной информации из таблиц истории, 
#	оповещения и сигнализации.
#	Если используется PostgreSQL , предложенное значение 24, так как она
#	выполняет VACUUM.
#
# Обязательный: no
# Диапазон: 1-24
# По умолчанию:
# HousekeepingFrequency=1
 
### Опция: MaxHousekeeperDelete
#	Таблица "housekeeper" содержит "заданий" процедуры для домашней работы в следующем
#	формате: [Housekeeperid], [TableName], [field], [value].
#	Не более, чем "MaxHousekeeperDelete 'значение (что соответствует [tablename],
#	[field], [value]) будет удалено за одну задачу в один цикл.
#	SQLite3 не использьзуйте этот параметр, будут удалены все соответствующие строки.
#	Если установлено в 0, то на всех используется без ограничений.
#	В этом случае вы должны знать, что вы делаете!
#
#	Обязательный: no
#	Диапазон: 0-1048576
#	По умолчанию:
# MaxHousekeeperDelete=500
 
### Опция: DisableHousekeeping
#	Установите 1, чтобы отключить процедуру домашней работы.
#
# Обязательный: no
# Диапазон: 0-1
# По умолчанию:
# DisableHousekeeping=0
 
### Опция: SenderFrequency
#	Как часто ZABBIX попытаются отправить неотправленные оповещения (в секундах).
#
# Обязательный: no
# Диапазон: 5-3600
# По умолчанию:
# SenderFrequency=30
 
### Опция: CacheSize
#	Size of configuration cache, in bytes. Размер конфигурации кэша в байтах.
#	Общий объем памяти для хранения узлов и элементов данных.
#
# Обязательный: no
# Диапазон: 128K-1G
# По умолчанию:
# CacheSize=8M
 
### Опция: CacheUpdateFrequency
#	Как часто Zabbix будет выполнять обновление конфигурации кэша в секундах.
#
# Обязательный: no
# Диапазон: 1-3600
# По умолчанию:
# CacheUpdateFrequency=60
 
### Опция: HistoryCacheSize
#	Размер истории кэша в байтах.
#	Общий объем памяти для хранения данных истории.
#
# Обязательный: no
# Диапазон: 128K-1G
# По умолчанию:
# HistoryCacheSize=8M
 
### Опция: TrendCacheSize
#	Размер кэша тенденция, в байтах.
#	Общий объем памяти для хранения данных тенденций.
#
# Обязательный: no
# Диапазон: 128K-1G
# По умолчанию:
# TrendCacheSize=4M
 
### Опция: HistoryTextCacheSize
#	Размер текстовой истории кэша в байтах.
#	Общий объем памяти для хранения символов, текста или данных журнала истории.
#
# Обязательный: no
# Диапазон: 128K-1G
# По умолчанию:
# HistoryTextCacheSize=16M
 
### Опция: NodeNoEvents
#	Если установлена '1' локальные событий, не будут отправлены на мастер узел.
#	Это не влияет на способность этого узла для распространения события
#	из его дочерних узлов.
#
# Обязательный: no
# Диапазон: 0-1
# По умолчанию:
# NodeNoEvents=0
 
### Опция: NodeNoHistory
# Если установлена '1' локальная истории, не будет отправлена на мастер узел.
# Это не влияет на способность этого узла для пропаганды истории из его дочерних узлов.
#
# Обязательный: no
# Диапазон: 0-1
# По умолчанию:
# NodeNoHistory=0
 
### Опция: Timeout
#	Указывает, как долго будет ждать агент, SNMP устройства или внешней
#	проверки (в секундах).
#
# Обязательный: no
# Диапазон: 1-30
# По умолчанию:
# Timeout=3
 
### Опция: TrapperTimeout
#	Определяет, сколько секунд ловушка может потратить на обработку новых данных.
#
# Обязательный: no
# Диапазон: 1-300
# По умолчанию:
# TrapperTimeout=300
 
# TrapperTimeout=5
 
### Опция: UnreachablePeriod
#	Через сколько секунд недостижимости считать узел недоступным.
#
# Обязательный: no
# Диапазон: 1-3600
# По умолчанию:
# UnreachablePeriod=45
 
### Опция: UnavailableDelay
#	Как часто проверять хост на наличие приема в течение периода недоступности.
#
# Обязательный: no
# Диапазон: 1-3600
# По умолчанию:
# UnavailableDelay=60
 
### Опция: UnreachableDelay
#	Как часто проверять хост на наличие в период недоступности.
#
# Обязательный: no
# Диапазон: 1-3600
# По умолчанию:
# UnreachableDelay=15
 
### Опция: AlertScriptsPath
#	Местоположение для пользовательских сценариев оповещения.
#
# Обязательный: no
# По умолчанию:
# AlertScriptsPath=/home/zabbix/bin/
 
### Опция: ExternalScripts
#	Местоположение внешних скриптов.
#
# Обязательный: no
# По умолчанию:
# ExternalScripts=/usr/local/etc/zabbix/externalscripts
 
### Опция: FpingLocation
#	Местоположение fping.
#	Убедитесь, что для fping файла имеет root разрешения и установлен флаг SUID.
#
# Обязательный: no
# По умолчанию:
#FpingLocation=/usr/sbin/fping
FpingLocation=/usr/local/sbin/fping
 
### Опция: Fping6Location
#	Местоположение fping6.
#	Убедитесь, что fping6 файла имеет root разрешения и установлен флаг SUID.
#	Сделать пустым, если ваша fping утилита позволяет обрабатывать IPv6 адресов.
#
# Обязательный: no
# По умолчанию:
# Fping6Location=/usr/sbin/fping6
 
### Опция: SSHKeyLocation
#	Расположение открытых ключей для SSH проверки.
#
# Обязательный: no
# По умолчанию:
# SSHKeyLocation=
 
### Опция: TmpDir
#	Временная директорию.
#
# Обязательный: no
# По умолчанию:
# TmpDir=/tmp
 
### Опция: Include
#	Вы можете включать отдельные файлы или все файлы в директорию в файле конфигурации.
#
# Обязательный: no
# По умолчанию:
# Include=
 
# Include=/usr/local/etc/zabbix/zabbix_server.general.conf
# Include=/usr/local/etc/zabbix/zabbix_server/

Настройка fping

# chown root:zabbix /usr/local/sbin/fping
# chmod 710 /usr/local/sbin/fping
# chmod ug+s /usr/local/sbin/fping
# ll /usr/local/sbin/fping
-rws--s---  1 root  zabbix    22K 20 окт 11:31 /usr/local/sbin/fping

Установка веб-интерфейса

# cd /usr/ports/net-mgmt/zabbix-frontend
# make config
 
Опцияs for zabbix-frontend 1.8.2_1,2
 
[X] MYSQL   Use MySQL backend
[ ] PGSQL   Use PostgreSQL backend
[X] SQLITE  Use SQLite backend
 
# make install clean
~
 
===>   Registering installation for zabbix-frontend-1.8.2_1,2
===>  Cleaning for zabbix-frontend-1.8.2_1,2

Установка клиентской части

FreeBSD zabbix-agent

# cd /usr/ports/net-mgmt/zabbix-agent && make config
 
Опция для zabbix-agent 1.8.2_1,2
 
[ ] IPV6  Support for IPv6
 
# make install clean
~~
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/sbin/zabbix_agent
/usr/local/bin/zabbix_sender
/usr/local/sbin/zabbix_agentd
/usr/local/bin/zabbix_get
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/zabbix_agentd
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.zabbix.com/
===>  Cleaning for zabbix-agent-1.8.2_1,2

Windows zabbix-agent

Устанавливается легко и непринужденно.

Конфигурационный файл клиента

# cd /usr/local/etc/zabbix
# cp zabbix_agentd.conf.sample zabbix_agentd.conf
# chmod u+w zabbix_agentd.conf
# vi zabbix_agentd.conf

# Этот конфигурационный файл для Zabbix Agent (Unix)
# Чтобы получить дополнительные сведения о Zabbix, посетите _http://www.zabbix.com
 
############ ОБЩИЕ ПАРАМЕТРЫ #################
 
### Диапазон: PidFile
#	Имя PID файла.
#
# Обязательный: no
# По умолчанию:
# PidFile=/tmp/zabbix_agentd.pid
 
### Диапазон: LogFile
#	Имя Log файла.
#	Если не установлен, используется syslog.
#
# Обязательный: no
# По умолчанию:
# LogFile=
 
LogFile=/tmp/zabbix_agentd.log
 
### Диапазон: LogFileSize
#	Максимальный размер файла журнала в MB.
#	0 - отключения автоматической ротации журнала.
#
# Обязательный: no
# Диапазон: 0-1024
# По умолчанию:
# LogFileSize=1
 
### Диапазон: DebugLevel
#	Задает уровень отладки
#	0 - debug не создается
#	1 - критическая информация 
#	2 - информация об ошибках
#	3 - предупреждения (по умолчанию)
#	4 - для отладки (много информации) 
#
# Обязательный: no
# Диапазон: 0-4
# По умолчанию:
# DebugLevel=3
 
### Диапазон: SourceIP
#	Исходный IP-адрес для исходящих подключений.
#
# Обязательный: no
# По умолчанию:
# SourceIP=
 
### Диапазон: EnableRemoteCommands
#	Разрешается ли удаленные команды с сервера Zabbix.
#	0 - не допускается
#	1 - допускается
#
# Обязательный: no
# По умолчанию:
# EnableRemoteCommands=0
 
### Диапазон: LogRemoteCommands
#	Включение ведения журнала выполненных команд как предупреждения.
#	0 - выключено
#	1 - включен
#
# Обязательный: no
# По умолчанию:
# LogRemoteCommands=0
 
##### Passive checks related
 
### Диапазон: Server
#	Список адресов через запятую IP (или имен хостов) Zabbix-серверов.
#	Не должно быть пробелов запрещено. Первая запись используется для получения списка
#	и отправки активных проверок.
#	Обратите внимание, что имена хостов должны преобразовыватся 
#	как hostname->IP address и IP address->hostname.
#	Если поддержка IPv6 включена, то '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1'
#	имеют равный статус.
#
# Обязательный: yes
# По умолчанию:
# Server=
 
Server=127.0.0.1
 
### Диапазон: Hostname
#	Уникальные, с учетом регистра имя хоста.
#	Необходимо для активного контроля и должно соответствовать имени хоста,
#	как настроено на сервере.
#
# По умолчанию:
# Hostname=system.uname
 
Hostname=Zabbix Server
 
### Диапазон: ListenPort
#	Агент будет прослушивать этот порт для соединения с сервером.
#
# Обязательный: no
# Диапазон: 1024-32767
# По умолчанию:
# ListenPort=10050
 
### Диапазон: ListenIP
#	Агент будет прослушивать указанный интерфейс.
#
# Обязательный: no
# По умолчанию:
# ListenIP=0.0.0.0
 
# ListenIP=127.0.0.1
 
### Диапазон: DisablePassive
#	Отключить пассивный контроль. Агент не будет слушать любой TCP порт.
#	Только активные проверки будут обработаны.
#	0 - не отключать
#	1 - отключить
#
# Обязательный: no
# По умолчанию:
# DisablePassive=0
 
##### Active checks related
 
### Диапазон: DisableActive
#	Отключение активного контроля.
#	Агент будет работать в пассивном режиме, прислушиваясь к серверу.
#
# Обязательный: no
# По умолчанию:
# DisableActive=0
 
# DisableActive=1
 
### Диапазон: ServerPort
#	Порт сервера для загрузки списка и отправки активных проверок.
#
# Обязательный: no
# По умолчанию:
# ServerPort=10051
 
### Диапазон: RefreshActiveChecks
#	Как часто список активных проверок обновляется, в секундах.
#
# Обязательный: no
# Диапазон: 60-3600
# По умолчанию:
# RefreshActiveChecks=120
 
### Диапазон: BufferSend
#	Не хранить данные дольше, чем N секунд в буфере.
#
# Обязательный: no
# Диапазон: 1-3600
# По умолчанию:
# BufferSend=5
 
### Диапазон: BufferSize
#	Максимальное количество значений в буфере памяти. Агент отправит
#	все собранные данные в Zabbix Server или Proxy, если буфер полон.
#
# Обязательный: no
# Диапазон: 1-65535
# По умолчанию:
# BufferSize=100
 
### Диапазон: MaxLinesPerSecond
#	Максимальное количество новых линий агент будет отправлять в секунду Zabbix Server 
#	или Proxy для обработки 'log' и 'logrt' активных проверок.
#	Условyjt значение будет преодолено параметром 'maxlines'
#	приведенных в 'log' и 'logrt' пунктах ключа.
#
# Обязательный: no
# Диапазон: 1-1000
# По умолчанию:
# MaxLinesPerSecond=100
 
 
############ ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ #################
 
### Диапазон: StartAgents
#	Количество pre-forked экземпляров zabbix_agentd, проверяет какой процесс пассивный.
# Обязательный: no
# Диапазон: 1-16
# По умолчанию:
# StartAgents=3
 
### Диапазон: Timeout
#	Тратить не более N секунд на обработку.
#
# Обязательный: no
# Диапазон: 1-30
# По умолчанию:
# Timeout=3
 
### Диапазон: Include
#	Вы можете включать отдельные файлы или все файлы в директорию в файле конфигурации.
#
# Обязательный: no
# По умолчанию:
# Include=
 
# Include=/usr/local/etc/zabbix/zabbix_agent.userparams.conf
# Include=/usr/local/etc/zabbix/zabbix_agentd/
 
 
####### КОНТРОЛИРУЕМЫЕ ПАРАМЕТРЫ ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ #######
 
### Диапазон: UnsafeUserParameters
#	Разрешить все символы, которые передаются в аргументах для определяемых
#	пользователем параметров.
#	0 - не разрешать
#	1 - разрешать
#
# Обязательный: no
# Диапазон: 0-1
# По умолчанию:
# UnsafeUserParameters=0
 
### Диапазон: UserParameter
#	Параметры определяемые пользователем для мониторинга.
#	Там может быть несколько пользовательских параметров.
#	Формат: UserParameter=<key>,<shell command>
#	Обратите внимание, что команды оболочки не должен возвращать пустую
#	строку или только EOL.
#	Пример: UserParameter=system.test,who|wc -l
UserParameter=system.test,who|wc -l
### Set of parameters for monitoring MySQL server (v3.23.42 and later)
### Change -u<username> and add -p<password> if required
#UserParameter=mysql.ping,mysqladmin -uroot ping|grep alive|wc -l
#UserParameter=mysql.uptime,mysqladmin -uroot status|cut -f2 -d":"|cut -f1 -d"T"
#UserParameter=mysql.threads,mysqladmin -uroot status|cut -f3 -d":"|cut -f1 -d"Q"
#UserParameter=mysql.questions,mysqladmin -uroot status|cut -f4 -d":"|cut -f1 -d"S"
#UserParameter=mysql.slowqueries,mysqladmin -uroot status|cut -f5 -d":"|cut -f1 -d"O"
#UserParameter=mysql.qps,mysqladmin -uroot status|cut -f9 -d":"
#UserParameter=mysql.version,mysql -V

Запуск

Добавляем в /etc/rc.conf:

zabbix_server_enable="YES"
zabbix_agentd_enable="YES"

Запускаем агент и сервер.

# /usr/local/etc/rc.d/zabbix_agentd start
Starting zabbix_agentd.
# /usr/local/etc/rc.d/zabbix_server start
Starting zabbix_server.
# ps -ax |grep zabbix
 5743  ??  IN     0:00,00 zabbix_agentd: main process (zabbix_agentd)
 5744  ??  SN     0:00,01 zabbix_agentd: main process (zabbix_agentd)
 5745  ??  IN     0:00,00 zabbix_agentd: waiting for connection (zabbix_agentd)
 5746  ??  IN     0:00,00 zabbix_agentd: waiting for connection (zabbix_agentd)
 5747  ??  IN     0:00,00 zabbix_agentd: waiting for connection (zabbix_agentd)
 5748  ??  SN     0:00,00 zabbix_agentd: poller [sleeping for 1 seconds] (zabbi
 5757  ??  IN     0:00,02 zabbix_server: main process (zabbix_server)
 5758  ??  IN     0:00,00 zabbix_server: db config [sleeping for 60 seconds] (z
 5759  ??  SN     0:00,04 zabbix_server: poller [sleeping for 5 seconds] (zabbi
 5760  ??  SN     0:00,04 zabbix_server: poller [sleeping for 5 seconds] (zabbi
 5761  ??  SN     0:00,04 zabbix_server: poller [sleeping for 5 seconds] (zabbi
 5762  ??  SN     0:00,04 zabbix_server: poller [sleeping for 5 seconds] (zabbi
 5763  ??  SN     0:00,03 zabbix_server: poller [sleeping for 5 seconds] (zabbi
 5764  ??  IN     0:00,00 zabbix_server: trapper [waiting for connection] (zabb
 5765  ??  IN     0:00,00 zabbix_server: trapper [waiting for connection] (zabb
 5766  ??  IN     0:00,00 zabbix_server: trapper [waiting for connection] (zabb
 5767  ??  IN     0:00,00 zabbix_server: trapper [waiting for connection] (zabb
 5768  ??  IN     0:00,00 zabbix_server: trapper [waiting for connection] (zabb
 5769  ??  SN     0:00,00 zabbix_server: pinger [sleeping for 5 seconds] (zabbi
 5770  ??  SN     0:00,00 zabbix_server: sender [sleeping for 30 seconds] (zabb
 5771  ??  IN     0:01,18 zabbix_server: housekeeper [sleeping for 1 hour(s)] (
 5772  ??  SN     0:00,00 zabbix_server: timer [sleeping for 30 seconds] (zabbi
 5773  ??  SN     0:00,03 zabbix_server: poller [sleeping for 5 seconds] (zabbi
 5774  ??  SN     0:00,00 zabbix_server: http poller [sleeping for 5 seconds] (
 5775  ??  IN     0:00,04 zabbix_server: discoverer [sleeping for 60 seconds] (
 5776  ??  SN     0:00,00 zabbix_server: db syncer [sleeping for 5 seconds] (za
 5777  ??  SN     0:00,00 zabbix_server: escalator [sleeping for 3 seconds] (za
 5868   0  S+     0:00,00 grep zabbix

Веб-интерфейс

Конфигуратор

Шаги стандартны:

Нажмите кнопку Save configuration file. Сохраните файл zabbix.conf.php и скопируйте его в указанную директорию.
Повторно нажмите на кнопку Retry.

Работа

Веб интерфейс ZABBIX сконфигурирован. По умолчанию имя администратора ‘Admin’, и пароль 'zabbix'.

Для начала:

  • Измените пароль администратора и создайте своего.
  • Создайте свои типы средств передачи для оповещения по sms\mail\jabber.
  • Создайте свои и измените существующие рабочие скрипты
  • Подключите нужные вам хосты, устройства, и все, что вам необходимо контролировать.
  • При необходимости создайте новые шаблоны и показатели.
  • Настройте карты сетей.

Запомните, настройку вы делаете один раз и от этого будет зависит как вы в дальнейшем поедете. Дальнейшая работа сведется к просмотру графиков нагрузки, добавлению хостов и отслеживанию параметров.
Чтобы настроить zabbix нам необходимо понять его терминологию и чем он оперирует при сборе и анализе данных. Терминов не много.

  • Узлы сети (hosts)
  • Элементы данных (items)
  • Триггеры (triggers)
  • Действия (actions)
  • Графики (graphs или charts)
  • Экраны (screens)
  • Карты сети (maps)

И так поехали.
У хостов есть определенные параметры и мы их должны контролировать. Иногда, когда они переходят заданную нами границу и срабатывают триггеры которые мы установили или выбрали по шаблону, что вызывает собой необходимые действия например отправка вам на телефон sms с текстом «Ваш сервант в Африке навернулся ;)». Так же рисуются графики показателей их можно обьеденить в экран.

Узлы сети - Здесь вы можете создать узел связи и включить в группу узлов связи которую вы можете так же создать. При создание узла связи (хоста) задается его имя наименование группы в которой ему необходимо быть включенным, IP адрес или доменное имя, порт агента, состояние и связь с шаблоном (схема сбора данных).

Группы узлов в сети — логическое объединение устройств. Например все сервера в группу Servers все сайты в Web и тп.

Элементы данных - показателем может быть любой системный параметр, значение которого может вычислить zabbix-агент. Показатель может быть как «встроенным» (например объем свободной памяти, загрузка CPU) так и пользовательским. При создании показателя можно указать достаточно много параметров, важнейшие из которых: тип, ключ ,интервал обновления, приложение и группа. Интервалы можно задавать весьма гибко.

Триггеры - триггер создается по какому то определению, если какой-то из показателей перешел через граничное значение. Например можно указать что при отсутствие пинга на определенном хосте активироваться. (создан темплар в котором создан тест пинга и темплар присвоен хосту. И в триггерах создано правило(триггер) для хоста при отсутствие оного активироваться).

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

Графики - чтобы увидеть график, надо задать его имя, размеры для прорисовки, и показатель, который мы хотим отобразить. Для показателя задается дополнительно цвет и вид заливки. На одном графике может быть сведено несколько показателей. Для изменения существующего графика нажмите напротив него ссылку «Изменить».

Комплексные отчеты — тут сводим все графики в один экран. Тут указываем количество строк и колонок. Для изменения существующего отчета нажмите напротив него ссылку «Изменить». Каждый график можно проматывать во времени, а также менять масштаб временной оси (1 час, 8 часов, сутки, неделя, месяц, год).

Карты сети - тут вы создаете кары или меняете существующую. На данный момент у вас там определен только один хост это ваш сервер. И вам необходимо будет добавить новые элементы (хосты) и связать их между собой связями зависящими от триггеров.

Должно получится что то похожее:

Заключение

Эту систему я использую уже давно и она продолжает меня радовать единственное при обновлениях старательно сохраните существующую БД и файлы тк разработчики в новых ветках знатно косячат. Да и настроите чтобы система не так сильно стремалась по каждому не пройденному тесту пинга и не отправляла вам e-mail по мелочам. Особенно касается это удаленных серверов стоящих, где нибуть на островах. =)

Дополнительная информация

  • Использование внешних скриптов для Zabbix

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

Zabbix - способы оповещения

Добрый день, сегодня хотел бы рассказать всем о так сказать почти всех способах оповещения системы Мониторинга Zabbix. В данной статье пойдёт речь о таких системах мгновенных сообщений как: SMS, Jabber, ICQ, email

Содержание:

  • Введение
  • E-Mail
  • SMS
  • ICQ
  • FAQ

Введение

Все действия делались на системе FreeBSD 8.2 i386 и будем считать, что сервер Zabbix стоит и уже работает, а как развернуть и настроить сервер в этой статье описываться не будет. Для этого вы можете прочитать статью Zabbix - мониторим и отслеживаем

E-Mail

Начнём с самого простого Email

Для начала идём в порты и ставим очень удобную программку sendEmail

cd /usr/ports/net/sendemail/ && make install clean

Выбрать мы можем только SSL, что вам и советую, и за частую требуется.
     ??????????????????????????????????????????????????????????????????????
     ?                    Options for sendEmail 1.56                      ?
     ? ?????????????????????????????????????????????????????????????????? ?
     ? ?                  [X] SSL  Enable SSL support                   ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ??????????????????????????????????????????????????????????????????????
     ?                       [  OK  ]       Cancel                        ?
     ??????????????????????????????????????????????????????????????????????

Программа не какой настройки не требует после установки пишем вот такой скриптик для Zabbix

#!/bin/sh
export smtpemailfrom=zabbix@host.ru
export zabbixemailto="$1"
export zabbixsubject="$2"
export zabbixbody="$3"
export smtpserver=smtp.host.ru
export smtplogin=zabbix@host.ru
export smtppass=MegaPass
export logfile=/var/log/sendemail.log
 
/usr/local/bin/sendEmail -l "$logfile" -f "$smtpemailfrom" -t "$zabbixemailto" \
-u "$zabbixsubject" -m "$zabbixbody" -s $smtpserver:25 -xu \
"$smtplogin" -xp "$smtppass"

Скрипт абсолютно простой и гуляет по инету уже давно так что тут всё просто программа просто соединяется на SMTP хост под таким-то логином и паролем, и шлёт от него всё что нам надо, в данном случае данные с Заббикса

Естественно кладём этот файл дав ему права 755 в директорию которая у вас задана на сервере

AlertScriptsPath=/usr/local/etc/zabbix/alertscripts/

По дефолту она вообще выключена

Далее идём и логинимся под админом в веб интерфейсе.

Администрирование > Способы оповещений

вверху с права "Создать способ оповещения"
И вносим информацию о нашем скрипте:

Описание ;Просто название его
Тип ;Естественно Скрипт
Название скрипта ;Просто название файла у меня например zabbix_sendemail

Далее создаём Настройка > Действия

В нутрях надо делать индивидуально, у меня например всё просто

Период времени в "1-7,00:00-23:59"
Значение триггера = "ПРОБЛЕМА"
Важность триггера = "Чрезвычайная"
Отправить сообщение Группа "Zabbix administrators"

Более подробно можно почитать в мане заббикса, ссылку на Онлайн Мануал найдёте в конце статьи.

SMS

Теперь мы переходим к отправке по SMS

Я использовал смсшлюз ТурбоСМС Он очень удобен так как у него есть возможность отправки СМС через MySQL что для меня было очень удобно, на этом и был нарисован скрипт, и кстати не мной про турбоСМС и про этот скрипт я узнал где-то в интернете давнооо давно

Вот он скриптик

#!/usr/bin/perl
 
use strict;
use POSIX;
use DBI;
 
my $phone=@ARGV[0];
my $subj=@ARGV[1];
my $msg=@ARGV[2];
 
my $driver = "mysql";
my $user = "User";
my $password = "MegaPASS";
my $database = "users";
my $dsn = "DBI:$driver:host=77.120.116.10:3306;database=$database";
my $dbh = DBI->connect($dsn, $user, $password);
 
my $sql = $dbh->prepare("INSERT INTO $user (number, sign, message) VALUES ('$phone', 'ISN(Обратите внимания сюда)', '$msg')");
$sql->execute;

Опять же, всё очень просто, скрипт на Perl кому интересно могут переделать под BASH, SH хоть PHP тут не чего сложного.

Опять же повторяем действия какие мы делали при создании Email оповещений.

Начиная с

дав ему права 755

И всё, готова у нас отправка и по СМС

ICQ

Теперь переходим к самому замороченному и трудному для меня
Отправка на ICQ

Возможно есть и другие способы, с помощю ПХП ботов, или ещё чего, но я выбрал путь с помощью консольного клиента climm

Для начала нужно удостовериться что у нас последняя версия, и просто обновить порты.

потом идём в

cd /usr/ports/net-im/climm/ && make install clean

В конфиге я лично отметил всё, а вы можете на свой вкус но самое главное для нас это TCL scripting support и Remote control fifo support

     ??????????????????????????????????????????????????????????????????????
     ?                    Options for climm 0.7.1_1                       ?
     ? ?????????????????????????????????????????????????????????????????? ?
     ? ?          [X] LIBICONV  Iconv character set conversion          ? ?
     ? ?          [X] P2P       Peer2peer connection support            ? ?
     ? ?          [X] TCL       TCL scripting support                   ? ?
     ? ?          [X] OTR       OTR encryption support                  ? ?
     ? ?          [X] REMOTE    Remote control fifo support             ? ?
     ? ?          [X] XMPP      XMPP Jabber support                     ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ? ?                                                                ? ?
     ??????????????????????????????????????????????????????????????????????
     ?                       [  OK  ]       Cancel                        ?
     ??????????????????????????????????????????????????????????????????????

После установки можно настроить, а можно и не трогать, он сам создаст дефолтный файл с настройками в

 ~/.climm/

Почитать о нём можно много в нете, так что не буду описывать как его настраивать, и он с русским интерфейсом, Лично Я, использовал дефолтный конфиг, всё просто.

Теперь создадим TCL скриптик

# Verbindet sich mit ICQ, horcht an Socket und sendet Nachrichten per ICQ weiter
 
###
#
# Globals
#
# ICQ UIN des Admins
# (bekommt Nachrichten beim Starten und Stoppen des ICQ-Forwarders)
set admin "5114112"
 
###
#
# Funktionen
#
# Startet die Socket
proc serverOpen {channel addr port} {
    global connected
    set connected 1
    fileevent $channel readable "readLine Server $channel"
#    puts "Client verbunden, warte auf Daten..."
#    puts "Client verbunden"
}
 
# Liest Zeilen aus der Socket
proc readLine {who channel} {
    global out didRead admin
    gets $channel line
    if {"$line" == ""} {
        fileevent $channel readable {}
        after idle {
#               puts "Idle, warte auf Verbindung..."
                set didRead 1
        }
    } elseif {$line == "kill"} {
        set killmsg "Zabbix ICQ Server STOP!"
        climm exec "msg $admin $killmsg"
        puts $channel $msg
        flush $channel
        exit
    } else {
        climm exec "msg $line"
        #after 3000
#       puts "out: \"$antwort\""
#       puts $channel "$antwort"
#       flush $channel;
        set didRead 1
    }
}
#
###
#
# Hauptprogramm
#
# Socket als verf.gbar markieren
set connected 0
 
# Server an Port 33000 starten
set server [socket -server serverOpen 33000]
puts "ICQ-Forwarder gestartet, horche auf Port 33000"
climm exec "msg $admin Zabbix ICQ Server START!"
while [ vwait out ] {
        vwait connected
        vwait didRead
        unset connected didRead
}

Обзавём его допустим icq-tcl

И так же создадим файлик для Zabbix

#!/usr/bin/tclsh
#
# (Test-)Client: Sendet Daten an den Server
#
 
# zu Socket verbinden, Referenz in Variable "sock" speichern
set sock [socket -async 127.0.0.1 33000]
 
# Wenn Kommandozeilenparameter vorhanden,
        # Dann diese in Var. "eingabe" schreiben
        # Sonst an StdIn auf Eingabe warten und in Var schreiben
if {$argc > 0} {
        set eingabe "$argv"
} else {
        puts "Bitte Daten eingeben, \"kill\" stoppt den Server:"
        set eingabe [gets stdin]
}
 
# Inhalt aus "eingabe" an Socket senden
puts $sock "$eingabe"
flush $sock
 
#puts "Serverantwort:"
#set len [gets $sock ausgabe]
#puts "in : \"$ausgabe\""
 
# Client beenden
close $sock
exit

Он у нас на tcslsh писан, назовём его zabbix_icqsend и положем куда надо.

Теперь запустим climm сделаем новую учётку, или воспользуемся своей не суть
Как залогиниться автоматом опишу.
Идём в

ee ~/.climm/climmrc

и добавим в верху вот такой блок

[Server]
type icq8 auto
version 8
host login.icq.com
port 5190
screen 123456789
password 123456
status online
options ignore off

Вот не помню там это есть по дефолту или нет, вас естественно интересует тока screenэто UIN и password

Вводим, запускаем climm

Он логиниться теперь запускаем нашь скрипт! пишем

tclscript ПОЛНЫЙ_ПУТЬ_ДО_ФАЙЛА/icq-tcl

И он жолжен повиснуть на 33000 порту, я лично запускал его в скринах и оставлял его там висеть, по другому пока не придумал, листаю маны по climm и по tcl.

Смотрим повис ли он на порту

sockstat -4l | grep climm
root     climm      73029 6  tcp4   *:33000               *:*

Ага висит, всё отлично, теперь давайте баловаться )))

Идём в

 cd /usr/local/etc/zabbix/alertscripts/

даём права +x файлу zabbix_icqsend
chmod +x zabbix_icqsend

И делаем такой запросик

./zabbix_icqsend UIN MSG

Примером будет

./zabbix_icqsend 123456789 Helo World

И вам придёт сообщение.

Есть пару нюансов, надо что бы вы были авторизированы у этого номера, и что бы он у вас тоже.

Так же есть фаерволом не закрыть порт 33000 то можоно по телнету подключиться и слать сообщения )

Русский только в UTF-8

Ну вот собственно и всё, писал на скорую руку, так что вопросы в студию, поправлю чё надо, и дорасскажу чего не хватает

Всем спасибо, все свободны.

FAQ

Дополнительные материалы
Ссылки: 
Zabbix Документация
Climm Офф. Сайт на Русском
Zabbix-SMS
Ваша оценка: Нет Средняя: 5 (12 голосов)

nod32 mirror script - Установка и Настройка зеркала обновлений для продуктов eset

Скрипт обновлений называется nod32 mirror script и предназначен для создания собственного зеркала обновлений для сети, офиса, или другой группы компьютеров. На сегодняшний момент, а это 25.09.2011 существует стабильная версия скрипта nod32ms_3.0.0_beta1 успешно протестированная под разными платформами.

Изображение - savepic.su — сервис хранения изображений

Что требуется для работы скрипта:

  • Под *nix системы:
  1. wget
  2. unrar
  3. apache или любой ftp-сервер
  4. php-cli (не ниже версии 5.0.0)
  • Под NT системы:
  1. apache или любой ftp-сервер
  2. php-cli (не ниже версии 5.0.0)

Что умеет скрипт:

  1. Авто-поиск ключей в интернет
  2. Пользовательские поисковые паттерны
  3. Журналирование действий
  4. Кросс-платформенный
  5. Минимум настроек
  6. Выбор скачиваемых обновлений
  7. Выбор языковых пакетов

Как установить скрипт обновлений nod32ms?

  1. Скачиваем архив
  2. Извлекаем архив (например в /etc/nod32/)
  3. Редактируем конфигурационный файл nod32ms.conf
  4. temp_dir = путь до temp директории (например /etc/nod32/temp)
    web_dir = путь до пользовательской директории обновления (например /var/www/localhost/htdocs)

  5. Добавляем авто-запуск скрипта в /etc/crontab
  6. 59 * * * * root sh /usr/local/etc/nod32ms/manual_start.sh (вместо /usr/local/etc/nod32ms/ укажите свой путь до файла manual_start.sh, после записи сделайте переход на следующую строку, иначе ваш крон выдаст ошибку)

  7. Проверяем работу скрипта
  8. Заходим в корень скрипта и в зависимости от системы и меняем пути до файла php.exe и\или update.php в файлах manual_star.bat или manual_start.sh, потом запускаем и ждем до тех пор пока скрипт не отработает


>>Ветка форума<<

ВложениеРазмер
nod32ms_3.0.0_beta5.rar566.85 КБ

Агрегация каналов (Link aggregation, trunking)

В процессе своей работы я заменил 2 сервера на один. В итоге у меня в наличие оказалось 2 кабель канала, две сетевые карты 3com по 100мб каждая, один сервер и свитч D-Link DES-3028. И я задумал увеличить пропускную способность сервера путем создания агрегации каналов.

Содержание:

  • Введение
  • Типы агригации
  • Настройка
  • Стартап
  • Свитч
  • Заключение
  • Ссылки

Введение

Агрегация каналов (англ. Link aggregation, trunking) или IEEE 802.3ad — технология объединения нескольких физических каналов в один логический. Это способствует не только значительному увеличению пропускной способности магистральных каналов коммутатор—коммутатор или коммутатор—сервер, но и повышению их надежности. Хотя уже существует стандарт IEEE 802.3ad, многие компании еще используют для своих продуктов патентованные или закрытые технологии.

Главное преимущество агрегации каналов в том, что радикально повышается скорость — суммируется скорость всех используемых адаптеров. В случае отказа адаптера трафик посылается следующему работающему адаптеру, без прерывания сервиса. Если же адаптер вновь начинает работать, то через него опять посылают данные.

Использование в параллель несколько Ethernet-адаптеров выглядит так. Допустим есть два адаптера Ethernet: eth0 и eth1. Их можно объединить в псевдо-Ethernet-адаптер eth3. Система распознает эти агрегированные адаптеры как один. Все агрегированные адаптеры настраиваются на один MAC-адрес, поэтому удалённые серверы обращаются с ними как с одним адаптером. eth3 можно настроить на один IP адрес, как любой Ethernet адаптер. Из-за этого программы обращаются к нему как к самому обычному адаптеру, скорость которого в два раза выше.

Для реализации на FreeBSD мы будем использовать lagg - агрегация линков и интерфейс отказоустойчивый линков. Интерфейс lagg позволяет агрегировать нескольких сетевых интерфейсов, как один виртуальный интерфейс, тем самым обеспечивается отказоустойчивость и увеличение высокоскоростной связи.
Интерфейс lagg может быть создан с помощью команды ifconfig laggN create. Вы можете использовать различные типы агрегирования протоколов, указанной с помощью параметра proto laggproto. Дочерние интерфейсы могут быть добавлены с помощью laggport child-iface option и удалены с помощью параметра -laggport child-iface option.

Типы агригации

В настоящее время драйвер поддерживает агрегирования протоколов

  • failover (по умолчанию)
  • fec
  • lacp
  • loadbalance
  • roundrobin

Протоколы определяют, какие порты используются для исходящего трафика или конкретный порт принимает входящий трафик. Состояние интерфейса используется для проверки линка является ли он активным или нет.

Режимы работы:
Failover [failover] - Это режим по умолчанию. В этом режиме один из портов является мастер портом и все данные, получаются через этот порт. В случае отказа мастер порта будет использован следующий активный порт.

Cisco® Fast EtherChannel® - Cisco FAST EtherChannel [fec] - это статическая настройка и не согласовывает агрегацию или обмена кадрами и не следить за линком. Если коммутатор поддерживает LACP, то следует использовать LACP вместо FEC.

FEC балансировка исходящий трафик через активных портов, на основе информации, заголовка хешированного протокола и принимает входящий трафик через любой активный порт. Хеш-значение включает Ethernet адреса источника и назначения и если таковые имеются то и VLAN тег, IPv4/IPv6 адреса источника и назначения.

LACP [lacp]- IEEE® 802.3ad Link Aggregation Control Protocol (LACP) и протокол маркера. LACP проведет согласования и набор агрегатных линков в одну или несколько Link Aggregated Groups (LAG). Каждый LAG состоит из портов с одинаковой скоростью и установленной full-duplex операцией. Трафик будет сбалансированным через порты в LAG с наибольшим общей скоростью, в большинстве случаев будет существовать только один LAG, который будет содержать все порты. В случае возникновения изменений в физического подключения каналов связи LACP будет быстро изменять работу к новой конфигурации.
LACP балансировка исходящего трафика через активные порты, на основе информации, заголовка по хешированному протоколу и принимает входящий трафик с любого активного порта. Хеш-значение включает Ethernet адреса источника и назначения и, если таковые имеются, VLAN тег и IPv4/IPv6 адреса источника и назначения.

Loadbalance [loadbalance] - Является псевдонимом FEC режим.

Round-robin [roundrobin] - Распространяет исходящий трафик, с помощью планировщика циклически через все активные порты и принимает входящий трафик из любого активного порта. Этот режим является нарушением кадра Ethernet и следует использовать с особой осторожностью.

None [none] - Этот протокол предназначен чтобы ничего не делать: он отключает любой трафик без отключения lagg интерфейса.

Настройка

Для начало необходимо подключить модуль есть два варианта.
1. в loader.conf добавить строчку if_lagg_load="YES" и перезагрузится или вручную подгрузить модуль.

# echo 'if_lagg_load="YES"' >> /boot/loader.conf
# reboot

Если вы хотите без перезагрузки системы то выполните следующее:
kldload if_lagg

2. или включить поддержку lagg в ядро и пересобрать его с последующей перезагрузкой

device lagg

Пример LACP

Создадим 802.3ad линк агрегирования с помощью LACP с двумя em интерфейсами:

# ifconfig lagg0 create
# ifconfig em0 up
# ifconfig em1 up
# ifconfig lagg0 laggproto lacp laggport em0 laggport em1 \
192.168.1.1 netmask 255.255.255.0

Пример Failover

Создадим отказоустойчивый режим который можно использовать для перехода на вторичный интерфейс при потери связи на основном интерфейсе. Создадим и настроим интерфейс lagg0, с em0 как основной интерфейс и em1 как дополнительный интерфейс:

# ifconfig lagg0 create
# ifconfig lagg0 up laggproto failover laggport em0 laggport em1


Интерфейс будет выглядеть следующим образом, и основные различия будут в MAC-адресе и имени устройства:
# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:05:5d:71:8d:b8
        media: Ethernet autoselect
        status: active
        laggproto failover
        laggport: em1 flags=0<>
        laggport: em0 flags=5<MASTER,ACTIVE>


Трафик будет передано и полученных по em0. Если связь теряется на em0 то em1 становится активным линком. Если связь восстанавливается на интерфейсе мастера то снова em0 станет активным линком.

Пример Failover роуминга

В следующем примере используется активный отказоустойчивый интерфейс для настройки роуминга между проводными и беспроводными сетями, используя два сетевых устройств. И всякий раз, когда проводной master интерфейс не подключен, беспроводной интерфейс будет использоваться:

# ifconfig em0 up
# ifconfig ath0 nwid my_net up
# ifconfig lagg0 laggproto failover laggport em0 laggport ath0 \
192.168.1.1 netmask 255.255.255.0

Стартап

Настроим запуск агрегации LACP при перегрузки системы:

# echo 'ifconfig_xl0="up"' >> /etc/rc.conf
# echo 'ifconfig_xl1="up"' >> /etc/rc.conf
# echo 'cloned_interfaces="lagg0"' >> /etc/rc.conf
# echo 'ifconfig_lagg0="laggproto lacp laggport xl0 laggport xl1 192.168.0.1 netmask 255.255.255.0"' >> /etc/rc.conf
# reboot

Проверим

# ifconfig
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=9<RXCSUM,VLAN_MTU>
        ether 00:04:79:66:4b:ae
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        lagg: laggdev lagg0
xl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:04:79:66:4b:ae
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        lagg: laggdev lagg0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        inet6 fe80::1 prefixlen 64 scopeid 0x3
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8<VLAN_MTU>
        ether 00:04:79:66:4b:ae
        inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
        media: Ethernet autoselect
        status: active
        laggproto lacp
        laggport: xl1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        laggport: xl0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

Свитч

Настроим работу коммутатор 2го уровня D-Link DES-3028.

DES-3028:4#config lacp_port 1-2 mode active
DES-3028:4#create link_aggregation group_id 1 type lacp
DES-3028:4#config link_aggregation group_id 1 master_port 1 ports 1-2 state enable

Заключение

Смотрим systat и скорость копирования.

                    /0   /1   /2   /3   /4   /5   /6   /7   /8   /9   /10
     Load Average   |
 
                    /0%  /10  /20  /30  /40  /50  /60  /70  /80  /90  /100
root     idle: cpu0 XXXXXXXXXXXXXXXXX
root     irq19: xl1 XXXXXXXXXXXXX
ftp         proftpd XX
root     irq18: xl0 XXXX

В итоге обе сетевые карты работают, скорость определенно возрастает с нашим настроением =).

Есть ограничения в работе агрегации см. ITworld.com - Link Aggregation with 802.3ad.

  • Все порты при агрегации должны быть одного типа (CAT-5E/6, SM или MM и тп).
  • Порты должны действовать на одной скорости.
  • Агрегировать канал можно до скорости 8-гигабит/сек.
  • Свитч может поддерживать 802.3ad. (но можно и без этого если сетевые карты такой режим поддерживают)

Ссылки

  • Man lagg
  • Link Aggregation and Failover
  • Wiki
  • WISEKUMA
  • Агрегирование каналов

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

Файловая система

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

Convmv - преобразование имен файлов из одной кодировки в другую

Появилась необходимость преобразовать имена файлов из одной кодировки в другую на ftp сервере. Таких файлов собралось на 1Тб и нужно было перекодировать с cp1251 на koi8-r которую хорошо читает CLI FreeBSD.

# cd  /usr/ports/
# make search name='convmv'
Port:   convmv-1.14
Path:   /usr/ports/converters/convmv
Info:   Convert filenames from one encoding to another
Maint:  kcwu@csie.org
B-deps: perl-5.8.9_3
R-deps: perl-5.8.9_3
WWW:    _http://j3e.de/linux/convmv/man/
 
# cd /usr/ports/converters/convmv && make install clean

Пользоваться утилитой легко и для начала нужно выбрать исходную кодировку и необходимую. Далее посмотрим в тестовом режиме как будет выглядеть перекодирование и если все в порядке то приступим к конвертированию.
Я знал, что все файлы загружали из Windows систем, а там как известно кодировка cp1251 ее то я и выбрал в качестве исходной и мне было нужно всего навсего выставил нужную кодировку koi8-r. Вы можете пробовать любые варианты кодировок. Приступим к проверке.

# cd /home/ftp/
# convmv -r -f cp1251 -t koi8-r Games/
Starting a dry run without changes...
mv "Games/Arcade/бЕЯЕКЮЪ ТЕПЛЮ II.rar"  "Games/Arcade/Веселая ферма II.rar"
mv "Games/Arcade/ЯСОЕП ЙНПНБЮ.rar"      "Games/Arcade/супер корова.rar"
mv "Games/Arcade/ВСДН ТЕПЛЮ.rar"        "Games/Arcade/чудо ферма.rar"
mv "Games/Arcade/АЮЬЕМЙХ.rar"   "Games/Arcade/башенки.rar"
 
No changes to your files done. Use --notest to finally rename the files.

Как видим все в порядке файлы стали читабельны и теперь нам необходимо запустить с параметром --notest для выполнения конвертирования.

# convmv -r -f cp1251 -t koi8-r --notest Games/
~~
Ready!

Вот и все спустя некоторое время все файлы у меня были конвертированы в нужный формат.
Для дополнительных изменений во время конвертирования почитайте man.

Дополнительные материалы
Ссылки: 
Ветка форума
MAN
Ваша оценка: Нет Средняя: 5 (5 голосов)

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

Ваша оценка: Нет Средняя: 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 голосов)

X11

Голосов пока нет

Conky - программа для системного мониторинга под X11

Появилась необходимость выводить журналы (логи) программ на экран подобно команде tail -fn только в иксах, да ещё чтобы не сворачивалось, не перемещалось, и т.д.
Долго разбирался в root-tail,с koi8-r да и чтобы не подвисал текст при сворачивании окон, в общем решил поискать что то ещё. Этим что то окозался conky.

Conky — это программа для системного мониторинга под X Window System. Она поддерживает POSIX системы, включая GNU/Linux и FreeBSD. Это свободная программа, распространяющаяся под лицензией BSD. Conky может отслеживать многие показатели системы: CPU, память, swap, размеры дисков, температуру, скорость закачки и загрузки, системные сообщения и многое другое. Conky имеет множество настроек и конфигураций.

Conky является форком программы torsmo, системного монитора, который больше не развивается.

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

# cd /usr/ports/
# make search name=conky-1
Port:   conky-1.8.0
Path:   /usr/ports/sysutils/conky
Info:   An advanced, highly configurable system monitor for X
Maint:  ntarmos@cs.uoi.gr
B-deps: damageproto-1.2.0 fixesproto-4.1.1 gettext-0.18_1 
gmake-3.81_4 kbproto-1.0.4 libX11-1.3.3,1 libXau-1.0.5 
libXdamage-1.1.2 libXdmcp-1.0.3 libXext-1.1.1,1 libXfixes-4.0.4
libiconv-1.13.1_1 libpthread-stubs-0.3_3 libxcb-1.6 pkg-config-0.25
xextproto-7.1.1 xproto-7.0.16
R-deps: damageproto-1.2.0 fixesproto-4.1.1 kbproto-1.0.4
libX11-1.3.3,1 libXau-1.0.5 libXdamage-1.1.2 libXdmcp-1.0.3
libXext-1.1.1,1 libXfixes-4.0.4 libiconv-1.13.1_1
libpthread-stubs-0.3_3 libxcb-1.6 pkg-config-0.25 
xextproto-7.1.1 xproto-7.0.16
WWW:    _http://conky.sourceforge.net/
 
cd /usr/ports/sysutils/conky && make config

я выбрал следующее:
Options for conky 1.8.0
 
[ ] APCUPSD        Enable APCUPSD support
[ ] AUDACIOUS      Enable Audacious support
[ ] BMPX           Enable BMPX support
[ ] MPD            Enable MPD support
[ ] NCURSES        Enable ncurses support
[ ] RSS            Enable RSS support
[ ] METAR          Enable METAR Weather support
[ ] XOAP           Enable XOAP Weather support
[ ] XMMS2          Enable XMMS2 support
[X] DOUBLE_BUFFER  Enable double buffering
[ ] IMLIB2         Enable Imlib2 support
[ ] LUA            Enable Lua support
[ ] LUA_CAIRO      Enable Lua-Cairo binding (impl. Lua)
[ ] LUA_IMLIB2     Enable Lua-Imlib2 binding (impl. Lua/Imlib2)
[X] XFT            Enable Xft support
 
# make install clean

После установки изменим конфигурационный файл:

# vi ~/.conkyrc

alignment top_right              #расположение окна
background no                    #работать как демон
border_width 0
cpu_avg_samples 2
default_color green              #думаю объяснять не надо
default_shade_color black
default_outline_color white
color1 DFAE0D                    #определяем переменную color1 
color2 orange                    #определяем переменную color2
draw_borders no
draw_graph_borders yes           #окантовка
draw_outline no
draw_shades no
stippled_borders 2
use_xft no                       #шрифты иксов
#xftfont DejaVu Sans Mono:size=8 #какой шрифт использовать
gap_x 5                          #отступ от края экрана
gap_y 5                          #отступ от края экрана
minimum_size 330 10              #думаю это тоже ясно
maximum_width 450
net_avg_samples 2
no_buffers yes
out_to_console no
out_to_stderr no
extra_newline no
own_window yes
own_window_transparent yes        #прозрачный фон (не работает в enlightenment)
own_window_colour navyblue
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_class Conky
own_window_type desktop
double_buffer yes
stippled_borders 0
update_interval 1
uppercase no
use_spacer yes
show_graph_scale no
show_graph_range no
xftalpha 0.8
 
TEXT
${color1}[System]
${color1}Host:$color $nodename
${color1}OS:$color ${exec uname -sp}
#${color1}OS:$color ${exec uname -nps} $kernel ($machine)
#${color1}Platform:$color ${exec uname -p}
${color1}Uptime:$color $uptime
 
${color1}[CPU]
${color1}Frequency:$color $freq MHz
${color1}Frequency (in GHz):$color $freq_g GHz
${color1}CPU Usage:$color $cpu%
${color}${cpugraph cpu0 20,400 000000 33b0dc }
#${color1}CPU Usage:$color $cpu% $color2 ${cpubar 7}
#${color1} core1 ${color}${cpu cpu0}%
#${cpugraph cpu0 20,100 000000 33b0dc }
#${color1} core2 ${color}${cpu cpu1}%
#${cpugraph cpu1 20,100 000000 33b0dc }
#${color1} core3 ${color}${cpu cpu2}%
#${cpugraph cpu2 20,100 000000 33b0dc }
${color1}[Memory]
${color1}RAM:$color $mem/ $memmax ($memperc%)
${color2}${membar 3,300}
${color1}Swap:$color $swap/ $swapmax ($swapperc%)
${color2}${swapbar 3,300}
#${color1}Processes:$color $processes  ${color1}Running:$color $running_processes
 
${color1}[Network]
 
#${downspeedgraph age0 62,230 104E8B 0077ff}
${color1}Network$color (nfe0)
${color1}IPv4:$color ${addr nfe0}
${color1}Down:$color ${downspeed nfe0} k/s
${downspeedgraph nfe0 20,400 000000 33b0dc}
${color1}Up:$color ${upspeed nfe0} k/s
${upspeedgraph nfe0 20,400 000000 33b0dc}
 
${color1}Network$color (rl0)
${color1}IPv4:$color ${addr rl0}
${color1}Down:$color ${downspeed rl0} k/s
${downspeedgraph rl0 20,400 000000 33b0dc}
${color1}Up:$color ${upspeed rl0} k/s
${upspeedgraph rl0 20,400 000000 33b0dc}
 
${color1}Filesystems:
 
${color}/   ${fs_used /}/${fs_size /}${fs_used_perc /}%
${color2}${fs_bar 3,300 /}
${color}/root   ${fs_used /root}/${fs_size /root}${fs_used_perc /root}%
${color2}${fs_bar 3,300 /root}
${color}/usr   ${fs_used /usr}/${fs_size /usr}${fs_used_perc /usr}%
${color2}${fs_bar 3,300 /usr}
${color}/var   ${fs_used /var}/${fs_size /var}${fs_used_perc /var}%
${color2}${fs_bar 3,300 /var}
${color}/mnt/nfs-178   ${fs_used /mnt/nfs-178}
/${fs_size /mnt/nfs-178}${fs_used_perc /mnt/nfs-178}%
${color2}${fs_bar 3,300 /mnt/nfs-178}
 
${color1}Name              PID   CPU%   MEM%
${color} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3}
${color} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4}
 
${color1}${execi 10 tail -n 3 /var/log/arpwatch.log | awk '{print $1" "$2" "$3" 
"$6" "$7" "$8" "$9" "$10" "$11" " }'}

Для автоматического запуска был создан файлик по примеру root-tail который я подсмотрел у lissyara.su

cat ~/.kde/Autostart/conky.desktop

[Desktop Entry]
Comment=
Comment[ru]=
Encoding=koi8-r
Exec[$e]=/usr/local/bin/conky &
GenericName=
GenericName[ru]=
MimeType=
Name=
Name[ru]=
Path[$e]=
StartupNotify=false
Terminal=false
TerminalOptions=
Type=Application
X-DCOP-ServiceType=
X-KDE-SubstituteUID=false
X-KDE-Username=
X-KDE-autostart-after=kdesktop

Готово!:

Дополнительные материалы
Ссылки: 
Домашняя страница
Ваша оценка: Нет Средняя: 3.8 (5 голосов)

Flash для Firefox

В работе с FreeBSD столкнулся с тем что после установки flashplugin-mozilla Firefox начал крашится. Поэтому решил найти что нибудь другое и нашёл решение проблемы с двумя вариантами действия:

1й вариант - установка Adobe Flash 9

Включаем режим совместимости с Linux и linprocfs.
Редактируем rc.conf

vi /etc/rc.conf

linux_enable="YES"

Загружаем модуль вручную
kldload linux

Затем редактируем fstab
vi /etc/fstab

linproc   /usr/compat/linux/proc   linprocfs   rw   0   0

Создаём точку монтирования
mkdir -p /usr/compat/linux/proc

Устанавливаем Flash плагин и nspluginwrapper.

Nspluginwrapper - это кроссплатформенный интерфейс, разработанный как раз для того, чтобы пользователи Mozilla/Firefox архитектур AMD64 и PowerPC могли использовать плагины, разработанные только для i386.

cd /usr/ports/www/nspluginwrapper && make install clean

cd /usr/ports/www/linux-flashplugin9 && make install clean

Затем активируем плагин в nspluginwrapper:
nspluginwrapper -v -a -i

и создаём симлинки:
ln -s /usr/local/lib/browser_plugins/npwrapper.libflashplayer.so \
/usr/local/lib/firefox3/plugins/npwrapper.libflashplayer.so

Проверим зависимости библиотеки libflashsupport.so:
cd /compat/linux && ./bin/sh ./usr/bin/ldd ./usr/lib/libflashsupport.so

Хинт

Если libflashsupport.so требует libssl.so.5, а ее нет, но есть libssl.so.0.9.8b, то создаём такой симлинк:

cd /usr/compat/linux/lib/ && ln -s libssl.so.0.9.8g libssl.so.5

2й вариант - установка Adobe Flash 10

Включаем режим совместимости с Linux и linprocfs.
Редактируем rc.conf

vi /etc/rc.conf

linux_enable="YES"

Загружаем модуль вручную
kldload linux

sysctl compat.linux.osrelease

Должно выдать это:
compat.linux.osrelease: 2.6.16

Ставим linux

cd /usr/ports/emulators/linux_base-f10 && make install clean

Затем редактируем fstab

vi /etc/fstab

linproc   /usr/compat/linux/proc   linprocfs   rw   0   0
linsys    /usr/compat/linux/sys    linsysfs    rw   0   0

Устанавливаем Flash плагин и nspluginwrapper.

cd /usr/ports/www/linux-f10-flashplugin10 && make install clean
cd /usr/ports/www/nspluginwrapper && make install clean

Активируем плагин в nspluginwrapper:

nspluginwrapper -i /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so
nspluginwrapper -v -a -i

Должно показать такое:
Auto-install plugins from /usr/local/lib/browser_plugins
Looking for plugins in /usr/local/lib/browser_plugins
Auto-install plugins from /root/.mozilla/plugins
Looking for plugins in /root/.mozilla/plugins

Перезапускаем Firefox 3 и проверяем активность плагина, введя в адресном поле about:plugins

Дополнительные материалы
Ссылки: 
NSPluginWrapper - прикручиваем flash к firefox в FreeBSD
Голосов пока нет

rdesktop - удалённый рабочий стол Windows

Иногда необходимо подключится к удалённому рабочему столу Windows, а так не хочется вставать из-за своей любимой FreeBSD. =)

Тогда на помошь приходит утилита rdesktop
нажимаем "alt+F2" и вводим:

xxx.xxx.xxx.xxx IP адрес удалённой системы Windows.

rdesktop xxx.xxx.xxx.xxx -f -y -u пользователь -p пароль


Например, вместо изображения на весь экран ключ -f можно указать в изображение в окне, например -g800x600 или любое другое разрешение



Дополнительные параметры программы:
Применение: rdesktop [опция] сервер[:порт]
    -u: имя пользователя
    -d: домен
    -s: Shell
    -c: рабочий каталог
    -p: пароль (- запрос)
    -n: клиент хоста
    -k: клавиатуры на сервер (EN-US, DE, SV и т.д.)
    -g: разрешения экпана (WxH)
    -f: полноэкранный режим
    -b: битность обновления растрового изображения
    -L: местные кодировки
    -A: Включите режим SeamlessRDP
    -B: использование BackingStore от X-сервера (если есть)
    -e: отключить шифрование (французский TS)
    -E: Отключение шифрования от клиента к серверу
    -m: не передавать движение события
    -C: использование собственной цветовой схемы
    -D: спрятать окно менеджера украшения
    -K: держать окно менеджера ключевых переплет
    -S: Надпись кнопки размера (ни одной заявки в режиме)
    -T: заголовок окна
    -N: позволить numlock синхронизации
    -X: вставлять в другое окно с заданным идентификатором.
    -a: подключение глубина цвета
    -z: включить сжатие RDP
    -x: RDP5 experience (m[odem 28.8], b[roadband], l[an] or hex nr.)
    -P: использование стойких растровый кэшировании
    -r: включить указанное устройство редирект (этот флаг может быть повторен)
    -0: Приложите к консоли
    -4: Использование RDP версии 4
    -5: Использование RDP версии 5 (по умолчанию)
    -y: использование raw клавиатуры (по умолчанию нет) 

сайт программы

ссылка на порт http://www.freebsd.org/cgi/cvsweb.cgi/ports/net/rdesktop/

PS:

но в Windows XP есть такая проблема - нельзя подключится одновременно более одного пользователя

для того чтобы в Windows XP можно было подключится к удалённому рабочему столу, и при этом не отключать того кто уже подключился нужно немного пропатчить систему =)

  • скачать патч
  • запустить Windows в режиме защиты от сбоев
  • заменить стандартный файл c:\windows\system32\termsrv.dll на аналогичный из архива
  • запустить termsrv_patch.reg и позволить добавить информацию в реестр
  • перезагрузить пропатченый Windows XP
  • далее настроить удалённое управление стандартными средствами Windows

при необходимости можно заменить стандартный порт 3389 удалённого подключения на любой другой.
для этого надо:
открыть стандарнтый редактор реестра regedit, сделать это можно нажав кнопку Windows + r и ввести regedit

затем отыскать ветку реестра

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber


и заменить порт на другой

PPS:

как оказалось есть проблемма с переключением раскладок клавиатуры на удалённой машине.

я решил проблему так:

порт лежит здесь /usr/ports/net/tsclient

cd `whereis -q tsclient`; make install clean && rehash

Когда я подключаюсь через tsclient то всё работает, но только когда я ввожу логин из FreeBSD 7.2 то на удалённой машине какието цифры "/330/230/" вместо логина.

Лучше вообше логин не заполнять и раскладку не указывать.

у меня смена сочетания клавишь ctrl+shift, а на Windows alt+shift

настроики клавиатуры в xorg.conf не крутил:

Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "kbd"
EndSection

Кроме ctrl+shift, в (центр управления > схемы привязок), и параметры XKB поставил галочку (игнорировать пораметры системы).

ВложениеРазмер
Скачать патч для Windows XP150.7 КБ
Дополнительные материалы
Ссылки: 
Ветка форума
Ваша оценка: Нет Средняя: 4.4 (5 голосов)

Звук на ноутбуках с ICH6 intel ac97 AD1981B

Привет Линукс Пипл, недавно достался мне старенький бук bliss 507s На нём стояла WinXP и жутко всё тупило, да и играть мне на нём особо не нужно было хотел поставить Debian\Ubuntu и работать на нём в консоли, поставил Debian добавил ручками KDE Xorg ну и всё чё хотел короче, и тут поглядел и понял что Alsa не работает с той звуковой что установлена в этом буке. Очень долго курил маны слушал гугл и до меня дошло... с Этой звуковой Alsa работать не когда не будет у меня, НО! У нас же есть oss4 как рас о том как перейти на OSS4 с поддержкой Эмуляции ALSA (Что бы звук работал везде) я вам и расскажу

Всё делалось на Debian 6 i386 под сборку amd64 не вижу не каких отличий, но если чё пишите в коменты

Всё делалось под KDE4

И так начнём:

Для начала удалим всю ALSA что есть и так же избавимся от PulseAudio

sudo /etc/init.d/alsa-utils stop
sudo apt-get remove alsa-base alsa-utils

Потом выберем что у нас правит балом OSS
sudo dpkg-reconfigure linux-sound-base
В окне выбираем OSS

Теперь проинсталим нужные пакеты

sudo apt-get install -y binutils libgtk2.0-0 sed gcc libc6
sudo apt-get install -y build-essential linux-headers-`uname -r` gawk libtool libgtk2.0-dev
sudo apt-get install -y libesd0 libsdl1.2debian-oss

И собственно ставим сам OSS4
sudo atp-get install oss4-base liboss4-salsa2  oss4-dkms

Ну а теперь маленькая хитрость, делаем эмуяцию ALSA для этого идём на
Alsa-project.org И качаем там

  • Plugins (alsa-plugins)
    Library (alsa-lib)

Далее идём в директорию куда это скачали и разархивируем

tar -xjf alsa-plugins-x.x.xx.tar.bz2
tar -xjf alsa-lib-x.x.xx.tar.bz2

На момент написания статьи это были версии alsa-lib-1.0.25.tar.bz2 и alsa-pluginx-1.0.25.tar.bz2

Переходим в alsa-lib и набираем

./configure
make
make install

Потом переходим в alsa-plugins и делаем одно и тоже

./configure
make
make install

А теперь главный танец идём в папку пользователя и в корне (~/) делаем такой файлик с таким содержанием

 cat .asoundrc
 pcm.!default
 {
   type oss
   device /dev/dsp
 }
 mixer.!default
 {
   type oss
   device /dev/dsp
 }

А теперь

reboot

Уоля! У вас рабочий звук OSS4 с эмуляцией ALSA

P.S. Если чёт не работает попробуйте поставить пакет alsa-oss

apt-get install alsa-oss

Всем спасибо.

Материал из которого черпал знания
http://forum.ubuntu.ru/index.php?topic=69911.0
http://www.opensound.com
https://help.ubuntu.com/community/OpenSound

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

Игры

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

OpenTTD

Openttd logo
OpenTTD клон до сих пор популярной экономической стратегии Transport Tycoon Deluxe. За шесть лет разработки проект развился настолько, что с лёгкостью затмевает оригинал. Список изменений огромен и займёт несколько страниц. К примеру есть поддержка современных разрешений монитора, новые транспортные средства, новые типы дорог, море опций для настройки игры под себя и т.д. Как open-source продукт OpenTTD использует собственные ресурсы которые необходимо скачать. А так же возможности игры значительно расширяются за счёт установки дополнительных сетов, которые можно скачать с официального сайта игры - http://www.openttd.org. OpenTTD переведен на множество языков в том числе и на русский.

Я очень любил в нее играть (самая любимая ну после Q1 конечно :)) и не думал что увижу ее на FreeBSD. Это экономическая транспортная стратегия, в которой целью игрока является создание максимально доходной транспортной империи. Однако получить даже минимальный доход будет сперва нелегко. Ведь всё, что у вас есть вначале - это не очень продвинутый транспорт (игра, как правило, начинается в первой половине 20 века) и банковский кредит на N сумму денег. Чтобы деньги сами потекли в ваш карман, нужно будет соединять предприятия и города железными и автомобильными дорогами, создавать воздушные и водные транспортные пути. Всё это будет сопровождаться настойчивыми попытками со стороны конкурентов урвать свой кусок прибыли (AI обновляется через интернет и кроме того можно выбрать какой AI использовать, его сложность и количество соперников).

Действие игры не останавливается ни на минуту. Со временем появляются новые транспортные средства, и новые типы транспорта. Города растут и требуют всё больше ресурсов, кроме того, рост пассажирских и грузовых перевозок вызывает необходимость увеличения пропускной способности железных и автодорог, строительства новых путей сообщения и приобретения нового транспорта. Определенные требования диктуют и погодные условия: у вас есть выбор между умеренным, арктическим и тропическим климатом. Вдобавок ко всему, вашему маленькому мирку постоянно угрожают те или иные напасти: экономические спады, авиакатастрофы, взрывы на фабриках и заводах, наводнения и т.д.

Технический прогресс и обновление транспорта, борьба с конкурентами и противодействием местных властей - всё это не даст вам скучать на протяжении целых ста игровых лет (или больше =)).
Вам кажется, что это слишком долго? Поверьте мне, стоит лишь один раз начать - и вы уже не оторвётесь.

  • Скриншоты игры
  • TT навсегда!: Обзор игры
  • WiKi

Устанавливаем игру

# cd /usr/ports/games/openttd/ && make install clean
~~~
==========================================================================
 
    OpenTTD requires the original Windows version of "Transport Tycoon
    Deluxe" data files in order to function.  Copy the following files
    to /usr/local/share/openttd/data/ directory:
 
	sample.cat
	trg1r.grf
	trgcr.grf
	trghr.grf
	trgir.grf
	trgtr.grf
 
    If you are using a non-latin language, you may see lots of `?'s on
    the screen.  Please open your configuration file and add desired
    fonts (file name with full path).  Bold fonts might look better:
 
	[misc]
	small_font =
	medium_font =
	large_font =
 
    Enjoy!!
 
==========================================================================
 
===>   Compressing manual pages for openttd-1.0.3
===>   Registering installation for openttd-1.0.3
===> SECURITY REPORT: 
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/bin/openttd
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage: 
_http://www.openttd.org/
===>  Cleaning for lzo2-2.03_2
===>  Cleaning for openttd-1.0.3

Ресурсы

После инсталляции игра попросит скопировать в ее директорию оригинальные файлы Transport Tycoon Deluxe и если необходимо установить шрифт под латиницу.

Есть два варианта добавления тестур\музыки\звуков в игру.

  • Копирования оригинальных файлов с установочного диска Transport Tycoon Deluxe.
  • Скачивание и установка свободных ресурсов с OpenTTD.

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

  • download OpenGFX - графика
  • download OpenSFX - звуки
  • download OpenMSX - музыка

Закачиваем анимационные ресурсы и распаковываем в директорию /usr/local/share/openttd/data/ (у вас скорее всего уже будет более новая версия ресурсов)

# cd /usr/local/share/openttd/data/
# fetch _http://bundles.openttdcoop.org/opengfx/releases/0.3.1/opengfx-0.3.1.zip
opengfx-0.3.1.zip                             100% of 3307 kB  274 kBps 00m00s
# fetch _http://bundles.openttdcoop.org/opensfx/releases/opensfx-0.2.3.zip
opensfx-0.2.3.zip                             100% of   10 MB  211 kBps 00m00s
# tar zxf opengfx-0.3.1.zip
# tar zxf opensfx-0.2.3.zip
# rm *.zip
# chmod 755 opengfx-0.3.1/ opensfx-0.2.3/
 
# cd /usr/local/share/openttd/gm/
# fetch _http://bundles.openttdcoop.org/openmsx/releases/LATEST/openmsx-0.3.1.zip
openmsx-0.3.1.zip                             100% of  133 kB  278 kBps
# tar zxf openmsx-0.3.1.zip
# rm *.zip
# chmod 755 openmsx-0.3.1/

Старт!

Запускаем игру и наслаждаемся ;)

# /usr/local/bin/openttd

Вы можете создать ваш собственный OpenTTD сервер или присоединится к публичным серверам для совместной игры с людьми.

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

OpenTTD сервер

Openttd logo

  • Вступление
  • Установка и настройка сервера
  • Запуск сервера
  • Использование скриптов
  • Управление сервером
  • NewGRF
  • Web статистика

Вступление

OpenTTD - клон популярной игры Transport Tycoon Deluxe (сокращенно - TTD), изданной компанией Microprose в 1995 году. В отличие от оригинальной игры, Open Transport Tycoon Deluxe обладает открытым исходным кодом и распространяется бесплатно. За время развития проекта OpenTTD в игру были добавлены многочисленные новые возможности и эта работа продолжается.

В этой статье расскажу о поднятии сервера на стандартной сборке OpenTTD (без патчей).

Установка и настройка сервера

Устанавливать будем из исходников т.к порт увы обновляется не часто.
На данный момент доступна версия 1.0.4. Качаем исходники с сайта проекта http://www.openttd.org/en/download-stable, в списке выбираем openttd-x.x.x-source.

Распаковываем.

tar -xvf openttd-1.0.4-source.tar.bz2
cd openttd-1.0.4

Собираем и устанавливаем. При сборке может ругнуться на отсутствующую библиотеку liblzo2. Выхода два: либо поставить ее, либо отклонить его установку, добавив ключик --without-liblzo2 (библиотека liblzo2 нужна для сжатия save файлов)
./configure --enable-dedicated --without-liblzo2
gmake
gmake install

После установки копируем исполняемый файл
cp /usr/local/games/openttd /usr/local/share/games/openttd/

На этом установка завершена, приступаем к настройке.

Для начала нужно скопировать графические библиотеки, без нее сервер не запустится.

cd /usr/local/share/games/openttd/data
wget _http://binaries.openttd.org/extra/opengfx/0.3.1/opengfx-0.3.1-all.zip
tar -xvf opengfx-0.3.1-all.zip
cp opengfx-0.3.1/*.grf ./
cp opengfx-0.3.1/*.obg ./
rm -R opengfx-0.3.1

Теперь запустим сервер чтоб создался конфигурационный файл. По умолчанию конфигурационный файл хранится в домашней директории пользователя от которого запускаете сервер, но удобнее хранить все в одном месте. Поэтому мы укажем, где у нас будет конфигурационный файл с помощью ключа "-c"
cd /usr/local/share/games/openttd
./openttd -D -c openttd.cfg

В консоли посыпется лог старта сервера
[2010-09-30 11:26:53] dbg: [net] [core] starting network...
[2010-09-30 11:26:53] dbg: [net] [udp] initializing listeners
[2010-09-30 11:26:53] dbg: [net] [core] network online, multiplayer available

Выходим

quit

Должен появться файл конфигурации openttd.cfg который нам нужно отредактировать. Для начала настроим все что связано с сетевой частью.Для этого открываем openttd.cfg и ищем раздел [network].

[network]
server_port = 3979 // Порт который будет слушать openttd (Openttd использует TCP и UDP)
server_advertise = true // Будет ли наш сервер анонсировать себя на мастер
                        // сервер (_http://www.openttd.org/en/servers)
lan_internet = 0       // Тоже что и server_advertise
rcon_password = пароль // Пароль для доступа к консоли из игры командой rcon.
server_name = Название сервера
autoclean_companies = true // Включение или отключение функции автоочистка. Если включено,
                           // компании без игровой активности за определенное игровое 
                           //(autoclean_protected и autoclean_unprotected) время 
                           //будут уничтожены.
autoclean_unprotected = 12 // Компании не защищенные паролем будут удалены через 12 мес.
autoclean_protected = 0 // У компаний защищенных паролем и не активных будет удален пароль
autoclean_novehicles = 12 // Не активные компании с отсутствующим транспортом будут
                          // удалены через 12 месяцев
max_companies = 10       // Максимальное кол-во компаний
max_clients = 8          // Максимальное кол-во клиентов
max_spectators = 4       // Максимальное кол-во наблюдателей
restart_game_year = 2050 // Дата рестарта сервера
min_active_clients = 0   // Игра остановился, когда количество активных игроков меньше
                        // заданного числа

С сетевой частью все. Немного расскажу про другие настройки которые возможно вы захотите изменить.

[difficulty]
number_towns = 1 // Устанавливает количество городов для новой карты (0 = very low 
                 //| 1 = low | 2 = normal | 3 = high | 4 = custom)
number_industries = 1 // Устанавливает количество индустрии для новой карты (0 = none |
                      // 1 = very low | 2 = low | 3 = normal {default} | 4 = high)
max_loan = 300000 // Устанавливает максимальный начальный кредит на новую игру. 
                  // Всегда в британских фунтах. Изменение валюты в разделе [locate] 
                  // или в окне настроек игры изменит максимальную сумму кредита
                  // по обменному курсу выбранной валюты. Максимальная сумма кредита
                  // будет увеличиваться с течением времени, если инфляция включена
vehicle_breakdowns = 0 // Частота поломок транспорта (0 = none, 1 = reduced, 2 = normal)
disasters = 0 // Катастрофы ( 0 = выклб 1 = вкл)
 
[game_creation]
starting_year = 1950 // Начальный год
map_x = 9 // Размер карты (8 - 256, 9 - 512, 10 - 1024, 11 - 2048)
map_y = 9 // Размер карты (8 - 256, 9 - 512, 10 - 1024, 11 - 2048)
 
[vehicle]
max_trains = 500 // Макс. кол-во поездов
max_roadveh = 200 // Макс. кол-во машинок
max_aircraft = 50 // Макс. кол-во самалетов
max_ships = 30 // Макс. кол-во караблей
wagon_speed_limits = true // Устанавливает ограничение скорости для вагонов. 
                          // Эта функция влияет только на вагоны из доп. графики (NewGRF).
 
[station]
adjacent_stations = true Позволяет объединять смежные станции
 
[gui]
autosave = quarterly // Автоматическое сохранение игры в предопределенный интервал
                     //  времени. (off = отключить | monthly = каждый месяц |
                     // quarterly = каждый квартал | half year = каждые пол года |
                     // yearly =  каждый год)
max_num_autosaves = 10 // Кол-во файлов автосохранений.

Более подробно о настройках вы можете почитать тут wiki.openttd.org
Нектороые настройки можно менять во время игры из консоли с помощью команды set
set max_trains 750

Запуск сервера

С настройками все, теперь немного про способы запуска сервера. Можно запустить в бэкграунде (ключ "-f") или с помощью менеджера виртуальных сессий (screen).
Для начала создадим пользователя от которого будет запускаться сервер (лучше не запускать от привелигированного пользователя)

pw useradd openttd -s /sbin/nologin

Выставим права на директорию с игрой
chown -R openttd:openttd /usr/local/share/games/openttd

Запускаем в бэкграунде
su -m openttd -c "/usr/local/share/games/openttd/openttd -D -f -c \
/usr/local/share/games/openttd/openttd.cfg"

Можно запустить и в screen если он у вас установлен ( я предпочитаю этот способ т.к можно зайти и порулить сервером из консоли, да и вообще можно посмотреть что на нем творится )
Если у вас screen не установлен то будем собирать менеджер виртуальных сессий (все опции по умолчанию)

cd /usr/ports/sysutils/screen; make install clean

Запускаем
screen -A -m -d -S openttd su -m openttd -c "/usr/local/share/games/openttd/openttd -D \
 -f -c /usr/local/share/games/openttd/openttd.cfg"

Для авто запуска и управления сервером, написал небольшой скрипт

js# cat /usr/local/etc/rc.d/openttd.sh
 
#!/bin/sh
#
#
 
# PROVIDE: openttd
# REQUIRE: LOGIN
# KEYWORD: shutdown
 
. /etc/rc.subr
 
name="openttd"
rcvar=`set_rcvar`
 
load_rc_config $name
 
: ${openttd_enable="NO"}
: ${openttd_user="openttd"}
: ${openttd_port=""}
: ${openttd_args=""}
: ${openttd_cfg="/usr/local/share/games/openttd/openttd.cfg"}
 
command="/usr/local/share/games/openttd/openttd"
screen="/usr/local/bin/screen"
 
openttd_args="-f -c ${openttd_cfg}"
 
[ -n "${openttd_port}"  ] && openttd_args="${openttd_port} ${openttd_args}"
 
start_cmd="echo Starting ${name}.; su -m ${openttd_user} -c \
"${command} -D ${openttd_args}\""
 
run_rc_command "$1"

Сервер запускается в бэкграунде, если вы хотите чтобы сервер запускался в скрине то изменитье строку
start_cmd="echo Starting ${name}.; su -m ${openttd_user} -c \
"${command} -D ${openttd_args}\""

на
start_cmd="echo Starting ${name}.; su -m ${openttd_user} -c \
"${screen} -A -m -d -S openttd ${command} -D ${openttd_args}\""

Выставляем права на запуск для стартового скрипта
chmod +x /usr/local/etc/rc.d/openttd.sh

Добавляем в /etc/rc.conf

openttd_enable="YES"

Запускаем

/usr/local/etc/rc.d/openttd.sh start
Starting openttd.
Loading dedicated server...
  - Forked to background with pid 19216

Проверяем, запустился ли сервер
sockstat | grep openttd
openttd  openttd    29057 5  tcp4   192.168.1.54:3979   *:*
openttd  openttd    29057 41 udp4   192.168.1.54:3979   *:*

Не забудте открыть в фаерволе соотвествующие порты для TCP и UDP протокола

Все ок. Сервер запущен, пробуем подключиться.

Использование скриптов

OpenTTD имеет возможность выполнить один из ряда скриптов при запуске.
Скрипты должны включать обычный текстовый файл, который был переименован в то, чему он соответствуют (см. ниже). Скрипты находятся в папке scripts

Сетевые скрипты
on_client.scr - Этот сценарий выполняется всякий раз, когда Вы присоединяетесь к серверу
on_server_connect.scr- Этот сценарий будет выполняться на сервере, когда клиент подключается ( В этом скрипте можно написать приветствие или другу полезную информацию, например правила итд.)

Эти скрипты служат для настройки ip/порта и другой настройки сервера
pre_server.scr - Выполняется до запуска TCP стека игры ( Т.е можно изменить параметры порта итд)
pre_dedicated.scr - Выполняется до запуска TCP стека игры ( Т.е можно изменить параметры порта итд). Только для Dedicated режима сервера

Эти скрипты должны быть использованы для установки имени сервера, паролей итд.
on_server.scr выполняется после запуска сервера
on_dedicated.scr выполняется после запуска сервера . Только для Dedicated режима сервера.

Пример скрипта - on_server_connect.scr

say "== Добро пожаловать на сервер =="
say ""
say "== ПРАВИЛА =="
say "* Не блокировать"
say "* Одна компания для одного игрока"
say "* Играть под своим Ником (Не под ником Player)"
say "* Не забывайте ставить пароль на свою компанию"

Более подробнее об использовании скриптов, смотрите в примерах в папке scripts

Управление сервером

Управлением сервером можно из самой игры с помощью команды rcon из консоли игры (Консоль открывается по нажатию кнопки ~).. Пароль для доступа к управлению сервера устанавливается в конфигурационном файле сервера (rcon_password = ваш пароль)

Теперь про команды которые могут понадобиться для управления сервером.

kick <ip | client-id> - Кикнуть клиента по  IP <ip> или по его id <client-id>
ban <ip | client-id> - Бан клиента по IP <ip> или по его id <client-id>
unban <ip> - Разбанить клиента <ip>
banlist - Список забаненных клиентов
reset_company <company-id> -	Удалить компанию по его id <company-id>
pause - Паузу в игре
unpause - Снятие паузы
clients - Список клиентов ( Его id, имя, company_id и IP адрес)
companies - Список компаний и их атрибуты ( Название компании, кол-во техники итд.)
status - Получить информацию о состоянии всех подключенных клиентов.
move <client-id> <company-id>	Переместить клиента в любую компанию.
client_name <client-id> <name>	- Принудительно сменить Ник игроку.

Примеры:

rcon ваш пароль "move 1 2"
rcon ваш пароль "pause"

Более подробнее о консольных командах можно почитаться тут wiki.openttd.org/Console

NewGRF

Для того, чтобы сделать игру более разнообразной - вам поможет NewGRF.

NewGRF, это так называемые дополнительные наборы графики, которые расширяют возможности Openttd добавляя в него новую технику, индустрию, всевозможные здания и т.д.

Всю новую графику нужно скопировать в папку data. Не рекомендую все сваливать в корень папки data, а лучше создать в ней папку newgrf и туда скопировать новую графику.

Теперь нужно подключить графику в конфигурационном файле. Редактируем его.

[newgrf]
newgrf/jpstationsw.grf =
newgrf/indstatrw.grf =
newgrf/2ccshipsw.grf =
newgrf/4LVw.grf =

Так же у NewGRF бывают доп. параметры, которые указываются после знака =

newgrf/basecosts.grf = 21 16 57 15 1 12 2 10 15 9 16 9 17 10 18 9 19 9 48 7 27 12

Про параметры читайте в описании к NewGRF файлам.

Ссылки где можно найти доп. графику:
http://bananas.openttd.org/en/newgrf/
http://grfcrawler.tt-forums.net/index.php
http://wiki.openttd.org/NewGRF_List
На форуме tt-forums.net

Web статистика

Для статистики нам понадобятся
- Веб-Сервер ( Например Apache)
- PHP5
- PHP Class OpenTTDLib

OpenTTDLib - это набор PHP5 классов позволяющие получать статистику в реальном времени с openttd серверов, которые затем могут отображаться на вашем веб сайте или хранится в БД.

Требования к PHP:
OpneTTDLib использует функции BCMath, пэтому убедитесь что php собран с поддержкой BCMath, если нет - то установите его.

cd /usr/ports/math/php5-bcmath; make install clean

Установка:

cd /usr/local/www/

Качаем библиотеку. Увы, сайт автора не работает (http://codecubes.org), выкладываю сюда.

wget _http://ignix.ru/system/files/openttdlib-0.3.2.tar.gz

Распаковываем
tar xvf  OpenTTDLib-0.3.2.tar.gz

Переименовываем директорию
mv OpenTTDLib-0.3.2 openttd

и удаляем архив, если не нужен
rm OpenTTDLib-0.3.2.tar.gz

В директории можно найти документацию в подпапке doc, а так же примеры в файлах example.php и example2.php ( example2.php использует шаблон HTML_Template_Sigma, который можно найти в портах ).

Библиотека проста в использовании и очень хорошо документирована, чем я и воспользовался, написав свой вариант статистики.

Скачиваем архив в папку с OpenTTDLib, и разворачиваем

wget _http://ignix.ru/system/files/ottd.tar.gz
tar xvf ottd.tar.gz

Нам нужно отредактировать файл index.php, а точнее всего 2 строчки

$server['host']     = 'IP или имя сервера';
$server['port']     = 'порт';

Кеширование.

Поддержка кэширования OpenTTDLib позволяет использовать объект SimpleXML, имеющийся на PHP 5.1.3. Если вы отключите функциональность кэширования, тем не менее, вы сможете использовать более раннюю версию PHP5.

По умолчанию кеш сбрасывается в файл cache.xml, который должен быть расположен в корне OpenTTDlib, и веб-сервер должен иметь права на запись в этот файл.

chown www:www cache.xml
chmod 775 cache.xml

Расположение, а так же название кеш файла, можно изменить с помощью опции OpenTTDLib::OPTION_CACHE_FILE

$openttd->setOption( OpenTTDLib::OPTION_CACHE_FILE,	'cache.xml' );

Если у веб-сервера нет доступа для записи кэш-файла, пожалуйста, установите OpenTTDLib::OPTION_CACHE_UPDATE в false, чтобы остановить OpenTTDLib от попыток добавить новые или обновленные данные в файл.

$openttd->setOption( OpenTTDLib::OPTION_CACHE_UPDATE,	true );

Если вы хотите отключить кеширование, то установите OpenTTDLib:: OPTION_CACHE_NEWGRF в false.

$openttd->setOption( OpenTTDLib::OPTION_CACHE_NEWGRF,	true );

Более подробнее о кэширование можно почитать в документации, в частности , раздел о OpenTTDLib :: OPTION_CACHE_NEWGRF.

Настроим наш веб-сервер на примере Apache.

Сконфигурируем Apache. Добавим Alias в файл конфигурации веб сервера:

vim /usr/local/etc/apache22/httpd.conf
 
   Alias /openttd" /usr/local/www/openttd/"
    <Directory "/usr/local/www/openttd">
        Options Indexes FollowSymlinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

Перезапустим apache.

apachectl graceful

Пример статистики.

Приятной игры

ВложениеРазмер
openttdlib-0.3.2.tar.gz88.32 КБ
ottd.tar.gz12.27 КБ
ottd-stat.png34.72 КБ
Дополнительные материалы
Ссылки: 
>>ВЕТКА ФОРУМА<<
Ваша оценка: Нет Средняя: 5 (19 голосов)

Источник (получено 04/07/2025 - 16:09): http://www.ignix.ru/book/freebsd