Установка 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/@snapshotscd ..
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/tmpmount /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.comPacman в цвете
Добавим цветов к выводу 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/fstabarch-chroot
Сменим корневой каталог на /mnt
arch-chroot /mntУстановим часовую зону и системное время
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtimehwclock --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-fontshostname и hosts
Имя компьютера
echo 'x61' >> /etc/hostname/etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.1.1 x61initramfs
Так как мы используем 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-pacbtrfs-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 dmenuecho '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