既存の Linux からインストール
関連記事
この文章では Linux ホストシステムから Arch Linux をインストールするのに必要なブートストラッププロセスを説明しています。ブートストラップした後は、インストールガイドの記述に従ってインストールを行なって下さい。
既存の Linux から Arch Linux をインストールすることが考えられるのは以下の場合になります:
- Arch Linux のリモートインストール、例えば (仮想) ルートサーバー
- 既存の Linux を LiveCD を使わずに置き換える (#LiveCD を使わずに既存のシステムを置き換える を参照)
- Arch Linux ベースの新しい Linux ディストリビューションや LiveCD の作成
- Arch Linux の chroot 環境の作成、例えば Docker のベースコンテナ
- ディスクレスマシンの rootfs-over-NFS
ブートストラップの目的は arch-install-scripts のスクリプト (pacstrap
や arch-chroot
など) が走る環境をセットアップすることです。
ホストシステムで Arch Linux を動かしている場合は、arch-install-scripts をインストールするだけです。ホスト環境で他の Linux ディストリビューションを使っている場合、まず Arch Linux ベースの chroot をセットアップする必要があります。
目次
バックアップと準備
メールやウェブサーバーなど全てのデータをバックアップしてください。マシン設定の情報も控えておきましょう。サーバーの設定やホストネームなどです。
以下は必要なデータのリストです:
- IP アドレス
- ホストネーム (ノート: ルートサーバーも大抵の場合、プロバイダーのドメインに含まれます。
/etc/hosts
を確認・バックアップしてください) - DNS サーバー (
/etc/resolv.conf
を確認) - SSH 鍵 (サーバーを使っている人が他にいる場合、新しい鍵を認証する必要があります。Apache やメールサーバー、SSH サーバーなどの鍵が該当します)
- ハードウェアの情報 (ネットワークカードなど。インストール済みの
/etc/modules.conf
を参照してください) - GRUB 設定ファイル
ローカルのハードドライブに /etc
ディレクトリのコピーを作成すると良いでしょう。
Arch Linux が動作しているホストからインストール
arch-install-scripts パッケージをインストールしてください。
インストールガイド#パーティションのマウントに従ってください。/mnt
ディレクトリを別の用途に使っている場合、/mnt/install
などのように他のディレクトリを作成してください。
その後インストールガイド#インストールに従ってください。ホストにミラーリストが存在するため、インストールガイド#ミラーの選択は省略できます。
他の Linux ディストリビューションが動作しているホストからインストール
以下のサブセクションに書かれている手順を自動化するツールが複数存在します。詳しくはそれぞれのホームページを見てください。
- arch-bootstrap (Bash)
- image-bootstrap (Python)
- vps2arch (Bash)
- archcx (Bash, Hetzner CX Rescue System 由来)
以下では手動でインストールする方法を記述しています。ホスト環境の中で Arch を動作させ、ネストされた環境は chroot の中に格納します。
chroot の作成
chroot をセットアップする方法は2つ存在します。簡単な方法と複雑な方法の2つです。どちらか片方を選択してください。その後、#chroot 環境を使うに進んでください。
方法 A: ブートストラップイメージを使う (推奨)
ミラー からブートストラップイメージをダウンロード:
# cd /tmp # curl -O https://mirrors.kernel.org/archlinux/iso/2016.09.03/archlinux-bootstrap-2016.09.03-x86_64.tar.gz
署名をダウンロードして (URL に .sig
が付きます)、GnuPG で検証することもできます。
tarball を解凍:
# tar xzf <path-to-bootstrap-image>/archlinux-bootstrap-2016.09.03-x86_64.tar.gz
/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/
- 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 --rbind /sys sys # mount --rbind /dev dev # mount --rbind /run run # (assuming /run exists on the system) # chroot /tmp/root.x86_64 /bin/bash
方法 B: LiveCD イメージを使う
最新の Arch Linux インストールメディアのルートイメージをマウントして chroot することができます。この方法では特定のパッケージをインストールして準備をしなくても Arch Linux のインストール環境を動作させることができるというメリットがあります。
- ルートイメージは ミラー の 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 環境を使う
ブートストラップ環境は完全なベアボーンです (nano
も ping
も cryptsetup
も lvm
も存在しません)。したがって、pacman をセットアップして base
を (必要であれば base-devel
も) ダウンロードする必要があります。
pacman キーリングの初期化
インストールを開始する前に、pacman の鍵をセットアップしてください。pacman-key#キーリングの初期化を読んでから (エントロピーが必要です)、以下のコマンドを実行:
# pacman-key --init # pacman-key --populate archlinux
ミラーを選択して基本ツールをダウンロード
ミラーを選択したら、パッケージリストを更新して必要なパッケージをインストールしてください: base, base-devel, parted など。
インストールのヒント
インストールガイド#パーティションに進んでインストールガイドの残りのセクションに従ってください。
ホスト環境によっては特定の設定が必要になることがあります。以下のセクションを見てください。
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
をインストールしたとき、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 を参照)。
様々な作業 を手動で実行して対象ディレクトリ ("$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.
(Debian から) chroot の外側に論理ボリュームを作成することでエラーを回避できます。その後、chroot して利用してください。
また、システムから LVM を使用している場合に、以下の出力がされることがあります:
# grub-install --target=i386-pc --recheck /dev/mapper/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 の場合、以下の手順で設定します:
- システムを全てインストールした後、initramfs (mkinitcpio) や grub の設定を行います。
/etc/mdadm.conf
を RAID の構成にあわせて変更してください。- LVM と RAID の要件を満たすように HOOKS と MODULES を変更してください:
MODULES="dm_mod" HOOKS="base udev mdadm_udev ... block lvm2 filesystems ..."
。 - mkinitcpio で initrd イメージを生成してください。
/etc/lvm/lvm.conf
を編集してuse_lvmetad=0
と記述します。- GRUB の設定を生成してください (grub-mkconfig)。
/etc/lvm/lvm.conf
を編集してuse_lvmetad=1
と記述します。
Fedora ベースのホスト
Fedora ベースのホストやライブ USB では genfstab
を使って fstab を生成しようとしたときに問題が発生することがあります。重複するエントリを削除して "seclabel" オプションを削除してください。後者は Fedora だけで使われるオプションで、システムが起動できなくなります。
再起動する前に確認すること
再起動する前に、新しくインストールした環境に chroot してください。
後で SSH を使って起動できるように 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 してください。再起動する前にブートローダーの設定を修正してください。