Previous: Вызов guix describe
, Up: Управление пакетами [Contents][Index]
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: Вызов guix describe
, Up: Управление пакетами [Contents][Index]