tech_note

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

gentoo_desktop_with_ofast.md (12410B)


      1 ---
      2 title: Gentoo Desktop with "-Ofast"
      3 tags:
      4 - linux
      5 - gcc
      6 - gentoo
      7 - ofast
      8 private: false
      9 updated_at: 2025-09-28 17:32
     10 id: null
     11 organization_url_name: null
     12 slide: false
     13 ---
     14 # 経緯
     15 Gentoo Linuxのインストールを複数回やって、きたのでそろそろ挑戦的なことがしてみたいという気持ちが発生してきて、このような内容をやってみました。
     16 とりあえず構築しようとした環境をまとめておきます。
     17 # 想定読者
     18 - Gentoo Linuxに慣れてきて、そろそろ変わったことがしたいと思っている人
     19 - Gentoo Linuxって敷居が高くてなぁ...って思っている人
     20 - Gentoo Linuxのメンテナー
     21 - gccオプションの意味を考えずに使っている人
     22 # 目標
     23 最終的に目指すところはこちらです。
     24 
     25 |key|value|
     26 |-|-|
     27 |OS|Gentoo Linux|
     28 |Arch|VM(QEMU on Intel x86_64)|
     29 |VM Flaver|4vCPU_4GiBRAM_32GiBHDD|
     30 |wm|sway|
     31 |display serv|wayland|
     32 |terminal emu|alacritty|
     33 |editor|vim/nvim|
     34 |BIOS|seaBIOS(not UEFI)|
     35 
     36 # Ref
     37 - [Gentoo Handbook for AMD64](https://wiki.gentoo.org/wiki/Handbook:AMD64/ja)
     38 - [作業の様子のYouTube配信動画の再生リスト](https://youtube.com/playlist?list=PLQ-fF3xcxe3e8hY7tb2Dr4z0pAb1qeq2E&si=BC51X8-7hP18QI4_)
     39 
     40 # 実際の手順
     41 ## 下準備
     42 YouTubeで配信(ログのこしのため)するつもりだったのと、使ってるVMホストをする子が、まともに設定を弄っていないProxmoxだったので、コピペが使えず(or使いづらく)、踏み台サーバからsshして繋ぎました。
     43 ```
     44 ssh-import-id gh:<your github account>
     45 ```
     46 して、keyを入れ、
     47 ```
     48 passwd
     49 ```
     50 でrootのパスワードを設定し、
     51 ```
     52 rc-service sshd start
     53 ```
     54 でsshサーバを起動すれば準備はOK
     55 ```
     56 ip a
     57 ```
     58 でマシンのipを確認して、踏み台からsshしに行きます。
     59 ## ディスクの準備
     60 QEMUではseaBIOSを使っていたので、レガシーBIOSとしてセットアップします。
     61 |part name|mount path|fs|role|size|
     62 |-|-|-|-|-|
     63 |/dev/sda1|/boot|xfs|boot loader|1G|
     64 |/dev/sda2|swap|swap|swap|16G|
     65 |/dev/sda3|/|ext4|files|15G|
     66 
     67 ちょっと歪な構成になりましたね。ビルドに時間がかかった経験から(主に-Ofastのせい)、swapをデカくした結果、こうなりました。メインのファイルシステムよりもスワップが大きいなんて......ま、お遊び環境だし、特に重要で大きなものを置く予定もないので、これで一旦は様子見です。
     68 ###
     69 追記20250905
     70 この構成でインストールを進めていたところ、システムのサイズが足りないと言われてしまったので、
     71 `swap`の8GBを`/`に上げるように構成を変更し、インストールし直しをしました。
     72 
     73 ## stageファイル
     74 文章の構成がGentooHandbookっぽくなってきました。
     75 なので、詳細はgentoo handbookに任せます。というか、あの文章はとても初心者向けに詳しく書いてあるので、Arch Linuxに挫折した知り合いが「あの行為はこういう意味だったんだ」と何度も感心していました。
     76 話を戻して、`links`で`www.gentoo.org/downloads`にアクセスしてstageファイルとそのsha256チェックサムを落としてきます。この辺はなんどもやっていて手練れなので、手早くやっていけました。
     77 コツは`.sha256`ファイルを落としてくるときに、linksだとデフォルトの末尾に`.tar.xz`だったかが着くので、それを外して落とすことです。そうすることで`sha256sum --check sta*`を打つときに、長ったらしいファイル名を入力せずにTab補完が使えますし、なにより`sha256sum`コマンドが末尾が`.sha256`じゃないファイルだと、それを省略したファイルを読んだりできないのでとても困ります。
     78 ## ベースシステム(?)のインストール
     79 ### Chroot
     80 handbookからのコピペ作業が多い。知り合いはarch-chrootで横着してるって言ってましたね。ただ、個人的には何らかの事情でファイルシステム構成が変わってると怖いので、やりたくないですね。
     81 ### CFLAG
     82 ここが今回のメインと言っても過言ではないパート。そう、CFLAGです。コンパイラに渡すオプションの指定なのですが、ここで最適化`-Ofast`をグローバルにかけるという暴れっぷりを発揮しました。
     83 これが試したくて、今回の企画が始まったといっても過言じゃないです。
     84 ### USE_FLAG
     85 使うパッケージ、使わないパッケージを省略し、使いそうなパッケージをいれる作業ですね。
     86 これに結構時間を使いました。というか、これが一番人間に時間がかかる作業です。
     87 といっても、知っているパッケージはあまりなかったので、知ってて明確に減らしたほうがよいものだけを減らしていった感じです。
     88 ### RUST_FLAG
     89 handbookのそのままです。Rust大好き人間なので当然のように使います。
     90 ### rsync --> git
     91 知り合いからemergeのリポジトリの更新プロトコルであるrsyncをgitに置き換えれるよと教えてもらったので、やってみました。
     92 [記事はこちら。](https://zenn.dev/minervajuppiter/articles/a1d15e757ef0f8)なお、手順のコマンドしか書いてないので、詳細に興味がある方はrefにあるgentoo wikiを読み、適宜ググってください。
     93 ### いざ、更新
     94 の前に、前の手順でUSEフラグの一部が入ったので、意外といれるパッケージは少なかったりします。前回はここで155パッケージでしたからね。前手順40パッケージ、今回40パッケージくらいなので、ここの時間は結構短縮されたように思います。前回はUSEフラグを便利そうなツール全てに立てていたので、USEフラグは不要物を除去するために使ったほうが良いのかなという気になってきました。
     95 ま、それでも平気で数時間はかかるので私は一旦就寝です。
     96 ```
     97 emerge --ask --verbose --update --deep --changed-use @world
     98 ```
     99 ### 更新が止まった
    100 elogindのemergeで更新がエラーを吐いて停止しました。これは前回と同じ動作ですが、ログ(ビルドしている途中でgccあたりが吐いているもの)を見ていると、`-Ofast`はだめだよって書いてあるので、`elogind`には-O3を設定します。
    101 ```
    102 mkdir /etc/portage/env
    103 ```
    104 で環境ディレクトリを作って、その中に`COMMON_FLAG`を`-O3`にしたバージョンの
    105 ```
    106 COMMON_FLAGS="-march=native -O3 -pipe"
    107 CFLAGS="${COMMON_FLAGS}"
    108 CXXFLAGS="${COMMON_FLAGS}"
    109 ```
    110 を書いたenvファイル(ファイル名は任意だがここではo3とする)を作ります。
    111 そしたら`/etc/portage/package.env`ファイルにパッケージ名と適応したいenvファイル名を書きます。
    112 ```
    113 sys-auth/elogind o3(任意のファイル名)
    114 ```
    115 これで終わりです。
    116 更新に戻ります。
    117 ※再試行の際はelogindのUSEフラグは切りました。
    118 ## kernelの設定
    119 `/etc/portage/package.use/installkernel`に以下の内容を書き込んで保存し、firmwareとgentoo-kernelを同時にemeregeしてしまいました(grubも巻き添え)
    120 ```
    121 sys-kernel/installkernel grub dracut
    122 ```
    123 ### ここでmake停止
    124 ディスクの残り容量がないのでと言われ、`gentoo-kernel`のmakeが止まった様子です。
    125 dfやduを使って見ていくと`/var/tmp`が16GBも食っているではないですか。
    126 とりあえず`gentoo-kernel`のmake設定も`-O3`の方にして様子見します。
    127 ‌いろいろやってみましたが、成果は芳しくなく。‌ 最終的には、‌ VMに新しくハードディスクを100GB追加して、‌ それを/var/tmpにマウントする事で、添付ファイルの容量を大目にとって解決することができました。
    128 ### ‌Install Gentoo kernel
    129 一応、GentooKernelというLinuxカーネルを再インストールしておきます。
    130 ## ‌システムの設定
    131 fstub‌に必要なことを書き込みます。‌ できたら、ホスト名を`/etc/hostname`に追加して、‌ Dhcpクライアントであるdhcpcdをインストールしました。‌ この後に出てくるプログラムもそうですが、基本的にはインストールしたらopen-rcにaddします。‌ あとは、rootユーザーのパスワードを設定して、‌ 次回ブート時のキーボードの設定もぶち込みます`jp106`。私はこれを間違えて`en`のまま再起動して、パスワードが打てなくなって詰んだことがあります。気をつけましょう。
    132 ## ツールのインストール(と有効化)
    133 ‌システムログは`syslogd`を、‌ ‌クーロンデーモンは`cronie`を使いました。‌ あと、外部からアクセスできないと困るので。SSHを有効化しました。‌ 個人的に必須だと思っているのが、シェル補完の`bash-completion`です。
    134 ## ‌ブートローダーの設定
    135 ‌ブートローダーは`grub`を使います。kernel設定の時点でされていると思いますが、もう一度`grub`を`emerge`して、‌
    136 ```
    137 grub-install /dev/sda
    138 ```
    139 コマンドでインストールします。‌ グループのインストールがおわったら、`grub`のコンフィグを書き込みます。‌ ここがドキュメントの中で生まれて、少し見にくくて、飛ばしちゃってブートしない。みたいな事故が何回か起きたのでご注意です。‌ また、この段階か、もういっこ前の段階で、ログで‌「デュアルブートのために2つ目のOSを探しに行きます」みたいな設定を有効にしているので、それを無効にする設定をグルヴのえとせに書き込みます。‌ 私の環境では、このログを無視して進むと、起動時に`grub`を操作しないとブートができない状態だったので、ここは割と大事です。‌ 
    140 ### 緊張のリブート
    141 全部`exit`して、システムをリブートします。‌この瞬間が一番緊張します。だって、今までの努力がすべて吹き飛んでブートしませんでしたってなったら、すべてがやり直しなので、結構きついですね。
    142 ## ‌インストールの締め括り
    143 ‌日常的な使用のためのユーザーを作って、一時的に権限を獲得する為のsudoをインストールします。‌`nano`を消したのに`visudo`が`nano`を触ろうとしてエラーをおこしてて、そこのコンフィグ治すのが大変でした。コピペが使えないのがなおさらきつかったです。‌
    144 ## GUIの導入
    145 ‌実は、今までi3しか使ったことはなくて、`sway`を使うのは初めてなのですが、せっかくだし`wayland`を使いたいということで、`sway`を入れます。‌`sway`の依存関係の中に`wayland`が入ってたのか、そもそもデスクトッププロファイルに入ってたのか、useフラグで有効にしたのかを忘れちゃいましたが、`wayland`が勝手に入ってて、`emerge --ask sway`するだけで環境は整いました。‌ 
    146 ### swayが起きない
    147 ところがどっこい、`sway`コマンドを打っても起動しません。ログを見ると、`elogind`とかが勝手に有効にしてくれる設定で、`xdg`なんとかの設定項目が設定されてないよ。って言われたので、open-rcに`elogind`をブートレベルに追加しておきます。`rc-update add elogind boot`
    148 ## 無事に
    149 ‌ここまでの設定は終わると`sway`を起動することが出来ました。i3のコンフィグを流用していて、その環境に入っているフォントが入ってないとか、いろいろ文句を言われたりはしましたが、一応のところ`sway`がちゃんと動いてくれたので、デスクトッププロファイルを用いた`Gentoo install with -Ofast`は完成ってことになりました。