こんにちは、hibariya です。さいきん会社支給のマシンを買い替え、ThinkPad X240 から X1 Carbon (5th) になりました。Gentoo Linux のインストールをするのは約2年ぶりです。いつも通りちょっと大変でしたが、無事に新しいマシンから記事を書ける状態になりました。
さっそく次回のインストールへの備えも兼ねて今回の記録を残しておきたいと思います。だいたいは公式のハンドブックと過去に残していた記録を参考にしてさくさく進んだので、ここでは前回と違うところ、特にカーネル周りの設定をどうやったかについて書きます。
カーネルのビルド
前回までは、関係がありそうな設定はひとまず有効にしておくという割とおおざっぱなやり方でビルドしていましたが、本来何が必要だったのかが曖昧になっている状態というのは少し不安です。今回はもう少し丁寧に、なるべく必要なものに絞ることにしました。しかしカーネルの設定をちゃんとやろうとすると、どうしてもちょっとめんどうで難しそうな印象があります。
Manually configuring a kernel is often seen as the most difficult procedure a Linux user ever has to perform. Nothing is less true - after configuring a couple of kernels no-one even remembers that it was difficult ;)
Gentoo Linux amd64 Handbook: Installing Gentoo - Gentoo Wiki
実際には、何が必要かは少し調べるとだいたいあたりがつきますし、手数は多いものの設定の項目自体は (思っていたよりは) それほど多くありませんでした。
おおまかな流れとしては、まず make defconfig
でデフォルトの設定を生成し、そのうえで必要そうなものを有効にしていきます。
flaggie sys-kernel/gentoo-sources +symlink emerge gentoo-sources cd /usr/src/linux make defconfig make menuconfig # 追加で必要そうなものを設定 make -j3 && make install && make modules_install
以下のドキュメントと、 lspci
lsusb
dmesg
などの出力をあわせて参考にしつつ、内蔵デバイスのサポートを追加していきました。
- ハンドブック
- systemd - Gentoo Wiki
- iwlwifi - Gentoo Wiki
- en:users:drivers:iwlwifi [Linux Wireless] (Intel® Wireless 8265 を使っているようなので IWLWIFI と IWLMVM を有効にした)
- ALSA - Gentoo Wiki
- Webcam setup - ArchWiki
最終的には、デフォルトの設定に加え次のような設定を有効にしました。ストレージの接続規格が NVM Express になっているので、それも有効にしています。
- NVMe
- NVM Express block device (BLK_DEV_NVME)
- Network
- USB
- UEFI
- Systemd まわり
- 音の入出力
- Enable generic HD-audio codec parser (SND_HDA_GENERIC)
- 内蔵カメラ
- USB Video Class (UVC) (USB_VIDEO_CLASS)
- ACPI
ひとまず GUI やインターネットが使えるようになったところで、この段階ではまだ Docker や VirtualBox などは入っていません。とはいえ、ここまでくればだいたい山場は越えたと言ってよさそうです。
落とし穴
上記ではカーネルパラメータとして psmouse.proto=imps
を渡しています。これは Systemd とは関係なく、ポインティングデバイスがうまく動作しない問題の workaround です。UEFI firmware をアップデートする、Track Point を無効にするなど色々やってみましたが、手元のマシンではこの方法に落ち着きました。
ロケールをデフォルト (ISO-8859-1) のままにしていたら gnome-terminal が立ち上がらず、ちょっとハマりました。en_US.UTF-8
に変更して無事立ち上がりました。
その他
cpuid2cpuflags で CPU の最適化フラグを設定しました。
$ emerge app-portage/cpuid2cpuflags $ cpuinfo2cpuflags-x86 CPU_FLAGS_X86="aes avx avx2 fma3 mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3" $ cpuinfo2cpuflags-x86 >> /etc/portage/make.conf
おわりに
これまで割と適当にやっていたカーネルの設定についてやったことを書きました。よりよいやり方があればぜひ教えてください。