Previous: , Up: Управление пакетами   [Contents][Index]


6.10 Вызов guix archive

Команда guix archive даёт возможность пользователям экспортировать файлы со склада в простой архив и затем импортировать их на машину с работающим Guix. В частности, это позволяет передавать файлы склада одной машины на склад другой машины.

Примечание: Если вы ищете способ производить архивы в формате, который подходит для инструментов, отличных от Guix, смотрите see Запуск guix pack.

Чтобы экспортировать файлы склада в архив в стандартный вывод, выполните:

guix archive --export options specifications...

Спецификации specifications могут быть либо именами файлов или пакетами, как для команде guix package (see Вызов guix package). Например, следующая команда создаёт архив, содержащий выход gui пакета git и главный выход emacs:

guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar

Если указанные пакеты ещё не собраны, guix archive автоматически соберёт их. Процесс сборки может контролироваться обычными опциями сборки (see Стандартные параметры сборки).

Чтобы передать пакет emacs на машину, соединённую по SSH, нужно следующее:

guix archive --export -r emacs | ssh the-machine guix archive --import

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

guix archive --export -r $(readlink -f ~/.guix-profile) | \
  ssh the-machine guix archive --import

Однако заметим, что в обоих примерах, передаются весь emacs и профиль вместе с их зависимости (ввиду -r), не учитывая, что доступно на складе целевой машины. Опция --missing помогает определить отсутствующие элементы на целевом складе. Команда guix copy упрощает и оптимизирует весь этот процесс, так что в данном случае она решает проблему (see Запуск guix copy).

Каждый элемент храниища написан в normalized archive или nar формате (описано ниже), и вывод guix archive --export (и ввод guix archive --import) есть nar bundle.

Формат nar по духу сравним с tar, но с отличиями, которые делают его более подходящим для наших целей. Во-первых, вместо записи всех метаданных Unix для каждого файла, в формате nar упоминается только тип файла (обычный, каталог или символическая ссылка); Разрешения Unix и владелец/группа отклонены. Во-вторых, порядок, в котором хранятся записи каталога, всегда следует порядку имен файлов в соответствии с порядком сопоставления C локали. Это делает создание архивов полностью детерминированным.

Формат пакета nar - это, по сути, конкатенация нуля или более nars вместе с метаданными для каждого элемента store, который содержит: имя файла, ссылки, соответствующую derivation и цифровую подпись.

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

Основные опции:

--export

Экспортировать указанные файлы хранилища или пакеты (смотрите ниже). Писать результирующий архив в стандартный вывод.

Зависимости не включаются в выход, если не задана опция --recursive.

-r
--recursive

При сочетании с --export это указывает guix archive включать в архив зависимости обозначенных элементов. Так результирующий архив будет "сам в себе": содержит полный конвейер экспортированных элементов склада.

--import

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

--missing

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

--generate-key[=parameters]

Генерировать новую ключ-пару для демона. Это необходимо получить перед тем, как экспортировать архивы опцией --export. Отметим, что эта операция обычно занимает время, так как необходимо собрать много энтропии для ключ-пары.

Сгенерированная ключ-пара обычно сохраняется под /etc/guix, в файлы signing-key.pub (публичный ключ) и signing-key.sec (прватный ключ, который должен оставаться в секрете). Если параметры parameters пропущены, генерируется ключ ECDSA, используя кривую Ed25519, или для Libgcrypt версии ранее 1.6.0 — это 4096-битный ключ RSA. Альтернативно в параметрах parameters можно указать genkey, соответствующие Libgcrypt (see gcry_pk_genkey in The Libgcrypt Reference Manual).

--authorize

Авторизовать импорт, подписанный публичным ключом, поступивший на стандартный ввод. Публичный ключ должен быть в формате s-expression, то есть в таком же формате, как файл signing-key.pub.

Список авторизованных ключей хранится в файле /etc/guix/acl, доступном для редактирования человеком. Файл содержит s-expression расширенного формата, и он структурирован в виде списка контроля доступа в Simple Public-Key Infrastructure (SPKI).

--extract=directory
-x directory

Читать архив, представляющий один элемент, в качестве поставленного серверами подстановки (see Подстановки) и извлечь его в директорию directory. Это низкоуровневая операция, необходимая только в очень редких случаях, смотрите ниже.

Например, следующая команда распаковывает подстановку Emacs, поставленную ci.guix.gnu.org в /tmp/emacs:

$ wget -O - \
  https://ci.guix.gnu.org/nar/gzip/…-emacs-24.5 \
  | gunzip | guix archive -x /tmp/emacs

Архивы, представляющие один элемент, отличаются от архивов, содержащих множество элементов, производимых guix archive --export. Они содержат один элемент склада, но они не включают подпись. Так что эта операция не использует верификацию, и его выход должен рассматриваться как небезопасный.

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

--list
-t

Читать архив, представляющий один элемент, в качестве поставленного серверами подстановки (see Подстановки) и распечатайте список файлов, которые он содержит, как в этом примере:

$ wget -O - \
  https://ci.guix.gnu.org/nar/lzip/…-emacs-26.3 \
  | lzip -d | guix archive -t

Previous: , Up: Управление пакетами   [Contents][Index]