вторник, 4 сентября 2012 г.

Быстрая разрядка аккумулятора MacBook (Pro)

Что бы аккумуляторы могли дольше "держать" ноутбук, сами производители рекомендуют его разряжать полностью хотя бы раз в один-два месяца, оставлять ноутбук в разряженном состоянии на несколько часов, после чего производить полную зарядку не отключая ноутбук от сети. При этом на нём можно работать.
Как бы то ни было - разряжать ноутбук, который может работать в автономном режиме 5-7 часов, очень утомительно, а если учесть последующие несколько часов его "пролёживания" - бывает и вообще нереально (работать ведь тоже когда-то надо).
Есть способ более быстрый, чем обычная работа за компьютером:

1) При перезагрузке компьютера жмём комбинацию клавиш Cmd()+S, это позволит ноутбуку перейти в режим Single User;
2) Пишем в консоли yes > /dev/null & dd if=/dev/disk0 of=/dev/null , выполнение данных команд даст сильную постоянную нагрузку на ноутбук, что приведет к максимально быстрому разряду аккумулятора;
3) Так же можно выполнить команду pmset -g rawlog , что еще немного ускорит разряд батареи.

четверг, 30 августа 2012 г.

Настройка Nginx и php-fpm для установки Netcat

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

cd /usr/ports/lang/php5
make install clean

В настройках установщика не забываем выбрать php-fpm. После установки можно поставить требуемые вам дополнения PHP:

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

Разрешаем запуск php-fpm, прописав в /etc/rc.conf :

php_fpm_enable="YES"

Копируем файл настроек PHP:

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

Для работы Netcat возможно понадобится включить в нём опции register_global и short_open_tag. А вообще, конечно, настройка PHP требует куда более тонкого конфигурирования, что выходит за рамки данной статьи.

Теперь пора поставить вебсервер Nginx:

cd /usr/ports/www/nginx
make install clean

Так же вписываем в /etc/rc.conf разрешение на запуск Nginx:

nginx_enable="YES"

Осталось поставить из портов MySQL:

cd /usr/ports/database/mysql50-server
make install clean

Прописать в /etc/rc.conf разрешение на его запуск:

mysql_enable="YES"

Запустить MySQL:

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

Скопировать файл настроек MySQL (возможно придется играться с кодировками, описано в одной из предыдущих заметок):

cp /usr/local/share/mysql/my-large.cnf /usr/local/etc/my.cnf

И задать пароль суперпользователя MySQL:

mysqladmin -u root password <newpassword>

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

В файле /usr/local/etc/php-fpm.conf настраиваем работу php-fpm через сокет, что даст небольшой прирост производительности по сравнению с работой по tcр:

;listen = 127.0.0.1:9000
listen = /tmp/php-fpm.sock

Больше здесь можно ничего не править, открываем файл /usr/local/etc/nginx/nginx.conf для настройки Nginx:

user  www;
worker_processes  8; # Рекомендуется выставлять по количеству ядер
worker_priority -5; # Повышенный приоритет для снижения задержек из за исполнения скриптов

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
    use kqueue; # Рекомендуется для FreeBSD
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    send_timeout 30s;
    reset_timedout_connection on;

    #gzip  on;

    upstream fpm {
        server unix:/tmp/php-fpm.sock;
    }

    server {
        listen       80;
        server_name my-site.ru www.my-site.ru;

        charset cp1251;
        root   /usr/local/www/nginx/my-site;

        #access_log  logs/host.access.log  main;

        location / {
            root   /usr/local/www/nginx/my-site;
            index index.php;
            # Следующие три строки нужны для работы Netcat
fastcgi_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
            if (!-e $request_filename) {
                rewrite ^(.+)$ /netcat/require/e404.php?REQUEST_URI=$1 last;
            }
        }

        error_page  404              /netcat/require/e404.php; # Нужно для функционирования Netcat

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }

        location ~ \.php$ {
            fastcgi_pass   fpm;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

        location ~ /\.ht {
            deny  all;
        }
    }
}

Запускаем демонов php-fpm и nginx:

/usr/local/etc/rc.d/nginx start
/usr/local/rtc/rc.d/php-fpm start

Теперь осталось только создать базу данных для Netcat и пользователя для работы с ней:

mysql -u root -p
mysql> create database netcat;
mysql>  grant all on netcat.* to netcat_user@localhost identified by 'netcat_password';

Вот и всё, можно заниматься установкой Netcat'а. 

среда, 29 августа 2012 г.

Перехват звонков (pickup) в Asterisk

Где не настраивал Asterisk в небольших организациях - практически нигде не была востребована функция перехвата звонка (по умолчанию *8), обычно всё разруливалось стратегиями дозвона в группах и очередях, а в редких исключениях использовался стандартный метод перехвата звонка с конкретного телефона **XXXX. Сегодня функция глобального перехвата звонка впервые понадобилась клиенту и ему был рассказан способ с нажатием *8. Как оказалось - по умолчанию данная функция не работает, требуется добавить к настройкам номеров абонентов опцию callgroup, в которой указывается принадлежность внутреннего номера к конкретной группе, и опцию pickupgroup, в которой указывается звонки каких групп можно перехватывать с этого номера.

А теперь самое важное - прописав в настройках номера групп, на которые были разделены внутренние номера в организации (600, 601, 602 и т.д.) я так же не добился работы глобального перехвата, только после документации и гугла было выяснено что номера групп могут быть в диапазоне от 0 до 63.

Проблемы с кодировкой в MySQL-PHP

Периодически бывает так, что web-сервер с поддержкой php отображает тексты из php-скриптов нормальными русскими буквами, а все данные из MySQL отображаются знаками вопроса (??????????). Подобная проблема обычно появляется при импорте данных в базу из дампа.

Для начала стоит просмотреть дамп для понимания используемой в нём кодировки символов. К примеру данные в нём в кодировке UTF-8. Пробуем создать базу данных с кодировкой по умолчанию UTF-8:


create database pelikanch_data default character set cp1251 collate cp1251_unicode_ci;



В консоли MySQL даём команду show variables и смотрим кодировку у следующих переменных:


character_set_client
character_set_connection
character_set_database
character_set_results
character_set_server
character_set_system
collation_connection
collation_database
collation_server


Для быстрой проверки используем

set character_set_client=UTF8;

Так же и для остальных переменных. Лучше прописать переменные в файл настроек my.cnf - в секцию [mysqld] дописываем:

default-character-set = utf8
init-connect = "SET NAMES utf8"

так же можно здесь же дописать:


character_set_client = utf8
collation_server = utf8_general_ci

Что-либо из вышеперечесленного обычно помогает, если не помогло - возможно проблема в самих скриптах PHP.

четверг, 16 августа 2012 г.

Очистка очереди MTA Exim

В очереди, увы, может накапливаться всякая дрянь... Кто-то неправильное мыло в веб-форме указал, где-то спамеры с несуществующего адреса что-то прислали. От этого нужно избавляться, желательно по крону.
Настоятельно рекомендую все пути к бинарникам прописать абсолютными -- для верности. 

Пользователь от которого запускается скрипт должен быть доверенным для Exim'а (в общем случае, просто добавте его в группу mail).

По непонятным причинам экзим иногда теряет тела писем после доставки. В следствие чего, в выводе списка писем (exim -bp) объем тела не указан. exiqgrep такое не понимает и падает с подобной ошибкой:

Line mismatch: 4h 1Kg6sa-0454TM-Tu


Лечится так:


exim -bpr | grep "^[0-9][0-9][0-9]d" | awk `{print $2}' | xargs -n 1 -P 20 exim -Mrm

Рекомендую очень хорошо понять, что делает скрипт перед тем как пихать его в крон. Почта удаляется из очереди навсегда.


   #!/bin/bash

   # Определяем qualify_domain -- он нужен для удаления всякой лажи
   domain=`exim -bP | grep -i "^qualify_domain" | sed -e s/.*\=\ //g`
   # Это очень шаманская строчка
   exim -bpr | grep '<' | awk '{print $2}' | grep '-' | xargs exim -Mrm 2> /dev/null
   # если скрипту передан параметр c, то включается более агрессивный режим
   if [ "$1" == "c" ]; then
      # Удаляем все баунсы старше 10 минут
      exiqgrep -o 600 -if '^<>$' |xargs exim -Mrm
      # Удаляем сообщения с адресами начинающимися с подчерка, минуса или вертикальной черты
      exiqgrep -f '^<\_|^<\-|^<\|' -i | xargs exim -Mrm exiqgrep -r '^\_|^\-|^\|' -i | xargs exim -Mrm
      #Удаляем сообщения отправленные скриптами на китайские домены старше 10 минут
      exiqgrep -f "$domain" -r '.cn$' -o 600 -i | xargs exim -Mrm
      # Удаляем любые сообщения отправленные скриптами, если они не доставлись за 12 часов
      exiqgrep -f "$domain" -o 43200 -i | xargs exim -Mrm
      exit
   fi
   # В мягком режиме удаляем только frozen баунсы и письма с невозможными адресами в заголовках
   exiqgrep -zif '^<>$' |xargs exim -Mrm
   exiqgrep -f '^<\_|^<\-|^<\|' -i | xargs exim -Mrm
   exiqgrep -r '^\_|^\-|^\|' -i | xargs exim -Mrm


P.S. Взято отсюда. В оригинальной статье еще много полезного.

Полезные команды MTA Exim

Список сообщений в очереди:
exim -bp
exim -bpr (быстрее выводит)
exiqgrep (без опций)
exiqgrep -b (нагляднее)


Число сообщений в очереди:
exim -bpc

Удаление замороженных сообщений:
exiqgrep -zi | xargs exim -Mrm

Удаление всех баунсов из очереди:
exiqgrep -if '^<>$' | xargs exim -Mrm

Удаление сообщений конкретного отправителя из очереди:
exiqgrep -f [user]@host.ru -i | xargs exim -Mrm

Удаление  сообщений определенного адресата из очереди:
exiqgrep -r [user]@host.ru -i | xargs exim -Mrm

Принудительная рассылка всей почты в очереди:
exiqgrep -i | xargs exim -M

вторник, 31 июля 2012 г.

Заставка для загрузки и графика в системной консоли FreeBSD

Для установки графической заставки при загрузке FreeBSD надо раскомментировать следующие строки в файле /boot/defaults/loader.conf :

   vesa_load="YES"
   bitmap_load="YES"
   splash_bmp_load="YES"
   bitmap_name=/путь/до/вашей/картинки/splash.bmp

Картинка для загрузчика должна быть разрешением 320х200 пикселей, 256 цветов, кроме формата BMP возможно использование формата PCX. Если вы включили в loader.conf загрузку модуля VESA, то можно использовать картинку разрешением 1024х768.

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

   options      SC_PIXEL_MODE

После чего можно просмотреть список доступных видеорежимов командой:

   vidcontrol -i mode

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

   vidcontrol MODE_XXX

где ХХХ - это номер режима (указан в первой колонке списка поддерживаемых разрешений).

Финальным шагом настройки графического разрешения консоли, для использования его на всех локальных консолях, стоит вписать в файл /etc/rc.conf такую строку:

allscreens_flags="-g 200x100 MODE_ХХХ"

понедельник, 30 июля 2012 г.

Работа с COM-портами в Mac OS X

Периодически возникает надобность подключиться к какому-либо оборудованию через последовательный порт. И ладно, если есть на маке сам порт, тогда можно открыть терминал, посмотреть список устройств с помощью ls /dev, увидеть устройство, называющееся что-то типа tty.tty0 и выполнить команду:

screen /dev/tty.tty0 9600 (за командой screen идёт путь до устройства и скорость на порту).

Если же на маке последовательный порт отсутствует, то на помощь приходят так называемые адаптеры USB-COM. Один из самых распространённых типов подобных адаптеров - Prolific PL2303 USB serial adapter. Адаптер можно найти практически в любом компьютерном магазине, драйвера на него под мак есть на страничке проекта http://osx-pl2303.sourceforge.net/.

После установки драйвера и подключения адаптера к маку так же смотрим с помощью ls /dev название устройства (что-то навроде PL2303-00001004), и подключаемся ранее указанным способом:

screen /dev/tty.PL2303-00001004 9600

пятница, 27 июля 2012 г.

Запись установочного образа FreeBSD на флешку в Mac OSX

Для записи образа FreeBSD на флешку надо выполнить следующие действия:

1. Качаем образ с www.freebsd.org (к примеру 'FreeBSD-8.3-RELEASE-amd64-memstick.img')

2. Подключаем флеш-накопитель к маку, запускаем дисковую утилиту, кликаем правой кнопкой мыши по флешке в боковом меню и выбираем пункт "Информация". В появившемся окне смотрим строку "Идентификатор диска" (там написано что-то вроде disk3).

3. Запускаем Терминал из Программы/Утилиты, пишем в нём команду sudo -s, после чего будет запрошен пароль администратора. Вводим его, нажимаем Enter.

4. Проверяем не смонтировалась ли флешка в систему, выполнив в терминале команду df. Если флешка смонтирована - вы увидите строку типа
    /dev/disk3s1   555    555    555     50%    /Volumes/usb-flash
Для корректного развёртывания образа надо размонтировать её. Пишем в терминале команду
    diskutil umount /Volumes/usb-flash

5. Запускаем побайтное развёртывание образа на флеш с помощью команды dd
    dd if=/Users/MyLogin/Downloads/FreeBSD-8.3-RELEASE-amd64-memstick.img of=/dev/disk3 bs=1024

Если всё сделано правильно, то через некоторое время мы получим полноценный загрузочный установочный флеш-накопитель с FreeBSD.

Создание сетевого ресурса для Time Machine на сервере FreeBSD

1. Выделяем место на сервере под бэкапы Time Machine (к примеру /var/TimeMachine)

2. Создаем на сервере пользователя, которого мы будем использовать для подключения к сетевому ресурсу (к примеру userfortm) и не забываем назначить ему полные права доступа к /var/TimeMachine.

3. Идём в коллекцию портов и устанавливаем netatalk

    cd /usr/ports/net/netatalk
    make install clean

4. Дописываем в /usr/local/etc/AppleVolumes.default такую строку:

    /var/TimeMachine TimeMachine allow:userfortm cnidscheme:tdb options:usedots,tm

    (при желании можно сюда же включить ограничение по размеру бандла, как реализовать - смотрим тут же в конфиге)

5. Если не подтянулся avahi (реализация mDNS) - доставляем и его.

6. Создаём файл настроек для afp в avahi:

   /usr/local/etc/avahi/services/afp.service

7. Пишем в него такие настройки:

  <?xml version=“1.0” standalone=‘no’?><!—*-nxml-*—>
   <!DOCTYPE service-group SYSTEM “avahi-service.dtd”>
      <service>
         <type>_afpovertcp._tcp</type>
         <port>548</port>
      </service>
      <service>
         <type>_device-info._tcp</type>
         <port>0</port>
         <txt-record>model=TimeCapsule</txt-record>
      </service>
     <service-group>
       <name replace-wildcards=“yes”>%h</name>
     </service-group>
Так же в этот список вы можете включить ftp, http и другие протоколы, по которым умеет работать сервер. Они будут видны в соответствующих местах (к примеру, ssh-сервер будет виден в диалоге “New connection…” в Terminal’е). В afp.service можно указать другую модель, тогда будут видны другие иконки в Finder’е. Список иконок можно посмотреть в /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist, по ключевой комбинации com.apple.device-model-code. Сами иконки в том же bundle в папке Resources.

8. Не забываем добавить в /etc/rc.conf разрешения на запуск служб netatalk, afpd, avahi (netatalk_enable="YES" и тд).

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