LINUX.ORG.RU

Сообщения ksv

 

Странный скачок времени

Привет.

Может кто-нибудь объяснить скачок времени с 07.01.2009 00:00 на 06.01.2009 23:00 (или обратно)?

sergey@debian:~/dev/tzdata$ cat test.c
#include <time.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
        struct tm localTM;
        time_t t1, t2;

        localTM.tm_sec = 0;
        localTM.tm_min = 0;
        localTM.tm_hour = 0;
        localTM.tm_mday = 7;
        localTM.tm_mon = 0;
        localTM.tm_year = 109;

        t1 = mktime(&localTM);

        localTM.tm_mday = 6;
        localTM.tm_hour = 23;
        t2 = mktime(&localTM);

        printf("t1 == t2: %d\n", t1 == t2);

        return 0;
}
sergey@debian:~/dev/tzdata$ gcc -o test test.c
sergey@debian:~/dev/tzdata$ ./test
t1 == t2: 1
sergey@debian:~/dev/tzdata$ date +%Z
MSK

 mktime,

ksv
()

Вывод sensors

Всем привет.

На сервере (Lenny powered) sensors показывает некую причину для тревоги (in5)

# sensors
it8718-isa-0290
Adapter: ISA adapter
in0:         +1.17 V  (min =  +0.00 V, max =  +4.08 V)
in1:         +1.89 V  (min =  +0.00 V, max =  +4.08 V)
in2:         +3.28 V  (min =  +0.00 V, max =  +4.08 V)
in3:         +2.98 V  (min =  +0.00 V, max =  +4.08 V)
in4:         +0.43 V  (min =  +0.00 V, max =  +4.08 V)
in5:         +0.00 V  (min =  +0.00 V, max =  +4.08 V)   ALARM
in6:         +0.10 V  (min =  +0.00 V, max =  +4.08 V)
in7:         +3.12 V  (min =  +0.00 V, max =  +4.08 V)
in8:         +3.26 V
fan1:       1418 RPM  (min =    0 RPM)
fan2:          0 RPM  (min =    0 RPM)
fan3:          0 RPM  (min =    0 RPM)
fan4:          0 RPM  (min =    0 RPM)
temp1:       +33.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = transistor
temp2:       +25.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermal diode
temp3:        -2.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = transistor
cpu0_vid:   +1.075 V

На сайте материнской платы (http://www.gigabyte.com/products/product-page.aspx?pid=2810#sp) пишут что 6й по порядку (5й если считать с нуля) - CPU fan speed control. Но кулер у процессора крутит неплохо. К тому же, температура достаточно приемлемая. Да и в выводе sensors больше 6ти входов (в документе на материнскую плату только 6).

Собственно, вопросы. Правильно ли я нашел описание сенсоров, или это что-то совсем другое? Если неправильно - где поискать? Если правильно - стоит ли волноваться, если все кулеры работают нормально?

ksv
()

rsyslog пропускает сообщения

Здравствуйте.

Пожаловались мне, что на одной машине (Debian Lenny) rsyslog пропускает некоторые сообщения, генерируемые файрволом. Точнее, rsyslog через плагин не выгружает некоторые сообщения в mysql базу.

Быстро написал генератор сообщений syslog:

#include <syslog.h>

int main(int argc, char *argv[])
{
    char s[] = "TESTLOG0000000000";
    int i;
    unsigned int len = sizeof(s) / sizeof(s[0]);
    char *strend = s + len - 2;

    openlog("TMG", LOG_NDELAY | LOG_NOWAIT, LOG_USER);
    for (i = 0; i < 500000; ++i)
    {
        char *p = strend;
        syslog(LOG_NOTICE, s);
        while (*p == '9') {
            *p = '0';
            --p;
        }
        (*p) ++;
    }
    closelog();

    return 0;
}

Запускал на виртуалке. Сообщения генерируются, средняя скорость варьируется в зависимости от их количества (100к - 600 сообщений в секунду, 500к - 400). На 500к сообщений видны пропадания - в базу не попадает порядка 150 сообщений. Проверял содержимое /var/log/syslog - там этих сообщений тоже нет. Значит, каким-то образом сообщения не дошли до самого syslog.

Погуглил, нашел, что пропадание может быть вызвано маленьким размером буфера стека UDP. Повысил, перезапустил rsyslog:

# sudo sysctl -w net.core.wmem_max=1116160
# sysctl -w net.core.rmem_max=1116160
# sysctl -w net.ipv4.udp_rmem_min=1116160
# sysctl -w net.ipv4.udp_wmem_min=1116160
# sysctl -w net.ipv4.udp_mem='1116160 1116160 1116160'
# sysctl -w net.ipv4.route.flush=1
# /etc/init.d/rsyslog stop && sudo /etc/init.d/rsyslog start

Все равно сообщения пропадают, причем потери примерно такие же - 150 сообщений при 500к сгенерированных. Значит, ни при чем тут стек UDP.

Вопрос - почему могут пропадать сообщения? Где посмотреть и что можно подкрутить?

ksv
()

network sniffing и wireshark

Всем привет.

У меня наверное достаточно простой вопрос по сетевым пакетам, но найти решение не получилось.

Поставлена задача: модифицировать имеющийся сниффер для выгрузки данных в формат, поддерживаемый wireshark'ом (я склоняюсь в сторону формата tcpdump).

Сниффер использует библиотеку libpcap для сбора данных. Реализация примитивна:

ph = pcap_open_live('eth0', 65535, 1, 0, errbuf);
while (1) {
    data = pcap_next(ph, info);
    // process packet (info, data)
}

Но здесь есть проблема. data указывает на начало Ethernet пакета. Структура Ethernet пакета достаточно проста: маки источника и получателя, протокол, данные, никаких меток начала нового заголовка пакета. Поэтому если просто выгружать в файл данные из data, то непонятно как отделять окончание одного пакета и начало другого (в моем примере snaplen = 65535, но на самом деле используются меньшие значения, что приводит к обрезанию пакетов, т.е. использовать длины пакетов в заголовках - не вариант). Само собой, Wireshark некорректно обрабатывает dump файл, сформированный таким образом.

Можно заставить libpcap сформировать нормальный dump файл его же средствами.

pcap_loop(ph, 100, pcap_dump_open(ph, "wireshark.dump"));
Просмотрев полученный файл, обнаружил, что между Ethernet пакетами в файле находятся некие неизвестные мне байты. В то же время этот файл Wireshark отлично открывает и обрабатывает.

Собственно, вопрос. Что необходимо вставлять между Ethernet пакетами? Или как иначе можно вручную сгенерировать dump файл для Wireshark, используя libpcap?

ksv
()

mount не понимает ext3

Всем привет.

Создал LiveCD из образа Debian Lenny (инструкция). Вкратце сделал следующее.

  • Установил необходимые пакеты (squashfs-tools, squashfs-modules-`uname -r`)
  • Сделал копию системы с помощью rsync
  • Сделал chroot в нее, установил дополнительные модули (live-initramfs, unionfs-modules-`uname -r`, discover1, xresprobe), обновил initramfs
  • Создал файловую систему - mksquashfs (без сжатия)
  • Создал образ системы (mkisofs)

Подключил образ в виртуалке. Образ загрузился. Попробовал подключить жесткий диск виртуалки (предварительно создал раздел ext3 на /dev/sda с помощью fdisk и mkfs.ext3). На что mount мне выругался: Unknown filesystem type 'ext3'.

Собственно, прошу помощи. Ткните меня носом где я что забыл добавить при создании образа (от инструкции выше не отходил).

ksv
()

third-party библиотеки в репозитарии

Всем привет. Прошу помочь с вопросом из серии «а как лучше сделать».

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

Сейчас рассматриваем три варианта организации структуры проектов.

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

2. Слить в репозитарий всю библиотеку, подключать например с помощью svn:externals. Скорее всего, придется опять-таки тащить всю библиотеку при экспорте. Зато не придется устанавливать ее отдельно на каждую машину.

3. Раздраконить библиотеку, выдрать нужную часть и только ее положить в репозитарий.

1. хорош легкостью поддержки. aptitude dist-upgrade обновит все стандартные библиотеки, никаких лишних телодвижений. Но отдельная установка на все компьютеры разработчиков... не очень нравится.

3. плох (ИМХО) возможной сложностью перехода на новые версии. Да и если потребуется использовать дополнительные части библиотеки... придется заново раздирать библиотеку.

2. вообще практически со всех сторон плох :)

Собственно, кто что посоветует в данном случае?

ksv
()

Генерация сетевых пакетов

Всем привет.

Сейчас пишу приложение для анализа сетевых пакетов. Для чтения пакетов с интерфейса используется библиотека pcap. В дальнейшем пакеты анализируются. В частности, используется информация об используемом протоколе.

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

Возникла идея создать виртуальный интерфейс и генерировать пакеты на нем. Потом сравнивать результаты работы приложения с тем, что нагенерировали.

Собственно, два вопроса.

Как создать виртуальный сетевой интерфейс без привязки его к какому-либо железу?

Как генерировать пакеты для данного интерфейса? Нашел pktgen, но он слишком низкоуровневый, а мне бы генерировать пинги, http(s) запросы и т.д.

Буду благодарен за любую информацию.

ksv
()

Apache2 не выполняет cgi скрипты

Всем привет.

Имеется OS Debian Lenny. Стоит Apache (2.2.9). Потребовалось поставить Nagios из lenny-backports. После установки страничка Nagios (http://localhost/nagios3) доступна, но при переходе по любой ссылке на cgi-скрипт идет предложение его скачать. Посмотрел с помощью Firebug - Apache отдает content-type скрипта как Plain text.

Открыл mods-available/mime.conf, раскоментировал строчку

AddHandler cgi-script .cgi
Само собой, модуль mime подключен. Опция
Options +ExecCGI
имеется в sites-available/default. После перезапуска Apache ситуация не меняется. Пробовал выставить у apache LogLevel в debug - ничего полезного в логах не нашел.

У кого какие идеи?

ksv
()

Hudson build server

Всем привет.

На работе предлагают поставить build-сервер. Один из вариантов - Hudson (http://hudson-ci.org/). Кто-нибудь использовал? Какие впечатления?

Если я правильно понял, hudson больше приспособлен для java проектов. У нас же все проекты пишутся на C. Серьезных проблем, конечно, возникнуть не должно, но может быть будут подводные камни?

Может быть, какие-нибудь другие build-серверы можете порекомендовать?

ksv
()

Отключить сетевую карту при загрузке

Всем привет.

На работе имеется кривой сервер. Кривость заключается в двух встроенных сетевушках на чипсете r8168 (именно 8168, не 8169). На компе стоит Debian Lenny (буквально недавно обновился с Etch).

Сетевую карточку со стандартными модулями ядра завести не удалось. Постоянно пытались подгрузиться драйвера на r8169. Драйвер (модуль ядра, как я понимаю) для r8168 удалось найти в сети. Скомпилировал, поставил.

Просмотрел я dmesg, там промелькивают сообщения о r8169, хотя такого чипсета в компе нет, а r8169 занесен в /etc/modprobe.d/blacklist (хотя lsmod | grep r8169 тоже ничего не показывает).

Комп подключен к сети только через одну сетевушку (eth2 в нашем случае, хотя думаю, не существенно).

$cat /etc/network/interfaces
auto lo eth2
iface lo inet loopback
iface eth2 inet dhcp

Но после перезагрузки ifconfig выдает два интерфейса - eth1 и lo, а eth2 при этом выключен. Сеть, естественно, не работает. Если сделать ifconfig eth1 down && ifdown eth2 && ifup eth2, то сеть появляется, работает без проблем. До перезагрузки.

Пока что как временное решение прописал в /etc/crontab при перезагрузке выполнять простейший скрипт (sleep + 3 команды выше), дабы сеть после перезагрузки сама поднималась. Но это ведь костыль, хочется от него избавиться.

Собственно, прошу совета - как лучше всего все настроить. Мне кажется, надо как-то принудительно отключать сетевой интерфейс eth1, и заставить включаться eth2. Но как это сделать? Как отключить eth1, если он и так не включен в interfaces? Как заставить включаться eth2, хотя он и так в секции auto?

Прошу прощения, что так сумбурно. Сам я не системный администратор, но с этим сервером похоже придется заниматься именно мне. Буду благодарен любым советам (кроме новых вариантов скриптов в crontab - это, ИМХО, костыль).

ksv
()

sqlite3 - соединить три таблицы

Всем привет.

Имеется три таблицы (A, B, C). A связана с B (A.b = B.id), B связана с C (B.c = C.id). Возникла необходимость взять значения из таблицы A, отфильтровав по данным из таблицы C. Думал - все просто:

SELECT a.id
FROM a INNER JOIN (b INNER JOIN c ON b.c = c.id) ON a.b = b.id
WHERE c.value = foo
Не тут то было:
SQL error: no such column: c.value
Если начать связывать с конца - то не найдет a.id.

Я конечно могу сделать связывание вручную - прописать все условия в WHERE. Но мне казалось, что идеологически более правильно организовывать связывание с помощью INNER JOIN. Никто не в курсе, это осуществимо в sqlite?

PS

sergey@Desktop:~/dev/pyPostIndex$ sqlite3 --version
3.6.22

ksv
()

Форматирование /var на рабочей системе

Всем привет.

При чтении жесткого диска (в частности, /var и /tmp, находящихся на отдельных разделах) вылетают ошибки:

[  151.705347] ata3.00: exception Emask 0x0 SAct 0x2 SErr 0x0 action 0x0
[  151.705391] ata3.00: irq_stat 0x40000008
[  151.705430] ata3.00: cmd 60/e0:08:b7:82:45/00:00:03:00:00/40 tag 1 ncq 114688 in
[  151.705431]          res 41/40:00:07:83:45/06:00:03:00:00/40 Emask 0x409 (media error) <F>
[  151.705517] ata3.00: status: { DRDY ERR }
[  151.705551] ata3.00: error: { UNC }
[  151.707427] ata3.00: configured for UDMA/133
[  151.707433] ata3: EH complete 
Проверял командой
dd if=/dev/sdaX of=/dev/zero bs=1M
Для начала поэкспериментировал с /tmp - перезаписал его нулями
dd if=/dev/zero of=/dev/sda6 bs=1M
Потом создал файловую систему
mke2fs -cc -j -t ext3 /dev/sda6
mke2fs при проверке (-cc) не выдало ошибок. Смонтировал, проверил с помощью dd - ошибок нет. Сложилось у меня впечатление, что ошибки - исключительно логические. Вот теперь хочу такой же фокус сделать с /var. Если с /tmp все было понятно - там хранятся только временные файлы, удалять можно было смело, то с /var не все так понятно. Почитал описание FHS на wiki - вроде как на этом разделе не находится ничего сильно важного. Собственно, вопрос - какие подводные камни мне встретятся при форматировании /var? Надо ли будет потом производить какие-нибудь шаманства для восстановления работоспособности системы?

ksv
()

Удалились файлы с системы (Debian)

Всем привет.

На домашней машинке под управлением Debian Sid произошли какие-то проблемы с диском. После очередной проверки, похоже, куча файлов была удалена. В связи с этим система теперь не грузится. Имеется возможность получить доступ к системе только загрузившись в single user mode.

Попробовал исправить ситуацию - переустановить все что только можно.

apt-get update
apt-get --reinstall dist-upgrade
На это система поругалась - похоже, помимо прочего, был удален strict.pm. По всей видимости, apt требует как минимум наличия нормально установленного перла.

Собственно, вопросы. Что требуется apt'у для нормальной работы? Какие можете посоветовать действия для восстановления системы? Не хотелось бы устанавливать все с нуля.

Ну и имеет ли смысл перевести некоторые разделы на другой тип ФС? Сейчас все на ext3. В отдельные разделы выделены /home, /tmp, /usr, /var. Насколько я понял по логам, проблемы с диском возникли именно на /usr, /tmp и /var. Какие ФС порекомендуете для этих разделов?

ksv
()

Покритикуйте компьютер

Здравствуйте.

Подбираю себе новый компьютер. Никаких сверх задач на него не будет возлагаться. Обычное использование: видео, немного игр (это самые ресурсоемкие операции). Пока что насмотрел такую конфигурацию.

  • MB Asus M2N-CM/C/SI DVI
  • AMD Athlon X2 7850 2.8GHz 2x512Kb AM2+ Black Edition BOX
  • DDR II 2048Mb (2x1024) PC6400 800 Mhz Kingston (KVR800D2N6K2/2G) dual kit
  • Корпус ATX Asus 450W TA-881
  • 250Gb WD 7200 16 mb cache S-ATA2 (2502ABYS)

Собственно, интересует следующее.

  • Насколько хорошо будет работать материнская плата? Имеются ли подводные камни у Asus? Может быть, посмотреть в сторону Gigabyte? На phoronix не нашел ничего про Asus.
  • Есть ли смысл посмотреть вместо Athlon X2 на Phenom II X4? Существенная ли разница производительности для такой разницы в цене?
  • Хватит ли 450W для нормальной работы при расширении конфигурации за счет дискретного видео / дополнительных HDD?
  • Смущает наличие всего лишь двух дырок для памяти. Насколько это критично?

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

ksv
()

OpenBSD роутер - не пускает на сайт

Здравствуйте.

Поставил дома на старый комп опен 4.4, в него воткнул несколько сетевушек:
rl0 смотрит во внутреннюю домашнюю сеть (192.168.1.0/24)
rl1 смотрит в районную сеть - нужна для пары локальных ресурсов (IP выделяется динамически из сети 10.0.55.0/24)
rl2 смотрит на adsl модем - основной выход в интернет
pppoe0 - на него создается pppoe-соединение

Настроил PPPoE-соединение, NAT, маршруты - интернет во внутренней сети работает.

sergey@gate:~ & sudo pfctl -s nat
nat on pppoe0 inet from 192.168.1.0/24 to any -> (pppoe0) round-robin
nat on pppoe0 inet from 192.168.2.0/24 to any -> (pppoe0) round-robin
sergey@gate:~ & route show -inet
Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
default ip78-36-32-1.onego UGS 4 34075 - 48 pppoe0
(ненужное опустил)
В принципе, интернет во внутренней сети есть. Заходит практически на все сайты, где бываю, кроме одного: battle.net. На него с обычного компа (Windows XP, звиняйте) не заходит. Очень долго пытается открыть страницу (больше получаса), не выводит никаких ошибок. Этот самый сайт с роутера (lynx) открывается нормально. Что примечательно, traceroute и с роутера, и с Windows XP нормально выходит за пределы роутера.

Подумалось мне, что это - проблема с MTU. Выставил mtu на rl2 в 1400, на pppoe0 стал 1392. Перезапуск интерфейсов с помощью sh -x /etc/netstart rl2 pppoe0 не принес желаемого результата.

Попробовал tcpdump'ом воспользоваться (хоть сам его не знаю). При запуске на интерфейсе pppoe0 выводит среди всего прочего следующее:
при заходе с Windows XP:
14:45:09.678836 cerber.drevlanka.ru.microsoft-ds > nifnif.drevlanka.ru.2640: R 0:0(0) ack 3943690163 win 0 (DF)
14:45:11.041311 ip78-36-37-57.onego.ru.50489 > battlenet.fr.www: S 2306317242:2306317242(0) win 65535 <mss 1460,nop,nop,sackOK> (DF)
при заходе с роутера:
14:48:18.840780 ip78-36-37-57.onego.ru.39209 > battlenet.fr.www: S 965340513:965340513(0) win 16384 <mss 1452,nop,nop,sackOK,nop,wscale 0,nop,nop,timestamp 198058670 0> (DF)
14:48:19.160860 battlenet.fr.www > ip78-36-37-57.onego.ru.39209: S 1597634117:1597634117(0) ack 965340514 win 17424 <mss 1460,nop,wscale 0,nop,nop,timestamp 0 0,nop,nop,sackOK> (DF)

можно заметить, что win отличаются, в первом случае они какие-то странные (0 и 65535).

Собственно, вопрос. Куда копать? Буду рад любым ссылкам. Если в гугль - то желательно с набором ключевых слов.

ksv
()

RSS подписка на новые темы