Gentoo Desktop with "-Ofast"
経緯
Gentoo Linuxのインストールを複数回やって、きたのでそろそろ挑戦的なことがしてみたいという気持ちが発生してきて、このような内容をやってみました。
とりあえず構築しようとした環境をまとめておきます。
想定読者
- Gentoo Linuxに慣れてきて、そろそろ変わったことがしたいと思っている人
- Gentoo Linuxって敷居が高くてなぁ...って思っている人
- Gentoo Linuxのメンテナー
- gccオプションの意味を考えずに使っている人
目標
最終的に目指すところはこちらです。
| key | value |
|---|---|
| OS | Gentoo Linux |
| Arch | VM(QEMU on Intel x86_64) |
| VM Flaver | 4vCPU_4GiBRAM_32GiBHDD |
| wm | sway |
| display serv | wayland |
| terminal emu | alacritty |
| editor | vim/nvim |
| BIOS | seaBIOS(not UEFI) |
Ref
実際の手順
下準備
YouTubeで配信(ログのこしのため)するつもりだったのと、使ってるVMホストをする子が、まともに設定を弄っていないProxmoxだったので、コピペが使えず(or使いづらく)、踏み台サーバからsshして繋ぎました。
ssh-import-id gh:<your github account>
して、keyを入れ、
passwd
でrootのパスワードを設定し、
rc-service sshd start
でsshサーバを起動すれば準備はOK
ip a
でマシンのipを確認して、踏み台からsshしに行きます。
ディスクの準備
QEMUではseaBIOSを使っていたので、レガシーBIOSとしてセットアップします。
| part name | mount path | fs | role | size |
|---|---|---|---|---|
| /dev/sda1 | /boot | xfs | boot loader | 1G |
| /dev/sda2 | swap | swap | swap | 16G |
| /dev/sda3 | / | ext4 | files | 15G |
ちょっと歪な構成になりましたね。ビルドに時間がかかった経験から(主に-Ofastのせい)、swapをデカくした結果、こうなりました。メインのファイルシステムよりもスワップが大きいなんて......ま、お遊び環境だし、特に重要で大きなものを置く予定もないので、これで一旦は様子見です。
追記20250905
この構成でインストールを進めていたところ、システムのサイズが足りないと言われてしまったので、
swapの8GBを/に上げるように構成を変更し、インストールし直しをしました。
stageファイル
文章の構成がGentooHandbookっぽくなってきました。
なので、詳細はgentoo handbookに任せます。というか、あの文章はとても初心者向けに詳しく書いてあるので、Arch Linuxに挫折した知り合いが「あの行為はこういう意味だったんだ」と何度も感心していました。
話を戻して、linksでwww.gentoo.org/downloadsにアクセスしてstageファイルとそのsha256チェックサムを落としてきます。この辺はなんどもやっていて手練れなので、手早くやっていけました。
コツは.sha256ファイルを落としてくるときに、linksだとデフォルトの末尾に.tar.xzだったかが着くので、それを外して落とすことです。そうすることでsha256sum --check sta*を打つときに、長ったらしいファイル名を入力せずにTab補完が使えますし、なによりsha256sumコマンドが末尾が.sha256じゃないファイルだと、それを省略したファイルを読んだりできないのでとても困ります。
ベースシステム(?)のインストール
Chroot
handbookからのコピペ作業が多い。知り合いはarch-chrootで横着してるって言ってましたね。ただ、個人的には何らかの事情でファイルシステム構成が変わってると怖いので、やりたくないですね。
CFLAG
ここが今回のメインと言っても過言ではないパート。そう、CFLAGです。コンパイラに渡すオプションの指定なのですが、ここで最適化-Ofastをグローバルにかけるという暴れっぷりを発揮しました。
これが試したくて、今回の企画が始まったといっても過言じゃないです。
USE_FLAG
使うパッケージ、使わないパッケージを省略し、使いそうなパッケージをいれる作業ですね。
これに結構時間を使いました。というか、これが一番人間に時間がかかる作業です。
といっても、知っているパッケージはあまりなかったので、知ってて明確に減らしたほうがよいものだけを減らしていった感じです。
RUST_FLAG
handbookのそのままです。Rust大好き人間なので当然のように使います。
rsync --> git
知り合いからemergeのリポジトリの更新プロトコルであるrsyncをgitに置き換えれるよと教えてもらったので、やってみました。
記事はこちら。なお、手順のコマンドしか書いてないので、詳細に興味がある方はrefにあるgentoo wikiを読み、適宜ググってください。
いざ、更新
の前に、前の手順でUSEフラグの一部が入ったので、意外といれるパッケージは少なかったりします。前回はここで155パッケージでしたからね。前手順40パッケージ、今回40パッケージくらいなので、ここの時間は結構短縮されたように思います。前回はUSEフラグを便利そうなツール全てに立てていたので、USEフラグは不要物を除去するために使ったほうが良いのかなという気になってきました。
ま、それでも平気で数時間はかかるので私は一旦就寝です。
emerge --ask --verbose --update --deep --changed-use @world
更新が止まった
elogindのemergeで更新がエラーを吐いて停止しました。これは前回と同じ動作ですが、ログ(ビルドしている途中でgccあたりが吐いているもの)を見ていると、-Ofastはだめだよって書いてあるので、elogindには-O3を設定します。
mkdir /etc/portage/env
で環境ディレクトリを作って、その中にCOMMON_FLAGを-O3にしたバージョンの
COMMON_FLAGS="-march=native -O3 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
を書いたenvファイル(ファイル名は任意だがここではo3とする)を作ります。
そしたら/etc/portage/package.envファイルにパッケージ名と適応したいenvファイル名を書きます。
sys-auth/elogind o3(任意のファイル名)
これで終わりです。
更新に戻ります。
※再試行の際はelogindのUSEフラグは切りました。
kernelの設定
/etc/portage/package.use/installkernelに以下の内容を書き込んで保存し、firmwareとgentoo-kernelを同時にemeregeしてしまいました(grubも巻き添え)
sys-kernel/installkernel grub dracut
ここでmake停止
ディスクの残り容量がないのでと言われ、gentoo-kernelのmakeが止まった様子です。
dfやduを使って見ていくと/var/tmpが16GBも食っているではないですか。
とりあえずgentoo-kernelのmake設定も-O3の方にして様子見します。
いろいろやってみましたが、成果は芳しくなく。 最終的には、 VMに新しくハードディスクを100GB追加して、 それを/var/tmpにマウントする事で、添付ファイルの容量を大目にとって解決することができました。
Install Gentoo kernel
一応、GentooKernelというLinuxカーネルを再インストールしておきます。
システムの設定
fstubに必要なことを書き込みます。 できたら、ホスト名を/etc/hostnameに追加して、 Dhcpクライアントであるdhcpcdをインストールしました。 この後に出てくるプログラムもそうですが、基本的にはインストールしたらopen-rcにaddします。 あとは、rootユーザーのパスワードを設定して、 次回ブート時のキーボードの設定もぶち込みますjp106。私はこれを間違えてenのまま再起動して、パスワードが打てなくなって詰んだことがあります。気をつけましょう。
ツールのインストール(と有効化)
システムログはsyslogdを、 クーロンデーモンはcronieを使いました。 あと、外部からアクセスできないと困るので。SSHを有効化しました。 個人的に必須だと思っているのが、シェル補完のbash-completionです。
ブートローダーの設定
ブートローダーはgrubを使います。kernel設定の時点でされていると思いますが、もう一度grubをemergeして、
grub-install /dev/sda
コマンドでインストールします。 グループのインストールがおわったら、grubのコンフィグを書き込みます。 ここがドキュメントの中で生まれて、少し見にくくて、飛ばしちゃってブートしない。みたいな事故が何回か起きたのでご注意です。 また、この段階か、もういっこ前の段階で、ログで「デュアルブートのために2つ目のOSを探しに行きます」みたいな設定を有効にしているので、それを無効にする設定をグルヴのえとせに書き込みます。 私の環境では、このログを無視して進むと、起動時にgrubを操作しないとブートができない状態だったので、ここは割と大事です。
緊張のリブート
全部exitして、システムをリブートします。この瞬間が一番緊張します。だって、今までの努力がすべて吹き飛んでブートしませんでしたってなったら、すべてがやり直しなので、結構きついですね。
インストールの締め括り
日常的な使用のためのユーザーを作って、一時的に権限を獲得する為のsudoをインストールします。nanoを消したのにvisudoがnanoを触ろうとしてエラーをおこしてて、そこのコンフィグ治すのが大変でした。コピペが使えないのがなおさらきつかったです。
GUIの導入
実は、今までi3しか使ったことはなくて、swayを使うのは初めてなのですが、せっかくだしwaylandを使いたいということで、swayを入れます。swayの依存関係の中にwaylandが入ってたのか、そもそもデスクトッププロファイルに入ってたのか、useフラグで有効にしたのかを忘れちゃいましたが、waylandが勝手に入ってて、emerge --ask swayするだけで環境は整いました。
swayが起きない
ところがどっこい、swayコマンドを打っても起動しません。ログを見ると、elogindとかが勝手に有効にしてくれる設定で、xdgなんとかの設定項目が設定されてないよ。って言われたので、open-rcにelogindをブートレベルに追加しておきます。rc-update add elogind boot
無事に
ここまでの設定は終わるとswayを起動することが出来ました。i3のコンフィグを流用していて、その環境に入っているフォントが入ってないとか、いろいろ文句を言われたりはしましたが、一応のところswayがちゃんと動いてくれたので、デスクトッププロファイルを用いたGentoo install with -Ofastは完成ってことになりました。
Discussion