Gentoo Linux を Hyper-V 上にインストールする
なにこれ
この記事は 木更津高専 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 で署名検証も行う.なんか出力が文字化けを起こしている...
~\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 のインストール
ネットワークの設定
公式ドキュメントを参考にする.
うちの場合はルータが IP アドレスを DHCP で配ってくれるのでそれを確認する.
名前解決と ping の疎通を確認.
ディスクの準備
公式ドキュメントを参考にする.
ブロックデバイスの一覧を確認する.
以下の形に 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 ファイルのインストール
公式ドキュメントを参考にする.
マウントした場所に移動した後,日付のずれがないか確認する.
links
を用いて stage3 を落としてくる.
init システムについては自分が慣れている systemd を使うことにした.
署名検証用のファイルも落としておく(拡張子は.asc
で保存する).
GnuPG を用いて署名を検証する.
stage3 をインストールする.
make.conf
をいい感じに設定する.
とりあえずCOMMON_FLAGS
に-march=native
を追加した.
MAKEOPTS
については未定義だと自動設定されるのでそのままにしておいた.
ベースシステムのインストール
公式ドキュメントを参考にする.
DNS 情報をコピーして chroot する.
/etc/profile
をsource
した後,プロンプトを更新しておく.
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 カーネルの設定
公式ドキュメントを参考にする.
Linux Firmware をインストールする.
ライセンスについて同意が必要なのでpackage.license
で許可する.
仮想環境において本当にこのパッケージが必要なのかどうか判断できなかった.
基本的に各種ハードウェアは仮想化されるのでこのパッケージは不要なのでは...?
つよいひと おしえてください...
Microcode をインストールする.
ライセンスについて同意が必要なのでpackage.license
で許可する.
仮想環境において本当にこのパッケージが必要なのかどうか判断できなかった.
Hyper-V はハイパーバイザ型仮想化技術なので CPU 命令が基本的にはホスト OS の関与なしに直接実行されると理解している.
よってこのパッケージは必要と考えている.
まったくわからん おしえてつよいひと...
Installkernel を設定する.
ブートローダには GRUB を,initramfs の自動生成には dracut を使うことにしたので USE フラグはgrub
とdracut
を立てる.
カーネルのソースコードをインストールする.
カーネルのソースコードがインストールされた場所に移動し,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が呼ばれているらしい.
システムの設定
公式ドキュメントを参考にする.
デバイス名を確認し,/etc/fstab
を書く.
ホスト名を設定する.
ちなみにarcturus
はうしかい座 α 星の固有名.
dhcpcd を導入する.
rootのパスワードを設定する.
systemdをセットアップする.
ブートローダを設定する
公式ドキュメントを参考にする.
GRUB をインストールする.
grub.cfg
を生成する.
システムの再起動
仮想マシンのメニューバーにある 操作(A) → シャットダウン(D)... からシャットダウンする.
シャットダウンできたらメニューバーの メディア(M) → DVD ドライブ を選択して Minimal installation CD のイメージを取り出しておく.
その後,起動 を選択して再度起動する.
GRUB が起動して...
ログインを促すプロンプトが表示されたら完了!
root でログインできたら後は煮るなり焼くなりご自由に.
なんか動的メモリ関係のメッセージが出てくるけどちゃんと動いている証っぽいのでヨシ!
おまけ: なんか怪しいと思っていたけどやっぱり dhcpcd が有効化できていなかったので有効化した.
さいごに
この後は sshd でも動かして Windows 側からのアクセスができるようにしたいと思います.
気が向いたら追記するのでお楽しみに!
Discussion