Что такое dpkg в linux
Перейти к содержимому

Что такое dpkg в linux

  • автор:

Что такое dpkg в linux

It should not be used by package maintainers wishing to understand how dpkg will install their packages. The descriptions of what dpkg does when installing and removing packages are particularly inadequate. For detailed information about this, please refer to the Package Management System topic under debian-faq in the GNU Info system. For information about creating Debian packages, see the Debian Package Management Tools topic in the same place.

DESCRIPTION

dpkg can be also be used as a front-end to dpkg-deb . The following are dpkg-deb actions, and if they are encountered, dpkg just runs dpkg-deb with the parameters given to it: Please refer to dpkg-deb (8) for information about these actions.

INFORMATION ABOUT PACKAGES

PACKAGE STATES

PACKAGE SELECTION STATES

PACKAGE FLAGS

ACTIONS

Installation consists of the following steps:

1. Extract the control files of the new package.

2. If another version of the same package was installed before the new installation, execute prerm script of the old package.

3. Run preinst script, if provided by the package.

4. Unpack the new files, and at the same time back up the old files, so that if something goes wrong, they can be restored.

5. If another version of the same package was installed before the new installation, execute the postrm script of the old package. Note that this script is executed after the preinst script of the new package, because new files are written at the same time old files are removed.

6. Configure the package. See —configure for detailed information about how this is done. dpkg —unpack package_file . Unpack the package, but don’t configure it. If —recursive or -R option is specified, package_file must refer to a directory instead. dpkg —configure package . | -a | —pending Reconfigure an unpacked package. If -a or —pending is given instead of package , all unpacked but unconfigured packages are configured.

Configuring consists of the following steps:

1. Unpack the configuration files, and at the same time back up the old configuration files, so that they can be restored if something goes wrong.

2. Run postinst script, if provided by the package. dpkg -r | —remove | -P | —purge package . | -a | —pending Remove an installed package. -r or —remove remove everything except configuration files. This may avoid having to reconfigure the package if it is reinstalled later. (Configuration files are the files listed in the debian/conffiles control file). -P or —purge removes everything, including configuration files. If -a or —pending is given instead of a package name, then all packages unpacked, but marked to be removed or purged in file /var/lib/dpkg/status , are removed or purged, respectively.

Removing of a package consists of the following steps:

1. Run prerm script

2. Remove the installed files

3. Run postrm script
dpkg -p|—print-avail package Display details about package , as found in /var/lib/dpkg/available . dpkg —update-avail | —merge-avail Packages-file Update dpkg ‘s and dselect ‘s idea of which packages are available. With action —merge-avail , old information is combined with information from Packages-file . With action —update-avail , old information is replaced with the information in the Packages-file . The Packages-file distributed with Debian GNU/Linux is simply named Packages . dpkg keeps its record of available packages in /var/lib/dpkg/available . dpkg -A | —record-avail package_file . Update dpkg and dselect ‘s idea of which packages are available with information from the package package_file . If —recursive or -R option is specified, package_file must refer to a directory instead. dpkg —forget-old-unavail Forget about uninstalled unavailable packages. dpkg —clear-avail Erase the existing information about what packages are available. dpkg -l | —list package-name-pattern . List packages matching given pattern. If no package-name-pattern is given, list all packages in /var/lib/dpkg/available . Normal shell wildchars are allowed in package-name-pattern . (You will probably have to quote package-name-pattern to prevent the shell from performing filename expansion. For example, dpkg -l ‘libc5*’ will list all the package names starting with "libc5".) dpkg -s | —status package-name . Report status of specified package. This just displays the entry in the installed package status database. dpkg -C | —audit Searches for packages that have been installed only partially on your system. dpkg will suggest what to do with them to get them working. dpkg —get-selections [ pattern . ] Get list of package selections, and write it to stdout. dpkg —set-selections Set package selections using file read from stdin. dpkg —yet-to-unpack Searches for packages selected for installation, but which for some reason still haven’t been installed. dpkg -L | —listfiles package . List files installed to your system from package . However, note that files created by package-specific installation-scripts are not listed. dpkg -S | —search filename-search-pattern . Search for a filename from installed packages. All standard shell wildchars can be used in the pattern. dpkg —print-architecture Print target architecture (for example, "i386"). This option uses gcc . dpkg —print-gnu-build-architecture Print GNU version of target architecture (for example, "i486"). dpkg —print-installation-architecture Print host architecture for installation. dpkg —compare-versions ver1 op ver2 Compare version numbers, where op is a binary operator. dpkg returns success (zero result) if the specified condition is satisfied, and failure (nonzero result) otherwise. There are two groups of operators, which differ in how they treat a missing ver1 or ver2 . These treat no version as earlier than any version: lt le eq ne ge gt . These treat no version as later than any version: lt-nl le-nl ge-nl gt-nl . These are provided only for compatibility with control file syntax: < << <= = >= >> > . dpkg —help Display a brief help message. dpkg —force-help Give help about the —force- thing options. dpkg -Dh | —debug=help Give help about debugging options. dpkg —licence | dpkg —license Display dpkg licence. dpkg —version Display dpkg version information. dpkg-deb-actions See dpkg-deb (8) for more information about the following actions.

OPTIONS

number description
1 Generally helpful progress information
2 Invocation and status of maintainer scripts
10 Output for each file processed
100 Lots of output for each file processed
20 Output for each configuration file
200 Lots of output for each configuration file
40 Dependencies and conflicts
400 Lots of dependencies/conflicts output
1000 Lots of drivel about e.g. the dpkg/info dir
2000 Insane amounts of drivel —force- things | —no-force- things | —refuse- things

Force or refuse ( no-force and refuse mean the same thing) to do some things. things is a comma separated list of things specified below. —force-help displays a message describing them. Things marked with (*) are forced by default.

Warning: These options are mostly intended to be used by experts only. Using them without fully understanding their effects may break your whole system.

auto-select (*): Select packages to install them, and deselect packages to remove them.

downgrade (*): Install a package, even if newer version of it is already installed.

configure-any : Configure also any unpacked but unconfigured packages on which the current package depends.

hold : Process packages even when marked "hold".

remove-reinstreq : Remove a package, even if it’s broken and marked to require reinstallation. This may, for example, cause parts of the package to remain on the system, which will then be forgotten by dpkg .

remove-essential : Remove, even if the package is considered essential. Essential packages contain mostly very basic Unix commands. Removing them might cause the whole system to stop working, so use with caution.

depends : Turn all dependency problems into warnings.

depends-version : Don’t care about versions when checking dependencies.

conflicts : Install, even if it conflicts with another package. This is dangerous, for it will usually cause overwriting of some files.

confnew : If a conffile has been modified always install the new version without prompting.

confold : If a conffile has been modified always keep the old version without prompting.

confdef : If a conffile has been modified always choose the default action. If —force-confnew or —force-confold have also been given always default. If there is no default then we use the old or new version, depending on the option given.

overwrite (*): Overwrite one package’s file with another’s file.

overwrite-dir Overwrite one package’s directory with another’s file.

overwrite-diverted : Overwrite a diverted file with an undiverted version.

architecture : Process even packages with the wrong architecture.

bad-path : PATH is missing important programs, so problems are likely.

not-root : Try to (de)install things even when not root.

—ignore-depends = package . Ignore dependency-checking for specified packages (actually, checking is performed, but only warnings about conflicts are given, nothing else). —largemem | —smallmem Tells dpkg whether to preserve memory (e.g. with less than 4 MB of RAM) or consume as much as needed. —new | —old Select new or old binary package format. This is a dpkg-deb (8) option. —nocheck Don’t read or check contents of control file while building a package. This is a dpkg-deb (8) option. —no-act Do everything which is supposed to be done, but don’t write any changes. This is used to see what would happen with the specified action, without actually modifying anything.

Be sure to give —no-act before the action-parameter, or you might end up with undesirable results. (e.g. dpkg —purge foo —no-act will first purge package foo and then try to purge package —no-act, even though you probably expected it to actually do nothing) -R | —recursive Recursively handle all regular files matching pattern *.deb found at specified directories and all of its subdirectories. This can be used with -i , -A , —install , —unpack and —avail actions. -G Don’t install a package if a newer version of the same package is already installed. This is an alias of —refuse-downgrade. -R | —root= dir | —admindir= dir | —instdir= dir Change default directories. admindir defaults to /var/lib/dpkg and contains many files that give information about status of installed or uninstalled packages, etc. instdir defaults to / and refers to the directory where packages are to be installed. instdir is also the directory passed to chroot (2) before running package ‘s installation scripts, which means that the scripts see instdir as a root directory. Changing root changes instdir to dir and admindir to dir /var/lib/dpkg . -O | —selected-only Only process the packages that are selected for installation. The actual marking is done with dselect or by dpkg , when it handles packages. For example, when a package is removed, it will be marked selected for installation. -E | —skip-same-version Don’t install the package if the same version of the package is already installed.

FILES

ENVIRONMENT VARIABLES

EXAMPLES

To see the entries in /var/lib/dpkg/available on two packages:
dpkg —print-avail elvis vim | less

To search the listing of packages yourself:
less /var/lib/dpkg/available

To remove an installed elvis package:
dpkg -r elvis

To install a package, you first need to find it in an archive or CDROM. The "available" file shows that the vim package is in section "editors":
cd /cdrom/hamm/hamm/binary/editors dpkg -i vim_4.5-3.deb

To make a local copy of the package selection states:
dpkg —get-selections >myselections

You might transfer this file to another computer, and install it there with:
dpkg —set-selections <myselections

Ordinarily, you will find that dselect (8) provides a more convenient way to modify the package selection states.

dpkg Command in Linux With Examples

dpkg in Linux is the primary package manager for Debian and Debian-based systems, such as Ubuntu. The tool installs, builds, removes, configures, and retrieves information for Debian packages. The command works with packages in .deb format.

This guide explores the dpkg command syntax and options through various examples.

dpkg Command in Linux With Examples

  • A system with a Debian or a Debian-based OS.
  • Access to the command line/terminal as sudo.
  • A .deb file to work with the examples.

dpkg Command Syntax

The basic syntax for the dpkg command is:

The command accepts one action and zero or more options.

The dpkg command acts as a front-end for the following two tools:

1. The dpkg-deb command, which shows information about .deb packages.

2. The dpkg-query command, which shows the information from the dpkg database.

The dpkg command runs actions from dpkg-query and dpkg-deb . Therefore, the following two commands show the same result:

The action -l is a dpkg-query action that lists all packages from the dpkg database. The dpkg command detects the foreign options and runs dpkg-query automatically.

dpkg Command Options

The table below provides brief descriptions of commonly used options and actions for the dpkg command.

wget cowsay terminal output

Confirm the .deb file downloaded by listing directory contents with the ls command:

ls deb package terminal output

The output shows the .deb package.

Install Package

Install a Debian package with the dpkg command and the -i or —install tag:

sudo dpkg -i terminal output

The command requires sudo to install a .deb package.

List Known Packages

To list all known packages, use the -l tag:

dpkg -l terminal output

The command prints the packages in pager mode. Navigate using the arrow keys or use space to list by page. Press q to exit the list. The columns list each package’s name, version, architecture, and description.

Note: Pager modules, such as the less command, help display long outputs page by page.

The first three columns provide a complete overview of the package status:

1. Action selection:

  • u — Unknown
  • i — Install
  • h — Hold
  • r — Remove
  • p — Purge

2. Package status:

  • n — Not installed
  • c — Config files
  • H — Half installed
  • U — Unpacked
  • F — Half configured
  • W — Awaiting triggers
  • t — Pending triggers
  • i — Installed
  • R — Reinstallation required
  • <empty> — No errors

Therefore, a package status » ii » means dpkg successfully installed the package selected for installation without errors.

To fetch a specific instance from the list, use:

dpkg -l specific package terminal output

To list multiple packages, separate each package name with a space.

Remove Package

To remove a Debian package, use the following command:

For example, to remove the cowsay package, use:

dpkg -r terminal output

The -r option does not remove the configuration files. Use this option when removing software for reinstallation.

Purge Package

To purge a package, use the -P option:

sudo dpkg -P terminal output

The command removes a package along with any configuration files. Use purge to remove a program from the system altogether.

Show Package Contents

A .deb package contains several files and directories, indicating where the package resides after installation or unpacking.

To display the package contents, run:

files and directories in the .deb package file

The output shows all the files and directories in the .deb package file. The example package resides in /usr/games/ and /usr/share/ after installation or unpacking.

Unpack Package

To unpack the package without configuration, use:

sudo dpkg --unpack terminal output

The command unpacks all the files from the package.

Configure Package

To configure an unpacked .deb package or reconfigure an installed package, use:

sudo dpkg --configure terminal output

Unpacking and configuring a Debian package divides the installation process into two steps.

Check If the Package Installed

To check whether a package is installed, use the -s tag:

dpkg -s terminal output

The Status line shows whether a package is installed.

Show Package Information

To show package information directly from the .deb file, use the following command:

dpkg -I terminal output

The command shows package information, such as the size, dependencies, and documentation references. Use this method to check package information before installing a package.

Install All Packages from a Directory

Use the -R option before -i to install packages recursively:

sudo dpkg -R -i terminal output

The command installs all packages located in the directory and any subdirectories. If multiple instances of the same package unpack, only one configuration occurs.

List Installed Package Files’ Locations

To list the package files and their location, use the -L tag:

dpkg -l list files terminal output

The output lists all the file directories and file locations.

Get Package Selections

To fetch the package names by selection, use:

dpkg --get-selections terminal output

The list shows package names and the selection marking.

List Installed Packages

To fetch a list of installed packages, use the following command:

dpkg get selectionsinstalled packages terminal output

The command does the following:

    filters out packages marked "deinstall" . prints only the first column with the package names.

Use this method when you require a list of installed programs.

Set Package Selections

Set the package selection for a package in the following format:

The command expects the package state as standard input. The possible conditions are:

  • install
  • hold
  • deinstall
  • purge
  • unknown

For example, to stop a package from updating, use:

The package is in a hold state, meaning the program receives no automatic updates.

Search Package Containing Files

To find a package containing a file, use the -S option:

For example, search for apt-get:

dpkg -s apt-get terminal output

The output shows apt-get belongs to the apt package.

Note: Learn about the difference between apt vs. apt-get.

Alternatively, search for a specific file. For example:

dpkg -s file terminal output

The output shows the file belongs to the cowsay package.

Compare Versions

The dpkg command offers a tool for comparing program version numbers. The syntax is:

The possible comparison operators are:

  • lt — Strictly less than
  • le — Less than or equal to
  • eq — Equal
  • ne — Not equal
  • ge — Greater than or equal to
  • gt — Strictly greater than

dpkg returns 0 (success) for a correct comparison and a non-zero value for failure.

For example, compare the following version numbers:

dpkg --compare-versions terminal output

The command returns 0 , indicating the first version number is greater than the second.

Multi-Architecture Support

All Debian packages contain supported architecture information. The restriction ensures the system does not end up with binaries for an incorrect architecture.

Some architectures support different architectures natively. For example, an amd64 (a 64-bit system) supports i386 (a 32-bit system) installations.

The dpkg command matches the host’s architecture. Fetch the information with:

dpkg --print-architecture terminal output

To see the foreign architecture support, use:

dpkg --print-foreign-architecture terminal output

To add or remove architecture support, use:

In both cases, the foreign architectures list updates with the changes immediately.

Check dpkg Command Version

To check which dpkg version the system is running, use:

dpkg --version terminal output

The output shows the dpkg version along with the architecture.

Print Help

To show a simple help menu, use the following command:

dpkg --help terminal output

Use the man command to find find the complete documentation.

After following the examples from this tutorial, you should master the basics of the dpkg command.

Next, try the more modern apt package manager, which searches through the official repositories for packages.

Записки IT специалиста

Linux — начинающим. Часть 5. Управление пакетами в Debian и Ubuntu

  • Автор: Уваров А.С.
  • 20.09.2019

linux-apt-5-000.pngУмение устанавливать, обновлять и удалять программное обеспечение относится к важнейшим навыкам работы с любой операционной системой. Поэтому изучение данного вопроса первостепенная задача для любого начинающего пользователя Linux, сразу после того, как он немного осмотрелся в системе. К сожалению, нет единого способа управления ПО, подходящего для всех дистрибутивов, разные семейства предполагают различные подходы, хотя общие принципы во многом совпадают. В данном материале мы будем разбирать вопрос применительно к системам основанным на Debian и Ubuntu.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Пакеты и репозитории

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

linux-apt-5-001.png

Существуют различные форматы пакетов, наиболее распространенными из которых являются RPM (рекурсивный акроним RPM Package Manager, ранее Red Hat Package Manager) и DEB (сокращение от Debian). Первый используется в основанных на Red Hat/Fedora дистрибутивах, а также некоторых иных, например, OpenSUSE, второй — во всем многочисленном семействе систем на базе Debian и его производных, включая один из самых популярных дистрибутивов — Ubuntu.

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

Еще одна особенность пакетов Linux вытекает из следования некоторым постулатам философии Unix, а именно каждый пакет содержит только необходимый минимум файлов и библиотек, все остальные необходимые ему компоненты указываются в качестве зависимостей. Причем разделение на небольшие пакеты присутствует даже у одного продукта: в один пакет могут быть включены бинарные файлы, во второй — общие библиотеки, в третий — документация и т.д. и т.п. Это позволяет достаточно гибко управлять процессом разработки и поддержки, если разработчики внесли изменения в какую-то библиотеку, то вам не нужно снова скачивать продукт целиком, достаточно обновить только пакет с библиотекой.

Кроме того, при разработке свободного ПО широко используются наработки других проектов, действительно, зачем повторно изобретать велосипед, если нужные функции уже есть в библиотеке другого проекта. Достаточно просто указать нужный пакет в зависимостях, при этом скачивать весь сторонний проект также будет не нужно, достаточно только необходимых пакетов.

Все это хорошо, скажет иной читатель, только как мне узнать какие именно пакеты мне нужно установить, чтобы получить на выходе полноценный продукт, как разобраться во всем этом обилии непривычных названий? Для этой цели существуют метапакеты. По сути — это пакет пустышка, который в своих зависимостях имеет нужный перечень пакетов для установки готового продукта. Например, если нужен офисный пакет, то достаточно просто установить libreoffice, этот метапакет по зависимостям подтянет и установит все необходимые компоненты для полного набора офиса, каким вы его привыкли видеть. Хотя никто не мешает установить самому только нужные компоненты, скажем только LibreOffice Calc.

linux-apt-5-002.png

Следующий вопрос — где брать пакеты? Windows опыт подсказывает — на сайте разработчика или производителя ПО. Но этот подход в Linux не работает, точнее работает частично. Почему? Ну вот скачали мы нужный пакет и выясняется, что у него еще 10 пакетов в зависимостях, где их брать? На сайтах их разработчиков, а у них окажутся свои зависимости. Поэтому в Linux были созданы и поддерживаются централизованные хранилища пакетов — репозитории. Каждый крупный дистрибутив имеет собственные репозитории для всех поддерживаемых выпусков и архитектур, которые содержат огромное количество ПО и поэтому вам не следует волноваться о том, где искать пакеты.

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

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

Как правило типичный дистрибутив на базе Debian имеет четыре основных репозитория:

  • Base repository — основное хранилище, содержит все пакеты, но обновляется достаточно редко, обычно одновременно с выходом минорной версии дистрибутива, например, Debian 9.6, Debian 9.7 и т.д.
  • Security updates — обновления безопасности, являются критически важными для функционирования системы и крайне желательны к установке.
  • Stable updates — стабильные обновления, не являющиеся обновлениями безопасности, могут исправлять некритические ошибки в ПО или незначительно расширять его функционал в рамках текущей версии.
  • Stable backports — стабильное ПО с обратной совместимостью, содержит прекомпилированные для текущего дистрибутива самые свежие версии ПО, которые разрабатываются в рамках новой версии, позволяет использовать более новые версии программ, не подвергая стабильность дистрибутива угрозам при использовании пакетов тестируемой или нестабильной ветки.

Каждый репозиторий состоит из нескольких разделов, в Debian это:

  • main — содержит пакеты, которые полностью совместимы с «Критериями Debian по определению Свободного ПО»
  • non-free — распространяемое без ограничений ПО, которое не соответствует или не полностью соответствует принципам свободного ПО по версии FSF (Free Software Foundation, Фонд свободного ПО)
  • contrib — свободное ПО, которое требует для работы несвободные компоненты, например, бинарные модули драйверов, прошивок ROM и т.д., либо требует ПО, имеющее собственника, скажем несвободную версию Java от Oracle.

В Ubuntu разделы немного иные:

  • main — также, как и в Debian содержит свободные пакеты, поддерживаемые компанией Canonical
  • restricted — несвободное ПО, поддерживаемое Canonical
  • universe — свободное ПО, поддерживаемое сообществом
  • multiverse — несвободное ПО, поддерживаемое сообществом.

Список подключенных репозиториев хранится в /etc/apt/sources.list, ниже показано содержимое этих файлов в Debian 10 (слева) и Ubuntu 18.04 (справа).

linux-apt-5-003.png

В Debian все достаточно лаконично, подключен только раздел main трех репозиториев Base, Security updates и Stable updates, если вам нужны иные разделы, то их следует подключить самостоятельно, добавив через пробел в нужную строку.

В Ubuntu более развернутый список репозиториев, он полностью не уместился на скриншот, но для понимания структуры записей приведенного фрагмента хватает. Сверху вниз подключены Base и Security updates для поддерживаемых компанией разделов, затем они же вместе для свободного и несвободного ПО поддерживаемого сообществом, а вот Stable backports прописан для всех веток одновременно, еще ниже (за пределами экрана на скриншоте) подключены Security updates и специальный партнерский репозиторий для пакетов партнеров компании Canonical.

Типичная запись репозитория выглядит как строка со следующей структурой:

Строка начинается с deb, который обозначает репозиторий с двоичными пакетами или deb-src для репозиториев с исходным кодом, если вы не собираетесь самостоятельно собирать пакеты, то вам они не нужны. Далее идет адрес репозитория и имя выпуска, для Debian это buster, для Ubuntu — bionic, затем следует перечисление подключенных разделов, в указанном примере подключены все три.

Адреса репозиториев сохраняются постоянными, отличаясь только именами выпуска, поэтому если вам нужно обновить выпуск, скажем с Debian 9 на Debian 10, то вам просто потребуется заменить везде stretch (имя девятого выпуска) на buster.

Также в Debian можно использовать вместо имен классы выпусков:

  • stable — текущий выпуск дистрибутива,
  • oldstable — предыдущий выпуск,
  • testing — разрабатываемый выпуск,
  • unstable — нестабильный выпуск, он же имеет собственное имя sid.

Но на практике это не используется, так как при выходе нового релиза вы получите его автоматическое обновление, что в большинстве случаев неприемлемо. Хотя если вы энтузиаст и хотите всегда быть на переднем крае прогресса, то можете везде прописать testing, получив аналог популярных ныне rolling release дистрибутивов, которые не имеют закрепленной версии и всегда предоставляют наиболее свежий срез пакетов, зачастую ценой стабильности.

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

Низкоуровневый менеджер пакетов Dpkg

Все это время мы говорили о пакетах и не касались вопроса каким образом происходит их установка. В Windows все просто, инсталлятор является исполняемым файлом и сам производит все необходимые действия, в Linux это не так и для работы с пакетами нам потребуется специальная утилита — пакетный менеджер.

Основой системы управления пакетами в Debian является dpkg — достаточно низкоуровневая утилита, предназначенная для получения информации, установки и удаления пакетов. Назвать ее менеджером пакетов в современном смысле этого слова достаточно затруднительно, dpkg не умеет работать с репозиториями и разрешать зависимости. Но тем не менее этот инструмент достаточно широко используется по сей день и навыки работы с ним необходимо иметь каждому администратору.

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

linux-apt-5-004.png

Для установки просто выполните:

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

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

Чтобы получить сведения о всех доступных и установленных пакетах используется ключ -l, но он выведет список всех пакетов, поэтому следует использовать его с маской, например, так:

linux-apt-6-004.png

Так как мы задали имя пакета без подстановочных символов, то информация будет выведена только при полном совпадении заданного имени с именем пакета. Если мы хотим получить больше информации, то можем сделать так:

linux-apt-6-005.png

Теперь мы видим больше пакетов, как установленных в системе, так и доступных в репозитории. Но это не все пакеты, относящиеся к gimp, так как наша маска предписывает искать пакеты, которые начинаются на gimp и игнорирует иные варианты. Поэтому, если вы не уверены, что правильно задали маску, можно пойти другим путем, отдав вывод dpkg команде grep, которая найдет все нужные вхождения.

linux-apt-6-006.png

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

Для удаления пакета используйте:

Обратите внимание, что здесь мы указываем не имя deb-файла, а имя установленного пакета, узнать его можно способом, представленным выше. Часто после удаления пакета от него остаются конфигурационные файлы и иные данные, полностью очистить их можно командой:

Но будьте внимательны, при этой операции могут быть удалены пользовательские данные, хранившиеся в стандартных расположениях. Это актуально для таких видов программ, как веб-сервера или СУБД.

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

Улучшенный инструмент для работы с пакетами APT и команды apt и apt-get

Настоящим пакетным менеджером в Debain является APT (Advanced Package Tool, Улучшенный инструмент для работы с пакетами), который умеет работать с репозиториями, разрешать зависимости и взаимодействовать с dpkg, которая, собственно, и занимается установкой пакетов.

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

Как мы уже говорили, списки репозиториев хранятся в /etc/apt/sources.list, но они не содержат сведений о пакетах, чтобы их получить нужно скачать из репозитория список находящихся в нем пакетов. Понятно, что каждый раз скачивать списки — плохая идея, поэтому APT хранит локальный кеш пакетов в /var/lib/apt/lists, также копии всех скачанных пакетов сохраняются в /var/cache/apt/archives, что позволяет предотвратить их скачивание в случае повторной установки.

linux-apt-6-007.png

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

APT всегда работает с локальным кешем списков, поэтому перед любыми действиями с пакетным менеджером следует обновить списки в кеше. Это можно сделать командой, которая должна быть широко известна нашим читателям:

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

linux-apt-6-008.png

Установить обновления можно командой:

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

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

Обычные обновления следует выполнять командой upgrade, тогда как dist-upgrade следует использовать для обновления дистрибутива, в том числе и на минорные версии в составе текущего выпуска.

Для установки пакетов следует использовать команду:

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

linux-apt-6-009.png

В целом APT хорошо знает свое дело, но мы все равно советуем обращать внимание на состав добавляемых и, особенно, удаляемых пакетов. Также не будет лишним изучить список предлагаемых пакетов, там вы можете найти много интересного и полезного, что позволит расширить возможности устанавливаемого ПО и о чем вы могли даже не догадываться.

Для удаления пакета используйте:

Это удалит сам пакет, но оставит его конфигурационные файлы (если они были изменены) и прочие данные. Для полного удаления пакета со всеми его данными используйте другую команду:

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

Дополнительно остановимся на таком виде пакетов, как пакеты установленные автоматически. Это пакеты, которые были установлены по зависимостям иных пакетов и после удаления или обновления последних могут более никем не использоваться. APT отслеживает такие пакеты и сообщает о них пользователю.

linux-apt-6-010.png

Удалить их можно командой:

Как можно заметить, APT достаточно дружелюбен к пользователю, постоянно подсказывая ему необходимые команды, что в очередной раз развеивает миф о сложности администрирования Linux, особенно в режиме командной строки.

Также иногда может потребоваться возможность очистить кеш скачанных пакетов, скажем при недостатке места на диске, это можно сделать, введя:

Эта команда полностью очистит кеш, также можно использовать более мягкую очистку с помощью apt-get, который дает возможность удалить из кеша только те пакеты, которые на текущий момент отсутствуют в репозитории (были заменены новыми версиями или удалены):

Затронем еще один интересный момент, допустим вы в своих экспериментах удалили или еще как-либо повредили входящие в состав пакета файлы, но система считает, что пакет установлен и отказывается устанавливать его повторно. Но можно всегда переустановить пакет:

Еще одна важная возможность APT — это восстановление нарушенных зависимостей и автоматическое исправление ошибок при установке пакетов, например, когда процесс обновления или установки был аварийно прерван. Либо когда вы установили некоторый пакет при помощи dpkg и при этом у него оказались неудовлетворенные зависимости. Все это в большинстве случаев отлично исправляется одной простой командой:

Также иногда бывает нужно проверить что произойдет при установке пакета без его установки, особенно если у нас есть подозрения, что мы можем что-то сломать в системе. Для этого запустите команду установки с ключом -s:

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

linux-apt-6-011.png

Если вы не знаете точного названия нужного вам пакета, то можно выполнить его поиск командой:

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

linux-apt-6-012.png

Для получения информации о пакете просто введите:

linux-apt-6-013.png

Еще одна задача, с которой может столкнуться администратор — это фиксация версии пакета, допустим вы собрали и установили собственный пакет с нужными вам функциями и не хотите чтобы при обновлении системы он был заменен стандартным из репозитория. Не проблема, отметьте пакет как зафиксированный:

Чтобы отменить фиксацию выполните:

Объем данной статьи не позволяет рассмотреть все возможности apt, поэтому мы ограничились наиболее необходимыми в повседневной деятельности, ну и в завершение небольшая порция юмора. Если запустить команду apt без параметров, то вы увидите краткую справку в самом конце которой будет строка: В APT есть коровья СУПЕРСИЛА. Что это значит? Просто наберите:

И вы увидите старую пасхалку от разработчиков, которая была еще в apt-get, а затем ее заботливо перенесли в apt.

linux-apt-6-014.png

Графические оболочки Aptitude и Synaptic

Кроме родных для APT консольных интерфейсов apt-get и apt существуют и более высокоуровневые оболочки. Одна из них aptitude, которая может работать как в псевдографическом режиме, так и в режиме командной строки, имея синтаксис во многом повторяющий синтаксис apt. Благодаря этому многие воспринимают эту утилиту как еще один интерфейс к APT, хотя основной задачей разработчиков было именно создание псевдографической интерактивной оболочки.

linux-apt-6-015.png

В современных дистрибутивах Debian и Ubuntu aptitude отсутствует в основной поставке и вам потребуется установить этот пакет отдельно.

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

linux-apt-6-016.png

Однако не смотря на то, что Aptitude и Synaptic являются зрелыми и эффективными инструментами, мы бы не рекомендовали их использование по крайней мере до тех пор, пока вы не освоите работу с базовым интерфейсом apt.

Магазины приложений

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

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

Так и в современном Linux, если раньше эта ОС ассоциировалась преимущественно с энтузиастами и «хакерами», то сейчас это система открыта для всех. Магазины приложений — это простой и надежный способ управления программным обеспечением для обычных пользователей, не имеющих специальных технических знаний. А опытный администратор, скорее всего, предпочтет работу в привычной ему командной строке.

Ниже показан магазин для актуальной версии Debian

linux-apt-6-017.png

или Ubuntu

linux-apt-6-018.pngЗаключение

Как видим, Debian и основанные на нем системы предоставляют широкий выбор инструментов для управления пакетами, начиная от утилит командной строки и заканчивая магазинами приложений. Каждый найдет инструмент себе по душе. Но для начинающих администраторов мы бы рекомендовали в обязательном порядке осваивать базовые инструменты, такие как dpkg и apt, потому что ситуации бывают разные, а базовые инструменты, в отличие от графической оболочки или псевдографических утилит, доступны всегда.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Дополнительные материалы:

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *