D-Bus

D-Bus -- это шина сообщений или один из способов взаимодействия процессов между собой в операционной системе GNU/Linux, используемая практически во всех современных дистрибутивах. Выполняемые процессы часто хотят взаимодействовать между собой; пайпы(pipes), общая память(shared memory), RPC, и т.п. -- все это обеспечивает обмен информацией между ними.

D-Bus представляет свой альтернативный способ такого взаимодействия. Сам демон dbus занимается маршрутизацией сообщений, рассылаемый приложениями друг другу. Концепция dbus примерно следующая: существуют


  • объекты, которым ставятся в соответствие их пути с целью адресации, например /org/freedesktop/Hal/devices/computer;

  • каждый объект имеет один или более интерфейсов, например org.freedesktop.DBus.Introspectable;

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



Каждое подключение к демону имеет свое имя, например org.kde.kopete.
Таким образом приложения, зная друг друга по такому имени, могут работать с объектами друг друга.

Интроспекция


Возникает вопрос, а как нам узнать конкретные пути объектов и имена методов, чтобы можно было сделать что-то действительно полезное? В этом помогает способность объектов смотреть внутрь себя, подобно одноименному методу психологических исследований. Каждый объект, даже если о нем заранее ничего не известно, имеет интерфейс org.freedesktop.DBus.Introspectable в котором есть один вызов Introspect.

Попросим у корневого объекта подключения org.freedesktop.DBus рассказать о себе:
dbus-send --type=method_call --print-reply --dest=org.freedesktop.DBus / org.freedesktop.DBus.Introspectable.Introspect

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

Несколько примеров



Узнать имена подключений:
dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply / org.freedesktop.DBus.ListNames

Следует отметить, что существуют системная (--system) и сессионая (--session) шины. Первая из них общая для всех процессов, вторая предназначена для пользовательских процессов и запускается в момент входа в систему (например запуска сессии KDE).

Получить массив, содержащий список контактов запущенного kopete:
dbus-send --dest=org.kde.kopete --type=method_call --print-reply /Kopete org.kde.Kopete.contacts


Сделает погромче музыку:
dbus-send --dest=org.mpris.amarok --type=method_call --print-reply /Player org.freedesktop.MediaPlayer.VolumeSet int32:95


Выключит компьютер (без всяких root'овских прав):
dbus-send --system --dest=org.freedesktop.Hal --type=method_call --print-reply /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown


В качестве заключения, d-bus к сожалению умеет хорошо работать лишь в рамках одного компьютера.
Ссылка на сайт: http://dbus.freedesktop.org

ATA 44







1-40как у 40-пинного
41+5V Logic
42+5V Motor
43Ground
44Type (0 for ATA)

clicfs

В новой версии openSUSE 11.2 представлена новая файловая система clicfs (Compressed Loop Image Container), которая используется в livecd и доступна для сборки образов через систему kiwi. clicfs использует драйвер fuse, т.е. работает в user-space. Используется clicfs как замена
известной всем связки squashfs(cramfs) + unionfs(aufs) + ram.

clicfs оборачивает образ файловой системы в специальный сжатый контейнер, который потом можно подмонтировать используя fuse. Несмотря на то, что сам сжатый образ является read-only, файловая система будет доступна для записи, а изменения могут записываться либо в память драйвера, либо в указанный cow-файл.

Отличительной особенностью clicfs является использование алгоритма компрессии lzma, а не gzip(lz77). Утверждается, что использование такой компрессии позволяет одновременно уменьшить размер сжатого образа (достичь лучшего сжатия) и ускорить его распаковку по сравнению с аналогом squashfs.

Ссылка на git с исходниками: http://git.opensuse.org/?p=people/coolo/clicfs.git

Анонимный доступ к CVS

С помощью xinetd можно легко запустить анонимный доступ только для чтения к вашим cvs репозиториям.

/etc/xinetd.d/cvs

service cvspserver
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = cvs
group = cvs
server = /usr/bin/cvs
server_args = -R -f --allow-root=/srv/cvs/cvsroot pserver
}


Тут все в полной аналогии с subversion. Но необходимо еще несколько усилий:

  • Создать файл readers в CVSROOT и записать туда anonymous

  • Создать файл passwd в CVSROOT и записать туда anonymous::cvs

  • По желанию в checkoutlist добавляется строчка passwd



Таким образом, создан анонимный anonymous без пароля, что позволяет в режиме только для чтения через pserver всем получить доступ к репозиториям. checoutlist содержит список файов, которые получает администратор, когда делает checkout CVSROOT, файл passwd в список по умолчанию не входит, но, так как ничего секретного он у нас все равно не содержит, для удобство можно его добавить.

Анонимный доступ к subversion

С помощью xinetd можно легко запустить анонимный доступ только для чтения к вашим svn репозиториям.

/etc/xinetd.d/svnserve

service svn
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = svn # пользователь и группа, которые
group = svn # позволят не испортить ничего лишнего
groups = yes
server = /usr/bin/svnserve
server_args = --read-only --root=/srv/svn/repos --inetd
}


Для этого должны быть созданы системные пользователь и группа svn, которые наверное уже существуют.

Теперь каждый может легко получить доступ:

svn co svn://localhost/project/trunk project

openSUSE Build Service 1.5

Вышел новый релиз:

http://news.opensuse.org/2009/03/19/opensuse-build-service-15-announced

Проблем пока не обнаружено, в пакете obs-signd бинарик /usr/bin/sign едет без SUID-бита.

Верные права:
-rwsr-x--- 1 root obsrun 48003 Июн 25 17:25 /usr/bin/sign

Отображения jabber-статуса в web.

Еще один молодой, но перспективный бот, отображающий статус пользователя, обнаружен по адресу http://web-apps.ru/jabber-presence/. Картинку можно вставить в подпись форума, в блог, на домашнюю страницу, да много куда еще, и посетители всегда узнают о том, online ли ваш jabber аккаунт.

Работает примерно так: Мой статус в джаббере.

За подробностями, прошу пройти по ссылке.