Z590+RTX3080ノートPCへubuntuをインストールした記録

# はじめに

ロボットの開発用に持ち運びができるPCが欲しい＆どうせなら普段の開発でのシミュレーション実行もやりたい。という事でノートPCを購入しました（STYLE-17FG104-117K-VAZX）。いざUbuntuをインストールしようとするとインストール先のメディアが認識されない、インストール時にエラーが発生する。などのトラブルが有りました。
本稿では、色々とやってインストールまでたどり着いた内容をまとめました。

:::note warn
- 内容は独自に調査したものでありメーカー様、販売店様から保証いただいたものではありません。メーカー様、販売店様に問い合わせはしないでください。
- Ubuntuのインストールについては自己責任でお願いします。
- 予めバックアップを作成してから行ってください。
:::

## インストール対象PC

iiyamaのSTYLEシリーズ（STYLE-17FG104-117K-VAZX）
- CPU : 第11世代インテルCore i7(11700K)
- チップセット : Intel Z590
- GPU : GeForce RTX 3080
- メモリ : DDR4-3200 S.O.DIMM 16GB
- ストレージ : NVMe対応M.2 SSD 500GB

## インストール時のトラブル内容

1. LiveUSBからUbuntuのインストーラを起動してインストールを行うと、インストール対象ストレージが認識されない
1. ストレージを認識しても、ブートローダの設定で失敗する
1. シャットダウン時に電源が切れない

対応内容は下記の概要は下記のとおりです。

［インストール時］
* M.2 SSDを認識させるためにACPIサポートをOFF
* ブートローダー書き込み時にNVRAMへの書き込みをOFF

［インストール後］
* ACPIサポートを有効にするためにkernelをバージョンアップ

# PCセットアップ手順

ノートPC(STYLE-17FG104-117K-VAZX)のソフトウェアを設定するための手順書です。

## 1. BIOS設定

Thunderboltをdisable
SecureBootをdisableにする

## 2. Ubuntu 22.04.1 LTSのインストール

### 2.1. インストーライメージの取得とbootable USBメモリの作成

- Rufusをダウンロード（https://rufus.ie/ja/）（portable版）
- Ubuntu22.04.1をダウンロード（https://releases.ubuntu.com/22.04.1/ubuntu-22.04.1-desktop-amd64.iso）
- Rufusを用いて、ISOモードでUSBメモリへ書き込む

### 2.2. インストーラの起動

M.2 SSDをインストーラが認識しない問題は**askubuntu**にそれらしい記述がありました。

https://askubuntu.com/questions/1099048/18-04-and-18-10-fail-to-boot-nvme0-failed-to-set-apst-feature-19


**linux kernelがacpiに対応しておらず、内蔵のM.2 SSDを認識しないため、acpiの設定をOFFにして起動すると認識する。**

- USBメモリをPCのUSBポートへ挿入し電源ボタンを押下する。
- スプラッシュ画面が表示されたところでF7を押下しBootMenuを表示する。
- 選択リストよりUSBメモリを選択する。
- GNU Grubのメニューより **Ubuntu** を上下キーで選択し'e'を押下する。起動オプション編集画面へ。
- コマンドラインオプションを編集。
```
linux  /casper/vmlinuz ....... maybe-ubuquity quiet splash ---
```
下記のように`acpi=off`を追加する
```
linux  /casper/vmlinuz ....... maybe-ubuquity acpi=off
```
- F10を押下して起動する

### 2.3. Ubuntuのインストール

2.2.の対応でインストール先のSSDを認識するようになりますが、このまま通常のインストールプロセスを進めると、最後のブートローダー(GRUB)の設定で失敗します。
どうやらnvramへの書き込みにエラーによりインストールが失敗しているみたいです。

そこで、インストーラの起動時オプションでブートローダーのインストールをスキップしてOSをインストールし、後から手動でブートローダーのインストールを行ないます。

- インストーラ起動後「Try Ubuntu」を選択する
- Terminalより ```ubiquity -b``` を実行する（ブートローダーをインストールしないオプションをつけてインストーラを起動する'-b'）
- Installation type画面で"Erase disk and install Ubuntu"を選択し'Continue'ボタン押下
- Erase disk and install Ubuntu画面のSelect driveで、'/dev/nvme0n1' を選択し'Install Now'ボタン押下
- Write the change to disks?確認画面で'Continue'ボタン押下

- **インストール完了後'Continue Testing'を選択する**

### 2.4. BIOSパーティション作成

Terminalよりgdiskを使ってパーティションを作成する
```shell
$ sudo sgdisk /dev/nvme0p1
```

sgdiskの操作でパーテションを編集する
```
'n'コマンドでパーテション作成
   partition 3
   First sector : default値(34)
   Last sector : default値(2047)
   PartitionType : ef02

'w'コマンドでパーティション情報を書き込む
```

### 2.5. grubの手動インストール

GRUB(ブートローダー)をインストールする際、**nvramへの書き込みを無効にして行う。**

必要なディレクトリをマウント
```shell
$ sudo -s
$ cp -a /usr/lib/grub/x86_64-efi /target/usr/lib/grub/

$ mkdir /chroot
$ mount /dev/<ドライブ名><パーティション番号（Ubuntu）> /chroot
$ mount --bind /target /chroot
$ mount --bind /dev /chroot/dev
$ mount --bind /dev/pts /chroot/dev/pts
$ mount --bind /proc /chroot/proc
$ mount --bind /sys /chroot/sys
$ mount --bind /run /chroot/run
```
chrootで作業
```shell
$ chroot /chroot

mount /dev/<ドライブ名><パーティション番号（UEFIシステムパーティション）> /boot/efi
$ mount /dev/sdb1 /boot/efi

device.map ファイルを作成。これを行わないとgrub-installでdevice.mapが見つからない旨が表示される
（ただし、エラーとしてgrub-installが終了しないので分かりにくい）。
$ grub-mkdevicemap
```
**--no-nvram**オプションを付けてgrubのインストール
```shell
$ grub-install --efi-directory=/boot/efi --debug --root-directory=/
 --target=x86_64-efi-pc --no-nvram /dev/nvme0n1

 chroot /chroot でchrootに入ったままの状態
$ update-grub
```

/dev/sdb1のUUIDを控えておく
```shell
$ blkid /dev/nvme0n1p1
/dev/sdb1: UUID="41F9-4C31" TYPE="vfat" PARTUUID="b235d56d-4e68-4221-9b72-ffd65fdb684d"
```

 この場合、41F9-4C31を控えておく
 以下を実行し、編集画面上で同じ桁のUUIDを控えておいたUUIDに書き換える
```shell
$ nano /etc/fstab
```
念の為grub.cfgをバックアップを取って作成
```shell
$ mv /boot/efi/boot/grub/grub.cfg /boot/efi/boot/grub/grub.cfg.old
```
デフォルトの設定を変更する。以下を実行して、`GRUB_CMDLINE_LINUX` の末尾に `reboot=p acpi=off`を追記。
reboot=pは、システム終了したあとにCUIから電源が切れないため、追加する。
```shell
$ sudo nano /etc/default/grub
```

grub.cfgを再出力
```shell
$ grub-mkconfig -o /boot/efi/boot/grub/grub.cfg
```

念のためディレクトリをunmountしてから終了。
```shell
$ umount /boot/efi
$ exit          <-- chroot環境のexit
$ umount /chroot/run
$ umount /chroot/sys
$ umount /chroot/proc
$ umount /chroot/dev/pts
$ umount /chroot/dev
$ umount /chroot
$ rm -rf /chroot
$ exit
```
ここまでで、再起動するとインストールしたUbuntuが起動するはず。

### 2.6. KernelのUpgrade

```acpi=off```のままでは、shutdown/reboot時、自動的に電源が切れないため、**ACPIに対応したkernelへバージョンアップを行う。**

#### 2.6.1. proxy設定
必要に応じてNetwork/proxyの設定を行う。aptのproxy設定は ```/etc/apt/apt.conf``` に以下のようにproxy設定を行う
proxy設定後システムを再起動する。

```.txt:/etc/apt/apt.conf
Acquire::http::Proxy "http://proxy server:port";
Acquire::https::Proxy "http://proxy server:port";
```

更新ファイルのアップグレード
```shell
$ sudo apt update
$ sudo apt upgrade -y
```

#### 2.6.2. Kernel Update

次のページを参照：https://linuxhint.com/install-upgrade-latest-kernel-ubuntu-22-04/
```shell
$ sudo -E add-apt-repository ppa:cappelikan/ppa -y
$ sudo apt install mainline -y
```

kernel 5.19.5をインストールする。

```/etc/default/grub``` を編集し、GRUB_CMDLINE_LINUX=""オプションを空欄にする（acpi=off reboot=pを削除する）
```shell
$ sudo grub-mkconfig -o /boot/efi/boot/grub/grub.cfg
$ reboot
```

# まとめ

ここまでの手順でUbuntu 22.04が起動し、シャットダウンすると電源が切れる状態になったと思います。
調査時点ではUbuntu 22.04.1 LTSが最新版でしたが、その後のリリースで問題は解決されているかもしれません。