Управление пакетами

Введение в пакеты

Последнее обновление: 19.03.2024

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

В мире Linux распространены главным образом два формата пакетов: rpm и deb. RPM (Red Hat Package Manager) был изобретен Red Hat, и в настоящее время он используется различными дистрибутивами, такими как Red Hat и производными (например, Fedora), а также SUSE. RPM основан на пакетах с расширением .rpm. Имена этих пакетов обычно включают имя, версию и архитектуру программного обеспечения. Например, браузер Google Chrome для подобных дистрибутивов Linux распространяется в виде файла "google-chrome-stable_current_x86_64.rpm".

Другой популярный формат пакетов — формат .deb изначально был разработан для Debian Linux, но теперь он также является форматом пакетов по умолчанию для других дистрибутивов, из которых наиболее популярным является Ubuntu. Поскольку Ubuntu - наиболее популярная система на базе Linux, то прежде всего рассмотрим работу с пакетами .deb.

Пакеты с программами и библиотеками могут распространяться по отдельности. Например, мы можем зайти на сайт какой-нибудь компании, которая предоставляет программное обеспечение для Linux и загрузить нужный пакет. Например, компания Google предоставляет браузер Google Chrome в виде пакетов .deb (для Debian/Ubuntu) и .rpm (для Fedora/openSUSE). Мы можем загрузить требуемый пакет и установить его. Однако для упрощения поиска и управления пакетами используются репозитории, которые можно представить в виде хранилища пакетов. Обычно дистрибутивы Linux предоставляют специальное программное обспечение для управления пакетами - менеджеры пакетов.Они позволяют в удобной форме - с помощью пары команд или даже в графическом виде в пару кликов установить или удалить необходимый пакет.

Управление пакетами .deb

В системе Ubuntu список всех репозиториев пакетов хранится в файле /etc/apt/sources.list. Хотя наиболее важные репозитории программного обеспечения добавляются в этот файл автоматически, иногда может потребоваться добавить в этот список другие репозитории программного обеспечения.

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

  • Main: программное обеспечение, которое официально поддерживается Canonical (разработчиком Ubuntu). Обычно это наиболее стабильное и поддерживаемое программное обеспечение

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

  • Universe: бесплатное программное обеспечение, которое официально не поддерживается. Вы можете использовать его, и оно, скорее всего, будет работать без проблем, но получить поддержку от Canonical для программных компонентов этой категории не получится.

  • Multiverse: неподдерживаемое программное обеспечение, на которое распространяются лицензионные ограничения и которое не считается бесплатным.

  • Backports: новейшее программное обеспечение, которое однако может быть нестабильным

Например, возьмем файл /etc/apt/sources.list на Ubuntu 23.10, который будет выглядеть примерно следующим образом:

eugene@Eugene:~$ cat /etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://ru.archive.ubuntu.com/ubuntu/ mantic main restricted
# deb-src http://ru.archive.ubuntu.com/ubuntu/ mantic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://ru.archive.ubuntu.com/ubuntu/ mantic-updates main restricted
# deb-src http://ru.archive.ubuntu.com/ubuntu/ mantic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://ru.archive.ubuntu.com/ubuntu/ mantic universe
# deb-src http://ru.archive.ubuntu.com/ubuntu/ mantic universe
deb http://ru.archive.ubuntu.com/ubuntu/ mantic-updates universe
# deb-src http://ru.archive.ubuntu.com/ubuntu/ mantic-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://ru.archive.ubuntu.com/ubuntu/ mantic multiverse
# deb-src http://ru.archive.ubuntu.com/ubuntu/ mantic multiverse
deb http://ru.archive.ubuntu.com/ubuntu/ mantic-updates multiverse
# deb-src http://ru.archive.ubuntu.com/ubuntu/ mantic-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://ru.archive.ubuntu.com/ubuntu/ mantic-backports main restricted universe multiverse
# deb-src http://ru.archive.ubuntu.com/ubuntu/ mantic-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu/ mantic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu/ mantic-security main restricted
deb http://security.ubuntu.com/ubuntu/ mantic-security universe
# deb-src http://security.ubuntu.com/ubuntu/ mantic-security universe
deb http://security.ubuntu.com/ubuntu/ mantic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu/ mantic-security multiverse

Можно заметить, что все строки файла source.list используют один и тот же формат. Первое поле в этих строках определяет используемый формат пакета. По умолчанию используются два разных формата пакетов: .deb для бинарных пакетов (программные файлы) и .deb-src для пакетов с исходным кодом.

Далее упоминается URI - обычно это URL-адрес репозитория. Затем идет название дистрибутива, например, mantic (обычно здесь указывается текущая версия дистрибутива). И в конце каждой строки указываются категории пакетов.

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

Для управления пакетами deb в Debian применялась утилита dpkg, которую в принципе и сейчас можно использовать. Но в настоящее время в Ubuntu (а также в Debian) для управления пакетами в основном применяется набор инструментов Advanced Packaging Tools или apt. Для учета пакетов apt использует базу данных, которая хранится в /var/lib/apt. Каждый раз при установке пакета в базу данных пакета добавляется список всех установленных файлов. Используя эту базу данных, менеджер пакетов может даже увидеть, были ли изменены определенные файлы конфигурации.

Утилита apt в качестве аргумента принимает команду, которая указывает на выполняемое действие. Наиболее распространенные команды:

  • list: отображает пакеты на основе имени пакета

  • search: ищет пакет по регулярному выражению

  • show: показывает информацию о пакете

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

  • upgrade: обновляет пакеты до последней версии

  • install: устанавливает пакеты

  • remove: удаляет пакеты

Просмотр информации о пакетах

Команда search позволяет найти пакеты по определенному шаблону. Например, найдем все пакеты, которые связаны с языком python и его версией 3.12

eugene@Eugene:~$ sudo apt search python3.12
Sorting... Done
Full Text Search... Done
idle-python3.12/mantic 3.12.0-1 all
  IDE for Python (v3.12) using Tkinter

libpython3.12/mantic 3.12.0-1 amd64
  Shared Python runtime library (version 3.12)

libpython3.12-dbg/mantic 3.12.0-1 amd64
  Debug Build of the Python Interpreter (version 3.12)

libpython3.12-dev/mantic 3.12.0-1 amd64
  Header files and a static library for Python (v3.12)

libpython3.12-minimal/mantic,now 3.12.0-1 amd64 [installed,automatic]
  Minimal subset of the Python language (version 3.12)

libpython3.12-stdlib/mantic,now 3.12.0-1 amd64 [installed,automatic]
  Interactive high-level object-oriented language (standard library, version 3.12)

libpython3.12-testsuite/mantic 3.12.0-1 all
  Testsuite for the Python standard library (v3.12)

python3.12/mantic,now 3.12.0-1 amd64 [installed]
  Interactive high-level object-oriented language (version 3.12)

python3.12-dbg/mantic 3.12.0-1 amd64
  Debug Build of the Python Interpreter (version 3.12)

python3.12-dev/mantic 3.12.0-1 amd64
  Header files and a static library for Python (v3.12)

python3.12-doc/mantic 3.12.0-1 all
  Documentation for the high-level object-oriented language Python (v3.12)

python3.12-examples/mantic 3.12.0-1 all
  Examples for the Python language (v3.12)

python3.12-full/mantic 3.12.0-1 amd64
  Python Interpreter with complete class library (version 3.12)

python3.12-minimal/mantic,now 3.12.0-1 amd64 [installed,automatic]
  Minimal subset of the Python language (version 3.12)

python3.12-nopie/mantic 3.12.0-1 amd64
  Python interpreter linked without PIE (version 3.12)

python3.12-venv/mantic 3.12.0-1 amd64
  Interactive high-level object-oriented language (pyvenv binary, version 3.12)

eugene@Eugene:~$ 

Команда show позволяет отобразить информацию о пакете. Например, посмотрим информацию о пакете "python3.12":

eugene@Eugene:~$ sudo apt show python3.12
Package: python3.12
Architecture: amd64
Version: 3.12.0-1
Multi-Arch: allowed
Priority: optional
Section: universe/python
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Matthias Klose <doko@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 713
Depends: python3.12-minimal (= 3.12.0-1), libpython3.12-stdlib (= 3.12.0-1), media-types | mime-support, tzdata
.........................................

Для просмотра установленных пакетов можно использовать команду dpkg -l:

eugene@Eugene:~$ dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                           Version                     >
+++-==============================================-============================>
ii  accountsservice                                23.13.9-2ubuntu2            >
ii  acl                                            2.3.1-3                     >
ii  adduser                                        3.137ubuntu1                >
ii  adwaita-icon-theme                             41.0-1ubuntu1               >
ii  alsa-base                                      1.0.25+dfsg-0ubuntu7        >
ii  alsa-topology-conf                             1.2.5.1-2                   >
ii  alsa-ucm-conf                                  1.2.9-1ubuntu3.2            >
ii  alsa-utils                                     1.2.9-1ubuntu1              >
ii  amd64-microcode                                3.20230808.1.1ubuntu1       >
ii  anacron                                        2.3-38ubuntu1               >
ii  apache2                                        2.4.57-2ubuntu2.3   
..............................................................

Установка и удаление пакетов

Перед установкой пакета сначала следует использовать команду update. Таким образом, система узнает о последних доступных версиях пакетов и кэширует список самых последних версий пакетов локально.

Для установки пакетов выполняется команда install, которой передается список пакетов для установки. Если устанавливается несколько пакетов, то они разделяются пробелом. Например, установим пакет "python3.12":

eugene@Eugene:~$ sudo apt install python3.12
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Suggested packages:
  python3.12-venv python3.12-doc
The following NEW packages will be installed:
  python3.12
0 upgraded, 1 newly installed, 0 to remove and 13 not upgraded.
Need to get 629 kB of archives.
After this operation, 730 kB of additional disk space will be used.
....................................................

Для удаления пакетов вызывается команда remove, которой передается список удаляемых пакетов, разделенных пробелом. Например, удаление пакета "python3.12":

sudo apt remove python3.12
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850