Arch Linux KDE: Installation (2)
インストールの流れ (中編)
- ルートディレクトリの切り替え
- タイムゾーンの設定
- ロケールの設定
- ネットワークの設定
- 初期RAMディスクの作成
- root用パスワードの設定
- ブートローダのセットアップ
- CPUマイクロコードアップデートの有効化
- ルートディレクトリの再切り替え
- 再起動
- 休憩
1. ルートディレクトリの切り替え
ここまで、isoイメージから起動したインストーラ役のArch Linux上のrootディレクトリでの操作が続いてきましたが、ひとまずインストール先ストレージへの主要なファイル配置は行われましたので、ここでarch-chrootスクリプトを用いてインストール先OS環境側へとルートディレクトリを切り替えます。
ルートディレクトリの切り替えスクリプト
arch-chroot /mnt

Fig.1-1: arch-chrootスクリプトの実行
Linux共通のコマンドとして/usr/bin/chrootがありますが、このスクリプトはそれをラップし、前準備としてapiファイルシステムのマウントの他、実際にchrootした後にIPアドレスネットワーク接続の名前解決を行うための/etc/resolv.confを作成するなどをセットで行った上で、最後にchrootを実行します。これによりchroot状態でもインターネット接続が成立します。
2. タイムゾーンの設定
chrootでOSインストール先のルートディレクトリに切り替わったら、まずはタイムゾーンの設定を行います。これは一般的にはtimedatactlコマンドを使って行うのですが、そのコマンドはsystemdによって提供されるサービスであり、後述するロケール設定用のlocalectlコマンドやホストコンピュータ名設定用のhostnamectlコマンドと合わせて、現在のchroot状態においては実行できないという制約があります。
timedatectlでタイムゾーンをAsia/Tokyoに設定(しかし現在の状態では実行不可能)
timedatectl set-timezone Asia/Tokyo
これができないため、ここでは代わりにlnコマンドを用いてシンボリックリンクを手動作成することでタイムゾーンの設定を行います。
lnでタイムゾーンをAsia/Tokyoに設定
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
少し見づらいですが、注意すべき点として/usr/share/zoneinfo/Asia/Tokyoと、/etc/localtimeの間にはスペースが含まれています。このコマンドは具体的には、第一引数である/usr/share/zoneinfo/Asia/Tokyoを実体として参照するシンボリックリンクを、第二引数である/etc/localtimeというファイル名で作成します。
- オプション「s」: シンボリックリンクの作成を行う
- オプション「f」: 既存ファイルが存在する場合は強制的に上書き
lnコマンドはハードリンクとシンボリックリンクのいずれかを作成することができます。両者の微妙な違いについては割愛しますが、今回作成したシンボリックリンクは対象のファイルへのパス参照であり、Windowsにおけるショートカットとおおむね同じようなものという認識で大丈夫です。
次に、システムクロックとハードウェアクロックの同期を行います。
システムクロックとハードウェアクロックの同期
hwclock --systohc

Fig.2-2: システムクロックとハードウェアクロックの同期
このコマンドによって/etc/adjtimeというテキストファイルが生成されます。
なお、hwclockコマンドのオプション「--systohc」はSYStem to Hardware Clockの意で、システムクロックを正として、ハードウェアクロック(つまりマザーボード上の時計時刻)を上書きすることを意味しています。また、この操作はハードウェアクロックがUTCとして設定されていることを前提としての操作になるので注意しましょう。
3. ロケールの設定
次に、ロケールを設定します。
ただその前に、ロケールという用語は少し曖昧なので一度整理しておきます。まず、ロケールというのは時差に関連する座標上の地域を指すのではありません(それはタイムゾーンで、先程既に設定完了しています)。このロケールに分類され取り扱われる環境変数はいずれも、通貨の表記であったり、曜日の表記であったり、小数点の表記であったり等々、文化的な区切りです。環境変数の中にはLC_TIMEというものもありますが、これもあくまで時刻の地域別表記方法の設定であって、絶対値としての時刻とは無関係です。
それでは、ロケールの設定に取り掛かりましょう。ただし、前述の通りchroot中にはlocalectlコマンドが使えないため、ここではテキストファイルを直接編集する必要があり、したがってまずは何らかのテキストエディタがなければいけません。今回は例としてテキストエディタvimをインストールして操作を進めていきます。
テキストエディタvimのインストール
pacman -S vim

Fig.3-1: pacmanパッケージマネージャからvimをインストール開始
インストールを続行するかどうかの確認が表示されたら「Y」を入力してEnterキーで進めます。

Fig.3-2: インストール完了
インストールが完了したら、ロケール設定ファイルを開きましょう。
vimでロケール設定ファイルを開く
vim /etc/locale.gen

Fig.3-3: ロケール設定ファイルlocale.genを開く
ファイルを開くとエディタ画面に遷移します。

Fig.3-4: テキストファイル/etc/locale.genの中身
vimテキストエディタ自体の解説は本記事の趣旨から外れるので割愛させていただきます。まずは下方向にスクロールを進めて、「#ja_JP.UTF-8 UTF-8」という行を探しましょう。

Fig.3-5: #ja_JP.UTF-8 UTF-8を発見
この日本ロケールを選択肢として有効化するため、行頭のコメントアウト記号#を削除します。

Fig.3-6: コメントアウト記号#を削除
また、最終的に使用するのが日本ロケールだとしても、インストールを進める過程では英語圏ロケールも有効化しておく必要がありますので、es_US.UTF-8 UTF-8もアンコメントしてください。

Fig.3-7: #es_US.UTF-8 UTF-8もコメントアウト記号#を削除
以上、対象の2行からコメントアウト記号#を削除し終わったら、上書き保存してvimを終了します。
ファイルを上書き保存してvimを終了
:wq

Fig.3-8: 上書き保存して終了
上書き保存が成功すると以下のように「*****B written」と表示されて、コマンドラインに戻ってきます。

Fig.3-9: 上書き保存の成功を示すメッセージ
それでは設定ファイルの編集が完了したので、locale-genコマンドを用いて実際のロケールデータを生成しましょう。
ロケールデータの生成
locale-gen

Fig.3-10: ロケールデータの生成
先程アンコメントしたes_US.UTF-8とja_JP.UTF-8向けのロケールデータがそれぞれ生成されました
次に、OSの各種ロケール環境変数を格納するためのlocale.confファイルを新規作成し、同時に言語ロケールを英語に指定する記述を書き込みます。
OSのロケール環境変数用ファイルlocale.confの新規作成および初期設定
cat >> /etc/locale.conf
LANG=en_US.UTF-8
(Control + Cで終了)

Fig.3-11: 言語ロケールをen_US.UTF-8に指定
さらに、永続的なキーマップ設定のためのvconsole.confファイルを新規作成し、同時にキーボードレイアウトを現在使用しているキーボードと一致させる記述を書き込みます。ここでは、106日本語キーボードを使っているものとして解説を進めます。
永続的キーマップ定義用ファイルvcosole.confの新規作成および初期設定
cat >> /etc/vcosole.conf
KEYMAP=jp106
(Contrl + Cで終了)

Fig.3-12: キーボードレイアウトをjp106に指定
以上でロケールの初期設定は完了です。
4. ネットワークの設定
コンピュータ名を示す、ホストネームファイルhostnameを新規作成し、同時にコンピュータ名を書き込みます。
ホストネームファイルの作成
cat >> /etc/hostname
*コンピュータ名*
(Control + Cで終了)

Fig.4-1: コンピュータ名を「VWS15」と定義した例
また、念のためここで一度pingコマンドを使ってインターネット接続が可能かどうか確認しておきましょう。後ほど再起動して、インストールされた環境単体で起動した時にはこれと同じ事をしても一時的に繋がらなくなってしまいますが、それについてはまた別途解説と設定を行います。
インターネット接続状態の確認
ping www.example.com

Fig.4-2: pingコマンドによってパケットがインターネット上に通ることを確認
5. 初期RAMディスクの作成
通常、初期RAMディスク(Initramfs)の作成は、OSインストール先パーティションに対するpacstrapスクリプトによるカーネルパッケージのインストール時に内部的にmkinitcpioスクリプトが動作することで自動作成されているため、手動で行う必要はありません。ただし、インストール先が以下に挙げるいずれか特殊な環境であった場合は手動で行う必要があります。
- LVMパーティション(複数のドライブにまたがるパーティションを結合したもの)
- システム暗号化パーティション
- RAID構成
こういった環境においては設定ファイルとなる/etc/mkinitcpio.confを修正した後、単独で改めてスクリプトを実行することでInitramfsを生成し直します。
初期RAMディスク作成スクリプトの単独実行(必要な場合)
mkinitcpio -P
ただ、これは特殊なケースですので、今回はこれについての解説は割愛させていただきます。
6. root用パスワードの設定
root用パスワードの設定を行います。
パスワードの設定
passwd
New password: ********(新しいパスワード)
Retype new password: ********(新しいパスワードを確認のため再度入力)

Fig.6-1: パスワードの設定
このpasswdコマンドは引数なしなら自らのパスワードを、またrootアカウントにおいてこのコマンドに引数としてユーザアカウント名を指定した場合はそのアカウントのパスワードを更新できます。
7. ブートローダのセットアップ
Linux対応のブートローダは一種類ではなく様々なものが存在していますが、例えばマザーボード側の環境がBIOSであること必須とするものや、逆にUEFIであることを必須とするものなど、それぞれに制約があるという点に注意が必要です。なお、その中でもっとも汎用的に使用可能なのがGRUBブートローダで、このためほとんどのLinuxディストリビューションのインストーラでは選択の余地なくGRUBがインストールされます。
本記事においてもGRUBを例に解説を進めていきます。まずはpacmanパッケージマネージャからGRUBをインストールしましょう。
GRUBのインストール
pacman -S grub

Fig.7-1: ブートローダGRUBをインストール
インストールを続行するかどうかの確認が表示されますので「Y」を押してEnterキーで進めましょう。

Fig.7-2: インストール完了
なお、このインストール完了というのはGRUBがブートローダとして実際にセットアップされたことを意味しているわけではありません。所定の関連コマンドでブート用パーティションにセットアップするための準備が整えられたと解釈してください。
また、今回はマザーボード側のUEFI有効化した状態でのArch Linuxインストールを進めているので、GRUBに加えてefibootmgrもインストールしなくてはいけません。このefibootmgrはマザーボード上に物理実装されたUEFI用NVRAM(Non Volatile RAMの略で、電源を切っても消えない不揮発性の記憶領域)に登録されたブートエントリの内容や順番設定を表示・変更するためのコマンドで、内部的にGRUBによって使用されます。
efibootmgrのインストール
pacman -S efibootmgr

Fig.7-3: スクリプトefibootmgrのインストール
こちらもインストールを続行するかどうかの確認が表示されますので「Y」を押してEnterキーで進めましょう。

Fig.7-4: インストール完了
ここで改めて、パーティション一覧を表示してブートローダのインストール先を確認しておきましょう。
ブロックデバイス(ストレージドライブおよびパーティション)のリストアップ表示
lsblk

Fig.7-5: ブロックデバイス一覧
EFIシステムパーティションとして作成したパーティション、ここではsda1のマウントポイントが「/boot」であることを確認できましたので、GRUBブートローダのセットアップを始めます。
UEFI環境向けGRUBブートローダのセットアップ
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB

Fig.7-6: UEFI環境向けGRUBブートローダのセットアップ
なお、このgrub-installコマンドは内部的にefibootmgrコマンドを用いて、マザーボード側のUEFI用NVRAM内ブートマネージャにエントリの書き込みを行おうとします。ここで、もし既にそちら側のエントリが上限数まで埋まってしまっていた場合はコマンドの実行に失敗してしまうため、その場合はefibootmgrを単独使用して既存のエントリから不要なものを手動削除しなければいけません。
問題なくgrub-installコマンドが完了したら、メインのGRUBディレクトリ/boot/grubが生成されますので、次にgrub-mkconfigコマンドを用いてその直下にGRUB設定ファイルも生成します。
GRUB設定ファイルの生成
grub-mkconfig -o /boot/grub/grub.cfg

Fig.7-7: GRUB設定ファイルを/boot/grub/grub.cfgとして生成
以上で、GRUBブートローダのセットアップは完了です。
8. CPUマイクロコードのアップデート有効化
コンピュータのCPUがIntel製あるいはAMD製の場合、つまりほとんどの場合はCPUマイクロコードのアップデートを有効化しておくことが推奨されます。これを有効化しておくことによって、CPU製造元から提供されるバグフィックスやセキュリティパッチが適用されます。
まずは、CPU製造元を確認しましょう。
CPU製造元の確認
lscpu | grep "Vendor ID"

Fig.8-1: CPU製造元の確認
ここで、Vendor IDとして参考画像のようにAuthenticAMDと表示されたらAMD製、GenuineIntelと表示されたらIntel製です。製造元を確認できたら、対応するマイクロコードをインストールしましょう。
マイクロコード入手用パッケージのインストール
pacman -S amd-ucode (AMD製の場合)
pacman -S intel-ucode (Intel製の場合)

Fig.8-2: マイクロコード入手用パッケージのインストール

Fig.8-2: インストール完了
この時点ではマイクロコードはダウンロードされただけで、まだ実際にCPUに適用されていません。
マイクロコードをCPUに適用するにはいくつか方法がありますが、GRUBブートローダをセットアップした場合はマイクロコードの自動検出機能を使うことができます。先程ブートローダのセットアップの際に一度実行した「grub-mkconfig -o /boot/grub/grub.cfg」をもう一度実行すると、GRUBによってマイクロコードアップデートの存在が自動検知され、grub.cfgが再生成される際にそのロードを行うための記述が書き込まれます。

Fig.8-3: grub.cfgの再生成
再生成されたgrub.cfgにマイクロコードアップデート適用のための記述が書き込まれたかどうか、catコマンドを用いて確認できます。
再生成されたgrub.cfg内を検索
cat /boot/grub/grub.cfg | grep ucode

Fig.8-4: 検索結果
参考画像のように「initrd」以降の記述が書き込まれていることがわかります。initrdは起動直後にブートローダによって最初に読み込まれる初期RAMディスクのファイルシステムで、ここにはカーネルに先行して起動するinitramfs-linuxが割り当てられていますが、この再生されたgrub.cfgにおいてはそれよりもさらに先行してマイクロコードアップデートが割り当てられています。
9. ルートディレクトリの再切り替え
インストール先OS環境側での操作は完了しましたので、chroot状態から元のインストーラ側に戻りましょう。
chroot状態から戻る
exit

Fig.9-1: exitコマンドでインストーラ側のルートディレクトリに戻る
10. 再起動
これにて、Arch Linuxのインストーラ側での操作は完了です。インストーラ側の/mntにマウントされているOSインストール先パーティション全てをアンマウントして切り離しましょう。
OSインストール先パーティション群を全てアンマウント
umount -R /mnt

Fig.10-1: アンマウント完了
それでは、再起動してインストールメディアを取り外しましょう。
再起動
reboot
11. 休憩
これにて、インストールメディアを必要とせずそれ単体で起動・操作することができるまでの必要最低限のOSインストールは完了しました。再起動してからは、まずは少なくともコマンドラインで一定の実用的な環境を構築するまでの準備を介してから、最終的にはその上にデスクトップ環境を導入し運用環境を組み立てていきます。
後編へと続きます。
