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