[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