воскресенье, 27 декабря 2009 г.

Интересные сайты по микроконтроллерам и пр.

http://www.microsyl.com/ - обязательно изучить вдоль и поперек

суббота, 12 декабря 2009 г.

psi - установка jabber клиента.

Основная страница http://psi-im.org/
Качаем отсюда http://sourceforge.net/projects/psi/files/Psi/0.14/psi-0.14.tar.gz/download

Дальше все как обычно, кроме make install. Вместо DESTDIR=/xx применяем INSTALL_ROOT=/xx
И еще, при установке в bin закидывается кроме самого psi еще и psi.debug весом по 60 мег, удалил, все и без него работает

среда, 9 декабря 2009 г.

firefox = плагины и оптимизация

Поменяли открытие в табах. не удобно стало, испльзуем плагин - море настроек
Tab mix plus https://addons.mozilla.org/ru/firefox/addon/tab-mix-plus/


То что нужно непременно:

NoScript https://addons.mozilla.org/en-US/firefox/addon/722
Adblock Plus https://addons.mozilla.org/en-US/firefox/addon/1865
Flashblock https://addons.mozilla.org/en-US/firefox/addon/433
Tab Mix Plus https://addons.mozilla.org/en-US/firefox/addon/1672

Оптимизация быстродействия и памяти.

user_pref("browser.sessionhistory.max_total_viewers", 1);
user_pref("config.trim_on_minimize", true);
user_pref("nglayout.initialpaint.delay", 0);
user_pref("network.http.pipelining", true);
user_pref("network.http.pipelining.maxrequests", 8);
user_pref("network.http.proxy.pipelining", true);

==================================================
user_pref("content.notify.backoffcount", 5);
user_pref("plugin.expose_full_path", true);
user_pref("ui.submenuDelay", 0);

==================================================

Сделайте vacuum-очистку баз данных.
Firefox хранит все данные в базе sqlite, при интенсивной работе эти базы разрастаются из-за кусков пустого места, кроме того, оказываются довольно сильно фрагментированными. Операция "Vacuum" в sqlite приводит к пересозданию базы в новом файле. Таким образом удаляются все пустые места и исчезает фрагментация.

Для этого откройте "Инструменты -> Консоль ошибок", вставьте в поле "Код" следующий код:
Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection.executeSimpleSQL("VACUUM");

Linux
find ~/.mozilla/firefox/ -name '*.sqlite' -print0 | xargs -0 -I {} sqlite3 {} "vacuum;"

Flashblock === https://addons.mozilla.org/en-US/firefox/addon/433
AdblockPlus === https://addons.mozilla.org/en-US/firefox/addon/1865

Еще для отладки и разработки:
Live Http Headers - позволяет смотреть заголовки и ответы от вебсерверов
https://addons.mozilla.org/en-US/firefox/addon/3829/

HTTP Resource Test - позволяет создавать GET/POST запросы
https://addons.mozilla.org/en-US/firefox/addon/15045/

вторник, 8 декабря 2009 г.

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

После переразбиения диска с помощью fdisk ядро до перезагрузки не перечитывает новую таблицу разделов. Что бы избежать перезагрузки и перечитать таблицу, можно использовать
partprobe /dev/sd..
или
echo 1 > /sys/block/sdc/device/rescan (сам не пробовал, но пишут, что работает)

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

понедельник, 7 декабря 2009 г.

Настройка Apache и SSL

Почти что все утащено с http://www.freebsdrocks.ru/index.php/guides/application-installs/57-apache-22.html

Пути нужно поменять на свои.

Настроим SSL:
# mkdir /usr/local/etc/apache22/ssl.key
# mkdir /usr/local/etc/apache22/ssl.crt
# chmod 0700 /usr/local/etc/apache22/ssl.key
# chmod 0700 /usr/local/etc/apache22/ssl.crt

Создаем сертификат:
# cd /root
# openssl genrsa -des3 -out server.key 1024
# openssl req -new -key server.key -out server.csr
# openssl x509 -req -days 3650 -in /root/server.csr -signkey /root/server.key -out /root/server.crt

Сертификат будет действителен 3650 дней. Вполне достаточно, чтобы не вспоминать эту процедуру каждый год :-)
Хотите знать больше о SSL Certs, вам сюда: http://httpd.apache.org/docs-2.0/ssl/ssl_faq.html#aboutcerts


Копируем сертификаты:
# cp /root/server.key /usr/local/etc/apache22/ssl.key/
# cp /root/server.crt /usr/local/etc/apache22/ssl.crt/

Установим права:
# chmod 0400 /usr/local/etc/apache22/ssl.key/server.key
# chmod 0400 /usr/local/etc/apache22/ssl.crt/server.crt

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

# cd /usr/local/etc/apache22/extra
# ee httpd-ssl.conf

Приводим к виду:

DocumentRoot "/usr/local/www/apache22/data" — смените путь на ваш httpd.conf document root.
ServerName www.example.com:443 - Смените www.example.com на ваше доменное имя (domain name).
ServerAdmin : Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript - Смените на ваш e-mail адрес
ErrorLog /var/log/httpd-error.log — Вы можете расскоментировать эту линию .
TransferLog /var/log/httpd-access.log - Вы можете расскоментировать эту линию .
SSLCertificateFile "/usr/local/etc/apache22/ssl.crt/server.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl.key/server.key"

Удаляем pass-phrase (опционально):

# cp /usr/local/etc/apache22/ssl.key/server.key /usr/local/etc/apache22/ssl.key/server.key.org
# cd /usr/local/etc/apache22/ssl.key/
# openssl rsa -in server.key.org -out server.key
Enter pass phrase for server.key.org:
writing RSA key
# chmod 400 server.key

Разрешаем HTTPS:

# ee /usr/local/etc/apache22/httpd.conf

Include etc/apache22/extra/httpd-ssl.conf

Перезапускаем APACHE:

суббота, 5 декабря 2009 г.

Видеонаблюдение и Motion

Брать здесь http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome
Ему требуется ffmpeg (вроде заточенный под него)

http://www.lavrsen.dk/foswiki/bin/view/Motion/VideoFourLinuxLoopbackDevice
http://www.lavrsen.dk/foswiki/bin/view/Motion/LoopbackDevice
video loopback
mplayer tv:// -tv device=/dev/video9:driver=v4l:input=0:width=640:height=480:normal=pal -fps 25

Video loopback (http://novotorg.net/motonpublic/15-motion-vloopback)


MjpgStreamer
(http://www.lavrsen.dk/foswiki/bin/view/Motion/MjpgStreamer)
Ну в общем-то работает. И даже вещает по заданному порту. Только у меня нужно было с video loopback девайса взять сигнал, так вот плагин input_uvc отказался с ним работать (типа не смог опросить устройство), а у плагина input_gspcav1 была проблемма с установкой palette, ну в общем пришлось его исходники варварски допилить и он таки заработал. В настоящем девайсе наверное проблеммы такой не будет.
Запускалось все это вроде так =
mjpg_streamer --input "input_gspcav1.so -d /dev/video9" --output "output_http.so -p 8084"
Ну и еще допилить плагин output_http, в нем "фишек" разных много реализовано, кот. мне не нужны были (типа доп. параметров - вывод статической картинки, вывод потока и прочего). А мне просто нужно было как в motion сделать, "присосался" к нужному порту и получай поток. Еще из минусов input_gspcav1 - он не умеет ограничивать fps как в плагине input_uvc, в итоге firefox на удаленной машине получает поток реальных кадров (к примеру 25fps) и начинает дико кушать ресурсы (память и проц). И практически виснет через короткое время. В общем надо будет самому прикрутить делитель fps.

И пару слов, а на кой мне это все надо было пробовать.
Не знаю как у вас, а у меня motion (версия 3.2.11.1) когда почуял движение выдает загрузку проца что-то около 27-33% (htop). Так вот если в этот момент брать поток (в смысле смотреть через "сетку") на удаленном компьютере, загрузка motion возрастает практически в 2 раза. Даже если ограничить webcam_maxrate 2. Казалось бы куда уж ниже (1 и так по умолчанию). Вот с помощью video loopback и mjpg_streamer и удалось "решить" эту проблему. При это связке загрузка проца вырастала дополнительно на 5-10%, что конечно гораздо меньше чем было с одним motion и его встроенном сервере.
Затем покопав исходник motion.c нашел там интересный момент, при сработке детектора он начинает отправлять ВСЕ полученные кадры в функцию webcam_put (что в webcam.c), та выделяет память под буфер, формирует его, список клиентов и пр. и уже только ПОСЛЕ этого "принимается" решение а вообще его слать или нет в соответствии с заданным webcam_maxrate (расчитывается время прошлого кадра, теперешнее време - что-то вроде этого). Сделано там с одной стороны все правильно и логично, НО! зачем к примеру при fps=2 обрабатывать 25 кадров, выделяя под них динамически память и копируя туда-сюда. ну в общем как-то так. Более детально я в исходник не лез, мало времени, а заказчику надо уже сдаваться.
Так что на скору руку подкрутил здесь строку, добавив в нее инструкцию по отправлению каждого 5 кадра в функцию webcum_put(). Что при условии fps=25 на входе, на выходе (webcam) получим:
первый кадр отправляем в любом случае, а дальше 5,10,15,20 -- fps=5

вот что было
if (conf->webcam_motion && !conf->setup_mode && img->shot != 1)
event(cnt, EVENT_WEBCAM, img->image, NULL, NULL, &img->timestamp_tm);

вот что получилось
if (conf->webcam_motion && !conf->setup_mode && img->shot != 1 && img->shot%5 == 0)
event(cnt, EVENT_WEBCAM, img->image, NULL, NULL, &img->timestamp_tm);

При этом загрузка проца при просмотре со встроенного в motion сервера возрастает с 30% (засекли движение, но не смотрим с порта) до 40% (есть движение и смотрим). что для меня вполне приемлемо. топорное и "тупое" решение. Можно было бы сделать все это поизящнее, но время поджимает и главное лень. работает ведь.
Будут мысли или уточнения, критика? Может кто уже наступал на эти грабли?

В общем можно на скору руку именно в webcam.c (stream.c) в функции webcam_put (stream_put) после переменных и строки
Код:
char len[20]; /* will be used for sprintf, must be >= 16 */

добавить что-то вроде этого:
Код:
if (! (( cnt->shots%3 ==0 && cnt->shots != 0 ) || cnt->shots == 1 )) return;

т.е. примитивно выпрыгиваем из функции ничего не делая если не удвлетворяем условиям отбора кадров. (а еще раскрыть скобки в условии и применить not и записать по-людски)
В данном примере будет на порт выводиться примерно каждый 3 кадр. При этом motion.c не трогаем, пусть живет.

Посмотрел на загрузку проца, такая же как и при правке motion.c (а с чего ей и изменяться существенно, принцип фильтрации кадров тот же).

вторник, 1 декабря 2009 г.

Переустановка сервера

Поднять сервер на софтовом райде. Можно сначала разбить диски и создать райд, а потом на него поставить.

Для начала дать файлы и интернет. Затем уже все остальное.

1. Файлы паролей. Проверить номер группы users и добавить недостающие группы. скорректировать файлы /etc/group /etc/passwd /etc/shadow

2. Samba - скопировать и допилить конфиги. Ну и конечно скопировать данные. Сделать скрипт запускаемым.

3. Firewall - копируем наш rc.firewall

4. Сетевые интерфейсы определялись не в том порядке eth1 eth0. Надо было подкрутить номера в /etc/udev/rules.d/70-persistent-net.rules

5. ДНС (DNS). Копируем /var/named /etc/named.conf /etc/resolv.conf. И делаеам запускаемым /etc/rc.d/rc.bind
Так же в /var/log/messages валяться в огромном количестве строчки вида network unreachable resolving. Это из-за попытки работать с IPv6. Отредактируем в /etc/rc.d/rc.bind запуск named с ключем -4, тем самым заставив его работать только с версией IPv4.

6. Интернет. В /etc/ppp копируем прежний конфиг и подкручиваем запуск в /etc/rc.d/rc.local

7. Squid. брать здесь = http://www.squid-cache.org/Versions/
собирать с опцией --enable-delay-pools
и проверить права на лог-каталоги и каталог кэша /usr/local/squid/var/...
запускать с ключем "/usr/local/squid/sbin/squid -z" для создания каталогов кэша
настройки копируем со старого сервера, и не забыть подкрутить права и собственника (nobody.nogroup) на каталоги
добавляем запуск в /etc/rc.d/rc.local в виде squid -D т.е. без проверки ДНС потому как интернета на момент запуска проксика может и не оказаться.

Далее уже по мере сил и желания поднимаем все остальное.

8. Mysql. Смонтируем все базы в /var/lib/mysql. Сделать исполняемым /etc/rc.d/rc.mysqld

9. Jabber берем здесь http://codex.xiaoka.com/wiki/jabberd2:start
Этой ... понадобилась либа udns, взять здесь http://www.corpit.ru/mjt/udns.html#download. Но на нормальный make install у них видно не хватило ума. Короче здесь http://repository.slacky.eu/slackware-12.2/libraries/udns/0.0.9/src/udns.SlackBuild есть билд скрипт для слаквари (или самому ручками файлы затолкать куда надо).
Еще нужен gsasl здесь http://www.gnu.org/software/gsasl/#downloading
Так же надо вручную создать каталоги /usr/local/var/{db,log,pid} и выставить права доступа к ним
Ну и настройки берем от старого конфига.
Есть еще конфиг пользователей, который через скрипт загоняется в базу jabber. Надо объеденить все эти разрозненные конфиги.

10. Сервер времени. Копируем /etc/ntp.conf /etc/adjtime и делаем исполняемым /etc/rc.d/rc.ntpd
Надо еще подкрутить adjtime !!!!

11. Запустить скрипт UPS (это надо было сделать в самом начале).

12. Скрипт для byfly. Понадобились перл модули LWP, Text::Iconv, IO::Socket::SSL.

13. Так же для сообщений внутри сети потребовался модуль Net::Jabber.

14. Слежение и перезапуск интернета.

15. mldonkey брать здесь http://mldonkey.sourceforge.net/Main_Page. Ему как обычно очень нужен Ocaml который он прделожит скачать с сайта caml.inria.fr
Скопировать настройки downloads.ini, users.ini, donkey.ini
Еще для скриптов включающих настройки mldonkey по telnet нужен модуль Net::Telnet

16. Обновление НСПИ, создать правильный симлинк

17. Напоминалка и очищалка общественного хранилища файлов. У нее есть свой конфиг для отправки напоминаний пользователям - его надо допилить.

18. Напоминалка о почте. понадобился модуль Net::IMAP::Client.

19. Монитор слежения за температурами и системой.
Выполнил sensors-detect. В результате стало ясно, что модуль для чипа it87 - добавить в rc.local
hddtemp - скомпилировать и добавить в базу винтов наши винты
Допилить скрипт.

20. Подсчет трафика - понадобился модуль Date::Simple

21. Apache. Нужно перенести настройки или создать по новой. Не забыть про копирование или генерацию ключа SSL.
Скопировать все скрипты из cgi-bin и инфо из htdocs

22. Для авторизации пользователей нужен еще модуль CGI::Session
Spreadsheet::WriteExcel

23. Х-терминалы
Копируем /tftpboot /opt/ltsp /home/xterm /etc/dhcpd.conf /etc/export /etc/rc.d/rc.xterm (в нем запускается dhcpd и прочие нужные действия)
/etc/rc.d/rc.nfsd делаем исполняемым
/etc/rc.d/rc.local добавляем запуск rc.xterm
в /etc/inetd.conf раскоментировать протокол tftp и перезапустить демон /etc/rc.d/rc.inetd restart
копируем /etc/ssh/sshd_config и перезапускаем демон /etc/rc.d/rc.sshd restart

24. Модуль Time::Simple
Chart::Points
XBase