Arch Linux + rEFInd をインストールする(2015/1/14)


（これは以前、別のブログに私がまとめた記事を移植したものです。内容がやや古いかもしれませんが、大きなズレはないと思います。）
　　
　ThinkPad T420sが届いたので、Linuxをインストールしていく。Ubuntuを入れる予定だったが、せっかくなので今流行のArch Linuxに挑戦してみることにした。Linuxを使う以上Linuxくささは必要だ。公式マニュアルやブログを読みながら、試行錯誤している間にインストールできたのですが、試行錯誤しすぎて何をしてきたのか分からなくなったのでブログに記録していこうと思う。また各操作が謎の儀式にならないよう、なるべく自分なりの解釈で説明も加えてみた。

#### 参考サイト
以下のサイトがなければ、OSインストールまで辿りつけなかったと思う。心から感謝したい。自分の手順も下記サイトと似ていますが、公式手順と照らし合わせながら取捨選択しているので全て同じではない。また今回はブートローダーにrEFIndを選んだのでその点に関してはオリジナルである。

* [公式インストールガイド](https://wiki.archlinux.org/index.php/Installation_guide#Installation)
* [Arch Linux インストール (OSインストール編) | UEFI, GPT, Gummiboot, 2014.02.01でインストール](http://archlinux-blogger.blogspot.jp/2014/02/arch-linux-20140201uefi-gpt-gummiboot.html)
* [Arch Linux インストール から Xfce 快適環境を構築するまで](http://qiita.com/macchaberrycream/items/1dfabe8b710dc638e3f9#%E3%83%99%E3%83%BC%E3%82%B9%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
* [Arch Linuxインストールメモ （archlinux-2013.09.01）](http://extrea.hatenablog.com/entry/2013/09/16/020230)

### Arch Linux + rEFIndインストール手順

Ubuntu、Mint、Fedoraなどなど、最近のディストリビューションから使い始めたひとは、「これすべて手打ちで実行するの？」と面食らうかもしれませんが頑張りましょう。
グラフィカルなインストール画面の裏側で、こういったコマンドが実行されたいるんだなと学ぶことも多いと思います。
今回ThinkPad T420sにインストールしたが、まとめた手順はマシンに依存しないはずです。

### インストールの下準備
#### キーボードレイアウトの設定
日本語キーボードの人は、以下のコマンドを実行。英語キーボードはの人は何もしなくて良い。
``` sh
$ loadkeys jp106
```

#### インターネット接続

LANケーブルをついないでいる人は特に設定は必要ない。
無線LANを使う人は、wifi-menuをつかうと良いです。

インターネットに接続出ているかpingコマンドで確認する。

```sh 
$ ping www.google.com
```

#### パーティショニング
　ブートローダーはrEFIndを使用するのでUEFI領域を作成する。メモリ8GBなのでswapは16GB。のこりはすべて「/」(ルートWindowsのC:\)に割り振る。

　swapのサイズは、RAMの２倍設定する。swapというとメモリが足りなくなったときに緊急でメモリ代わりに使われる領域だが、ハイバーネート(Windowsの休止状態)する際にメモリの中身を書き出す場所としても使われる。
メモリの中身をすべて書き出すので、当然メモリ以上のサイズが必要になる。RedHatのサイトでもRAMと同じサイズ〜２倍が薦められている。

[⁠16.17.5. パーティション設定に関する推奨](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s2-diskpartrecommend-ppc.html)

* /dev/sda1: /boot (1 GB, UEFI)
* /dev/sda2: swap (16 GB, swap)
* /dev/sda3: / (残りすべて)

（/homeとは/optとかにパーテションを振り分ける人もいますが、あれはハードディスクやSSDが複数個あるときに意味があると思っている。ラップトップに２個、３個ディスクを積んでいるなら試してみるのも良いとおもう。）

```sh
$ gdisk /dev/sda
Command (? for help): o (新しいパーティションテーブルを作る。現在のパーティションは削除される)

Command (? for help): n
Partition number : 1
First sector: (何も入力せずにリターン)
Last sector: +1G (1GB割り振る)
Hex code or GUID: ef00 (ef00は、UEFI System partition用のパーティション)

Command (? for help): n
Partition number: 2
First sector:
Last sector: +16G (16GB割り振る)
Hex code or GUID: 8200 (swap用は8200)

Command (? for help): n
Partition number: 3
First sector:
Last sector: (何も入力しないと残りすべて)
Hex code or GUID: (デフォルトが8300)

Command (? for help): w
Do you want to proceed?: Y

```

最後のに念のため、パーティションの構成を確認しておくとよい。

```sh
$ gdisk -l /dev/sda
```

#### ファイルシステムのフォーマット

ディスクの領域を区切っただけなので、それぞれフォーマットしていく。
EFPはfat32, swapはswap, ルートはext4でフォーマとする。

* /dev/sda1: fat32 (ESP)
* /dev/sda2: swap (swap)
* /dev/sda3: ext4 (root)

```sh
$ mkfs.fat -F32 /dev/sda1
$ mkswap /dev/sda2
$ swapon /dev/sda2
$ mkfs.ext4 /dev/sda3
```

#### マウントする
フォーマットしたファイルシステムにLinuxをインストールしていくわけだが、インストール用OS(今コマンドを叩いている画面)が、まだ接続していないので読み書きできない。読み書きできる状態にするために、それぞれマウントしていく。swapには何もインストールする必要がないのでマウントしない。

```sh
$ mount /dev/sda3 /mnt (ルートを、/mntにマウントする)
$ mkdir /mnt/boot (ESPは、このディレクトリにマウントする)
$ mount /dev/sda1 /mnt/boot
```

### OSインストール
#### pacmanのミラーリスト変更
pacmanのミラーリストにtsukubaなど日本サーバーがあるので、それをリストの一番上に移動する。
OSインストールはインターネットからダウンロードしながら進むのだが、リストの一番上が海外サーバーのままだとダウンロードに時間がかかってしまう。

```sh
$ nano /etc/pacman.d/mirrorlist
```

> \#\# Score: 1.7, Japan
> Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch

#### パッケージのインストール
pacstrapを使って/mntにマウントしたパーティションにOSをインストールしていく。
ここでは必要最低限のパッケージだけインストールする。

```sh
$ pacstrap /mnt base base-devel
```

####　fstabの設定
ファイルシステムをOS起動時に自動的にマウントするようfstabを設定する

```sh
$ genfstab -U -p /mnt >> /mnt/etc/fstab
```

#### chrootでルート・ディレクトリを変更する
今まではインストール用OSのコマンド(USBメモリ内のデータ)を使って、ドライブに対してOSに必要なデータを書き込んでいた。以降はインストールしたArch Linuxのコマンドを使って作業を進める。arch-chrootコマンドを使うと、ルートディレクトリの場所を一時的に変更できるので、インストール用OSからArch Linuxへと、rootユーザでログインしたような状態になる。

```sh
$ arch-chroot /mnt /bin/bash
```

#### ロケールの設定
/etc/locale.genのen_US.UTF UTF-8とja_JP.UTF UTF-8のコメントを外し、locale-genコマンドを実行すると、英語環境と日本語環境に必要なデータを生成してくれます。

```sh
$ nano /etc/locale.gen
```

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

```sh
$ locale-gen
```

英語環境で起動するか日本語環境できどうするかをlocale.confに設定しておく。CUIで日本語表示されると色々不便なので、英語環境で起動するようにする。

```sh
$ echo LANG=en_US.UTF-8 > /etc/locale.conf
```

#### タイムゾーンの設定

タイムゾーンを日本のTokyoに設定する。

```sh
$ ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ hwclock --systohc --utc
```

#### コンピュータ名の設定
コンピュータ名を設定する。

```sh
# (例 nch_PC.localdomain など)
$ echo [好きなコンピュータ名] > /etc/hostname
```

#### キーマップの設定

日本語のキーボードの方は設定をしておく。英語キーボードのひとは何もしなくてよい。
一番最初にしたじゃないかと思いますが、一番最初の設定はインストール用OSの設定で、こちらはインストールしたArch Linuxの設定です。
/etc/vconsole.confにKEYMAP=jp106と書いておきましょう。

```sh
nano /etc/vconsole.conf
```

> KEYMAP=jp106

#### ネットワーク設定

```sh
$ systemctl enable dhcpcd
```

#### initial ramdisk環境を作成

```sh
$ mkinitcpio -p linux
```

#### rootユーザーのパスワードを設定

```sh
$ passwd
```

#### ブートローダー rEFIndのインストール
今回はブートローダーにrEFIndを使用する。EFP(/dev/sda1)にrEFIndをインストールする。
https://wiki.archlinux.org/index.php/REFInd

```sh
$ pacman -S refind-efi
$ refind-install --usedefault /dev/sda1 --alldrivers
$ refind-mkrlconf
```

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

```sh
$ exit				#arch-chrootを終了
$ umount -R /mnt		#/mntをアンマウントすると/dev/sda1 /dev/sda3両方アンマウントできる
$ reboot
```

以上でOSインストール終了です。ですが、まだ真っ黒い画面に白い文字しか出てきません。ブラウザもないしメールも見れません。インターネットにはつながりますので、いろいろインストールしていき実用的な状態にする必要があります。