Arch Linux インストール (4)

インストールしたシステム内に入る
今までは、メモリ上に起動した Linux システム上でコマンドなどを実行してきましたが、ここからは、インストールした Arch Linux システム内に入って、設定を行っていきます。

以下のコマンドで、Linux のルートを切り替えて、インストール先の Arch Linux へと移ります。

# arch-chroot /mnt

arch-chroot は、Arch Linux インストール用のスクリプトです。

なお、インストール先の Arch Linux から抜けて、元のインストール作業用の Linux に戻りたい場合は、exit コマンドを実行します。
その後作業をして、また戻ってくる場合は、再び arch-chroot を実行してください。
注意点
ここから先、実行するコマンドは、実際にインストールした Arch Linux 上にあるコマンドが使われます。
そのため、ルートを切り替えた後は、インストールメディア内にあるコマンドは使えないので、注意してください。

ただし、ネットの接続は継続されているので、パッケージのインストールは行えます。
パッケージのインストール
途中で、追加で必要になるパッケージがあった場合は、pacman コマンドでインストールしてください。
-S オプションで、指定パッケージをインストールします。

## パッケージのインストール
# pacman -S <package...>

## パッケージの検索
# pacman -Ss <name>
テキストの編集
テキストファイルの編集を行う必要がある場合、nano コマンドなど、インストール先の Arch Linux にインストールされているテキストエディタを使ってください。

pacstrap 時に、テキストエディタをインストールしていなかった場合は、# pacman -S nano でインストールしてください。
タイムゾーン
時刻を、各地域ごとの時間に合わせるために、タイムゾーンを設定します。

日本の場合は、東京に合わせるので、以下のようになります。
成功した場合は、何も表示されません。

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ln コマンドで、/etc/localtime にシンボリックリンクを作成し、/usr/share/zoneinfo/Asia/Tokyo にリンクさせています。

Linux は、/etc/localtime のファイルを読み込んで、タイムゾーンを設定します。

各地域ごとの設定ファイル (バイナリファイル) は、/usr/share/zoneinfo ディレクトリ以下にあります。
ここから任意のファイルを選びます。

/etc/localtime のシンボリックリンクにアクセスすると、/usr/share/zoneinfo/Asia/Tokyo にアクセスするのと同じことになります。

-sf は、-s-f オプションを同時に指定しています。
-s は、シンボリックリンクを作成します。
-f は、すでに対象のファイルが存在する場合、削除します。
ハードウェアクロック
現在の時間を、ハードウェア (マザーボード内の内部時計) に書き込みます。
※すでに正しく書き込まれているのがわかっている場合は、実行しなくても構いません。

ネットを接続した後に時刻合わせを行いましたが、あれは、インストール作業用の Linux システム上における時刻を設定したに過ぎません。
再起動すると、その時刻は破棄されて、再びマザーボードの内部時計から時刻が読み込まれてしまいます。

再起動しても時刻が正しくなるように、現在の Linux 上での時刻を、マザーボードの内部時計に書き込みます。
書き込みには、hwclock コマンドを使います。

# hwclock --systohc --utc

-w, --systohc で、Linux 上での時刻を、ハードウェアに書き込みます。
-u, --utc で、時刻に UTC (協定世界時) を使います。

Windows の場合、UTC ではなく地域ごとのローカルタイムを使うので、Windows と Linux をデュアルブートする場合は、時刻が狂います。
Windows で UTC を使うためには、手順が必要なので、以下を参照してください。

# 時刻 - ArchWiki
ロケール
# ロケール - ArchWiki

Linux 上で使用する言語を設定します。
日本の場合は ja_JP (日本語) を使いますが、デフォルトとして en_US (英語) も必須となるので、それも指定します。
locale.gen 編集
まずは、/etc/locale.gen ファイルを編集し、使う言語の、先頭の # を削除して、使用する言語を複数選択します。

$ nano /etc/locale.gen

言語名のアルファベット順に並んでいるので、まずは 「#en_US.UTF-8 UTF-8」 の行を探します。
見つけたら、その行の先頭の # を削除します。

次に、「#ja_JP.UTF-8 UTF-8」 を見つけて、同じように # を削除します。

結果的には、行頭が # のコメント行を除いて、以下のようになっていれば OK です。

en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8

日本語では、他に 「ja_JP.EUC-JP EUC-JP」 がありますが、そちらは文字コードに EUC-JP を使います。
今は Linux 上では UTF-8 を使うのが一般的なので、UTF-8 の方を使います。

終わったら、Ctrl+XyEnter で、上書き保存します。
locale-gen
次に、/etc/locale.gen の内容を元に、locale-gen コマンドで、各言語のロケールを生成します。

# locale-gen

Generating locales...
  es_US.UTF-8... done
  ja_JP.UTF-8... done
Generation complete.

各ロケールが生成されたのがわかります。
locale.conf
次に、/etc/locale.conf ファイルを作成して、デフォルトのロケールを指定します。

nano コマンドを使ってもいいのですが、下のコマンドで、ファイルの作成と書き込みを行うことができます。

# echo LANG=en_US.UTF-8 > /etc/locale.conf

echo コマンドで、「LANG=en_US.UTF-8」 を標準出力に出力し、「>」 で、出力された内容を指定ファイル (/etc/locale.conf) に新規作成して書き込みます。

結果的に、/etc/locale.conf の中身が以下のようになっていれば問題ありません。

LANG=en_US.UTF-8

※現段階ではまだ、ロケールを日本語にしないでください。

日本語について
純粋なコンソール画面上では、ビットマップフォントを使って文字を表示しています。
/usr/share/kbd/consolefonts
ここには日本語用のフォントがないので、日本語は表示できません。

そのため、この段階でデフォルトを日本語にしてしまうと、出力された日本語の文字列が文字化けしてしまって読めないので、コンソール環境上では、英語で作業をしていく必要があります。

GUI 環境を構築した後は、「LANG=ja_JP.UTF-8」 にして、日本語に設定します。
キーマップ
インストールした Arch Linux 上でのコンソールにおけるキーボード配列は、デフォルトで英語用となっているので、設定ファイルで、キーボード配列を指定します。

# echo KEYMAP=jp106 > /etc/vconsole.conf

/etc/vconsole.conf ファイルに、「KEYMAP=jp106」 の内容を書き込みます。
これで、起動時に毎回 jp106 が使われることになります。

※ GUI 環境においては、別途キーボード設定が必要になります。ここでは、純粋なコンソール画面でのキーボード配列の設定です。
ホスト名
自分のパソコンのホスト名 (ネットワーク上で各マシンを識別するための名前) を決めて、設定します。

基本的に自分のネットワークでしか使わないので、名前は適当で構いません。
今回の場合は、仮に arch とします。

/etc/hostname ファイルに、テキストでホスト名だけを記述してください。

# echo arch > /etc/hostname
ネットワーク設定
現在のインストール作業の Linux 上では、ネットワークに接続されていますが、インストール先の Arch Linux 上では、ネットワークの設定を行っていないので、別途設定する必要があります。

ネットワークの接続には、複数の方法があり、自分で好きなものを選ぶことができます。
必要なパッケージや設定方法は、それぞれで異なるので、以下のページを参考にしてください。

>> ネットワーク設定

※作業用の Linux 上で、すでにネットワークには接続されているので、ここでは # systemctl start ... など、実際に接続を実行する必要はありません。

設定ファイルを作成したり、サービスを有効にするだけの場合は、この段階ですべて設定して、起動時に自動で接続することができますが、iwd など、一部の接続方法では、ここで設定せずに、インストール先の Arch Linux を起動してから設定した方が良い箇所があります。

ただし、その場合、必要になるパッケージだけは、必ずここでインストールしておいてください。(特に無線 LAN 関連)
インストール先の Arch Linux は、もちろんネットに接続されていない状態なので、その環境ではパッケージのダウンロードができません。
有線 LAN の場合
有線 LAN の場合は、dhcpcd を使うのが一番簡単です。

有線 LAN のインターフェイス名を確認する必要があるので、# ip link または # networkctl で確認してください。
enp* が、有線 LAN です。

dhcpcd の場合
## インストール
# pacman -S dhcpcd

## 起動時に有効にする (@ 以降は、インターフェイス名を指定)
# systemctl enable dhcpcd@enp0s3
                          ~~~~~~

systemd-networkd の場合
## 起動時に有効にする
# systemctl enable systemd-networkd systemd-resolved

## ネットワーク設定の作成
# nano /etc/systemd/network/eth.network

------
[Match]
Name=<interface>

[Network]
DHCP=ipv4
------
* <interface> の部分はインターフェイス名に置き換え

DNS サーバーの IP アドレスを設定するため、/etc/resolv.conf を、/run/systemd/resolve/resolv.conf のリンクファイルとして作成する必要がありますが、この段階でリンクするには、一度 arch-chroot を抜けなければならないので、インストール先を起動した後に設定します。
無線 LAN の場合
無線 LAN の場合は、「netctl + wpa_supplicant」「iwd 単体」「systemd-networkd + iwd」のいずれかを使うと良いです。
一番手順が少ないのは、netctl です。

iwd 単体の場合
## インストール
# pacman -S iwd

## 起動時に有効にする
# systemctl enable iwd

## /etc/resolv.conf (DNS) を手動で設定しない場合
# systemctl enable systemd-resolved

## 設定ファイルの編集
# mkdir /etc/iwd
# nano /etc/iwd/main.conf

---------
## 内蔵ネットワーク設定有効
[General]
EnableNetworkConfiguration=true
---------

※実際の接続設定は、インストール先を起動した後に行います。

netctl の場合
## インストール
# pacman -S netctl openresolv dhcpcd wpa_supplicant

## サンプルプロファイルをコピー (WPA:DHCP)
# cp /etc/netctl/exsamples/wireless-wpa /etc/netctl/wireless

## 無線 LAN インターフェイス名の確認 (wlp〜)
# ip link

## プロファイル編集
# nano /etc/netctl/wireless

- "Interface" に wlp〜
- "ESSID" にルータのネットワーク名
- "Key" に暗号化キー

## 起動時に指定プロファイルで接続
# netctl enable wireless
systemd-resolved の注意点
systemd-resolved を使って DNS を管理する場合、以下のように /etc/resolv.conf をリンクファイルとして作成する必要がありますが、arch-chroot を行った後の場合、以下のコマンドでは正しく設定できません。

# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

というのも、arch-chroot のスクリプト内容 を見ればわかりますが、この中で、/etc/resolv.conf が /mnt/etc/resolv.conf としてバインドマウント(特定のファイルを別のパスにマウント)されるような形になっています。

つまり、arch-chroot 後に /etc/resolv.conf のパスを使った場合、実質的なパスは /mnt/etc/resolv.conf となりますが、それがバインドマウントされているので、結果として、インストール作業 Linux のメモリ上にある /etc/resolv.conf となります。

なぜこれが必要かというと、インストール作業上の Linux でネット接続を継続するために、DNS サーバーの IP アドレスを、作業用 Linux 上で設定された /etc/resolv.conf から取得する必要があるからです。

arch-chroot 後に /etc/resolv.conf をリンクファイルとして作成するということは、作業用 Linux 上の /etc/resolv.conf がリンクファイルとして作成されるということなので、意味がありません。

よって、arch-chroot の前に実行するか、exit で arch-chroot を抜けてから実行するか、実際のインストール先を起動してから実行するかしてください。
arch-chroot 外でリンクファイルを作成する場合は、以下のようにします。

# ln -sf /run/systemd/resolve/resolv.conf /mnt/etc/resolv.conf
パスワード設定
root (管理者権限) のパスワードを設定します。

# passwd

New password でパスワードの入力を求められるので、入力して Enter を押します。
次に、Retype new password で、確認のために再入力を求められるので、同じ文字を入力します。
パスワードが2つとも同じなら、設定に成功します。

Linux のコマンドライン上では、基本的にパスワードの入力文字は、一切表示されません。
入力しても何も表示されませんが、内部ではちゃんと処理されているので、問題ありません。
入力を間違えたかもしれないという時は、複数回 BackSpace キーで文字を削除するか、Ctrl+U でカーソルより前の文字を削除できます。
マイクロコード
次のブートローダの設定をする時に必要になるので、先にマイクロコードの説明をします。

# マイクロコード - ArchWiki

「マイクロコード」は、CPU のファームウェアです。
脆弱性の対応など、CPU 動作に関する修正があった時に更新されます。

Arch Linux には、Intel/AMD CPU 用のパッケージがあるので、マイクロコードは常に更新した方が良いでしょう。

メーカーパッケージ名ファイル名
Intelintel-ucode/boot/intel-ucode.img
AMDamd-ucode/boot/amd-ucode.img

両方とも、パッケージをインストールすると、/boot にイメージファイルがインストールされます。
ただし、パッケージをインストールしただけでは、マイクロコードは更新されません。

Linux の起動前に更新処理をする必要があるので、ブートローダ上で、マイクロコードのイメージを実行するように設定する必要があります。
各ブートローダによって設定方法は異なるので、それぞれの解説を見てください。
ブートローダー
# ブートローダー

OS を起動するための、ブートローダーの設定を行います。

Linux で使えるブートローダーにはいくつか種類があり、好きなものを使うことができますが、BIOS/UEFI・MBR/GPT・ファイルシステムなど、ブートローダーによって対応しているものが異なるので、環境に合わせて選んでください。

ここでは GRUB を紹介していますが、他に systemd-boot などがあります。
他のブートローダなどについては、ブートローダ で解説しています。
GRUB について
# GRUB - ArchWiki

GRUB は、BIOS/UEFI 両方に対応している、一番多機能なブートローダーです。
あまり細かいことを考えずに設定できるので、一般的にはこちらを使ってください。

BIOS/UEFI や MBR/GPT によって設定方法が異なるため、それぞれで GRUB の設定方法を解説しています。
エラーなどが出た場合は、上記のページに対策が書かれているので、参考にしてください。
マイクロコード
マイクロコードのパッケージ intel-ucode, amd-ucode をあらかじめインストールしておくと、grub-mkconfig 時に、GRUB が自動でその処理を設定してくれるので、先にインストールしておいてください。

grub-mkconfig の後にマイクロコードをインストールした場合は、再度 grub-mkconfig を実行して、GRUB の設定ファイルを再作成してください。
GRUB (UEFI-GPT 64bit の場合)
## インストール
# pacman -S grub efibootmgr

GRUB のファイルをインストール
ブートするために必要なファイルを、インストールします。

# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub

成功した場合、エラーがない旨のメッセージが出ます。
/boot/grub 以下に GRUB のファイル、/boot/EFI/arch_grub に EFI ブートファイルが作成されます。

--targetx86_64-efi で、UEFI (64bit) 用のファイルを作成します。
--efi-directoryEFI システムパーティションをマウントしたディレクトリを指定します。
ファイルをインストールする場所になります。

今回の場合、EFI システムパーティションは /dev/sda1 で、fstab ファイルによって、/dev/sda1 を /boot にマウントするように設定してあるので、/boot となります。
--bootloader-id作成するブートローダー名を、任意の名前で指定します。

/boot/EFI ディレクトリ内に、指定した名前のディレクトリが作成され、その中に、GRUB 用の EFI ブートファイル grubx64.efi が作成されます。

同じディスクに複数の OS をインストールする場合、各 OS のブートローダーごとに /boot/EFI 内にディレクトリが作成されることになるので、他の OS と重複しないように名前を付けてください。

今回の場合は、Arch Linux 用の GRUB なので、arch_grub としました。

.efi のコピー
UEFI のファームウェアによっては、/boot/EFI/boot 内に bootx64.efi という名前で、デフォルトの efi ファイルが必要な場合があります。

そのため、一応 GRUB 用の *.efi ファイルをコピーして、作成しておきます。

# mkdir /boot/EFI/boot
# cp /boot/EFI/arch_grub/grubx64.efi /boot/EFI/boot/bootx64.efi
               ~~~~~~~~~

arch_grub の部分は、--bootloader-id で指定した名前に置き換えてください。

日本語対応
現在の GRUB には、日本語のビットマップフォントが含まれているので、メニュー画面で日本語を表示することができます。
日本語にするためには、現在の Linux の言語設定を日本語にする必要があるので、grub.cfg を生成する前に、LANG 環境変数を設定して、日本語にしておくと良いです。
英語に戻す場合は、en_US.UTF-8 に設定してください。

# export LANG=ja_JP.UTF-8

grub.cfg の生成
起動情報などが書かれた設定ファイルを、自動で生成します。

# grub-mkconfig -o /boot/grub/grub.cfg

grub-mkconfig コマンドを使うと、現在の Linux システム(今回の場合、新規インストールした Arch Linux)については、自動で設定を書き込んでくれるので、通常はそのファイルをそのまま使えば問題ありません。

ただし、他に起動したい OS がある場合や、起動設定を変えたい場合などは、手動で編集する必要があります。
GRUB (BIOS-MBR の場合)
パッケージのインストール
BIOS の場合、os-prober パッケージをインストールしておくと、grub-mkconfig 実行時に、他のパーティションにインストールされている OS を自動で検出して設定してくれます。
複数の OS をインストールしている場合は、これを使うと便利です。

# pacman -S grub

インストール
BIOS の場合は、ディスクの MBR ブートコード領域にインストールします。

書き込み対象のディスクを指定する必要があるので、以下のコマンドの /dev/sda は自分の環境のデバイス名に置き換えください。
※この時、/dev/sda1 のように、パーティションを指定しないでください。ディスク自体の MBR 領域に対して書き込みを行います。

# grub-install --target=i386-pc /dev/sda
                                     ~~~
# grub-mkconfig -o /boot/grub/grub.cfg

UEFI の場合と同じように、ブート用ファイルのインストールと、設定ファイルの生成を行います。

--targeti386-pc なので、32bit OS 用のような印象を受けますが、64bit の場合でも同じなので、気にしなくて構いません。
再起動
これで、インストール先の Arch Linux を起動させる準備ができました。

この段階で、インストールメディアは必要なくなります。
以降は、実際にインストールした Arch Linux を起動して、細かい設定を行っていきます。

# exit
# umount -R /mnt
# reboot

exit コマンドでログアウトして、インストールメディアの環境に戻ります。
umount コマンドで、マウントしたパーティションをすべてアンマウントして、Linux から切り離します。
reboot コマンドを実行すると、再起動が行われます。

再起動したら、インストールメディアを取り外します。

起動に問題がなければ、ブートローダのメニューが出て、OS 選択になるので、Arch Linux を選択して Enter を押してください。

Arch Linux が起動すると、コンソール画面になり、ログインが求められます。

起動後、しばらくしてもなかなか次の画面に移らない場合は、ネット接続に時間が掛かっているか、接続に失敗して、タイムアウト時間まで待っている可能性があります。
デフォルトでは、90 秒待てば次の画面に移ります。

この段階では、まだ GUI 環境を何もインストールしていないので、引き続き、コマンドライン上で作業をしていきます。

>> インストール (5)