четверг, 27 января 2011 г.

установка devprom

Сначала ставим mysql, php, apache, настраиваем.
Прописываем в апач хост

Затем
yum install php-gd php-zip php-curl php-openssl php-mysql
С репой c5-testing у меня тут возникла проблема - система захотела поставить php53-common, что конфликтовало с 5.2 версией. Так что я просто убрал c5-testing, поставил centalt и обновил систему. Оказалось, зря напрягался:
Package php-pecl-zip is obsoleted by php-common, trying to install php-common-5.2.17-1.el5.i386 instead

Теперь надо подготовить систему к работе.
Руководство администратора
FAQ

Запускаем инсталлер по адресу http://devprom.server/admin/install.php
Но там нет проверки установленных модулей, поэтому инсталлер может запуститься, но после нажатия "установить" просто показать красную полосу. У меня такое было, когда не доставил нужных модулей.

Добавляем пользователей, не забываем про админов, прописываем крон. В доке написано так:

# выполнение заданий по расписанию (в том числе отправка почтовых уведомлений)
/var/www/devprom/htdocs/core/processjobs.php *****

В таком виде оно нерабочее.
От рута crontab -l
и вписываем
* * * * * /usr/bin/php /var/www/devprom/htdocs/core/processjobs.php

О языках для web

http://nuclight.livejournal.com/107170.html
К вопросу об ублюдочности PHP

http://stanislaw.ru/rus/research/perl.htm
Критический анализ языка Perl

http://jacobian.org/writing/hate-python/
Five things I hate about Python

В вики
http://ru.wikipedia.org/wiki/Python#.D0.9D.D0.B5.D0.B4.D0.BE.D1.81.D1.82.D0.B0.D1.82.D0.BA.D0.B8

http://juixe.com/techknow/index.php/2007/09/21/java-ruby-and-even-python-sucks/
Java, Ruby, and even Python Sucks
Реально о руби и яве. О питоне - "кто все эти люди?"

>> бы не сказал, что динамическая типизая - недостаток. иногда это даже преимущество. =)
>Я сказал "_тотальная_ динамическая типизация". Плохо именно то, что от нее невозможно отказаться, нет никакой статической проверки, и тривиальные ошибки живут до момента, когда на них натыкается исполнение.
По словам очевидцев хорошее покрытие юнит-тестами спасает.
http://www.linux.org.ru/forum/talks/2446678

Еще про питон. Поскольку он интерпретируемый, это означает низкую скорость работы. Как и пхп. Но если для пхп есть всякие АРС да eaccelerator, то с питоном сильно хуже -- нет НИЧЕГО.
Есть встроенный компилер в байт-код, но это совсем не панацея.

"Глобальная блокировка интерпретатора (GIL)
GIL (Global Interpreter Lock) — проблема, присущая CPython, Stackless и PyPy, но отсутствующая в Jython и IronPython."
IronPython это с# с синтаксисом питона, там нет ни одного модуля питона, тока нетовские
jpython это компилятор питона-в-яву
не проще сразу на c# или яве писать?
А про GIL - для веба это не особо мешает - "клиенту по скрипту".

Расширенный анализ эффективности индексов в MySQL

Для детального анализа особенностей использования индексов в MySQL удобно использовать утилиту mk-index-usage, входящую в пакет Maatkit (написан на языке Perl). По умолчанию утилита выявляет неиспользуемые индексы и предлагает готовые конструкции ALTER для их удаления.

http://www.opennet.ru/tips/2491_mysql_log_analyze_monitoring_index.shtml

Установка:
freebsd: portinstall databases/maatkit
centos: yum install maatkit
(если что, есть в epel)

понедельник, 24 января 2011 г.

Class 'XMLWriter' not found in ...

#cat /etc/redhat-release
CentOS release 5.5 (Final)

По всей видимости, не стоит xmlwriter
Во фре это пакет php5-xmlwriter, в центоси php-xml

Решение взято отсюда

среда, 19 января 2011 г.

ISPManager - вынос apache доменов по отдельным файлам

1. в папке, где у вас лежит конфиг апачи делаем вложенную папку sites (папку, где лежит конфиг апача можно посмотреть в ispmgr.conf в строке "path httpd.conf". например, это /etc/apache2/)
2. прописываем в конфиг апачи строку
Код:
Include /etc/apache2/sites/*.inc
3. прописываем в ispmgr.conf строку
Код:
path httpd-include /etc/apache2/sites/
4. перегружаем апач и ispmanager
5. наслаждаемся

*.inc-файлы генерятся для каждого пользователя, в них прописываются виртуальные хосты, которые были добавлены после включения опции.

http://forum.ispsystem.com/ru/showpost.php?p=54140&postcount=8

Возможные баги:
добавляем эту опцию, когда в httpd.conf уже есть виртуалхост юзера
блокируем юзера
разблокируем юзера
сайты у него работать не будет пока руками из *.inc файла не удалишь секцию типа....
http://forum.ispsystem.com/ru/showthread.php?t=8758
Ошибка возникает, если у вас есть Directory для домашнего каталога пользователя как в основном конфиге, так и в конфиге пользователя.
Зафиксировано, обещают исправить

- при создании домена создается файл конфигурации в указанном каталоге и все работает;
- при удалении www домена файл удаляетcя, вебсервер перегружается и процесс ispmgr умирает, а пользователь во фрейме со списком доменов получает следующее:...
http://forum.ispsystem.com/ru/showthread.php?t=7277
Зафиксировано, обещают исправить

понедельник, 17 января 2011 г.

Аппаратные рейды с поддержкой SSD

Пока нашел только контроллеры Adaptec, серия MaxIQ

Офсайт
http://www.adaptec.com/ru-ru/_common/maxcache/?hpBan=secban-maxcache-RU

Тестирование
http://www.tomshardware.com/reviews/maxiq-ssd-cache,2511.html

Adaptec launches new RAID cards with SSD cache support
http://forums.storagereview.com/index.php/topic/28593-adaptec-launches-new-raid-cards-with-ssd-cache-support/
Adaptec has announced three new MaxIQ storage controllers which are highlighted by SSD cache support. Adaptec has also increased the number of SSDs their RAID cards support.
там есть подробнее.

Пока эти контроллеры завязаны на Intel X25-E со спец прошивкой "задорого", но обещали со временем поддержку не только собственных дисков.

Софт-аналог - ZFS, там есть штатная поддержка SSD cache

Комплекс - http://russia.emc.com/about/news/press/2009/20091208-01.htm
Технология EMC FAST открывает новую эру в хранении данных и управлении информацией

Punycode

http://www.rlnic.ru/technology/punycode.pl

Перекодировка в Punycode

Для перекодирования русского имени в Punycode можно воспользоваться, например, утилитой CCODE, выбрав в этой программе перекодирование имени из CP1251 в PUNYCODE.

Также можно воспользоваться нашим online-перекодировщиком.

Для программной перекодировки в Punycode / RACE можно воспользоваться следующими библиотеками: для Perl — IDNA::Punycode, Convert::RACE; для C/C++ — idnkit.

Библиотека функций для Perl для перекодировки в Punycode / RACE, разработанная и используемая в АНО "РЦИ" для собственных нужд: punylib.pm.

Перекодировка в Punicode в языке программирования Python осуществляется встроенными средствами языка (библиотеки unicode) начиная с Python версии 2.3. Имя кодека idna. Пример использования (в интерактивном интерпретаторе):

Python 2.3.2 (#1, Oct 4 2003, 00:31:16)
[GCC 3.2.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> ru = "ДОМЕНЫ.РУ"
>>> u = unicode(ru, "koi8-r") # Из koi8 в unicode...
>>> u.encode("idna") #... и перекодируем
'xn--d1acufc5f.xn--p1ag'

Библиотеки для перекодировки в Punycode из PHP:
http://pear.speedpartner.de/, http://fastserv.name.net/open_source/php/punycode/

Если в библиотеку socket передать unicode вместо ascii-строки, перекодировка в punicode/idna будет осуществляться автоматически.

воскресенье, 16 января 2011 г.

s3cmd во FreeBSD

root@www1:/usr/ports# make search name=s3cmd
Port: py26-s3cmd-1.0.0.r1
Path: /usr/ports/net/py-s3cmd
Info: Unix-like tools to manipulate stored files from the command line
Maint: clsung@FreeBSD.org
B-deps: py26-elementtree-1.2.6_1 python26-2.6.6
R-deps: py26-elementtree-1.2.6_1 python26-2.6.6
WWW: http://s3tools.logix.cz/s3cmd

Требует установленного питона 2.6

четверг, 13 января 2011 г.

pkg_info

некоторые полезные ключи

Получение сведений о пакете
# pkg_info |grep python25
python25-2.5.4_1 An interpreted object-oriented programming language


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

От чего зависит (без чего не может работать)
# pkg_info -r python25-2.5.4_1
Information for python25-2.5.4_1:

Depends on:

Требуется для работы других пакетов (без этого пакета сломаются):
# pkg_info -R python25-2.5.4_1
Information for python25-2.5.4_1:

Required by:
cairo-1.8.8,1
....

После установки программа иногда выводит текст "что делать дальше". Если что, можно снова получить этот текст так:
# pkg_info -D python25-2.5.5_1
Information for python25-2.5.5_1:

Install notice:
====
...

А можно так:
# cat /var/db/pkg/python25-2.5.5_1/+DISPLAY
====
...

На самом деле, почти всю инфу можно получить прямо из /var/db/pkg/
Там же есть описания, списки файлов, требуется,...

Пример ключа, который может понадобиться в жизни:
# pkg_info -g python25-2.5.5_1
Information for python25-2.5.5_1:

Mismatched Checksums:

Выводит файлы, для которых контрольная сумма не совпадает.

Какому пакету принадлежит файл:
# pkg_info -W /usr/local/bin/python
pkg_info: both python25-2.5.5_1 and python26-2.6.6 claim to have installed /usr/local/bin/python

/usr/local/bin/python was installed by package python25-2.5.5_1

В данном случае аж 2 пакетам - явный конфликт.

Откуда пакет был поставлен
# pkg_info -o python25-2.5.5_1
Information for python25-2.5.5_1:

Origin:
lang/python25
На самом деле, порой оригинальный путь нетривиален. Пример:
# pkg_info |grep apr
apr-devrandom-gdbm-db42-mysql50-1.4.2.1.3.10 Apache Portability Library

# pkg_info -o apr-devrandom-gdbm-db42-mysql50-1.4.2.1.3.10
Information for apr-devrandom-gdbm-db42-mysql50-1.4.2.1.3.10:

Origin:
devel/apr1
Такие извращения тоже встречаются.

Есть и обратный ключ, но работает он криво:
# pkg_info -O python
The following installed package(s) has python origin:
# pkg_info -O python25
The following installed package(s) has python25 origin:
# pkg_info -O lang/python25
The following installed package(s) has lang/python25 origin:
python25-2.5.5_1
# pkg_info -O lang/python
The following installed package(s) has lang/python origin:

Напоследок - есть и фильтры - можно выбрать часть пакетов регэкспами. Это ключи -x и -X

Пример:

# pkg_info -c -x python
Information for python25-2.5.5_1:

Comment:
An interpreted object-oriented programming language



Information for python26-2.6.6:

Comment:
An interpreted object-oriented programming language



Information for python31-3.1.1_1:

Comment:
An interpreted object-oriented programming language

суббота, 8 января 2011 г.

О бэкапах в SVN

Когда это имеет смысл? Для файлов, которые нельзя разделить на несколько (таких как access_log) - например дампы sql. Хранить такое просто, и в случае с svn легко синхронизировать с другими системами, а также заливать на amazon S3 - не надо перезаливать все файлы плюс оно уже сжато.
Хотя имеет смысл посмотреть и на распределенные системы контроля. Если набор данных единый, синхронизация делается просто и быстро.
Не имеет смысла использвать, когда много мелких часто изменяемых и удаляемых файлов. В итоге хранилище может раздуться до огромных размеров.
Также несжимаемые данные проще хранить отдельно.
Отдельно надо думать о бэкапах web-проектов, особенно малоизменяемых. Даже при 100к файлов добавление еще пары - процесс быстрый и если делаются простые архивы, а не инкрементные, выигрыш в месте может быть огромен. А вот распаковывание из такого хранилища с нуля может занимать часы, что приемлемо не всегда. Но получаем возможность откатиться до любой предыдущей версии и узнать, когда именно изменялись файлы.
Как вариант, хранить только ядро, а пользовательские файлы (особенно большие и бинарные) хранить отдельно в инкрементных архивах. А если движок сторонний, то можно еще уменьшить объем данных - хранить только наши модули-шаблоны, а оригинальные файлы при необходимости можно скачать с оф сайта. Хороший пример - битрикс. Неприменимо, если оригинальный движок был сильно переписан или есть привязка на данную версию.

четверг, 6 января 2011 г.

про репликацию файлов

[в процессе написания]
Задача: есть несколько серверов, данные на которых надо синхронизировать.
Тут несколько видов решений:
1) раз в N минут делается скан системы на изменения и синхронизируется.
Плюсы - работает со всеми фс, позволяет делать выборочную синхронизацию, эффективное использование сети, возможность ограничить скорость
Минусы - больше нагрузка на процессор, диски, измененный файл может оказаться на зеркале через весьма долгое время, возможны конфликты с одновременным изменением файла. Эффективно может быть только в системе master-slave. Неприменимо для объектов с небольшим временем жизни.
Примеры - rsync, unison

1b) Почти (1), но на базе систем контроля версий.

1c) csync
На базе rsync, но используется в битриксе, значит, как минимум можно рассмотреть. Насколько я понял из документации, возможна работа мастер-мастер.

2) NAS - монтирование по сети через CIFS, NFS.
Плюсы - просто, быстро
Минусы - требует для хорошей работы сети с маленькими задержками и большими скоростями, так что применимо только при размещении в 1 датацентре, а лучше в 1 стойке, а также нормальные сетевые карты и свичи. Относительно большой оверхед. Большие требования к хранилищу, и чем больше клиентов, тем серьёзнее требования.

3) SAN - монтирование блочного устройства с отдельного хранилища. Требования еще больше, чем для (2). Для совместной работы требуется или кластерная ФС, или на машине надо поднимать такие службы как NFS.

2) блочные устройства
3) DRBD, geom gate
4) распределенные ФС
5) кластерные ФС

6) Синхронизация на базе журналов журналируемых ФС. Примеры мне неизвестны. Реализовано может быть на таких опциях как inotify, dnotify, Fanotify (2.6.37+)

Почему во FreeBSD ядро лучше компилировать с ACCEPT-опцией в IPFW

Много лет назад пришлось мне скататься в офис, потому что неправильно применил набор правил. flush сделался, а дальше выполнение остановилось: скрипт не смог выводить мне информацию. Бывает ошибка в конфиге, когда выполнение тоже останавливается...
А что мешает вписать в скрипт строку 40000 deny all fron any to any ? Ничего.
Хотя все-равно первой строкой у меня обычно вписано allow all from any to me 22, чтобы можно было залогиниться всегда. Но с accept при любой ошибке фаервол больше не закроет доступ извне.

среда, 5 января 2011 г.

asterisk-based телефония

Варианты:
1) Чистый астериск. Требует изучения талмудов и минимум 2 недель на настройку (в варианте сложнее чем "подключить 3 сип телефона без внешних линий", причем не просто "хз как оно работает, но лучше больше не трогать", а нормальная настройка, с полным пониманием, что и зачем пишем и как чинить, если что-то сломалось). Проверено как лично мной, так и многими другими. Не имея знаний на темы sip, voip, pri-bri, fxs-fxo, протоколов итд - 2 недели это будет ещё очень шустро.
2) web-интерфейсы. Сильно облегчают жизнь, но реализовать могут не всё. Пока нашел только штатный GUI и FreePBX.
3) Готовые дистрибутивы на базе *. Обычно умеют больше, плюс в комплекте идут фишки вроде жаббер-сервера итд. Рулить также можно через веб или сторонние программы.
Тут можно порекомендовать trixbox, elastix
N) аналоги не-*. Имеет смысл, но не в этой статье.

Много инфы есть в вики http://ru.wikipedia.org/wiki/Asterisk
англ http://en.wikipedia.org/wiki/Asterisk_(PBX)

Протоколы лучше всего брать SIP и IAX2. Для локалки разницы нет, а вот наружу проще с IAX2 - вместо набора портов (5000-5100 TCP + 6000-6100 UTP для сигнализации) используется только порт 4569 UTP, протокол изначально проектировался с учетом ната. Но многие аппаратные телефоны его не умеют.
Про H.323 лучше сразу забыть. Этот протокол был придуман телефонистами и тащит за собой кучу костылей еще аналоговой телефонии, и вообще сделан неудачно. Это как новый вид кареты вместо автомобиля.

Сравнение телефонов, серверов:
http://en.wikipedia.org/wiki/Comparison_of_VoIP_software
http://en.wikipedia.org/wiki/List_of_SIP_software

О настройке штатного GUI
http://www.asteriskguru.com/tutorials/asterisk_gui.html
Вообще, сайт считается одним из основных по настройке.

The port 'net/samba3' was removed on 2010-10-18 because:

Сделал на днях pkgdb -F

The port 'net/samba3' was removed on 2010-10-18 because:
"Has expired: Unsupported by the upstream. Please, consider to upgrade."
-> Hint: samba-3.0.37,1 is not required by any other package

То есть, версия 3.0 окончила свой жизненный путь. Сейчас есть 3 версии: 34, 35, 4-devel

Замечание:
The default passdb backend has been changed to `tdbsam'! That breaks
existing setups using the `smbpasswd' backend without explicit
declaration! Please use `passdb backend = smbpasswd' if you would like
to stick to the `smbpasswd' backend or convert your smbpasswd entries
using e.g. `pdbedit -i smbpasswd -e tdbsam'.
http://www.mail-archive.com/freebsd-questions@freebsd.org/msg239295.html

О версиях
Представлен первый стабильный релиз Samba ветки 3.4. Основными новшествами в данном релизе стали:...
http://www.opennet.ru/opennews/art.shtml?num=22460

http://www.opennet.ru/opennews/art.shtml?num=24873
http://www.opennet.ru/opennews/art.shtml?num=24437

Дополнительно сообщается о выходе первого кандидата в релизы для ветки Samba 3.5, отличающейся экспериментальной поддержкой протокола SMB2 и более тесной интеграцией с кодовой базой Samba 4. Более подробно о Samba 3.5 можно прочитать в анонсе первой тестовой версии.
http://opennet.ru/opennews/art.shtml?num=24929

Сообщается, что после 5 лет работы над Samba 4 код с реализацией Active Directory достиг состояния пригодного для тестового внедрения на нескольких ресурсах. Код файлового сервера уже пригоден для развертывания кластерных конфигураций, позволяющих организовать работу нагруженных файловых серверов распределенных на несколько машин.

Вкратце:
3.4 поддерживает Win2008, но протокол только SMB1
3.5 - поддержка SMB2 (экспериментальная)
3.6 - полная поддержка SMB2
4.0 - AD, совместимый с 2008, в дальнейшем будет слит с 3 веткой
Инфа набрана с линков выше.

Мониторинг активности USB-устройств

Начиная с Linux-ядра версии 2.6.11 в составе поставляется модуль usbmon, позволяющий осуществить полный мониторинг обмена данными с USB-устройствами.
дальше: http://www.opennet.ru/tips/2479_usb_pcap_tcpdump_monitoring_sniffer.shtml

Может быть полезно, например когда ИБП не хочет подключаться по USB

вторник, 4 января 2011 г.

Wake On Lan в CentOS+xen

Для начала, надо поставить пакет ethtool
Потом проверить, что карта умеет wol
ethtool eth0|grep -i Wake-on

Если будет Wake-on: d - оно выключено, надо включить. Но если xen-ядро, в dom0 ничего не выведет - там реальная карта peth0, так что запускать надо будет ethtool peth0

Для включения других машин имеет смысл поставить пакет:
wakeonlan в debian
wol в CentOS
/usr/ports/net/wakeonlan во FreeBSD

Запускать так: wol -p 9 [mac]
Порт указывать обязательно для debian, для центоси не проверял. Зачем - читаем исходную статью
http://www.opennet.ru/tips/2503_lan_linux_ethernet_boot.shtml
Эта заметка - дополнение к той статье.

И еще момент.
Если на компьютере несколько сетевых карт обязательно нужно указать в параметр -i адрес