25.10.2011

Просмотр трафика MySQL

Сначала соберем пакет.

Установим pcap-библиотеку:
apt-get install libpcap-dev

Создаем и переходим в директорию:
mkdir /usr/src/mysqlsniffer
cd /usr/src/mysqlsniffer

Скачиваем:
wget hackmysql.com/code/mysqlsniffer.tgz

Разархивируем:
tar xzf mysqlsniffer.tgz

Компилируем:
gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c

Кидаем утилиту туда, куда полагается по фэн-шую FHS:
mv mysqlsniffer /usr/bin/


Ну и пользуемся благами общества:
mysqlsniffer --verbose --no-mysql-hdrs eth0 | grep COM_QUERY

23.10.2011

Использование WevDAV как замена FTP/FTPS/SFTP/SMB/CIFS

Дабы не перегружать информацией и шагами, которые не входят в решение задачи, я опущу максимум деталей, подразумевая, что на сервере уже готов виртхост. Например доступ производится по адресу upload.nodesquad.com.

Сначала включаем необходимые модули в Apache:

a2enmod dav dav_fs


Далее включаем в виртхосте использование этого модуля директивой DAV On (опять же я опущу все некасающиеся данной темы настройки как например логи, хэндлры и аутентификация):
<VirtualHost *:443>
ServerName upload.nodesquad.com
DocumentRoot /var/www/upload

<Location />
DAV On
<
/Location>

</VirtualHost>
И перегружаем его, чтобы применились настройки:
invoke-rc.d apache2 restart

Теперь можно использовать.
Windows-GUI-клиенты:
плагин WebDAV для Total Commander
JScape AnyClient
WebDrive
BitKinex

Debian-CLI-клиенты:
cadaver и nd - просто консольные клиенты
davfs2 - монтировка ресурсов на постоянной основе как полноценная файловая система
fusedav - тоже самое, что davfs2, только с использованием FUSE

ВНИМАНИЕ: возможность подключить и зааплоадить файлы есть у любого человека, включая злоумышленника. Поэтому в секцию Location очень желательно добавить авторизацию:
<Location />
DAV On

AuthName "My DAV service"
AuthType Basic
AuthUserFile /etc/some_site/htpasswd.users
AuthUserFile /etc/some_site/htpasswd.users
Require valid-user

<
/Location>




22.10.2011

Несохранение вкладок при закрытии FireFox 4-7

Раньше в 3-м FF при первом закрытии браузера с двумя и более табами, он предлагал сохранить табы. При следующем запуске мы могли продолжить с места, где остановились - все табы на месте. В 4-м FF это убрали. Чинится так:
1) Набираем в адресной строке:  about:config и жмем Enter. Тем самым попадаем в полный список настроек, многих из которых нет в менюшках.
2) Находим настройку browser.showQuitWarning и переводим ее в состояние true.

Кстати, раз уж мы тут, можно еще одну настройку подкрутить. Обратили внимание, что если копировать из адресной строки кирилические символы, то они отображаются кракозябрами при последующей вставке (например, когда копируете ссылку из браузера другу в аську)?
Например:
http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82,_%D0%B4%D1%80%D1%83%D0%B7%D1%8C%D1%8F!

А теперь там же в about:config сменим network.standard-url.escape-utf8 на false.
И вот уже скопировав строчку при вставке мы видим нормальные http://ru.wikipedia.org/wiki/Привет,_друзья!

12.10.2011

Анекдот

Вот никогда не постил анекдоты в блог, но этот - просто роскошь. Не запощу - потом потеряю.


Едут в одном купе такой подтянутый, в годах, хорошо одетый мужчина и сногсшибательная юная особа, с томным взглядом. Он читает газету, она делает вид, что читает книгу, то и дело постреливая на него глазками. Через некоторое время меж ними происходит следующий диалог:
— Молодой человек, а я вам совсем неинтересна?
— Отчего же, — отвечает тот, — вы просто само очарование.
— Но тогда почему же вы ничего не предпринимаете, ведь это так увлекательно, завоевывать, развлекать женщину, соблазнять ее, вы наверняка умеете это в совершенстве, и быть может тогда вам достанется главный приз.. — вдохновенно улыбалась девушка.
— А смысл? — спросил мужчина, — вот например, скажем, вы любите по утрам свежие круазаны?
— О, да, они такие хрустя..
— А тесто месить любите?
— Ну что вы, мне проще пойти и купить их в булочной, — неудоумевая ответила юная дама.
— Вот и я человек небедный.

Сборка MySQL под Debian

Сначала поставим пакет поддержки AIO (асинхронный ввод-вывод к диску), чтобы движки стораджей, которые это умеют (например InnoDB), скомпилировались с этой поддержкой:
apt-get install libaio1 libaio-dev
Ну и еще поставим специфические для сборки пакеты:
apt-get install debhelper devscripts cmake libedit-dev libreadline-dev

Переходим в директорию, где будем работать:
cd /usr/src

На страничке Download MySQL Community Server переключаем выпадающее меню из "Linux-Generic" в "Source Code". Важно знать, что версии выше 5.1 не соберутся по этому мануалу, потому что у них используется configure.cmake вместо configure. Качайте 5.1.
Загружаем нужную версию, помеченную как Generic Linux (Architecture Independent), Compressed TAR Archive.

Кладем этот пакет в /usr/src


Далее нужно выбрать опции конфигурирования. Их описание имеется тут.

Опубликую сначала стандартные опции конфигурирования MySQL на Debian (добытые утилитой mysqlbug):
./configure  '--build=x86_64-linux-gnu' '--host=x86_64-linux-gnu' '--prefix=/usr' '--exec-prefix=/usr' '--libexecdir=/usr/sbin' '--datadir=/usr/share' '--localstatedir=/var/lib/mysql' '--includedir=/usr/include' '--infodir=/usr/share/info' '--mandir=/usr/share/man' '--with-server-suffix=-24+lenny5' '--with-comment=(Debian)' '--with-system-type=debian-linux-gnu' '--enable-shared' '--enable-static' '--enable-thread-safe-client' '--enable-local-infile' '--with-big-tables' '--with-unix-socket-path=/var/run/mysqld/mysqld.sock' '--with-mysqld-user=mysql' '--with-libwrap' '--without-openssl' '--with-yassl' '--without-docs' '--with-bench' '--without-readline' '--with-extra-charsets=all' '--with-innodb' '--with-archive-storage-engine' '--with-csv-storage-engine' '--with-federated-storage-engine' '--with-blackhole-storage-engine' '--with-sphinx-storage-engine' '--without-embedded-server' '--with-ndbcluster' '--with-ndb-ccflags=-fPIC' '--with-ndb-shm' '--without-ndb-sci' '--without-ndb-test' '--with-embedded-server' '--with-embedded-privilege-control' '--without-ndb-docs' 'CC=gcc' 'CFLAGS=-DBIG_JOINS=1 -O2 -fPIC' 'CPPFLAGS=' 'CXXFLAGS=-DBIG_JOINS=1 -felide-constructors -fno-rtti -O2' 'CXX=g++' 'FFLAGS=-g -O2' 'LDFLAGS=' 'build_alias=x86_64-linux-gnu' 'host_alias=x86_64-linux-gnu' 'CFLAGS= -DDBUG_OFF -DBIG_JOINS=1 -O2 -fPIC  ' 'CXXFLAGS= -DDBUG_OFF -DBIG_JOINS=1 -felide-constructors -fno-rtti -O2   -fno-implicit-templates -fno-exceptions -fno-rtti'

 А мы добавим еще несколько настроек (Вам оно может и не надо, я в качестве примера просто показываю):
'--enable-profiling' '--with-debug' '--with-vio' '--with-charset=utf8'

И наоборот удалим '--with-yassl' и '--without-openssl', потому что они переведены в depricated.


Как вернуть консоль, если приложение зависло.

Маленький ликбез для тех, у кого на экране что-то застряло и нужно попасть на этот же компьютер с возможностью давать команды:

1) Если есть сеть, то самое простое - подключиться по SSH.
2) Можно запускать задачу в скрине (команда screen). И потом отдетачиться от него командой (после нажатия Ctrl+a ничего визуально не изменится, жмите d не ожидая реакции):
Ctrl+a d
3) Переключиться в другую консоль: Ctrl+Alt+F1 (F2,F3,...,F9).
Чтобы вернуться в основную консоль Ctrl+Alt+F7
4) У Вас над кнопкой Insert на клавиатуре есть неприметная клавиша SysRq. Нажмите на Alt+SysRq+e с указанием PID.
5) Можно отправить job в бэкграунд клавишей Ctrl+Z. Это тоже самое, что запустить команду с & (например /some/path/command &).
Команда jobs покажет все задания с их состоянием. Обратите внимание, что теперь она в состоянии Stopped. Чтобы вернуть ее, нажмите fg, а чтобы заставить работать в бэкграунде, нажмите bg.

Устройство файловой системы

Прекраснейшая статья об устройстве и потрохах файловой системы. Написано очень доступно и с картинками:


Фрагментация под Linux: Настройка файловой системы Ext3

05.10.2011

Сборка Nginx под Debian

Поставим сначала пакеты. Возможно вам пригодятся еще какие-то, но об этом вы узнаете, если какая-то команда не запустится:
apt-get install libpcre++-dev libssl-dev libgeoip-dev dh-make autotools-dev gcc-4.3 debhelper devscripts
Также перед началом вписываем себе в переменное окружение (~/.bashrc) наши опознавательные знаки:

DEBEMAIL="email.address@example.org"
DEBFULLNAME="Имя Фамилия"
export DEBEMAIL DEBFULLNAME

И применяем их:
source ~/.bashrc

Переходим в директорию, где будем работать:
cd /usr/src

Выбираем нужную версию программы на сайте. И скачиваем её:
wget http://nginx.org/download/nginx-1.0.8.tar.gz

Распаковываем, но сам тарбол не стираем и оставляем его на месте(!!!):
tar xzf nginx-1.0.8.tar.gz

Теперь нужно переименовать директорию с сорцами, потому что далее сборщик deb-пакета возьмет название и номер версии отсюда. Правило одно - слева имя пакета (оставим его nginx, чтобы он заменял стандартный) и следом первый дефис. А второй дефис разделяет версию пакета и версию мейнтейнера. И никаких подчеркиваний! Итак меняем версию:
mv nginx-1.0.8 nginx-1.0.8-nsq1

Высокий Load Average при почти полном простое сервера

Есть сервер с приличной нагрузкой, но не на столько приличной, чтобы в очереди стояли процессы.
При этом в топе мы видим параметры:


И тут мы видим:
load average: ~14
us (время процессора, занятого обработкой пользовательских тредов): в среднем 19,8%
sy (время процессора, занятого обработкой драйверов и ядра): в среднем 9,75%
id (время бездействия процессора): в среднем 51,1%
wa (время процессора, занятого ожиданием ответа от диска): в среднем 18,7%.
Суммарно все 4 параметра естественно дают 100%.

Возникает вопрос - какого лешего процессор 51% времени ничего не делает в то время, как к нему в очереди стоят аж из 14 процессов, жаждущих, чтобы ими тоже занялись?

Ответ: цифра 14 неправильная и не отображает реальной загрузки ввиду редкого снятия данных (снимать чаще слишком дорогая операция). Вторая причина - тики (подробнее о том, как это влияет в ссылке ниже).

Вывод: То есть если вдвое загрузить еще сервер, то Load Average не изменится. Пока idle(id) не упрется в 0%, а us, соответственно, не упрется в сумму wa+sy, можно смело догружать сервер, не боясь, что LA вырастет.

Подробнее тут.