Arch Linux install to UEFI boot system

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

条件

* 64bitUEFIブート
* USBインストールメディアからインストール
* `/dev/sdx`にインストール（xは環境によって異なる）
* パーティションは`/dev/sdx1`が`/boot`で`/dev/sdx2`が`/`
* ネットワークは有線接続
* キーマップは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のインストール

パーティションの作成

```
root@archiso ~ # parted /dev/sdx
(parted)mklabel gpt
(parted)mkpart ESP fat32 1MiB 551MiB //[/boot]ディレクトリ用
(parted)set 1 esp on
(parted)mkpart primary ext4 551MiB 100% //[/]ディレクトリ用
(parted)q
```

作成したパーティションを初期化する．

```
root@archiso ~ # mkfs.vfat -F32 /dev/sdx1 
root@archiso ~ # mkfs.ext4 /dev/sdx2
```

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

```
root@archiso ~ # mount /dev/sdx2 /mnt
root@archiso ~ # mkdir /mnt/boot
root@archiso ~ # mount /dev/sdx1 /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 vim dhcpcd
```

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/sdx2
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx       /               ext4            rw,relatime     0 1

# /dev/sdx1
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
```

ブートローダーのインストールと設定

```
[root@archiso /]# pacman -S grub dosfstools efibootmgr intel-ucode
[root@archiso /]# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub --recheck
[root@archiso /]# cp /boot/EFI/grub/grubx64.efi  /boot/EFI/boot/bootx64.efi
[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
```

#最後に
UEFIブートで起動する環境にArchLinuxをインストールし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)を参照．