Russian Fedora

cообщество русскоязычных участников
международного проекта Fedora

Evince получает поддержку новых форматов

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

Bastien Nocera в своем блоге объявил о нововведенияx в Evince, очередная версия которого будет доступна в составе GNOME 3.26:

  • Переход на libarchive для открытия форматов CBT, CBZ, CB7.
  • Использование библиотеки libarr для открытия файлов CBR (будет доступно и в Fedora 26)
  • Файлы Adobe Illustrator (расширение ai)

Wayland и NVIDIA

Наш коллега, Christian Schaller, сообщает хорошие новости! Оказывается, NVIDIA не только работает над поддержкой Wayland в своих драйверах, но уже и может кое что показать.

К сожалению, чтобы запустить на проприетарных драйверах NVIDIA Wayland-композиторы требуется патчить, что довольно трудоемко. Понятно, что какой-нибудь Weston поправить относительно легко, но скажем сразу - кто им всерьез пользуется? А вот дорабатывать Kwin и Mutter, это совсем другая история.

Понимая все это, инженер NVIDIA, Miguel A. Vico, создал copr-репозиторий для пользователей Fedora с проприетарными драйверами NVIDIA. В этом репозитории он выложил Mutter, собранный c EGLStream. Теперь пользователи GNOME могут попробовать Wayland в такой причудливой конфигурации.

Пробуйте!

grep 3.1

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

В этот раз разогнали в 7 раз маски вида [0-9] в многобайтовых локалях, т.е. практически везде, кроме какой-нибудь из несовместимых друг с другом вариантов BSD, где по слухам используется KOI-8 и ISA-видеоускорители.

Basho закрывается

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

Очень, очень жаль.

/images/sad-cat.jpg

Продолжение истории про RPM и новый бэкенд хранения данных

Продолжается история с новым бэкендом к RPM. Обновление RPM до версии 4.14 утвердили фичей Fedora 27. Rich W.M. Jones потребовал, чтобы бэкенд NDB включен не был.

На это поступили разъяснения. Этот бэкенд по умолчанию использоваться не будет, но пользователь может его попробовать, если установит переменную _db_backend в значение ndb и запустить rpmbuild --rebuild.

RPM выбирает бэкенд для хранения данных

Долгое время для хранения служебных данных в RPM использовалась BerkleyDB. Это довольно старое ПО, да еще и с неудобной лицензией (AGPL, начиная с версии 6.x). Заменить BDB планировали давно, и даже написали NDB, экспериментальный бэкенд, который и включили в RPM версии 4.13.

Начиная с RPM 4.14, который будет фичей Fedora 27, разработчики планируют переключиться на новый бэкенд. Как всегда бывает, мало кто увидел, что изменение внесено уже пару лет назад, и реальное обсуждение началось лишь сейчас.

Довольно очевидны проблемы - апгрейд будет требовать изменения самой базы данных, вероятно "сломается" некоторое стороннее ПО. Но главное - на GitHub лежит туча встраиваемых KV-хранилищ, транзакционных баз данных, реляционных баз данных, и простых data store. Зачем при таком богатстве выбора создавать что-то новое?

Сразу поступили предложения пересмотреть решение и использовать SQLite или LMDB - самые напрашивающиеся варианты. Это, конечно, далеко не полный список.

По поводу библиотеки SQLite - интересно то, что такой бэкенд в RPM был, но его удалили, мол, был медленный. Скорее всего, дело было в низком качестве самого бэкенда, и в том, что вряд ли кто-то использовал SQL-функциональность библиотеки.

По поводу же LMDB - был только RFE, а не PR. Реального кода никто еще не предложил, хоть заявленные характеристики библиотеки и превосходят ожидания. Однако, мы знаем, что разработчики LMDB (они же разработчики OpenLDAP) - люди уникальные. Наш товарищ, Леонид Юрьев, по неизвестной причине уже который год с коллегами убирается в этих Агиевых конюшнях, для чего, помимо всего, пришлось форкнуть LMDB. Мы желаем им удачи, разумеется, но также нужно признать, что когда он начинает перечислять проблемы в стоковой LMDB, становится понятно, что просто так в RPM это брать нельзя.

Обсуждение только началось, и посмотрим, чем все закончится.

Fedora 26

Официально объявили о выходе Fedora 26.

На OpenNET.ru уже перечислили наиболее заметные изменения в Fedora 26:

  • В состав включён выпуск рабочего стола GNOME 3.24 с поддержкой режима ночной подсветки, новым приложением для просмотра кулинарных рецептов, улучшением области уведомлений и расширением поддержки самодостаточных пакетов Flatpak;
  • В инсталлятор Anaconda добавлен blivet-gui с реализаций альтернативного интерфейса для разбивки разделов с поддержкой LVM (включая LVM cache, LVM RAID, Thin LVM), Btrfs (включая Btrfs RAID, подразделы и снапшоты), MD RAID, шифрования накопителя при помощи LUKS;
  • Добавлена поддержка кодека для многоканального кодирования звука AC-3 (Dolby Digital), срок действия патентов на который истёк и который теперь можно использовать без оплаты лицензионных отчислений. AC-3 применяется в стандартах цифрового телевидения (ATSC, DVB), на дисках DVD и Blu-ray, в системах потокового интернет-вещания с поддержкой объёмного звука 5.1.
  • Развивается предварительный вариант модульной серверной редакции дистрибутива, в которой конечные приложения поставляются в виде отдельно обновляемых модулей, жизненный цикл которых не привязан к другим приложениям и основной начинке дистрибутива;
  • Сформирован первый выпуск Base Runtime, модуля с базовой операционной системой, который может выступать в качестве основы для сборки и как зависимость для модулей с приложениями. Base Runtime является основой модульного выпуска Fedora 26 Server. Для сборки модулей в инфраструктуре запущен сервис Module Build Service;
  • Пакетный менеджер DNF обновлён до версии 2.0, в состав которой включён плагин Repoquery для поиска пакетов во внешних репозиториях (аналог "rpm -q" для удалённого репозитория). Добавлена команда "dnf check" для проверки целостности локальной БД packagedb и вывода информации о возможных проблемах. Добавлена команда "dnf upgrade-minimal", позволяющая обновить каждый пакет до самой свежей версии с улучшениями или исправлениями ошибок и уязвимостей;
  • Для сборки пакетов задействован выпуск набора компиляторов GCC 7. Обновлён применяемый по умолчанию набор флагов компиляции для C/C+, прекращено использование флага "-mtune=atom". Ранее запланированные для включения флаги "-Werror=implicit-function-declaration" и "-Werror=implicit-int" пока оставлены неактивными;
  • В качестве реализации pkg-config задействован пакет pkgconf, предоставляющий улучшенные средства обработки файлов .pc и стабильный библиотечный ABI/API для интеграции с приложениями;
  • Для сохранения и обработки core-дампов по умолчанию задействован сервис systemd-coredump. Для вывода списка core-дампов и их извлечения из БД Journal предложена утилита coredumpctl;
  • Python обновлён до версии 3.6.0. В состав включена обучающая среда Python Classroom Lab;
  • Задействованы новые выпуски Glibc 2.25, PHP 7.1, Go 1.8, Ruby 2.4, GHC (Haskell) 8.0, LDC (язык D) 1.1.0, Boost 1.63.0, Zend Framework 3, BIND 9.11;
  • Из поставки удалён драйвер для тачпадов xorg-x11-drv-synaptics, вместо которого следует использовать xorg-x11-drv-libinput;
  • На системах AARCH64 включена поддержка 48-разрядного виртуального адресного пространства;
  • B интерфейсе Fedora Media Writer добавлена возможность записи на SD-карты системных образов для ARM-архитектуры;
  • Подготовлена spin-сборка с рабочим столом LXQt (Qt Lightweight Desktop Environment), развиваемым объединённой командой разработчиков проектов LXDE и Razor-qt;
  • Подготовлен новый минималистичный образ для создания изолированных контейнеров, содержащий минимально возможный набор компонентов, но при этом, в отличие от Atom, включающий полноценный пакетный менеджер dnf и возможность устанавливать произвольные пакеты из штатных репозиториев;
  • OpenSSL обновлён до версии 1.1.0 с поддержкой алгоритмов scrypt, X25519 (RFC 7748), стандарта Certificate Transparency, потокового шифра ChaCha20 и алгоритма аутентификации сообщений (MAC) Poly1305. Прекращена поддержка устаревших технологий, в том числе удалены компоненты, обеспечивающие работу SSLv2, Kerberos, 40- и 56-разрядных шифров. Из набора шифров по умолчанию исключены алгоритмы RC4 и 3DES;
  • Включено определение параметров всех пользователей через NSS-модуль SSSD (System Security Services Daemon), обеспечивающий более высокую производительность за счёт кэширования содержимого локальных баз в памяти;
  • В качестве реализации PKCS#11 вместо Coolkey задействован пакет OpenSC, что позволило расширить спектр поддерживаемых дистрибутивом смарт-карт;
  • В репозиторий включён пакет snapd с инструментарием для управления самодостаточными пакетами в формате snap. Для начала работы с пакетами в формате Snap пользователям Fedora Linux теперь достаточно выполнить "sudo dnf install snapd", после чего можно использовать утилиту snap. В момент первой установки snap в систему будет установлен snap-пакет core c набором базовых библиотек для функционирования пакетов snap. Так как для изоляции в snap используется механизм AppArmor, который не поддерживается в Fedora, то пакеты запускаются без применения изоляции, т.е. нужно соблюдать осторожность и не устанавливать непроверенные приложения.

Одновременно для Fedora 26 введены в строй "free" и "nonfree" репозитории проекта RPM Fusion, в которых доступны пакеты с дополнительными мультимедиа приложениями (MPlayer, VLC, Xine), видео/аудио кодеками, поддержкой DVD, проприетарными драйверами AMD и NVIDIA, игровыми программами, эмуляторами.

Linux все еще не торт

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

Linux все еще не торт

Эта история началась около месяца назад, когда Кирилл Тхай добавил поддержку вложенных пространств имен в CRIU, после чего наша система CI приказала долго жить. В тот момент ничто не предвещало тех увлекательных приключений, в которые мы оказались вовлечены.

https://habrastorage.org/getpro/habr/post_images/0a3/2d1/e64/0a32d1e646a6424c17be75ca5c3e7b48.png

При пристальном рассмотрении выяснилось, что ядро всего лишь течет:

$ slabtop
OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
441920 441450 99% 1.00K 13810 32 441920K kmalloc-1024
224070 222908 99% 0.19K 5335 42 42680K kmalloc-192
38304 21198 55% 0.19K 912 42 7296K dentry
25602 25133 98% 0.12K 753 34 3012K kernfs_node_cache
19380 19380 100% 0.04K 190 102 760K Acpi-Namespace
$ uname -a
Linux zdtm.openvz.org 4.10.17-200.fc25.x86_64 #1 SMP Mon May 22 18:12:57 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

“Течёт и течёт, с кем не бывает”, подумали мы и обновились до 4.11. В той части CI у нас стоит Fedora, и тогда это было самое новое её ядро. Загрузили, и уже через пару минут CI нам снова передал привет посредством неработающего netfilter-а — при попытке удалить добавленное правило выдавалась невнятная ошибка:

[root@zdtm ~]# iptables -w -t filter --protocol tcp -A INPUT --dport 12345 -j DROP
[root@zdtm ~]# iptables -w -t filter --protocol tcp -D INPUT --dport 12345 -j DROP
iptables: Bad rule (does a matching rule exist in that chain?).

С помощью iptables CRIU блокирует сеть, чтобы зафиксировать состояние TCP сокетов. Ясно, что с таким багом наш CI работать тоже не мог. Недолго думая, мы собрали и загрузили ядро прямо из дерева Линуса, но и оно проработало недолго — снова потекла память:

[root@zdtm criu]# cat /proc/slabinfo | grep mnt
mnt_cache 36456 36456 384 42 4 : tunables 0 0 0 : slabdata 868 868 0

[root@zdtm criu]# python test/zdtm.py run -t zdtm/static/env00 --iter 10 -f ns
========================= Run zdtm/static/env00 in ns ==========================
Start test
./env00 --pidfile=env00.pid --outfile=env00.out --envname=ENV_00_TEST
Run criu dump
Run criu restore
Run criu dump
....
Run criu restore
Send the 15 signal to 339
Wait for zdtm/static/env00(339) to die for 0.100000
Removing dump/zdtm/static/env00/31
========================= Test zdtm/static/env00 PASS ==========================

[root@zdtm criu]# cat /proc/slabinfo | grep mnt
mnt_cache 36834 36834 384 42 4 : tunables 0 0 0 : slabdata 877 877 0

О проблеме доложили в lkml и пошли дальше заниматься своими делами. Вскоре наш соотечественник Александр Виро ответил, что Андрей Вагин нехороший человек и плохо объяснил предпосылки проблемы. А Александр, на минуточку, является Самым Главным Человеком в подсистеме, отвечающей за все, что связано с файлами, файловыми системами. Он не отличается быстротой реакции на присылаемые изменения, но если вы прислали какое-то г… но, то ответ настигнет вас сразу и неизбежно. А если вы тугодум, то он даже на родном объяснит все простыми словами.

Иногда проще починить баг, чем объяснять, что случилось, чем Андрей и занялся. Через некоторое время патч был готов, он был послан в рассылку и приложен к ядру, которое, в свою очередь, было загружено на CI. С чувством исполненного долга Андрей пошел заниматься своими делами. Виро молчал, что означало отсутствие очевидных проблем в патче. Еще одним признаком избавления от старой проблемы явилось сообщение о новой проблеме.

[ 699.207570] BUG: Bad page state in process ip6tables-save pfn:1499f4

Времени и желания разбираться уже не оставалось, ограничились письмом в lkml, а в CI загрузили ядро 4.10, у которого было существенное преимущество — оно работало и не падало. Да, оно немного текло, и мы решили перезагружать машину раз в сутки. Кто-то вспомнил о старых добрых временах, когда все подряд перегружали винду, если та начинала тормозить.

Свежий баг мировыми усилиями довольно оперативно починили. На CI установили Самое Новое и Лучшее ядро, но не тут-то было. Посыпались ошибки в тестах, примерно в каждом втором.

На этом направлении оборону держал Кирилл Горкунов (отчасти из-за того, что Андрей пошел спать). К утру в lkml развернулась большая дискуссия. Оказалось, что наши коллеги-ядерщики чинили Страшную Уязвимость CVE-2017-1000364 и поломали обратную совместимость пользовательского API. Поломка эта была практически умышленной: без этого код становился намного сложнее, и сообщество, скрепя сердце, решилось на крайние меры. А в силу того, что речь шла о Страшной Уязвимости (нужна картинка windows security model с воротами без забора), изменения не обсуждались публично и были наскоро влиты в ядро. Сразу после этого оказалось, что изменения привнесли в ядро другой баг, который тоже оказался Страшной Уязвимостью, и ещё несколько дней ушло на уже открытые дебаты по новой проблеме.

Возникшая неразбериха сказалась на дистрибутивах. Когда инженеры RedHat и Ubuntu переносили эти изменения в свои ядра, что-то пошло не так, и оба дистрибутива оказались сломанными двумя разными способами. Для нас это тоже было критично, так как часть нашего CI крутится в Travis, а там на выбор предлагается только Ubuntu. Другая часть CI крутится на Fedora, заменить её там на Ubuntu можно ради однородности, но уж конечно не в спешке. Так что в Fedora просто загрузили неродное ядро, его-то должны были уже починить! После установки по привычке сразу посмотрели не течёт ли оно.

unreferenced object 0xffff88006342fa38 (size 1024):
comm "ip", pid 15477, jiffies 4295982857 (age 957.836s)
hex dump (first 32 bytes):
b8 b0 4d a0 ff ff ff ff c0 34 c3 59 00 88 ff ff ..M......4.Y....
04 00 00 00 a4 01 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[ffffffff8190510a] kmemleak_alloc+0x4a/0xa0
[ffffffff81284130] __kmalloc_track_caller+0x150/0x300
[ffffffff812302d0] kmemdup+0x20/0x50
[ffffffffa04d598a] dccp_init_net+0x8a/0x160 [nf_conntrack]
[ffffffffa04cf9f5] nf_ct_l4proto_pernet_register_one+0x25/0x90

Течёт. Необходимые изменения нашлись быстро, по какой-то причине maintainer DCCP не отправил их Линусу, и они затерялись в его дереве. Берём патч (на доклад в рассылку настроения уже нет), перезагружаемся в новое ядро.

В одном из своих произведений Марк Твен описывает человека по имени Оливер, который отправился на серебряные месторождения. Путешествие проходило в очень тяжёлых условиях, но Оливер молча переносил все выпавшие на его долю тяготы. Однажды, во время длительной стоянки (возможно это был уже конец их похода) в его жилье, проломив крышу, свалился мул. На следующий день ситуация повторилась, и Оливер перенёс свой домик в сторону, где мулы не гуляли, но это его не спасло — в дом, опять сломав крышу, упала корова. В тот момент Оливер впервые выразил своё недовольство происходящим фразой: «Это уже становится однообразным», после чего подал в отставку и уехал.

«Это уже становится однообразным», подумал Андрей, посмотрев на загруженное ядро.

unreferenced object 0xffff9f79442cd980 (size 112):
comm "kworker/1:4", pid 15416, jiffies 4307432421 (age 28687.562s)
hex dump (first 32 bytes):
00 00 00 00 ad 4e ad de ff ff ff ff 00 00 00 00 .....N..........
ff ff ff ff ff ff ff ff b8 39 1b 97 ff ff ff ff .........9......
backtrace:
[ffffffff9591d28a] kmemleak_alloc+0x4a/0xa0
[ffffffff95276198] kmem_cache_alloc_node+0x168/0x2a0
[ffffffff95279f28] __kmem_cache_create+0x2b8/0x5c0
[ffffffff9522ff57] create_cache+0xb7/0x1e0
[ffffffff952305f8] memcg_create_kmem_cache+0x118/0x160
[ffffffff9528eaf0] memcg_kmem_cache_create_func+0x20/0x110
[ffffffff950cd6c5] process_one_work+0x205/0x5d0
[ffffffff950cdade] worker_thread+0x4e/0x3a0
[ffffffff950d5169] kthread+0x109/0x140
[ffffffff9592b8fa] ret_from_fork+0x2a/0x40
[ffffffffffffffff] 0xffffffffffffffff
unreferenced object 0xffff9f798a79f540 (size 32)

К чести Андрея, в отставку он не подал, а доложил о проблеме в lkml, настроил профилактическую перезагрузку, запустил CI и занялся своими делами. Через полдня пришло письмо о новых проблемах.

> [22458.504137] BUG: Dentry ffff9f795a08fe60{i=af565f,n=lo} still in
> use (1) [unmount of proc proc]
> [22458.505117] ------------[ cut here ]------------
> [22458.505299] WARNING: CPU: 0 PID: 15036 at fs/dcache.c:1445
> [22458.515141] ---[ end trace b37db95b00f941ab ]---
> [22458.519368] VFS: Busy inodes after unmount of proc. Self-destruct
> in 5 seconds. Have a nice day...
> [22458.813846] BUG: unable to handle kernel NULL pointer dereference
> at 0000000000000018

Ядро не просто текло, оно вешало тесты, само зависало в непонятном состоянии, но признаки жизни подавало. Проблема показалась знакомой. Выяснилось, что об этой проблеме Андрей уже писал в lkml несколько месяцев назад, но тогда никому до этого не было дела. В этот раз решили проинформировать гораздо больше людей, и реакция наконец-то возникла. Эрик Бидерман почти сразу нашёл проблемный патч, но суть самой проблемы спустя неделю всё ещё оставалась покрытой мраком.

Сейчас на CI машинах у нас загружено латаное-перелатаное ядро, оно пока не падает, но все еще подтекает. В основной ветке у Линуса все эти проблемы цветут и немного пахнут, но это не помешало выпуску 4.12 ядра.

Люди, работайте только на стабильных ядрах, если конечно, они у вас есть. Обычному Linux ядру сильно не хватает тестирования.

В заключение хочется процитировать Александра Виро, который на ядерном саммите около десяти лет назад сказал: «We're discussing a lot how to encourage people write the kernel code. But I'd like someone to start a discussion about how to encourage people READ this damned thing.»

Авторы: Павел Емельянов, Кирилл Горкунов и Андрей Вагин.

Вышел RFRemix 26

Итак сегодня вышла Fedora 26 и по традиции RFRemix 26, основанный на репозиториях Fedora, RPM Fusion, и Russian Fedora. Для загрузки доступны Live-образы KDE, LXQt, LXDE, XFCE, MATE, Cinnamon, а также Workstation версия с GNOME 3.24. Доступна Серверная редакция, образы сетевой установки. Также доступны образы Cloud и Docker.

Russian Fedora внезапно попала под украинские санкции (так как хостится на mirror.yandex.ru), поэтому появилось новое зеркало в Германии.

/images/MATE.png

Основные отличия

  • Freetype пересобран с subpixel rendering.
  • Fontconfig содержит патчи Ubuntu для LCD мониторов (в общем сломали шрифты как всегда).
  • В образы Workstation по умолчанию для GNOME Shell (не для GTK) используется тема Korora из одноименного проекта. Также опционально добавлены темы Adapta и EvoPop для GTK и иконки EvoPop. Все отключается и включается в gnome-tweak-tool.
  • В KDE добавлен LibreOffice вместо офиса KDE, а также изменена загрузочная тема Плимута на breeze.
  • Доступна поддержка вымирающего Flash.
  • В репозитории доступен клиент для WhatsApp и Wire, а также старый Skype (который почти уже умер), Viber и Telegram.
  • В Live-образы в выключенном состоянии добавлены официальные репозитории с Google Chrome, Yandex Browser, MEGAsync, Skype, Slack, VirtualBox, Cloud Mail.ru, VK мессенджер и Yandex Disk.
  • Chromium пересобран с поддержкой кодеков. Сейчас эта опция также доступна в RPM Fusion, но пока мы не планируем отказываться от собственной сборки.
  • Taglib собран с патчем ruxmms, для поддержки тегов в кодировке win1251.
  • Telepathy Gabble собран с патчем, позволяющим подключение к Jabber серверу Cisco.
  • В репозитории доступен клиент s3fs-fuse и distributed key/value storage Elliptics.
  • Доступен новый Live-образ LXQt.
  • Для Live-образов доступна опция загрузки образа в память (rd.live.ram).
  • На все Live-образы добавлен по умолчанию Telegram.
  • Исправлен баг баг в связке WPA_Supplocant+OpenSSL при подключении к Wi-FI EAT-TLS.

Ссылки для скачивания

  • RFRemix Cloud [ i686 ] [ x86_64 ]
  • RFRemix Docker [ x86_64 ]
  • RFRemix Server [ i686 ] [ x86_64 ]
  • RFRemix Workstation [ i686 ] [ x86_64 ]
  • Образы Live [ i686 ] [ x86_64 ]

Куда сходить спросить, пожаловаться

Обновление

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

dnf --releasever=26 distro-sync --nogpgcheck