Arch Linux インストールの流れ

BIOS/MBRUEFI/GPTのうち、より優れたUEFI/GPTを使う。


全体の流れ

1. インストール作業のための一時的な設定

2. パーティション分け

3. Linux自体のインストール

(chroot)

 4. 今後使う上で必要な設定

 5. 次回起動時のブートローダのインストールと設定

(exit)

6. 再起動

7. 諸設定

Arch Linuxのインストールメディアは牛肉屋を営む牛のようなものである。牛が仕入れて客に提供するのは牛肉だが、牛が自らを捌いて売るわけではない。同様に、Arch Linuxのインストールメディアはインターネット上からArch Linuxをダウンロードしてコンピュータにインストールするが、インストールメディアの中のArch Linuxがコピーされるわけではない。また、ユーザーは初めのうちは売る方の牛に指示を出すが、途中からは売られた方の牛を調理するようになる。この切り替えがchrootである。

インストール作業の中でテキストエディタviが登場する。慣れないうちは操作が大変なのでnanoを代わりに使ってもよい。ただ今後のためにviを使うことを推奨する。

以上のことを押さえた上でインストール作業に取り掛かる。

インストールメディアの入ったUSBメモリーを刺し、有線でインターネットに繋ぎ、PCの電源ボタンを押して即座にF2、Boot List Optionで[UEFI]、Boot Option #1で[UEFI: (USBメモリの名前)]を選択、Save Changes and Reset。表示される選択肢の中からArch Linux archiso x86_64 UEFI USBを選択して起動、Welcome to Arch Linux! に続いてコンソールに文字が流れる。

tty1でroot自動ログインが行われ、入力を受け付ける状態になる。

archiso login: root (automatic login)
root@archiso ~ # _

1. インストール作業のための一時的な設定

Dvorakユーザなのでloadkeysを使って切り替える。

# loadkeys dvorak-programmer.map

UEFIブートであることを確認する。

# ls /sys/firmware/efi

pingを使ってインターネット接続を一応確認する。

# ping -c3 www.google.com

2. パーティション分け

ディスク/dev/sdaのパーティションを決める。UEFIなのでgdiskまたはcgdiskを使う。私はどちらかというと対話型のgdiskの方が使いやすいように感じた。/dev/sdaはコマンドライン引数と標準入力のどちらでも指定できる。

# gdisk /dev/sda

コマンド入力を受け付けるようになる。

oで新しいパーティションテーブルを作成し、ここにパーティションを書いてゆく。

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

UEFIの場合まず/boot用のEFI System パーティション(ESP)を作る必要がある。Hex CodeとしてEF00を指定することでLinux filesystemではなくEFI systemとし、512M用意する。デフォルトのままのところは何も打たずにエンターを押せば良い。

Command (? for help): n
Partition number (1-128, default 1):
First sector (〜) or {+-}size{KMGTP}:
Last sector (〜) or {+-}size{KMGTP}: +512M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): EF00
Changed type of partition to 'EFI System'

残りはすべて/用のrootパーティションとした。

Command (? for help): n
Partition number (1-128, default 2):
First sector (〜) or {+-}size{KMGTP}:
Last sector (〜) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

メモリが1GB以下だとswapも作ることが多いが、幸い4GB(十分!)もあったので作らなかった。swapを作るとしたらHex codeは8200になる。

そしてwriteで作成したパーティションテーブルをハードディスクに書き込む。

Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!!
Do you want to proceed? (Y/N): Y

これで/dev/sda1(後の/boot)、/dev/sda2(後の/)の2つのパーティションが作られた。

ESPはF32でフォーマットする。

# mkfs.vfat -F32 /dev/sda1

他はext4でフォーマットする。

# mkfs.ext4 /dev/sda2

swapを作るならここでmkswap /dev/sdaXとswapon /dev/sdaXを行う。

/dev/sda2(後の/)を/mnt自体にマウントする。

# mount /dev/sda2 /mnt

/dev/sda1(後の/boot)は/mnt/bootを作ってマウントする。

# mkdir /mnt/boot
# mount /dev/sda1 /mnt/boot

3. Linux自体のインストール

viを起動してミラーリスト(どのサーバーから優先的に落とすか)を設定する。

# vi /etc/pacman.d/mirrorlist

日本在住の場合Japanを検索して一番上に持ってくる。キーボード操作としては「/Japan(エンター)」で検索、「2dd{p」でコピー&ペースト、「n」と「N」で次を検索&前を検索、終わったら「:wq(エンター)」で保存&終了。

pacstrapでLinuxをインストールする。

$ pacstrap -i /mnt base base-devel

エンターを押し続け、言われたものを全てインストールする。

fstabを生成する。

genfstab /mnt >> /mnt/etc/fstab

次回起動時に/mntが/、/mnt/bootが/bootになる。ここでfstabが書き込まれた/mnt/etc/fstabを確認する(cat /mnt/etc/fstab)と、/dev/sda2がext4で/に、/dev/sda1がvfatで/bootになるという趣旨の表があるはずだ。genfstabに-Uオプションを付けていると左の列がUUID=(数字とアルファベットの羅列)になる。

肉屋で牛肉を買い終えた。このあとは肉屋を出て、受け取った牛を調理する。

# arch-chroot /mnt

家に帰って牛肉を調理台に置いた。

4. 今後使う上で必要な設定

viで/etc/locale.genを開く。

# vi /etc/locale.gen

「/en_US」などとして「n」「N」を使いながら「# en_US.UTF-8 UTF-8」と書かれた行を探し、「0x」でコメントアウト。同様に「/ja_JP」などとして「# ja_JP.UTF-8 UTF-8」を探し、「0x」でコメントアウト。「:wq」で保存終了。そして変更を反映。

# locale-gen

locale.confで言語を設定する。

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


次回起動時のキーボードレイアウトとフォントを設定する。

# vi /etc/vconsole.conf

「i」で入力を開始、Escで入力を終了。一例:

KEYMAP=dvorak-programmer.map
FONT=Lat2-Terminus16

場所の設定。

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

時刻の設定。

# hwclock -u -w

ホスト名の設定。

# echo (ホスト名) > /etc/hostname

インターネット接続にはdhcpcdを使う。systemctlコマンドを使い、起動時にdhcpcdが自動でインターネットに接続するようにする。systemctlの後に続けてオプションを指定する:その場で立ち上げるにはstart、その場で止めるにはstopを使い、enable↔disableは起動したときに立ち上がるかどうかを選ぶ。次回起動時に繋がらなかった場合はまたsystemctlを使ってdhcpcdの状態を確認する。

# systemctl enable dhcpcd

パスワードを設定する。

# passwd

5. 次回起動時のブートローダのインストールと設定

Arch Linux自体の設定は完了した。現在Arch Linuxは起動した状態であり、ここからこのOSをずっと起動したままで使い続けることが可能である。いわば暖炉の中で薪が燃えている状態である。あなたはその火を使ってさまざまなことができる。

しかしあなたはまだマッチを持っていない。今燃えている火は、USBメモリのarchisoが点火してくれた火である。暖炉と薪は整ったが、マッチが無いことには火を付けることができない。

マッチとなるのはブートローダである。ブートローダには数種類あるが、今回はsystemd-boot(旧称gummiboot)を使う。インストール。

# bootctl --path=/boot install

この後いくつかの設定を行い、USBを抜いて再起動する。設定に失敗すると次の再起動ができなくなる。その場合は慌てずUSBを挿し直して起動し、/dev/sda1と/dev/sda2のマウントを上と同じように行い、ここからやり直す。

設定するのは/boot/loader/entriesディレクトリと/boot/loader/loader.confファイルの2つである。

まず/boot/loader/entriesに移動する。

# cd /boot/loader/entries

/boot/loader/entriesには起動モードの選択肢1つごとに1つのファイルを拡張子confで作る。arch.conf(普段)とarch-fallback.conf(Fallback、何かあったとき用)の2つを用意する。

ルートパーティション/dev/sda2の固有PARTUUIDを調べる。

# blkid -s PARTUUID -o value /dev/sda2

arch.confを編集して次のようにする。

title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=PARTUUID=(PARTUUID) rw

PARTUUIDのところにblkidで調べたPARTUUIDを書く。長い文字列なので、メモするのが面倒ならblkidの最後に> arch.confと付け加えておくとPARTUUIDが表示される代わりにarch.confに出力される。

arch-fallback.confは

title Arch Linux Fallback
linux /vmlinuz-linux
initrd /initramfs-linux-fallback.img
options root=PARTUUID=(PARTUUID) rw

次に、既に存在する/boot/loader/loader.confを編集する。

# cd ..
# vi loader.conf

このファイルに一行ずつ設定を書いていく。必ず書かなければならないのは「editor no」の一行である。これを書かないと、「スペースキーを押しながら起動→eを押してinit=/bin/bashを書き加えた状態でArch Linuxを起動→パスワード無しでroot権限が手に入る!ガハハ!」なのでまずい*1。何も書かないとデフォルトでeditor yesになってしまう。

僕は、電源ボタンを押したら即座にArch Linux(fallbackでない方)が選択されて起動するようにした。そのためには「タイムアウト:0」と「デフォルト:Arch Linux」の2つを指定する。タイムアウトの方は何も書かなくても自動で0になる。書くとしたら「timeout 0」。デフォルトのローダは「default (ファイル名)」と書いて指定する。ファイル名のところにはさっき作ったファイル名arch.confの拡張子を除いた部分(つまりarch)を書く。「i」で入力開始、Escで入力終了。

最終的にloader.confの中身は次のようになる:

editor no
default arch

「:wq」で保存終了。他の設定例:

editor no
timeout 3
default arch

この場合,起動してから3秒間選択肢が表示され、その間に何もしないとArch Linuxが起動する。ここで表示される選択肢をtimeout 0でも表示するには起動時にスペースキーを押す。

6. 再起動

exitしてUSBを抜いて再起動。

# exit
# reboot

起動したら

login: root
password: (パスワード)

でログイン。

7. 諸設定

ユーザを追加する。

# useradd -m -G wheel (ユーザ名)

作ったユーザのパスワードを設定する。

# passwd (ユーザ名)

sudoersファイルを設定する。

# visudo

# %wheel ALL=(ALL) ALL と書かれた行を探し、コメントアウト

さらに一度入力したパスワードが一定時間有効なままなのが嫌なので

Defaults timestamp_timeout=0

を追記した。別に構わないならしなくて良い。

そうしたら今作ったユーザでログインし直す。

# exit

*1:やってみた。Welcome to Arch Linux! の代わりに[root@archlinux /]# と表示され、パスワードが変更できた。