Установка Arch Linux

Разметка диска lsblk - посдветить все разделы, чтобы определиться где устанавливать операционную систему.

Разбиваем диск, -z говорит обнулить таблицу разделов

cfdisk -z

Создаём 3 раздела

  • 512M - EFI System
  • …G - Linux swap
  • Оставшееся - Linux root (x86-64)

В случае старого ноутбука как в моём случае отсутствует поддержка UEFI. Поэтому вместо EFI System раздела создадим 1M раздел BIOS boot. В него мы не будем устанавливать файловую систему.

Форматируем разделы

mkfs.vfat -F 32 -n EFI /dev/sda1
mkswap -L SWAP /dev/sda2
mkfs.btrfs -L ROOT /dev/sda3

Монтируем

mount /dev/sda3 /mnt
cd /mnt
btrfs sub cr /mnt/@
btrfs sub cr /mnt/@tmp
btrfs sub cr /mnt/@log
btrfs sub cr /mnt/@pkg
btrfs sub cr /mnt/@snapshots
cd ..
umount /mnt
mount -o relatime,space_cache=v2,ssd,compress=zstd,subvol=@ /dev/sda3 /mnt
mkdir -p /mnt/{boot/efi,home,var/log,var/cache/pacman/pkg,btrfs,tmp}
mount -o relatime,space_cache=v2,ssd,compress=zstd,subvol=@log /dev/sda3 /mnt/var/log
mount -o relatime,space_cache=v2,ssd,compress=zstd,subvol=@pkg /dev/sda3 /mnt/var/cache/pacman/pkg
mount -o relatime,space_cache=v2,ssd,compress=zstd,subvol=@tmp /dev/sda3 /mnt/tmp
mount /dev/sda1 /mnt/boot/efi/
swapon /dev/sda2

Подключаемся к Wi-Fi

iwctl - интерактивная утилита.

Выводим список Wi-Fi интерфейсов

device list

Запускаем поиск через выбранный интерфейс

station wlan0 scan

Выводим список возможных соединений

station wlan0 get-networks

Подключаемся к нашему роутеру

station wlan0 connect "Name of Network/WiFi"

Выходим из iwctl - Ctrl + D.

Проверяем соединение

ping google.com

Pacman в цвете

Добавим цветов к выводу pacman. В файле /etc/pacman.conf раскомментируем строку #Color.

Настраиваем зеркала

pacman -Syy

Установим reflector - поможет нам их выбрать

pacman -S reflector

Сделаем бэкап изначальных зеркал

cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak

Создадим новый список зеркал для России

reflector -c "RU" --verbose -l 200 --sort rate --save /etc/pacman.d/mirrorlist

или

reflector -c "RU" -f 12 -l 10 -n 12 --save /etc/pacman.d/mirrorlist

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

pacstrap /mnt base base-devel linux linux-firmware vim networkmanager btrfs-progs intel-ucode

Первичная настройка системы

fstab

Сгенерируем файл, в котором будут описаны примонтированные диски системы

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

Проверим, всё ли в порядке

cat /mnt/etc/fstab

Избавимся от id, поскольку это будет мешать восстановлению из снапшотов

sudo sed -i 's/subvolid=.*,//' /mnt/etc/fstab

arch-chroot

Сменим корневой каталог на /mnt

arch-chroot /mnt

Установим часовую зону и системное время

ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
hwclock --systohc

Локаль

Сгенерируем локали. Для этого необходимо раскомментировать строки

en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8

в файле /etc/locale.gen. После чего запустим команду генерации раскомментированных локалей

locale-gen

Выставим язык системы в /etc/locale.conf

LANG=en_US.UTF-8

Шрифты

Чтобы отображался русский язык в терминале, необходимо выбрать подходящий шрифт. Списко доступных шрифтов можно посмотреть командой

ls /usr/share/kbd/consolefonts

К примему можно использовать шрифт cyr-sun16. Заодно поставим смену раскладки клавиатуры на Alt + Shift. Для этого отредактируем /etc/vconsole.conf. По данному файлу система во время загрузки устанавливает шрифт. Попробовать шрифт не перезагружаясь - setfont ИМЯ_ШРИФТА.

Запишем в /etc/vconsole.conf следующие строки

FONT=cyr-sun16
KEYMAP=ruwin_alt_sh-UTF-8

Можно загрузить ещё шрифтов, к примеру terminus-font

pacman -S terminus-font

установим ter-v14n.

Чтобы Unicode символы корректно отображались в браузерах установим

sudo pacman -S noto-fonts-cjk noto-fonts-emoji noto-fonts

hostname и hosts

Имя компьютера

echo 'x61' >> /etc/hostname

/etc/hosts

127.0.0.1	localhost
::1		localhost
127.0.1.1	x61

initramfs

Так как мы используем btrfs нужно внести изменения в /etc/mkinitcpio.conf

MODULES=(crc32c-intel btrfs)
mkinitcpio -P

Пользователи

Зададим пароль root пользователю

passwd

Создадим пользователя и вручим ему права

useradd -m sap
passwd sap
usermod -aG wheel,audio,video,storage sap

Дадим пользователю возможность пользоваться sudo

visudo

Расскомметируем строку

%wheel ALL=(ALL:ALL) ALL

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

Будем устанавливать grub.

pacman -S grub efibootmgr os-prober

Для UEFI:

grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub

Для BIOS:

grub-install /dev/sda

Генерируем конфиг GRUB

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

Интернет

Для подключения к сети потребуется ряд утилит, одна из которых была заранее установлена на случай перезагрузки

  • netctl - пакет, в состав которого входит утилита wifi-menu, если у вас wifi
  • dhcpcd - DHCP клиент
  • networkmanager - утилита для обнаружения и настройки автоматического подключения к интернету
  • network-manager-applet - понадобится в дальнейшем, когда у нас будет установлена графическая оболочка. Представляет собой значoк сети в трее, показывая статус подключения к сети, уровень wifi сигнала, и прочее.
pacman -S netctl dhcpcd networkmanager network-manager-applet dialog

Включим NetworkManager для подключения к сети при запуске системы

systemctl enable NetworkManager.service

Всё готово. Выходим из arch-chroot, отмонтируем наши диски, и перезагрузимся. Отсоединим загрузочную флешку, и загрузимся с основного дискового накопителя.

# выходим из arch-chroot
exit
 
# рекурсивно отмонтируем все примонтированные диски в /mnt
umount -R /mnt
 
reboot

Снапшоты и Snapper

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

pacman -S snapper grub-btrfs inotify-tools

Проверь список подтомов btrfs

btrfs sub list /

Они должны выглядеть так

ID 256 gen 810 top level 5 path @
ID 257 gen 781 top level 5 path @tmp
ID 258 gen 810 top level 5 path @log
ID 259 gen 804 top level 5 path @pkg
ID 260 gen 10 top level 5 path @snapshots
ID 264 gen 34 top level 256 path var/lib/portables
ID 265 gen 35 top level 256 path var/lib/machines

Создадим конфиг snapper

snapper -c root create-config /

Проверим подтома

btrfs sub list /
ID 256 gen 810 top level 5 path @
ID 257 gen 781 top level 5 path @tmp
ID 258 gen 810 top level 5 path @log
ID 259 gen 804 top level 5 path @pkg
ID 260 gen 10 top level 5 path @snapshots
ID 264 gen 34 top level 256 path var/lib/portables
ID 265 gen 35 top level 256 path var/lib/machines
ID 267 gen 87 top level 257 path /.snapshots

Появился подтом /.snapshots. Поскольку он находится внутри корневого каталога, во время первого же отката он исчезнет. Поэтому нужно исправить. Удалим подтом и снова создадим директорию

btrfs sub del /.snapshots/
mkdir /.snapshots

Отредактируем /etc/fstab. Нужно примонтировать /.snapshots. Добавим следующую строку

/dev/sda3 	/.snapshots  		btrfs     	rw,relatime,compress=zstd,ssd,space_cache=v2,subvol=/@snapshots	0 0

Примонтируем

mount /.snapshots

Проверим командой df -Th. Должно выглядеть как-то так

df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
dev            devtmpfs  3.9G     0  3.9G   0% /dev
run            tmpfs     3.9G  1.5M  3.9G   1% /run
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /
tmpfs          tmpfs     3.9G   70M  3.8G   2% /dev/shm
tmpfs          tmpfs     4.0M     0  4.0M   0% /sys/fs/cgroup
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /btrfs
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /tmp
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /var/cache/pacman/pkg
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /var/log
/dev/nvme0n1p1 vfat      511M  564K  511M   1% /boot/efi
/dev/nvme0n1p3 xfs       921G  144G  778G  16% /home
tmpfs          tmpfs     784M   72K  784M   1% /run/user/1000
/dev/nvme0n1p2 btrfs      32G  7.4G   25G  24% /.snapshots

Чтобы снапшоты отображались в GRUB, включим переменную grub-btrfs.path.

systemctl enable grub-btrfsd.service

Отредактируем /etc/default/grub

GRUB_DISABLE_RECOVERY=false

Сгенерируем сонфиг grub

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

Для программ plocate и locate нужно добавить в исключения .snapshots. Для этого в PRUNENAMES добавим

/etc/updatedb.conf

PRUNENAMES = ".git .hg .svn .snapshots"

Для того, чтобы снапшоты работали как Live-CD включим хук в /etc/mkinitcpio.conf

HOOKS=(... grub-btrfs-overlayfs)
mkinitcpio -P

Конфиг Snapper

Чтобы создавались снапшоты при действиях pacman установим

pacman -S snap-pac

btrfs-assistant

TODO: как установить yay

yay -S snapper-support btrfs-assistant

Чтобы btrfs-assistant заработал пришлось внести фикс (UUID тома нужно заменить) в /etc/btrfs-assistant.conf.

root = "@snapshots,@,8421b3f7-7a99-4db1-818b-86762a56b09e"

Обновление

Обновим кэш репозиториев pacman, и заодно систему

sudo pacman -Syyuu

Синхронизация времени

За синхронизацию системных часов по сети отвечает служба systemd-timesyncd, которая доступна вместе с systemd. По умолчанию синхронизация выключена. Для включения необходимо выполнить команду:

timedatectl set-ntp true

Проверить состояние службы можно командой timedatectl status. Подробнее о службе можно узнать тут.

Программы

Установим git, он нам понадобится в любом случае. kitty - наш будущий терминал. Браузер. Шрифты.

sudo pacman -S git kitty firefox ttf-hack ttf-ubuntu-font-family

Структура home

mkdir -p bin downloads documents src/{opensource,personal}

yay, пакетный менеджер AUR

TODO: переместить это выше TODO: как установить fish

cd aur
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

Звук

sudo pacman -S pulseaudio pavucontrol

Графическое окружение

sudo pacman -S xorg-server xorg-xinit i3-gaps i3status dmenu
echo 'exec i3' >> ~/.xinitrc

Запустим i3!

startx
  • mod + Enter - запустить терминал
  • mod + d - запустить dmenu для запуска любой программы
  • mod + Shift + q - закрыть активное окно программы
  • mod + 1, mod + 2, mod + …n - переключение рабочих столов от 1 до 9
  • mod + Shift + 1, mod + Shift + … n - перемещение активного окна на другой рабочий стол
  • mod + Shift + … ←, →, ↑, ↓ - изменение положения окон в рамках рабочего стола
  • mod + r - ресайз активного окна
  • mod + Shift + c - перечитать конфиг
  • mod + Shift + r - перезапуск i3
  • mod + Shift + e - выход из i3 с подтверждением
  • mod + Shift + space - перевод окна в плавающий режим

Исправляем раскладку клавиатуры, которая из /etc/vconsole.conf почему-то не работает.

sudo pacman -S setxkbmap
vim ~/.config/i3/config
# раскладка клавиатуры
exec --no-startup-id setxkbmap us,ru -option 'grp:alt_shift_toggle'

Заменим dmenu на аналог rofi. Концептуально ничего нового, просто rofi мне больше нравится тем, что расположен не в баре, а плавающей строкой

sudo pacman -S rofi

Чтобы задействовать его вместо dmenu найдем в конфиге строку

bindsym $mod+d exec dmenu_run

и заменим ее на

bindsym $mod+d exec --no-startup-id rofi -show run

сменим тему

rofi имеет множество встроенных тем, посмотреть и выбрать подходящую для себя можно утилитой rofi-theme-selector, запустив ее в терминале. После выбранную тему установить как параметр -theme <имя_темы> в строке запуска в конфиге. Также шрифт я выбрал hack 10, Вы же можете использовать подходящий Вам шрифт.

bindsym $mod+d exec --no-startup-id rofi -theme glue_pro_blue -font "hack 10" -show run

Установим compton

compton - легкий композитный менеджер для графического сервера X. Нам он нужен в первую очередь для устранения тиринга, если таковой присутствует, а также для создания небольших эффектов плавности переключения рабочих столов, чтобы было повеселее.

sudo pacman -S picom

В одном из конфигов он был установлен вместе с nitrogen в одну строку, так тому и быть

exec --no-startup-id nitrogen --restore; sleep 1; compton -b

Свой же последний конфиг я наглухо скопировал с этого репозитория https://github.com/dikiaap/dotfiles. Все плавно и красиво.

Шрифт

# Устанавливайте те шрифты, которые нравятся и подходят Вам
font pango:Ubuntu:style=Medium 10

Перенос бара наверх

В секцию bar добавим строку position top, и перезапустим i3 (mod+Shift+r)

bar {
        position top
        status_command i3status
}

Файловый менеджер

ranger - консольный файловый менеджер thunar - GUI

Читалки

zathura - pdf, djvu читалка zathura-pdf-mupdf - движок для чтения pdf zathura-djvu - движок для чтения djvu

jfbview - читалка pdf прямо из tty

Скриншоты

flameshot

Obsidian

Для синхонизации используется syncthing.

Редакторы кода

visual-studio-code-bin


Про установку btrfs с backup: https://web.archive.org/web/20230828190331/https://ramsdenj.com/2016/04/05/using-btrfs-for-easy-backup-and-rollback.html

TODO: