Tag Archives: Freebsd

Всегда настраивайте синхронизацию времени на серверах

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

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

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

Часов 6 я потратил на попытки определить причину проблемы. Различные настройки приложения в твиттере, настройки библиотеки hybrid_auth (библиотека для php которая позволяет легко подключать авторизацию через множество сервисов). И все тщетно.

Твиттер возвращал ошибку: 

Authentification failed! Twitter returned an error. 401 Unauthorized.

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

Перемещение/копирование большого количества файлов на freebsd

Есть у фряхи такая проблема, как невозможность задать приоритет доступа к диску для различных команд, как это сделано в линуксе, например. И из-за этого, если вам нужно переместить большой объем данных с одного диска на другой, во время выполнения операции трудности с доступом к диску будут испытывать все остальные программы, например mysql сервер, php скрипты и все остальное. Из-за этого на работающем сервере желательно не производить такие операции.

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

Это конечно подойдет не всем. Если, например нужно переместить один большой файл то это не поможет.

Собственно сама команда:

find /dir/to/src/* -name '*' -exec echo move {} \; -exec cp -R {} /dir/to/dest/ \; -exec rm -rf {} \; -exec sleep 3 \;

Зачем делается cp а затем rm вместо mv? Потому как mv почему то не может за собой удалить папку с файлами, поэтому для универсальности решения используется именно эта комбинация.

Число 3 в конце — это время в секундах, какую паузу нужно сделать после перемещения одного файла/папки.

Настройка собственного Jabber сервера на freebsd

Понадобилось для личных нужд поднять джаббер сервер. Был выбран ejabberd 2, как наиболее простой и в то же время функциональный.

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

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

Оригинал инструкции здесь.

  1. Заходим в админ веб интерфейс по пути «Виртуальный хост» — выбираем нужный сервер — «Группы общих контактов»
  2. В поле для добавления новой группы вводим «everybody» и жмем добавить.
  3. Заполняем поля:
    • Название: EveryBody
    • Описание: This group contains everybody
    • Члены: @all@
    • Видимые группы: everybody
  4. Отправляем форму
  5. Готово. Теперь после подключения у вас появится новая группа «EveryBody» в которой будут все пользователи сервера.

Nagios и ошибка проверки PINGа

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

CRITICAL — popen timeout received, but no child process

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

Так вот, решение как оказалось простое — для проверки на пинг нужно отключить протокол IPv6.

Для этого открываем на редактирование файл /path/to/nagios/objects/commands.cfg

И там ищем два блока:

define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }

и

define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

И редактируем их до такого вида:

define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -4 -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }

и

define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -4 -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

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

После этого перезапуск нагиоса и проблема решена.

service nagios reload

Настройка автоматического обновления баз GeoIP

В дополнение к предыдущей статье по теме GeoIP (определяем страну посетителя через nginx) настроим автоматическое обновление базы.

Для этого пишем простой скрипт на баше:

#!/usr/local/bin/bash

echo Start update at `/bin/date`
cd /usr/local/etc/nginx/data/geo/
/usr/local/bin/wget -q http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
echo Saved, unzip..
/usr/bin/gunzip -f GeoIP.dat.gz
echo Unziped, reload nginx
/usr/local/etc/rc.d/nginx reload
echo

Пути к файлам при необходимости нужно подправить естественно.

После этого сохраняем в файл и добавляем в крон, для примера так:

10 3 * * * /usr/local/bin/bash /usr/local/etc/geoip_update/update.sh >> /usr/log/script/geoip_update.log

В данном случае базы будут обновляться ежедневно в 03:10.