Installation guide (Русский)
Состояние перевода: На этой странице представлен перевод статьи Installation guide. Дата последней синхронизации: 4 декабря 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Этот документ является руководством по установке Arch Linux с помощью live-системы, загруженной из официального установочного образа. Данный образ включает в себя специальные возможности, описанные на странице Установка Arch Linux с использованием специальных возможностей. Также на странице Category:Installation process перечислены альтернативные методы установки.
Перед установкой рекомендуется прочитать часто задаваемые вопросы. В тексте используются понятия, обозначения и стили, смысл которых описан на странице Help:Чтение. В частности, примеры кода могут содержать заполнители (отформатированные в курсиве ), на месте которых необходимо вручную вписать нужные вам значения.
Данное руководство состоит из кратко описанных шагов, которым рекомендуется следовать в указанном порядке. Более подробные инструкции приведены в соответствующих статьях ArchWiki и на страницах справочных руководств (man) различных программ. Ссылки и на то, и на другое присутствуют в этом руководстве. Также вы можете получить помощь в IRC-канале, на англоязычном форуме или в русскоязычных сообществах Arch Linux.
Arch Linux способен работать на любой x86_64-совместимой машине, имеющей хотя бы 512 МиБ ОЗУ, однако для загрузки live-системы нужно больше памяти.[1] Базовая установка занимает менее 2 ГиБ места на диске. Так как во время установки скачиваются пакеты из удалённого репозитория, необходимо работающее интернет-соединение.
Перед установкой
Загрузка установочного образа
Перейдите на страницу загрузок и, в зависимости от желаемого способа загрузки live-системы, скачайте ISO-файл или netboot-образ, а также соответствующую подпись GnuPG.
Проверка подписи
Рекомендуется проверять подпись образа перед его использованием, особенно когда он был загружен с зеркала HTTP, где загрузки обычно подвержены перехвату для подмены образа на вредоносный.
На системах с установленным GnuPG вы можете сделать это, скачав ISO PGP signature (ссылка на него есть на странице загрузок в разделе Checksums) в каталог с образом и выполнив команду:
$ gpg --keyserver-options auto-key-retrieve --verify archlinux-версия-x86_64.iso.sig
Также можно проверить подпись из установленного Arch Linux:
$ pacman-key -v archlinux-версия-x86_64.iso.sig
- Самой подписью можно манипулировать, если загрузить её с зеркала, а не с archlinux.org, как указано выше. В этом случае убедитесь, что открытый ключ, который используется для декодирования подписи, подписан другим надёжным ключом. Команда gpg выведет отпечаток (fingerprint) открытого ключа.
- Ещё один метод проверки подлинности подписи — убедиться, что отпечаток открытого ключа идентичен отпечатку ключа разработчиков Arch Linux, которые подписали ISO-образ. Для получения дополнительной информации о процессе проверки подлинности открытых ключей смотрите статью Wikipedia:ru:Криптосистема с открытым ключом.
Подготовка установочного носителя
Загрузить установочный образ на машине, на которой будет проводиться установка, можно с помощью USB-накопителя, оптического диска или сети (при помощи PXE) — инструкции для подготовки установочного носителя описаны в соответствующих статьях.
Загрузка live-окружения
Примечание: Установочные образы Arch Linux не поддерживают Secure Boot, в связи с чем необходимо отключить данную функцию перед загрузкой. Однако при желании возможно настроить Secure Boot после завершения установки Arch Linux.
- Загрузите компьютер с установочного носителя с Arch Linux. Для выбора загрузочного устройства обычно при включении компьютера нажимается специальная клавиша (иногда она указывается на заставке) во время фазы POST. Обратитесь к руководству вашей материнской платы для получения более подробных инструкций.
- Когда появится меню установочного носителя, выберите Arch Linux install medium и нажмите Enter для входа в установочное окружение.
- Установочный образ использует GRUB при загрузке в UEFI-режиме и syslinux в BIOS-режиме. Используйте клавишу e или Tab для редактирования параметров загрузки. Список доступных параметров описан в README.bootparams.
- Распространённый пример ручной установки параметра загрузки — размер шрифта. Для улучшения читабельности на экране HiDPI (если он не распознался автоматически) может помочь добавление параметра fbcon=font:TER16x32 . Смотрите раздел HiDPI (Русский)#Консоль Linux (tty) для более подробной информации.
Чтобы переключиться на другую виртуальную консоль в процессе установки (например, для просмотра этого руководства в Lynx), используйте горячие клавиши Alt+стрелка . Для редактирования файлов доступны программы mcedit(1) , nano и vim. Список пакетов, присутствующих в установочном образе, доступен на странице pkglist.x86_64.txt.
Установка раскладки клавиатуры и шрифта
По умолчанию используется раскладка консоли US. Посмотреть список доступных раскладок можно с помощью команды:
# localectl list-keymaps
Чтобы выбрать раскладку, передайте её название команде loadkeys(1) . Например, чтобы выбрать русскую раскладку, выполните команду:
# loadkeys ru
Используйте Ctrl+Shift для переключения между английской и русской раскладками.
Для корректного отображения кириллицы нужно выбрать подходящий консольный шрифт. Консольные шрифты расположены в каталоге /usr/share/kbd/consolefonts/ и могут быть выбраны аналогичным способом с помощью команды setfont(8) без указания полного пути и расширения.
Например, для загрузки шрифта стандартного размера с русскими буквами выполните:
# setfont cyr-sun16
Для экрана HiDPI можно выбрать один из самых больших доступных шрифтов с русскими буквами:
# setfont ter-c32b
Проверка режима загрузки
Чтобы проверить режим загрузки, проверьте разрядность UEFI:
# cat /sys/firmware/efi/fw_platform_size
Если команда выведет 64 , то система загружена в режиме UEFI и имеет 64-битный x64 UEFI. Если команда выведет 32 , то система загружена в режиме UEFI и имеет 32-битный IA32 UEFI — такой вариант тоже поддерживается, но в качестве загрузчика получится использовать только systemd-boot. Если же такого файла не существует, возможно, система загружена в режиме BIOS (или CSM). Если система загрузилась не в том режиме, который вам нужен (UEFI или BIOS), обратитесь к руководству пользователя вашей материнской платы.
Соединение с интернетом
Для настройки сетевого соединения в live-окружении выполните следующие действия:
-
Убедитесь, что ваш сетевой интерфейс обнаружен и включён, например, с помощью ip-link(8) :
# ip link
- Ethernet: подключите кабель.
- Wi-Fi: подключитесь к беспроводной сети с помощью iwctl.
- Мобильный широкополосный модем: подключитесь к мобильной сети с помощью утилиты mmcli.
- DHCP: установка динамического IP-адреса и адреса DNS-сервера (при помощи systemd-networkd и systemd-resolved) должна срабатывать автоматически для проводных и беспроводных сетевых интерфейсов.
- Статический IP: смотрите Настройка сети#Статический IP-адрес.
# ping archlinux.org
Примечание: Установочный образ включает в себя преднастроенные и активированные службы systemd-networkd, systemd-resolved, iwd и ModemManager. Если вы хотите использовать их в устанавливаемой системе, нужно будет установить, настроить и активировать их вручную.
Синхронизация системных часов
В live-окружении по умолчанию включен systemd-timesyncd, который выполнит синхронизацию времени автоматически после подключения интернета.
Чтобы удостовериться, что время задано правильно, используйте timedatectl(1) :
# timedatectl
Разметка дисков
Когда запущенная система распознает накопители, они становятся доступны как блочные устройства, например, /dev/sda , /dev/nvme0n1 или /dev/mmcblk0 . Чтобы посмотреть их список, используйте lsblk или fdisk.
# fdisk -l
Результаты, оканчивающиеся на rom , loop и airoot , можно игнорировать. Устройства mmcblk* , оканчивающиеся на rpbm , boot0 и boot1 , тоже можно игнорировать.
Совет: Перед разметкой NVMe-накопителей и жёстких дисков с расширенным форматом (Advanced Format) проверьте, что они используют оптимальный логический размер сектора.
На выбранном накопителе должны присутствовать следующие разделы:
- Раздел для корневого каталога / .
- Для загрузки в режиме UEFI также необходим системный раздел EFI.
Если вы хотите создать составное блочное устройство для LVM, шифрования системы или RAID, сделайте это сейчас.
Для изменения таблицы разделов используйте инструмент разметки, например fdisk:
# fdisk /dev/диск_для_разметки
- Если диск не отображается, убедитесь, что контроллер диска не находится в режиме RAID.
- Если диск, с которого планируется загрузка системы, уже содержит системный раздел EFI — не создавайте новый раздел, а используйте существующий.
- Подкачка может быть размещена в файле подкачки, если выбранная вами файловая система поддерживает его.
Примеры схем
| Точка монтирования | Раздел | Тип раздела | Рекомендуемый размер |
|---|---|---|---|
| /mnt/boot 1 | /dev/системный_раздел_efi | Системный раздел EFI | Минимум 300 МиБ. При установке нескольких ядер лучше 1 ГиБ или более. |
| [SWAP] | /dev/раздел_подкачки | Linux swap | Более 512 МиБ |
| /mnt | /dev/корневой_раздел | Linux x86-64 root (/) | Остаток |
- Можно использовать другие точки монтирования, например /mnt/efi , если используемый загрузчик будет способен загрузить ядро и initramfs с корневого раздела. Смотрите соответствующее предупреждение в статье Процесс загрузки Arch#Загрузчик.
| Точка монтирования | Раздел | Тип раздела | Рекомендуемый размер |
|---|---|---|---|
| [SWAP] | /dev/раздел_подкачки | Linux swap | Более 512 МиБ |
| /mnt | /dev/корневой_раздел | Linux | Остаток |
Форматирование разделов
После создания разделов их нужно отформатировать в подходящую файловую систему. Для получения дополнительной информации смотрите раздел Файловые системы#Создание файловой системы.
Например, чтобы отформатировать /dev/корневой_раздел в файловую систему Ext4, выполните следующую команду:
# mkfs.ext4 /dev/корневой_раздел
Если вы создали раздел для подкачки (swap), инициализируйте его с помощью утилиты mkswap(8) :
# mkswap /dev/раздел_подкачки
Примечание: В случае с многоуровневыми (stacked) блочными устройствами замените /dev/*_раздел соответствующим путём к блочному устройству.
Если вы создали системный раздел EFI, отформатируйте его в FAT32 с помощью mkfs.fat(8) .
Важно: Выполняйте форматирование, только если вы создали новый раздел в процессе разметки. Если системный раздел EFI уже существует, его форматирование уничтожит загрузчики других установленных операционных систем.
# mkfs.fat -F 32 /dev/системный_раздел_efi
Монтирование разделов
Смонтируйте корневой раздел в каталог /mnt . Например, если корневой раздел — /dev/корневой_раздел , выполните следующую команду:
# mount /dev/корневой_раздел /mnt
Создайте точки монтирования для всех остальных разделов (например, /mnt/boot ) и примонтируйте соответствующие разделы.
Совет: Команда mount(8) , запущенная с опцией —mkdir , автоматически создаст требуемую точку монтирования. Можно создать их и вручную с помощью mkdir(1) .
Для UEFI примонтируйте системный раздел EFI:
# mount --mkdir /dev/системный_раздел_efi /mnt/boot
Если вы ранее создали раздел подкачки (swap), активируйте его с помощью swapon(8) :
# swapon /dev/раздел_подкачки
В дальнейшем genfstab(8) обнаружит смонтированные файловые системы и пространство подкачки.
Установка
Выбор зеркал
Пакеты для установки будут скачиваться с серверов-зеркал, прописанных в файле /etc/pacman.d/mirrorlist . В установочном образе используется reflector, который после подключения к сети обновит список зеркал (выбрав 20 наиболее актуальных HTTPS-зеркал) и отсортирует их по скорости загрузки.
Чем выше зеркало расположено в списке, тем больший приоритет оно имеет при скачивании пакета. Вы можете проверить этот файл и, при необходимости, отредактировать его вручную, переместив наверх наиболее географически близкие зеркала. При этом также учитывайте и другие критерии.
Позже pacstrap скопирует этот файл в новую систему, так что это действительно стоит сделать.
Установка основных пакетов
Примечание: Никакие программы или настройки (кроме файла /etc/pacman.d/mirrorlist ) из live-окружения в устанавливаемую систему не переносятся.
Используйте скрипт pacstrap(8) , чтобы установить пакет base , ядро Linux и прошивки часто встречающихся устройств:
# pacstrap -K /mnt base linux linux-firmware
- linux можно заменить на другой желаемый пакет ядра. Можно вообще не устанавливать ядро, если установка происходит в контейнере.
- Можно пропустить установку пакета прошивок, если установка происходит в контейнере или виртуальной машине.
Пакет base содержит не все инструменты, имеющиеся на установочном носителе, из-за чего может потребоваться установка дополнительных пакетов для получения полностью функциональной базовой системы. Чтобы установить другие пакеты или группы, добавьте их названия к команде pacstrap (разделяя их пробелом) или используйте pacman во время этапа #Chroot. В частности, вам могут пригодиться следующие программы:
- утилиты для управления файловыми системами в пользовательском пространстве, которые будут использоваться в системе, например, для их создания или для проверки на ошибки;
- утилиты для работы с RAID или LVM, если они будут использоваться;
- специфические прошивки других устройств, не включённые в linux-firmware (например, sof-firmware для некоторых звуковых карт, linux-firmware-marvell для беспроводных сетевых карт Marvell или прошивки для карт Broadcom);
- ПО, необходимое для организации сети (например, сетевой менеджер или автономный DHCP-клиент, программу аутентификации для Wi-Fi, ModemManager для мобильного интернета);
- текстовый редактор;
- пакеты для доступа к документации в man и info: man-db , man-pages и texinfo .
Список пакетов, присутствующих в установочном образе, доступен на странице pkglist.x86_64.txt.
Настройка системы
Fstab
Сгенерируйте файл fstab (используйте ключ -U или -L , чтобы для идентификации разделов использовались UUID или метки, соответственно):
# genfstab -U /mnt >> /mnt/etc/fstab
После этого проверьте файл /mnt/etc/fstab и отредактируйте его в случае необходимости.
Chroot
# arch-chroot /mnt
Время
# ln -sf /usr/share/zoneinfo/Регион/Город /etc/localtime
Запустите hwclock(8) , чтобы сгенерировать /etc/adjtime :
# hwclock --systohc
Эта команда предполагает, что аппаратные часы настроены в формате UTC. Для получения дополнительной информации смотрите раздел System time (Русский)#Стандарт времени.
Чтобы предотвратить дрейф часов и обеспечить точность времени, настройте его синхронизацию с помощью клиента Network Time Protocol (NTP), например systemd-timesyncd.
Локализация
Отредактируйте файл /etc/locale.gen , раскомментировав en_US.UTF-8 UTF-8 и другие необходимые UTF-8 локали (например, ru_RU.UTF-8 UTF-8 ), после чего сгенерируйте их:
# locale-gen
/etc/locale.conf
LANG=ru_RU.UTF-8
Если вы меняли раскладку клавиатуры или шрифт, сделайте эти изменения постоянными, прописав их в файле vconsole.conf(5) :
/etc/vconsole.conf
KEYMAP=ru FONT=cyr-sun16
Настройка сети
/etc/hostname
имявашегохоста
Завершите настройку сети для вновь установленной среды. В частности, установите подходящее ПО для управления сетевым подключением, настройте его по необходимости и включите соответствующий юнит systemd, чтобы подключение к сети выполнялось сразу при загрузке системы.
Initramfs
Как правило, создание нового образа initramfs не требуется, поскольку pacstrap автоматически запускает mkinitcpio после установки пакета ядра.
Если вы используете LVM, шифрование системы или RAID, отредактируйте файл mkinitcpio.conf(5) и пересоздайте образ initramfs:
# mkinitcpio -P
Пароль суперпользователя
# passwd
Загрузчик
Выберите и установите загрузчик с поддержкой Linux. Если вы используете процессор Intel или AMD, включите также обновление микрокода.
Перезагрузка
Выйдите из окружения chroot, набрав exit или нажав Ctrl+d .
Вы можете размонтировать все разделы с помощью команды umount -R /mnt , чтобы убедиться в том, что ни один из разделов не остался занят какой-либо программой. Если нужно, для поиска таких программ используйте fuser(1) .
Теперь перезагрузите компьютер, набрав reboot : если какие-нибудь разделы остались смонтированными, systemd их размонтирует. Не забудьте извлечь установочный носитель. После загрузки войдите в систему в качестве суперпользователя.
После установки
Дальнейшие указания по настройке системы после установки (например, создание аккаунта обычного пользователя, настройка графического интерфейса, звука или тачпада) описаны на странице Основные рекомендации.
Множество интересных и полезных программ вы найдёте на странице Список приложений.
Install Arch Linux from existing Linux
This document describes the bootstrapping process required to install Arch Linux from a running Linux host system. After bootstrapping, the installation proceeds as described in the Installation guide.
Installing Arch Linux from a running Linux is useful for:
- remotely installing Arch Linux, e.g. a (virtual) root server
- replacing an existing Linux without a LiveCD (see #Replacing the existing system without a LiveCD)
- creating a new Linux distribution or LiveMedia based on Arch Linux
- creating an Arch Linux chroot environment, e.g. for a Docker base container
- rootfs-over-NFS for diskless machines
The goal of the bootstrapping procedure is to setup an environment from which the scripts from arch-install-scripts (such as pacstrap and arch-chroot ) can be run.
If the host system runs Arch Linux, this can be achieved by simply installing arch-install-scripts . If the host system runs another Linux distribution, you will first need to set up an Arch Linux-based chroot.
Note: This guide requires that the existing host system be able to execute the new target Arch Linux architecture programs. This means it has to be an x86_64 host.
Warning: Please make sure you understand each step before proceeding. It is easy to destroy your system or to lose data!
Backup and preparation
Backup all your data including mails, webservers, etc. Have all information at your fingertips. Preserve all your server configurations, hostnames, etc.
Here is a list of data you will likely need:
- IP address
- hostname(s), (note: rootserver are mostly also part of the providers domain, check or save your /etc/hosts before you delete)
- DNS server (check /etc/resolv.conf )
- SSH keys (if other people work on your server, they will have to accept new keys otherwise. This includes keys from your Apache, your mail servers, your SSH server and others.)
- Hardware info (network card, etc. Refer to your pre-installed /etc/modules.conf )
- Grub configuration files.
In general, it is a good idea to have a local copy of your original /etc directory on your local hard drive.
From a host running Arch Linux
Follow Installation guide#Mount the file systems to mount the filesystem that will be used for the root directory as well as all the other needed mount points. If you already use the /mnt directory for something else, just create another directory such as /mnt/install and use it as the mount point base for the rest of the installation.
At this stage, Arch Linux can either be installed from scratch or it can mirror the host installation. The two options are described thereafter.
Create a new Arch installation
In the procedure, the first step, Installation guide#Select the mirrors, can be skipped since the host should already have a correct mirrorlist.
- In order to avoid redownloading all the packages, consider following Pacman/Tips and tricks#Network shared pacman cache, or use pacstrap‘s -c option to use your host machine’s package cache.
- When the grub boot-loader is used, the grub-mkconfig may detect devices incorrectly. This will result in Error:no such device when trying to boot from the stick. To solve this problem, from the host running Arch Linux, mount the newly installed partitions, arch-chroot to the new partition, then install and configure grub. The last step may require disabling lvmetad from /etc/lvm/lvm.conf by setting use_lvmetad=0 .
Create a copy of an existing Arch installation
It is possible to replicate an existing Arch Linux installation by copying the host filesystem to the new partition and make some adjustments to it to make it bootable and unique.
The first step is to copy the host files into the mounted new partition, for this, consider using the approach exhibited in rsync#Full system backup.
Then, follow the procedure described in Installation guide#Configure the system with some caveats and additional steps:
- Installation guide#Time, Installation guide#Localization and Installation guide#Root password can be skipped
- Installation guide#Initramfs may be required in particular if changing filesystem, for example from ext4 to Btrfs
- Regarding Installation guide#Boot loader, it is necessary to reinstall the bootloader
- Delete /etc/machine-id so that a new, unique one, is generated at the next boot
If the mirrored Arch installation may be used within a different configuration or with another hardware, consider the following additional operations:
- Use the CPU microcode update adapted to the target system during the step Installation guide#Boot loader
- If any specific Xorg#Configuration was present on the host and may be incompatible with the target system, follow Moving an existing install into (or out of) a virtual machine#Disable any Xorg-related files
- Make any other adjustment appropriate to the target system, like reconfiguring the network or the audio.
From a host running another Linux distribution
There are multiple tools which automate a large part of the steps described in the following subsections. See their respective homepages for detailed instructions.
- archstrap (Bash)
- digitalocean-debian-to-arch (repartition disk, DigitalOcean specific)
- image-bootstrap (Python)
- vps2arch (Bash)
The manual way is presented in the following subsections. The idea is to either get pacman working directly on the host system, or to run an Arch system inside the host system, with the actual installation being executed from the Arch system. The nested system is contained inside a chroot.
Using pacman from the host system
Pacman can be compiled on most Linux distributions, and used directly on the host system to bootstrap Arch Linux. The arch-install-scripts should run without issues directly from the downloaded sources on any recent distribution.
Some distributions provide a package for pacman and/or arch-install-scripts in their official repositories which can be used for this purpose. As of July 2020, Void Linux is known to provide the pacman package, and Alpine Linux and Fedora are known to provide both pacman and arch-install-scripts.
Creating a chroot
Two methods to setup and enter the chroot are presented below, from the easiest to the most complicated. Select only one of the two methods. Then, continue at #Using a chroot environment.
Method A: Using the bootstrap tarball (recommended)
Download the bootstrap tarball from a mirror into /tmp/ .
Download the bootstrap tarball signature from the download page and place it in the same directory. Do not download it from a mirror.
Extract the tarball:
# tar xzf /path-to-bootstrap-image/archlinux-bootstrap-x86_64.tar.gz --numeric-owner
Take note of the final —numeric-owner option, which is important for preserving correct UID and GID numbers of extracted files in case your existing Linux system uses different numbers than Arch Linux.
Select a repository server by editing /tmp/root.x86_64/etc/pacman.d/mirrorlist .
Enter the chroot:
-
If bash 4 or later is installed, and unshare supports the —fork and —pid options:
# /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/
# mount --bind /tmp/root.x86_64 /tmp/root.x86_64 # cd /tmp/root.x86_64 # cp /etc/resolv.conf etc # mount -t proc /proc proc # mount --make-rslave --rbind /sys sys # mount --make-rslave --rbind /dev dev # mount --make-rslave --rbind /run run # (assuming /run exists on the system) # chroot /tmp/root.x86_64 /bin/bash
Method B: Using the LiveCD image
It is possible to mount the root image of the latest Arch Linux installation media and then chroot into it. This method has the advantage of providing a working Arch Linux installation right within the host system without the need to prepare it by installing specific packages.
Note: Before proceeding, make sure the latest version of squashfs is installed on the host system. Otherwise, errors like the following are to be expected: FATAL ERROR aborting: uncompress_inode_table: failed to read block .
The root image can be found on one of the mirrors under iso/latest/arch/x86_64/ . The squashfs format is not editable, so we unsquash the root image and mount it.
To unsquash the root image, run
# unsquashfs airootfs.sfs
Select a repository server by editing squashfs-root/etc/pacman.d/mirrorlist .
Before chrooting to the unsquashed root image, we need to set up some mount points and copy the resolv.conf for networking.
# mount --bind squashfs-root squashfs-root # mount -t proc none squashfs-root/proc # mount -t sysfs none squashfs-root/sys # mount -o bind /dev squashfs-root/dev # mount -o bind /dev/pts squashfs-root/dev/pts ## important for pacman (for signature check) # cp -L /etc/resolv.conf squashfs-root/etc ## this is needed to use networking within the chroot
Now, everything is prepared to chroot into the newly installed Arch environment:
# chroot squashfs-root bash
Using a chroot environment
The bootstrap environment is really barebones (no nano or lvm2 ). Therefore, we need to set up pacman in order to download other necessary packages.
Initializing pacman keyring
Before starting the installation, pacman keys need to be setup. Run the following commands:
# pacman-key --init # pacman-key --populate
Downloading basic tools
This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.
Reason: This error is explained within arch-chroot(8) § DESCRIPTION , it should be linked there. (Discuss in Talk:Install Arch Linux from existing Linux)
Note: When you try to install packages with pacman, you might get error: could not determine cachedir mount point /var/cache/pacman/pkg . To workaround it, run
# mount --bind directory-to-livecd-or-bootstrap directory-to-livecd-or-bootstrap
before chrooting. See FS#46169.
Installation tips
Some host systems or configurations may require certain extra steps. See the sections below for tips.
Debian-based host
/dev/shm
On some Debian-based host systems, pacstrap may produce the following error:
# pacstrap -K /mnt base
==> Creating install root at /mnt mount: mount point /mnt/dev/shm is a symbolic link to nowhere ==> ERROR: failed to setup API filesystems in new root
This is because in some versions of Debian, /dev/shm points to /run/shm while in the Arch-based chroot, /run/shm does not exist and the link is broken. To correct this error, create a directory /run/shm :
# mkdir /run/shm
/dev/pts
While installing archlinux-2015.07.01-x86_64 from a Debian 7 host, the following error prevented both pacstrap(8) and arch-chroot from working:
# pacstrap -K -i /mnt
mount: mount point /mnt/dev/pts does not exist ==> ERROR: failed to setup chroot /mnt
Apparently, this is because these two scripts use a common function. chroot_setup() [1] relies on newer features of util-linux , which are incompatible with Debian 7 userland (see FS#45737).
The solution for pacstrap is to manually execute its various tasks, but use the regular procedure to mount the kernel filesystems on the target directory ( «$newroot» ):
# newroot=/mnt # mkdir -m 0755 -p "$newroot"/var/ "$newroot"/ # mkdir -m 1777 -p "$newroot"/tmp # mkdir -m 0555 -p "$newroot"/ # mount --bind "$newroot" "$newroot" # mount -t proc /proc "$newroot/proc" # mount --rbind /sys "$newroot/sys" # mount --rbind /run "$newroot/run" # mount --rbind /dev "$newroot/dev" # pacman -r "$newroot" --cachedir="$newroot/var/cache/pacman/pkg" -Sy base base-devel . ## add the packages you want # cp -a /etc/pacman.d/gnupg "$newroot/etc/pacman.d/" ## copy keyring # cp -a /etc/pacman.d/mirrorlist "$newroot/etc/pacman.d/" ## copy mirrorlist
Instead of using arch-chroot for Installation guide#Chroot, simply use:
# chroot "$newroot"
lvmetad
Trying to create LVM logical volumes from an archlinux-bootstrap-2015.07.01-x86_64 environment on a Debian 7 host resulted in the following error:
# lvcreate -L 20G lvm -n root
/run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning. /dev/lvm/root: not found: device not cleared Aborting. Failed to wipe start of new LV.
(Physical volume and volume group creation worked despite /run/lvm/lvmetad.socket: connect failed: No such file or directory being displayed.)
This could be easily worked around by creating the logical volumes outside the chroot (from the Debian host). They are then available once chrooted again.
The factual accuracy of this article or section is disputed.
Reason: This problem did not arise when installing from a Debian 7 host without lvmetad enabled. The recommended messaround with /etc/lvm/lvm.conf looks rather error prone (2015-07-26). (Discuss in Talk:Install Arch Linux from existing Linux)
Also, if the system you are using has lvm, you might have the following output:
# grub-install --target=i386-pc --recheck /dev/main/archroot
Installing for i386-pc platform. /run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning. /run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning. /run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning. /run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning. /run/lvm/lvmetad.socket: connect failed: No such file or directory WARNING: Failed to connect to lvmetad. Falling back to internal scanning.
This is because debian does not use lvmetad by default. You need to edit /etc/lvm/lvm.conf and set use_lvmetad to 0 :
use_lvmetad = 0
The factual accuracy of this article or section is disputed.
Reason: Is it the problem with LVM on Debian or with trying to install Arch on LVM? (Discuss in Talk:Install Arch Linux from existing Linux)
This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.
Reason: poor style (Discuss in Talk:Install Arch Linux from existing Linux)
This will trigger later an error on boot in the initrd stage. Therefore, you have to change it back after the grub generation. In a software RAID + LVM, steps would be the following:
- After installing the system, double check your Mkinitcpio and your bootloader settings. See Arch boot process#Boot loader for a list of bootloaders.
- You may need to change your /etc/mdadm.conf to reflect your RAID settings (if applicable).
- You may need to change your HOOKS and MODULES according to your LVM and RAID requirements: MODULES=»dm_mod» HOOKS
- You will most likely need to generate new initrd images with mkinitcpio. See Mkinitcpio#Image creation and activation.
- Set use_lvmetad = 0 in /etc/lvm/lvm.conf .
- Update your bootloader settings. See your bootloader’s wiki page for details.
- Set use_lvmetad = 1 in /etc/lvm/lvm.conf .
Fedora-based host
On Fedora based hosts and live USBs you may encounter problems when using genfstab to generate your fstab. Remove duplicate entries and the «seclabel» option where it appears, as this is Fedora-specific and will keep your system from booting normally.
Things to check before you reboot
Before rebooting, doublecheck a few details in your installation to achieve a successful installation. To do so, first chroot into the newly-installed system, and then:
- create a user with password, so you can login via ssh. This is critical since root login is disabled by default since OpenSSH-7.1p2.
- set a root password so that you can switch to root via su later
- install a ssh solution and enable its server instance to start automatically at boot.
- set up your network configuration in order to have a connection started automatically at boot.
- set up a boot loader and configure it to use the swap partition you appropriated earlier as the root partition. You might want to configure your bootloader to be able to boot into your old system; it is helpful to re-use the server’s existing /boot partition in the new system for this purpose.
Replacing the existing system without a LiveCD
Find ~700 MB of free space somewhere on the disk, e.g. by partitioning a swap partition. You can disable the swap partition and set up your system there.
Set old swap partition as new root partition
Check cfdisk , /proc/swaps or /etc/fstab to find your swap partition. Assuming your hard drive is located on sdaX ( X will be a number).
Do the following:
Disable the swap space:
# swapoff /dev/sdaX
Create a filesystem on it
# fdisk /dev/sda (set /dev/sdaX ID field to "Linux" - Hex 83) # mke2fs -j /dev/sdaX
Create a directory to mount it in
# mkdir /mnt/newsys
Finally, mount the new directory for installing the intermediate system.
# mount -t ext4 /dev/sdaX /mnt/newsys
Installation
Install essentials packages and any other package required to get a system with internet connection up and running in the temporary partition, being careful with the limit of ~700 MB space. When specifying packages to be installed with pacstrap, consider adding the -c flag to avoid filling up valuable space by downloading packages to the host system.
Once the new Arch Linux system is installed, fix the bootloader configuration, then reboot into the newly created system, and rsync the entire system to the primary partition.
- Pages or sections flagged with Template:Style
- Pages or sections flagged with Template:Accuracy
Разбираемся с установкой и загрузкой Linux на примере ArchLinux
Сначала мы установим Archlinux и превратим его в загрузочный сервер. Прямо оттуда подготовим новую компактную систему, в которую добавим минимальное графическое окружение и самый необходимый функционал (на примере Firefox). Научим нашу систему загружаться по сети даже на компьютерах с UEFI. Затем полностью переведём её в режим «только для чтения» (сделаем «живой»), что позволит нам использовать систему одновременно хоть на пол сотне разномастных компьютеров с одним единственным загрузочным сервером. Это всё будет работать даже внутри дешёвой 100-Мб сети, которую мы дополнительно «разгоним» в пару раз.
Никакие закладки в жестких дисках будут вам не страшны, потому что дисков у нас не будет. Никакие очумелые ручки пользователей ничего не сломают, т. к. после перезагрузки система вернется в первозданное лично вами состояние. Конечно же, вы научитесь и сможете самостоятельно изменять загружаемую систему таким образом, чтобы в ней содержался только нужный вам функционал и ничего лишнего. Между делом мы выясним, как и в каком порядке загружается Linux, а также из чего он состоит. Знания, как известно, — бесценны, поэтому я делюсь ими даром.
Постараюсь без долгих рассуждений пояснять происходящее, иногда забегая немного вперёд, но впоследствии обязательно раскладывая всё по полочкам. Чтобы у вас вообще не возникало проблем с пониманием, предполагаю, что вы уже работали с каким-нибудь готовым дистрибутивом Linux, пробовали писать простые скрипты с помощью nano или другого текстового редактора. Если вы новичок в ArchLinux, то узнаете много нового, а если «старичок», то узнаете поменьше, но, надеюсь, что в любом случае вы ещё сильнее полюбите Linux.
Информации оказалось очень много. И по устоявшейся голливудской традиции впереди вас ждёт сериал в нескольких частях:
продолжение;
окончание.
Сейчас мы установим Archlinux в VirtualBox, который можно будет клонировать и запускать практически на любом компьютере с legacy BIOS без каких-либо дополнительных настроек. Между делом мы познакомимся с основными приёмами работы с systemd, а также узнаем как его использовать для запуска произвольных служб и программ во время загрузки. Ещё мы увидим, какие этапы проходит Linux при загрузке, и напишем собственный обработчик (hook), который поместим в initramfs. Не знаете что такое initramfs? Тогда заходите под кат.
Есть много причин, по которым выбор пал именно на Archlinux. Первая причина: он мой давний изворотливый приятель и верный помощник. Gentoo, как пишут на просторах Интернета, ещё более изворотлив, но собирать систему из исходников не хочется. Вторая причина: в готовых сборках всегда содержится много лишнего, а перекачивание больших объемов данных может критично сказаться на производительности сети, да и ничего не видно за широкой спиной «автоматического инсталлятора» — это третья причина. Четвертая: systemd постепенно проникает во все дистрибутивы и даже в Debian, так что мы сможем хорошенько покопаться в грядущем готовых дистрибутивов на примере Archlinux. При всём при этом, систему, которую мы позднее подготовим, можно будет загружать по сети не только сервера, работающего в виртуальной машине, но и с обычного компьютера, например, с Raspberry Pi, и даже с Western Digital My Cloud (проверено), который работает под Debian.
Подготовительные работы
Скачиваем свежий образ по ссылке с официального сайта. В Москве с серверов Яндекса, например, загрузка происходит очень быстро, и если у вас процесс затянулся — просто попробуйте качать в другом месте. Рекомендую запомнить в каком, т. к. эта информация нам ещё пригодится.
В VirtualBox создаем новую виртуальную машину (например, с 1 Гб оперативной памяти и 8 Гб накопителем). В настройках сети необходимо выбрать тип подключения «сетевой мост» и подходящий сетевой адаптер с доступом к сети Интернет. Подключаем скаченный образ к CD-ROM’у. Если не терпится начать работать с железом, то берите флешку и записывайте образ с помощью Win32 Disk Imager (если работаете под Windows), а потом загружайте будущий сервер прямо с неё.
Включаем машину, дожидаемся появления командной строки и устанавливаем пароль, без которого SSH работать не будет:
passwd
Запускаем сервер SSH командой:
systemctl start sshd
Остается узнать IP адрес машины, изучив вывод команды:
ip addr | grep "scope global"
Адрес будет указан сразу после «inet».
Теперь пользователи Windows смогут подключиться к машине с помощью putty, а потом будут копировать отсюда команды и вставлять их и нажатием правой кнопки мыши.
Базовая установка
Дальше максимально коротко опишу стандартную установку Archlinux. Если появятся вопросы, то ответы на них вы, вероятно, найдете в Подробном описании установки для новичков. Wiki просто замечательная, а англоязычная wiki даже актуальная, так что старайтесь пользоваться именно ей.
Подготавливаем носитель с помощью cfdisk (это консольная утилита с простым и понятным интерфейсом). Нам достаточно одного раздела, только не забудьте пометить его как загрузочный:
cfdisk /dev/sda
Форматируем в ext4 и устанавливаем метку, например HABR:
mkfs.ext4 /dev/sda1 -L "HABR"
Будущий корневой раздел монтируем в /mnt:
export root=/mnt mount /dev/sda1 $root
Archlinux обычно устанавливается через интернет, поэтому сразу после установки у вас будет самая новая и актуальная версия. Список репозиториев находится в файле /etc/pacman.d/mirrorlist. Постарайтесь вспомнить, откуда скачивали дистрибутив и перенесите эти серверы в самое начало списка — так вы серьезно сэкономите время на следующем шаге. Обычно это серверы, географически расположенные там же, где вы сейчас находитесь.
nano /etc/pacman.d/mirrorlist
Устанавливаем базовый набор пакетов и набор для разработчиков:
pacstrap -i $root base base-devel
Теперь воспользуемся командой arch-chroot, которая позволяет временно подменить корневой каталог на любой другой, в котором есть структура корневой файловой системы Linux. При этом программы, которые мы оттуда запустим, не будут знать о том, что снаружи ещё что-то существует. Мы практически окажемся в нашей новой системе с правами администратора:
arch-chroot $root
Обратите внимание, как поменялось приглашение командной строки.
Выбираем языки, которые планируем использовать. Предлагаю оставить en_US.UTF-8 UTF-8 и ru_RU.UTF-8 UTF-8. В текстовом редакторе нужно просто снять комментарии напротив них:
nano /etc/locale.gen
Теперь генерируем выбранные локализации:
locale-gen
Если всё прошло хорошо, то вы увидите примерно такой текст:
Generating locales. en_US.UTF-8. done ru_RU.UTF-8. done Generation complete.
Устанавливаем язык, который будет использоваться по-умолчанию:
echo LANG=ru_RU.UTF-8 > /etc/locale.conf
А также раскладку и шрифт в консоли:
echo -e "KEYMAP=ru\nFONT=cyr-sun16\nFONT_MAP bash">ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Придумываем название для нашего будущего сервера:
echo "HabraBoot" > /etc/hostname
Теперь установим пароль администратора. Делаем мы это в первую очередь из-за того, что SSH не позволит нам подключиться к системе без пароля. Тему неразумности использования системы, незащищенной паролем, здесь мы развивать не будем.
passwd
Дважды вводим пароль и убеждаемся, что password updated successfully.
Добавим нового пользователя с именем username (можете выбрать любое), наделим его правами администратора и зададим ему пароль из тех же соображений, а ещё и из-за того, что под root в текущей версии Arch мы не сможем собирать пакеты из AUR (Arch User Repository — это репозиторий от сообщества пользователей Arch Linux с программами, которые не вошли в основной репозиторий):
useradd -m username
Редактируем файл настроек /etc/sudoers с помощью nano:
EDITOR=nano visudo
Добавив в него сразу после строки «root ALL=(ALL) ALL» ещё одну строчку:
username ALL=(ALL) ALL
И задаём пароль для пользователя username:
passwd username
Теперь нужно установить загрузчик на внутренний накопитель, чтобы система смогла самостоятельно с него загрузиться. В качестве загрузчика предлагаю использовать GRUB, потому что позже он нам снова пригодится. Устанавливаем пакеты с помощью стандартного для Archlinux менеджера пакетов pacman:
pacman -S grub
Записываем загрузчик в MBR (Master Boot Record) нашего внутреннего накопителя.
grub-install --target=i386-pc --force --recheck /dev/sda
Если всё прошло нормально, то вы увидите Installation finished. No error reported.
Выходим из chroot:
exit
И замечаем, как поменялось приглашение командной строки.
Мы будем использовать метки дисков, подробное объяснение этого утверждения последует позже.
Снимите комментарий со строки GRUB_DISABLE_LINUX_UUID=true, чтобы не использовались UUID накопителей:
nano $root/etc/default/grub
Генерируем файл конфигурации загрузчика, снова используя arch-chroot. Будет произведён вход, выполнение одной единственной команды, и последует автоматический выход:
arch-chroot $root grub-mkconfig --output=/boot/grub/grub.cfg
Нам нужно заменить все упоминания /dev/sda1 на LABEL=HABR в файле конфигурации:
mv $root/boot/grub/grub.cfg $root/boot/grub/grub.cfg.autoconf && cat $root/boot/grub/grub.cfg.autoconf | sed 's/\(root=\)\/dev\/sda1/\1LABEL=HABR/g' > $root/boot/grub/grub.cfg
Если поменять в этом же файле строку set lang=en_US на set lang=ru_RU, то загрузчик будет общаться с нами на великом и могучем.
Генерируем файл fstab с ключом -L, который заставит генератор использовать метки дисков:
genfstab -p -L $root > $root/etc/fstab
На этом базовая установка ArchLinux закончена. Система будет загружаться самостоятельно и встретит вас приветливым русскоязычным интерфейсом командной строки. Если после этого мы введем команду dhcpcd, то скорее всего даже Интернет заработает. Но мы пока не будем торопиться с перезагрузкой.
Запуск при загрузке с помощью systemd на примере NTP и SSH
Поскольку наша система будет общаться с другими компьютерами, нам потребуется синхронизировать время. Если время на сервере и клиенте будет отличаться, то существует большая вероятность того, что они вообще не смогут соединиться друг с другом. В свою очередь sudo может начать просить пароль после каждого действия, думая, что таймаут авторизации давно истёк. И кто знает, с чем нам ещё предстоит столкнуться? Перестрахуемся.
Чтобы синхронизировать время с серверами через Интернет по протоколу NTP, нам нужно установить недостающие пакеты. Можно воспользоваться arch-root, но но мы обойдёмся ключами, которые сообщат новое место для установки менеджеру пакетов:
pacman --root $root --dbpath $root/var/lib/pacman -S ntp
Настроим получение точного времени с российских серверов:
mv $root/etc/ntp.conf $root/etc/ntp.conf.old && cat $root/etc/ntp.conf.old | sed 's/\([0-9]\).*\(.pool.ntp.org\)/\1.ru\2/g' | tee $root/etc/ntp.conf
Нам достаточно синхронизировать время один раз при загрузке. Раньше мы бы записали запуск службы точного времени в файл rc.local, но сейчас появился менеджер системы и служб systemd, который старается запускать службы (в оригинале они называются unit) параллельно для уменьшения времени загрузки системы. Естественно, что работоспособность одной службы может зависеть от функционирования другой. Например, нам бесполезно пытаться синхронизировать время через Интернет до того, как у нас на компьютере заработает сеть. Чтобы описать все эти взаимосвязи, уже недостаточно простого указания имени исполняемого файла, поэтому запуск посредством systemd стал весьма нетривиальным занятием. Для этой цели были созданы специальные файлы с расширением «.service». В них указаны зависимости, имена исполняемых файлов и другие параметры, которые нужно учитывать для успешного запуска. В частности, для управления этапами загрузки в systemd используются цели (target), которые по возлагаемым на них задачам схожи с уровнями запуска (runlevel). Подробности читайте в вики.
К радости новичков, вместе с пакетом ntp поставляется уже готовый ntpdate.service. Все файлы, описывающие запуск служб, находятся в папке $root/usr/lib/systemd/system/, и их можно открыть в любом текстовом редакторе или посмотреть обычным образом. Вот, например, $root/usr/lib/systemd/system/ntpdate.service:
[Unit] Description=One-Shot Network Time Service After=network.target nss-lookup.target Before=ntpd.service [Service] Type=oneshot PrivateTmp=true ExecStart=/usr/bin/ntpd -q -n -g -u ntp:ntp [Install] WantedBy=multi-user.target
В блоке [Unit] в строке Description указывается краткое описание службы, и при каких условиях она должна быть запущена (в данном случае, после запуска сети, но до перед запуском сервера NTP, который мы вообще не планируем запускать). Запрос точного времени происходит единственный раз во время загрузки, и за это отвечает строка Type=oneshot из блока [Service]. В этом же блоке в строке ExecStart указаны действия, которые необходимо выполнить для запуска сервиса. В блоке [Install] в нашем случае указано, что запуск нашей службы необходим для достижения цели multi-user.target. Рекомендуется использовать такое же содержание блока [Install] для запуска самодельных служб.
В качестве первого практического примера мы немного расширим функциональность ntpdate.service, попросив его дополнительно исправлять время на аппаратных часах. Если после этого, на этом же самом компьютере вы загрузите Windows, то увидите время по Гринвичу, так что не пугайтесь.
Изменение стандартного поведения любой службы systemd производится следующим образом: сначала в папке /etc/systemd/system/ создается новый каталог с полным именем службы и расширением «.d», куда добавляется файл с произвольным именем и расширением «.conf», и уже там производятся нужные модификации. Приступим:
mkdir -p $root/etc/systemd/system/ntpdate.service.d && echo -e '[Service]\nExecStart=/usr/bin/hwclock -w' > $root/etc/systemd/system/ntpdate.service.d/hwclock.conf
Здесь просто говорится о том, что во сразу после запуска службы выполнить команду «/usr/bin/hwclock -w», которая переведёт аппаратные часы.
Добавляем службу ntpdate в автозагрузку (синтаксис стандартен для всех служб):
arch-chroot $root systemctl enable ntpdate Created symlink from /etc/systemd/system/multi-user.target.wants/ntpdate.service to /usr/lib/systemd/system/ntpdate.service.
Как видите, в каталоге multi-user.target.wants создалась обыкновенная символическая ссылка на файл ntpdate.service, а упоминание о цели multi-user.target мы видели в блоке [Install] этого самого файла. Получается для того, чтобы система достигла цели multi-user.target, должны быть запущены все службы из каталога multi-user.target.wants.
Теперь устанавливаем пакет SSH аналогичным способом (в ArchLinux он называется openssh):
pacman --root $root --dbpath $root/var/lib/pacman -S openssh
Но на этот раз для автозапуска мы будем использовать сокет, чтобы сервер SSH стартовал только после поступления запроса на подключение, а не висел мёртвым грузом в оперативной памяти:
arch-chroot $root systemctl enable sshd.socket
Мы не поменяли стандартный 22-й порт и не включили принудительное использование Protocol 2 — пусть это останется на моей совести.
Забегая вперед или знакомимся с обработчиками (hooks)
Чтобы мы могли не глядя подключиться к нашему будущему серверу, нам нужно знать его IP адрес. Будет намного проще, если этот адрес — статический. Обычные способы, о которых говорится в вики, нам не подходят. Проблема в том, что сетевые адаптеры в современном мире именуются согласно своему физическому расположению на материнской плате. Например, имя устройства enp0s3 означает, что это сетевой адаптер ethernet, который расположен на нулевой шине PCI в третьем слоте (подробности здесь). Сделано так для того, чтобы при замене одного адаптера другим, имя устройства в системе не поменялось. Такое поведение нам не желательно, т. к. на разных моделях материнских плат положение сетевой карты может быть разным, и когда мы попытаемся перенести наш загрузочный сервер из VirtualBox на реальное железо, нам скорее всего придётся загружаться с клавиатурой и монитором, чтобы правильно настроить сеть. Нам нужно, чтобы имя сетевого адаптера стало более предсказуемым, например, eth0 (это место зарезервировано смайликом).
Почему будем делать так?
Не сомневаюсь, что существуют более изящные решения проблемы имён устройств, но приведённый далее вариант оказался весьма подходящим для демонстрации общего принципа загрузки Linux. Пожалуйста, не забывайте в комментариях знакомить сообщество с проверенными вами способами.
Устанавливаем пакет mkinitcpio-nfs-utils, и у нас появится обработчик (hook) под названием «net»:
pacman --root $root --dbpath $root/var/lib/pacman -S mkinitcpio-nfs-utils
По-умолчанию, все файлы обработчика попадают в /usr/lib/initcpio/. Обычно это парные файлы с одинаковым названием, один из которых окажется в подкаталоге install, а другой — в hooks. Сами файлы являются обычными скриптами. Файл из папки hooks обычно попадает внутрь файла initramfs (позже мы о нём всё узнаем) и выполняется при загрузке системы. Второй файл из пары попадает в папку install. Внутри него есть функция build(), в которой находятся сведения о том, какие действия нужно выполнить во время генерации файла initramfs, а также функция help() с описанием того, для чего предназначен данный обработчик. Если запутались, то просто читайте дальше, и всё сказанное в этом абзаце встанет на свои места.
Папка initcpio также присутствует в каталоге /etc, и в ней тоже есть подкаталоги install и hooks. При этом она имеет безусловный приоритет над /usr/lib/initcpio, т. е. если в обеих папках окажутся файлы с одинаковыми названиями, то при генерации initcpio будут использоваться файлы из /etc/initcpio, а не из /usr/lib/initcpio.
Нам нужно немного поменять функциональность обработчика net, поэтому просто скопируем файлы из /usr/lib/initcpio в /etc/initcpio:
cp $root/usr/lib/initcpio/hooks/net $root/etc/initcpio/hooks/ && cp $root/usr/lib/initcpio/install/net $root/etc/initcpio/install/
Приводим файл hooks/net к следующему виду:
cat $root/etc/initcpio/hooks/net # vim: set ft=sh: run_hook() < if [ -n "$ip" ] then ipconfig "ip=$" fi > # vim: set ft=sh ts=4 sw=4 et:
Теперь откроем файл $root/etc/initcpio/install/net и увидим, что в функции help() отлично написано, что из себя должна представлять переменная «ip»:
Останется просто установить значение переменной, чтобы задать статический IP адрес и название сетевого устройства, например так «192.168.1.100::192.168.1.1:255.255.255.0::eth0:none» (здесь и далее используйте подходящие для себя настройки сети). В следующем разделе вы узнаете, где именно задаётся значение.
А пока уберём всё лишнее из файла $root/etc/initcpio/install/net. Оставляем загрузку модулей сетевых устройств, программу ipconfig, которую использовали выше, и, естественно, сам скрипт из папки hooks, выполняющий всю основную работу. Получится примерно следующее:
cat $root/etc/initcpio/install/net #!/bin/bash build() < add_checked_modules '/drivers/net/' add_binary "/usr/lib/initcpio/ipconfig" "/bin/ipconfig" add_runscript >help() < cat # vim: set ft=sh ts=4 sw=4 et:
Когда во время загрузки менеджер устройств systemd-udevd попробует переименовать наше сетевое устройство в привычное ему predictable network interface name, например, в enp0s3, то у него ничего не получится. Почему — читайте дальше.
Как происходит загрузка системы
Для простоты рассмотрим обычные BIOS. После включения и инициализации, BIOS начинает по порядку идти по списку загрузочных устройств, пока не найдет загрузчик, которому передаст дальнейшее управление загрузкой.
Как раз такой загрузчик мы записали в MBR нашего накопителя. Мы использовали GRUB, в настройках которого (файл grub.cfg) указали, что корневой раздел находится на диске с меткой HABR. Вот эта строка целиком:
linux /boot/vmlinuz-linux root=LABEL=HABR rw quiet
Здесь упомянут файл vmlinuz-linux, который является ядром системы, а указатель на корневую систему является его параметром. Мы просим искать корневую систему на устройстве с меткой HABR. Здесь также мог бы быть уникальный для каждого накопителя UUID, но в этом случае при переносе системы на другой диск нам несомненно пришлось бы его изменить. Если бы мы указали положение корневой системы привычным для линуксоидов образом: /dev/sda1, то не смогли бы загрузиться с USB накопителя, т. к. это имя USB накопитель бы получил только будучи единственным накопителем в компьютере. Маловероятно, что в компьютере окажется ещё один накопитель с меткой HABR, но не стоит об этом забывать.
Здесь же устанавливается значение глобальной переменной «ip» для нашего обработчика «net» (не забудьте поменять адреса на используемые в вашей сети):
linux /boot/vmlinuz-linux root=LABEL=HABR rw quiet ip=192.168.1.100::192.168.1.1:255.255.255.0::eth0:none
В соседней строке есть упоминание файла initramfs, с которым я обещал разобраться:
initrd /boot/initramfs-linux.img
Далее при загрузке происходит следующее: загрузчик GRUB получает файлы vmlinuz и initramfs, сообщает им, где искать корневую файловую систему и передаёт им управление дальнейшей загрузкой.
Название initramfs образовано от initial ram file system. Это на самом деле обычная корневая файловая система Linux, упакованная в архив. Она разворачивается в оперативной памяти во время загрузки и предназначена для того, чтобы найти и подготовить корневую файловую систему нашего linux, который мы пытаемся загрузить в итоге. В initramfs есть всё необходимое для этих целей, ведь это настоящий «маленький линукс», который может выполнять многие обычные команды. Его возможности расширяются с помощью обработчиков (hooks), которые помогают сформировать новую корневую файловую систему нашего linux.
После того, как программы из initramfs выполнят свою работу, управление дальнейшей загрузкой передается процессу init подготовленной корневой файловой системы. В качестве процесса init Archlinux использует systemd.
Менеджер устройств systemd-udevd является частью systemd. Он, как и его старший брат, старается обнаруживать и настраивать все устройства в системе параллельно. Он начинает свою работу одним из первых, но уже после того, как наш обработчик net инициализирует сетевую карту ещё на на этапе работы initramfs. Таким образом, systemd-udevd не может переименовать используемое устройство, и имя eth0 сохраняется за сетевой картой в течение всего времени работы.
Готовим initramfs
Для создания файла initramfs используется программа mkinitcpio, которая входит в пакет base, установленный нами в самом начале. Настройки находятся в файле $root/etc/mkinitcpio.conf, а пресеты лежат в папке /etc/mkinitcpio.d. От нас требуется сделать initramfs таким, чтобы он смог найти и подготовить корневую файловую систему, с которой впоследствии начнёт работать systemd. Нам совершенно необязательно учитывать все возможные варианты, достаточно только самого необходимого, чтобы не увеличивать размеры файла initramfs. Более подробная информация находится здесь wiki.archlinux.org/index.php/Mkinitcpio
Обязательно убираем обработчик autodetect. Он проверяет устройства установленные в данном конкретном компьютере, и оставляет только необходимые для них модули в initramfs. Нам этого не нужно, поскольку мы изначально рассматриваем возможность дальнейшего переноса системы на другой компьютер, который аппаратно скорее всего будет отличаться от используемой виртуальной машины.
Достаточный для наших целей список обработчиков включая созданный нами net выглядит следующим образом:
HOOKS="base udev net block filesystems"
вставляем эту строку в файл mkinitcpio.conf, а старую комментируем:
nano $root/etc/mkinitcpio.conf
На базе стандартного пресета linux создаем свой пресет habr:
cp $root/etc/mkinitcpio.d/linux.preset $root/etc/mkinitcpio.d/habr.preset
И приводим его к такому виду:
cat $root/etc/mkinitcpio.d/habr.preset ALL_config="/etc/mkinitcpio.conf" ALL_kver="/boot/vmlinuz-linux" PRESETS=('default' ) default_image="/boot/initramfs-linux.img"
Нам не нужна ветка 'fallback', которая удаляет из обработчиков autodetect, ведь мы его уже сами убрали, и нам не нужно дважды генерировать одинаковый файл initramfs с разными названиями.
Генерируем новый initramfs с помощью пресета habr:
arch-chroot $root mkinitcpio -p habr
Пишем службу обновления DNS для использования с systemd
Наша сетевая карта получает все настройки для того, чтобы работала сеть и Интернет. Но названия сайтов переводиться в IP адреса не будут, т. к. наша система не знает, какие серверы DNS следует для этого использовать. Напишем собственную службу для этих целей, которую при загрузке будет запускать systemd. А чтобы узнать что-то новое и не заскучать от однообразия, передадим информацию о названии сетевого устройства в качестве параметра, а список DNS серверов сохраним во внешнем файле.
Обновлением информации о DNS серверах занимается resolvconf. Нам идеально подходит синтакскис:
resolvconf [-m metric] [-p] -a interface
В импортируемом здесь файле IP адрес каждого сервера указывается в новой строке после ключевого слова nameserver. Можно указать сколько угодно серверов, но использоваться будут только первые 3 из них. В качестве примера воспользуемся серверами Яндекс. В этом случае файл, передаваемый в resolvconf, должен выглядеть вот так:
nameserver 77.88.8.8 nameserver 77.88.8.1
Нам нужно получать информацию о DNS серверах до того, как система будет уверена, что сеть полностью работает, т. е. до достижения цели network.target. Будем считать, что информацию о серверах нам достаточно обновлять один раз во время загрузки. И стандартно скажем, что нашу службу требует цель multi-user.target. Создаём файл запуска службы в каталоге со следующим содержанием:
cat $root/etc/systemd/system/update_dns@.service [Unit] Description=Manual resolvconf update (%i) Before=network.target [Service] Type=oneshot EnvironmentFile=/etc/default/dns@%i ExecStart=/usr/bin/sh -c 'echo -e "nameserver $\nnameserver $" | resolvconf -a %i' [Install] WantedBy=multi-user.target
В строке ExecStart мы выполняем команду echo, на лету генерирующую файл со списком серверов, который через конвейер передаем resolvconf. Вообще, в строке ExecStart нельзя использовать несколько команд и тем более нельзя использовать конвейеры, но мы снова всех обманули, передав эти команды в качестве параметра -c для /usr/bin/sh.
Обратите внимание, что в названии файла update_dns@.service используется символ @, после которого можно указать переменную, и она попадёт внутрь файла, заменив собой "%i". Таким образом строка EnvironmentFile=/etc/default/dns@%i превратится в EnvironmentFile=/etc/default/dns@eth0 — именно это название внешнего файла, мы будем использовать для хранения значения переменных DNS0 и DNS1. Синтаксис как в обычных скриптах: «название переменной=значение переменной». Создадим файл:
nano $root/etc/default/dns@eth0
И добавим следующие строки:
DNS0=77.88.8.8 DNS1=77.88.8.1
Теперь добавляем службу в автозагрузку не забывая указать имя сетевой карты после @:
arch-chroot $root systemctl enable update_dns@eth0.service
Только что мы написали универсальный файл, обеспечивающий запуск службы. Универсальность заключается в том что, если в нашей системе окажется несколько сетевых адаптеров, то для каждого из них мы сможем указать свои собственные DNS серверы. Нужно будет просто подготовить набор файлов со списком серверов для каждого из устройств и запускать службу для каждого адаптера в отдельности указывая его имя после @.
Перед первым запуском
На этом первоначальная настройка закончена. Нам нужно загрузить установленный ArchLinux с внутреннего накопителя, чтобы произведённые нами изменения вступили в силу.
Отключаем готовую корневую систему:
umount $root
И выключаем виртуальную машину:
poweroff
Теперь можно отключить загрузочный образ из CD-ROM или достать флешку, после этого включаем машину и убеждаемся, что всё работает.
Installation guide
This document is a guide for installing Arch Linux using the live system booted from an installation medium made from an official installation image. The installation medium provides accessibility features which are described on the page Install Arch Linux with accessibility options. For alternative means of installation, see Category:Installation process.
Before installing, it would be advised to view the FAQ. For conventions used in this document, see Help:Reading. In particular, code examples may contain placeholders (formatted in italics ) that must be replaced manually.
This guide is kept concise and you are advised to follow the instructions in the presented order per section. For more detailed instructions, see the respective ArchWiki articles or the various programs' man pages, both linked from this guide. For interactive help, the IRC channel and the forums are also available.
Arch Linux should run on any x86_64-compatible machine with a minimum of 512 MiB RAM, though more memory is needed to boot the live system for installation.[1] A basic installation should take less than 2 GiB of disk space. As the installation process needs to retrieve packages from a remote repository, this guide assumes a working internet connection is available.
Pre-installation
Acquire an installation image
Visit the Download page and, depending on how you want to boot, acquire the ISO file or a netboot image, and the respective GnuPG signature.
Verify signature
It is recommended to verify the image signature before use, especially when downloading from an HTTP mirror, where downloads are generally prone to be intercepted to serve malicious images.
On a system with GnuPG installed, do this by downloading the ISO PGP signature (under Checksums in the page Download) to the ISO directory, and verifying it with:
$ gpg --keyserver-options auto-key-retrieve --verify archlinux-version-x86_64.iso.sig
Alternatively, from an existing Arch Linux installation run:
$ pacman-key -v archlinux-version-x86_64.iso.sig
- The signature itself could be manipulated if it is downloaded from a mirror site, instead of from archlinux.org as above. In this case, ensure that the public key, which is used to decode the signature, is signed by another, trustworthy key. The gpg command will output the fingerprint of the public key.
- Another method to verify the authenticity of the signature is to ensure that the public key's fingerprint is identical to the key fingerprint of the Arch Linux developer who signed the ISO-file. See Wikipedia:Public-key cryptography for more information on the public-key process to authenticate keys.
Prepare an installation medium
The installation image can be supplied to the target machine via a USB flash drive, an optical disc or a network with PXE: follow the appropriate article to prepare yourself an installation medium from the chosen image.
Boot the live environment
Note: Arch Linux installation images do not support Secure Boot. You will need to disable Secure Boot to boot the installation medium. If desired, Secure Boot can be set up after completing the installation.
- Point the current boot device to the one which has the Arch Linux installation medium. Typically it is achieved by pressing a key during the POST phase, as indicated on the splash screen. Refer to your motherboard's manual for details.
- When the installation medium's boot loader menu appears, select Arch Linux install medium and press Enter to enter the installation environment.
- The installation image uses GRUB for UEFI and syslinux for BIOS booting. Use respectively e or Tab to enter the boot parameters. See README.bootparams for a list.
- A common example of manually defined boot parameter would be the font size. For better readability on HiDPI screens—when they are not already recognized as such—using fbcon=font:TER16x32 can help. See HiDPI#Linux console (tty) for a detailed explanation.
To switch to a different console—for example, to view this guide with Lynx alongside the installation—use the Alt+arrow shortcut. To edit configuration files, mcedit(1) , nano and vim are available. See pkglist.x86_64.txt for a list of the packages included in the installation medium.
Set the console keyboard layout and font
The default console keymap is US. Available layouts can be listed with:
# localectl list-keymaps
To set the keyboard layout, pass its name to loadkeys(1) . For example, to set a German keyboard layout:
# loadkeys de-latin1
Console fonts are located in /usr/share/kbd/consolefonts/ and can likewise be set with setfont(8) omitting the path and file extension. For example, to use one of the largest fonts suitable for HiDPI screens, run:
# setfont ter-132b
Verify the boot mode
To verify the boot mode, check the UEFI bitness:
# cat /sys/firmware/efi/fw_platform_size
If the command returns 64 , then system is booted in UEFI mode and has a 64-bit x64 UEFI. If the command returns 32 , then system is booted in UEFI mode and has a 32-bit IA32 UEFI; while this is supported, it will limit the boot loader choice to systemd-boot. If the file does not exist, the system may be booted in BIOS (or CSM) mode. If the system did not boot in the mode you desired (UEFI vs BIOS), refer to your motherboard's manual.
Connect to the internet
To set up a network connection in the live environment, go through the following steps:
-
Ensure your network interface is listed and enabled, for example with ip-link(8) :
# ip link
- Ethernet—plug in the cable.
- Wi-Fi—authenticate to the wireless network using iwctl.
- Mobile broadband modem—connect to the mobile network with the mmcli utility.
- DHCP: dynamic IP address and DNS server assignment (provided by systemd-networkd and systemd-resolved) should work out of the box for Ethernet, WLAN, and WWAN network interfaces.
- Static IP address: follow Network configuration#Static IP address.
# ping archlinux.org
Note: In the installation image, systemd-networkd, systemd-resolved, iwd and ModemManager are preconfigured and enabled by default. That will not be the case for the installed system.
Update the system clock
In the live environment systemd-timesyncd is enabled by default and time will be synced automatically once a connection to the internet is established.
Use timedatectl(1) to ensure the system clock is accurate:
# timedatectl
Partition the disks
When recognized by the live system, disks are assigned to a block device such as /dev/sda , /dev/nvme0n1 or /dev/mmcblk0 . To identify these devices, use lsblk or fdisk.
# fdisk -l
Results ending in rom , loop or airootfs may be ignored. mmcblk* devices ending in rpbm , boot0 and boot1 can be ignored.
Note: If the disk does not show up, make sure the disk controller is not in RAID mode.
Tip: Check that your NVMe drives and Advanced Format hard disk drives are using the optimal logical sector size before partitioning.
The following partitions are required for a chosen device:
- One partition for the root directory / .
- For booting in UEFI mode: an EFI system partition.
If you want to create any stacked block devices for LVM, system encryption or RAID, do it now.
Use a partitioning tool like fdisk to modify partition tables. For example:
# fdisk /dev/the_disk_to_be_partitioned
- If the disk from which you want to boot already has an EFI system partition, do not create another one, but use the existing partition instead.
- Swap space can be set on a swap file for file systems supporting it.
Example layouts
| Mount point | Partition | Partition type | Suggested size |
|---|---|---|---|
| /mnt/boot 1 | /dev/efi_system_partition | EFI system partition | At least 300 MiB. If multiple kernels will be installed, then no less than 1 GiB. |
| [SWAP] | /dev/swap_partition | Linux swap | More than 512 MiB |
| /mnt | /dev/root_partition | Linux x86-64 root (/) | Remainder of the device. At least 23–32 GiB. |
- Other mount points, such as /mnt/efi , are possible, provided that the used boot loader is capable of loading the kernel and initramfs images from the root volume. See the warning in Arch boot process#Boot loader.
| Mount point | Partition | Partition type | Suggested size |
|---|---|---|---|
| [SWAP] | /dev/swap_partition | Linux swap | More than 512 MiB |
| /mnt | /dev/root_partition | Linux | Remainder of the device. At least 23–32 GiB. |
Format the partitions
Once the partitions have been created, each newly created partition must be formatted with an appropriate file system. See File systems#Create a file system for details.
For example, to create an Ext4 file system on /dev/root_partition , run:
# mkfs.ext4 /dev/root_partition
If you created a partition for swap, initialize it with mkswap(8) :
# mkswap /dev/swap_partition
Note: For stacked block devices replace /dev/*_partition with the appropriate block device path.
If you created an EFI system partition, format it to FAT32 using mkfs.fat(8) .
Warning: Only format the EFI system partition if you created it during the partitioning step. If there already was an EFI system partition on disk beforehand, reformatting it can destroy the boot loaders of other installed operating systems.
# mkfs.fat -F 32 /dev/efi_system_partition
Mount the file systems
Mount the root volume to /mnt . For example, if the root volume is /dev/root_partition :
# mount /dev/root_partition /mnt
Create any remaining mount points (such as /mnt/boot ) and mount the volumes in their corresponding hierarchical order.
Tip: Run mount(8) with the --mkdir option to create the specified mount point. Alternatively, create it using mkdir(1) beforehand.
For UEFI systems, mount the EFI system partition:
# mount --mkdir /dev/efi_system_partition /mnt/boot
If you created a swap volume, enable it with swapon(8) :
# swapon /dev/swap_partition
genfstab(8) will later detect mounted file systems and swap space.
Installation
Select the mirrors
Packages to be installed must be downloaded from mirror servers, which are defined in /etc/pacman.d/mirrorlist . On the live system, after connecting to the internet, reflector updates the mirror list by choosing 20 most recently synchronized HTTPS mirrors and sorting them by download rate.
The higher a mirror is placed in the list, the more priority it is given when downloading a package. You may want to inspect the file to see if it is satisfactory. If it is not, edit the file accordingly, and move the geographically closest mirrors to the top of the list, although other criteria should be taken into account.
This file will later be copied to the new system by pacstrap, so it is worth getting right.
Install essential packages
Note: No software or configuration (except for /etc/pacman.d/mirrorlist ) gets carried over from the live environment to the installed system.
Use the pacstrap(8) script to install the base package, Linux kernel and firmware for common hardware:
# pacstrap -K /mnt base linux linux-firmware
- You can substitute linux with a kernel package of your choice, or you could omit it entirely when installing in a container.
- You could omit the installation of the firmware package when installing in a virtual machine or container.
The base package does not include all tools from the live installation, so installing more packages may be necessary for a fully functional base system. To install other packages or package groups, append the names to the pacstrap command above (space separated) or use pacman to install them while chrooted into the new system. In particular, consider installing:
- userspace utilities for file systems that will be used on the system—for the purposes of e.g. file system creation and fsck,
- utilities for accessing and managing RAID or LVM if they will be used on the system,
- specific firmware for other devices not included in linux-firmware (e.g. sof-firmware for onboard audio, linux-firmware-marvell for Marvell wireless and any of the multiple firmware packages for Broadcom wireless),
- software necessary for networking (e.g. a network manager or a standalone DHCP client, authentication software for Wi-Fi, ModemManager for mobile broadband connections),
- a text editor,
- packages for accessing documentation in man and info pages: man-db , man-pages and texinfo .
For comparison, packages available in the live system can be found in pkglist.x86_64.txt.
Configure the system
Fstab
Generate an fstab file (use -U or -L to define by UUID or labels, respectively):
# genfstab -U /mnt >> /mnt/etc/fstab
Check the resulting /mnt/etc/fstab file, and edit it in case of errors.
Chroot
Change root into the new system:
# arch-chroot /mnt
Time
# ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
Run hwclock(8) to generate /etc/adjtime :
# hwclock --systohc
This command assumes the hardware clock is set to UTC. See System time#Time standard for details.
To prevent clock drift and ensure accurate time, set up time synchronization using a Network Time Protocol (NTP) client such as systemd-timesyncd.
Localization
Edit /etc/locale.gen and uncomment en_US.UTF-8 UTF-8 and other needed UTF-8 locales. Generate the locales by running:
# locale-gen
/etc/locale.conf
LANG=en_US.UTF-8
/etc/vconsole.conf
KEYMAP=de-latin1
Network configuration
/etc/hostname
yourhostname
Complete the network configuration for the newly installed environment. That may include installing suitable network management software, configuring it if necessary and enabling its systemd unit so that it starts at boot.
Initramfs
Creating a new initramfs is usually not required, because mkinitcpio was run on installation of the kernel package with pacstrap.
For LVM, system encryption or RAID, modify mkinitcpio.conf(5) and recreate the initramfs image:
# mkinitcpio -P
Root password
# passwd
Boot loader
Choose and install a Linux-capable boot loader. If you have an Intel or AMD CPU, enable microcode updates in addition.
Reboot
Exit the chroot environment by typing exit or pressing Ctrl+d .
Optionally manually unmount all the partitions with umount -R /mnt : this allows noticing any "busy" partitions, and finding the cause with fuser(1) .
Finally, restart the machine by typing reboot : any partitions still mounted will be automatically unmounted by systemd. Remember to remove the installation medium and then login into the new system with the root account.
Post-installation
See General recommendations for system management directions and post-installation tutorials (like creating unprivileged user accounts, setting up a graphical user interface, sound or a touchpad).
For a list of applications that may be of interest, see List of applications.
Retrieved from "https://wiki.archlinux.org/index.php?title=Installation_guide&oldid=797418"