Установка и удаление программ (репозитории)
Для установки, удаления и обновления программ в ОС используется пакетная модель. Программное обеспечение поставляется в виде пакетов стандартного формата (для данной ОС – это 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. Для этого нужно выполнить следующие шаги:
- На хостовой Cистеме распаковать архив SVACE по команде, например:
/home/user/svace/svace-3.4.240312-x64-linux
- Создать файл конфигурации пакетного менеджера, например
/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
- 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'
- Для запуска сборки выполнить команду:
sudo notamock -r 2021.15 name-X-Y.src.rpm
Результаты анализа будут сохранены в каталоге name/.svace-dir относительно текущей директории запуска. При необходимости последующего анализа эти данные можно перенести на другую машину и использовать утилиту svace analyze.