HP ENVY x360 15(AMD)にGentooをインストールする際の留意点

#はじめに
小学校でのプログラミング必修化に伴い、無料で利用できるlinuxに興味を持つ人が保護者の皆さんを中心に大幅に増えることが予想されます。
そこで今回は数あるディストリビューションの中でも特に人気のあるGentooのインストールについて書きたいと思います。
なお、初投稿ですので読みにくい箇所等も多々あるかと思いますのであらかじめご了承ください。
また、Gentooのインストールについても初めてですのであまり効率の良くない進め方をしているかと思います。加えて明らかな間違い等があればご指摘をいただければ幸いです。

#今回使ったPC
HP ENVY x360 15(AMD) Ryzen7 3700U搭載モデル
https://jp.ext.hp.com/notebooks/personal/envy_15_x360_ds0000/

#大事な前提
今回の記事では**Windowsを全消去して**Gentooを入れることを目標としています。デュアルブートではないので注意してください。

#必ず読むべき資料
Gentoo AMD64 ハンドブック
https://wiki.gentoo.org/wiki/Handbook:AMD64/ja
作業の8割くらいは上記の資料の通りに進めます。

#インストール開始
以下では主に今回の端末特有の設定やハマった箇所について記載します。
##メディアの選択
ハンドブック
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Media/ja
自分がダウンロードしたisoは
install-amd64-minimal-20200105T214502Z.iso
です。

多分インストールメディアはUSBメモリを使っても問題無いと思いますが、ハンドブックと同じようにCD-Rを利用しました。今回の端末には**光学ドライブが無い**のでCD-Rを使う場合は外付けの光学ドライブが必須です。
###CDからの起動について
* マザーボードのファームウェアメニューに入るためには電源を入れた（再起動した）直後にESCを押してください。
* そのままでは起動できないのでファームウェアメニュー内で**セキュアブートを無効**にしてください。

無事起動できたら

```bash:
# loadkeys jp106
```

を実行しましょう（一応起動直後にキー配列の選択を促されますが初見だと多分選択が間に合わず英字配列にされます）

##ネットワークの設定
ハンドブック
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Networking/ja
今回の端末には有線用のデバイスはありません。無線用のデバイスの名称は**wlo1**です。
端末固有の問題ではありませんが、最近だとWPA2等が採用されているネットワークが多いと思われます。その場合はwpa_supplicantの使い方を調べておく必要があります。

##ディスクの準備
ハンドブック
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Disks/ja

ストレージ名は**nvme0n1**、パーテーションを区切った後は**nvme0n1p1,nvme0n1p2,...**となります。ハンドブック内のsdaと書いてある箇所はそのように読み替えてください。
今回はUEFIでの起動を考えているため**GPT**を選択します。
パーテーションの分け方自体はほぼハンドブック内で紹介されているものを真似て問題ないと思いますが以下の変更を加えます。

* EFIシステム用のパーテーションのファイルシステムは必ずFAT32
* swap用のパーテーションは物理メモリと同等に確保しないとハイバネーション等に支障をきたすため自分は16GB確保しました

今思えば資料内sda1に相当するパーテーションはいらなかった気もしますが、以後の資料の読み間違いを防ぐという意味で一応作っておくのはありだと思います。幸い容量も小さいので。

## Gentooインストールファイルをインストール
ハンドブック
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage/ja
MAKEOPTS変数は

```code:make.conf
MAKEOPTS="-j5"
```
に設定しました。

## Gentooベースシステムのインストール
ハンドブック
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base/ja

この章で最低限必要な作業に関しては特に詰まるところはなかったと思います。プロファイルもインストール完了後に変更することもできます。

ただし、今後色々なソフトウェアをインストールする上でライセンスグループ周りのエラーが発生するので、**ACCEPT_LICENSE**変数についての記述がここにあるということは覚えておいた方が良いです。

ロケール設定はlocale-genくらいまではやった方が良いと思いますが、現時点ではどのみち日本語表記になるわけではない（むしろ文字化けで作業にならない）ので英語環境のままが良いと思います。

## カーネルの設定
ハンドブック
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel/ja

デフォルトがマニュアル設定になっていますが、最初から**genkernel**に頼っても良いと思います。ここで楽をしてもどのみちインストール終了後に山程カーネルコンフィグをいじるチャンスはあります（むしろ強いられるので今は楽をしましょう）。

/etc/fstab内にファイルシステムを書く箇所がありますが、ext2でもfat32でもなく**vfat**と記載してください。

なお、ここで生成されるカーネルファイル名は**vmlinuz***です。ls /boot/kernel\*で何も見つからなくても大丈夫です。

## システムの設定
ハンドブック
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/System/ja

この章は特に詰まるところはなかったと思います。むしろどのみちイーサネットデバイスが無いのでネットワークの設定を飛ばしても良いくらいです。

## ツールのインストール
ハンドブック
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Tools/ja

現時点ではwpa_supplicantを利用できていると思いますが、それが使えるのはCDでブートしている間のみです。そもそも有線での接続ができないというハンデもありますので資料に従って**今のうちにwpa_supplicantをemergeしておきましょう。さもないとwpa_supplicantのインストールに必要なファイルがオンラインを経由しないと入手できないのにネットに接続するためのツールが必要という事態になるからです。**
なお、自分はwpa_supplicantのインストールを飛ばしたためインストール作業終了後にandroidタブレットをUSB接続してテザリングをせざるを得なくなりました。皆さんは気をつけてください。

## ブートローダーを選ぶ
ハンドブック
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Bootloader/ja

ブートローダーは**GRUB2**が無難だと思います。**UEFI**での起動を選択したということを念頭に慎重にコマンドを叩いていきましょう。

マニュアルではここでrebootとなっていますが、まずうまくいかないので

```bash
# mkfifo /dev/initctl
# reboot -f
```

を実行します。
（参考）http://adventure-diary.hateblo.jp/entry/2014/10/19/015534

予定では再起動をすると勝手にGentooが起動するかあるいはイメージの選択を促されるかと思います。

## ここまで頑張ったのに駄目だった場合
- インストール作業で失敗しても**CDでのブートはできます。**落ち着いてマザーボードのファームウェアを起動してCDブートの優先度を上げてからインストール作業に戻りましょう。
- 陥りがちなトラブルは大体ハンドブックに書いてあります。コマンドだけでなく説明文を熟読しましょう。
- ハンドブックだけでなくフォーラムも覗いてみると自分と同じようなエラーに対する解決策が結構な確率で書いてあります。
- 作ったり編集したファイルはできるだけlsやcatなどを使って確認しましょう。
- ざっくりとした判断基準ですが、GRUBで選択肢すらない場合はファイルシステムの設定ミスあるいはコンパイル・ブートローダーの設定等でのコマンドの叩き間違い（忘れ）が考えられます。GRUBでイメージの選択はできるが動かないという場合はカーネルコンフィグが怪しそうです。

## うまく起動できた場合
むしろ端末固有のトラブルはここからであると考えています。
### 時間が9時間くらいずれている
※自分が設定を間違えた可能性あり
dateコマンドを実行したところ、JST表記であるにもかかわらず時間が9時間ずれていました。これを放置するとカーネルビルドの際に**最新とoldのファイル名が逆転**するという非常に危険な不具合が発生するので皆さんも念の為dateコマンドを実行して、必要に応じて時刻を設定し直しましょう。

### 無線用のデバイスを認識できない
CDブート時は大丈夫でしたが、新しくインストールしたGentooにはこの端末に積んである無線デバイスのためのドライバがまだありません。実際、ip link showを実行してもwlo1が見つかりません。
別のPCについての情報ですが下記が参考になります。
https://wiki.gentoo.org/wiki/Lenovo_yoga_730
重要なのは必要なドライバの名前が**r8822be**であること、カーネルコンフィグ内では他のネットワークデバイスと異なり
`Device Drivers --> Staging Drivers --> Realtek RTL8822BE`
に設定箇所があるということです。
詳しい説明は省きますが適切に設定した後にカーネルをビルド→各種設定→再起動をおこなってください。

### GPUを認識できない（Ryzen7モデルで確認）
※Ryzen5モデルのGPUはVega8なので以下の現象の有無および解決法が異なるかと思われます

将来的にはGUIを使うと思いますが、設定を変更しないとGPUが認識されません。
まずはこのページを熟読する必要があります。
https://wiki.gentoo.org/wiki/AMDGPU
カーネルコンフィグの選択肢が少し違うことは気にしなくても大丈夫です。
この端末のGPUは**VEGA10**なのでそのつもりで必要な箇所を読んでください。

ただ、上記の通りに設定してもGPUは認識されません。カーネルのソースコード内に**VEGA10を認識するための処理が記述されていない**ためです。
https://bugs.gentoo.org/696164
上記URLに記載されている内容を見ればどのソースコードに問題があるかがわかります。修正箇所は微量なので直接編集しても大丈夫です。

ここでもカーネルビルド等の作業が入りますが、コンフィグに問題があったりファームウェアが正しくないなどの不具合があると起動自体ができなくなることがあります。その場合でもGRUBからoldと名前がついている方のイメージを選択すれば起動できるかと思います。

#終わりに
現時点でも色々いじっているところなのでこの先もトラブルが発生するかもしれないので、別記事にするかもですが今後も気づいたことがあれば書いていこうと思います（デスクトップ環境編とか）。
本記事が少しでもGentooをお子様に与えることを検討中の保護者の皆さんのお役に立てれば幸いです。