Install Arch Linux from existing Linux (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Install Arch Linux from existing Linux. Дата последней синхронизации: 6 декабря 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Этот документ описывает bootstrapping process, нужный для того, чтобы установить Arch Linux из уже работающего хоста Linux. После bootstrapping, установка продолжается так, как описано в руководстве по установке Arch Linux.

Установка Arch Linux из-под другого Linux полезна для:

Цель процедуры начальной загрузки в том, чтобы настроить окружение, из которого можно будет запустить arch-install-scripts (содержит такие скрипты как pacstrap и arch-chroot).

Если хост работает под Arch Linux, этого можно достичь простой установкой пакета arch-install-scripts. На других дистрибутивах Linux потребуется подготовить chroot-окружение на базе Arch Linux.

Примечание: Это руководство рассчитано на то, что имеющийся хост может запускать программы архитектуры нового Arch Linux. Это означает, что хост должен иметь архитектуру x86_64.
Важно: Прежде чем продолжить, убедитесь, что вы понимаете каждый шаг. Неосторожные действия могут легко разрушить систему или привести к потере ваших данных.

Резервное копирование и подготовка

Сделайте резервную копию всех ваших данных, включая почту, веб-серверы и т. д. Держите всю нужную информацию всегда под рукой. Сохраните все конфигурации вашего сервера, имена хостов и т. д.

Список информации, которая вам скорее всего понадобится:

  • 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, чтобы при следующей загрузке сгенерировался новый

Если эта копия может использоваться в другой конфигурации или с другим оборудованием, рассмотрите следующие дополнительные операции:

Из хоста, работающего на другом дистрибутиве Linux

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

Ручной способ описан в следующих подразделах. Идея состоит в том, чтобы либо 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 прямо внутри хост-системы без надобности в его настройки.

Примечание: Перед тем как продолжить, удостоверьтесь, что у вас последняя версия squashfs на хост-системе. Иначе будут ошибки типа: 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.

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

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 (Русский))

Кроме того, если в вашей системе есть 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

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

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 (Русский))

Позже это вызовет ошибку при загрузке на этапе 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 (Русский)#скопируйте его с помощью rsync на основной раздел.