[devel] rpm-build-4.0.4-alt78 tcl dependencies

Sergey Bolshakov =?iso-8859-1?q?sbolshakov_=CE=C1_altlinux=2Eru?=
Пн Сен 10 14:46:18 MSD 2007


>>>>> "Alexey" == Alexey Tourbin <at на altlinux.ru> writes:

 > Есть два класса, к которым можно отнести большую часть
 > несобравшихся пакетов.  Первый класс связан с падением на поиске
 > tcl зависимостей.  Поиск tcl зависимостей стал менее опциональным,
 > что пока считается правильным без дополнительных пояснений.
 > Проверка на наличие интерпретатора [ -x /usr/bin/tclsh ] пред
 > запуском /usr/lib/rpm/tcl.req в принципе убрана.  Кроме того,
 > раньше на поиск зависимостей шли только файлы с расширением
 > *.tcl.  Теперь для отсева файлов используется скрипт tcl.req.files,
 > который, кроме tcl модулей, отбирает также tcl скрипты.  Вот он.

Прежде всего, замечательно, что у тебя нашлось время/желание этим
заняться.

[skipped]

 > Поясню также, что сейчас пакет rpm-build-tcl не содержит зависимости
 > на tcl, то есть фактическая возможность запуска tcl.req ничем не
 > гарантируется.  Всё это вместе приводит к падению tcl.req и,
 > следовательно, невозможности сборки некоторых пакетов.

[skipped]

 >> fvwm-tcl-1.2-alt1
 >> find-provides: running scripts (alternatives,lib,pam,perl,pkgconfig,python,shell,tcl)
 >> /usr/lib/rpm/tcl.prov: line 3: /usr/bin/tclsh: No such file or directory
 >> /usr/lib/rpm/tcl.prov: line 3: exec: /usr/bin/tclsh: cannot execute: No such file
 >> or directory
 >> RPM build errors:
 >> error: /bin/sh failed
 >> error: Failed to find Provides
 >> /bin/sh failed


 > /usr/lib/fvwm-tcl/fvwm.tcl  100644      ASCII text
 > /usr/lib/fvwm-tcl/pkgIndex.tcl  100644  ASCII English text

 > Скрипт fvwm.tcl может что-то требовать.
 > $ rpmpeek /ALT/Sisyphus/files/i586/RPMS/fvwm-tcl-1.2-alt1.i586.rpm grep require ./usr/lib/fvwm-tcl/fvwm.tcl
 > package require Tcl 8.0 ;# we need binary command
 > if {[catch {package require Tclx}]} {
 >         error "Tclx is required for all systems except Linux"
 > $

 > Примечательно однако, что пакет fvwm-tcl не предоставляет ни одной
 > tcl(...) зависимости:
 > $ rpm -qp --provides /ALT/Sisyphus/files/i586/RPMS/fvwm-tcl-1.2-alt1.i586.rpm                      
 > fvwm-tcl = 1.2-alt1
 > $

Вероятно, потому, что этот пакет располагает свои файлы в
нестандартном для tcl месте (не ниже /usr/share/tcl)

 >> gsm-tools-0.0.4-alt5
 >> find-provides: running scripts (alternatives,lib,pam,perl,pkgconfig,python,shell,tcl)
 >> /usr/lib/rpm/tcl.prov: line 3: /usr/bin/tclsh: No such file or directory
 >> /usr/lib/rpm/tcl.prov: line 3: exec: /usr/bin/tclsh: cannot execute: No such file
 >> or directory
 >> error: /bin/sh failed
 >> error: Failed to find Provides
 >> RPM build errors:


 > $ rpmfile gsm-tools-0.0.4-alt5.noarch.rpm |grep tcl
 > /usr/bin/gsm-tools      100755  a /usr/bin/tclsh script text executable
 > /usr/share/tcl/gsm-tools    40755       directory
 > /usr/share/tcl/gsm-tools/gui.tcl        100644  ASCII text, with very long lines
 > /usr/share/tcl/gsm-tools/lib_phone_common.tcl   100644  ASCII text
 > /usr/share/tcl/gsm-tools/lib_siemens.tcl        100644  ASCII text
 > /usr/share/tcl/gsm-tools/lib_t39.tcl    100644  ASCII text
 > /usr/share/tcl/gsm-tools/phonebooklib.tcl       100644  a /usr/bin/tclsh script text executable
 > /usr/share/tcl/gsm-tools/pkgIndex.tcl   100644  ASCII English text
 > /usr/share/tcl/gsm-tools/smslib.tcl     100644  ASCII C program text
 > $

 > Здесь очень плохая ситуация -- обламывается tcl.prov (а не req).
 > По идее должна появиться зависимость Provides: tcl(smslib).
 > Если она не появится, то это чревато анметами.

 > Замечу, что tcl.prov ЗАПУСКАЕТСЯ ТОЛЬКО НА ФАЙЛЫ pkgIndex.tcl,
 > которые ЗАВЕДОМО ДОЛЖНЫ ЧТО-ТО ПРЕДОСТАВЛЯТЬ.

Да, странно, я посмотрю.

[skipped]

 >> vtcl-1.6.0-alt1
 >> find-provides: running scripts (alternatives,lib,pam,perl,pkgconfig,python,shell,tcl)
 >> /usr/lib/rpm/tcl.prov: line 3: /usr/bin/tclsh: No such file or directory
 >> /usr/lib/rpm/tcl.prov: line 3: exec: /usr/bin/tclsh: cannot execute: No such file
 >> or directory
 >> RPM build errors:
 >> error: /bin/sh failed
 >> error: Failed to find Provides
 >> /bin/sh failed

 > Очень много tcl файлов, не срабатывает prov.
 > /usr/share/vtcl-1.6.0/lib/color.tcl     100644  ASCII English text
 > /usr/share/vtcl-1.6.0/lib/command.tcl   100644  ASCII English text
 > /usr/share/vtcl-1.6.0/lib/compound.tcl  100644  ASCII English text
 > /usr/share/vtcl-1.6.0/lib/compounds.tcl 100644  ASCII English text

По той же причине, что и fvwm-tcl.
Вообще, хотя в rpm-build-tcl есть механизм для расширения
путей поиска provides, я не думаю, что предоставлять такие
зависимости хорошая идея, поскольку нет способа указать
в дальнейшем путь поиска, по которому такой provides расположен.

 > Вроде всё.
 > Итого, имеется более 20 поломанных пакетов.
 > Надо обсудить, что с ними делать.

 > Можно обратить внимание на то, что большинство скриптов на самом деле
 > не требуют каких-либо tcl пактов (то есть внешних модулей).  В принципе
 > можно было бы в tcl.req.files добавить проверку типа 'grep -w require',
 > и если заведомо ничего не требуется, то зависимости можно не искать.
 > Это починило бы большую часть пакетов.  В остальные же пакеты пришлось
 > бы добавить BuildRequires: tcl.

 > Но мне этот вариант не нравится вот в каком отношении.  Поиск tcl
 > зависимостей даёт больше, чем просто зависимости, которых почти нет.
 > По идее, дополнительно происходит syntax check.  Это очень мощный
 > и притом бесплатный способ проверки скриптов, он фактически защищает
 > от запаковки заведомо поломанного кода.  Фактически такой подход
 > уже является "нашим стилем" в rpm-build в других аналогичных случаях.
 > Проверка синтаксиса при анализе шелл-зависимостей мне пару раз помогала
 > обнаружить ошибки в шелл-скриптах.  В перле то же самое.  Недавно
 > я помогал migor@ собирать перловую софтину OpenCA, и практически
 > вынужден был исправить все ошибки в перловых скриптах (настоящие!),
 > чтобы пакет собрался.

 > Так что я предлагаю другой вариант: внести tcl в базовую сборочную
 > среду.  Это решает все проблемы.  Единственный недостаток -- это
 > внесение нового пакета в базовую сборочную среду per se.  Это в общем-то
 > не слишком популярный интерпретатор, но не "левый", то есть с давней
 > традицией, историей и т.п.

 > Вместе с тем, я не предлагаю ПРОСТО внести tcl в базовую сборочную
 > среду.  Я предлагаю решить проблему НАЛИЧИЯ в базовой сборочной среде
 > скриптов rpm-build-tcl, возможность запуска которых ничем не
 > гарантируется.  То есть нужно либо вынести rpm-build-tcl из базовой
 > сборочной среды, либо добавить в него зависимость на tcl, чтобы скрипты
 > поиска зависимостей всегда работали.  Я предлагаю второй вариант.

Вынос rpm-build-tcl из базовой сборочной среды -- это упование
на то, что майнтайнер впишет его в buildreq(pre).
Как нетрудно убедиться, это не сработало (в варианте buildreq: tcl)
даже с автором rpm-build-tcl и sandman.

Последствия выноса -- некоторая деградация технологии сборки для
tcl, бонус -- убыстрение процесса сборки, в отдалённом будущем --
вычищение базы apt от пары-тройки сотен сущностей.
'Техносноб' (с) во мне внёс бы tcl в rpm-build, конформист -- 
вынес бы умирающее тело на воздух.

-- 



Подробная информация о списке рассылки Devel