Модуль 15. Управление ПО в Astra Linux

Введение

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

Исполняемые файлы ELF

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

В модуле 13 мы уже познакомились с процессами и знаем, что операционная система может выполнять инструкции из специальных бинарных файлов, которые называются исполняемыми файлами. В Windows такие файлы имеют расширение *.exe (от англ. executable files - исполняемые файлы), а в Linux это ELF (от англ. executable and linkable format — формат исполняемых и связываемых файлов).

С помощью утилиты hexdump мы можем легко заглянуть в начало этих файлов и найти специфичные для них сигнатуры, но если с ELF все понятно, то MZ в exe-файлах – это не что иное, как инициалы ведущего разработчика MS-DOS Марка Збиковски (ЧСВ у парня было… мое почтение).

localadmin@astra:~$ hexdump -C /usr/bin/cat | head -3
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 3e 00 01 00 00 00 50 2f 40 00 00 00 00 00 |..>.....P/@.....|
00000020 40 00 00 00 00 00 00 00 90 95 00 00 00 00 00 00 |@...............|

localadmin@astra:~$ file /usr/bin/cat
/usr/bin/cat: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynami...

В качестве подопытного возьмем WinBox от MikroTik:

localadmin@astra:~$ wget https://mt.lv/winbox64 -O winbox64.exe
localadmin@astra:~$ hexdump -C winbox64.exe | head -3
00000000 4d 5a 90 00 03 00 00 00 04 00 00 00 ff ff 00 00 |MZ..............|
00000010 b8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 |........@.......|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
localadmin@astra:~$ file winbox64.exe
winbox64.exe: PE32+ executable (GUI) x86-64 (stripped to external PDB), for MS Windows

Обратите внимание, что утилита file без проблем распознает сигнатуру exe-файлов даже без расширения.

Файлы EXE и ELF, конечно, отличаются по формату, но куда важнее то, что их программный код по-разному взаимодействует с операционной системой для получения доступа к ресурсам. Как вы помните, в Windows это взаимодействие осуществляется через API, а в Unix-подобных системах через прямые системные вызовы к ядру, поэтому просто так вы не запустите exe-файл на Linux и ELF-файл на Windows.

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

Примечание

Можно отметить еще, что исполняемые файлы компилируются под разные архитектуры процессоров, отличающиеся набором инструкций на аппаратном уровне, поэтому у одной и той же версии приложения могут быть релизы для архитектуры x86-64 (она же AMD64, Intel64, /EM64T), ARM, Эльбрус и др. Компиляторы современных языков высокого уровня позволяют генерировать исполняемый код под разные архитектуры даже без внесения каких-либо изменений в программный код,поэтому этот нюанс не стоит большого внимания.

Для еще большего стирания границы между Windows и Linux был создан продукт Wine, который умеет перехватывать вызовы exe-приложений к библиотекам операционной системы Windows и подменять их своими, обращаясь уже к системным вызовам системы Linux. Но следует понимать, что этот проект сталкивается с большими трудностями вследствие отсутствия документации по многим элементам Win32 API, поэтому «в бутылке» можно заставить работать не все Windows-приложения и далеко не сразу. Однако, если у вас на предприятии используются какие-то древние клиентские приложения, на переписывание которых нет ресурсов, то Wine вполне может стать для вас спасательным кругом, и такую возможность нужно обязательно проверить.

Примечание

Для установки Wine выполните команду sudo apt install wine ia32-libs, после чего приложение WinBox, например, можно будет запустить командой wine winbox64.exe или двойным кликом из файлового менеджера. Ну что, одну катку в Сапера или разложим Косынку?

А что насчет совместимости систем, основанных на Linux? Ядра этих систем используют общую кодовую базу и компилируются с небольшими отличиями, поэтому один и тот же ELF-файл может вполне успешно запускаться и на RHEL, и на Debian, и на Astra Linux. Собственно, именно поэтому мы можем запускать Linux-контейнеры разных систем на одном и том же ядре хостовой системы и portable файлы AppImage, которым для работы достаточно указать флаг запуска +x.

Пакеты приложений и менеджер dpkg

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

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

Разные операционные системы используют разные пакеты и пакетные менеджеры, например, в Debian это deb-пакеты и Debian package management system (DPKG), в RedHat — RedHat Package Manager (RPM), в Arch Linux — PAMCAN, в OpenSUSE — Zypper. По тому, какие пакеты используются в системе, разные дистрибутивы Linux иногда даже объединяют в группы deb-based, rpm-based и другие.

Есть свой пакетный менеджер и в Windows, который называется Windows Package Manager (winget). Он работает с MSI-пакетами и EXE программами установки. Winget имеет свой репозиторий ПО, из которого он устанавливает пакеты на целевую систему, но можно также добавить сторонние репозитории или создать свой.

Примечание

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

Но есть и очевидный плюс от такого разнообразия. Учитывая, что разные линуксы немного по-разному трактуют FHS, наличие разных пакетов сильно снижает путаницу, а то пытались бы мы ставить пакеты от RedHat на Debian и очень удивлялись, почему лыжи не едут.

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

  • sudo dpkg -i <пакет>.deb – ключ -i (--install) означает, что нужно установить указанный пакет. Указывается имя deb-файла, включая абсолютный или относительный путь к нему.

  • sudo dpkg -r <имя пакета> – ключ -r (--remove) указывает, что требуется удалить пакет, сохраняя конфигурационные файлы в системе. Указывается имя пакета, установленного ранее в системе.

  • sudo dpkg -P <имя пакета> – ключ -P (--purge) указывает, что нужно удалить пакет полностью вместе с конфигурационными файлами.

  • dpkg -l – ключ -l (строчная L, --list) позволяет получить список всех установленных в системе пакетов. Для получения этой информации привилегии суперпользователя не требуются.

  • dpkg -I <пакет>.deb – ключ -I (заглавная i, --info) позволяет получить подробную информацию о пакете из deb-файла, включая краткое описание и список зависимостей.

  • dpkg -s <имя пакета> – ключ -s (--status) позволяет получить подробную информацию о пакете, ранее установленном в системе, включая краткое описание.

  • dpkg -L <имя пакета> – ключ -L (--listfiles) позволяет получить полный список всех файлов, которые были установлены в системе из этого пакета, включая справочные страницы.

  • dpkg -S <имя файла> – ключ -S (--search) позволяет найти пакет, которому принадлежит указанный файл. Для поиска вы можете указать полный путь к файлу, но учитывайте, что это может быть ссылка, которая не зарегистрирована в dpkg. Поэтому, если вы получите ошибку «не найден путь, подходящий под шаблон», попробуйте указать только имя файла и проанализировать все полученные результаты.

Рассмотрим несколько практических примеров:

С помощью ключа -l (строчная L, --list) получим список установленных пакетов и отфильтруем его:

localadmin@astra:~$ dpkg -l | grep sudo
ii  sudo  1.8.27-1+deb10u5+ci202309191157+astra6  amd64  Provide ...

Запросим детализированную информацию об установленном пакете:

localadmin@astra:~$ dpkg -s sudo
Package: sudo
Status: install ok installed
Priority: optional
Section: admin
Installed-Size: 3793
Maintainer: Bdale Garbee <bdale@gag.com>
Architecture: amd64
Version: 1.8.27-1+deb10u5+ci202303222055+astra3
Replaces: sudo-ldap
Depends: libaudit1 (>= 1:2.2.1), libc6 (>= 2.27), libpam0g (>= 0.99.7.1),  libselinux1 (>= 1.32),
libpam-modules, lsb-
base
Conflicts: sudo-ldap
Conffiles:
/etc/init.d/sudo 1153f6e6fa7c0e2166779df6ad43f1a8
/etc/pam.d/sudo 4af0e4d91e635bebb96ca0eabdea1182
/etc/sudoers 45437b4e86fba2ab890ac81db2ec3606
/etc/sudoers.d/README 8d3cf36d1713f40a0ddc38e1b21a51b6
Description: Provide limited super user privileges to specific users
Sudo is a program designed to allow a sysadmin to give limited root
privileges to users and log root activity.  The basic philosophy is to give
as few privileges as possible but still allow people to get their work done.
This version is built with minimal shared library dependencies, use the
sudo-ldap package instead if you need LDAP support for sudoers.
Homepage: http://www.sudo.ws/

Отобразим список всех файлов, установленных из пакета acl:

localadmin@astra:~$ dpkg -L acl
/.
/bin
/bin/chacl
/bin/getfacl
/bin/setfacl
. . .
/usr/share/man/man5
/usr/share/man/man5/acl.5.gz

Скачаем deb файл Яндекс диска командой wget:

localadmin@astra:~$ wget https://repo.yandex.ru/yandex-disk/yandex-disk_latest_amd64.deb
--2024-06-02 21:25:02-- https://repo.yandex.ru/yandex-disk/yandex-disk_latest_amd64.deb
Распознаётся repo.yandex.ru (repo.yandex.ru)… 213.180.204.183, 2a02:6b8::183
Подключение к repo.yandex.ru (repo.yandex.ru)|213.180.204.183|:443... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 4796514 (4,6M) [application/octet-stream]
Сохранение в: «yandex-disk_latest_amd64.deb»
yandex-disk_latest_amd64.deb
100%[==============================================>]   4,57M 10,7MB/s за 0,4s
2024-06-02 21:25:02 (10,7 MB/s) - «yandex-disk_latest_amd64.deb» сохранён [4796514/4796514]

Выведем информацию об этом deb-пакете:

localadmin@astra:~$ dpkg -I yandex-disk_latest_amd64.deb
new Debian package, version 2.0.
size 4796514 bytes: control archive=1740 bytes.
     51 байт(а),     1 строк      conffiles
    540 байт(а),    15 строк      control
    729 байт(а),    10 строк      md5sums
   1663 байт(а),    66 строк   *  postinst             #!/bin/sh
    371 байт(а),    24 строк   *  postrm               #!/bin/sh
     41 байт(а),     3 строк   *  prerm                #!/bin/sh
Package: yandex-disk
Version: 0.1.6.1080
Maintainer: Yandex LLC <support@disk.yandex.ru>
Architecture: amd64
Installed-Size: 12404
Depends: libc6, libgcc1, libstdc++6, zlib1g
Section: misc
Priority: optional
Description: Yandex.Disk keeps your files with you at all times.
 You can access photos, videos, and documents on Disk
 from any where in the world where there's internet.
 The Yandex.Disk client console lets you:
 * synchronize files and folders with your Disk
 * get public links to files and folders
 * customize folder syncing

Выполним установку Яндекс диска из deb-пакета утилитой dpkg:

localadmin@astra:~$ sudo dpkg -i yandex-disk_latest_amd64.deb
Выбор ранее не выбранного пакета yandex-disk.
(Чтение базы данных … на данный момент установлено 191708 файлов и каталогов.)
Подготовка к распаковке yandex-disk_latest_amd64.deb …
Распаковывается yandex-disk (0.1.6.1080) …
Настраивается пакет yandex-disk (0.1.6.1080) …
Using /usr/bin/wget
Обрабатываются триггеры для man-db (2.8.5-2) …
Обрабатываются триггеры для xserver-xorg-core (2:1.20.14-1ubuntu1astra.se31) …
update exec ids due to /usr/bin changed

Найдем, какому пакету принадлежит утилита zcat:

localadmin@astra:~$ dpkg -S zcat
gzip: /usr/share/man/man1/zcat.1.gz
xz-utils: /usr/share/man/man1/xzcat.1.gz
bzip2: /usr/share/man/man1/bzcat.1.gz
bzip2: /bin/bzcat
klibc-utils: /usr/lib/klibc/bin/zcat
gzip: /bin/zcat
xz-utils: /usr/bin/xzcat

Не забываем, что /bin является символьной ссылкой на /usr/bin:

localadmin@astra:~$ ls -l /bin
lrwxrwxrwx 1 root root 7 мая 16 2023 /bin -> usr/bin

При установке и удалении приложений пакетный менеджер dpkg обновляет информацию в своей локальной базе, которая находится в папке /var/lib/dpkg/ и представляет собой обычные текстовые файлы. Например, когда мы запускаем команду dpkg -S zcat, она выполняет поиск всех файлов *.list в каталоге /var/lib/dpkg/info/, которые содержат имя zcat, что можно имитировать с помощью обычной команды find:

localadmin@astra:~$ find /var/lib/dpkg/info/ -name '*.list' -exec grep -iH 'zcat' {} \;
/var/lib/dpkg/info/bzip2.list:/bin/bzcat
/var/lib/dpkg/info/bzip2.list:/usr/share/man/man1/bzcat.1.gz
/var/lib/dpkg/info/klibc-utils.list:/usr/lib/klibc/bin/zcat
/var/lib/dpkg/info/gzip.list:/bin/zcat
/var/lib/dpkg/info/gzip.list:/usr/share/man/man1/zcat.1.gz
/var/lib/dpkg/info/xz-utils.list:/usr/bin/xzcat
/var/lib/dpkg/info/xz-utils.list:/usr/share/man/man1/xzcat.1.gz

Управление зависимостями и приложения apt, aptitude, synaptic

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

Методология разработки приложений с использованием частей других программных продуктов получила название «повторного использования кода» (англ. code reuse). Эта идея лежит в основе абсолютно всех языков программирования высокого уровня, платформ для разработки СУБД и всевозможных фреймворков – все они облегчают разработку за счет того, что предлагают повторное использование их кода.

Например, при разработке Системы управления ресурсами (СУР, устаревшее название ERP) мы можем написать собственную систему хранения данных на языке Си, воспользоваться библиотекой для создания встроенных баз данных Berkeley DB, системой управления базами данных PostgreSQL или даже технологической платформой для разработки систем учета «1С:Предприятие». И чем более подходящий инструмент будет выбран, тем успешнее окажется продукт в будущем.

В системе Windows администраторы не так часто сталкиваются с ситуациями, когда для работы одного приложения нужно установить что-то еще. Ну, максимум потребуется обновить библиотеки VC++ Runtime и поставить .net framework, виртуальную машину Java (JVM) или кодеки. А в Linux идея повторного использования кода была возведена в абсолют, что стало одновременно ее благословением и проклятьем.

Для работы отдельных Linux-приложений требуется установить десятки или даже сотни других пакетов, и когда-то давно это приходилось делать исключительно вручную, на что уходило катастрофически много времени. Поэтому для упрощения процедуры управления пакетами были созданы продвинутые пакетные менеджеры, такие как APT (Advanced Packaging Tool), которые умеют автоматически разрешать зависимости и загружать все необходимые пакеты из сетевых репозиториев. Первым оказался Debian со своим APT, что обеспечило ему технологическое лидерство на несколько лет, а затем подтянулся и RedHat со своим Yum и DNF.

Например, если скачать с сайта Яндекса пакет yandex-browser-stable_24.4.1.951-1_amd64.deb, то при попытке установить его обычной командой dpkg -i вы получите ошибку «проблемы зависимостей». Но стоит в /etc/apt/source.list раскомментировать репозитории Astra Linux и выполнить команду apt update, как установка Яндекс браузера и множества других прикладных приложений станет доступна всего одной командой типа apt install yandex-browser-stable. Причем загружаться эти пакеты будут из проверенных репозиториев вендора, что намного безопаснее.

Проверьте, что в файле источников у вас раскомментированы репозитории base и extended

localadmin@astra:~$ cat /etc/apt/sources.list
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base/ 1.7_x86-64 main contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main contrib non-free

Обновите индекс доступных пакетов:

localadmin@astra:~$ apt-get update
Сущ:1 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base 1.7_x86-64 InRelease
Сущ:2 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended 1.7_x86-64
InRelease
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Может быть обновлён 541 пакет. Запустите «apt list --upgradable» для показа

Установите Яндекс браузер из репозиториев Astra Linux:

localadmin@astra:~$ sudo apt-get install yandex-browser-stable
[sudo] пароль для localadmin:
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
...
Следующие НОВЫЕ пакеты будут установлены:
  ffmpeg-plugin-browser gstreamer1.0-libav gstreamer1.0-plugins-bad ... mesa-vulkan-drivers    yandex-browser-stable
Обновлено 0 пакетов, установлено 40 новых пакетов ...
Необходимо скачать 202 MB архивов.
После данной операции объём занятого дискового
пространства возрастёт на 545 MB.
Хотите продолжить? [Д/н]
...

Следует понимать, что DPKG и APT – это технологии, доступ к которым осуществляется через API динамических библиотек, а утилиты dpkg, apt-get и др. – это всего лишь инструменты командной строки, которые к ним обращаются. Утилиты apt-* вышли сразу вместе с APT в 1998 году. Чуть позднее в 2003 году появилась графическая оснастка Synaptic, а затем в 2005 году увидела свет утилита с псевдографическим интерфейсом Aptitude. Но значительным результатом переосмысления опыта работы с зависимостями стала утилита командной строки apt, первый релиз которой состоялся в 2014 году. Архитектура системы управления пакетами представлена на рис. 62.

../_images/alse_mod15_image4.png

рис. 62 Архитектура системы управления пакетами Debian-систем

Утилита apt предлагает комплексное разрешение зависимостей и разработана как интерфейс конечного пользователя, поэтому выводит более подробные комментарии о результатах выполнения каждой команды apt и использует красивую подсветку вывода. В скриптах автоматизации предпочтение следует отдавать более простым специализированным инструментам APT, таким как apt-get, apt-cache и др. Именно по этой причине apt выдает предупреждение в командах типа apt list | grep sssd, когда вывод утилиты перенаправляется дальше по конвейеру: «ВНИМАНИЕ: apt не имеет стабильного интерфейса командной строки. Используйте его в скриптах автоматизации с осторожностью».

Примечание

Имя утилиты apt совпадает с именем пакетного менеджера APT в целом, поэтому вам крайне важно внимательно следить за контекстом, в котором используются эти названия. Например, когда говорят, что Synaptic или Aptitude работают через APT, то подразумевают, что они обращаются к API из libapt-pkg, а не просто вызывают утилиту apt в командной строке. Утилита apt появилась значительно позже и предназначена для работы конечного пользователя в интерактивном режиме.

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

Менеджер APT загружает пакеты из одного или нескольких репозиториев (источников) программного обеспечения и устанавливает их на ваш компьютер. В роли репозитория может выступать CD-ROM, папка на диске (локальная или смонтированная по сети), удаленный HTTP или FTP сервер.

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

Например, команда sudo apt edit-sources откроет файл /etc/apt/sources.list в редакторе по умолчанию и при его сохранении выполнит базовую проверку синтаксиса. Еще для редактирования источников вы можете воспользоваться утилитами Synaptic и Aptitude соответственно.

Подключение репозиториев Astra Linux

Ниже представлен пример правильно сконфигурированного файла /etc/apt/sources.list для ALSE 1.7.x.

../_images/alse_mod15_image5.png

рис. 63 Правильно настроенный список репозиториев sources.list

Для использования репозиториев Astra Linux достаточно подключить источник base (который уже включает main и update) и источник extended (который содержит дополнительное ПО, такое как Яндекс Браузер). Строки, указывающие на CD-ROM, и лишние репозитории можно не удалять, а просто закомментировать. После редактирования списка источников требуется обновить индекс пакетов командой apt update.

Разберем синтаксис строки источника:

../_images/alse_mod15_image6.png

рис. 64 Синтаксис строки репозитория

Где:

  • deb — указывает на то, что репозиторий соответствует репозиторию бинарных файлов с предварительно скомпилированными пакетами. Для репозиториев с исходными кодами используют «deb-src».

  • https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ — задает адрес репозитория. У интернет-репозиториев адрес начинается с «http(s)://», адреса локальных репозиториев начинаются с «file:/». При добавлении репозитория с диска командой apt-cdrom add в файле появится строка «cdrom:[]/». В адресе вы видите, что используется поддерево репозиториев stable – это основная ветка для установки самых крайних оперативных обновлений, содержащая фиксированные ссылки, публикуемые в официальных бюллетенях безопасности. Установку оперативных обновлений следует выполнять по инструкциям, опубликованным в бюллетенях. Есть еще ветка frozen, которая позволяет зафиксировать пакетную базу на определенную версию операционной системы, которая используется для установки комплексных приложений, которые начинают поддержку новых релизов операционной системы с задержкой.

  • 1.7_x86-64 - кодовое имя дистрибутива, которое дополняет адрес, уточняя необходимый релиз продукта. В одном репозитории могут находиться пакеты сразу для нескольких релизов.

  • main contrib non-free - это группа пакетов, объединенная по условиям использования:

    • non-free ― группа содержит пакеты, которые не соответствуют принципам свободного ПО, имеют патенты или другие юридические ограничения;

    • contrib ― группа содержит пакеты, которые сами по себе соответствуют принципам свободного ПО, но зависят от пакетов из группы «non-free» (т. е. не могут без них работать);

    • main ― группа содержит пакеты свободного ПО, которые не зависят от пакетов из групп «contrib» и «non-free».

Информацию о пакетах для обновления индекса менеджер возьмет из файла Release или InRelease, ссылки на которые формируются по следующей схеме, которая отражена на рис. 65. Файлы InRelease отличаются от файлов Release только тем, что они содержат PGP-подписи. Содержание Packages-файлов после выполнения «apt-get update» кэшируется на локальном диске в папке /var/lib/apt/lists.

../_images/alse_mod15_image7.png

рис. 65 Способ получения адреса на файл Release

Примечание

Обратите внимание, что сервера репозиториев Astra Linux не показывают вам все содержимое, если вы будете переходить по индексным страницам. Полная информация доступна только через Release/InRelease файлы.

Подключение сторонних репозиториев

Как уже было сказано ранее, сторонние репозитории можно вписать в файл sources.list, но правильнее создать отдельный файл имя_репозитория.list в каталоге /etc/apt/sources.list.d/, а также добавить в систему его открытый ключ, чтобы доверять этому репозиторию. Разберем этот процесс на примере добавления репозитория yandex-disk.

Создадим файл /etc/apt/sources.list/yandex-disk.list, добавим в него строку с репозиторием yandex-disk и обновим список пакетов в локальном кэше.

localadmin@astra:~$ echo "deb http://repo.yandex.ru/yandex-disk/deb/ stable main" | sudo tee /etc/apt/sources.list.d/yandex-disk.list
deb http://repo.yandex.ru/yandex-disk/deb/ stable main

Обновим индекс пакетов sudo apt update и посмотрим на вывод:

localadmin@astra:~$ sudo apt update
Пол:1 http://repo.yandex.ru/yandex-disk/deb stable InRelease [3 900 B]
Игн:2 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64 InRelease
Сущ:3 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update 1.7_x86-64 InRelease
Сущ:4 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base 1.7_x86-64 InRelease
Сущ:5 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended 1.7_x86-64 InRelease
Ошб:1 http://repo.yandex.ru/yandex-disk/deb stable InRelease
   Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY
EFC4571D7C90E5AF
Сущ:6 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64 Release
Чтение списков пакетов… Готово
W: Ошибка GPG: http://repo.yandex.ru/yandex-disk/deb stable InRelease: Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY EFC4571D7C90E5AF
E: Репозиторий «http://repo.yandex.ru/yandex-disk/deb stable InRelease» не подписан.
N: Обновление из этого репозитория нельзя выполнить безопасным способом, поэтому по умолчанию он отключён.
N: Информацию о создании репозитория и настройках пользователя смотрите в справочной странице apt-secure(8).

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

localadmin@astra:~$ sudo wget http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG
--2023-08-16 13:25:02-- http://repo.yandex.ru/yandex-disk/YANDEX-DISK-KEY.GPG
Распознаётся repo.yandex.ru (repo.yandex.ru)… 213.180.204.183, 2a02:6b8::183
Подключение к repo.yandex.ru (repo.yandex.ru) 213.180.204.183 :80... соединение  восстановлено.
HTTP-запрос отправлен. Ожидание ответа… 200 OK
Длина: 1760 (1,7K) [application/octet-stream]
Сохранение в: «YANDEX-DISK-KEY.GPG»
  YANDEX-DISK-KEY.GPG
100% [==============================================>]   1,72K --.-  KB/s
2023-08-16 13:25:03 (206 MB/s) - «YANDEX-DISK-KEY.GPG» сохранён [1760/1760]
localadmin@astra:~$ sudo apt-key add YANDEX-DISK-KEY.GPG
OK

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

localadmin@astra:~$ sudo apt update
Пол:1 http://repo.yandex.ru/yandex-disk/deb stable InRelease [3 900 B]
Игн:2 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1._x86-64
InRelease
Сущ:3 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update 1._x86-64
InRelease
Сущ:4 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base 1._x86-64 InRelease
Сущ:5 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended 1._x86-64
InRelease
Сущ:6 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1._x86-64 Release
Пол:7 http://repo.yandex.ru/yandex-disk/deb stable/main amd64 Packages [561 B]
Пол:8 http://repo.yandex.ru/yandex-disk/deb stable amd64 Contents (deb) [244 B]
Получено 4 705 B за 1с (3 220 B/s)
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Все пакеты имеют последние версии.
localadmin@astra:~$ apt search yandex-disk
Сортировка… Готово
Полнотекстовый поиск… Готово
yandex-disk/неизвестно 0.1.6.1080 amd64
 Yandex.Disk keeps your files with you at all times.

Отключим репозиторий yandex-disk, закомментировав его в файле /etc/apt/sources.list/yandex-disk.list, обновим кэш и убедимся, что пакет yandex-disk больше не может быть найден.

localadmin@astra:~$ sudo sed -i 's/deb/#deb/g' /etc/apt/sources.list.d/yandex-disk.list
localadmin@astra:~$ cat /etc/apt/sources.list.d/yandex-disk.list
#deb http://repo.yandex.ru/yandex-disk/deb/ stable main
localadmin@astra:~$ sudo apt update
Игн:1 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64 InRelease
Сущ:2 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update 1.7_x86-64 InRelease
Сущ:3 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base 1.7_x86-64 InRelease
Сущ:4 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended 1.7_x86-64
InRelease
Сущ:5 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64 Release
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Все пакеты имеют последние версии.
localadmin@astra:~$ apt search yandex-disk
Сортировка… Готово
Полнотекстовый поиск… Готово
localadmin@astra:~$

Примечание

Если добавить строку [trusted=yes] между словом deb и путем до репозитория, например, «deb [trusted=yes] https://…», то APT будет использовать файл Release, доверяя этому источнику без проверки подписей. Однако это подходит только в том случае, если компьютеры не покидают пределов локальной сети. Отключение проверки подписей для источников на переносимых устройствах создает большую угрозу безопасности, т.к. злоумышленники смогут перехватить запрос компьютера и отдать ему пакет с каким-нибудь зловредом вместо запрашиваемого приложения.

Управление ПО с помощью APT

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

Утилиты apt и apt-*

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

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

  • install — устанавливает один и более пакетов, перечисленные через пробел. Например, sudo apt install package1 package2. Стоит отметить, что нужно указывать не полное имя deb-файла, а его внутреннее имя (свойство Package), например, sudo apt install htop.

    С помощью знака равно можно выбрать конкретную версию пакета для установки, например, «sudo apt install package1=2.15», а с помощью суффикса «-» выполнить удаление пакета вместо установки, например: sudo apt install package1 package2-.

  • remove — удаляет пакеты, сохраняя конфигурационные файлы. Если необходимо не удалить пакет, а установить, то можно воспользоваться суффиксом «+», например: sudo apt remove package1 package2+.

  • purge — действует аналогично команде remove, но удаляет в том числе файлы конфигурации, относящиеся к этому пакету.

  • reinstall — если по какой-то причине вы удалили один из файлов пакета или вам требуется откатить настройки приложения до заводских, то этой командой вы сможете выполнить повторную установку пакета.

  • search — выполняет поиск пакетов, в том числе по кратким описаниям пакетов.

    Например, с помощью команды apt search 'file manager' вы сможете найти все пакеты, которые имеют какое-то отношение к файловым менеджерам. Строка поиска позволяет использовать в том числе регулярные выражения.

  • show — показывает информацию о пакете из файла control.

  • list — выводит список пакетов по заданным критериям.

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

  • upgrade — устанавливает доступные обновления для всех пакетов в системе из всех доступных источников (sources.list).

Внимание

Использовать команду «apt upgrade» категорически запрещается, т. к. она не удаляет устаревшие пакеты, даже если это требуется для обновления приложений, что может нарушить работу операционной системы.

Вместо upgrade следует использовать хотя бы apt dist-upgrade», а лучше специальную утилиту «astra-update -a -r», где ключ -a включает автоматическую установку, а ключ -r ограничивает обновление списком репозиториев из файла /etc/apt/sources.list.

  • dist-upgrade — действует аналогично upgrade, но при необходимости устанавливает новые зависимости или удаляет старые.

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

  • autoremove — используется для очистки системы от пакетов, которые были установлены для разрешения зависимостей и в настоящий момент более не используются, т.к. пакеты, зависимые от них, ранее были удалены из системы.

  • edit-sources — позволяет редактировать файлы sources.list в редакторе по умолчанию и производит базовую проверку синтаксиса при его редактировании.

Рассмотрим работу с этими опциями на практике. Обновим список доступных пакетов командой sudo apt update.

localadmin@astra:~$ sudo apt update
Игн:1 https://download.astralinux.ru/astra/stable/1.7_x86-64/  repository-main 1.7_x86-64 InRelease
Сущ:2 https://download.astralinux.ru/astra/stable/1.7_x86-64/  repository-update 1.7_x86-64
InRelease
. . .
Пол:16 https://download.astralinux.ru/astra/stable/1.7_x86-64/  repository-main 1.7_x86-64
amd64 Contents (deb) [1 621 kB]
Получено 19,2 MB за 10с (2 017 kB/s)

Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Может быть обновлён 681 пакет. Запустите «apt list --upgradable» для показа.

Как видите, утилита запросила информацию из всех перечисленных в sources.list репозиториев и обновила список доступных пакетов. Кроме того, она предлагает нам посмотреть список доступных пакетов для обновления командой apt list --upgradable.

Опция search позволяет производить поиск пакетов по полям в информации о пакете (файле control), но для поиска пакетов по входящим в него файлам необходимо воспользоваться утилитой apt-file, которая не входит в состав пакета apt:

localadmin@astra:~$ sudo apt install apt-file
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
 libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl
Следующие НОВЫЕ пакеты будут установлены:
 apt-file libapt-pkg-perl libexporter-tiny-perl liblist-moreutils-perl libregexp-assemble-perl
Обновлено 0 пакетов, установлено 5 новых пакетов, для удаления отмечено 0 пакетов, и 681 пакетов
не обновлено.
Необходимо скачать 295 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 820 kB.
Хотите продолжить? [Д/н] y
Пол:1 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64/main amd64
libapt-pkg-perl am
d64 0.1.34 [71,1 kB]
Пол:2 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64/main amd64
libexporter-tiny-p
erl all 1.002001-1 [37,0 kB]
Пол:3 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64/main amd64
liblist-moreutils-
perl amd64 0.416-1 [63,7 kB]
Пол:4 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64/main amd64
libregexp-assemble
-perl all 0.36-1 [85,3 kB]
Пол:5 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64/main amd64
apt-file all 3.2.2
[38,5 kB]
Получено 295 kB за 0с (782 kB/s)
Выбор ранее не выбранного пакета libapt-pkg-perl.
(Чтение базы данных … на данный момент установлено 211162 файла и каталога.)
Подготовка к распаковке …/libapt-pkg-perl_0.1.34_amd64.deb …
Распаковывается libapt-pkg-perl (0.1.34) …
Выбор ранее не выбранного пакета libexporter-tiny-perl.
Подготовка к распаковке …/libexporter-tiny-perl_1.002001-1_all.deb …
Распаковывается libexporter-tiny-perl (1.002001-1) …
Выбор ранее не выбранного пакета liblist-moreutils-perl.
Подготовка к распаковке …/liblist-moreutils-perl_0.416-1_amd64.deb …
Распаковывается liblist-moreutils-perl (0.416-1) …
Выбор ранее не выбранного пакета libregexp-assemble-perl.
Подготовка к распаковке …/libregexp-assemble-perl_0.36-1_all.deb …
Распаковывается libregexp-assemble-perl (0.36-1) …
Выбор ранее не выбранного пакета apt-file.
Подготовка к распаковке …/apt-file_3.2.2_all.deb …
Распаковывается apt-file (3.2.2) …
Настраивается пакет libapt-pkg-perl (0.1.34) …
Настраивается пакет libexporter-tiny-perl (1.002001-1) …
Настраивается пакет libregexp-assemble-perl (0.36-1) …
Настраивается пакет liblist-moreutils-perl (0.416-1) …
Настраивается пакет apt-file (3.2.2) …
The system-wide cache is empty. You may want to run 'apt-file update'
as root to update the cache.
Обрабатываются триггеры для xserver-xorg-core
(2:1.20.14-1ubuntu1astra.se17) 
update exec ids due to /usr/bin changed
Обрабатываются триггеры для man-db (2.8.5-2) …

При этом утилита построила дерево зависимостей, сформировала список дополнительных пакетов для установки, рассчитала объем необходимого места для их загрузки и установки и в интерактивном режиме запросила подтверждение на установку этих пакетов. После получения подтверждения она скачала все необходимые пакеты, распаковала их и настроила. На последнем шаге были автоматически обновлены страницы в man-db.

Воспользуемся этой утилитой, чтобы найти пакет, в состав которого входит утилита pstree. Для этого выполним команду apt-file search pstree.

localadmin@astra:~$ apt-file search pstree
psmisc: /usr/bin/pstree
psmisc: /usr/bin/pstree.x11
psmisc: /usr/share/man/man1/pstree.1.gz
psmisc: /usr/share/man/man1/pstree.x11.1.gz
psmisc: /usr/share/pixmaps/pstree16.xpm
psmisc: /usr/share/pixmaps/pstree32.xpm
python-psutil-doc: /usr/share/doc/python-psutil-doc/examples/pstree.py

Как видим, этот пакет называется psmisc, и командой apt show psmisc мы можем вывести о нем дополнительную информацию:

localadmin@astra:~$ apt show psmisc
Package: psmisc
Version: 23.2-1
Priority: optional
Section: admin
Maintainer: Craig Small <csmall@debian.org>
Installed-Size: 647 kB
Depends: libc6 (>= 2.14), libselinux1 (>= 1.32), libtinfo6 (>= 6)
Replaces: procps (<< 1:1.2)
Homepage: http://psmisc.sf.net/
Download-Size: 125 kB
APT-Manual-Installed: no
APT-Sources: https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-
64/main amd64 Packages
Description: utilities that use the proc file system
This package contains miscellaneous utilities that use the proc FS:
...

В опции search утилиты apt можно применять регулярные выражения, например, для поиска пакета веб-сервера nginx необходимо ввести команду apt search ^ngnix$. Сравните с выводом команды без метасимвола $ apt search "^ngnix".

localadmin@astra:~$ apt search "^nginx$"
Сортировка… Готово
Полнотекстовый поиск… Готово
nginx/stable 1.22.1-9 amd64
 small, powerful, scalable web/proxy server

Теперь установим какой-нибудь пакет в систему, например, анализатор диска, указывающий на наиболее заполненные каталоги - утилиту ncdu, командой sudo apt install ncdu.

localadmin@astra:~$ sudo apt install ncdu
[sudo] пароль для localadmin:
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Следующие НОВЫЕ пакеты будут установлены:
 ncdu
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 681 пакетов
не обновлено.
Необходимо скачать 45,3 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 102 kB.
Пол:1 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended 1.7_x86-64/main
amd64 ncdu amd64 1.1
5.1-1 [45,3 kB]
Получено 45,3 kB за 0с (232 kB/s)
Выбор ранее не выбранного пакета ncdu.
(Чтение базы данных … на данный момент установлено 211287 файлов и каталогов.)
Подготовка к распаковке …/ncdu_1.15.1-1_amd64.deb …
Распаковывается ncdu (1.15.1-1) …
Настраивается пакет ncdu (1.15.1-1) …
Обрабатываются триггеры для man-db (2.8.5-2) …
Обрабатываются триггеры для xserver-xorg-core (2:1.20.14-1ubuntu1astra.se17) …
update exec ids due to /usr/bin changed

Теперь мы можем воспользоваться ей, чтобы оценить размер каталогов в домашней директории командой ncdu ~.

../_images/alse_mod15_image8.png

рис. 66 Размер каталогов в домашней директории в ncdu

Переустановить эту утилиту (например, при повреждении её файлов) можно командой sudo apt reinstall ncdu.

localadmin@astra:~$ sudo apt reinstall ncdu
Чтение списков пакетов… Готово
Построение дерева зависимостей
. . .
Распаковывается ncdu (1.15.1-1) на замену (1.15.1-1) …
Настраивается пакет ncdu (1.15.1-1) …
Обрабатываются триггеры для man-db (2.8.5-2) …
Обрабатываются триггеры для xserver-xorg-core (2:1.20.14-1ubuntu1astra.se17) …
update exec ids due to /usr/bin changed

Решив, что эта утилита нам больше не потребуется, её можно удалить командой sudo apt remove ncdu.

localadmin@astra:~$ sudo apt remove ncdu
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Следующие пакеты будут УДАЛЕНЫ:
 ncdu
Обновлено 0 пакетов, установлено 0 новых пакетов, для удаления отмечено 1 пакетов, и 681 пакетов
не обновлено.
После данной операции объём занятого дискового пространства уменьшится на 102 kB.
Хотите продолжить? [Д/н] y
(Чтение базы данных … на данный момент установлено 211293 файла и каталога.)
Удаляется ncdu (1.15.1-1) …
Обрабатываются триггеры для man-db (2.8.5-2) …
Обрабатываются триггеры для xserver-xorg-core (2:1.20.14-1ubuntu1astra.se17) …
update exec ids due to /usr/bin changed

Утилита сообщит объем пространства, которое будет высвобождено после удаления пакета, и запросит подтверждение на удаление пакета.

Для вывода пакетов, которые могут быть обновлены, воспользуемся командой apt list --upgradable (а командой apt list --installed можно вывести список всех установленных пакетов в системе):

localadmin@astra:~$ apt list --upgradable
Вывод списка… Готово
acpi/stable,stable 1.7-1.2 amd64 [может быть обновлён с: 1.7-1.1]
ark/stable,stable 4:22.12.3-1astra1 amd64 [может быть обновлён с: 4:22.08.1-1astra2]
astra-admin-events/stable,stable 1.0.14+ci21 amd64 [может быть обновлён с: 0.0.1+ci2]
. . .
xserver-xorg/stable,stable 1:7.7+23astra3 amd64 [может быть обновлён с: 1:7.7+23astra1]
xterm/stable,stable 379-1astra3 amd64 [может быть обновлён с: 366-1astra1

Команда sudo astra-update -A -r обновит все пакеты в системе автоматически. Если по каким-либо причинам вам необходимо обновить не всю систему, а только отдельный пакет, то можно воспользоваться командой sudo apt-get install --only-upgrade astra-admin-events.

localadmin@astra:~$ sudo apt-get install --only-upgrade astra-admin-events
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
 astra-event-diagnostics libastraevents python-dateutil python-six python3-astraevents python3-
distutils
 python3-lib2to3 python3-pkg-resources python3-setuptools syslog-ng-mod-astra
Предлагаемые пакеты:
 python-setuptools-doc
Следующие НОВЫЕ пакеты будут установлены:
 astra-event-diagnostics libastraevents python-dateutil python-six python3-astraevents python3-
distutils
 python3-lib2to3 python3-pkg-resources python3-setuptools
Следующие пакеты будут обновлены:
 astra-admin-events syslog-ng-mod-astra
Обновлено 2 пакетов, установлено 9 новых пакетов, для удаления отмечено 0 пакетов, и 679 пакетов не  обновлено.
Необходимо скачать 2 019 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 4 959 kB.
Хотите продолжить? [Д/н] y
. . .
astra-event-diagnostics.service is a disabled or a static unit, not starting it.
Настраивается пакет python3-lib2to3 (3.7.3-1) …
Настраивается пакет python3-distutils (3.7.3-1) …
Настраивается пакет python3-setuptools (40.8.0-1) …
Настраивается пакет syslog-ng-mod-astra (0.3.20+ci4) …
Устанавливается новая версия файла настройки /etc/astra-syslog.conf …
Устанавливается новая версия файла настройки /etc/audit/rules.d/astra-syslog.rules …
Устанавливается новая версия файла настройки /etc/dbus-1/system.d/ru.astralinux.events.conf …
Устанавливается новая версия файла настройки /etc/syslog-ng/conf.d/mod-astra-unsigned-binary-
file.conf …
Настраивается пакет libastraevents (0.1.3) …
Настраивается пакет python3-astraevents (0.1.3) …
Настраивается пакет astra-admin-events (1.0.14+ci21) …
Обрабатываются триггеры для libc-bin (2.28-10+deb10u1+ci202207192202+astra4) …
Обрабатываются триггеры для xserver-xorg-core (2:1.20.14-1ubuntu1astra.se17) …
update exec ids due to /usr/bin changed
Обрабатываются триггеры для dbus (1.12.20-2+astra.se7+ci7) …

Теперь обновим систему командой sudo astra-update -A -r (этот процесс может занять некоторое время, и вы пока можете перейти к прочтению следующего менеджера пакетов aptitude).

localadmin@astra:~$ sudo astra-update -A -r
Параметры запуска: -A -r

Источники из /etc/apt/sources.list:
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ 1.7_x86-64 main
contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update/ 1.7_x86-64 main
contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base/ 1.7_x86-64 main
contrib non-free
deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended/ 1.7_x86-64 main
contrib non-free

Обнаруженные компоненты: contrib main non-free
Отключение функций безопасности не требуется
Игн:1 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64 InRelease
Сущ:2 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update 1.7_x86-64
InRelease
Сущ:3 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-base 1.7_x86-64 InRelease
Сущ:4 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-extended 1.7_x86-64
InRelease
Сущ:5 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main 1.7_x86-64 Release
Чтение списков пакетов… Готово
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Расчёт обновлений… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
 coinor-libcbc3 coinor-libcgl1 coinor-libclp1 coinor-libcoinmp1v5 coinor-libcoinutils3v5 coinor-
libosi1v5
 libepubgen-0.1-1 libetonyek-0.1-1 libgtkspell0 libkdecorations2private9 libkf5screen7 libplacebo7
libpoppler118
 libqxp-0.0-0 libstaroffice-0.0-0 libzmf-0.0-0 linux-headers-5.15.0-33-hardened linux-headers-
5.15.0-33-lowlatency
Для их удаления используйте «sudo apt autoremove».
Следующие пакеты будут УДАЛЕНЫ:
 kmix
Следующие НОВЫЕ пакеты будут установлены:
 ant ant-contrib ant-optional astra-event-viewer ca-certificates-java default-jre default-jre-
headless
. . .
 xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-synaptics xserver-xorg-video-
all
 xserver-xorg-video-amdgpu xserver-xorg-video-ati xserver-xorg-video-fbdev xserver-xorg-video-
radeon xterm
Обновлено 679 пакетов, установлено 196 новых пакетов, для удаления отмечено 1 пакетов, и 0 пакетов
не обновлено.
Необходимо скачать 1 512 MB архивов.
После данной операции объём занятого дискового пространства возрастёт на 1 171 MB.
Пол:1 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update 1.7_x86-64/main
amd64 base-files amd64
10.3.astra11 [55,5 kB]
Пол:2 https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update 1.7_x86-64/main
amd64 bsdutils amd64 1
:2.33.1-0.1.astra4se4 [121 kB]
. . .
Обновление успешно установлено
Для применения изменений в ядре или модулях нужна перезагрузка
Лог сохранен в /var/log/astra_update_202308151047.log

Менеджер пакетов aptitude

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

Запускается приложение командой aptitude, а если необходимо не только просматривать информацию, но и устанавливать/обновлять/удалять пакеты, то sudo aptitude.

../_images/alse_mod15_image9.png

рис. 67 Псевдо-графический менеджер пакетов aptitude

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

В верхней части окна расположено меню. Для его вызова с клавиатуры необходимо нажать сочетание Ctrl + <Пробел> или F10.

Для установки, обновления или удаления пакета, его необходимо пометить. Для этого необходимо воспользоваться меню «Пакет» или ввести:

  • + (плюс) — для установки или обновления

  • - (минус) — для удаления (аналог aptitude remove)

  • \_ (подчеркивание) — для полного удаления (аналог aptitude purge)

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

../_images/alse_mod15_image10.png

рис. 68 Меню действия утилиты aptitude

Обновим локальный кэш пакетов нажатием клавиши u (аналог aptitude update) и найдем пакет alien. Для этого воспользуемся поиском (клавиша слеш «</>») или меню поиска.

../_images/alse_mod15_image11.png

рис. 69 Найденный пакет alien и информация о нем

Примечание

Утилита alien, входящая в базовый репозиторий, используется для конвертации rpm-пакетов (пакеты для семейства ОС, основанных на дистрибутивах Red Hat) в deb-пакеты и наоборот. Делать это стоит только в том случае, если deb-пакета для необходимой программы не существует. Конвертировать пакет гораздо проще, чем собирать его самому из исходников, однако стоит иметь в виду, что не каждый пакет может быть сконвертирован без ошибок — чем больше и сложнее приложение, тем выше вероятность проблем.

Отметим этот пакет для установки символом плюс Num+» и установим его через меню :Действия ‣ Установить/удалить пакеты(g) или нажатием буквы g.

../_images/alse_mod15_image12.png

рис. 70 После выделения пакет подсвечивается зеленым (для удаления красным)

../_images/alse_mod15_image13.png

рис. 71 Построение дерева зависимостей и предпросмотр

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

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

../_images/alse_mod15_image14.png

рис. 72 Найден пакет alien в ветке установленные пакеты

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

../_images/alse_mod15_image15.png

рис. 73 Окно просмотра информации

Для перехода между окнами используйте клавиши F7 и F8.

Меню «Решатель» позволяет удобно разрешать конфликты зависимостей в интерактивном режиме.

../_images/alse_mod15_image16.png

рис. 74 Меню решатель конфликтов aptitude

Для закрытия программы необходимо нажать Q или воспользоваться командой из меню Действия ‣ Выход.

Менеджер пакетов Synaptic

Менеджер пакетов Synaptic позволяет управлять ПО в Astra Linux через графический интерфейс. Запустить его можно из меню Пуск ‣ Системные ‣ Менеджер пакетов Synaptic. Для работы с ним нужны будут права суперпользователя.

../_images/alse_mod15_image17.png

рис. 75 Подтверждение прав суперпользователя

Приложение встретит вас краткой справкой по работе с ним. Но кто же ее читает :)

../_images/alse_mod15_image18.png

рис. 76 Краткое описание менеджера пакетов

Synaptic имеет интуитивно понятный интерфейс работы. В левой части окна представлены категории пакетов (1) в зависимости от выбранного способа разделения (2). В правой части окна представлены список пакетов (3) и описание выделенного пакета (4). В нижней части окна расположена строка состояния.

../_images/alse_mod15_image19.png

рис. 77 Графический интерфейс Synaptic

Удалим установленный нами через aptitude пакет alien с помощью Synaptic.

../_images/alse_mod15_image20.png

рис. 78 Контекстное меню по выбранному пакету alien

../_images/alse_mod15_image21.png

рис. 79 Для применения удаления/установки нажимаем «Применить»

../_images/alse_mod15_image22.png

рис. 80 Описание о то что будет сделано после подтверждения

../_images/alse_mod15_image23.png

рис. 81 Запуск API dpkg в терминале c просмотром о ходе выполнения

И удалим все пакеты из категории «Установленные (удаляемые автоматически)».

../_images/alse_mod15_image24.png

рис. 82 Удалим пакеты которые можно удалить автоматически

../_images/alse_mod15_image25.png

рис. 83 Окно подтверждение с краткой информацией

../_images/alse_mod15_image26.png

рис. 84 Ход выполнения удаления в терминале

Источниками пакетов можно управлять в окне «Репозитории», вызвать которое можно из меню Настройки ‣ Репозитории.

../_images/alse_mod15_image27.png

рис. 85 Меню настроек Synaptic

../_images/alse_mod15_image28.png

рис. 86 Окно настроек репозиториев Synaptic

Внутреннее устройство deb-пакета

Обычные пакеты

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

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

имя_пакета_версия_архитектура.deb

В качестве примера можно вспомнить пакет Яндекс диска, который мы уже загружали ранее wget http://repo.yandex.ru/yandex-disk/yandex-disk_latest_amd64.deb

С помощью утилиты file можно увидеть, что это Debian binary package:

localadmin@astra:~$ file yandex-disk_latest_amd64.deb
yandex-disk_latest_amd64.deb: Debian binary package (format 2.0)

Подробную информацию, включая зависимости, можно получить с помощью команды apt info:

localadmin@astra:~$ dpkg --info yandex-disk_latest_amd64.deb
 new Debian package, version 2.0.
 size 4796514 bytes: control archive=1740 bytes.
      51 байт(а),     1 строк      conffiles
     540 байт(а),    15 строк      control
     729 байт(а),    10 строк      md5sums
    1663 байт(а),    66 строк   *  postinst             #!/bin/sh
     371 байт(а),    24 строк   *  postrm               #!/bin/sh
      41 байт(а),     3 строк   *  prerm                #!/bin/sh
 Package: yandex-disk
 Version: 0.1.6.1080
 ...

Специальные типы deb-пакетов

Кроме обычных deb-пакетов существуют метапакеты и виртуальные пакеты.

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

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

Внутреннее устройство deb-пакета

Содержимое deb-пакета включает:

  • Архив control.tar.gz содержит скрипты, которые используются при установке/удалении пакета, а также другие служебные файлы.

  • Архив data.tar.gz содержит файлы программы для установки в систему. Их расположение в архиве соответствует положению в целевой системе. Например, файл usr/share/doc/package/copyright в deb-архиве после установки будет помещен в /usr/share/doc/package/copyright.

  • Файл debian-binary содержит версию программы.

  • Другие файлы, например, электронную цифровую подпись.

../_images/alse_mod15_image29.png

рис. 87 Внутреннее устройство Deb-пакета

Командой apt download acl можно скачать текущую актуальную версию пакета acl и посмотреть его содержимое. Ниже представлен скриншот содержимого файла control в текстовом редакторе kate:

../_images/alse_mod15_image30.png

Содержимое файла control включает в себя следующие основные параметры:

  • Package (обязательный) — имя пакета, под которым он будет зарегистрирован в системе.

  • Source — имя и версия src-пакета, из которого собран данный deb-пакет (если есть таковой).

  • Version — номер версии программы (пакета).

  • Section (рекомендуемый) — имя раздела и секции, к которому принадлежит пакет, для его корректного размещения в репозитории в формате раздел/секция. Существуют 3 стандартных раздела: main, contrib и non-free. В каждом из этих разделов существует порядка 60 секций, например, admin, utils, devel, doc, base, net, mail и другие.

  • Priority (рекомендуемый) - уровень важности пакета. Может принимать одно из 5 значений:

    • Required — пакет требуется в обязательном порядке для корректной работы любой Linux системы.

    • Important — пакет не влияет на работоспособность, но ожидается в любой Linux системе, например, man-db.

    • Standard — пакет входит в стандартный набор ПО для конкретного дистрибутива. Для разных дистрибутивов набор пакетов с уровнем важности Standard, как правило, разный.

    • Optional — пакеты, которые могут быть потенциально установлены в систему с данным дистрибутивом. Большинство пакетов относятся именно к этому уровню.

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

  • Architecture (обязательный) — архитектура, для которой данный пакет собран.

  • Depends — перечень зависимостей между пакетами. Он включает в себя несколько видов зависимостей (могут быть использованы сразу несколько из них, каждая в новой строке):

    • Depends — перечень пакетов, перечисленных через запятую, от которых зависит данный пакет и без которых он не сможет нормально функционировать. Могут использоваться операторы сравнения для конкретизации необходимой версии пакета (<<,<=,=,>=,>>), например, lib6 (>= 2.15), а также логическое «И» - запятая и логическое «ИЛИ» - вертикальная черта «|».

    • Pre-Depends — более строгая, чем depends, эти пакеты должны быть установлены еще до запуска скрипта установки данного пакета.

    • Recommends — перечень пакетов, которые значительно расширят функциональность, предлагаемую пакетом, но не являются обязательными для его работы.

    • Suggests — перечень пакетов, которые улучшают функциональность, но имеют второстепенное значение, как правило, отдельных утилит, или это может быть набор документации.

    • Enhances — перечень пакетов, работу которых может улучшить данный пакет, своего рода противоположность suggests.

    • Conflicts — перечень пакетов, которые не могут быть установлены одновременно с этим пакетом. Самой распространённой причиной является то, что оба пакета включают файлы с одинаковыми именами, предоставляют один и тот же сервис на одном и том же порту протокола управления передачей TCP.

    • Breaks — схож с conflicts, но тут перечислены пакеты, работа которых (или их определенных версий) будет нарушена при установке данного пакета.

    • Provides — имя виртуального пакета.

  • Installed-Size — размер пакета, поле установки в систему.

  • Maintainer (обязательный) — имя и координаты мейнтейнера, создавшего пакет.

  • Description (обязательный) — подробное описание пакета, может представлять собой несколько абзацев текста.

Можно вывести информацию об установленном пакете acl в системе командой apt show acl и убедиться, что выводимая информация совпадает с содержимым файла control:

localadmin@astra:~$ apt show acl
Package: acl
Version: 2.2.53-4
Priority: optional
...

К необязательным файлам пакета относятся файл md5sums и скрипты для установки/удаления пакета. Файл md5sums содержит md5 хеши для всех файлов, кроме файлов, находящихся в архиве control.tar.xz. Данный файл необязателен для deb-пакета, однако программы верификации пакетов считают пакеты, не содержащие этот файл, ошибочными. Может использоваться некоторыми программами администрирования системы для верификации изменений в файловой системе.

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

Виды скриптов:

  • preinst — скрипт, вызывающийся перед распаковкой пакета в файловую систему. Обычно при помощи этого скрипта пользователю задаются вопросы, позволяющие сконфигурировать программу прежде, чем начнется установка. Если скрипт завершится с кодом ошибки, то пакет не будет установлен в систему.

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

  • prerm — скрипт, вызывающийся перед удалением пакета. Может задать пользователю некоторые вопросы, связанные с удалением. Например, вопрос о том, что делать с файлами журналов. Если скрипт завершится с кодом ошибки, пакет не будет удален.

  • postrm — скрипт, вызывающийся после удаления файлов пакета.

  • config — скрипт, вызывающийся на стадии конфигурирования и переконфигурирования пакета. Это дополнительный скрипт, который используется системой Debconf. Вызывается перед скриптом postinst, используется для того, чтобы задать пользователю вопросы в системе диалогов debconf.

Репозитории Astra Linux

Интернет-репозитории Astra Linux предназначены для упрощения процедуры обновления ОС и при наличии доступа в Интернет позволяют выполнять установку и обновление пакетов с помощью стандартных установщиков пакетов.

Для версии ALSE x.7 доступны 4 репозитория:

  • Основной репозиторий (main)

  • Оперативные обновления основного репозитория (update)

  • Базовый репозиторий (base, включает main и update)

  • Расширенный репозиторий (extended)

Рассмотрим назначение, состав и параметры этих репозиториев:

  • Основной репозиторий (репозиторий установочного диска, main):

    • Содержит основной состав продукта, реализующий все функциональные возможности и функции безопасности.

    • Проходит сертификационные испытания, соответствует сертифицированному изделию.

    • Поставляется на установочном диске и в виде индивидуальной ссылки в личном кабинете пользователя.

  • Оперативные обновления основного репозитория (update):

    • Содержит кумулятивные изменения основного репозитория (main), соответствующие выпуску оперативного обновления.

    • Подлежит сертификации.

    • Размещается в публичном доступе при выпуске бюллетеня безопасности.

  • Базовый репозиторий (base):

    • Содержит все пакеты main и update.

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

    • Пакеты, необходимые для сборки репозитория main.

    • Не подлежит сертификации (если рабочие места требуют аттестации, то во избежание установки лишних пакетов не используйте base вместо main+update).

    • Поставляется в виде индивидуальной ссылки в личном кабинете пользователя.

  • Расширенный репозиторий (extended):

    • Содержит дополнительное ПО, которое может функционировать в среде Astra Linux.

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

    • Поставляется в виде индивидуальной ссылки в личном кабинете пользователя.

Примечание

Подробно о составе, назначении и о работе с интернет-репозиториями Astra Linux, вы можете прочитать в статьях на wiki.astralinux.ru по ссылкам в дополнительных материалах:

Создание собственных репозиториев

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

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

В домене ALD Pro есть подсистема «Репозиторий», которая основана как раз на базе reprepro. Подробнее о ней будет рассказано в отдельном модуле курса.

Практика и тестирование

Заключение

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

В следующем модуле будет немного попроще. Мы узнаем, как устроен диспетчер печати в Linux. До встречи!

Дополнительные источники информации: