Васильев Андрей Михайлович, 2022
Версии презентации
Рассмотрим нативное приложение под операционную систему, main.c
:
#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}
Скомпилируем данное приложение:
gcc -o app -O3 main.c
Удостоверимся, что приложение работает
$ ./app
Hello, world!
Рассмотрим информацию об исполняемом файле:
$ file app
app: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2,
BuildID[sha1]=2b4b5f9bc2b755dc4b60cfd008a627ea0b997990,
for GNU/Linux 3.2.0, with debug_info, not stripped
$ ldd app
linux-vdso.so.1 (0x00007ffc3455d000)
libc.so.6 => /lib64/libc.so.6 (0x00007f68c0200000)
/lib64/ld-linux-x86-64.so.2 (0x00007f68c0500000)
Приложению для работы необходимы:
GNU/Linux 3.2.0
libc.so.6
Типичное приложение имеет гораздо больше зависимостей:
В рамках основных пользовательских платформ (Windows, Android и т.д.) системные библиотеки предоставляются поставщиком платформы, а разработчики должны предоставить все свои зависимости вместе с приложением
В рамках Linux также можно воспользоваться данным способом распространения приложений
Рассмотрим процесс компиляции приложения на C++
Для дистрибуции приложения потребуются исполняемый файл приложения, а также динамически загружаемые библиотеки, ресурсы приложения собрать вместе и предоставить пользователю для использования
При работе с приложениями, реализованных на скриптовых языках программирования, потребуется пользователю предоставить помимо приложения ещё и интерпретатор
В экосистеме Linux существует множество «дистрибутивов», которые позволяют пользователям запускать свои приложения и решать свои инфраструктурные задачи
Если абстрагироваться от деталей, то все дистрибутивы
Слово «дистрибутив» является калькой с английского «distribution», которым описывается набор совместимого программного обеспечения. Совместимость должна быть реализована на уровне бинарных кодов
Примерами дистрибутивов могут служить:
Дистрибутивы исторически появились для решения задачи поставки данных до конечных пользователей
Дистрибутивы позволяют получить быстро доступ к ПО унифицированным способом
Производители обычно выпускают новые дистрибутивы на регулярной основе, один раз в несколько месяцев или лет
Дистрибутив | Дата выпуска | Окончание поддержки |
---|---|---|
Debian 9 (Stretch) | 17 июня 2017 | 30 июня 2022 |
Debian 10 (Buster) | 6 июля 2019 | 30 июня 2024 |
Debian 11 (Bullseye) | 14 августа 2021 | июль 2024 |
Alt Linux 8 | 15 августа 2016 | 16 декабря 2019 |
Alt Linux 9 | 16 августа 2019 | 31 декабря 2023 |
Alt Linux 10 | 30 декабря 2021 | 31 декабря 2024 |
RHEL 7 | 9 июня 2014 | 6 августа 2019 |
RHEL 8 | 7 мая 2019 | 31 мая 2024 |
RHEL 9 | 18 мая 2022 | 31 мая 2027 |
Пакетный менеджер — это система приложений, которые позволяют конечным пользователям управлять приложениями на своей системе: устанавливать, удалять, обновлять и т.д.
Аналогом пакетного менеджера в Linux можно назвать:
Разные производители дистрибутивов зачастую отличаются именно пакетными менеджерами, которые используются в их дистрибутивах
Пакетный менеджер | Дистрибутивы Linux |
---|---|
Debian (.deb) | Debian, Ubuntu, Linux Mint, Raspbian, Astra Linux |
Red Hat (.rpm) | Red Hat Enterprise Linux, SLES, ALT Linux, ROSA, РЭД ОС |
Базовой единицей распространения ПО в дистрибутиве является пакетный файл
Пакетный файл обычно создаётся с помощью автоматизированной системы сборки пакетов, настройкой которой для каждого отдельного пакета занимается мейнтейнер (от английского maintain — поддерживать)
Пакеты могут быть созданы также разработчиками ПО
Репозиторий представляет собой хранилище пакетов дистрибутива
Для работы приложения зачастую недостаточно только одного исполняемого файла, нужны также библиотеки, интерпретаторы, возможно другие исполняемые файлы
Эта схема позволяет гранулярно обновлять части системы, усиливая её безопасность
Общие ресурсы между приложениями снижают объём необходимой памяти на жёстком диске и в оперативной памяти
Пакетные менеджеры обычно включают в себя инструменты
Инструменты различных дистрибутивов
Дистрибутив | Низкоуровневый инструмент | Высокоуровневый инструмент |
---|---|---|
Debian производные, Astra | dpkg | apt, apt-get, aptitude |
RHEL, SUSE, РЭД ОС | rpm | yum, dnf, zypper |
Alt Linux | rmp | apt-get, aptitude, epm |
В ALT Linux поиск пакетов в репозитории всегда происходит по локальному кешу пакетов
Для обновления кеша пакетов в ALT Linux необходимо выполнить команду apt-get update
Для поиска пакета по имени или его краткому описанию можно использовать
apt-cache search TEXT
Вместо TEXT
необходимо вводить искомое слово, обычно название пакета совпадает с названием приложения, которое надо установить.
ALT Linux предлагает графический инструментарий для поиска пакетов https://packages.altlinux.org
Иногда может возникнуть задача нахождения пакета, к которому принадлежит файл, находящийся на файловой системе. Для этих целей необходимо воспользоваться инструментарием низкого уровня: dpkg
или rpm
в зависимости от дистрибутива
Для ALT Linux: rmp -qf /PATH/TO/FILE
, где вместо аргумента нужно указать путь к искомому файлу
При компиляции приложения из исходных кодов или при запуске бинарных скомпилированных для работы на других системах, может потребоваться установить библиотеки, которые нужны для работы приложения. В этом случае надо найти пакет, которого ещё нет в системе
В ALT Linux для решения этой задачи можно использовать apf
или epm
# apt-get install apf
$ apf update
$ apf search FILE_TO_FIND
С использованием epm
:
# apt-get install eepm
$ epm -sf FILE_TO_FIND
Для установки пакета из репозитория необходимо выполнить команду apt-get install PACKAGE
. Вместо PACKAGE
необходимо указать имя пакета для установки
Внимание если вы давно не обновляли локальный кеш пакетов, то его необходимо обновить с помощью команды apt-get update
Если вы хотите поставить совместимый с дистрибутивом RPM-пакет, который был скачан на компьютер
rmp -i PATH-TO-FILE.rpm
apt-get install PATH-TO-FILE.rmp
В последнем случае будет установлен как пакет, так и его зависимости
Удаление обычно выполняется высокоуровневыми инструментами
В ALT Linux для удаления пакета надо выполнить apt-get remove PACKAGE
, где вместо PACKAGE
необходимо указать пакет, который нужно удалить
Важно понимать, что необходимо указать точное название пакета
rpm -qa
apt-cache pkgnames
Наиболее частая операция при использовании пакетного менеджера — обновление установленных пакетов в связи с выходом исправлений безопасности или новых функциональных версий
Для обновления локальных пакетов необходимо выполнить apt-get update
, чтобы обновить локальный кеш пакетов относительно изменений в удалённом репозитории
Затем необходимо выполнить команду apt-get dist-upgrade
и проверить, что нужные пакеты обновляться
Обновление из файла-пакета не отличается от установки нового пакета. Важно помнить, что номер устанавливаемого пакета должен быть больше уже установленного пакета.
Помимо командных инструментов для управления списками установленных пакетов могут быть использованы графические и псевдографические инструменты
acc
, графический менеджер настроек дистрибутивов ALT LinuxРепозитории ALT Linux, Политика разработки дистрибутивов
Репозиторий представляет собой каталог, в котором находится набор пакетов, расположенных определённым образом
При доступе по сети имитируется доступ к файловой системе. Рассмотрим структуру зеркала mirror.yandex.ru
p9
, p10
и так далееbranch
aarch64
, x86_64
и т.д. noarch
используется для пакетов, содержащих платформонезависимые пакетыВнутри данного каталога находятся каталоги
base
RPMS.*
, где после точки находится название разделаВ текущей стабильной платформе ALT Linux предоставляются следующие разделы пакетов:
classic
— базовый набор приложений, которые можно найти в типичном Linux-дистрибутивеdebuginfo
— набор пакетов с отладочными символами для приложенийgostcrypto
— набор приложений с реализацией шифрования согласно ГОСТ алгоритмамcheckinstall
— инструмент для сборки пакетов без использования специфических средств дистрибутива, не поддерживается официальноПомимо пакетов с бинарными файлами также предоставляются пакеты с исходными кодами, из которых были собраны пакеты.
Для настройки списка доступных репозиториев в apt используются
/etc/apt/sources.list
/etc/apt/sources.list.d
Каждая строка в этих файлах описывает подключённый репозиторий
rpm [p10] uri repository [component1] [component2] [...]
rpm
для бинарных репозиториевuri
содержит путь к каталогу репозитория, интернет-адрес https://...
или путь к файловой системе file://...
repository
идёт путь к конкретному выпуску p10/branch/x86_64
classic
Порядок внесения изменений следующий:
До обновления кеша пакетов APT не сможет выполнить установку из новых репозиториев и попытается связаться со старыми репозиториями
Перед подключением новых репозиториев убедитесь, что они все содержат совместимые между собой пакеты. Обычно это репозитории, предназначенные для одного выпуска дистрибутива
Точно не стоит подключать одновременно
Для ускорения процесса установки пакетов рекомендуется использовать зеркало, скорость скачивания с котрого, будет наибольшей
Объём зеркала для одного выпуска: порядка 50-100 гигабайт
Пользователи зачастую хотят перейти на новую версию дистрибутива:
Проблемы обновления:
apt-get update
apt-get dist-upgrade
dist-upgrade
часть пакетов может быть удалена, их надо будет поставить заново при необходимостиОбычно не поддерживается. Поэтому перед сложным обновлением необходимо выполнить резервную копию развёрнутого дистрибутива ОС, чтобы можно было вернуться к данной версии
Пакеты с ядрами ОС распространяются через систему репозиториев, однако установка данных пакетов запрещена через основные инструменты
Для управления установленными ядрами и модулями используется приложение update-kernel
update-kernel
update-kernel -t un-def
remove-old-kernels
Сначала необходимо обновить кеш пакетов, а после пытаться обновлять ядро
ALT Linux предоставляет разные варианты ядер:
std-def
— как правило текущее ядро с длительной поддержкой LTSun-def
— последнее стабильное ядро, предоставляемого kernel.orgОчевидные плюсы включают
Ограничения данной модели