30.12.2010

Перенос сайтов и неудобства с ним связанные.

Иногда бывает такое, что нужно перенести сайт, но к серверу есть доступ только по FTP. А нужно снять дамп базы и высасывать одним толстеньким архивом, а не миллионы файлов, половина из которых изуродуется, потому что люди качают с Linux на Windows в ASCII-режиме с конвертацией символов и получают ^M в конце каждой строчки.
Итак алгоритм такой:
1) Загружаем туда по FTP инструмент для снятия дампа: Sypex
Теперь у нас база лежит вместе с файлами в одной директории.
2) Архивируем файлы: AlfaUngzipper
3) Теперь можно как вариант даже не по FTP качать, а оттуда же по wget. Этот совет хорош для пользователей Hetzner, которым режут скорость FTP/FTPS/SFTP/SCP.
Если же с упаковкой файлов не срослось, то вот удобная команда, которая подключившись с десктопа, начинает лить между двумя серверами напрямую (ИСХ - исходный, ЦЕЛ - целевой):
lftp ЛОГИН_ИСХ:ПАРОЛЬ_ИСХ@IP_ИСХ  -e "mirror --verbose / ftp://ЛОГИН_ЦЕЛ:ПАРОЛЬ_ЦЕЛ@IP_ЦЕЛ/  ;quit"
Если в логине присутствует символ @, то нужно взять логин в кавычки: 'ЛОГИН_ИСХ':ПАРОЛЬ_ИСХ@IP_ИСХ
И не забываем, что лучше lftp запускать в screen.
4) Если еще и почту нужно перелить, то есть удобная утилита imapsync. Подключается между двумя 143-ми портами и переливает почту.

29.12.2010

Выравнивание (не синхронизация!) времени на гостевых машинах

Передо мной сервер с Debian Lenny. На нем крутится VMware Server 1. Одна из гостевых машин - Windows Server 2003. Время на Debian идет ровненько. Время на Windows торопится почти вдвое.
Для начала экспериментировал с настройками VMware. Там много не накрутить: в конфиге машины только tools.syncTime = "TRUE", а внутри операционной системы только галочка на утилитке VMware Tools. Результат плачевный: да, время действительно синхронизируется. Но это не значит, что оно стало бежать медленнее. Это значит, что раз в заданный промежуток времени его откидывает рывком назад. При этом у приложения, которое крутится на Windows возникает философская проблема: У него на часах было 17:28. Оно получило пакет на отправку. Пока оно его готовило, прошла синхронизация и время было откатано на реальные 17:21. Программа подготовила пакет и ставит новый штамп времени: 17:22... и перед ним встает дилема - как же так, я получила его в будущем?
Нашел хорошие статьи:
Timekeeping best practices for Windows
W32Time\Subkey
И статья, в которой досканально расписаны происходящие процессы:
Timekeeping in VirtualMachines

23.12.2010

PECL: установка Sphinx для PHP

СНАЧАЛА ОШИБКА, А НИЖЕ КАК ВСЕ СНАЧАЛА ПРАВИЛЬНО ДЕЛАТЬ.
_____
При установке sphinx из pecl возникает ошибка:

# pecl install sphinx
downloading sphinx-1.1.0.tgz ...
Starting to download sphinx-1.1.0.tgz (12,870 bytes)
.....done: 12,870 bytes
4 source files, building
running: phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
 1. Please provide the installation prefix of libsphinxclient : autodetect
1-1, 'all', 'abort', or Enter to continue:
building in /var/tmp/pear-build-root/sphinx-1.1.0
running: /tmp/pear/temp/sphinx/configure --with-sphinx
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc and cc understand -c and -o together... yes
checking for system library directory... lib
checking if compiler supports -R... no
checking if compiler supports -Wl,-rpath,... yes
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for PHP prefix... /usr
checking for PHP includes... -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib
checking for PHP extension directory... /usr/lib/php5/20060613
checking for PHP installed headers prefix... /usr/include/php5
checking for re2c... re2c
checking for re2c version... 0.13.5 (ok)
checking for gawk... no
checking for nawk... nawk
checking if nawk is broken... no
checking for sphinx support... yes, shared
checking for libsphinxclient headers in default path... not found
configure: error: Cannot find libsphinxclient headers
ERROR: `/tmp/pear/temp/sphinx/configure --with-sphinx' failed
#

16.12.2010

Леся Криг нас оставила

Никогда не думал, что придется писать некролог, да еще и близкому человеку. Но наверно это единственный способ заставить себя поверить, что Лесенька ушла.
Очень дорогой мне человек. Мой добрый друг и жена моего друга детства. Красивая, благородная, умная, чувственная и образованная девушка, которая всего в своей жизни добивалась сама. Приехала из маленького провинциального городка Уральска в Казахстане и покоряла мегаполисы: сначала Самару, затем и Москву. Она безумно любила мир и все его краски. Путешествовала везде от Северной Кореи до Аргентины. Наслаждалась каждым моментом. Прекрасно говорила по английски и знала литературу. Ее характер уж точно никогда не был сахаром, но это только придавало ей безграничный шарм. С ней было невероятно приятно и интересно общаться.
И не смотря на то, что жизнь постоянно заставляла ее карабкаться и никогда не считалась с ней, она всегда оставалась Человеком. Ни разу в жизни не делала подлых поступков и, похоже, их даже в мыслях не допускала. Она заработала сотни искренних друзей и ни одного врага. Хрупкая с виду, это была по настоящему сильная женщина. Самая достойная из всех, кого я когда-либо видел. Никто из ее друзей и родных не хочет верить, что теперь все по другому. Это просто невозможно. Так не бывает! Мы заходим по 50 раз на дню на ее страничку в социальной сети, как будто надеясь, что она написала на стене и все вернулось на круги своя. Я не могу поверить, что такое огромное сердце, которое заставляло двигаться планету, вдруг остановилось.
В этом мире явно что-то сломалось, раз наверх забирают такое золото, а других оставляют. Есть только одно оправдание случившемуся: Лесеньку позвали в Рай, потому что там, среди садов и красот, она смотрится намного гармоничнее, чем в нашем уродливом и несправедливом мире. Наверно уже сейчас она гуляет по уютным аллеям среди бесподобных цветов и тысяч нежных запахов. Ласточка! В 30 лет не уходят! Возвращайся! Мы все равно не поверили...

15.12.2010

Почему при выключенном register_globals, инасталляторы CMS-ок ругаются, что он включен.

Попался движок (прямо скажем ублюдочно написанный сверстниками моего 2-х летнего сына) DCMS.
В свойствах php.ini стоит register_globals Off. Инсталлятор не пропускает к шагу установки, потому что не проходит prerequisites.
Причина в следующем. Есть два типа значений в php.ini: бинарное и текстовое.
Для выставления бинарных значений (включено/выключено; да/нет ; 1/0; правда/ложь) через Apache используется директива php_flag.
А для выставления произвольных смысловых значений (qwerty; 517; !!!&&&?; "hello12") используется директива php_value. Причем, в отличии от языков программирования, 0 в php_value расценивается не как бинарное отрицание, а как просто символ "0".
Таким образом имеем, что изначально register_globals выставлен в 0, как в бинарное отрицание. Но в движке есть свой .htaccess, в котором горепрограммисты написали так:
php_value register_globals 0
И в результате register_globals получил существующее значение, а раз есть значение, значит оно есть true. Ну и со всеми вытекающими.
Соответственно либо комментим (если в основном php.ini выключено уже) либо так:
    php_value register_globals 0
+++   php_flag register_globals 0

26.11.2010

503 valid RCPT command must precede DATA

Эта ошибка появляется, если начинается ввод поля DATA до того, как было принято, а не было введено поле RCPT.
В принципе описание ошибки весьма поверхностное и мало о чем говорит. Как правило такое бывает если:

1) Сервер сказал, что умеет PIPELINING. В результате получил batch команд, в которых идут сначала DATA, а затем RCPT. А иногда и несоклько RCPT. После чего опомнился и дал отлуп.

2) RCPT не был принят по каким либо причинам. Например не верна запись PTR для домена, указанного в ehlo или просто не стоит в угловых скобках.

3) Некоторые почтовики (mail.ru например) отказывают в случае, если MX запись домена, от имени которого отправляют указана в виде IP-адреса.
То есть вместо такой записи:
company.com MX 5 123.321.222.111
нужно писать так:
company.com     MX    5    mail.company.com.
mail                    A             123.321.222.111
Только не забудьте две вещи: после mail.company.com. должна стоять точка, иначе DNS присобачит к нему имя зоны и получите mail.company.com.company.com. А второе: такое изменение пройдет только тогда, когда mail.ru обновит свой DNS-кэш - а это несколько часов. То есть результат не сразу настанет.

Для очень подробного выявления проблемы можно использовать великолепную утилиту. Я ее запускаю на сервере, откуда уходит письмо. А она мне подробно показывает весь диалог в формате SMTP:


# swaks --to mailuser@mail.ru 
=== Trying mxs.mail.ru:25...
=== Connected to mxs.mail.ru.
<-  220 Mail.Ru ESMTP
 -> EHLO source-server.com
<-  250-mx170.mail.ru ready to serve
<-  250-SIZE 31457280
<-  250 8BITMIME
 -> MAIL FROM:
<-  250 OK
 -> RCPT TO:
<-  250 OK
 -> DATA
<-  354 Go ahead
 -> Date: Mon, 24 Sep 2012 04:05:16 +0000
 -> To: mailuser@mail.ru
 -> From: root@source-server.com
 -> Subject: test Mon, 24 Sep 2012 04:05:16 +0000
 -> X-Mailer: swaks v20120320.0 jetmore.org/john/code/swaks/
 ->
 -> This is a test mailing
 ->
 -> .
<-  250 OK id=1TFzv3-0005J7-8p
 -> QUIT
<-  221 mx170.mail.ru closing connection
=== Connection closed with remote host.

У команды много опций, например можете задать конкретный MX, опцией --server или вынудить подключиться по TLS: --tls

10.11.2010

Как убить зомби? Да легко, нужно убить его родителя!

И не надо меня насильно лечить, я про Linux :)

# top -b -n 1 | head -2 | tail -1
Tasks: 165 total, 1 running, 161 sleeping, 2 stopped, 1 zombie

# ps auxw | awk '{ print $8 " " $2 }' | grep -w Z
Z 19089

# grep PPid /proc/19089/status
PPid: 19079

# kill -9 19079

# top -b -n 1 | head -2 | tail -1
Tasks: 161 total, 2 running, 157 sleeping, 2 stopped, 0 zombie

07.11.2010

FastCGI: протрите фару, пинните по колесу.

Все, мы по сто раз сталкивались с ошибкой 500 Internal Server Error: A generic error message, given when no more specific message is suitable.
Иногда, особенно, если Apache работает не как mod_php, а как mod_fcgid, при этом в логе:Premature end of script headers
Что делать? Теоретически это скрипт не успел до конца обработаться. Но причин для этого можеть быть море. Один мой товарищ Саша Ребриков, большой маг и волшебник по части чего-нибудь напрограммировать или починить, умудрялся диагностировать ошибку и находить точную причину. Но ему помогал космос, как он сам говорит, а мы на это рассчитывать не можем.

Тут буду собирать список научных тыков, один из которых случайно может попасть в точку и починить:


Немного мыслей на национальную тему

Очень часто на форумах поднимается палестино-израильский вопрос. Не менее часто смотрится он в разрезе всяких стереотипов и клише. Минимум анализа.

И каждый раз писать меня не вставляет. Попробую здесь объяснить свое мнение на глобальные вопросы. А уж потом просто кидать ссылку страждущим правды, справедливости и смерти евреям.
Более того, я постараюсь не оперировать фактами, потому что факты могут быть легко оспорены. Ну максимум буду упоминать общеизвестные факты, которые и без меня все знают. Ну или хотя бы легко проверяются через интернет. Я буду оперировать только логикой на основе фактов, признанных обеими сторонами.

И если Вы не обладаете интеллектом и склонностью к рассуждениям, то хотя бы посмотрите простой, наглядный и доходчивый ролик Дэнниса Прейгэра.  Но если Вам нужно докопаться до правды, то here we go...

21.10.2010

Проблема управления своим вниманием и производетельностью.

Извечная задача всех, кто занимается техническим умственным трудом: как бороться с отвлекающими факторами, вовремя переходить между задачами и иметь максимальную производительность?

Как минимум вот одна прекрасная статья на Хабре.

И совершенно бесподобная книга:

Т. Лимончелли. Тайм-менеджмент для системных администраторов

PHP-сессии можно писать в память, вместо диска

Извечная проблема на серверах, не сильно подготовленных к хостингу: шокирующее количество сессий всего за несколько месяцев заполняют все i-ноды и сервер заклинивает.
Очистить существующие не проблема за пару дней, командой
find /path/to/sessions -exec rm -rf {} \;
А некоторые умельцы даже как-то делают это мгновенно при помощи WinSCP. Но как избежать ситуации в будущем?

Насколько нужен второй Apache в качестве бэкэнда?

До недавнего времени использовал один Nginx на 80-м порту и один Apache на 8080 в качестве бэкэнда. PHP обрабатывается как FastCGI.
Пока на сервере всего 250 сайтов, ничего не предвещает беды.

Но вот что будет, если натравить на сервер бэнчмарк...

24.09.2010

Slow KahaDB access

Некоторые умники типа меня вместо цивилизованных тестовых платформ пишут все на десктопе как деревня. А десктоп у этих умников (опять же типа меня) был выпущен одним годом с лампочкой Ильича и потому несколько стар и задумчив.
И вот если я запускаю ActiveMQ, чтобы гонять через нее межпроцессные сообщения, то через 5 минут все начинает тормозить, а в консоли появляется:
 INFO | Slow KahaDB access: cleanup took 551
 INFO | Slow KahaDB access: cleanup took 2574

20.09.2010

Интересно как будет выглядеть мир через 50 лет? А 100? А 200?

Мне всегда было интересно узнать, что будет в отдаленном будущем. Как изменятся технологии, как вообще будет выглядеть мир. Умирать в свой срок не захочется не потому что страшно, а потому что не увидишь чего-то очень интересного. Потому что любопытство съедает :-D

Нашел любопытную статью, как обстоят дела на этом поприще у науки: Будет ли человек жить до 200 лет?
Или вот статья: Прогноз до 2100 года: Диагноз нам поставят чипы, а в космос нас поднимет лифт

19.09.2010

Библиотеки CORBA в Yoko

Столкнулся с проблемой запуска Geronimo с включенной поддержкой Corba:

# java -javaagent:jpa.jar -jar server.jar
Booting Geronimo Kernel (in Java 1.6.0_21)...
Starting Geronimo Application Server v2.2
[******************                      ]  45%   8s Starting org.apache.ger...2010-09-19 12:20:19,957 ERROR [NameService] Incorrect level of org.omg.CORBA classes found.

Установка JDK, Maven и Geronimo

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

18.09.2010

Linux RHEL-like(rpm) репозитории

Недавно пришлось выбирать себе дистрибутив под новую платформу. При всей моей симпатии к Debian, в силу наличия некоторых причин, выбор пал на RHEL-подобный вариант. На выбор был сам RHEL и два его клона: CentOS и OEL.
Ввиду того, что лицензия OEL - золотая середина между двумя остальными братьями, то он и был установлен.
И первое неудобство - из коробки не идет ни одного прицепленного репозитория. Собирая нужные репозитории по всему интернету, я решил облегчить поиск будущим поколениям с собрать все в одном месте.
Это не окончательный список, он будет пополняться с приходом новых известных репозиториев.