Next: Запуск guix deploy, Previous: Настройка загрузчика, Up: Конфигурирование системы [Contents][Index]
guix deploy
Однажды объявленное описание операционной системы, описанное в предыдущих
разделах, может быть применено с помощью команды guix
system
. Синопсис:
guix system options… action file
file должно быть именем файла, содержащего определение
operating-system
. action указывает, как воспроизводится
операционная система. В настоящее время поддерживаются следующие значения:
search
Показывает доступные определения типов служб, в соответствии с указанным регулярным выражениям, отсортированные по релевантности:
$ guix system search console name: console-fonts location: gnu/services/base.scm:806:2 extends: shepherd-root description: Install the given fonts on the specified ttys (fonts are per + virtual console on GNU/Linux). The value of this service is a list of + tty/font pairs. The font can be the name of a font provided by the `kbd' + package or any valid argument to `setfont', as in this example: + + '(("tty1" . "LatGrkCyr-8x16") + ("tty2" . (file-append + font-tamzen + "/share/kbd/consolefonts/TamzenForPowerline10x20.psf")) + ("tty3" . (file-append + font-terminus + "/share/consolefonts/ter-132n"))) ; for HDPI relevance: 9 name: mingetty location: gnu/services/base.scm:1190:2 extends: shepherd-root description: Provide console login using the `mingetty' program. relevance: 2 name: login location: gnu/services/base.scm:860:2 extends: pam description: Provide a console log-in service as specified by its + configuration value, a `login-configuration' object. relevance: 2 …
Так же как для guix package --search
, результат будет выведен в
recutils
формате, что делает его простым для фильтрации и вывода
(see (GNU recutils manual)recutils).
reconfigure
Собирает операционную систему описанную в file, активирует её и переключается на неё31.
Примечание: Настоятельно рекомендуется запустить команду
guix pull
перед первым запускомguix system reconfigure
(see Запуск guix pull). В противном случае вы можете получить старую версию Guix после завершенияreconfigure
Это действие повлияет на всю конфигурацию, указанную в file: учетные
записи пользователей, системные службы, глобальный список пакетов, программы
setuid и т.д. Команда запустит системные службы, указанные в file,
которые в данный момент не запущены; если служба в данный момент запущена,
изменения вступят в силу при следующем перезапуске (например по herd
stop X
или herd restart X
).
Эта команда создает новое поколение, число которого на единицу больше, чем у
текущего поколения (как описано guix system
list-generations
). Если это поколение уже существует, оно будет
перезаписано. Это поведение описано в guix package
(see Вызов guix package).
Она также добавляет пункты меню загрузчика для новой конфигурации ОС, если не передана опция --no-bootloader. Для GRUB она перемещает записи для более старых конфигураций вподменю, позволяя вам выбрать более старое поколение системы во время загрузки, если вам это понадобится.
По завершении новая система развертывается в /run/current-system. Этот каталог содержит метаданные о происхождении: список используемых каналов (see Каналы) и сам file, если он доступен. Вы можете просмотреть его, запустив:
guix system describe
Эта информация пригодится, если позже вы захотите проверить, как было собрано это конкретное поколение. Фактически, предполагая, что file содержит всё необходимое, вы можете позже пересобрать поколение n в вашей операционной системы с помощью:
guix time-machine \ -C /var/guix/profiles/system-n-link/channels.scm -- \ system reconfigure \ /var/guix/profiles/system-n-link/configuration.scm
Вы можете думать об этом как о чем-то вроде встроенного контроля версий!
Ваша система теперь не просто набор двоичных файлов: она содержит свой
собственный источник. See provenance-service-type
, для получения дополнительной информации об
отслеживании происхождения.
По умолчанию reconfigure
препятствует откату вашей системы,
что может (пере)внести уязвимости безопасности, а также вызвать проблемы со
службами "отслеживающими состояние", такими как системы управления базами
данных. Вы можете переопределить это поведение, передав
--allow-downgrades.
switch-generation
Переключает на существующее поколение системы. Эта команда атомарной операцией переключает системный профиль на указанное поколение системы. Она также изменяет порядок существующих элементов меню загрузчика системы. Она устанавливает в загрузчике запуск по умолчанию указанного поколения и перемещает другие поколения в подменю, если это поддерживается используемым загрузчиком. При следующей загрузке системы она будет использовать указанное поколение системы.
Сам загрузчик не переустанавливается при использовании этой команды. Таким образом, установленный загрузчик используется с обновленным файлом конфигурации.
Нужное поколение может быть явно указано по его номеру. Например, следующий вызов переключится на поколение 7:
guix system switch-generation 7
Нужное поколение также может быть указано относительно текущего поколения
+N
или -N
, где +3
означает "на 3 поколения старше
текущего", а -1
означает "на 1 поколение младше текущего". При
задании отрицательного значения -1
, перед ним нужно поставить
--
чтобы не воспринимать его в качестве опции. Например:
guix system switch-generation -- -1
В настоящее время результатом вызова этого действия является только
переключение профиля на существующее поколение и изменение элементов меню
загрузчика. Чтобы начать использовать указанное поколение, вы должны
перезагрузиться. В будущем поведение будет аналогично reconfigure
,
например, запуск и остановка служб.
Это действие завершится ошибкой, если указанное поколение не существует.
roll-back
Переключает на предыдущее поколение системы. При следующей загрузке система
будет использовать предыдущее. Команда отменяет reconfigure
, и
делает то же самое, что switch-generation
с аргументом -1
.
В настоящее время, как и в случае с switch-generation
, вы должны
перезагрузиться после выполнения этого действия, чтобы фактически начать
использовать предыдущее поколение системы.
delete-generations
Удаляет поколение, делая их кандидатами на для сборщика мусора (see Вызов guix gc, для получения информации о том, как запустить "сборщик мусора").
Работает так же, как и ‘guix package --delete-generations’ (see --delete-generations). Без аргументов удаляются все системные поколения, кроме текущего:
guix system delete-generations
You can also select the generations you want to delete. The example below deletes all the system generations that are more than two months old:
guix system delete-generations 2m
Выполнение этой команды автоматически переустановит загрузчик с обновлением меню—например, подменю "old generations" в GRUB не будет содержать удаленные поколения.
build
Собирает деривацию операционной системы, которая включает в себя все файлы конфигурации и программы, необходимые для загрузки и запуска системы. Это действие на самом деле ничего не устанавливает.
init
Наполняет указанную директорию всем необходимым для запуска операционной системы, указанным в файле. Это полезно при первой установке системы Guix. В качестве примера:
guix system init my-os-config.scm /mnt
копирует в /mnt все элементы хранилища, необходимые для конфигурации, указанной в my-os-config.scm. Включая файлы конфигурации, пакеты и так далее. Он также создает другие важные файлы, необходимые для правильной работы системы, такие как каталоги /etc, /var и /run и файл /bin/sh.
This command also installs bootloader on the targets specified in my-os-config, unless the --no-bootloader option was passed.
vm
Build a virtual machine (VM) that contains the operating system declared in file, and return a script to run that VM.
Примечание: Параметры
vm
и другие, приведенные ниже, могут использовать поддержку KVM ядра Linux-libre. В частности, если машина поддерживает аппаратную виртуализацию,следует загрузить соответствующий модуль ядра KVM а файл устройства /dev/kvm должен существовать и быть доступен для чтения и записи пользователю и процессамсборки демона (see Установка окружения сборки).
Аргументы, переданные скрипту, передаются в QEMU, как в приведенном ниже примере,который включает сеть и запрашивает 1 GiB оперативной памяти для эмулируемоймашины:
$ /gnu/store/…-run-vm.sh -m 1024 -smp 2 -nic user,model=virtio-net-pci
It’s possible to combine the two steps into one:
$ $(guix system vm my-config.scm) -m 1024 -smp 2 -nic user,model=virtio-net-pci
Виртуальная машина использует свое хранилище совместно с хост-системой.
By default, the root file system of the VM is mounted volatile; the
--persistent option can be provided to make it persistent instead.
In that case, the VM disk-image file will be copied from the store to the
TMPDIR
directory to make it writable.
Дополнительные файловые системы могут быть разделены между хостом и виртуальной машиной с помощью параметров --share и --expose: первый указывает директорию, к которой должен быть предоставлен общий доступ с правом на запись, последний обеспечивает доступ только на чтение.
Пример ниже создает виртуальную машину, которой доступна домашняя директория пользователя с правами на чтение, а директория $HOME/tmp хоста размещена в /exchange с правами на чтение и запись:
guix system vm my-config.scm \ --expose=$HOME --share=$HOME/tmp=/exchange
В GNU / Linux по умолчанию загрузка выполняется непосредственно в ядро; это имеет преимущество в том, что требуется только очень крошечный образ корневого диска, так как затем можно смонтировать хранилище хоста.
The --full-boot option forces a complete boot sequence, starting with the bootloader. This requires more disk space since a root image containing at least the kernel, initrd, and bootloader data files must be created.
The --image-size option can be used to specify the size of the image.
The --no-graphic option will instruct guix system
to
spawn a headless VM that will use the invoking tty for IO. Among other
things, this enables copy-pasting, and scrollback. Use the ctrl-a
prefix to issue QEMU commands; e.g. ctrl-a h prints a help,
ctrl-a x quits the VM, and ctrl-a c switches between the QEMU
monitor and the VM.
image
The image
command can produce various image types. The image type
can be selected using the --image-type option. It defaults to
efi-raw
. When its value is iso9660
, the --label
option can be used to specify a volume ID with image
. By default,
the root file system of a disk image is mounted non-volatile; the
--volatile option can be provided to make it volatile instead.
When using image
, the bootloader installed on the generated image is
taken from the provided operating-system
definition. The following
example demonstrates how to generate an image that uses the
grub-efi-bootloader
bootloader and boot it with QEMU:
image=$(guix system image --image-type=qcow2 \ gnu/system/examples/lightweight-desktop.tmpl) cp $image /tmp/my-image.qcow2 chmod +w /tmp/my-image.qcow2 qemu-system-x86_64 -enable-kvm -hda /tmp/my-image.qcow2 -m 1000 \ -bios $(guix build ovmf)/share/firmware/ovmf_x64.bin
When using the efi-raw
image type, a raw disk image is produced; it
can be copied as is to a USB stick, for instance. Assuming /dev/sdc
is the device corresponding to a USB stick, one can copy the image to it
using the following command:
# dd if=$(guix system image my-os.scm) of=/dev/sdc status=progress
The --list-image-types
command lists all the available image types.
When using the qcow2
image type, the returned image is in qcow2
format, which the QEMU emulator can efficiently use. See Запуск Guix на виртуальной машине, for more information on how to run the image in a virtual machine. The
grub-bootloader
bootloader is always used independently of what is
declared in the operating-system
file passed as argument. This is to
make it easier to work with QEMU, which uses the SeaBIOS BIOS by default,
expecting a bootloader to be installed in the Master Boot Record (MBR).
When using the docker
image type, a Docker image is produced. Guix
builds the image from scratch, not from a pre-existing Docker base image.
As a result, it contains exactly what you define in the operating
system configuration file. You can then load the image and launch a Docker
container using commands like the following:
image_id="$(docker load < guix-system-docker-image.tar.gz)" container_id="$(docker create $image_id)" docker start $container_id
This command starts a new Docker container from the specified image. It
will boot the Guix system in the usual manner, which means it will start any
services you have defined in the operating system configuration. You can
get an interactive shell running in the container using docker
exec
:
docker exec -ti $container_id /run/current-system/profile/bin/bash --login
Depending on what you run in the Docker container, it may be necessary to
give the container additional permissions. For example, if you intend to
build software using Guix inside of the Docker container, you may need to
pass the --privileged option to docker create
.
Last, the --network option applies to guix system
docker-image
: it produces an image where network is supposedly shared with
the host, and thus without services like nscd or NetworkManager.
контейнер
Return a script to run the operating system declared in file within a container. Containers are a set of lightweight isolation mechanisms provided by the kernel Linux-libre. Containers are substantially less resource-demanding than full virtual machines since the kernel, shared objects, and other resources can be shared with the host system; this also means they provide thinner isolation.
Currently, the script must be run as root in order to support more than a single user and group. The container shares its store with the host system.
As with the vm
action (see guix system vm), additional file
systems to be shared between the host and container can be specified using
the --share and --expose options:
guix system container my-config.scm \ --expose=$HOME --share=$HOME/tmp=/exchange
Примечание: This option requires Linux-libre 3.19 or newer.
options can contain any of the common build options (see Стандартные параметры сборки). In addition, options can contain one of the following:
Consider the operating-system expr evaluates to. This is an alternative to specifying a file which evaluates to an operating system. This is used to generate the Guix system installer see Сборка установочного образа).
Attempt to build for system instead of the host system type. This
works as per guix build
(see Запуск guix build).
Return the derivation file name of the given operating system without building anything.
As discussed above, guix system init
and guix system
reconfigure
always save provenance information via a dedicated service
(see provenance-service-type
). However, other
commands don’t do that by default. If you wish to, say, create a virtual
machine image that contains provenance information, you can run:
guix system image -t qcow2 --save-provenance config.scm
That way, the resulting image will effectively “embed its own source” in the form of meta-data in /run/current-system. With that information, one can rebuild the image to make sure it really contains what it pretends to contain; or they could use that to derive a variant of the image.
For the image
action, create an image with given type.
When this option is omitted, guix system
uses the efi-raw
image type.
--image-type=iso9660 produces an ISO-9660 image, suitable for burning on CDs and DVDs.
Если задана min, остановиться, когда min байт собрано.
min может быть числом байт или может содержать единицу измерения в
суффиксе, как например, MiB
для мебибайт и GB
гигабайт
(see size specifications in GNU Coreutils).
When this option is omitted, guix system
computes an estimate of
the image size as a function of the size of the system declared in
file.
For the container
action, allow containers to access the host
network, that is, do not create a network namespace.
Make file a symlink to the result, and register it as a garbage collector root.
Skip pre-installation safety checks.
By default, guix system init
and guix system reconfigure
perform safety checks: they make sure the file systems that appear in the
operating-system
declaration actually exist (see Файловые системы),
and that any Linux kernel modules that may be needed at boot time are listed
in initrd-modules
(see Начальный RAM-диск). Passing this option
skips these tests altogether.
Instruct guix system reconfigure
to allow system downgrades.
By default, reconfigure
prevents you from downgrading your
system. It achieves that by comparing the provenance info of your system
(shown by guix system describe
) with that of your guix
command (shown by guix describe
). If the commits for
guix
are not descendants of those used for your system,
guix system reconfigure
errors out. Passing
--allow-downgrades allows you to bypass these checks.
Примечание: Прежде чем использовать --allow-downgrades, убедитесь, что вы понимаете его последствия для безопасности.
Apply strategy when an error occurs when reading file. strategy may be one of the following:
nothing-special
Report the error concisely and exit. This is the default strategy.
backtrace
Likewise, but also display a backtrace.
debug
Report the error and enter Guile’s debugger. From there, you can run
commands such as ,bt
to get a backtrace, ,locals
to display
local variable values, and more generally inspect the state of the program.
See Debug Commands in GNU Guile Reference Manual, for a list of
available debugging commands.
Once you have built, configured, re-configured, and re-re-configured your Guix installation, you may find it useful to list the operating system generations available on disk—and that you can choose from the bootloader boot menu:
describe
Describe the running system generation: its file name, the kernel and bootloader used, etc., as well as provenance information when available.
Примечание: The running system generation—referred to by /run/current-system—is not necessarily the current system generation—referred to by /var/guix/profiles/system: it differs when, for instance, you chose from the bootloader menu to boot an older generation.
It can also differ from the booted system generation—referred to by /run/booted-system—for instance because you reconfigured the system in the meantime.
list-generations
List a summary of each generation of the operating system available on disk,
in a human-readable way. This is similar to the --list-generations
option of guix package
(see Вызов guix package).
Optionally, one can specify a pattern, with the same syntax that is used in
guix package --list-generations
, to restrict the list of
generations displayed. For instance, the following command displays
generations that are up to 10 days old:
$ guix system list-generations 10d
The guix system
command has even more to offer! The following
sub-commands allow you to visualize how your system services relate to each
other:
extension-graph
Emit to standard output the service extension graph of the operating
system defined in file (see Структура сервисов, for more
information on service extensions). By default the output is in
Dot/Graphviz format, but you can choose a different format with
--graph-backend, as with guix graph
(see --backend):
The command:
$ guix system extension-graph file | xdot -
shows the extension relations among services.
shepherd-graph
Emit to standard output the dependency graph of shepherd services of the operating system defined in file. See Сервисы Shepherd, for more information and for an example graph.
Again, the default output format is Dot/Graphviz, but you can pass --graph-backend to select a different one.
Это действие (и связанные с ним
switch-generation
и roll-back
) можно использовать только в
системах, в которых уже работает Guix System.
Next: Запуск guix deploy, Previous: Настройка загрузчика, Up: Конфигурирование системы [Contents][Index]