Install Arch Linux from existing Linux (Русский)
Этот документ описывает bootstrapping process, нужный для того, чтобы установить Arch Linux из уже работающего хоста Linux. После bootstrapping, установка продолжается так, как описано в руководстве по установке Arch Linux.
Установка Arch Linux из-под другого Linux полезна для:
- удалённой установки Arch Linux, например на виртуальном сервере
- замены существующего Linux без LiveCD (смотрите #Замена уже существующей системы без LiveCD)
- создания нового дистрибутива Linux или LiveCD основанного на Arch Linux
- создания chroot окружения Arch Linux, например для контейнеров Docker
- rootfs-over-NFS для бездисковых систем
Цель процедуры начальной загрузки в том, чтобы настроить окружение, из которого можно будет запустить arch-install-scripts (содержит такие скрипты как pacstrap
и arch-chroot
).
Если хост работает под Arch Linux, этого можно достичь простой установкой пакета arch-install-scripts. На других дистрибутивах Linux потребуется подготовить chroot-окружение на базе Arch Linux.
Резервное копирование и подготовка
Сделайте резервную копию всех ваших данных, включая почту, веб-серверы и т. д. Держите всю нужную информацию всегда под рукой. Сохраните все конфигурации вашего сервера, имена хостов и т. д.
Список информации, которая вам скорее всего понадобится:
- IP-адреса
- имена хостов (проверьте ваш
/etc/hosts
) - DNS-серверы (проверьте
/etc/resolv.conf
) - SSH-ключи (если на сервере работают другие люди, то им придётся подтверждать использование новых ключей в случае их замены. Сюда входят ключи от вашего Apache, ваших почтовых серверов, вашего SSH-сервера и др.)
- Информация об оборудовании (сетевая карта и т. д. Проверьте
/etc/modules.conf
) - Настройки Grub.
В целом, хорошей идеей является копирование оригинального каталога /etc
на ваш локальный диск.
Из хоста, работающего на Arch Linux
Установите пакет arch-install-scripts.
Примонтируйте файловую систему, которая в новой установке будет корневой, как описано в статье Руководство по установке#Монтирование разделов. Если каталог /mnt
уже занят, просто используйте какой-нибудь другой каталог, например /mnt/install
и используйте его в процессе установки.
На этом этапе Arch Linux можно либо установить с нуля, либо он может скопировать установку хоста. Эти два варианта описаны ниже.
Установка Arch Linux с нуля
Смотрите Руководство по установке#Установка.
Первый шаг (выбор зеркал) можно пропустить, так как зеркала на хосте скорее всего уже настроены.
- Чтобы избежать повторной загрузки всех пакетов, посмотрите Pacman/Советы и приёмы#Сетевой кэш pacman с совместным доступом или используйте pacstrap с параметром
-c
для использования кеша пакетов вашего хост-компьютера. - Если используется загрузчик grub, команда
grub-mkconfig
может определять устройства неправильно. Это приведёт к ошибкеError:no such device
при попытке загрузки с флешки. Чтобы решить проблему, с хоста, на котором запущен Arch Linux, смонтируйте вновь установленные разделы, выполните arch-chroot в новый раздел, затем установите и настройте grub. Для последнего шага может потребоваться отключить lvmetad в файле/etc/lvm/lvm.conf
путём установкиuse_lvmetad=0
.
Создание копии существующей установки Arch Linux
Можно реплицировать существующую установку Arch Linux, скопировав файловую систему хоста в новый раздел и внеся в неё некоторые изменения, чтобы сделать её загрузочной и уникальной.
Первый шаг — скопировать файлы хоста в смонтированный новый раздел, например с помощью rsync (Русский)#Полная резервная копия системы.
Затем нужно выполнить процедуры, описанные в Руководство по установке#Настройка системы, с некоторыми оговорками и дополнительными шагами:
- Настройку часовых поясов, локализации и паролей можно пропустить
- Initramfs может понадобиться обновить в случае изменения файловой системы, например с ext4 на Btrfs
- Загрузчик необходимо переустановить
- Удалите
/etc/machine-id
, чтобы при следующей загрузке сгенерировался новый
Если эта копия может использоваться в другой конфигурации или с другим оборудованием, рассмотрите следующие дополнительные операции:
- Настройте обновление микрокода под целевой процессор
- Если есть какие-то настройки Xorg и они могут оказаться несовместимы с новой системой, отключите их (смотрите Moving an existing install into (or out of) a virtual machine#Disable any Xorg-related files)
- Обновите другие необходимые настройки, например перенастройте сеть или звук.
Из хоста, работающего на другом дистрибутиве Linux
Существуют инструменты, которые автоматизируют большую часть шагов, описанных в следующих подразделах. Смотрите их домашние страницы для получения подробных инструкций.
- arch-bootstrap (Bash)
- digitalocean-debian-to-arch (repartition disk, DigitalOcean specific)
- image-bootstrap (Python)
- vps2arch (Bash)
- archbashstrap (Bash)
Ручной способ описан в следующих подразделах. Идея состоит в том, чтобы либо pacman работал непосредственно в хост-системе, либо запустить систему Arch внутри хост-системы, при этом фактическая установка выполняется из системы Arch. Вложенная система содержится внутри chroot.
Использование pacman из хост-системы
Pacman может быть скомпилирован в большинстве дистрибутивов Linux и использоваться непосредственно в хост-системе для начальной установки Arch Linux. arch-install-scripts должны запускаться без проблем непосредственно из загруженных исходником в любом современном дистрибутиве.
Некоторые дистрибутивы предоставляют пакеты для pacman и/или arch-install-scripts в своих официальных репозиториях, которые можно использовать для этой цели. По состоянию на июль 2020 года известно, что Void Linux предоставляет пакет pacman, а Alpine Linux и Fedora предоставляют pacman и arch-install-scripts.
Создаём chroot
Есть два способа настроить и войти в chroot, они представлены ниже. Выберите только один из двух методов. Затем перейдите к #Используем наше chroot окружение.
Способ 1: Использование Bootstrap образа (рекомендуется)
Скачиваем образ bootstrap с любого желаемого зеркала в /tmp
. Также можно скачать подпись (тот же URL с суффиксом .sig
) и проверить её подлинность с помощью GnuPG.
Распаковываем его:
# cd /tmp # tar xzf <путь-к-каталогу-где-образ>/archlinux-bootstrap-*-x86_64.tar.gz --numeric-owner
Обратите внимание на последнюю опцию --numeric-owner
, которая важна для сохранения правильных номеров UID и GID извлечённых файлов в случае, если ваша существующая система Linux использует номера, отличные от Arch Linux.
Выбираем подходящий для вашего интернета сервер, откуда будут загружаться основные репозитории, путём редактирования файла /tmp/root.x86_64/etc/pacman.d/mirrorlist
.
Войдём в chroot
- Если установлен bash 4 или новее и команда unshare поддерживает опции
--fork
и--pid
, то:
# /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 (при условии, что /run существует) # chroot /tmp/root.x86_64 /bin/bash
Способ 2: Используя образ LiveCD
Можно смонтировать корневой образ последнего установочного диска Arch Linux и затем заchroot'ить туда. Плюс этого способа в том, что у вас будет сразу рабочий Arch Linux installation прямо внутри хост-системы без надобности в его настройки.
FATAL ERROR aborting: uncompress_inode_table: failed to read block
.- Корневой образ можно скачать с одного из зеркал в папке
iso/latest/arch/x86_64/
. Образ имеет формат squashfs, который является read-only, поэтому нам надо распаковать его и смонтировать корневой образ.
- Чтобы распаковать корневой образ, надо
# unsquashfs airootfs.sfs
- Выберите сервер с репозиториями путём редактирования файла
squashfs-root/etc/pacman.d/mirrorlist
.
- Перед тем как chrooting to it, нужно смонтировать некоторые виртуальные системные разделы, а затем скопировать resolv.conf для интернета.
# 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 # важно для pacman (для проверки подписей) # cp -L /etc/resolv.conf squashfs-root/etc # а это, чтобы мог работать интернет в chroot
- Теперь всё готово, чтобы to chroot в только что установленное окружение Arch
# chroot squashfs-root bash
Используем наше chroot окружение
Среда начальной загрузки является почти пустой основой (без nano или lvm2). Поэтому нужно настроить pacman, чтобы загружать другие необходимые пакеты.
Начальная настройка хранилища ключей pacman
Перед установкой, ключи pacman должны быть настроены. Перед тем как вводить следующие две команды, можете почитать pacman/Подпись пакета#Инициализация связки ключей, чтобы узнать entropy requirements:
# pacman-key --init # pacman-key --populate archlinux
pacman-key --init
на компьютере, который не генерирует много энтропии (например, на headless-сервере), генерация ключа может занять очень много времени. Чтобы сгенерировать псевдоэнтропию, установите haveged или rng-tools на хост-системе и запустите соответствующую службу перед запуском pacman-key --init
. (Установка этих сервисов в целевой системе вместо хост-системы не сработает, поскольку systemd откажется запускать службы из chroot, и вам всё равно нужно инициализировать хранилище ключей pacman перед установкой любых пакетов.)
Если вы предпочитаете генерировать энтропию за счёт активности системы и решили запустить ls -Ra /
в другой консоли (TTY, терминал, сеанс SSH ...), не бойтесь запускать его в цикле несколько раз: пяти или шести запусков с хоста оказалось достаточно, чтобы сгенерировать достаточную энтропию на удалённом headless-сервере.
Скачивание базовых утилит
Обновите списки пакетов и установите что вам нужно: base-devel, parted и т. д.
error: could not determine cachedir mount point /var/cache/pacman/pkg
. Чтобы обойти её, выполните mount --bind каталог-livecd-или-bootstrap каталог-livecd-или-bootstrapперед переходом в chroot. Смотрите FS#46169.
Советы по установке
Дальнейшая установка выполняется как описано в руководстве: Руководство по установке#Монтирование разделов и далее.
Некоторые хост-системы или конфигурации могут потребовать дополнительных действий. Ниже описаны советы для них.
Хост Debian
/dev/shm
На хостах Debian pacstrap
выводит следующую ошибку:
# pacstrap /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
Это потому, что в Debian /dev/shm
ссылается на /run/shm
, который в Arch-based chroot не существует, поэтому ссылка не рабочая. Чтобы исправить это, просто создайте каталог /run/shm
:
# mkdir /run/shm
/dev/pts
При установке archlinux-2015.07.01-x86_64
с хоста Debian 7 следующая ошибка мешает работе pacstrap и arch-chroot:
# pacstrap -i /mnt
mount: mount point /mnt/dev/pts does not exist ==> ERROR: failed to setup chroot /mnt
Похоже, это из-за того, что эти два скрипта используют общую функцию. chroot_setup()
[1] полагается на новые возможности util-linux, которые несовместимы со средой средой Debian 7 (смотрите FS#45737).
Решение для pacstrap состоит в том, чтобы вручную выполнять его задачи, но использовать обычную процедуру для монтирования файловых систем ядра в целевой каталог ("$newroot"
):
# newroot=/mnt # mkdir -m 0755 -p "$newroot"/var/{cache/pacman/pkg,lib/pacman,log} "$newroot"/{dev,run,etc} # mkdir -m 1777 -p "$newroot"/tmp # mkdir -m 0555 -p "$newroot"/{sys,proc} # 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
Вместо использования arch-chroot просто выполните:
# chroot "$newroot"
lvmetad
Попытка создать логические тома LVM из archlinux-bootstrap-2015.07.01-x86_64
на хосте Debian 7 приводит к следующей ошибке:
# 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.
(Создание физического тома и группы томов работало, несмотря на ошибку /run/lvm/lvmetad.socket: connect failed: No such file or directory
.)
Это можно легко обойти, создав логические тома вне chroot (с хоста Debian). После этого они остаются доступными в chroot.
Кроме того, если в вашей системе есть lvm, вы можете получить следующий вывод:
# 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.
Это потому, что по умолчанию debian не использует lvmetad. Нужно изменить /etc/lvm/lvm.conf
и установить для use_lvmetad
значение 0
:
use_lvmetad = 0
Позже это вызовет ошибку при загрузке на этапе initrd. Следовательно, вы должны изменить его обратно после генерации grub. В программном RAID + LVM шаги будут следующими:
- После установки системы дважды перепроверьте ваш mkinitcpio и настройки загрузчика. Смотрите список загрузчиков на странице Процесс загрузки Arch#Загрузчик.
- Может понадобиться изменить
/etc/mdadm.conf
для RAID. - Может понадобиться изменить
HOOKS
иMODULES
в соответствии с требованиями ваших LVM и RAID:MODULES="dm_mod" HOOKS="base udev mdadm_udev ... block lvm2 filesystems ..."
- Скорее всего нужно сгенерировать новый образ initrd с помощью mkinitcpio. Смотрите mkinitcpio (Русский)#Создание загрузочного образа.
- Пропишите
use_lvmetad = 0
в/etc/lvm/lvm.conf
. - Обновите настройки загрузчика. Подробности смотрите на странице вашего загрузчика в этой вики.
- Пропишите
use_lvmetad = 1
в/etc/lvm/lvm.conf
.
Хост Fedora
На хостах Fedora и Live USB, если у вас не получается сгенерировать ваш fstab
с помощью genfstab
, то удалите из fstab одинаковые записи и везде опции seclabel
(это опция специфична для Fedora и поэтому не даст вам загрузиться).
Что нужно проверить перед перезагрузкой
Перед перезагрузкой дважды проверьте несколько деталей в своей установке, чтобы добиться успешной установки. Для этого сначала выполните chroot во вновь установленной системе, а затем:
- создайте пользователя с паролем, чтобы можно было войти по ssh. Это важно, так как вход в пользователя root отключен по умолчанию начиная с OpenSSH-7.1p2.
- установите пароль для root, чтобы вы могли переключиться в него с помощью su.
- установите какой-нибудь SSH-сервер и включите его автозагрузку.
- настройте сеть, чтобы подключение выполнялось автоматически при загрузке.
- установите загрузчик и настройте его на использование раздела подкачки, который вы присвоили ранее в качестве корневого раздела. Возможно, вы захотите настроить загрузчик так, чтобы он мог загружаться в вашу старую систему; для этой цели полезно повторно использовать существующий раздел
/boot
в новой системе.
Замена уже существующей системы без LiveCD
Если вы хотите заменить хост-систему на Arch Linux, но не можете использовать LiveCD, можно сделать временную установку Arch Linux на отдельный небольшой раздел (например swap) и использовать его для установки основной системы.
Освободите ~700МБ, например, переформатировав существующий swap-раздел (после окончания установки, можете обратно создать swap).
Использование старого раздела подкачки в качестве нового корневого раздела
Проверьте cfdisk
, /proc/swaps
или /etc/fstab
чтобы найти ваш раздел подкачки. Для примера предположим, что это раздел sdaX
(X
будет числом).
Выполните следующее:
Отключите подкачку:
# swapoff /dev/sdaX
Создайте файловую систему на месте отключенного раздела подкачки
# fdisk /dev/sda (поле ID для /dev/sdaX выставьте в "Linux" - Hex 83) # mke2fs -j /dev/sdaX
Создайте каталог, в который раздел будет примонтирован
# mkdir /mnt/newsys
Наконец, примонтируйте бывший раздел подкачки в новый каталог и установите в него промежуточную систему.
# mount -t ext4 /dev/sdaX /mnt/newsys
Установка
Установите основные пакеты и другие необходимые вам пакеты для получения системы в /mnt/newsys
с работающим интернетом. Если в этом разделе места не очень много, выбирайте пакеты для установки через pacstrap с умом и по возможности используйте опцию -c
чтобы избежать переполнения маленького раздела.
После установки обновите настройки загрузчика и перезагрузитесь в свежеустановленный Arch Linux и Rsync (Русский)#Полная резервная копия системы на основной раздел.