Точка Росы №7

Материал из Rosalab Wiki
Перейти к: навигация, поиск


Обложка Точка РОСЫ №7.png

Выпускаем очередной дайджест, «точку сборки» технологических новостей компании, представляем его и в обычном формате вебжурнала «подборка статей с обложкой», так и в oldschool PDF-файле.

Для тех, кто подписан на «Точку РОСЫ», это просто повод кратко напомнить об этих новостях… ведь информационный поток льющийся на наших читателей так могуч, что вполне можно было бы и пропустить кое-что ценное.

Итак, в седьмой выпуск «Точки РОСЫ» войдут:

Интерфейсы и юзабилити

Содержание

Центр управления LXDE или маленький эксперимент на острие тенденций

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

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

Одним из таких был аргентинский дистрибутив Toquito, в котором сделали простой Центр управления на основе Python и WebKit. Но он был написан «для себя» и имел привязку к вещам, которые есть только в deb-дистрибутивах.

В 2011 году этот центр был адаптирован для, тогда еще, Mandriva и в репозиториях последней появилась первая реализация, которая впоследствии была переделана под ROSA.

Центр был источником запуска как утилит drakx, так и утилит настройки LXDE и дополнительного окружения (к примеру, openbox или NetworkManager). В дальнейшем форки центра появились в Mageia и в MagOS.

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

LXDE Control Center 01.png

Что было сделано:

  • Во-первых, код был подвергнут рефакторингу и из него были выкинуты лишние и неиспользуемые части с целью упрощения работы с программой - оставлен только один вид, убраны настройки, путающие пользователя, почищен python-код.
  • Веб-часть была переписана с использованием видоизменного bootstrap в стиле MetroUI с использованием наработок проекта http://metroui.org.ua/. Это дает нам более легкий дизайн, которому сейчас также следуют как Apple в новой iOS, так и Google, а также возможность построения единообразных веб-основанных приложений в будущем. Использование такого режима позволяет также быстро менять темы оформления.
  • Главная страница была видоизменена в с использованием «плиток», на которые в будущем планируется выводить полезную системную информацию, а также дать пользователю возможность настраивать внешний вид Центра. Пока что пользователь может только переключать темы между светлой и темной.
  • Список утилит был приведен в соответствие с текущими положением дел в ROSA.

Что дальше? А дальше будет интереснее! Мы планируем переработку Центра и замену python на html+js части и, возможно, запуск в режиме как веб-кит окна, так и веб-сервиса, что позволит использовать его по сети.

LXDE Control Center 02.png

Утилиты drakx и системные утилиты будут по возможности заменяться на аналоги на основе веб-технологий. Первой утилитой, над которой мы работаем сейчас, является замена system-config-printer на веб-аналог из CUPS, вызвываемый через localhost:631. Это даст большую гибкость в настройках системы. Также есть идея сделать в Центре определение DE и вывод тех инструментов, которые пристуствуют или необходимы для данной DE, а также сделать QT-версию основы Центра. Возможно, это позволит возродить старый добрый drakconf в новом виде, перейдя от парадигмы «утилиты в Центре управления окружения рабочего стола» к «Единый Центр, подстраивающийся под окружение рабочего стола». Но это всего лишь вероятноe будущее, пока что Центр будет развиваться именно как часть LXDE.


GRUB2

GRUB2: улучшение опции start angle и исправление ошибок

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

Ошибка отображения меню загрузки

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

Некорректный расчёт высот элементов

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

Некорректное отображение текста в меню загрузки

Не было ограничения области отображения текста пункта меню загрузки. Поэтому текст «наползал» на графическое оформление.

23 07 13-grub-text-bug.png

(выделено небесно-голубым цветом на скриншоте)

Улучшенная опция — start_angle

Стартовый угол. Опция кругового индикатора отсчёта обратного времени. Ранее эту опцию можно было задать только в специальных безразмерных величинах, равных 1/256 полного круга.

Теперь можно задать эту величину в понятных величинах — градусах.

Новый синтаксис:

start_angle = "-90 deg"

или:

start_angle = "-90°"

Первое полноценное руководство по созданию графических тем в GRUB2

Наш разработчик написал первое полноценное руководство по созданию графических тем в GRUB2.

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

В статье указаны формулы и схемы, с помощью которых можно рассчитать и построить схему с точностью до пикселя.

Руководство подходит как для начинающих, так и для тех, кто уже имел дело с темами GRUB2.

Вы можете посмотреть статью на нашей вики, эту ссылку можно найти на сайте документации GRUB2.


Починили GRUB2 - утечки памяти, косяки в прогресс-барах и индикаторах

Наши разработчики стараются улучшить и дополнить любую программу, с которой имеют дело.

Поэтому они создали ещё 5 патчей для загрузчика GRUB2. Патчи были отправлены в апстрим GRUB2 и приняты.

1й патч

Устранение утечки памяти.

2й патч

Относится к круговому индикатору отсчёта обратного времени.

Пропущенный такт. (здесь и далее, такт — точка на окружности, на равном расстоянии друг от друга рисутся точки по окружности)

Всегда рисовалось на один такт меньше необходимого.

Grub-guide-ticks-appear.png

Grub-guide-ticks-disappear.png

После исправления:

Rosa-planet-7-grub-missed-tick-appear-after.png

Rosa-planet-7-grub-missed-tick-disappear-after.png

3й патч

Заполнение кругового и горизонтального индикаторов отсчёта обратного времени происходило, начиная с ненулевого значения.

Rosa-planet-7-grub-zero-state-before.png

После исправления:

Rosa-planet-7-grub-zero-state-after.png

4й патч

Относится к круговому индикатору отсчёта обратного времени.

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

При некоторых параметрах получалось такое (некоторые такты не прорисованы):

Grub-guide-circular-wrongwidth.png

И такое (такты могут быть прорисованы не полностью):

Grub-guide-circular-wrongtickheight.png

После исправления такты отображаются корректно.

5й патч

Улучшение оформления для горизонтального индикатора обратного отсчёта времени.

Rosa-planet-7-grub-highlight-before-1.png

Rosa-planet-7-grub-highlight-before-2.png

Различие в оформлении области выделения. До применения патча отображение области было некорректным в части случаев.

Rosa-planet-7-grub-highlight-after-1.png

Rosa-planet-7-grub-highlight-after-2.png


kcm-grub - починили «выбор по умолчанию во вложенных меню»

Нашими разработчиками был сделан патч для настройщика GRUB2 — kcm-grub2. Патч исправляет ошибку, тянущуюся с момента выхода GRUB2 версии 2.00.

Начиная с версии 2.00, изменилась структура меню загрузчика — появились вложенные меню. В связи с этим стало невозможно с помощью настройщика GRUB2 выбрать пункт по умолчанию, когда этот пункт находится во вложенном меню.

Rosa-planet-7-kcm-grub2-before-patch-ru.png

После применения патча эта опция заработала. Также список пунктов загрузки в настройщике теперь строится с учётом вложенных меню.

Rosa-planet-7-kcm-grub2-after-patch-ru.png

Патч был отослан в апстрим настройщика и будет обязательно встроен в следующую версию.

Инструменты мантейнера

PkgDiff 1.6 - Добавлена проверка совместимости пакетов

Инструмент PkgDiff разработан для визуализации изменений в файлах и атрибутах пакетов любых форматов и предназначен для использования мэйнтейнерами и QA-инженерами с целью контроля изменений и предотвращения внесения незапланированных изменений в репозитории ПО, которые могут нарушить сборку или функционирование других пакетов. Одними из самых многочисленных элементов в структуре дистрибутива Linux являются системные библиотеки. Средний дистрибутив содержит несколько тысяч библиотек. При этом они имеют огромное число зависимостей между собой. По этой причине неаккуратное обновление одной библиотеки может нарушить сборку и функционирование других библиотек и в итоге привести к отказу пользовательских приложений.

В новой версии инструмента PkgDiff 1.6 мы добавили возможность проверки совместимости изменений в библиотеках. Это стало возможным благодаря новому инструменту ABI Dumper, который может извлекать информацию об ABI библиотеки из соответствующих debug-файлов, которая затем может быть проанализирована инструментом ABI Compliance Checker. Для проверки совместимости двух пакетов A и B (старая и новая версии одного пакета), пользователь должен подать на вход инструменту соответствующие debug-пакеты и запустить его с дополнительной опцией -details:

pkgdiff -old A-debuginfo.rpm -new B-debuginfo.rpm -details

В отчете добавлена секция ABI Status, в которой показан уровень обратной совместимости API и ABI библиотеки в процентах. Для просмотра детализированных отчетов о совместимости необходимо найти в отчете таблицу Debug Info Files и перейти по ссылкам в колонке Detailed Report.

PkgDiff-2.png
PkgDiff-1.png

ABI Dumper - Инструмент для создания дампа ABI из debug-информации ELF-объекта

При компиляции ELF-объектов, таких как разделяемые библиотеки, модули ядра Linux и др., с дополнительной опцией -g, в них добавляется отладочная информация. Эта информация обычно используется стандартным отладчиком gdb для предоставлению пользователю дополнительных возможностей при поиске ошибок во время выполнения программы. С помощью опции -debug-dump утилиты readelf или eu-readelf (из пакета elfutils) данная информация может быть представлена в удобном для прочтения виде.

Важной частью любого ELF-объекта является его бинарный интерфейс (ABI), предоставляемый использующим его приложениям. По-сути он является представлением API объекта на бинарном уровне (после компиляции). При обновлении ELF-объекта в дистрибутиве, важно поддерживать его ABI обратно совместимым, иначе это может привести к нарушению работы приложений. Изменения в ABI вызываются соответствующими изменениями в API объекта или изменением конфигурации сборки и опций компиляции. Чтобы отслеживать изменения в ABI объекта используется разработанный нами ранее инструмент ABI Compliance Checker. Но до настоящего времени он мог анализировать только разделяемые библиотеки посредством извлечения информации об ABI из заголовочных файлов.

Для того, чтобы расширить границы применения и успростить использование инструмента ABI Compliance Checker, мы разработали новый инструмент ABI Dumper для извлечения ABI-информации из отладочной информации объектов. Теперь, с помощью этого инструмента можно отслеживать изменения в ABI не только библиотек, но и, например, модулей ядра. Типичный пример использования заключается в создании дампов ABI для старой и новой версии объекта:

abi-dumper libtest.so.0 -o ABIv0.dump
abi-dumper libtest.so.1 -o ABIv1.dump

и последующем их сравнении:

abi-compliance-checker -l libtest -old ABIv0.dump -new ABIv1.dump

К сожалению, у данного подхода есть свои недостатки. Пожалуй, главным недостатком является невозможность проведения некоторых проверок совместимости. Например, нет возможности проверки изменений значений констант (как дефайнов, так и глобальных данных), так как эти значения подставляются в код при компиляции и отсутствуют в отладочной информации. В целом, могут быть проведены около 98 % всех проверок совместимости. Еще одним недостатком является долгое время работы на больших объектах размером более 50 мб. Для сжатия debug-информации и следовательно уменьшения размеров входных объектов может быть использована утилита dwz.


Packaging-tools - набор полезных скриптов для облегчения задач мэйнтейнеров

В РОСЕ доступен packaging-tools — набор скриптов для мэйнтейнеров, изначально разработанный в Ark Linux.

Набор включает генератор spec-фалов для произвольных пакетов — vs — который создает заготовку spec-файла и открывает ее в vim (или в редакторе, заданном в переменных EDITOR или VISUAL). Также предоставляются специализированные генераторы spec-файлов для пакетов определенных типов:

vl
для библиотек
vp
для модулей Perl
vj
для Java-пакетов

Эти генераторы создают заготовки spec-файлов, учитывающие специфику конкретного типа пакетов (например, создаются необходимые подпакеты для библиотек, прописываются используемые в РОСЕ пути установки для Java и так далее).

Ущу один полезный скрипт — это e, небольшая обертка для gendiff. Если вы хотите подготовить патч для некоторого пакета, то вам следует распаковать архив с исходным кодом и отредактировать необходимые файлы с помощью e. На самом деле, этот скрипт вызовет внешний редактор (указанный в переменных EDITOR или VISUAL; по умолчанию используется vim), сохранив перед этим исходный файл с суффиксом rosa2012.1~ (используемый суффикс можно переопределить с помощью опции -s). После внесения всех необходимых модификаций в исходный код, вызовите gendiff для создания патча.

Например, вот так можно подготовить патч для файла test.c из исходного кода someapp-1.2.3 с помощью редактора geany.

 $ tar xzvf someapp-1.2.3.tar.xz
 $ cd someapp-1.2.3
 $ export EDITOR=geany
 $ e test.c
 $ cd ..
 $ gendiff someapp-1.2.3 .rosa2012.1~ >my.patch

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


Vtable Dumper - инструмент для просмотра виртуальных таблиц библиотеки

Поддержка обратной совместимости внешних API интерфейсов является одной из наиболее важных задач при разработке библиотек. Это позволяет проще портировать существующие приложения на новые версии библиотек. Конечно это относится в первую очередь к библиотекам у которых уже есть применения, но и немаловажно для новых библиотек, поскольку при выборе библиотеки часто обращают внимание не только на функциональность, но и на стабильность. Совместимость бывает трех видов: на уровне исходных кодов, бинарная и функциональная. Наличие совместимости на уровне исходных кодов и функциональной совместимости позволяет портировать приложения путем их пересборки без необходимости модификации кода. Бинарная же совместимость является наиболее сильным уровнем совместимости и позволяет запускать старые приложения без их пересборки.

Наиболее сложно поддерживать совместимость C++ библиотек, так как, по сравнению с Си-библиотеками, дополнительно используются манглинг имен функций и виртуальные таблицы, создаваемые компилятором для реализации полиморфизма классов. Виртуальные таблицы могут меняться нелинейным образом при изменении в объявлении классов (добавление или удаление функций, базовых классов, атрибутов наследования и т.д.) и любое такое изменение может привести к неопределенному поведению или падению приложений. Для контроля за составом виртуальных таблиц мы создали специальный инструмент Vtable Dumper, который печатает содержимое всех виртуальных таблиц найденных в бинарных файлах библиотеки. Таким образом можно сравнить вывод инструмента для старой и новой версии библиотеки, найти и предотвратить случайные изменения.

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

vtable-dumper /usr/lib64/libstdc++.so.6

Стоит заметить, что существует альтернативный способ изучения состава виртуальных таблиц с помощью опции -fdump-class-hierarchy компилятора GNU G++. Однако входными данными для его работы являются заголовочные файлы библиотеки и необходима их компиляция, которая может произойти с ошибками и потребовать дополнительных опций, порядка включения файлов и др. Кроме того, заголовочные файлы в отличие от бинарных файлов библиотеки не всегда установлены в системе. Форматы вывода обоих инструментов практически идентичны. Дополнительно инструмент Vtable-Dumper показывает параметры виртуальных функций в таблице и их mangled-имена (опция -mangled).

Далее приведен пример отображения инструментом содержимого виртуальной таблицы одного из классов библиотеки libQtGui:

 Vtable for QIconEnginePlugin
 _ZTV17QIconEnginePlugin: 22 entries
 0     (int (*)(...)) 0
 8     (int (*)(...)) (& _ZTI17QIconEnginePlugin)
 16    (int (*)(...)) QIconEnginePlugin::metaObject() const
 24    (int (*)(...)) QIconEnginePlugin::qt_metacast(char const*)
 32    (int (*)(...)) QIconEnginePlugin::qt_metacall(QMetaObject::Call, int, void**)
 40    (int (*)(...)) QIconEnginePlugin::~QIconEnginePlugin()
 48    (int (*)(...)) QIconEnginePlugin::~QIconEnginePlugin()
 56    (int (*)(...)) QObject::event(QEvent*)
 64    (int (*)(...)) QObject::eventFilter(QObject*, QEvent*)
 72    (int (*)(...)) QObject::timerEvent(QTimerEvent*)
 80    (int (*)(...)) QObject::childEvent(QChildEvent*)
 88    (int (*)(...)) QObject::customEvent(QEvent*)
 96    (int (*)(...)) QObject::connectNotify(char const*)
 104   (int (*)(...)) QObject::disconnectNotify(char const*)
 112   (int (*)(...)) __cxa_pure_virtual
 120   (int (*)(...)) __cxa_pure_virtual
 128   (int (*)(...)) -0x00000000000010
 136   (int (*)(...)) (& _ZTI17QIconEnginePlugin)
 144   (int (*)(...)) _ZThn16_N17QIconEnginePluginD1Ev
 152   (int (*)(...)) _ZThn16_N17QIconEnginePluginD0Ev
 160   (int (*)(...)) __cxa_pure_virtual
 168   (int (*)(...)) __cxa_pure_virtual

Визуализация изменений в дистрибутиве Linux с помощью утилиты DistDiff

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

Совместимость изменений в системных библиотеках можно проверять с помощью инструмента ABI Compliance Checker. Для проверки изменений в остальных пакетах мы разработали инструмент DistDiff. С помощью этого инструмента можно визуализировать изменения во всех пакетах дистрибутива и быстро их просмотреть на предмет нарушения совместимости. На вход этому инструменту надо лишь предоставить две директории — со старыми и новыми пакетами. В режиме по-умолчанию инструмент проверяет изменения в интерфейсных файлах (библиотеки, модули, скрипты, исполняемые файлы и т. д.), потенциально влияющих на совместимость, но может проверять и все файлы с помощью опции -all-files.

Работает инструмент на основе разработанного нами ранее инструмента PkgDiff для сравнения и визуализации изменений в пакетах.

Sample report between RHEL 6.3 and RELS 2012 on x86_64
Технические новости

«Точка Росы» переходит на rolling release


Наши давние читатели помнят наш бюллетень «Точка РОСЫ», предназначенный для технологически продвинутой аудитории. Но он был несколько старомодно-журнального формата, выпускался раз в месяц и в PDF-формате, что совершенно не соответствует современному ритму жизни.

Good news everyone!

Мы переходим к формату «Точка РОСЫ 2.0», с непрерывным циклом наших технологических новостей. Можно сказать, что мы перешли к стратегии rolling release, теперь каждая заметка появляется сразу, и новости не устаревают к моменту публикации.

Для читателей все будет понятно и просто — это классический блог, который можно читать хронологически, последовательно или по календарю, можно подписаться на RSS/Atom. Попасть в этот блог очень просто — ссылка «Точка Росы» в левой навигационной панели нашей вики.

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

Плодотворного чтения!

Not Invented Here-2010-03-09.jpg

Ну, и напомним, что для контактов любого рода с нашей компанией можно использовать и простую олдскульную почту info@rosalab.ru.


Ну и еще раз напоминает, что есть и PDF-версия:

Точка РОСЫ №7.pdf


Кстати, вопрос, а нужна ли она, если есть и блог, и дайджест… или есть желающие почитать сборник оффлайн?

Ваше мнение весьма важно для нас, проголосуйте пожалуйста!

PDF-сборники «Точек РОСЫ»:

Нужны71
90%
Не нужны8
10%

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.