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

Оффлайн ut1

  • Завсегдатай
  • *
  • Сообщений: 163
  • Simply Linux P7 64bit
Есть ли что-то вроде apt-file? Т.е найти пакет по файлу в нем. И список файлов в пакете (пакет не установлен)

Для тех, кто только начал читать эту длинную тему:

В Сизиф собрали apt-file. Если с ним не будет проблем, то скоро он появится и в p8
                                                                                                                                                            ruslandh@
« Последнее редактирование: 31.08.2017 08:31:43 от ruslandh »

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 003
    • Домашняя страница
    • Email
Re: поиск по файлу в репозитории
« Ответ #1 : 25.04.2012 00:54:04 »
Есть ли что-то вроде apt-file? Т.е найти пакет по файлу в нем. И список файлов в пакете (пакет не установлен)
Я делаю grep по base/contents_index на сервере с зеркалом.
Андрей Черепанов (cas@)

Оффлайн black

  • alt linux team
  • ***
  • Сообщений: 461
Re: поиск по файлу в репозитории
« Ответ #2 : 25.04.2012 10:20:09 »
А вот так не пойдет?
apt-get install /sbin/iwlist
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Выбрано wireless-tools для '/sbin/iwlist'
Следующие дополнительные пакеты будут установлены:
  wireless-tools

Оффлайн SUNNY

  • Завсегдатай
  • *
  • Сообщений: 61
    • Email
Re: поиск по файлу в репозитории
« Ответ #3 : 30.05.2015 19:09:07 »
Многие утверждают, что такая функция как поиск пакета по фрагменту полного пути, входящего в его состав файла не нужна. А вот в классических дистрибутивах, основанных на APT, есть такая утилита apt-file, специально для этого предназначенная. В Altlinux такой утилиты нет. Вот как применители Altlinux будут решать такую задачу: Нужно знать, какие пакеты, содержащие модули ядра, есть в репозитории и какие из них у меня установлены. Зная, что все модули ядра устанавливаются в /lib/modules, в Debian бы я воспользовался командой "apt-file search /lib/modules". Как поступить тут? Писать скрипт? И что в этом скрипте должно делаться? ls -R /lib/modules, потом каждая строка вывода передаётся в rpm -qf, потом убираются одинаковые строки? Я не соображу как это сделать?
« Последнее редактирование: 31.05.2015 08:51:19 от sb »

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 183
  • antohami@
Re: поиск по файлу в репозитории
« Ответ #4 : 30.05.2015 19:24:23 »
Вот есть пара обсуждений в багзилле по этому поводу: https://bugzilla.altlinux.org/show_bug.cgi?id=14449 и https://bugzilla.altlinux.org/show_bug.cgi?id=30883
« Последнее редактирование: 31.05.2015 08:51:24 от sb »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: поиск по файлу в репозитории
« Ответ #5 : 30.05.2015 22:36:41 »
...

Для установленных пакетов можно так:

Составление списка установленных пакетов
$ rpm -qa --qf '%{name}\n'|sort > /tmp/inst-pkgs.txt

Добавить описание и листинг каждого установленного пакета в файл inst-pkgs-content.txt; имена пакетов брать из файла inst-pkgs.txt
$ while read line; do rpm -qivl $line >> /tmp/inst-pkgs-content.txt; done < /tmp/inst-pkgs.txt

Найти строки по модели
$ grep '\/etc\/cron' /tmp/inst-pkgs-content.txt
drwxr-x---    2 root    root                0 апр 25  2003 /etc/cron.daily
drwxr-x---    2 root    root                0 апр 25  2003 /etc/cron.hourly
drwxr-x---    2 root    root                0 апр 25  2003 /etc/cron.monthly
drwxr-x---    2 root    root                0 апр 25  2003 /etc/cron.weekly
-rw-------    1 root    root              184 апр 25  2003 /etc/crontab
-rwxr-xr-x    1 root    root               55 июл 21  2011 /etc/cron.daily/logrotate
-rw-r--r--    1 root    root              587 ноя 28  2012 /etc/cron.d/mdadm
-rwx------    1 root    root              384 июн 30  2011 /etc/cron.daily/stmpclean
-rw-r--r--    1 root    root              184 мар  9  2012 /etc/cron.d/sysstat
-rw-r-----    1 root    crontab             0 сен 20  2011 /etc/cron.allow
drwx------    2 root    root                0 сен 20  2011 /etc/cron.d
-rw-r-----    1 root    crontab             0 сен 20  2011 /etc/cron.deny
-rw-r--r--    1 root    root              167 сен 20  2011 /etc/crontab.template
« Последнее редактирование: 31.05.2015 08:51:30 от sb »

Оффлайн Koi

  • alt linux team
  • ***
  • Сообщений: 1 893
  • валар дохаэрис
    • Канал на youtube
Re: поиск по файлу в репозитории
« Ответ #6 : 30.05.2015 23:14:28 »
Есть epm но когда я им пытался пользоваться, но искал очень долго, проще было интернет сервис юзать.
А вообще проблема актуальна.
Для установленных пакетов можно так:
Ну нельзя же все репы на пк поставить.
« Последнее редактирование: 31.05.2015 08:51:41 от sb »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: поиск по файлу в репозитории
« Ответ #7 : 31.05.2015 01:27:22 »
Для установленных пакетов можно так:
Ну нельзя же все репы на пк поставить.

Это будет слишком круто :)

Но с локальным зеркалом всё же можно.
Скрипт только немного поменять.

Загнать все файлы в файл-список
# ls /var/cache/apt/archives/*|sort|grep rpm$ > /tmp/rpm-list-all.txt
/var/cache/apt/archives/aalib_1.4-alt7rc5_i586.rpm
/var/cache/apt/archives/aptitude_0.4.5-alt6_i586.rpm
...

Вывести на печать (две пустых строки для лучшего восприятия)
# rpm -qpl --queryformat '\n\n%{NAME}\n' /var/cache/apt/archives/whdd_2.2-alt0.M70T.1_i586.rpm


whdd
/usr/sbin/whdd

где:
/var/cache/apt/archives/whdd_2.2-alt0.M70T.1_i586.rpm
одна из строк в переменной $line в которую читается из rpm-list-all.txt - см. скрипт выше в треде.
Соответственно и здесь всё загоняется в файл и дальше поиск маской через grep или less
Только делать придётся в два прохода, для i586 и для noarch
Ну или можно через
# find /local/mirror/ -name '*.rpm'|sort
создать список, тогда в один проход.


Иначе юзать contents_index'ы
« Последнее редактирование: 31.05.2015 08:51:48 от sb »

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 9 001
Re: поиск по файлу в репозитории
« Ответ #8 : 31.05.2015 08:22:35 »
Да, человеческий поиск подобной информации в альте представлен лишь костылингом, увы. Точнее, нет возможности без подключения к сети выяснить по файлам то, что нужно. Обязательно надо выкачивать contents_index либо ковыряться в p.a.o
Можно было бы снизить остроту проблемы, реализовав поиск по содержимому на самом p.a.o (подобно тому, как это сделано, например, на ресурсах того же debian). Ведь парадокс: информация есть, а чтобы её вытащить, надо городить огород из скриптов или иметь коннект к сети (другой вариант - иметь локальное зеркало, что далеко не всегда возможно реализовать), чтобы скачать файл с индексом вручную. Не по-человечески это, должна быть простая утилита, которая будет выполнять подобный поиск среди всей совокупности пакетов в репозитории, пусть для этого и потребуется подключение к сети (для доступа к индексу).
До сих пор не могу понять, почему бы этот файл не сжать тем же gzip'ом или xz и не положить копию рядом. Такой файл совершенно не обременительно будет скачивать локально и проводить с ним необходимые манипуляции. Там обычный текст, ужаться он должен, как минимум, на порядок, имхо.

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 9 001
Re: поиск по файлу в репозитории
« Ответ #9 : 31.05.2015 12:06:26 »
Наваял тут скрипт на shell'е для поиска по путям среди записей индексов. Используется просто (от пользователя, права root не требуются): sh имя_скрипта.sh аргумент1 аргумент2...аргументNПри вызове без аргументов можно лишь обновить/закачать индексы (в зависимости от того, закачивались они ранее или нет). Для поиска скрипт требует: grep, apt-repo, sed, а для работы с файлами индексов (закачка или обновление локальной копии из репозитория) - wget.
Совпадение результата обрабатывается простым grep'ом, поэтому возможно наличие мусора в выводе (частичное совпадение, а не точное).
Протестировал, есть косяк по определению адреса. Будем допиливать дальше. По результатам постараюсь выложить, если допилю (не забуду).

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 20 003
    • Домашняя страница
    • Email
Re: поиск по файлу в репозитории
« Ответ #10 : 31.05.2015 15:08:46 »
Зубков сказал, что прикрутил json-api. Надо проверять.
Андрей Черепанов (cas@)

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 9 001
Re: поиск по файлу в репозитории
« Ответ #11 : 31.05.2015 15:27:47 »
Зубков сказал, что прикрутил json-api. Надо проверять.
Проверил, /bin/bash нашёлся без проблем. Спасибо Игорю!

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 9 001
Re: поиск по файлу в репозитории
« Ответ #12 : 31.05.2015 15:32:20 »
Ещё бы сделать возможность поиска по точному совпадению без учёта частичных (в виде крыжика, например). А так уже большое подспорье в поиске.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Re: поиск по файлу в репозитории
« Ответ #13 : 31.05.2015 18:56:23 »
Там обычный текст, ужаться он должен, как минимум, на порядок, имхо.

Угу... :-)
$ gzip -l contents_index.gz
         compressed        uncompressed  ratio uncompressed_name
            8444448           109950810  92.3% contents_index

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 9 001
Re: поиск по файлу в репозитории
« Ответ #14 : 31.05.2015 20:02:56 »
Протестировал, есть косяк по определению адреса. Будем допиливать дальше. По результатам постараюсь выложить, если допилю (не забуду).
Доделал, проверил на двух подключеных репах. Вроде работает. Скрипт во вложении. Если кто проверит, было бы не лишним. А так может кому пригодится.
ВНИМАНИЕ! Если запуск скрипта первый, то готовьтесь к закачке индексных файлов :)

Наваял тут скрипт на shell'е для поиска по путям среди записей индексов. Используется просто (от пользователя, права root не требуются):
sh имя_скрипта.sh аргумент1 аргумент2...аргументNПри вызове без аргументов можно лишь обновить/закачать индексы (в зависимости от того, закачивались они ранее или нет). Для поиска скрипт требует: grep, apt-repo, sed, а для работы с файлами индексов (закачка или обновление локальной копии из репозитория) - wget.
Совпадение результата обрабатывается простым grep'ом, поэтому возможно наличие мусора в выводе (частичное совпадение, а не точное).