🐧

Gentoo Linux を Hyper-V 上にインストールする

2024/12/03に公開

なにこれ

この記事は 木更津高専 Advent Calendar 2024 参加記事です.

翌日の記事は @Wing2C1 さんによる Pythonで最も難しい大学入試のアプリを作る話 です.

今回は Gentoo Linux を Hyper-V 上にインストールしたので備忘録としてここに残しておきます.
私個人の環境・思想による部分が大きいので,この記事を参考にする際は自己責任でお願いします.

仮想スイッチの作成

Hyper-V マネージャー を開く.

右ペインの 操作 → 仮想スイッチ マネージャー... を選択.
外部 を選択して 仮想スイッチの作成(S).

適当な名前をつけて OK(O) で閉じる.

仮想マシンの作成

右ペインの 操作 → 新規 → 仮想マシン(M)... から 仮想マシンの新規作成ウィザード を起動.
次へ(N) > で次に進む.

お好みで設定を変更.
次へ(N) > で次に進む.

第 2 世代(2) を選択.
次へ(N) > で次に進む.

動的メモリを有効にするのでとりあえず起動メモリは 4096MB で進める.
次へ(N) > で次に進む.

先ほど作った仮想スイッチを選択.
次へ(N) > で次に進む.

お好みで設定変更.
次へ(N) > で次に進む.

後でオペレーティング システムをインストールする(L) を選択.
次へ(N) > で次に進む.

内容を確認する.
OKなら 完了(F) でウィザードを抜ける.

Minimal installation CD のブート

Minimal installation CD のイメージを適当なツールを使ってミラーサーバから落としてくる.
https://ftp.jaist.ac.jp/ さん,いつもお世話になっています.
ついでに GnuPG で署名検証も行う.なんか出力が文字化けを起こしている...

pwsh
~\Downloads\gentoo
> curl -fLO "https://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20241103T164822Z.iso"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  595M  100  595M    0     0  2546k      0  0:03:59  0:03:59 --:--:-- 4444k

~\Downloads\gentoo
> curl -fLO "https://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/amd64/autobuilds/current-install-amd64-minimal/install-amd64-minimal-20241103T164822Z.iso.asc"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   488  100   488    0     0     60      0  0:00:08  0:00:08 --:--:--   121

~\Downloads\gentoo
> gpg --keyserver hkps://keys.gentoo.org --recv-keys 13EBBDBEDE7A12775DFDB1BABB572E0E2D182910
gpg: 鍵BB572E0E2D182910: 公開鍵"Gentoo Linux Release Engineering (Automated Weekly Release Key) <releng@gentoo.org>"をインポートしました
gpg:           処理数の合計: 1
gpg:             インポート: 1

~\Downloads\gentoo
> gpg --verify install-amd64-minimal-20241103T164822Z.iso.asc
gpg: 署名されたデータが'install-amd64-minimal-20241103T164822Z.iso'にあると想定します
gpg: 2024-11-04 05:21:38 ���� (�W����)に施された署名
gpg:                RSA鍵534E4209AB49EEE1C19D96162C44695DB9F6043Dを使用
gpg: "Gentoo Linux Release Engineering (Automated Weekly Release Key) <releng@gentoo.org>"からの正しい署名 [不明の]
gpg: *警告*: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
 主鍵フィンガープリント: 13EB BDBE DE7A 1277 5DFD  B1BA BB57 2E0E 2D18 2910
 副鍵フィンガープリント: 534E 4209 AB49 EEE1 C19D  9616 2C44 695D B9F6 043D

仮想マシン(I) で先ほど作った仮想マシンを選択し,メニューバーから 操作(A) → 設定(E)... を選択.

セキュリティ から セキュア ブートを有効にする(E) のチェックを外す.

SCSI コントローラー から DVD ドライブ を選択して 追加(D) を選択.

メディア は イメージ ファイル(I) を選択して先ほどダウンロードしたイメージをセット.
OK(O) で閉じる.

仮想マシンをダブルクリックして 起動 を選択.

少し待つと GRUB が起動するのでそのまま続行.

プロンプトが表示されたら起動成功.

Gentoo Linux のインストール

ネットワークの設定

公式ドキュメントを参考にする.
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Networking

うちの場合はルータが IP アドレスを DHCP で配ってくれるのでそれを確認する.

名前解決と ping の疎通を確認.

ディスクの準備

公式ドキュメントを参考にする.
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Disks

ブロックデバイスの一覧を確認する.

以下の形に GPT パーティションを切る.
swap については動的メモリを使用するのでとりあえず設定せず,具合が悪そうだったら後から/swapfileを用意して対応することにした.

Device path (sysfs) Mount point File system Size
/dev/sda1 /efi vfat 1GiB
/dev/sda2 / xfs Remainder of the disk

/dev/sdaに対してfdiskを起動して GPT ディスクラベルを作る.

EFI システムパーティションを作る.

ルートパーティションを作る.

パーティションテーブルを確認して保存する.

ファイルシステムを作る.

マウントポイントを作ってルートパーティションをマウントする.

stage ファイルのインストール

公式ドキュメントを参考にする.
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage

マウントした場所に移動した後,日付のずれがないか確認する.

linksを用いて stage3 を落としてくる.
init システムについては自分が慣れている systemd を使うことにした.

署名検証用のファイルも落としておく(拡張子は.ascで保存する).

GnuPG を用いて署名を検証する.

stage3 をインストールする.

make.confをいい感じに設定する.
とりあえずCOMMON_FLAGS-march=nativeを追加した.
MAKEOPTSについては未定義だと自動設定されるのでそのままにしておいた.

ベースシステムのインストール

公式ドキュメントを参考にする.
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base

DNS 情報をコピーして chroot する.

/etc/profilesourceした後,プロンプトを更新しておく.

EFI システムパーティションをマウントする.

リポジトリを同期する.
emerge-webrsyncを実行すると何故かunshare: sigprocmask unblock failed: Invalid argumentと言われて落ちてしまう.

プロファイルを選択する.
既に選択済になっているがdefault/linux/amd64/23.0/systemdを選択する.


ミラーサーバを設定する.
JAIST のミラーサーバを使うことにした.




USE フラグを設定する.

メモリが少ないとこの後の処理が止まってしまう(動的メモリの割り当てがうまくできない)ので/swapfileを作る.
とりあえず 2GiB を確保した.

うどんワールドする.

タイムゾーンとロケールの設定をする.
viがないと言われたのでvimをインストールした.
かっこいいのでen_US.UTF-8を使う.



Linux カーネルの設定

公式ドキュメントを参考にする.
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel
https://wiki.gentoo.org/wiki/Kernel/Gentoo_Kernel_Configuration_Guide
https://wiki.gentoo.org/wiki/Hyper-V

Linux Firmware をインストールする.
ライセンスについて同意が必要なのでpackage.licenseで許可する.
仮想環境において本当にこのパッケージが必要なのかどうか判断できなかった.
基本的に各種ハードウェアは仮想化されるのでこのパッケージは不要なのでは...?
つよいひと おしえてください...


Microcode をインストールする.
ライセンスについて同意が必要なのでpackage.licenseで許可する.
仮想環境において本当にこのパッケージが必要なのかどうか判断できなかった.
Hyper-V はハイパーバイザ型仮想化技術なので CPU 命令が基本的にはホスト OS の関与なしに直接実行されると理解している.
よってこのパッケージは必要と考えている.
まったくわからん おしえてつよいひと...


Installkernel を設定する.
ブートローダには GRUB を,initramfs の自動生成には dracut を使うことにしたので USE フラグはgrubdracutを立てる.


カーネルのソースコードをインストールする.

カーネルのソースコードがインストールされた場所に移動し,menuconfigを起動する.

以下のように設定する(デフォルトで有効になっている部分は割愛).
Hyper-V 関連の機能を有効化する.
CTF で CAN 通信の解析を行うことがあるので関連項目はカーネルモジュールとして有効化しておく.

[*] CONFIG_GENTOO_LINUX_INIT_SYSTEMD
[*] CONFIG_XFS_FS
[*] CONFIG_PARTITION_ADVANCED
[*] CONFIG_EFI_PARTITION
[*] CONFIG_FB
[*] CONFIG_FB_EFI
[*] CONFIG_EFIVAR_FS
[*] CONFIG_HYPERV
[*] CONFIG_HYPERV_UTILS
[*] CONFIG_HYPERV_BALLOON
[*] CONFIG_PARAVIRT_SPINLOCKS
[*] CONFIG_VSOCKETS
[*] CONFIG_HYPERV_VSOCKETS
[*] CONFIG_PCI_HYPERV
[*] CONFIG_SCSI_FC_ATTRS
[*] CONFIG_HYPERV_NET
[*] CONFIG_FB_HYPERV
[*] CONFIG_HID_HYPERV_MOUSE
[M] CONFIG_CAN
[M] CONFIG_CAN_VCAN

設定が完了したらカーネルをビルドしてインストールする.
make installの時にInstallkernelが呼ばれているらしい.

システムの設定

公式ドキュメントを参考にする.
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/System

デバイス名を確認し,/etc/fstabを書く.

ホスト名を設定する.
ちなみにarcturusはうしかい座 α 星の固有名.

dhcpcd を導入する.

rootのパスワードを設定する.

systemdをセットアップする.

ブートローダを設定する

公式ドキュメントを参考にする.
https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Bootloader

GRUB をインストールする.

grub.cfgを生成する.

システムの再起動

仮想マシンのメニューバーにある 操作(A) → シャットダウン(D)... からシャットダウンする.
シャットダウンできたらメニューバーの メディア(M) → DVD ドライブ を選択して Minimal installation CD のイメージを取り出しておく.
その後,起動 を選択して再度起動する.

GRUB が起動して...

ログインを促すプロンプトが表示されたら完了!

root でログインできたら後は煮るなり焼くなりご自由に.
なんか動的メモリ関係のメッセージが出てくるけどちゃんと動いている証っぽいのでヨシ!

おまけ: なんか怪しいと思っていたけどやっぱり dhcpcd が有効化できていなかったので有効化した.

さいごに

この後は sshd でも動かして Windows 側からのアクセスができるようにしたいと思います.
気が向いたら追記するのでお楽しみに!

GitHubで編集を提案

Discussion