esm アジャイル事業部 開発者ブログ

永和システムマネジメントアジャイル事業部の開発者ブログです。

GentooInstallBattle on ThinkPad X1 Carbon 5th Generation

こんにちは、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 などの出力をあわせて参考にしつつ、内蔵デバイスのサポートを追加していきました。

最終的には、デフォルトの設定に加え次のような設定を有効にしました。ストレージの接続規格が NVM Express になっているので、それも有効にしています。

  • NVMe
    • NVM Express block device (BLK_DEV_NVME)
  • Network
    • Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) (IWLWIFI)
    • Intel Wireless WiFi MVM Firmware support (IWLMVM)
  • USB
    • Battery level reporting for HID devices (HID_BATTERY_STRENGTH)
    • Lenovo / ThinkPad devices (HID_LENOVO)
    • xHCI HCD (USB 3.0) support (XHCI_HCD)
    • Generic xHCI driver for a platform device (USB_XHCI_PLATFORM)
  • UEFI
  • Systemd まわり
    • systemd (GENTOO_LINUX_INIT_SYSTEMD)
    • Built-in kernel command string (CMDLINE) root=/dev/nvme0n1p3 init=/usr/lib/systemd/systemd psmouse.proto=imps
  • 音の入出力
    • 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 を無効にするなど色々やってみましたが、手元のマシンではこの方法に落ち着きました。

ThinkPad X1 Carbon 5th Gen

ロケールをデフォルト (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

おわりに

これまで割と適当にやっていたカーネルの設定についてやったことを書きました。よりよいやり方があればぜひ教えてください。