В этой статье я хочу рассказать как установить Arch Linux с LVM на зашифрованный раздел. Сейчас у арча появился инсталлер, но мне больше нравится устанавливать все вручную, так есть более глубокое понимание процесса. Если вам будет интересно, то на моем ютуб канале есть видео в котором я делаю то же самое по этой статье, но для большинства статьи будет достаточно.
Почему Arch?
До этого я использовал ALT Linux, Ubuntu, SuSe, Fedora, Debian, Arch. И когда я попробовал арч я понял, что он полностью удовлетворяет моим потребностям.
Что мне в нем нравится:
Минимализм. Не ставится ничего лишнего. Ты сам выбираешь те пакеты которые ты хочешь использовать.
Rolling base releases. У вас всегда последние версии всех пакетов. Эта модель мне нравится значительно больше, чем выходящие раз в пол года версии
ArchWiki. Это огромное количество документации, которое покрое любую возникшую проблему
AUR за огромное количество софта
Arch не очень подойдет вам если у вас мало опыта в командной строке. Если эта статья вам кажется сложной, то попробуйте начать с Ubuntu или Manjaro.
Boot usb
Для начала нам нужно создать загрузочную флешку. Для этого сначала качаем последний образ с арчем с сайта https://archlinux.org/download/
После этого если вы на винде или маке, то можете записать его на флешку с помощью balenaEtcher
Если вы в линуксе, то можете сделать это командой:
dd bs=4M if=path/to/archlinux-version-x86_64.iso of=/dev/sdx conv=fsync oflag=direct status=progress
Загружаемся с флешки
Иногда для этого в биосе нужно выключить Secure boot
. Не переживайте, эту опцию можно всегда включить назад.
Во время установки желательно подключиться к интернету по проводу. Заранее проверьте, что у вас есть интернет, так как во время установки мы будем качать пакеты из интернета:
ping 8.8.8.8
После этого можем начать установку. Для начала надо определиться на какой диск мы хотим ставить арч. Можем посмотреть какие устройства есть у нас в системе. Если у нас есть nvme диски можем посмотреть их командой:
ls /dev/nvme*
Если у нас обычный SATA диск, то мы увидим его командой:
ls /dev/sd*
Кроме того можем посмотреть диски командой:
lsbkl
и можем посмотреть детальную информацию (UUID, BS, Type) командой:
blkid
Я буду все устанавливать на /dev/nvme0n1
.
Encryption LUKS
Мы будем шифровать весь диск. Делается это ради безопасности. И если у вас диск полностью зашифрован, то даже если вы потеряете ноутбук или пк, то информацию с вашего диска считать никто не сможет. Это будет один такой большой блочный девайс зашифрованный, для расшифровки которого при загрузке нужно будет ввести пароль.
Для шифрования мы будем использовать такую штуку как dm-crypt, он работает на LUKS. LUKS это спецификация для шифрования блочных устройств, она является некоторым устоявшимся стандартом в линуксе. А dm-crypt это собственно модуль ядра, который загружаясь шифрует и дешифрует данные на девайсе.
Собственно эта штука шифрует весь девайс. Она не работает отдельно с приложениями, не имеет различные ключи для разных пользователей, то есть нет пользовательской политики. И она не шифрует ничего на уровне файлов.
LUKS - спецификация, которая описывает тип шифрования, стандарт;
dm-crypt - модуль ядра;
cryptsetup - это уже утилита, программа, которую вы будете использовать для настройки этого всего дела.
LVM2
Еще я буду использовать lvm это менеджер логических дисков.
Без LVM если вы разбиваете диск на логические диски, то потом довольно сложно поменять размер этих логических дисков. А вот LVM очень сильно упрощает эту задачу. Вы можете быстро и на лету уменьшать или увеличивать размеры.
Можно даже добавлять разделы из других дисков. Хотя я сам так не делал.
Разбиваем диски
Для начала нам нужно разбить наши диски на разделы. Нам нужно сделать два раздела. Первый будет для /boot он не будет зашифрован, нужен он для того чтобы наша система смогла загрузиться. На втором будет все остальное и он будет полностью зашифрован.
Разбить разделы можно с помощью cfdisk, fdisk, parted. Выбирайте то, что вам больше нравится. По сути все они довольно простые.
Первый раздел должен быть размером 512мб, fat32. Второй должен занимать все остальное пространство (хотя это по желанию) и файловую систему на этом этапе можем выбрать любую:
parted /dev/nvme0n1
mklabel gpt
mkpart ESP fat32 1MiB 512MiB
set 1 boot on
mkpart primary
Теперь можем настроить шифрование на втором диске:
cryptsetup luksFormat /dev/nvme0n1p2
После этого можем открыть этот диск командой:
cryptsetup open /dev/nvme0n1p2 luks
У нас спросят пароль и если пароль верный то диск откроется и будет создано новое устройство "luks".
Его можно будет увидеть командой:
ls /dev/mapper/*
Setting up LVM
Теперь нужно настроить LVM. Сейчас нужно сделать один общий контейнер, он называется Physical volume. После этого сделать группу "Volume group". И в группе создать логические разделы "Logical volume":
pvcreate /dev/mapper/luks
vgcreate main /dev/mapper/luks
lvcreate -L 10G main -n swap
lvcreate -l 100%FREE main -n root
Мы можем проверить что у нас создалось командой lvs
:
$ lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root main -wi-a----- 108.72g
swap main -wi-a----- 10.00g
Форматируем разделы
На всех созданных разделах нужно создать файловую систему:
mkfs.ext4 /dev/mapper/main-root
mkswap /dev/mapper/main-swap
$ mkfs.fat -F32 /dev/nvme0n1p1
Монтируем
mount /dev/mapper/main-root /mnt
mkdir /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot
swapon /dev/mapper/main-swap
Устанавливаем
Теперь можно установить арч и самые необходимые пакеты в примонтированные разделы:
$ pacstrap -i /mnt base linux linux-firmware base-devel lvm2 vim dhcpcd net-tools iproute2 networkmanager
Генерируем fstab
$ genfstab -U /mnt >> /mnt/etc/fstab
И сразу же проверяем все ли в порядке:
$ cat /mnt/etc/fstab
Заходим в установленный арч
$ arch-chroot /mnt
Генерируем локаль
Для начала нам нужно сгенерировать правильную локаль. Она используется всеми компиляторами, которые будут собирать ваши пакеты. И для правильного рендеринга текста, отображения даты, времени лучше сделать это сразу же.
Для этого нужно открыть файл:
vim /etc/locale.gen
И раскомментировать нужные вам локали. Для меня это ru_RU.UTF-8 UTF-8 en_US.UTF-8 UTF-8.
После того как раскомментили выполните команду:
locale-gen
Mkinitcpio
Mkinitcpio это улитита которая генерирует initramfs. И так как мы использовали два модуля, которые не включены по-умолчанию encrypt
и lvm2
, нам надо их включить.
Для этого откроем файл:
vim /etc/mkinitcpio.conf
Дойдем до строки с хуками и добавим туда encrypt
и lvm2
:
HOOKS=(base udev autodetect modconf block filesystems keyboard encrypt lvm2 fsck)
Так же мы можем использовать модуль sd-encrypt
и модуль sd-lvm2
они довольно похожи по функционалу, sd-encrypt
немного более гибкий, например, он может помочь если нужно открыть при загрузке сразу два зашифрованных раздела. encrypt
может открыть только один.
Там есть еще небольшие отличия. Например, sd-encrypt
при вводе пароля показывает звездочки, фактически показывая сколько символов в пароле, тогда как encrypt
ничего не показывает когда вы вводите пароль.
После того как вы сохранили файл нужно пересобрать initramfs:
mkinitcpio -p linux
Если все ок то увидите сообщение Image generation successful.
Если вдруг видите какие-либо WARNING то можете не переживать о них на этом этапе.
Bootloader
Теперь нам нужно настроить бутлоадер. Это такая штука которая при загрузке говорит системе где брать ядро чтобы его загрузить.
Самый популярный - GRUB2. Если вы планируете использовать линукс рядом с виндой, то я рекомендую использовать его, с ним это сделать будет проще.
Если вы как и я используете только линукс, то можно обойтись стандартным systemd-boot
который уже установлен в нашей системе. Он суперпростой, мало что умеет, но это именно то, что нам нужно.
Для этого выполните команду:
bootctl install --path=/boot
теперь нам нужно настроить бутлоадер указав ему где брать ядро. Для этого нужно отредактировать файл /boot/loader/loader.conf
.
timeout 3
default arch
Мы добавили запись arch
.
Но у нас нет файла с такой конфигурацией, так что давайте его создадим:
vim /boot/loader/entries/arch.conf
и добавим в этот файл следующее содержимое:
title Arch Linux Encrypted
linux /vmlinuz-linux
initrd /initramfs-linux.img
oprions rw cryptdevice=UUID=$ID:main root=/dev/mapper/main-root resume=/dev/mapper/main-swap
где $ID
нужно заменить вашим настоящим ID, взять вы его можете тут:
cryptsetup luksUUID /dev/nvme0n1p2
Сохраняемся.
Добавляем пользователя
Для начала надо отредактировать sudoers, делается это командой:
sudo EDITOR=vim visudo
И в этом файле надо раскомментить строку:
%wheel ALL=(ALL) ALL
Нужно помнить, что у нас в системе нет пользователя, давайте его добавим, делается это командой:
useradd -m -G wheel,users -s /bin/bash dm$ passwd dm
Комментарии (28)
13werwolf13
21.06.2022 11:45+1По пунктам про арч, поехали:
Минимализм. Не ставится ничего лишнего. Ты сам выбираешь те пакеты которые ты хочешь использовать.
Мало кто задумывается, но любой дистрибутив можно устанавливать как рач, дебианоподобные ставятся через debootstrap, opensuse имеет у пакетного менеджера опцию смены корня и так далее. размечаешь диск, монтируешь куда нибудь, ставишь из консольки только нужные пакетики, чмод, граб, ребут.
Rolling base releases. У вас всегда последние версии всех пакетов. Эта модель мне нравится значительно больше, чем выходящие раз в пол года версии
Ролингрелиз дистров больше чем один, самый стабильный конечно дженту (при условии что не криворукий юзверь пользуется), вторым по штабильности заслуженно ставлю tumbleweed, а рач как всегда в конце списка
ArchWiki. Это огромное количество документации, которое покрое любую возникшую проблему
Вот тут безспорно самая крутая вики среди всех дистров хотя бы за то что локализованные страницы обычно не сильно отстают от первоисточника (боль дженту и freebsd)
AUR за огромное количество софта
А вот AUR это жирный минус рача. весь софт в системе должен ставиться одним пм из однотипных реп и всё такое. AUR же не является репозиторием пакетов. альтернативы у других дистров есть: у opensuse это мегашикарный OBS, у красношляпоподобных это copr и так далее. Единственные плюс AUR это то что pkgbuild'ы писать сильно проще чем rpm spec который в свою проще чем deb вариант, но как альтернатива ebuild в gentoo пишется плюсминус так же но не является для генты чужеродным как AUR в раче.
Всё вышенаписаное является строго ИМХО и ни в коем случае не навязываю. Сам когда-то считал рач отличным дистрибутивом.
Ну и по поводу тела статьи: LVM немножко устарел, в эпоху btrfs/zfs он уже не особо нужен, опять же ИМХО.
Yuriy_krd
21.06.2022 12:19Почему у вас в комментарии везде «рач» а не «арч» ?)))
13werwolf13
21.06.2022 12:32простите, привычка.. выработанный годами общения в разных cumюнити рефлекс.
Johan_Palych
21.06.2022 14:05+1Обсуждать Gentoo смысла нет в "разных cumюнити"
пока админ локалхоста не покажет свой make.conf и package.usecat /etc/portage/make.conf cat /etc/portage/package.use
13werwolf13
21.06.2022 14:18шо, будем конфигами меряться? сколько строк примите за труъ? ????
Johan_Palych
21.06.2022 16:50Не-а. Нет времени и желания.
Продуктивней почитать про иерархию применения use флагов:profile -> make.conf -> package.use https://devmanual.gentoo.org/profiles/index.html
0xd34df00d
21.06.2022 20:28-1/etc/portage/make.conf
Ньюфажество.
Johan_Palych
21.06.2022 22:11-1Олдфажество? ГОРДЫНЯ?
ГОРДЫНЯ, чувство собственной важности, является причиной страданий
и болезней, часто неизлечимых, а также смерти.
Именно гордыня является источником всех пагубных мыслей и эмоций.
Valser
21.06.2022 23:38Спасибо за комментарии. Где-то именно так мысли и витали, без знания некоторых тонкостей из Вашего комментария, но теперь точно понял, что, да так оно и есть ч жаль карма не позволяет поставить плюс, плюсаните, кто может.
lxfrmn
22.06.2022 11:34+2весь софт в системе должен ставиться одним пм из однотипных реп и всё такое
Когда-то я тоже колупал себе мозг конструкциями типа "Х должен Y, потому что Z", где Y и Z — чисто теоретические домыслы. А потом мне надоела эта аутомозгомойка и я забил онанировать на теории, стал двигаться в сторону прагматизма, где главное — практический результат. И тогда внезапно понял, что мои игры в идеально правильную систему бессмысленны чуть более, чем полностью. Сейчас я использую Manjaro, в системе у меня свалка из дистрибутивных реп, AUR, обмазанных костылями deb и rpm, вручную собранных программ, и знаете — всё прекрасно работает. Надо будет — и виндой попользуюсь, невзирая на то, какая она там кривая под капотом и всё такое :)
kale
22.06.2022 17:58А вот AUR это жирный минус рача. весь софт в системе должен ставиться одним пм из однотипных реп и всё такое.
AUR лишь предоставляет метаданные и сборочные скрипты пакета для стандартного менеджера пакетов arch. С этой стороны претензии к нему странны. Реальная проблема в том, что новички не всегда в курсе или несерьезно относятся к тому, что aur никак не модерируется и по сути небезопасен. Я бы не называл AUR "жирным минусом" - скорее это реально удобная фича чем баг, задуманная изначально для профессионалов которые понимают что они делают, ну а новички часто отстреливают себе многое, да.
13werwolf13
22.06.2022 18:24претензия не к тому "что" а к тому "как"
как я уже писал у других дистрибутивов тоже есть инструменты "подобные", но реализованы они правильно. а это дико кривой костыль, который кстати нарушает KiSS который арчеры считают своим основным принципом.kale
22.06.2022 18:43А не могли бы вы уточнить, что сделано "неправильно", и где сделано "правильно", а также в чем проявляется "костыльность" и чем нарушается принцип KISS. Реально хочется разобраться и расширить кругозор, так сказать)
13werwolf13
22.06.2022 19:06мне казалось я понятно написал.. даже не знаю как ещё понятнее.. но попробую:
чтобы минимизировать проблемы с ПО есть несколько "правил" которых стоит придерживаться. одно из них касается поставки ПО, а именно то что поставляться оно должно одним способом. тоесть из реп одинаковых одним единственным ПМ. АУР же не является репозиторием пакетов. То есть АУР чужеродный способ поставки пакетов, если бы ВСЕ пакеты ставились из АУР было бы норм, но это не так. часть пакетов тянутся в бинарном виде, часть тянутся в виде скрипта и собираются локально, досыпать сюда snap, flatpack, appimage, make install и получится идеальный выстрел в ногу замедленного действия.
как пример "правильного" аналога aur я часто привожу obs от opensuse или copr от fedora/centos. там так же любой желающий может сделать пакет, только этот пакет не будет лежать ввиде скрипта, он соберётся в rpm и покладётся в пользовательскую репу которую потом можно добавить в родной системе ПМ и поставить как и любые другие пакеты. конечно есть недостатки. например в сузевом OBS можно собирать только открытое ПО. перепаковать проприетарный софт из deb в rpm например технически возможно, но на практике за такое твою репу удалят а тебя забанят. но и из таких ситуаций есть выход - сторонний obs от коммюнити. более того obs позволяет собирать не только rpm пакеты для одного дистрибутива, там так же можно собрать пакеты и репу для rh'подобных (да они отличаются) и даже для debian или того же arch. таких реп немного, но они есть. собранная в obs репа для арча добавляется в конфиг пакмана и пакман тянет с неё родные для себя пакеты.
другим примером аналога aur можно назвать gentoo. ebuild для gentoo это почти то же самое что pkgbuild для arch. покласть его можно в апсолютно любую git репу и это будет РОДНОЙ системе способ поставки ПО. правда в случае генты родным для системы способом будет и бинарный пакет, там вообще ПМ из коробки весьма многое умеет из покон веков, например меня дико порадовала возможность прикрутить distc.и в раче таких вот "спорных" решений много, например они не осилили KMP и поставляют модули в виде dkms что мягко говоря выстрел в ногу уже не из пистолета а из базуки..
P.S.: я не очень умею объяснять, но надеюсь мысль донёс. я не хейтер арча как такового, мне нравятся в нём некоторые вещи, но из-за таких вот костылей я от него отказался полностью
andreymal
22.06.2022 19:22ebuild для gentoo это почти то же самое что pkgbuild для arch.
Я не юзал gentoo, расскажите, а в чём разница-то? Чем ebuild принципиально лучше чем pkgbuild?
они не осилили KMP
Я не очень понял, что такое KMP? Он как-то умеет магически решать проблему бесконечного числа сборок ядер разных версий и проблему несовместимости API разных версий ядра?
и поставляют модули в виде dkms
Это неправда, для официально поддерживаемых ядер в официальных же репозиториях лежат пакеты с заранее собранными модулями, не требующие использования dkms (например: nvidia, r8168, virtualbox-host-modules-arch)
Если же вам не нравится, что модули из AUR требуют dkms, то как вы предлагаете распространять их для абсолютно любых версий официальных и неофициальных ядер самых разных версий?
13werwolf13
22.06.2022 19:40Я не юзал gentoo, расскажите, а в чём разница-то? Чем ebuild принципиально лучше чем pkgbuild?
тем что ebuild это родной для emerge формат, а pkgbuild для pacman костыль приделанный сбоку. вроде бы я это выше описал
Я не очень понял, что такое KMP
KMP это когда пакет несёт в себе модуль собранный для того ядра что есть в твоём дистре, dkms это сраный make install в систему со всеми вытекающими
Это неправда
но я же не сказал что "все", но большинство. в других дистрах тоже встречается dkms, но не в таком повальном количестве
andreymal
22.06.2022 19:46pkgbuild для pacman костыль приделанный сбоку
Допустим, а почему это плохо?
KMP это когда пакет несёт в себе модуль собранный для того ядра что есть в твоём дистре
Это в официальных репозиториях Arch есть, да
но я же не сказал что "все", но большинство
Я их поштучно не считал, но лично у меня в системе из dkms-модулей только v4l2loopback — и подозреваю, что это не «не осилили», а просто не нашлось мейнтейнера-добровольца, который не поленился бы заранее собрать его под официальные ядра
lxfrmn
22.06.2022 20:24Чем ebuild принципиально лучше чем pkgbuild?
Ебилды поддерживают use-флаги, благодаря чему можно повырезать из программ целые куски кода во время сборки - например, собрать всю систему без каких-либо намёков на Qt или GTK.
В реале не всё так просто и там масса нюансов, но в целом вот так. Арч такой гибкости не может обеспечить.
kale
22.06.2022 19:22Спасибо за такой развернутый и подробный ответ. Возможно, не со всеми вашими тезисами я полностью согласен, но тут уже можно свалиться в холивар) но в любом случае они очень интересны для меня, есть что обдумать)
Johan_Palych
21.06.2022 12:29Вы решили запороть установку с флешки?
Надо читать ArchWiki. Вы сами об этом написали.
Вариантов много.https://wiki.archlinux.org/title/USB_flash_installation_medium using dd: dd bs=4M if=path/to/archlinux-version-x86_64.iso of=/dev/sdx conv=fsync oflag=direct status=progress
andreymal
21.06.2022 12:40+2of=/dev/sda
Предчувствую новую волну школьников, запоровших системный SATA-диск путём копирования этой команды не глядя)
Jesusatana
21.06.2022 13:36Боюсь что школьники не юзают арч. У них в приоритете устанавливать кал(и) линух - как основную систему.
BioHazzardt
21.06.2022 18:46я так будучи студентом образ убунты в системную память смартфона записал (хотел на микросд, установить надо было, а флешки под рукой не было)
mpetrunin
21.06.2022 16:14+2Есть репозиторий spark: Arch Linux Provisioning with Ansible (Playbook на Ansible для настройки Arch linux). И в нём есть компактная инструкция по установке: https://github.com/pigmonkey/spark/blob/master/INSTALL.md, довольно удобно организована для накатывания.
tenhi_shadow
22.06.2022 10:07Это уже есть на офф вики https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system
Это уже есть на хабре https://habr.com/ru/post/420081/
typ6o0jiehb
22.06.2022 21:31— в такой установке Swap находится на зашифрованном разделе, а значит, что hibernate не будет нормально работать.
— со своей колокольни конечно, но я бы рекомендовал btrfs вместо lvm, никаких преимуществ последней в домашнем использовании (имхо)
— в указанном archwiki можно делать свои статьи, как например https://wiki.archlinux.org/title/User:Altercation/Bullet_Proof_Arch_Install или вот ещё https://wiki.archlinux.org/title/User:M0p/LUKS_Root_on_Btrfs,
я бы рекомендовал туда пилить такое
— в моем случае, после установки на nvme система не грузилась, пока не прописал в /etc/mkinitcpio.confMODULES=(vmd)
Writer
Пилить статью на Хабр просто про установку Арча? Я бы на такое не отважился - с говном съедят. К тому же, автору с его любовью к роллингу и зашифрованному корню больше показан Tumbleweed. Гораздо меньше головняка, а преимущества почти те же.
Johan_Palych
Это же "Чудо чудесное..." :Е.М.
Творчество в массы! Еды такой много.