Автор Тема: Как найти пакет в altlinux с неизвестным именем?  (Прочитано 93072 раз)

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
connectiva - это не debian - это первый дистрибутив с apt-rpm

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Про поиск пакета по файлу
« Ответ #151 : 18.07.2016 21:12:27 »
Если бы пакеты были собраны для Slackware 14.2, то в Salix 14.2 вы бы их поставили без проблем (с высокой долей вероятности), - Salix это дериватив Slackware и бинарно совместим с ним. И цели на Слакварный репозиторий у Salix по-дефолту.
Мне очень льстит, что вы даете очень хорошие технические ответы подразумевая, судя по тексту, что я по уровню знаний в сфере Unix подобных систем как минимум не далек от Вас, но уверяю это ошибочное суждение ;)  я не стесняюсь и говорю открыто я почти нуль в них!

Я знаю :-)

Над каждой выборкой команд и истории из терминала, в том числе приведенных Вами выше в посте сижу пытаясь понять и перевести (не английский, а именно смысловую нагрузку) бывает по часу )))   
Поверьте это довольно тяжело )))).

Поэтому выбросы выше были приведены только такие. А последний из них, т.е. эмуляция (опция -s означает simulate - симуляция, имитация, в данном случае имитация установки) не выругался ни на одну неудовлетворённую зависимость на библиотеки.
Мне показалось этого выброса apt-а мало для проверки, поэтому все библиотеки зависимостей были отслежены руками. Большая часть из них в альтовых сизифных пакетах. Меньшая часть в пакете драйвера.
Зачем? Потому что зависимости в пакете драйвера не ссылаются на требуемый пакет.
И это при том, что имена требуемых пакетов были отслежены не все.
И поверьте, это был тихий ужас.
(depends пакета указывает на требуемую библиотеку, но не пакет который ему нужен)

Тут вот в чём квест:
Если удалить хотя бы один пакет содержащий требуемую драйверу библиотеку,
# rpm -e --nodeps libstdc++6

то никакой apt или rpm вам уже не поможет чтобы просто и быстро поставить пакет с драйвером
# apt-get reinstall  /home/user/Загрузки/temporar/mf4410-64bit/uk_eng/32-bit_Driver/RPM/cndrvcups-common-3.40-1.i386.rpm
apt-get: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
# rpm -Uhv /home/user/Загрузки/temporar/mf4410-64bit/uk_eng/32-bit_Driver/RPM/cndrvcups-common-3.40-1.i386.rpm
ошибка: неудовлетворенные зависимости:
libstdc++.so.6   нужен для cndrvcups-common-3.40-1
libstdc++.so.6(CXXABI_1.3)   нужен для cndrvcups-common-3.40-1
Вам нужно будет самому найти, какой пакет содержит требуемую библиотеку.

Вот зачем нужен не сломанный поиск пакета по файлу. Который обязан работать всегда. Иначе жизнь пользователя под Линукс временами может превратиться в ад. И этот поиск нужен не сегодня, а ещё позавчера.

Но если бы этот поисковик пакетов по файлу был бы, можно было бы провернуть что-то вроде такого (команда от фонаря):
поисковик [apt-file] search libstdc++.so.6
libstdc++6: usr/lib/libstdc++.so.6
libstdc++6: usr/lib/libstdc++.so.6.0.21 
и как-то так получить вывод: пакет - путь/файл
А если из depends пакета вытянуть зависимости библиотек, то можно было бы подсунув поисковику файл со списком библиотек, в пару команд получить список необходимых пакетов, который можно было бы подсунуть apt-get-у.

Я не уверен, что вы поняли из этого хотя бы половину, но представьте себе, на сколько ваша жизнь стала бы проще.
« Последнее редактирование: 18.07.2016 21:45:01 от Speccyfighter »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
этом объяснении отсутствует поле дистрибуция:
Sisyphus - это дистрибуция
i586 noarch x86_64 x86_64-i586 - с точки зрения формата, это компоненты
Вы путаете
url -
  ftp://ftp.conectiva.com/pub/conectiva/.0
  http://ftp.altlinux.org/pub/distributions/ALTLinux
дистрибуция -
6.0/conectiva
Sisyphus/i586
компоненты -
  main extra non-us non-free
  classic debuginfo

Оффлайн Olej

  • Давно тут
  • **
  • Сообщений: 201
ptitude умеет искать используя более сложные конструкции.
Ну и используйте его, только такие задачи встречаются крайне редко.
Ага ... только ТС обратился с таким вот точно вопросом "как найти пакет?" - а ему советуют всякое фуфло, по смыслу: покопайтесь (глазами) в репозитарии Altlinux...

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Ага ... только ТС обратился с таким вот точно вопросом "как найти пакет?" - а ему советуют всякое фуфло, по смыслу: покопайтесь (глазами) в репозитарии Altlinux...
Редактировать сообщение
Это редкий вопрос. Он может возникнуть только при установке стронних пакетов

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Обычно
apt-get install имя_пакетасам находит всё нужное.

Оффлайн Olej

  • Давно тут
  • **
  • Сообщений: 201
Обычно
apt-get install имя_пакетасам находит всё нужное.
Сам то находит ... но только то, что вызнаете наперёд.
С контекстным поиском он работать толком не умеет.
Но самое главное: а если я (пока) не хочу устанавливать, хочу только примерится, что будет стоять?

Хватит впаривать - всё познаётся только в сравнении.
Сравнение пакетной системы Altlinux с другими дистрибутивами (а я могу квалифицировано сравнивать с полтора десятками дистрибутивов) находится на уровне: хуже всех сравниваемых, нигде нет такой скудности возможностей ... и такого множества разговоров как всё здорово;-D

Оффлайн Olej

  • Давно тут
  • **
  • Сообщений: 201
Re: Про поиск пакета по файлу
« Ответ #157 : 19.07.2016 00:29:44 »
Вот зачем нужен не сломанный поиск пакета по файлу. Который обязан работать всегда. Иначе жизнь пользователя под Линукс временами может превратиться в ад. И этот поиск нужен не сегодня, а ещё позавчера.
И более того, такой поиск по пакетам есть во всех дистрибутивах Linux, во всём великом их множестве, за исключением одного единственного, и этот уникум - AltLinux.:-o

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: поиск по файлу в репозитории
« Ответ #158 : 19.07.2016 01:20:10 »
Парни, решил в вашу тусовку немножко всунуться и посмотреть как распарсить прямой линк на contents_index для p8 и Sisyphus (а между ними в формате есть разница) и получилось вот что:

Сизифные цели не содержат (идентификатора) поля между типом (rpm) и uri (http...)
Вернее содержат, но второе поле не обязательно может быть в наличии
# apt-repo
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux Sisyphus/i586 classic
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux Sisyphus/noarch classic

и скрипт отработает вот так
# apt-repo | awk -F" " '{ if ( $2 ~ /http/ ) { print $2 "/" $3 } else if ( $3 ~ /http/ ) \
> { print $3 "/" $4 } }' | sed 's/$/\/base\/contents_index/g'
http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/i586/base/contents_index
http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/noarch/base/contents_index

А цели в p8 имеют поле с [p8]
# grep -rh http /home/user/Загрузки/temporar/apt-conf-branch_p8/etc/apt/sources.list.d/alt.list
#rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/i586 classic
#rpm [p8] http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/noarch classic

и скрипт отработает так
# grep -rh http /home/user/Загрузки/temporar/apt-conf-branch_p8/etc/apt/sources.list.d/alt.list | \
> awk -F" " '{ if ( $2 ~ /http/ ) { print $2 "/" $3 } else if ( $3 ~ /http/ ) { print $3 "/" $4 } }' | \
> sed 's/$/\/base\/contents_index/g'
http://ftp.altlinux.org/pub/distributions/ALTLinux/p8/branch/i586/base/contents_index
http://ftp.altlinux.org/pub/distributions/ALTLinux/p8/branch/noarch/base/contents_index

Разборки:

Разделитель между полями - пробел ( -F" "  )
Если второе поле содержит "http",
то напечатать второе и третье поле, а разделитель пробел между полями заменить на слэш
и количество пробелов между полями значения не имеет
awk -F" " '{ if ( $2 ~ /http/ ) { print $2 "/" $3 }

Иначе если третье поле содержит "http",
ну и дальше то же самое со смешением равным единице по номеру полей
else if ( $3 ~ /http/ ) { print $3 "/" $4 } }' | \

sed добавляет в конец каждой строки часть пути, а именно "/base/contents_index"
sed 's/$/\/base\/contents_index/g'

В результате получаем прямой линк на contents_index вне зависимости от того что это, p8 или Sisyphus, что соответствует полному пути
$ sed -n '8,28p' ./contents_intex.txt

                                  Index of /pub/ALTLinux/p8/branch/i586/base/

   ---------------------------------------------------------------------------------------------------------

 ../
 ds.classic/                                        02-Dec-2014 14:50                   -
 ds.debuginfo/                                      02-Dec-2014 14:50                   -
 contents_index                                     16-Jul-2016 15:53           143327194
 pkglist.classic.xz                                 16-Jul-2016 15:46            18994692
 pkglist.debuginfo.xz                               16-Jul-2016 15:46             2954468
 release                                            16-Jul-2016 15:46                 896
 release.classic                                    16-Jul-2016 15:46                 133
 release.debuginfo                                  16-Jul-2016 15:46                 135
 srclist.classic.xz                                 16-Jul-2016 15:45             1798448

   ---------------------------------------------------------------------------------------------------------

References

   Visible links
« Последнее редактирование: 19.07.2016 02:19:54 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Обычно
apt-get install имя_пакетасам находит всё нужное.

А-а-а...
# apt-cache search player|wc -l
634
Ну тогда ладно.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
connectiva - это не debian - это первый дистрибутив с apt-rpm

Цитировать
APT-RPM is a version of the Advanced Packaging Tool modified to work with the RPM Package Manager. It was originally ported to RPM by Alfredo Kojima and then further developed and improved by Gustavo Niemeyer, both working for the Conectiva Linux distribution at the time.
Цитировать
http://apt-rpm.org/about.shtml
About

APT-RPM is a port of Debian's APT tools to a RPM based distribution (Conectiva, Red Hat, SuSE, ALT-Linux, etc). APT is an advanced package management utility front-end which allows you to easily perform package installation, upgrading and removal. Dependencies are automatically handled, so if you try to install a package that needs others to be installed, it will download all needed packages and install them.
« Последнее редактирование: 19.07.2016 03:58:55 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Это редкий вопрос. Он может возникнуть только при установке стронних пакетов

Не умеет ну и не надо, это плохая идея.
apt-rpm труп. Последний коммит был в 2012-ом году.
Линк на архив рассылки мёртвый.
apt-rpm нужны дополнительные утилиты расширяющие его функционал.
Расширенный поиск в частности.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: поиск по файлу в репозитории
« Ответ #162 : 19.07.2016 04:29:42 »
В принципе, это не планировалось, но этот скрипт умеет работать и со старым форматом sources.list, например для p7:

Как выглядят цели в sources.list для p7
# grep -rh http /home/user/Загрузки/temporar/apt-conf-branch_p7/etc/apt/sources.list.d/alt.list
#rpm [p7] http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch i586 classic
#rpm [p7] http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch noarch classic

Результат работы скрипта
# grep -rh http /home/user/Загрузки/temporar/apt-conf-branch_p7/etc/apt/sources.list.d/alt.list | \
> awk -F" " '{ if ( $2 ~ /http/ ) { print $2 "/" $3 } else if ( $3 ~ /http/ ) { print $3 "/" $4 } }' | \
> sed 's/$/\/base\/contents_index/g'
http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch/i586/base/contents_index
http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch/noarch/base/contents_index

$ head -n 21 ./contents_intex.txt
FTP directory ftp://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch/i586/base/

 drwxr-xr-x    1 ftp      ftp            -              ..
 -rw-r--r--    1 ftp      ftp    109383354 июл 15 12:14 contents_index
 drwxr-xr-x    1 ftp      ftp          152 дек  1  2014 ds.classic
 drwxr-xr-x    1 ftp      ftp          152 дек  1  2014 ds.debuginfo
 -rw-r--r--    1 ftp      ftp     17267485 май 13  2013 pkglist.classic.bz2
 -rw-r--r--    1 ftp      ftp     16420676 июл 15 12:10 pkglist.classic.xz
 -rw-r--r--    1 ftp      ftp      2868430 май 13  2013 pkglist.debuginfo.bz2
 -rw-r--r--    1 ftp      ftp      2533008 июл 15 12:10 pkglist.debuginfo.xz
 -rw-r--r--    1 ftp      ftp          896 июл 15 12:10 release
 -rw-r--r--    1 ftp      ftp          133 июл 15 12:10 release.classic
 -rw-r--r--    1 ftp      ftp          135 июл 15 12:10 release.debuginfo
 -rw-r--r--    1 ftp      ftp      1654181 май 13  2013 srclist.classic.bz2
 -rw-r--r--    1 ftp      ftp      1607828 июл 15 12:09 srclist.classic.xz

   ---------------------------------------------------------------------------------------------------------

References

   Visible links

Т.е. в рамках своего функционала этот скрипт универсален.

Можно добавить двоеточие к протоколу чтобы встретился именно протокол, а не слуайное совпадение в строке адреса на одном из зеркал:
# grep -rh http /home/user/Загрузки/temporar/apt-conf-branch_p7/etc/apt/sources.list.d/alt.list | \
awk -F" " '{ if ( $2 ~ /http:/ ) { print $2 "/" $3 } else if ( $3 ~ /http:/ ) { print $3 "/" $4 } }' | \
sed 's/$/\/base\/contents_index/g'
http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch/i586/base/contents_index
http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch/noarch/base/contents_index

И поехали качать:
# grep -rh http /home/user/Загрузки/temporar/apt-conf-branch_p7/etc/apt/sources.list.d/alt.list | \
awk -F" " '{ if ( $2 ~ /http:/ ) { print $2 "/" $3 } else if ( $3 ~ /http:/ ) { print $3 "/" $4 } }' | \
sed 's/$/\/base\/contents_index/g' | \
while read line; do wget -c $line -P .; done
--2016-07-19 04:54:39--  http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch/i586/base/contents_index
Распознаётся ftp.altlinux.org (ftp.altlinux.org)… 62.152.55.238
Подключение к ftp.altlinux.org (ftp.altlinux.org)|62.152.55.238|:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 109383354 (104M) [application/octet-stream]
Сохранение в: «./contents_index»

contents_index                2%[>                                          ]   2,89M   288KB/s    eta 6m 13s
^C

Частично скачанный contents_index из p7/branch
# head -n 10 ./contents_index
/bin filesystem
/bin/arp net-tools
/bin/ash ash
/bin/ash.static ash-static
/bin/aumix-minimal aumix-minimal
/bin/awk gawk
/bin/basename coreutils
/bin/bash bash
/bin/bash2 bash
/bin/bsh ash
« Последнее редактирование: 19.07.2016 05:09:02 от Speccyfighter »

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 246
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: Про поиск пакета по файлу
« Ответ #164 : 19.07.2016 07:24:31 »
Вот зачем нужен не сломанный поиск пакета по файлу. Который обязан работать всегда. Иначе жизнь пользователя под Линукс временами может превратиться в ад. И этот поиск нужен не сегодня, а ещё позавчера.
И более того, такой поиск по пакетам есть во всех дистрибутивах Linux, во всём великом их множестве, за исключением одного единственного, и этот уникум - AltLinux.:-o
голословное утверждение.