Edited at

Arch Linuxの最小限インストール


はじめに

Arch Linuxのインストールは、Arch Linuxに興味のある人はもちろん、Linux一般やコンピューターの仕組みを深く知りたい人は一度試してみることをオススメします。ほかのLinuxディストリビューションやOSのインストールでは隠されている、興味深い技術や知識を体験するよい機会になります。たとえば、chrootブートローダの設定などです。

また、Arch LinuxはブートモードUEFIやシステムサービスマネージャーsystemdなど新技術にも積極的に対応しています。Arch Linuxのインストールは、こうした新技術に触れるよい機会にもなります。

OSのインストールにあたってはさまざまな設定を行います。ですが、ここではSSDやハードディスクなどのドライブからArch Linuxを起動できるようになるまでの最小限のインストール手順を説明します。たとえばユーザーの作成やネットワークの設定などといったインストールと一緒に行われることが多い作業も後回しにします。

インストールの対象は、実機と、QEMU/KVMの仮想マシン、VirtualBoxの仮想マシンの3種類です。QEMU/KVMやVirtualBoxを使うとを気軽にArch Linuxのインストールを試せますし、インストールを繰り返し練習することもできます。

なお、デュアルブートは、ここでは扱いません。


準備と確認


インストール要件の確認

Arch Linuxのインストール要件は、次のとおり。


  • 機種: x86_64 互換

  • メモリ: 512MB以上

  • インターネット接続

  • ドライブ容量: 800MB以上

意外と高い要件が求められるので、注意してください。


ブートモードとパーティション方式の確認

ブートモードはコンピューターに電源が入ってからOSがブート(起動)するまでの間に動作するもので、主にBIOSとUEFIが用いられます。かつてはBIOSがブートモードの代名詞でしたが、最近のマシンではUEFIが一般的です。実機では、マシンによりブートモードが決まります。QEMU/KVMやVirtualBoxでは、仮想マシン作成時などにBIOSかUEFIかを設定します。

また、ドライブを管理するときのパーティション方式は、かつてはMBR(Master Boot Record)が代名詞でした。最近は、とくにブートモードがUEFIの場合、GPT(GUID Partition Table)が用いられます。

ここでは、ブートモードはUEFI、パーティション方式はGPTでインストールします。


ISOファイルのダウンロード

Arch Linuxのインストールに必要なISOファイルは、Arch Linux をダウンロードに記載されたサーバーからダウンロードします。日本国内の場合、日本のサーバーからダウンロードするといいでしょう。ISOファイルは、archlinux-2018.10.01-x86_64.isoのような「archlinux-<日付>-x86_64.iso」という形式の名前のISOファイルで、容量は600MB程度です。


インストールメディアへのコピー

実機にArch Linuxをインストールする場合は、CD-ROMやUSBメモリーなどのリムーバブルメディアにISOファイルをコピーしてください。可能な場合は、USBメモリーを使うのがオススメです。


マシンのブートと状態の確認


マシンのブート

実機の場合は、USBメモリを挿すなどしてインストールメディアからマシンをブートさせてください。QEMU/KVMやVirtualBoxの仮想マシンの場合は、ダウンロードしたISOファイルからブートするように設定し、ブートさせてください。

マシンがブートすると、次のようなzshシェルの画面になります。

VirtualBox_Arch_23_10_2018_10_36_37.png

この画面からArch Linuxをインストールします。硬派だねぇ。


インストール中のキーボードの設定

初期設定では英語キーボードレイアウトが設定されるため、日本語キーボードを使っていると記号などの入力がむつかしいかもしれません。その場合は、次のコマンドで日本語キーボードレイアウトに変更します。


参考

root@archiso ~ # loadkeys jp106


詳細は、ArchWikiを参照してください。ただし、ここでの変更はインストールのときだけ有効です。永続的な設定は、インストール完了後にあらためてやります。


作業記録の開始

scriptコマンドで、シェルに入力したコマンドや出力結果などの作業を記録し、ファイルに保存できます。引数を指定しない場合、カレントディレクトリのtypescriptファイルが作業記録の保存先になります。

root@archiso ~ # script


実行結果

Script started, file is typescript


こうした作業記録は必須ではありませんが、あとからインストール手順を検証できるるため、保存しておくことをオススメします。とくにインストールが失敗した場合には、失敗した原因を調べるために役立ちます。

作業記録を止めるには、exitコマンドを実行します。保存したファイルは、そのままではインストール完了時の再起動で失われてしまうため、あとでドライブにコピーする必要があります。


接続デバイスの確認

マシンに接続されているドライブなどのデバイスをlsblkで確認します。

root@archiso ~ # lsblk


実行結果

NAME  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

loop0 7:0 0 446.8M 1 loop /run/archiso/sfs/airootfs
sr0 11:0 1 556M 0 rom /run/archiso/bootmnt
sda 254:0 0 50G 0 disk

この場合、sdaドライブがArch Linuxインストールの対象となります。

KVM/QEMUでvirtioドライバーを用いた仮想ドライブを使っている場合は、ドライブがsdaのかわりにvdaと表示されます。


ブートモードの確認

ブートモードをefivarコマンドで確認します。efivarはUEFIについての変数を設定・確認するためのコマンドで、-lオプションで変数一覧を表示します。このコマンドで変数名のリストが表示される場合のブートモードは、UEFIです。

root@archiso ~ # efivar -l


実行結果

8be4df61-93ca-11d2-aa0d-00e098032b8c-BootOrder

8be4df61-93ca-11d2-aa0d-00e098032b8c-Boot0003
8be4df61-93ca-11d2-aa0d-00e098032b8c-Boot0002
... // 以下略


インターネット接続の確認

マシンがインターネットに接続していることをpingコマンドで確認します。

root@archiso ~ # ping -c 4 archlinux.jp


実行結果

PING archlinux.jp (160.16.119.98) 56(84) bytes of data.

64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=1 ttl=50 time=7.73 ms
64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=2 ttl=50 time=5.43 ms
64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=3 ttl=50 time=5.36 ms
64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=4 ttl=50 time=6.15 ms

--- archlinux.jp ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3858ms
rtt min/avg/max/mdev = 5.363/6.168/7.731/0.956 ms



パーティションの設定

インストールメディアからブートした直後の状態では、ドライブへのデータの読み書きはできません。次の3つの作業でパーティションを設定することでデータの読み書きができるようになります。


  • パーティションの作成

  • ファイルシステムの構築

  • ファイルシステムのマウント


パーティションの作成

ドライブのパーティションをgdiskで設定します。gdiskは、MBRのパーティション設定で用いられていたfdiskとよく似た、コマンドライン上のGPTパーティション設定ツールです。

sdaドライブに対するgdiskを次のコマンドで開始します。

root@archiso ~ # gdisk /dev/sda


実行結果

GPT fdisk (gdisk) version 1.0.3

Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present

Creating new GPT entries.

Command (? for help):


gdiskのプロンプトが表示されました。?コマンドで、コマンド一覧が表示されます。

Command (? for help): ?


実行結果

b   back up GPT data to a file

c change a partition's name
d delete a partition
i show detailed information on a partition
l list known partition types
n add a new partition
o create a new empty GUID partition table (GPT)
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code
v verify disk
w write table to disk and exit
x extra functionality (experts only)
? print this menu

pコマンドで現在のパーティションを表示します。パーティションが空の場合、次のように表示されます。

Command (? for help): p


実行結果

Disk /dev/sda: 104857600 sectors, 50.0 GiB

Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 8EC9B916-FFB9-46A8-81DB-C845CE21CAEA
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 103811004 sectors (49.5 GiB)

Number Start (sector) End (sector) Size Code Name


nコマンドを実行した後、パーティション番号、先頭セクター、最終セクター、パーティションタイプを指定し、EFIシステムパーティション(ESP)を1つめのパーティションとして作成します。ます。

First SectorLast Sectortype(Hex code or GID)を設定します。パーティションサイズを推奨値である512MB、パーティションタイプは必ずEFI System(ef00)にします。HexCode or GIDは、Lコマンドで確認できます。

Command (? for help): n

Enterキーを押します。パーティション番号「1」が指定されます。

Partition number (1-128, default 1):    // Enterキーを押す

Enterキーを押します。ドライブ全体で利用できる先頭のセクターが自動的に先頭セクターとして設定されます。

First sector (34-104857566, default = 2048) or {+-}size{KMGTP}:     // Enterキーを押す

「512M」と入力してEnterキーを押します。サイズが512Mになるように最終セクターが設定されます。

Last sector (2048-104857566, default = 104857566) or {+-}size{KMGTP}: 512M

パーティションタイプを16進数番号のリストを表示します。

Current type is 'Linux filesystem'

Hex code or GUID (L to show codes, Enter = 8300): L // HexCode or GIDの確認


実行結果

0700 Microsoft basic data  0c01 Microsoft reserved    2700 Windows RE

3000 ONIE boot 3001 ONIE config 3900 Plan 9
4100 PowerPC PReP boot 4200 Windows LDM data 4201 Windows LDM metadata
... // 中略
af01 Apple RAID af02 Apple RAID offline af03 Apple label

Press the <Enter> key to see more codes:    // Enterキーを押す


実行結果

af04 AppleTV recovery      af05 Apple Core Storage    af06 Apple SoftRAID Statu

af07 Apple SoftRAID Scrat af08 Apple SoftRAID Volum af09 Apple SoftRAID Cache
b300 QNX6 Power-Safe bc00 Acronis Secure Zone be00 Solaris boot
... // 中略
e101 ONIE config ea00 Freedesktop $BOOT eb00 Haiku BFS
ed00 Sony system partitio ed01 Lenovo system partit ef00 EFI System
ef01 MBR partition scheme ef02 BIOS boot partition f800 Ceph OSD
f801 Ceph dm-crypt OSD f802 Ceph journal f803 Ceph dm-crypt journa
f804 Ceph disk in creatio f805 Ceph dm-crypt disk i fb00 VMWare VMFS
fb01 VMWare reserved fc00 VMWare kcore crash p fd00 Linux RAID

パーティションタイプEFI Systemに対応する16進数番号ef00を入力してEnterキーを押します。パーティションタイプがEFI Systemに設定されます。

Hex code or GUID (L to show codes, Enter = 8300): ef00


実行結果

Changed type of partition to 'EFI System'


pコマンドで現在のパーティションを表示します。

Command (? for help): p


実行結果

Disk /dev/sda: 104857600 sectors, 50.0 GiB

Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 8EC9B916-FFB9-46A8-81DB-C845CE21CAEA
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 103811004 sectors (49.5 GiB)

Number Start (sector) End (sector) Size Code Name
1 2048 1048576 511.0 MiB EF00 EFI System


2つめのパーティションは、ルートファイルシステムのパーティションとして設定します。今回は、EFIシステムパーティション以外のパーティションは分割しないことにします。また、パーティションタイプはLinuxファイルシステムをまとめてみましたに記載されているようなさまざまなLinuxファイルシステムから選べます。ここでは、もっとも一般的なLinuxファイルシステムであるExt4にします。結果として、Enterキーを押していけばルートファイルシステムのパーティションが設定されます。

Command (? for help): n

Enterキーを押します。パーティション番号が2に設定されます。

Partition number (2-128, default 2):    // Enterキーを押す

Enterキーを押します。既存のパーティション(EFIシステムパーティション)の直後のセクターが自動的に先頭セクターとして設定されます。

First sector (34-104857566, default = 1050624) or {+-}size{KMGTP}: // Enterキーを押す

Enterキーを押します。ドライブ全体の最終セクターが自動的に最終セクターとして設定されます。

Last sector (1050624-104857566, default = 104857566) or {+-}size{KMGTP}: // Enterキーを押す

Enterキーを押します。パーティションタイプが自動的にLinux filesystemに設定されます。

Current type is 'Linux filesystem'

Hex code or GUID (L to show codes, Enter = 8300): // Enterキーを押す


実行結果

Changed type of partition to 'Linux filesystem'


再び、パーティションテーブルを表示します。

Command (? for help): p


実行結果

Disk /dev/sda: 104857600 sectors, 50.0 GiB

Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 8EC9B916-FFB9-46A8-81DB-C845CE21CAEA
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 104857566
Partitions will be aligned on 2048-sector boundaries
Total free space is 4061 sectors (2.0 MiB)

Number Start (sector) End (sector) Size Code Name
1 2048 1048576 511.0 MiB EF00 EFI System
2 1050624 104857566 49.5 GiB 8300 Linux filesystem


問題がなければ、wコマンドを実行します。設定されたパーティションテーブルが実際に反映され、gdiskが終了します。

Command (? for help): w

既存のデータが削除されることの確認を求められるので、yを入力します。

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING

PARTITIONS!!

Do you want to proceed? (Y/N): y

パーティションテーブルが書き込まれ、シェルに戻ります。


実行結果

OK; writing new GUID partition table (GPT) to /dev/sda.

The operation has completed successfully.

シェルでlsblkコマンドを実行し、改めてデバイスとパーティションを表示します。作成したパーティションsda1とsda2が表示されていることを確認してください。これらのパーティションはこの後の作業で/dev/sda1/dev/sda2と指定します。

root@archiso ~ # lsblk


実行結果

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

loop0 7:0 0 446.8M 1 loop /run/archiso/sfs/airootfs
sr0 11:0 1 556M 0 rom /run/archiso/bootmnt
sda 254:0 0 50G 0 disk
├─sda1 254:1 0 511M 0 part
└─sda2 254:2 0 49.5G 0 part


ファイルシステムの構築

作成したパーティションごとにフォーマット(初期化)し、ファイルシステムを構築します。sda1はEFIシステムパーティションとし、sda2にルートファイルシステムを構築します。

EFIシステムパーティションには、mkfs.fatコマンドでFAT32形式のファイルシステムを構築します。FATはMS Windowsなどで用いられてきたファイルシステムの総称で、MS DOSやWindows 95で使われたFAT16やWindows 98で使われたFAT32などが含まれます。-F32はFAT32を指定します。

root@archiso ~ # mkfs.fat -F32 /dev/sda1


実行結果

mkfs.fat 4.1 (2017-01-24)


ルートファイルシステムはmkfs.ext4コマンドを用いて、EXT4形式で構築します。ドライブのサイズが大きい場合は、ちょっと時間がかかります。

root@archiso ~ # mkfs.ext4 /dev/sda2


実行結果

mke2fs 1.44.1 (24-Mar-2018)

Creating filesystem with 12975867 4k blocks and 3244032 inodes
Filesystem UUID: c00d997e-3b71-4e59-89fc-aa47d478cd33
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424

Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done



ファイルシステムのマウント

構築したファイルシステムをマウントし、データの読み書きができるようにします。

まず、ルートファイルシステムをマウントします。マウントするディレクトリーは、/mntにします。/mntは、インストールメディアからブートしたArch Linuxによりすでに作成されたディレクトリーです。ルートファイルシステムは構築直後完了直後で空なので、マウント完了後の/mntの下も空になります。

root@archiso ~ # mount /dev/sda2 /mnt

なお、/mntにマウントするパーティションがsda2であり、sda1ではないことに注意してください。

次に、EFIシステムパーティションをマウントします。マウントするディレクトリーは、/mnt/bootです。

/mnt/bootを作成します。

root@archiso ~ # mkdir /mnt/boot

EFIシステムパーティションを/mnt/bootにマウントします。

root@archiso ~ # mount /dev/sda1 /mnt/boot

マウントが正常にできたかどうかを、mountコマンドで確認します。

root@archiso ~ # mount | grep /mnt


実行結果

/dev/sda2 on /mnt type ext4 (rw,realtime)

/dev/sda1 on /mnt/boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)

mountコマンドを引数なしで実行すると、現在マウントされているファイルシステム(パーティションなど)が一覧表示されます。パイプ(|)とgrepコマンドで、/mnt以下のディレクトリーにマウントされているパーティションを絞り込んで表示します。

sda2が/mnt、sda1が/mnt/bootにマウントされていることを確認してください。もし誤ったマウントをしていた場合は、次のコマンドで/mnt以下をすべてアンマウントできます。


参考

root@archiso ~ # umount -R /mnt



baseグループパッケージのインストール

マウントが完了したら、ルートファイルシステムへbaseグループのパッケージをインストールします。baseグループのパッケージは、Arch Linuxを使う上で最小限必要とされている基本的なパッケージ群です。コピーは、ミラーリストを設定してから実行します。


ミラーリストの設定

Arch Linuxでは、pacmanを用いてパッケージを管理しており、インストール時のbaseグループなどのパッケージのダウンロードとインストールにpacmanを内部的に用います。pacmanは、コピー元のサーバーをミラーリスト設定ファイル/etc/pacman.d/mirrorlistで決定しています。このファイルは初期設定では世界中のミラーサーバーが記述されているため、遠方のサーバーに接続されてダウンロードに時間がかかってしまいます。

そこで、ミラーリスト設定ファイルを編集し、近くにあるミラーサーバーを使うようにします。日本国内の場合、日本のサーバーを一番上に移動させるか、日本以外のサーバーを削除します。わたしは、日本以外のサーバーはすべて削除して次のようなファイルにしています。


/etc/pacman.d/mirrorlist

##

## Arch Linux repository mirrorlist
## Filtered by mirror score from mirror status page
## Generated on 2018-04-01
## Modified 2018-09-04 by j8takagi
##

## Japan
Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
## Japan
Server = http://archlinux.asia-east.mirror.zoidplex.net/$repo/os/$arch
## Japan
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch


Arch Linuxのインストール時にはファイル編集のために、vi、vim、nanoなどのテキストエディタが利用できます。もともとの世界中のサーバーが記載されたファイルを上のような形に編集するのは、viの面白い練習課題だと思います。


pacstrapの実行

ミラーリスト設定ファイルを編集したら、pacstrapコマンドを実行します。さまざまな内容が表示され、pacmanのbaseグループパッケージがインストールされます。途中で、インストールするパッケージを選択するように聞かれる場合もあるので、画面の案内に従ってください。baseグループに含まれるパッケージは、Group Details - base (x86_64) - Arch Linuxで確認できます。

root@archiso ~ # pacstrap /mnt


実行結果

==> Creating install root at /mnt

==> Installing packages to /mnt
:: Synchronizing package databases...
...


fstabの設定

/etc/fstabは、Linux(と、そのほかのUnix系OS)がブートするときなどにマウントするファイルシステムを決める重要な設定ファイルです。pacstrapは、実行時に/mnt/etc/fstabを次の内容で作成します。


/mnt/etc/fstab

# Static information about the filesystems.

# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>


/mnt/etc/fstabは後でarch-chrootするときに/etc/fstabとなります。ただし、このままでは実質的に何も設定されておらず、Arch Linuxは正常にブートできません。


genfstabの実行

Arch Linuxのインストール時はgenfstabコマンドで、/mnt以下にマウントされたファイルシステムを反映し、fstabファイルを作成できます。

# genfstab -U /mnt >>/mnt/etc/fstab

実行後の/mnt/etc/fstabの一例です。


/mnt/etc/fstab

# Static information about the filesystems.

# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>
# /dev/sda2
UUID=c00d997e-3b71-4e59-89fc-aa47d478cd33 / ext4 rw,relatime,data=ordered 0 1

# /dev/sda1
UUID=2A0A-CBEA /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2


なお、genfstab-Uオプションは、パーティションを/dev/sda1のようなデバイス名ではなく、UUID=2A0A-CBEAのようなUUIDで指定することを意味します。/dev/sda1などのデバイス名は、新しい周辺機器の接続などといったなにかのはずみで別のパーティションやデバイスに代わってしまい、ブートできないトラブルが発生することがあります。UUIDでパーティションを指定すればそうしたトラブル発生を防げます。


ブートローダーの設定

インストールしたLinuxなどのOSをブートするためには、ブートローダーの設定が必要です。Linuxでのブートローダーの設定にはGRUBが用いられることが一般的でした。しかし最近は、ブートモードがUEFIの場合にはsystemdに含まれるsystemd-bootも多く用いられています。

ここでは、systemd-bootを用いてブートローダーを設定します。


arch-chrootの実行

arch-chrootを実行してchrootし、/(ルートディレクトリー)を/mntにします。

root@archiso ~ # arch-chroot /mnt

chrootにより、/mnt、すなわちドライブにインストールされた設定が用いられるようになります。一方で、今まで使っていたインストールメディアのプログラムやデータにはアクセスできなくなります。たとえば、ここまで使ってきたpacstrapgenfstabarch-chrootはドライブにはインストールされていないため、使えなくなります。

chrootは、今回のようなインストール時のほか、システム復旧時にも用いられます。また、ftpやDNSなどのセキュリティを確保するために用いられる場合もあります。さらに、近年多く用いられているDockerはchrootを進化させたものでもあります。


systemd-bootのインストール

bootctlは、systemd-bootを用いたブートローダー管理に用いるコマンドです。bootctl installでsystemd-bootのブートローダーをEFIシステムパーティションにインストールします。

[root@archiso /]# bootctl install


実行結果

Created "/boot/EFI".

Created "/boot/EFI/systemd".
Created "/boot/EFI/BOOT".
Created "/boot/loader".
Created "/boot/loader/entries".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/boot/EFI/systemd/systemd-bootx64.efi".
Copied "/usr/lib/systemd/boot/efi/systemd-bootx64.efi" to "/boot/EFI/BOOT/BOOTX64.EFI".
Created EFI boot entry "Linux Boot Manager".


ローダーの設定

systemd-bootを用いる場合、/boot/loader/loader.confファイルでローダーを設定します。ローダーでは、ブート時に表示されるブートメニュー画面について設定します。viなどのテキストエディタで、/boot/loader/loader.confを次のように編集し、保存します。


/boot/loader/loader.conf

default arch

timeout 3
editor no

この設定では、デフォルトで選択されるローダーエントリーをarchにしています。ブート時に、対応するローダーエントリーファイルarch.conf/boot/loader/entriesディレクトリーにあることが必要になります。

timeoutは、ブートメニュー画面が表示される秒数を指定します。timeout=0とすると、Spaceキーを押さないとブートメニュー画面が表示されなくなります。

editorは、ブートメニュー画面でカーネルパラメーターの編集ができるかどうかを指定します。セキュリティのため、editor=noが強く推奨されています。


ローダーエントリの追加

ローダーの設定に対応するローダーエントリーファイル/boot/loader/entries/arch.confを作成します。

このファイルでは、titleでOS(Linuxディストリビューション)などの名前、linuxでlinuxファイル、initrdで起動時に用いられるRAMディスクファイルを指定し、さらにoptionsでルートファイルシステム/dev/sda2を指定します。linuxファイル、RAMディスクファイル、ルートファイルシステムの設定は、Linuxをブートするために必須です。

linuxファイルとRAMディスクは、pacstrapの実行のなかでlinuxパッケージがインストールされるときに/bootディレクトリに作成されます。また、ローダーエントリーファイルでは/boot/と記述します。

実在するlinuxファイルのパスを、sedで/bootから/に置換し、ローダーエントリーファイルに入力します。

[root@archiso /]# ls /boot/vmlinuz-linux | sed s~/boot~~ >/boot/loader/entries/arch.conf

実在するRAMディスクファイルのパスを、sedで/bootから/に置換し、ローダーエントリーファイルに追加入力します。

[root@archiso /]# ls /boot/initramfs-linux.img | sed s~/boot~~ >>/boot/loader/entries/arch.conf

optionsでのルートファイルシステム/dev/sda2の指定では、/etc/fstabと同様の理由でUUIDを用います。/dev/sda2のUUIDをローダーエントリーファイルに入力します。

blkidは、ドライブなどのデバイス情報をさまざまな形式で出力します。-o exportは行ごとに「<設定項目>=<設定値>」の出力形式を指定するオプションです。blkidコマンドではほかの情報も出力されるので、パイプとgrepで絞り込みます。^UUIDは、行の先頭が「UUID」ではじまることをあらわす正規表現です。

[root@archiso /]# blkid -o export /dev/sda2 | grep ^UUID >>/boot/loader/entries/arch.conf

その結果、ローダーエントリーファイル/boot/loader/entries/arch.confは次のようになります。UUIDは、/etc/fstabのルートファイルシステムに指定したのと同じ値です。


/boot/loader/entries/arch.conf

/vmlinuz-linux

/initramfs-linux.img
UUID=c00d997e-3b71-4e59-89fc-aa47d478cd33

このファイルをテキストエディタで編集し、titleの行を追加するとともに、入力されている内容がlinux、initrd、optionsの設定値になるように編集し、保存してください。optionsでのルートファイルシステムの指定では、パーティションを読み書き可能な状態にすることを表すrwを追加します。


/boot/loader/entries/arch.conf

title   Arch Linux

linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=UUID=c00d997e-3b71-4e59-89fc-aa47d478cd33 rw

bootctl listコマンドでローダーとローダーエントリーの設定が正しく反映されているかどうかを確認できます。ただし、linuxやinitrdのファイルやoptionsのUUIDが実在するかどうかはチェックされません。

[root@archiso /]# bootctl list


実行結果

Available boot entries:

title: Arch Linux (default)
linux: /vmlinuz-linux
initrd: /initramfs-linux.img
options: root=UUID=c00d997e-3b71-4e59-89fc-aa47d478cd33 rw


インストールの終了と再起動


arch-chrootの終了

ブートローダーの設定が完了したら、exitコマンドでchrootを終了します。

[root@archiso /]# exit


作業記録の終了

scriptコマンドで作業を記録していた場合は、もういちどexitコマンドを実行して終了します。

[root@archiso /]# exit


実行結果

Script done, file is typescript



作業記録ファイルのドライブへのコピー

作業を記録していた場合は、記録していたファイルをドライブにコピーします。ここでは、ドライブの/rootディレクトリーにarch_linux_install.logというファイル名で保存されるようにしています。

[root@archiso /]# cp typescript /mnt/root/arch_linux_install.log

コピーしないと、コンピューターを再起動したときに作業記録はなくなります。


再起動

コンピューターを再起動します。

[root@archiso /]# reboot

起動が開始するまでに、インストールメディアを取り外してください。

インストールに成功していて正常に起動できた場合は、Arch Linuxのログイン画面が表示されます。

VirtualBox_Arch_23_10_2018_11_52_15.png

ここまでの手順で設定した場合は、パスワードやユーザーはなにも設定していないので、ユーザー名root、パスワードなしでログインできます。お疲れ様でした! QEMU/KVMやVirtualBoxの場合、この時点でスナップショットを作成しておくのもいいと思います。

うまくいかなかった場合は、作業記録などをもとに原因を探ってください。


インストール後の作業

ここまでの作業では、通常はインストール時に行うさまざまな設定を省略しています。参考資料などをもとに、環境や用途に応じた設定をしてください。多くの場合、時間や言語などの設定と、ユーザーの作成、ネットワークの設定と設定は必要になるでしょう。



  • ロケールとキーボードの設定


    • キーボードレイアウトの設定

    • ロケールの設定




  • 日時の設定


    • タイムゾーンの設定

    • NTPサーバーとの同期の設定



  • ユーザーの作成と設定


    • ユーザーの作成 useradd -m -G wheel <username>

    • sudoの設定 visudo

    • rootユーザーのロック



  • ホスト名の設定 hostnamectl set-hostname <hostname>

  • ネットワークの設定


    • systemd-networkdの設定と起動

    • systemd-resolvedの設定と起動



  • swapの設定

  • sshのインストールと設定

  • デスクトップ環境の設定


    • X Window Systemのインストールと設定

    • デスクトップ環境のインストールと設定

    • フォントの設定

    • 日本語入力システムのインストールと設定



  • LTS版カーネルのインストールと設定

Arch LinuxなどのOSのインストールとシステム設定の作業は、モジュール化することを提案します。モジュール化とは、複雑なものごとを、一連のものごとに分割して考えることを意味し、プログラム作成時などに特に重要な考え方です。インストール作業はモジュール化することで、作業の理解と効率化につながるはずです。ここまで述べた最小限インストールの手順が、モジュール化のよい道しるべになってほしいです。


参考資料

Arch Linuxインストール時に真っ先に参照すべきは、ArchWikiにあるインストールガイドです。

ほかにも、ブログなどにArch Linuxのインストールについての記事があります。私は、次の記事が役立ちました。


Qiitaの記事

Qiita上にも、すでに多くの解説記事があります。私は特に、1. が役立ちました。


  1. VirtualBoxにArchLinuxをインストールする

  2. arch linux + LVM + UEFI + GPT なインストール手順

  3. ArchLinuxをGPTなUEFIのGRUBで起動する

  4. Arch Linux インストール俺々式完全版

  5. ArchLinuxのインストール(3つのブート方式ごとの設定)

  6. ArchLinuxを久々にインストールしたらハマった話


まとめ

今回実行したコマンドをまとめると、次のようになります。


  • script

  • gdisk /dev/sda

  • mkfs.fat -F32 /dev/sda1

  • mkfs.ext4 /dev/sda2

  • mount /dev/sda2 /mnt

  • mkdir /mnt/boot

  • mount /dev/sda1 /mnt/boot

  • vi /etc/pacman.d/mirrorlist

  • pacstrap /mnt

  • genfstab -U /mnt >>/mnt/etc/fstab

  • arch-chroot /mnt

  • bootctl install

  • vi /boot/loader/loader.conf

  • ls /boot/vmlinuz-linux | sed s~/boot~~ >/boot/loader/entries/arch.conf

  • ls /boot/initramfs-linux | sed s~/boot~~ >>/boot/loader/entries/arch.conf

  • blkid -o export UUID /dev/sda2 | grep ^UUID >>/boot/loader/entries/arch.conf

  • vi /boot/loader/entries/arch.conf

  • exit

  • exit

  • cp typescript /mnt/root/arch_linux_install.log