Bug 38287 - Задать жёсткую зависимость на версию openssl у бинарного пакета ntp
Summary: Задать жёсткую зависимость на версию openssl у бинарного пакета ntp
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: ntp (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 enhancement
Assignee: Sergey Y. Afonin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-03-27 15:45 MSK by Vera Blagoveschenskaya
Modified: 2020-04-04 16:16 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vera Blagoveschenskaya 2020-03-27 15:45:41 MSK
# rpm -qa | grep ntp
ntp-4.2.8p13-alt1.x86_64
ntpdate-4.2.8p13-alt1.x86_64
ntpq-4.2.8p13-alt1.x86_64
ntp-doc-4.2.8p13-alt1.noarch
ntpd-4.2.8p13-alt1.x86_64
ntp-aux-4.2.8p13-alt1.noarch
ntp-utils-4.2.8p13-alt1.x86_64

Тестовые стенды:
server-9-x86-64
workstation-9-x86-64

При выполнении команды ntp-keygen ошибка:
OpenSSL version mismatch. Built against 101000af, you have 1010104f
Built against OpenSSL OpenSSL 1.1.0j  20 Nov 2018, using version OpenSSL 1.1.1d  10 Sep 2019
Using host server-9-x86-64-office group server-9-x86-64-office
Generating RSA keys (512 bits)...
RSA 0 36 38     1 26 54                         3 1 2
Generating new host file and link
ntpkey_host_server-9-x86-64-office->ntpkey_RSAhost_server-9-x86-64-office.3794299580
Using host key as sign key
Generating new certificate server-9-x86-64-office RSA-MD5
X509v3 Basic Constraints: critical,CA:TRUE
X509v3 Key Usage: digitalSignature,keyCertSign
Verify RSA-MD5 certificate fails
error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm
Comment 1 Sergey Y. Afonin 2020-03-27 20:34:03 MSK
Что-то тут не так.

Вот это

OpenSSL version mismatch. Built against 101000af, you have 1010104f
Built against OpenSSL OpenSSL 1.1.0j  20 Nov 2018, using version OpenSSL 1.1.1d  10 Sep 2019

у меня воспроизводится. Причина понятна: после обновления OpenSSL не пересобрали ntp. Вопрос сразу к ldv@: а такие неочевидные штуки сборочница как-то может ловить?

А вот с ntp из задания 248359 это не воспроизводится у меня. В итоге простой запуск ntp-keygen всё равно даёт ошибку (error:0909006C:PEM routines:get_name:no start line), но на несоответствие версий OpenSSL не ругается уже.
Comment 2 Sergey Y. Afonin 2020-03-27 21:11:00 MSK
(In reply to Vera Blagoveschenskaya from comment #0)

> При выполнении команды ntp-keygen ошибка:
> OpenSSL version mismatch. Built against 101000af, you have 1010104f

Это, всё же, только предупреждение. Но почему и с p14 на стенде вылезло я по прежнему не понимаю.

> Verify RSA-MD5 certificate fails
> error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message
> digest algorithm

А это последствие того, что в новом OpenSSL отключили MD5. Надо пока использовать "-c RSA-SHA1" например.
Comment 3 Sergey Y. Afonin 2020-03-27 21:41:55 MSK
Оказывается у них есть баг про MD5: https://bugs.ntp.org/show_bug.cgi?id=2518
Я немного дописал.
Comment 4 Sergey Y. Afonin 2020-03-30 10:31:56 MSK
(In reply to Vera Blagoveschenskaya from comment #0)

> При выполнении команды ntp-keygen ошибка:
> OpenSSL version mismatch. Built against 101000af, you have 1010104f
> Built against OpenSSL OpenSSL 1.1.0j  20 Nov 2018, using version OpenSSL
> 1.1.1d  10 Sep 2019

Это проблема сборочницы. Вероятно enhancement, если это вообще исправимо.

> Verify RSA-MD5 certificate fails
> error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message
> digest algorithm

По этому поводу завёл Bug 38300
Comment 5 Gleb F-Malinovskiy 2020-03-30 11:46:18 MSK
(Ответ для Sergey Y. Afonin на комментарий #4)
> (In reply to Vera Blagoveschenskaya from comment #0)
> 
> > При выполнении команды ntp-keygen ошибка:
> > OpenSSL version mismatch. Built against 101000af, you have 1010104f
> > Built against OpenSSL OpenSSL 1.1.0j  20 Nov 2018, using version OpenSSL
> > 1.1.1d  10 Sep 2019
> 
> Это проблема сборочницы. Вероятно enhancement, если это вообще исправимо.

А при чём тут сборочница?  Это ntp сам по себе решил, что версия не совпала, set:versions так не посчитали -- кто-то из них неправ.
Comment 6 Sergey Y. Afonin 2020-03-30 13:37:11 MSK
(In reply to Gleb F-Malinovskiy from comment #5)

> > Это проблема сборочницы. Вероятно enhancement, если это вообще исправимо.
> 
> А при чём тут сборочница?  Это ntp сам по себе решил, что версия не совпала,
> set:versions так не посчитали -- кто-то из них неправ.

Я пока не знаю, зачем ntp это проверяет и выдаёт предупреждение. Но может в сборочнице можно сделать какой-то список явных зависимостей на тему, что требуется пересобирать? На самом деле есть минимум ещё один кандидат, который просто так не ловится. Оказалось, что при обновлении gpsd до 3.19 надо было явно пересобрать gqrx. Но это отдел тестирования на пересборке репозитория отловил правда. Не знаю пока, это что-то разовое было, или всегда так будет.
Comment 7 Dmitry V. Levin 2020-03-30 13:44:22 MSK
(In reply to Vera Blagoveschenskaya from comment #0)

> При выполнении команды ntp-keygen ошибка:

> OpenSSL version mismatch. Built against 101000af, you have 1010104f
> Built against OpenSSL OpenSSL 1.1.0j  20 Nov 2018, using version OpenSSL
> 1.1.1d  10 Sep 2019

Ну это просто древний баг в пакете ntp.

(In reply to Sergey Y. Afonin from comment #6)
> Я пока не знаю, зачем ntp это проверяет и выдаёт предупреждение. Но может в
> сборочнице можно сделать какой-то список явных зависимостей на тему, что
> требуется пересобирать?

Если вы знаете, чтобы между пакетами были противоестественные зависимости, просто запишите их в спек-файле.  А мы потом покритикуем.
Comment 8 Dmitry V. Levin 2020-03-30 13:45:13 MSK
(In reply to Dmitry V. Levin from comment #7)
> Если вы знаете,

Если вы хотите, конечно.
Comment 9 Sergey Y. Afonin 2020-03-30 14:27:36 MSK
(In reply to Dmitry V. Levin from comment #7)

> > Я пока не знаю, зачем ntp это проверяет и выдаёт предупреждение. Но может в
> > сборочнице можно сделать какой-то список явных зависимостей на тему, что
> > требуется пересобирать?
> 
> Если вы знаете, чтобы между пакетами были противоестественные зависимости,
> просто запишите их в спек-файле.  А мы потом покритикуем.

А что, в спек-файле есть такие зависимости, которые говорят, что "вон тот пакет надо непременно всегда пересобрать если я пересобрался"? :-)
Comment 10 Dmitry V. Levin 2020-03-30 14:29:10 MSK
(In reply to Sergey Y. Afonin from comment #9)
> (In reply to Dmitry V. Levin from comment #7)
> 
> > > Я пока не знаю, зачем ntp это проверяет и выдаёт предупреждение. Но может в
> > > сборочнице можно сделать какой-то список явных зависимостей на тему, что
> > > требуется пересобирать?
> > 
> > Если вы знаете, чтобы между пакетами были противоестественные зависимости,
> > просто запишите их в спек-файле.  А мы потом покритикуем.
> 
> А что, в спек-файле есть такие зависимости, которые говорят, что "вон тот
> пакет надо непременно всегда пересобрать если я пересобрался"? :-)

В точности наоборот: в "том пакете" можно указать жёсткую зависимость.
Comment 11 Sergey Y. Afonin 2020-03-30 14:46:27 MSK
(In reply to Dmitry V. Levin from comment #10)

> > А что, в спек-файле есть такие зависимости, которые говорят, что "вон тот
> > пакет надо непременно всегда пересобрать если я пересобрался"? :-)
> 
> В точности наоборот: в "том пакете" можно указать жёсткую зависимость.

А как? Requires: name = %EVR очевидно же, что не годится. Нужна логика вида Requires: name (and rebuild if %EVR changed).
Comment 12 Dmitry V. Levin 2020-03-30 14:59:43 MSK
(In reply to Sergey Y. Afonin from comment #11)
> (In reply to Dmitry V. Levin from comment #10)
> 
> > > А что, в спек-файле есть такие зависимости, которые говорят, что "вон тот
> > > пакет надо непременно всегда пересобрать если я пересобрался"? :-)
> > 
> > В точности наоборот: в "том пакете" можно указать жёсткую зависимость.
> 
> А как? Requires: name = %EVR очевидно же, что не годится.

Почему не годится?

> Нужна логика вида Requires: name (and rebuild if %EVR changed).

Что значит rebuild в Requires?
Comment 13 Sergey Y. Afonin 2020-03-30 15:15:42 MSK
(In reply to Dmitry V. Levin from comment #12)

> > А как? Requires: name = %EVR очевидно же, что не годится.
> 
> Почему не годится?

Я может не очень понятно написал в 6-ом комментарии. Речь не про привязку к конкретной версии, а про пересборку с любой новой версией. Практически то же самое, что делает set version (не даёт пропустить задание без, как минимум, пересборки зависимого пакета), но в ситуации, котогда set version не срабатывает ввиду других причин необходимости, отличных от проверяемых set version.
Comment 14 Dmitry V. Levin 2020-03-30 16:54:24 MSK
(In reply to Sergey Y. Afonin from comment #13)
> (In reply to Dmitry V. Levin from comment #12)
> 
> > > А как? Requires: name = %EVR очевидно же, что не годится.
> > 
> > Почему не годится?
> 
> Я может не очень понятно написал в 6-ом комментарии. Речь не про привязку к
> конкретной версии, а про пересборку с любой новой версией. Практически то же
> самое, что делает set version (не даёт пропустить задание без, как минимум,
> пересборки зависимого пакета), но в ситуации, котогда set version не
> срабатывает ввиду других причин необходимости, отличных от проверяемых set
> version.

Повторю ещё раз:
- эта проверка в ntp очевидно неправильная;
- в пакетах бывают (возможно, зря, но бывают) жёсткие привязки к версиям других пакетов.  Посмотрите, например, gvfs.spec
Comment 15 Sergey Y. Afonin 2020-03-30 17:07:25 MSK
(In reply to Dmitry V. Levin from comment #14)

> Повторю ещё раз:
> - эта проверка в ntp очевидно неправильная;

При чём тут конкретно ntp? Во-первых я уже привёл один пример другого пакета. Во-вторых зачем-то же сделали копирование пересборкой, а не оставили просто копирование.

> - в пакетах бывают (возможно, зря, но бывают) жёсткие привязки к версиям
> других пакетов.  Посмотрите, например, gvfs.spec

Привязка к версии в данном случае не рассматривается.
Comment 16 Sergey Y. Afonin 2020-03-31 09:17:54 MSK
И всё же это фичереквест для сборочничы, а не для какого-то конкретного пакета. Если он не может быть реализован, либо нужность его переоценена, надо закрыть, как WONTFIX.
Comment 17 Dmitry V. Levin 2020-03-31 12:29:17 MSK
Пожалуйста, не надо перевешивать ошибки, найденные в конкретном пакете, на инфраструктуру.
Comment 18 Sergey Y. Afonin 2020-03-31 12:57:26 MSK
Пожалуйста не надо перевешивать на пакет заявку на фичу на инфраструктуру, которая иллюстрируется НЕ ошибкой на пакете.

Данное сообщение на пакете ntp НЕ ЯВЛЯЕТСЯ ОШИБКОЙ и НЕ ВЛИЯЕТ НА РАБОТОСПОСОБНОСТЬ!
Comment 19 Sergey Y. Afonin 2020-03-31 13:01:38 MSK
Если кто-то ещё не понял, настоящей ошибкой на ntp тут было

Verify RSA-MD5 certificate fails
error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest 

Оно не имеет абсолютно никакого отношения к ПРЕДУПРЕЖДЕНИЮ про версию SSL и это Bug 38300.
Comment 20 Dmitry V. Levin 2020-03-31 13:27:59 MSK
Если вы не хотите понимать, что я вам написал, то я не буду больше тратить на это время.  Внепакетных зависимостей не бывает.
Comment 21 Sergey Y. Afonin 2020-03-31 13:38:24 MSK
(In reply to Dmitry V. Levin from comment #20)

> Если вы не хотите понимать, что я вам написал,

Я хорошо понимаю, что хотите сказать Вы, а вот Вы, очевидно, не понимаете, что хочу сказать я. Понятно только, что мы совершенно про разное.

> то я не буду больше тратить на это время.  Внепакетных зависимостей не бывает.

Хорошо.
Comment 22 Anton Farygin 2020-03-31 13:44:03 MSK
на girar уже есть данные о том, какие пакеты что используют в runtime и при сборке.

В принципе технически отправить на пересборку не должно быть сложным. Но - если у содержимого пакета есть runtime зависимость на версию другого пакета, а в rpm пакете такая зависимость не зафиксирована, то это ошибка.

Нужно просто прописать у ntp более жёстку зависимость на версию openssl, с которой он собрался.

В этом случае при сборке следующей версии openssl его сразу пересоберут.
Comment 23 Sergey Y. Afonin 2020-03-31 14:20:21 MSK
(In reply to Anton Farygin from comment #22)

> В принципе технически отправить на пересборку не должно быть сложным. Но -
> если у содержимого пакета есть runtime зависимость на версию другого пакета,
> а в rpm пакете такая зависимость не зафиксирована, то это ошибка.
> 
> Нужно просто прописать у ntp более жёстку зависимость на версию openssl, с
> которой он собрался.
> 
> В этом случае при сборке следующей версии openssl его сразу пересоберут.

Как это сделать, не залезая в спек?
Comment 24 Sergey Y. Afonin 2020-03-31 14:32:00 MSK
(In reply to Sergey Y. Afonin from comment #23)

> > В этом случае при сборке следующей версии openssl его сразу пересоберут.
> 
> Как это сделать, не залезая в спек?

Другими словами, есть ли в rpm макрос, который определяет что-то аналогичное %EVR, но для пакета из BuildRequires? Если есть, то я тогда не прав. А если нет, то тогда это фичереквест для сборочницы. Или rpm.
Comment 25 Dmitry V. Levin 2020-03-31 15:08:58 MSK
(In reply to Dmitry V. Levin from comment #14)
> Повторю ещё раз:
> - эта проверка в ntp очевидно неправильная;
> - в пакетах бывают (возможно, зря, но бывают) жёсткие привязки к версиям
> других пакетов.  Посмотрите, например, gvfs.spec

Есть и другие примеры, помимо gvfs.spec:

$ git grep '^Requires: [^=]* = %{get_SVR'
j/javazi/javazi.spec:Requires: tzdata = %{get_SVR tzdata}

$ git grep -Fw '%{get_dep'
f/fuse-7z/fuse-7z.spec:Requires: %{get_dep fuse}
g/gvfs/gvfs.spec:Requires: %{get_dep fuse3}
i/itest/itest.spec:Requires:	%{get_dep libqt4-core}
k/kde4-basket/basket.spec:Requires: %{get_dep kde4libs}
p/polkit-qt-1/policykit-qt.spec:Requires: %{get_dep libqt4-core}
s/sawfish/sawfish.spec:Requires: %{get_dep rep-gtk}

Зависит от требуемой степени жёсткости.
Comment 26 Sergey Y. Afonin 2020-03-31 15:23:17 MSK
(In reply to Dmitry V. Levin from comment #25)

> > других пакетов.  Посмотрите, например, gvfs.spec

Тут почти всё задано жёстко. Есть get_dep(), но на общем объёме не заметно.

> Есть и другие примеры, помимо gvfs.spec:
> 
> $ git grep '^Requires: [^=]* = %{get_SVR'
> j/javazi/javazi.spec:Requires: tzdata = %{get_SVR tzdata}

А вот это то самое, да.
Comment 27 Dmitry V. Levin 2020-03-31 15:29:23 MSK
$ git grep '^Requires: [^%]*%{get_version'
a/attica/attica.spec:Requires: libqt4-core >= %{get_version libqt4-core}
k/kde4-kmldonkey/kmldonkey.spec:Requires: kde4libs >= %{get_version kde4libs}
k/kde4-smb4k/smb4k.spec:Requires: kde4libs >= %{get_version kde4libs}
k/kdevplatform/kdevplatform.spec:Requires: kde4libs >= %{get_version kde4libs}
k/kdevplatform/kdevplatform.spec:Requires: kde4libs >= %{get_version kde4libs}
k/kdevplatform/kdevplatform.spec:Requires: kde4libs >= %{get_version kde4libs}
k/kdevplatform/kdevplatform.spec:Requires: kde4libs >= %{get_version kde4libs}
k/kdevplatform/kdevplatform.spec:Requires: kde4libs >= %{get_version kde4libs}
l/libtag-extras/libtag-extras.spec:Requires: libtag >= %{get_version libtag}
l/licq/licq.spec:Requires: kde4libs >= %{get_version kde4libs}
l/licq/licq.spec:Requires: libqt4-core >= %{get_version libqt4-core}
p/phonon/phonon.spec:Requires: libqt4-core >= %{get_version libqt4-core}
p/polkit-qt-1/policykit-qt.spec:Requires: libqt4-core >= %{get_version libqt4-core}
q/qimageblitz/qimageblitz.spec:Requires: libqt4-core >= %{get_version libqt4-core}

В общем, много есть разных примеров.
Comment 28 Sergey Y. Afonin 2020-03-31 15:44:07 MSK
Достаточно было grep "^%get_" /usr/lib/rpm/x86_64-linux/macros
но спасибо. :-)
Comment 29 Sergey Y. Afonin 2020-04-03 22:29:51 MSK
(In reply to Sergey Y. Afonin from comment #28)

> Достаточно было grep "^%get_" /usr/lib/rpm/x86_64-linux/macros

Но что-то не получается...

Requires: libcrypto = %{get_version libssl-devel}

Локально это работает, но вот в сборочнице не очень:
error: line 51: Version required: Requires: libcrypto =

Я правильно понимаю, что не работать это может только по причине отсутствия libssl-devel на момент исполнения? Но зависимость на libssl-devel уже и через BuildPreReq описал. Сейчас в последней итерации попробовал в get_version написать libcrypto1.1, то же самое.
Comment 30 Dmitry V. Levin 2020-04-03 22:40:22 MSK
(In reply to Sergey Y. Afonin from comment #29)
> (In reply to Sergey Y. Afonin from comment #28)
> 
> > Достаточно было grep "^%get_" /usr/lib/rpm/x86_64-linux/macros
> 
> Но что-то не получается...
> 
> Requires: libcrypto = %{get_version libssl-devel}
> 
> Локально это работает, но вот в сборочнице не очень:
> error: line 51: Version required: Requires: libcrypto =

В дополнение ко всему, пакета libcrypto ещё и нет.  Попробуйте

%(rpmquery --qf 'Requires: %%{NAME} = %%{VERSION}' libcrypto1.1)
Comment 31 Sergey Y. Afonin 2020-04-03 23:33:25 MSK
(In reply to Dmitry V. Levin from comment #30)

> > Requires: libcrypto = %{get_version libssl-devel}
> > 
> > Локально это работает, но вот в сборочнице не очень:
> > error: line 51: Version required: Requires: libcrypto =
> 
> В дополнение ко всему, пакета libcrypto ещё и нет.  Попробуйте

Так ругается же на отсутствие версии, а не пакета. По поводу пакета: в openssl есть "Provides: libcrypto = %version-%release".
 
> %(rpmquery --qf 'Requires: %%{NAME} = %%{VERSION}' libcrypto1.1)

Так работает. А
Requires: libcrypto1.1 = %{get_version libcrypto1.1}
не работает тоже, хотя я не очень понимаю разницу в этом случае.

Вообще привязка к версии в имени - это то что хочется избежать как раз. В принципе вот это тоже сработало, и вроде бы как пока задумано:

%(rpmquery --qf 'Requires: libcrypto = %%{VERSION}' libssl-devel)
Comment 32 Dmitry V. Levin 2020-04-04 00:37:03 MSK
(In reply to Sergey Y. Afonin from comment #31)
> Вообще привязка к версии в имени - это то что хочется избежать как раз. В
> принципе вот это тоже сработало, и вроде бы как пока задумано:
> 
> %(rpmquery --qf 'Requires: libcrypto = %%{VERSION}' libssl-devel)

libcrypto - это версионированный provides, так что по идее тоже должно работать.
Comment 33 Repository Robot 2020-04-04 16:16:35 MSK
ntp-4.2.8p14-alt2 -> sisyphus:

 Sat Apr 04 2020 Sergey Y. Afonin <asy@altlinux> 4.2.8p14-alt2
 - updated License tag to SPDX syntax, changed to GPL-3.0-or-later
 - added ntp-4.2.8p14-MD5-to-SHA1-default.patch (ALT #38300)
 - added libcrypto with build version to Requires (ALT #38287)