Установка программ (утилит) пакетным менеджером

Зачем нужны пакетные менеджеры?

На заре разработки Linux установить приложение можно было только путем скачивания и компиляции исходников программы. Из-за использования сразу нескольких утилит и ошибок, возникавших в процессе сборки, установка одной программы отнимала много времени.

Чтобы сделать систему дружелюбней к пользователю, были разработаны пакетные менеджеры, которые полностью автоматизировали установку программ. Инсталляция приложений в них производится из пакетов – архивов с файлами скомпилированной программы. Исключение — система Gentoo, где менеджер компилирует программы по подготовленным скриптам.

Большинство популярных дистрибутивов на базе Unix/Linux уже оснащены пакетными менеджерами, способными устанавливать любое программное обеспечение. Будь то внешнее приложение или компоненты ОС. В этом заключается основное различие между пакетным менеджером и инсталлятором. Последний нужен для установки только одной специфической программы, тогда как система управления пакетами — универсальный установщик ПО.

Все пакетные менеджеры Linux имеют свой список репозиториев – серверов с базой пакетов. Во время установки алгоритм менеджера находит необходимый пакет в базе и производит автоматическое скачивание, установку и настройку.

Теоретические основы

Категории пакетных менеджеров

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

  • Низкоуровневые менеджеры. Используются для установки локальных пакетов, загруженных вручную пользователем, или высокоуровневым пакетным менеджером.

Распространенные форматы пакетов

  • DEB (.deb). Самый популярный формат пакетов дистрибутива Debian и его ближайших родственников — Ubuntu, MX Linux, Pop!_OS, elementary OS и других.

  • RPM (.rpm). Разработан компанией Red Hat и внедрен в дистрибутив RHEL. Также применяется в таких системах как Fedora и CentOS.

  • TAR.XZ. Стандартный тип пакетов для дистрибутива ArchLinux и его производных — Manjaro, ARCOLINUX и других.

  • Ebuild (.ebuild). Скрипт bash-сценария для компиляции программ в дистрибутивах Gentoo и Calculate Linux.

Разрешение зависимостей

Для корректного функционирования пакетных менеджеров необходимо корректное отслеживание пакетных зависимостей. Зависимости – список дополнительных пакетов и библиотек, участвующие в работе программы. Во время установки приложения пакетный менеджер или компилятор считывают специальный файл со списком зависимостей, а после проверяют их наличие в системе.

Если важная зависимость будет не удовлетворена при установке программы низкоуровневым менеджером, то будет выдана ошибка с названием отсутствующего пакета. В подобной ситуации проблема решается отдельной установкой недостающего пакета.

При использовании высокоуровнего пакетного менеджера для установки программы, зависимые пакеты будут установлены в автоматическом режиме, без вмешательства пользователя.

Популярные пакетные менеджеры

DPKG

DPKG (Debian Package) – система управления пакетами в Debian и дистрибутивах на его основе, например Ubuntu.

Утилита DPKG появилась в дистрибутиве Debian в 1995 году. Низкоуровневый пакетный менеджер создан только для работы с локальными DEB пакетами и не может самостоятельно разрешать зависимости, а также скачивать пакеты из репозиториев.

Особенности

  • Поддерживает добавление архитектур из других дистрибутивов Linux.

  • DPKG выполняет работу только с локальными пакетами.

  • Под архитектуру DEB выпущено более 55000 пакетов.

Пакеты DEB – это архивы с набором установочных файлов. Для установки в систему необходимой программы из репозиториев создан высокоуровневый пакетный менеджер APT, который параллельно работает с DPKG.

APT

APT (Advanced Packaging Tool) – консольная утилита, выполняющая роль «поисковика» и загрузчика пакетов из репозиториев. Установка скачанных пакетов производится утилитой DPKG. Благодаря эффективному разрешению зависимостей, пакетный менеджер APT используется по умолчанию в дистрибутивах с архитектурой Debian и поддерживает систему в актуальном состоянии.

Список репозиториев хранится в файле «/etc/apt/sources.list» и может быть изменён пользователем в любой момент для установки или обновления программы, не входящей в базу дистрибутива. Установка скачанных пакетов производится утилитой DPKG.

Изначально APT разрабатывался только для работы с пакетами DEB, использующихся в Debian и родственных ОС (Ubuntu, Linux Mint). Позже в него была добавлена поддержка rpm-файлов. Благодаря этому, установить софт привычным образом можно даже в дистрибутивах RED HAT и его производных (Fedora, CentOS и др.).

Оболочки APT

Для упрощения работы с APT можно использовать консольные оболочки APTITUDE или Synaptic.

APTITUDE

APTITUDE — это утилита, выполняющая роль «надстройки» для APT. Разработчики программы добавили полезные функции, оптимизирующие систему поиска пакетов, а также исправили ошибки, касающиеся разрешения зависимостей.

APTITUDE доступен в нескольких вариантах интерфейса:

Если в дистрибутиве APTITUDE отсутствует по умолчанию, то выполнить установку можно следующими командами:

sudo apt install aptitude # для дистрибутивов Debian, Ubuntu и других

sudo yum install aptitude # для дистрибутивов RHEL, CentOS, Fedora и др.

Synaptic

Synaptic — графический менеджер пакетов, работающий на основе APT. Программа пригодится новичкам, плохо знакомым с командной строкой. Несмотря на простоту интерфейса, утилита предоставляет весь необходимый функционал пакетного менеджера APT (установка, удаление, обновление и поиск пакетов).

Установить Synaptic можно следующими командами:

sudo apt install synaptic # для дистрибутивов Debian, Ubuntu и других

yum install synaptic # для дистрибутивов RHEL, CentOS, Fedora и др.

Открыть программу можно, найдя ярлык в меню рабочего окружения, или введя «sudo synaptic» в терминале.

RPM

RPM (Red Hat Package Manager) – формат пакетов и низкоуровневый пакетный менеджер систем RED HAT (RHEL, CentOS, Fedora и др.) Как и DPKG, способен работать только с локальными файлами.

Пакетный менеджер выпущен в 1997 году. Он работает с пакетами RPM. В отличие от DEB, пакеты RPM архивируются утилитой cpio, сжимающий пакет алгоритмом gzip.

Особенности

  • Обновление программ производится в ускоренном режиме, благодаря замене только отредактированных разработчиком элементов пакета.

  • Для скачивания, обновления пакетов, а также разрешения зависимостей придётся использовать пакетные менеджеры более высокого уровня (YUM, DNF).

  • Начиная с 2010 года, пакеты подписываются с хешем MD5. Это исключает вероятность изменения файла RPM злоумышленником для внедрения вирусного кода.

YUM

YUM (Yellowdog Updater, Modified) – высокоуровневый пакетный менеджер, написанный на языке Python для систем RED HAT (RHEL, CentOS, Fedora). Программа представляет собой своеобразную оболочку для утилиты RPM.

В задачу YUM входит скачивание и обновление пакетов из репозиториев, а также удовлетворение зависимостей во время установки программы.

DNF

DNF (Dandified YUM) – модифицированная версия пакетного менеджера YUM на языке на Python. Разработка утилиты начата в 2011 году. В 2015 году DNF стал основным менеджером пакетов для системы Fedora 22. В DNF были исправлены такие недостатки YUM, как некорректная установка зависимостей, низкая скорость работы, большое потребление оперативной памяти.

Yum Extender

Yum Extender – лёгкая графическая оболочка для менеджеров пакетов YUM и DNF.

Yum Extender устанавливается следующей командой:

yum install yumex

Pacman

Pacman – высокоуровневый пакетный менеджер системы Arch Linux и его родственных дистрибутивов (Manjaro, EndeavourOS и др.). Программа написана на языке C# и совмещает высокую функциональность, легкость и производительность. В качестве пакетов используются архивы pkg.tar.xz.

Особенности

  • В Pacman совмещены функции работы с репозиториями и установка пакетов в систему, в отличие от систем Debian или Red Hat.

  • В систему устанавливается новейшее ПО, благодаря модели обновлений «плавающий релиз» (rolling-release).

  • В репозиториях Pacman располагаются заранее собранные пакеты, что значительно ускоряет процесс инсталляции программ.

  • Поддержка работы с репозиторием AUR.

Компиляция программы производится только в том случае, если пакет взят из репозитория AUR (Arch User Repository). Он содержит более 54000 пакетов и активно поддерживается обычными пользователями и администраторами ArchLinux.

Перед тем, как попасть в официальный репозиторий дистрибутива, пакеты проходят тщательный отбор в репозиториях AUR. Репозиторий AUR, в отличие от официального репозитория, содержит скрипты PKGBUILD для самостоятельной сборки пакета в системе пользователя. Для компиляции используется скрипт MakePKG.

Оболочки Pacman

MakePKG

Скрипт, объединяющий работу компилятора, линкера и других вспомогательных приложений для сборки пакета из PKGBUILD. MakePKG установлен по умолчанию в системе с пакетным менеджером Pacman. Компонент входит в пакет base-devel и ABS (Система автоматической сборки пакетов).

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

sudo pacman -S base-develsudo pacman -S abs

Для установки программы и зависимостей согласно скрипту PKGBUILD, нужно перейти в каталог с файлом и выполнить команду:

makepkg -si

Важно. Запуск скрипта с помощью MakePKG должен проводится без предоставления прав администратора. Это делается для защиты системы от выполнения вредоносных команд, находящихся в файле «pkgbuild».

Yay

Программа написана на языке GO и используется для поиска и установки пакета из репозитория AUR. Управления Yay производится посредством командной строки.

Для установки утилиты в дистрибутив с Pacman нужно задать следующие команды:

sudo pacman -S gitgit clone https://aur.archlinux.org/yay.gitcd yaymakepkg -si

Утилита Yay упрощает весь алгоритм установки до ввода одной простой команды в консоль. Например, запрос к терминалу для инсталляции пакета из AUR строится следующим образом:

yay -S {название пакета}

Примечание. Для установки пакетов через Yay не требуется предоставлять административный доступ утилите (добавлять «sudo» перед командой).

Pamac

Графический менеджер пакетов Pamac разработан специально для Manjaro, но может быть установлен в любой дистрибутив на основе Arch Linux. Программа сочетает лёгкость с большим функционалом. В качестве источников используются официальные репозитории дистрибутивов AUR и Snappy.

Установка программы Pamac выполняется командой:

sudo pacman -Syu pamac-gtk

Portage

Portage – система управления пакетами Gentoo или Calculate Linux. Установка программ для данного дистрибутива несколько отличается от остальных систем Linux. В Gentoo пакетный менеджер использует исключительно исходный код, а не готовые пакеты для установки программ.

Особенности

  • Программы собираются под пользовательскую систему и железо, что обеспечивает стабильную работу ОС.

  • По сравнению с распаковкой программ у других пакетных менеджеров, компиляция в Portage занимает много времени. Например, полный пакет LibreOffice компилируется от 4 часов и более.

  • Пользователь может гибко настроить параметры компиляции и полностью управлять процессом сборки. Например, поставить операцию на паузу и продолжить позже.

  • Для обновления установленного ПО используется система rolling-release, благодаря которой в репозитории дистрибутива поставляются пакеты последней версии, опубликованные разработчиком в течение 1-2 дней.

Установка программ из репозиториев чаще всего производится с помощью интерфейса Emerge. Для добавления дружелюбности системе, также можно использовать графическую оболочку Kuroo.

Интерфейсы Portage

Emerge

Консольный интерфейс Emerge предназначен для сборки и обновления программ и их зависимостей. Инструмент доступен «из коробки» и используется для работы с системой Portage по умолчанию.

Для компиляции программ используются ebuild-скрипты. Они содержатся в локальных репозиториях Gentoo (overlay), а сам исходный код программ скачивается с GitHub. Настроить список репозиториев можно самостоятельно, в файле «/etc/portage/repos.conf».

Kuroo

Графический интерфейс Kuroo по принципу работы почти не отличается от Emerge. Утилита написана на языке C++ с использованием фреймворка Qt.

Kuroo установлен по умолчанию в систему с рабочим окружением KDE. В случае отсутствия программы, инсталляция выполняется по данной инструкции.

Дополнительно про пакетные менеджеры вы можете прочитать ниже:

man dpkg
man apt
man dnf
man zypper
man make

Wget и Curl

Для установки пакетов через исходники, необходимо наличие самих пакетов в системе. Их можно скачать по прямой ссылке, используя утилит wget или curl. Рассмотрим базовые примеры использования данных утилит:

wget

Это очень мощная утилита, способная работать по протоколам HTTP, HTTPS и FTP. Кроме того поддерживается работа через прокси. Команда wget , может выполнять загрузку файлов даже в фоновом режиме - без участия пользователя, в отличии от большинства веб браузеров.

Кроме скачивания файлов, есть возможность сохранять веб страницы или даже целые веб-сайты, благодаря функции открытия ссылок на страницах. Такую возможность еще называют рекурсивной загрузкой.

Команда wget имеет очень простой синтаксис:

$ wget опции адрес_ссылки

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

Опции

Синтаксис опций очень свободный. У каждой опции, как правило есть как длинное, так и короткое имя. Их можно записывать как до URL, так и после. Между опцией и ее значением не обязательно ставить пробел, например вы можете написать -o log или -olog. Эти значения эквивалентны. Также если у опций нет параметров, не обязательно начинать каждую с дефиса, можно записать их все вместе: -drc и -d -r -c. Эти параметры wget тоже эквивалентны.

А теперь давайте перейдем к списку опций. У wget слишком много опций, мы разберем только основные.

  • -V (--version) - вывести версию программы

  • -h (--help) - вывести справку

  • -b (--background) - работать в фоновом режиме

  • -o файл (--out-file) - указать лог файл

  • -d (--debug) - включить режим отладки

  • -v (--verbose) - выводить максимум информации о работе утилиты

  • -q (--quiet) - выводить минимум информации о работе

  • -i файл (--input-file) - прочитать URL из файла

  • --force-html - читать файл указанный в предыдущем параметре как html

  • -t (--tries) - количество попыток подключения к серверу

  • -O файл (--output-document) - файл в который будут сохранены полученные данные

  • -с (--continue) - продолжить ранее прерванную загрузку

  • -S (--server-response) - вывести ответ сервера

  • --spider - проверить работоспособность URL

  • -T время (--timeout) - таймаут подключения к серверу

  • --limit-rate - ограничить скорость загрузки

  • -w (--wait) - интервал между запросами

  • -Q (--quota) - максимальный размер загрузки

  • -4 (--inet4only) - использовать протокол ipv4

  • -6 (--inet6only) - использовать протокол ipv6

  • -U (--user-agent)- строка USER AGENT отправляемая серверу

  • -r (--recursive)- рекурсивная работа утилиты

  • -l (--level) - глубина при рекурсивном сканировании

  • -k (--convert-links) - конвертировать ссылки в локальные при загрузке страниц

  • -P (--directory-prefix) - каталог, в который будут загружаться файлы

  • -m (--mirror) - скачать сайт на локальную машину

  • -p (--page-requisites) - во время загрузки сайта скачивать все необходимые ресурсы

Кончено это не все ключи wget, но здесь и так слишком много теории, теперь давайте перейдем к практике. Примеры wget намного интереснее.

curl

cURL (расшифровывается как Client URL) — программное обеспечение, которое предоставляет библиотеку libcurl и инструмент командной строки curl. Возможности cURL огромны, во многих опциях легко потеряться.

curl — инструмент для передачи данных с сервера или на него, при этом используется один из поддерживаемых протоколов: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP. Команда предназначена для работы без взаимодействия с пользователем.

Команда curl запускается из командной строки и предустановлена в большинстве дистрибутивов Linux.

Варианты применения:

  • доступ без браузера;

  • внутри shell-скриптов;

  • для тестирования API.

В основном я использовал curl для тестирования API, иногда просто вставляя команды, которые нашел в интернете. Но я хочу разобраться в curl и лучше понять его особенности. Так что поделюсь некоторыми командами, с которыми столкнулся во время работы.

Запрос страницы

Если никакие аргументы не указаны, то команда curl выполняет HTTP-запрос get и отображает статическое содержимое страницы. Оно аналогично тому, что мы видим при просмотре исходного кода в браузере.

curl www.google.com

Скачивание файла

Есть два варианта этой команды.

  • Скачать файл и сохранить под оригинальным именем (testfile.tar.gz).

curl -O https://testdomain.com/testfile.tar.gz

  • Скачать файл и сохранить под другим именем.

curl -o custom_file.tar.gz https://testdomain.com/testfile.tar.gz

Еще можно скачать несколько файлов одной командой, хотя в мануале так делать не рекомендуют.

curl -O https://testdomain.com/testfile.tar.gz -O https://testdomain.com/testfile2.tar.gz

Получение заголовков HTTP

Если вы хотите посмотреть, какие заголовки отдает сервер, то можно использовать опции -I или --head. Они позволяют получить заголовок без тела документа.

curl -I https://www.google.com HTTP/1.1 200 OK Content-Type: text/html; charset=ISO-8859-1 P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info." Date: Thu, 04 Jun 2020 15:07:42 GMT Server: gws X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Transfer-Encoding: chunked Expires: Thu, 04 Jun 2020 15:07:42 GMT Cache-Control: private Set-Cookie: 1P_JAR=2020-06-04-15; expires=Sat, 04-Jul-2020 15:07:42 GMT; path=/; domain=.google.com; Secure Set-Cookie: <cookie_info>

Игнорирование ошибки неправильных или самоподписанных сертификатов

Когда вы тестируете веб-приложение или API, то в вашем тестовом окружении могут быть самоподписанные или неправильные SSL-сертификаты. По умолчанию curl верифицирует все сертификаты. Чтобы он не выдавал ошибку о неверных сертификатах и устанавливал соединение для тестирования, используйте опцию -k или --insecure.

curl -k https://localhost/my_test_endpoint

Отправка POST-запроса

Иногда для тестирования API нужно отправить какие-либо данные, обычно это делают через POST-запрос. Если вы делаете POST-запрос при помощи curl, то можете отправить данные либо в виде списка имя=значение, либо в виде JSON.

  • Запрос в виде списка имя=значение.

curl --data "param1=test1&param2=test2" http://test.com

  • Запрос в виде JSON.

curl -H 'Content-Type: application/json' --data '{"param1":"test1","param2":"test2"}' http://www.test.com

Параметр --data эквивалентен -d, оба указывают curl выполнить HTTP POST-запрос.

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

Если curl не передаются никакие данные, то по умолчанию он выполняет HTTP GET запрос. Но если вам, например, нужно обновить данные, а не пересоздать их заново, то curl поддерживает опции, указывающие тип запроса. Параметры -x или --request позволяют указать тип HTTP-запроса, который используется для сообщения с сервером.

# updating the value of param2 to be test 3 on the record id curl -X 'PUT' -d '{"param1":"test1","param2":"test3"}' \http://test.com/1

Использование авторизации

API защищено авторизацией по логину-паролю — вы можете передать пару логин-пароль, используя параметр -u или --user. Если просто передать логин, то curl запросит пароль в командной строке. Используете параметр несколько раз — для авторизации на сервер будет передано только последнее значение.

curl -u <user:password> https://my-test-api.com/endpoint1

Управление resolve'ом имен

Вы хотите протестировать API перед развертыванием и перенаправить запрос на тестовую машину — это можно сделать, указав альтернативный resolve имени эндпоинта для данного запроса. Все работает эквивалентно пропиcыванию хоста в /etc/hosts.

curl --resolve www.test.com:80:localhost http://www.test.com/

Загрузка файла

О возможности загрузки файла через curl я узнал недавно. Не был уверен, что это возможно, но, по всей видимости, это так: curl с опцией -F эмулирует отправку заполненной формы, когда пользователь нажимает кнопку отправки. Опция указывает curl передавать данные в виде POST-запроса, используя multipart / form-data Content-Type.

curl -F @field_name=@path/to/local_file

Вы можете загрузить несколько файлов, повторяя параметр -F.

curl -F @field_name=@path/to/local_file @field_name=@path/to/local_file_2

Измерение продолжительности соединения

Вы можете использовать опцию -w для отображения информации в stdout после завершения передачи. Она поддерживает отображение набора переменных. Например, можно узнать общее время, которое потребовалось для успешного выполнения запроса. Это удобно, если вам нужно определить время загрузки или скачивания с помощью curl.

curl -w "%{time_total}\n" -o /dev/null -s www.test.com

Это некоторые из опций, которые можно использовать с curl. Надеюсь, информация была вам полезна и статья понравилась.

Last updated