続・ArchLinux インストール覚書

[ArchLinux インストール覚書](http://qiita.com/katz_engineer/items/f032a24cb273c4eb6669)、いよいよ着手。本業がブラック化の様相を呈してきて時間が無く、作業がブツ切りになるので、脳内記憶の代わりにメモ記事を量産。そういうワケで自分の為の覚書です。

下記のコマンドとその結果の引用は、すべて画面表示を見ながらの手打ち。誤記が混じる可能性があるので、そこんとこヨロシク。

…で、やってはみたけど、結果は失敗。とりあえずやった事の記録という事で~~後悔~~公開しておく。 

# 前準備など

参考文献

- [ArchWiki - インストールガイド](https://wiki.archlinuxjp.org/index.php/インストールガイド)
- [ArchWiki - Btrfs](https://wiki.archlinuxjp.org/index.php/Btrfs)

インストール用のisoイメージは、昨年ダウンロード(2016.12.01.版)したものをDVDに焼いた。USBメモリじゃないのは、たまたま手元に無かったから。いや買ってきたって昼飯1食分にもならないんだけども。

# 作業

## はじめの一歩

BIOSの設定はテキトーに。

起動時に Ctrl+I を押して、HDDを RAID-1 として設定する。画面の指示に従うだけなので、詳細は省略…

…なのだが。

このマシンのRAIDコントローラはLinuxからは使えないらしい。

- 状況証拠:

 - LinuxからRAIDコントローラが見えなければハードウェアRAIDは不可。
 - LinuxにはソフトウェアRAIDを構成する標準的な方法が整備されており、スピードではハードウェア構成が勝るものの、機能的には圧倒的にソフトウェアRAIDに軍配が上がる。
 - 元々LinuxユーザはWindowsに比べて圧倒的に少数派であり、その上ソフトウェアRAIDが中心の為、RAIDコントローラメーカがLinux用ドライバを用意する旨味は無い。
 - そういった理由から、Linux対応RAIDコントローラは数万円以上するのが普通。Windows向けと比べると一桁近く違うとの事。→マシン組込コントローラは環境が異なるとは言え、経済的な事情は似たり寄ったりと推測できる。

- 直接証拠:
 - SCSIコントローラを認識できれば /proc/scsi 以下に色々と情報が入るはず。[Red Hat Enterprise Linux 4: リファレンスガイド - 章 5章. proc ファイルシステム - 5.3. /proc/配下のディレクトリ - 5.3.8. /proc/scsi/](http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-ja-4/s1-proc-directories.html#S2-PROC-DIR-SCSI)
 - 結果は下記の通り。ドライブそのものはそれぞれ見えているが、RAIDコントローラは認識されていない。残念。

```
# cat /proc/scsi/scsi
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: ST3320620AS      Rev: K
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: ATA      Model: WDC WD3200AAKS-0 Rev: 3A01
  Type:   Direct-Access                    ANSI  SCSI revision: 05
Host: scsi5 Channel: 00 Id: 00 Lun: 00
  Vendor: TSSTcorp Model: DVD+-RW RS-H653F Rev: D300
  Type:   CD-ROM
```

## インストールの準備

[ArchWiki - インストールガイド](https://wiki.archlinuxjp.org/index.php/インストールガイド) を読んで、この通りに操作。

当たり前だけど、しばらくはインストールメディアを抜かずにそのままにしておく。

### キーボード

```
# loadkeys jp106
```

### コンソールフォント

コンソールフォントはそのまま変更せず。日本語が表示されればそれなりに便利そうだけども、当面は必要無いと判断。

### 起動モードの確認

```
# ls /sys/firmware
acpi dmi memmap
```

ま、古いマシンだからねぇ。わかってた事だけど、UEFIではなくてBIOS起動だった。

### パーティション、パーティションのフォーマット

…の前に、ドライブのフォーマットを決める。今回はドライブ丸ごと Btrfs にしたい。

その場合の注意点。[ArchWiki - Btrfs#パーティショニング](https://wiki.archlinuxjp.org/index.php/Btrfs#.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.8B.E3.83.B3.E3.82.B0)によるとスワップ領域を作成できないらしい。

しかし[ArchWiki - パーティショニング](https://wiki.archlinuxjp.org/index.php/パーティショニング) の[パーティションの大きさはどうすればいいですか？]には下記の記述あり。これを信じる事にする。

> 大容量のメモリ（1024MB 以上）を積んでいるときは、スワップパーティションは小さく、または作らなくてもかまわないでしょう。

ちなみに Btrfs の読み方だが、SAOファンとしては「ビーターエフエス」と読みたい所。ビーター… うむ、良い響きだ。

という訳で Btrfs によるフォーマット。コマンドの日本語ヘルプは[Oracle® Linux管理者ソリューション・ガイドfor リリース6 - 5.2 Btrfsファイル・システムの作成](https://docs.oracle.com/cd/E39368_01/b71105/ol_create_btrfs.html)

```
# ls /dev/sd*
/dev/sda  /dev/sdb
# mkfs.btrfs -L btrfs_raid1 -d raid1 /dev/sda /dev/sdb
btrfs-progs v4.8.2
See http://btrfs.wiki.kernel.org for more information.

/dev/sda appears to contain an existing filesystem (zfs_member).
ERROR: use the -f option to force overwrite of /dev/sda
# mkfs.btrfs -f -L btrfs_raid1 -d raid1 /dev/sda /dev/sdb
btrfs-progs v4.8.2
See http://btrfs.wiki.kernel.org for more information.

Label:              btrfs_raid1
UUID:
Node size:          16384
Sector size:        4096
Filesystem size:    596.18GiB
Block group profiles:
  Data:             RAID1             1.00GiB
  Metadata:         RAID1             1.00GiB
  System:           RAID1             8.00MiB
SSD detected:       no
Incompat features:  extref, skinny-metadata
Number of devices:  2
Devices:
   ID        SIZE  PATH
    1   298.09GiB  /dev/sda
    2   298.09GiB  /dev/sdb
```

元々 FreeNAS に使ってたHDDが混じってたのでちょっとエラーメッセージが出たが、画面表示の通りに -f オプションを付けて問題無し。一つだけ気になるのは Filesystem size。約300GBのHDDが2台なのだが、この表示ではミラーリングしてない容量になっているように見える。不安だが、とりあえず先へ進む。

### パーティションのマウント、ブートローダー

この辺から先は[ArchWiki - インストールガイド](https://wiki.archlinuxjp.org/index.php/インストールガイド)を鵜呑みにしながらというワケにはいかない。ちょっと脇道に逸れる模様。

また、一応、ブートローダーはこの段階でインストールしてみた。

参考文献:

* [ArchWiki - Btrfs#パーティショニング](https://wiki.archlinuxjp.org/index.php/Btrfs#.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.8B.E3.83.B3.E3.82.B0)
* [Oracle® Linux管理者ソリューション・ガイドfor リリース6 - 5.2 Btrfsファイル・システムの作成](https://docs.oracle.com/cd/E39368_01/b71105/ol_create_btrfs.html) この中に「ファイル・システムをマウントする場合、次のようにそのコンポーネント・デバイスのいずれかによって指定できます」という記述がある。
* [ただのメモ: rootfs に btrfs をつかってみる](http://blog.at-dk.info/2010/07/rootfs-btrfs.html)

```
# mount /dev/sda /mnt
# grub-install --recheck --target=i386-pc --root-directory=/mnt /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
```

ここからはまた[ArchWiki - インストールガイド](https://wiki.archlinuxjp.org/index.php/インストールガイド)の手順に戻る。

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

```
# ping archlinuxjp.org
64 bytes from tk2-235-27344.vs.sakura.ne.jp (160.16.119.98): icmp_seq=1 ttl=53 time=11.3 ms
〈以下略〉
```

### システムクロックの更新

```
# timedatectl set-ntp true
# timedatectl status
      Local time: Sun 2017-01-15 12:31:24 UTC
  Universal time: Sun 2017-01-15 12:31:24 UTC
        RTC time: Sun 2017-01-15 12:31:24
       Time zone: UTC (UTC, +0000)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no
```

本当はntpサーバは自分で設定したい。日本なら ntp.nict.jp が鉄板だと思ってる。特殊事情が無ければこの一択。

が、その辺の調整は後回しにしよう。

## インストール

### ミラーの選択

日本なら Japan をファイル先頭に持ってくる。

```
# cd /etc/pacman.d
# mv mirrorlist mirrorlist.org
# cp mirrorlist.org mirrorlist
# vi mirrorlist
〈編集コマンド省略〉
# diff -U0 mirrorlist.org mirrorlist
--- mirrorlist.org     2016-12-01 16:52:03.000000000 +0000
+++ mirrorlist 2017-01-15 12:37:45.778738064 +0000
@@ -6,0 +7,2 @@
+## Score: 2.0, Japan
+Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
@@ -213,2 +214,0 @@
-## Score: 2.0, Japan
-Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
```

### ベースシステムのインストール

```
# cd
# pwd
/root
# pacstrap /mnt base btrfs-progs
〈表示省略〉
```

## システムの設定

### fstab、chroot、タイムゾーン、ロケール

```
# genfstab -U /mnt >> /mnt/etc/fstab
# cat /mnt/etc/fstab
#
# /etc/fstab: static file system information
#
# <file system> <dir>   <type>  <options>      <dump>  <pass>
# /dev/sda LABEL=btrfs_raid1
UUID=〈省略〉                                   /                btrfs   rw,relatime,space_cache,subvolid=5,subvol=/    0 0

# arch-chroot /mnt
# rm /etc/localtime
# ln -s /usr/share/zoneinfo/Japan /etc/localtime
# hwclock --systohc --utc
# mv /etc/locale.gen /etc/locale.gen.org
# cp /etc/locale.gen.org /etc/locale.gen
# vi /etc/locale.gen
〈編集内容省略〉
# diff -U0 /etc/locale.gen.org /etc/locale.gen
--- /etc/locale.gen.org 2016-08-06 20:17:48.000000000 +0900
+++ /etc/locale.gen     2017-01-16 00:09:36.865540733 +0900
@@ -291,2 +291,2 @@
-#ja_JP.EUC-JP EUC-JP
-#ja_JP.UTF-8 UTF-8
+ja_JP.EUC-JP EUC-JP
+ja_JP.UTF-8 UTF-8
# rm /etc/locale.gen.org
# echo KEYMAP=jp106 >/etc/vconsole.conf
# echo 〈例えば taro〉 >/etc/hostname
# mv /etc/hosts /etc/hosts.org
# cp /etc/hosts.org /etc/hosts
# vi /etc/hosts
〈編集内容省略〉
# diff -U0 /etc/hosts.org /etc/hosts
--- /etc/hosts.org      2016-12-06 08:43:55.000000000 +0900
+++ /etc/hosts  2017-01-16 00:23:09:598776706 +0900
@@ -7,0 +8 @@
+〈家庭内で割り当てるIPアドレス〉  〈例えば taro.example.com〉 〈例えば taro〉
```

### Initramfs

参考文献:

- [ArchWiki - mkinitcpio - HOOKS - 通常のフック](https://wiki.archlinuxjp.org/index.php/Mkinitcpio)

```
# mv /etc/mkinitcpio.conf /etc/mkinitcpio.conf.org
# cp /etc/mkinitcpio.conf.org /etc/mkinitcpio.conf
# vi /etc/mkinitcpio.conf
〈編集内容省略〉
# diff -U0 /etc/mkinitcpio.conf.org /etc/mkinitcpio.conf
--- /etc/mkinitcpio.conf.org    2016-11-28 05:08:44.000000000 +0900
+++ /etc/mkinitcpio.conf        2017-01-16 00:45:24.614998751 +0900
@@ -52 +52 @@
-HOOKS="base udev autodetect modconf block filesystems keyboard fsck"
+HOOKS="base udev autodetect modconf block filesystems keyboard fsck btrfs"
# rm /etc/mkinitcpio.conf.org
# mkinitcpio -p linux
〈表示省略〉
但し、途中で警告が出た:
==> WARNING: Possibly missing firmware for module: wd719x
==> WARNING: Possibly missing firmware for module: aic94xx
良くわからないが、ひとまず無視
```

### Root パスワード

```
# passwd
〈root用パスワード〉
```

### 再起動

```
# exit
exit
arch-chroot /mnt  9.43s user 2.16s system 0% cpu 48:24.70 total
# umount -R /mnt
```

ここでインストール用メディアを取り出す。

```
# reboot
```

結果は失敗。

```
                          GNU GRUB  version 2.02~beta3

   Minimal BASH-like line editing is supported. For the first word, TAB
   lists possible command completions. Anywhere else TAB lists possible
   device or file completions.


grub>
```

さて困った。でもいい線は行ってる気がする。grubのインストールを見直せば何とかなりそう。と、信じたい。