Unencrypted Arch Linux + BTRFS as ROOT + rEFInd
Пред-условия этой заметки
- Наличие установочного USB (Bootable USB drive: Arch Linux, Rufus)
- Motherboard boot mode: x64 UEFI
- ОС на одном диске (будет 2 раздела)
- Без шифрования и secure-boot
Ну че, народ, погнали!
https://coub.com/view/9juiz80
- Выполнить шаги с 1.1 по 1.8 из официальной инструкции до пункта о разметке диска
1. Выбрать диск
- ВНИМАТЕЛЬНО, выбрать диск на накоторый будет установлена система. Для просмотра дисков можно использовать утилиты:
lsblk,blkid,fdisk -l - Пусть целевым диском будет SSD
nvme0n1, тогда сохранить диск в переменную окружения:export DISK="/dev/nvme0n1"
2. Удалить старую разметку (желательно, на всякий случай)
wipefs -af $DISK sgdisk --zap-all --clear $DISK partprobe $DISK
3. Выполнить разметку
parted -s $DISK mklabel gpt parted -s $DISK mkpart primary fat32 1MiB 1025MiB parted -s $DISK set 1 esp on parted -s $DISK mkpart primary $FILESYSTEM 1025MiB 100%
4. Форматировать разделы
Предупреждение: разделы для SSD имеют префикс `p`, SATA как правило не имеют; проверьте одной из утилит, например fdisk -lmkfs.fat -F32 ${DISK}p1mkfs.btrfs -f ${DISK}p25. Сконфигурировать разделы BTRFS
Примонтировать раздел диска в папку /mnt
mount ${DISK}p2 /mntСоздать корневой раздел BTRFS (/)
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@snapshots btrfs subvolume create /mnt/@home btrfs subvolume create /mnt/@libvirt btrfs subvolume create /mnt/@cache btrfs subvolume create /mnt/@log btrfs subvolume create /mnt/@tmp
Структура под-раздел : точка монтирования
@snapshots:/.snapshots@home:/home@libvirt:/var/lib/libvirt(виртуальные машины)@cache:/var/cache@log:/var/log@tmp:/var/tmp
Исключение @tmp и @log облегчит последующую работу в "recovery mode" после отката всей системы (корневого раздела /)
Размонтировать для последующей работы с созданными разделами
umount /mnt
6. Монтировать разделы
export MY_OPT="rw,noatime,compress-force=zstd,space_cache=v2"
mount -o ${MY_OPT},subvol=@ ${DISK}p2 /mntmkdir -p /mnt/{.snapshots,home,var/lib/libvirt,var/cache,var/log,var/tmp}mount -o ${MY_OPT},subvol=@snapshots ${DISK}p2 /mnt/.snapshots
mount -o ${MY_OPT},subvol=@home ${DISK}p2 /mnt/home
mount -o ${MY_OPT},subvol=@libvirt ${DISK}p2 /mnt/var/lib/libvirt
mount -o ${MY_OPT},subvol=@cache ${DISK}p2 /mnt/var/cache
mount -o ${MY_OPT},subvol=@log ${DISK}p2 /mnt/var/log
mount -o ${MY_OPT},subvol=@tmp ${DISK}p2 /mnt/var/tmpmkdir -p /mnt/boot/efi
mount ${DISK}p1 /mnt/boot/efi7. Установить систему
pacstrap /mnt base base-devel btrfs-progs linux-lts linux-lts-headers linux-firmware networkmanager sudo
Конфигурация
1. Сгенерировать fstab
genfstab -U /mnt >> /mnt/etc/fstab
2. arch-chroot
Выполнить шаги 3.1 - 3.6 из официальной инструкции
# Тайм-зона
export TIMEZONE="Europe/Amsterdam" <- заменить на свою
ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime
hwclock --systohc
# Локализация, английский приоритетный
export locale="ru_RU.UTF-8 UTF-8"
sed -i "s/^#\(${locale}\)/\1/" /etc/locale.gen
export locale="en_US.UTF-8 UTF-8"
sed -i "s/^#\(${locale}\)/\1/" /etc/locale.gen
echo "LANG=${locale}" > /etc/locale.conf
locale-gen
# Установить имя машины
echo $HOSTNAME > /etc/hostname
# Пароль root пользователя
passwd
# Создать пользователя
export USERNAME="hikkidev" <- заменить на свой
useradd -m -G wheel -s /bin/bash $USERNAME
passwd $USERNAME
# Привилегии sudo для группы wheel
echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/wheel
# Заводим интернет
systemctl enable NetworkManagerpacman -S refind efibootmgr tree btop bat eza tree
3. Настройка загрузчика rEFInd
Определить PARTUUID основного раздела, куда установлена система, в данном случае это ${DISK}p2:
blkid -s PARTUUID /dev/nvme0n1p2 -o value
Сохранить значение в переменную:
export MYUUID=$(blkid -s PARTUUID /dev/nvme0n1p2 -o value)
Установить загрузчик
refind-install
Отредактировать основные параметры загрузчика в refind.conf, файл как правило находится где-то в esp/EFI/refind/
/boot/EFI/refind/refind.conf /boot/efi/EFI/BOOT/refind.conf
- Включить поддержку схемы именования ядер Arch Linux для их автоматического обнаружения, раскоментировав или дописав:
extra_kernel_version_strings "linux,linux-lts,linux-zen,linux-rt,linux-rt-lts,linux-hardened"
- Включить автоматическое обнаружение ядра на под-разделе BTRFS, раскоментировав или дописав:
also_scan_dirs +,boot,@/boot
- Удалить или закоментировать примеры manual stanza в конце файла
- Дописать в конце файла (что такое manual stanza):
include stanzas.conf
Cоздать файл stanzas.conf в папке с refind.conf (подробнее):
cat > stanzas.conf <<EOF
menuentry "Arch Linux LTS" {
icon /EFI/refind/icons/os_arch.png
volume primary
loader /@/boot/vmlinuz-linux-lts
initrd /@/boot/initramfs-linux-lts.img
options "root=PARTUUID=$MYUUID rw rootflags=subvol=@"
submenuentry "Boot - fallback" {
initrd /@/boot/initramfs-linux-lts-fallback.img
}
}
EOFmv stanzas.conf <path to refind>/
Отредактировать параметры ядра поумолчанию в refind_linux.conf для автоматически обнаруженных ядер.
Как правило файл лежит тут: /boot/refind_linux.conf
echo "\"Boot DEFAULT\" \"root=PARTUUID=$MYUUID rw rootflags=subvol=@ initrd=@\boot\initramfs-%v.img\"" > /boot/refind_linux.conf
Убедиться, что запись rEFInd была добавлена в загрузчик UEFI первой, выполнив:
efibootmgr
exit umount -R /mnt reboot
Вход в систему + Snapper
После входа в систему рекомендую настроить BTRFS snapshots сразу
sudo pacman -S snapper snap-pac
sudo umount /.snapshots sudo rm -rf /.snapshots
sudo snapper -c root create-config /
sudo btrfs subvolume delete /.snapshots
sudo mkdir /.snapshots sudo mount -a sudo chmod 750 /.snapshots sudo chown :wheel /.snapshots
sudo snapper -c root create -d "Clean system install"
Редактировать конфиг здесь: /etc/snapper/configs/root
Включить systemd таймеры для автоматического запуска снимков и периодической очистки старых:
sudo systemctl enable --now snapper-timeline.timer sudo systemctl enable --now snapper-cleanup.timer