Next: Подстановки, Previous: Особенности, Up: Управление пакетами [Contents][Index]
guix package
Команда guix package
— инструмент, который позволяет
пользователям устанавливать, обновлять и удалять пакеты, а также
откатываться до предыдущих конфигураций (see Особенности). Его синтаксис:
guix package options
В первую очередь, options (опции) задают операции, которые нужно выполнить в транзакции. По завершении создаётся новый профиль, а предыдущие поколения (generations) профиля остаются доступными, если пользователь решит откатиться.
Например, чтобы удалить lua
и устанвоить guile
и
guile-cairo
в одной транзакции, напечатайте:
guix package -r lua -i guile guile-cairo
Для вашего удобства мы также предоставляем следующие синонимы:
guix search
- синоним guix package -s
,
guix install
- синоним guix package -i
,
guix remove
- синоним guix package -r
,
guix upgrade
— это синоним guix package -u
,
guix show
псевдоним (alias) для guix package --show=
.
Эти синонимы не такие мощные, как guix package
, и предоставляют
меньше опций, так что в некоторых случаях вам скорее нужно пользоваться
непосредственно guix package
.
guix package
также поддерживает декларативный подход, с
помощью которого пользователь зааёт точный набор пакетов, которые должны
быть доступны, и передаёт его в опции --manifest
(see --manifest).
For each user, a symlink to the user’s default profile is automatically
created in $HOME/.guix-profile. This symlink always points to the
current generation of the user’s default profile. Thus, users can add
$HOME/.guix-profile/bin to their PATH
environment variable, and
so on.
Если вы не используете систему Guix, предполагается добавление следующих
строк в ваш ~/.bash_profile (see Bash Startup Files in The
GNU Bash Reference Manual), чтобы порождаемые оболочки получили все
необходимые определения переменных окружения:
GUIX_PROFILE="$HOME/.guix-profile" ; \ source "$HOME/.guix-profile/etc/profile"
In a multi-user setup, user profiles are stored in a place registered as a
garbage-collector root, which $HOME/.guix-profile points to
(see Вызов guix gc). That directory is normally
localstatedir/guix/profiles/per-user/user
, where
localstatedir is the value passed to configure
as
--localstatedir, and user is the user name. The
per-user directory is created when guix-daemon
is started,
and the user sub-directory is created by guix package
.
Опции options могут быть следующими:
--install=package …
-i package …
Установить заданный пакет.
Each package may specify either a simple package name, such as
guile
, or a package name followed by an at-sign and version number,
such as guile@1.8.8
or simply guile@1.8
(in the latter case,
the newest version prefixed by 1.8
is selected).
Если не задан номер версии, тогда будет выбрана самая новая доступная
версия. Добавм, что package может содержать двоеточие и одно имя
выходных данных пакета, как gcc:doc
или binutils@2.22:lib
(see Пакеты со множественным выходом). Пакеты с соответствующим именем (и
опционально, версией) будут отыскиваться в модулях дистрибутива GNU
(see Пакетные модули).
Иногда пакеты имеют распространённые входные данные (propagated
inputs) — это зависимости, которые устанавливаются автоматически вместе с
требуемыми пакетами (см. see propagated-inputs
in package
objects для подробной информации
о распространяемых входных днных в определениях пакетов).
Примером является библиотека GNU MPC: его файлы заголовков C ссылаются на файлы библиотеки GNU MPFR, которые в свою очередь, ссылаются на библиотеку GMP. Так при установке MPC, также в профиль будут устанволены библиотеки MPFR и GMP; удаление MPC также удалит MPFR и GMP, если конечно, они не были явно установлены пользователем.
Besides, packages sometimes rely on the definition of environment variables for their search paths (see explanation of --search-paths below). Any missing or possibly incorrect environment variable definitions are reported here.
--install-from-expression=exp
-e exp
Устанавить пакет, соответствующий exp.
exp должно быть выражением Scheme, которое определяет объект
<package>
. Эта опция полезна, чтобы указать однозначно пакет, который
имеет схожие варианты имён, например, выражением (@ (gnu packages
base) guile-final)
.
Отметим, что эта опция устанавливает первое содержимое пакета, чего может быть недостаточно, если нужен специфичный выход пакета со множественным выходом.
--install-from-file=file
-f file
Устанавить пакет, который определён в файле.
Например, file может содержать содержать определение (see Описание пакетов):
(use-modules (guix) (guix build-system gnu) (guix licenses)) (package (name "hello") (version "2.10") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/hello/hello-" version ".tar.gz")) (sha256 (base32 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i")))) (build-system gnu-build-system) (synopsis "Hello, GNU world: An example GNU package") (description "Guess what GNU Hello prints!") (home-page "http://www.gnu.org/software/hello/") (license gpl3+))
Пользователи могут найти полезным включить подобный файл guix.scm в корень дерева своего проекта исходного кода, и он будет использоваться для тестирования разработки снепшотов и для создания воспроизводимого окружения разработки (see Запуск guix environment).
file может также содержать JSON-представление одного или нескольких
определений пакетов. Запуск guix package -f
на файле
hello.json со следующим содержимым, установит пакет greeter
после сборки myhello
:
[ { "name": "myhello", "version": "2.10", "source": "mirror://gnu/hello/hello-2.10.tar.gz", "build-system": "gnu", "arguments": { "tests?": false } "home-page": "https://www.gnu.org/software/hello/", "synopsis": "Hello, GNU world: An example GNU package", "description": "GNU Hello prints a greeting.", "license": "GPL-3.0+", "native-inputs": ["gettext"] }, { "name": "greeter", "version": "1.0", "source": "https://example.com/greeter-1.0.tar.gz", "build-system": "gnu", "arguments": { "test-target": "foo", "parallel-build?": false, }, "home-page": "https://example.com/", "synopsis": "Greeter using GNU Hello", "description": "This is a wrapper around GNU Hello.", "license": "GPL-3.0+", "inputs": ["myhello", "hello"] } ]
--remove=package …
-r package …
Удалить обозначенный пакет.
As for --install, each package may specify a version number
and/or output name in addition to the package name. For instance, ‘-r
glibc:debug’ would remove the debug
output of glibc
.
--upgrade[=regexp …]
-u [regexp …]
Upgrade all the installed packages. If one or more regexps are specified, upgrade only installed packages whose name matches a regexp. Also see the --do-not-upgrade option below.
Отметим, что это обновляет пакеты, которые установлены в системе, до
последних версий, имеющихся в дистрибутиве. Чтобы обновить дистрибутив,
нужно регулярно запускать guix pull
(see Запуск guix pull).
При обновлении автоматически применяются преобразования пакета, которые были первоначально применены при создании профиля (see Параметры преобразования пакета). Например, предположим, что вы сначала установили Emacs из ветки разработки с помощью:
guix install emacs-next --with-branch=emacs-next=master
В следующий раз, когда вы запустите guix upgrade
, Guix снова
посмотрит на ветку разработки Emacs и соберет новый emacs-next
.
Обратите внимание, что параметры преобразования, такие как --with-branch и --with-source, зависят от внешнего состояния; вам решать, чтобы они работали должным образом. Вы также можете отменить преобразования, которые применяются к пакету, запустив:
guix install package
--do-not-upgrade[=regexp …]
When used together with the --upgrade option, do not upgrade any packages whose name matches a regexp. For example, to upgrade all packages in the current profile except those containing the substring “emacs”:
$ guix package --upgrade . --do-not-upgrade emacs
--manifest=file
-m file
Создаёт новую версию профиля из объекта манифеста, возвращаемого кодом Scheme в file. Этот параметр можно указывать несколько раз. В результате манифесты будут объединены в один.
This allows you to declare the profile’s contents rather than constructing it through a sequence of --install and similar commands. The advantage is that file can be put under version control, copied to different machines to reproduce the same profile, and so on.
file должен возвращать объект manifest, который, грубо говоря, является списком пакетов:
(use-package-modules guile emacs) (packages->manifest (list emacs guile-2.0 ;; Use a specific package output. (list guile-2.0 "debug")))
В этом примере мыдолжны знать, какие модули содержат определения переменных
emacs
и guile-2.0
, чтобы написать правильную строку
use-package-modules
, что может быть затруднительно. Вместо этого мы
можем обозначить обычные спецификации пакетов и сделать, чтобы
specifications->manifest
искал соответствующие объекты пакетов так:
(specifications->manifest
'("emacs" "guile@2.2" "guile@2.2:debug"))
--roll-back
Откатиться до предыдущего поколения профиля, то есть отменить последнюю транзакцию.
When combined with options such as --install, roll back occurs before any other actions.
При откате от первого поколения, которое по факту содержит установленные пакеты, профиль будет указывать на нулевое поколение, которое не содержит файлы, кроме собственных метаданных.
После выполнения отката, установка, удаление или обновление пакетов по факту заменяет прежние будущие поколения. То есть история поколений в профиле всегда линейная.
--switch-generation=pattern
-S pattern
Переключиться на определённое поколение, опрделённое pattern.
pattern may be either a generation number or a number prefixed with “+” or “-”. The latter means: move forward/backward by a specified number of generations. For example, if you want to return to the latest generation after --roll-back, use --switch-generation=+1.
The difference between --roll-back and --switch-generation=-1 is that --switch-generation will not make a zeroth generation, so if a specified generation does not exist, the current generation will not be changed.
--search-paths[=kind]
Вывести отчёт об определениях переменных окружения в синтаксисе Bash. Это может понадобиться для использования набора установленных пакетов. Эти переменные окружения используются некоторыми установленными пакетами для поиска файлов.
For example, GCC needs the CPATH
and LIBRARY_PATH
environment
variables to be defined so it can look for headers and libraries in the
user’s profile (see Environment Variables in Using the GNU Compiler
Collection (GCC)). If GCC and, say, the C library are installed in the
profile, then --search-paths will suggest setting these variables
to profile/include and profile/lib, respectively.
Обычный способ определить эти переменные окружения в оболочке:
$ eval `guix package --search-paths`
Вид kind может быть либо точный адрес exact
, либо префикс
prefix
, либо суффикс suffix
, то есть возвращаемые переменные
окружения могут быть либо точными, либо префиксами и суффиксами текущего
значения этих переменных. При пропуске вид kind по умолчанию
выбирается точный exact
.
Эта опция также может использоваться для вычисления комбинированных путей поиска нескольких профилей. Рассмотрим пример:
$ guix package -p foo -i guile $ guix package -p bar -i guile-json $ guix package -p foo -p bar --search-paths
The last command above reports about the GUILE_LOAD_PATH
variable,
even though, taken individually, neither foo nor bar would
lead to that recommendation.
--profile=profile
-p profile
Использовать profile вместо пользовательского профиля по умолчанию.
profile должен быть именем файла, который будет создан по завершении. Конкретно profile будет простой символической ссылкой (“символическая ссылка”), указывающей на текущий профиль, в котором установлены пакеты:
$ guix install hello -p ~/code/my-profile … $ ~/code/my-profile/bin/hello Hello, world!
Чтобы избавиться от профиля, нужно удалить символическую ссылку и привязанные к ней элементы, которые указывают на конкретные поколения:
$ rm ~/code/my-profile ~/code/my-profile-*-link
--list-profiles
Перечислить все профили пользователя:
$ guix package --list-profiles /home/charlie/.guix-profile /home/charlie/code/my-profile /home/charlie/code/devel-profile /home/charlie/tmp/test
При запуске от имени root будут перечислены все профили всех пользователей.
--allow-collisions
Разрешить соперничающие пакеты в новом профиле. Используйте на свой собственный страх и риск!
По умолчанию guix package
делает отчёт о противоречиях
collisions в профиле. Противоречия происходят, когда дви или более
разных версии или варианта данного пакета присутсвуют в профиле.
--bootstrap
Использовать бутстрап Guile для сборки профиля. Эта опция полезна только разработчикам дистрибутива.
В дополнение к этим действиям guix package
поддерживает следующие
опции при обращении к текущему состоянию профиля или для проверки
доступности пакетов:
Вывести список пакетов, чьи имена или описания содержат выражение
regexp с учётом регистра, упорядоченные по соответствию. Печать всех
метаданных соответствующих пакетов в формате recutils
(see GNU recutils databases in GNU recutils manual).
Это позволяет извлекать заданые поля, используя команду recsel
,
например:
$ guix package -s malloc | recsel -p name,version,relevance name: jemalloc version: 4.5.0 relevance: 6 name: glibc version: 2.25 relevance: 1 name: libgc version: 7.6.0 relevance: 1
Также для отображения имён всех доступных пакетов под лицензией GNU LGPL версии 3:
$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"' name: elfutils name: gmp …
Также можно уточнить поиск, используя несколько флагов -s
в команде
guix package
или несколько аргументов в guix search
.
Например, следующая команда возвращает список настольных игр (используя
синоним guix search
на этот раз):
$ guix search '\<board\>' game | recsel -p name name: gnubg …
При пропуске -s game
мы получим пакеты программного обеспечения,
которые работают с печатными платами (boards); удалив угловые скобки рядом с
board
, получим пакеты, которые также работают с клавиатурами
(keyboards).
А теперь более запутанный пример. Следующая команда ищет библиотеки криптографии, фильтрует библиотеки Haskel, Perl, Python и Ruby и печатает имена и краткие описания найденных пакетов:
$ guix search crypto library | \ recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
См. See Selection Expressions in GNU recutils manual для
подробной информации о регуларяных выражениях selection expressions
для recsel -e
.
Показать детали пакета package из списка доступных пакетов в формате
recutils
(see GNU recutils databases in GNU recutils
manual).
$ guix package --show=python | recsel -p name,version name: python version: 2.7.6 name: python version: 3.3.5
Можно также указать полное имя пакета, чтобы только получить детали его
определённой версии (в этот раз, используя guix show
псевдоним):
"$ guix show python@3.4 | recsel -p name,version" "name: python" "version: 3.4.3"
Вывести текущий список установленных пакетов в заданном профиле, отобразив самый последний установленный пакет последним. Если задано regexp, будут выведены только пакеты, чьи имена содержат regexp.
Для каждого установленного пакета выводит следующие элементы, разделенные
табуляцией (tab): имя пакета, строка версии, частью какого пакета является
установленный пакет (например, out
вывода по умолчанию включает
include
его заголовки т.д.), а также путь этого пакета на складе.
List packages currently available in the distribution for this system (see Дистрибутив GNU). When regexp is specified, list only available packages whose name matches regexp.
Для каждого пакета выводит следующие элементы, разделённые табуляцией: его имя, строка версии, часть пакета (see Пакеты со множественным выходом), а также расположение его определения в исходниках.
Вывести список поколений (generations) с датами их создания; для каждого поколения отобразить установленные пакеты, самый последний установленный пакет отобразать последним. Отметим, что нулевое поколение никогда не показывается.
Для каждого установленного пакета отображает следующие элементы, разделённые табуляцией: имя пакета, строка версии, частью какого пакета является установленный пакет (see Пакеты со множественным выходом), а также расположение пакета на складе.
Если используется pattern, команда выводит только соответствующие поколения. Правильные паттерны содержат:
Опция --list-generations=1,8,2
выводит три поколения в заданном
пордке. Пробелы и запятые на конце запрещены.
It is also possible to omit the endpoint. For example, --list-generations=2.., returns all generations starting from the second one.
Если pattern пропущен, удалит все поголения, кроме текущего.
This command accepts the same patterns as --list-generations. When pattern is specified, delete the matching generations. When pattern specifies a duration, generations older than the specified duration match. For instance, --delete-generations=1m deletes generations that are more than one month old.
Если текущее поколение попадает под условия паттерна, оно не будет удалено. А также нулевое поокление никогда не удаляется.
Отметим, что удаление поколений делает невозможным откат к ним. Следовательно эта команда должна использоваться внимательно.
Finally, since guix package
may actually start build processes, it
supports all the common build options (see Стандартные параметры сборки). It
also supports package transformation options, such as --with-source
(see Параметры преобразования пакета). However, note that package
transformations are lost when upgrading; to preserve transformations across
upgrades, you should define your own package variant in a Guile module and
add it to GUIX_PACKAGE_PATH
(see Описание пакетов).
Next: Подстановки, Previous: Особенности, Up: Управление пакетами [Contents][Index]