Ням

Взаимодействие с YUM в CentOS с использованием Python

Взаимодействие с YUM в CentOS с использованием Python

Что такое YUM?

YUM - это инструмент управления, доступный в дистрибутивах RedHat и CentOS Linux.  YUM (Yellowdog Updater Modified) зависит от пакетов RPM (Red Hat Package Manager) и был создан для управления пакетами как частями более крупной системы репозиториев программного обеспечения, а не отдельными файлами пакетов. YUM - это интерактивный менеджер пакетов, который может автоматически выполнять анализ зависимостей и обновления системы, а также устанавливать новые пакеты, удалять старые пакеты, выполнять запросы к существующим пакетам и т. Д. Чтобы узнать больше о YUM, нажмите здесь.

В этой статье мы рассмотрим методы доступа к функциям yum с помощью программ Python и узнаем, чем это может быть полезно. Для этого урока мы будем использовать CENTOS 7 под управлением python 2.7.x и предполагает некоторое знакомство с основными функциями Python.

Программирование с YUM

Давайте начнем изучать программирование yum с использованием python с рассмотрения простого сценария python, который использует yum для запроса и печати имен пакетов. Вот:

импорт ОС
import sys
импорт ням
yb = yum.YumBase ()
yb.setCacheDir ()
результаты = yb.pkgSack.returnNewestByNameArch (шаблоны = ["python", "perl"])
для pkg в результатах:
напечатайте "% s% s (% s) \ n \ t% s"% (pkg.имя, уп.версия, pkg.арка, уп.резюме)

Этот скрипт ищет в репозиториях YUM пакеты, соответствующие имени «python», и выводит информацию о совпавших пакетах. Мы рассмотрим этот скрипт построчно.

Чтобы начать программировать с помощью YUM, нам нужно импортировать пакет python yum - он установлен по умолчанию в CENTOS 7. Наряду с 'yum' нам обычно также нужны пакеты 'os' и 'sys', поэтому типичная программа python, использующая yum, будет начинаться со следующих 3 строк.

импорт ОС
import sys
импортная вкуснятина

Затем, чтобы создать экземпляр yum для работы, включите следующую строку.

yb = yum.YumBase ()

Это почти первая строка функционального кода в любой программе на Python, использующей yum. Это потому, что YumBase - это базовый класс, который содержит методы и объекты, необходимые для выполнения всех функций управления пакетами с использованием yum. Подробную информацию о структуре класса YumBase см. В его документации.

Изучение конфигурации YUM

Когда экземпляр YumBase доступен, мы можем использовать его для проверки конфигурации yum. Ниже приведена таблица со списком популярных команд для перечисления деталей конфигурации.

Конфигурация Применение
печать yb.conf.config_file_path Распечатайте путь к файлу конфигурации yum.
печать yb.conf.журнальный файл Чтобы распечатать путь к файлу журнала
для я в yb.conf.reposdir: напечатать я Распечатать каталоги и файлы для репозиториев
печать yb.conf.skip_broken Значение обычно ложное. Если установлено значение true, команды yum будут действовать так, как если бы был указан параметр -skip-broken.
печать yb.conf.уровень ошибки Чтобы установить уровень ошибок, который вы хотели бы видеть в стандартном выводе. Это значение от 0 до 10, где 0 только критично, а 10 - это все, включая отладку. По умолчанию установлено значение 2, но вы можете изменить его. Если вы будете запускать скрипт, рекомендуется установить для него значение 0. Вы можете установить большее значение, например 3, при отладке самого скрипта.

Запрос пакетов

Возвращаясь к нашему скрипту, мы видим, что следующая строка кода настраивает новый каталог кэша для yum, чтобы он выполнял все задачи как обычный пользователь (а также в некоторой степени как пользователь root - он по-прежнему не сможет изменять данные в например yumdb или rpmdb).

yb.setCacheDir ()

Теперь, создав настоящий объект yum, мы можем получить доступ к атрибутам pkgSack, rpmdb и repos. Это позволяет нам выполнять следующие функции:

yb.pkgSack - может использоваться для выполнения запросов во всех включенных репозиториях

yb.rpmdb - может использоваться для выполнения запросов к установленным пакетам

yb.repos - получить объект RepositoryStorage, который можно использовать для установки определенных конфигураций для репозиториев и можно использовать для включения или отключения репозиториев - e.грамм., yb.РЕПО.enableRepo (), yb.РЕПО.disableRepo () и yb.РЕПО.listEnabled (). Подробнее об этом позже.

А пока мы углубимся в свойства pkgSack и rpmdb. Мы можем искать в репозиториях YUM и локально установленных пакетах соответственно, вызывая одну из нескольких функций, предоставляемых атрибутами pkgSack и rpmdb. Эти функции возвращают «объекты пакета», содержащие информацию о пакете. Некоторые полезные функции для получения объектов пакета: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Наш скрипт использует метод returnNewstByNameArch для получения объектов пакета, соответствующих строкам шаблона «python» или «perl».

Обратите внимание, что имена методов одинаковы для yb.rpmdb и yb.pkgSack. Однако они выполняют запросы в разных доменах - rpmdb выполняет поиск в локальной базе данных установленных пакетов RPM, тогда как pkgSack выполняет поиск в репозиториях YUM.

Мы могли бы аналогичным образом перечислить установленные большие пакеты (где большой означает, скажем, размер> 10 МБ). Код yum:

plist = yb.rpmdb.returnPackages ()
l_plist = [p для p в plist, если p.размер> 1024 * 1024 * 10]
print "Установленные пакеты размером> 10MB:"
для p в l_plist:
напечатайте "% s:% sMB"% (pkg, pkg.размер / (1024 * 1024))

В этом суть использования python для доступа к yum. В оставшейся части статьи мы углубимся в нюансы API модуля yum и опробуем еще несколько сложных действий, таких как установка / удаление пакетов или настройка собственного репозитория.

Невра, PRCO и кортежи

В заголовке нет опечатки - это некоторые специфические термины yum, которые упрощают идентификацию пакетов и зависимостей, а также их взаимодействие с другими пользователями yum, включая ваши скрипты python.

NEVRA означает имя, эпоху, версию, выпуск, архитектуру и используется для уникальной идентификации разновидности или экземпляра пакета - вместе эти пять параметров однозначно указывают на один уникальный экземпляр пакета. Например, пакет под названием «python» может иметь несколько версий, например 2.6, 2.7 и т. Д., и каждая версия может иметь несколько выпусков для разных архитектур. e.грамм., x86_64, i386 (обратите внимание, что слово архитектура здесь относится к архитектуре процессора - e.грамм., i386 - 32-битный Intel). Вместе эти пять представляют собой уникальную комбинацию и называют невра.

PRCO означает Provides / Requires / Conflicts / Obsoletes, которые суммируют метаданные управления пакетом для объекта пакета.

Некоторые методы API в pkgSack / rpmdb, например yb.pkgSack.simplePkgList (), yb.pkgSack.packagesByTuple () и т. д., возвращать информацию NEVRA или PRCO в виде кортежей python, а не pkgobjects

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

Подобно команде «yum list», мы можем использовать 'yb.doPackageLists () ', чтобы вывести список всех установленных пакетов / пакетов, доступных для установки / переустановки.

plist = yb.doPackageLists (шаблоны = sys.argv [1:])

Теперь plist содержит 3 списка пакетов - по одному для установленного пакета, устанавливаемого пакета и тех, которые доступны для переустановки. Мы можем распечатать / установить / переустановить пакеты, используя приведенный ниже код:

если пл.установлены:
распечатать «Установленные пакеты»
за упак. в отсортированном (пл.установлены):
печать pkg
если пл.имеется в наличии:
распечатать "Доступные пакеты"
за упак. в отсортированном (пл.имеется в наличии):
печать пакетов, пакетов.репо
если пл.переустановить_available:
распечатать «Переустановить доступные пакеты»
за упак. в отсортированном (пл.переустановить_available):
печать пакетов, пакетов.репо

Аналогично, чтобы перечислить все установленные пакеты, которые мы можем использовать:

напечатать «\ n».присоединиться ([x.имя для x в yb.rpmdb.returnPackages ()])

Установка пакетов

Установка пакетов включает в себя настройку и выполнение транзакции. Для выполнения простых действий, таких как установка / удаление, мы используем 'yb.установить 'или' yb.удалить 'соответственно, чтобы настроить транзакцию. Затем мы вызываем 'yb.resolveDeps () 'для запуска разрешения зависимостей и' yb.processTransaction () ', чтобы дать команду YUM продолжить и выполнить транзакцию.

Все шаги, кроме последнего, являются подготовительными, и только вызов метода processTransaction () фактически приводит к установке / удалению. Ниже приведен фрагмент кода для установки пакета.

yb = yum.YumBase ()
yb.установить (name = 'packagename')
yb.resolveDeps ()
yb.processTransaction ()

При совершении таких операций 'yb.tsInfo 'содержит информацию о текущем статусе транзакции, пока она не будет зафиксирована. Подробнее об этом можно прочитать в документации.

Настроить репозиторий в произвольном месте

Ниже скрипт поможет вам настроить yum для доступа к репозиторию в произвольном месте. Ожидается, что URL-адрес репозитория будет передан в качестве аргумента командной строки.

url = sys.argv [1]
yb = yum.YumBase ()
если не еб.setCacheDir (force = True, reuse = False):
печать >> sys.stderr, "Не могу создать tmp. cachedir. "
sys.выход (1)
yb.РЕПО.disableRepo ('*')
yb.add_enable_repo ('myrepo', [URL])

Чтобы запустить скрипт

скрипт python.py url: // to / my / repo

Резюме

В этой статье мы узнали, как управлять диспетчером пакетов YUM с помощью его API-интерфейса Python. Мы рассмотрели параметры конфигурации, а также API запросов / поиска для доступных и установленных пакетов и, наконец, способы выполнения операций управления пакетами, таких как установка / удаление / переустановка пакетов.

Эта статья предназначена для того, чтобы показать, что возможно с помощью yum python API. Хотя API не очень хорошо документирован, он следует стандартным соглашениям и работает предсказуемо. Вооружившись знаниями о возможностях YUM и навыками Python, интересно исследовать и изучать все, что он может делать. Надеюсь, вам понравилось читать, и что вы продолжаете исследовать и применять yum в своих проектах.

Контроль и управление перемещением мыши между несколькими мониторами в Windows 10
Диспетчер мыши с двумя дисплеями позволяет контролировать и настраивать движение мыши между несколькими мониторами, замедляя ее движения возле границы...
WinMouse позволяет настраивать и улучшать движение указателя мыши на ПК с Windows
Если вы хотите улучшить функции указателя мыши по умолчанию, используйте бесплатное ПО WinMouse. Он добавляет дополнительные функции, которые помогут ...
Левая кнопка мыши не работает в Windows 10
Если вы используете выделенную мышь со своим ноутбуком или настольным компьютером, но левая кнопка мыши не работает в Windows 10/8/7 по какой-то причи...