Artix Linux - это systemd-free дистрибутив линукс на основе Arch Linux. Он использует свои репозитории, но присутствует частичная совместимость с репозиториями Arch и AUR. Artix Linux предоставляет выбор систем инициализации (OpenRC, Runitб, s6, dinit). В этом гайде будет рассмотрен пример с использованием OpenRC.
Разделы дополнительно будут разделены с помощью Logical Volume Manager (LVM).
После скачивание берем устройство для создания 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
для запуска все последующих команд от имени администратора
Для работы с разделами диска будет использоваться 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
Для очистки очереди запланированных операций ввода-вывода с диском. Кроме того, рекомендуется перезагрузиться после выполнения этого и снова запустить терминал.
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
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
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, связанные с 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
Описание опций:
# 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. Он понадобится вам позже.
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-8
CTRL+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 вставьте нужную локаль
Настройка имени хоста (это обязательно для 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
Откройте файл:
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 mkinitcpio
Initramfs должен перегенерироваться, если этого не произошло, то выполните команду:
mkinitcpio -p linux-hardened
Для начала его нужно установить:
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 должно сопровождаться командой выше.
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 boot
Haveged — это простой демон энтропии, полезный для генерации непредсказуемых случайных чисел:
pacman -S haveged haveged-openrc
rc-update add haveged default
Cronie стандартный демон 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
exit
umount -R /mnt
swapoff -a
Для очистки очереди запланированных операций ввода-вывода с диском:
sync
Теперь систему можно перезагрузить:
reboot
При запуске системы нужно дважды ввести парольную фразу, после этого система запуститься.
Теперь расшифруем 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
reboot
Если после введения парольной фразы вы видите 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 'UUID=xxx' not found" и "device '/dev/mapper/lvmSystem-volRoot' not found", то скорее всего GRUB не смог найти UUID устройства или в mkinitcpio.conf отсутствует какой-то HOOK.
nano /etc/default/grub
Перепроверяем, строчку GRUB_CMDLINE_LINUX_DEFAULT. Возможно вы не правильно написали UUID или пропустили какой-либо аргумент. Просмотрите выше пунт по настройке GRUB.
Если нашли ошибку выполняем:
grub-mkconfig -o /boot/grub/grub.cfg
Для принудительной загрузки модулей ядра 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
Что будет рассматриваться
- [BootPartial] - "Почти полное" шифрование диска, более быстрое время загрузки, но менее безопасное из-за возможности заложить эксплоит в незашифрованный раздел boot
- [BootFull] - Полное шифрование диска, более медленное время загрузки.
- [UEFI] - Зашифрованный корневой раздел с системным разделом EFI
Разделы дополнительно будут разделены с помощью 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% оставшегося свободного места
- /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% оставшегося свободного места
- /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 для парольной фразы
# 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-8
CTRL+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 mkinitcpio
Initramfs должен перегенерироваться, если этого не произошло, то выполните команду:
mkinitcpio -p linux-hardened
Grub
Система установлена, теперь нужно установить загрузчик. Используем мультисистемный 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 boot
Haveged — это простой демон энтропии, полезный для генерации непредсказуемых случайных чисел:
pacman -S haveged haveged-openrc
rc-update add haveged default
Cronie стандартный демон 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
reboot
Minimal 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 Linux. Установка с полным/частичным шифрованием
Artix Linux - это systemd-free дистрибутив линукс на основе Arch Linux. Он использует свои репозитории, но присутствует частичная совместимость с репозиториями Arch и AUR. Artix Linux предоставляет...
habr.com