четверг, 28 февраля 2013 г.

Отключение ядер процессора в Linux

Отключить ядро или несколько ядер процессора можно так:

$ echo 0 | sudo tee  /sys/devices/system/cpu/cpu1/online
$ dmesg
....
[ 2026.821631] CPU0 attaching NULL sched-domain.
[ 2026.821641] CPU1 attaching NULL sched-domain.
[ 2026.869148] CPU0 attaching NULL sched-domain. [ 2026.875937] CPU 1 is now offline
[ 2026.875945] SMP alternatives: switching to UP code

Чтобы включить ядро обратно, нужно:

$ echo 1 | sudo tee /sys/devices/system/cpu/cpu1/online
$ dmesg
....
[ 2097.441078] SMP alternatives: switching to SMP code
[ 2097.642192] Booting processor 1 APIC 0x1 ip 0x6000
[ 2027.140078] Initializing CPU#1
[ 2027.140078] CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (64 bytes/line)
[ 2027.140078] CPU: L2 Cache: 512K (64 bytes/line)
[ 2027.140078] CPU 1/0x1 -> Node 0
[ 2097.656021] CPU1: [ 2027.140078] kvm-clock: cpu 1, msr 0:1915701, secondary cpu clock [ 2097.656021] AMD QEMU Virtual CPU version 1.1.2 stepping 03 [ 2097.656021] CPU0 attaching NULL sched-domain. [ 2197.128013] CPU0 attaching sched-domain: [ 2197.128013] domain 0: span 0-1 level CPU [ 2197.128013] groups: group ffff88000180fd00 cpus 0 group ffff88000190fd00 cpus 1 [ 2197.128013] CPU1 attaching sched-domain: [ 2197.128013] domain 0: span 0-1 level CPU [ 2197.128013] groups: group ffff88000190fd00 cpus 1 group ffff88000180fd00 cpus 0

Эти изменения будут действовать, пока систему не перезагрузят. Чтобы уменьшить количество ядер перманентно нужно передать ядру параметр maxcpus=N, где N - количество ядер, которые нужно подключить в системе при загрузке.

понедельник, 25 февраля 2013 г.

Сохранение всех core файлов в одном месте

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

Создаю отдельный том (чтобы избежать переполнения файловой системы)

$ sudo lvcreate -n cores -L 2G VolGroup00
$ sudo mkfs -t ext3 /dev/VolGroup00/cores
$ sudo mkdir -p /var/local/cores
$ echo '/dev/VolGroup0/cores  /var/local/cores  ext3  defaults,nosuid,nodev   0   2' | sudo tee -a /etc/fstab
$ sudo mount /var/local/cores

Теперь нужно указать ядру сохранять core файлы в новую директорию

$ echo 'kernel.core_pattern=/var/local/cores/core.%e.%p.%t' | sudo tee /etc/sysctl.d/core.conf
$ sudo sysctl -p /etc/sysctl.d/core.conf

Полный список шаблонов есть в man 5 core:
%%  a single % character
%p  PID of dumped process
%u  (numeric) real UID of dumped process
%g  (numeric) real GID of dumped process
%s  number of signal causing dump
%t  time of dump, expressed as seconds since the Epoch,  1970-01-01 00:00:00 +0000 (UTC)
%h  hostname (same as nodename returned by uname(2))
%e  executable filename (without path prefix)
%c  core  file  size soft resource limit of crashing process (since Linux 2.6.24)
Теперь проверяем, будут ли сохраняться файлы в нужном месте. Открываем новый терминал и выполняем команды:

$ ulimit -c unlimited
$ kill -SIGSEGV $$

Терминал должен закрыться, а в /var/local/cores появиться новый файл

$ ls -l /var/local/cores/core.*
-rw------- 1 andrey andrey 1482752 Фев 25 13:47 /var/local/cores/core.zsh.7388.1361789269

суббота, 23 февраля 2013 г.

Восстановление Zalman ZM-VE200 SE после сбоя файловой системы

Дело было вечером, делать было нечего - решил попробовать эмуляцию других типов образов, кроме ISO. На диске у меня два раздела: один сравнительно небольшой, отформатированный в NTFS (для образов и обмена файлами с Windows) и второй раздел, занимающий остальное пространство, отформатированный в Ext3 (для себя любимого).

Вот на NTFS я и решил создать образ жесткого диска image.dsk. Чтобы не дожидаться, пока копируются нули, я создал разреженный файл (sparse file) благо NTFS их поддерживает. Забегая вперед скажу, что это и стало роковым шагом в тот вечер.

пятница, 22 февраля 2013 г.

Впечатляющие достижения HTML5 и WebGL


В дополнение к портированию Sauerbraten: Cube 2 на HTML5 и WebGL (демо) Mozilla и разработчики 3D движка Unigine выпустили еще одну демку. Смотрится замечательно, хотя немного и притормаживает на моей Nvidia GeForce GT440.

Я не нашел способа включить отображение FPS, поэтому трудно сказать насколько быстро работает эта демка.

При создании этой демки используется Emscripten, позволяющий компилировать C++ код в JavaScript.

четверг, 21 февраля 2013 г.

Предоставление доступа по известному ip адресу или через HTTP авторизацию

Если стоит задача разрешить доступ для некоторых клиентов (с известными ip адресами), а у остальных запрашивать HTTP авторизацию, то для Apache это можно сделать так:

Order Allow,Deny
Allow from x.x.x.x
Allow from y.y.y.y

AuthType basic
AuthName "Limited access. Login first!"
AuthUserFile /path/to/valid/.htpasswd
Require valid-user
Satisfy any

В этом случае если посетитель имеет ip адрес x.x.x.x или y.y.y.y, то ему будет предоставлен доступ без запроса пароля, в ином случае будет использована HTTP авторизация.

mod_fcgid: read data timeout in 40 seconds

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

[Thu Feb 21 13:43:48 2013] [warn] [client 192.168.1.117] mod_fcgid: read data timeout in 40 seconds
[Thu Feb 21 13:43:48 2013] [error] [client 192.168.1.117] Premature end of script headers: install.php

Поскольку на сервере стоит cPanel, то проблема решается так:
  • увеличить лимит ожидания ответа (я выставил 3600 секунд), для этого нужно добавить в
    /usr/local/apache/conf/includes/pre_virtualhost_global.conf
    <IfModule mod_fcgid.c>
        FcgidIOTimeout 3600
    </IfModule>

  • обновить конфигурацию apache
    /scripts/rebuildhttpdconf

  • перезапустить apache
    service httpd restart

воскресенье, 17 февраля 2013 г.

Wine 1.5.24 для Debian Squeeze/Wheezy

Вышла новая версия Wine 1.5.24. Пакеты для Debian Squeeze (i386 и amd64) и Debian Wheezy уже заливаются в мой репозитарий, в скором времени будут доступны для установки.

Чтобы установить новую версию Wine в Debian Wheezy (amd64) вы можете воспользоваться инструкцией.

пятница, 15 февраля 2013 г.

Перенос системы на диск 3TB

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

Прошлый апгрейд сервера прошел по схеме:
  • Подключаю к серверу новый диск;
  • Создаю таблицу разделов - два primary раздела (один для корня или /boot и второй для LVM2 PV);
  • Мигрирую LVM на новый диск: pvcreate, vgextend, pvmove, vgreduce, pvremove;
  • Переношу данные, которые были вне LVM (/ или /boot);
  • Устанавливаю загрузчик на новый диск (grub-install).
Но в этот раз технологии шагнули дальше и этот способ больше не годился...

пятница, 8 февраля 2013 г.

Опубликованы подробности уязвимости UPnP в устройствах различных производителей

В прошлом месяце было опубликовано предупреждение о скором раскрытии подробностей о критической уязвимости в беспроводных маршрутизаторах Cisco Linksys. Как и было обещано, на этой неделе опубликовали подробности этой уязвимости.

Суть уязвимости заключается в ошибке в реализации протокола UPnP в стеке Broadcom (используется в уязвимых устройствах Linksys) которая привела к возможности выполнения произвольного кода на уязвимом устройстве с правами привилегированного пользователя. Как оказалось позже, эта уязвимость касается многих устройств других производителей, использующих стек Broadcom. Примечательно, что часть этих устройств уязвима не только из локальной сети.

Согласно информации от Rapid7 из приблизительно 80 млн. устройств, найденных в сети, около 15 млн. - уязвимы.

Подобная уязвимость найдена и уже исправлена в libupnp - свободной реализации протокола UPnP.

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

понедельник, 4 февраля 2013 г.

Wine 1.5.23 для Debian Squeeze/Wheezy

Выложил пакеты для Wine 1.5.23 в свой репозитарий для Debian Squeeze/Wheezy. Анонс новой версии.

На этих выходных выдался свободный час и я решил немного улучшить пакеты Wine (wine-unstable), которые я собираю для себя. На linux.org.ru мне порекомендовали обратить внимание на несколько моментов, которые не учтены в моих пакетах:
  • нет поддержки amd64;
  • нет поддержки OpenCL.

Поддержку OpenCL я добавил только вчера и только для версии под Wheezy (пришлось разделить пакет на два, поскольку я не в курсе как добавить "мягкую" зависимость в Build-Depends).

Пакет для Debian Squeeze под архитектуру amd64 я собрал довольно давно, но для Debian Wheezy у меня пока не получается из-за перехода на multi-arch. Это требует адаптации пакета, которая в свою очередь потребует свободного времени. Но как говорил один товарищ в известном фильме Гайдая - "тот кто нам мешает, тот нам и поможет" (C) Кавказская пленница.

Я это к тому, что при помощи multi-arch появилась возможность установить пакеты для архитектуры i386 в amd64 и использовать их без проблем (большинство пакетов Wine под amd64 являются простыми врапперами, которые предлагают установить 32-битную версию). Для этого нужно проделать несколько несложных манипуляций.

Сначала добавим стороннюю архитектуру (у вас ведь нативная amd64?):

root@wheezy ~# dpkg --add-architecture i386

Проверяем, что архитектура присутствует в списке доступных:

root@wheezy ~# dpkg --print-foreign-architectures
i386

Теперь подключите мой репозитарий в APT и обновите список пакетов:

root@wheezy ~# wget -q -O- http://www.tataranovich.com/tataranovich.asc | apt-key add -
root@wheezy ~# apt-get update

Теперь можно установить wine:

root@wheezy ~# apt-get install wine-unstable:i386

Этот способ не позволит запускать 64-битные приложения Windows, но большинству пользователей это не должно быть критично, т.к. я еще не знаю ни одного массового приложения, которое было бы доступно только для архитектуры x86_64.