Руководство Void

2024

Источник: https://docs.voidlinux.org/

перевод В.Айсин

1. О руководстве

Добро пожаловать в Руководство Void! Обязательно прочтите раздел 1.2 Об этом руководстве, чтобы узнать, как эффективно использовать эту документацию. Локальная копия этого руководства в нескольких форматах может быть установлена с помощью пакета void-docs и доступна с помощью утилиты void-docs(1).

Void — это независимый дистрибутив Linux с роллинг-релизом, разработанный с нуля, а не как форк, с упором на стабильность, а не на новейшие разработки. Кроме того, есть несколько особенностей, которые делают Void уникальным:

Void разрабатывается в свободное время горсткой разработчиков и в целом считается достаточно стабильной для ежедневного использования. Мы делаем это ради удовольствия и надеемся, что наша работа будет полезна другим.

Название «Void» происходит от литерала void языка C. Оно выбрано довольно случайно и лишено всякого смысла.

1.1. История

Знания древние, полученные из самих логов Git:

1.2 Об этом руководстве

Это руководство не является обширным руководством по использованию и настройке обычного программного обеспечения Linux. Цель этого документа — объяснить, как устанавливать, настраивать и обслуживать системы Void Linux, а также подчеркнуть различия между распространенными дистрибутивами Linux и Void.

Для поиска определенного термина в Руководстве выберите значок «лупа» или нажмите «s».

Тем, кто ищет советы и рекомендации по настройке системы Linux в целом, следует обратиться к документации по программному обеспечению. Кроме того, Arch Wiki предоставляет довольно полное описание общей конфигурации программного обеспечения Linux, а для получения дополнительной помощи доступны различные поисковые системы в Интернете.

Чтение руководств

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

Чтобы узнать, как использовать программу просмотра man(1), выполните команду man man. Ее можно настроить путем редактирования /etc/man.conf; прочитайте man.conf(5) для подробностей.

Void использует набор инструментов mandoc для страниц руководства. mandoc ранее назывался «mdocml» и предоставляется пакетом mdocml.

Примеры команд

Примеры в этом руководстве могут содержать фрагменты команд, которые можно запустить в вашей оболочке. Когда вы их увидите, любая строка, начинающаяся с $ запускается от имени обычного пользователя. Строки, начинающиеся с # выполняются от имени root. После любой из этих строк может быть приведен пример вывода команды.

Заполнители

Некоторые примеры включают текст с заполнителями (placeholders). Заполнители указывают, куда следует подставить соответствующую информацию. Например:

# ln -s /etc/sv/<service_name> /var/service/

Это означает, что вам необходимо заменить текст <service_name> фактическим именем службы.

1.3. InfraDocs

InfraDocs — это метаруководство по управлению системами проекта Void.

2. Установка

В этом разделе представлена общая информация о процессе установки Void. Конкретные руководства см. в разделе 2.2. Расширенные руководства по установке.

Базовые системные требования

Void можно установить на очень минималистичное оборудование, хотя для большинства установок мы рекомендуем следующий минимум:

Архитектура CPU RAM Хранилище
x86_64-glibc x86_64 96MB 700MB
x86_64-musl x86_64 96MB 600MB
i686-glibc Pentium 4 (SSE2) 96MB 700MB

Обратите внимание, что для установки образа xfce требуется больше ресурсов.

Void недоступен для архитектур i386, i486 и i586.

Перед установкой musl Void прочтите раздел «musl» данного руководства, чтобы знать о несовместимости программного обеспечения.

Настоятельно рекомендуется иметь сетевое подключение во время установки для загрузки обновлений, но это не обязательно. Образы ISO содержат установочные данные на диске и могут быть установлены без подключения к сети.

Загрузка установочного носителя

Самые последние live-образы и архивы rootfs можно загрузить с https://repo-default.voidlinux.org/live/current/. Их также можно скачать с других зеркал. Предыдущие релизы можно найти по адресу https://repo-default.voidlinux.org/live/, упорядоченные по дате.

Проверка образов

Каталог каждого релиза образа содержит два файла, используемые для проверки загружаемых образов. Во-первых, существует файл sha256sum.txt, содержащий контрольные суммы образов для проверки целостности загруженных образов. Во-вторых, это файл sha256sum.sig, используемый для проверки подлинности контрольных сумм.

Необходимо проверить как целостность, так и подлинность образа. Поэтому рекомендуется загрузить оба файла.

Проверка целостности образа

Вы можете проверить целостность загруженного файла с помощью sha256sum(1) с файлом sha256sum.txt, загруженным выше. Следующая команда проверит только целостность загруженных вами образов:

$ sha256sum -c --ignore-missing sha256sum.txt
void-live-x86_64-musl-20170220.iso: OK

Это подтверждает, что образ не поврежден.

Проверка цифровой подписи

Перед использованием любого образа настоятельно рекомендуется проверить подписи образа, чтобы убедиться, что они не были подделаны.

Текущие образы подписываются с помощью ключа minisign, специфичного для конкретной версии. Если вы уже используете Void, вы можете получить ключи из пакета void-release-keys, который будет загружен с использованием существующих доверительных отношений XBPS с вашим зеркалом и подписями пакета. Вам также понадобится копия minisign(1); на Void это предусмотрено пакетом minisign.

Исполняемый файл minisign обычно предоставляется одноименным пакетом, а также может быть установлен в Windows даже без WSL или MinGW.

Если вы в настоящее время не используете Void Linux, вам также необходимо будет получить соответствующий ключ подписи из нашего репозитория Git здесь.

Получив ключ, вы можете проверить свой образ с помощью файлов sha256sum.sig и sha256sum.txt. Во-первых, вам необходимо проверить подлинность файла sha256sum.txt.

В следующем примере демонстрируется проверка файла sha256sum.txt для образов 20230628 с помощью minisign:

$ minisign -V -p /usr/share/void-release-keys/void-release-20230628.pub -x sha256sum.sig -m sha256sum.txt
Signature and comment signature verified
Trusted comment: This key is only valid for images with date 20230628.

Наконец, вам необходимо убедиться, что контрольная сумма вашего образа соответствует сумме в файле sha256sum.txt. Это можно сделать с помощью утилиты sha256(1) из пакета outils, как показано ниже для базового образа x86_64 20230628:

$ sha256 -C sha256sum.txt void-live-x86_64-20230628-base.iso 
(SHA256) void-live-x86_64-20230628-base.iso: OK

Альтернативно, если утилита sha256 вам недоступна, вы можете использовать sha256sum(1):

$ sha256sum -c sha256sum.txt --ignore-missing
void-live-x86_64-20230628-base.iso: OK

Если ни одна из программ вам недоступна, вы можете вычислить хэш SHA256 файла и сравнить его со значением, содержащимся в sha256sum.txt.

Если процесс проверки не дает ожидаемого статуса «ОК», не используйте его! Пожалуйста, сообщите команде Void Linux, где вы получили образ и как вы его проверили, и мы примем меры.

2.1. Live-установщики

Void предоставляет live-образы установщика, содержащие базовый набор утилит, программу установки и файлы пакетов для установки новой системы Void. Эти live-образы также полезны для восстановления системы, которая не может загружаться или работать должным образом.

Есть образы x86_64 для обеих систем, основанных на glibc и musl. Также существуют образы для i686, но для этой архитектуры поддерживаются только glibc. Для других архитектур live-установщики не предусмотрены. Пользователям других архитектур придется использовать архивы rootfs или выполнить установку вручную.

Образы установщика

Void выпускает два типа образов: базовые образы и образы xfce. Новичкам в Linux рекомендуется попробовать один из наиболее полнофункциональных образов xfce, но более опытные пользователи часто предпочитают начать с базового образа, чтобы установить только те пакеты, которые им нужны.

Базовые образы

Базовые образы предоставляют лишь минимальный набор пакетов для установки работоспособной системы Void. Эти базовые пакеты необходимы только для настройки новой машины, обновления системы и установки дополнительных пакетов из репозиториев.

Образ xfce

Образ xfce включает полную среду рабочего стола, веб-браузер и базовые приложения, настроенные для этой среды. Единственное отличие от базовых образов — установленные дополнительные пакеты и сервисы.

В комплект входит следующее программное обеспечение:

Процесс установки образа xfce такой же, как и для базовых образов, за исключением того, что при установке необходимо выбрать источник Local. Если вместо этого вы выберете Network, установщик загрузит и установит последнюю версию базовой системы без каких-либо дополнительных пакетов, включенных в рабочий образ.

Поддержка специальных возможностей

Все образы установщика Void поддерживают программу чтения с экрана консоли espeakup и драйвер дисплея консоли Брайля brltty. Эти службы можно включить при загрузке, нажав s в меню загрузчика, чтобы включить поддержку специальных возможностей. В системах на базе UEFI загрузчиком является GRUB, который издает двухтональный звуковой сигнал, когда меню доступно. В системах на базе BIOS и системах UEFI в режиме legacy/совместимости загрузчиком является SYSLINUX, и звуковой сигнал не воспроизводится. SYSLINUX также требует нажатия клавиши ввода после нажатия s. Горячая клавиша r также позволит загружаться с поддержкой специальных возможностей, но загрузит live-ISO в ОЗУ.

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

Если в установщике выбран источник установки Local, espeakup и brltty также будут установлены и включены в установленной системе, если они включены в рабочей среде.

Образ xfce также поддерживает графическую программу чтения с экрана orca. Ее можно включить, нажав Win + R и введя orca -r. Orca также будет доступна в установленной системе, если выбран источник установки Local.

Параметры командной строки ядра

Образы установщика Void поддерживают несколько аргументов командной строки ядра, которые могут изменить поведение работающей системы. Полный список см. в README void-mklive.

2.1.1. Подготовка установочного носителя

После загрузки live-образа его необходимо записать на загрузочный носитель, например USB-накопитель, SD-карту или CD/DVD.

Создание загрузочного USB-накопителя или SD-карты в Linux

Определение устройства

Прежде чем записать образ, определите устройство, на которое вы его запишете. Вы можете сделать это с помощью fdisk(8). После подключения устройства хранения определите путь к устройству, выполнив:

# fdisk -l
Disk /dev/sda: 7.5 GiB, 8036286464 bytes, 15695872 sectors
Disk model: Your USB Device's Model
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

В приведенном выше примере выходные данные показывают устройство USB как /dev/sda. В Linux путь к устройству обычно имеет форму /dev/sdX (где X — буква) для USB-устройств, /dev/mmcblkX для SD-карт или другие варианты в зависимости от устройства. Вы можете использовать модель и размер (в примере выше 7.5GiB после пути) для идентификации устройства, если вы не уверены, какой путь у него будет.

После того, как вы определили устройство, которое будете использовать, убедитесь, что оно не смонтировано, отключив его с помощью umount(8):

# umount /dev/sdX
umount: /dev/sdX: not mounted.
Запись live-образа

Команда dd(1) может использоваться для копирования live-образа на устройство хранения. Используя dd, запишите live-образ на устройство:

Внимание: это приведет к уничтожению всех данных, находящихся в данный момент на указанном устройстве. Соблюдайте осторожность.

# dd bs=4M if=/path/to/void-live-ARCH-DATE-VARIANT.iso of=/dev/sdX
90+0 records in
90+0 records out
377487360 bytes (377 MB, 360 MiB) copied, 0.461442 s, 818 MB/s

dd не будет ничего отображать до завершения (или если случится сбой), поэтому, в зависимости от устройства, это может занять несколько минут или больше. Вы можете включить вывод, добавив status=progress к команде, если используете GNU coreutils dd.

Наконец, убедитесь, что все данные записаны, прежде чем отключать устройство:

$ sync

Количество записей, скопированный объем и скорость будут различаться в зависимости от устройства и выбранного вами live-образа.

Запись на CD или DVD

Любое приложение для записи дисков должно иметь возможность записи файла .iso на CD или DVD. Доступны следующие бесплатные приложения (межплатформенная поддержка может различаться):

Следует отметить, что при использовании CD или DVD live-сеансы будут менее отзывчивыми, чем при использовании USB-накопителя или жесткого диска.

2.1.2. Примечания к разбиению на разделы

Разбиение на разделы в современном дистрибутиве Linux, как правило, очень просто, однако введение загрузки GPT и UEFI усложняет этот процесс. При создании новой таблицы разделов вам понадобится раздел для корневой файловой системы, а также раздел подкачки и, возможно, еще один или два раздела для облегчения загрузки, если это необходимо.

Обратите внимание: если диск уже был инициализирован, в верхней части экрана cfdisk будет отображаться уже существующая структура разделов: Label: dos для схемы MBR, Label: gpt для схемы GPT. Если вы просто хотите стереть таблицу разделов перед запуском установщика, используйте wipefs(8). В противном случае вы можете запустить cfdisk(8) вручную с опцией запуска -z с неинициализированной разметкой диска; cfdisk прежде чем перейти на главный экран, предложит вам указать тип метки.

В следующих разделах подробно описаны параметры конфигурации разделов.

Примечания к системе BIOS

Рекомендуется создать таблицу разделов MBR, если вы используете систему загрузки BIOS. Это ограничит количество создаваемых вами разделов до четырех.

В системе BIOS можно использовать таблицу разделов GPT, но для правильной загрузки GRUB потребуется специальный раздел. Этот раздел должен находиться в начале вашего диска, иметь размер 1 МБ и тип BIOS boot (GUID 21686148-6449-6E6F-744E-656564454649). Не создавайте в нем файловую систему. После этого GRUB должен успешно установиться.

Примечания к системе UEFI

Пользователям UEFI рекомендуется создать таблицу разделов GPT. Для загрузки UEFI с помощью GRUB также требуется специальный раздел типа EFI System с файловой системой vfat, смонтированной по адресу /boot/efi. Разумный размер этого раздела может составлять от 200 МБ до 1 ГБ. При такой настройке раздела во время установки live-образа установщик должен успешно настроить загрузчик автоматически.

Разделы подкачки

Раздел подкачки не является строго обязательным, но рекомендуется для систем с небольшим объемом оперативной памяти. Если вы хотите использовать спящий режим, вам понадобится раздел подкачки. В следующей таблице приведены рекомендации по размеру раздела подкачки.

Системная оперативная память Рекомендуемое пространство подкачки Место подкачки при использовании гибернации
< 2 ГБ В 2 раза больше оперативной памяти В 3 раза больше оперативной памяти
2-8 ГБ Равен объему оперативной памяти В 2 раза больше оперативной памяти
8-64 ГБ Минимум 4 ГБ В 1,5 раза больше оперативной памяти
64 ГБ Минимум 4 ГБ Гибернация не рекомендуется

Загрузочный раздел (опционально)

В большинстве современных систем для правильной загрузки отдельный раздел /boot больше не требуется. Если вы решите использовать его, обратите внимание, что Void не удаляет старые ядра после обновлений по умолчанию, а также, что ядро имеет тенденцию увеличиваться в размере с каждой новой версией, поэтому планируйте соответствующим образом (например, /boot с одним ядром Linux 5.x x86_64 и GRUB занимает около 60 МБ).

Другие разделы

Можно установить систему только с большим корневым разделом, но при желании вы можете создать и другие разделы. Одним из полезных дополнений может стать отдельный раздел для вашего каталога /home. Таким образом, если вам нужно переустановить Void (или другой дистрибутив), вы сможете сохранить файлы данных и конфигурации в своем домашнем каталоге для своей новой системы.

2.1.3. Инструкция по установке

После того, как вы загрузили образ Void для установки и подготовили установочный носитель, вы готовы к установке Void Linux.

Прежде чем приступить к установке, вам следует определить, загружается ли ваш компьютер с помощью BIOS или UEFI. Это повлияет на то, как вы планируете разбиение на разделы. Дополнительные сведения см. в разделе 2.1.2 Примечания к разбиению на разделы.

Следующие функции не поддерживаются сценарием установки:

Загрузка

Загрузите компьютер с созданного вами установочного носителя. Если у вас достаточно оперативной памяти, на экране загрузки есть возможность загрузить весь образ в оперативную память, что займет некоторое время, но ускорит остальную часть процесса установки.

После загрузки live-образа войдите в систему как root с паролем voidlinux и запустите:

# void-installer

В следующих разделах подробно описывается каждый экран установщика.

Keyboard

Выберите раскладку клавиатуры для вашей клавиатуры; стандартные клавиатуры «qwerty» обычно используют раскладку «us».

Network

Выберите основной сетевой интерфейс. Если вы решите не использовать DHCP, вам будет предложено указать IP-адрес, шлюз и DNS-серверы.

Если вы выберете интерфейс беспроводной сети, вам будет предложено указать SSID, тип шифрования (wpa или wep) и пароль. Если void-installer не удается подключиться к сети, возможно, вам придется выйти из установщика и настроить его вручную с помощью wpa_supplicant и dhcpcd, прежде чем продолжить.

Source

Чтобы установить пакеты, представленные в установочном образе, выберите Local. В противном случае вы можете выбрать Network для загрузки последних пакетов из репозитория Void.

Предупреждение: Если вы устанавливаете среду рабочего стола из образа xfce, вы ДОЛЖНЫ выбрать источник Local!

Hostname

Выберите имя хоста для вашего компьютера (все строчные буквы, без пробелов).

Locale

Выберите настройки локали по умолчанию. Эта опция предназначена только для glibc, поскольку musl в настоящее время не поддерживает локали.

Timezone

Выберите часовой пояс на основе стандартных параметров часового пояса.

Пароль root

Введите и подтвердите свой пароль root для новой установки. Пароль не будет отображаться на экране.

User account

Выберите логин (по умолчанию void) и описательное имя для этого логина. Затем введите и подтвердите пароль нового пользователя. Затем вам будет предложено проверить группы для этого нового пользователя. По умолчанию новые пользователи добавляются в группу wheel и получают доступ sudo. Здесь перечислены группы по умолчанию и их описания.

Имена для входа имеют некоторые ограничения, как описано в useradd(8).

Bootloader

Выберите диск для установки загрузчика при установке Void. Вы можете выбрать none для пропуска этого шага и установки загрузчика вручную после завершения процесса установки. При установке загрузчика вас также спросят, нужен ли вам графический терминал для меню GRUB.

Partition

Далее вам нужно будет разбить диски на разделы. Void не предоставляет предустановленную схему разделов, поэтому вам придется создавать разделы вручную с помощью cfdisk(8). Вам будет предложен список дисков. Выберите диск, который вы хотите разбить на разделы, и для этого диска запустится установщик cfdisk. Помните, что вы должны записать таблицу разделов на диск перед выходом из редактора разделов.

При использовании UEFI рекомендуется выбрать GPT для таблицы разделов и создать раздел (обычно размером от 200 МБ до 1 ГБ) типа EFI System, который будет смонтирован по адресу /boot/efi.

При использовании BIOS рекомендуется выбрать MBR для таблицы разделов. Опытные пользователи могут использовать GPT, но им потребуется создать специальный раздел BIOS для загрузки GRUB.

Дополнительные сведения о разбиении диска см. в разделе 2.1.2 Примечания к разбиению на разделы.

Filesystems

Создайте файловые системы для каждого созданного вами раздела. Для каждого раздела вам будет предложено выбрать тип файловой системы, хотите ли вы создать новую файловую систему в разделе, и точку монтирования, если применимо. Когда вы закончите, выберите Done, чтобы вернуться в главное меню.

Если вы используете UEFI, создайте файловую систему vfat и смонтируйте ее в /boot/efi.

Просмотр настроек

Прежде чем продолжить, рекомендуется просмотреть настройки. С помощью клавиши со стрелкой вправо выберите кнопку настроек и нажмите Enter. Все выбранные вами варианты будут показаны для просмотра.

Установка

Выбор Install из меню запустит установщик. Программа установки создаст все выбранные файловые системы и установит пакеты базовой системы. Затем она сгенерирует initramfs и установит загрузчик GRUB2 в загрузочный раздел.

Все эти шаги будут выполняться автоматически, и после успешного завершения установки вы сможете перезагрузиться в новую установку Void Linux!

После установки

После первой загрузки установки Void выполните обновление системы.

2.2. Расширенные руководства по установке

В этом разделе содержатся руководства для более конкретных и сложных случаев использования.

Содержание раздела

2.2.1 Установка через chroot (x86/x86_64/aarch64)

В этом руководстве подробно описан процесс установки Void вручную через chroot на архитектуре x86, x86_64 или aarch64. Предполагается, что вы знакомы с Linux, но не обязательно умеете устанавливать систему Linux через chroot. Это руководство можно использовать для создания «типичной» установки с использованием одного раздела на одном диске SATA/IDE/USB. Каждый шаг может быть изменен для создания менее типичных настроек, таких как полное шифрование диска.

Void предоставляет два варианта начальной загрузки новой установки. Метод XBPS использует менеджер пакетов XBPS, работающий в операционной системе хоста, для установки базовой системы. Метод ROOTFS устанавливает базовую систему путем распаковки архива ROOTFS.

Для метода XBPS требуется, чтобы в операционной системе хоста был установлен XBPS. Это может быть существующая установка Void, официальный live-образ или любая установка Linux, на которой работает статически связанный XBPS.

Для метода ROOTFS требуется только операционная система хоста, которая может входить в chroot Linux и в которой установлены как tar(1), так и xz(1). Этот метод может быть предпочтительнее, если вы хотите установить Void, используя другой дистрибутив Linux.

Подготовка файловых систем

Разбейте свои диски на разделы и отформатируйте их с помощью mke2fs(8), mkfs.xfs(8), mkfs.btrfs(8) или любых других инструментов, необходимых для выбранной вами файловой системы.

mkfs.vfat(8) также доступен для создания разделов FAT32. Однако из-за ограничений, связанных с файловыми системами FAT, ее следует использовать только в том случае, если никакая другая файловая система не подходит (например, для системного раздела EFI).

cfdisk(8) и fdisk(8) доступны в live-образах для разбиения на разделы, но вместо этого вы можете использовать gdisk(8) (из пакета gptfdisk) или parted(8).

Для системы загрузки UEFI обязательно создайте системный раздел EFI (ESP). ESP должен иметь тип раздела «EFI System» (код EF00) и быть отформатирован как FAT32 с помощью mkfs.vfat(8).

Если вы не уверены, какие разделы создавать, создайте раздел размером 1 ГБ типа «EFI System» (код EF00), затем создайте второй раздел типа «Linux Filesystem» (код 8300), используя оставшуюся часть диска.

Отформатируйте эти разделы как FAT32 и ext4 соответственно:

# mkfs.vfat /dev/sda1
# mkfs.ext4 /dev/sda2
Создание нового корня и монтирование файловых систем

В этом руководстве предполагается, что новая корневая файловая система смонтирована на /mnt. Возможно, вы захотите установить ее в другом месте.

При использовании UEFI смонтируйте системный раздел EFI как /mnt/boot/efi.

Например, если /dev/sda2 должен быть смонтирован как /, то /dev/sda1 — это системный раздел EFI:

# mount /dev/sda2 /mnt/
# mkdir -p /mnt/boot/efi/
# mount /dev/sda1 /mnt/boot/efi/

При необходимости инициализируйте пространство подкачки с помощью mkswap(8).

Базовая установка

Следуйте только одному из двух следующих подразделов.

Если на aarch64, то помимо base-system необходимо будет установить пакет ядра. Например, linux — это пакет ядра, который указывает на последнее стабильное ядро, упакованное Void.

Метод XBPS

Выберите зеркало и используйте соответствующий URL-адрес для типа системы, которую вы хотите установить. Для простоты сохраните этот URL-адрес в переменной оболочки. Установка glibc, например, будет использовать:

# REPO=https://repo-default.voidlinux.org/current

XBPS также необходимо знать, какая архитектура устанавливается. Доступные варианты: x86_64, x86_64-musl, i686 для компьютеров с архитектурой PC и aarch64. Например:

# ARCH=x86_64

Эта архитектура должна быть совместима с вашей текущей операционной системой, но не обязательно должна быть одинаковой. Если на вашем хосте установлена операционная система x86_64, можно установить любую из трех архитектур (независимо от того, является ли хост musl или glibc), но хост i686 может устанавливать только дистрибутивы i686.

Скопируйте ключи RSA с установочного носителя в целевой корневой каталог:

# mkdir -p /mnt/var/db/xbps/keys
# cp /var/db/xbps/keys/* /mnt/var/db/xbps/keys/

Используйте xbps-install(1) для начальной загрузки установки путем установки метапакета base-system:

# XBPS_ARCH=$ARCH xbps-install -S -r /mnt -R "$REPO" base-system
Метод ROOTFS

Загрузите архив ROOTFS, соответствующий вашей архитектуре.

Распакуйте архив во вновь настроенные файловые системы:

# tar xvf void-<...>-ROOTFS.tar.xz -C /mnt

Конфигурация

За исключением раздела «Установка базовой системы (только метод ROOTFS)», остальная часть этого руководства является общей для методов установки XBPS и ROOTFS.

Вход в Chroot

xchroot(1) (из xtools) можно использовать для настройки и входа в chroot. Альтернативно это можно сделать вручную.

# xchroot /mnt /bin/bash
Установка базовой системы (только метод ROOTFS)

Образы ROOTFS обычно содержат устаревшее программное обеспечение, поскольку они являются моментальными снимками того времени, когда они были созданы, и не имеют полного файла base-system. Обновите менеджер пакетов и установите base-system:

[xchroot /mnt] # xbps-install -Su xbps
[xchroot /mnt] # xbps-install -u
[xchroot /mnt] # xbps-install base-system
[xchroot /mnt] # xbps-remove base-voidstrap
Конфигурация установки

Укажите имя хоста в формате /etc/hostname. Просмотрите параметры в /etc/rc.conf. При установке дистрибутива glibc отредактируйте /etc/default/libc-locales, раскомментировав нужные локали.

nvi(1) доступен в chroot, но вы можете сейчас установить предпочитаемый вами текстовый редактор.

Для сборок glibc сгенерируйте файлы локали с помощью:

[xchroot /mnt] # xbps-reconfigure -f glibc-locales
Установка пароля root

Настройте хотя бы одну учетную запись суперпользователя. Другие учетные записи пользователей можно настроить позже, но должен быть либо пароль root, либо новая учетная запись пользователя с привилегиями sudo(8).

Чтобы установить пароль root, выполните:

[xchroot /mnt] # passwd
Настройка fstab

Файл fstab(5) может быть автоматически сгенерирован из подключенных в данный момент файловых систем путем копирования файла /proc/mounts:

[xchroot /mnt] # cp /proc/mounts /etc/fstab

Удалите строки в /etc/fstab, относящиеся к proc, sys, devtmpfs и pts.

Замените ссылки на /dev/sdXX, /dev/nvmeXnYpZ и т. д. соответствующими UUID, которые можно найти, запустив blkid(8). Обращение к файловым системам по их UUID гарантирует, что они будут найдены, даже если позже им будет присвоено другое имя. В некоторых ситуациях, например при загрузке с USB, это абсолютно необходимо. В других ситуациях диски всегда будут иметь одно и то же имя, если только диски не добавляются или не удаляются физически. Поэтому этот шаг может и не быть строго необходимым, но почти всегда рекомендуется.

Измените последний ноль записи на / на 1 и последний ноль всех других строк на 2. Эти значения настраивают поведение fsck(8).

Например, схема разделов, использованная в предыдущих примерах, дает следующий fstab:

/dev/sda1       /boot/efi   vfat    rw,relatime,[...]       0 0
/dev/sda2       /           ext4    rw,relatime             0 0

Информация из blkid результатов следующая /etc/fstab:

UUID=6914[...]  /boot/efi   vfat    rw,relatime,[...]       0 2
UUID=dc1b[...]  /           ext4    rw,relatime             0 1

Примечание: В выводе /proc/mounts между каждым полем будет один пробел. Столбцы здесь выровнены для удобства чтения.

Добавьте запись для монтирования /tmp в ОЗУ:

tmpfs           /tmp        tmpfs   defaults,nosuid,nodev   0 0

Если вы используете пространство подкачки, добавьте запись для всех разделов подкачки:

UUID=1cb4[...]  swap        swap    rw,noatime,discard      0 0
Включение служб

Службы можно включить после загрузки новой системы, но вам может потребоваться включить некоторые из них (например: dhcpcd, sshd) сейчас, чтобы получить к ним доступ.

Установка GRUB

Используйте grub-install для установки GRUB на загрузочный диск.

На компьютере с BIOS установите пакет grub, затем запустите grub-install /dev/sdX, где /dev/sdX — это диск (не раздел), на который вы хотите установить GRUB. Например:

[xchroot /mnt] # xbps-install grub
[xchroot /mnt] # grub-install /dev/sda

На компьютере с UEFI установите grub-x86_64-efi, grub-i386-efi или grub-arm64-efi, в зависимости от вашей архитектуры, затем запустите grub-install, при необходимости указав метку загрузчика (эта метка может использоваться прошивкой вашего компьютера при выборе загрузочного устройства вручную):

[xchroot /mnt] # xbps-install grub-x86_64-efi
[xchroot /mnt] # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id="Void"
Устранение неполадок при установке GRUB

Возможно, потребуется смонтировать файловую систему efivarfs.

[xchroot /mnt] # mount -t efivarfs none /sys/firmware/efi/efivars

Если переменные EFI по-прежнему недоступны, добавьте параметр --no-nvram в команду grub-install.

Установка на съемный носитель или несовместимые с UEFI системы

К сожалению, не все системы имеют реализацию UEFI, полностью соответствующую стандартам. В некоторых случаях необходимо «обмануть» прошивку для загрузки, используя резервное местоположение по умолчанию для загрузчика вместо пользовательского. В этом случае или при установке на съемный диск (например, USB) добавьте параметр --removable в команду grub-install.

Альтернативно, используйте mkdir(1) для создания каталога /boot/efi/EFI/boot и скопируйте установленный исполняемый файл GRUB, обычно расположенный в /boot/efi/EFI/Void/grubx64.efi (его местоположение можно найти с помощью efibootmgr(8)), в новую папку:

[xchroot /mnt] # mkdir -p /boot/efi/EFI/boot
[xchroot /mnt] # cp /boot/efi/EFI/Void/grubx64.efi /boot/efi/EFI/boot/bootx64.efi

Завершение

Используйте xbps-reconfigure(1), чтобы убедиться, что все установленные пакеты настроены правильно:

[xchroot /mnt] # xbps-reconfigure -fa

Это заставит dracut(8) сгенерировать initramfs, а GRUB сгенерирует рабочую конфигурацию.

На этом установка завершена. Выйдите из chroot и перезагрузите компьютер:

[xchroot /mnt] # exit
# umount -R /mnt
# shutdown -r now

После первой загрузки установки Void выполните обновление системы.

2.2.2 Полное шифрование диска

Предупреждение: Блочное устройство вашего накопителя и другая информация могут отличаться, поэтому убедитесь, что они верны.

Разбиение

Загрузите live-образ и войдите в систему.

Создайте на диске один физический раздел с помощью cfdisk, пометив его как загрузочный. Для системы MBR структура разделов должна выглядеть следующим образом.

# fdisk -l /dev/sda
Disk /dev/sda: 48 GiB, 51539607552 bytes, 100663296 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x4d532059

Device     Boot Start       End   Sectors Size Id Type
/dev/sda1  *     2048 100663295 100661248  48G 83 Linux

Системам UEFI потребуется, чтобы на диске была метка диска GPT и системный раздел EFI. Требуемый для этого размер может варьироваться в зависимости от потребностей, но в большинстве случаев 100 МБ должно быть достаточно. Для системы EFI структура разделов должна выглядеть следующим образом.

# fdisk -l /dev/sda
Disk /dev/sda: 48 GiB, 51539607552 bytes, 100663296 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EE4F2A1A-8E7F-48CA-B3D0-BD7A01F6D8A0

Device      Start       End   Sectors  Size Type
/dev/sda1    2048    264191    262144  128M EFI System
/dev/sda2  264192 100663262 100399071 47.9G Linux filesystem

Конфигурация зашифрованного тома

По умолчанию в Cryptsetup используется LUKS2, однако версии GRUB до 2.06 поддерживали только LUKS1.

LUKS2 поддерживается GRUB лишь частично; в частности, реализована только функция получения ключа PBKDF2, которая не является KDF по умолчанию, используемым с LUKS2, а именно Argon2i (GRUB Bug 59409). Разделы, зашифрованные LUKS с помощью Argon2i (как и других KDF), невозможно расшифровать. По этой причине в этом руководстве рекомендуется использовать только LUKS1.

Имейте в виду, что зашифрованный том в системах EFI будет /dev/sda2, поскольку /dev/sda1 занят разделом EFI.

# cryptsetup luksFormat --type luks1 /dev/sda1

WARNING!
========
This will overwrite data on /dev/sda1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase:
Verify passphrase:

После создания тома его необходимо открыть. Замените voidvm соответствующим именем. Опять же, в системах EFI это будет /dev/sda2.

# cryptsetup luksOpen /dev/sda1 voidvm
Enter passphrase for /dev/sda1:

После открытия контейнера LUKS создайте группу томов LVM, используя этот раздел.

# vgcreate voidvm /dev/mapper/voidvm
  Volume group "voidvm" successfully created

Теперь должна появиться пустая группа томов с именем voidvm.

Далее для группы томов необходимо создать логические тома. Для этого примера я выбрал 10G для /, 2G для swap, а остальное назначу /home.

# lvcreate --name root -L 10G voidvm
  Logical volume "root" created.
# lvcreate --name swap -L 2G voidvm
  Logical volume "swap" created.
# lvcreate --name home -l 100%FREE voidvm
  Logical volume "home" created.

Далее создайте файловые системы. В приведенном ниже примере XFS используется по личному предпочтению автора. Любая файловая система, поддерживаемая GRUB, будет работать.

# mkfs.xfs -L root /dev/voidvm/root
meta-data=/dev/voidvm/root       isize=512    agcount=4, agsize=655360 blks
...
# mkfs.xfs -L home /dev/voidvm/home
meta-data=/dev/voidvm/home       isize=512    agcount=4, agsize=2359040 blks
...
# mkswap /dev/voidvm/swap
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)

Установка системы

Затем настройте chroot и установите базовую систему.

# mount /dev/voidvm/root /mnt
# mkdir -p /mnt/home
# mount /dev/voidvm/home /mnt/home

В системе UEFI также необходимо смонтировать системный раздел EFI.

# mkfs.vfat /dev/sda1
# mkdir -p /mnt/boot/efi
# mount /dev/sda1 /mnt/boot/efi

Скопируйте ключи RSA с установочного носителя в целевой корневой каталог:

# mkdir -p /mnt/var/db/xbps/keys
# cp /var/db/xbps/keys/* /mnt/var/db/xbps/keys/

Прежде чем войти в chroot для завершения настройки, мы выполняем фактическую установку. Не забудьте использовать соответствующий URL-адрес репозитория для типа системы, которую вы хотите установить.

# xbps-install -Sy -R https://repo-default.voidlinux.org/current -r /mnt base-system lvm2 cryptsetup grub
[*] Updating `https://repo-default.voidlinux.org/current/x86_64-repodata' ...
x86_64-repodata: 1661KB [avg rate: 2257KB/s]
130 packages will be downloaded:
...

В системах UEFI будет немного другой выбор пакетов. Команда установки для системы UEFI будет следующей.

# xbps-install -Sy -R https://repo-default.voidlinux.org/current -r /mnt base-system cryptsetup grub-x86_64-efi lvm2

Когда это будет сделано, мы можем войти в chroot с помощью xchroot(1) (из xtools) и завершить настройку. Альтернативно вход в chroot можно выполнить вручную.

# xchroot /mnt
[xchroot /mnt] # chown root:root /
[xchroot /mnt] # chmod 755 /
[xchroot /mnt] # passwd root
[xchroot /mnt] # echo voidvm > /etc/hostname

и, только для систем glibc:

[xchroot /mnt] # echo "LANG=en_US.UTF-8" > /etc/locale.conf
[xchroot /mnt] # echo "en_US.UTF-8 UTF-8" >> /etc/default/libc-locales
[xchroot /mnt] # xbps-reconfigure -f glibc-locales
Конфигурация файловой системы

Следующий шаг — редактирование /etc/fstab, которое будет зависеть от того, как вы настроили и назвали свои файловые системы. В этом примере файл должен выглядеть так:

# <file system>   <dir> <type>  <options>             <dump>  <pass>
tmpfs             /tmp  tmpfs   defaults,nosuid,nodev 0       0
/dev/voidvm/root  /     xfs     defaults              0       0
/dev/voidvm/home  /home xfs     defaults              0       0
/dev/voidvm/swap  swap  swap    defaults              0       0

В системах UEFI также будет запись для системного раздела EFI.

/dev/sda1  /boot/efi vfat  defaults  0 0
Конфигурация GRUB

Затем настройте GRUB, чтобы иметь возможность разблокировать файловую систему. Добавьте следующую строку в /etc/default/grub:

GRUB_ENABLE_CRYPTODISK=y

Далее необходимо настроить ядро для поиска зашифрованного устройства. Сначала найдите UUID устройства.

[xchroot /mnt] # blkid -o value -s UUID /dev/sda1
135f3c06-26a0-437f-a05e-287b036440a4

Отредактируйте строку GRUB_CMDLINE_LINUX_DEFAULT= в /etc/default/grub и добавьте rd.lvm.vg=voidvm rd.luks.uuid=<UUID> к ней. Убедитесь, что UUID соответствует идентификатору устройства sda1, найденному в выводе команды blkid(8) выше. В системах EFI это будет /dev/sda2.

Настройка ключа LUKS

И теперь, чтобы избежать необходимости дважды вводить пароль при загрузке, будет настроен ключ для автоматической разблокировки зашифрованного тома при загрузке. Сначала сгенерируйте случайный ключ.

[xchroot /mnt] # dd bs=1 count=64 if=/dev/urandom of=/boot/volume.key
64+0 records in
64+0 records out
64 bytes copied, 0.000662757 s, 96.6 kB/s

Затем добавьте ключ к зашифрованному тому.

[xchroot /mnt] # cryptsetup luksAddKey /dev/sda1 /boot/volume.key
Enter any existing passphrase:

Измените разрешения, чтобы защитить сгенерированный ключ.

[xchroot /mnt] # chmod 000 /boot/volume.key
[xchroot /mnt] # chmod -R g-rwx,o-rwx /boot

Этот файл ключа также необходимо добавить в /etc/crypttab. Опять же, в системах EFI это будет /dev/sda2.

voidvm   /dev/sda1   /boot/volume.key   luks

И тогда файл ключа и crypttab нужно включить в initramfs. Создайте новый файл /etc/dracut.conf.d/10-crypt.conf со следующей строкой:

install_items+=" /boot/volume.key /etc/crypttab "

Завершение установки системы

Далее устанавливаем загрузчик на диск.

[xchroot /mnt] # grub-install /dev/sda

Убедитесь, что initramfs создан:

[xchroot /mnt] # xbps-reconfigure -fa

Выйдите из системы chroot, отключите файловые системы и перезагрузите систему.

[xchroot /mnt] # exit
# umount -R /mnt
# reboot

2.2.3. Установка Void в корень ZFS

Поскольку установщик Void не поддерживает ZFS, его необходимо устанавливать через chroot. За исключением нескольких предостережений относительно поддержки загрузчика и initramfs, установка Void в корневую файловую систему ZFS существенно не отличается от любой другой расширенной установки. ZFSBootMenu — это загрузчик, разработанный с нуля для поддержки загрузки дистрибутивов Linux непосредственно из пула ZFS. Однако также можно использовать традиционные загрузчики с корнем ZFS.

ZFSBootМеню

Хотя ZFSBootMenu загружает (и может запускать поверх) самые разные дистрибутивы, официально он считает Void первоклассным дистрибутивом. ZFSBootMenu поддерживает собственное шифрование ZFS, предлагает удобную среду восстановления, которую можно использовать для клонирования предыдущих снимков или выполнения расширенных манипуляций в среде перед загрузкой, а также поддерживает загрузку из любого пула, который можно импортировать современными драйверами ZFS. Документация ZFSBootMenu, помимо прочего, предлагает несколько пошаговых руководств по установке системы Void с нуля. Руководство UEFI описывает процедуру начальной загрузки системы Void для современных систем. Для устаревших систем BIOS руководство syslinux предоставляет аналогичные инструкции.

Традиционные загрузчики

Те, кто хочет отказаться от ZFSBootMenu, могут загрузить систему Void с помощью другого загрузчика. Чтобы избежать ненужной сложности, системы, использующие загрузчики, отличные от ZFSBootMenu, должны планировать использование отдельного загрузчика /boot, расположенного в файловой системе ext4 или xfs.

Установочный носитель

Для установки Void в корень ZFS требуется установочный носитель с драйверами ZFS. Можно создать собственный образ из официального репозитория void-mklive, указав параметр командной строки -p zfs для сценария mklive.sh. Однако для систем x86_64 может быть удобнее получить предварительно созданный образ hrmpf. Эти образы, поддерживаемые членом команды Void, представляют собой расширения стандартных live-образов Void, которые включают в себя предварительно скомпилированные модули ZFS в дополнение к другим полезным инструментам.

Разбиение дисков

После загрузки live-образа с поддержкой ZFS разбейте диски на разделы. Соображения, изложенные в руководстве по разбиению на разделы, применимы и к установкам ZFS, за исключением того, что

При необходимости отформатируйте системный раздел EFI с помощью mkfs.vfat(8) и загрузочный раздел с помощью mke2fs(8) или mkfs.xfs(8). Инициализируйте любое пространство подкачки с помощью mkswap(8).

Можно разместить пространство подкачки Linux на zvol ZFS, хотя может возникнуть риск блокировки ядра при высокой нехватке памяти. Это руководство не занимает никакой позиции по вопросу пространства подкачки на zvol. Однако, если вы хотите использовать приостановку на диск (гибернацию), обратите внимание, что ядро не способно возобновлять работу с образов памяти, хранящихся на zvol. Для использования спящего режима вам понадобится выделенный раздел подкачки. Помимо этого предостережения, для возобновления приостановленного образа при использовании корня ZFS не требуется никаких особых условий.

Создание пула ZFS

Создайте пул ZFS в созданном для него разделе с помощью zpool(8). Например, чтобы создать пул на /dev/disk/by-id/wwn-0x5000c500deadbeef-part3:

# zpool create -f -o ashift=12 \
    -O compression=lz4 \
    -O acltype=posixacl \
    -O xattr=sa \
    -O relatime=on \
    -o autotrim=on \
    -m none zroot /dev/disk/by-id/wwn-0x5000c500deadbeef-part3

Настройте параметры пула (-o) и файловой системы (-O) по желанию и замените идентификатор раздела идентификатором фактического раздела wwn-0x5000c500deadbeef-part3, который будет использоваться.

При добавлении дисков или разделов в пулы ZFS, как правило, рекомендуется ссылаться на них с помощью символических ссылок, созданных в /dev/disk/by-id или (в системах UEFI) /dev/disk/by-partuuid, чтобы ZFS идентифицировала нужные разделы, даже если название диска должно измениться в какой-то момент. Использование традиционных узлов устройств, таких как /dev/sda3, может привести к периодическим сбоям импорта.

Затем экспортируйте и повторно импортируйте пул, используя временный альтернативный корневой путь:

# zpool export zroot
# zpool import -N -R /mnt zroot
Создание исходной файловой системы

Структура файловой системы в вашем пуле ZFS является гибкой. Однако обычно корневые файловые системы операционной системы («загрузочные среды») помещаются под родительский элемент ROOT:

# zfs create -o mountpoint=none zroot/ROOT
# zfs create -o mountpoint=/ -o canmount=noauto zroot/ROOT/void

Установка canmount=noauto в файловых системах с помощью mountpoint=/ полезна, поскольку позволяет создавать несколько загрузочных сред (которые могут быть клонами общей установки Void или содержать полностью отдельные дистрибутивы), не опасаясь, что автоматическое монтирование ZFS попытается смонтировать одну поверх другой.

Чтобы отделить пользовательские данные от операционной системы, создайте файловую систему для хранения домашних каталогов:

# zfs create -o mountpoint=/home zroot/home

Другие файловые системы могут быть созданы по желанию.

Монтирование иерархии ZFS

Все файловые системы ZFS должны быть смонтированы в альтернативном корне /mnt, созданном при предыдущем повторном импорте. Смонтируйте корневую файловую систему только вручную, прежде чем разрешить ZFS автоматически монтировать все остальное:

# zfs mount zroot/ROOT/void
# zfs mount -a

На этом этапе вся иерархия ZFS должна быть смонтирована и готова к установке. Чтобы повысить скорость импорта во время загрузки, полезно записать текущую конфигурацию пула в файл кэша, который Void будет использовать, чтобы избежать обхода всей иерархии устройств для идентификации импортируемых пулов:

# mkdir -p /mnt/etc/zfs
# zpool set cachefile=/mnt/etc/zfs/zpool.cache zroot

Смонтируйте файловые системы, отличные от ZFS, в соответствующих местах. Например, если /dev/sda2 содержит файловую систему ext4, которую следует смонтировать в /boot, а /dev/sda1 — это системный раздел EFI:

# mkdir -p /mnt/boot
# mount /dev/sda2 /mnt/boot
# mkdir -p /mnt/boot/efi
# mount /dev/sda1 /mnnt/boot/efi
Установка

На этом этапе можно приступить к обычной установке из раздела Базовая установка стандартного руководства по установке chroot. Однако прежде чем следовать инструкциям Завершение, убедитесь, что пакет zfs установлен и dracut настроен для идентификации корневой файловой системы ZFS:

[xchroot /mnt] # mkdir -p /etc/dracut.conf.d
[xchroot /mnt] # cat > /etc/dracut.conf.d/zol.conf <<EOF
nofsck="yes"
add_dracutmodules+=" zfs "
omit_dracutmodules+=" btrfs resume "
EOF
[xchroot /mnt] # xbps-install zfs

Наконец, следуйте инструкциям «Завершение» и перезагрузитесь в новую систему.

ARM-устройства

Void Linux предоставляет пакеты и образы для нескольких устройств ARM. Установить Void на такие устройства можно несколькими способами:

В этом руководстве также описаны этапы настройки, которые в основном относятся к таким устройствам.

Поскольку большинство команд в этом руководстве будут выполняться на внешнем накопителе, важно запустить sync(1) перед удалением устройства.

Установка

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

Готовые образы

Предоставленные предварительно созданные образы подготовлены для SD-карт емкостью 2 ГБ. После загрузки и проверки образа его можно распаковать с помощью unxz(1) и записать на соответствующий носитель с помощью cat(1), pv(1) или dd(1). Например, чтобы записать его на SD-карту, расположенную по адресу /dev/mmcblk0:

$ unxz -k <image>.img.xz
# dd if=<image>.img of=/dev/mmcblk0 bs=4M status=progress

После перепрошивки корневой раздел можно при желании расширить, чтобы он соответствовал устройству хранения, с помощью cfdisk(8), fdisk(8) или другого инструмента разбиения на разделы, а размер файловой системы можно изменить в соответствии с размером расширенного раздела с помощью resize2fs(8).

Ручное разбиение раздела

Настройка установки (например, с использованием пользовательской структуры разделов) требует более сложного процесса. Доступны два варианта:

Чтобы подготовить хранилище для этих методов установки, необходимо разбить носитель данных на разделы, а затем смонтировать разделы в правильных точках монтирования.

Обычная схема разбиения устройств ARM требует как минимум двух разделов на диске, отформатированном с использованием таблицы разделов MS-DOS:

Для создания разделов доступно множество инструментов, например cfdisk(8).

Для доступа к вновь созданным файловым системам необходимо их смонтировать. В этом руководстве предполагается, что второй раздел будет смонтирован на /mnt, но вы можете смонтировать его в другом месте. Чтобы смонтировать эти файловые системы, вы можете использовать приведенные ниже команды, заменяя имена устройств подходящими для вашей установки:

# mount /dev/mmcblk0p2 /mnt
# mkdir /mnt/boot
# mount /dev/mmcblk0p1 /mnt/boot
Установка из архива

Сначала загрузите и проверьте архив PLATFORMFS или ROOTFS для нужной платформы и подготовьте носитель данных. Затем распакуйте архив в файловую систему с помощью tar(1):

# tar xvfp <image>.tar.xz -C /mnt
Установка chroot

Также возможно выполнить установку chroot, используя соответствующую архитектуру и базовые пакеты, некоторые из которых перечислены в разделе Поддерживаемые платформы. Обязательно правильно подготовьте носитель данных для устройства.

Если вы делаете это на компьютере с несовместимой архитектурой (например, x86_64), установите пакеты qemu-user-static и binfmt-support и включите службу binfmt-support перед установкой.

Конфигурация

Чтобы гарантировать работоспособность системы, необходимо выполнить некоторые дополнительные шаги по настройке. Настройка графической сессии должна работать нормально.

Вход в систему

Для предварительно созданных образов и установок tarball пароль пользователя rootvoidlinux.

fstab

Раздел /boot следует добавить в файл /etc/fstab с записью, аналогичной приведенной ниже. Загрузку можно выполнить и без этой записи, но обновление пакета ядра в такой ситуации может привести к поломке, например невозможности найти модули ядра, которые необходимы для таких функций, как беспроводное соединение. Если вы не используете SD-карту, замените /dev/mmcblk0p1 соответствующим путем к устройству.

/dev/mmcblk0p1 /boot vfat defaults 0 0
Системное время

Некоторые из устройств ARM, поддерживаемых Void Linux, не имеют часов реального времени (RTC) с батарейным питанием, что означает, что они не будут отслеживать время после выключения. Эта проблема может проявляться в виде ошибок HTTPS при просмотре веб-страниц или использовании диспетчера пакетов. Время можно установить вручную с помощью утилиты date(1). Чтобы устранить эту проблему при последующих загрузках, установите и включите NTP-клиент. Кроме того, можно установить пакет fake-hwclock, который предоставляет службу fake-hwclock. fake-hwlock(8) периодически сохраняет текущее время в файле конфигурации и восстанавливает его при загрузке, что приводит к лучшему начальному приближению текущего времени даже без подключения к сети.

Предупреждение: В образах, выпущенных до 2020-03-16, может возникнуть проблема, из-за которой установка пакета chrony, демона NTP по умолчанию, будет неполной, и в системе будет отсутствовать пользователь chrony. Это можно проверить в выводе команды getent(1), который будет пустым, если он не существует:

$ getent group chrony
chrony:x:997

Чтобы это исправить, необходимо перенастроить пакет chrony с помощью xbps-reconfigure(1).

Графическая сессия

В пакет xf86-video-fbturbo входит модифицированная версия драйвера DDX Xorg, который находится в пакете xf86-video-fbdev и оптимизирован для устройств ARM. Это можно использовать для устройств, у которых отсутствуют более конкретные драйверы.

2.2.4.1 Поддерживаемые платформы

Raspberry Pi

Пакеты rpi-kernel для всех вариантов Raspberry Pi созданы на основе дерева ядра Raspberry Pi Foundation, которое должно включать все специальные функции, недоступные в основных ядрах. Пакеты ядра RPi также имеют свои собственные пакеты заголовков rpi-kernel-headers. Эти пакеты следует установить, если вы хотите использовать какие-либо пакеты DKMS. Void поставляет метапакеты rpi-base, которые устанавливают соответствующие пакеты rpi-kernel и rpi-firmware. Вместе эти пакеты обеспечивают функции Wi-Fi и Bluetooth.

Параметры командной строки, передаваемые ядру, находятся в файле /boot/cmdline.txt. Некоторые соответствующие параметры описаны в официальной документации.

Поддерживаемые модели
Модель Архитектура
1 A, 1 B, 1 A+, 1 B+, Zero, Zero W, Zero WH armv6l
2 B armv7l
3 B, 3 A+, 3 B+, Zero 2W, 4 B, 400 aarch64

Образы armv7l можно запускать на RPi 3, поскольку CPU RPi 3 поддерживает наборы инструкций Armv8 и Armv7. Разница между этими образами заключается в том, что образ Armv7l предоставляет 32-битную систему, а образ aarch64 — 64-битную систему.

Ядро Raspberry Pi 5

Пакеты rpi5-kernel и rpi5-kernel-headers предоставляют ядро и заголовки, оптимизированные для Raspberry Pi 5, со страницами размером 16 КБ. Чтобы переключиться с общего rpi-kernel, установите rpi5-kernel. Это удалит rpi-kernel и заменит его на rpi5-kernel.

Примечание: не все программное обеспечение совместимо с ядрами, имеющими большие размеры страниц. Просмотрите все известные проблемы и сообщите о любых проблемах совместимости, обнаруженных в баг-трекере.

Включение аппаратного устройства RNG

По умолчанию устройство HWRNG не используется системой, что может привести к тому, что random-устройствам потребуется много времени для заполнения при загрузке. Это может раздражать, если вы хотите начать сессию sshd и ожидаете немедленного подключения.

Чтобы это исправить, установите пакет rng-tools и включите службу rngd, которая использует устройство /dev/hwrng для заполнения /dev/random.

Графическая сессия

Пакет mesa-dri содержит драйверы для всех вариантов Raspberry Pi и может использоваться с драйвером modesetting Xorg или Wayland.

Аппаратное обеспечение

Дополнительную информацию о конфигурации можно найти в официальной документации Raspberry Pi Foundation. Утилита raspi-config недоступна для Void Linux, поэтому обычно требуется редактирование файла /boot/config.txt.

Аудио

Чтобы включить звуковой чип, добавьте dtparam=audio=on в /boot/config.txt.

Последовательный порт

Чтобы включить вход в последовательную консоль, включите службу agetty-ttyAMA0. См. securetty(5) для интерфейсов, позволяющих вход в систему с правами root. Для настройки последовательного порта при запуске обратитесь к командной строке ядра в /boot/cmdline.txt, в частности, к параметру console=ttyAMA0,115200.

I2C

Чтобы включить I2C, добавьте device_tree_param=i2c_arm=on в /boot/config.txt и bcm2708.vc_i2c_override=1 в /boot/cmdline.txt. Затем создайте файл elements-load(8) .conf со следующим содержимым:

i2c-dev

Наконец, установите пакет i2c-tools и используйте i2cdetect(8) для проверки вашей конфигурации. Он должен показать:

$ i2cdetect -l
i2c-1i2c          bcm2835 I2C adapter                 I2C adapter
Memory cgroup

Ядро из пакета rpi-kernel по умолчанию отключает memory cgroup.

Это нарушает рабочие нагрузки, использующие контейнеры. Поэтому, если вы хотите использовать контейнеры на Raspberry Pi, вам необходимо включить cgroups памяти, добавив cgroup_enable=memory в /boot/cmdline.txt.

2.3. musl

musl — это реализация libc, которая стремится быть легкой, быстрой, простой и корректной.

Void официально поддерживает musl, используя его в своей кодовой базе для всех целевых платформ (хотя бинарные пакеты недоступны для i686). Кроме того, все совместимые пакеты в наших официальных репозиториях доступны с двоичными файлами, связанными с musl, в дополнение к их аналогам glibc.

В настоящее время для musl существуют несвободные и отладочные подрепозитории, но нет подрепозитория multilib.

Несовместимое программное обеспечение

musl практикует очень строгое и минимальное соблюдение стандартов. Многие часто используемые расширения для конкретной платформы отсутствуют. По этой причине для правильной компиляции и/или функционирования программного обеспечения часто требуется модификация. Разработчики Void работают над исправлением такого программного обеспечения и, надеюсь, добавят изменения в переносимости/корректности в исходные проекты.

Проприетарное программное обеспечение обычно поддерживает только системы glibc, хотя иногда такие приложения доступны в виде пакетов flatpak и могут быть запущены в системе musl. В частности, проприетарные драйверы NVIDIA не поддерживают musl, что следует учитывать при оценке аппаратной совместимости.

glibc chroot

Программное обеспечение, требующее glibc, может быть запущено в chroot glibc.

3. Конфигурация

В этом разделе и его подразделах представлена информация о настройке вашей системы Void.

3.1. Документация пакета

Наиболее распространенным носителем документации в Void Linux являются страницы руководства.

Многие пакеты содержат документацию в других форматах, например HTML. Эту документацию обычно можно найти в каталоге /usr/share/doc/<package>.

Более обширную документацию можно разделить на отдельные пакеты *-doc, например julia-doc. Это часто относится к языкам программирования, базам данных и большим библиотекам программного обеспечения.

В дополнение к документации, предоставляемой исходными проектами, пакеты также могут содержать описание начальной настройки или использования, специфичное для Void, предоставленное участниками дистрибутива. Оно будет расположено в /usr/share/doc/<package>/README.voidlinux.

Страницы руководства

Многие пакеты Void поставляются со страницами руководства (man). Установка по умолчанию включает набор инструментов mandoc manpage через пакет mdocml.

Команда man(1) может использоваться для отображения страниц руководства:

$ man chroot

Каждая страница руководства принадлежит определенному разделу:

Подробности смотрите на man-pages(7).

Некоторые man-страницы имеют одно и то же имя, но используются в разных контекстах и, следовательно, находятся в разных разделах. Вы можете указать, какой из них использовать, включив номер раздела в вызов man:

$ man 1 printf

man можно настроить через man.conf(5).

Набор инструментов mandoc содержит apropos(1), который можно использовать для поиска страниц руководства. apropos использует базу данных, которую можно создать и обновить с помощью команды makewhatis(8):

# makewhatis
$ apropos chroot
chroot(1) — run command or interactive shell with special root directory
xbps-uchroot(1) — XBPS utility to chroot and bind mount with Linux namespaces
xbps-uunshare(1) — XBPS utility to chroot and bind mount with Linux user namespaces
chroot(2) — change root directory

Пакет mdocml предоставляет задание cron для ежедневного обновления базы данных /etc/cron.daily/makewhatis. Чтобы активировать эту функцию, вам необходимо установить и включить демон cron.

Руководства по разработке и POSIX не устанавливаются по умолчанию, но доступны через пакеты man-pages-devel и man-pages-posix.

Локализованные страницы руководства

Также возможно использовать локализованные man-страницы из пакетов, которые предоставляют как свои собственные, так и те, которые предоставляются пакетами manpages-*. Однако это может потребовать некоторой настройки.

С использованием mdocml

Если mdocml используется и настройки должны применяться ко всем пользователям, необходимо добавить соответствующие пути в man.conf(5). Например, говорящие по-немецки добавят в свой файл конфигурации эти две строки:

/usr/share/man/de
/usr/share/man/de.UTF-8

Альтернативно, каждый пользователь может экспортировать переменную MANPATH в свою среду, как описано в man(1).

3.2. Firmware

Void предоставляет в репозиториях несколько пакетов прошивки. Некоторые прошивки доступны только в том случае, если вы включили nonfree репозиторий.

Microcode

Микрокод загружается в CPU или GPU при загрузке BIOS, но позже может быть заменен самой ОС. Обновление микрокода может позволить изменить поведение процессора или графического процессора для обхода определенных, еще не обнаруженных ошибок, без необходимости замены оборудования.

Intel

Установите пакет микрокода Intel, intel-ucode. Этот пакет находится в несвободном репозитории, который необходимо включить. После установки этого пакета необходимо перегенерировать ваш initramfs. При последующих обновлениях микрокод будет автоматически добавлен в initramfs.

AMD

Установите пакет AMD linux-firmware-amd, который содержит микрокод как для CPU, так и для GPU AMD. CPU и GPU AMD автоматически загрузят микрокод, дополнительная настройка не требуется.

Проверка

В файле /proc/cpuinfo содержится некоторая информация microcode, которую можно использовать для проверки обновления микрокода.

Удаление прошивки

По умолчанию пакеты linuxX.Y и пакет base-system устанавливают несколько пакетов прошивки. Необязательно удалять неиспользуемые пакеты встроенного ПО, но если вы хотите это сделать, вы можете настроить XBPS так, чтобы он игнорировал эти пакеты, а затем удалил их.

3.3. Локали и переводы

Чтобы получить список включенных в данный момент локалей, запустите

$ locale -a

Включение локалей

Чтобы включить определенную локаль, раскомментируйте или добавьте соответствующие строки в /etc/default/libc-locales и принудительно переконфигурируйте пакет glibc-locales.

Установка языкового стандарта системы

Установите LANG=xxxx в /etc/locale.conf.

Язык приложений

Некоторые программы имеют свои переводы в отдельном пакете, который необходимо установить для их использования. Вы можете найти нужный язык (например, «german» или «portuguese») в репозиториях пакетов и установить пакеты, соответствующие используемым вами приложениям. Особенно актуален случай при установке отдельных пакетов из пакета LibreOffice, таких как libreoffice-writer, для правильной работы которых требуется установка хотя бы одного из пакетов libreoffice-i18n-*. В этом нет необходимости при установке метапакета libreoffice, поскольку при этом будут установлены наиболее распространенные пакеты перевода.

3.4. Пользователи и группы

Команды useradd(8), userdel(8) и usermod(8) используются для добавления, удаления и изменения пользователей соответственно. Команда passwd(1) используется для изменения паролей.

Команды groupadd(8), groupdel(8) и groupmod(8) используются для добавления, удаления и изменения групп соответственно. Команда groups(1) выводит список всех групп, к которым принадлежит пользователь.

Shell по умолчанию

Оболочку по умолчанию для пользователя можно изменить с помощью chsh(1):

$ chsh -s <shell> <user_name>

<shell> должен быть путем к оболочке, указанным в /etc/shells, или выводом команды chsh -l, которая предоставляет список установленных оболочек.

sudo

sudo(8) установлен по умолчанию, но может быть настроен неправильно для ваших нужд. Настраивать sudo необходимо только в том случае, если вы хотите его использовать.

Используйте visudo(8) от имени пользователя root для редактирования файла sudoers(5).

Чтобы создать суперпользователя, раскомментируйте строку

#%wheel ALL=(ALL) ALL

и добавьте пользователей в группу wheel.

Группы по умолчанию

Void Linux по умолчанию определяет несколько групп.

Группа Описание
root Полный доступ к системе.
bin Не используется — присутствует по историческим причинам.
sys Не используется — присутствует по историческим причинам.
kmem Возможность чтения из /dev/mem и /dev/port.
wheel Повышенные привилегии для определенных задач системного администрирования.
tty Доступ к устройствам, подобным TTY: /dev/tty*, /dev/pts*, /dev/vcs*.
tape Доступ к ленточным устройствам.
daemon Системные демоны, которым требуется запись в файлы на диске.
floppy Доступ к дисководам гибких дисков.
disk Необработанный доступ к /dev/sd* и /dev/loop*.
lp Доступ к принтерам.
dialout Доступ к последовательным портам.
audio Доступ к аудиоустройствам.
video Доступ к видеоустройствам.
utmp Возможность записи в /var/run/utmp, /var/log/wtmp и /var/log/btmp.
adm Не используется — присутствует по историческим причинам. Эта группа традиционно использовалась для системных задач, таких как просмотр файлов в /var/log.
cdrom Доступ к устройствам CD.
optical Доступ к устройствам DVD/CD-RW.
mail Используется некоторыми почтовыми пакетами, например, dma.
storage Доступ к съемным устройствам хранения.
scanner Возможность доступа к сканерам.
network Не используется — присутствует по историческим причинам.
kvm Возможность использовать KVM для виртуальных машин, например, через QEMU.
input Доступ к устройствам ввода: /dev/mouse*, /dev/event*.
plugdev Доступ к подключаемым устройствам.
nogroup Системные демоны, которым не нужно владеть никакими файлами.
usbmon Доступ к /dev/usbmon*.
users Обычные пользователи.
xbuilder Для использования xbps-uchroot(1) с xbps-src.

3.5. Службы и демоны — runit

Void использует пакет управления runit(8) для запуска системных служб и демонов.

Некоторые преимущества использования runit включают в себя:

Если вам не нужно, чтобы программа работала постоянно, но вы хотите, чтобы она запускалась через регулярные промежутки времени, вы можете рассмотреть возможность использования демона cron.

Содержание раздела

Каталоги служб

Каждая служба, управляемая runit, имеет связанный с ней каталог службы.

Для каталога службы требуется только один файл: исполняемый файл с именем run, который, как ожидается, будет запускать процесс на переднем плане.

Опционально каталог службы может содержать:

При создании новой службы папка supervise будет автоматически создана при первом запуске.

Настройка служб

Большинство служб могут использовать параметры конфигурации, заданные файлом conf в каталоге службы. Это позволяет настраивать службу без изменения каталога службы, предоставляемого соответствующим пакетом.

Проверьте служебный файл, чтобы узнать, как передавать параметры конфигурации. У некоторых служб есть такое поле, как OPTS="--value ..." в их файле conf.

Для более сложных настроек следует отредактировать файл service.

Редактирование служб

Чтобы отредактировать службу, сначала скопируйте ее каталог службы в каталог с другим именем. В противном случае xbps-install(1) может перезаписать каталог службы. Затем при необходимости отредактируйте новый служебный файл. Наконец, старую службу следует остановить и отключить, а новую запустить.

Управление службами

Runsvdirs

runsvdir — это каталог в /etc/runit/runsvdir, содержащий включенные службы в виде символических ссылок на каталоги служб. В работающей системе текущий runsvdir доступен через символическую ссылку /var/service.

Пакет runit-void поставляется с двумя runsvdirs — single и default:

Дополнительные runsvdirs можно создать в файлах /etc/runit/runsvdir/.

Дополнительную информацию смотрите в runsvdir(8) и runsvchdir(8).

Загрузка другого runsvdir

Чтобы загрузить runsvdir, отличный от default, имя нужного runsvdir можно добавить в командную строку ядра. Например, добавление single в командную строку ядра приведет к загрузке файла single runsvdir.

Основное использование

Чтобы запустить, остановить, перезапустить или получить статус службы:

# sv up <services>
# sv down <services>
# sv restart <services>
# sv status <services>

Заполнителем <services> могут быть:

Например, следующие команды показывают состояние конкретной службы и всех включенных служб:

# sv status dhcpcd
# sv status /var/service/*

См. sv(8) для получения дополнительной информации.

Включение служб

Void Linux предоставляет служебные каталоги для большинства демонов в формате /etc/sv/.

Чтобы включить службу в загружаемой системе, создайте символическую ссылку на каталог службы в /var/service/:

# ln -s /etc/sv/<service> /var/service/

Если система в данный момент не запущена, службу можно связать непосредственно с default runsvdir:

# ln -s /etc/sv/<service> /etc/runit/runsvdir/default/

Это автоматически запустит службу. После подключения службы она всегда будет запускаться при загрузке и перезапускаться в случае остановки, если только она не отключена административным путем.

Чтобы предотвратить запуск службы при загрузке, позволяя runit управлять ею, создайте файл с именем down в каталоге службы:

# touch /etc/sv/<service>/down

Механизм файла down также позволяет отключать службы, включенные по умолчанию, например службы agetty(8) для tty от 1 до 6. Таким образом, обновления пакетов, влияющие на эти службы (в данном случае пакет runit-void), не будут повторно включать их.

Отключение служб

Чтобы отключить службу, удалите символическую ссылку из работающего runsvdir:

# rm /var/service/<service>

Или, например, из default runsvdir, если либо конкретный runsvdir, либо система в данный момент не запущена:

# rm /etc/runit/runsvdir/default/<service>
Тестирование служб

Чтобы проверить, правильно ли работает служба при запуске диспетчером службы, запустите ее один раз, прежде чем полностью включить:

# touch /etc/sv/<service>/down
# ln -s /etc/sv/<service> /var/service/
# sv once <service>

Если все работает, удалите файл down, чтобы включить службу.

3.5.1. Службы для каждого пользователя

Иногда бывает полезно иметь службы запуска, специфичные для пользователя. Например, вы можете открыть ssh-туннель от имени текущего пользователя, запустить виртуальную машину или регулярно запускать демоны от вашего имени. Самый распространенный способ сделать это — создать службу системного уровня, которая запускает runsvdir(8) от имени вашего пользователя, чтобы запускать и контролировать службы в каталоге личных служб.

Например, вы можете создать службу, вызываемую /etc/sv/runsvdir-<username> с помощью следующего сценария run, который должен быть исполняемым:

#!/bin/sh

export USER="<username>"
export HOME="/home/<username>"

groups="$(id -Gn "$USER" | tr ' ' ':')"
svdir="$HOME/service"

exec chpst -u "$USER:$groups" runsvdir "$svdir"

В этом примере chpst(8) используется для запуска нового процесса runsvdir(8) от имени указанного пользователя. chpst(8) не считывает группы самостоятельно, но ожидает, что пользователь перечислит все необходимые группы, разделенные символом :. Каналы id и tr используются для создания списка всех групп пользователя в том виде, в каком его понимает chpst(8). Обратите внимание, что мы экспортируем $USER и $HOME потому, что без них некоторые пользовательские сервисы могут не работать.

Затем пользователь может создавать в каталоге /home/<username>/service новые службы или символические ссылки на них. Чтобы управлять службами с помощью команды sv(8), пользователь может указать службы по пути или по имени, если переменная среды SVDIR установлена в каталог служб пользователя. Это показано в следующих примерах:

$ sv status ~/service/*
run: /home/duncan/service/gpg-agent: (pid 901) 33102s
run: /home/duncan/service/ssh-agent: (pid 900) 33102s
$ SVDIR=~/service sv restart gpg-agent
ok: run: gpg-agent: (pid 19818) 0s

Возможно, будет удобно экспортировать переменную SVDIR=~/service в профиль вашей оболочки.

3.5.2. Ведение журнала

Syslog

При установке по умолчанию демон системного журнала отсутствует. Однако в репозиториях Void доступны реализации системного журнала.

Socklog

socklog(8) — это реализация системного журнала от автора runit(8). Используйте socklog, если вы не уверены, какую реализацию системного журнала использовать. Чтобы включить его, установите пакет socklog-void и включите службы socklog-unix и nanoklogd. Убедитесь, что никакой другой демон системного журнала не запущен.

Журналы сохраняются в подкаталогах /var/log/socklog/ и svlogtail, их можно использовать для удобного доступа к ним.

Возможность чтения журналов ограничена пользователями root, входящими в группу socklog.

Другие демоны системного журнала

Репозитории Void также включают пакеты для rsyslog и metalog.

3.6. rc.conf, rc.local и rc.shutdown

Файлы /etc/rc.conf, /etc/rc.local и /etc/rc.shutdown можно использовать для настройки определенных частей вашей системы Void. rc.conf часто настраивается с помощью void-installer.

rc.conf

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

KEYMAP

Указывает, какую раскладку клавиатуры использовать для консоли Linux. Доступные раскладки клавиш перечислены в /usr/share/kbd/keymaps. Например:

KEYMAP=fr

Для получения более подробной информации обратитесь к loadkeys(1).

HARDWARECLOCK

Указывает, установлены ли аппаратные часы на время в формате UTC или местное время.

По умолчанию установлено значение utc. Однако Windows устанавливает аппаратные часы на местное время, поэтому, если вы используете двойную загрузку Windows, вам необходимо либо настроить Windows на использование UTC, либо установить для этой переменной значение localtime.

Для получения более подробной информации обратитесь к hwclock(8).

FONT

Указывает, какой шрифт использовать для консоли Linux. Доступные шрифты перечислены в /usr/share/kbd/consolefonts. Например:

FONT=eurlatgr

Для получения более подробной информации обратитесь к setfont(8).

rc.local

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

rc.shutdown

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

3.7. Cron

cron — это демон для запуска программ через определенные промежутки времени. Программы и интервалы указаны в файле crontab, который можно редактировать с помощью crontab(1). Запуск crontab -e от имени суперпользователя отредактирует системный файл crontab; в противном случае он будет редактировать crontab для текущего пользователя.

По умолчанию демон cron не установлен. Однако доступно несколько реализаций cron, включая cronie, dcron, fcron и другие.

После того как вы выбрали и установили реализацию, включите соответствующую службу. Существует также общий сервис crond, который поддерживается системой альтернатив, но его использование не приносит реальной пользы и просто затрудняет отслеживание вашей настройки.

В качестве альтернативы стандартным реализациям cron вы можете использовать snooze(1) вместе с сервисами snooze-hourly, snooze-daily, snooze-weekly и snooze-monthly, которые для этой цели предоставляются пакетом snooze. Каждая из этих служб выполняет сценарии в соответствующих каталогах /etc/cron.*.

3.8. Твердотельные накопители (Solid State Drives)

После установки вам нужно будет включить TRIM для твердотельных накопителей. Вы можете проверить, какие устройства поддерживают TRIM, выполнив:

$ lsblk --discard

Если столбцы DISC-GRAN (отбросить детализацию) и DISC-MAX (отбросить максимальное количество байтов) не равны нулю, это означает, что блочное устройство поддерживает TRIM. Если раздел вашего твердотельного накопителя не поддерживает TRIM, убедитесь, что вы выбрали файловую систему с поддержкой TRIM (ext4, Btrfs, F2FS и т. д.). Обратите внимание, что для F2FS требуется ядро 4.19 или выше для поддержки TRIM.

Чтобы запустить TRIM одноразово, вы можете запустить его вручную fstrim(8). Например, если ваш каталог / находится на SSD:

# fstrim /

Чтобы автоматизировать запуск TRIM, используйте cron или добавьте опцию discard в /etc/fstab.

Периодический запуск TRIM с помощью cron

Добавьте следующие строки в /etc/cron.weekly/fstrim:

#!/bin/sh

fstrim /

И сделайте скрипт исполняемым:

# chmod u+x /etc/cron.weekly/fstrim

Непрерывное выполнение TRIM с discard в fstab

Вы можете использовать непрерывный или периодический TRIM, но использование непрерывного TRIM не рекомендуется, если у вас есть твердотельный накопитель, который неправильно обрабатывает NCQ. Обратитесь к черному списку ядра.

Отредактируйте /etc/fstab и добавьте опцию discard, чтобы блокировать устройства, которым требуется TRIM.

Например, если /dev/sda1 был разделом SSD, отформатированным как ext4 и смонтированным в /:

/dev/sda1  /           ext4  defaults,discard   0  1

LVM

Чтобы включить TRIM для команд LVM (lvremove, lvreduce и т. д.), откройте /etc/lvm/lvm.conf, раскомментируйте параметр issue_discards и установите для него значение 1:

issue_discards=1

LUKS

Предупреждение: Прежде чем включать discard для вашего раздела LUKS, обратите внимание на последствия для безопасности.

Чтобы открыть зашифрованное устройство LUKS и разрешить удаление отходов, откройте устройство с опцией --allow-discards:

# cryptsetup luksOpen --allow-discards /dev/sdaX luks
Не-root устройства

Отредактируйте /etc/crypttab и установите параметр discard для устройств на SSD. Например, если у вас есть устройство LUKS с именем externaldrive1, устройством /dev/sdb2 и паролем none:

externaldrive1  /dev/sdb2   none    luks,discard
Root устройства

Если ваше корневое устройство находится на LUKS, добавьте rd.luks.allow-discards в CMDLINE_LINUX_DEFAULT. В случае GRUB отредактируйте /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="rd.luks.allow-discards"

Затем обновите GRUB:

# update-grub
Проверка конфигурации

Чтобы убедиться, что вы правильно настроили TRIM для LUKS, перезагрузитесь и запустите:

# dmsetup table /dev/mapper/crypt_dev --showkeys

Если выходные данные этой команды содержат строку allow_discards, вы успешно включили TRIM на своем устройстве LUKS.

ZFS

Прежде чем запускать trim в пуле ZFS, убедитесь, что все устройства в пуле поддерживают его:

# zpool get all | grep trim

Если пул позволяет autotrim (установлено off по умолчанию), вы можете создавать пул trim периодически или автоматически. Чтобы за один раз выполнить trim yourpoolname::

# zpool trim yourpoolname
Периодический TRIM

Добавьте следующие строки в /etc/cron.daily/ztrim:

#!/bin/sh
zpool trim yourpoolname

И сделайте скрипт исполняемым:

# chmod u+x /etc/cron.daily/ztrim
Авто-trim

Чтобы установить авто-trim для yourpoolname, запустите:

# zpool set autotrim=on yourpoolname

3.9. Безопасность

Есть несколько способов сделать вашу установку более безопасной. В этом разделе рассматриваются некоторые из них.

Содержание раздела

3.9.1. AppArmor

AppArmor — это механизм обязательного контроля доступа (например, SELinux). Он может ограничивать программы на основе заранее определенных или сгенерированных определений политики.

Void поставляется с некоторыми профилями по умолчанию для нескольких сервисов, таких как dhcpcd и wpa_supplicant. Среды выполнения контейнеров, такие как LXC и podman, интегрируются с AppArmor для повышения безопасности полезных данных контейнера.

Чтобы использовать AppArmor в системе, необходимо:

  1. Установить пакет apparmor.

  2. Установить apparmor=1 security=apparmor в командной строке ядра.

Чтобы выполнить второй шаг, обратитесь к документации о том, как изменить cmdline ядра.

Переменная APPARMOR в /etc/default/apparmor контролирует, как профили будут загружаться при загрузке, по умолчанию установлено значение complain и соответствует режимам AppArmor (disable, complain, enforce).

Инструменты AppArmor aa-genprof(8) и aa-logprof(8) требуют либо настроенного системного журнала, либо работающей службы auditd(8).

3.10. Дата и время

Чтобы просмотреть текущую информацию о дате и времени вашей системы, а также внести в нее прямые изменения, используйте date(1).

Часовой пояс (Timezone)

Системный часовой пояс по умолчанию можно установить, связав файл часового пояса с /etc/localtime:

# ln -sf /usr/share/zoneinfo/<timezone> /etc/localtime

Примечание: Если переменная TIMEZONE установлена в /etc/rc.conf, ее следует удалить или закомментировать, так как это переопределит то, что было установлено ln при перезагрузке.

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

export TZ=<timezone>

Обратите внимание, что установка timezone не устанавливает time (или date); вместо этого она просто указывает смещение от UTC, как описано в timezone(3).

Аппаратные часы (Hardware clock)

По умолчанию аппаратные часы в Void хранятся в формате UTC. Windows не использует UTC по умолчанию, и если вы используете двойную загрузку, это будет конфликтовать с Void. Вы можете либо изменить Windows на использование UTC, либо изменить Void Linux на использование localtime, установив переменную HARDWARECLOCK в /etc/rc.conf:

export HARDWARECLOCK=localtime

Для получения более подробной информации см. hwclock(8).

NTP

Чтобы поддерживать точность часов вашей системы, вы можете использовать Network Time Protocol (NTP).

Void предоставляет пакеты для следующих демонов NTP: NTP, OpenNTPD, Chrony и ntpd-rs.

После установки демона NTP вы можете включить службу для него либо через собственную службу, либо через службу ntpd, управляемую xbps-alternatives(1).

NTP

NTP — это официальная эталонная реализация протокола сетевого времени.

Пакет ntp предоставляет NTP и службу isc-ntpd.

Для получения дополнительной информации посетите сайт NTP.

OpenNTPD

OpenNTPD фокусируется на обеспечении безопасной и экономичной реализации NTP, которая «просто работает» с достаточной точностью для большинства случаев использования.

Пакет openntpd предоставляет OpenNTPD и службу openntpd.

Для получения дополнительной информации посетите сайт OpenNTPD.

Chrony

Chrony спроектирован так, чтобы хорошо работать в самых разных условиях; он может синхронизироваться быстрее и с большей точностью, чем NTP.

Пакет chrony предоставляет Chrony и службу chronyd.

На сайте Chrony представлен краткий обзор его преимуществ перед NTP, а также подробное сравнение функций Chrony, NTP и OpenNTPD.

ntpd-rs

ntpd-rs — это полнофункциональная реализация NTP-сервера и клиента, включая поддержку NTS.

Пакет ntpd-rs предоставляет ntpd-rs и службу ntpd-rs.

Дополнительную информацию и руководства по миграции из других реализаций можно найти в документации ntpd-rs.

3.11. Kernel

Серия ядра

Void Linux предоставляет множество серий ядер в репозитории по умолчанию. Они называются linux<x>.<y>: например, linux4.19. Вы можете запросить все доступные серии ядер, выполнив:

$ xbps-query --regex -Rs '^linux[0-9.]+-[0-9._]+'

Мета-пакет linux, установленный по умолчанию, зависит от одного из пакетов ядра, обычно от пакета, содержащего последнее основное ядро, которое работает со всеми модулями DKMS. В репозитории могут быть доступны более новые ядра, но они не обязательно считаются достаточно стабильными, чтобы использоваться по умолчанию; используйте их на свой страх и риск. Если вы хотите использовать более новую версию ядра и у вас есть модули DKMS, которые вам нужно собрать, установите соответствующий пакет linux<x>.<y>-headers, а затем используйте xbps-reconfigure(1), чтобы переконфигурировать установленный вами пакет linux<x>.<y>. Это позволит построить модули DKMS.

Удаление старых ядер

При обновлении ядра старые версии остаются на случай необходимости отката на более старую версию. Со временем старые версии ядра могут накапливаться, занимая дисковое пространство и увеличивая время, необходимое для обновления модуля DKMS. Более того, если /boot — это отдельный раздел и он заполнен старыми ядрами, обновление может завершиться неудачей или привести к созданию неполных файловых систем initramfs, что приведет к панике ядра, если они загружаются. Таким образом, может быть целесообразно время от времени очищать старые ядра.

Удаление старых ядер осуществляется с помощью утилиты vkpurge(8). vkpurge поставляется предустановленной в каждой системе Void Linux. Эта утилита запускает необходимые перехватчики при удалении старых ядер. Обратите внимание: vkpurge не удаляет пакеты ядра, а только отдельные ядра.

Удаление серии ядра по умолчанию

Если вы установили пакет ядра для серии, отличной от стандартной, и хотите удалить пакеты ядра по умолчанию, вам следует установить пакет linux-base или пометить его как пакет, устанавливаемый вручную, если он уже установлен. После этой процедуры вы можете удалить пакеты ядра по умолчанию с помощью xbps-remove(1). Возможно, потребуется добавить linux и linux-headers к записи ignorepkg в xbps.d(5), поскольку от них могут зависеть базовые пакеты.

Переход на другую серию ядра

Если вы хотите использовать серию ядра linux-lts или linux-mainline вместо стандартной linux, сначала установите метапакет нужной серии (и метапакет linux-lts-headers или linux-mainline-headers, если необходимо). Затем вы можете добавить linux и linux-headers к записи ignorepkg в xbps.d(5) и удалить эти пакеты.

Изменение генератора initramfs по умолчанию

По умолчанию Void Linux использует dracut для подготовки образов initramfs для установленных ядер. Доступны альтернативы, такие как mkinitcpio. Каждый генератор initramfs регистрирует альтернативу XBPS в группе initramfs, чтобы связать свои перехватчики ядра, которые будут использоваться при создании или удалении образов initramfs для данного ядра.

Чтобы заменить dracut, например, на mkinitcpio, установите пакет mkinitcpio; убедитесь, что mkinitcpio появляется в списке доступных альтернатив, запустив

$ xbps-alternatives -l -g initramfs

Выдайте команду

# xbps-alternatives -s mkinitcpio

чтобы заменить перехватчики ядра dracut на перехватчики, предоставляемые mkinitcpio. При последующих обновлениях ядра (или обновлениях пакетов DKMS, которые запускают регенерацию initramfs), вместо dracut будет использоваться mkinitcpio для подготовки образов initramfs. Чтобы заставить образы перегенерироваться, переконфигурируйте пакеты ядра, вызвав

# xbps-reconfigure -f linux<x>.<y>

для каждого установленного в данный момент пакета linux<x>.<y>.

cmdline

Ядро, начальный RAM-диск (initrd) и некоторые системные программы можно настроить при загрузке с помощью аргументов командной строки ядра. Параметры, понятные ядру, описаны в документации по параметрам ядра и в bootparam(7). Параметры, понятные dracut, можно найти в dracut.cmdline(7).

После загрузки системы текущие параметры командной строки ядра можно найти в файле /proc/cmdline. Некоторые системные программы могут менять свое поведение в зависимости от параметров, переданных в командной строке, что происходит, например, при загрузке другого runsvdir.

Существуют различные способы установки этих параметров, некоторые из которых описаны ниже.

GRUB

Аргументы командной строки ядра можно добавить через загрузчик GRUB путем редактирования /etc/default/grub, изменения переменной GRUB_CMDLINE_LINUX_DEFAULT и последующего запуска update-grub.

dracut

Dracut предлагает параметр конфигурации kernel_cmdline и параметр командной строки --kernel-cmdline, которые будут кодировать аргументы командной строки непосредственно в образе initramfs. Когда dracut используется для создания исполняемого файла UEFI, аргументы, установленные с помощью этих параметров, будут переданы ядру. Однако при создании обычного initramfs эти параметры не будут переданы ядру при загрузке. Вместо этого они будут записаны в файл конфигурации внутри образа /etc/cmdline.d. Хотя dracut анализирует эту конфигурацию, чтобы контролировать собственное поведение во время загрузки, само ядро не будет знать ни о чем, установленном с помощью этого механизма.

После изменения конфигурации dracut повторно создайте initramfs, чтобы убедиться, что он включает в себя изменения.

Упрочнение ядра

Void Linux поставляется с некоторыми опциями безопасности ядра, включенными по умолчанию. Первоначально это предоставлялось аргументами командной строки ядра slub_debug=P page_poison=1, но начиная с версии ядра 5.3 они были заменены на init_on_alloc и init_on_free (см. этот коммит).

Ядра Void поставляются с опцией init_on_alloc, включенной по умолчанию, если она доступна (т.е. linux5.4 и выше). В большинстве случаев его не следует отключать, поскольку он оказывает минимальное влияние на производительность (в пределах 1%). Вариант init_on_free дороже (в среднем около 5%), и его необходимо включить вручную, передав init_on_free=1 в командную строку ядра. Если вам нужно отключить init_on_alloc, вы можете сделать это аналогичным образом, передав init_on_alloc=0.

Есть вероятность, что в вашей существующей системе все еще включены старые опции. Они по-прежнему работают в новых ядрах, но их влияние на производительность больше соответствует init_on_free=1. На старом оборудовании это может быть весьма заметно. Если вы используете версию ядра старше 5.4, вы можете сохранить их (или добавить) для дополнительной безопасности за счет скорости; в противном случае вам следует удалить их.

Модули ядра

Модули ядра обычно представляют собой драйверы для устройств или файловых систем.

Загрузка модулей ядра во время загрузки

Обычно ядро автоматически загружает необходимые модули, но иногда может потребоваться явно указать модули для загрузки во время загрузки.

Чтобы загружать модули ядра во время загрузки, необходимо создать файл .conf, например /etc/modules-load.d/virtio.conf, с содержимым:

# load virtio-net
virtio-net
Внесение модулей ядра в черный список

Внесение модулей ядра в черный список — это метод предотвращения загрузки модулей ядром. Существует два разных метода внесения в черный список модулей ядра: один для модулей, загружаемых с помощью initramfs, и один для модулей, загружаемых после завершения процесса initramfs. Модули, загружаемые initramfs, должны быть занесены в черный список конфигурации initramfs.

Чтобы занести в черный список модули, загруженные после процесса initramfs, создайте файл .conf, например /etc/modprobe.d/radeon.conf, с содержимым:

blacklist radeon
Занесение модулей в черный список в initramfs

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

dracut

Dracut можно настроить так, чтобы он не включал модули ядра, через файл конфигурации. Чтобы модули не были включены в черный список в dracut initramfs, создайте файл .conf, например /etc/dracut.conf.d/radeon.conf, с содержимым:

omit_drivers+=" radeon "

mkinitcpio

Чтобы модули не были включены в черный список в initramfs mkinitcpio, необходимо создать файл .conf, например /etc/modprobe.d/radeon.conf, с содержимым:

blacklist radeon

Перехватчики ядра (hooks)

Void Linux предоставляет каталоги для перехватчиков ядра в /etc/kernel.d/{pre-install,post-install,pre-remove,post-remove}.

Эти перехватчики используются для обновления загрузочных меню для загрузчиков, таких как grub, gummiboot и lilo.

Установка перехватчиков

Перехваты {pre,post}-install выполняются командой xbps-reconfigure(1) при настройке ядра Linux, например при сборке его initramfs. Это происходит, когда серия ядра устанавливается впервые или обновляется, но ее также можно запустить вручную:

# xbps-reconfigure --force linux<x>.<y>

При запуске вручную они служат для применения изменений конфигурации initramfs при следующей загрузке.

Удаление перехватчиков

Перехваты {pre,post}-remove выполняются vkpurge(8) при удалении старых ядер.

Поддержка динамического модуля ядра (DKMS)

Существуют модули ядра, не являющиеся частью дерева исходного кода Linux, которые собираются во время установки с использованием DKMS и перехватчиков ядра. Доступные модули можно просмотреть, выполнив поиск dkms в репозиториях пакетов.

Журналы сборки DKMS доступны в /var/lib/dkms/.

3.12. Управление питанием (Power Management)

acpid

Служба acpid для acpid(8) установлена, и, если Void был установлен из live-образа с использованием локального источника, она будет включена по умолчанию. События ACPI обрабатываются файлом /etc/acpi/handler.sh, который использует zzz(8) для событий приостановки работы в оперативной памяти.

elogind

Служба elogind предоставляется пакетом elogind. По умолчанию elogind(8) прослушивает и обрабатывает события ACPI, связанные с активацией переключателя крышки и клавишами power, suspend и hibernate. Это будет конфликтовать со службой acpid, если она установлена и включена. Либо отключите acpid при включении elogind, либо настройте elogind так, чтобы он игнорировал события ACPI в файле logind.conf(5). Существует несколько параметров конфигурации, все из которых начинаются с ключевого слова Handle, которые следует установить в ignore, чтобы не мешать работе acpid.

Для запуска loginctl poweroff и loginctl reboot без root-прав, необходимо установить polkit.

Энергосбережение — tlp

Срок службы батареи ноутбука можно продлить с помощью tlp(8). Чтобы использовать его, установите пакет tlp и включите службу tlp. Подробности см. в документации TLP.

3.13. Сеть (Network)

Конфигурацию сети в Void Linux можно выполнить несколькими способами. При установке по умолчанию служба dhcpcd(8) включена.

Имена интерфейсов

В новых версиях udev(7) больше не используется традиционная схема именования интерфейсов Linux (eth0, eth1, wlan0, ...).

Это можно изменить (т.е. вернуть старую схему именования), добавив net.ifnames=0 в командную строку ядра.

Статическая конфигурация

Простой способ настроить статическую сеть при загрузке — добавить необходимые команды ip(8) в файл /etc/rc.local:

ip link set dev eth0 up
ip addr add 192.168.1.2/24 brd + dev eth0
ip route add default via 192.168.1.1

Мостовые интерфейсы

Чтобы настроить интерфейсы моста при загрузке, можно использовать файл /etc/rc.local для запуска команд ip(8) для добавления моста br0 и установки его в качестве ведущего для интерфейса eth0, например:

ip link add name br0 type bridge
ip link set eth0 master br0
ip link set eth0 up

dhcpcd

Чтобы запустить dhcpcd(8) на всех интерфейсах, включите службу dhcpcd.

Чтобы запустить dhcpcd только на определенном интерфейсе, скопируйте службу dhcpcd-eth0 и измените ее в соответствии с вашим интерфейсом:

$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
        link/ether ff:ff:ff:ff:ff:ff brd ff:ff:ff:f
# cp -R /etc/sv/dhcpcd-eth0 /etc/sv/dhcpcd-enp3s0
# sed -i 's/eth0/enp3s0/' /etc/sv/dhcpcd-enp3s0/run
# ln -s /etc/sv/dhcpcd-enp3s0 /var/service/

Дополнительную информацию о настройке dhcpcd см. в dhcpcd.conf(5).

Беспроводная связь (Wireless)

Прежде чем использовать беспроводную сеть, используйте rfkill(8), чтобы проверить, являются ли соответствующие интерфейсы программно или аппаратно заблокированными.

Void предоставляет несколько способов подключения к беспроводным сетям:

3.13.1. Брандмауэры (Firewalls)

iptables

По умолчанию пакет iptables устанавливается в базовую систему. Он предоставляет iptables(8)/ip6tables(8). Соответствующие службы используют файлы наборов правил /etc/iptables/iptables.rules и /etc/iptables/ip6tables.rules, которые должен создать системный администратор.

В каталоге /etc/iptables представлены два примера набора правил: empty.rules и simple_firewall.rules.

Применение правил при загрузке

Чтобы применить правила iptables на этапе runit 1, установите пакет runit-iptables. Это добавляет core-сервис, который восстанавливает наборы правил iptables.rules и ip6tables.rules.

Альтернативно, чтобы применить эти правила на этапе 2, добавьте следующее в /etc/rc.local:

if [ -e /etc/iptables/iptables.rules ]; then
  iptables-restore /etc/iptables/iptables.rules
fi

if [ -e /etc/iptables/ip6tables.rules ]; then
  ip6tables-restore /etc/iptables/ip6tables.rules
fi

После перезагрузки проверьте активные правила брандмауэра:

# iptables -L
# ip6tables -L
Применение правил во время выполнения

iptables поставляется с двумя службами runit iptables и ip6tables, чтобы быстро очистить или восстановить наборы правил iptables.rules и ip6tables.rules. После включения этих служб вы можете очистить наборы правил, отключив соответствующую службу, например:

# sv down iptables

и восстановить их, обновив соответствующую службу, например:

# sv up ip6tables

nftables

nftables заменяет iptables, ip6tables, arptables и ebtables (вместе называемые xtables). Вики-страница nftables описывает ее основные отличия от набора инструментов iptables.

Чтобы использовать nftables, установите пакет nftables, который предоставляет nft(8). Он также предоставляет iptables-translate(8)/ip6tables-translate(8) и iptables-restore-translate(8)/ip6tables-restore-translate(8), которые преобразуют правила iptables в правила nftables.

Применение правил при загрузке

Чтобы применить правила nftables на этапе runit 1, установите пакет runit-nftables. Он добавляет core-сервис, который восстанавливает набор правил в /etc/nftables.conf.

Применение правил во время выполнения

Пакет nftables предоставляет сервис nftables, использующий правила из /etc/nftables.conf. После включения службы nftables для загрузки правил запустите:

# sv up nftables

Чтобы очистить правила, запустите:

# sv down nftables

3.13.2. wpa_supplicant

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

wpa_supplicant(8) — это демон, который управляет беспроводными интерфейсами на основе файлов конфигурации wpa_supplicant.conf(5). Подробный обзор вариантов конфигурации, включая примеры, можно найти в /usr/share/examples/wpa_supplicant/wpa_supplicant.conf.

wpa_passphrase(8) помогает создавать общие ключи для использования в файлах конфигурации. wpa_cli(8) предоставляет интерфейс командной строки для управления демоном wpa_supplicant.

WPA-PSK

Чтобы использовать WPA-PSK, сгенерируйте общий ключ с помощью wpa_passphrase(8) и добавьте вывод в соответствующий файл wpa_supplicant.conf:

# wpa_passphrase <MYSSID> <passphrase> >> /etc/wpa_supplicant/wpa_supplicant-<device_name>.conf

WPA-EAP

WPA-EAP часто используется для входа в систему в учреждениях, особенно в eduroam. Здесь не используется PSK, но хэш пароля можно сгенерировать следующим образом:

$ echo -n <passphrase> | iconv -t utf16le | openssl md4

WEP

Для настройки WEP добавьте следующие строки в файл вашего устройства wpa-supplicant.conf:

network={
    ssid="MYSSID"
    key_mgmt=NONE
    wep_key0="YOUR AP WEP KEY"
    wep_tx_keyidx=0
    auth_alg=SHARED
}
Служба wpa_supplicant

Служба wpa_supplicant проверяет следующие параметры в /etc/sv/wpa_supplicant/conf:

Если файл conf не найден, служба ищет следующие файлы в /etc/wpa_supplicant:

Если вы удовлетворены своей конфигурацией, включите службу wpa_supplicant.

Использование wpa_cli

При использовании wpa_cli для управления wpa_supplicant из командной строки обязательно укажите, какой сетевой интерфейс использовать, с помощью параметра -i, например:

# wpa_cli -i wlp2s0

Невыполнение этого требования может привести к тому, что различные команды wpa_cli (например, scan и scan_results) не выдадут ожидаемый результат.

3.13.3. IWD

IWD (iNet Wireless Daemon) — это демон беспроводной связи для Linux, призванный заменить WPA supplicant.

Установка

Установите пакет iwd и включите службы dbus и iwd.

Использование

Клиент командной строки iwctl(1) можно использовать для добавления, удаления и настройки сетевых подключений. Команды можно передавать в качестве аргументов; при запуске без аргументов он обеспечивает интерактивный сеанс. Чтобы просмотреть доступные команды, запустите iwctl help или запустите iwctl и введите help в интерактивной строке.

По умолчанию только пользователь root и пользователи группы wheel имеют разрешение на работу с iwctl.

Конфигурация

Варианты конфигурации и примеры описаны ниже. Дополнительную информацию см. на соответствующих страницах руководства и в исходной документации.

Конфигурация демона

Основной файл конфигурации находится в /etc/iwd/main.conf. Если он не существует, вы можете его создать. Это описано в iwd.config(5).

Конфигурация сети

Конфигурация сети, включая примеры, описана в iwd.network(5). IWD хранит информацию об известных сетях и считывает информацию о предварительно подготовленных сетях из файлов конфигурации сети, расположенных в /var/lib/iwd; IWD отслеживает изменения в каталоге. Имена файлов конфигурации сети состоят из кодировки SSID, за которой следует .open, .psk или .8021x в зависимости от типа безопасности.

Например, базовый файл конфигурации для защищенной сети WPA2/PSK будет называться <ssid>.psk и содержать простой текстовый пароль:

[Security]
Passphrase=<password>

Поиск неисправностей

По умолчанию IWD будет создавать и уничтожать беспроводные интерфейсы (например wlan0), которыми он управляет. Это может помешать udevd, который может попытаться переименовать интерфейс, используя свои правила для постоянных имен сетевых интерфейсов. Следующие сообщения могут быть напечатаны на вашем экране как признак этого вмешательства:

[   39.441723] udevd[1100]: Error changing net interface name wlan0 to wlp59s0: Device or resource busy
[   39.442472] udevd[1100]: could not rename interface '3' from 'wlan0' to 'wlp59s0': Device or resource busy

Простое решение — запретить IWD манипулировать сетевыми интерфейсами таким образом, добавив UseDefaultInterface=true в раздел [General] файла /etc/iwd/main.conf.

Альтернативный подход — отключить использование постоянных имен сетевых интерфейсов с помощью udevd. Это можно сделать либо добавив net.ifnames=0 в командную строку ядра, либо создав символическую ссылку на /dev/null в /etc/udev/rules.d/80-net-name-slot.rules, чтобы замаскировать правило переименования. Этот альтернативный подход повлияет на именование всех сетевых устройств.

3.13.4. NetworkManager

NetworkManager(8) — это демон, который управляет подключениями к Ethernet, Wi-Fi и мобильным широкополосным сетям. Установите пакет NetworkManager для использования основных утилит NetworkManager.

Запуск NetworkManager

Прежде чем включать демон NetworkManager, отключите все другие службы управления сетью, такие как dhcpcd, wpa_supplicant или wicd. Все эти службы контролируют конфигурацию сетевого интерфейса и будут мешать работе NetworkManager.

Также убедитесь, что служба dbus включена и работает. NetworkManager использует dbus для предоставления клиентам сетевой информации и интерфейса управления, и без нее он не запустится.

Наконец, включите службу NetworkManager.

Настройка NetworkManager

Пользователи NetworkManager должны принадлежать к группе network.

Пакет NetworkManager включает в себя инструмент командной строки nmcli(1) и текстовый пользовательский интерфейс nmtui(1) для управления настройками сети.

Существует множество других интерфейсов NetworkManager, в том числе nm-applet для системных лотков, nm-plasma для KDE Plasma и встроенный инструмент настройки сети в GNOME.

Eduroam с NetworkManager

Eduroam — это услуга роуминга, обеспечивающая международный безопасный доступ в Интернет в университетах и других академических учреждениях. Более подробную информацию можно найти здесь.

Зависимости

Установите пакет python3-dbus.

Установка

Загрузите отсюда правильный установщик eduroam_cat для вашего учреждения и запустите его. Он предоставит пользовательский интерфейс, который поможет вам в этом процессе.

3.13.5. ConnMan

ConnMan(8) — это демон, управляющий сетевыми соединениями, компактный и использующий как можно меньше ресурсов. Пакет connman содержит основные утилиты для запуска ConnMan.

Запуск ConnMan

Чтобы включить демон ConnMan, сначала отключите все другие службы управления сетью, такие как dhcpcd, wpa_supplicant или wicd. Все эти службы контролируют конфигурацию сетевого интерфейса и мешают друг другу.

Наконец, включите службу connmand.

Настройка ConnMan

Интерфейс командной строки ConnMan

В пакет connman входит инструмент командной строки connmanctl(1) для управления настройками сети. Если вы не предоставляете никаких команд, connmanctl запускается как интерактивная оболочка.

Установление соединения с точкой доступа с помощью интерактивной оболочки connmanctl может выглядеть следующим образом:

# connmanctl
> enable wifi
> agent on
> scan wifi
> services
> connect wifi_<uniqueid>
> exit
Интерфейсные инструменты ConnMan

Существует множество других интерфейсов для ConnMan, в том числе connman-ui для системных лотков, connman-gtk для GTK, cmst для QT и connman-ncurses для пользовательского интерфейса на основе ncurses.

Предотвращение переопределения DNS с помощью ConnMan

Создайте /etc/sv/connmand/conf со следующим содержимым:

OPTS="--nodnsproxy"

3.14. Сетевые файловые системы (Network Filesystems)

NFS

Монтирование общего ресурса NFS

Чтобы смонтировать общий ресурс NFS, начните с установки пакетов nfs-utils и sv-netmount.

Прежде чем монтировать общий ресурс NFS, включите службы statd, rpcbind и netmount. Если сервер поддерживает nfs4, служба statd не требуется.

Чтобы смонтировать общий ресурс NFS:

# mount -t <mount_type> <host>:/path/to/sourcedir /path/to/destdir

<mount_type> должен быть nfs4, если сервер его поддерживает или nfs в противном случае. <host> может быть либо именем хоста, либо IP-адресом сервера.

Параметры монтирования можно найти в mount.nfs(8), а параметры размонтирования — в umount.nfs(8).

Например, чтобы подключить /volume на сервере по адресу 192.168.1.99 к существующему каталогу /mnt/volume в вашей локальной системе:

# mount -t nfs 192.168.1.99:/volume /mnt/volume

Чтобы каталог монтировался при загрузке системы, добавьте запись в fstab(5):

192.168.1.99:/volume /mnt/volume nfs rw,hard 0 0

Обратитесь к nfs(5) за информацией о доступных вариантах монтажа.

Настройка сервера (NFSv4, Kerberos отключен)

Чтобы запустить сервер NFS, начните с установки пакета nfs-utils.

Измените /etc/exports, чтобы добавить общий том:

/storage/foo    *.local(rw,no_subtree_check,no_root_squash)

Эта строка экспортирует каталог /storage/foo на любой хост в локальном домене с доступом для чтения и записи. Информацию об опциях no_subtree_check и no_root_squash, а также о доступных опциях в целом смотрите в exports(5).

Наконец, включите службы rpcbind, statd и nfs-server.

Это запустит ваш NFS-сервер. Чтобы проверить, работают ли общие ресурсы, используйте утилиту showmount(8) для проверки состояния сервера NFS:

# showmount -e localhost

Вы можете использовать nfs.conf(5) для настройки вашего сервера.

3.15. Управление сеансами и рабочими местами (Session and Seat Management)

Управление сеансами и рабочими местами не является обязательным для каждой установки, но его можно использовать для безопасного создания временных каталогов среды выполнения, предоставления доступа к аппаратным устройствам и возможностям работы с несколькими рабочими местами, а также для управления завершением работы системы.

D-Bus

D-Bus — это механизм IPC (межпроцессного взаимодействия), используемый программным обеспечением пользовательского пространства в Linux. D-Bus может предоставлять системную шину и/или сеансовую шину, причем последняя зависит от сеанса пользователя.

Обратите внимание, что некоторые программы предполагают наличие системной шины, а другие — наличие сеансовой шины.

elogind

elogind(8) управляет входами пользователей и питанием системы как отдельная версия systemd-logind. elogind предоставляет необходимые функции для большинства сред рабочего стола и композиторов Wayland. Это также может быть одним из механизмов для Xorg без root-прав.

Пожалуйста, прочтите раздел Управление питанием, чтобы узнать, что следует учитывать перед установкой elogind.

Чтобы использовать его функции, установите пакет elogind и убедитесь, что системный D-Bus включен. Возможно, вам придется выйти из системы и войти снова.

Если у вас возникли проблемы с elogind, включите его службу, поскольку ожидание активации D-Bus может привести к проблемам.

seatd

seatd(1) — это минимальный демон управления рабочими местами и альтернатива elogind, в первую очередь для композиторов wlroots.

Чтобы использовать его, установите пакет seatd и включите его службу. Если вы хотите, чтобы пользователи без полномочий root имели доступ к сеансу seatd, добавьте их в группу _seatd.

Обратите внимание: в отличие от elogind, seatd не делает ничего, кроме управления рабочими местами.

XDG_RUNTIME_DIR

XDG_RUNTIME_DIR — это переменная среды, определенная в спецификации базового каталога XDG. Ее значение задает путь к базовому каталогу, в котором программы должны хранить файлы времени выполнения, специфичные для пользователя.

Установите elogind в качестве менеджера сеансов для автоматической настройки XDG_RUNTIME_DIR.

Альтернативно, вручную установите переменную среды через оболочку. Обязательно создайте выделенный каталог пользователя и установите для него права доступа 700. Хорошее расположение по умолчанию — /run/user/$(id -u).

3.16. Графическая сессия (Graphical Session)

Для того, чтобы настроить графическую сессию, вам необходимы:

Вам также может понадобиться:

3.16.1. Графические драйверы

В этом разделе описаны базовые настройки графики в зависимости от аппаратной конфигурации вашей системы.

Содержание раздела

3.16.1.1. AMD или ATI

Для поддержки графического процессора AMD требуется пакет linux-firmware-amd. Если вы установили пакеты linux или linux-lts, он будет установлен как зависимость. Если вы установили пакет ядра для конкретной версии (например, linux5.4), возможно, потребуется установить linux-firmware-amd.

OpenGL

Установите пакет Mesa DRI, mesa-dri. Он уже включен в метапакет xorg, но необходим при установке Xorg через xorg-minimal или для запуска композитора Wayland.

Vulkan

Установите vulkan-loader, Khronos Vulkan Loader. Затем установите один или оба драйвера Mesa AMD Vulkan, mesa-vulkan-radeon; или драйвер GPUOpen AMD Vulkan, amdvlk.

Xorg

Установка метапакета xorg включит как xf86-video-amdgpu, так и, для более старого оборудования, xf86-video-ati. Если вы устанавливаете xorg-minimal, выберите один из этих пакетов драйверов Xorg, соответствующий вашему оборудованию. Драйвер amdgpu должен поддерживать карты, построенные на архитектуре AMD Graphics Core Next 1.2, представленной примерно в 2012 году.

Ускорение видео (Video acceleration)

Установите пакеты mesa-vaapi и mesa-vdpau.

3.16.1.2. Intel

Для поддержки графического процессора Intel требуется пакет linux-firmware-intel. Если вы установили пакеты linux или linux-lts, он будет установлен как зависимость. Если вы установили пакет ядра для конкретной версии (например, linux5.4), возможно, потребуется установить linux-firmware-intel.

OpenGL

OpenGL требует пакета Mesa DRI, mesa-dri. Он предоставляется метапакетом xorg, но его необходимо будет установить вручную при использовании пакета xorg-minimal или запуске композитора Wayland.

Vulkan

Установите пакеты драйверов Khronos Vulkan и Mesa Intel Vulkan соответственно vulkan-loader и mesa-vulkan-intel.

Ускорение видео (Video acceleration)

Установите метапакет intel-video-accel.

При этом будут установлены все драйверы Intel VA-API. intel-media-driver будет использоваться по умолчанию, но этот выбор можно переопределить во время выполнения с помощью переменной среды LIBVA_DRIVER_NAME:

Пакет драйверов Поддерживаемое поколение GPU Явный выбор
libva-intel-driver до Coffee Lake LIBVA_DRIVER_NAME=i965
intel-media-driver от Broadwell LIBVA_DRIVER_NAME=iHD

Поиск неисправностей

Ядра, упакованные Void, настроены с помощью CONFIG_INTEL_IOMMU_DEFAULT_ON=y, что может привести к проблемам с их графическими драйверами, как сообщается в документации ядра. Чтобы это исправить, необходимо отключить IOMMU для встроенного графического процессора. Это можно сделать, добавив intel_iommu=igfx_off в командную строку ядра. Ожидается, что эта проблема возникнет на внутренних графических процессорах поколения Broadwell. Если у вас есть другой внутренний GPU и ваши проблемы устраняются с помощью этой опции ядра, вам следует сообщить об ошибке разработчикам ядра.

Для более новых чипсетов Intel драйверы DDX могут мешать правильной работе. Это характеризуется неработающим графическим ускорением и общей графической нестабильностью. В этом случае попробуйте удалить все пакеты xf86-video-*.

3.16.1.3. NVIDIA

nouveau (драйвер с открытым исходным кодом)

Это драйвер, созданный методом реверс-инжиниринга, в основном разработанный сообществом, с некоторой документацией, предоставленной Nvidia. Он имеет тенденцию хорошо работать на старом оборудовании и необходим для использования значительной части доступных композиторов Wayland.

На момент написания видеокарты, начиная с Maxwell второго поколения (GTX 9xx), не могут работать в полную силу с nouveau. Это связано с тем, что в коллекции linux-firmware отсутствуют подписанные пакеты прошивки, необходимые для разгона этих карт за пределы их загрузочных частот.

Для использования nouveauс с Wayland вам понадобится только пакет mesa-dri, который предоставляет ускоренный драйвер OpenGL. В X11 вам также понадобится соответствующий драйвер Xorg. Вы можете установить xf86-video-nouveau или использовать универсальный драйвер modesetting, входящий в комплект Xorg (это единственный вариант для плат ARM на базе Tegra). Первый может использовать пути 2D-ускорения, специфичные для графического процессора, что в первую очередь полезно на старых картах со специализированным оборудованием с фиксированными функциями (драйвер modesetting будет ускорять 2D с использованием OpenGL через GLAMOR). Если вы сомневаетесь, лучше сначала попробовать xf86-video-nouveau.

Примечание: xf86-video-nouveau обычно устанавливается по умолчанию, если вы используете метапакет xorg. Если вы используете xorg-minimal, вам нужно будет установить его вручную, напрямую или через xorg-video-drivers.

nvidia (проприетарный драйвер)

Проприетарные драйверы доступны в репозитории nonfree.

Проверьте, принадлежит ли ваша видеокарта к устаревшей ветке. Если это не так, установите пакет nvidia. В противном случае вам следует установить соответствующий устаревший драйвер nvidia470 или nvidia390. Старый устаревший драйвер nvidia340 больше недоступен, и пользователям рекомендуется перейти на nouveau.

Бренд Тип Модель Пакет драйверов
NVIDIA Проприетарный 800+ nvidia
NVIDIA Проприетарный 600/700 nvidia470
NVIDIA Проприетарный Серия 400/500 nvidia390

Проприетарный драйвер интегрируется в ядро через DKMS.

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

Поддержка 32-битных программ (только glibc)

Для запуска 32-битных программ с поддержкой драйверов необходимо установить дополнительные пакеты.

Если вы используете драйвер nouveau, установите пакет mesa-dri-32bit.

Если вы используете драйвер nvidia, установите пакет nvidia<x>-libs-32bit. <x> представляет устаревшую версию драйвера (470 или 390) или может оставаться пустым для основного драйвера.

Переход с nvidia на nouveau

Удаление nvidia

Чтобы вернуться к драйверу nouveau, установите драйвер nouveau (если он еще не был установлен), затем удалите пакет nvidia, nvidia470 или пакет nvidia390, в зависимости от ситуации.

Если вы использовали устаревший драйвер nvidia340, вам может потребоваться установить пакет libglvnd после удаления пакета nvidia340.

Сохранение обоих драйверов

Можно использовать драйвер nouveau, если при этом установлен драйвер nvidia. Для этого удалите черный список nouveau в /etc/modprobe.d/nouveau_blacklist.conf, /usr/lib/modprobe.d/nvidia.conf или /usr/lib/modprobe.d/nvidia-dkms.conf, закомментировав это:

#blacklist nouveau

Для Xorg укажите, что он должен загружать драйвер nouveau, а не драйвер nvidia, создав файл /etc/X11/xorg.conf.d/20-nouveau.conf со следующим содержимым:

Section "Device"
    Identifier "Nvidia card"
    Driver "nouveau"
EndSection

Возможно, вам придется перезагрузить систему, чтобы эти изменения вступили в силу.

3.16.1.4. NVIDIA Optimus

NVIDIA Optimus — это конфигурация двойной графики, встречающаяся на ноутбуках и состоящая из встроенного графического процессора Intel и дискретного графического процессора NVIDIA.

Существуют различные способы использования преимуществ GPU NVIDIA, которые зависят от версии драйвера, поддерживаемой вашим оборудованием.

Чтобы определить правильный драйвер для установки, недостаточно просмотреть список «Supported Products» на веб-сайте NVIDIA, поскольку их работа в конфигурации Optimus не гарантируется. Поэтому единственный способ — попробовать установить последнюю версию nvidia, перезагрузиться и просмотреть журнал ядра. Если ваше устройство не поддерживается, вы увидите такое сообщение:

NVRM: The NVIDIA GPU xxxx:xx:xx.x (PCI ID: xxxx:xxxx)
NVRM: installed in this system is not supported by the xxx.xx
NVRM: NVIDIA Linux driver release.  Please see 'Appendix
NVRM: A — Supported NVIDIA GPU Products' in this release's
NVRM: README, available on the Linux driver download page
NVRM: at www.nvidia.com.

Это означает, что вам придется удалить nvidia и установить устаревшую версию nvidia390.

Краткое изложение методов, поддерживаемых Void, которые являются взаимоисключающими:

PRIME Render Offload

Offloading Graphics Display with RandR 1.4

Bumblebee

Nouveau PRIME

Вы можете проверить используемый в данный момент GPU, выполнив поиск renderer string в выводе команды glxinfo. Для этого необходимо установить пакет glxinfo. Для первых двух приведенных ниже альтернатив также можно проверить, что процесс использует GPU NVIDIA, проверив выходные данные nvidia-smi.

PRIME Render Offload

В этом методе переключение графического процессора осуществляется путем установки переменных среды при выполнении приложения, которое будет отображаться на графическом процессоре NVIDIA. Сценарий-оболочка prime-run доступен из пакета nvidia и может использоваться, как показано ниже:

$ prime-run <application>

Для получения дополнительной информации см. README NVIDIA.

Bumblebee

Включите службу bumblebeed и добавьте пользователя в группу bumblebee. Для вступления в силу требуется повторный вход.

Запустите приложение для рендеринга на графическом процессоре NVIDIA с помощью optirun:

$ optirun <application>

Nouveau PRIME

Этот метод использует драйвер nouveau с открытым исходным кодом. Если установлены драйверы NVIDIA, необходимо настроить систему на использование nouveau.

Установите DRI_PRIME=1 для запуска приложения на графическом процессоре NVIDIA:

$ DRI_PRIME=1 <application>

3.16.2. Xorg

В этом разделе подробно описана ручная установка и настройка дисплейного сервера Xorg, а также общих сопутствующих служб и утилит. Если вы просто хотите установить полную среду рабочего стола, рекомендуется попробовать образ xfce.

Установка

Void предоставляет комплексный пакет xorg, который устанавливает сервер и все бесплатные видеодрайверы, драйверы ввода, шрифты и базовые приложения. Этот пакет является безопасным вариантом и подходит для большинства систем, не требующих проприетарных видеодрайверов.

Если вы хотите выбрать только те пакеты, которые вам нужны, пакет xorg-minimal содержит только базовый сервер xorg. Если вы устанавливаете только xorg-minimal, вам, вероятно, потребуется установить пакет шрифтов (например, xorg-fonts), эмулятор терминала (например, xterm) и оконный менеджер, чтобы иметь работоспособную графическую систему.

Видеодрайверы

Void предоставляет как открытые, так и проприетарные (non-free) видеодрайверы.

Драйверы с открытым исходным кодом

Xorg может использовать две категории драйверов с открытым исходным кодом: DDX или modesetting.

DDX

Драйверы DDX устанавливаются вместе с пакетом xorg по умолчанию или могут быть установлены отдельно, если был установлен пакет xorg-minimal. Они предоставляются пакетами xf86-video-*.

Для расширенной настройки см. страницу руководства, соответствующую имени поставщика, например intel(4).

Modesetting

Для modesetting требуется пакет mesa-dri, а не дополнительный пакет драйверов конкретного поставщика.

Xorg по умолчанию использует драйверы DDX, если они присутствуют, поэтому в этом случае настройка режима должна быть выбрана явно: см. Принудительное использование драйвера modesetting.

Для расширенной настройки см. modesetting(4).

Проприетарные драйверы

Void также предоставляет проприетарные драйверы NVIDIA, которые доступны в репозитории nonfree.

Драйверы ввода

Для Xorg доступен ряд драйверов ввода. Если xorg-minimal был установлен и устройство не отвечает или ведет себя неожиданно, проблему может решить другой драйвер. Эти драйверы могут захватывать все: от кнопок питания до мышей и клавиатур. Они предоставляются пакетами xf86-input-*.

Конфигурация Xorg

Хотя Xorg обычно автоматически определяет драйверы и настройка не требуется, конфигурация для конкретного драйвера клавиатуры может выглядеть примерно как файл /etc/X11/xorg.conf.d/30-keyboard.conf с содержимым:

Section "InputClass"
  Identifier "keyboard-all"
  Driver "evdev"
  MatchIsKeyboard "on"
EndSection
Принудительное использование драйвера modesetting

Создайте файл /etc/X11/xorg.conf.d/10-modesetting.conf:

Section "Device"
    Identifier "GPU0"
    Driver "modesetting"
EndSection

и перезапустите Xorg. Убедитесь, что конфигурация была подобрана верно с помощью:

$ grep -E -m1 '\(II\) modeset\([0-9]+\):' /var/log/Xorg.0.log

Если есть совпадение, используется modesetting.

Запуск сессий X

startx

Пакет xinit предоставляет сценарий startx(1) в качестве интерфейса к xinit(1), который можно использовать для запуска X-сессий из консоли. Например, чтобы запустить i3(1), отредактируйте ~/.xinitrc, чтобы в последней строке содержался exec /bin/i3.

Чтобы запускать произвольные программы вместе с X-сессией, добавьте их в ~/.xinitrc перед последней строкой. Например, чтобы запустить xscreensaver(1) перед запуском i3, добавьте xscreensaver & перед последней строкой.

Файл ~/.xinitrc, который запускает xscreensaver и i3, показан ниже:

xscreensaver &
exec /bin/i3

Затем вызовите startx, чтобы начать сеанс.

Если требуется сессионная шина D-Bus, вы можете запустить ее вручную.

Менеджеры дисплея

Менеджеры дисплея (DM) предоставляют графический пользовательский интерфейс входа в систему. В репозиториях Void доступен ряд DM, в том числе gdm (GNOME DM), sddm (KDE DM) и lightdm. При настройке менеджера дисплея обязательно протестируйте службу перед ее включением.

3.16.3. Wayland

В этом разделе подробно описана ручная установка и настройка композиторов Wayland и связанных с ними сервисов и утилит.

Установка

В отличие от Xorg, реализации Wayland объединяют дисплейный сервер, оконный менеджер (WM) и композитор в одном приложении.

Среды рабочего стола (Desktop Environments)

GNOME, KDE Plasma и Enlightenment имеют сеансы Wayland. GNOME по умолчанию использует сеанс Wayland. При использовании этих сред рабочего стола приложения, созданные с помощью GTK+, автоматически выбирают серверную часть Wayland, в то время как приложениям Qt5 и EFL может потребоваться установка некоторых переменных среды, если они используются вне KDE или Enlightenment соответственно.

Автономные композиторы

В настоящее время Void Linux включает в себя следующие композиторы Wayland:

Видеодрайверы

И GNOME, и KDE Plasma имеют серверную часть EGLStreams для Wayland, что означает, что они могут использовать проприетарные драйверы NVIDIA. Большинству других композиторов Wayland требуются драйверы, реализующие интерфейс GBM. Основной драйвер для этой цели предоставляется пакетом mesa-dri. В разделе Графические драйверы есть более подробная информация о настройке графики в различных системах.

Управление рабочими местами

Компоновщикам Wayland требуется какой-то способ управления отображением видео и доступа к устройствам ввода. В системах Void для этого требуется служба менеджера рабочих мест, которая может быть либо elogind, либо seatd. Их включение описано в разделе Управление сеансами и рабочими местами.

Нативные приложения

Приложения на основе Qt5 требуют установки пакета qt5-wayland и установки переменной среды QT_QPA_PLATFORM=wayland-egl, чтобы включить серверную часть Wayland. Некоторые специальные приложения KDE также требуют установки пакета kwayland. Приложения на основе EFL требуют установки переменной среды ELM_DISPLAY=wl, и без нее могут возникнуть проблемы из-за неправильной поддержки XWayland. Приложения на основе SDL требуют установки переменной среды SDL_VIDEODRIVER=wayland. Приложения на основе GTK+ должны автоматически использовать серверную часть Wayland. Информацию о других инструментах можно найти в документации Wayland.

Медиа-приложения, такие как mpv(1), vlc(1) и imv изначально работают на Wayland.

Веб-браузеры

Mozilla Firefox поставляется с серверной частью Wayland, которая по умолчанию отключена. Чтобы включить серверную часть Wayland, либо установите переменную среды MOZ_ENABLE_WAYLAND=1 перед запуском firefox, либо используйте предоставленный скрипт firefox-wayland.

Браузеры, основанные на GTK+ или Qt5, такие как Midori и qutebrowser(1), должны работать на Wayland изначально.

Запуск X-приложений внутри Wayland

Если приложение не поддерживает Wayland, его все равно можно использовать в контексте Wayland. XWayland — это X-сервер, который устраняет этот пробел для большинства композиторов Wayland и устанавливается в качестве зависимости для большинства из них. Его пакет — xorg-server-xwayland. Для Weston правильный пакет — weston-xwayland.

Конфигурация

Библиотеке Wayland требуется переменная среды XDG_RUNTIME_DIR, чтобы определить каталог для сокета Wayland.

Также возможно, что некоторые приложения каким-то образом используют переменную среды XDG_SESSION_TYPE, поэтому вам необходимо установить для нее значение wayland.

3.16.4. Шрифты

Чтобы настроить отображение шрифтов в графическом сеансе, вы можете использовать конфигурации, представленные в /usr/share/fontconfig/conf.avail/. Для этого создайте символическую ссылку на соответствующий файл .conf в /etc/fonts/conf.d/, затем используйте xbps-reconfigure(1) для перенастройки пакета fontconfig.

Например, чтобы отключить использование растровых шрифтов:

# ln -s /usr/share/fontconfig/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d/
# xbps-reconfigure -f fontconfig

Используйте fc-conflist(1), чтобы просмотреть действующие конфигурации.

3.16.5. Иконки

GTK

По умолчанию приложения на базе GTK пытаются использовать тему значков Adwaita для значков приложений. Следовательно, установка пакета gtk+3 также приведет к установке пакета adwaita-icon-theme. Если вы хотите использовать другую тему, установите соответствующий пакет, затем укажите тему в /etc/gtk-3.0/settings.ini или ~/.config/gtk-3.0/settings.ini. adwaita-icon-theme можно удалить после игнорирования пакета.

За информацией о том, как указать другую тему значков GTK в settings.ini, обратитесь к документации GtkSettings, в частности к свойству gtk-icon-theme-name.

3.16.6. XDG Desktop Portals

Некоторые приложения, в том числе Flatpak, используют порталы XDG Desktop Portals для предоставления доступа к различным системным интерфейсам, включая диалоговые окна открытия и сохранения файлов, буфер обмена, скринкаст, открытие URL-адресов и многое другое.

Установка

Для XDG Desktop порталов требуется пользовательская сеансовая шина D-Bus. Установите xdg-desktop-portal и один или несколько бэкэндов:

Бэкэнд Примечания
xdg-desktop-portal-gnome Предоставляет наиболее распространенные и специфичные для GNOME интерфейсы (GTK+ UI).
xdg-desktop-portal-gtk Предоставляет наиболее распространенные интерфейсы (GTK+ UI).
xdg-desktop-portal-kde Предоставляет наиболее распространенные и специфичные для KDE интерфейсы (пользовательский интерфейс Qt/KF5).
xdg-desktop-portal-lxqt Предоставляет только средство выбора файлов (на основе libfm-qt)
io.elementary.files Предоставляет только выбор файла
xdg-desktop-portal-wlr Предоставляет только интерфейс скриншотов и скринкастов для композиторов wlroots.

Если вы не уверены, что выбрать, xdg-desktop-portal-gtk — это хороший выбор по умолчанию.

Конфигурация

В большинстве случаев конфигурации по умолчанию, расположенной по адресу /usr/share/xdg-desktop-portal/portals.conf, должно быть достаточно. При необходимости эту конфигурацию можно переопределить для определенных сред рабочего стола и интерфейсов портала, создав $XDG_CURRENT_DESKTOP-portals.conf или portals.conf на уровне системы или пользователя, как описано в portals.conf(5).

3.16.7. GNOME

Предварительная установка

GNOME поддерживает сеансы X и Wayland. Следуйте разделам Wayland или Xorg, чтобы настроить предпочитаемую среду.

Установите пакет dbus, убедитесь, что служба dbus включена, и перезагрузитесь, чтобы изменения вступили в силу.

Установка

Установите пакет gnome для среды GNOME, который включает базовый рабочий стол GNOME и подмножество приложений GNOME. Дополнительные приложения доступны через пакет gnome-apps.

Минимальную среду GNOME можно создать, установив пакет gnome-core. Однако обратите внимание, что не все функции GNOME могут присутствовать или работать.

Если вам требуется поддержка ZeroConf, установите пакет avahi и включите службу avahi-daemon.

Запуск GNOME

Пакет gdm предоставляет службу gdm дисплейного менеджера GNOME; протестируйте службу перед ее включением. По умолчанию GDM предоставляет сеанс Wayland через оконный менеджер mutter, но вместо этого можно выбрать сеанс X.

3.16.8. KDE

Установка

Установите пакет kde5 и, при необходимости, пакет kde5-baseapps.

Чтобы использовать виджет «Networks», включите службы dbus и NetworkManager.

При установке пакета kde5 также устанавливается пакет sddm, который предоставляет службу sddm для Simple Desktop Display Manager. Эта служба зависит от включенной службы dbus; протестируйте службу перед ее включением. Если вы не собираетесь запускать SDDM через удаленный X-сервер, вам необходимо установить либо пакет xorg-minimal, либо пакет xorg. По умолчанию SDDM запускает сеанс Plasma на основе X, но вместо этого вы можете запросить сеанс Plasma на основе Wayland.

Если вы хотите запустить сеанс на основе X из консоли, используйте startx для запуска startplasma-x11. Для сеанса на основе Wayland запустите startplasma-wayland напрямую.

Dolphin

Dolphin — это файловый менеджер по умолчанию в среде рабочего стола KDE. Его можно установить отдельно, установив пакет dolphin, или как часть метапакета kde5-baseapps.

Предварительный просмотр миниатюр

Чтобы включить предварительный просмотр файлов миниатюр, установите пакет kdegraphics-thumbnailers. Если вам нужны миниатюры видео, пакет ffmpegthumbs также необходим. Включите предварительный просмотр в «Control» -> «Configure Dolphin» -> «General» -> «Previews», установив соответствующие флажки. Предварительный просмотр файлов будет отображаться для выбранных типов файлов после нажатия кнопки «Preview» на панели инструментов Dolphin.

3.17. Мультимедиа

Настройка звука

Чтобы настроить звук в вашей системе Void Linux, вам нужно решить, хотите ли вы использовать PulseAudio, PipeWire или просто ALSA.

Некоторым приложениям требуется PulseAudio, особенно программам с закрытым исходным кодом, но PipeWire предоставляет замену PulseAudio.

Если elogind не включен, необходимо находиться в группе audio, чтобы иметь доступ к аудиоустройствам.

3.17.1 ALSA

Чтобы использовать ALSA, установите пакет alsa-utils и убедитесь, что ваш пользователь является членом группы audio.

Пакет alsa-utils предоставляет службу alsa. Если эта служба включена, она сохраняет и восстанавливает состояние ALSA (например, уровень громкости) при выключении и загрузке соответственно.

Чтобы разрешить использование программного обеспечения, требующего PulseAudio, установите пакет apulse. apulse предоставляет часть интерфейса PulseAudio, ожидаемого приложениями, преобразуя вызовы этого интерфейса в вызовы ALSA. Для получения подробной информации об использовании apulse обратитесь к README проекта.

Конфигурация

Звуковую карту по умолчанию можно указать через файлы конфигурации ALSA или через параметры модуля ядра.

Чтобы получить информацию о порядке загрузки модулей звуковой карты:

$ cat /proc/asound/modules
 0 snd_hda_intel
 1 snd_hda_intel
 2 snd_usb_audio

Чтобы установить другую карту в качестве карты по умолчанию, отредактируйте /etc/asound.conf или файл конфигурации каждого пользователя ~/.asoundrc:

defaults.ctl.card 2;
defaults.pcm.card 2;

или укажите порядок модулей звуковой карты в /etc/modprobe.d/alsa.conf:

options snd_usb_audio index=0

Dmix

Плагин ALSA dmix позволяет воспроизводить звук из нескольких источников. dmix включен по умолчанию для звуковых карт, которые не поддерживают аппаратное микширование. Чтобы включить его для цифрового вывода, отредактируйте /etc/asound.conf:

pcm.dsp {
    type plug
    slave.pcm "dmix"
}

3.17.2 PipeWire

PipeWire — современный сервер для обработки аудио (и видео) потоков. Он очень гибок и может взаимодействовать с приложениями, разработанными для аудиосистем ALSA, PulseAudio и JACK. Он также предназначен для хорошей работы с приложениями Flatpak и предоставляет метод создания снимков экрана и совместного использования экрана на Wayland через xdg-desktop-portal.

Предварительные условия

PipeWire требует активной пользовательской сеансовой шины D-Bus. Если ваша среда рабочего стола, оконный менеджер или композитор Wayland настроены на это, дальнейшая настройка не требуется. В противном случае, возможно, потребуется запустить среду рабочего стола, оконный менеджер или композитор Wayland с помощью dbus-run-session(1).

PipeWire также требует, чтобы переменная среды XDG_RUNTIME_DIR была определена в вашей среде для правильной работы.

Если вы не используете elogind, необходимо быть в группе audio для доступа к аудиоустройствам и группе video для доступа к видеоустройствам.

Базовая настройка

Чтобы использовать PipeWire, установите пакет pipewire. При этом также будет установлен менеджер сеансов PipeWire wireplumber.

Управление сеансами

В PipeWire менеджер сеансов берет на себя ответственность за соединение источников и приемников мультимедиа, а также за соблюдение политики маршрутизации. Без менеджера сеансов PipeWire не будет работать.

Если вы установили более раннюю версию пакета Void pipewire, обязательно обновите свою систему, чтобы исключить любую устаревшую конфигурацию системы, которая может попытаться запустить pipewire-media-session, исходный менеджер сеансов PipeWire. Пользователи, которые ранее изменили конфигурацию системы для использования wireplumber, например, поместив собственный файл pipewire.conf в /etc/pipewire или ${XDG_CONFIG_HOME}/pipewire, возможно, вы захотите согласовать эти переопределения с /usr/share/pipewire/pipewire.conf, установленным самым последним пакетом pipewire. Если единственной целью предыдущего переопределения было отключение pipewire-media-session, удаления пользовательской конфигурации может быть достаточно.

В настоящее время доступен только один менеджер сеансов: WirePlumber. Чтобы настроить PipeWire для использования этого диспетчера сеансов и обеспечить правильный порядок запуска, PipeWire должен быть настроен на прямой запуск диспетчера сеансов. Это можно сделать, запустив

# mkdir -p /etc/pipewire/pipewire.conf.d
# ln -s /usr/share/examples/wireplumber/10-wireplumber.conf /etc/pipewire/pipewire.conf.d/

для общесистемной конфигурации или

$ : "${XDG_CONFIG_HOME:=${HOME}/.config}"
$ mkdir -p "${XDG_CONFIG_HOME}/pipewire/pipewire.conf.d"
$ ln -s /usr/share/examples/wireplumber/10-wireplumber.conf "${XDG_CONFIG_HOME}/pipewire/pipewire.conf.d/"

для настройки для каждого пользователя.

Интерфейс PulseAudio

Интерфейс PulseAudio не является обязательным, но настоятельно рекомендуется. Большинство приложений не могут напрямую обращаться к PipeWire, а вместо этого обращаются к интерфейсу PipeWire PulseAudio.

Если pulseaudio установлен, удалите его и убедитесь, что pulseaudio не запущен.

Измените конфигурацию PipeWire для запуска pipewire-pulse:

# mkdir -p /etc/pipewire/pipewire.conf.d
# ln -s /usr/share/examples/pipewire/20-pipewire-pulse.conf /etc/pipewire/pipewire.conf.d/

для системных конфигураций или

$ : "${XDG_CONFIG_HOME:=${HOME}/.config}"
$ mkdir -p "${XDG_CONFIG_HOME}/pipewire/pipewire.conf.d"
$ ln -s /usr/share/examples/pipewire/20-pipewire-pulse.conf "${XDG_CONFIG_HOME}/pipewire/pipewire.conf.d/"

для индивидуальных конфигураций.

Тестирование

pipewire(1) должен быть запущен от имени вашего пользователя. Чтобы проверить работу PipeWire, запустите команду pipewire в эмуляторе терминала во время сеанса:

$ pipewire

Запуска pipewire должно быть достаточно для установления рабочего сеанса PipeWire, который используется wireplumber для управления сеансами.

Статус WirePlumber можно проверить с помощью:

$ wpctl status
PipeWire 'pipewire-0' [0.3.82, ...]
[...]

Если интерфейс PulseAudio был настроен, используйте pactl(1) (предоставляется пакетом pulseaudio-utils), чтобы убедиться, что он работает правильно:

$ pactl info
[...]
Server Name: PulseAudio (on PipeWire 0.3.82)
[...]
Автоматический запуск

Как только pipewire заработает должным образом, его можно настроить на запуск при запуске графического сеанса. Этого можно добиться несколькими способами:

Дополнительная настройка

Интерфейсы командной строки и терминала

В пакет pipewire включено множество инструментов для взаимодействия с PipeWire, включая pw-cli(1), pw-top(1) и pw-cat(1).

wpctl может использоваться для управления менеджером сеансов WirePlumber.

При использовании интерфейса PulseAudio также можно использовать инструменты настройки PulseAudio, такие как pactl (из pulseaudio-utils) и ncpamixer.

Графические интерфейсы

qpwgraph и helvum предоставляют интерфейс в стиле узлов и графиков для подключения приложений и устройств.

При использовании интерфейса PulseAudio для настройки PipeWire также можно использовать инструменты настройки PulseAudio, такие как pavucontrol, pavucontrol-qt, а также виджеты и апплеты, интегрированные во многие среды рабочего стола.

Bluetooth-аудио

Установите пакет libspa-bluetooth.

Интеграция с ALSA

Установите alsa-pipewire, затем включите устройство PipeWire ALSA и установите его по умолчанию:

# mkdir -p /etc/alsa/conf.d
# ln -s /usr/share/alsa/alsa.conf.d/50-pipewire.conf /etc/alsa/conf.d
# ln -s /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d
Интерфейс JACK

Установите libjack-pipewire.

Используйте pw-jack(1) для запуска клиентов JACK вручную:

$ pw-jack <application>

Альтернативно можно переопределить библиотеку, предоставленную libjack (см. ld.so(8)). Следующий подход будет работать в системах на базе glibc:

# echo "/usr/lib/pipewire-0.3/jack" > /etc/ld.so.conf.d/pipewire-jack.conf
# ldconfig

затем перезагрузитесь.

Поиск неисправностей

Распространенные ошибки
[E][...] mod.rt       | [     module-rt.c:  262 pw_rtkit_bus_get()] Failed to connect to system bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory

Это указывает на то, что системная D-Bus не запущена. Включите службу dbus.

[E][...] mod.rt       | [     module-rt.c:  262 pw_rtkit_bus_get()] Failed to connect to session bus: D-Bus library appears to be incorrectly set up: see the manual page for dbus-uuidgen to correct this issue. (Failed to open "/var/lib/dbus/machine-id": No such file or directory; Failed to open "/etc/machine-id": No such file or directory)

Это указывает на то, что пользовательский сеанс D-Bus не запущен.

[E][...] mod.protocol-native | [module-protocol-:  710 init_socket_name()] server 0x55e09658e9d0: name pipewire-0 is not an absolute path and no runtime dir found. Set one of PIPEWIRE_RUNTIME_DIR, XDG_RUNTIME_DIR or USERPROFILE in the environment

Это указывает на то, что XDG_RUNTIME_DIR настроен неправильно.

Обнаружен только «пустой» вывод

Если менеджер сеансов (например wireplumber) не запущен, настройте его и перезапустите PipeWire.

Если менеджер сеансов запущен, проверьте, входит ли ваш пользователь в группы audio и video. Если вы не используете elogind, это необходимо для доступа PipeWire к устройствам.

3.17.3. PulseAudio

В зависимости от того, какие приложения вы используете, вам может потребоваться предоставить PulseAudio сеансовую шину D-BUS (например, через dbus-run-session) или системную шину D-BUS (через службу dbus).

Для приложений, которые используют ALSA напрямую и не поддерживают PulseAudio, пакет alsa-plugins-pulseaudio может заставить их использовать PulseAudio через ALSA.

PulseAudio автоматически запустится при необходимости. Если он не запускается автоматически, его можно запустить вручную, вызвав pulseaudio(1) из терминала следующим образом:

$ pulseaudio --daemonize=no --exit-idle-time=-1

С другой стороны, PulseAudio также может автоматически активироваться, когда это нежелательно. Чтобы запретить такое поведение, для директивы autospawn из pulse-client.conf(5) можно установить значение no.

Существует несколько способов предоставить PulseAudio доступ к аудиоустройствам. Самый простой — добавить пользователя в группу audio. Альтернативно вы можете использовать менеджер сеансов, например elogind.

3.18. Bluetooth

Убедитесь, что контроллер Bluetooth не заблокирован. Используйте rfkill для проверки наличия каких-либо блокировок и удаления программных блокировок. Если имеется аппаратная блокировка, скорее всего, существует либо физический аппаратный переключатель, либо опция в BIOS для включения контроллера Bluetooth.

$ rfkill
ID TYPE     DEVICE      SOFT      HARD
0 wlan      phy0   unblocked unblocked
1 bluetooth hci0     blocked unblocked

# rfkill unblock bluetooth

Установка

Установите пакет bluez и включите службы bluetoothd и dbus. Затем добавьте вашего пользователя в группу bluetooth и перезапустите службу dbus или просто перезагрузите систему. Обратите внимание, что перезапуск службы dbus может привести к остановке процессов, использующих ее.

Для использования аудиоустройства, такого как беспроводная колонка или гарнитура, пользователям ALSA необходимо установить пакет bluez-alsa. Пользователям PulseAudio не требуется никакого дополнительного программного обеспечения. Пользователям PipeWire нужен libspa-bluetooth.

Использование

Управляйте подключениями Bluetooth и контроллерами с помощью bluetoothctl, который предоставляет интерфейс командной строки, а также принимает команды на стандартном вводе.

Обратитесь к Arch Wiki за примером того, как выполнить сопряжение устройства.

Конфигурация

Основным файлом конфигурации является /etc/bluetooth/main.conf.

3.19. TeX Live

В Void пакет texlive-bin обеспечивает базовую установку TeX, включая программу tlmgr. Используйте tlmgr для установки пакетов TeX и коллекций пакетов из зеркал CTAN. Установите пакет gnupg, чтобы позволить tlmgr проверять пакеты TeX.

Пакет texlive-bin содержит последнюю версию TeX Live; однако также доступны более ранние версии, такие как texlive2018-bin.

Также доступны пакеты texlive и texlive-*, которые предоставляют пакеты TeX напрямую через xbps. Пакеты TeX, установленные через эти пакеты, не могут взаимодействовать с пакетами TeX, установленными непосредственно из CTAN (через tlmgr). Например: pdflatex из texlive-pdflatex не может использоваться для компиляции документа TeX, в котором используется пакет, установленный через tlmgr; для этого потребуется tlmgr install pdflatex.

Настройка TeX Live

После установки TeX Live обновите значение PATH:

$ source /etc/profile

Проверьте, что /opt/texlive/<year>/bin/x86_64-linux (или /opt/texlive/<year>/bin/i386-linux) находится в вашем PATH:

$ echo $PATH

При необходимости измените глобальный формат бумаги по умолчанию:

# tlmgr paper <letter|a4>

Установка/обновление пакетов TeX

Для установки всех доступных пакетов:

# tlmgr install scheme-full

Для установки определенных пакетов вы можете установить коллекцию(и), включающую их. Чтобы составить список доступных коллекций:

$ tlmgr info collections

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

$ tlmgr info --list collection-<name>

Чтобы установить коллекцию:

# tlmgr install collection-<name>

Чтобы установить автономный пакет, сначала проверьте, существует ли этот пакет:

$ tlmgr search --global <package>

а затем установите его:

# tlmgr install <package>

Чтобы найти пакет, предоставляющий определенный файл (например, шрифт):

$ tlmgr search --file <filename> --global

Как удалить пакет или коллекцию:

# tlmgr remove <package>

Для обновления установленных пакетов:

# tlmgr update --all

Для получения полного описания ознакомьтесь:

https://www.tug.org/texlive/doc/tlmgr.html

3.20. Внешние приложения

Языки программирования

В репозиториях Void имеется ряд пакетов Python и Lua. Если возможно, установите пакеты из репозиториев Void или рассмотрите возможность упаковки необходимой вам библиотеки или приложения. Упаковка вашего приложения упрощает обслуживание системы и может принести пользу другим пользователям Void Linux, поэтому подумайте о том, чтобы отправить для него pull request. Инструкции по добавлению можно найти здесь.

Чтобы уменьшить размер пакетов, в Void есть отдельные devel пакеты для заголовочных файлов и инструментов разработки. Если вы устанавливаете библиотеку или приложение через диспетчер пакетов языка (например, pip, gem) или компилируете их из исходного кода, вам может потребоваться установить пакет -devel языка программирования. Это особенно актуально для пользователей libc musl из-за того, что готовые двоичные файлы обычно ориентированы на glibc.

Язык Менеджер пакетов Пакет Void
Python3 pip, anaconda, virtualenv, etc python3-devel
Python2 pip, anaconda, virtualenv, etc python2-devel
Ruby gem ruby-devel
lua luarocks lua-devel

Пакеты с ограниченным доступом

Некоторые пакеты имеют юридические ограничения на распространение (например, Discord), могут быть слишком большими или содержать другие условия, затрудняющие распространение Void. У этих пакетов есть шаблоны сборки, но сами пакеты не создаются и не распространяются. Как таковые, они должны быть собраны локально. Для получения дополнительной информации смотрите страницу пакеты с ограниченным доступом.

Не-x86_64 архитектура

Система сборки Void работает на серверах x86_64 как для компиляции, так и для кросс-компиляции пакетов. Однако некоторые пакеты (например, libreoffice) не поддерживают кросс-компиляцию. Эти пакеты должны быть собраны локально на компьютере, работающем под управлением той же архитектуры и с той же libc, что и система, в которой будет использоваться пакет. Чтобы узнать, как создавать пакеты, обратитесь к репозиторию void-packages в README.

Flatpak

Flatpak — это еще один метод установки внешних проприетарных приложений в Linux. Информацию об использовании Flatpak с Void Linux смотрите в официальной документации Flatpak.

Если звук не работает в программах, установленных с помощью Flatpak, возможно, автоактивация PulseAudio работает некорректно. Перед запуском программы убедитесь, что PulseAudio запущена.

Обратите внимание, что «песочница» Flatpak не обязательно защитит вас от каких-либо функций проприетарного программного обеспечения, нарушающих безопасность и/или конфиденциальность.

Устранение неполадок

Некоторые приложения могут работать некорректно (например, не имея доступа к файлам хост-системы). Некоторые из этих проблем можно устранить, установив один или несколько пакетов xdg-user-dirs, xdg-user-dirs-gtk или xdg-utils и настроив XDG Desktop Portals.

Для некоторых Flatpaks требуется D-Bus и/или Pulseaudio.

AppImage

AppImage — это файл, который объединяет приложение со всем необходимым для его запуска. AppImage можно использовать, сделав его исполняемым и запустив; установка не требуется. AppImage можно запускать в изолированной среде, такой как firejail.

Некоторые приложения, для которых доступно AppImage, можно найти на AppImageHub.

AppImage пока не работают при установке musl.

Пакеты Octave

Для компиляции и запуска некоторых пакетов Octave требуются внешние зависимости. Например, для сборки пакета управления необходимо установить пакеты openblas-devel, libgomp-devel, libgfortran-devel, gcc-fortran и gcc.

MATLAB

Чтобы использовать браузер справки MATLAB, live-скрипты, программу установки дополнений и simulink, установите пакет libselinux.

Steam

Steam можно установить либо через собственный пакет, для чего требуется включить «nonfree» репозиторий, либо через Flatpak. Список зависимостей для разных платформ и информацию об устранении неполадок для собственного пакета можно найти в документации, специфичной для Void, а в этом разделе рассматриваются потенциальные проблемы, с которыми сталкиваются пользователи Flatpak.

Если вы используете другой диск для хранения своей библиотеки игр, опция --filesystem из flatpak-override(1) может оказаться полезной.

3.21. Печать

CUPS (Common Unix Printing System) — это поддерживаемый механизм для подключения к принтерам в Void Linux.

В качестве необходимых условий установите пакет cups и включите службу cupsd. Подождите, пока служба не будет помечена как доступная.

Установка драйверов печати

Если доступ к принтеру осуществляется по сети и он поддерживает PostScript или PCL, одного CUPS должно быть достаточно. Однако для локальной поддержки принтера необходимы дополнительные пакеты драйверов. В пакете cups-filters предусмотрена поддержка драйверов для CUPS.

В зависимости от рассматриваемого оборудования могут потребоваться дополнительные драйверы.

Некоторые драйверы CUPS содержат проприетарные расширения или расширения только для двоичных файлов. Они доступны только в несвободном репозитории, а иногда и только для определенных архитектур.

Печать без драйверов

Большинство современных сетевых принтеров поддерживают печать без драйверов с использованием стандарта IPP Everywhere. Список самосертифицированных принтеров, поддерживающих этот стандарт, см. в https://www.pwg.org/printers/. Даже если принтера нет в этом списке, все равно высока вероятность, что он поддерживается.

Обратите внимание, что cups-filters по-прежнему требуется для печати без драйверов.

Драйверы Gutenprint

Gutenprint обеспечивает поддержку многих принтеров. Эти драйверы содержатся в пакете gutenprint.

Драйверы HP

Для принтеров Hewlett-Packard требуется пакет hplip.

Выполнение следующей команды проведет вас через процесс установки драйвера. Обычно достаточно предложенных в ней настроек по умолчанию.

# hp-setup -i
Драйверы Brother

Для поддержки принтеров Brother установите драйверы foomatic, которые содержатся в пакетах foomatic-db и foomatic-db-nonfree. Поддержка различных моделей лазерных принтеров обеспечивается пакетом brother-brlaser.

Драйверы для струйных принтеров Epson

Установите пакет epson-inkjet-printer-escpr для струйных принтеров Epson.

Драйверы Canon PIXMA/MAXIFY

Пакет cnijfilter2 содержит драйверы для различных моделей Canon PIXMA и MAXIFY. Пожалуйста, обратите внимание, что для установки пакета драйверов требуется включить «nonfree» репозиторий.

Настройка нового принтера

CUPS предоставляет веб-интерфейс и инструменты командной строки, которые можно использовать для настройки принтеров. Кроме того, доступны различные варианты встроенного графического интерфейса, которые могут быть более подходящими, в зависимости от варианта использования.

Автоматически

Принтеры с поддержкой IPP Everywhere могут быть обнаружены и настроены автоматически с помощью ZeroConf. Чтобы включить это, установите пакеты avahi и nss-mdns и включите службу avahi-daemon.

Веб-интерфейс

Чтобы настроить принтер с помощью веб-интерфейса CUPS, перейдите по адресу http://localhost:631 в браузере. На вкладке Administration выберите Printers > Add Printer. Когда вас попросят войти в систему, используйте учетную запись, которая находится в группе lpadmin.

Командная строка

Инструмент lpadmin(8) может использоваться для настройки принтера с помощью командной строки.

Графический интерфейс

Пакет system-config-printer предлагает простую и надежную настройку новых принтеров. Установите и запустите его.:

# system-config-printer

Обычно для этого инструмента требуются права root. Однако, если вы используете PolicyKit, вы можете установить пакет cups-pk-helper, позволяющий непривилегированным пользователям использовать system-config-printer.

Хотя здесь показан system-config-printer, среда вашего рабочего стола может иметь собственное диалоговое окно принтера, которое можно найти, обратившись к документации для вашего DE.

Устранение неполадок

USB-принтер не отображается

URI устройства можно найти вручную, выполнив:

# /usr/lib/cups/backend/usb

3.22. Контейнеры и виртуальные машины

В этом разделе описывается, как настроить некоторые программы для контейнеров и виртуальных машин, доступные на Void.

Содержание раздела

3.22.1. Создание и использование chroots и контейнеров

chroots и контейнеры можно настроить и использовать для многих целей, включая:

Создание chroot

xvoidstrap

Для создания chroot может быть использован xvoidstrap(1) (из xtools):

# mkdir <chroot_dir>
# XBPS_ARCH=<chroot_arch> xvoidstrap <chroot_dir> base-container <other_pkgs>

<other_pkgs> требуется только в том случае, если вы хотите предварительно установить другие пакеты в корневом каталоге chroot.

Создание вручную

В качестве альтернативы этот процесс можно выполнить вручную.

Создайте каталог, который будет содержать chroot, затем установите в него базовую систему с помощью пакета base-container:

# mkdir -p "<chroot_dir>/var/db/xbps/keys"
# cp -a /var/db/xbps/keys/* "<chroot_dir>/var/db/xbps/keys"
# XBPS_ARCH=<chroot_arch> xbps-install -S -r <chroot_dir> -R <repository> base-container <other_pkgs>

<repository> может отличаться в зависимости от архитектуры.

<other_pkgs> требуется только в том случае, если вы хотите предварительно установить другие пакеты в chroot.

Использование chroot

xchroot

Для автоматической настройки и входа в chroot может использоваться xchroot(1) (из xtools).

Ручной метод

В качестве альтернативы этот процесс можно выполнить вручную.

Если требуется доступ к сети, скопируйте /etc/resolv.conf в chroot; /etc/hosts возможно, также потребуется скопировать.

Затем необходимо смонтировать несколько каталогов следующим образом:

# mount -t proc none <chroot_dir>/proc
# mount -t sysfs none <chroot_dir>/sys
# mount --rbind /dev <chroot_dir>/dev
# mount --rbind /run <chroot_dir>/run

Используйте chroot(1) для перехода на новый root, затем запускайте программы и выполняйте задачи как обычно. После завершения работы с chroot размонтируйте chroot с помощью umount(8). Если какие-либо деструктивные действия предпринимаются в каталоге chroot без предварительного размонтирования, возможно, вам потребуется перезагрузка, чтобы повторно заполнить затронутые каталоги.

Альтернативы
Bubblewrap

bwrap(1) (из пакета bubblewrap) имеет дополнительные функции, такие как возможность изолированной обработки, и не требует root-доступа.

bwrap является очень гибким и может использоваться многими способами, например:

$ bwrap --bind <chroot_dir> / \
  --dev /dev \
  --proc /proc \
  --bind /sys /sys \
  --bind /run /run \
  --ro-bind /etc/resolv.conf /etc/resolv.conf \
  --ro-bind /etc/passwd /etc/passwd \
  --ro-bind /etc/group /etc/group \
  <command>

В этом примере вы не сможете добавлять или редактировать пользователей или группы. При запуске графических приложений с Xorg вам может потребоваться также выполнить привязку-монтирование ~/.Xauthority или других файлов или каталогов.

Страница руководства по bwrap(1) и статья Arch Wiki содержат больше примеров использования bwrap.

Flatpak

Flatpak — это удобный вариант для запуска многих приложений, включая графические или проприетарные, как в системах glibc, так и в musl.

Контейнеры приложений

Если требуется более интегрированное и отточенное решение, Void также предоставляет контейнеры OCI, которые работают с такими инструментами, как docker и podman. Эти контейнеры не требуют создания каталога chroot перед использованием.

3.22.2. libvirt

libvirt — это API и демон для управления виртуализацией платформы, поддерживающий такие технологии виртуализации, как LXC, KVM, QEMU, Bhyve, Xen, VMware и Hyper-V.

Чтобы использовать libvirt, установите пакет libvirt, убедитесь, что пакет dbus установлен, и включите службы dbus, libvirtd, virtlockd и virtlogd. Демон libvirtd можно перенастроить во время выполнения с помощью virt-admin(1).

Пакет libvirt предоставляет интерфейс virsh(1) для libvirtd. virsh это интерактивная оболочка и инструмент с возможностью пакетного написания сценариев для выполнения задач управления, включая создание, настройку и запуск виртуальных машин, а также управление сетями и хранилищем. Обратите внимание, что virsh обычно требуется запуск от имени пользователя root, как описано на странице руководства virsh:

Для выполнения большинства команд virsh требуются права root из-за каналов связи, используемых для взаимодействия с гипервизором. Запуск от имени пользователя, не являющегося root, вернет ошибку.

Однако, если у вас установлены пакеты polkit и dbus и вы включили службу dbus, libvirtd предоставит необходимые привилегии любому пользователю, добавленному в группу libvirt.

Альтернатива virsh предоставляется пакетами virt-manager и virt-manager-tools.

Для получения общей информации о libvirt обратитесь к вики-сайту libvirt и вики FAQ. Для ознакомления с использованием libvirt обратитесь к странице «VM lifecycle».

3.22.3. LXC

Проект Linux Containers включает в себя три подпроекта: LXC, LXD и LXCFS. Проект также включал проект CGManager, который в последних ядрах устарел в пользу пространства имен CGroup.

Настройка LXC

Установите пакет lxc.

Создание и запуск привилегированных контейнеров от имени пользователя root не требует никакой настройки; просто используйте различные команды lxc-*, такие как lxc-create(1), lxc-start(1), lxc-attach(1) и т.д.

Создание непривилегированных контейнеров

Идентификаторы пользователей (UID) и идентификаторы групп (GID) обычно варьируются от 0 до 65535. Непривилегированные контейнеры повышают безопасность за счет сопоставления диапазонов UID и GID внутри каждого контейнера с диапазонами, не используемыми хост-системой. Неиспользуемые диапазоны хостов должны быть подчинены пользователю, который будет запускать непривилегированные контейнеры.

Подчиненные UID и GID назначаются в файлах subuid(5) и subgid(5) соответственно.

Чтобы создать непривилегированные контейнеры, сначала отредактируйте /etc/subuid и /etc/subgid чтобы делегировать диапазоны. Например:

root:1000000:65536
user:2000000:65536

В каждой записи, разделенной двоеточием:

Программа usermod(8) также может использоваться для манипулирования подчиненными идентификаторами.

Как правило, количество последовательных идентификаторов должно быть целым числом, кратным 65536; начальное значение не важно, за исключением того, что различные диапазоны, определенные в файле, не перекрываются. В этом примере root управляет идентификаторами UID (или, начиная с subgid, GID) в диапазоне от 1000000 до 1065535 включительно; user управляет идентификаторами в диапазоне от 2000000 до 2065535.

Перед созданием контейнера пользователю, владеющему контейнером, потребуется файл lxc.conf(5), в котором указывается используемый subuid и subgid-диапазон. Для контейнеров, принадлежащих root, этот файл находится по адресу /etc/lxc/default.conf; для непривилегированных пользователей файл находится по адресу ~/.config/lxc/default.conf. Сопоставления описаны в строках формы

lxc.idmap = u 0 1000000 65536
lxc.idmap = g 0 1000000 65536

Изолированный символ u указывает на отображение UID, в то время как изолированный g указывает на отображение GID. Первое числовое значение, как правило, всегда должно быть 0; это указывает начало диапазона UID или GID как видно изнутри контейнера. Второе числовое значение является началом соответствующего диапазона, если смотреть извне контейнера, и может быть произвольным значением в пределах диапазона делегировано в /etc/subuid или /etc/subgid. Конечное значение — это количество последовательных идентификаторов для сопоставления.

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

При настройке пользователя, не имеющего прав root, отредактируйте /etc/lxc/lxc-usernet как root, чтобы указать квоту сетевого устройства. Например, чтобы разрешить пользователю с именем user создавать до 10 veth устройств, подключенных к мосту lxcbr0:

user veth lxcbr0 10

Теперь пользователь может создавать и использовать непривилегированные контейнеры с помощью утилит lxc-*. Чтобы создать простой контейнер Void с именем mycontainer, используйте подобную команду:

lxc-create -n mycontainer -t download -- \
  --dist voidlinux --release current --arch amd64

Вы можете заменить amd64 другой архитектурой, а также указать образ musl, добавив --variant musl в конце команды. См. список доступных контейнеров на LXC Image Server.

По умолчанию конфигурации и точки монтирования для системных контейнеров хранятся в /var/lib/lxc, в то время как конфигурации для пользовательских контейнеров и точек монтирования хранятся в ~/.local/share/lxc. Оба эти значения можно изменить, установив lxc.lxcpath в lxc.system.conf(5). Суперпользователь может запускать непривилегированные контейнеры в системе, lxc.lxcpath определенной в /etc/lxc/lxc.conf; обычные пользователи могут запускать непривилегированные контейнеры в личном, lxc.lxcpath определенном в ~/.config/lxc/lxc.conf.

По умолчанию все контейнеры будут использовать одни и те же подчиненные карты UID и GID. Это допустимо, но это означает, что злоумышленник, который получает повышенный доступ в одном контейнере и может каким-то образом вырваться из этого контейнера, будет иметь аналогичный доступ к другим контейнерам. Чтобы изолировать контейнеры друг от друга, измените диапазоны lxc.idmap в default.conf, чтобы они указывали на уникальный диапазон, прежде чем создавать каждый контейнер. Попытка исправить разрешения для контейнера, созданного с неправильной картой, возможна, но неудобна.

LXD

LXD предоставляет альтернативный интерфейс для утилит LXC lxc-*. Однако для него не требуется конфигурация, описанная в предыдущем разделе.

Установите пакет lxd и включите службу lxd.

Пользователи LXD должны принадлежать к группе lxd.

Используйте команду lxc для управления экземплярами, как описано здесь.

3.23. GnuPG

Void поставляется как с GnuPG legacy (как gnupg1), так и со стабильным GnuPG (как gnupg).

Смарт-карты

Для использования смарт-карт, таких как Yubikeys, с GnuPG существуют два серверных интерфейса для взаимодействия с ними через GnuPG: внутренний драйвер CCID scdaemon от GnuPG или драйвер PC/SC.

scdaemon с внутренним драйвером CCID

По умолчанию scdaemon, который требуется для использования смарт-карт с GnuPG, использует свой внутренний драйвер CCID. Чтобы это сработало, ваша смарт-карта должна быть одной из смарт-карт в правилах udev здесь, и вы должны либо использовать elogind, либо быть членом группы plugdev. Если эти два условия выполнены и у вас не запущен pcscd, gpg --card-status должен успешно распечатать текущий статус вашей карты.

scdaemon с серверной частью pcscd

Если вам необходимо использовать pcscd по другим причинам, запустите echo disable-ccid >> ~/.gnupg/scdaemon.conf. Теперь, предполагая, что ваша настройка pcscd работает правильно, gpg --card-status должен будет вывести статус вашей карты.

Инструменты OpenPGP Card

В качестве альтернативы GnuPG со смарт-картами Void также поставляется openpgp-card-tools, утилита на основе Rust, не зависящая от GnuPG. Требуется использование pcscd для взаимодействия со смарт-картами, поэтому, если вы хотите использовать его параллельно с GnuPG, вам необходимо настроить scdaemon для использования серверной части pcscd, как описано выше в разделе scdaemon с серверной частью pcscd.

3.24. PHP

Существует два способа установки PHP-пакетов с помощью XBPS:

  1. Использование версионных пакетов (рекомендуется).

  2. Использование метапакетов.

Версионные пакеты PHP

Обычно рекомендуется использовать версионные пакеты PHP (например, php8.1, php8.1-apcu и т.д.) для большинства вариантов использования, поскольку это обеспечивает согласованную среду при обновлении с минимальным вмешательством или вообще без него.

Метапакеты PHP

В Void пакет php — это мета-пакет, который указывает на последнюю вышестоящую версию PHP. Этому соглашению следуют все пакеты с префиксом php-, такие как php-fpm, а также xdebug и composer. Смотрите php template для получения полного списка. Рекомендуется использовать эти метапакеты только в целях разработки.

При использовании метапакета PHP имейте в виду, что обновление может потребовать ручного вмешательства, если в репозиторий была добавлена новая основная версия PHP. В рамках изменения версии расположение конфигурации изменится, чтобы отразить новую версию. Например, обновление с 8.0 до 8.1 приведет к изменению пути конфигурации с /etc/php8.0 на /etc/php8.1. Все внесенные настройки необходимо вручную применить к новому каталогу конфигурации.

Обновления php-fpm требуют особой осторожности, поскольку они включают службу runit. В этом случае убедитесь, что запущена новая служба runit и что приложения, использующие предыдущую версию php-fpm, могут получить доступ к новому экземпляру php-fpm. В частности, убедитесь, что все приложения, обращающиеся к экземпляру FPM, имеют правильный адрес сокета TCP/unix.

4. Менеджер пакетов XBPS

X Binary Package System (XBPS) — это быстрый менеджер пакетов, который был разработан и внедрен с нуля. XBPS управляется командой Void Linux и разрабатывается в https://github.com/void-linux/xbps.

В большинстве случаев управление пакетами осуществляется с помощью следующих команд:

На большинство вопросов можно ответить, обратившись к справочным страницам для этих инструментов, а также к справочной странице xbps.d(5).

Чтобы узнать, как создавать пакеты из исходных кодов, обратитесь к README репозитория void-packages.

Обновление

Как и в любой другой системе, важно поддерживать Void в актуальном состоянии. Используйте xbps-install(1) для обновления:

# xbps-install -Su

XBPS должен использовать отдельную транзакцию для обновления самого себя. Если ваше обновление включает в себя пакет xbps, вам нужно будет выполнить приведенную выше команду во второй раз, чтобы применить остальные обновления.

Перезапуск служб

XBPS не перезапускает службы при их обновлении. Эта задача возложена на администратора, чтобы он мог организовать окна обслуживания, обеспечить достаточную емкость резервного копирования и, как правило, присутствовать при обновлении служб.

Чтобы найти процессы, работающие под управлением версий, отличных от имеющихся на диске, используйте xcheckrestart инструмент, предоставляемый пакетом xtools:

$ xcheckrestart
11339 /opt/google/chrome/chrome (deleted) (google-chrome)

xcheckrestart распечатает PID, путь к исполняемому файлу, статус запущенного пути (почти всегда deleted) и имя процесса.

xcheckrestart может и должен запускаться от имени непривилегированного пользователя.

Паника ядра после обновления

Если после обновления у вас возникает проблема с ядром, скорее всего, в вашей системе не хватило места в /boot. Обратитесь к разделу Удаление старых ядер для получения дополнительной информации.

Поиск файлов и пакетов

Для поиска пакетов в доступных репозиториях используйте xbps-query(1):

$ xbps-query -Rs <search_pattern>

Флаг -R указывает, что следует выполнять поиск в репозиториях. Без него с флагом -s выполняется поиск локально установленных пакетов.

Если вы не можете найти файл или программу, которые ожидали найти после установки пакета, вы можете использовать xbps-query(1), чтобы перечислить файлы, предоставляемые этим пакетом:

$ xbps-query -f <package_name>

Пакет xtools содержит утилиту xlocate(1). xlocate работает так же, как locate(1), но для файлов в Void репозитории пакетов:

$ xlocate -S
Fetching objects: 11688, done.
From https://repo-default.voidlinux.org/xlocate/xlocate
 + e122c3634...a2659176f master     -> master  (forced update)
$ xlocate xlocate
xtools-0.59_1   /usr/bin/xlocate
xtools-0.59_1   /usr/share/man/man1/xlocate.1 -> /usr/share/man/man1/xtools.1

Также можно использовать xbps-query(1) для поиска файлов, хотя это настоятельно не рекомендуется:

$ xbps-query -Ro /usr/bin/xlocate
xtools-0.46_1: /usr/bin/xlocate (regular file)

Для этого требуется, чтобы xbps-query загружал части каждого пакета, чтобы найти файл. А xlocate запрашивает локально кэшированный индекс всех файлов, поэтому доступ к сети не требуется.

Чтобы получить список всех установленных пакетов без указания их версии:

$ xbps-query -l | awk '{ print $2 }' | xargs -n1 xbps-uhelper getpkgname

4.1. Расширенное использование

Понижение версии

XBPS позволяет вам понизить пакет до определенной версии.

С помощью xdowngrade

Самый простой способ понизить версию — использовать xdowngrade из пакета xtools, указав версию, до которой вы хотите понизить пакет:

# xdowngrade /var/cache/xbps/pkg-1.0_1.xbps
С помощью XBPS

XBPS можно использовать для понижения версии пакета, которая больше не доступна в индексе репозитория.

Если версия пакета была установлена ранее, она будет доступна в /var/cache/xbps/. Если нет, ее нужно будет получить откуда-либо еще; для целей этого примера предположим, что версия пакета была добавлена в /var/cache/xbps/.

Сначала добавьте версию пакета в свой локальный репозиторий:

# xbps-rindex -a /var/cache/xbps/pkg-1.0_1.xbps

Затем понизьте версию с помощью xbps-install:

# xbps-install -R /var/cache/xbps/ -f pkg-1.0_1

Флаг -f необходим для принудительного понижения версии/переустановки уже установленного пакета.

Блокировка пакетов (Holding packages)

Чтобы предотвратить обновление пакета во время обновления системы, используйте xbps-pkgdb(1):

# xbps-pkgdb -m hold <package>

Блокировку можно снять с помощью:

# xbps-pkgdb -m unhold <package>

Пакеты, заблокированные через репозиторий

Если вы использовали xbps-src для сборки и установки пакета по настроенному шаблону или с пользовательскими параметрами сборки, вы можете захотеть запретить системным обновлениям заменять этот пакет не персонализированной версией. Чтобы убедиться, что пакет обновляется только из того же репозитория, который использовался для его установки, вы можете повторно заблокировать его через xbps-pkgdb(1):

# xbps-pkgdb -m repolock <package>

Чтобы удалить повторную блокировку:

# xbps-pkgdb -m repounlock <package>

Игнорирование пакетов

Иногда вы можете захотеть удалить пакет, функциональность которого обеспечивается другим пакетом, но не сможете этого сделать из-за проблем с зависимостями. Например, вы можете захотеть использовать doas(1) вместо sudo(8), но не сможете удалить пакет sudo из-за того, что он зависит от пакета base-system. Чтобы удалить его, вам нужно будет проигнорировать пакет sudo.

Чтобы проигнорировать пакет, добавьте соответствующую запись ignorepkg в файл конфигурации xbps.d(5). Например:

ignorepkg=sudo

После этого вы сможете удалить пакет sudo с помощью xbps-remove(1).

Виртуальные пакеты

Виртуальные пакеты могут быть созданы с помощью записей virtualpkg xbps.d(5). Любой запрос к виртуальному пакету будет разрешен для реального пакета. Например, чтобы создать виртуальный пакет linux, который будет преобразован в пакет linux5.6, создайте файл конфигурации xbps.d с содержимым:

virtualpkg=linux:linux5.6

4.2. Репозитории

Репозитории являются сердцем системы пакетов XBPS. Репозитории могут быть локальными или удаленными. Репозиторий содержит двоичные файлы пакетов, которые могут иметь подписи, и файл данных с именем $ARCH-repodata (например, x86_64-repodata), который также может быть подписан.

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

Основной репозиторий

Расположение основного репозитория по отношению к URL базового зеркала является:

Вложенные репозитории

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

Эти репозитории можно включить с помощью установки соответствующего пакета. Эти пакеты только устанавливают файл конфигурации репозитория в /usr/share/xbps.d.

nonfree

У Void есть репозиторий nonfree для пакетов, у которых нет бесплатных лицензий. Его можно включить, установив пакет void-repo-nonfree.

Пакеты могут оказаться в репозитории nonfree по ряду причин:

multilib

Репозиторий multilib предоставляет 32-разрядные пакеты в качестве уровня совместимости внутри 64-разрядной системы. Его можно включить, установив пакет void-repo-multilib.

Эти репозитории доступны только для систем x86_64, работающих под управлением библиотеки C glibc.

multilib/nonfree

В репозитории multilib/nonfree предоставляются дополнительные 32-разрядные пакеты с несвободными лицензиями. Его можно включить, установив пакет void-repo-multilib-nonfree.

debug

Пакеты Void Linux поставляются без символов отладки. Если вы хотите отладить программное обеспечение или просмотреть дамп ядра, вам понадобятся символы отладки. Эти пакеты содержатся в репозитории debug. Его можно включить, установив пакет void-repo-debug.

После включения можно получить символы для <package> путем установки <package>-dbg.

Поиск зависимостей отладки

Пакет xtools содержит утилиту xdbg(1) для получения списка пакетов отладки, включая зависимости, для пакета:

$ xdbg bash
bash-dbg
glibc-dbg
# xbps-install -S $(xdbg bash)

4.2.1. Зеркала

Void Linux поддерживает зеркала в нескольких географических регионах для пользователей. При новой установке по умолчанию будет установлено значение repo-default.voidlinux.org, которое может быть сопоставлено с любым зеркалом уровня 1, но вам может быть будет удобнее выбрать другое зеркало.

Смотрите xmirror.voidlinux.org для получения дополнительной информации и списка доступных зеркал.

Зеркала Tor

Void Linux также зеркально отражен в сети Tor. Для получения дополнительной информации см. раздел Использование зеркал Tor.

4.2.1.1. Изменение зеркал

В каждом репозитории есть файл, определяющий URL-адрес используемого зеркала. Для официальных репозиториев эти файлы устанавливаются менеджером пакетов в /usr/share/xbps.d, но если в /etc/xbps.d обнаружены дубликаты файлов, вместо них используются эти значения.

xmirror

Чтобы легко изменить выбранное в данный момент зеркало, можно использовать xmirror(1) (из пакета xmirror). Эта утилита выполняет все действия по обновлению выбранного зеркала.

Ручной метод

В качестве альтернативы это можно сделать вручную:

Чтобы аккуратно изменить URL-адреса зеркал, скопируйте все файлы конфигурации репозитория в /etc/xbps.d и измените URL-адреса в каждом скопированном файле репозитория.

# mkdir -p /etc/xbps.d
# cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/
# sed -i 's|https://repo-default.voidlinux.org||g' /etc/xbps.d/*-repository-*.conf

После изменения URL-адресов вы должны синхронизировать xbps с новыми зеркалами:

# xbps-install -S

Вы должны увидеть новые URL-адреса репозитория во время синхронизации. Вы также можете использовать xbps-query для проверки URL-адреса репозитория, но только после того, как они были синхронизированы:

$ xbps-query -L
 9970 https://repo-default.voidlinux.org/current (RSA signed)
   27 https://repo-default.voidlinux.org/current/multilib/nonfree (RSA signed)
 4230 https://repo-default.voidlinux.org/current/multilib (RSA signed)
   47 https://repo-default.voidlinux.org/current/nonfree (RSA signed)
 5368 https://repo-default.voidlinux.org/current/debug (RSA signed)

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

4.2.1.2. Использование зеркал Tor

Tor — это анонимизирующее программное обеспечение, которое перенаправляет трафик через компьютеры по всему миру. Оно может предоставлять доступ к обычным сайтам в Интернете или к скрытым сайтам, доступным только в сети.

В сети Tor доступны следующие зеркала Void Linux:

Репозиторий
http://lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion/pub/voidlinux/
Расположение
ЕС: Швеция

Использование XBPS с Tor

XBPS можно настроить для подключения к зеркалам с помощью Tor. Эти зеркала могут быть обычными зеркалами, через ретрансляторы выхода или, для потенциально большей анонимности, скрытыми сервисными зеркалами в сети.

XBPS учитывает переменную окружения SOCKS_PROXY, что упрощает использование через Tor.

Установка Tor

Tor содержится в пакете tor.

После установки Tor вы можете запустить его как обычный пользователь:

$ tor

или включить его системную службу.

По умолчанию Tor будет действовать как клиент и открывать прокси SOCKS5 через TCP-порт 9050 на localhost.

Подключение XBPS через SOCKS-прокси

XBPS считывает переменную окружения SOCKS_PROXY и будет использовать любой прокси, указанный в ней. Если просто присвоить переменной адрес и порт прокси-сервера, открытого клиентом Tor, все подключения XBPS будут проходить через сеть Tor.

Пример обновления вашей системы через Tor:

# export SOCKS_PROXY="socks5://127.0.0.1:9050"
# xbps-install -Su
Использование скрытого служебного зеркала

Чтобы использовать скрытое служебное зеркало, зеркала по умолчанию необходимо перезаписать файлами конфигурации, указывающими на .onion-адреса, которые используются внутри сети Tor. XBPS позволяет переопределять адреса репозитория в /etc/xbps.d.

Скопируйте файлы вашего репозитория из /usr/share/xbps.d в /etc/xbps.d и замените адреса на адреса службы onion (в качестве примера используется onion от Lysator).:

# mkdir -p /etc/xbps.d
# cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/
# sed -i 's|https://repo-default.voidlinux.org|http://lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion/pub/voidlinux|g' /etc/xbps.d/*-repository-*.conf

Tor обеспечивает многоуровневое сквозное шифрование, поэтому HTTPS не требуется.

При установке пакетов с установленным SOCKS_PROXY, как в предыдущем примере, XBPS должен указать, что он синхронизирует репозитории с onion-адреса, указанного в переопределении:

# xbps-install -S
[*] Updating `http://lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion/pub/voidlinux/current/aarch64/nonfree/aarch64-repodata' ...
aarch64-repodata: 4030B [avg rate: 54KB/s]
[*] Updating `http://lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion/pub/voidlinux/current/aarch64/aarch64-repodata' ...
aarch64-repodata: 1441KB [avg rate: 773KB/s]
Соображения безопасности

Рекомендуется установить SOCKS_PROXY автоматически в вашей среде, если вы используете onion. Если настройка отсутствует, DNS-запрос имени скрытой службы будет отправлен на настроенный DNS-сервер.

Чтобы автоматически установить переменную окружения, добавьте ее в файл /etc/profile.d:

# cat — <<EOF > /etc/profile.d/socksproxy.sh
#!/bin/sh
export SOCKS_PROXY="socks5://127.0.0.1:9050"
EOF

4.2.2. Пакеты с ограниченным доступом

Void предлагает некоторые пакеты, которые официально поддерживаются, но не распространяются. Эти пакеты помечены как ограниченные и должны быть созданы на основе их шаблона void-packages локально.

Пакеты могут быть ограничены к распространению либо вышестоящим автором, либо Void. Void оставляет за собой право ограничить распространение любого пакета практически по любой причине, наиболее распространенной из которых является большой размер. Другой распространенной причиной является ограничительное лицензирование, которое не допускает распространения исходных текстов или двоичных пакетов третьими сторонами.

Создание вручную

Вы можете использовать xbps-src в репозитории void-packages для сборки пакетов с ограниченным доступом из шаблонов. Для получения инструкций по созданию пакетов на основе шаблонов обратитесь к документации по void-packages и, в частности, к разделу Quick start.

Помните, что сборка пакетов с ограниченным доступом должна быть включена явно установкой XBPS_ALLOW_RESTRICTED=yes в вашей конфигурации xbps-src (в файле в репозитории /etc/conf).

Автоматизированное построение

Также существует инструмент, xbps-mini-builder, который автоматизирует процесс создания списка пакетов. Скрипт может вызываться периодически и будет перестраивать пакеты только в том случае, если их шаблоны изменились.

4.2.3. Пользовательские репозитории

Void поддерживает созданные пользователем репозитории, как локальные, так и удаленные. Это рекомендуется только для обслуживания пользовательских пакетов, созданных лично, или пакетов из другого надежного источника. Проект Void не поддерживает никакие репозитории пакетов сторонних производителей — использование программных пакетов сторонних производителей создает очень серьезные проблемы с безопасностью и может нанести серьезный ущерб вашей системе.

Добавление пользовательских репозиториев

Чтобы добавить пользовательский репозиторий, создайте файл в /etc/xbps.d с содержимым:

repository=<URL>

где <URL> — это либо локальный каталог, либо URL-адрес удаленного репозитория.

Например, чтобы определить удаленный репозиторий:

# echo 'repository=http://my.domain.com/repo' > /etc/xbps.d/my-remote-repo.conf

Удаленные репозитории должны быть подписаны. xbps-install(1) отказывается устанавливать пакеты из удаленных репозиториев, если они не подписаны.

Как определить локальный репозиторий:

# echo 'repository=/path/to/repo' > /etc/xbps.d/my-local-repo.conf

4.2.4. Подписание репозиториев

Удаленные репозитории должны быть подписаны. Локальные репозитории подписывать не нужно.

Инструмент xbps-rindex(1) используется для подписывания репозиториев.

Закрытый ключ для подписывания пакетов должен быть ключом RSA в PEM-кодировке. Ключ может быть сгенерирован с помощью ssh-keygen(1) или openssl(1):

$ ssh-keygen -t rsa -m PEM -f private.pem
$ openssl genrsa -out private.pem

После генерации ключа необходимо добавить открытую часть закрытого ключа к метаданным репозитория. Этот шаг требуется выполнить только один раз.

$ xbps-rindex --privkey private.pem --sign --signedby "I'm Groot" /path/to/repository/dir

Затем подпишите один или несколько пакетов следующей командой:

$ xbps-rindex --privkey private.pem --sign-pkg /path/to/repository/dir/*.xbps

Обратите внимание, что будущие пакеты не будут подписываться автоматически.

4.3. Устранение неполадок XBPS

Иногда менеджер пакетов попадает в странную ситуацию и не может исправить себя без посторонней помощи. В этом разделе описаны важные исправления и вещи, которые могут пойти не так при работе с XBPS.

Содержание раздела

4.3.1. Распространенные проблемы

Проверка ключей RSA

Если ключ Void RSA изменился, xbps-install(1) сообщит о новом отпечатке ключа и попросит вас подтвердить его:

<repository> repository has been RSA signed by "Void Linux"
Fingerprint: <rsa_fingerprint>
Do you want to import this public key? [Y/n]

Чтобы проверить ключ, убедитесь, что <rsa_fingerprint> соответствует одному из отпечатков как в void-packages, так и в void-mklive.

Ошибки при обновлении или установке пакетов

Если при обновлении или установке нового пакета возникают какие-либо ошибки, убедитесь, что вы используете последнюю версию индекса удаленного репозитория. Запуск xbps-install(1) с опцией -S гарантирует это.

"Operation not permitted"

Ошибка «Operation not permitted» (операция не разрешена), например:

ERROR: [reposync] failed to fetch file https://repo-default.voidlinux.org/current/nonfree/x86_64-repodata': Operation not permitted

может быть вызвана неправильной датой и/или временем в вашей системе. Убедитесь, что ваши дата и время указаны правильно.

"Not Found"

Ошибка «Not Found» (не найдено), например:

ERROR: [reposync] failed to fetch file `https://repo-default.voidlinux.org/current/musl/x86_64-repodata': Not Found

как правило, означает, что ваши конфигурации XBPS указывают вашей системе на неправильные репозитории. Подтвердите, что ваши файлы xbps.d(5) ссылаются на правильные репозитории.

ошибки shlib

"unresolvable shlib", например:

libllvm8-8.0.1_2: broken, unresolvable shlib `libffi.so.6'

вероятно, это связано с устаревшими или бесхозными пакетами. Чтобы проверить наличие устаревших пакетов, просто попробуйте обновить свою систему. С другой стороны, потерянные пакеты могли быть удалены из репозиториев Void, но все еще установлены в вашей системе; их можно удалить, запустив xbps-remove(1) с параметром -o.

Если вы получите сообщение об ошибке со словами:

Transaction aborted due to unresolved shlibs

репозитории находятся в промежуточном состоянии, что может произойти из-за больших сборок. Решение состоит в том, чтобы дождаться завершения сборки. Вы можете просмотреть ход выполнения сборок на экране Buildbot's Waterfall Display.

ошибки repodata

В марте 2020 года формат сжатия, используемый для данных репозитория (repodata), был изменен с gzip на zstd. Если XBPS не был обновлен до версии 0.54 (выпущена в июне 2019 года) или новее, обновить систему с его помощью невозможно. К сожалению, для этого случая нет сообщения об ошибке, но его можно обнаружить, запустив xbps-install с флагами -Sd. Сообщение отладки для этой ошибки показано ниже.

[DEBUG] [repo] `//var/db/xbps/https___repo-default_voidlinux_org_current/x86_64-repodata' failed to open repodata archive Invalid or incomplete multibyte or wide character

В этой ситуации необходимо следовать инструкциям, приведенным в разделе xbps-static.

Сломанные системы

Если ваша система по какой-либо причине неисправна и не может выполнять обновления или установку пакетов, использование статически связанной версии xbps для обновления и установки пакетов может помочь вам избежать переустановки всей системы.

4.3.2. Статический XBPS

В редких случаях систему можно сломать настолько, что XBPS больше не сможет функционировать. Обычно это происходит при попытке выполнить неподдерживаемые действия с libc, но также может произойти, когда обновление содержит поврежденный архив glibc или его не удается полностью распаковать и настроить по другой причине.

Еще одна проблема, которая может возникнуть, касается систем с более ранней версией XBPS 0.54 (выпущена в июне 2019 года). Эти системы будет невозможно обновить из официальных репозиториев с использованием обычной процедуры обновления из-за изменения формата сжатия, используемого для данных репозитория, которое было произведено в марте 2020 года.

В этих случаях можно восстановить вашу систему с помощью отдельной, статически скомпилированной копии XBPS.

Получение статического XBPS

Статически скомпилированные версии XBPS доступны на всех зеркалах в каталоге static/. Ссылка ниже указывает на статические копии на основном зеркале в ЕС:

https://repo-default.voidlinux.org/static

Загрузите и распакуйте последнюю версию или версию, соответствующую поврежденной копии в вашей системе (последняя версия предпочтительнее).

Использование статического XBPS

Инструменты из статического набора идентичны обычным, которые можно найти в большинстве систем. Разница лишь в том, что эти инструменты статически связаны с библиотекой C musl и должны работать в системах, где больше ничего не работает. В системах, которые больше не могут загружаться, рекомендуется выполнить chroot с использованием установочного носителя Void и использовать оттуда статические инструменты, поскольку маловероятно, что даже оболочка будет корректно работать в этих системах. При использовании статического XBPS с установкой glibc необходимо установить переменную окружения XBPS_ARCH.

5. Вклад

Запуск дистрибутива — это нечто большее, чем просто написание кода.

Чтобы внести свой вклад в репозиторий Void packages, начните с чтения документа CONTRIBUTING в репозитории void-packages на GitHub.

Чтобы внести свой вклад в это руководство, прочитайте CONTRIBUTING в репозитории void-docs.

Если у вас есть какие-либо вопросы, не стесняйтесь задавать их через IRC в #voidlinux на irc.libera.chat или в subreddit voidlinux.

Статистика использования

Если вы хотите предоставлять отчеты об использовании, программа PopCorn отправляет статистику установки обратно в проект Void. Эта статистика предназначена исключительно для подписки — PopCorn не установлен и не включен по умолчанию ни в каких системах Void. Кроме того, PopCorn требует, чтобы порт 8001 не был заблокирован в вашей системе.

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

Данные, собранные PopCorn, доступны для просмотра по адресу http://popcorn.voidlinux.org

Настройка PopCorn

Сначала установите пакет PopCorn. Затем включите службу popcorn, которая будет пытаться сообщать статистику один раз в день.

5.1. Вклад в void-docs

Исходные тексты этого руководства размещены в репозитории void-docs на GitHub. Если вы хотите внести свой вклад, пожалуйста, прочитайте о назначении Руководства, следуйте нашему руководству по стилю и отправьте pull request.