VMware Workstation Player 上に Gentoo Linux 環境を構築しました。セッティングはGNOMEなしのサーバー向けの環境です。カーネルもできるだけ最適化しています。
概要
VMware 上で動作する軽量 Linux Server を構築する事にしました。今回は気合を入れてGentoo Linux です。以前にもサーバー用には Gentoo Linux をおススメした記事を書いていました。 pmp-style.hatenablog.com
インストールは今のマウスを使ったお手軽なものではなく、HDDの領域確保、フォーマットからすべてコンソールでコマンドを手打ちしながら進めていきます。Linux やPCの勉強をしたい方には基礎が学べるのでとてもよい教材です。
Gentoo Linux の特徴
Gentoo Linux の最大の特徴はパッケージがソースコードで構成されており、バイナリは自分のPCでコンパイルするという点です。コンパイルからインストールまで含めて自動化されているのでほっとけばいいのですが、時間と電気代がかかります。なぜこんな効率の悪そうなことをするのかというと、PCのスペックや求める機能に応じてソースをカスタマイズする機能があり、よりよいバイナリを得ることができます。Windowsやubuntuなどの一般的なOSでは、多種多様なPCにインストールできるバイナリが提供されています。どのPCでも動くことは素晴らしいですが、一方で無駄が多いのも事実です。
Gentoo Linux は1点ものを自分の手で作り上げていくこだわりの世界です。
Linux OS としてGentoo Linux のシェアは0.6%程度しかありませんが、そのすごさは google からも認められており、Chromium OSにGentoo Linux が採用されています。それを見抜くgoogle もさすがです。Gentooファンとしては嬉しい限りです。
Chrome OSANXRpCÉGentooÌPortageÌp | IT
詳細
細かい所を紹介していきます。
32bit(x86)にも対応している
最近Linuxディストリビューションは64bit版のみになりましたが、Gentoo Linuxは32bit版(x86)にも対応しています。32bit の方が省メモリに向いています。
gcc の最適化オプションを最適化できる
"-O2 -march=native -fomit-frame-pointer -pipe"
march に nativeを指定すると、gccがcpu情報を見て機能を自動的に付与してコンパイルしてくれます。ただしCPUが変わると動く保証がありません。汎用性を求める場合は march の代わりに mtune オプションを使います。今回のように1点ものを極める場合は march が必須です。
USEフラグによる機能の有無指定
パッケージをコンパイルするときに USE フラグで不要な機能は省くことができます。例えば…今回は ipv6 には使いませんので以下の設定をしています。頭にマイナス記号をつけることで不要という指示になります。
USE = "-ipv6"
こうすることで、たとえば dhcp クライアントをコンパイルするときに ipv6 の個所を自動的に対象から外してくれます。他のOSですと、ipv4, ipv6 両対応しているが ipv6 は使わないところですが、gentoo では ipv6 の機能そのものがなくなります。その分メモリが節約できわけです。Gentoo Linux の開発者は様々なパッケージを横断して USEフラグのつじつまを合わせているのは大変な事だろうと思います。
このようにして、PCの機能、自分が欲しい機能に限定して最適化できるわけです。
Linux Kernel
カーネルのコンパイルは他のディストリビューションでも可能ですが、自らコンパイルする事は稀でしょう。ディストリビューション標準のカーネルは、どんなPCでも動くように機能てんこ盛り状態のカーネルが生成されます。
Gentoo の場合、かならずLinux カーネルのコンパイルが必須となります。その時に余計なデバイスドライバや使用しない機能を削ることができます。上記のUSEフラグと同じ感覚です。Linux Kernel のオプションは多岐にわたりよく分からない項目がたくさんがあります。いかに項目を減らすかが勝負ですが、カーネルの場合は失敗すると起動できなくなることも多々あります。 実際、今回画面表示が出てこなくて半日以上悩みました。
何度もトライしながら完成度を上げていくのは楽しかったりします・・・
VMware にインストール
インストール方法はこちらの公式ガイドに従って進めます。昔と変わったのは grub が UEFI のみサポートになった点です。bootパーティーションがvfatになるのと grub の書き込み方法が変わっています。
Gentoo AMD64 Handbook - Gentoo Wiki
vmxファイル
UEFIが必要になるのと、Network と SCSI はVMWare社提供の純粋仮想アダプタに差し替えます。
firmware = "efi" scsi0.virtualDev = "pvscsi" ethernet0.virtualDev = "vmxnet3"
Linux kernel
Linux 標準カーネルに VMware のデバイスが取り込まれています。以下は必ず * にします。VMware 社の働きで標準カーネルに取り込まれて楽ができるのはありがたいです。
Device Drivers Networking device support <*>VMware VMXNET3 ethernet driver Device Drivers SCSI device support SCSI low-level drivers <*> VMware PVSCSI driver support Device Drivers Graphics support <*> DRM driver for VMware Virtual GPU [*] Enable framebuffer console under vmwgfx by default Frame buffer Devices Support for frame buffer devices [*] EFI-based Framebuffer support
このオプションでgentoo linux は動作します。
vmware toolsの Linux版は open-vm-tools が用意されています。
インストールすると、
・VMWare からパワーオフが可能
・ホストと時刻同期ができる
が可能となります。特にシャットダウンは、ホストのスクリプトからシャットダウンが簡単にできるようになり便利です。
open vm tools を動かすには、カーネルオプションの以下を有効にします。
Networking support Networking options <*> Virtual Socket protocol <*> VMware VMCI transport for Virtual Sockets Device Drivers <*> Fusion MPT device support <*> Fusion MPT ScsiHost drivers for SPI Misc Drivers <*> VMware VMCI Driver File systems <*> FUSE (Filesystem in Userspace) support
その他
カーネルサイズ
試行錯誤して到達した Gentoo Linux のカーネルと Linux mint の標準カーネルサイズを比べてみます。
gentoo 4,820,992 bytes mint 13,668,608 bytes
実際にはカーネルを gzip 圧縮されているファイルですが、約3分の1になっています !!
パスワードポリシー
標準ではパスワードポリシーが厳しすぎて、何度も再起動したときに大変だったので、ポリシーを無効化しました。
/etc/security/passwdqc.conf enforce=everyone を none に変更
SSH対応
open-ssh サーバーのインストールで1日はまりました。通常のログイン名、パスワード方式はすぐにできたのですが、RSA認証をしようとしたらどうしてもログインができない。
最終的にたどり着いた原因は USE フラグでした。RSAの公開鍵方式の認証をするには USE フラグに X509 が必要だったですが、初期値は無効でした。
パッケージで使用する USE フラグをみて怪しそうな名前が無いか確認して X509 に気がついたのですが、デジタル証明書のことかとかん違いしてしまい、解決するまで数日かかってしまいました。
今の openssh のUSEフラグはこんな感じです。
sv ~ # emerge --ask --verbose openssh These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild R ] net-misc/openssh-8.9_p1-r2::gentoo USE="X509 pam pie scp ssl -X -audit (-debug) -hpn -kerberos -ldns -libedit -livecd -sctp -security-key (-selinux) -static -test -verify-sig -xmss" 0 KiB