среда, 14 января 2009 г.

E-mail уведомление о проблемах в soft RAID

Можно (да и нужно) настроить программный RAID чтобы он посылал e-mail уведомление о любых траблах в подсистеме.
В любимом редакторе откроем файл конфигурации /etc/mdadm.conf (или /etc/mdadm/mdadm.conf) и добавим параметр MAILADDR, например так:

DEVICE /dev/sdb1 /dev/sda1 /dev/sdb3 /dev/sda3
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=e0d3938f:4d9de0e2:002c70b2:0ddc40cb
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=c60448b6:86510401:104a0ee2:50c3d548
MAILADDR admin@yourdomain.ru

Перегружаем сервис mdadm:

sudo /etc/init.d/mdadm restart

Теперь, если что-то случится в подсистеме RAID, мы получим письмо с описанием проблемы и текущим статусом системы.

четверг, 4 декабря 2008 г.

Python 3.0 (a.k.a. "Python 3000" or "Py3k")

Релиз Python 3.0 доступен для скачивания с оф. сайта.

Не совместим с веткой 2.x

Python 3.0 (a.k.a. "Python 3000" or "Py3k") is a new
version of the language that is incompatible with the 2.x line of
releases. The language is mostly the same, but many details,
especially how built-in objects like dictionaries and strings work,
have changed considerably, and a lot of deprecated features have
finally been removed. Also, the standard library has been reorganized
in a few prominent places.
Из новых возможностей Python 3.0 можно отметить:
  • Нарушение обратной совместимости со скриптами, разработанными для более ранних версий Python;
  • Удаление дублирующих конструкторов и модулей;
  • Вместо оператора форматирования строк "%" использована глобальная функция и метод format(), например "The story of {0}, {1}, and {c}".format(a, b, c=d) или print(format(10.0, "7.3g")).
  • Удалены методы dict.iterkeys(), dict.itervalues() и dict.iteritems(). Методы dict.keys(), dict.values() и dict.items() будут возвращать контейнер объектов (итератор);
  • Возможность аннотирования параметров функций и возвращаемых значений, например def compile(source: "something compilable").
  • Замена оператора print, который широко используется для вывода, на функцию print();
  • Использование Unicode в качестве основной кодировки представления строк (единый тип str, вместо раздельных str и unicode);
  • Для хранения бинарных данных представлен тип bytes;
  • Тип long переименован в int, деление int переменных возвращает float, для получения целого результата нужно использовать //;
  • Для обозначения неравенств, вместо "<>" нужно будет использовать "!=";
  • Признаны устаревшими модули: cPickle, imageop, audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing, xmllib, new;
  • Удалены функции os.tmpnam(), os.tempnam() и os.tmpfile(), вместо них нужно использовать модуль tempfile;
  • Все исключения теперь должны порождаться от класса BaseException;
  • Новый синтаксис для создания мета-классов (Metaclass), реализация абстрактных базовых классов (Abstract Base Class), возможность использования декораторов для классов;
  • Новая реализация библиотеки ввода/вывода, имеющая обратно совместимый API ;
Источник...

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

Посылка с (K)ubuntu 8.10

Canonical прислал пакет с дисками:
- Kubuntu 8.10
- Ubuntu 8.10 Desktop Edition
- Ubuntui 8.10 Server Edition
- Наклейки (4 шт).

пятница, 24 октября 2008 г.

EeePc 701. AverMedia MR 800 FM radio.

Купил для моего EeePC 701 usb FM радио - AverMedia MR 800.



Работает отлично.
Заодно выяснил, что микрофонный вход EeePc, при подключении к нему выхода с FM донгла, переходит в режим линейного стерео входа. Так что в колонках играет нормальное стерео радио :)

Настройка.
При подключении к usb-порту создается новое устройство:
/dev/usb/hiddev0 с правами чтения/запись только для рута. Можно задать устройству режим 666, чтобы любой пользователь имел к нему доступ:

sudo chmod 666 /dev/usb/hiddev0

Для управления донглом в Сети существует ровно одна программа -
amusbradio-0.01.tar.bz2, которую можно скачать с http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/a/av/av-usbradio/.
Скаченный архив распаковываем во временный каталог, переходим в него и делаем make.
Если нужные для сборки пакеты установлены (как минимум build-essential), то получим исполняемый файл amusbradio. Копируем его в любой bin каталог в пути.

Запускаем коммандой:

sudo amusbradio -L europe -S 88.30

Где:
-L europe - нужный диаппазон. По исходникам видно, что есть еще japan.
-S 88.30 - частота радиостанции. Этот параметр производит тонкую подстройку на станцию.
Частоту станции можно задавать и без -S (amusbradio -L europe 88.30).

Другие параметры:
-mM - убрать/включить звук;
-tT - моно/стерео;
-L - диаппазон (europe, japan);
-l - чувствительность сканирования;
-S - тонкая подстройка на станцию;
-s - сканирование диаппазона, т.е. поиск станций.

После ввода комманды программа выведет:
found 'AVerMedia Technologies AVerMedia USB Radio' at '/dev/usb/hiddev0'
и через некоторое время должен появиться звук :)

среда, 22 октября 2008 г.

Предзаказ Ubuntu 8.10

На shipit.kubuntu.org начался прием заказов на Kubuntu 8.10, на shipit.ubuntu.com соответственно на Ubuntu 8.10 дектоп и сервер. Я заказал.
Kubuntu 8.04 и Ubuntu Server 8.04 мне честно прислали, надеюсь и в этот раз задержек не будет.
Правда, скорее всего, на серверах Ubuntu Server 8.04 TLS менять не буду.

среда, 24 сентября 2008 г.

Python + ODBC

Вот даже и не ожидал, что в стандартной поставке Python в (K)ubuntu 8.04 нет модуля для работы с ODBC. Немного погуглив обнаружил, что библиотек поддержки ODBC, по большому счету, всего две: mxODBC (платная) и pyodbc.
Выбрал pyodbc. Исходники можно скачать с сайта http://sourceforge.net/project/showfiles.php?group_id=162557, последняя версия pyodbc-2.0.58. Документация находится на сайте проекта http://pyodbc.sourceforge.net/docs.html. Библиотека поддерживает python DB API.
Скачанный архив распаковываем во временный каталог, переходим в него и собираем командой:

python setup.py build

И в подкаталоге build/lib.linux-i686-2.5 находим файл библиотеки - pyodbc.so.
Этот файл кладем в каталог проекта и можем работать с ODBC.

Пример:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pyodbc
con=pyodbc.connect("DSN=ContactOnLine;UID=user;PWD=passwd")
rows=cur.execute("select * from DOCS")
for row in rows:
print row.PP_CODE, row.PAYER.decode('cp1251'), row.GROUND.decode('cp1251')
con.close()

воскресенье, 20 июля 2008 г.

Как вытащить данные с мертвого винта?

Вчера вернулся из отпуска и, естественно, сразу включил комп. После загрузки (K)ubuntu сказал, что есть обновления и много. Начал скачивать и... да, закачка затормозила. Подумал что с сетью что-то не так, но все оказалось гораздо хуже - накрылся винт. После перезагрузки перестал определяться биосом и стучит... Винт Samsung 120Gb честно отработал почти 5 лет.
Ну и как обычно бывает в таких случаях, на винте есть бесценная информация в виде семейного фотоальбома за последние пару лет, где-то на 5-7 гигов.
Как и где можно вытащить с мертвого винта нужные данные? Может кто уже имеет опыт и даст дельный совет?

суббота, 12 июля 2008 г.

(K)ubuntu. Конвертируем видео для PSP

Исходные данные:
  1. Гаджет PSP Slim, который помимо игр и музыки, умеет показывать фильмы в формате mp4;
  2. Дочь, которая желает эти фильмы смотреть на этом PSP;
  3. EeePC 701 4G, который будет заниматься конвертированием;
  4. Дача, где происходят все действия;
  5. Погода - отличная (особенно после недели дождей).
После непродолжительного гугленья через Яндекс, ничего толком не нашел. В основном пару прог под винды и какая-то графическая конвертилка под Линукс. А мне хотелось чего-то для командной строки.
Вобщем решил сам разобраться с данной задачей.
Для начала выяснил параметры формата mp4, который поддерживает PSP Slim, в стандартной комплектации, т.е. без установки внешних видео проигрывателей.
Получилась такая команда:

ffmpeg -i $1 -f psp -s 368x208 -aspect 16:9 -vcodec mpeg4 -b 500k -acodec aac -ab 96k -ac 2 M4V00001.MP4

Для перекодировки любого видео использую ffmpeg с соответствующими кодеками.
Описание параметров:
  • $1 - переменная, которая принимает имя входного файла с видео;
  • -f psp - контейнер для видео и звука;
  • -s 368x208 - размер картинки для экрана PSP;
  • -aspect - для широкого экрана PSP 16:9, но , если получаются вытянутые лица, можно поставить 3:4;
  • -vcodec mpeg4 - видео кодек (AVC/H.264);
  • -b 500k - битрейт результирующего видео потока. Качество почти отличное. Стандартный DVD-рип на 1.4 гига конвертируется в 500 мег. PSP поддерживает битрейт до 768K;
  • -acodec aac - аудио кодес с битрейтом -ab 96k и стерео звуком, т.е. 2 канала -ac 2;
  • M4V00001.MP4 - имя файла сконвертированного видео для PSP. Этот файл нужно положить в каталог /video на PSP. Если файлов несколько, то они должны отличаться последней цифрой.
Стандартный avi-ник на 1.4 гига на EeePC конвертировался чуть более часа.

P.S. Эта заметка написана на EeePC 701 4G (1G RAM) Kubuntu 8.04. с выходом в сеть GPRS + Bluetooth с мобильника.

вторник, 20 мая 2008 г.

EeePc 701 4G в качестве AP

Этот "малыш" может успешно работать в качестве точки доступа (AP).
У меня на нем установлена Kubuntu 8.04.
По умолчанию wifi-карта настроена только на режим managed и на команду смены режима дает ошибку. Поэтому карту нужно инициализировать заново. Порядок действий такой:

  • Убиваем текущую настройку:
    sudo wlanconfig ath0 destroy
  • Создаем устройство заново с новыми параметрами:
    sudo wlanconfig ath0 create wlandev wifi0 wlanmode ap
    sudo ifconfig ath0 192.168.0.1 netmask 255.255.255.0
    sudo iwconfig ath0 essid my-ap
Все, точка доступа с именем "my-ap" работает на устройстве ath0 с IP 192.168.0.1.
В данном примере защита канала не использована, т.е. к ней могут подключиться любой в радиусе действия.

пятница, 4 апреля 2008 г.

Дополнительная защита веб-сервера

По наводке от моего товарища Lice пришлось ковырять как закрыть от PHP-скриптов доступ в другие каталоги. дело в том, что если не установлен PHP как CGI модуль, то варианта два. Либо SafeMode + doc_root, что совсем не приятно и мне не нравится. Причины расписывать тут не буду, т.к. не хочется устраивать холивар. В общем, я пошел по другому пути. В каждый виртуальный хост Апача я добавил такую конструкцию:

php_admin_value open_basedir /var/www/user/

Таки образом я избавился от неприятной вещи по типу fileread(’/etc/passwd’);.

Дальше больше. Lice по FTP залил какой-то ПХП-шный shell и стали тестировать. Как я и ожидал, каталоги то он увидел, а вот скачать что-либо, кроме как из своего каталога - никак.

Вот теперь надо отрубить system и exec с кучей всего еще. В php.ini мы правим:

disable_functions = “apache_get_modules,apache_get_version,apache_getenv,apache_note, apache_setenv,disk_free_space,diskfreespace,dl,highlight_file,ini_alter,ini_restore,openlog, passthru,phpinfo,proc_nice,shell_exec,show_source,symlink,system,exec”

Отдельное огромное спасибо Lice за помощь.

взял отсюда...