Bug 32133

Summary: [python] Используется архитектурозависимая приаязка для текстового файла egg-info
Product: Sisyphus Reporter: Sergey Y. Afonin <asy>
Component: sisyphus_checkAssignee: Dmitry V. Levin <ldv>
Status: NEW --- QA Contact: qa-sisyphus
Severity: major    
Priority: P3 CC: at, george, glebfm, imz, ldv, legion, placeholder
Version: unstable   
Hardware: all   
OS: Linux   

Description Sergey Y. Afonin 2016-05-25 09:04:10 MSK
Не собирается новый syslog-ng (3.7). В спеке файл описывается так:
%python_sitelibdir_noarch/syslogng-1.0-py2.7.egg-info
При сборке не проходит проверка для x86_64

http://git.altlinux.org/tasks/165052/logs/events.1.1.log

/.out/syslog-ng-python-3.7.3-alt1.x86_64.rpm: invalid x86_64 python module path: /usr/lib/python2.7/site-packages/syslogng-1.0-py2.7.egg-info
sisyphus_check: check-python ERROR: python modules packaging violation
hsh-rebuild: pkg.tar: sisyphus_check failed.
Comment 1 Ivan Zakharyaschev 2016-05-25 10:58:10 MSK
Ваше мнение о том, что можно пропускать внутри /usr/lib/ в x86_64 пакете?

https://lists.altlinux.org/pipermail/devel/2016-May/201463.html :

Может быть, в sisyphus_check недостаточно разумная проверка?.. Когда её 
писали, не знали про существование .egg-info?

Там на x86_64 сначала считаются плохими все файлы в /usr/lib/, потом это 
отменяется для .py[co] (потому что считается, что они 
архитектурно-независимы и имеют права лежат в общем месте). А .egg-info 
забыто? Разумно ли добавить? А что-то ещё тогда не нужно ли тоже добавить? 
Там и просто всякие README могут лежать.

Хотелось бы, чтобы те, кто практикуют упаковку питона, поделились мыслями 
на этот счёт (ещё лучше -- вместе с патчами на sisyphus_check, если такие 
изменения оправданы).

(Возможно, часть случаев, с которыми я сейчас массово борюсь, пряча их -- 
mv в spec-ах из /usr/lib в /usr/lib64, объясняется тем, что мейнтейнеры 
столкнулись с этой проверкой? У меня ещё есть подозрение, что всякие 
namespace-ы для чего-то вроде zope.чего-то-там не заработают, если они 
окажутся в разных физических директориях. Это было бы объяснением части 
случаев.)

 	local bad_dirs= noarch_pattern=
 	case "$rpm_arch" in
 		noarch|i?86|pentium*|athlon*)
 			bad_dirs='/usr/lib64/python[23]([.][0-9])?/site-packages/' ;;
 		x86_64|amd64)
 			noarch_pattern='^d[^ ]+ /usr/lib/python[23]([.][0-9])?/site-packages/|^-[^ ]+ /usr/lib/python[23]([.][0-9])?/site-packages/.*\.py([co])?$'
 			bad_dirs='/usr/lib/python[23]([.][0-9])?/site-packages/' ;;
 	esac

 	local bad_files=
 	if [ -n "$bad_dirs" ]; then
 		bad_files="$(printf %s "$rpm_perms_filenames" |
 			     egrep "^[^ ]+ $bad_dirs" ||:)"
 	fi
 	if [ -n "$bad_files" -a -n "$noarch_pattern" ]; then
 		bad_files="$(printf %s "$bad_files" |
 			     egrep -v "$noarch_pattern" ||:)"
 	fi
 	if [ -n "$bad_files" ]; then
 		bad_files="$(printf %s "$bad_files" |cut -d' ' -f2-)"
 		FileError "invalid $rpm_arch python module path: $(oneliner "$bad_files" |fmt -w 128 |head -n1)" "$f"
 		rc=1
 	fi
Comment 2 Sergey Y. Afonin 2016-05-25 15:49:02 MSK
(In reply to comment #1)

> Ваше мнение о том, что можно пропускать внутри /usr/lib/ в x86_64 пакете?

Текстовые файлы, наверное. Но вот как их корректно определять... Если us-ascii, то понятно, но если начинаются национальные кодировки, или uft8, то могут, наверное, возникнуть проблемы.

> Хотелось бы, чтобы те, кто практикуют упаковку питона, поделились мыслями 
> на этот счёт (ещё лучше -- вместе с патчами на sisyphus_check, если такие 
> изменения оправданы).

Честно говоря, я пытаюсь паковать компоненты пакетов на Питоне только тогда, когда они попападаются. У упомянутого syslog-ng 3.7 таковой компонент просто появился, а нужен ли он, я не знаю. Мне он пока, думаю, не очень нужен, хотя, вроде бы, это отладочный компонент для syslog-ng.
Comment 3 Ivan Zakharyaschev 2016-05-25 16:50:31 MSK
(In reply to comment #2)
> (In reply to comment #1)
> 
> > Ваше мнение о том, что можно пропускать внутри /usr/lib/ в x86_64 пакете?

> > Хотелось бы, чтобы те, кто практикуют упаковку питона, поделились мыслями 
> > на этот счёт (ещё лучше -- вместе с патчами на sisyphus_check, если такие 
> > изменения оправданы).
> 
> Честно говоря, я пытаюсь паковать компоненты пакетов на Питоне только тогда,
> когда они попападаются. У упомянутого syslog-ng 3.7 таковой компонент просто
> появился, а нужен ли он, я не знаю. Мне он пока, думаю, не очень нужен, хотя,
> вроде бы, это отладочный компонент для syslog-ng.

Пока policy не найдено, которое бы разрешило такие файлы, могу предложить запаковать всю питоновскую часть в настоящий noarch пакет (python?-module-NNNN). Вроде тогда честно и понятно: noarch он и есть noacrh.

(Это возможно. Например, [http://git.altlinux.org/gears/e/emacs24.git?p=emacs24.git;a=blob;f=.gear/emacs.spec;h=ac103c9f93e228e6a8fea17b2787e3ae2220ddc6;hb=HEAD#l230 emacs24-el] с Emacs Lisp собирается как noarch-подпакет вместе с другими архитектурно-зависимыми пакетами, в т.ч главным, из одного спека.)

Если главный пакет архитектурно-зависимый, придётся использовать %python{,3}_sitelibdir_noarch. (А если главный -- noarch, макрос переключился бы сам.) А, ну да. Это я лишнее пишу, у Вас уже так сделано.
Comment 4 Sergey Y. Afonin 2016-05-26 15:04:43 MSK
(In reply to comment #3)

> могу предложить запаковать всю питоновскую часть в настоящий noarch пакет
> (python?-module-NNNN). Вроде тогда честно и понятно: noarch он и есть noacrh.

/.out/python2.7-module-syslog-ng-debuggercli-3.7.3-alt1.noarch.rpm: package NAME should start with the "python-module-" prefix
sisyphus_check: check-python ERROR: python modules packaging violation

Решили python и python3 делать ?

В общем, собралось с noacrh python-module-syslog-ng-debuggercli, отправил в репозиторий.
Comment 5 Ivan Zakharyaschev 2016-05-26 17:38:11 MSK
(In reply to comment #4)
> (In reply to comment #3)
> 
> > могу предложить запаковать всю питоновскую часть в настоящий noarch пакет
> > (python?-module-NNNN). Вроде тогда честно и понятно: noarch он и есть noacrh.
> 
> /.out/python2.7-module-syslog-ng-debuggercli-3.7.3-alt1.noarch.rpm: package
> NAME should start with the "python-module-" prefix
> sisyphus_check: check-python ERROR: python modules packaging violation
> 
> Решили python и python3 делать ?

Так сложилось (довольно давно).

> В общем, собралось с noacrh python-module-syslog-ng-debuggercli, отправил в
> репозиторий.

Хорошо!