вторник, 28 сентября 2010 г.
Мораль
Если что-то работает - не трогай это. Путь работает. Не надо пытаться улучшить, если нет резерва. В этот раз повезло и не залип на всё ночь, но адреналина хватило )
понедельник, 27 сентября 2010 г.
di.fm
Замечательная штука, сабж )
Я когда-то в амароке их эмбиент канал врубал. А тут вот заглянул, нашёл габбер канал, включил - и правда габбер. А вот его-то кстати и захотелось на днях. Между прочим, на последнем A Nigthmare Outdoor парочку неплохих вещей нарыл.
Я когда-то в амароке их эмбиент канал врубал. А тут вот заглянул, нашёл габбер канал, включил - и правда габбер. А вот его-то кстати и захотелось на днях. Между прочим, на последнем A Nigthmare Outdoor парочку неплохих вещей нарыл.
суббота, 25 сентября 2010 г.
четверг, 9 сентября 2010 г.
Ротация бекапов
Доделал скрипт для хранения и ротации бекапов. Из костыля к fsbackup оформилось что-то полноценное.
Можно отправлять несколько файлов, пример:
Можно отправлять несколько файлов, пример:
/root/scripts/store.pl /root/scripts/mybase.sql.gz backup.tar.gzВ сам скрипт забиваются реквизиты ftp сервера и глубина ротации.
#!/usr/bin/perl
use Net::FTP;
use File::Basename;
my $remote_host = "localhost";
my $remote_login = "backup";
my $remote_password = "yeyzfz200";
my $n = 12;
my $path;
my $file;
$ftp = Net::FTP->new($remote_host) || die "Can't connect to ftp server.\n";
$ftp->login($remote_login, $remote_password) || die "Can't login to ftp server.\n";
$ftp->binary();
while ($path = shift @ARGV) {
my $file = basename($path);
# old backup deleting
print "Remove old backup\n";
foreach $cur_dir ($ftp->ls()) {
if ($cur_dir eq $file.".".($n - 1)) {
$ftp->delete($cur_dir);
}
}
# backup rotate
print "Backup rotating:\n";
for ($i = $n - 2; $i > 0; --$i) {
$j = $i + 1;
foreach $cur_dir ($ftp->ls()) {
$name = $new_name = $cur_dir;
if ($name eq $file.".".$i) {
$new_name =~ s/\.$i$/\.$j/;
print "$name -> $new_name\n";
$ftp->rename($name, $new_name);
}
}
}
foreach $cur_dir ($ftp->ls()) {
$name = $new_name = $cur_dir;
if ($name eq $file) {
$new_name = $name.".1";
print "$name -> $new_name\n";
$ftp->rename($name, $new_name) or die "Can't rename $name\n";
}
}
$ftp->put("$path", "$file") || print "Can't PUT $path to remote FTP";
}
среда, 8 сентября 2010 г.
mysql: Host is blocked because of many connection errors;
Вот такое жизнерадостное сообщение порой можно получить от MySQL:
Пример из практики. Человек в скрипте указал пользователя, не имеющего доступа к базе, к которой собственно и был коннект. Несколько раз получил сообщение, что не выбрана база, а потом - Host blabla.de is blocked и т.д.
Тут, между прочим, широкие возможности открываются ;)
Собственно, дабы сбросить блокировку надо выполнить:
Host 'example.com' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'Связано вот с чем. У мускуля имеется своего рода защита от брутфорса - параметр max-connection-error. Как только число ошибок станет больше допустимого - хост блочится.
Пример из практики. Человек в скрипте указал пользователя, не имеющего доступа к базе, к которой собственно и был коннект. Несколько раз получил сообщение, что не выбрана база, а потом - Host blabla.de is blocked и т.д.
Тут, между прочим, широкие возможности открываются ;)
Собственно, дабы сбросить блокировку надо выполнить:
mysqladmin flush-hosts
четверг, 26 августа 2010 г.
Замена подстроки в файле седом во фряхе и лине
$ sed -i '' -e 's/string1/string2/' file
если после -i '' не поставить апострофы - то получим копию файла с -e на конце.
А в лине такого изврата с копиями нет )) там просто
$ sed -i 's/string1/string2/' file
если после -i '' не поставить апострофы - то получим копию файла с -e на конце.
А в лине такого изврата с копиями нет )) там просто
$ sed -i 's/string1/string2/' file
PHP from source
Последнее время часто приходится сталкиваться с nginx + php-fpm.
php-fpm для ветки 5.2 идёт как патч, поэтому пыхпых приходится руками собирать.
Решил свои действия, наконец, на бумажку записать )
Поехали. Качаем, патчим:
Дальше в scripts/php-config надо поправить строку --extensions-dir, дабы модули лежали в более удобном месте.
Кладём php.ini в /etc и меняем в нём путь к модулям на наш.
Cобираем модули:
В во время сборки на понадобятся разные сорсы, gcc и autoconf. В правильных дистрах просто доставляем нужные devel пакеты.
php-fpm для ветки 5.2 идёт как патч, поэтому пыхпых приходится руками собирать.
Решил свои действия, наконец, на бумажку записать )
Поехали. Качаем, патчим:
wget http://ru2.php.net/get/php-5.2.12.tar.gz/from/this/mirrorСобираем ядро php:
wget http://php-fpm.org/downloads/php-5.2.12-fpm-0.5.13.diff.gz
tar xzf php-5.2.12.tar.gz
gzip -cd php-5.2.12-fpm-0.5.13.diff.gz | patch -d php-5.2.12 -p1
./configure \dom и xml можно отсюда выкинуть, просто мне так нужно было.
--prefix=/usr/local/php \
--exec-prefix=/usr/local/php \
--sysconfdir=/etc \
--enable-fastcgi \
--enable-fpm \
--with-fpm-conf=/etc/php-fpm.conf \
--with-fpm-log=/var/log/php-fpm.log \
--with-fpm-pid=/var/run/php-fpm.pid \
--with-libdir=/lib64 \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-dom \
--enable-xml
make install
Дальше в scripts/php-config надо поправить строку --extensions-dir, дабы модули лежали в более удобном месте.
Кладём php.ini в /etc и меняем в нём путь к модулям на наш.
Cобираем модули:
По аналогии собираем другие компоненты.
cd /root/build/php-5.2.12/ext/mysql
/usr/local/php/bin/phpize
./configure --prefix=/usr/local/php \
--exec-prefix=/usr/local/php \
--sysconfdir=/etc \
--enable-fastcgi \
--enable-fpm \
--with-fpm-conf=/etc/php-fpm.conf \
--with-fpm-log=/var/log/php-fpm.log \
--with-fpm-pid=/var/run/php-fpm.pid \
--with-libdir=/lib64 \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-dom \
--enable-xml \
--with-mysql=shared \
--with-php-config=/root/build/php-5.2.12/scripts/php-config
make install
echo "extension=mysql.so" > /etc/php.d/mysql.ini
В во время сборки на понадобятся разные сорсы, gcc и autoconf. В правильных дистрах просто доставляем нужные devel пакеты.
nginx htpasswd
В нужный локейшн добавляем:
login:hash
Генерим: htpasswd -n login
auth_basic "auth required";В /etc/nginx/htpasswd вставляем:
auth_basic_user_file /etc/nginx/htpasswd;
login:hash
Генерим: htpasswd -n login
среда, 25 августа 2010 г.
пыхпых моя админ!
Никогда не любил phpmyadmin. Сегодня в очередной раз убедился, какой это хлам. Консольный mysql - это наше всё. Вебмин тоже годится. И Mysql Workbench. А phpmyadmin - для нищебродов, которые всякими денверами пользуются.
Воть.
Воть.
среда, 18 августа 2010 г.
Отбор GET запросов
tcpdump -nnp -vv -s 1500 -c 10000 -X dst host xxx.xxx.xxx.xxx and "tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420"
Подписаться на:
Сообщения (Atom)