Установка 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
, если у вас wifidhcpcd
- 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:
- Describe how to install nvim depencencies
- Describe how to install nvim plugins (fix dotfiles)
- same for tmux
- how to install nvim chatgpt api
- how to install pass
- how to save ssh keys
- nvidia drivers: https://github.com/korvahannu/arch-nvidia-drivers-installation-guide
- wg-quick