Epm

Материал из Etersoft wiki
Перейти к навигацииПерейти к поиску

Единая команда управления пакетами (epm)

EPM — имеющая одинаковый интерфейс на всех системах команда управления пакетами. При интерфейсе, похожем на rpm, apt и urpm, выполняет необходимые операции на любой платформе.

Включает в себя следующую функциональность:

  • управление пакетами (установка — удаление — поиск)
  • управление репозиториями (добавление — удаление — обновление — список)
  • управление системными сервисами (включение — выключение — список)

Назначение

  • в скриптах и установщиках, сервисных программах
  • в повседневном администрировании различных систем
  • для обучения: не нужны длинные статьи, как в той или иной системе работать с пакетами. EPM выводит каждую выполняемую им для реальных операций с пакетами

Установка

Установка пакетной версии из скрипта всё-в-одном
curl -sL https://eepm.ru/epm.sh | bash /dev/stdin ei 

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

Если скрипт не смог скачать пакет для вашего дистрибутива, зайдите напрямую на http://download.etersoft.ru/pub/Korinf/, скачайте пакет под похожую версию дистрибутива и установите его с помощью epm.sh, предварительно скачав его:

# curl -O https://raw.githubusercontent.com/Etersoft/eepm/master/packed/epm.sh
# sh ./epm.sh install <скачанный пакет>

Получить исходники можно здесь.


Список команд, epm --help :

Описание операции Команда epm Альтернативная команда epm Команда Debian Команда ALT Linux
Установка пакета по названию в систему epm -i (package) epm install (package) или epmi (package) apt-get install (package) apt-get install (package)
Установка файла пакета в систему epm -i (package file) epm install (package file) или epmi (package file) dpkg -i (package file); apt-get -f install (package file) apt-get install (package file)
Удаление пакета из системы epm -e (package) epm remove (package) или epme (package) apt-get remove (package) ; dpkg -P (package) apt-get remove (package)
Поиск пакета в репозитории epm -s (text) epm search (text) или epms (text) apt-cache search (text) apt-cache search (text)
Проверка наличия пакета в системе epm -q (package) epm installed (package) или epmq (package) dpkg -l (package) (pipe) grep 'ii (package) rpm -qa (pipe) grep (package)
Список установленных пакетов epm -qa epm packages или epm list или epmqa dpkg -l rpm -qa
Поиск по названиям установленных пакетов epm -qp <word> epmqp grep <word> grep <word>
Принадлежность файла к (установленному) пакету epm -qf (file) epmqf (file) dpkg -S (file) rpm -qf (file) или rpmqf из etersoft-build-utils
Поиск, в каком пакете есть указанный файл epm -sf <file> epm filesearch
Список файлов в (установленном) пакете epm -ql (package) epm filelist <package> dpkg -L (package) rpm -ql (package)
Вывести информацию о пакете epm -qi (package) epm info (package) apt-cache show (package) apt-cache show (package)
Обновить дистрибутив epm upgrade epm dist-upgrade apt-get dist-upgrade apt-get dist-upgrade

Таблицы:

  1. Основные действия с пакетами: команды для разных дистрибутивов
  2. То же самое в разных стилях: Fedora / Mandriva / Debian (epm -i, epmi, epm install)

Важно показать, что разброд и шатание заменяется на единообразность.

Примеры

# epms name subtext — выполняет epms name | grep subtest
# epms name ^subtext — выполняет epms name | grep -v subtest
# epms "name1 name2" — выполняет поиск именно такого сочетания

Особенности реализации

  1. сглаживание различий между разными уровнями управления пакетами: позволяет посмотреть список файлов пакета, как rpm -ql, и установить файлы пакетов с разрешением зависимостей, как yum install.
  2. максимальное соблюдение зависимостей между пакетами при операциях

Также epm позволит убрать учёт различий между пакетными менеджерами из Korinf, который также выполняет действия с пакетами в целевых системах.

Список поддерживаемых дистрибутивов и пакетных менеджеров

Менеджер пакетов Дистрибутив
rpm alt asplinux suse mandriva rosa mandrake pclinux sled sles fedora redhat scientific centos rhel
deb debian ubuntu mint runtu mcst
tgz slackware mopslinux
tbz freebsd
tbz2 gentoo
apk alpine
pkg.gz sunos

Добавление нового дистрибутива

* Добавляем в bin/distr_info
elif distro os-release && which apk 2>/dev/null >/dev/null ; then
       . $ROOTDIR/etc/os-release
        DISTRIB_ID="$ID"
        DISTRIB_RELEASE="$VERSION_ID"

Детектим дистрибутив по пакетному менеджеру и файлу с релизом
Определяем DISTRIB_ID

 pkgtype()
 alpine) echo "apk" ;;
Сопоставляем дистрибутив и пакетный менеджер
* Добавляем в bin/epm-install
epm_install_names()
               apk)
                       sudocmd apk add $@
                       return ;;
epm_ni_install_names()
               apk)
                       sudocmd apk add $@
                       return ;;

Определяем команды для установки пакетов, высокоуровневую - из репозитория и низкоуровневую - из файла. Аналогично определяем остальные команды.

Планы развития

  • сделать поддержку перевода интерфейса на другие языки
  • сделать man-страницы (английский, русский)
  • поддержка NetBSD
  • совместимые (универсальные) названия пакетов
  • поддержка msi
  • нужна помощь в упаковке в разные дистрибутивы (чтобы он был в каждой установленной системе)

Подобные проекты

Работающие для нескольких дистрибутивов менеджеры пакетов:

  • smart (python): Arch, Debian, Mandriva, openSUSE, Slackware
  • PackageKit: Fedora, Ubuntu, openSUSE, Mandriva (pkgcon in command line)
  • Puppet
  • w:Pkgsrc

Отличия от аналогов

  • EPM написан на shell, поэтому не имеет зависимостей в системе, и не может сломаться при обновлении python.
  • EPM поддерживает все дистрибутивы, а не некоторые системы
  • EPM не является заменой штатного пакетного менеджера
  • EPM не использует D-BUS, системные сервисы

Публикации и обсуждения

Продвижение в дистрибутивы

Замечания и предложения можно оставить здесь

Ссылки