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 — свободная 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. Для тех кому консоль не страшна, не чуждо желание думать и ставить мозги в нужном направлении, и есть желание изучать новое тому велком то хелл и респект лично от меня.
Для начала вам необходимо скачать ISO образ или купить дистрибутив установочных дисков FreeBSD:
Будет неплохо если вы проверите контрольную сумму загруженного образа (MD5) его оригинальную сумму смотрите в директории дистрибутива под именем CHECKSUMS.MD5
Выберете дистрибутив под нужную вам архитектуру это зависит от процессора и коственно от количества RAM. Так же если вы закупаете сервер необходимо проверить его комплектующие на "Аппаратную совместимость" для удостоверения все ли у вас будет опознаваться и работать в ОС.
И так дистрибутив записан на диск теперь вы выставляете в BIOS своего сервера загрузку с диска вставляете дистрибутив и как говорил Гагарин "Поехали!"(с) Ю.А. Гагарин.
Совет: для начала не используйте реальные компьютеры и тем более не свой личный компьютер. Вы можете случайно удалить все ваши данные. Для начало воспользуйтесь ПО VirtualBox вы сможете на нем потренироваться и дальше после наработки достаточного опыта приступать к установке на реальные сервера.
До начала установки вам необходимо знать как вы назовете свою машину ее будущие сетевые настройки (IP-адрес, DNS-сервер, шлюз по умолчанию, имя домена) и для чего вы будете его использовать от этого может зависеть разбивка диска. Если вы не уверены в том, что FreeBSD поддерживает ваше оборудование то лучше заранее обратиться к списку совместимого оборудования для вашего релиза.
И так загрузка с диска прошла успешно и перед вами начало установки и собственно часть Sysinstall в котором вам нужно выбрать свою страну.
Совет: движение по меню — стрелками вверх-вниз или [TAB], выбор пункта - [ПРОБЕЛ] или [ENTER].
В следующем разделе вам предлагается для системной консоли выбрать раскладку клавиатуры. По умолчанию установленна "American" нам необходимо выбрать свою "Russia KOI8-R".
Вот мы и подошли к Sysinstall тут можно установить систему, прочитать документацию, обновить существующую систему и тд. Вам необходимо выбрать пункт "Custom" вы конечно можете конечно выбрать и пункт "Standart" который более лояльно относиться к новичкам, но в данной статье мы выберем вариант "Custom".
Как вы ведите некоторые начальные буквы подсвечены и чтобы активизировать данный пункт нужно лишь сочетать с нажатием [ALT+БУКВА].
Рассмотрим основные пункты меню:
Данный раздел разбит на 7 пунктов и вы будете еще не раз возвращаться в это меню:
Начнем с 3го пункта Partition.
Как вы видете у меня пустой диск и я хочу использовать его весь для этого нажмем [А]. Если у вас на диске присутсвуют ненужные слайсы (slice) то выберите их (стрелки вверх-вниз) нажмите [D] и удалите ненужные и дальше снова нажмем кнопку [А]. На диске их может быть создано не более четырёх (по количеству записей в таблице разделов).
Необходимо сделать раздел freebsd загрузочным для этого выберем раздел "freebsd" (он будет между двух разделов) и нажмем [S]. В колонке Flags напротив вашего раздела появиться флаг (А).
Заканчиваем разбивку диска и выходим кнопкой [Q], при этом, он спрашивает про Boot Manager мы выбираем "Standart" остальные два нужны в случае при установке и проживания FreeBSD с другими ОС на сервере.
Попадем опять в "Custom Instalation" там выбираем 4й пункта Label в котором размечаем разделы в выделенном слайсе (slice). Разделы, располагаемые внутри слайса, обозначаются буквой с A до H и могут содержать только одну ФС. Для разделов A, B, C и D существуют определенные соглашения:
Полное имя раздела состоит из имени дискового устройства, номера слайса и буквенного обозначения раздела. К примеру ad0s2a - корневой раздел слайса номер 2 ведущего (master) ATA-диска расположенным на первом контроллере.
Можно нажать кнопку [А] и тогда система автоматически разобьет разделы, но это не эффективно и часто очень странно разбиваеться. Вот как раз пример такой разбивки.
Мы будем разбивать по своему усмотрению и я покажу основные этапы.
Нажмем [C] укажем нужный размер и значение, а так же укажем чем измерять указанный объем в M - Mb или G - Gb.
Укажем тип раздела - основной или раздел подкачки.
Укажем точку монтирования в данном случае я указываю корневую точку монтирования.
После всех манипуляций у вас не должно остаться "лишних" мегабайтов и должно разбито примерно так (размеры свои вы ставите самостоятельно):
Нажимаете [Q] завершаете работу со слайсами.
И тут опять попадаете в Custom Instalation, где выбираете пункт 5 Distributions. Теперь вам необходимо выбрать, какой именно дистрибутивный набор вам нужно установить. Выберите пункт "B Custom"
Вот целый список всего, что хотите и вам нужно указать необходимое:
Вот примерно что должно получиться. Выбираем [OK] и попадаем опять в Custom Instalation.
В Custom Instalation выбираете пункт 7 Commit.
После страшного предупреждения об откачке надежды и задраивания люков приступаем к погружению.
Во время установки, проходящей на нулевой консоли [F1], доступна командная строка по [F4] и подробности установки на [F2].
После окончания работ выходим и соглашаемся на визит в Configuration Menu.
Перед вами будет указан большой список пост-инсталяционных переменных пройдемся по основным параметрам.
Укажем пароль root и подтверждение всё что вписываете остается невидимым такая специфика так что не бойтесь.
Добавим нового пользователя в систему.
Укажем его имя, добавим в группу wheel для того чтобы он мог работать от имени root и при необходимости можете изменить shell.
В этом меню вы указываете раскладки, шрифты, отображения и тип терминала.
Следующи шагом вам необходимо настроить часовой пояс. На запрос о том настроенны ли CMOS-часы на UTC отвечайте "NO" затем выберете регион, страну и часовой пояс.
Попадаем в Configuration Menu там выбираем Network в нем заходим в Interfaces находите свой интерфейс предварительно отказавшись от IPv6 и DHCP.
Настраиваете свою сетевую карту согласно предварительно записанным настройкам.
Не забудьте пометить SSHD в этом разделе чтобы вы могли удаленно по протоколу SSH заходить на эту машину.
Выбираетесь в основное меню и нажимаете "X Exit Instalation"
Вас переспросят действительно ли вы хотите выйти и перезагрузить машину?
А так же вежливо предложат убрать загрузочный диск. После этого перезагрузится система и все будет готово к дальнейшей работе.
Вам необходимо научиться элементарно работать с системой это можно и по хенбуку и по книгам (см "Дополнительные материалы" в конце статьи) дополнительно можете посмотреть следующие статьи.
И вы сможете сделать все что угодно если будете иметь терпение и захотите заставить работать свои мозги в нужном и правильном направлении. Удачи!
Welcome to Hell!
Много клеток хороших и разных. Под таким слоганом я занялся обустройством клеток для новых пациентов. Но немного поясню о чем будет идти речь. Мне нужны были несколько клеток для разделения программ по серверам, для тестовых работ, а так же:
И так немного истории. Jail является потомком chroot и имеет поддержку на уровне ядра и мы можем ограничивать некоторые ресурсы потребляемые клеткой, а так же привязываем её к определенному IP адресу с определенным именем хоста и определенным местом корневого каталога. Получаем изолированные процессы - клетки, в которых вы можете делать, что хотите и это не повлияет на основную систему.
Необходимо провести несколько манипуляций:
bsd# setenv D /usr/home/jails/test.local bsd# mkdir -p $D bsd# cd /usr/src bsd# make buildworld bsd# make installworld DESTDIR=$D bsd# make distribution DESTDIR=$D bsd# mount -t devfs devfs $D/dev
1. Укажем переменную имени к окружению.
2. Создадим домашнюю директорию по переменной.
5. Заполним каталог поддерева необходимыми двоичными файлами, библиотеками, справочниками и так далее.
6. Установим все необходимые файлы из /usr/src/etc/ и /etc в каталог клетки $D/etc/.
# Значения для всех клеток 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#
Создадим в клетке пустой файл /etc/fstab чтобы при ее запуске не появлялось сообщение об отсутствующем файле fstab.
bsd# touch /home/jails/test.local/etc/fstab
Выключите в клетке port mapper.
bsd# cat /home/jails/test.local/etc/rc.conf |grep rpcbind rpcbind_enable="NO"
Настроим resolv.conf так, чтобы разрешение имен в клетке работало правильно. Создадим в клетке файл с нужным DNS сервером или скопируем с основной машины в клетку.
bsd# cat /home/jails/test.local/etc/resolv.conf nameserver 192.168.0.1
Запустим в клетке newaliases чтобы при запуске не появлялось сообщение от sendmail.
test# /etc/mail/ && newaliases
Отключим сетевой конфигурационный интерфейс чтобы при запуске не появлялось сообщение от 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 необходимо настроить демон 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 *:*
bsd# cat /home/jails/test.local/etc/rc.conf |grep sshd sshd_enable="YES"
Установите нужную временую зону в клетке.
Экспортируем существующие порты в клетку. Вы можете также скопировать их в нужную директорию или создать симлинк.
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 в основной системе для настройки работы клеток.
Для некоторого ограничения ресурсов клетки используйте совместно с ограничениями в /etc/login.conf ;)
Написать о самописном скрипте или о порте который может управлять клетками?
Теперь вы можете создавать и работать с клетками. Есть конечно недостатки клеток такие как отсутствие ограничений на использование ресурсов процессора или памяти без серьезной распилки и применения специальных патчей и многое другое. Но зато все работает нативно и быстро в данном случае мы добились желаемого.
Написал краткую справку об обновлении локальных и удаленных серверов в пределах одной ветки.
Сначала вам нужно обновить исходные коды системы, и мы будем использовать штатные средства операционной системы 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 можно сделать двумя способами:
# shutdown -r now
# shutdown now
При удаленном обновлении вы не должны вводить машину в single mode, если вы случайно это сделаете то потеряете связь с машиной.
В виду вышесказанного необходимо действовать так:
Можно и самим остановить эти службы без перезагрузки системы.
При запуске системы в нашем случае это локальный сервер необходимо смонтировать корневой каталог и остальные разделы, а при удаленном сервере нет необходимости в монтировании каталогов. А так же запустим 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 -cv (c-контекстный diffs вместо унифицированного)
Есть несколько вариантов управления и в низу mergemaster предлагают следующие варианты работы с текущим файлом:
При построчном сравнивании экран делится на две части, слева строки из старого файла, а справа из предлагаемого. При нажатии на "Enter" выводятся возможные варианты последующих действий:
и т.д.
После того как сравнение файла закончилось, предлагаются следующие варианты:
Бывает, что с новой версией системы появляются новые файлы, которых до этого не было. В таком случае предлагается 2 варианта:
И так сравниваются все файлы.
Когда закончите, объединять файлы перезапустите систему и удалите старые библиотеки, а так же проверьте версию системы:
# 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/
Для этого нам необходимо откорректировать ядро.
Копируем ядро 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)"
Выводим список возможных разрешений:
vidcontrol -i mode
vidcontrol MODE_XXX #(XXX) номер режима
vi /etc/rc.conf
allscreens_flags="MODE_XXX"
echo 'set prompt="(%l)[%{\033[36m%}`whoami`@%{\033[1;33m%}%m:%{\033[0;32m%}%~%{\033[0m%}]%# "' >> ~/.cshrc
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%}]%# "
для этого надо:
vi /boot/loader.conf
autoboot_delay="4" #задержка перед запуском в секундах loader_logo="beastie" #чертёнок вместо надписи FreeBSD splash_bmp_load="YES" bitmap_load="YES" bitmap_name="/boot/splash.bmp"
sysinstall
>Configure >Console
В завершении укажем язык пользователя. pw usermod root -L russian pw usermod <user> -L russian
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 ~/.cshrc
setenv EDITOR ee
vi ~/.cshrc
set autolist #выводит листинг при первом нажатии TAB
set autolist = ambiguous #выводит листинг при втором нажатии TAB
Ставим zsh
pkg_add -r zsh
cd /usr/ports/shells/zsh ; make install clean
chsh -s /usr/local/bin/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
Bacula — кроссплатформенное клиент-серверное программное обеспечение, позволяющее централизованно управлять резервным копированием, восстановлением, и проверкой данных по сети. Bacula также может работать на единственном сервере или, распределёно на нескольких, может записывать резервные копии на различные типы носителей, включая ленты, ленточные библиотеки, диски. Предлагает широкие возможности для управления хранилищами данных, облегчает поиск и восстановление потерянных или повреждённых файлов. Благодаря модульной структуре, Bacula легко масштабируемая система и может работать как в маленьких так и в крупных сетях. Дает возможность управления через CLI, GUI и веб-интерфейс.
Bacula разделена на несколько отдельных модулей это придает ей гибкости в работе:
Первое, что вы должны будете сделать это понять и описать кто, что и когда будет резервироваться. В нашем примере я буду использовать три сервера.
Как я сказал Bacula может быть распределена в сети и при грамотном ведении хозяйства и бюджета наша задача выглядит примерно так.
Примечание: чтобы не усложнять схему я специально убрал из неё трей-монитор, командную консоль, и БД каталога тк их можно поставить на другие машины. Пример
К слову сказать готовые ленты желательно переносить в другое здание (или помещение) тк от чрезвычайных случаев никто не застрахован. И вот еще я как и все вы живем в России обычно бюджет фирм на ИТ небольшой и приходиться выкручиваться самому так, что реальная схема часто выглядит так.
Для начала вам понадобится нарисовать простую таблицу примерно такого вида.
Так вы можете наглядно понять, что необходимо и как нужно сделать, дальше следуйте вашей схеме. В процессе схему можете дополнять и оптимизировать не забывая все документировать. Вы документируете свою работу ведь правда?
Дополнительно опишем типы резервного копирования их плюсы и минусы:
Предпочтителен 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 -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
Необходимо создать конфигурационные файлы для 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
Что бы эффективно управлять системой резервного копирования, нужно как следует подумать и попрактиковаться, пока не придет понимание как эта система работает. В конфигурационном файле вы должны описать к примеру работу для одного клиента несколькими переменными такими как Job, Storage, Pool, Client, FileSet, Schedule. Каждой переменной присваивается понятное имя и далее в Job указываются необходимые имена переменных чтобы это было законченной задачей и могло работать согласно вашим указаниям. Рабочий клиент состоит из 6ти элементов:
Примечание: Все переменные вы можете использовать в различных комбинациях указав нужное имя в нужной работе к примеру 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
# 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
Настроим консоль
# 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
Установим клиента на 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 *:*
Загружаем программу клиент 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, 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
*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 ====
И так с имитируем следующую ситуацию потеря\удаления файла\директории. Восстановим из архива данный файл с помощью 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 ====
Заходим на srv2.kmps.local и на диске C:\ появляется с восставленная директория.
C:\home\bacula\bacula-restores\E\SIT_v1.1
Восстановление файлов на Unix клиентах рассматривать не буду в виду аналогичной работы.
Я сторонник простых и надежных решений, а так же дублирующих систем. К примеру у меня как и у всех стоит RAID-1 на всех серверах и это хорошо. Идем дальше у меня до бакулы на серверах был отдельный раздел\слайс\жеский диск созданный специально для бекапов и туда резервные копии складывает утилита или скрипт. К примеру:
Бакула дополнила существующую схема:
Пул это описание для набора томов. Тома это файлы, ленты и DVD. Он используется при описании задания для указания нужного тома.
Аутентификация и авторизация доступа к директору может быть 3 типов:
Права доступа для именованной консоли по умолчанию - права отсутствуют, восстанавливать можно только в место по умолчанию.
Описание расписания запуска заданий и переопределения ресурсов Level, Pool, Storage, Messages для задания. Используется в описании задания для указания времени автоматического запуска.
Остальные переменные буду добавлять по надобности.
Воспользуемся Webacula это PHP (Zend Framework) веб-интерфейс для мониторинга и восстановление файлов.
Основные особенности программы:
Для начала скачаем 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"
В новой версии 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
Для мониторинга и удобной работы с бакулой есть несколько утилит доступных в 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 интерфейсы - их достаточное количество и на любой вкус список.
В) У меня не работают встроенные задания (к примеру 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 и подмонтируйте фс с последующим разворотом архивов\файлов в нужные слайсы.
ДЕМО ЧИСТО ДЛЯ КОНФИГА. СТАТЬЯ БУДЕТ ДОПИСАНА ПОЗЖЕ
===
# 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.cnf | 2.84 КБ |
Network UPS Tools - набор программ, которые обеспечивают интерфейс для сетевого мониторинга и управления UPS оборудованием. NUT позволяет работать нескольким серверам с одним UPS и позволяет штатно отключать необходимые серверы в случае разрядки батареи, а так же возможен мониторинг текущего состояния UPS (нагрузка/зарядка/входная мощность). В данной статье рассматривается использование ПО Network UPS Tools для обеспечения бесперебойной работы трех серверов от одного UPS с мониторингом через веб-интерфейс и снятием статистики в Cacti.
Инвентарь:
Рассмотрим разные примеры подключения 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 может быть с десяток.
В состав 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
Найдем и установим порт, а так же выберем необходимые опции.
# 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 ? ??????????????????????????????????????????????????????????????????????
# 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"
Все конфигурационные файлы находятся в директории "/usr/local/etc/nut"
В этом конфигурационном файле вы указываете настройки подключения 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"
Опишим некоторые параметры для использования:
Служит для контроля доступа к серверу и для установки других значений конфигурации. Этот файл содержит подробные сведения об предоставления доступа, таким образом, обеспечивается безопасность. В идеальном случае, только процесс upsd должен иметь возможность прочитать данные из этого файла.
Создадим конфигурационный файл.
# cp upsd.conf.sample upsd.conf
Добавим следующие значения для прослушивания следующих IP для запросов о состоянии UPS клиентов:
LISTEN 127.0.0.1 LISTEN 192.168.0.6
Опишем параметры:
Контроль доступа для 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
Значения:
Каждый 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" чтобы увидеть, что ваше оборудование поддерживает. Вот, к примеру, несколько команд.
Этот конфигурационный файл предоставляет основные функции в программе мониторинга 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]
Рассмотрим некоторые значения переменных:
Проверьте разрешения на директорию "/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
Проверим, все ли в порядке.
# 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
Можно посмотреть общий монитор.
# upsmon Network UPS Tools upsmon 2.4.1 UPS: APC@localhost (master) (power value 1) Using power down flag file /etc/killpower
Для запуска 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
Web-интерфейс проверки статуса UPS и изменения некоторых параметров батареи. Как вы помните при установке NUT вам было предложенно установить CGI - Web CGI interface надеюсь вы его выбрали для установки. И так вы можете посмотреть, что upsstats может нам предложить.
# man 8 upsstats.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 с вкладками:
Статистика и краткая характеристика:
Наглядный график с обновлением через F5 ):
Настройки доступны после ввода логина и пароля указанных в конфигурационных файлов (admin).
Обратите внимание на параметр "Minimum battery level for restart after power off (percent)" при каком заряде батареи подавать питание.
Для сбора статистики вы можете использовать кактус для этого нужно следующее:
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:
Нажимаем 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.
Подключаем 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"
В) Как после включения питания автоматически запускать сервера?
О) В 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_.gz | 7.89 КБ |
По просьбам трудящихся, из-за отсутствия простого мануала для всех начинающих, светлых администраторов UNIX, и внедрению технологий светлых в тыл компаний и корпораций использующих темные силы Микрософта - посвящается сие писание =).
Необходимо:
На любом предприятии рано или поздно возникает вопрос о централизованном хранилище электронных адресов, принтеров и тп. Это все может реализовать с помощью 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 сервера.
Общие имена атрибутов:
Возможности клиента:
Открытое программное обеспечение OpenLDAP состоит из нескольких основных компонентов:
Также содержится для 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.
Внесем в /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"
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"
# 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
После изменение 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
Сейчас нам необходимо создать корень:
# 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 приложения потому, что я могу запускать их отовсюду и из любой системы будь то *NIX, Windows, Linux и т.п. Простота в обслуживании, обновлении, единая точка входа и управления и т.п. Для OpenLDAP есть несколько приложений которые могут помочь в администрировании OpenLDAP - мой выбор остановился на phpLDAPadmin.
# 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
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>
Есть несколько программных продуктов, которые позволяют управлять LDAP серверами, но они, в основном, платные. Я остановился на LDAP Admin, он быстрый, бесплатный и простой, что позволяет его использование обычному пользователю. Настроить его очень легко см скриншоты.
Mozilla Thunderbird
Thunderbird использует LDAPv3. Добавим LDAP-сервер в адресную книгу.
Введем корректный адрес и данные сервера OpenLDAP
Поиск производится при введении строки поиска в поле (ничего нажимать не надо, поиск производится по мере ввода) по 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.
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 см прикрепленные файлы к статье.
В) Как в адресной книге вывести всех клиентов у которых есть электронная почта
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()
draw_dn($dn,$level,$first_child=true,$last_child=true)
В) Какой почтовый клиент может записывать информацию в адресную книгу?
О) Единственный почтовый клиент который может писать в LDAP это Evolution.
Вложение | Размер |
---|---|
Схема подключения Outlook 2003 к OpenLDAP.zip | 251.11 КБ |
S.M.A.R.T. (англ. Self Monitoring Analysing and Reporting Technology) — технология оценки состояния жёсткого диска встроенной аппаратурой самодиагностики, а также механизм предсказания времени выхода его из строя.
Мне было необходимо контролировать работу 4х SATA дисков на одном из серверов с заблаговременным предупреждением о проблемах. Я воспользовался замечательной утилитой smartmontools.
Содержание:
# 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 в 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
# /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.
Много информации, но вам необходимо внимательно изучить таблицу Vendor Specific SMART Attributes with Thresholds.
Для разбора, что к чему изучите вот этот документ:
Главным образом на работу жесткого диска влияют несколько важных параметров в которых вы должны сразу определять проблему.
Типы атрибутов:
Приступим к созданию конфигурационного файла:
# 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:
# 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 ;).
Сегодня будем разбирать логи 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
Скрипт очисти логов 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 самый работящий!
Офис должен работать и заниматься делом! Вот как тут и надо бы выписать ему премию. =)
Появилась необходимость иногда смотреть, кто в данный момент сидит в интернете через 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
Потребовалась отправка логов на нужный е-майл. Раскуривал штатный 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
Переведем основной конфигурационный файл:
# 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 нужен для создания псевдонимов (например как файл /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
VNSTAT служит для подсчёта трафика проходящего через сетевой интерфейс, и отображает статистику загрузки в разные периоды времени.
Установим 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/
Добавим задание в 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. Добавим 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
cd /usr/local/www/ ; mkdir -p /usr/local/www/vnstat
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
mv ./vnstat_php_frontend-1.5.1/* ./vnstat
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'); ?>
Качаем русский язык для 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
В: У меня ошибка в веб интерфейсе связанное с временной зоной.
О: У меня оказывается не было файла 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
/usr/local/etc/rc.d/apache22 restart
Для того чтобы посмотреть статистику необходимо будет в строке браузера ввести
"http://<адрес сервера где установлен apache>/vnstat/"
по моему всё =)
Скриншоты:
Сводка.
По часам.
Вложение | Размер |
---|---|
ru.php_.tar.gz | 624 байта |
Для организации 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" #Шлюз провайдера
No ALTQ support in kernel ALTQ related functions disabled
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
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
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
vi /etc/pf-allow-pc
192.168.0.2 192.168.0.3 192.168.0.5
В случае если на сервере не запущен named то на клиентских компьютерах надо в поле DNS указать пограничный DNS сервер, или настраивать named самим
vi /etc/rc.conf
named_enable="YES"
vi /etc/namedb/named.conf
listen-on { 127.0.0.1; 192.168.1.1;}; forwarders { 127.0.0.1; 192.168.1.1;};
Из порта:
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
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.
после чего перезагружаем 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
Ставим:
Из порта:
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
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
Хотя в 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
Прошло 1,5 года с момента написания этой статьи (на ресурсе Lissyara.su). И надо ее обновить с учетом всех возникших за эти годы поправок, созданных в реальной работе. После ввода в эксплуатацию она принесла мне много положительного, например экономия моего времени, а именно - проще стало проводить инвентаризацию, управлять договорами, обрабатывать и учитывать заявки пользователей, вести учет лицензий и ПО, и так же многое другое.
И так, что же такое GLPI и как этот продукт поможет нам в тяжелых буднях?
GLPI - это веб-приложение, разработанное на PHP для работы с ним необходим только доступ к серверу и браузер.
Среди его возможностей:
Кроме того, 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/
# 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. *****************************************************************
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 httpd.conf внесем следующее:
Alias /glpi "/usr/local/www/glpi" <Directory /usr/local/www/glpi> AllowOverride Options FileInfo </Directory>
# 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 для учетной записи публикатора Вы можете изменить или удалить эти учетные записи также как и первые записи в БД.
Необходим для технических работ к примеру для проверки почты, отправки уведомлений и т.п.
# crontab -l |grep glpi */5 * * * * /usr/local/bin/php /usr/local/www/glpi/front/cron.php > /dev/null 2>&1
Это очень удобная вещь даже для самих администраторов. К примеру вам надо не забыть, что то сделать или пользователь не имеет возможность зайти в тикет систему по веб интерфейсу. Вам нужно будет всего лишь отправить по нужному е-майлу письмо с вопросом. И оно уже автоматически попадет в тикет систему. И если у вас сделано, что за пользователем закреплен е-майл то GLPI автоматически свяжет его с этим сообщением.
Вам необходимо настроить почтовую учетную запись приемника почты. Пример:
Основная панель > Установки > Приемник почты
Отправьте на е-майл заявку и в приемнике почты нажмите на кнопку "Получить заявки сейчас". Если все получилось то двигаемся дальше, если нет то ищем где ошиблись.
Я привык чтобы учетные записи пользователей были в одном месте и все службы брали от туда необходимую им информацию. Как и все я использую LDAP каталоги это может быть как OLDAP так и Active Directory Microsoft. Для примера будем подключаться к Active Directory. Для этого необходимо создать технического пользователя и настроить на получение информации с LDAP. Думаю с пользователем проблем не возникнет (у меня он services), а подключить необходимо так:
Основная панель > Установки > Аутентификация
Выбрать Внешняя аутентификация - 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 сервере не забывайте синхронизировать и в GLPI.
Установка плагинов производится в директорию /glpi/plugins
К примеру установим плагин 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 файл.
В. Проблема с читаемостью PDF файлов. Все русские слова отображаются закорючками.
О. Это не баг, а фича разработчики GLPI знают и пока ничем не могут помочь. Единственное есть возможность обхода.
1. Экспортировать в CVS.
2. Открыть файл с помощью OpenOffice, указав кодировку открываемого файла UTF-8.
В. Как пользователям облегчить доступ к веб интерфейсу GLPI?
О. Я создал алиас help и теперь пользователи набрав это слово сразу попадают в GLPI.
DHCP - это расширение протокола BOOTP, который был придуман для того, чтобы бездисковые станции UNIX могли загружаться по сети. Подсистема BOOTP предоставляет клиентам IP-адреса, сетевые маски, стандартные шлюзы, а так же информацию, касающуюся начальной загрузки через TFTP. Протокол DHCP не ограничивается этими параметрами, вводя понятие аренды. Хватит пока теории - на практике любому сетевику средних и больших сетей необходима управляемая сетевая структура которая, будет динамично управляться и обновляться при необходимости. Для этого мы и используем протокол DHCP.
Воспользуемся эталонным ПО в реализации DHCP - демон организации Internet Systems Consortium. Мы опишем конфигурацию обеспечивающую, динамическое распределение указанного диапазона IP-адресов, фиксирование IP-адресов за сетевым устройствами, а также передачу клиентам разнообразных параметров необходимых, для работы в сети TCP/IP. А так же реализуем дополнительные трюки, к примеру - запуск в нескольких подсетях, ограничивание неизвестных клиентов, и, живя в эпоху сетевых дикарей, мы будем повышать безопасность демона путем запуска в песочнице (изменение корневого каталога chroot) и работой от имени непривилегированного пользователя. Но и на старуху бывает порнуха - предохраняйтесь и обновляетесь. =)
Установка проста, но не забывайте сначала обновить систему портов. Найдем необходимый нам порт.
# 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; } }
Из этого вам уже понятно, что мы сформировали две группы (для удобства работы и можно добавлять больше групп или вообще без них работать)
Для автоматического запуска при перезагрузке сервера внесем в /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" # необходимо для полного корня
#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" # доп. сетевой интерфейс через пробел
Иногда необходимо ограничивать работу неизвестных клиентов, о которых нет упоминания в dhcp.conf, или использовать разные конфигурации сетей в зависимости от клиента - это делается двумя параметрами.
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; } } }
И так эта версия протокола накладывает свои ограничения на работу 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
В: Где DHCP хранит списки выданных адресов?
О: У DHCP есть файл базы данных по арендуемым параметрам называемый dhcp.leases также демон периодически делает резервную копию этого файла dhcp.leases~. И при проблемах с основным файлом вы можете его заменить резервным.
Я подумал о создании социальной сети для своего родного города в которой можно смотреть ролики, создавать музыкальные альбомы, слушать музыку он-лайн и так далее. Для начала необходимо создать платформу для нее. С последующей установкой (в следующей статье будет рассмотрена его установка) socengine 3.20. Приступим к установке необходимого программного обеспечения для будущей работы socengine.
Обновляем исходные коды и порты встроенной утилитой 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
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 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:
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"
Соберем данный модуль.
/usr/ports/www/mod_rpaf2 && make install clean
Установим и настроим 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, но тут появились проблемы.
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/
/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:
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; } }
Ставим ускоритель.
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
Redmine — открытое серверное веб-приложение для управления проектами и отслеживания ошибок. Redmine написан Ruby и представляет собой приложение на основе широко известного веб-фреймворка Ruby on Rails.
Данный продукт предоставляет следующие возможности:
Я буду устанавливать на "голую" FreeBSD 8.0 i386 и поэтому у меня будет больше запросов по установке, а у вас соответственно меньше.
Установим классически из портов:
# 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 -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:
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-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 хранит данные сессии в куках по умолчанию, который требует секрета и мы его создадим. Это можно сделать командой:
# 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 и в браузере вводим _http://test.site.local
Вводим учетную запись администратора
Логин: admin
Пароль: admin
В своем профиле меняем язык на Русский. И обязательно меняем дофолтовый пароль на свой.
Настроим систему рассылки сообщений.
# 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/
# 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) =============================
# 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, позволяющие получать уведомления посредством этой технологии, также уведомления рассылаются с помощью электронной почты.
В. Проблема после обновления
О. Выполните
# 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
Статей про 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 зайти Настройки->Действия с указанием об отправке уведомлений и по СМС.
Вот и все.
Для многих устройств нет шаблонов в Zabbix, но я начал создавать свои шаблоны. Все они представлены ниже прикрепленные к статье. По каким требуются пояснения я буду писать. Так же я научу создавать шаблоны и так начнем.
Скрипт на 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
Дальше в шаблоне удалите ненужные элементы данных, триггеры и при необходимости создайте свои графики и подключайте к нужным сетевым устройствам.
Шаблон скачиваем ниже статьи, но требуются следующие движения. Для мониторинга 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
==
+ - добавлено
^ - обновлено
Приходит к нам осень.
Упали все листья -
Пора мониторить.
Хайку.
В один из дней я захотел узнавать о неполадках в сетевой инфраструктуре\серверов\сервисов\сайтов и тп не через пользователей или пока сам не споткнусь. А был бы своевременно предупрежден через sms\mail\jabber в ту же минуту когда начались неполадки. Мог посмотреть и визуально контролировать карты моей инфраструктуры удаленных серверов и сервисов и видеть в какой части сети или линии произошел сбой и\или какой сервис стал недоступным. И задумался о системе мониторинга, оповещения и отслеживания статусов разнообразных сервисов в компьютерной сети, серверов и сетевого оборудования.
Долго выбирал из таких систем как Nagios, Zenoss, Zabbix, GroundWork, OpenNMS и Opsview.
Читал информацию по каждой системе, тестировал и сравнивал каждую. Отказывался от проектов по разным причинам например нет нужного функционала или он есть, но не в базовой бесплатной поставке, а в ее коммерческом варианте. Так же в виду неудобной эксплуатации, отсутствие грамотной документации, поддержки, работой серверной части на всякой экзотики типа Zope\Python и тп.
Остановился я на системе Zabbix в виду того что:
Содержание:
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/
# 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
# 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
Устанавливается легко и непринужденно.
# 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'.
Для начала:
Запомните, настройку вы делаете один раз и от этого будет зависит как вы в дальнейшем поедете. Дальнейшая работа сведется к просмотру графиков нагрузки, добавлению хостов и отслеживанию параметров.
Чтобы настроить zabbix нам необходимо понять его терминологию и чем он оперирует при сборе и анализе данных. Терминов не много.
И так поехали.
У хостов есть определенные параметры и мы их должны контролировать. Иногда, когда они переходят заданную нами границу и срабатывают триггеры которые мы установили или выбрали по шаблону, что вызывает собой необходимые действия например отправка вам на телефон sms с текстом «Ваш сервант в Африке навернулся ;)». Так же рисуются графики показателей их можно обьеденить в экран.
Узлы сети - Здесь вы можете создать узел связи и включить в группу узлов связи которую вы можете так же создать. При создание узла связи (хоста) задается его имя наименование группы в которой ему необходимо быть включенным, IP адрес или доменное имя, порт агента, состояние и связь с шаблоном (схема сбора данных).
Группы узлов в сети — логическое объединение устройств. Например все сервера в группу Servers все сайты в Web и тп.
Элементы данных - показателем может быть любой системный параметр, значение которого может вычислить zabbix-агент. Показатель может быть как «встроенным» (например объем свободной памяти, загрузка CPU) так и пользовательским. При создании показателя можно указать достаточно много параметров, важнейшие из которых: тип, ключ ,интервал обновления, приложение и группа. Интервалы можно задавать весьма гибко.
Триггеры - триггер создается по какому то определению, если какой-то из показателей перешел через граничное значение. Например можно указать что при отсутствие пинга на определенном хосте активироваться. (создан темплар в котором создан тест пинга и темплар присвоен хосту. И в триггерах создано правило(триггер) для хоста при отсутствие оного активироваться).
Действие — при активации триггера необходимо выполнить определенное действие. Например отправить смс или написать письмо. Вы корректируете эти действия и убираете ненужные. А так же а пользователях указываете кому отправлять сообщения.
Графики - чтобы увидеть график, надо задать его имя, размеры для прорисовки, и показатель, который мы хотим отобразить. Для показателя задается дополнительно цвет и вид заливки. На одном графике может быть сведено несколько показателей. Для изменения существующего графика нажмите напротив него ссылку «Изменить».
Комплексные отчеты — тут сводим все графики в один экран. Тут указываем количество строк и колонок. Для изменения существующего отчета нажмите напротив него ссылку «Изменить». Каждый график можно проматывать во времени, а также менять масштаб временной оси (1 час, 8 часов, сутки, неделя, месяц, год).
Карты сети - тут вы создаете кары или меняете существующую. На данный момент у вас там определен только один хост это ваш сервер. И вам необходимо будет добавить новые элементы (хосты) и связать их между собой связями зависящими от триггеров.
Должно получится что то похожее:
Эту систему я использую уже давно и она продолжает меня радовать единственное при обновлениях старательно сохраните существующую БД и файлы тк разработчики в новых ветках знатно косячат. Да и настроите чтобы система не так сильно стремалась по каждому не пройденному тесту пинга и не отправляла вам e-mail по мелочам. Особенно касается это удаленных серверов стоящих, где нибуть на островах. =)
Добрый день, сегодня хотел бы рассказать всем о так сказать почти всех способах оповещения системы Мониторинга Zabbix. В данной статье пойдёт речь о таких системах мгновенных сообщений как: SMS, Jabber, ICQ, email
Содержание:
Все действия делались на системе FreeBSD 8.2 i386 и будем считать, что сервер Zabbix стоит и уже работает, а как развернуть и настроить сервер в этой статье описываться не будет. Для этого вы можете прочитать статью Zabbix - мониторим и отслеживаем
Начнём с самого простого Email
Для начала идём в порты и ставим очень удобную программку sendEmail
cd /usr/ports/net/sendemail/ && make install clean
?????????????????????????????????????????????????????????????????????? ? 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
Я использовал смсшлюз ТурбоСМС Он очень удобен так как у него есть возможность отправки СМС через 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
Возможно есть и другие способы, с помощю ПХП ботов, или ещё чего, но я выбрал путь с помощью консольного клиента 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/
chmod +x zabbix_icqsend
И делаем такой запросик
./zabbix_icqsend UIN MSG
./zabbix_icqsend 123456789 Helo World
И вам придёт сообщение.
Есть пару нюансов, надо что бы вы были авторизированы у этого номера, и что бы он у вас тоже.
Так же есть фаерволом не закрыть порт 33000 то можоно по телнету подключиться и слать сообщения )
Русский только в UTF-8
Ну вот собственно и всё, писал на скорую руку, так что вопросы в студию, поправлю чё надо, и дорасскажу чего не хватает
Всем спасибо, все свободны.
Скрипт обновлений называется nod32 mirror script и предназначен для создания собственного зеркала обновлений для сети, офиса, или другой группы компьютеров. На сегодняшний момент, а это 25.09.2011 существует стабильная версия скрипта nod32ms_3.0.0_beta1 успешно протестированная под разными платформами.
Что требуется для работы скрипта:
Что умеет скрипт:
Как установить скрипт обновлений nod32ms?
temp_dir = путь до temp директории (например /etc/nod32/temp) web_dir = путь до пользовательской директории обновления (например /var/www/localhost/htdocs)
59 * * * * root sh /usr/local/etc/nod32ms/manual_start.sh (вместо /usr/local/etc/nod32ms/ укажите свой путь до файла manual_start.sh, после записи сделайте переход на следующую строку, иначе ваш крон выдаст ошибку)
Заходим в корень скрипта и в зависимости от системы и меняем пути до файла php.exe и\или update.php в файлах manual_star.bat или manual_start.sh, потом запускаем и ждем до тех пор пока скрипт не отработает
Вложение | Размер |
---|---|
nod32ms_3.0.0_beta5.rar | 566.85 КБ |
В процессе своей работы я заменил 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 [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
Создадим 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
Создадим отказоустойчивый режим который можно использовать для перехода на вторичный интерфейс при потери связи на основном интерфейсе. Создадим и настроим интерфейс lagg0, с em0 как основной интерфейс и em1 как дополнительный интерфейс:
# ifconfig lagg0 create # ifconfig lagg0 up laggproto failover laggport em0 laggport em1
# 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>
В следующем примере используется активный отказоустойчивый интерфейс для настройки роуминга между проводными и беспроводными сетями, используя два сетевых устройств. И всякий раз, когда проводной 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.
Появилась необходимость преобразовать имена файлов из одной кодировки в другую на 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!
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.gz | 216.46 КБ |
Как выяснилось есть возможность настраивать 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
Дополнительные опции МС:
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 Включить поддержку встроенной командной оболочки (по умолчанию)
Иногда очень важно знать, что изменилось в конкретном файле на критическом важном сервере с последующим восстановлением конфигурационного файла. А так же, кто, когда и что там менял. Для этого есть встроенная утилита Revision Control System (RCS). Пользоваться ей очень легко только нужно привыкнуть к работе с ней.
Создайте в той директории, где находится файл директорию "./RCS" там будут лежать контрольные версии файлов данной директории. Пример:
# mkdir /etc/RCS
Для начала ведения истории необходима команда "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
Для редактирования файла запишите его контрольное значение с помощью команды "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 /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" и тп.
Эта небольшая утилита помогает мне разобраться на серверах с установленными не мною портами и отсеять зерна от плевел и надеюсь вам она тоже понравится.
# 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 - даст список верхнего уровня пакетов без их зависимостей, установка только этих пакетов должны установить всех установленных пакетов.
Надеюсь вам это поможет немного разобраться в помоечке установленных портов. =)
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
pfctl -t sshblock -T show
pfctl -t sshblock -T delete 192.168.1.9
crontab -e
30 * * * * root /sbin/pfctl -t sshblock -T expire 86400
Нам предстоит защититься от перебора паролей средствами 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:
cd /usr/ports/security/sshguard-pf && make install clean
vi /etc/syslog.conf
auth.info;authpriv.info |exec /usr/local/sbin/sshguard
killall -HUP syslogd
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"
block in log quick from <sshguard> label "ssh bruteforce"
pfctl -f /etc/pf.conf
pfctl -t sshguard -T show
pfctl -t sshguard -T delete 192.168.1.9
Документация по sshguard
Документация по Packet Filter (pf)
Пришло время обновлять 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`;
Друг попросил настроить FreeBSD на котором, он держал с десяток сайтов среди них были самописные, CMS и CMF так чтобы они эффективно использовали систему, ресурсы компьютера и выводили результат за менее короткий срок. И так в задаче нам дано FreeBSD 8.1 в которой необходимо настроить систему для улучшения отклика веб сервера и скорости выдачи запросов.
Немного теории.
Выявите обжор.
Необходимо посмотреть утилитой top и выявить проблемы, связанные с загруженностью процессора и объемом используемой оперативной памяти. Если ЦП загружен на 100% (выше 5ки) и\или оперативной памяти не хватает (ПО уходят в своп), то необходимо выяснить, что потребляет все ресурсы и попытаться исправить положение. Это может быть и сам веб сервер, CMS\CMF, СУБД и тп. Может в действительности слишком мало RAM или сильно нагружен слабый процессор.
Проверьте дисковую подсистему
(Разбивка HDD корректировка Swap и диагностика дисковой системы.) инструментом типа vmstat. И если вы видите, что дисковая активность неадекватна при наличии достаточного объема оперативной памяти и не загруженного ЦП значит у вас проблема ввода-вывода. Это может быть связанно с работой большого кол-ва БД, фонового выполнения тяжелых сценариев, неподходящее использование RAID для приложения с частыми операциями чтения\записи, использованием неэффективных ATA, SATA жеских дисков, контроллеров и т.п.
Убедитесь в эффективности SWAP и TMP.
Системе возможно не хватает памяти и она обращается в SWAP. Бывает SWAP находится на медленном или постоянно занятом работой диске [swapinfo].
Решений два:
Решение для TMP это использование [tmpfs] об этом чуть ниже.
Проблемы с WAN
Бывает так, что канал в WAN перегружен или у вас проблемы с хостингом. Удостоверьтесь что линия связи не перегружена.
Решений два:
Оптимизация
Оптимизируйте ваши CMS\CMF для этого существуют интересные продукты, например плагины для Firefox.
Эти плагины позволят вам найти причины тормознутости ваших сайтов.
К примеру YSlow сможет помочь в поисках причины, почему странички на сайте не грузятся так быстро, как хотелось бы, тогда как ЦП, память, дисковая подсистема не уперлись в потолок.
Выполнение PHP кода - большая часть обслуживания запроса и нам необходимо его ускорить. Существенное увеличение производительности можно получить кэшированием кодов операций PHP после компиляции. При каждом запросе PHP анализирует и компилирует весь код в промежуточную форму для каждого запроса. Кэширование позволяет избавится от многократного анализа и компиляции и использовать предварительно скомпилированный код.
Распространенные продукты кэширования операций:
Я использую 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
Информацию о 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а вы уже можете почувствовать разницу =)
Часто система показывает падение производительности 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...
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 в виду конечной скорости обработки. Не буду изобретать велосипед см Apache2 + php5 + mod_fastcgi
Процитирую wiki:
Интерфейс FastCGI — клиент-серверный протокол взаимодействия вебсервера и приложения, дальнейшее развитие технологии CGI. По сравнению с CGI является более производительным и безопасным.
FastCGI ликвидирует множество ограничений CGI-программ. Проблема CGI-программ в том, что они должны быть перезапущены веб-сервером при каждом запросе, что приводит к понижению производительности.
Так же на фронт можно установить и Nginx - про частичную установку его можно прочитать тут Веб сервер на много коннектов и высокую нагрузку (nginx+php-fpm+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)
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 - нахождение 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 вас порадует. =)
В свете вышесказанного и при применении даже некоторой части рекомендованного здесь вы увидите как ваш веб сервер "оживет". Ну, если этого не произошло или вы не добились значительных результатов, то видимо вам пришло время закупать более мощное железо и не выдумывать "изощренные" методы оптимизации.
Содержание:
Иногда приходится сталкиваться с тем что не знаешь, где конкретно искать тот или иной порт для этого есть такая вещь как "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
dd if=/dev/ad4 of=/dev/null bs=1m count=1024
# 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
Столкнулся с тем что понадобилось сделать пакет
если очень медленный инет из разряда 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 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
Появилась необходимость выводить журналы (логи) программ на экран подобно команде 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
Готово!:
В работе с FreeBSD столкнулся с тем что после установки flashplugin-mozilla Firefox начал крашится. Поэтому решил найти что нибудь другое и нашёл решение проблемы с двумя вариантами действия:
Включаем режим совместимости с Linux и linprocfs.
Редактируем rc.conf
vi /etc/rc.conf
linux_enable="YES"
kldload linux
vi /etc/fstab
linproc /usr/compat/linux/proc linprocfs rw 0 0
mkdir -p /usr/compat/linux/proc
Nspluginwrapper - это кроссплатформенный интерфейс, разработанный как раз для того, чтобы пользователи Mozilla/Firefox архитектур AMD64 и PowerPC могли использовать плагины, разработанные только для i386.
cd /usr/ports/www/nspluginwrapper && make install clean
cd /usr/ports/www/linux-flashplugin9 && make install clean
nspluginwrapper -v -a -i
ln -s /usr/local/lib/browser_plugins/npwrapper.libflashplayer.so \ /usr/local/lib/firefox3/plugins/npwrapper.libflashplayer.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
Включаем режим совместимости с 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
Иногда необходимо подключится к удалённому рабочему столу Windows, а так не хочется вставать из-за своей любимой FreeBSD. =)
Тогда на помошь приходит утилита rdesktop
нажимаем "alt+F2" и вводим:
xxx.xxx.xxx.xxx IP адрес удалённой системы Windows.
rdesktop xxx.xxx.xxx.xxx -f -y -u пользователь -p пароль
Применение: 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 клавиатуры (по умолчанию нет)
но в Windows XP есть такая проблема - нельзя подключится одновременно более одного пользователя
для того чтобы в Windows XP можно было подключится к удалённому рабочему столу, и при этом не отключать того кто уже подключился нужно немного пропатчить систему =)
при необходимости можно заменить стандартный порт 3389 удалённого подключения на любой другой.
для этого надо:
открыть стандарнтый редактор реестра regedit, сделать это можно нажав кнопку Windows + r и ввести regedit
затем отыскать ветку реестра
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber
и заменить порт на другой
как оказалось есть проблемма с переключением раскладок клавиатуры на удалённой машине.
я решил проблему так:
порт лежит здесь /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 XP | 150.7 КБ |
Привет Линукс Пипл, недавно достался мне старенький бук bliss 507s На нём стояла WinXP и жутко всё тупило, да и играть мне на нём особо не нужно было хотел поставить Debian\Ubuntu и работать на нём в консоли, поставил Debian добавил ручками KDE Xorg ну и всё чё хотел короче, и тут поглядел и понял что Alsa не работает с той звуковой что установлена в этом буке. Очень долго курил маны слушал гугл и до меня дошло... с Этой звуковой Alsa работать не когда не будет у меня, НО! У нас же есть oss4 как рас о том как перейти на OSS4 с поддержкой Эмуляции ALSA (Что бы звук работал везде) я вам и расскажу
Всё делалось на Debian 6 i386 под сборку amd64 не вижу не каких отличий, но если чё пишите в коменты
И так начнём:
Для начала удалим всю 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 И качаем там
Далее идём в директорию куда это скачали и разархивируем
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
OpenTTD клон до сих пор популярной экономической стратегии Transport Tycoon Deluxe. За шесть лет разработки проект развился настолько, что с лёгкостью затмевает оригинал. Список изменений огромен и займёт несколько страниц. К примеру есть поддержка современных разрешений монитора, новые транспортные средства, новые типы дорог, море опций для настройки игры под себя и т.д. Как open-source продукт OpenTTD использует собственные ресурсы которые необходимо скачать. А так же возможности игры значительно расширяются за счёт установки дополнительных сетов, которые можно скачать с официального сайта игры - http://www.openttd.org. OpenTTD переведен на множество языков в том числе и на русский.
Я очень любил в нее играть (самая любимая ну после Q1 конечно :)) и не думал что увижу ее на FreeBSD. Это экономическая транспортная стратегия, в которой целью игрока является создание максимально доходной транспортной империи. Однако получить даже минимальный доход будет сперва нелегко. Ведь всё, что у вас есть вначале - это не очень продвинутый транспорт (игра, как правило, начинается в первой половине 20 века) и банковский кредит на N сумму денег. Чтобы деньги сами потекли в ваш карман, нужно будет соединять предприятия и города железными и автомобильными дорогами, создавать воздушные и водные транспортные пути. Всё это будет сопровождаться настойчивыми попытками со стороны конкурентов урвать свой кусок прибыли (AI обновляется через интернет и кроме того можно выбрать какой AI использовать, его сложность и количество соперников).
Действие игры не останавливается ни на минуту. Со временем появляются новые транспортные средства, и новые типы транспорта. Города растут и требуют всё больше ресурсов, кроме того, рост пассажирских и грузовых перевозок вызывает необходимость увеличения пропускной способности железных и автодорог, строительства новых путей сообщения и приобретения нового транспорта. Определенные требования диктуют и погодные условия: у вас есть выбор между умеренным, арктическим и тропическим климатом. Вдобавок ко всему, вашему маленькому мирку постоянно угрожают те или иные напасти: экономические спады, авиакатастрофы, взрывы на фабриках и заводах, наводнения и т.д.
Технический прогресс и обновление транспорта, борьба с конкурентами и противодействием местных властей - всё это не даст вам скучать на протяжении целых ста игровых лет (или больше =)).
Вам кажется, что это слишком долго? Поверьте мне, стоит лишь один раз начать - и вы уже не оторвётесь.
# 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 и если необходимо установить шрифт под латиницу.
Есть два варианта добавления тестур\музыки\звуков в игру.
Оригинальных файлов может быть не у каждого и тем более это не кошерно когда есть новые, переработанные и улучшенные текстуры, звуковое сопровождение и музыка проекта OpenTTD. Потому необходимо зайти по ниже указанным ссылка выбрать скачать самую последую версию:
Закачиваем анимационные ресурсы и распаковываем в директорию /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 - клон популярной игры 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
./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
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
[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 // Кол-во файлов автосохранений.
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 *:*
Все ок. Сервер запущен, пробуем подключиться.
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, это так называемые дополнительные наборы графики, которые расширяют возможности 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
Ссылки где можно найти доп. графику:
http://bananas.openttd.org/en/newgrf/
http://grfcrawler.tt-forums.net/index.php
http://wiki.openttd.org/NewGRF_List
На форуме tt-forums.net
Для статистики нам понадобятся
- Веб-Сервер ( Например 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
Библиотека проста в использовании и очень хорошо документирована, чем я и воспользовался, написав свой вариант статистики.
Скачиваем архив в папку с 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.gz | 88.32 КБ |
ottd.tar.gz | 12.27 КБ |
ottd-stat.png | 34.72 КБ |