Утилита rpm-ostree#
Описание#
rpm-ostree — это гибридная система по управлению образами и пакетами; она использует OSTree для работы с образами и RPM для работы с пакетами. Поддерживает сборку RPM на стороне сервера в виде коммита OSTree (образа), и клиенты могут реплицировать его побитово с быстрыми инкрементальными обновлениями. Кроме того, гибридный характер системы проявляется в возможности многослойного наложения пакетов на стороне клиента и их переопределения.
В системе, управляемой rpm-ostree, традиционные инструменты yum/dnf (если установлены) и rpm работают в режиме только для чтения; база данных RPM хранится в каталоге /usr/share/rpm, который подключен только для чтения.
Вместо попакетного обновления «на лету» (в режиме реального времени) базовый слой OSTree реплицирует полное дерево файловой системы с компонующего (compose) сервера в новое развертывание, доступное после перезагрузки. Одним из преимуществ такого подхода является доступность предыдущего развертывания для отката. Это также упрощает надежную постановку обновления в очередь (queue) без какого-либо влияния на работающую систему. Однако в настоящее время существует экспериментальная команда livefs, которая поддерживает изменение запущенной файловой системы.
В модели «чистой репликации» нет накладных расходов на управление пакетами на стороне клиента. Разрешение зависимостей, маркировка SELinux, выполнение всех скриптов и т.д. происходят на стороне сервера и фиксируются в коммите OSTree.
Синтаксис утилиты:
rpm-ostree [<option>] [<command>] [<command_options>...]
Где:
<option>- опции утилиты;<command>- команда (подробнее о доступных командах - в разделах ниже);<command_options>- опции команд.
Настройка утилиты производится с помощью конфигурационного файла /etc/rpm-ostreed.conf.
Опции#
Опции утилиты представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Показывает справку по утилите и завершает работу |
|
Выводит информацию о версии утилиты и завершает работу |
|
Отключает вывод большинства информационных сообщений |
Опция -h (--help) также актуальна для всех команд утилиты - справку по каждой команде можно получить, выполнив ее с данной опцией. Например, для получения справки по rpm-ostree install выполните:
rpm-ostree install --help
Команды на стороне клиента#
cancel#
Отменяет ожидающую транзакцию. Команда завершается успешно и не выполняет никаких действий, если нет запущенных транзакций. Отмена ожидающих транзакций, в том числе таких как обновление, полностью безопасна.
db#
Предоставляет информацию, относящуюся к данным RPM-пакетов в деревьях файловой системы в коммитах OSTree.
Подкоманды db представлены в таблице ниже.
Подкоманда |
Описание |
|---|---|
|
Показывает отличие пакетов между деревьями в двух ревизиях (revs). Если ревизии не указаны, то загруженный коммит сравнивается с коммитом, ожидающим фиксации. Если указана только одна ревизия, то загруженный коммит сравнивается с ней. Опция |
|
Показывает, какие пакеты находятся в коммите (работает аналогично |
|
Показывает rpmdb-версию пакетов в коммите (работает аналогично |
deploy#
Принимает в качестве аргумента версию, ветку или идентификатор коммита и создает на его основе новое развертывание, устанавливая его как значение по умолчанию для следующей загрузки. В отличие от большинства других команд, эта команда автоматически извлекает и просматривает историю источника, чтобы найти целевой объект. Предполагается, что это не окажет никакого влияния на текущее дерево файловой системы. Для вступления изменений в силу требуется перезагрузка.
Кроме того, команда ставит в очередь обновление для всех дополнительных, «наложенных» (layered) пакетов.
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Завершает с кодом состояния |
|
Выполняет перезагрузку (для применения изменений) после подготовки обновления |
|
Загружает метаданные для просмотра различий в RPM-пакетах, но не создает при этом новое развертывание |
|
Выполняет операцию, не пытаясь загрузить целевое дерево с удаленного сервера или получить последние пакеты |
|
Загружает целевой OSTree и наложенные RPM, без фактического выполнения развертывания. Можно использовать вместе с последующим вызовом |
install#
Устанавливает отдельные дополнительные пакеты. В качестве аргументов принимает один или несколько пакетов. Пакеты загружаются из включенных репозиториев, указанных в каталоге /etc/yum.repos.d/, и накладываются поверх нового развертывания. Также можно указать локальный RPM-пакет, находящийся на хосте. Наложенные пакеты позже могут быть удалены с помощью команды uninstall.
Внесение локальных изменений на уровне машины переведет rpm-ostree на работу в полностью гибридном режиме. С этого момента rpm-ostree начнет извлекать данные из всех включенных репозиториев rpm-md (yum) и использовать их для обновления пакетов при каждом вызове команды rpm-ostree upgrade, а также при выполнении других операций, таких как rebase.
rpm-ostree запоминает эти запросы даже если последующее обновление хоста уже включает эти пакеты: если впоследствии пакеты снова будут удалены из базового слоя, rpm-ostree вернется к их наложению.
Обратите внимание, что по умолчанию указание в команде install пакета, который уже находится в базовом слое, приводит к ошибке, если не указана опция --allow-inactive. Это может быть полезно, если ожидается удаление базового пакета.
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Игнорирует ошибку и не выводит ее, если запрос на установку пакета уже существует |
|
Выполняет перезагрузку после подготовки развертывания |
|
Завершает работу после вывода транзакции, не скачивая пакеты и не создавая новое развертывание |
|
Разрешает запросы на установку пакетов, которые уже находятся в базовом слое |
|
Выполняет операцию, не пытаясь загрузить последние пакеты |
|
Загружает целевые наложенные RPM-пакеты, не выполняя развертывание. Можно использовать вместе с последующим вызовом |
|
Выполняет последующую операцию |
|
Позволяет одному пакету перезаписывать файлы другого без необходимости пересборки всего пакета ядра |
uninstall#
В качестве аргументов принимает один или несколько пакетов. Пакеты удаляются из набора пакетов, которые в данный момент наложены. Оставшиеся пакеты в наборе (если таковые имеются) загружаются из включенных репозиториев в /etc/yum.repos.d/ и накладываются поверх нового развертывания.
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Выполняет перезагрузку после подготовки развертывания |
|
Завершает работу после вывода информации о транзакции, не скачивая пакеты и не создавая новое развертывание |
search#
В качестве аргументов принимает один или несколько условий запроса. Выполняет поиск пакетов во включенных репозиториях, указанных в каталоге /etc/yum.repos.d/. Пакеты могут быть наложены и удалены с помощью команд install и uninstall.
rebase#
Переключает на другой базовый образ, сохраняя при этом все состояния, которые обычно сохраняются при обновлении (upgrade), такие как изменения в /etc, любые наложенные RPM-пакеты и т.д.
Для перехода на образы контейнеров в синтаксисе используются ссылки на образы контейнеров OSTree, которые объединяют передачу образов с обязательной схемой проверки целостности. Модель OSTree поощряет подписание контейнерных образов, поскольку они должны быть полностью доверенными. Примеры ссылок для указания источников образов контейнеров:
ostree-image-signed:docker://quay.io/exampleos/custom:latest- загрузит образ из удаленного реестра и выдаст ошибку, если бэкенд контейнера не требует подписей.ostree-unverified-registry:quay.io/exampleos/custom:latest- загрузит образ из удаленного реестра, и подпись не будет обязательной. На практике это просто сокращение дляostree-unverified-image:docker://quay.io/exampleos/custom:latest.ostree-unverified-image:oci:/path/to/dir.oci- загрузит из локального неподписанного OCI-каталога (целостность этого каталога может быть проверена вне зависимости от текущего процесса).
Для переключения между ветками OSTree используется синтаксис rebase <remotename>:<branchname>. В качестве альтернативы можно использовать опции, указанные ниже. Если в аргументах указан только <branchname>, то будет использоваться тот же удаленный сервер, что и ранее. Также можно опустить один из значений <remotename> или <branchname>, сохранив двоеточие. В первом случае будет идти речь о локальной ветке; во втором случае будет использована та же ветка, но на другом удаленном сервере.
Эта команда также поставит в очередь обновление для всех наложенных пакетов.
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Задает имя ветки |
|
Определяет имя удаленного источника |
|
Выполняет переключение, не пытаясь загрузить целевое дерево с удаленного источника или получить последние пакеты |
|
Загружает целевой OSTree и наложенные RPM, не выполняя фактическое развертывание. Можно использовать вместе с последующим вызовом |
rollback#
OSTree управляет упорядоченным списком записей загрузчика, называемых развертываниями (deployments). Запись с индексом 0 является записью загрузчика по умолчанию. Каждая запись имеет отдельный /etc, но все они имеют общий /var. Можно использовать загрузчик для выбора между записями, нажав клавишу Tab для прерывания запуска.
Эта команда изменяет запись загрузчика по умолчанию. Если загружена текущая запись, то установит в качестве значение по умолчанию предыдущую. В противном случае сделает значением по умолчанию текущее загруженное дерево.
Опция команды - -r, --reboot - выполняет перезагрузку после подготовки отката.
status#
Предоставляет информацию о текущем используемом развертывании. Выводит имена и спецификации всех возможных развертываний таким образом, что первое развертывание в списке является значением по умолчанию при загрузке системы. Развертывание, помеченное символом ●, является текущим загруженным развертыванием, а r указывает на самое последнее обновление (самую новую версию развертывания).
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Выводит более подробную информацию, такую как различия между пакетами, рекомендации, идентификаторы пользователей GPG-подписей и имена пользователей StateRoot |
|
Расширяет список рекомендаций, если они есть |
|
Выводит информацию только о загруженном развертывании |
|
Завершает работу с кодом состояния |
|
Выводит информацию о состоянии в формате JSON для удобства использования в скриптах |
|
Фильтрует вывод JSON с помощью выражения JSONPath |
upgrade#
Загружает последнюю версию текущего дерева и развертывает его, установив как значение по умолчанию для следующей загрузки. Это никак не повлияет на текущее дерево файловой системы. Чтобы изменения вступили в силу, необходимо перезагрузить систему.
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Завершает с кодом состояния |
|
Выполняет перезагрузку после подготовки обновления |
|
Разрешает развертывание более старых (в хронологическом порядке) деревьев |
|
Загружает только |
|
Проверяет, доступно ли обновление, без его загрузки или выполнения сравнения на уровне пакетов. Использование этой опции принудительно обновит метаданные RPM из включенных репозиториев в |
|
Выполняет обновление, не пытаясь загрузить последнюю версию дерева с удаленного источника или получить последние пакеты |
|
Загружает целевой OSTree и наложенные RPM, не выполняя фактическое развертывание. Можно использовать вместе с последующим вызовом |
override#
Предоставляет подкоманды для переопределения (модификации) базового слоя OSTree. Такие модификации следует выполнять с осторожностью, и обычно они не предназначены для длительного использования. Например, можно заменить базовый пакет его старой версией, чтобы избежать регрессии. Переопределения автоматически переносятся при создании новых развертываний.
Подкоманды override представлены в таблице ниже.
Подкоманда |
Описание |
|---|---|
|
Удаляет базовые пакеты |
|
Заменяет базовые пакеты. Требуется явно указать набор RPM для установки через HTTP или локальные пути к файлам |
|
Сбрасывает предыдущие переопределения. Необходимо указать полный NEVRA целевых пакетов |
refresh-md#
Загружает последние метаданные RPM-репозиториев (если это необходимо) и генерирует кеш.
kargs#
Без параметров отображает текущие аргументы ядра по умолчанию. Для изменения аргументов используются опции (описаны ниже), которые создадут новое развертывание с измененными аргументами ядра. Предыдущие развертывания не меняются.
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Использует редактор для изменения аргументов ядра |
|
Добавляет аргумент ядра. Например, |
|
Добавляет аргумент ядра, если он отсутствует |
|
Удаляет аргумент ядра. Например, |
|
Удаляет аргумент ядра, если он присутствует. Например, |
|
Заменяет существующий аргумент ядра. Позволяет передавать значения в формате |
|
Завершает работу с кодом состояния |
Для получения итоговых аргументов изменения применяются к аргументам ядра развертывания по умолчанию. Используйте опции --deploy-index или --import-proc-cmdline, чтобы основывать изменения на конкретном развертывании или текущей загрузке.
cleanup#
Команды, такие как upgrade, создают новые развертывания, которые влияют на следующую загрузку и занимают дополнительное место в хранилище. В некоторых случаях может потребоваться отменить и очистить эти операции. Эта команда поддерживает удаление дополнительных развертываний, таких как «ожидающее» развертывание (следующая загрузка), а также развертывание по умолчанию для отката.
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Удаляет ожидающее развертывание |
|
Удаляет развертывание отката |
|
Очищает любое временное выделенное пространство, которое могло остаться в результате прерванных операций. Не затрагивает завершенные развертывания. Используйте эту опцию в первую очередь, если необходимо безопасно освободить место на диске |
|
Очищает кешированные метаданные RPM-репозиториев, а также частично загруженные (но не импортированные) пакеты |
Примечание
Очистка не затронет развертывания, которые были «закреплены» с помощью операции ostree admin pin.
reload#
Некоторые изменения в конфигурации и состоянии данных, такие как изменения в /etc/ostree/remotes.d, могут не примениться до тех пор, пока не будет выполнен перезапуск демона. Используйте эту команду для инициации перезагрузки.
usroverlay#
Монтирует на /usr доступную для записи наложенную (overlay) файловую систему, которая будет активна только до завершения текущей загрузки системы. Это предназначено для разработки, тестирования и отладки. Изменения не сохраняются после обновлений или перезагрузок.
Одной из важных целей этой команды является поддержка традиционного способа применения изменений через rpm -Uvh /<path_to_rpms> или аналогичные методы, когда изменения применяются «на лету» (без перезагрузки или создания нового развертывания).
Эта команда эквивалентна ostree admin unlock.
initramfs#
По умолчанию основной режим использования rpm-ostree заключается в репликации initramfs как части базового слоя. Однако некоторые сценарии использования требуют его локальной регенерации для добавления конфигурации или драйверов. Используйте команду rpm-ostree initramfs, чтобы проверить текущее состояние.
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Включает регенерацию |
|
Позволяет добавить пользовательские аргументы в программу |
|
Отключает регенерацию |
Для более простого случая добавления нескольких файлов в initramfs можно использовать команду rpm-ostree initramfs-etc. Этот метод менее ресурсоемкий и не требует запуска dracut.
initramfs-etc#
Добавляет конфигурационные файлы (/etc) в initramfs без регенерации всего initramfs. Это полезно для настройки служб, поддерживающих корневое блочное устройство, а также служб ранней загрузки, таких как systemd и journald.
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Начинает отслеживание конкретного файла. Может быть указано несколько раз. Будет создано новое развертывание |
|
Прекращает отслеживание указанных файлов |
|
Прекращает отслеживание всех файлов |
|
Создает новое развертывание с последними версиями отслеживаемых файлов без выполнения обновления |
При наличии отслеживаемых файлов при любом последующем развертывании (например, при выполнении обновления) будет обеспечена их синхронизация. Можно использовать --force-sync, чтобы просто создать новое развертывание с последними версиями отслеживаемых файлов без обновления.
apply-live#
Создает временную наложенную файловую систему (overlayfs) для загруженного /usr с учетом целевого коммита OSTree (по умолчанию используется ожидающее развертывание). Изменения синхронизируются из источника в загруженное дерево файловой системы. По умолчанию, чтобы обеспечить безопасность, разрешается только добавление пакетов.
Опции команды представлены в таблице ниже.
Опция |
Описание |
|---|---|
|
Сбрасывает дерево файловой системы до загруженного коммита |
|
Позволяет указать произвольный коммит OSTree. Используется в основном для тестирования |
|
Включает «живые» (live) обновления и удаление существующих пакетов |
В качестве примера может быть приведена установка postgresql в live-режиме:
Подготовьте установку пакета:
rpm-ostree install postgresql-serverПримените изменения - в данном случае установку пакета «на лету» (без необходимости перезагрузки системы):
rpm-ostree apply-liveЗапустите службу PostgreSQL:
systemctl start postgresqlИ дальнейшая настройка.
Эти шаги эквивалентны команде:
rpm-ostree install -A postgresql-server
Это синхронизирует файловую систему; например, никакие юниты systemd не перезапускаются.
Одним из важных преимуществ подхода overlayfs является то, что если что-то пойдет не так в середине операции apply-live, то перезагрузка системы удалит оверлей, восстанавливая систему в исходное состояние развертывания.
ex#
Предоставляет доступ к экспериментальным функциям; стабильность интерфейса командной строки не гарантируется. Доступные подкоманды будут перечислены при вызове rpm-ostree ex.
Команды на стороне сервера#
compose#
Точка входа для создания деревьев OSTree; чаще всего используется на серверах для подготовки деревьев к репликации клиентскими системами.
Подкоманды compose представлены в таблице ниже.
Подкоманда |
Описание |
|---|---|
|
Фиксирует целевой путь в репозитории OSTree |
|
Генерирует воспроизводимый «фрагментированный» образ контейнера (используя данные RPM) из коммита OSTree |
|
Загружает RPM-пакеты, гарантированно совместимые с базовым OSTree |
|
Генерирует воспроизводимый «фрагментированный» образ контейнера (используя данные RPM) из файла конфигурации дерева (treefile) |
|
Устанавливает пакеты по целевому пути |
|
Выполняет финальную постобработку корневого каталога установки |
|
Обрабатывает файл конфигурации дерева (treefile); устанавливает пакеты и фиксирует результат в репозитории OSTree |
Настройка репозиториев и GPG-ключи#
rpm-ostree использует общую библиотеку libdnf, которая учитывает настройки из каталога /etc/yum.repos.d. При этом репозитории формата rpm-md (yum/dnf) проверяются только в случае, если включено клиентское наложение пакетов.
Однако поведение GPG-ключей немного отличается от традиционной системы RPM. Все GPG-ключи, находящиеся в /etc/pki/rpm-gpg, автоматически загружаются и являются доверенными. Файл .repo должен ссылаться на путь к файлам этого каталога.
Команда rpm --import /<path_to_key>.gpg не будет работать на активной/загруженной системе, так как RPM пытается записать данные непосредственно в базу данных RPM, которая доступна только для чтения.
Тем не менее во время процесса сборки контейнера база данных RPM становится доступной для записи, и такие изменения будут сохранены.
Примеры использования#
Выведите развертывания
rpm-ostreeв порядке их отображения в загрузчике:rpm-ostree statusВыведите пакеты, которые устарели и могут быть обновлены:
rpm-ostree upgrade --previewПодготовьте новое развертывание OSTree с обновленными пакетами и перезагрузите систему в него:
rpm-ostree upgrade --rebootПерезагрузите систему в предыдущее развертывание OSTree:
rpm-ostree rollback --rebootУстановите пакет в новое развертывание OSTree и перезагрузите систему в него:
rpm-ostree install <package> --rebootВместо
<package>укажите имя необходимого пакета.
Дополнительная информация#
Дополнительную информацию можно получить, выполнив:
man rpm-ostree
Или:
rpm-ostree --help