ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Aleksey Avdeev <solo@solin.spb.ru>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] Зависимости между apache2-httpd-* и apache2-{mod_*,common} (was: dependency needs Epoch warnings)
Date: Fri, 25 Jan 2013 01:44:09 +0400
Message-ID: <5101AB29.2070804@solin.spb.ru> (raw)
In-Reply-To: <20130124165240.GA9535@altlinux.org>

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

24.01.2013 20:52, Dmitry V. Levin пишет:
> On Thu, Jan 24, 2013 at 04:21:11PM +0400, Aleksey Avdeev wrote:
>> 24.01.2013 15:31, Dmitry V. Levin пишет:
>>> On Thu, Jan 24, 2013 at 02:25:06PM +0400, Aleksey Avdeev wrote:
>>>> 24.01.2013 10:53, Dmitry V. Levin пишет:
>>>>> По моим данным, в Сизифе 44 пакета, которые собираются с этим
>>>>> предупреждением, например:
>>>>> $ grep '^warning: [^:]*: dependency on [^ ]* needs Epoch' xorg-server-2:1.13.1.901-alt1 
>>>>> warning: xorg-server: dependency on xorg-server-common needs Epoch
>>>>> warning: xorg-drv-multimedia: dependency on xorg-server needs Epoch
>>>>> warning: xorg-xephyr: dependency on xorg-server needs Epoch
>>>>> warning: xorg-xdmx: dependency on xorg-server needs Epoch
>>>>> warning: xorg-xvfb: dependency on xorg-server-common needs Epoch
>>>>> warning: xorg-xnest: dependency on xorg-server-common needs Epoch
>>>>>
>>>>> То, что этот warning пора поднять до error, кажется очевидным.
>>>>> Вопрос, есть ли смысл делать ручку, которая бы понижала этот error
>>>>> обратно до уровня warning?
>>>>
>>>>   Нужно как миниум для apache2.
>>>
>>> Словам не верю, докажите.
>>
>>   OK, развёрнтый ответ пишу.

  См. соседнее письмо
(<http://lists.altlinux.org/pipermail/devel/2013-January/196451.html>).

>>
>>>
>>>> В противном случаи будет сломана
>>>> возможность делать точечные обновления компонентов apache2 и возможность
>>>> установки новых модулей (или их версий) на старый apache2 (если нет
>>>> противопоказаний по библиотекам, разумеется).
>>>
>>> Такая возможность не просто не нужна, она вредна и с ней надо бороться.
>>> При сборке apache2 тестируется в лучшем случае модули и сервер, собранные
>>> из одного исходного пакета, и не надо делать вид, что модули и сервер,
>>> собранные из разных исходного пакета, могут случайно заработать.
>>
>>   Для apache это скорее правило чем исключение:
>>
>> 1. Все заведомо несовместимые модули отстреливаются по MMN (Module Magic
>> Number, см. <http://httpd.apache.org/docs/2.2/glossary.html>), за
>> которым следит арстрим. У нас это реализовано через предоставление
>> зависимости Provides: %name-mmn = %mmn (где %mmn константа,
>> соответствующая собираемому apache2) пакетом apache2-commom (все модули
>> должны требовать зависимость с нужным им MMN).
>>
>> 2. Изменения сонеймов библиотек, с которыми собирается apache2, тоже
>> кодируются в виде зависемостей предоставляемых пакетом apache2-commom.
>> Список, правда, контролируется руками, и сейчас там только openssl:
>>
>> Provides: %name-%apache2_libssl_name = %apache2_libssl_soname
>>
>> где (см. пакет rpm-macros-apache2):
>>
>> %apache2_libssl_name libssl
>>
>> %apache2_libssl_soname %(rpm -qR %apache2_libssl_name-devel | sed -rn
>> '/^[[:space:]]*%apache2_libssl_name[0-9.]+[[:space:]]+[=<>]/s/^[[:space:]]*libssl([0-9.])+[[:space:]]+[=<>].*$/\\1/p')
>>
>> Если список надо расширить -- предложения принимаются. (Ранее, подобным
>> механизмом контролировался и сонейм lindb4, но теперь apache2 напрямую с
>> lindb4 не линкуется.)
>>
>> 3. Многие библиотеки apache2 использует через libapr/libaprutil, которые
>> и скрывают изменения их ABI.
>>
>> 4. Наши set-version для библиотек снимают заметную часть проблем.
>>
>>   Это касательно ABI. Требования по каталогам/файлам и содержимым
>> конфигов я контролирую руками.
> 
> Это все сложно и не дает гарантии, в отличие от простой конструкции вида
> Requires: %name = %{?epoch:%epoch:}%version-%release
> которая такую гарантию дает.

  Даст. Но она приведёт к строгой привязки модулей к тому бинарнику
/usr/sbin/httpd2, для которого они собирались => вызовет строгую
необходимость пересборки всех пакетов предоставляющих подпакеты
apache2-mod_* (т. к. их требования к /usr/sbin/httpd2 ничем не
отличаются от требований модулей находящихся в apache2-common) в рамках
одной транзакции, при сборке каждого из _релизов_ apache2. А это (судя
по <http://sisyphus.ru/ru/find.shtml?request=apache2-mod_>) 32 пакета,
из которых мой только 1 (сам apache2).

  Считаем такой подход (модули строго зависят от /usr/sbin/httpd2 с
заданными %{?epoch:%epoch:}%version-%release) вариантом 0.

  На мой взгляд, возможны более мягкие варианты, с меньшей надёжностью,
но и меньшими накладными расходами на поддержку. Но они тоже будут
использовать нестрогие зависимости (+ зависимости специального вида).

$ rpm -qR apache2-httpd-prefork
...
/lib64/ld-linux-x86-64.so.2
libapr-1.so.0()(64bit) >=
set:mdScRzxUDK08PLNebAfs84ljmWQtoHRtFuNahVkzKhJ77vOoVPtNr9RLoLhKk2sSXCq4H4eVnVZw1I85fDiBiZshOi3Pan6ezU26kEnODWphetGh2qO9QAlvlOij3ZlJErbZwaLBhccEcR1TK0n2ZxDxi4UDau01gEU91gDZ2wpIHIgAEGpQdYZtRIpu8ZoiRNFGRE0EZBzU3cJcgbHHzg81FFxmpyZkRgKDmQ2ua7ii5eITpuR4XFBR6xqwx7etV9ggp1EwsxtZ0rJD1lz6B5RLU0Zm41aOE64t2Z0hob5PXO5sLoG4AqyXiF8LDQZsxhQit1kTfHoZ8rr88haHXOB0PGZb7abFhZ12BePFn92NY0uhFYtxSM5rosXE1lxn9P1mHuIILqgUzs8RgvbmKPx4PwNB2PNJTLGyYoA2etXD9xIKhTA0ry6rNXDYO3GI0wfkhaI0k8zI67pG5cxApZGd7c1673bgFG9pL5Q8Kui5Z4Btmee4TPPQAi6hotCJoqAWFmNpbTYDisGfwY3j7nwx7cDqObUdHnHqqlUYgqejQK323k1aCfKfldECre5vnb4kuqQhdA2lKGxDlZu1a5AvRfZrg34Z9icOsScUBJ56JWXBMxE9wZwDF6083hCIykyCH5tfz8SI76cU6ixPRMB8rGEREZkAUNtsZ4ihY8pkVthZALvHPKn35ZsW8ZCGNWP1goVgGIzb4R63iVYxMXO7sNozU3ZrZewBZz4GiP9qYeVz3aQ9c7QVp8KUovwc7bDygRrIweB1noWF7dabLRRFqgaGGpaES4AZjIPCh6RnmPZaXzzlmysmsJYfAXoaIE7ejkwymXgqW18wq8QkSxD0L4hyv05nc0SR
rpmlib(SetVersions)
libaprutil-1.so.0()(64bit) >=
set:mdUR3aDfv8HX6HeiQIZfdNeVW0V0QCackx0AiRnCw0xLAl6KIlSq1IkpGRJ6B0EeRcgsethSxoyZ1Z83VATVj0Fpa3rG8Pn3lSEe41mf8oYIwXx2zjobEA3QsKd11g82cIZayfl0yH4rZ9siejISsnYbOw5fUbhs7D38T9Mq15kesYEFWMJ70TmCbgg9i4ykogWIDkKyiFoCfCAy7ZwKyH9GRuZdeylMVi4O5SIWpzv8AkjHbSOl1xyDsyAZevCUUPg7g2BG3fdNGLaEp1d04Ac3ckBWBPH5EayRVEm0VQbo9mzG2R61j9gkEJ9Rw8dVnZdt8pifxASid0b1FccqxGC920nbTpJ7m3uNEUZv4zUZzmu0a6Q2djK19jrQVIl01Pn7E4q928Zt2VoZhIZ2E469Sfz6NjTb0gXk7vC0sJQZmz0EutERAYyZp1kA5hpd8g1QfEY1T1Jq421xhCAEet961j12yxczG82FtlWKZtDMS1WKXoaks1ZsN18vJ7aoCXUg3COhvL2z8p3qfJ3udwijz8zyVO1PkPpvS1
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libpcre.so.3()(64bit) >= set:jgnWvEIM1hju
libpthread.so.0(GLIBC_2.2.5)(64bit)

  Видно, что если не учитывать lib64/ld-linux-x86-64.so.*, libc.so.* и
libpthread.so.*, то по библиотекам пакет зависит то libapr-1.so.*
(libapr1), libaprutil-1.so.* (libaprutil1) и libpcre.so.* (libpcre3) =>
(при неизменном MMN) ABI можно считать зависимым только от данных
библиотек =>:

1. Для поддержки "строгих" (частично ослабленных) зависимостей нам
достаточно чтобы модули собирались с теми
%{?epoch:%epoch:}%version-%release libapr{,util}1-devel
и libpcre-devel, что и apache2-httpd-*. Это позволит отказаться от
переборки сторонних пакетов apache2-mod_* при _каждом_ обновлении
apache2. Достаточно будет переборки при изменении libapr{,util}1-devel
или libpcre-devel. Но комплект из apache2 и _всех_ сторонних
apache2-mod_* придётся пересобирать при _каждых_ обновлениях
libapr{,util}1 и libpcre3 (и не исключено что одной транзакцией).

2. Если считать, что без изменения сонейма апстримы libapr{,util} и
libpcre обратную совместимость ABI не ломают, то можно считать
достаточным чтобы пакеты apache2-mod_* и apache2-httpd-* требовали
пакеты libapr{,util}1 и libpcre3 с %{?epoch:%epoch:}%version-%release >=
чем было предоставлено пакетами libapr{,util}1-devel и libpcre-devel с
которыми они (модули и бинарник) собирались. Этот вариант самый лёгкий в
поддержке.

  Свожу варианты:

0:

  +:

    а) надёжность максимальна;

    б) проще всего реализуется в спеке;

    в) нет нестрогих зависимостей;

  -:

    а) наибольшая трудоёмкость в поддержке: при _любом_ обновлении
apache2 -- пересборка _всех_ пакетов предоставляющих apache2-mod_*);

    6) мне нужны будут права на NMU всех пакетов предоставляющих
apache2-mod_* (или придётся каждый раз ждать, пока владельцы затронутых
пакетов дадут разрешение на их пересборку);

1:

  +:

    а) если libapr{,util}1 и libpcre3 не менялись -- при сборках apache2
можно не трогать пакеты предоставляющие apache2-mod_* => меньше дёргать
сторонние пакеты => поддерживать проще чем вариант 0;

  -:

    а) меньшая надёжность чем в варианте 0;

    б) конструкции в спеке сложнее чем в варианте 0;

    в) мне нужны будут права на NMU всех пакетов предоставляющих
apache2-mod_* (или придётся каждый раз ждать, пока владельцы затронутых
пакетов дадут разрешение на их пересборку, как и в варианте 0);

2:

  +:

    а) если сонейм libapr{,util} и libpcre не менялся (и они по прежнему
libapr{,util}1 и libpcre3) -- пересборка apache2 сторонние apache2-mod_*
не затрагивает => жёсткой синхронизации сборок apache2 и сторонних
apache2-mod_* не требуется => поддержка проще чем вариант 1 (и
значительно проще чем вариант 0);

    б) NMU на сторонние пакеты не требуется и никого ожидать не нужно;

  -:

    а) надёжность меньше чем у варианта 1;

    б) конструкции в спеке сравнима с вариантом 1 => сложнее чем в
варианте 0;

  Используемый сейчас вариант, по факту, менее надёжен чем вариант 2.

> 
>> PS: Для меня проще всего забить на проблему, поставив строгие
>> зависимости. Но это ударит по пользователям. Особенно по тем, у кого
>> слабый канал (такой как аналоговый модем или GPRS) или вообще отсутствие
>> оного (выкачка пакетов сторонними средствами и последующая установка с
>> носителя).
> 
> Мы говорим о потенциальных пользователях, которые не смогут обновить
> apache2-base, или такие пользователи действительно существуют?

 То что пользователи сидящие на слабом и/или ограниченном (медленном,
дорогом не безлимитном и пр.) канале (или вообще без оного) существуют
-- для меня очевидно: голоса таких пользователей до сих пор встречаются
на LOR, opennet и иногда в наших рассылках. Как правило это люди из
глубинки (мест в десятки-сотни километров в стороне от региональных
центров) или администраторы обособленных систем, не подключённых к
интернет (например технологическое оборудование). Насколько это
множество пересекается с множеством наших пользователей (в смысле: тех
чьё мнение для нас, как Team, важно) -- я не знаю.

  Иногда таким пользователем являюсь я сам, когда тестирую
обновления/работу компонентов apache2 физически находясь на даче (Лен.
обл.) или в деревне (Новгородская обл.): Пакетирование и тестирование
тогда идет локально, на ноуте, а сборка -- удалённо (git.alt или
people). При этом ситуация, когда можно закачать только выбранные
пакеты, а не весть комплект, существенно снижает время закачки (в
деревне GPRS хренов: вышка далеко и телефон держит только 1-2 палки) и
финансовые затраты.

-- 

С уважением. Алексей.



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 900 bytes --]

  reply	other threads:[~2013-01-24 21:44 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-03 16:40 [devel] samba Led
2013-01-03 22:36 ` Alexey Shabalin
2013-01-03 22:45   ` Led
2013-01-04  9:55     ` Alexey Shabalin
2013-01-23 20:14       ` [devel] non-strict dependency warnings Dmitry V. Levin
2013-01-23 21:05         ` Igor Vlasenko
2013-01-24  6:44           ` Dmitry V. Levin
2013-01-24 10:47             ` Aleksey Avdeev
2013-01-24 11:25               ` Dmitry V. Levin
2013-01-24 17:58                 ` [devel] non-strict dependency in apache2 (was: non-strict dependency warnings) Aleksey Avdeev
2013-01-24 19:15                   ` Dmitry V. Levin
2013-01-24 23:19                     ` [devel] non-strict dependency in apache2 Aleksey Avdeev
2013-01-24 23:37                       ` Dmitry V. Levin
2013-01-25  0:48                         ` Aleksey Avdeev
2013-01-25  8:53                           ` Dmitry V. Levin
2013-01-25 10:11                             ` Aleksey Avdeev
2013-01-26  9:22               ` [devel] %_allowed_nonstrict_interdeps (was: non-strict dependency warnings) Aleksey Avdeev
2013-01-24  6:46             ` [devel] non-strict dependency warnings Dmitry V. Levin
2013-01-24 11:21                 ` Dmitry V. Levin
2013-01-24 16:00                     ` Dmitry V. Levin
2013-01-24 16:22                       ` Led
2013-01-24 22:16                         ` [devel] %EVR macro Dmitry V. Levin
2013-01-24 22:37                           ` Led
2013-01-24 23:21                             ` Aleksey Avdeev
2013-01-24 12:07             ` [devel] non-strict dependency warnings Igor Vlasenko
2013-01-24  6:53           ` [devel] dependency needs Epoch warnings Dmitry V. Levin
2013-01-24  7:09             ` Yuri N. Sedunov
2013-01-24  7:16               ` Dmitry V. Levin
2013-01-24  7:24                 ` Yuri N. Sedunov
2013-01-24 10:25             ` Aleksey Avdeev
2013-01-24 11:31               ` Dmitry V. Levin
2013-01-24 12:21                 ` Aleksey Avdeev
2013-01-24 16:52                   ` Dmitry V. Levin
2013-01-24 21:44                     ` Aleksey Avdeev [this message]
2013-01-24 21:47                       ` [devel] Зависимости между apache2-httpd-* и apache2-{mod_*,common} (was: dependency needs Epoch warnings) Dmitry V. Levin
2013-01-24 22:26                         ` [devel] Зависимости между apache2-httpd-* и apache2-{mod_*,common} Aleksey Avdeev
2013-01-24 21:53                       ` [devel] Зависимости между apache2-httpd-* и apache2-{mod_*,common} (was: dependency needs Epoch warnings) Dmitry V. Levin
2013-01-24 22:31                         ` [devel] Зависимости между apache2-httpd-* и apache2-{mod_*,common} Aleksey Avdeev
2013-01-24 12:15             ` [devel] dependency needs Epoch warnings Igor Vlasenko
2013-01-23 22:29         ` [devel] non-strict dependency warnings Led
2013-01-23 22:37           ` Dmitry V. Levin
2013-01-23 22:43             ` Led
2013-01-24 11:57         ` [devel] Рано поднимать до error (was: non-strict dependency warnings) Sergey V Turchin
2013-01-24 12:23           ` [devel] Рано поднимать до error Aleksey Avdeev
2013-01-24 12:31           ` [devel] non-strict dependency warnings Dmitry V. Levin
2013-01-24 12:55             ` Sergey V Turchin
2013-01-24 14:49               ` Dmitry V. Levin
2013-01-24 14:59                 ` Sergey V Turchin
2013-01-26  8:49           ` [devel] Рано поднимать до error REAL
2013-01-26 10:39             ` Dmitry V. Levin
2013-01-26 17:36               ` Aleksey Avdeev
2013-01-26 19:07                 ` Sergey Vlasov
2013-01-26 20:08                   ` [devel] non-strict deps Dmitry V. Levin
2013-01-26 20:39                     ` Dmitry V. Levin
2013-01-26 23:31                     ` Igor Zubkov
2013-01-26 23:56                       ` Dmitry V. Levin
2013-01-27  0:25                         ` Led
2013-01-27  0:37                           ` [devel] gear-rules Dmitry V. Levin
2013-01-27  0:56                             ` Led
2013-01-27  1:01                               ` Dmitry V. Levin
2013-01-27  1:09                                 ` Led
2013-01-30  0:50                         ` [devel] non-strict deps Igor Zubkov
2013-01-30  0:55                           ` Dmitry V. Levin
2013-01-26 20:38                   ` [devel] Рано поднимать до error Aleksey Avdeev
2013-01-27  7:00                     ` Sergey Vlasov
2013-01-04  1:58 ` [devel] samba REAL
2013-01-04 11:06   ` [devel] llvm Dmitry V. Levin
2013-01-04 15:32     ` REAL
2013-01-04 15:24       ` Valery V. Inozemtsev
2013-01-05  5:13         ` REAL
2013-01-05  9:43           ` Dmitry V. Levin

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=5101AB29.2070804@solin.spb.ru \
    --to=solo@solin.spb.ru \
    --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