Bug 14113

Summary: apt ставит лишние пакеты в сборочный чрут
Product: Sisyphus Reporter: at <at>
Component: aptAssignee: placeholder <placeholder>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: boyarsh, glebfm, imz, ktirf, ldv, placeholder
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on: 4753    
Bug Blocks:    

Description at@altlinux.org 2008-01-21 17:55:51 MSK
Собирал сегодня libcairo и заметил что apt ставит в чрут scrollkeeper.

[at@people ~]$ hsh --no-stuff --init
[at@people ~]$ hsh-install fontconfig-devel gtk-doc imake libXrender-devel
libdirectfb-devel libfreetype-devel libglitz-devel libpng-devel xorg-cf-files
Preparing packages for installation...
libexpat-2.0.1-alt0.1
libfreetype-2.3.5-alt2
fontconfig-2.5.0-alt2
Updating fonts cache: [ DONE ]
fontconfig-devel-2.5.0-alt2
imake-1.0.1-alt2
libX11-locales-1.1.3-alt7
libdirectfb-1.1.0-alt1
libpng12-1.2.23-alt1
libdirectfb-devel-1.1.0-alt1
libdrm-2.4.0-alt1
libdrm-devel-2.4.0-alt1
libexpat-devel-2.0.1-alt0.1
zlib-devel-1.2.3-alt4
libfreetype-devel-2.3.5-alt2
libXau-1.0.3-alt1
libXdmcp-1.0.2-alt1.0
libxcb-1.1-alt4
libX11-1.1.3-alt7
libXdamage-1.1.1-alt1
libXext-1.0.3-alt2
libXfixes-4.0.3-alt1
libXxf86vm-1.0.1-alt1
libstdc++4.1-4.1.1-alt12
libmesa-7.0.2-alt7
libglitz-0.5.7-alt1
libICE-1.0.4-alt1
libSM-1.0.3-alt1
libXt-1.0.5-alt1
libxcb-devel-1.1-alt4
libXi-1.1.3-alt2
libXmu-1.0.4-alt1
libpng-devel-1.2.23-alt1
sgml-common-0.6.3-alt11
xml-common-0.6.3-alt11
libxml2-2.6.31-alt1
xml-utils-2.6.31-alt1
xorg-cf-files-1.0.2-alt1
libgpg-error-1.5-alt1
libgcrypt-1.4.0-alt2
libxslt-1.1.22-alt1
xsltproc-1.1.22-alt1
crontab-control-1.1-alt1
setproctitle-0.3.1-alt1
vixie-cron-4.1.20060426-alt3
crontabs-1.8-alt1
docbook-dtds-4.4-alt1
docbook-style-xsl-1.71.0-alt1
libscrollkeeper-0.3.14-alt12
logrotate-3.6.2-alt4
scrollkeeper-0.3.14-alt12
libOpenSP-1.5.2-alt1
openjade-1.3.2-alt8
gtk-doc-1.9-alt1
libXrender-0.9.4-alt1
xorg-x11-proto-devel-7.3.0-alt9
libICE-devel-1.0.4-alt1
libSM-devel-1.0.3-alt1
libXdmcp-devel-1.0.2-alt1.0
libXau-devel-1.0.3-alt1
libX11-devel-1.1.3-alt7
libXt-devel-1.0.5-alt1
libXext-devel-1.0.3-alt2
libXfixes-devel-4.0.3-alt1
libXdamage-devel-1.1.1-alt1
libXi-devel-1.1.3-alt2
libXmu-devel-1.0.4-alt1
libXxf86vm-devel-1.0.1-alt1
libmesa-devel-7.0.2-alt7
libglitz-devel-0.5.7-alt1
libXrender-devel-0.9.4-alt1
[at@people ~]$ hsh-shell
[builder@people .in]$ rpm -e --test scrollkeeper
[builder@people .in]$ rpm -e --test libscrollkeeper scrollkeeper
[builder@people .in]$

То есть эти пакеты в чруте лишние и их можно спокойно удалить.

[at@people ~]$ hsh-run --rooter -- rpm -ev {,lib}scrollkeeper
[at@people ~]$ hsh-install fontconfig-devel gtk-doc imake libXrender-devel
libdirectfb-devel libfreetype-devel libglitz-devel libpng-devel xorg-cf-files
[at@people ~]$ 

Какого хрена он их туда ставит особо не понятно.

Это особенно плохо потому что мы хотим сделать систему автоматической пересборки
необходимых пакетов по замыканию, которое вычисляет apt.
То есть например если пришёл новый пакет scrollkeeper то будет выполнена
тестовая пересборка libcairo, а на самом деле тестовая пересборка libcairo не
нужна.
Просто apt с какого-то хрена ставит в чрут scrollkeeper.
Comment 1 Dmitry V. Levin 2008-01-21 23:30:08 MSK
Дело в том, что
$ rpmquery -R gtk-doc |fgrep scrollkeeper
scrollkeeper
Comment 2 at@altlinux.org 2008-01-22 00:45:13 MSK
Точно.  С другой стороны,
[builder@people .in]$ rpm -q --whatrequires scrollkeeper
warning: no package requires scrollkeeper
[builder@people .in]$ rpm -qR gtk-doc |grep scrollkeeper
scrollkeeper  
[builder@people .in]$ 

Зависимость на scrollkeeper в gtk-doc прописана так:
Requires(post,postun): scrollkeeper

То есть требуется только для запуска макросов %update_scrollkeeper и
%clean_scrollkeeper, а для работы не требуется.

При этом мкросы раскрываются как
$ rpm --eval %update_scrollkeeper
[ -x /usr/bin/scrollkeeper-update ] && /usr/bin/scrollkeeper-update -q ||:
$ rpm --eval %clean_scrollkeeper 
[ "$1" = 0 -a -x /usr/bin/scrollkeeper-update ] && /usr/bin/scrollkeeper-update
-q ||:
$

То есть у них тоже необязательный запуск.

А теперь внимание, сюрприз:

$ rpm -qf /usr/bin/scrollkeeper-update
librarian-0.7.0-alt6
$ rpm -qR librarian |grep scrollk
$

Казалось бы, при чем здесь scrollkeeper.

Я всё больше склоняюсь к мысли, что нужно сделать (безусловный) автоматический
поиск зависимостей в %post/%pre скриптах, а вручную зависимости _вообще_ не
писать.  А макросы для %pre/%post скриптов можно написать достаточно аккуратно,
чтобы зависимости искались как надо (или, наоборот, не искались, как следовало
бы сделать в данном случае).

$ sudo apt-get install scrollkeeper
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  libscrollkeeper
The following packages will be REMOVED:
  gnumeric librarian yelp
The following NEW packages will be installed:
  libscrollkeeper scrollkeeper
0 upgraded, 2 newly installed, 3 removed and 1 not upgraded.
Need to get 0B/272kB of archives.
After unpacking 30.9MB disk space will be freed.
Do you want to continue? [Y/n] 

Что-то бред какой-то.

[at@people RPMS]$ hsh-install gnumeric librarian yelp scrollkeeper
Reading Package Lists...
Building Dependency Tree...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
  librarian: Obsoletes: scrollkeeper (< 0.3.14.rarian)
  scrollkeeper: PreDepends: libscrollkeeper (= 0.3.14-alt12)
                Depends: libscrollkeeper.so.0()(64bit)
E: Broken packages
hsh-install: failed to calculate package file list.
hsh-install: Failed to generate package file list.
[at@people RPMS]$ 
Comment 3 Dmitry V. Levin 2008-01-22 01:14:20 MSK
(In reply to comment #2)
> А теперь внимание, сюрприз:
> 
> $ rpm -qf /usr/bin/scrollkeeper-update
> librarian-0.7.0-alt6
> $ rpm -qR librarian |grep scrollk
> $
> 
> Казалось бы, при чем здесь scrollkeeper.
> 
> $ sudo apt-get install scrollkeeper
> Reading Package Lists... Done
> Building Dependency Tree... Done
> The following extra packages will be installed:
>   libscrollkeeper
> The following packages will be REMOVED:
>   gnumeric librarian yelp
> The following NEW packages will be installed:
>   libscrollkeeper scrollkeeper
> 0 upgraded, 2 newly installed, 3 removed and 1 not upgraded.
> Need to get 0B/272kB of archives.
> After unpacking 30.9MB disk space will be freed.
> Do you want to continue? [Y/n] 
> 
> Что-то бред какой-то.
> 
> [at@people RPMS]$ hsh-install gnumeric librarian yelp scrollkeeper
> Reading Package Lists...
> Building Dependency Tree...
> Some packages could not be installed. This may mean that you have
> requested an impossible situation or if you are using the unstable
> distribution that some required packages have not yet been created
> or been moved out of Incoming.
> The following information may help to resolve the situation:
> 
> The following packages have unmet dependencies:
>   librarian: Obsoletes: scrollkeeper (< 0.3.14.rarian)
>   scrollkeeper: PreDepends: libscrollkeeper (= 0.3.14-alt12)
>                 Depends: libscrollkeeper.so.0()(64bit)
> E: Broken packages
> hsh-install: failed to calculate package file list.
> hsh-install: Failed to generate package file list.
> [at@people RPMS]$ 

2ktirf: Что делают в Сизифе пакеты *scrollkeeper*?
Comment 4 at@altlinux.org 2008-01-22 15:52:12 MSK
Кстати вызов %update_scrollkeeper происходит для пакета gtk-doc-manual:

%post manual
%update_scrollkeeper

%postun manual
%clean_scrollkeeper

А зависимость на scrollkeeper стоит в пакете gtk-doc.  Как бы всю эту лавочку
разом прикрыть.  Потому что людишки когда вручную пишут ошибаются безбожно, да и
сам я аз есмь тово.

$ rpm -q --scripts gtk-doc
$ rpm -qR gtk-doc |grep scrollk
scrollkeeper  
$ 
Comment 5 Alexey Rusakov 2008-01-22 17:07:42 MSK
gtk-doc не должен содержать вызовы этих скриптов и требовать scrollkeeper, это
отдельный баг.

Что касается взаимоотношений librarian и scrollkeeper, они просты: librarian -
это нестабильное замещение scrollkeeper, с предоставлением обратной
совместимости по вызовам. Scrollkeeper потихоньку доживает свой век, но пока
стабильнее, чем librarian; кроме того, librarian нет в бранче, есть только
scrollkeeper.