「既存の Linux からインストール」の版間の差分
(→ミラーを選択して基本ツールをダウンロード: セクション名を英語版と同じに) |
|||
(4人の利用者による、間の6版が非表示) | |||
6行目: | 6行目: | ||
[[pt:Install from existing Linux]] |
[[pt:Install from existing Linux]] |
||
[[ru:Install from existing Linux]] |
[[ru:Install from existing Linux]] |
||
− | [[ |
+ | [[zh-hans:Install from existing Linux]] |
− | [[zh- |
+ | [[zh-hant:Install from existing Linux]] |
− | [[zh-tw:Install from existing Linux]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|SSH からインストール}} |
{{Related|SSH からインストール}} |
||
17行目: | 16行目: | ||
* Arch Linux のリモートインストール、例えば (仮想) ルートサーバー |
* Arch Linux のリモートインストール、例えば (仮想) ルートサーバー |
||
* 既存の Linux を LiveCD を使わずに置き換える ([[#LiveCD を使わずに既存のシステムを置き換える]] を参照) |
* 既存の Linux を LiveCD を使わずに置き換える ([[#LiveCD を使わずに既存のシステムを置き換える]] を参照) |
||
− | * Arch Linux ベースの新しい Linux ディストリビューションや |
+ | * Arch Linux ベースの新しい Linux ディストリビューションや [[Arch ベースのディストリビューション|Arch Linux ベースのLiveMedia]] の作成 |
* Arch Linux の chroot 環境の作成、例えば Docker のベースコンテナ |
* Arch Linux の chroot 環境の作成、例えば Docker のベースコンテナ |
||
* [[ディスクレスシステム|ディスクレスマシンの rootfs-over-NFS]] |
* [[ディスクレスシステム|ディスクレスマシンの rootfs-over-NFS]] |
||
51行目: | 50行目: | ||
{{Tip|全てのパッケージをもう一度ダウンロードするかわりに、[[Pacman ヒント#pacman のキャッシュをネットワークで共有する|pacman のキャッシュをネットワークで共有する]]か ''pacstrap'' の {{ic|-c}} オプションを使う方法もあります。}} |
{{Tip|全てのパッケージをもう一度ダウンロードするかわりに、[[Pacman ヒント#pacman のキャッシュをネットワークで共有する|pacman のキャッシュをネットワークで共有する]]か ''pacstrap'' の {{ic|-c}} オプションを使う方法もあります。}} |
||
+ | |||
+ | {{Tip|GRUB ブートローダーが使われているとき、{{ic|grub-mkconfig}} がデバイスを誤検知することがあり、スティックから起動しようとしても {{ic|Error:no such device}} エラーになります。解決策としては、Arch Linux が動作しているホストから新しくインストールしたパーティションをマウントして {{ic|arch-chroot}} し、その上でGRUB をインストールして設定する方法です。GRUB をインストールするときに {{ic|/etc/lvm/lvm.conf}} で {{ic|1=use_lvmetad=0}} として {{ic|lvmetad}} を無効にしなければならないかもしれません。}} |
||
{{Note|既存の Arch 環境の複製を作成したい場合、新しいパーティションにファイルシステムをコピーするだけで作成できます。その場合、以下の設定が必要です: |
{{Note|既存の Arch 環境の複製を作成したい場合、新しいパーティションにファイルシステムをコピーするだけで作成できます。その場合、以下の設定が必要です: |
||
67行目: | 68行目: | ||
* [https://github.com/tokland/arch-bootstrap arch-bootstrap] (Bash) |
* [https://github.com/tokland/arch-bootstrap arch-bootstrap] (Bash) |
||
* [https://github.com/hartwork/image-bootstrap image-bootstrap] (Python) |
* [https://github.com/hartwork/image-bootstrap image-bootstrap] (Python) |
||
− | * [https:// |
+ | * [https://gitlab.com/drizzt/vps2arch vps2arch] (Bash) |
+ | |||
− | * [https://github.com/m4rienf/ArchCX archcx] (Bash, Hetzner CX Rescue System 由来) |
||
+ | 以下では手動でインストールする方法を記述しています。ホスト環境で直接 [[pacman]] を動作させる方法と、ホスト環境の中で Arch を動作させ、ネストされた環境は chroot の中に格納する方法を紹介します。 |
||
+ | |||
+ | === ホストシステムから pacman を使用する === |
||
+ | [https://git.archlinux.org/pacman.git/ Pacman のソースコード] は大抵の Linux ディストリビューションでコンパイルでき、ホストシステムから直接 Arch Linux をブートストラップするのに活用できます。[https://git.archlinux.org/arch-install-scripts.git/about/ arch-install-scripts] は最近のディストリビューションでダウンロードしたソースコードから問題なく動作するはずです。 |
||
+ | ディストリビューションによっては、公式リポジトリに ''pacman'' や ''arch-install-scripts'' があり、ブートストラップに利用できます。2019年2月時点で、Gentoo Linux には ''pacman'' パッケージが提供されており、Alpine Linux および Fedora には ''pacman'' と ''arch-install-scripts'' がともにに提供されていると知られています。 |
||
− | 以下では手動でインストールする方法を記述しています。ホスト環境の中で Arch を動作させ、ネストされた環境は chroot の中に格納します。 |
||
=== chroot の作成 === |
=== chroot の作成 === |
||
78行目: | 83行目: | ||
==== 方法 A: ブートストラップイメージを使う (推奨) ==== |
==== 方法 A: ブートストラップイメージを使う (推奨) ==== |
||
− | [https://www. |
+ | [https://www.archlinux.jp/download/ ミラー] からブートストラップイメージを {{ic|/tmp}} にダウンロードしてください。 |
− | # cd /tmp |
||
− | # curl -O https://mirrors.kernel.org/archlinux/iso/2016.09.03/archlinux-bootstrap-2016.09.03-x86_64.tar.gz |
||
署名をダウンロードして (URL に {{ic|.sig}} が付きます)、[[GnuPG#署名の検証|GnuPG で検証]]することもできます。 |
署名をダウンロードして (URL に {{ic|.sig}} が付きます)、[[GnuPG#署名の検証|GnuPG で検証]]することもできます。 |
||
tarball を解凍: |
tarball を解凍: |
||
− | # tar xzf <path-to-bootstrap-image>/archlinux-bootstrap- |
+ | # tar xzf <path-to-bootstrap-image>/archlinux-bootstrap-*-x86_64.tar.gz |
{{ic|/tmp/root.x86_64/etc/pacman.d/mirrorlist}} を編集してリポジトリサーバーを選択してください。 |
{{ic|/tmp/root.x86_64/etc/pacman.d/mirrorlist}} を編集してリポジトリサーバーを選択してください。 |
||
100行目: | 103行目: | ||
# cp /etc/resolv.conf etc |
# cp /etc/resolv.conf etc |
||
# mount -t proc /proc proc |
# mount -t proc /proc proc |
||
− | # mount --rbind /sys sys |
+ | # mount --make-rslave --rbind /sys sys |
− | # mount --rbind /dev dev |
+ | # mount --make-rslave --rbind /dev dev |
− | # mount --rbind /run run # (assuming /run exists on the system) |
+ | # mount --make-rslave --rbind /run run # (assuming /run exists on the system) |
# chroot /tmp/root.x86_64 /bin/bash |
# chroot /tmp/root.x86_64 /bin/bash |
||
==== 方法 B: LiveCD イメージを使う ==== |
==== 方法 B: LiveCD イメージを使う ==== |
||
+ | 最新の Arch Linux インストールメディアのルートイメージをマウントして chroot することができます。この方法では特定のパッケージをインストールして準備をしなくても Arch Linux のインストール環境を動作させることができるというメリットがあります。 |
||
− | It is possible to mount the root image of the latest Arch Linux installation media and then chroot into it. This method has the advantage of providing a working Arch Linux installation right within the host system without the need to prepare it by installing specific packages. |
||
− | {{Note| |
+ | {{Note|先に進む前に、ホスト環境に最新版の [http://squashfs.sourceforge.net/ squashfs] がインストールされていることを確認してください。バージョンが古いと、次のようなエラーが発生します: {{ic|FATAL ERROR aborting: uncompress_inode_table: failed to read block}}。}} |
− | * |
+ | * ルートイメージは [https://www.archlinux.jp/download/ ミラー] の arch/x86_64/ と arch/i686/ に存在します (使用したいアーキテクチャにあわせて選んでください)。squashfs フォーマットは編集ができないため、ルートイメージを unsquash してからマウントします。 |
+ | *ルートイメージを unsquash するには、次を実行: |
||
− | *To unsquash the root image, run |
||
{{bc|# unsquashfs airootfs.sfs}} |
{{bc|# unsquashfs airootfs.sfs}} |
||
+ | * [[Change Root|chroot]] する前に、マウントポイントを設定して {{ic|resolv.conf}} をコピーする必要があります: |
||
− | * Before [[Change root|chrooting]] to it, we need to set up some mount points and copy the resolv.conf for networking. |
||
{{bc| |
{{bc| |
||
# mount --bind squashfs-root squashfs-root |
# mount --bind squashfs-root squashfs-root |
||
126行目: | 129行目: | ||
}} |
}} |
||
+ | * それから、新しくインストールする Arch 環境に chroot してください: |
||
− | * Now, everything is prepared to chroot into the newly installed Arch environment |
||
{{bc|# chroot squashfs-root bash}} |
{{bc|# chroot squashfs-root bash}} |
||
− | === |
+ | === chroot 環境を使う === |
− | + | ブートストラップ環境は完全なベアボーンです ({{ic|nano}} も {{ic|ping}} も {{ic|cryptsetup}} も {{ic|lvm}} も存在しません)。したがって、[[pacman]] をセットアップして {{ic|base}} を (必要であれば {{ic|base-devel}} も) ダウンロードする必要があります。 |
|
− | ==== |
+ | ==== pacman キーリングの初期化 ==== |
+ | インストールを開始する前に、pacman の鍵をセットアップしてください。[[pacman-key#キーリングの初期化]]を読んでから (エントロピーが必要です)、以下のコマンドを実行: |
||
− | Before starting the installation, pacman keys need to be setup. Before running the following two commands, read [[pacman-key#Initializing the keyring]] to understand the entropy requirements: |
||
{{bc| |
{{bc| |
||
# pacman-key --init |
# pacman-key --init |
||
141行目: | 144行目: | ||
}} |
}} |
||
+ | {{Tip|{{Pkg|haveged}} のインストール・実行はホスト環境で行う必要があります。pacman のキーリングを初期化しないとパッケージをインストールすることはできないためです。''systemd'' は chroot で動作していることを認識すると [https://superuser.com/questions/688733/start-a-systemd-service-inside-chroot サービスの起動リクエスト] を無視します。他のコンソール (TTY, ターミナル, SSH セッションなど) で {{ic|ls -Ra /}} を実行する場合、リモートのヘッドレスサーバーに十分なエントロピーを供給するのに必要な実行回数は5回あるいは6回です。}} |
||
− | {{Tip|Installing and running {{Pkg|haveged}} must be done on the host system, since it is not possible to install packages before initializing pacman keyring and because ''systemd'' will detect it is running in a chroot and [https://superuser.com/questions/688733/start-a-systemd-service-inside-chroot ignore activation request]. |
||
+ | ==== 基本ツールをダウンロード ==== |
||
− | If you go with doing {{ic|ls -Ra /}} in another console (TTY, terminal, SSH session...), do not be afraid of running it in a loop a few times: five or six runs from the host proved sufficient to generate enough entropy on a remote headless server.}} |
||
+ | [[ミラー#特定のミラーを有効にする|ミラーを選択]]したら、[[ミラー#pacman にパッケージリストを更新させる|パッケージリストを更新]]して必要なパッケージを[[インストール]]してください: {{Pkg|base}}, {{Grp|base-devel}}, {{Pkg|parted}} など。 |
||
− | ==== Selecting a mirror and downloading basic tools ==== |
||
+ | {{Note| |
||
− | After [[Mirrors#Enabling_a_specific_mirror|selecting a mirror]], [[Mirrors#Force_pacman_to_refresh_the_package_lists|refresh the package lists]] and [[install]] what you need: {{Grp|base}}, {{Grp|base-devel}}, {{Pkg|parted}} etc. |
||
+ | * テキストエディタが何も導入されていない場合は、一旦 {{ic|arch-chroot}} を抜け、ホスト環境のテキストエディタで {{ic|mirrorlist}} を編集する必要があります。 |
||
+ | * pacman でパッケージのインストールを試みて、{{ic|''error: could not determine cachedir mount point /var/cache/pacman/pkg''}} というエラーが生じた際、回避策として、chroot の前に{{ic|mount --bind <directory-to-livecd-or-bootstrap> <directory-to-livecd-or-bootstrap>}} を実行する方法があります。{{Bug|46169}} を参照してください。 |
||
+ | }} |
||
− | === |
+ | === インストールのヒント === |
+ | [[インストールガイド#パーティション]]に進んで[[インストールガイド]]の残りのセクションに従ってください。 |
||
− | You can now proceed to [[Installation_guide#Partition_the_disks]] and follow the rest of the [[Installation guide]]. |
||
+ | ホスト環境によっては特定の設定が必要になることがあります。以下のセクションを見てください。 |
||
− | Some host systems or configurations may require certain extra steps. See the sections below for tips. |
||
==== Debian ベースのホスト ==== |
==== Debian ベースのホスト ==== |
||
159行目: | 165行目: | ||
===== /dev/shm ===== |
===== /dev/shm ===== |
||
+ | Debian ベースのホスト環境では、{{ic|pacstrap}} が以下のエラーを表示することがあります: |
||
− | On some Debian-based host systems, {{ic|pacstrap}} may produce the following error: |
||
{{hc|# pacstrap /mnt base| |
{{hc|# pacstrap /mnt base| |
||
167行目: | 173行目: | ||
}} |
}} |
||
− | + | Debian では、{{ic|/dev/shm}} が {{ic|/run/shm}} になっているのに対して、Arch の chroot では {{ic|/run/shm}} が存在せずリンクが壊れてしまうのが原因です。エラーを回避するには、{{ic|/run/shm}} ディレクトリを作成してください: |
|
# mkdir /run/shm |
# mkdir /run/shm |
||
===== /dev/pts ===== |
===== /dev/pts ===== |
||
− | + | Debian 7 ホストから {{ic|archlinux-2015.07.01-x86_64}} をインストールしたとき、[https://projects.archlinux.org/arch-install-scripts.git/tree/pacstrap.in pacstrap] と [[Change_Root#arch-chroot を使う|arch-chroot]] が以下のエラーで動作しません: |
|
{{hc|# pacstrap -i /mnt| |
{{hc|# pacstrap -i /mnt| |
||
179行目: | 185行目: | ||
}} |
}} |
||
− | + | スクリプトが一般的な関数を使っているのが原因です。{{ic|chroot_setup()}}[https://projects.archlinux.org/arch-install-scripts.git/tree/common#n76] は {{Pkg|util-linux}} の新しい機能に依存していますが、Debian 7 のユーザーランドでは使用することができません ({{Bug|45737}} を参照)。 |
|
− | + | [https://projects.archlinux.org/arch-install-scripts.git/tree/pacstrap.in#n77 様々な作業] を手動で実行して対象ディレクトリ ({{ic|"$newroot"}}) にカーネルファイルシステムを[[Change_Root#chroot を使う|通常の方法]]でマウントしてください: |
|
{{bc|1= |
{{bc|1= |
||
198行目: | 204行目: | ||
}} |
}} |
||
− | + | [[インストールガイド#Chroot]] では {{ic|arch-chroot}} のかわりに、{{ic|chroot "$newroot"}} を使います。 |
|
===== lvmetad ===== |
===== lvmetad ===== |
||
+ | Debian 7 のホストの {{ic|archlinux-bootstrap-2015.07.01-x86_64}} から [[LVM]] の[[LVM#論理ボリュームの作成|論理ボリューム]]を作成しようとすると以下のエラーが発生します: |
||
− | Trying to create [[LVM]] [[LVM#Logical_volumes|logical volumes]] from an {{ic|archlinux-bootstrap-2015.07.01-x86_64}} environment on a Debian 7 host resulted in the following error: |
||
{{hc|# lvcreate -L 20G lvm -n root| |
{{hc|# lvcreate -L 20G lvm -n root| |
||
210行目: | 216行目: | ||
Aborting. Failed to wipe start of new LV.}} |
Aborting. Failed to wipe start of new LV.}} |
||
− | + | {{Tip|物理ボリュームやボリュームグループの作成については {{ic|/run/lvm/lvmetad.socket: connect failed: No such file or directory}} というエラーが表示されますが問題ありません。}} |
|
+ | (Debian から) chroot の外側に論理ボリュームを作成することでエラーを回避できます。その後、chroot して利用してください。 |
||
− | This could be easily worked around by creating the logical volumes outside the chroot (from the Debian host). They are then available once chrooted again. |
||
+ | また、システムから LVM を使用している場合に、以下の出力がされることがあります: |
||
− | Also, if the system you are using has lvm, you might have the following output: |
||
− | {{hc|1=# grub-install --target=i386-pc --recheck /dev |
+ | {{hc|1=# grub-install --target=i386-pc --recheck /dev/main/archroot|2= |
Installing for i386-pc platform. |
Installing for i386-pc platform. |
||
/run/lvm/lvmetad.socket: connect failed: No such file or directory |
/run/lvm/lvmetad.socket: connect failed: No such file or directory |
||
230行目: | 236行目: | ||
}} |
}} |
||
− | + | Debian がデフォルトで lvmetad を使用しないのが原因です。{{ic|/etc/lvm/lvm.conf}} を編集して {{ic|use_lvmetad}} を {{ic|0}} に設定してください: |
|
use_lvmetad = 0 |
use_lvmetad = 0 |
||
+ | 上記の設定を行うと起動の initrd ステージでエラーが発生します。GRUB の生成を行ってから変更してください。ソフトウェア RAID + LVM の場合、以下の手順で設定します: |
||
− | This will trigger later an error on boot in the initrd stage. Therefore, you have to change it back after the grub generation. In a software RAID + LVM, steps would be the following: |
||
+ | * システムを全てインストールした後、initramfs (mkinitcpio) や [[ブートローダー]]の設定をよく確認してください。 |
||
− | * After installing all the system, when you have to do all the initramfs (mkinitcpio) and grub thing. |
||
− | * |
+ | * {{ic|/etc/mdadm.conf}} を RAID の構成にあわせて変更してください。 |
− | * |
+ | * LVM と RAID の要件を満たすように HOOKS と MODULES を変更してください: {{ic|1=MODULES="dm_mod" HOOKS="base udev '''mdadm_udev''' ... block '''lvm2''' filesystems ..."}}。 |
+ | * mkinitcpio で initrd イメージを生成してください。[[mkinitcpio#イメージ作成とアクティベーション]] を参照。 |
||
− | * Generate initrd images with mkinitcpio |
||
− | * |
+ | * {{ic|/etc/lvm/lvm.conf}} を編集して {{ic|1=use_lvmetad=0}} と記述します。 |
+ | * ブートローダーの設定を更新します。 |
||
− | * Generate grub config (grub-mkconfig) |
||
− | * |
+ | * {{ic|/etc/lvm/lvm.conf}} を編集して {{ic|1=use_lvmetad=1}} と記述します。 |
==== Fedora ベースのホスト ==== |
==== Fedora ベースのホスト ==== |
||
+ | Fedora ベースのホストやライブ USB では {{ic|genfstab}} を使って [[fstab]] を生成しようとしたときに問題が発生することがあります。重複するエントリを削除して "seclabel" オプションを削除してください。後者は Fedora だけで使われるオプションで、システムが起動できなくなります。 |
||
− | On Fedora based hosts and live USBs you may encounter problems when using {{ic|genfstab}} to generate your [[fstab]]. Remove duplicate entries and the "seclabel" option where it appears, as this is Fedora-specific and will keep your system from booting normally. |
||
+ | == 再起動する前に確認すること == |
||
− | == Things to check before you reboot== |
||
+ | 再起動する前に、新しくインストールした環境に chroot してください。 |
||
− | Before rebooting, chroot into the newly-installed system. |
||
+ | [[SSH]] を使いログインできるように、ユーザーとパスワードを作成してください。root でのログインは OpenSSH-7.1p2 からデフォルトで無効です。 |
||
− | Set a root password so that you can log in with ssh later: |
||
+ | |||
+ | 再起動後 su を使えるように root パスワードを設定: |
||
# passwd |
# passwd |
||
+ | [[SSH]] をインストールして起動時に自動的に実行されるように[[有効化]]してください。 |
||
− | Install [[ssh]] and [[enable]] it to start automatically at boot. |
||
+ | 起動時に自動的に接続されるように[[ネットワーク]]を設定してください。 |
||
− | Configure the [[network]] connection to start automatically at boot. |
||
+ | [[ブートローダー]]をセットアップしてルートパーティションと同じように適切なスワップパーティションを使用するように設定します。古い環境を起動できるようにブートローダーを設定することもできます。その場合、サーバーの既存の {{ic|/boot}} パーティションを再利用するのも有用です。 |
||
− | Set up a [[boot loader]] and configure it to use the swap partition you appropriated earlier as the root partition. You might want to configure your bootloader to be able to boot into your old system; it is helpful to re-use the server's existing /boot partition in the new system for this purpose. |
||
== LiveCD を使わずに既存の環境を置き換える == |
== LiveCD を使わずに既存の環境を置き換える == |
||
+ | ディスク上に 700MB 程度の空き容量を見繕ってください。スワップパーティションを無効化してシステムをセットアップします。 |
||
− | Find ~700MB of free space somewhere on the disk, e.g. by partitioning a swap partition. You can disable the swap partition and set up your system there. |
||
=== 昔のスワップパーティションを新しいルートパーティションに設定 === |
=== 昔のスワップパーティションを新しいルートパーティションに設定 === |
||
− | + | {{ic|cfdisk}}, {{ic|/proc/swaps}}, {{ic|/etc/fstab}} をチェックしてスワップパーティションを確認してください。ハードドライブが {{ic|sdaX}} として、以下を実行: |
|
− | |||
− | Do the following: |
||
+ | スワップ領域を無効化: |
||
− | Disable the swap space: |
||
# swapoff /dev/sdaX |
# swapoff /dev/sdaX |
||
+ | ファイルシステムを作成 ({{ic|/dev/sdaX}} の ID フィールドは "Linux" (83) に設定): |
||
− | Create a filesystem on it |
||
# fdisk /dev/sda |
# fdisk /dev/sda |
||
− | (set /dev/sdaX ID field to "Linux" - Hex 83) |
||
# mke2fs -j /dev/sdaX |
# mke2fs -j /dev/sdaX |
||
+ | マウントするためにディレクトリを作成: |
||
− | Create a directory to mount it in |
||
# mkdir /mnt/newsys |
# mkdir /mnt/newsys |
||
+ | 一時的に新しいディレクトリをマウント: |
||
− | Finally, mount the new directory for installing the intermediate system. |
||
# mount -t ext4 /dev/sdaX /mnt/newsys |
# mount -t ext4 /dev/sdaX /mnt/newsys |
||
=== インストール === |
=== インストール === |
||
+ | 空き容量が 700MB 以下の場合、base グループのパッケージを確認して、インターネット接続を立ち上げて一時的なパーティションで実行するのに必要なパッケージだけを選択してください。個別のパッケージを pacstrap に指定して、-c オプションを使います。 |
||
− | If less than 700MB are available, examine the packages in the group base, and select only those required to get a system with internet connection up and running in the temporary partition. This will mean explicitly specifying individual packages to pacstrap, as well as passing it the -c option, to get packages downloaded to the host system to avoid filling up valuable space. |
||
新しい Arch Linux システムをインストールして、新しく作成したシステムで再起動し、プライマリパーティションに[[Rsync によるフルシステムバックアップ|システム全体を rsync]] してください。再起動する前にブートローダーの設定を修正してください。 |
新しい Arch Linux システムをインストールして、新しく作成したシステムで再起動し、プライマリパーティションに[[Rsync によるフルシステムバックアップ|システム全体を rsync]] してください。再起動する前にブートローダーの設定を修正してください。 |
2023年10月21日 (土) 18:54時点における最新版
関連記事
この文章では Linux ホストシステムから Arch Linux をインストールするのに必要なブートストラッププロセスを説明しています。ブートストラップした後は、インストールガイドの記述に従ってインストールを行なって下さい。
既存の Linux から Arch Linux をインストールすることが考えられるのは以下の場合になります:
- Arch Linux のリモートインストール、例えば (仮想) ルートサーバー
- 既存の Linux を LiveCD を使わずに置き換える (#LiveCD を使わずに既存のシステムを置き換える を参照)
- Arch Linux ベースの新しい Linux ディストリビューションや Arch Linux ベースのLiveMedia の作成
- 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)
以下では手動でインストールする方法を記述しています。ホスト環境で直接 pacman を動作させる方法と、ホスト環境の中で Arch を動作させ、ネストされた環境は chroot の中に格納する方法を紹介します。
ホストシステムから pacman を使用する
Pacman のソースコード は大抵の Linux ディストリビューションでコンパイルでき、ホストシステムから直接 Arch Linux をブートストラップするのに活用できます。arch-install-scripts は最近のディストリビューションでダウンロードしたソースコードから問題なく動作するはずです。
ディストリビューションによっては、公式リポジトリに pacman や arch-install-scripts があり、ブートストラップに利用できます。2019年2月時点で、Gentoo Linux には pacman パッケージが提供されており、Alpine Linux および Fedora には pacman と arch-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
を編集してリポジトリサーバーを選択してください。
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 のインストール環境を動作させることができるというメリットがあります。
- ルートイメージは ミラー の 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/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) や ブートローダーの設定をよく確認してください。
/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 してください。再起動する前にブートローダーの設定を修正してください。