Как я устанавливал Arch Linux на свой ноутбук
В последнее время я стал замечать, что 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 далее.

На созданных разделах создаем файловые системы и монтируем их в /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. Если все было сделано правильно, система загрузится, и в этот раз уже не с флешки:

Проверяем, что все разделы на месте, что системное время правильное, и так далее. Поздравляю, теперь у вас есть предельно минималистичная инсталляция 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.