FastNetMon

Sunday, 23 August 2009

Установка FreeBSD 7.2 в QEMU

Скачиваем образ первого диска FreeBSD 7.2:


wget -c -O/films/7.2-RELEASE-i386-disc1.iso ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/7.2/7.2-RELEASE-i386-disc1.iso


Создаем raw раздел (т.к. потом иначе будет проблематично его смонтировать как обычную папку) для установки Фри:

qemu-img create -f raw /films/freebsd72.img 1G


Запускаем инсталляцию Фри:
qemu -hda /films/freebsd72.img -cdrom /films/7.2-RELEASE-i386-disc1.iso -boot d -m 512


Ставим Фрю по принципу "Далее / Далее / Далее".

После завершения установки запускаем Фрю в обычном режиме:
qemu -hda /films/freebsd72.img -m 512

Saturday, 22 August 2009

Сброс пароля на MySQL 5, Centos 5.3

Останавливаем демон MySQL и запускаем его без чтения таблицы юзеров (This option causes the server not to use the privilege system at all, which gives anyone with access to the server unrestricted access to all databases):
/etc/init.d/mysqld stop
/usr/libexec/mysqld --skip-grant-tables --user=root &


Для Дебияна команда примет следующий вид:

/usr/sbin/mysqld --skip-grant-tables --user=root


Теперь, как нам стал доступен MySQL с полным доступом, сбрасываем пароль на единицу:

mysql -u root -e "UPDATE mysql.user SET Password=PASSWORD('1') WHERE User='root'; FLUSH PRIVILEGES;"


После этого останавливаем пущенный нами инстанс MySQL и запускаем обычный сервер:

killall -9 -r mysqld
/etc/init.d/mysqld start


Ну вот и всё:

mysql -uroot -p1
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.45 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>


По информации с: http://www.centos.org/modules/newbb/viewtopic.php?viewmode=thread&topic_id=18433&forum=41&post_id=67253

Friday, 21 August 2009

Сборка HTTP::HeaderParser::XS под Centos x86_64

На Центос 5.3 x86_64 при попытке поставить указанный модуль получаем следующее:

mkdir /tmp/suxx
cd /tmp/suxx
wget http://search.cpan.org/CPAN/authors/id/M/MA/MARKSMITH/HTTP-HeaderParser-XS-0.20.tar.gz
perl Makerfile.PL
make install


и получаем кучу ошибок.

Фиксим:
1009 строка файла HTTPHeaders.c:

-const char* file = __FILE__;
+char* file = __FILE__;


Снова запускаем: make install

Tuesday, 11 August 2009

stat: modify и change

У команды stat следующий вывод:

stat `which dir`
File: `/usr/bin/dir'
Size: 90168 Blocks: 192 IO Block: 4096 regular file
Device: ca01h/51713d Inode: 3851868 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-08-11 22:48:03.000000000 +0400
Modify: 2009-01-21 09:24:09.000000000 +0300
Change: 2009-07-07 04:07:44.000000000 +0400



я никогда не понимал, чем отличаются Modify от Change, теперь решил разобраться:
Access Time | atime | -ul
This is the time that the file was last accessed, read or written to.

Modify Time | mtime | -l
This is the time that the inode information (permissions, name, etc., the metadata, as it were) was last modified.

Change Time | ctime | -cl
This is the last time the actual contents of the file were last modified.


ВНИМАНИЕ!!! ТУТ Ошибка!!!! Реальное состояние дел уточняйте в моем последнем комменте.

thx http://www.linuxquestions.org/questions/linux-general-1/difference-between-access-modify-change-330250/

Monday, 10 August 2009

А как поставить на Centos программу host ?

sudo yum -y install bind-utils

rpm --filesbypkg -qa | grep /usr/bin/host
coreutils /usr/bin/hostid
bind-utils /usr/bin/host

Sunday, 2 August 2009

How to detach a running process?

http://www.linuxforums.org/forum/misc/27281-how-detach-running-process.html

А вот и хорошее добавление моего друга: http://epimpl.blogspot.com/2009/08/how-to-detach-running-process.html

Saturday, 1 August 2009

Моя любимая программа

С сегодняшнего дня моей любимой программой безапелляционно является: fsck.ext3, о причинах, думаю, все догадываются :)

Tuesday, 28 July 2009

Отладка PHP скриптов на Debian/Ubuntu

Встала необходимость отреверсить PHP скрипт с закрытыми исходниками, а стандартных средств в поставе PHP не обнаружил. Вспомнил, что есть спецовый экстеншен xdebug (помню его потому, что когда-то стащил из их кода интересный хак Zend engine). Ставим его:
apt-get install php5-xdebug


Смотрим, какие у модуля имеются настройки:
php -i | grep xdebug -i
/etc/php5/cli/conf.d/xdebug.ini,
with Xdebug v2.0.3, Copyright (c) 2002-2007, by Derick Rethans
xdebug
xdebug support => enabled
xdebug.auto_trace => Off => Off
xdebug.collect_includes => On => On
xdebug.collect_params => 0 => 0
xdebug.collect_return => Off => Off
xdebug.collect_vars => Off => Off
xdebug.default_enable => On => On
xdebug.dump.COOKIE => no value => no value
xdebug.dump.ENV => no value => no value
xdebug.dump.FILES => no value => no value
xdebug.dump.GET => no value => no value
xdebug.dump.POST => no value => no value
xdebug.dump.REQUEST => no value => no value
xdebug.dump.SERVER => no value => no value
xdebug.dump.SESSION => no value => no value
xdebug.dump_globals => On => On
xdebug.dump_once => On => On
xdebug.dump_undefined => Off => Off
xdebug.extended_info => On => On
xdebug.idekey => nrg => no value
xdebug.manual_url => http://www.php.net => http://www.php.net
xdebug.max_nesting_level => 100 => 100
xdebug.profiler_aggregate => Off => Off
xdebug.profiler_append => Off => Off
xdebug.profiler_enable => Off => Off
xdebug.profiler_enable_trigger => Off => Off
xdebug.profiler_output_dir => /tmp => /tmp
xdebug.profiler_output_name => cachegrind.out.%p => cachegrind.out.%p
xdebug.remote_autostart => Off => Off
xdebug.remote_enable => Off => Off
xdebug.remote_handler => dbgp => dbgp
xdebug.remote_host => localhost => localhost
xdebug.remote_log => no value => no value
xdebug.remote_mode => req => req
xdebug.remote_port => 9000 => 9000
xdebug.show_exception_trace => Off => Off
xdebug.show_local_vars => Off => Off
xdebug.show_mem_delta => Off => Off
xdebug.trace_format => 0 => 0
xdebug.trace_options => 0 => 0
xdebug.trace_output_dir => /tmp => /tmp
xdebug.trace_output_name => trace.%c => trace.%c
xdebug.var_display_max_children => 128 => 128
xdebug.var_display_max_data => 512 => 512
xdebug.var_display_max_depth => 3 => 3


Теперь в файле /etc/php5/conf.d/xdebug.ini включаем максимальный уровень логгирования:

xdebug.auto_trace=1
xdebug.collect_params=1
xdebug.collect_return=1
xdebug.collect_vars=1
xdebug.dump.COOKIE=1
xdebug.dump.ENV=1
xdebug.dump.FILES=1
xdebug.dump.GET=1
xdebug.dump.POST=1
xdebug.dump.REQUEST=1
xdebug.dump.SERVER=1
xdebug.dump.SESSION=1
xdebug.dump_undefined=1


Либо, если требуется только профайлер делаем следующее ( включаем профайлер и активируем режим добавления логов без перезаписи ):

xdebug.profiler_enable = 1
xdebug.profiler_append = 1


Теперь запускаем какой-либо скрипт командой php -f some_sript.php и ищем в /tmp файл с именем trace (у меня его звали: /tmp/trace.1422822570.xt), как раз в нем и будет весь трейс работы xdebug :)

Обращаю внимание, что xdebug имеет огромный оверхед на скорость. У меня было падение скорости с 50 запросов / секунду до 12.

Также для удобного просмотра есть отличный веб-интерфейс: http://code.google.com/p/webgrind/

Monday, 27 July 2009

Хейтспич про РСУБД

Меня искренне достали СУБД с их огромными схемами, на проектирование которых тратится уйма времени, всякие килограммовые ORM, для построения "схем" к которым приходится часто затратить сил больше, чем для написания оных к самой базе данных напрямую. Также я хочу получать от хранилища не какие-то там rowы с какими-то хешами, а хочу чтобы это сразу же ложилось на объекты моего языка программирования, также надоела волокита с кодировками.

Я хочу:
1) Быстро поставить хранилище
2) На лету (за время, пока мысль у меня в голове) создать необходимый мне список полей для сохранения, а также хочу, чтобы его в пару кликов / команд можно было изменить
3) Обращаться к этому стораджу на нэтивном языке программирования и получать от него ответы в том же виде.
4) Хорошее масштабирование
5) Средства резервирования и анализа нагрузки (ага, проанализируйте нагрузку на MySQL, ага, стандартными средствами)

Поэтому сильно хочу сделать проект без СУБД вообще, в частности на: CouchDB или MongoDB (как подсказывают из комментариев) или ZODB.

Perl vs Python

Очередной раз на меня напал информационный голод, началось все с того, что изучил OpenID, потрясающая, на мой взгляд, технология. Но дело пошло дальше и теперь я сижу усиленно разбираюсь в фичах Питона! Собстна вопрос -- зачем мне Питон, если я знаю Перл? Ну, эээ, для разнообразия :)

Сразу оговорюсь, что Питон я знаю очень поверхностно, с Перлом же все чуть-чуть лучше :)

Недостатки Перла:
1. Куча проблем с UTF8. Разобрались, как победить UTF8 в своем коде, протестировали и успокоились? А теперь готовьтесь к тому, что почти каждый модуль на Цпане будет глючить с UTF8. Когда у вас 10 модулей, это можно пережить, а если 100 или, скажем, 200 (в нашей системе где-то в районе того) ? Проще повесится, вы правы.
2. Нет нормальной системы Thread`ов. До сих пор под многие проблемы Перл собирается бех их поддержки, впрочем, и правильно: нет соблазна юзать заведомо кривую технологию. Этот факт ограничивает использование Перла для разработки различных серверов, работающих без фронтэндов.
3. Много полезных модулей не введены с стандартную библиотеку (например, JSON, некоторые XML парсеры и проч.), а выбор на CPAN модулей велик настолько, что существует вероятность так и остаться на тестах, не дойдя до самой разработки :)
4. Отсутствие нормальных ORM.
5. Неудобное развертывание тяжелых систем, включающих сотни модулей. Почти всегда приходится ставить модули с force, т.к. кто-то да и вольет багавую версию либы, от которой зависит пол CPAN
6. Сложность синтаксиса, почти всегда требуется весьма продолжительная подготовка, чтобы понимать почти любой код. Питон же читается также легко как и технический английский
7. Поддержка исключений, нэтивная, без хаков и извратов.

Таким образом, как я вижу, Перл идеален для "тяжелых и старых монолитных", которые ранее появились как "десяток модулей", а потом выросли в монстров. Т.к. у девелоперов есть опыт сожительства со всеми модулями и проблемы с выбором не часто встают, т.к. функционал добавляется достаточно редко.

Для молодых и новых проектов идеален как раз Питон. Тут вам ORM, UTF8, легкая работа с почтой, стандартные быстрые HTTP сервера, удобное и очень быстрое развертывание через easy_install, которое не тащит за собой половину репозитория, куча отличных фреймворков, а также почти нету проблем с "выбором модулей", модули часто довольно хороши и не имеют полутора сотен подверсий, что сильно положительно сказывается на времени разработки. Кстати, о Питоновском ООП: он очень хорош и выглядит "как влитой", никакого маразма как в С++/Java, где ради этого ООПе надо писать тонны обязательного кода. Да, кстати, от Питона у меня руки не болят :)) Символов набивается даже меньше чем в Перле!

А следующий хейт-спич будет по священ РСУБД.

Динамические языки обязательные для изучения

Недавно рассуждал, что из динамических языков (а не из динамических, пожалуй, я бы оставил только С и местами С++) в обязательном порядке необходимо знать Перл и Питон лишь по причине наличия для обоих огромного количества стабильных библиотек (CPAN, pypi), PHP же почти не обладает адекватной кодовой базой для "всех задач" (да, PEAR есть, но мало и уныло) и обычно ограничен Вебом, что сильно сужает его применение и выбивает из группы "необходимых для изучения". Руби же также обладает довольно слабой стандартной библиотекой, а либы от пользователей на РубиФордже часто настолько багавы, что хочется выть. Также на РубиФордже очень много проектов созданы в пик популярности Руби/Рельсов и потом почти сразу же брошены. Эти факторы выбрасывают Руби из списка.

Критика и холивары приветствуются :)

Sunday, 26 July 2009

Неизвестный Apache

The TimeOut directive defines the length of time Apache will wait for I/O in various circumstances:

1. When reading data from the client, the length of time to wait for a TCP packet to arrive if the read buffer is empty.
2. When writing data to the client, the length of time to wait for an acknowledgement of a packet if the send buffer is full.
3. In mod_cgi, the length of time to wait for output from a CGI script.
4. In mod_ext_filter, the length of time to wait for output from a filtering process.
5. In mod_proxy, the default timeout value if ProxyTimeout is not configured.

Вот так вота...

RPyC

Хм... конечно. не мануал, но показать "как это работает" хочется-прехочется. Имеем два узла с запущенным classic_server.py: локальный и удаленный, вот так легко выполнять на них команды:

python2.5
Python 2.5.4 (r254:67916, Apr 4 2009, 17:55:16)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import rpyc
>>> local = rpyc.classic.connect('localhost')
>>> local.modules.os.uname()
('Linux', 'nrg-desktop', '2.6.24-22-generic', '#1 SMP Mon Nov 24 18:32:42 UTC 2008', 'i686')
>>> remote = rpyc.classic.connect('ultrasam.ru')
>>> remote.modules.os.uname()
('Linux', 'panel.nrg.name', '2.6.18-6-xen-686', '#1 SMP Sun Feb 10 22:43:13 UTC 2008', 'i686')


Исполнение кода на удаленной машине:

>>> hello_txt = """
... import os
... print "Hello from", os.getcwd()
... """
>>> import os
>>> exec hello_txt
Hello from /home/nrg/rpyc-3.0.6
>>> remote.execute(hello_txt)


И на удаленной машинке выплыло:
Hello from /usr


А вот это меня убило, заживо :)

>>> remote.execute('import urllib')
>>> remote.execute('print urllib.urlopen("http://ya.ru").read()')
>>> local.execute('import urllib')
>>> local.execute('print urllib.urlopen("http://ya.ru").read()')


Потрясающе, у меня нету слов, честно! :)

Saturday, 25 July 2009

Установка RPyC

Python

Смотрим версию Питона:
python -V
Python 2.4.4


Если она 2.4, то сносим 2.4й sudo apt-get remove python2.4 (разумеется, если у вас никакого софта от него не зависит) и ставим 2.5й: sudo apt-get install python2.5 python2.5-dev (для Дебияна)

RPyC

Стягиваем файл: rpyc-3.0.6.tar.gz с http://sourceforge.net/projects/rpyc/files/
wget http://downloads.sourceforge.net/project/rpyc/main/3.0.6/rpyc-3.0.6.tar.gz?use_mirror=sunet
tar -xf rpyc-3.0.6.tar.gz
cd rpyc-3.0.6
sudo python2.5 setup.py install (или просто python, если в это время 2.4 версия будет удалена)



Где почитать?
http://www.ibm.com/developerworks/ru/library/l-rpyc/index.html?ca=drs-ru-0707
http://rpyc.wikidot.com/