ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Ivan Zakharyaschev <vanyaz@mccme.ru>
To: <devel@linux.iplabs.ru>
Subject: Re: [devel] buildreqs
Date: Mon, 5 Mar 2001 21:31:22 +0300 (MSK)
Message-ID: <Pine.LNX.4.33L.0103052039400.3168-100000@zephyrous.ru> (raw)
In-Reply-To: <20010305044920.B19403@LDV.fandra.org>

On Mon, 5 Mar 2001, Dmitry V. Levin wrote:

> On Sun, Mar 04, 2001 at 06:40:10PM +0300, Ivan Zakharyaschev wrote:
> > > > Еще предложение: можно ли buildreqs научить выявлять статическую
> > > линковку
> > > > с glibc (чтобы знать, можно ли пакет собирать для i586 в системе
> с
> > > glibc
> > > > для i686)?
> > >
> > > Не совсем понятно. Было бы здорово эту мысль развить.
>
> <skip>

> Я все равно не понимаю.
> Тот факт, что пакет был собран на архитектуре, скажем, i686, еще не
> значит
> (более того, скорее всего не значит), что он не может быть собран на
> архитектуре i585; при этом совершенно не важно, для какой конкретно
> архитектуры были собраны gcc, glibc, zlib, ... - все те пакеты, код из
> которых мог попасть в исполняемые файлы собираемых пакетов. Это важно
> только для бинарных пакетов, BuildRequires тут не причем.

BuildRequires как свойство source-пакета тут действительно не причем.

Я вот о чем: когда-то у нас возникали проблемы, связанные с тем, что
программы из некоторых бинарных пакетов, собранных для i586 на системе с
glibc для i686, на самом деле не работали на i586, несмотря на название
пакета (i586.rpm). И packager об этом не подозревал: он делал себе rpm -bb
--target=i586, получал без всяких сообщений об ошибках пакет и
распространял его как i586.rpm.

Теперь мы знаем, что архитектура сборки glibc накладывает ограничение на
target для пакетов, статически линкующихся с ней. Пополнение этого списка
(пока список из одной glibc) -- не дело автоматики. Ей же я предлагаю
поручить обнаружение того факта, что пакет при сборке производит
статическую линковку с glibc. Это первая часть предложения (реализация
которой у меня уже вызывает вопрос: можно ли на основе данных от starce
понять, что происходит именно статическая линковка).

Вторая часть касается того, что же делать с полученной информацией. Можно
просто предупредить packager'а (мол, если Вы соберете этот пакет для
архитектуры отличной от архитектуры glibc, то не факт, что оно заработает
на этой target-архитекуре) -- сам packager может об этом и не задуматься.

Можно попытаться более строго записать это для rpm. Просто
BuildArchitecture: i686 не подойдет, потому что:

> Тот факт, что пакет был собран на архитектуре, скажем, i686, еще не
> значит
> (более того, скорее всего не значит), что он не может быть собран на
> архитектуре i585; при этом совершенно не важно, для какой конкретно

Тогда пытаемся написать что-нибудь такое, что бы заставляло rpm при
попытке собрать этот пакет кем-нибудь для некоторой target-архитектуры
проверить, подходит ли архитектура имеющейся в системе glibc для этой цели
(сборки статически слинкованной с ней программы для target-архитектуры).
Эта проверка не подразумевает со сотороны rpm никакого "думания", просто
сравнение названий архитектур по заранее определенным правилам. Самая
простая иллюстрация этого (может, реально не работающая) -- добавление
тэга вида:

BuildArchitecture: %(rpm -q glibc-devel --queryformat=%{ARCH})

Тут уже в качестве значения не что-то постоянное, оно вычисляется
каждый раз перед началом сборки (вызовом rpm -q glibc-devel ... ).
Несоответствие значений --target= и BuildArchitecture: должно помешать
собраться "битому" пакету у несведущего packager'а.

Причем тут buildreqs? Во-первых, это все делается теми же средствами --
слежением с помощью starce. Во-вторых, совпадают не только средства, но и
цель всего этого: предотвращение сборки "битых" пакетов плохо
осведомленными packager'ами (такими в какой-то степени можно считать
всех). "Битых" значит неработающих, несоответствующих своему названию, не
таких, какими их предполагал первоначальный packager. BuildRequires служит
для того же: первоначальный packager собрал пакет, посмотрел, что при
сборке ему было нужно то-то, то-то и то-то, записал это, проверил, что все
работает так, как он ожидает, и выпустил src.rpm. Потом кто-то его взял,
сделал rpm --rebuild, а у него нет чего-то из BuildRequires и он не
собирается. А если BuildRequires не было, он бы (возможно) собрал, ничего
не заметив, и получил бы бинарный пакет с программами, работающими не так,
как ожидал первоначальный packager (maintainer) пакета.

> А тот факт, что все пакеты, использующие gcc при сборке, втягивают в
> исполняемые файлы всякие crt*.o, делает не менее 90% пакетов
> дистрибутива
> зависимыми от архитектуры сборки самого gcc.
>
> Не вижу пока что никакой практической пользы от попытки все это
> отслеживать.

Не надо все тянуть -- надо определить библиотеки, для которых это важно.
Про glibc мы вроде это поняли.

-- 
Best regards,
	Ivan Z.

_______________________________________________
Devel mailing list
Devel@linux.iplabs.ru
http://www.logic.ru/mailman/listinfo/devel


      reply	other threads:[~2001-03-05 18:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-03-03 11:21 Ivan Zakharyaschev
2001-03-03 23:53 ` Dmitry V. Levin
2001-03-04 15:40   ` Ivan Zakharyaschev
2001-03-05  1:49     ` Dmitry V. Levin
2001-03-05 18:31       ` Ivan Zakharyaschev [this message]

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=Pine.LNX.4.33L.0103052039400.3168-100000@zephyrous.ru \
    --to=vanyaz@mccme.ru \
    --cc=devel@linux.iplabs.ru \
    /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