Найти тему
🐍 Путь Питониста

🔧 Как установить Arch Linux в 2020 году

Оглавление
Я не админ, не программист и опыта в Linux у меня не очень много. Поэтому вполне возможно, что где-то я не прав. Инструкцию публикую ради таких же новичков в Linux, как и я, которые хотят поэкпериментировать и более детально изучить Linux.

Решил на днях привести в порядок свой ноутбук и поставить туда Linux.

Ставить решил Arch Linux, так как ноутбук очень слабенький и нужна минимальная установка. Ну и хочется просто поиграться.

Здесь расскажу, как я ставил Arch на ноутбук с UEFI. Опишу лишь базовую установку. Без графического интерфейса.

Качаем образ

Качаем образ с сайта дистрибутива здесь. Закидываем на флешку с помощью Rufus (Windows) или аналогом для Linux. У меня на Pop!_os установлена минималистичная утилита Popsicle, которая отлично справилась со своей задачей.

Вставляем в USB-порт, в настройках UEFI ставим загрузку с флешки и грузимся.

Проверяем интернет

Сразу проверяем, есть ли у нас доступ в Интернет, чтобы не потерять время зря:

ping -c 5 archlinux.org

Если видим, что пакеты возвращаются, то значит с интернетом всё в порядке, можно идти дальше. Если соединение проводное, то скорее всего всё будет работать из коробки. В моём же случае нужно настраивать Wi-Fi.

Когда я ставил Арч в декабре 2019 года, драйверов для моей wifi-карточки в ядре не было, проходилось подключать Android-смартфон в качестве USB-модема.  Но вот уже июнь 2020 года и, о чудо, все wifi-сети отлично ищутся и подключаются.

Подключаемся:

wifi-menu

Выбираем нужную wifi-сеть, соглашаемся с названием профиля и вводим пароль.

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

Смотрим какие у нас есть интернет-интерфейсы:

ip link

Получаем список:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2:
wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether c4:3a:35:90:6d:2e brd ff:ff:ff:ff:ff:ff

Видим наш интерфейс wlan0. В скобках видно, что он UP. Исправляем:

ip link set wlan0 down

После этого можно спокойно вызывать wifi-menu и подключатся.

Русский язык в установщике

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

Загрузка шрифта с кириллицей:

loadkeys ru
setfont cyr-sun16

Создаём локаль. Открываем файл /etc/locale.gen в редакторе nano:

nano /etc/locale.gen

Тут надо раскомментировать нашу локаль: ищем строку ru_RU.UTF-8 и убираем решетку.

Должно получится примерно так:

...
# ru_RU ISO-8859-5
# ru_RU.CP1251 CP1251
# ru_RU.KOI8-R KOI8-R
ru_RU.UTF-8 UTF-8
# ru_UA KOI8-U
# ru_UA.UTF-8 UTF-8
# rw_RW UTF-8
...

Сохраняем Ctrl+S и выходим Ctrl+X.

Генерируем указанную локаль и включаем русский язык:

locale-gen
export LANG=ru_RU.UTF-8

Обновляем системное время

timedatectl set-ntp true

Разбиваем диск на разделы

Я установил в свой ноутбук чистый SSD. На него и буду ставить систему.

Диск буду разбивать на 3 раздела: загрузочный /boot, корневой / и домашний /home.

Смотрим, какие диски есть в нашем распоряжении:

lsblk -f

Так выглядит диски и их разделы в моём ноутбуке: loop0, sda, sdb, mmcblk0. Теперь надо понять, какой диск нам нужен.

loop0 игнорируем, mmcblk0 имеет разделы с файловой системой ntfs, значит это встроенный диск с Windows, sdb имеет упоминание ARCHISO, это наша флешка, остаётся неразмеченный sda. Это это и есть нужный мне диск.

В вашем случае всё будет по-другому. Не сотрите там случайно чего-нибудь)))

Открываем наш диск в fdisk:

fdisk /dev/sda

Команды для fdisk:

Общие
d удалить раздел
F показать свободное неразмеченное пространство
l список известных типов разделов
n добавление нового раздела
p вывести таблицу разделов
t изменение типа раздела
v проверка таблицы разделов
i вывести информацию о разделе

Разное
m вывод этого меню
u изменение единиц измерения экрана/содержимого
x дополнительная функциональность (только для экспертов)

Сценарий
I загрузить разметку из файла сценария sfdisk
O записать разметку в файл сценария sfdisk

Записать и выйти
w запись таблицы разделов на диск и выход
q выход без сохранения изменений

Создать новую метку
g создание новой пустой таблицы разделов GPT
G создание новой пустой таблицы разделов SGI (IRIX)
o создание новой пустой таблицы разделов DOS
s создание новой пустой таблицы разделов Sun
  • g - создаём таблицу GPT
  • n - добавляем новый раздел. Просто жмём везде Enter, кроме пункта Last sector. В нём указываем размер раздела. Первый раздел будет загрузочный, на него нужно 260-512 мегабайт. Поэтому пишем: +512M.
  • Добавляем раздел для корня файловой системы размером 40-60G.
  • И последний раздел на всё оставшееся место. Просто не указываем ничего в пункте Last sector.
  • t - изменяем тип первого раздела на EFI System. Номер раздела 1 и тип раздела 1.
  • p - удостоверяемся, что всё верно.
  • w - сохраняем изменения.
Команда (m для справки): g
Created a new GPT disklabel (GUID: E5F989F0-6FB1-A243-A8AD-4B424FDBAF61).

Команда (m для справки): n
Номер раздела (1-128, default 1):
Первый сектор (2048-468862094, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-468862094, default 468862094): +512M

Создан новый раздел 1 с типом 'Linux filesystem' и размером 512 MiB.

Команда (m для справки): n
Номер раздела (2-128, default 2):
Первый сектор (1050624-468862094, default 1050624):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-468862094, default 468862094): +60G

Создан новый раздел 2 с типом 'Linux filesystem' и размером 60 GiB.

Команда (m для справки): n
Номер раздела (3-128, default 3):
Первый сектор (126879744-468862094, default 126879744):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (126879744-468862094, default 468862094):

Создан новый раздел 3 с типом 'Linux filesystem' и размером 163,1 GiB.

Команда (m для справки): t
Номер раздела (1-3, default 3): 1
Тип раздела (введите L для получения списка типов разделов): 1

Тип раздела 'Linux filesystem' изменен на 'EFI System'.

Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Синхронизируются диски.

Если при создании раздела появляется вопрос Partition X contains a X signature. Do you want to remove the signature? Отвечаем Y

Форматируем в нужные файловый системы:

mkfs.vfat /dev/sda1 -n BOOT
mkfs.ext4 /dev/sda2 -L ROOT
mkfs.ext4 /dev/sda3 -L HOME

Монтируем корневой раздел:

mount /dev/sda2 /mnt

Создаём папки для других разделов и монтируем их:

cd /mnt
mkdir boot home
cd
mount /dev/sda1 /mnt/boot
mount /dev/sda3 /mnt/home

Установка

Перед загрузкой пакетов нужно отредактировать файл со списком серверов:

nano /etc/pacman.d/mirrorlist

Здесь находится список серверов, с которых пакетный менеджер будет качать пакеты. Скачивание будет происходить с самого первого сервера. Если он вдруг станет недоступен или на нём не окажется нужного нам пакета, то скачивание начнётся со следующего и т. д.

Нам нужно поднять сервера, которые ближе всего к нам, в самый верх файла.

Находим русские сервера. Для этого жмём Ctrl+W и вводим Russia. Копируем строчку Server = http://... с помощью Ctrl+K, вставляем в самый верх файла с помощью Ctrl+U.

Теперь начинаем установку системы с помощью скрипта pacstrap:

pacstrap /mnt base linux linux-firmware base-devel man-db man-pages nano sudo git networkmanager grub efibootmgr
  • base - основные программы.
  • linux - ядро.
  • linux-firmware - файлы прошивок для linux.
  • base-devel - утилиты для разработчиков. Нужны для AUR.
  • man-db - просмотрщик man-страниц.
  • man-pages - куча man-страниц (руководств).
  • nano - простой консольный текстовый редактор. Если умете работать в vim, то можете поставить его вместо nano.
  • sudo - позволяет обычным пользователем совершать действия от лица суперпользователя.
  • git - приложение для работы с репозиториями Git. Нужен для AUR и много чего ещё.
  • networkmanager - сервис для работы интернета. Вместе с собой устанавливает программы для настройки.
  • grub - загрузчик операционной системы. Без него даже загрузиться в новую систему не сможем.
  • efibootmgr - поможет grub установить себя в загрузку UEFI.

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

Сохраняем скелет примонтированных разделов:

genfstab -p /mnt >> /mnt/etc/fstab

Переходим в режим chroot.

arch-chroot /mnt

Грубя говоря, мы типа вошли в только что установленную систему в качестве рута.

Генерируем /etc/adjtime с помощью:

hwclock --systohc

Устанавливаем московский временной пояс:

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

Если Вы живите не в московском временной поясе, то Вам нужно выбрать подходящий пояс. Смотрим доступные пояса:

ls /usr/share/zoneinfo
ls /usr/share/zoneinfo/Нужный_Регион

Настраиваем локаль по-умолчанию для новой системы:

nano /etc/locale.conf

Пишем:

LANG="ru_RU.UTF-8"

Открываем файл с локалями:

nano /etc/locale.gen

Надо раскомментировать ru_RU.UTF-8.

Генерируем локали:

locale-gen

Редактируем /etc/vconsole.conf:

nano /etc/vconsole.conf

И прописываем шрифты:

KEYMAP=ru
FONT=cyr-sun16

После этого нужно подредактировать хуки:

nano /etc/mkinitcpio.conf

Ищём строчку HOOKS и добавляем в конце 3 хука (внутри скобок):

HOOKS = (... consolefont keymap systemd)

Создаём загрузочный образ:

mkinitcpio -p linux

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

Устанавливаем загрузчик в загрузочный раздел:

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

В --efi-directory указываем путь нашего загрузочного раздела. У меня это /dev/sda1.

Устанавливаем микрокод для процессора:

# Если у Вас процессор Intel, то:
pacman -S intel-ucode

# Если у Вас процессор AMD, то:
pacman -S amd-ucode

Генерируем конфигурационный файл:

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

Пароль рута

Нужно установить пароль для пользователя root:

passwd

Заводим интернет

Задаём имя компьютера в сети:

echo "имя_компьютера" > /etc/hostname

Добавляем записи hosts:

nano /etc/hosts

Пишем в конце файла:

127.0.0.1 localhost
::1 localhost
127.0.1.1 имя_компьютера.localdomain имя_компьютера

Чтобы интернет включался автоматически при запуске, пишем:

systemctl enable NetworkManager.service

Создаём обычного пользователя

Нужно создать пользователя, под которым мы будем входить в систему:

useradd -m -G wheel -s /bin/bash имя_пользователя

И ставим ему пароль:

passwd имя_пользователя

Настраиваем sudo

Редактируем файл sudoers с помощью команды visudo. По умолчанию будет попытка открыть vi, но у нас он даже не установлен. Поэтому укажем, что редактор у нас nano:

EDITOR=nano visudo

Находим строчку:

%wheel ALL=(ALL) ALL

И убираем % в начале строки. Сохраняем и выходим.

Готово! Перезагружаемся...

Выходим из режима chroot:

exit

Размонтируем файловую систему:

umount /mnt

И перезагружаемся в новую систему:

reboot

Можем заходить в созданного пользователя и устанавливать нужное ПО, например, графическое окружение.

Если у вас беспроводное соединение, запустите nmtui и подключитесь к сети.