Artix Linux - это systemd-free дистрибутив линукс на основе Arch Linux. Он использует свои репозитории, но присутствует частичная совместимость с репозиториями Arch и AUR. Artix Linux предоставляет выбор систем инициализации (OpenRC, Runit, s6, dinit). В этом гайде будет рассмотрен пример с использованием OpenRC.
Что будет рассматриваться
[BootPartial] - "Почти полное" шифрование диска, более быстрое время загрузки, но менее безопасное из-за возможности заложить эксплоит в незашифрованный раздел boot
[BootFull] - Полное шифрование диска, более медленное время загрузки.
[UEFI] - Зашифрованный корневой раздел с системным разделом EFI
Шифрование будет производиться с помощью Linux Unified Key Setup (LUKS).
Разделы дополнительно будут разделены с помощью Logical Volume Manager (LVM).
Boot device
Чтобы установить систему создадим загручное устройство. Скачаем образ LiveCD/LiveUSB c официального сайта. Для новичков советую скачать образ с графическим окружением, например xfce, это упростит копирование и вставку команд в консоль.
После скачивания берем устройство для создания LiveCD/LiveUSB (обычно используется флешка). На него нужно записать сам образ. Для Windows я использую Rufus. Для Linux используйте команду:
dd bs=4M if=path/to/artix.iso of=/dev/sdX oflag=nocashe status=progressГде X в /dev/sdX это название блочного устройства.
Если вы используйте виртуальную машину, то укажите нужный iso образ при создании новой виртуальной машины
После загрузки с LiveCD/LiveUSB откройте терминал и введите:
sudo suдля запуска всех последующих команд от имени администратора
Начало установки
Установка с использованием Calamares рассматриваться не будет.
Для работы с разделами диска будет использоваться parted. Он не входит в стандартный пакет LiveCD/LiveUSB Artix Linux, поэтому скачаем его с репозиториев, прежде обновив базу:
pacman -Sy partedУзнайте букву X желаемого целевого установочного диска:
parted -lУбедитесь, что на этом диске нет ничего важного, затем удалите его таблицу разделов и перезапишите все ее содержимое с помощью:
dd bs=4096 if=/dev/urandom iflag=nocache of=/dev/sdX oflag=direct status=progress || trueВ целях безопасности ДОЖДИТЕСЬ завершения этого длительного процесса. Затем запустите:
syncДля очистки очереди запланированных операций ввода-вывода с диском. Кроме того, рекомендуется перезагрузиться после выполнения этого и снова запустить терминал.
Разделы диска
[BootPartial]
/dev/sdX - Физический диск с таблицей разделов MBR
/dev/sdX1 - Загрузочный незашифрованный раздел размером 1 GB
/dev/sdX2 - Зашифрован с помощью LUKS (Linux Unified Key Setup) и разделен на разделы в контейнере LVM (Logical Volume Manager)
/dev/mapper/lvm-volSwap - Раздел подкачки, размер которого > = размер вашей оперативной памяти
/dev/mapper/lvm-volRoot - Корневой раздел, который занимает 100% оставшегося свободного места
[BootFull]
/dev/sdX - Физический диск с таблицей разделов MBR
/dev/sdX1 - Зашифрован с помощью LUKS (Linux Unified Key Setup) и разделен на разделы в контейнере LVM (Logical Volume Manager)
/dev/mapper/lvm-volBoot - Зашифрованный boot раздел размером 1 ГБ
/dev/mapper/lvm-volSwap - Раздел подкачки, размер которого > = размер вашей оперативной памяти
/dev/mapper/lvm-volRoot - Корневой раздел, который занимает 100% оставшегося свободного места
[UEFI]
/dev/sdX - Физический диск с таблицей разделов GPT
/dev/sdX1 - Системный раздел EFI размером 512 MB
/dev/sdX2 - Зашифрован с помощью LUKS (Linux Unified Key Setup) и разделен на разделы в контейнере LVM (Logical Volume Manager)
/dev/mapper/lvm-volSwap - Раздел подкачки, размер которого > = размер вашей оперативной памяти
/dev/mapper/lvm-volRoot - Корневой раздел, который занимает 100% оставшегося свободного места
Создание разделов
[BootPartial]
Создайте новую таблицу разделов MBR:
parted -s /dev/sdX mklabel msdosНастройте раздел /dev/sdX1 для /boot и установите boot флаг:
parted -s -a optimal /dev/sdX mkpart "primary" "fat16" "0%" "1024MiB"
parted -s /dev/sdX set 1 boot onСоздайте раздел /dev/sdX2, который займет оставшееся свободное место - после 1 ГБ /boot и установите флаг lvm:
parted -s -a optimal /dev/sdX mkpart "primary" "ext4" "1024MiB" "100%"
parted -s /dev/sdX set 2 lvm onПросмотрите является ли выравнивание разделов правильным:
parted -s /dev/sdX print
parted -s /dev/sdX align-check optimal 1
parted -s /dev/sdX align-check optimal 2[BootFull]
Создайте новую таблицу разделов MBR:
parted -s /dev/sdX mklabel msdosСоздайте раздел /dev/sdX1, который займет все пространство, и установите флаги загрузки и lvm:
parted -s -a optimal /dev/sdX mkpart "primary" "ext4" "0%" "100%"
parted -s /dev/sdX set 1 boot on
parted -s /dev/sdX set 1 lvm onПросмотрите является ли выравнивание разделов правильным:
parted -s /dev/sdX print
parted -s /dev/sdX align-check optimal 1[UEFI]
Создайте новую таблицу разделов GPT:
parted -s /dev/sdX mklabel gptСоздайте раздел /dev/sdX1 для /boot/EFI и установите ESP флаг:
parted -s -a optimal /dev/sdX mkpart "primary" "fat32" "0%" "512MiB"
parted -s /dev/sdX set 1 esp onСоздайте раздел /dev/sdX2, который займет оставшееся свободное место - после 512 MB /boot/efi и установите флаг lvm:
parted -s -a optimal /dev/sdX mkpart "primary" "ext4" "512MiB" "100%"
parted -s /dev/sdX set 2 lvm onПросмотрите является ли выравнивание разделов правильным:
parted -s /dev/sdX print
parted -s /dev/sdX align-check optimal 1
parted -s /dev/sdX align-check optimal 2Настройка и шифрование логических томов
Шифрование диска будет использовать Linux Unified Key Setup (LUKS), который является частью расширенной версии cryptsetup.
Чтобы принудительно загрузить модули ядра Linux, связанные с Serpent и другими надежными шифрованиями, с вашего LiveCD/LiveUSB, запустите:
cryptsetup benchmarkФизический раздел LUKS можно создать и отформатировать следующим образом:
# [BootPartial]
cryptsetup --verbose --type luks1 --cipher serpent-xts-plain64 --key-size 512 --hash sha512 --iter-time 10000 --use-random --verify-passphrase luksFormat /dev/sdX2
# [BootFull]
cryptsetup --verbose --type luks1 --cipher serpent-xts-plain64 --key-size 512 --hash sha512 --iter-time 10000 --use-random --verify-passphrase luksFormat /dev/sdX1
# [UEFI]
cryptsetup --verbose --type luks1 --cipher serpent-xts-plain64 --key-size 512 --hash sha512 --iter-time 10000 --use-random --verify-passphrase luksFormat /dev/sdX2Описание опций:
verbose - Выводит дополнительную информацию о выполнении команды.
type luks1 - Для использования более общей версии LUKS (Из-за ограничений grub)
cipher serpent-xts-plain64 - Выбирает, какой шифр использовать
key-size 512 - Размер ключа шифра
hash sha512 - Алгоритм хеширования, используемый для получения ключа.
iter-time 10000 - Количество миллисекунд, затрачиваемое на обработку парольной фразы
use-random - Выбирает, какой генератор случайных чисел использовать
verify-passphrase - Используется для luksFormat и luksAddKey для парольной фразы
При выполнении программа попросит подтвердить перезапись данных. Введите капсом "YES":
# WARNING!
# ========
# This will overwrite data on /dev/sdX irrevocably.
# Are you sure? (Type 'yes' in capital letters): YESДалее введите парольную фразу:
# Enter passphrase for /dev/sdX:
# Verify passphrase:
# Key slot 0 created.
# Command successful.Раздел, зашифрованный с помощью LUKS, необходимо открыть и смонтировать с помощью LVM системы:
# [BootPartial]
cryptsetup luksOpen /dev/sdX2 lvm-system
# [BootFull]
cryptsetup luksOpen /dev/sdX1 lvm-system
# [UEFI]
cryptsetup luksOpen /dev/sdX2 lvm-systemДля открытия раздела введите парольную фразу
# Enter passphrase for /dev/sdX: Теперь можно создать физический том с LVM и ранее использовавшегося идентификатора (lvm-system) следующим образом:
pvcreate /dev/mapper/lvm-systemИмея физический том, можно создать группу логических томов с именем lvmSystem следующим образом:
vgcreate lvmSystem /dev/mapper/lvm-systemВ саму группу добавляем логические тома (Для swap я задал 1 ГБ, но рекомендуется задать >= кол-ву оперативной памяти):
# [BootPartial]
lvcreate --contiguous y --size 1G lvmSystem --name volSwap
lvcreate --contiguous y --extents +100%FREE lvmSystem --name volRoot
# [BootFull]
lvcreate --contiguous y --size 1G lvmSystem --name volBoot
lvcreate --contiguous y --size 1G lvmSystem --name volSwap
lvcreate --contiguous y --extents +100%FREE lvmSystem --name volRoot
# [UEFI]
lvcreate --contiguous y --size 1G lvmSystem --name volSwap
lvcreate --contiguous y --extents +100%FREE lvmSystem --name volRootФорматирование разделов
Загрузочный раздел:
# [BootPartial]
mkfs.fat -n BOOT /dev/sdX1
# [BootFull]
mkfs.fat -n BOOT /dev/lvmSystem/volBoot
# [UEFI]
mkfs.fat -n ESP -F 32 /dev/sdX1Корневой раздел:
mkfs.ext4 -L ROOT /dev/lvmSystem/volRootРаздел подкачки:
mkswap -L SWAP /dev/lvmSystem/volSwapЭта команда выведет сообщение типа:
# Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
# LABEL=SWAP, UUID=d91f0877-4b84-40c3-82f9-88d2398303b3Скопируйте куда-нибудь свой swap UUID. Он понадобится вам позже.
Монтирование разделов
Корнем будет /mnt, куда мы и будем устанавливать систему
swapon /dev/lvmSystem/volSwap
mount /dev/lvmSystem/volRoot /mnt
mkdir /mnt/boot
# [BootPartial]
mount /dev/sdX1 /mnt/boot
# [BootFull]
mount /dev/lvmSystem/volBoot /mnt/boot
# [UEFI]
mount --mkdir /dev/sdX1 /mnt/boot/efiОбязательно проверьте точки монтирования (Вывод для UEFI):
artix-live:[root]:/home/artix# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 73.3M 1 loop /run/artix/sfs/livefs
loop1 7:1 0 1.1G 1 loop /run/artix/sfs/rootfs
sda 8:0 0 8G 0 disk
├─sda1 8:1 0 511M 0 part /mnt/boot/efi
└─sda2 8:2 0 7.5G 0 part
└─lvm-system 254:0 0 7.5G 0 crypt
├─lvmSystem-volSwap 254:1 0 1G 0 lvm [SWAP]
└─lvmSystem-volRoot 254:2 0 6.5G 0 lvm /mnt
sr0 11:0 1 1.2G 0 rom /run/artix/bootmntНастройка и установка пакетов.
Для начала части операционной системы нужно загрузить и установить следующим образом:
basestrap /mnt base base-devel openrc elogind-openrc linux-hardened linux-hardened-headers nanoВместо стандартного ядра будет установлена предпочтительная защищенная версия
Теперь генерируем fstab:
fstabgen -U /mnt >> /mnt/etc/fstabЗайдем на установленную среду:
artix-chroot /mnt /bin/bashДальше все операции будут производиться в ней
Установите пароль для root:
passwdДля этого введите пароль два раза:
# New password:
# Retype new password:
# passwd: password updated successfullyОбновите базу пакетов:
pacman -SyЯзык, часовой пояс
Настройка часового пояса:
# ln -s /usr/share/zoneinfo/Continent/City /etc/localtimeГде Continent/City имя вашего местоположения. Например Europe/Moscow:
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtimeНастройка аппаратных часов:
hwclock --systohcГенерация локалей:
echo -e "en_US.UTF-8 UTF-8" >> /etc/locale.genДанная команда добавит в конец файла строчку с английской локалью, но если вам нужен другой язык, то откройте файл /etc/locale.gen в любом редакторе.
Например используя nano:
nano /etc/locale.genНаходим строчку с нужным языком и раскомментируемеё. Для русского это:
#ru_RU.UTF-8 UTF-8CTRL+Q поиск, CTRL+O сохранение, CTRL+X выход
Английскую локаль раскомментировать обязательно, остальные языки опционально.
Чтобы проверить раскомментированные локали введите следующую команду:
grep -v '^#' /etc/locale.genПосле выполняем генерацию выбранных локалей:
locale-genНастройка языка системы:
Сам язык системы задаётся в файле /etc/locale.conf:
echo "LANG=en_US.UTF-8" > /etc/locale.confВместо en_US.UTF-8 вставьте нужную локаль
Настройка сети и хоста
Далее изменяйте your_host_name на нужное имя хоста.
Настройка имени хоста (это обязательно для OpenRC):
echo "hostname=your_host_name" > /etc/conf.d/hostnameТеперь добавите записи в hosts. это удобнее делать через редактор:
nano /etc/hostsДобавьте данные строчки в этот файл:
127.0.0.1 localhost
::1 localhost
127.0.1.1 your_host_name.localdomain your_host_nameЕсли система имеет постоянный IP-адрес, его следует использовать вместо 127.0.1.1.
Установите DHCP клиент:
pacman -S dhcpcd dhclientЖелательным выбором для управления сетевыми интерфейсами является Network Manager, для установки и активации службы необходимо запустить следующее:
pacman -S gcr networkmanager networkmanager-openrc
rc-update add NetworkManager defaultЗагрузчик и ядро
Mkinitcpio
Файл /etc/mkinitcpio.conf позволяет настраивать различные параметры ядра. В части HOOKS. Между ключевыми словами block и filesystems необходимо поместить encrypt lvm2, чтобы включить полное шифрование диска. Также может быть полезно включить ключевое слово resume, чтобы включить параметры приостановки на диске.
Откройте файл:
nano /etc/mkinitcpio.confВставьте хуки: encrypt, lvm2, resume в нужные места
HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems fsck)Должно быть так:
HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block encrypt lvm2 resume filesystems fsck)Дабы избежать возможных проблем в будущем стоит удалить пакет artix-grub-theme, если он присутствует:
pacman -Rc artix-grub-themeТак как мы используем защищенное ядро, то стандартное стоит удалить, если оно присутствует:
pacman -Rc linux linux-headersЧтобы избежать ошибок установки cryptsetup, одновременно обновите pacman и openssl и установите устаревший openssl:
pacman -S openssl openssl-1.1 pacmanТеперь нужно установить эти пакеты:
pacman -S lvm2 cryptsetup nano glibc mkinitcpioInitramfs должен перегенерироваться, если этого не произошло, то выполните команду:
mkinitcpio -p linux-hardenedGrub
Система установлена, теперь нужно установить загрузчик. Используем мультисистемный GRUB
Для начала его нужно установить:
pacman -S grubКак вы помните мы записывали swap UUID, теперь нужно записать root UUID:
# [BootPartial]
blkid -s UUID -o value /dev/sdX2
# [BootFull]
blkid -s UUID -o value /dev/sdX1
# [UEFI]
blkid -s UUID -o value /dev/sdX2Вывод будет примерно такой. Это и есть наш root UUID:
# 896c201f-f454-4d41-9b67-345a8b6a217cЧтобы grub нашел зашифрованные LUKS разделы, нужно настроить это. Откроем /etc/default/grub:
nano /etc/default/grub Теперь изменим строку GRUB_CMDLINE_LINUX_DEFAULT:
GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=UUID=xxx:lvm-system loglevel=3 quiet resume=UUID=yyy net.ifnames=0"Где xxx это root UUID, а yyy это swap UUID.
Должно выглядеть примерно так:
GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=UUID=896c201f-f454-4d41-9b67-345a8b6a217c:lvm-system loglevel=3 quiet resume=UUID=d91f0877-4b84-40c3-82f9-88d2398303b3 net.ifnames=0"Раскомментируйте, чтобы включить загрузку с зашифрованных устройств LUKS:
GRUB_ENABLE_CRYPTODISK="y"Затем вы можете установить GRUB и сгенерировать его config:
# [Boot]
grub-install --target=i386-pc --boot-directory=/boot --bootloader-id=artix --recheck /dev/sdX
grub-mkconfig -o /boot/grub/grub.cfg
# [UEFI]
pacman -S efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=artix --recheck /dev/sdX
grub-mkconfig -o /boot/grub/grub.cfgПримечание. Каждое изменение в конфигурации GRUB должно сопровождаться командой выше.
Другие пакеты
Для расшифровки и использования томов LUKS/LVM необходимо установить и активировать следующие службы:
pacman -S device-mapper-openrc lvm2-openrc cryptsetup-openrc
rc-update add device-mapper boot
rc-update add lvm boot
rc-update add dmcrypt bootСлужба udev (eudev / eudev-openrc) должна быть запущена по умолчанию на уровне выполнения sysinit. Его активацию можно подтвердить следующим образом:
rc-status sysinit | grep udevДолжен вывести это:
# udev [ stopped ]
# udev-trigger [ stopped ]Dbus должна быть установлена и активирована. Если это не так, это можно сделать следующим образом:
rc-update add dbus defaultЛогин systemd проектов должен быть установлен как часть базовых мета пакетов:
rc-update add elogind bootHaveged — это простой демон энтропии, полезный для генерации непредсказуемых случайных чисел:
pacman -S haveged haveged-openrc
rc-update add haveged defaultCronie стандартный демон UNIX, который запускает определенные программы в запланированное время:
pacman -S cronie cronie-openrc
rc-update add cronie defaultДемоны NTP, ACPI, Syslog-NG можно установить и активировать следующим образом:
pacman -S ntp ntp-openrc acpid acpid-openrc syslog-ng syslog-ng-openrc
rc-update add ntpd default
rc-update add acpid default
rc-update add syslog-ng defaultНеобязательные зависимости:
pacman -S dosfstools gptfdisk libisoburn mtools btrfs-progs os-proberПакеты микрокодов ядра для дополнительных инструкций процессора:
# intel
sudo pacman -S intel-ucode iucode-tool
# amd
sudo pacman -S amd-ucode iucode-toolПоследние шаги
Выйдите из chroot и размонтируйте тома:
exit
umount -R /mnt
swapoff -aДля очистки очереди запланированных операций ввода-вывода с диском:
syncТеперь систему можно перезагрузить:
rebootПри запуске системы нужно дважды ввести парольную фразу, после этого система запуститься.
Устранение ошибок при загрузке
Если ваша система не загрузилась по той или иной причине, то надо сначала загрузиться с LiveCD/LiveUSB.
Теперь расшифруем LVM и смонтируем разделы:
# [BootPartial]
cryptsetup luksOpen /dev/sdX2 lvm-system
mount /dev/lvmSystem/volRoot /mnt
mount /dev/sdX1 /mnt/boot
swapon /dev/lvmSystem/volSwap
# [BootFull]
cryptsetup luksOpen /dev/sdX1 lvm-system
mount /dev/lvmSystem/volRoot /mnt
mount /dev/lvmSystem/volBoot /mnt/boot
swapon /dev/lvmSystem/volSwap
# [UEFI]
cryptsetup luksOpen /dev/sdX2 lvm-system
mount /dev/lvmSystem/volRoot /mnt
mount /dev/sdX1 /mnt/boot/efi
swapon /dev/lvmSystem/volSwapЕсли вы видите подобную ошибку при попытке монтирования:
# mount: /mnt: special device /dev/lvmSystem/volRoot does not exist.
# dmesg(1) may have more information after failed mount system call.То выполните эту команду и заново выполните монтирование LVM:
vgchange -a y lvmSystemЗайдём в смонтированную среду:
artix-chroot /mnt /bin/bashПри завершении работ выполняем:
exit
umount -R /mnt
swapoff -a
sync
rebootMinimal GRUB

Если после введения парольной фразы вы видите Minimal GRUB как показано на скриншоте, то скорее всего GRUB не нашёл файл /boot/grub/grub.cfg или его директорию.
Заходим в систему через LiveCD/LiveUSB и выполняем:
# [Boot]
grub-install --target=i386-pc --boot-directory=/boot --bootloader-id=artix --recheck /dev/sdX
grub-mkconfig -o /boot/grub/grub.cfg
# [UEFI]
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=artix --recheck /dev/sdX
grub-mkconfig -o /boot/grub/grub.cfgЕсли вы загрузили LiveCD/LiveUSB в boot режиме, но вам нужно сконфигурировать GRUB для UEFI, то выполните только эту команду:
grub-mkconfig -o /boot/grub/grub.cfgЭто сработает, если до этого вы запускали grub-install с нужными аргументами.
Hibernation device not found
Если после введения парольной фразы вы видите: "hibernation device 'UUID=xxx' not found" и "device '/dev/mapper/lvmSystem-volRoot' not found", то скорее всего GRUB не смог найти UUID устройства или в mkinitcpio.conf отсутствует какой-то HOOK.
Неправильный UUID
Заходим в систему через LiveCD/LiveUSB и откроем /etc/default/grub:
nano /etc/default/grubПерепроверяем, строчку GRUB_CMDLINE_LINUX_DEFAULT. Возможно вы не правильно написали UUID или пропустили какой-либо аргумент. Просмотрите выше пунт по настройке GRUB.
Если нашли ошибку выполняем:
grub-mkconfig -o /boot/grub/grub.cfgОтсутствует HOOK
Заходим в систему через LiveCD/LiveUSB.
Для принудительной загрузки модулей ядра Linux, связанных с Serpent выполним:
cryptsetup benchmarkОткроем /etc/mkinitcpio.conf:
nano /etc/mkinitcpio.confПроверяем все ли хуки на месте:
HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block encrypt lvm2 resume filesystems fsck)Применим изменения:
mkinitcpio -p linux-hardenedЛитература
Artix Installation Full Disk Encryption with BOOT
