Установка программ (утилит) пакетным менеджером
Зачем нужны пакетные менеджеры?
На заре разработки 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. В случае отсутствия программы, инсталляция выполняется по данной инструкции.
Дополнительно про пакетные менеджеры вы можете прочитать ниже:
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¶m2=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