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

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

Ссылки по теме

- Install from SSH (Русский)

Этот документ описывает 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.

Примечание: Это руководство рассчитано на то, что имеющийся хост может запускать программы архитектуры нового 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`, чтобы при следующей загрузке сгенерировался новый

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

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

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

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

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

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

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

Category:

- Installation process (Русский)

Hidden category:

- Pages or sections flagged with Template:Accuracy