Arch Linux install to RAID1 storage (BIOS boot)

ArchLinuxを以下の条件のもとインストールする．

条件

* 64bitBIOSブート
* USBインストールメディアからインストール
* 2台の同一型番のHDDまたは，SSDでRAID１を作成
* `/dev/sda1`と`/dev/sdb1`でRAID１`/dev/md0`を構築(`/boot`用パーティション)
* `/dev/sda2`と`/dev/sdb2`でRAID１`/dev/md1`を構築(`/`用パーティション)
* ネットワークは有線接続
* キーマップはUS
* 同一ネットワークの別PCからsshで操作できるところまで設定

#USBインストールメディアの作成と起動
公式の[ArchLinuxをダウンロード](https://www.archlinux.jp/download/)のページからISOファイル`archlinux-年.月.日-x86_64.iso`をダウンロードする．

`dd`コマンドを使用してISOファイルをUSBメモリに書き込む．

```
#　dd bs=4M if=/path/to/archlinux.iso of=/dev/sdy status=progress && sync
```

USBインストールメディアが完成したら，USBインストールメディアからライブ環境を起動する．

#ArchLinuxのインストール

`/dev/sda`のパーティションの作成

```
root@archiso ~ # gdisk /dev/sda
###バージョン情報など###

Comand (? for help):o
This option deletes all partitions and create a new protective MBR.
Proceed? (Y/N):Y
Comand (? for help):n
Partition number (1-128, default 1):1
First sector (34-xxxxxx, default = 2048) or {+-}size{KMGTP}:2048
Last sector (2048-xxxxxx, default = xxxxxx) or {+-}size{KMGTP}:+100MB
Hex code or GUID (L to show codes, Enter = 8300):ef02
Changed type of partition to 'BIOS boot partition'

Comand (? for help):n
Partition number (1-128, default 2):2
First sector (34-xxxxxx, default = 206848) or {+-}size{KMGTP}:206848
Last sector (2048-xxxxxx, default = xxxxxx) or {+-}size{KMGTP}:-100MB
Hex code or GUID (L to show codes, Enter = 8300):fd00
Changed type of partition to 'Linux RAID'

Comand (? for help):w

Final checks compleate. 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 compleated successfully.
```

`/dev/sdb`のパーティションの作成(`/dev/sda`と同じ設定)

```
root@archiso ~ # gdisk /dev/sdb
###バージョン情報など###

Comand (? for help):o
This option deletes all partitions and create a new protective MBR.
Proceed? (Y/N):Y
Comand (? for help):n
Partition number (1-128, default 1):1
First sector (34-xxxxxx, default = 2048) or {+-}size{KMGTP}:2048
Last sector (2048-xxxxxx, default = xxxxxx) or {+-}size{KMGTP}:+100MB
Hex code or GUID (L to show codes, Enter = 8300):ef02
Changed type of partition to 'BIOS boot partition'

Comand (? for help):n
Partition number (1-128, default 2):2
First sector (34-xxxxxx, default = 206848) or {+-}size{KMGTP}:206848
Last sector (2048-xxxxxx, default = xxxxxx) or {+-}size{KMGTP}:-100MB
Hex code or GUID (L to show codes, Enter = 8300):fd00
Changed type of partition to 'Linux RAID'

Comand (? for help):w

Final checks compleate. 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/sdb
The Operation has compleated successfully.
```

RAID1アレイ(`/dev/md0`)の作成

```
root@archiso ~ # mdadm --create --verbose --level=1 --metadata=1.2 --chunk=64 --raid-devices=2 /dev/md0 /dev/sda1 /dev/sdb1
mdadm: chunk size ignored for this level
mdadm: /dev/sda1 appers to contain an ext2fs file system
       size=101376K mtime=xxx xxx  x xx:xx:xx xxxx
mdadm: /dev/sdb1 appers to contain an ext2fs file system
       size=101376K mtime=xxx xxx  x xx:xx:xx xxxx
mdadm: size set to 101376K
Continue creating array?y
mdadm: array /dev/md0 started
```

RAID1アレイ(`/dev/md1`)の作成

```
root@archiso ~ # mdadm --create --verbose --level=1 --metadata=1.2 --chunk=64 --raid-devices=2 /dev/md1 /dev/sda2 /dev/sdb2
mdadm: chunk size ignored for this level
mdadm: size set to xxxxxxxxxK
mdadm: automatically enabling write-intent bitmap on large array
mdadm: array /dev/md1 started
```

RAIDアレイの作成状況を表示する

```
root@archiso ~ # cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdb2[1] sda2[0]
      xxxxxxxxx blocks super 1.2 [2/2] [UU]
      [==>..................] resync = 38.9% (yyyyyyy/xxxxxxxxx) finish=7.6min speed 153642K/sec
      bitmap: 1/1 pages [4KB], 65536KB chunk

md0 : active raid1 sdb1[1] sda1[0]
      101376 blocks super 1.2 [2/2] [UU]

unused devices: <none>
```

RAIDアレイが作成完了するまで待つ．
大容量のHDDで実行する場合1時間以上かかる場合もある．

アレイの作成が完了したらパーティションを初期化する．

```
root@archiso ~ # mkfs.ext4 /dev/md0 
root@archiso ~ # mkfs.ext4 /dev/md1
```

作成したパーティションをマウントする．

```
root@archiso ~ # mount /dev/md1 /mnt
root@archiso ~ # mkdir /mnt/boot
root@archiso ~ # mount /dev/md0 /mnt/boot
```

時間の設定

```
root@archiso ~ # timedatectl set-ntp true
root@archiso ~ # timedatectl set-timezone Asia/Tokyo
```

ArchLinuxのパッケージをインストールするミラーリストの選択（日本のサーバを選ぶ）

```
root@archiso ~ # vim /etc/pacman.d/mirrorlist
root@archiso ~ # cat /etc/pacman.d/mirrorlist
##
## Arch Linux repository mirrorlist
## Filtered by mirror score from mirror status page
## Generated on 20xx-xx-xx
##

## Japan
Server = http://mirrors.cat.net/archlinux/$repo/os/$arch
## Japan
Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
## Japan
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
## other country
...
```

ベースシステムと必要なパッケージのインストール

```
root@archiso ~ # pacstrap /mnt base linux linux-firmware vim dhcpcd mdadm
```

mdadmの設定ファイルを更新する．
これをやっておかないとmd127問題などが発生する．

```
root@archiso ~ # mdadm --detail --scan >> /mnt/etc/mdadm.conf
root@archiso ~ # cat /mnt/etc/mdadm.conf
...
...
...
ARRAY /dev/md0 metadata=1.2 name:archiso:0 UUID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy 
ARRAY /dev/md1 metadata=1.2 name:archiso:0 UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
```

UUIDを使用してディスクを判別するためにfstabを作成する．

```
root@archiso ~ # genfstab -U /mnt >> /mnt/etc/fstab
root@archiso ~ # cat /mnt/etc/fstab
# Static information about the filesystems.
# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>
# /dev/md1
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx       /               ext4            rw,relatime     0 1

# /dev/md0
UUID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy       /boot           ext4            rw,relatime     0 2
```

インストールした環境にchrootする

```
root@archiso ~ # arch-chroot /mnt
```

タイムゾーンと時間の設定

```
[root@archiso /]# ln -sf /usr/share/zoneinfo/Asia/Tokyo > /etc/localtime
[root@archiso /]# hwclock --systohc
```

使用する文字コードの設定

```
[root@archiso /]# vim /etc/locale.gen
[root@archiso /]# cat /etc/locale.gen
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8
[root@archiso /]# locale-gen
[root@archiso /]# vim /etc/locale.conf
[root@archiso /]# cat /etc/locale.conf
LANG=en_US.UTF-8
```

ホストネームの設定

```
[root@archiso /]# vim /etc/hostname
[root@archiso /]# cat /etc/hostname
myhostname
```

ネットワークの設定

```
[root@archiso /]# vim /etc/hosts
[root@archiso /]# cat /etc/hosts
127.0.0.1　localhost
::1　　　　localhost
127.0.1.1　myhostname.localdomain	myhostname
```

rootのパスワード設定

```
[root@archiso /]# passwd
```

mdadmフックを`mkinitcpio.conf`に追加

```
[root@archiso /]# vim /etc/mkinitcpio.conf
[root@archiso /]# cat /etc/mkinitcpio.conf
....
MODULES=(raid1 ext4)
....
HOOKS=(base udev autodetect modconf block filesystems keyboard fsck mdadm_udev)
....
```

initramfsイメージを作成

```
[root@archiso /]# mkinitcpio -p linux
```

ブートローダーのインストールと設定を行う．
RAID1の場合は`/dev/sda`と`/dev/sdb`にそれぞれ`grub-install`コマンドを実行する．

```
[root@archiso /]# pacman -S grub os-prober intel-ucode
[root@archiso /]# grub-install --target=i386-pc --debug /dev/sda
[root@archiso /]# grub-install --target=i386-pc --debug /dev/sdb
[root@archiso /]# grub-mkconfig -o /boot/grub/grub.cfg
```

起動時にネットワークに接続するように設定

```
[root@archiso /]# systemctl enable dhcpcd
```

chrootからログアウトし再起動する

```
[root@archiso /]# exit
root@archiso ~ # umount -R /mnt
root@archiso ~ # reboot
```

#ArchLinuxインストール後の初期設定

rootでログインする

```
myhostname login : root
passwd
```

ローカルユーザーを作成

```
[root@myhostname ~]# useradd -m -G wheel -s /bin/bash myusername
[root@myhostname ~]# passwd myusername
```

sudoをインストールしwheelグループのユーザーでsudoが使えるようにする．

```
[root@myhostname ~]# pacman -S sudo
[root@myhostname ~]# vim /etc/sudoers
[root@myhostname ~]# cat /etc/sudoers
...
##
## User privilege specification
##
root ALL=(ALL) ALL

## Uncomment to allow members of group wheel to execute any command
 %wheel ALL=(ALL) ALL
...
```

ローカルユーザーでログイン

```
[root@myhostname ~]# exit
myhostname login : myusername
passwd
```

opensshのインストールと有効化

```
[myusername@myhostname ~]# sudo pacman -S openssh
[myusername@myhostname ~]# sudo systemctl enable sshd
```

#最後に
BIOSブートで起動する環境にArchLinuxをRAID1ストレージにインストールしsshで外部から操作できるところまで設定を行った．
詳しい説明は[インストールガイド-ArchWiki](https://wiki.archlinux.jp/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89)と，[RAID-ArchWiki](https://wiki.archlinux.jp/index.php/RAID)を参照．