Установка и первичная настройка дистрибутива Arch Linux

Материал из The Magic of Number 8 Wiki

В данной статье описана типичная установка Arch Linux'а с указанием специфичных различий в конфигурациях для разных компьютеров и рабочих окружений.

Подготовка к установке

ssh

Если установка будет производится посредством ssh соединения с другого ПК, то перед подключением нужно задать пароль для root пользователя.

Доступ в сеть

Для подключения к сети через LAN достаточно только активировать dhcpcd сервер: systemctl start dhcpcd.service. Чтобы настроить Wi-FI соединение нужно воспользоваться интерактивной консолью клиента iwctl для демона iwd.

  1. Потребуется проверить идентификатор беспроводного адаптера сети Wi-Fi: [iwd]# device list
  2. Просканируем радио эфир на наличие нужной точки доступа: [iwd]# station wlan0 scan
  3. Т.к. iwctl поддерживает автозаполнение ввода через клавишу tab, то можно выбрать нужную сеть после ввода первых букв её названия: [iwd]# station wlan0 connect "Make Wi-Fi Great Again!"

После подключения к точке доступа потребуется активировать dhcpcd сервер.

gdisk (создание gpt метки и разметка файловой системы)

sudo gdisk /dev/nvme0n1 # или /dev/sda для SATA накопителя
x
l
8
d
m
n
⏎
⏎
+1G
ef00
n
⏎
⏎
+24G
8200
n
⏎
⏎
8304
w
Y

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

Данный раздел будет разделен на обычную установку и с использованием LUKS для шифрования разделов.

Обычные разделы

sudo mkfs.vfat -F32 -n EFI /dev/nvme0n1p1 # или /dev/sda1 для SATA накопителя
sudo mkswap /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя
sudo mkfs.ext4 -b 4096 -m 0 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя
sudo swapon /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя
sudo mkdir -v /mnt/install
sudo mount /dev/nvme0n1p3 /mnt/install/ # или /dev/sda3 для SATA накопителя
sudo mkdir -v /mnt/install/boot
sudo mount /dev/nvme0n1p1 /mnt/install/boot/ # или /dev/sda2 для SATA накопителя

LUKS разделы

Для настройки шифрования необходимо инициализировать и открыть LUKS разделы:

cryptsetup luksFormat --type luks2 /dev/nvme0n1p2 # или /dev/sda2 для SATA накопителя
YES
Требуется ввести пароль
cryptsetup luksFormat --type luks2 /dev/nvme0n1p3 # или /dev/sda3 для SATA накопителя
YES
Требуется ввести пароль
cryptsetup luksOpen /dev/nvme0n1p2 swap
cryptsetup --allow-discards --persistent luksOpen /dev/nvme0n1p3 root
sudo mkswap -L swap /dev/mapper/swap
sudo swapon /dev/mapper/swap
sudo mkfs.ext4 -E discard -b 4096 -m 0 -L root /dev/mapper/root
mount /dev/mapper/root /mnt/install
sudo mkdir -v /mnt/install/efi
sudo mount /dev/nvme0n1p1 /mnt/install/efi/ # или /dev/sda2 для SATA накопителя

Установка базовой части системы

Настроим список российских зеркал для Pacman:

reflector --country RU --age 24 --protocol https --sort rate --save /etc/pacman.d/mirrorlist
sudo pacstrap /mnt/install/ arch-install-scripts base base-devel bash-completion beep ccache cmake cryptsetup dosfstools git git-lfs go go-tools gptfdisk hdparm htop jre-openjdk linux linux-firmware lvm2 man-db mariadb neovim net-tools networkmanager networkmanager-openvpn ntfs-3g openssh openvpn p7zip parted pdftk pipewire pipewire-alsa pipewire-pulse python-pynvim rsync sbctl screen sudo tmux tree unzip usbutils util-linux vifm wget wireplumber wol xdg-user-dirs yt-dlp zip

В зависимости от производителя процессора, требуется поставить дополнительный пакет с обновлением микрокода: intel-ucode или amd-ucode

Настройка базовой системы

Начальный этап настройки

Минимальный набор требуемых настроек для последующей настройки системы после перезагрузки.

arch-chroot /mnt/install
ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime
sed -i "s/#en_US.UTF-8/en_US.UTF-8/" /etc/locale.gen
sed -i "s/#ru_RU.UTF-8/ru_RU.UTF-8/" /etc/locale.gen
locale-gen
echo LANG=ru_RU.UTF-8 > /etc/locale.conf
echo -e "KEYMAP=ruwin_alt_sh-UTF-8\nFONT=cyr-sun16" > /etc/vconsole.conf
export myhostname= # Создаём переменную с именем будущего хоста
echo $myhostname > /etc/hostname
echo -e "#\n#<ip-address>\t<hostname.domain.org>\t<hostname>\n127.0.0.1\t$myhostname.lan\t\tlocalhost $myhostname\n::1\t\t$myhostname.lan\t\tlocalhost $myhostname" >> /etc/hosts
mkinitcpio -P
sed -i "s/# %wheel ALL=(ALL:ALL) ALL/%wheel ALL=(ALL:ALL) ALL/" /etc/sudoers
sed -i -e 's/#Color/Color/g' -e '/#\[multilib\]/{N;s/#\[multilib\]\n#Include/\[multilib\]\nInclude/}' /etc/pacman.conf # Включает Color и multilib
systemctl enable systemd-resolved systemd-timesyncd NetworkManager sshd systemd-timesyncd
systemctl mask systemd-networkd

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

useradd -m -G wheel archie
passwd archie

Unified Kernel Images

echo "quiet rw" > /etc/kernel/cmdline
mkdir -p /efi/EFI/Linux
sed -i 's/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole block filesystems fsck)/HOOKS=(base systemd autodetect microcode modconf kms keyboard keymap sd-vconsole sd-encrypt block filesystems fsck)/g' /etc/mkinitcpio.conf
sed -i \
-e "s|PRESETS=('default')|#PRESETS=('default')|g" \
-e "s|#PRESETS=('default' 'fallback')|PRESETS=('default' 'fallback')|g" \
-e 's|#default_uki="/efi/EFI/Linux/arch-linux.efi"|default_uki="/efi/EFI/Linux/arch-linux.efi"|g' \
-e 's|#default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"|default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"|g' \
-e 's|#fallback_uki="/efi/EFI/Linux/arch-linux-fallback.efi"|fallback_uki="/efi/EFI/Linux/arch-linux-fallback.efi"|g' \
-e 's|#fallback_options="-S autodetect"|fallback_options="-S autodetect"|g' \
/etc/mkinitcpio.d/linux.preset
mkinitcpio -P
bootctl install --esp-path=/efi

Secure Boot

В первую очередь необходимо в BIOS сбросить все ключи и настройки Secure Boot и выключить его. Указанная команда позволит проверить наличие статуса Setup Mode:

$ sbctl status
Installed:  ✓ sbctl is installed
Setup Mode: ✗ Enabled
Secure Boot:    ✗ Disabled
Vendor Keys:    none

Теперь нужно создать персональные ключи:

sudo sbctl create-keys
sudo sbctl enroll-keys -m

Подпишем efi файлы и переустановим ядро Linux:

sudo sbctl sign -s -o /usr/lib/systemd/boot/efi/systemd-bootx64.efi.signed /usr/lib/systemd/boot/efi/systemd-bootx64.efi
sudo sbctl sign -s /efi/EFI/BOOT/BOOTX64.EFI
sudo sbctl sign -s /efi/EFI/Linux/arch-linux.efi
sudo sbctl sign -s /efi/EFI/Linux/arch-linux-fallback.efi
sudo pacman -S linux

TPM2 разблокировка

sudo systemd-cryptenroll /dev/gpt-auto-root-luks --recovery-key
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7  /dev/gpt-auto-root-luks --tpm2-with-pin=yes

Если Swap раздел не был разблокирован на этапе загрузки, то необходимо это сделать сейчас:

sudo cryptsetup luksOpen /dev/nvme0n1p2 swap

Добавим ключ для Swap раздела в TPM2.

sudo systemd-cryptenroll --tpm2-device auto /dev/disk/by-designator/swap-luks

Завершение настройки базовой системы

Trizen менеджер пакетов для AUR: облегченная оболочка pacman и помощник AUR.

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

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

Установка требуемых пакетов и приложений

pacman -S alacritty android-tools android-udev blender code filezilla gimp godot gvfs inkscape keepassxc lib32-ncurses libreoffice-fresh libreoffice-fresh-ru libva-utils mesa-demos mpv nextcloud-client noto-fonts noto-fonts-cjk noto-fonts-emoji qbittorrent steam telegram-desktop tesseract tesseract-data-eng tesseract-data-rus vlc
trizen -S --noedit android-studio anydesk-bin assistant google-chrome-dev gtk2-patched-filechooser-icon-view webcord

KDE

pacman -S ark audiocd-kio dolphin dolphin-plugins ffmpegthumbs filelight icoutils kdegraphics-thumbnailers kdf kimageformats kio-admin kompare plasma resvg
systemd enable plasmalogin.service

После запуска KDE необходимо настроить раскладки клавиатуры, DPI.

Sway (устарело, требуется обновление части)

sudo pacman -S gdm sway
trizen -S libdisplay-info-git rofi-lbonn-wayland-git slurp waybar xdg-desktop-portal-wlr --noedit
sudo systemctl enable --now gdm

Настройка путей и монтирования в домашнем каталоге

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

mkdir -pv /home/$USER/{Desktop,Databases,Downloads,Documents,Pictures,Public,Sounds,Templates,VPNs}
mkdir -v /home/$USER/{Music,Videos,Work/Builds/ArchLinux} # Для устройства с одним накопителем
ln -s ~/.local/share/Steam ~/Steam

Если основной накопитель имеет малый размер и имеется возможность установки второго, то последний можно монтировать через /etc/fstab и создать симлинки на основной папки.

ln -s /mnt/storage/Music/ ~/Music
ln -s /mnt/storage/Videos/ ~/Videos
ln -s /mnt/storage/Work/ ~/Work

Импортирование конфигурации

git clone https://git.tmon8.ru/comminux/dotfiles.git ~/Work/dotfiles
cd ~/Work/dotfiles
git checkout branch # Выбираем нужную ветку за основу
mv .git/ ~/
cp -r * /home/$USER/
cp -r .* /home/$USER/
cd ~
rm -rf ~/Work/dotfiles
sudo cp ~/.usr/bin/* /bin/
chromexup

Дополнительные настройки и решения

git clone https://github.com/Tk-Glitch/PKGBUILDS ~/Work/Builds/ArchLinux/Tk-Glitch-PKGBUILDS

Исправление ошибки "Not authorized to perform operation" при попытке монтирования дополнительного накопителя.

Создаём это polkit правило в /etc/polkit-1/rules.d/00-mount-internal.rules:

polkit.addRule(function(action, subject) {
   if ((action.id == "org.freedesktop.udisks2.filesystem-mount-system" &&
      subject.local && subject.active && subject.isInGroup("storage")))
      {
         return polkit.Result.YES;
      }
});

И добавляем нашего пользователя в группу storage:

# sudo usermod -aG storage $USER

Устаревшая секция

sudo pacman -S android-tools android-udev baobab chromium filezilla gimp gnu-netcat gvfs inkscape keepassxc lib32-ncurses libreoffice-fresh libreoffice-fresh-ru libva-utils mesa-demos minetest mpv neofetch nextcloud-client nomacs noto-fonts noto-fonts-cjk noto-fonts-emoji pavucontrol pcmanfm-qt pipewire-jack qbittorrent qt5-translations qt6-translations qutebrowser steam steam-native-runtime telegram-desktop tesseract tesseract-data-eng tesseract-data-rus ttf-liberation wine-gecko wine-mono winetricks

Для компьютера на базе графического процессора от Intel: sudo pacman -S intel-media-driver powertop xf86-video-intel

Для компьютера на базе графического процессора от AMD: sudo pacman -S lib32-vulkan-radeon libva-mesa-driver vulkan-radeon xf86-video-amdgpu

Перечень Vulkan драйверов: https://wiki.archlinux.org/title/Vulkan

Для настройки тачпада ноутбука: xorg-xinput

trizen -S android-studio anydesk-bin chromexup evhz-git godot lib32-gconf undistract-me-git webcord --noedit
echo -e "source /usr/share/undistract-me/long-running.bash\nnotify_when_long_running_commands_finish_install" >> ~\.bashrc

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

Основные программы

sudo pacman -Suy certbot-nginx composer cups ffmpeg gitea libreoffice-fresh mediawiki nextcloud nginx php-fpm php-gd php-imagick php-intl php-sodium qbittorrent-nox sane vlc vsftpd youtube-dl
trizen -S gerbera minetest-git samsung-unified-driver steamcmd --noedit

Настройка принтера

Несмотря на то, что cups предоставляет юнит cups.socket для запуска веб-сервера печати по запросу, лучше всего запускать сервис печати при запуске хоста, т.к. иногда задания печати могут быть пропущены и не войти в очередь для отработки:

sudo systemctl enable cups.service

Настройка MariaDB и NGINX

sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl start mariadb.service
sudo mysql_secure_installation
sudo systemctl enable mariadb.service
sudo systemctl enable vsftpd.service # Не актуально.
sudo systemctl enable php-fpm.service
sudo systemctl enable nginx.service
sudo mkdir /etc/nginx/sites-available
sudo mkdir /etc/nginx/sites-enabled

Также потребуется добавить опцию sites-enabled/*; в конец блока http в файле /etc/nginx/nginx.conf для возможности использования отдельных конфигураций под каждое веб-приложение:

http {
    types_hash_max_size 4096;
    server_names_hash_bucket_size 128;
    
    include sites-enabled/*;
}

Устаревшие секции

Тут приведены устаревшие части настройки системы. Если systemd-boot теперь устанавливается в /efi, то за автоматическое монтирование отвечает systemd, т.к. при создании разделов мы использовали метки Discoverable Partitions Specification (DPS).

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

Для копирования исполняемого файла загрузчика на EFI-раздел и добавления загрузочной записи в прошивку материнской платы можно воспользоваться инструментом из состава systemd: bootctl --path=/boot install

Если требуется, сторонние загрузочные записи можно очистить.

Теперь берем UUID swap'а и раздела монтируемого по корневому пути. (эту часть нужно улучшить, чтобы UUID был сохранён в переменную)

ls -l /dev/disk/by-partuuid/ | grep 'sd[a-z][1-3]'
echo -e 'title\t\tArch Linux Kernel\nlinux\t\t/vmlinuz-linux\ninitrd\t\t/intel-ucode.img\ninitrd\t\t/initramfs-linux.img\noptions\t\troot=PARTUUID=55d7a752-7da7-4a8f-aae7-a90b63614d83 rw resume=PARTUUID=4af468e0-0c92-4dab-9a21-738fd95875d3' >> /boot/loader/entries/arch.conf
sudo sed  -i '1i default @saved' /boot/loader/loader.conf # systemd-boot будет запоминать последнюю выбранную загрузочную запись

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

exit
reboot

Настройка fstab

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

Теперь требуется проверить и отредактировать /mnt/install/etc/fstab перед следующим этапом.

Пример:

# Static information about the filesystems.
# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>
# /dev/nvme0n1p3
UUID=68b6d3fa-3dd1-4c2d-acd4-8956a89d7c53       /               ext4            rw,relatime     0 1

# /dev/nvme0n1p1
UUID=CFA0-CC07          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro       0 2

# /dev/nvme0n1p2
UUID=c9e25512-cc2d-45cf-a95e-e4cfc6dfb116       none            swap            defaults        0 0

Файловые системы vfat и ext4 требуют дополнительной опции discard при использовании SSD накопителя:

# /dev/sdX3
UUID=6b0d06c4-ca05-427d-83d4-b3978595f6bb	/         	ext4      	rw,relatime,discard	0 1

Смотрите также