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
prev parent 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