既存の Linux からインストール

提供: ArchWiki
2019年11月21日 (木) 18:51時点におけるKusakata.bot2 (トーク | 投稿記録)による版 (Pkg/AUR テンプレートの更新)
ナビゲーションに移動 検索に移動

関連記事

この文章では Linux ホストシステムから Arch Linux をインストールするのに必要なブートストラッププロセスを説明しています。ブートストラップした後は、インストールガイドの記述に従ってインストールを行なって下さい。

既存の Linux から Arch Linux をインストールすることが考えられるのは以下の場合になります:

ブートストラップの目的は arch-install-scripts のスクリプト (pacstraparch-chroot など) が走る環境をセットアップすることです。

ホストシステムで Arch Linux を動かしている場合は、arch-install-scripts をインストールするだけです。ホスト環境で他の Linux ディストリビューションを使っている場合、まず Arch Linux ベースの chroot をセットアップする必要があります。

ノート: このガイドでは新しいターゲット Arch Linux アーキテクチャのプログラムを実行することができる既存のホストシステムが必要です。ホストが x86_64 の場合、32ビット chroot 環境を作成するために i686-pacman を使うことができます。64ビット環境に32ビット環境をインストールを見て下さい。ただし、ホストが32ビットのプログラムしかサポートしていない場合、64ビット環境を作成するのは簡単ではありません。
警告: コマンドを実行する前にコマンドの意味を考えてください。システムを破壊して重要なデータを喪失した場合、データ復旧会社に頼むと多額の請求費が届くでしょう。

バックアップと準備

メールやウェブサーバーなど全てのデータをバックアップしてください。マシン設定の情報も控えておきましょう。サーバーの設定やホストネームなどです。

以下は必要なデータのリストです:

  • IP アドレス
  • ホストネーム (ノート: ルートサーバーも大抵の場合、プロバイダーのドメインに含まれます。/etc/hosts を確認・バックアップしてください)
  • DNS サーバー (/etc/resolv.conf を確認)
  • SSH 鍵 (サーバーを使っている人が他にいる場合、新しい鍵を認証する必要があります。Apache やメールサーバー、SSH サーバーなどの鍵が該当します)
  • ハードウェアの情報 (ネットワークカードなど。インストール済みの /etc/modules.conf を参照してください)
  • GRUB 設定ファイル

ローカルのハードドライブに /etc ディレクトリのコピーを作成すると良いでしょう。

Arch Linux が動作しているホストからインストール

arch-install-scripts パッケージをインストールしてください。

インストールガイド#パーティションのマウントに従ってください。/mnt ディレクトリを別の用途に使っている場合、/mnt/install などのように他のディレクトリを作成してください。

その後インストールガイド#インストールに従ってください。ホストにミラーリストが存在するため、インストールガイド#ミラーの選択は省略できます。

ヒント: 全てのパッケージをもう一度ダウンロードするかわりに、pacman のキャッシュをネットワークで共有するpacstrap-c オプションを使う方法もあります。
ヒント: GRUB ブートローダーが使われているとき、grub-mkconfig がデバイスを誤検知することがあり、スティックから起動しようとしても Error:no such device エラーになります。解決策としては、Arch Linux が動作しているホストから新しくインストールしたパーティションをマウントして arch-chroot し、その上でGRUB をインストールして設定する方法です。GRUB をインストールするときに /etc/lvm/lvm.confuse_lvmetad=0 として lvmetad を無効にしなければならないかもしれません。
ノート: 既存の Arch 環境の複製を作成したい場合、新しいパーティションにファイルシステムをコピーするだけで作成できます。その場合、以下の設定が必要です:
  • /etc/fstab を作成して /etc/hostname を編集
  • /etc/machine-id を削除。起動時に新しいファイルが作成されます。
  • その他インストールメディアに適宜変更を加える
  • ブートローダーのインストール
ルートファイルシステムをコピーするときは、cp -ax あるいは rsync -axX コマンドを使います。マウントポイントの中身はコピーされず (-x)、システムバイナリのケイパビリティ属性は維持されます (rsync -X)。

他の Linux ディストリビューションが動作しているホストからインストール

以下のサブセクションに書かれている手順を自動化するツールが複数存在します。詳しくはそれぞれのホームページを見てください。

以下では手動でインストールする方法を記述しています。ホスト環境で直接 pacman を動作させる方法と、ホスト環境の中で Arch を動作させ、ネストされた環境は chroot の中に格納する方法を紹介します。

ホストシステムから pacman を使用する

Pacman のソースコード は大抵の Linux ディストリビューションでコンパイルでき、ホストシステムから直接 Arch Linux をブートストラップするのに活用できます。arch-install-scripts は最近のディストリビューションでダウンロードしたソースコードから問題なく動作するはずです。

ディストリビューションによっては、公式リポジトリに pacmanarch-install-scripts があり、ブートストラップに利用できます。2019年2月時点で、Gentoo Linux には pacman パッケージが提供されており、Alpine Linux および Fedora には pacmanarch-install-scripts がともにに提供されていると知られています。

chroot の作成

chroot をセットアップする方法は2つ存在します。簡単な方法と複雑な方法の2つです。どちらか片方を選択してください。その後、#chroot 環境を使うに進んでください。

方法 A: ブートストラップイメージを使う (推奨)

ミラー からブートストラップイメージを /tmp にダウンロードしてください。

署名をダウンロードして (URL に .sig が付きます)、GnuPG で検証することもできます。

tarball を解凍:

# tar xzf <path-to-bootstrap-image>/archlinux-bootstrap-*-x86_64.tar.gz

/tmp/root.x86_64/etc/pacman.d/mirrorlist を編集してリポジトリサーバーを選択してください。

ノート: x86_64 のホスト環境から i686 イメージをブートストラップした場合、i686 のパッケージが pacman によって取得されるように /tmp/root.i686/etc/pacman.conf を編集して Architecture = i686 と記述してください。

chroot 環境に入ってください:

  • bash 4 以上がインストールされていて、unshare が --fork と --pid オプションに対応している場合:
# /tmp/root.x86_64/bin/arch-chroot /tmp/root.x86_64/
  • bash 4 未満の場合、以下のコマンドを実行:
# 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

方法 B: LiveCD イメージを使う

最新の Arch Linux インストールメディアのルートイメージをマウントして chroot することができます。この方法では特定のパッケージをインストールして準備をしなくても Arch Linux のインストール環境を動作させることができるというメリットがあります。

ノート: 先に進む前に、ホスト環境に最新版の squashfs がインストールされていることを確認してください。バージョンが古いと、次のようなエラーが発生します: FATAL ERROR aborting: uncompress_inode_table: failed to read block
  • ルートイメージは ミラー の arch/x86_64/ と arch/i686/ に存在します (使用したいアーキテクチャにあわせて選んでください)。squashfs フォーマットは編集ができないため、ルートイメージを unsquash してからマウントします。
  • ルートイメージを unsquash するには、次を実行:
# unsquashfs airootfs.sfs
  • chroot する前に、マウントポイントを設定して 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  ## important for pacman (for signature check)
# cp -L /etc/resolv.conf squashfs-root/etc  ## this is needed to use networking within the chroot
  • それから、新しくインストールする Arch 環境に chroot してください:
# chroot squashfs-root bash

chroot 環境を使う

ブートストラップ環境は完全なベアボーンです (nanopingcryptsetuplvm も存在しません)。したがって、pacman をセットアップして base を (必要であれば base-devel も) ダウンロードする必要があります。

pacman キーリングの初期化

インストールを開始する前に、pacman の鍵をセットアップしてください。pacman-key#キーリングの初期化を読んでから (エントロピーが必要です)、以下のコマンドを実行:

# pacman-key --init
# pacman-key --populate archlinux
ヒント: haveged のインストール・実行はホスト環境で行う必要があります。pacman のキーリングを初期化しないとパッケージをインストールすることはできないためです。systemd は chroot で動作していることを認識すると サービスの起動リクエスト を無視します。他のコンソール (TTY, ターミナル, SSH セッションなど) で ls -Ra / を実行する場合、リモートのヘッドレスサーバーに十分なエントロピーを供給するのに必要な実行回数は5回あるいは6回です。

ミラーを選択して基本ツールをダウンロード

ミラーを選択したら、パッケージリストを更新して必要なパッケージをインストールしてください: base, base-devel, parted など。

ノート:
  • テキストエディタが何も導入されていない場合は、一旦 arch-chroot を抜け、ホスト環境のテキストエディタで mirrorlist を編集する必要があります。
  • pacman でパッケージのインストールを試みて、error: could not determine cachedir mount point /var/cache/pacman/pkg というエラーが生じた際、回避策として、chroot の前にmount --bind <directory-to-livecd-or-bootstrap> <directory-to-livecd-or-bootstrap> を実行する方法があります。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 の chroot では /run/shm が存在せずリンクが壊れてしまうのが原因です。エラーを回避するには、/run/shm ディレクトリを作成してください:

# mkdir /run/shm
/dev/pts

Debian 7 ホストから archlinux-2015.07.01-x86_64 をインストールしたとき、pacstraparch-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 を参照)。

様々な作業 を手動で実行して対象ディレクトリ ("$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

インストールガイド#Chroot では arch-chroot のかわりに、chroot "$newroot" を使います。

lvmetad

Debian 7 のホストの archlinux-bootstrap-2015.07.01-x86_64 から LVM論理ボリュームを作成しようとすると以下のエラーが発生します:

# 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 というエラーが表示されますが問題ありません。

(Debian から) chroot の外側に論理ボリュームを作成することでエラーを回避できます。その後、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_lvmetad0 に設定してください:

use_lvmetad = 0

上記の設定を行うと起動の initrd ステージでエラーが発生します。GRUB の生成を行ってから変更してください。ソフトウェア RAID + LVM の場合、以下の手順で設定します:

  • システムを全てインストールした後、initramfs (mkinitcpio) や ブートローダーの設定をよく確認してください。
  • /etc/mdadm.conf を RAID の構成にあわせて変更してください。
  • LVM と RAID の要件を満たすように HOOKS と MODULES を変更してください: MODULES="dm_mod" HOOKS="base udev mdadm_udev ... block lvm2 filesystems ..."
  • mkinitcpio で initrd イメージを生成してください。mkinitcpio#イメージ作成とアクティベーション を参照。
  • /etc/lvm/lvm.conf を編集して use_lvmetad=0 と記述します。
  • ブートローダーの設定を更新します。
  • /etc/lvm/lvm.conf を編集して use_lvmetad=1 と記述します。

Fedora ベースのホスト

Fedora ベースのホストやライブ USB では genfstab を使って fstab を生成しようとしたときに問題が発生することがあります。重複するエントリを削除して "seclabel" オプションを削除してください。後者は Fedora だけで使われるオプションで、システムが起動できなくなります。

再起動する前に確認すること

再起動する前に、新しくインストールした環境に chroot してください。

SSH を使いログインできるように、ユーザーとパスワードを作成してください。root でのログインは OpenSSH-7.1p2 からデフォルトで無効です。

再起動後 su を使えるように root パスワードを設定:

# passwd

SSH をインストールして起動時に自動的に実行されるように有効化してください。

起動時に自動的に接続されるようにネットワークを設定してください。

ブートローダーをセットアップしてルートパーティションと同じように適切なスワップパーティションを使用するように設定します。古い環境を起動できるようにブートローダーを設定することもできます。その場合、サーバーの既存の /boot パーティションを再利用するのも有用です。

LiveCD を使わずに既存の環境を置き換える

ディスク上に 700MB 程度の空き容量を見繕ってください。スワップパーティションを無効化してシステムをセットアップします。

昔のスワップパーティションを新しいルートパーティションに設定

cfdisk, /proc/swaps, /etc/fstab をチェックしてスワップパーティションを確認してください。ハードドライブが sdaX として、以下を実行:

スワップ領域を無効化:

# swapoff /dev/sdaX

ファイルシステムを作成 (/dev/sdaX の ID フィールドは "Linux" (83) に設定):

# fdisk /dev/sda
# mke2fs -j /dev/sdaX

マウントするためにディレクトリを作成:

# mkdir /mnt/newsys

一時的に新しいディレクトリをマウント:

# mount -t ext4 /dev/sdaX /mnt/newsys

インストール

空き容量が 700MB 以下の場合、base グループのパッケージを確認して、インターネット接続を立ち上げて一時的なパーティションで実行するのに必要なパッケージだけを選択してください。個別のパッケージを pacstrap に指定して、-c オプションを使います。

新しい Arch Linux システムをインストールして、新しく作成したシステムで再起動し、プライマリパーティションにシステム全体を rsync してください。再起動する前にブートローダーの設定を修正してください。