Как я устанавливал Arch Linux на свой ноутбук

19 октября 2016

В последнее время я стал замечать, что Ubuntu как-то не особо мотивирует меня разбираться в том, как работает система. Я просто кликаю мышкой, и все работает. А почему оно работает — этого я не понимаю. Другое дело FreeBSD. Но в последнее время FreeBSD разочаровывает меня большим количеством багов, проявляющихся на десктопе (список можно найти в конце этого поста). После недолгой консультации с коллегами, я решил попробовать Arch Linux. Этот дистрибутив в чем-то напоминает FreeBSD (минимализмом, наличием как бинарных пакетов, так и своего аналога портов) и вполне заслуженно славится своим прекрасным wiki-сайтом, который регулярно показывается мне в выдаче Google.

Примечание: Как чуть более сложную, но и более гибкую, альтернативу без бинарных пакетов мне предлагали Gentoo. Этот дистрибутив мне тоже нравится, и я даже когда-то его немного использовал. Возможно, когда-нибудь я поставлю его прямо рядом с Arch Linux, для разнообразия. Следует также отметить, что Arch работает только на x86/x64, а Gentoo можно запустить практически на любом CPU. И кстати, говорят, что для особо тяжелых приложений, вроде Chromium, бинарные пакеты в Gentoo все-таки есть.

Установка

Все эксперименты проводились на моем многострадальном Fujitsu Lifebook E733.

Качаем iso-образ системы, проверяем его контрольные суммы, записываем на установочную флешку, загружаемся с нее — тут все как обычно. После загрузки попадаем в обычную консоль (используется zsh), никакого инсталлятора не предусмотрено. Ethernet-сеть подключилась и настроилась по DHCP сама, тут мне ничего настраивать не пришлось.

Закатываем рукава. Первым делом нужно разбить диск, на который мы поставим систему. Находим нужный диск — в моем случае это был /dev/sda:

lsblk

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

gdisk /dev/sda

Введите ? для вывода списка доступных команд, затем n для создания нового раздела, p для вывода текущего списка разделов, w для записи таблицы разделов и q для выхода. Не бойтесь, тот все и вправду очень просто!

В Arch Wiki приводятся некоторые рекомендации по размеру разделов. Кстати, зачем так заморчиваться по поводу разделов? Почему нельзя просто свалить все в один большое корень? В принципе, можно, но лучше не стоит. В случае с серверами разделы можно раскидать по разным физическим дискам, распределив нагрузку по IO. На десктопе разделы гарантируют, что из-за пользователя, накачавшего слишком много торрентов, система не встанет колом. И так далее.

В моем случае размер диска составляет 238.5 Гб (речь о «правильных» гигабайтах, на самом диске написано, что это 250 Гб). Я выделил 300 Мб под /boot, как рекомендует Wiki, 200 Гб под /home, мне этого должно более чем хватить, еще 20 Гб отдал под корень, а оставшиеся ошметки (18.2 Гб) достались /var. На swap я забил, в будущем при жалении можно будет отжать немного у /var.

Важно! Забегая вперед, хочу заметить, что может иметь смысл зарезервировать несколько мегабайт для нужд загрузчика. См пример установки GRUB далее.

Пример разбиения диска в gdisk

На созданных разделах создаем файловые системы и монтируем их в /mnt. Я использовал старую-добрую ext4, но кто-то предпочитает xfs. Помимо них в Arch также доступна btrfs, reiserfs и другие.

mkfs.ext4 /dev/sda1
mkfs.ext4 /dev/sda2
mkfs.ext4 /dev/sda3
mkfs.ext4 /dev/sda4

mount /dev/sda3 /mnt
cd /mnt
mkdir boot home var
mount /dev/sda1 /mnt/boot
mount /dev/sda2 /mnt/home
mount /dev/sda4 /mnt/var

Ставим группу пакетов base в /mnt:

pacstrap /mnt base

Генерируем файл /etc/fstab:

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

Делаем chroot в нашу новую систему:

arch-chroot /mnt

Выбираем таймзону:

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

Генерируем /etc/adjtime (системные часы должны быть в UTC, если это не так — переведите их после перезагрузки):

hwclock --systohc --utc

Сейчас уже можно доустановить дополнительных пакетов, например:

pacman -S vim

Раскомментируем строчку en_US.UTF-8 UTF-8 в /etc/locale.gen, затем говорим:

locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf

Настраиваем имя хоста:

echo e733 > /etc/hostname

Также дописываем в /etc/hosts что-то вроде:

127.0.1.1   e733.localdomain   e733

Создаем initial ramdisk (он требуется для загрузки ядра):

mkinitcpio -p linux

Наконец, нам нужен загрузчик. Я выбрал GRUB:

pacman -S grub gdisk
# GRUB'у нужен небольшой раздел с типом ef02 (BIOS boot partition)
# к счастью, gdisk выравнивает сектора, за счет чего как раз остается
# около 1 Мб лишнего места в начале диска, нам этого хватит
gdisk /dev/sda
grub-install --target=i386-pc /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

Меняем пароль пользователя root командой passwd, выходим из chroot командой exit, делаем umount всех разделов нашей новой системы, а затем говорим reboot. Если все было сделано правильно, система загрузится, и в этот раз уже не с флешки:

Arch Linux, первая загрузка системы

Проверяем, что все разделы на месте, что системное время правильное, и так далее. Поздравляю, теперь у вас есть предельно минималистичная инсталляция Linux. Остался последний штрих — настроить хоть какую-то сеть. Это быстро.

Подключение к сети по витой паре

Большим шоком для меня было то, что в Arch Linux задепрекейтили пакет net-tools. Поэтому, скажем, команды ifconfig в системе по дэфолту попросту нет. Чтобы посмотреть имена доступных интерфейсов, нужно воспользоваться утилитой ip:

ip addr

А вместо netstat теперь нужно использовать утилиту ss:

ss -tuwpln

Выяснив имя интерфейса, в /etc/systemd/network/ethernet.network пишем что-то вроде:

[Match]
Name=enp0s25
[Network]
DHCP=yes

Включаем systemd-networkd:

systemctl enable systemd-networkd
systemctl start systemd-networkd
systemctl status systemd-networkd

Логи конкретного сервиса в systemd можно посмотреть так:

journalctl -u systemd-networkd
# следить за обновлениями, как делает утилита tail
journalctl -u systemd-networkd -f

Если все было сделано правильно, то пинги пойдут, но доменные имена пока что резолвиться не будут. Эта проблема решается так:

systemctl enable systemd-resolved
systemctl start systemd-resolved
rm /etc/resolv.conf
ln -s /var/run/systemd/resolve/resolv.conf /etc/resolv.conf

Заметьте, что по умолчанию systemd-resolved слушает порт 5355 на всех интерфейсах. На мой взгляд это как-то стремно. На форуме Arch Linux удалось найти решение этой проблемы, не требующее использования фаервола.

В /etc/systemd/resolved.conf дописываем:

LLMNR=no

Затем рестартуем сервис:

systemctl restart systemd-resolved

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

Заключение

Как видите, установка и настройка Arch Linux — это безудержное веселье. Если во время установки что-то вдруг пошло не так, вы всегда можете заново загрузиться с флешки и донастроить систему. В любой непонятной ситуации читайте маны, а также официальную wiki, она правда очень классная!

Забегая вперед, отмечу, что в целом впечатления от данного дистрибутива у меня исключительно положительные. Arch Linux очень похож на FreeBSD, только нормально работает на десктопе.

Дополнение: Также вас могут заинтересовать посты Управление пакетами в Arch Linux с помощью ABS и pacman, Пример настройки десктоп-окружения в Arch Linux и Шифрование жесткого диска в Linux при помощи dm-crypt.

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.