Корона для Open Solaris !

  • 10.06.10, 10:07
Open Solaris обзавелся кедами !)
Релиз назван "Корона" !
Страница проекта тут
http://techbase.kde.org/Schedules

Организация работы Opera и других приложений через Socks

  • 06.06.10, 10:33


Если на локальной машине кроме socks имеется выход в интернет или доступ к
DNS-резолверу, проблем не возникает, но если выход машины производится только
через socks при запуске программ подобных браузеру opera всплывает неприятная
проблема с резолвингом имен. Проблема в том, что утилиты подобные tsocks не
позволяют перенаправлять DNS запросы через Socks и организовать работу
резолвера поверх этого протокола.

Выход найден в использовании privoxy (http://www.privoxy.org/), некеширующего
HTTP-прокси, умеющего организовывать проброс трафика через Socks и самое важное
- умеющего резолвить DNS-имена на socks-сервере.

Ставим privoxy:

sudo apt-get install privoxy

Предположим на локальной машине имеется доступ к socks-серверу 127.0.0.1:1080
В моем случае socks использовался для организации выхода в Интернет через
телефон на платформе Android, делается это так:
На телефоне включаем в настройках режим "USB Debugging" (Settings /
Applications / Development) и запускаем программу Tetherbot (http://graha.ms/androidproxy/Tetherbot.apk).
На локальный компьютер копируем программу adb из состава Android SDK и выполняем:

./adb forward tcp:1080 tcp:1080

теперь в Firefox можно прописать socks-сервер 127.0.0.1:1080 и поставить в
about:config network.proxy.socks_remote_dns=true, все будет прекрасно работать.
Но нам нужно заставить работать opera и другие программы, поэтому настраиваем privoxy.

В /etc/privoxy/config проверяем наличие директивы (по умолчанию выбран порт 8118)

listen-address 127.0.0.1:8080

и добавляем строку:

forward-socks4a / 127.0.0.1:1080 .

или

forward-socks5 / 127.0.0.1:1080 .

(внимание, режим forward-socks4 проброс DNS не поддерживает)

Запускаем privoxy:

sudo /etc/init.d/privoxy start


Далее в opera устанавливаем в настройках обычного HTTP-прокси хост 127.0.0.1 и
порт 8080. Все прекрасно работает, более того в качестве бонуса privoxy по
умолчанию вырезает рекламу.

Для консольных приложений удобно использовать пакет proxychains
(http://proxychains.sourceforge.net/) в состав которого входит утилита
proxyresolv для резолвинга имен через socks.

Управление устройствами с помощью udev

  • 04.06.10, 02:30
Эта статья перевод 19-ой главы OpenSUSE Reference Guide, которое можно скачать в PDF-формате или просто посмотреть в формате html через браузер здесь.

В Linux работу по подключению и удалению устройств
выполняет ядро системы. Изменения состояния устройств (подключение
нового или удаление существующего) должны быть при этом видимы в
пользовательском пространстве. При подключении новых устройств они
должны тут же корректно настраиваться и (при необходимости) опознаваться
пользовательскими приложениями. Если пользователь системы работает с
конкретным устройством, то его необходимо проинформировать о любом
изменении состояния данного устройства.
udev
обеспечивает все необходимые средства для
динамического создания и удаления файлов устройств и символических
ссылок в каталоге /dev. Правила
udev позволяют использовать
внешние программы для обработки событий ядра об устройствах
(kernel device events), что позволяет вам
изменять по вашему желанию порядок работы udev,
например, написанием собственных скриптов или запроса и импорта
дополнительных данных для использования в процессе работы ядра с
устройством.
 

1. Каталог /dev
Файлы устройств (device nodes)
в каталоге /dev обеспечивают доступ к
соответствующим устройствам. Благодаря udev в данном каталоге находятся файлы только тех
устройств, которые в настоящий момент подключены к системе. Каждое
устройство имеет свой соответствующий файл. Если устройство отключается
от системы — данный файл удаляется.

Содержимое каталога /dev хранится на виртуальной файловой системе и все
файлы, находящиеся в нем, создаются при каждом запуске системы.
Модифицированные или созданные вручную файлы не сохраняются после
перезагрузки. Файлы и каталоги, которые необходимо сохранить или
которые всегда должны присутствовать в каталоге /dev, независимо от
состояния соответствующего устройства, необходимо помещать в каталог /lib/udev/devices. При запуске
системы
содержимое данного каталога
копируется в /dev как есть (с теми же правами доступа).
2. Kernel
uevents и udev
Вся информация
необходимая для работы с устройствами экспортируется ядром как
виртуальная файловая система sysfs. В ней для каждого из устройств,
которые ядро обнаружило и инициализировало, создается отдельный
каталог, в котором содержатся файлы, описывающие те или иные параметры
устройства.

Каждый раз при подключении или отключении устройства ядро посылает
событие uevent, которое информирует udev о произошедших изменениях.
Демон udev считывает правила для своей работы из каталога
/etc/udev/rules.d/ единожды при своем запуске и затем хранит их в
памяти. Если правила меняются, добавляются или изменяются, существует
возможность заставить udev перечитать все правила командой udevadm
control --reload-rules
. В SUSE это может быть также сделано
командой /etc/init.d/boot.udev reload. Более подробная
информация о правилах udev и их синтаксисе содержится ниже в разделе 6.

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

3. Драйверы
устройств, модули ядра и устройства
Для
каждого обнаруженного устройства ядро создает специальную внутреннюю
структуру, в то время как драйвер посылает событие uevent демону udev.
Устройства идентифицируют сами себя с помощью идентификатора
специального вида. Обычно эти идентификаторы содержат уникальные коды
производителя устройства, самого устройства и другие параметры
специфичные для конкретной подсистемы. Такой идентификатор называется
MODALIAS. Ядро собирает информацию об устройстве, формирует
идентификатор MODALIAS для него и передает его вместе с событием
uevent. Для USB-мыши, например, он выглядит так:

MODALIAS = usb:v046DpC03Ed2000dc00dsc00dp00ic03isc01ip02
Каждый драйвер устройства содержит список
идентификаторов тех устройств, с которыми он может работать. Данный
список находится в файле модуля ядра. Специальная утилита depmod
считывает эти идентификаторы из модулей ядра и сохраняет их в файле
modules.alias в каталоге /lib/modules/$(uname -r). Это позволяет
упростить процесс загрузки необходимых модулей ядра для каждого
обнаруживаемого устройства, поскольку uevent также содержит MODALIAS.
Если вызывается команда modprobe $MODALIAS, она находит в файле
modules.alias идентификатор устройства и соответствующий ему модуль.
Если соответствие найдено — загружается необходимый модуль. Все это
автоматически обрабатывается udev.

4. Инициализация устройств при
начальной загрузке системы
Все события,
связанные с обнаружением устройств и происходящие при запуске системы
до запуска udev теряются, поскольку вся инфраструктура для обработки
этих событий должна находится на корневой файловой системе, которая
недоступна в данный момент. Для компенсации этих потерь, ядро создает
файл uevent, расположенный в каталоге, принадлежащим каждому из
найденных устройств в файловой системе sysfs, в котором дублирует то же
событие, которое потерялось во время загрузки. После своего запуска
udev выполняет проход по всем файлам uevent в файловой системе /sys,
что заново вызывает все события для создания и конфигурирования
устройств.
Например, USB-мышь не может быть инициализирована на начальных стадиях
загрузки, потому что ее драйвер не доступен в данный момент. Событие
uevent об обнаружении данного устройства потерялось и для него к тому
же не удалось найти модуль ядра. Вместо чтобы заново выполнять поиск
всех для подключенных устройств, udev просто просматривает все файлы
uevents из sysfs, после того как станет доступна корневая файловая
система, поэтому событие для USB-мыши просто будет обработано заново,
после чего будет считан нужный модуль ядра на смонтированной корневой
файловой системе и мышь сможет быть инициализирована.
С точки зрения пользовательского пространства нет никакой видимой
разницы между «холодным» обнаружением устройств (coldplug) и
обнаружением устройств при нормальной работе системы. В обоих случаях
будут использоваться те же правила и те же программы конфигурации
устройств.
5. Мониторинг демона udev
Для визуализации событий ядра, связанных с
устройствами, необходимо использовать программу udevadm
monitor
.

UEVENT[1185238505.276660] add
/devices/pci0000:00/0000:00:1d.2/usb3/3-1 (usb)
UDEV [1185238505.279198] add
/devices/pci0000:00/0000:00:1d.2/usb3/3-1 (usb)
UEVENT[1185238505.279527] add
/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0 (usb)
UDEV [1185238505.285573] add
/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0 (usb)
UEVENT[1185238505.298878] add
/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10 (input)
UDEV [1185238505.305026] add
/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10 (input)
UEVENT[1185238505.305442] add
/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/mouse2
(input)
UEVENT[1185238505.306440] add

/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/event4
(input)
UDEV [1185238505.325384] add

/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/event4
(input)
UDEV [1185238505.342257] add

/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/mouse2
(input)

Строки, начинающиеся с UEVENT, показывают события, которые направляются
ядром и могут быть считаны через сокет netlink.
Строки, начинающиеся с UDEV, показывают результат обработки udev этих событий. Время поступления и обработки событий
указывается в микросекундах. Время между UEVENT и UDEV — это то время,
которое udev затрачивает для обработки этого события или специально
задерживает обработку для синхронизации данного события с аналогичными
или обрабатываемыми в настоящий момент событиями. Например, обработка
событий для разделов жесткого диска всегда задерживается до обработки
события для диска в целом, потому что способы обработки событий для
разделов могут опираться на те данные, которые появятся после
инициализации физического диска.
Команда udevadm monitor --env покажет полное окружение для
обрабатываемого события:

ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10
SUBSYSTEM=input
SEQNUM=1181
NAME="Logitech
USB-PS/2 Optical Mouse"
PHYS="usb-0000:00:1d.2-1/input0"
UNIQ=""
EV=7
KEY=70000 0 0 0 0
REL=103
MODALIAS=input:b0003v046DpC03Ee0110-e0,1,2,k110,111,112,r0,1,8,amlsfw

udev также использует системный демон ведения журналов - syslog.
Приоритет ведения log-файлов указывается в конфигурационном файле udev -
/etc/udev/udev.conf , также есть возможность поменять его «на лету»
командой:
udevadm control
log_priority=level/number

6. Изменение
процесса обработки событий, связанных с устройствами, с помощью правил
udev
Правила udev могут ссылаться либо
на информацию, находящуюся в возбуждаемом ядром событии, либо на
информацию, которую ядро экспортирует через sysfs. Также есть
возможность запроса дополнительной информации из внешних программ.
Каждое событие проверяется на соответствие со всеми правилами, которые
находятся в каталоге /etc/udev/rules.d. Каждая строка в файле с
правилами udev содержит хотя бы одну пару ключ/значение. Существует два типа ключей: ключ-условие и ключ
присваивания. Если ключ-условие совпал при обработке события, то данное
правило выполняется и с помощью ключей присваивания устанавливаются
указанные переменные.
В правилах можно указывать имя файла
устройства, попросить создать символьную ссылку на файл устройства или
запустить указанную программу для обработки данного события. Если не
будет найдено соответствие правилу, то при создании файла устройства
будет использовано имя по умолчанию. Подробная информация о синтаксисе
правил и возможных ключах приведена в man-странице udev. Приведенные
ниже примеры позволяют получить базовое представление о синтаксисе
правил. Примеры взяты из правил udev по умолчанию, которые находятся в
файле /etc/udev/rules.d/50-udev-default.rules.

Пример правил udev:
# console
KERNEL=="console", MODE="0600",
OPTIONS="last_rule"

# serial devices
KERNEL=="ttyUSB*",
ATTRS{product}=="[Pp]alm*Handheld*", SYMLINK+="pilot"

# printer
SUBSYSTEM=="usb",
KERNEL=="lp*", NAME="usb/%k", SYMLINK+="usb%k", GROUP="lp"

# kernel firmware loader
SUBSYSTEM=="firmware",
ACTION=="add", RUN+="firmware.sh"

Первое правило (console) содержит три ключа: один ключ-условие (KERNEL)
и два ключа присваивания (MODE,OPTIONS). С помощью данного правила
udev ищет в списке устройств соответствие типу «console» и, если оно
находится, то вызывается его обработка. Ключ MODE устанавливает
указанные права доступа на файл устройства (чтение и запись для
владельца файла в данном случае). Ключ OPTIONS делает это правило
последним для обработки устройств данного типа, любые последующие
правила для данного устройства не будут оказывать никакого эффекта.

Следующее правило (serial devices) больше не существует в файле
50-udev-default.rules, но по-прежнему заслуживает рассмотрения в
качестве примера. Оно состоит из двух ключей-условий (KERNEL и ATTRS) и
одного ключа присваивания (SYMLINK). С помощью ключа KERNEL udev ищет
устройства, соответствующие типу ttyUSB. Звездочка (*) указывает на
необходимость применения данного правила ко всем устройствам данного
типа. Ключ ATTRS проверяет наличие в файловой системе файла с
атрибутами данного устройства, который содержит указанную строку. Ключ
SYMLINK приведет к созданию символической ссылки на это устройство -
/dev/pilot. Оператор «+ =», используемый в данном правиле, указывает
udev дополнительно выполнять это действие, даже если предыдущие или
последующие правила создают другие символические ссылки. Поскольку это
правило содержит два ключа-условия, оно применяется только если
выполняются они оба.

Правило для работы с USB-принтерами (printer) также содержит два
ключа-условия (SUBSYSTEM и KERNEL), которые аналогичным образом должны
оба совпасть с типом устройства для выполнения оставшейся части
правила. Три оставшихся ключа: задают имя создаваемого файла (ключ
NAME), группу-владельца (ключ GROUP) и создают символическую ссылку на
файл устройства (SYMLINK). Использование символа * указывает на
использование правила для различных принтеров (устройств lp).
Обозначение «%k» задает использование для имени устройства и
символической ссылки того имени, которое назначает ядро системы.
Например, символическая ссылка на первый USB-принтер будет /dev/usblp0.

Последнее приведенное правило делает возможной загрузку с помощью udev
дополнительного firmware с помощью внешнего скрипта. Ключ-условие
SUBSYSTEM ищет устройства, относящиеся к подсистеме firmware. Ключ
ACTION проверяет добавлялись ли в систему устройства подсистемы
firmware. Последний ключ RUN+= запускает сценарий для поиска
необходимого firmware и его загрузки.
Некоторые
общие соглашения для всех правил:

  • Каждое правило состоит из одной или нескольких
    пар ключ/значение, разделенных запятыми.

  • Ключевая операция определяется оператором.
    Правила udev позволяют использование нескольких различных операторов.

  • Каждое задаваемое значение должно быть заключено в
    кавычки.

  • Каждая строка файла правил представляет собой одно
    правило. Если правило более одной строки используйте символ \ для
    добавления нескольких строк так же, как делали бы это в скриптах
    оболочки.

  • Правила udev поддерживают использование символов
    *, ? и [] образом, аналогичным bash-скриптам.

  • Правила udev поддерживают использование
    специальных обозначений (см. ниже).

6.1 Операторы в правилах udev
При создании ключа можно выбрать один из нескольких
операторов в зависимости от типа, который вы хотите создать.
Ключи-условия обычно используются для нахождением совпадения, которое
или совпадает или явно не соответствует искомому значению.
Ключи-условия могут содержать следующие операторы:
= = (два знака «равно» подряд без пробела) -
проверка на равенство. Выражение справа знака равенства служит образцом
для поиска.

! = (восклицательный знак и знак «равно» без пробела) - проверка на
не-равенство. Выражение справа знака равенства служит образцом для
поиска.


Любой из следующих операторов может использоваться с ключами
присваивания:

= (знак «равно») - присваивание значения ключу. Если данный ключ ранее
содержал список значений, то этот список заменяется вновь
присваиваемым значением. Ключу можно присвоить только единственное
значение.

+ = (знаки «плюс» и равно без пробела) - присвоить ключу, содержащему
список записей еще одно значение.

: = (знаки «двоеточие» и равно без пробела) - присваивание ключу
окончательного значения. Запретить любые последующие изменения более
поздними правилами.
6.2 Использование специальных обозначений в
правилах udev
Правила udev поддерживают
использование специальных обозначений, которые следует использовать
тем же образом, как делается в любом другом сценарии. В правилах udev
могут использоваться следующие обозначения:

%r, $root - Директория для файлов устройств (по умолчанию /dev)
%p, $devpath - Значение DEVPATH (см. ниже)
%k, $kernel - параметр KERNEL или имя, присвоенное
устройству ядром системы (другими словами, то имя под которым это
устройство «знает» ядро - прим.перев.
)
%n,
$number - номер устройства
%N, $tempnode -
временное имя файла устройства, которое создается для того, чтобы
предоставить доступ к устройству до создания постоянного файла
%M, $major - «старший» (major) номер устройства
%m, $minor - «младший» (minor) номер устройства

Примечание перев.:
Символьные и
блочные устройства имеют фиксированные старший и младший номера,
связанные с ними. Орган, который отвечает за присвоение номеров
устройств это LANANA -
Linux
Assigned Name and Number Authority
.

%s{attribute}, $attr{attribute} - значение атрибута файловой системы
sysfs (задается параметром attribute) (подробнее см. man udev)
%E{variable}, $attr{variable} - значение переменной
среды (задается параметром variable)
%c,
$result — строка, возвращаемая внешней программой (PROGRAM - см. ниже).
Также может быть выбрана часть строки (пробелы воспринимаются, как
разделители строки), которая выделяется указанием номера части, как
аргумента %c{N}. Если после числа стоит знак «+», то подставляется
указанная часть строки плюс ее оставшаяся часть строки: %c{N+}
%% - символ %
$$ - символ $

6.3 Использование ключей-условий в udev
Ключи-условия описывают проверки, которые должны быть
выполнены для применения к ним правил udev. Возможно использование
следующих ключей:

ACTION - название события, связанного с устройством, например,
добавление устройства («add») или его удаление («remove»).

DEVPATH - путь к каталогу (относительно файловой системы /sys),
содержащему файлы event для данного устройства, например, для драйвера
ipw3945 данный ключ примет следующее значение
DEVPATH=/bus/pci/drivers/ipw3945

KERNEL - имя данное устройству ядром системы (внутреннее имя
устройства)
SUBSYSTEM - подсистема, в которой
произошло возбуждение события, связанного с устройством, например,
SUBSYSTEM="usb" для всех событий, связанных с USB-устройствами.
ATTR{filename} - атрибуты устройства в файловой
системе sysfs. Например, для нахождения строк, содержащих аргумент
vendor (производитель устройства), можно использовать следующую строку
ATTR{vendor}=="On[sS]tream".

KERNELS - заставляет udev использовать DEVPATH для определения имени
устройства.
SUBSYSTEMS - заставляет udev
использовать DEVPATH для определения подсистемы устройства.

DRIVERS - заставляет udev использовать DEVPATH для определения драйвера
устройства.

ATTRS{filename} - заставляет udev использовать DEVPATH для устройства с
указанным аргументом файловой системы sysfs.

ENV{key} - задает значение переменной окружения, например,
ENV{ID_BUS}="ieee1394" может использоваться для поиска всех событий,
связанных с шиной FireWire.
PROGRAM -
заставляет udev выполнить внешнюю программу. В случае успешного
завершения работы программа обязана возвращать код выхода равным нулю.
Вывод программы доступен через ключ RESULT.
RESULT
- ищет соответствие выводу последнего вызова PROGRAM. Применяется либо
в том же правиле, что и PROGRAM, либо в последующем.

6.4 Использование ключей присваивания udev
По
сравнению с ключами-условиями, приведенными выше, ключи присваивания,
как следует из названия, присваивают значения, имена или какие-либо еще
параметры файлам устройств, создаваемых udev.
NAME - имя создаваемого файла устройства. Все
последующие правила для данного устройства игнорируются.
SYMLINK - имя создаваемой символической
ссылки на указанное устройство. Для одного устройства может быть
создано несколько символических ссылок одним (в этом случае список
ссылок разделяется пробелами) или несколькими правилами udev.

OWNER, GROUP, MODE - задают соответствующие права доступа для
создаваемого файла устройства.

ATTR{key} - задает параметр, который будет записан, как аргумент
устройства в файловой системе sysfs. Если используется оператор «==»
(см.выше), то данный ключ также используется для поиска соответствия
аргумента устройству.

ENV{key} - говорит udev экспортировать внешнюю переменную среды. Если
используется оператор «==» (см.выше), то данный ключ также используется
для поиска соответствия указанной переменной среды.

RUN - просит udev добавить указанную программу в список программ,
которые будут выполнены для данного устройства. Для избегать
блокирования дальнейших событий для этого устройства, необходимо чтобы
данный список был как можно короче.
LABEL -
метка для последующего перехода с помощью оператора GOTO.

GOTO - заставляет udev пропустить набор правил и продолжить со строки,
указанной передаваемой GOTO меткой LABEL.

IMPORT{type} - загрузка переменных в окружение события, таких как,
например, вывод внешней программы. udev может импортировать переменные
нескольких различных типов. Если тип не указан, udev пытается
самостоятельно его определить, ориентируясь на права доступа указанного
файла:

  • Если это исполняемый файл - udev выполняет внешнюю
    программу и импортирует ее вывод.

  • Если это текстовый файл - udev импортирует его
    содержимое

  • Если это родительское устройство - udev
    импортирует его параметры

WAIT_FOR_SYSFS - просит udev подождать создания указанного файла в
файловой системе sysf. Например, WAIT_FOR_SYSFS = "ioerr_cnt"
информирует udev подождать создание файла ioerr_cnt.
OPTIONS - данный ключ может принимать несколько
возможных значений:

  • last_rule заставляет udev игнорировать все
    последующие правила, касающиеся данного устройства;

  • ignore_device заставляет udev игнорировать это
    событие полностью;

  • ignore_remove заставляет udev игнорировать все
    последующие события удаления устройства;

  • all_partitions заставляет udev создать файлы
    устройств для всех доступных разделов блочных устройств. 
7. Постоянные имена устройств
Динамически наполняемый каталог /dev и инфраструктура
udev позволяет обеспечить постоянные имена для всех дисковых устройств,
независимо от порядка их распознавания или присоединения. Каждое
блочное устройство, определенное ядром проверяется на предмет шины
подключения, типа дисков или файловых систем. Наряду с динамически
создаваемыми файлами устройств, udev также создает набор постоянных
символических ссылок, указывающих на устройство:
/dev/disk
|--
by-id
| |--
scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B -> ../../sda
| |--
scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part1 -> ../../sda1
| |--
scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part6 -> ../../sda6
| |--
scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part7 -> ../../sda7
| |-- usb-Generic_STORAGE_DEVICE_02773 ->
../../sdd
| `--
usb-Generic_STORAGE_DEVICE_02773-part1 -> ../../sdd1
|-- by-label
|
|-- Photos -> ../../sdd1
|
|-- SUSE10 -> ../../sda7
| `--
devel -> ../../sda6
|-- by-path
| |-- pci-0000:00:1f.2-scsi-0:0:0:0 ->
../../sda
| |--
pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sda1
| |-- pci-0000:00:1f.2-scsi-0:0:0:0-part6
-> ../../sda6
| |--
pci-0000:00:1f.2-scsi-0:0:0:0-part7 -> ../../sda7
| |-- pci-0000:00:1f.2-scsi-1:0:0:0 ->
../../sr0
| |-- usb-02773:0:0:2
-> ../../sdd
| |--
usb-02773:0:0:2-part1 -> ../../sdd1
`-- by-uuid
|--
159a47a4-e6e6-40be-a757-a629991479ae -> ../../sda7
|-- 3e999973-00c9-4917-9442-b7633bd95b9e ->
../../sda6
`-- 4210-8F8C ->
../../sdd1
8. Файлы, используемые udev
/sys/* - виртуальная файловая система, создаваемая
ядром Linux, экспортирующая информацию обо всех известных на данный
момент устройствах. Эта информация используется udev для создания
устройств в /dev

/dev / * - содержит динамически создаваемые файлы устройств и
статический контент, скопированный во время загрузки системы из
/lib/udev/devices/*
Следующие файлы и каталоги
содержат важнейшие элементы инфраструктуры udev:

/etc/udev/udev.conf - главный конфигурационный файл udev.
/etc/udev/rules.d/* - каталог с правилами udev.

/lib/udev/devices/* - статический контент, копируемый udev в /dev при
загрузке системы

/lib/udev/* - вспомогательные программы, вызываемые из правил udev.

9. Источники получения дополнительной информации
Для получения дополнительной информации об
инфраструктуре udev обратитесь к man-страницам:

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

Оригинальная
статья: Copyright ©
2006- 2009 Novell, Inc.

Перевод: Copyright © Чернышов Антон,
УЦ
R-Style



Текст распространяется на условиях GNU Free Documentation
License, Version 1.2 или более поздней версии

http://tux-the-penguin.blogspot.com/2010/02/udev.html      

Репозитории

  • 04.06.10, 02:24
Зеркала Yandex на на официальные репозитории OpenSuse:

Репозиторий официальных исправлений и обновлений безопасности: http://mirror.yandex.ru/opensuse/update/11.2/
служит для замены http://download.opensuse.org/update/11.2/

Основной репозиторий, только программное обеспечение с открытым кодом: http://mirror.yandex.ru/opensuse/distribution/11.2/repo/oss/
служит для замены http://download.opensuse.org/distribution/11.2/repo/oss/


Несвободное программное обеспечение, такое как Flashplayer,
Java, Opera, IPW-firmware, RealPlayer и т.д.: http://mirror.yandex.ru/opensuse/distribution/11.2/repo/non-oss/
служит для замены http://download.opensuse.org/distribution/11.2/repo/non-oss/


Зеркало Yandex на репозиторий Pacman: http://mirror.yandex.ru/opensuse/packman/11.2/

Обновление openSUSE 11.2 до 11.3 M7

  • 04.06.10, 02:17
Прогнав несколько раз обновление openSUSE с 11.2 до очередной "вехи"
(очередного Milestone) на виртуалке, я таки решился обновить систему на
своем ноутбуке. Напомню, на всякий случай, релиз openSUSE 11.3 выйдет 15 июля, но уже сейчас
те, кто хочет - могут обновиться до очередного тестового выпуска. То,
что выпуск тестовый означает, что его работа не гарантируется в каждый
из моментов времени. Другими словами поломаться может все что угодно в
любой момент времени ;).

Несколько тестовых прогонов на виртуалке позволили выявить несколько
подводных камней, на которые можно наткнуться при выполнении обновления
"живой" системы. О них я расскажу по ходу дела.



На моей openSUSE подключено много дополнительных репозиториев: это
конечно же разные репозитории, позволяющие воспроизводить
multimedia-файлы. К ним относятся Packman, libdvdcss и Videolan.
Поскольку этих репозиториев под openSUSE 11.3 нет - я их оставил
нетронутыми. Интересно было посмотреть - будут ли проблемы с
зависимостями при обновлении.

Зато я отключил следующие репозитории:
  • Mozilla - в котором всегда есть сборка последнего Firefox;
  • OpenOffice - назначение аналогично;
  • Virtualization - последние версии kvm и qemu.
Причина банальна - все последние версии перечисленных программ
включаются в основной репозиторий openSUSE 11.3. Естественно, что позже,
после релиза стоит подключить эти репозитории обратно.

Затем я просто перебил номер версии openSUSE с 11.2 на 11.3 в файлах
репозиториев OSS (opensource ПО), Non-OSS и Updates. Затем выполнил
команду zypper ref , чтобы обновить информацию о репозиториях.

Теперь об обещанном подводном камне. В процессе обновления, при
изменении файлов в /etc/sysconfig , zypper вызывает SuSEconfig, для
генерации разных системных файлов в /etc . В то же время в процессе
обновления в системе меняются некоторые утилиты, которые вызываются из
SuSEconfig'a, что иногда вызывает его временную неработоспособность. Эта
"неработоспособность" приводит к тому, что процесс обновлений
прерывается и не факт, что его затем можно будет продолжить корректно.
Возможно, что к релизу этот баг подправят. Но пока работает именно так,
как я описал. К счастью, SuSEconfig можно отключить. Делается это
редактированием файла /etc/sysconfig/suseconfig. Достаточно в этом файле
изменить значение переменной ENABLE_SUSECONFIG="yes" на
ENABLE_SUSECONFIG="no" . После этого SuSEconfig работать больше не
будет. На обновленной системе его затем будет необходимо включить
обратно.

Затем, рекомендуется изменить в файле /etc/zypp/zypp.conf (если не
сделали этого раньше) параметр commit.download.mode в значение
DownloadInAdvance. Это заставит zypper выполнить обновление после
предварительного выкачивания всех пакетов.

Последний шаг перед обновлением - это убедиться, что у вас на жестком
диске достаточно места, для всех выкачиваемых пакетов. У меня объем
скачивания составил 1,4Gb. Пакеты скачиваются в каталог /var/cache/zypp.

Ну а теперь просто выполняем обновление командой zypper dup . Перед
выполнением обновления он предложит вам разрешить конфликты между
пакетами. У меня это почему-то были пакеты, связанные с NetworkManager. Я
предпочел удалить все эти пакеты. Их потом можно поставить из
обновленной системы. Затем, zypper выкачивает необходимые пакеты и
начинает выполнять обновление. У меня весь процесс обновления (без учета
времени выкачивания пакетов) занял около 40 минут (Core 2 Duo 2,1 GHz).
Достаточно быстро! По окончании процесса можно убедиться в том, что мы
действительно обновили систему:

host13:/etc/X11 # cat /etc/SuSE-release
openSUSE 11.3 Milestone 7 (x86_64)
VERSION = 11.3


После завершения обновления включаем обратно SuSEconfig и запускаем его
из командной строки: SuSEconfig (обратите внимание, что буква 'u'
маленькая). После того, как он отработал, я решил перестраховаться и
запустил еще раз mkinitrd - это скрипт, выполняющий пересборку initrd
(образа, критичного для загрузки системы). Также желательно запустить
zypper ve для дополнительной проверки системы на целостность
зависимостей.

Если вывод этих команд не содержал информации об ошибках, вводим reboot и
перезагружаем систему. После удачной (я надеюсь!) загрузки мы попадаем в
обновленную систему. В последнем Milestone разработчики openSUSE
потихоньку начинают внедрять новое оформление. Новые обои по умолчанию
видно на этом скриншоте:


Примерно такая же картинка в графическом меню grub и в GDM.

Система вроде бы пока работает достаточно стабильно. Замеченые пока
ошибки:
1. Иногда при загрузке системы разрешение внезапно устанавливается в
640х480 . У меня подозрение, что это пока KMS подглючивает.
2. Немного косячит неправильно настроенный PolicyKit - система постоянно
спрашивает root'овый пароль для перезагрузки, монтирования флешек и
перехода в спящий режим. Насколько я разобрался - причины кроются в том,
что из системы убрана поддержка HAL, а новые политики пока не написаны.
3. При выходе из спящего режима включается на полную вентилятор
процессора.
Все эти ошибки терпимые и до релиза вполне можно жить.

После обновления haldaemon остается работать в системе и его необходимо
принудительно отключить:
host13:/etc/X11 # chkconfig haldaemon off

Х-сервер теперь собран с поддержкой udev вместо HAL:
host13:~ # ldd $(which X)
    linux-vdso.so.1 =>  (0x00007fff401ff000)
    libudev.so.0 => /lib64/libudev.so.0 (0x00000036e8600000)
    libcrypto.so.1.0.0 => /usr/lib64/libcrypto.so.1.0.0
(0x00000036d2800000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000036d4600000)
    libpciaccess.so.0 => /usr/lib64/libpciaccess.so.0
(0x00000036d3000000)
    libXfont.so.1 => /usr/lib64/libXfont.so.1 (0x00000036d5200000)
    libXau.so.6 => /usr/lib64/libXau.so.6 (0x00000036d6200000)
    libpixman-1.so.0 => /usr/lib64/libpixman-1.so.0
(0x00000036dee00000)
    libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00000036da200000)
    libm.so.6 => /lib64/libm.so.6 (0x00000036d3e00000)
    librt.so.1 => /lib64/librt.so.1 (0x00000036d4e00000)
    libc.so.6 => /lib64/libc.so.6 (0x00000036d3a00000)
    libz.so.1 => /lib64/libz.so.1 (0x00000036d4a00000)
    /lib64/ld-linux-x86-64.so.2 (0x00000036d2400000)
    libfreetype.so.6 => /usr/lib64/libfreetype.so.6
(0x00000036d7600000)
    libfontenc.so.1 => /usr/lib64/libfontenc.so.1
(0x00000036d3400000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00000036d4200000)

Теперь для его настроек используется каталог /etc/X11/xorg.conf.d:

host13:~ # ls /etc/X11
.qtrc.lock  Xmodmap.remote  fs        proxymngr  rstart       xdm 
xim.d  xorg.conf.d
Xmodmap     Xresources      lbxproxy  qtrc       x11perfcomp  xim 
xinit  xs

host13:~# ls /etc/X11/xorg.conf.d/
10-evdev.conf  20-synaptics.conf  50-device.conf   50-screen.conf  
90-keytable.conf
11-mouse.conf  20-wacom.conf      50-monitor.conf  50-vmmouse.conf

В данном каталоге лежат файлы, настраивающие отдельные аспекты настройки
Х-сервера. Вот, например, файл для evdev:

host13:~ # cat /etc/X11/xorg.conf.d/10-evdev.conf
#
# Catch-all evdev loader for udev-based systems
# We don't simply match on any device since that also adds
accelerometers
# and other devices that we don't really want to use. The list below
# matches everything but joysticks.

Section "InputClass"
        Identifier "evdev pointer catchall"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev touchpad catchall"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev tablet catchall"
        MatchIsTablet "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

Section "InputClass"
        Identifier "evdev touchscreen catchall"
        MatchIsTouchscreen "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
EndSection

В общем и целом все пока нравится, вроде все работает.
http://tux-the-penguin.blogspot.com/2010/05/opensuse-112-113-m7.html

Представлена новая открытая СУБД VoltDB

  • 04.06.10, 00:20
Анонсирована новая открытая СУБД нового поколения - VoltDB, ориентированная на обработку транзакций в реальном времени (OLTP) и продемонстрировавшая способность обрабатывать миллионы транзакций в секунду на недорогом кластере, собранном своими силами из обычных серверов. Проектирование и разработка VoltDB велась под руководством Майкла Стоунбрейкера (Mike Stonebraker), одного из основателей проектов Ingres и PostgreSQL. СУБД распространяется в двух вариантах: коммерческом, с обеспечением полноценной поддержки, и свободном "Community Edition". Исходные тексты доступны в рамках лицензии GPL.

Отмечено, что VoltDB опережает по производительности традиционные OLTP СУБД в односерверной конфигурации в 45 раз, но в отличие от высокопроизводительных БД проповедующих подход NoSQL, VoltDB поддерживает выполнение запросов на языке SQL и гарантирует транзакционную целостность данных (ACID, атомарность и изолированность транзакций). По заявлению разработчиков, пре-релиз VoltDB можно рассматривать как стабильный, он уже несколько месяцев используется в компании Getco, бизнес которой связан с электронными финансовыми торгами, и продемонстрировал непревзойденные показатели производительности и масштабируемости. Другим примером внедрения VoltDB являются online-игры студии Eonblast, по данным которой производительности при использовании VoltDB опережает классические решения на базе MySQL с кешированием в Memcached.

Невероятного на первый взгляд роста производительности в VoltDB удалось добиться благодаря использованию совершенно непохожей на традиционные схемы внутренней архитектуры. Типичные современные OLTP СУБД используют те же приемы, что и 30 лет назад и очень трудно масштабируются при увеличении числа CPU или узлов в кластере. Исследование показало, что в таких СУБД более 90% времени тратится на такие операции, как ведение журнала, обеспечение блокировок, фиксацию изменений и управление буферизацией.

Суть архитектуры VoltDB в комбинации хранения всех данных в памяти с концепцией распределенной организации и разбиения БД по разделам (партицирование). СУБД VoltDB оптимизирована для работы на современных серверах, снабженных большим количеством ОЗУ и многоядерными CPU. Для сохранения данных на диск используется концепция снапшотов, отражающих срез данных, актуальных на момент создания снапшота. Работа с данными осуществляется через хранимые процедуры на языке Java, копии которых прикрепляются к каждому из разделов (ODBC/JDBC и прямое выполнение SQL-операторов для всей базы не поддерживается). При выполнении запроса, затрагивающего несколько разделов, в каждом из нужных разделов вызывается хранимая процедура, а затем результаты агрегируются.

Основные элементы архитектуры VoltDB:

    * Все данные постоянно держатся в ОЗУ, что обеспечивает максимальную пропускную способность и исключает необходимость буферизации;
    * VoltDB распределяет данные и их SQL-обработчики по узлам, каждый из который привязан к своему процессорному ядру (на одном сервере запускается столько узлов VoltDB сколько ядер CPU);
    * Каждый однопоточный раздел работает в автономном режиме, что исключает необходимость в блокировках и фиксации операций;
    * Данные автоматически реплицируются внутри кластера, что позволяет добиться высокой доступности и исключает необходимость ведения журнала;
    * Производительность VoltDB увеличивается почти линейно при добавлении дополнительных серверов в кластер.

Результаты измерения производительности:

    * СУБД VoltDB обработала 53 тыс. транзакций в секунду на одном сервере, в то время как другие СУБД на том же оборудовании могли выполнить только 1155 транзакций. При увеличении числа серверов до 12, кластер позволил выполнить 560 тыс транзакций в сек.
    * Тестирование работы online-игры на 12-узловом кластере продемонстрировало производительность в 1.3 млн. транзакций в сек.
    * При сравнении VoltDB с NoSQL-базами, оперирующими данными в виде ключ/значение, производительность VoltDB была на уровне или выше рассматриваемых систем.

Планы на будущее:

    * Возможность изменения схемы БД на лету (сейчас для изменения структуры требуется остановка СУБД);
    * Набор инструментов для мониторинга кластера;
    * Интерфейс для доступа клиентов с использованием формата JSON;
    * Увеличение производительности транзакции для выполнения которых необходимо привлечение данных из нескольких разделов;
    * Расширение поддерживаемого синтаксиса SQL (сейчас поддерживаются только простейшие операции);
    * Возможность автоматической замены сбойного узла на лету;
    * Расширение возможностей по экспорту данных из БД;
    * Поддержка WAN-репликации между территориально разделенными узлами;
    * Возможность подключения новых узлов к кластеру на лету и вывод узлов без остановки кластера.

http://www.opennet.ru/opennews/art.shtml?num=26732

Управление пакетами в (open)SUSE с помощью zypper

  • 02.06.10, 16:28
Данная статья не претендует на попытку
написать документацию на zypper. Скорее это попытка познакомить
читателя со средством пакетного менеджмента, используемым в
дистрибутивах компании Novell. Данный пакетный менеджер является
незаслуженно игнорируемым многими. Естественно, что охватить все его
функции в рамках такой короткой статьи не представляется возможным, хотя
бы потому, что для этого есть исчерпывающая документация ;), с которой
трудно конкурировать. Ниже приведено вольное изложение об его основных и
часто используемых возможностях. Более полный вариант документации и
все возможные опции можно посмотреть в man zypper и здесь, здесь и здесь.

Для управления пакетами в разных
версиях SUSE как самое высокоуровневое средство используется Yast,
который на самом деле использует zypper (а если еще точнее, то его
библиотеку libzypp). Причем, обратите внимание на то, что вторая буква в
его названии это "Y", а то почему-то его название многие порываются
написать, как zipper. Zypper - средство для управления пакетами в
текстовом режиме. С SUSE версии 11 (включая энтерпрайзовые версии)
zypper существенно прибавил в скорости. По данному теперь он легко
уделывает yum (в отличие от yum zypper написан на С) и не уступает (по
субъективному ощущению) apt. Синтаксис его конфигурационных файлов
достаточно прост, например, чтобы управлять разными репозиториями не
нужно ломать голову в отношении их приоритетов (это камень в огород
apt). Также zypper достаточно «всеяден» в плане подключения разных
репозиториев - он понимает:

  • «родной» формат репозиториев yast;
  • репозитории yum (rpm repo-md);
  • iso-образы репозиториев (да-да, не нужно их распаковывать!) ;
  • локальный каталог с rpm-пакетами;
  • то, что писать уже практически не обязательно - разные сетевые
    источники репозиториев — http, ftp, nfs.


Oб остальных интересностях я расскажу по ходу дела.

С версии openSUSE 11.2 в zypper
наконец-то была добавлена опция, которая давно в него просилась, а
именно, опции предварительного выкачивания пакетов при обновлении. Ранее
zypper работал так. Например, нужно обновить с десяток пакетов. Zypper
выкачивал их все и устанавливал по одному. В принципе, ничего страшного.
Если канал в сеть хороший и надежный. А это в наших широтах не всегда
встречается. В основном конфигурационном файле /etc/zypp/zypp.conf
данное поведение описывается опцией commit.download.mode (опция
закоментирована по умолчанию), которая имеет следующие варианты:
  • DownloadOnly — опция,
    которая легко заменяется ключом --dry-run, т. е. выкачивание всех
    пакетов необходимых для обновления без их установки.
  • DownloadInAdvance — сначала выкачать все пакеты, требующие
    обновления, затем начать процесс их установки.
  • DownloadInHeaps — опция аналогичная представленной выше, но в
    данном случае закачка и установка пакетов выполняется «порциями», не
    нарушающими целостность системы. Примерно также ведет себя пакетный
    менеджер в Mandriva.
  • DownloadAsNeeded — традиционное поведение. Закачка и
    установка осуществляется по одному пакету.
Следующей интересной возможностью
zypper является сокращенный вариант его опций, т. е. для установки
пакета можно написать zypper install foopackage, а можно zypper in
foopackage. Далее я буду приводить именно сокращенный вариант опций, а
полный вариант писать в скобках.

Поиск пакетов

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

zypper se foopackage — выполнить
поиск (se - search) пакета foopackage.

Если вы хотите найти какую-то
программу, но не знаете в каком пакете ее искать, можно сделать так:

booka:/etc/zypp # zypper wp vi
Loading repository data...
Reading installed packages...
S | Name | Type | Version | Arch | Repository
--+--------------+---------+----------+------+------------------
| gvim | package | 7.2-16.7 | i586 |
openSUSE-11.2-Oss
i | vim |
package | 7.2-16.7 | i586 | openSUSE-11.2-Oss
| vim-enhanced | package | 7.2-16.7 | i586 |
openSUSE-11.2-Oss

Опция wp (what-provides)
позволяет искать пакет по любому возможному параметру: имя исполняемого
файла, путь до исполняемого файла, любой набор символов из описания
пакета. В данном случае я попросил найти пакет, содержащий редактор vi.

Еще примеры:

Попробуем поискать в каком пакете
у нас находится библиотека libpng:
host13:~ #
zypper wp libpng
Loading repository
data...
Reading installed
packages...
S | Name | Type
| Version | Arch | Repository
--+------------+---------+------------+--------+------------------
i | libpng12-0 | package
| 1.2.39-2.2 | x86_64 | openSUSE-11.2-Oss
v | libpng12-0 | package | 1.2.39-2.2 | i586 |
openSUSE-11.2-Oss

Интересно, а в каком пакете
находится файл /bin/bash?

Host13:~ # zypper wp /bin/bash
Loading repository data...
Reading installed packages...
S | Name | Type | Version | Arch | Repository
--+------+---------+------------+--------+----------------------------
i | bash | package |
4.0-18.4.1 | x86_64 | Updates for openSUSE 11.2-0
v | bash | package | 4.0-18.4.1 | i586 | Updates for
openSUSE 11.2-0
v | bash | package |
4.0-18.3 | x86_64 | openSUSE-11.2-Oss
v | bash | package | 4.0-18.3 | i586 |
openSUSE-11.2-Oss

Первый столбик показывает статус
пакета, где i означает - установлен.

Просмотреть информацию о пакете
можно командой zypper info <имя пакета>

Установка и удаление пакетов

Установка пакетов из подключенных
репозиториев выполняется командой:

zypper in foopackage

Данная команда (in - install)
установит пакет foopackage со всеми его зависимостями.

Для удаления пакетов используется
опция rm/remove:

zypper rm foopackage

Данная команда удалит пакет
foopackage из вашей системы.

Для проверки целостности системы
на предмет удовлетворения зависимостей существует команда verify:

zypper ve

Если чего-то не будет хватать -
zypper предложит доустановить нехватающие пакеты (или даже удалить
ненужные).

Также есть еще два ключа, которые
не являются обязательными, но могут здорово помочь, если вы вызываете
zypper из скриптов. Первый ключ «-y» заставляет пакетный менеджер
отвечать на все вопрос «да»/«yes». Второй ключ «-l» (маленькая L) -
имеет похожее значение, она заставляет zypper соглашаться с
лицензионными соглашениями отдельных пакетов (например, таких как Adobe
Flash).

Обновление

Выполнять обновление системы
zypper позволяет двумя способами — на основе патчей и на основе пакетов.
Первый способ рекомендуется для серверов. В данном случае производится
только наложение патчей, исправляющих ошибки безопасности на
установленное ПО, причем этот способ обновлений должен поддерживаться
теми, кто ведет репозиторий, из которого вы обновляетесь. Стандартные
репозитории openSUSE поддерживают данный способ. Второй способ выполняет
установку новых пакетов в систему. Понятно, что в данном случае все
определяется способом ведения репозитория майнтейнерами пакетов.
Стандартные репозитории openSUSE «замораживают» номера версий ПО, так
что в принципе эти два способа равноценны (но только для них). Это все
была теория. Теперь немного практики.
Обновить метаданные репозитория можно командой zypper ref и это
необходимо делать всякий раз перед выполнением обновления (либо включить
autorefresh для всех репозиториев - см.ниже).

Просмотреть список доступных
патчей (list-patches) можно командой:

zypper lp

Просмотреть информацию о
конкретном патче можно командой (про опцию -t ниже):

zypper info -t patch foopatch

Установить патчи можно командой
zypper patch .

Обновление системы на основе
пакетов выполняется командой:

zypper up [имя пакета]

Данная команда (up/update)
выполняет обновление либо указанного пакета, либо всей системы.

Вторая команда предназначается
для обновления системы между релизами (dist-upgrade):

zypper dup

Последняя команда имеет несколько
интересных эффектов. Как известно все пакеты rpm имеют поле Vendor, в
котором указан сборщик пакета. Пакеты из стандартных репозиториев имеют в
данном поле openSUSE (или просто SUSE для энтерпрайзовых версий).
Пакеты собранные на openSUSE Build Service имеют в данном поле слово obs
с указанием вида репозитория. Так вот команда zypper up выполняет
обновление таким образом, чтобы поле Vendor не менялось при обновлении.
zypper dup, наоборот, может предпочесть изменить вендора пакета при
обновлении.

Следующая интересная возможность
касается тех, кто как я любит поэкспериментировать с системой. Допустим,
вы хотите поставить последнюю версию KDE, подключаете репозиторий (об
этом ниже) KDE4:Factory (данный репозиторий для разработчиков и
тестеров), выполняете zypper dup (при этом Vendor меняется с openSUSE на
что-то вроде obs://build.opensuse.org/KDE/KDE4:Factory) и получаете ее.
Но потом, вы обнаруживаете, что в ней еще куча ошибок и вы хотели бы
вернуться обратно. Что же делать? Неужели ничего нельзя поправить?!!! А
ничего страшного! Убираете данный репозиторий (удаляете файл с его
описанием или просто выключаете его) и опять выполняете zypper dup. При
этом zypper вам предложит выполнить downgrade всех обновленных ранее
пакетов. Т. е. zypper dup выполняет обновление системы таким образом,
чтобы она всегда соответствовала подключенным репозиториям.
Справедливости ради, стоит отметить, что downgrade не всегда проходит
гладко. Иногда, при неблагоприятном положении звезд и планет, в системе
остаются библиотеки от новых репозиториев, которые могут помешать работе
программ. Так что возможно, придется затем позаниматься таким
«увлекательным» занятием, как troubleshooting.

Управление репозиториями

Как отмечалось выше zypper
всеяден в плане возможных репозиториев. Посмотреть что же у вас
подключено в данный момент можно следующей командой:

host13:~ #
zypper lr

В первой колонке приведен порядковый номер репозитория, во второй и
третьей его название и описание. Четвертая и пятая колонки показывают
включен ли данный репозиторий и включено ли его автообновление
(autorefresh). Если последняя возможность включена, то при каждом своем
запуске zypper будет проверять нужно ли обновление метаданных
репозитория и, если нужно, выполнять его. В противном случае, вам нужно
будет делать это собственноручно командой zypper ref (refresh).

Добавить репозиторий можно
командой: zypper ar URI alias ,
где - URI идентификатор репозитория.  alias
- это любое понятное вам имя репозитория, позволяющее идентифицировать
его и отличить от других. ar — сокращенный вариант addrepo. Пример
команды:

host13:~ # zypper ar
nfs://192.168.0.254/srv/ftp/sles11 sles11
Adding repository 'sles11' [done]
Repository 'sles11' successfully added
Enabled: Yes
Autorefresh:
No
URI:
nfs://192.168.0.254/srv/ftp/sles11

Удалить репозиторий можно
командой zypper rr . Например:

host13: ~# zypper rr 13
Removing repository 'sles11' [done]
Repository 'sles11' has been removed.

Здесь я удалил репозиторий,
указав его ID (то есть номер). Его можно увидеть в выводе команды zypper
lr . Аналогичного эффекта я бы добился, указав zypper rr sles11 .
То есть в данном случае указывать нужно или ID репозитория, или его
псевдоним.

Модификация параметров
репозитория выполняется командой: zypper mr [options] . Список опций
можно получить следующим образом:

host13:~ # zypper mr
Alias or an aggregate option is required.
modifyrepo (mr) ...
modifyrepo (mr)
<--all|--remote|--local|--medium-type>

Modify properties of repositories specified by
alias, number, or URI, or by the
'--all, --remote, --local, --medium-type' aggregate
options.

Command options:
-d, --disable Disable the repository (but
don't remove it).
-e, --enable
Enable a disabled repository.
-r,
--refresh Enable auto-refresh of the repository.
-R, --no-refresh Disable auto-refresh of the
repository.
-n, --name
Set a descriptive name for the repository.
-p, --priority Set priority of the repository.
-k, --keep-packages
Enable RPM files caching.
-K,
--no-keep-packages Disable RPM files caching.

-a, --all Apply changes to all
repositories.
-l, --local
Apply changes to all local repositories.
-t, --remote Apply changes to all remote
repositories.
-m, --medium-type
Apply changes to repositories of specified type.

Например, следующая команда
включит параметр autorefresh для все репозиториев:

host13:~ # zypper mr -ra

Опция -r просит включить
автообновление для репозиториев (а -R выключит его), а опция -a говорит
применить это ко всем репозиториям.

Репозитории могут иметь
приоритеты, которые могут дополнительно указывать zypper ваши
предпочтения (меньшее значение - больший приоритет). Работа с
приоритетами аналогична тому, что происходит в yum. Только здесь не
нужно ставить никаких дополнительных плагинов. Чтобы задать приоритет
репозиторию можно воспользоваться командой zypper mr, но на мой взгляд,
гораздо проще открыть файл .repo репозитория и дописать в нем, например,
такую строчку - priority=100. Стандартные репозитории openSUSE имеют
приоритет 90, а репозиторий Updates приоритет 20. Имейте это в виду,
когда будете задавать собственные приоритеты. После изменения
приоритетов репозиториев обязательно необходимо запустить, сначала
 zypper ref (если не включен autorefresh для репозиториев), а затем
zypper dup, для того, чтобы zypper установил пакеты в соответствии с
высказанными вами предпочтениями.

Но, по-моему, гораздо удобнее для
управления репозиториями использовать соответствующий модуль yast:
host13:~ # yast repositories

Любители графического интерфейса
Yast могут воспользоваться либо его графическим меню, либо набрав в
консоли:

host13:~ # yast2 repositories

Ну и самый простой способ
подключения репозиториев - это скачать файл с его описанием отсюда. В каждом
из репозиториев есть текстовый .repo файл, например, для репозитория со
свежими версиями Apache он лежит здесь.
Затем нужно поместить его в каталог /etc/zypp/repos.d/. Ну и
подредактировать на предмет приоритетов, если это нужно.

Типы пакетов

Ну и самая интересная возможность
zypper в том, что он позволяет использовать разные типы «пакетов» при
установке. В данном случае под «пакетами» понимаются:
  • собственно, пакеты (и если ничего не указывать специально, то
    имеются в виду именно они);
  • патчи (patch) (репозитории могут содержать просто патчи, а не
    пакеты с обновлениями);
  • шаблоны (pattern) - группы пакетов, устанавливающие ту или иную
    функциональность;
  • продукты (product) - совсем редко встречающийся зверь - это группы
    пакетов для работы того или иного продукта;
  • пакет с исходниками (srcpackage) - это обычный src.rpm.

Тип пакета указывается опцией -t . Например, получить список доступных
шаблонов можно командой zypper patterns. И поставить тот, что нужен,
командой:

host13:~ # zypper in -t pattern x11

Здесь pattern это тип
устанавливаемого пакета, то есть мы указываем, что имеем в виду именно
шаблон. x11 - имя устанавливаемого шаблона. Самое плохое при
использовании шаблонов это то, что удалять пакеты шаблонами zypper пока
не умеет.

Это, пожалуй, все, что я хотел
рассказать про zypper на данном этапе. Я не ставил целью написать полный
обзор данного пакетного менеджера, но надеюсь, что после этого хотя бы
кто-то прочтет его полную документацию ;

http://tux-the-penguin.blogspot.com/2010/05/opensuse-zypper.html

Ubuntu 10.10 Netbook Edition глобальное меню

  • 16.05.10, 20:33

Марк Шаттлуорт (Mark Shuttleworth), глава компании Canonical, являющейся коммерческим спонсором проекта Ubuntu, сообщил в своем блоге об одном важном нововведении, которое появится в разрабатываемой версии операционной системы с индексом 10.10.

Речь идет о так называемом глобальном меню, расположенном в верхней части рабочего стола и заменяющем привычные строки меню в окнах приложений. Заимствованное из Mac OS X интерфейсное решение, по мнению разработчиков Ubuntu, позволит более рационально использовать рабочее пространство, особенно на нетбуках и портативных компьютеров с небольшими дисплеями. Именно по этой причине программисты планируют реализовать глобальное меню только в Ubuntu 10.10 Netbook Edition. Вопрос о внедрении нового элемента управления окнами приложений в стандартную редакцию операционной системы будет рассматриваться позже, после массового тестирования новинки.

Подчеркивая важность нововведения в интерфейсе Ubuntu 10.10, глава Canonical отметил, что владельцы нетбуков часто переключают окна программ в полноэкранный режим и прибегают к использованию полосы прокрутки в браузерах, текстовых редакторах и прочих приложениях. По словам Марка Шаттлуорта, перенос линейки меню в программах на новое место приведет к увеличению полезной вертикальной емкости экранов расширением 1024x600 пикселей на 4% и позволит пользователям реже обращаться к полосе прокрутки документов.

Сообщается, что разработка глобального меню для Ubuntu 10.10 будет вестись совместно с координаторами проекта Global Menu Bar for GNOME. Согласно планам разработчиков, операционная система Ubuntu 10.10 (кодовое имя - Maverick Meerkat) должна быть официально представлена 28 октября 2010 года.

Настройка сообщений Skype

  • 15.05.10, 05:02

Для начала устанавливаем в Synaptic пакет libnotify-bin и проверяем, установлен ли пакет notify-osd.

Заходим в настройки Skype, выбираем "Уведомления" и нажимаем кнопку "Больше настроек" (см. рисунок ниже). Снимаем галочку с "Отображать всплывающее уведомление". Отмечаем галочкой "Запускать следующий скрипт" и вводим нужную команду (см. ниже)

Настройка всплывающих сообщений Skype

Все события Skype, которые требуется привести к виду стандартных уведомлений, нужно отредактировать по приведенной схеме. Ниже в таблице приведены скрипты для самых востребованных событий Skype (список с легкой редактурой взят здесь):

Событие Skype Скрипт для стандартного уведомления Ubuntu
Входящий звонокnotify-send "%sname" "Вам звонит" -i skype
Номер занятnotify-send "%sname занят" -i skype
Звонок не удалсяnotify-send "%sname звонок не удался" -i skype
Удержание вызоваnotify-send "%sname" "Удержание звонка" -i skype
Вызов продленnotify-send "%sname" "Вызов продлен" -i skype
Вызов завершенnotify-send "%sname" "Вызов завершен" -i skype
Контакт показался в сетиnotify-send "%sname" "Снова в сети" -i skype
Контакт покинул сетьnotify-send "%sname" "Покинул сеть" -i skype
Первое сообщение полученоnotify-send "%sname" "%smessage" -i skype
Сообщение получено
Запрос на передачу файлаnotify-send "%sname передаёт файл %fname (%fsize)" -i skype
Передача файла завершенаnotify-send "%sname" "Завершил передчу файла %fname" -i skype
Передача файла не удаласьnotify-send "Ошибка передачи файла" "%fname (%fsize)" -i skype

Можно использовать параметр %sskype вместо %sname, чтобы выводить скайповое имя пользователя (его логин в Skype), но мне больше нравится использовать имя. О других параметрах читайте на хабре.

Еще вариант вывода сообщений от Skype был реализован неким Димой на сайте thexnews.com. На сайте все прекрасно описано, поэтому не буду повторяться и копипастить. Я стал использовать оба эти способа, заменив строку для "Сообщение получено" и "Первое сообщение получено" на вызов скрипта от Димы:

skypenotify "%sname" "%smessage"

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

notify

Вот такие возможности есть у notify-osd. Из несдотатков всего вышесказанного я заметил только jодно: Thunderbird выводит сообщения о новых письмах даже, если это спам. Но и плагин - beta, надеюсь в релизе будет больше настроек.

PS: Очень популярна сейчас стала смс реклама. Но мало кто знает, что использовать sms-рассылки можно и более эффективно. Например, моя знакомая тиспользует рассылки для уведомления клиентов о новых товарах. А при цене от 25 копеек за сообщение это можно себе позволить...

http://retimer.ru/2010/02/notify-osd-ubuntu-thunderbir/

Дохлая флешка , как воскресить деньги !)

  • 15.05.10, 03:16
Чтобы удалить таблицу разделов с флэшки, например после неудачного
эксперимента достаточно ввести

Лично у меня флешка отказывалась отвечать на mount , чесно уже думал ...

sudo dmesg | grep removable устройство SCSI доверяй , но проверяй !)

# dd if=/dev/zero of=/dev/name_of_device_sdb bs=512
count=1

# mkfs.msdos /dev/name_of_device_sdb

иногда просит mkfs.msdos -I /dev/name_of_device_sdb

mkfs - как вы понимаете может быть как любая ext , так и на вкус и цвет , дальше в курсе )


В завершение подобное с винтами тоже  творить можно !
Не спешите выбрасывать !!!