Установка Arch Linux
Здесь будут описаны шаги по успешной установке Arch Linux. Предполагается, что вы уже скачали свежий iso-образ и загрузились с него, т.е. видите на экране приглашение командной строки:
Настройка сети
Если вы подключены от провода, то ничего настраивать не надо.
Для Wi-Fi нужно выполнить ряд действий:
$ iwctl
# Получим список сетевых интерфейсов
[iwd]# device list
Devices
-------------------------------------------------------------
Name Address Powered Adapter Mode
-------------------------------------------------------------
wlan0 ... on ... ...
# Сначала просканируем сети
[iwd]# station <interface> scan
# А потом посмотрим все сети к которым можно подключиться
[iwd]# station <interface> get-networks
Available networks *
--------------------------------------------------------------------------------
Network name Security Signal
--------------------------------------------------------------------------------
...
<sid> psk ****
# Подключаемся
[iwd]# station wlan0 connect <sid>
Проверка:
$ ping -c5 ya.ru
Синхронизация пакетов
Перед установкой желательно обновить базу пакетов и pgp-ключей для проверки подписи пакетов:
$ pacman -Sy archlinux-keyring
Разметка диска
Разметка диска отличается от того, загрузились ли вы в режиме BIOS или UEFI.
Узнать имена дисков можно командой:
$ fdisk -l
BIOS
С помощью fdisk создаем раздел / с типом Linux - это минимально необходимо.
UEFI
Пусть нам нужно поставить систему на nvme0n1
.
Размечаем диск под систему, руководствуясь правилом от большего к меньшему:
cfdisk nvme0n1
Должно получиться что-то типа этого:
раздел | точка монтирования | тип файловой системы | размер | описание |
---|---|---|---|---|
nvme0n1p1 | / | btrfs | Весь объем минус размер efi/boot | arch linux |
nvme0n1p2 | /boot | vfat | 512 MiB-1 GiB | загрузочный раздел |
Размещая тот же boot в конце диска, мы сможем в последующем менять его размер, откусывая место от предыдущего.
Форматирование загрузочного раздела UEFI
Если у вас уже установлена Windows, пропускайте шаг с форматированием загрузочного раздела.
Форматируем загрузочный раздел:
mkfs.vfat -F32 -n ESP /dev/nvme0n1p2
Созданному разделу нужно выставить флаг boot, чтобы UEFI с него грузилось:
$ parted /dev/nvme0n1
GNU Parted 3.5
Using /dev/nvme0n1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
...
2 499GB 500GB 1074MB fat32 Boot msftdata
(parted) set 2 boot on
(parted) q
Information: You may need to update /etc/fstab.
Форматирование разделов в ext4
Если вы хотите использовать ext4:
$ mkfs.ext4 /dev/vda1
Вместо vda1 используйте свой вариант.
Форматирование разделов в Btrfs
Использование файловой системы BTRFS
После этого монтируем вашу файловую систему, в которую будет происходить установка в /mnt:
$ mount /dev/vda1 /mnt
Установка системных пакетов
Установим ядро, драйвера и базовый набор пакетов:
pacstrap /mnt base base-devel linux linux-firmware linux-headers
Добавьте к этому списку патчи безопасности для процессоров: amd-ucode
или intel-ucode
.
Дополнительные системные пакеты:
pacstrap /mnt acpi atool autoconf bind-tools cdparanoia cdrkit cmake conky cronie dialog dhcpcd dosfstools exfat-utils f2fs-tools fetchmail file-roller git gpart htop imagemagick inetutils links lynx man-db mc mcabber mediainfo mtools mutt namcap nano ncdu neofetch net-tools netctl networkmanager newsboat nfs-utils nmap ntfs-3g ntp odt2txt openssh p7zip pass pkgfile poppler ranger reflector rpmextract rsync sudo terminus-font udftools unrar w3m weechat whois wget wpa_supplicant yt-dlp zip
Xorg X-сервер, WM, DE и программы:
pacstrap /mnt xorg-server xorg-xinit xorg-xkill xf86-input-synaptics mesa xterm lxterminal terminator lightdm lightdm-gtk-greeter lxappearance qt5ct geany ttf-liberation ttf-dejavu ttf-bitstream-vera ttf-font-awesome ttf-ubuntu-font-family cbatticon transmission-gtk filezilla i3lock xautolock scrot xfce4-screenshooter mpv dmenu pulseaudio pulseaudio-alsa alsa-utils thunderbird gmrun tint2 feh gpicview openbox obconf i3-wm i3lock i3blocks i3status pcmanfm gvfs network-manager-applet volumeicon veracrypt keepassxc redshift zathura mupdf picom ffmpegthumbnailer gparted gsimplecal libreoffice-fresh libreoffice-fresh-ru firefox-i18n-ru firefox firefox-adblock-plus nitrogen papirus-icon-theme udiskie capitaine-cursors xdg-user-dirs
Установка рабочего стола Mate:
pacstrap /mnt mate mate-extra mate-media mate-power-manager mint-backgrounds mint-themes mint-y-icons-git mate-menu mint-x-icons
Если у вас используется файловая система btrfs:
pacstrap /mnt btrfs-progs snapper grub-btrfs snap-pac
Для поддержки видеокарт Intel:
pacstrap /mnt xf86-video-intel libva-intel-driver
Для поддержки видеокарт AMD:
pacstrap -i /mnt xf86-video-amdgpu --noconfirm
Генерация fstab
А теперь сгенерируем fstab, файл который содержит указания системы что и куда монтировать при загрузке:
genfstab -U /mnt | sed 's/,relatime/,noatime,commit=300,discard=async/' >> /mnt/etc/fstab
Тут мы изменили с целью оптимизации некоторые параметры монтирования:
- Каждый раз когда мы открываем файл, записывается время его изменения,
noatime
запрещает запись времени модификации файла. - Btrfs хранит кеш в оперативной памяти и сбрасывает его на диск через интервал указанный в секундах в параметре
commit
. discard=async
предотвращает микрофризы при выполнении TRIM.
Первые два параметра продлевают ресурс SSD.
Вход в окружение chroot
Делаем chroot и “грузимся” в систему:
arch-chroot /mnt
Время и локаль
Редактируем /etc/locale.gen
:
$ nano /etc/locale.gen
Нужно найти и расскоментировать (убрать в начале #
) сл строки:
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
Генерируем локали:
$ locale-gen
Generating locales...
ru_RU.UTF-8... done
en_US.UTF-8... done
Generation complete.
Задаем локаль по-умолчанию:
localectl set-locale LANG=en_US.UTF-8
# системная локаль
echo LANG=en_US.UTF-8 > /etc/locale.conf
# или
locale > /etc/locale.conf
Смотрим список раскладок клавиатуры для консоли Linux (та в которую можно попасть, нажав Ctrl + Alt + F1-6):
localectl list-keymaps | grep ru
Загружаем раскладку:
loadkeys ruwin_ct_sh-UTF-8
Теперь мы можем по ctrl+shift переключать раскладку с английской на русскую.
Посмотрим шрифты для консоли:
ls /usr/share/kbd/consolefonts | less
Загрузим какой-нибудь шрифт с поддержкой кириллицы:
# 1080p
setfont ter-v14n
# 4k
setfont ter-v18b
Эти настройки нужно сохранить:
echo 'KEYMAP="ruwin_ct_sh-UTF-8"' >> /etc/vconsole.conf
# либо так
localectl set-keymap --no-convert ruwin_ct_sh-UTF-8
# И сохраняем шрифт
echo 'FONT="ter-v18n"' >> /etc/vconsole.conf
Ищем нужную временную зону:
$ timedatectl list-timezones | grep Mosc
Europe/Moscow
Задаем временную зону:
timedatectl set-timezone 'Europe/Moscow'
Включаем синхронизацию времени с NTP-сервером:
timedatectl set-ntp true
Опционально устанавливаем часы компьютера:
hwclock --systohc
Настройка имени хоста (машины):
hostnamectl set-hostname YOURHOSTNAME
Редактируем хосты:
nano /etc/hosts
Содержимое должно быть примерно таким:
127.0.0.1 l ocalhost
::1 localhost
127.0.1.1 <YOUR_HOSTNAME>.localdomain <YOUR_HOSTNAME>
# строки ниже опциональны и приведены в примере из man
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Сортировка pacman mirrorlist
pacman -S reflector
reflector --score 120 -l 50 -f 20 --sort rate -c RU --verbose --save /etc/pacman.d/mirrorlist
Initramfs
Linux грузится с помощью образа initramfs: сначала файловая система монтируется в оперативную память (Initial-RAM-File-System), загружаются драйвера, монтируется реальная файловая система, и наконец мы получаем возможность войти в систему.
Редактируем настройки образа в файле /etc/mkinitcpio.conf
:
nano /etc/mkinitcpio.conf
Добавьте драйвера видеокарт в образ:
# Intel
MODULES=(i915)
# AMD
MODULES=(amdgpu)
# или NVIDIA
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
# или встройка AMD + дискретка NVIDIA
MODULES=(amdgpu nvidia nvidia_modeset nvidia_uvm nvidia_drm)
Добавление видеодрайверов позволяет решить проблем с редактированием конфигов при подключении мониторов, запуске игр игр на дискретке…
ВАЖНО!!!!!! В хуки добавляем btrfs
до filesystems и keymap:
HOOKS=(... btrfs keymap filesystems ...)
Хуки — это скрипты с функцией run_hook
, которые выполняются последовательно при загрузке initrmafs.
Изменим дефолтный уровень сжатия для zstd:
# COMPRESSION_OPTIONS
# Additional options for the compressor
COMPRESSION_OPTIONS=(-T0 -15)
Теперь сгенериреум образ:
mkinitcpio -P
Добавление пользователя
Создаем пользователя:
useradd -m -G users -s /bin/bash <YOUR_USERNAME>
-m
‒ создать каталог пользователя в/home
;-G
‒ дополнительные группы, передаваемые через запятую: audio,games,lp,optical,power,scanner,storage,video,wheel. Добавив себя в группуsystemd-journal
, вы сможете без sudo просматривать логи с помощьюjournalctl
…
Устанавливаем для него пароль:
$ passwd <YOUR_USERNAME>
New password:
Retype new password:
passwd: password updated successfully
В целях безопасности лочим пользователя root, чтобы из под него нельзя было авторизоваться:
$ passwd -l root
passwd: password changed.
Разрешаем sudo для себя (одноименной группы, создаваемой по умолчанию):
echo '%<YOUR_USERNAME> ALL=(ALL:ALL) ALL' > /etc/sudoers.d/<YOUR_USERNAME>
Так же можем отредактировать sudoers, разрешив пользователям в группе wheel доступ к sudo:
$ nano /etc/sudoers
# Нужно найти раскомментировать строку:
%wheel ALL=(ALL:ALL) ALL
Часто в инструкциях пользователя добавдяют в группу sudo. Группы wheel и sudo делают одно и то же: дают доступ к выполнению команды sudo. Так уж исторически сложилось, что в debian-based дистрибутивах используют группу sudo, а в RHEL ‒ wheel.
Загрузчик системы BIOS
Если у вас BIOS, вам нужен grub (замените vda на ваш диск):
pacman -S grub-bios --noconfirm
grub-install /dev/vda
grub-mkconfig -o /boot/grub/grub.cfg
Загрузчик системы UEFI
Загружаться мы будем через systemd-boot. Для этого установим EFI:
bootctl install
Создаем загрузочную запись. Для начала сохраним PARTUUID:
blkid -o value -s PARTUUID /dev/nvme0n1p2 > /boot/loader/entries/arch.conf
Отредактируем конфиг:
nano /boot/loader/entries/arch.conf
Он должен выглядеть примерно так:
title Arch Linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
linux /vmlinuz-linux
options root=PARTUUID=fa65a43e-eb75-48f0-aee1-975a50c2e00d rootflags=subvol=/@ rw nvme_core.default_ps_max_latency_us=0
- Параметр
nvme_core.default_ps_max_latency_us=0
нужен для некоторых моделей SSD M.2. Без него файловая система через неопределенное время переходит вread only
. initrd /amd-ucode.img
- это подгрузка микрокодов процессора для исправления различных уязвимостей./amd-ucode.img
заменяем на/intel-ucode.img
.
Установите микрокоды проца (в зависимости от производителя):
pacman -Sy amd-ucode
# либо
pacman -Sy intel-ucode
Настроим загрузчик:
nano /boot/loader/loader.conf
timeout 4
default arch.conf
console-mode max
editor no
Добавляем переменные окружения
/etc/environment
— это лучшее место для задания переменных, которые будут установлены глобально для всех пользователей…
Сделаем редактором по-умолчанию nano для всех взамен старперского vim (мы его даже не стали устанавливать) из которого не могут выйти 95% пользователей Linux (<ESC>
, :qa!
, <Enter>
).
echo 'EDITOR=nano' >> /etc/environment
Переменные окружения, которые должны быть доступны только для вас и приложений, запускаемых от вашего пользователя, в дальнейшем можно добавлять в ~/.zshenv
, ~/.zlogin
, ~/.xprofile
, ~/.profile
как export KEY=VALUE
. Общие для всех переменные можно установить в сценариях /etc/profiles.d/<filename>.sh
.
Если система стартует через systemd (со startx
не будет работать), то пользовательские переменные окружения в виде KEY=VALUE
можно установить в ~/.config/environments.d/<filename>.conf
либо в /etc/environment.d/<filename>.conf
(общие для всех).
Настройка сети [ на целевом хосте ]
Включим менеджер сети:
systemctl enable NetworkManager
Грузимся в систему
Выходим из chroot:
exit
Теперь можно перегрузиться и вытащить флешку:
reboot
Настройка системы
Управление пакетами
Для управления пакетами я советую использовать yay (yet another yaourt).
Главное преимущество Arch Linux в AUR, а поэтому нам нужен пакетный менеджер с его поддержкой. Раньше для этих целей использовали yaourt, но за прошедшие годы последний уступил пальму первенства.
$ cd /tmp
$ git clone https://aur.archlinux.org/yay-bin
$ cd yay-bin
$ makepkg -si
Но можно и установить старый добрый yaourt:
git clone https://aur.archlinux.org/package-query.git
cd package-query
makepkg -si
cd ..
git clone https://aur.archlinux.org/yaourt.git
cd yaourt
makepkg -si
Настройка SWAP/ZRAM
Ядру Linux, независимо от размера оперативной памяти, нужно периодически сбрасывать страницы памяти в SWAP.
Для экономии ресурса SSD SWAP можно размещать в сжатом виде в оперативной памяти (ZRAM).
Установка:
$ yay -S zram-generator-git zram-generator-defaults
Включение ZRAM:
$ sudo systemctl restart systemd-zram-setup@zram0
Рекомендованные настройки SWAP для SSD:
/etc/sysctl.d/99-swappiness.conf
vm.swappiness=100
vm.vfs_cache_pressure=10
Применяем настройки:
$ sudo sysctl --system
Snapper
Snapper ‒ это менеджер снапшотов (снимков состояния файловой системы) для Btrfs. Он может их создавать/удалять по таймеру, а так же позволяет восстанавливать отдельные файлы.
$ yay -Sy snapper
Установим так же хук, который будет делать снапшоты после каждого обновления пакетов:
$ yay -S snap-pac
Снапшоты делаются каждый час, если не переопределить это поведение:
$ systemctl edit snapper-timeline.timer
[Timer]
OnCalendar=<period>
Настройки по-умолчанию предполагают слишком длительное хранение снапшотов, что может привести к постоянной проблеме нехватки места, если у вас SSD маленького объема.
Создаем новый шаблон файла конфигураций, чтобы не редактировать дефолтный:
$ cd /usr/share/snapper/config-templates
$ cp default config
$ nano config
Где значения TIMELINE_LIMIT_<PRERIOD>
указывают сколько хранить N последних снапшотов за час (HOURLY)/день (DAILY)/неделю (WEEKLY)/месяц (MONTHLY)/год (YEARLY).
Пример конфига:
...
TIMELINE_LIMIT_HOURLY="10"
TIMELINE_LIMIT_DAILY="7"
TIMELINE_LIMIT_WEEKLY="0"
TIMELINE_LIMIT_MONTHLY="0"
TIMELINE_LIMIT_YEARLY="0"
...
Храним 10 последних за час и 7 ежедневных (хранится самый первый за день).
snapper -c root create-config -t config /
snapper -c home create-config -t config /home
systemctl enable snapper-timeline.timer
systemctl enable snapper-cleanup.timer
Восстановление удаленного файла
# Смотрим номер последнего снапшота
sudo snapper -c <config> list -a
# Восстанавливаем файл
sudo snapper -c <config> undochange 0..<number> /path/to/file
Заменяем корневой сабвольюм на снапшот
Если не планируете пользоватся GUI, то может пригодиться…
В более сложных случаях может потребоваться восстановление системы:
$ sudo su
$ mount /dev/mapper/root /mnt
$ ls /mnt
@ @home @.snapshots ...
$ cd /mnt
# Смотрим снапшоты
$ ls @.snaphosts
... 42 ...
# Переименовываем старый корневой сабвольюм
$ mv @ @old
# Помним, что snapshot и subvolume это одно и тоже, считай, а значит мы монтировать снапшот
# Делаем снимок снапшота, по-сути копирем его, так как снапшоты, создаваемые snapper readonly
$ btrfs sub snap @.snaphots/42/snapshot @
# Редактируем fstab, если он содержит subvolid
# Ищем `subvol=/@` и удаляем `subvolid=N,`
$ nano @/etc/fstab
# Или же можно прописать subvolid
$ sudo btrfs sub show @ | grep 'Subvolume ID'
Subvolume ID: XXX
# Монтируем сабвольюм
$ mount -o remount /
# Теперь можно удалить @old
$ btrfs su de @old
Это стандартная утилита для дистрибутива Garuda Linux (основан на Arch‘е как Manjaro и пр. суррогаты). Графический менеджер для управления снапшотами и восстановления из них.
yay -S btrfs-assistant btrfsmaintenance
Для использования Btrfs Assistant не подходит плоская схема, при которой подтома со снапшотами (@snapshots
, @home.snapshots
и тп) монтируются в /.snapshots
или /home/.snapshots
. При восстановлении из снапшота, делает снапшот савольюма, а затем заменяет его на выбранный снапшот, все дочерние сабвольюмы и снапшоты перемещаются.
Автоматическая настройка (почти)
Если вам лень настраивать руками, после монтирования корня в /mnt можно воспользоваться скриптом:
$ curl http://dev.victor3d.com.br/arch-install/installer > installer
$ chmod +x installer
$ ./installer