Skip to content

Instantly share code, notes, and snippets.

@EntropyEngineer
Created September 12, 2024 17:54
Show Gist options
  • Save EntropyEngineer/a417e5f11c62d3bd25d69620e7c14410 to your computer and use it in GitHub Desktop.
Save EntropyEngineer/a417e5f11c62d3bd25d69620e7c14410 to your computer and use it in GitHub Desktop.

Предварительные условия

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

Самое главное - успешно загрузиться в новую систему, дальнейшую настройку можно будет продолжить когда угодно.

Установка будет производиться в следующих условиях:

  • Носитель информации, на который будет произведена установка, не содержит полезной информации и других ОС
  • Местом установки ОС является ssd/nvme накопитель
  • Компьютер имеет проводное подключение к интернету по DHCP
  • Компьютер поддерживает и настроен на загрузку через EFI

ОС будет сконфигурирована со следующими параметрами:

  • Система загрузки EFI
  • Менеджер загрузки GRUB
  • Файловая система Btrfs, автоматическое резервное копирование с помощью snapper, без шифрования
  • Технология кеширования памяти ZRAM, без файла подкачки

Подготовка диска

Проверка режима загрузки

cat /sys/firmware/efi/fw_platform_size

При загрузке в режиме EFI должно вывестись 64

Важно Далее рассматривается работа только с дисками в режиме EFI

Проверка дисков

Посмотрим устройства хранения и определим [имя диска] для разметки. Это может быть к примеру sda или nvme0n1

lsblk
fdisk -l

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

Запускаем утилиту разметки диска

cfdisk /dev/[имя диска]

Создаём разделы:

  • В меню выбора типа разметки выбираем gpt
  • new -> 512M -> type -> EFI System
  • Free space -> new -> предложенный_размер
  • Write -> yes -> Quit Проверяем созданные разделы командой:
lsblk

Заметка Предположим что EFI раздел получил название /dev/sda1, а основной /dev/sda2

Создание и монтирование файловых систем

mkfs.fat -F32 /dev/sda1
mkfs.btrfs /dev/sda2

Создание томов Btrfs

mount /dev/sda2 /mnt

btrfs sub cr /mnt/@
btrfs sub cr /mnt/@home

btrfs sub cr /mnt/@snapshots

btrfs sub cr /mnt/@pkg
btrfs sub cr /mnt/@log
btrfs sub cr /mnt/@cache
btrfs sub cr /mnt/@tmp

# проверка создания томов
btrfs sub list /mnt

umount /mnt

Монтирование томов Btrfs

mount -o noatime,nodiratime,compress=lzo,space_cache=v2,ssd,subvol=@ /dev/sda2 /mnt

mount -o x-mount.mkdir,noatime,nodiratime,compress=lzo,space_cache=v2,ssd,subvol=@home /dev/sda2 /mnt/home

mount -o x-mount.mkdir,noatime,nodiratime,compress=lzo,space_cache=v2,ssd,subvol=@snapshots /dev/sda2 /mnt/.snapshots

mount -o x-mount.mkdir,noatime,nodiratime,compress=lzo,space_cache=v2,ssd,subvol=/ /dev/sda2 /mnt/.btrfsroot

mount -o x-mount.mkdir,noatime,nodiratime,compress=lzo,space_cache=v2,ssd,subvol=@pkg /dev/sda2 /mnt/var/cache/pacman/pkg/

mount -o x-mount.mkdir,noatime,nodiratime,compress=lzo,space_cache=v2,ssd,subvol=@log /dev/sda2 /mnt/var/log

mount -o x-mount.mkdir,noatime,nodiratime,compress=lzo,space_cache=v2,ssd,subvol=@cache /dev/sda2 /mnt/var/cache

mount -o x-mount.mkdir,noatime,nodiratime,compress=lzo,space_cache=v2,ssd,subvol=@tmp /dev/sda2 /mnt/var/tmp

mkdir -m 700 /mnt/efi
mount /dev/sda1 /mnt/efi

Установка минимально необходимых пакетов

pacstrap -i /mnt base base-devel linux linux-firmware linux-headers intel-ucode sudo nano bash-completion networkmanager

Генерация Fstab

genfstab -U -p /mnt >> /mnt/etc/fstab

Переключение на установленную систему

arch-chroot /mnt /bin/bash

Установка загрузчика

pacman -S grub efibootmgr grub-btrfs os-prober
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=Arch
grub-mkconfig -o /boot/grub/grub.cfg

Установка пароля пользователя root

passwd

Перезагрузка

exit
umount -R /mnt
reboot

Создание пользователя

Для примера возьмём в качестве имени компьютера one

useradd -mg users one
usermod -aG power,wheel,audio,video,storage,optical,scanner,floppy,realtime one

# Проверка
userdbctl groups-of-user one

passwd one

Далее необходимо отредактировать файл nano /etc/sudoers в разделе

Uncomment to allow members of group wheel to execute any command
# %wheel ALL=(ALL:ALL) ALL

раскомментировать строку %wheel ALL=(ALL:ALL) ALL.

Включение сервиса сети

systemctl enable NetworkManager
systemctl start NetworkManager

Настройка пакетного менеджера

nano /etc/packman.conf

Раскомментируем параметр ParallelDownloads и задаём желаемое значение, раскомментируем параметр Color

Для работы 32-битных приложений в 64-битной раскомментируем блок:

[multilib]
Include = /etc/pacman.d/mirrorlist

Настройка поиска быстрых зеркал

yay -S reflector

# Ручной запуск
sudo reflector --verbose --country 'Russia' -l 25 --sort rate --save /etc/pacman.d/mirrorlist

Настройка сетевой идентификации

Для примера возьмём в качестве имени компьютера archdemo

Указание имени компьютера

echo archdemo > /etc/hostname

Указание локального домена

nano /etc/hosts

И добавляем в файл строки:

127.0.0.1 localhost
::1 localhost
127.0.1.1 archdemo.localdomain archdemo

Настройка времени

С помощью автодополнения выбираем часовой пояс через:

ln -sf /usr/share/zoneinfo/название_области/название_пояса /etc/localtime
ls /usr/share/zoneinfo

Включаем синхронизацию времени

timedatectl set-ntp true
timedatectl status

Настройка локализации

nano /etc/locale.gen

Необходимо раскомментировать локали, например en_US UTF-8 и ru_RU UTF-8, после чего выполнить команду:

locale-gen
echo "LANG=ru_RU.UTF-8" > /etc/locale.conf

Локализация терминала

Смотрим список раскладок клавиатуры для консоли:

localectl list-keymaps | grep ru

Выбрав подходящую, записываем её в конфиг:

echo 'KEYMAP="ruwin_alt_sh-UTF-8"' >> /etc/vconsole.conf

Записываем в конфиг шрифт с поддержкой кириллицы:

echo 'FONT="cyr-sun16"' >> /etc/vconsole.conf

Важно Все дальнейшие команды нужно выполнять от созданного пользователя, не от root

Установка пакетного менеджера yay

sudo pacman -S git

cd /tmp
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
cd ..
sudo rm -rf yay

Отключение сборки отладочных пакетов

sudo sed -i.bak '/^OPTIONS=/s/strip/!strip/; /^OPTIONS=/s/debug/!debug/' /etc/makepkg.conf

Отключение диалогов при установке пакетов

yay --nodiffmenu --nocleanmenu --noeditmenu --noremovemake --save

Использование

Обновление системы:

yay

Удаление неиспользуемых пакетов:

yay -Yc

В дальнейшем для установки любых пакетов, которые предусматривали запуск pacman можно использовать yay с тем же синтаксисом, но без sudo

Настройка SWAP/ZRAM

Ядру Linux, независимо от размера оперативной памяти, нужно периодически сбрасывать страницы памяти в SWAP. Для экономии ресурса SSD SWAP можно размещать в сжатом виде в оперативной памяти (ZRAM).

yay -S zram-generator zram-generator-defaults
sudo systemctl start systemd-zram-setup@zram0

# проверка
swapon

Отключение ZSWAP

Необходимо провести так как ZSWAP и ZRAM конкурирующие за ресурсы памяти технологии.

sudo nano /etc/default/grub

В строку GRUB_CMDLINE_LINUX_DEFAULT= необходимо через пробел добавить параметр zswap.enabled=0

Обновление конфигурации загрузчика:

sudo grub-mkconfig -o /boot/grub/grub.cfg

После перезагрузки можно проверить отключение командой:

cat /sys/module/zswap/parameters/enabled

Настройка параметров свопа

Рекомендованные настройки SWAP для SSD:

sudo nano /etc/sysctl.d/99-swappiness.conf`

Прописываем в файле:

vm.swappiness = 180
vm.watermark_boost_factor = 0
vm.watermark_scale_factor = 125
vm.page-cluster = 0

Применяем настройки:

$ sudo sysctl --syst

Установка ПО

Система резервного копирования

Важно Возможность отката состояния системы не обеспечивает сохранность данных при выходе носителя информации из строя

Установка

btrfs-assistant - графическая утилита, не обязательна для работы со снимками состояний.

yay -S snapper-support snapper-rollback btrfs-assistant

sudo umount /.snapshots
sudo rm -r /.snapshots

# создание конфигураций
sudo snapper -c root create-config /
sudo snapper -c home create-config /home

sudo mount -a
sudo btrfs subvol list /

Смотрим вывод последней команды и находим в ней значение ID для тома @. Обычно это 256. Ставим ID тома по умолчанию:

sudo btrfs subvol set-default 256 /

# Проверка
sudo btrfs subvol get-default /

sudo nano /etc/snapper-rollback.conf

В открывшемся файле конфига необходимо убедиться в правильных значениях параметров subvol_snapshots и mountpoint. Согласно конфигурации монтирования значение mountpoint должно быть /.btrfsroot.

Выключение снимков по расписанию для корневого тома

sudo nano /etc/snapper/configs/root

В файле необходимо установить значение TIMELINE_CREATE="no", затем перезапустить сервис:

sudo systemctl restart snapper-timeline.timer

Настройка расписания для тома "home"

sudo nano /etc/snapper/configs/home

Пример для создания и хранения 1 снимка в час и 1 снимка в день

TIMELINE_LIMIT_HOURLY="1"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_YEARLY="0"
sudo systemctl restart snapper-timeline.timer
sudo systemctl enable snapper-cleanup.timer

Работа со снимками

Просмотр снимков
# просмотр конфигураций
sudo snapper list-configs

# просмтр списка состояний конкретной конфигурации (например root)
sudo snapper -c root list
Создание снимка
sudo snapper -c root create -d описание_(опционально)
Удаление снимка
sudo snapper -c root delete номер_снимка
Просмотр изменённых файлов
sudo snapper status 1..3

Где 1..3 означает разницу между какими снимками нужно вывести

Откат до снимка

Важно Откат возможен только для корневого тома

Откатить систему можно как находясь в ней, так и загрузившись в предыдущий снимок системы через меню GRUB

sudo snapper-rollback номер_снимка

Полезные команды

Проверка файловой системы

btrfs scrub start -B /

Решение проблем

Если установка какого либо пакета не происходит с ошибкой 404, значит необходимо произвести обновление системы командой yay.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment