суббота, ноября 13

Debian. mysql server

статья устарела. обновленная версия тут

Сразу после установки настраиваемся на utf8 и удаляем ошибку при запуске демона:

1) устанавливаем сервер MySQL
apt-get install mysql-server

2) удаляем ошибку "Access denied for user ‘debian-sys-maint’@'localhost" (решение найдено тут)
открываем файл /etc/mysql/debian.cnf и находим строчку password:
password = bla-bla-bla

в клиенте mysql выполняем команду
GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION; # вставляем вместо %password% "подсмотренный" пароль.

3) устанавливаем кодировку utf8 по умолчанию
в файле /etc/mysql/my.cnf добавляем строки для каждого блока []:

[client]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = "set names utf8;"
[mysqldump]
default-character-set = utf8

4) перезапускаем сервер MySQL

5) заходим клиентом и на команду "mysql> show variables like "%character%";show variables like "%collation%";" видим нечто подобное:
mysql> show variables like "%character%";show variables like "%collation%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

четверг, ноября 11

Debian. timezone

Для настройки временной зоны и синхронизации,
  • "apt-get install ntp ntpdate" - ставим NTP демона для синхронизации
  • "ntpdate -bs ru.pool.ntp.org" - синхронизируем часы
  • "dpkg-reconfigure tzdata" - выставляем нужную нам временную зону, например Europe/Moscow

подсмотрено тут


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

с CentOS на Debian. iptables

Решил перебраться на сервере с CentOS на Debian

Первое "неудобство", с которым столкнулся, это отсутствие, ставших уже привычными, скриптов восстановления правил для iptables.
Поиск в инете можно сделать и найти вагон и маленькую тележку информации, что в Debian всё убрано и что нужно всё прописывать ручками в интерфейсах и прочее... а можно просто глянуть результат команды "apt-cache search iptables" и увидеть пакет iptables-persistent (как поставить из тестовой ветки)... вот он то нам и нужен

устанавливаем пакет командой "apt-get install iptables-persistent"
теперь у нас есть скрипт /etc/init.d/iptables-persistent, который и будет восстанавливать правила после запуска системы.
А сами правила теперь вместо /etc/sysconfig/iptables лежат в /etc/iptables/rules
соответственно, после тестирования правил, сохраняемся по команде "iptables-save > /etc/iptables/rules".

В остальном больше никаких изменений нет - у меня прекрасно заработал всё тот же мой скрипт iptables.sh


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

среда, сентября 8

а они всё прут и прут. о_О

Народ, скажите, что за хрень такая? При том, что я НИЧЕГО с этими сайтами не делаю - ни оптимизации, ни каких-либо изменений в контенте! на том, который под 2 тыщи % посещений вообще всего 4 html странички статичного текста...



понедельник, сентября 6

Zend Studio и поддержка Ant-скриптов. Продолжение

Как выясняется, мало включить поддержку Ant, так надо ещё и JVM поменять для выполнения Ant-скриптов, чтобы не получать UnsupportedClassVersionError.

По-умолчанию Zend Studio (проверял на 7.2.1) использует JRE 1.5.0_08 и при при запуске Ant-скриптов на задачах, связанных с SSH, получаем UnsupportedClassVersionError
Решается очень просто:

1) Включается поддержка Java
1.1) Открываем диалог создания нового проекта "File > New > Other..."
1.2) В диалоге ставим галочку на "Show All Wizards", если она не стоит (у меня так её и вовсе уже почему-то нет) и жмём Next
1.3) в диалоге "Confirm Enablement" нажимаем "OK", чтобы включить поддержку Java
1.4) Закрываем диалог создания проекта
2) В настройках в разделе "Java > Installed JREs" добавляем путь до нужной нам версии JRE и ставим возле неё галочку

ЗЫ: перезагружать Zend Studio не обязательно
ЗЫЫ: пробовал поменять VM для Zend Studio на 1.6, но IDE начала зависать на некоторых диалогах, да и для ant-скриптов всё равно использовала свою JRE, а не указанную через ZendStudio.ini





Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

Zend Studio и поддержка Ant-скриптов

Собственно, в интернете достаточно (если покопаться) написано про то, как включить поддержку Ant в Zend Studio.

Мною найден ещё один способ - использование ant БЕЗ включения :) извращение, но имеет право на жизнь. подкатом описаны оба способа.

1-й способ: "без включения" поддержки Ant.
Особенность заключается в том, что ant-скрипты всё равно РАБОТАЮТ даже при выключенной поддержке :) и, если вам не понадобится расширять ant своими или сторонними библиотеками (такими например, как поддержка ssh), то этого вполне достаточно.

Открываем справку через "Help > Help contents" и открываем раздел "Ant view" как указано на картинке ниже. В открывшемся разделе кликаем по ссылке выделенной на картинке красной линией. вуаля - мы имеем представления, в которое можно добавлять ant-скрипты и выполнять их.
Да, чтобы представление полностью заработало (появились кнопки), потребуется перезапустить Zend Studio.



Способ рабочий, но из категории "так делать не надо" - правильнее будет включить полноценную поддержку ant-разработки, о чём я напишу во-втором способе:

2-й способ: с включением поддержки Ant (знания подчерпнуты на просторах интернета)
1) Меню "File > New > Other..."
2) Кликаем по "Show All Wizards", чтобы увидеть скрытые мастера, а в частности, раздел Java
3) Выбираем "Java Project from Existing Ant buildfile" и жмём "Next"
4) в диалоге "Confirm Enablement" нажимаем "OK", чтобы включить поддержку Ant
5) Закрываем диалог создания нового проекта
6) Перезапускаем Zend Studio







Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

понедельник, августа 30

Zend Framework XML-конфиг и константы

В предыдущем посту я написал про то, как легко перейти с INI-конфигурации на XML-конфигурацию. В использовании оной есть как плюсы, так и минусы.

из плюсов, как минимум то, что не приходится писать кучу повторяемых "веток" вида "resources.frontController" - мы пишем простое XML-дерево.
из минусов:
1) чтение XML-конфигурации несколько дольше (по тестам, что нашёл - ~0,15 сек). но есть подозрение, что ещё быстрее, чем ini-файл будет подсовывание напрямую массива как конфигурации
2) При автоматическом форматировании XML в редакторах, значения с zf-константами форматируются "криво" - переносятся на новые строки.

Решением проблемы (2) мы и займёмся.
Для начала скажу, что для разработки я использую Eclipse, а для загрузки файлов на сервер - ant-скрипт, который делает предварительную сборку файлов перед загрузкой на сервер. В нём же производятся некоторые действия над файлами, одно из которых я приведу ниже.

Определим правило, что константы вместо "<zf:const zf:name="константа">" в xml-конфиге будем описывать как "%ZF.константа%". для замены содержимого в файле, воспользуемся task-ом replaceregexp, выглядящий следущим образом:

<replaceregexp flags="g">
 <!-- заменяем "%ZF.константа%" на "<zf:const zf:name="константа" />" -->
 <regexp pattern="%ZF.(.*)%" />
 <substitution expression="&lt;zf:const zf:name=&quot;\1&quot; /&gt;" />
 <fileset dir="${target}/application/configs" includes="**/*.xml" />
</replaceregexp>

собственно на этом всё. :)
Итого: на этапе разработки мы получаем удобный XML, без "лишних" тегов, а на сервере правильный xml-конфиг с понятными для ZF константами

Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

Zend Framework и XML конфиг вместо INI

Делается всё просто как на 1-2-3:

1) открываем файл public/index.php
2) после строки "require_once 'Zend/Application.php';" дописываем строку "require_once 'Zend/Config/Xml.php';"
3) вместо
$application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
пишем строки:
$cfg = new Zend_Config_Xml(APPLICATION_PATH . '/configs/application.xml', APPLICATION_ENV);
$application = new Zend_Application(APPLICATION_ENV, $cfg->toArray());
4) сохраняем изменения

да, и не забываем создать xml-файл конфигурации вместо ini-файла ;)


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!

суббота, августа 21

NAT & iptables в Linux (CentOS)

несколько часов убились мною и моим коллегой "по цеху" на поиск решения "да что за нафиг такой?" :)

преамбула:
на сервере используется скрипт iptables.sh, который описывает правила для iptables. дело нехитрое - поправил правила, запустил, проверил работу и, если всё тип-топ, то сохранил правила.
В скрипте описание довольно нехитрое: очистили все правила маршрутизации и воссоздали их по новой.
Всё казалось бы просто, до тех пор, пока не столкнулись с nat-маршрутизацией :)

правила сбрасывались следующими строчками в скрипте:
$IPTABLES -F
$IPTABLES -X
, где $IPTABLES - путь до приложения (IPTABLES="/sbin/iptables")

в том же скрипте когда-то была настройка на переброс порта с 80 на 8080, от которой по некоторым соображениям, было решено отказаться.
дело не хитрое - заремили нужную строку и выполнили скрипт.
и, как говорится, "скоро сказка сказывается, да не скоро дело делается" - НЕ ПАШЕТ.
снова смотрим скрипт - всё верно. сохраняем правила, перегружаем сервер на всякий, что должно как минимум сбросить нам все правила и реанимировать их из сохраняшки. ага, щаз...

в общем, пока суд да дело, было найдено решение - в блок сброса таблицы маршрутизации требуется дописать отдельное правило для сброса именно nat-маршрутов:
$IPTABLES -t nat -F

после чего, весь блок сброса приобретает вид:
$IPTABLES -F
$IPTABLES -X
$IPTABLES -t nat -F

ЗЫ: подумалось, что это ведь довольно неплохая задачка для вопроса на собеседовании :)


Если вам пригодилась статья, то отправьте 5 рублей автору. Спасибо!