Установка и удаление программ (репозитории)

Для установки, удаления и обновления программ в ОС используется пакетная модель. Программное обеспечение поставляется в виде пакетов стандартного формата (для данной ОС – это rpm), содержащих исполняемые файлы и вспомогательные данные. Менеджер пакетов проверяет наличие необходимых зависимостей и регистрирует приложение в среде (доступ из командной строки и в меню графической оболочки).

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

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

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

Для обеспечения безошибочной и безопасной работы Системы рекомендуется ставить пакеты только из официальных репозиториев РОСА, предназначенных именно для этой версии.

Репозитории в ОС требуют ключа для их использования, подробнее о размещении ключа в Системе см. п. Общее описание.

Также для управления подключением онлайн-репозиториев служит файл /etc/dnf/vars/enable_online_repos установленное значение "1" в этом файле включает сетевые репозитории, "0" — выключает.

Сетевые репозитории для данной версии ОС по умолчанию подключены.

Для этого нужно выполнить команды:

sudo mkdir /mnt/disk1
sudo mount /dev/cdrom /mnt/disk1

После этого работа с дисковым репозиторием будет аналогична работе с сетевым. Файл его подключения можно найти по адресу /etc/yum.repos.d/disk1.repo, для его включения нужно установить в этом файле enabled=1.

Использование rpm

Rpm — это формат пакетов программного обеспечения и утилита низкого уровня для управления установленными пакетами в ОС. Инструмент обеспечивает установку и удаление отдельных пакетов, ведение базы установленных компонентов, запрос сведений о пакетах и проверку целостности файлов.

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

Штатная установка, удаление и обновление программ выполняется высокоуровневым менеджером пакетов dnf. Все операции dnf (установка, обновление, удаление) выполняются через библиотеки rpm и фиксируются в базе rpm.

Типовые запросы rpm:

  • Определение, каким пакетом установлен файл:
rpm -qf /путь/к/файлу
  • Перечень файлов, входящих в пакет:
rpm -ql имя_пакета
  • Проверка целостности файлов пакета:
rpm -V имя_пакета

Файловый менеджер dnf

Dnf — менеджер пакетов высокого уровня, который используется в ОС. Dnf обеспечивает установку, обновление и удаление программ из репозиториев. При работе автоматически подбираются и устанавливаются необходимые зависимости, что упрощает администрирование и снижает риск ошибок. Инструмент рекомендуется как основной для повседневного управления программным обеспечением и имеет графическую оболочку в виде программы "Пакеты (dnfdragora)", доступ к которой осуществляется через главное меню приложений Системы.

Перед установкой dnf выполняет проверку подлинности пакетов (криптографические подписи), что помогает защититься от подмены. Изменения применяются по принципу "целиком или никак": если на любом этапе возникает ошибка (например, не найдена зависимость), установка не выполняется, и Система остаётся в прежнем рабочем состоянии. Выполненные операции можно просматривать в истории, а ход работы фиксируется в журналах менеджера (например, /var/log/dnf.log).

Синтаксис команд dnf:

dnf <действие> <пакет> <ключ>

Основные команды dnf:

  • Установка пакетов:
sudo dnf install <имяпакета>

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

  • Удаление пакетов:
sudo dnf erase <имяпакета>

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

  • Поиск пакетов в Системе:
dnf search <ключевое_слово>

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

  • Просмотр информации о пакете:
dnf info <название_пакета>
  • Очистка кеша и ненужных пакетов:
sudo dnf autoremove
sudo dnf clean all

Полный список команд dnf доступен в консоли по команде:

man dnf

Установка программ из сторонних источников

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

Лучшим способом установки программ из сторонних репозиториев будет самостоятельная сборка пакетов из исходных текстов, пользуясь онлайн-средой сборки abf.io (приглашение для регистрации в среде можно получить по запросу к сотрудникам компании-разработчика ОС РОСА). При этом администратор становится владельцем своего отдельного репозитория и сможет с помощью инфраструктуры РОСА собирать требуемые пакеты. Данный способ является самым желательным и распространенным при необходимости установки программ, отсутствующих в репозиториях РОСА.

Установка сторонних программ также возможна и с помощью использования пакетов, созданных для схожих с ОС РОСА "ХРОМ" дистрибутивов. Наиболее совместимыми с пакетами РОСА являются пакеты для OpenMandriva, Mageia и Fedora: их можно попробовать установить командой:

sudo dnf install <ФайлПакета>

Возможно, зависимости таких пакетов не будут совпадать с зависимостями РОСА и блокировать установку – в таком случае можно попробовать установить скачанный пакет командой:

sudo rpm -i --nodeps <ФайлПакета>

Такой способ часто используется для установки сторонних драйверов.

Также возможно установить автономные пакеты flatpack или appimage, которые полностью поддерживаются в ОС в качестве систем установки.

Использование Notamock для сборки пакетов

Notamock представляет собой набор утилит для создания изолированных окружений при сборке RPM-пакетов в дистрибутивах ОС из семейства РОСА. Название отражает его сходство с утилитой mock, но при этом реализованы принципиальные отличия — использование многослойных контейнеров с общей базовой корневой файловой системой (rootfs) аналогично технологии Docker. Это позволяет ускорить сборку за счет того, что минимальное окружение всегда готово, а устанавливаются только необходимые зависимости.

Основные компоненты Notamock:

  • notamock — утилита для запуска локальной сборки одного проекта;
  • notamocks — утилита для массовой (параллельной) локальной сборки нескольких проектов;
  • notamockc — утилита для запуска контейнера с любой командой (по умолчанию – bash);
  • notamockd — утилита для создания сборочных контейнеров для системы ABF;
  • notamocka — скрипт запуска ABF Builder внутри контейнера (устанавливается из пакета notamock-abf).

Все утилиты используют общий конфигурационный файл /etc/notamock.cfg, а также дополнительные настройки из каталога /etc/notamock.d/. При необходимости может быть указан иной конфигурационный файл с параметром --config. Все утилиты требуют прав суперпользователя (root) из-за операций с монтированием.

Базовая корневая файловая система (rootfs) создается для каждой поддерживаемой платформы только один раз и затем многократно переиспользуется. Количество одновременно работающих контейнеров, процессов notamock и builders не влияет на количество rootfs. Для пересоздания базовой rootfs необходимо запустить любую утилиту с параметром -u в момент, когда rootfs не используется другими процессами.

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

Использование утилит Notamock:

  • notamock

Утилита notamock применяется для локальной сборки одного проекта. В типичном сценарии взаимодействует с ABF (Automated Build Farm), но также может пересобрать пакет по src.rpm. Пример пересборки проекта lsof:

sudo dnf install abb notamock
abb clone lsof
cd lsof
notamock

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

  • Полезные параметры notamock:
    • -v — подробный вывод сообщений;
    • -r — указание целевой платформы (например -r 13);
    • -e — остановка в контейнере перед запуском сборки (удобно для отладки);
    • RPMSAVE=yes — сохранение всех скачанных сборочных зависимостей во внутреннем репозитории notamock;
    • REUSABLE=yes — повторное использование контейнера для ускорения последовательных сборок одного проекта;
    • PM_config — возможность подмены конфигурации пакетного менеджера, например PM_config=/home/user/dnf.conf;
    • TMPD — указание собственного каталога вместо /tmp/notamock.

Все параметры могут быть переопределены напрямую через командную строку или настроены в /etc/notamock.cfg. Более подробную справку можно получить по команде notamock --help.

  • notamocks

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

Пример запуска утилиты по команде:

cd /путь/к/проектам
notamocks

Полезные параметры notamocks:

  • -p — количество параллельных сборок;
  • -s — пропускать уже собранные проекты;
  • -n (или --chain) — цепочная сборка с добавлением результатов предыдущих итераций в репозиторий;
  • -l — каталог для хранения логов.
  • notamockd

Утилита notamockd предназначена для интеграции со сборочной системой ABF. Может запускаться в двух режимах:

  • создание и запуск контейнера с builders напрямую;
  • создание Docker-образа и запуск контейнера через Docker.

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

notamockd -t <TOKEN>

Полезные опции утилиты notamockd:

  • -p — количество builders;
  • -b — имя builder;
  • -B — внешний каталог для сборки;
  • --watch — мониторинг логов;
  • --tmux — запуск в tmux внутри контейнера для отладки.

Если не указан внешний каталог через опцию -B, сборка будет происходить в /tmp контейнера. В случае необходимости можно изменить поведение на использование chroot опцией CHROOT=INTERNAL в конфигурации или указать TMPD с собственным путем.

Если требуется создание Docker-образа с builder используются следующие команды:

sudo dnf install docker
sudo systemctl start docker
notamockd --docker -b builder_name
docker image ls
docker run -it --rm --privileged -e BUILD_TOKEN="ABF_TOKEN"\ -e PARALLEL=3 -v /tmp:/tmp <docker image ID>

Примечание –Для корректной работы требуется смонтировать том через -v, иначе overlayfs внутри контейнера не будет работать.

  • notamockc

Утилита notamockc используется для запуска контейнера с любыми командами в среде chroot, основанной на слоеных rootfs. Это позволяет получить доступ к окружению сборки без необходимости отдельного скачивания образа с ABF или создания rootfs вручную.

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

notamockc

При необходимости можно указать целевую платформу с помощью параметра -r, например:

notamockc -r 13

Также возможно сразу передать команду, которая будет выполнена в chroot:

notamockc -r 13 -- dnf provides thunderbird

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

notamockc -n my_container

Чтобы изменения контейнера сохранялись и между перезагрузками хоста, необходимо указать путь для хранения временных данных через TMPD как в командной строке, так и в конфигурационном файле /etc/notamock.cfg.

Для проброса необходимых файлов в контейнер удобно использовать параметр BIND. Например:

notamockc BIND='/home/user/project::/root/project'

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

notamockc BIND='/home/user/project::/root/project::ro::noexec'

Помимо каталогов, возможно монтирование squashfs-архивов, образов или разделов диска. В данном случае происходит полноценное монтирование, а не bind. Опция bind доступна как в командной строке, так и через конфигурационные файлы, и может применяться во всех утилитах Notamock.

Notamock может применяться для сборки пакетов с последующим статическим анализом кода с помощью комплекса SVACE. Для этого нужно выполнить следующие шаги:

  1. На хостовой Cистеме распаковать архив SVACE по команде, например:
/home/user/svace/svace-3.4.240312-x64-linux
  1. Создать файл конфигурации пакетного менеджера, например /etc/notamock-dnf.conf:
[main]
gpgcheck=0
best=True
skip_if_unavailable=False
keepcache=True
reposdir=''
[rosa-contrib]
name=rosa-contrib
baseurl=http://abf-downloads.rosalinux.ru/rosa$releasever/repository/$arch/contrib/release/
gpgcheck=0
[rosa-main]
name=rosa-main
baseurl=http://abf-downloads.rosalinux.ru/rosa$releasever/repository/$arch/main/re\lease/
gpgcheck=0
  1. Cоздать отдельный профиль Notamock, например /etc/notamock.d/svace, командой:
PM_config=/etc/notamock-dnf.conf
BUILD_cmd='/opt/svace/bin/svace init && /opt/svace/bin/svace build rpmbuild -ba *.spec --define="_sourcedir $INTERNAL_DIR" --define="_topdir $INTERNAL_DIR"'
BIND_SOURCE=yes
BIND='/home/user/svace/svace-3.4.240312-x64-linux:/opt/svace:ro'
  1. Для запуска сборки выполнить команду:
sudo notamock -r 2021.15 name-X-Y.src.rpm

Результаты анализа будут сохранены в каталоге name/.svace-dir относительно текущей директории запуска. При необходимости последующего анализа эти данные можно перенести на другую машину и использовать утилиту svace analyze.