[devel] querying alternatives providers; was: Re: re-writing GNU C; part1.4.1: .rpm produced

Ivan Zakharyaschev imz на altlinux.org
Ср Фев 17 12:46:12 MSK 2016


On Wed, 17 Feb 2016, Igor Vlasenko wrote:

> On Wed, Feb 17, 2016 at 11:19:24AM +0300, Ivan Zakharyaschev wrote:
>> (BTW, не смог найти команду, которая бы показывала бы, какие есть
>> установленные в системе альтернативы для определённого пути. Например: хочу
>> знать, какие есть альтернативы для /usr/bin/x86_64-alt-linux-gcc . Только
>> grep-ать /etc/alternatives/?)
>
> По базе repocop можно пробить (базу можно скачать с repocop.altlinux.org:
> http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz )
>
> $ sqlite3 .repocop/db/altlinux-alternatives.db
> sqlite> select * from altlinux_alternatives where altalternative = '/usr/bin/gcc';
> gcc-common-1.4.20-alt1.x86_64|/etc/alternatives/packages.d/gcc-common|0|/usr/bin/gcc|/usr/bin/gcc_wrapper|40|1|0|0

Спасибо, полезно знать! Это такой глобальный запрос по всему Sisyphus 
получается, а не просто локальный в своей системе (про отсутствие команды 
для которого я удивлялся).

Заметил, что подобную информацию можно и через APT получить.

Заметил, что если пакет несёт альтернативу, то у него в provides есть этот 
путь с приоритетом в качестве версии:

$ rpm -q gcc-common --provides
/usr/bin/gcc = 40
gcc-common = 1.4.19-alt1
$ rpm -q gcc5 --provides
gcc = 5.2.1
/usr/bin/gcc
/usr/bin/x86_64-alt-linux-gcc = 511
/usr/bin/x86_64-alt-linux-gcc-ar = 511
/usr/bin/x86_64-alt-linux-gcc-nm = 511
/usr/bin/x86_64-alt-linux-gcc-ranlib = 511
/usr/bin/x86_64-alt-linux-gcov = 511
/usr/bin/x86_64-alt-linux-gcov-tool = 511
/usr/share/man/man1/gcc.1.bz2 = 511
/usr/share/man/man1/gcov.1.bz2 = 511
gcc5 = 5.2.1-alt1
$

Ну значит, можно по этим путям делать запросы к APT:

apt> showpkg /usr/bin/gcc
Package: /usr/bin/gcc
Versions:

Reverse Depends:
   libopencv2.4-examples,/usr/bin/gcc
   icfs,/usr/bin/gcc
Dependencies:
Provides:
Reverse Provides:
gcc5 5.3.1-alt1
gcc4.9 4.9.2-alt5
gcc4.8 4.8.2-alt5
gcc4.7 4.7.2-alt10
gcc4.6 4.6.3-alt11
gcc4.5 4.5.4-alt4
gcc4.4 4.4.7-alt4
gcc4.3 4.3.2-alt20
gcc4.1 4.1.2-alt11
gcc3.4 3.4.5-alt16
gcc-common 1.4.20-alt1
apt> showpkg /usr/bin/x86_64-alt-linux-gcc
Package: /usr/bin/x86_64-alt-linux-gcc
Versions:

Reverse Depends:
   libginac-devel,/usr/bin/x86_64-alt-linux-gcc
Dependencies:
Provides:
Reverse Provides:
gcc5 5.3.1-alt1
gcc4.9 4.9.2-alt5
gcc4.8 4.8.2-alt5
gcc4.7 4.7.2-alt10
gcc4.6 4.6.3-alt11
gcc4.5 4.5.4-alt4
gcc4.4 4.4.7-alt4
gcc4.3 4.3.2-alt20
gcc4.1 4.1.2-alt11
gcc3.4 3.4.5-alt16
apt>

Вот эта вот обнаружившаяся зависимость libginac-devel от можно сказать 
внутреннего /usr/bin/x86_64-alt-linux-gcc кажется не очень удачной 
(особенно для подмены gcc -- поэтому я думал передвигать как-то такие пути 
при пересборке с подменённым gcc, чтобы выявлять случаи прямого 
обращения.)

-- 
Best regards,
Ivan


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