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