From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.1 DKIM-Filter: OpenDKIM Filter v2.11.0 zen.imath.kiev.ua 62DD480BD1C0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imath.kiev.ua; s=hydra; t=1637614113; bh=DZeMNylMyIfqTrq2e72dTWFpLcEm4zd38P4ds52gOQw=; h=Date:From:To:Subject:From; b=rO6tAgmyLk+LjC7radto3DhoC3pWv4s9XeV8W7aAA/qAlAgO3V+gfQE835k/uX071 GeLACjXJImo/kg1aikrRSqG5TviBPsNrzZFdzLYxxG7oIpUUTC/RyOW92gk5OBzj3F +c+v8PB+SXK2Bw93YZ5LukiX5f+AFR2aX+I0Cybg= Date: Mon, 22 Nov 2021 22:48:32 +0200 From: Igor Vlasenko To: devel@lists.altlinux.org Message-ID: <20211122204832.GA25400@dad.imath.kiev.ua> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.9.1 (2017-09-22) Subject: [devel] =?utf-8?b?0J3QtdGF0LLQsNGC0LrQsCDQt9Cw0LLQuNGB0LjQvNC+?= =?utf-8?b?0YHRgtC10Lkg0L3QsCDRg9GC0LjQu9C40YLRiyDQvtCx0YHQu9GD0LbQuNCy?= =?utf-8?b?0LDQvdC40Y8g0L7QsdGJ0LXRgdC40YHRgtC10LzQvdGL0YUg0LHQsNC3Lg==?= X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Nov 2021 20:48:36 -0000 Archived-At: List-Archive: List-Post: Нехватка зависимостей на утилиты обслуживания общесистемных баз. Уважаемые коллеги, приглашаю продолжить обсуждение политики https://www.altlinux.org/Упаковка_WM. Тезис. В разделе Упаковка_WM#Зависимости_на_общие_утилиты_freedesktop требовалось, чтобы DE вытягивали пакеты с утилитами update-mime-database (пакет shared-mime-info), update-desktop-database (пакет desktop-file-utils). Это было введено еще в версии 1.0, но соблюдалось не всеми. Мотивация была такая, что эти утилиты нужны для нормальной работы с mime типами и их обработчиками в desktop файлах. Ситуация с ними похожа на ситуацию с обычными пакетами и ядром. У обычных пакетов не ставят зависимости на ядро, но ядро нужно для их работы, поэтому нужно явно где-то контролировать, чтобы в итоге в образе ядро было. С утилитами выше ситуация хитрее, так как на них есть зависимости с пакетов. Те же desktop-file-utils скорее всего придут в образ дистрибутива то ли как зависимости wine, то ли как зависимости flatpak. А могут и не прийти или быть снесены пользователями в простоте своей. Надо как-то принуждать их наличие, и(ли) на высшем уровне mkimage-profiles, и(ли) на среднем уровне DE, и(ли) на низком уровне тулкитов. Антитезис. Оппонентом в дискуссии выступил уважаемый Сергей Турчин (zerg@), который высказался за то, что в целом все это не нужно: В обсуждении https://lists.altlinux.org/pipermail/devel/2021-November/215821.html > эти "системные БД" корявы самим своим существованием. Я начал в ответ махать спецификацией freedesktop.org/shared-mime-info, но в https://lists.altlinux.org/pipermail/devel/2021-November/215832.html Сергей отметил, что из спецификации необходимость этих утилит не следует: > > https://specifications.freedesktop.org/shared-mime-info-spec > > и база и кеш в ~/.local/share/mime ее не заменяют, а дополняют. > Нет там такого. Особенно про кэш. > > Хотелось бы пруфы, действительно ли спецификация не рабочая в части > > необходимиости общесистемных кешей. > Там вообще нигде не сказано, что кэши должен кто-то читать. Только xml-данные. что действительно так, из спецификации необходимость этих утилит не следует. Однако меня не покидало чувство, что где-то мы здесь накалываемся, поэтому по пословице "raise your force, use the source" я взял паузу на погружение в исходники. И здесь меня ждал ряд открытий чудных. Разбор полетов. проследив за _xdg_mime_glob_read_from_file в glib-2.68.4/gio/xdgmime/xdgmime* пришел к выводу, что в glib libgio вообще не читает xml-данные, а только mmap-ит в память сгенерированный с помощью update-mime-database кеш /mime.cache (который якобы не нужен) и другие сгенерированные с помощью update-mime-database файлы: globs, magic, aliases, icons. И это действительно хорошее дизайнерское решение. Приложениям не нужно мониторить дерево в /usr/share/mime/ с десятками каталогов и тысячами файлов. Достаточно менеджера пакетов и файл-триггера. Получается, libgio без mime.cache корректно работать не будет. Но при этом в libgio есть явная зависимость на update-mime-database (пакет shared-mime-info), так что все в порядке. Далее я полез в qt5, что вотчина уважаемого zerg@. Оказалось, см. qtbase-everywhere-src-5.15.2/src/corelib/mimetypes/qmime* что "не нужный" /mime.cache предательски просочился и туда. Если qt5 собран на нормальном Unix'е (#define QT_USE_MMAP) то провайдер по умолчанию для базы mime просто mmap-ит mime.cache! Да, если shared-mime-info не будет, или их снесет наивный пользователь (а ведь из-за несоблюдения полиси пакет shared-mime-info в KDE втягивается чудом, сбоку, через кривую зависимость в plasma5-bluedevil) то в qt5 на этот случай предусмотрен альтернативный провайдер, который ползает по дереву /usr/share/mime и парсит xml'ы. К сожалению, он не будет работать, так как пакет shared-mime-info снесет большую часть этих самых xml'ов. Но на этот случай в qt предусмотрена сферическая в вакууме "mimetype-database". это готовый абстрактный набор типов mime, для Windows, \macos, and iOS systems, у которых своей системной XDG MIME database нету. Она статически влинковывается в libQt5Core.so.5 через файл qmimeprovider_database.cpp (1.5Mb), генерируемый из xml исходника src/corelib/mimetypes/mime/packages/freedesktop.org.xml (2.2Mb) в итоге утяжеляя получившийся бинарник libQt5Core.so.5 (6Mb) на 256Kb сжатого блоба (~ 5%). Так что, по хорошему, в qt5base надо добавить явную зависимость на update-mime-database (пакет shared-mime-info). Тогда по сути зависимости на update-mime-database уйдут на нижний уровень (тулкитов), и на среднем уровне требование зависимости на них можно будет ослабить до рекомендации. И чтобы 2 раза не вставать, хотел бы отметить, что начиная с qt 5.13 появилась опция сборки -no-mimetype-database, смысл которой не таскать внутри libQt5Core.so.5 блоб из сжатого freedesktop.org.xml, так как все равно используется /usr/share/mime. Хорошо бы собирать libqt5-core c этой опцией. - QMimeDatabase: * Added configure option -no-mimetype-database that tells Qt not to bundle its own copy of the XDG MIME database. If this option is passed, QMimeDatabase will only work if there's a system copy in $XDG_DATA_DIRS/mime. This option is useful for Linux distributions that ensure the data is always present. qtbase-everywhere-src-5.15.2/src/corelib/mimetypes/qmimedatabase.cpp /*! \class QMimeDatabase \inmodule QtCore \brief The QMimeDatabase class maintains a database of MIME types. \since 5.0 The MIME type database is provided by the freedesktop.org shared-mime-info project. If the MIME type database cannot be found on the system, as is the case on most Windows, \macos, and iOS systems, Qt will use its own copy of it. ... On Unix systems, a binary cache is used for more performance. This cache is generated by the command "update-mime-database path", where path would be /opt/myapp/share/mime in the above example. Make sure to run this command when installing the MIME type definition file. */ Аналогично было бы хорошо добавить зависимость на desktop-file-utils в libgio. В libgio кеш от update-desktop-database используется, для случаев, не покрываемых mimeapps.list. В qt5 и kde5 кеш от update-desktop-database не используется, и понятно почему - нет поддержки системы специальных для KDE desktop файлов. Будь прописаны зависимости на нижнем уровне тулкитов, требования к DE можно было бы ослабить. Но не следует их выбрасывать. Не забываем, что кроме glib+gtk и qt есть и другие тулкиты (начиная с Enligtenment), и для них справедлива та же петрушка: Разработчики либо уже внедрили, либо внедряют, либо собираются внедрять стандарты Freedesktop. Поэтому они либо уже должны бы тащить ту же update-mime-database, либо собираются зависеть от update-mime-database, либо будут зависеть от update-mime-database в будущем. Поэтому условие, чтобы в дистрибутив вытягивались update-mime-database (пакет shared-mime-info), update-desktop-database (пакет desktop-file-utils) стоит, IMHO, продублировать и на более высоких уровнях, чтобы не стоять с палкой над каждым тулкитом. В том числе в mkimage-profiles, как минимум для дистрибутивов с графической средой. -- I V