ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Ivan Zakharyaschev <imz@altlinux.org>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] I: verify-elf for plugins etc. with RPM_LD_PRELOAD_xxxx & RPM_FILES_TO_LD_PRELOAD_xxxx; was: Re:  python3-3.5 unmets
Date: Sun, 18 Dec 2016 13:13:47 +0300 (MSK)
Message-ID: <alpine.LFD.2.20.1612181225380.1300@imap.altlinux.org> (raw)
In-Reply-To: <alpine.LFD.2.20.1604050036210.1850@imap.altlinux.org>

[-- Attachment #1: Type: text/plain, Size: 4784 bytes --]

Хочу дописать своё мнение о том, хороший это механизм или нет, что 
требуется доделать.

On Tue, 5 Apr 2016, Ivan Zakharyaschev wrote:

> On Fri, 1 Apr 2016, Ivan Zakharyaschev wrote:
>
>>  (Им же в verify_elf делается LD_PRELOAD, чтобы не засорять лог сборки
>>  несущественными сообщениями об undefined symbols. Для случая, когда
>>  такая библиотека кладётся в системные /usr/lib/, есть макрос
>>  %requires_python_ABI_for_files; пример -- пакет boost или
>>  python3-module-pygobject или python-module-pygobject3. Иначе пакет не
>>  пропустят.)
>
> Появился механизм для проверки всяких .so-плагинов на undefined symbols. 
> Можно пользоваться (например, видел краем глаза обилие саодельных проверок в 
> спеке apache). В качестве примера с помощью него реализована:
>
> 1. проверка всего внутри python*/site-packages/ (раньше были warnings)
> 2. а также макрос %requires_python3_ABI_for_files с явным указанием 
> интересных файлов.
>
> Принцип такой, что verify-elf понимает пары переменных окружения вида 
> RPM_LD_PRELOAD_xxxx и RPM_FILES_TO_LD_PRELOAD_xxxx (в случае одного из 
> питоноа в качестве идентификатора вместо xxxx выбрано python3, например).

В нынешнем состоянии это нехорошо вот чем.

Одна из прелестей успешного прохождения verify-elf (с unresolved=strict) в 
том, что наш автомат получается обучен тому, как загружать библиотеки и 
откуда взять все нужные символы. Это формальное знание можно использовать 
в lib.req, чтобы получить точные зависимости на множества требуемых 
символов. Принципиально этому ничего не мешает.

Например, в случае расставления настоящих RPATH/RUNPATH достигается и 
прохождение verify-elf без замечаний, и получение кучи правильных 
зависимостей, которых бы иначе не увидел автомат.

Но в случае с этим механизмом LD_PRELOAD для обработки "плагинов" первая 
часть реализована (verify-elf), а вторая-то в общем виде нет (lib.req).

Конечно, макрос %requires_python3_ABI_for_files делает костыль-зависимость 
(вместо зависимости на конкретную libpython3.so или /usr/bin/python3, 
которые одинаковое ABI им предоставляют). Так что в этом случае вторая 
часть решена, но костыльно (и неточно, без завсимости на множества 
символов, что было бы ещё лучше).

А в общем случае в нынешнем виде не очень хочется рекомендовать 
использовать этот механизм без реализации второй части, т.е. пользы от 
lib.req.

Я тогда это не так хорошо осознавал, что они должны идти для пользы рука 
об руку: verify-elf и lib.req, поэтому предлагал вторую часть всем 
по-своему дописывать:

> Поверх этого можно реализовывать нужные Вам макросы или задействовать 
> напрямую.
>
> Как предлагает glebfm@, чтобы ld-preload-ить программы, а не библиотеки, они 
> должны быть PIE.

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

Requires: xxxx >= set:.......

Тогда останется мейнтейнерам пакетов с xxxx ещё обеспечить появление 
соответствующих:

Provides: xxxx = set:.......

-- 
Best regards,
Ivan

  parent reply	other threads:[~2016-12-18 10:13 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-20 16:01 [devel] " Ivan Zakharyaschev
2016-03-02  6:40 ` Ivan Zakharyaschev
2016-03-02  7:46   ` Denis Medvedev
2016-03-02 10:01     ` Ivan Zakharyaschev
2016-03-03  6:44       ` Yuri N. Sedunov
2016-03-04 19:02       ` Ivan Zakharyaschev
2016-03-04 19:31         ` Denis Medvedev
2016-03-04 19:40           ` [devel] aiohttp native build problems; was: " Ivan Zakharyaschev
2016-03-04 20:36         ` [devel] " Ivan Zakharyaschev
2016-03-04 21:55           ` Ivan Zakharyaschev
2016-03-09  8:50         ` Ivan Zakharyaschev
2016-03-09  9:02           ` Ivan Zakharyaschev
2016-03-09  9:45             ` Ivan Zakharyaschev
2016-03-09 12:53               ` Ivan Zakharyaschev
2016-04-01 19:49           ` Ivan Zakharyaschev
2016-04-02  8:24             ` [devel] please approve python3-3.5 rebuild of pkgs; was:Re: " Ivan Zakharyaschev
2016-04-04 10:48                     ` sbolshakov
2016-04-04 11:17                           ` sbolshakov
2016-04-04 13:34                             ` Alexey Shabalin
2016-04-05 19:42                   ` sbolshakov
2016-04-05 21:19                     ` Gleb Fotengauer-Malinovskiy
2016-04-05 22:13                       ` Igor Vlasenko
2016-04-06  8:38                         ` sbolshakov
2016-04-19 16:41                     ` Ivan Zakharyaschev
2016-04-19 18:37                       ` Igor Vlasenko
2016-04-04 21:45             ` [devel] I: verify-elf for plugins etc. with RPM_LD_PRELOAD_xxxx & RPM_FILES_TO_LD_PRELOAD_xxxx; was: " Ivan Zakharyaschev
2016-04-07 20:46               ` Alexey Tourbin
2016-12-18 10:13               ` Ivan Zakharyaschev [this message]
2016-12-18 15:14                 ` Ivan Zakharyaschev
2016-12-18 16:02                   ` Michael Shigorin
2016-12-18 16:32                     ` Ivan Zakharyaschev
2016-12-19 12:25                   ` Alexey Gladkov
2016-12-19 13:28                     ` Ivan Zakharyaschev
2016-12-19 13:55                       ` Alexey Gladkov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.LFD.2.20.1612181225380.1300@imap.altlinux.org \
    --to=imz@altlinux.org \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git