Как установить Arch Linux+LVM: устраняем популярные ошибки

Многие пользователи ОС Linux рано или поздно желают перейти на более удобный и настраиваемый дистрибутив, нежели тот, который они использовали раньше. В этой статье я расскажу вам, как установить Arch с шифрованным LVM с разбором ошибок, с которыми Вы можете столкнуться в начале.

Поехали!

0. Создание загрузочной флешки

Если Вы используете виртуальную машину (что я очень советую сделать перед установкой арча на реальную машину), то этот этап можно опустить. Иначе, скачиваем iso образ с официального сайта и проверяем его контрольные суммы:

  • Для Windows, образ прожигается в программе Rufus.
  • Для Linux, вставляем флешку и пишем в терминале:
$ sudo -i # lsblk //здесь смотрим, на каком разделе флешка - например, sdX # dd bs=4M if=путь/до/archlinux.iso of=/dev/sdX status=progress oflag=sync

Загружаемся с этой флешки и переходим к следующему этапу.

1. Подключение к интернету

Здесь чаще всего юзер сталкивается с проблемой, если использует образ без wifi-menu, который мы так любили. Но ничего страшного, у нас есть iwctl или проводное соединение (надеюсь!)

При использовании wifi, сначала узнаем имя девайса, после чего подключимся к нему, написав имя девайса (например, wlp8s0), пароль и ssid БЕЗ кавычек:

# iwctl [iwd]# device list [iwd]# iwctl --passphrase PASSPHRASE station DEVICE connect SSID

При использовании провода, проблем возникать не должно. Настроили? Пингуем!

# ping 8.8.8.8 # ping ya.ru

Не забудьте прервать пинг командой Ctrl+C, если засмотрелись на выполненный пункт работы =)

Иначе идем сюда и делаем по инструкции:

2. Успешный старт

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

# loadkeys ru # setfont cyr-sun16 # timedatectl set-ntp true # modprobe dm-mod # modprobe dm-crypt # pacman-key --init # pacman-key --populate # pacman-key --refresh-keys --keyserver keys.gnupg.net # pacman -Syy --noconfirm

3. Разметка диска

Некоторые шифруют перед разметкой, например в этой статье. Мы так делать не будем.

Я предпочитаю инструмент cfdisk, в нем все управляется с клавиатуры. Создаем в нем три раздела: под boot, под swap и под LVM. При желании, закиньте раздел подкачки swap под LVM, но я буду делать вот так:

# cfdisk

Если Вы используете UEFI, то выбирайте метку gpt и тип раздела boot — EFI Sysytem, если у Вас Legacy boot, то метку dos, тип 83 и флажок bootable:

Mechanic
Mechanic

Не забудьте записать изменения (Write) и проверить разметку командой

# fdisk -l # lsblk -f

Если что-то не так, идем и делаем разметку заново.

4. Монтируем и создаем логический объем

Внимание! Здесь и далее я использую название жесткого /dev/sda. Если у Вас SSD или виртуальный диск, уточните его название в fdisk -l и используйте его.

# mkswap /dev/sda2 -L swap # swapon /dev/sda2 ################ lvm ################# # pvcreate /dev/sda3 # vgcreate vg_arch /dev/sda3 # lvcreate -L 60G -n root vg_arch //или ваше количество гигабайт вместо 60! # lvcreate -l 100%FREE -n home vg_arch

Домонтируем остальное (можно использовать другую файловую систему, кроме ext4, например f2fs или btrfs):

# mkfs.ext4 /dev/vg_arch/root # mkfs.ext4 /dev/vg_arch/home # mkfs.fat -F32 /dev/sda1 //для uefi # mkfs.ext2 /dev/sda1 -L boot //для legacy # mount /dev/vg_arch/root /mnt/ # mkdir /mnt/home # mount /dev/vg_arch/home /mnt/home/ # mkdir /mnt/boot # mount /dev/sda1 /mnt/boot

5. Шифрование LUKS

Здесь есть несколько вариаций, как шифровать логический объем на /dev/sda3. Мы используем luks2 формат, детальный, с запросом пароля, без лишних ключей:

# cryptsetup -v -y luksFormat --type luks2 /dev/sda3 # cryptsetup open /dev/sda3 cryptlvm

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

6. Установка базовой системы, таблица

Здесь будем очень внимательны и предварительно сменим зеркала на самые ближние. Можно вручную прописать в файле /etc/pacman.d/mirrorlist русский яндекс сервер и еще пару штук серверов.

# pacman -S reflector --noconfirm # reflector --verbose -l 50 -p https --sort rate --save /etc/pacman.d/mirrorlist # reflector --verbose -l 15 --sort rate --save /etc/pacman.d/mirrorlist
# pacstrap /mnt base base-devel linux linux-headers dhcpcd which inetutils netctl wget networkmanager network-manager-applet mkinitcpio git dkms grub efibootmgr nano vi linux-firmware wpa_supplicant dialog # genfstab -p -U /mnt >> /mnt/etc/fstab

Если первая команда начинает давать сбой, прерываем ее Ctrl+C и идем проверять пинг и зеркала еще раз.

7. Chroot (change root)

Здесь важнее всего строка №3, остальные нужны для предотвращения ошибки WARNING: Failed to connect lvmetad... WARNING: Device /dev/nvme0n1 not initialized in udev database...

# mkdir /mnt/hostlvm # mount --bind /run/lvm /mnt/hostlvm # arch-chroot /mnt # ln -s /run/lvm /hostlvm

Если на этом этапе возникает проблема (что часто бывает), перепроверяем вывод команд mount, lsblk, pvdisplay, vgdisplay, lvdisplay. Монтируем разделы заново, если что-то не так, как задумывалось.

Добавляем волшебный /bin/bash в конце команды, чтоб заработало. :)

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

# ping 8.8.8.8

А если не пингует, возвращаемся к пункту 1.

8. Настройка системы

Настроим время, язык, локали:

# timedatectl set-ntp true # pacman -Syyu --noconfirm # pacman -S lvm2 --noconfirm # ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime # hwclock --systohc # echo "ru_RU.UTF-8 UTF-8" >> /etc/locale.gen # echo "KEYMAP=ru" >> /etc/vconsole.conf # echo "FONT=cyr-sun16" >> /etc/vconsole.conf # echo 'LANG="ru_RU.UTF-8"' > /etc/locale.conf # echo "en_US.UTF-8 UTF-8" > /etc/locale.gen # locale-gen

Выше команды описаны довольно кустарно, но Вы можете открывать файлы /etc/locale.gen, /etc/locale.conf, /etc/vconsole.conf и прописывать всё ручками. Прямо как написано в Вики.

После чего зададим имя компьютеру и юзеру, дадим юзеру и супер-юзеру пароль, добавим юзера в группу wheel:

# echo $hostname > /etc/hostname # passwd # useradd -m -g users -G wheel -s /bin/bash $username # passwd $username

Чтобы иметь возможность использовать sudo, раскомментируем в файле /etc/sudoers строчку % wheel ALL=(ALL) ALL'.

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

9. Загрузчик

Если используем UEFI:

# bootctl install # echo ' default arch ' > /boot/loader/loader.conf # echo ' timeout 10 ' >> /boot/loader/loader.conf # echo ' editor 0' >> /boot/loader/loader.conf # echo 'title Arch Linux' > /boot/loader/entries/arch.conf # echo "linux /vmlinuz-linux" >> /boot/loader/entries/arch.conf

GRUB:

# pacman -S grub grub-customizer --noconfirm # grub-install /dev/sda # grub-mkconfig -o /boot/grub/grub.cfg

UEFI-GRUB (зачем? не знаю, на вкус и цвет):

# pacman -S grub --noconfirm # grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB # grub-mkconfig -o /boot/grub/grub.cfg

10. Образ mkinitcpio и др.

После этого добавим intel/amd ucode, чтоб потом не мучаться с проблемами отсутствия звука:

////amd # pacman -S amd-ucode --noconfirm # echo 'initrd /amd-ucode.img ' >> /boot/loader/entries/arch.conf ////intel # pacman -S intel-ucode --noconfirm # echo ' initrd /intel-ucode.img ' >> /boot/loader/entries/arch.conf ////для всех! # echo "initrd /initramfs-linux.img" >> /boot/loader/entries/arch.conf

Если у нас внезапно оказалось несколько ОС и мы их еще не форматировали и не убил, поставим os-prober.

# pacman -S os-prober

Редактируем /etc/mkinitcpio.conf, и в HOOKS добавляем lvm2 — перед filesystems:

# nano /etc/mkinitcpio.conf

# usr, fsck and shutdown hooks. class="cdx-marked-text marked-text">HOOKS=\«base udev autodetect modconf block lvm2 filesystems keyboard fsck\»

# mkinitcpio -p linux

Опционально: добавим репозиторий multilib для работы с 32-битными пакетами (обычно он не нужен). Если нужен, выполняем следующую команду и раскомментируем строки [multilib] и Include = /etc/pacman.d/mirrorlist после нее.

# nano /etc/pacman.conf

11. Иксы, менеджер рабочего стола

Здесь ради примера я покажу, как настроить GNOME 3 и XFCE, т.к. они просты и приятны в использовании. Для начала обновимся:

# pacman -Syy xorg-server xorg-drivers --noconfirm

GNOME:

# pacman -S gnome gnome-extra gdm --noconfirm # systemctl enable gdm.service -f

XFCE:

# pacman -S xfce4 pavucontrol xfce4-goodies --noconfirm # pacman -S xorg-xinit --noconfirm # cp /etc/X11/xinit/xinitrc /home/$username/.xinitrc # chown $username:users /home/$username/.xinitrc # chmod +x /home/$username/.xinitrc # sed -i 52,55d /home/$username/.xinitrc # echo "exec startxfce4 " >> /home/$username/.xinitrc # mkdir /etc/systemd/system/getty@tty1.service.d/ # echo " [Service] " > /etc/systemd/system/getty@tty1.service.d/override.conf # echo " ExecStart=" >> /etc/systemd/system/getty@tty1.service.d/override.conf # echo ExecStart=-/usr/bin/agetty --autologin $username --noclear %I 38400 linux >> /etc/systemd/system/getty@tty1.service.d/override.conf # echo ' [[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx ' >> /etc/profile # pacman -S lxdm --noconfirm # systemctl enable lxdm.service -f

12. Выход из chroot

В принципе, мы уже всё сделали. Установим на всякий случай firefox, networkmanager и neofetch (последний — исключительно для красоты).

# pacman -S networkmanager networkmanager-openvpn network-manager-applet ppp firefox neofetch --noconfirm # systemctl enable NetworkManager.service # systemctl enable dhcpcd.service

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

# pacman -Sy pulseaudio-bluetooth alsa-utils pulseaudio-equalizer-ladspa xf86-video-ati # nano /home/$username/.asoundrc

И заполняем этот файлик в соответствии с требованиями wiki.

И выходим!

# exit # umount -R /mnt # reboot

При перезагрузке выбираем Boot existing OS.

Хотелось бы язвительно сказать «Готово!» и послать Вас изучать форумы со своими проблемами, но позволю себе совет: если Вы увидели меню GRUB, и система не загрузилась:

  • идем обратно в Boot Arch Linux
  • монтируем разделы как показано в пункте 4
  • генерируем (или проверяем) таблицу разделов как в пункте 6
  • chroot’имся как в пункте 7
  • создаем новый образ с помощью grub-mkconfig, как в пункте 9
  • exit, reboot

13. Красота требует жертв!

Когда Вы обошли еще несколько форумов и наконец стартовали Иксы, и зашли в свой менеджер рабочего стола, откройте терминал и напишите:

$ neofetch

Наслаждайтесь!

Mechanic
Mechanic

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

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

$ echo 'I use Arch btw'
66
16 комментариев

Ничего не понятно, но ооочень интересно!

1
Ответить

Забыл тег <sarcasm>, но это и не Хабр. А вообще, спасибо, крутая статья. Завтра же попробую накатить на ноут.

1
Ответить

Не слушайте никого, статья норм и Арч норм)

1
Ответить

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

1
Ответить

1.) Зачем это здесь? 
2.) Чем вам arch wiki не угодила? (Там это все есть)

1
Ответить

1 - ради интереса и опыта написания статьи
2 - в вики все супер, но не все размещается в одном месте по этой теме, как хотелось бы. моя статья собрана из разных кусков вики, форумов и опыта. и арч, по ней собранный, точно работает (у меня))

1
Ответить

Доброго дня. Спасибо за помогайку, у меня возникает ошибка на пункте 5. Шифрование LUKS.
Все делаю как указано, при вводе команды на шифрование
# cryptsetup -v -y luksFormat --type luks2 /dev/sda3
выдает
Device /dev/sda3 is in use. Can not proceed with format operation.
Command failed with code -1 (wrong or missing parameters).


Не подскажите почему? Кроме самой установки /dev/sda3 ничем не занят.
Версия ARCH 5.11.16. Установку делаю по SSH.

Спасибо.

Ответить