Как узнать из какого репозитория установлен пакет
Перейти к содержимому

Как узнать из какого репозитория установлен пакет

  • автор:

Получение названия repository из которого установлен пакет rpm

Всем привет! Нужна помощь в получении названия репозитория для установленных в системе пакетов. Я могу получить вот так: repoquery —installed ‘*’ —queryformat=’% % % %’ Я так понимаю что repoquery обращается к базе данных /var/lib/rpm Моя задача получить такую же информацию в python:

#!/usr/bin/python3 import sys import rpm import json from datetime import datetime if (len(sys.argv) != 3): print ('invalid amount of input arguments!') sys.exit() # user inputs dbtype = sys.argv[1] dbpath = sys.argv[2] # add macro to be used by rpm rpm.addMacro("_db_backend", dbtype) rpm.addMacro("_dbpath", dbpath) # Open database ts = rpm.TransactionSet() ts.openDB() # remove macro for future cases rpm.delMacro("_db_backend") rpm.delMacro("_dbpath") allPackages = [] # retrieve all packages from BDB mi = ts.dbMatch() # build JSON object from all packages for easier parsing for hdr in mi: pkgDict = <> allPackages.append(pkgDict) pkgDict['NAME'] = hdr[rpm.RPMTAG_NAME] pkgDict['VERSION'] = hdr[rpm.RPMTAG_VERSION] pkgDict['RELEASE'] = hdr[rpm.RPMTAG_RELEASE] pkgDict['ARCH'] = hdr[rpm.RPMTAG_ARCH] pkgDict['DISTRIBUTION'] = hdr[rpm.RPMTAG_VENDOR] pkgDict['OS'] = hdr[rpm.RPMTAG_PLATFORM] pkgDict['INSTALLTIME'] = datetime.utcfromtimestamp(hdr[rpm.RPMTAG_INSTALLTIME]).strftime('%Y-%m-%d %H:%M:%S') print (json.dumps(allPackages, indent=4))

Узнать из какого репозитория установлен пакет

Собственно как сабж в дебианоподобных дистрах (конкретно maemo 5)?

slovazap ★★★★★
07.04.10 02:48:49 MSD

synaptic кажет, при сортировке по репозиториям

Sylvia ★★★★★
( 07.04.10 02:50:23 MSD )

Вроде эта информация вместе с пакетом не хранится. Можно попробовать сравнить версию с `apt-cache policy имя_пакета`.

melkor217 ★★★★★
( 07.04.10 02:50:52 MSD )

Dudraug ★★★★★
( 07.04.10 03:23:18 MSD )
Ответ на: комментарий от melkor217 07.04.10 02:50:52 MSD

apt-cache policy даст эту инфу, да.

Dudraug ★★★★★
( 07.04.10 03:23:46 MSD )
Ответ на: комментарий от Dudraug 07.04.10 03:23:18 MSD

Похоже на то, но не совсем. Оно для всех пакетов выдает

а они ставились из

собственно из какого именно мне и нужно узнать

slovazap ★★★★★
( 07.04.10 04:35:05 MSD ) автор топика

Берешь Packages из каждого репозитория и парсишь. Костыль, да.

ptah_alexs ★★★★★
( 07.04.10 06:07:24 MSD )
Ответ на: комментарий от ptah_alexs 07.04.10 06:07:24 MSD

Видимо так, да. Спасибо.

slovazap ★★★★★
( 07.04.10 15:12:57 MSD ) автор топика
Ответ на: комментарий от slovazap 07.04.10 04:35:05 MSD

$ apt-cache policy gcc gcc: Установлен: 4:4.4.1-1ubuntu2 Кандидат: 4:4.4.1-1ubuntu2 Таблица версий: *** 4:4.4.1-1ubuntu2 0 500 http://archive.ubuntu.com karmic/main Packages 100 /var/lib/dpkg/status 

Dudraug ★★★★★
( 07.04.10 19:14:43 MSD )
Ответ на: комментарий от Dudraug 07.04.10 19:14:43 MSD

не. в маемо еще по каталогам разделено, а уже внутри них free и nonfree

madgnu ★★★★★
( 07.04.10 19:47:24 MSD )
Ответ на: комментарий от madgnu 07.04.10 19:47:24 MSD

По идее если free и nonfree разные строчки в /etc/apt/sources.list

То должно работать, хотя может я чего не допираю.

Dudraug ★★★★★
( 07.04.10 19:49:29 MSD )
Ответ на: комментарий от Dudraug 07.04.10 19:49:29 MSD
madgnu ★★★★★
( 07.04.10 19:58:51 MSD )
Ответ на: комментарий от madgnu 07.04.10 19:58:51 MSD

ubuntu/dists считается стандартным путем для убунты. Он его всегда игнорирует в название репа и сам его определяет. а дальше там уже идут main, multiverse, etc.

Дай сюда ради интереса вывод apt-cache policy

Dudraug ★★★★★
( 07.04.10 20:05:06 MSD )
Ответ на: комментарий от Dudraug 07.04.10 20:05:06 MSD

Вот такая вот структура

Как видишь main и non-free внутри lenny

Dudraug ★★★★★
( 07.04.10 20:08:47 MSD )
Ответ на: комментарий от Dudraug 07.04.10 20:08:47 MSD

да я знаю. просто, как видишь, в маемо он игнорирует еще и директорию. там всякие extras, внутри которых free и non-free.

Можно ли узнать откуда именно установлен пакет?

Повторяю ещё раз: ВСЮ доступную ему информацию об УСТАНОВЛЕННОМ пакете pacman показывает вам по ключу -Qi . Всмотритесь в ответ сами – там НЕТ информации о репозитории, значит её НЕЛЬЗЯ узнать у пакмана! Он скачивает пакет в кэш, а потом устанавливает ИЗ КЭША, а не из репозитория. Кроме того, пакет может быть установлен по ключу -U, просто из файла. pacman не хранит информацию о получении пакета (и даже не пишет её в лог!) – все данные установленного пакета берутся из самого пакета.

Участник с: 09 ноября 2009

Natrio
minoshi
to NatrioНе подумайте, что я умничаю, но Вы сами-то всматривались в ответы приведенных Вами команд? 🙂
Где здесь репозиторий?

Повторяю ещё раз: ВСЮ доступную ему информацию об УСТАНОВЛЕННОМ пакете pacman показывает вам по ключу -Qi . Всмотритесь в ответ сами – там НЕТ информации о репозитории, значит её НЕЛЬЗЯ узнать у пакмана! Он скачивает пакет в кэш, а потом устанавливает ИЗ КЭША, а не из репозитория. Кроме того, пакет может быть установлен по ключу -U, просто из файла. pacman не хранит информацию о получении пакета (и даже не пишет её в лог!) – все данные установленного пакета берутся из самого пакета. Должен ли я напоминать Вам, что эта тема создана не в разделе для новичков? Выдержки из мануала в качестве ответа здесь просто не уместны. И, кроме того, я не задавал вопроса «как можно узнать средствами pacman из какого репозитория установлен пакет». 🙂

Участник с: 28 ноября 2009
Участник с: 09 ноября 2009

der_fenix
Создать хук, который будет дописывать в метаинформацию пакета ещё и репозиторий из которого был установлен.

Да, идея, понятна и в принципе реализуема. Навскидку возникает вопрос, а что будет если скачивание пакета идет не средствами pacman, а сторонним загрузчиком (ключ XferCommand из pacman.conf)? Попадет ли тогда название репозитория в метаинформацию?

Участник с: 09 ноября 2009

bobart
Если известно, что пакет установлен, то всё просто:
yaourt -Si nvidia | grep Репо
Если неизвестно, то сначала, например, yaourt -Q nvidia и по результату применять первую команду. Короче, в скрипт. Как — не знаю. Но Natrio знает =)

[root@Nosonja user]# LANG=en_US yaourt -Si gtk-engine-unico | grep "Repo" Repository : nosonja-stable Repository : community [root@Nosonja user]#

Шпаргалка по работе с пакетным менеджером Yum (Yellowdog Updater, Modified)

Используется в популярных Linux дистрибутивах: RedHat, CentOS, Scientific Linux (и других).

Отображение команд и опций

#yum help

Список названий пакетов из репозиторий

#yum list

Список всех доступных пакетов

#yum list available

Список всех установленных пакетов

#yum list installed

Установлен ли указанный пакет

#yum list installed httpd

Список установленных и доступных пакетов

#yum list all

Список пакетов, относящихся к ядру

#yum list kernel

Отображение информации о пакете

#yum info httpd

Список зависимостей и необходимых пакетов

#yum deplist httpd

Найти пакет, который содержит файл

#yum provides "*bin/top"

Поиск пакета по имени и описанию

#yum search httpd #yum search yum

Получить информацию о доступных обновлениях безопасности

#yum updateinfo list security

Вывести список групп

#yum grouplist

Вывести описание и содержимое группы

#yum groupinfo "Basic Web Server"

Установка группы пакетов «Basic Web Server»

#yum groupinstall "Basic Web Server"
#yum groupremove "Basic Web Server"

Проверка на доступные обновления

#yum check-update

Список подключенных репозиториев:

#yum repolist

Информация об определенном репозитории

#yum repoinfo epel

Информация о пакетах в указанном репозитории

#yum repo-pkgs epel list

Установить все пакеты из репозитория

#yum repo-pkgs reponame install

Удалить пакеты установленные из репозитория

#yum repo-pkgs reponame remove
#yum makecache

Проверить локальную базу rpm (поддерживаются параметры dependencies, duplicates, obsoletes, provides)

#yum check #yum check dependencies

Просмотр yum истории (вывод списка транзакций)

#yum history list

Просмотр информации определенной транзакции (установленные пакеты, установленные зависимости)

#yum history info 9
#yum history undo 9
#yum history redo 9

Дополнительно можно просмотреть лог

#cat /var/log/yum.log

Удалить пакеты сохраненные в кэше

#yum clean packages

Удалить все пакеты и метаданные

#yum clean all
#yum install httpd
#yum remove httpd
#yum update httpd

Обновить все установленные пакеты

#yum update

Обновить до определенной версии

#yum update-to

Установить из локальной директории (поиск/установка зависимостей будут произведены из подключенных репозиториев)

#yum localinstall httpd.rpm #yum install httpd.rpm

Установить с http

#yum localinstall http://server/repo/httpd.rpm

Откатиться к предыдущей версии пакета

#yum downgrade

Переустановка пакета (восстановление удаленных файлов)

#yum reinstall httpd

Удаление ненужных более пакетов

#yum autoremove

Создание локальных репозиториев (createrepo ставится отдельно)

#createrepo

Установка обновлений по расписанию (yum-cron устанавливается отдельно)

#yum-cron

Опции Yum

Ответить «yes» при запросе,

-y #yum update -y

Ответить «no» при запросе

--assumeno

Использовать Yum без плагинов

--noplugins

или отключить определенный плагин

--disableplugin=fastestmirror

Включить плагины, которые установлены, но отключены

#yum --enableplugin=ps

Включить отключенный репозиторий

#yum update -y --enablerepo=epel
#yum update -y --disablerepo=epel

скачать пакеты, но не устанавливать
(на Centos 7 x86_64 будут скачаны в ‘/var/cache/yum/x86_64/7/base/packages/’)

#yum install httpd --downloadonly

Cледующие команды доступны после установки пакета yum-utils

Найти из какого репозитория установлен пакет

#find-repos-of-install httpd

Найти процессы, пакеты которых обновлены и требуют рестарта

#needs-restarting

Запрос к репозиторию, узнать зависимости пакета, не устанавливая его

#repoquery --requires --resolve httpd

Синхронизировать yum репозиторий updates в локальную директорию repo1

#reposync -p repo1 --repoid=updates

Проверить локальный репозиторий на целостность

#verifytree URL
#yum-complete-transaction

Установить необходимые зависимости для сборки RPM пакета

#yum-builddep

Управление конфигурационными опциями и репозиториями yum

#yum-config-manager

Запрос к локальной базе yum, отображение информации о пакете
(использованная команда, контрольная сумма, URL с которого был установлен и другое)

#yumdb info httpd

Скачать rpm пакеты из репозитория

#yumdownloader

Скачать src.rpm пакет из репозитория
(должен быть подключен соответствующий репозиторий, например в ‘/etc/yum.repos.d/CentOS-Sources.repo’ в CentOS)

yumdownloader --source php

Конфигурационные файлы Yum и их расположение

Основной конфигурационный файл

/etc/yum.conf

Директория, с конфигурациями (например, yum плагины)

/etc/yum/

Директория, содержащая информацию о репозиториях

/etc/yum.repos.d/

Некоторые опции yum.conf:

Директория, где yum хранит кэш и файлы базы (по умолчанию ‘/var/cache/yum’)

cachedir=/var/cache/yum/$basearch/$releasever

Определяет должен или нет Yum хранить кэш заголовков и пакетов после успешной установки. Значения: 0 или 1. (по умолчанию 1)

keepcache=1

Уровень вывода отладочных сообщений. Значения: 1-10 (по умолчанию 2)

debuglevel=2

Лог файл (по умолчанию ‘/var/log/yum.log’)

logfile=/var/log/yum.log

Обновлять устаревшие пакеты

obsoletes=1

Проверка подписи пакетов. Значения: 0 или 1 (по умолчанию 1)

gpgcheck=1

Включение плагинов. Значения: 0 или 1 (по умолчанию 1)

plugins=1

Некоторые полезные плагины

Добавляет опцию командной строки для просмотра ченжлога перед/после обновлениями

yum-plugin-changelog

Выбирает более быстрые репозитории из списка зеркал

yum-plugin-fastestmirror

Добавляет команды keys, keys-info, keys-data, keys-remove, которые позволяют работать с ключами.

yum-plugin-keys

Блокировать указанные пакеты от обновления, команда yum versionlock

yum-plugin-versionlock

Добавление команд yum verify-all, verify-multilib, verify-rpm для проверки контрольных сумм пакетов

yum-plugin-verify

Работа Yum через прокси сервер

Для всех пользователей:
добавить в секцию [main] в /etc/yum.conf

proxy="http://server:3128"

при необходимости указать пароль, добавить

proxy_proxy_username=user proxy_password=pass

Указать прокси для отдельного пользователя

#export http_proxy="http://server:3128"

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *