Hyper-VにArch Linuxをインストール

#はじめに
　**Windows10Pro の Hyper-V仮想マシンに Arch Linux を最小限インストール**した手順のメモです。Archのインストールは初めてでしたが、ハマりどころが２点ほどありました。

* Hyper-V仮想マシンからのライブ環境起動に失敗 ***?!***
* `pacstrap`のオプションに **linux**(kernel) も必要 ***!***

　前者については同様な情報が見つかっていないので、自分の環境だけなのかもしれません。
　後者は公式の [Install_guide](https://wiki.archlinux.org/index.php/Installation_guide) を確認することで解決しましたが、`base`グループから **kernel** が[2019年10月に外された](https://www.archlinux.org/news/base-group-replaced-by-mandatory-base-package-manual-intervention-required/)のが原因でした。それ以前のネット情報を頼りにしていたため、すぐには気づきませんでした。

#インストール環境
* 実機 Windows10Pro (Version 1903) + `Hyper-V`機能有効化
* インターネット接続 (DHCP)
* http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/iso/2020.05.01/archlinux-2020.05.01-x86_64.iso

#インストール方法
##1. Hyper-V 仮想マシン作成
　Hyper-Vマネージャーを使って仮想マシンを作成する。`クイック作成`で、ダウンロードした`isoイメージ`を指定し、`セキュアブートを無効化`します。ネットワークは`規定のスイッチ`のままで大丈夫です。
![Create_Virtual_Machine.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409671/ce064582-0be9-9d99-22ec-b997c1626c9a.png)
　そのまま仮想マシンに接続します。
![05_Virtual_machine_created.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409671/6be58a75-3c27-0083-87dc-4bb486b9afcc.png)

##2. ライブ環境の起動
　仮想マシンに接続しても、なぜかライブ環境が起動せず、下の画面に、、、
![07_Mapping_table.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409671/f6393b75-b63f-ce28-cde7-61e49cca6120.png)
　よくわからないまま `exit`コマンドで抜け、改めて1行目の `Arch Linux archiso x86_64 UEFI CD` を選択することで、無事にライブ環境を起動できました。
![08_UEFI_Menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409671/1bea2c51-99b6-a051-7f79-aa581c19417d.png)

##3. ライブ環境での設定
####3.1. キーボードレイアウト
　まず、必要に応じてキーマップを設定します。

```
# loadkeys jp106
```

####3.2. インターネット接続確認
　DHCP環境であれば設定は不要ですが、念のためネット接続を確認しておきます。

```
# ping -c3 archlinux.jp
```

####3.3. パーティション作成
　ここでは、swapなしの単純なパーティションとします。

| Partition |Code|Name| Mount point |
|:--|:--|:--|:--|
| /dev/sda1 | EF00 | EFI system partition | /mnt/boot |
| /dev/sda2 | 8300 | Linux filesystem     | /mnt      |

```sh
 gdisk /dev/sda
  n    # 新規パーティション
  #[ENTER] 
  #[ENTER] 
  +512M 
  EF00
  n    # 新規パーティション
  #[ENTER] 
  #[ENTER] 
  #[ENTER] 
  #[ENTER]
  p    # パーティション一覧
  w    # 書き込み指定
  Y    # 書き込み確認
```

![gdisk.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409671/73dec0c4-f5ac-e8de-c913-17ae7845b1b4.png)

####3.4. パーティションのフォーマット
　EFIシステムパーティションを`fat32`で、ルートパーティションを`xfs`でフォーマットします。

```
# mkfs.fat -F32 /dev/sda1
# mkfs.xfs -m crc=1 /dev/sda2
```

####3.5. ファイルシステムのマウント
　ルートを`/mnt`に、EFIシステムを`/mnt/boot`にマウントします。

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

####3.6. ミラーの設定
　`/etc/pacman.d/mirrorlist`を編集して、国内ミラーをトップにあげる、もしくは、単純に以下の２行だけでも良いと思います。

```sh:/etc/pacman.d/mirrorlist
Server = http://ftp.tsukuba.wide.ad.jp/Linux/archlinux/$repo/os/$arch
Server = http://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
```


####3.7. ベースシステムおよびカーネル等のインストール
　ハマりどころその２です。インストールガイドどおりが無難ですが、忘れないうちに `dhcpcd` や `vi` などの適当なエディタもインストールします。
　前述のとおり、以前は `base` グループにカーネルやエディタ等も含まれていたようです。

```
# pacstrap /mnt base linux linux-firmware dhcpcd vi
```

####3.8. fstabの生成

```
# genfstab -U /mnt >> /mnt/etc/fstab
```

####3.９. chroot

```
# arch-chroot /mnt
```

####3.10. タイムゾーン

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

####3.11. ロケール
　とりあえず英語環境で大丈夫ということであれば、`LANG=C` にて運用することとし、ロケール設定を省略できます。
　必要に応じてキーマップは変更しておきます。

```
# echo KEYMAP=jp106 > /etc/vconsole.conf
```


####3.1２. ネットワーク設定
　ここでは `hoge` としますが、適当な hostname を設定します。

```
# hostnamectl set-hostname hoge
# echo hoge > /etc/hostname
# echo -e "127.0.0.1 localhost\n::1 localhost" >> /etc/hosts
```

　再起動に備えて、DHCP機能を有効化します。

```
# systemctl enable dhcpcd
```

####3.13. rootパスワード設定

```
# passwd
```

####3.14. ブートローダー

```
# bootctl install
# vi /boot/loader/loader.conf
```

エディタで `/boot/loader/loader.conf` を編集します。

```sh:/boot/loader/loader.conf
 default arch
 timeout 3
 editor no
```

```
# cp /usr/share/systemd/bootctl/arch.conf /boot/loader/entries/
# blkid -s PARTUUID -o value /dev/sda2 >> /boot/loader/entries/arch.conf
# vi /boot/loader/entries/arch.conf
```

エディタで `/boot/loader/entries/arch.conf` を編集します。
`PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX` は、`blkid`コマンドで最終行に追加した値に置き換えます。

```sh:/boot/loader/entries/arch.conf
## This is just an example config file.
## Please edit the paths and kernel parameters according to your system.

title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
#options root=PARTUUID=XXXX rootfstype=XXXX add_efi_memmap
 options root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX rootfstype=xfs add_efi_memmap
```

```
# bootctl update
# bootctl
```

####3.15. 再起動
　`chroot` から抜けて、システムを再起動します。

```
# exit
# reboot
```
　再起動後もいくつか設定が残っていますが、今回は最小限インストールということで、省略します。

#あとがき
　もともと、Windos10上で古いCAEツールを使用するために`CentOS`の仮想マシンを構築しましたが、Hyper-Vでは解像度が固定されて使いにくかったため、[linux-vm-tools](https://github.com/microsoft/linux-vm-tools) に対応している`Arch Linux`での再構築を試みましたが見事にハマりました。一応、`Manjaro`で当初の目的を果たしましたが、機会があれば`Arch Linux`で GUI環境構築にも再トライします。

#更新履歴
* 2020/05/03 初稿

#参照
* [https://wiki.archlinux.org/index.php/Installation_guide](https://wiki.archlinux.org/index.php/Installation_guide)
* [https://wiki.archlinux.jp/index.php/インストールガイド](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)
* https://www.archlinux.jp/news/base-group-replaced-by-mandatory-base-package-manual-intervention-required/
* [Arch Linuxインストール （OSインストール編）| UEFI, GPT, XFSを使用してインストール - archlinux.site](https://www.archlinux.site/2016/03/arch-linux-uefi-gpt-xfs.html)
* [Arch Linux + Xfce 快適環境を構築したときのログ - blog.livewing.net](https://blog.livewing.net/install-arch-linux)
* [Arch LinuxをHyper-V仮想マシンにセットアップする - nashippe.blog](https://nashippe.blog/hv/install-arch/)
* [ArchLinuxのインストール（Hyper-V＆UEFI) - jisyonohako.blogspot.com](http://jisyonohako.blogspot.com/2018/06/archlinuxhyper-vuefi.html)