понедельник, 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 г.