1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gentoo + KDE Plasma + CachyOS-kernel + btrfsで作る高性能デスクトップ環境

1
Posted at

こんにちは。Kanade改めK4eです。

Gentoo + KDE Plasma + CachyOS-kernel + btrfsでデスクトップ環境を作ってみました。その手順をまとめます。

今回の構成について

今回の構成について説明します。

Gentoo Linux について

Gentoo Linuxはソースコードからソフトウェアをビルドすることを前提に設計された非常に自由度の高いLinuxディストリビューションです。ユーザ地震でビルドオプションから設定し、じぶんの好きなようにLinux環境を作成することができます。

KDE Plasma について

KDE PlasmaはUbuntuに採用されているGNOMEと並んで有名なLinux向けのデスクトップ環境です。WindowsライクなUIなのでWindowsユーザには特におすすめです。
昔は動作が重い、と言われていましたが、現在は改善されて、比較的軽量なデスクトップ環境といえるくらいになっていると思います。

CachyOS-kernelについて

CachyOS-kernelとはArch Linux派生のデスクトップ志向LinuxであるCachyOS向けに開発されている、デスクトップ用途に設計されたLinuxカーネルです。

CachyOS、CachyOSカーネルに関する詳しい解説は以前書いた記事にまとまっているので、こちらを参考にしていただければと思います。CPUスケジューラとビルド時最適化を組み合わせることで、低レイテンシで使いやすいデスクトップ環境を実現しています。

CachyOSのカーネルは他のディストリビューションでも使うことができ、特にGentoo向けには有志によりオーバーレイが作成され、Portage管理下でビルドできるようになっています。

上記を合わせた環境は非常に挑戦的な構成で、前回のArch Linux構成以上に問題が起きやすいと考えられます。そのため、今回もbtrfsをファイルシステムに採用します。

btrfsについて

btrfsは比較的新しいファイルシステムでext4やxfsと比べて高度な機能を持っています。

今回注目するのはスナップショット機能です。容量を殆ど消費することなくファイルシステムのスナップショットをとることができます。これを用いることで万が一システムアップデート時にシステム障害が発生してもロールバックすることができます。

これらを組み合わせて

- 高速動作
- 耐障害性
- 高性能なビルド管理システム

を併せ持つ非常にチャレンジングなLinuxデスクトップ環境を作成します。

インストール

使用するインストーラについて

今回はダウンロードページからamd64向けのBoot media Minimal Installation CDをダウンロードし使用しました。

(オプション)ssh接続をする

インストール中、長いコメント、繰り返し似たようなコマンドを実行する場面が多いため、ssh接続してインストールガイドからコピペでコマンドが実行できるようにすると打ち間違えせず楽にインストールができます。

rc-service sshd start 

rootパスワードを設定します。

passwd
ip addr show

で確認できるIPアドレスにアクセスをしてsshをしましょう。

パーティション分割~フォーマット

今回はUEFI向けにディスクを作成します。
swapは今回は省略します。

| デバイスパス | マウントポイント | ファイルシステム | | 容量 |
| ---- | ---- | ---- | ---- |
| /dev/sda1 | /efi | vfat | 1GB |
| /dev/sda2 | / | btrfs | 残り全体 |

cgdiskなどで上記パーティションレイアウトに分割します。

分割後、mkfsコマンドでフォーマットをします。

mkfs.vfat -F 32 /dev/sda1
mkfs.btrfs /dev/sda2

ルートパーティションのマウント

/mnt/gentoo下に今作成したパーティションをマウントします。

mkdir --parents /mnt/gentoo
mount /dev/sda2 /mnt/gentoo
mkdir --parents /mnt/gentoo/efi
mount /dev/sda1 /mnt/gentoo/efi

stage3ファイルのインストール

stage3ファイルをインストールします。

まず、/mnt/gentooに移動します。

cd /mnt/gentoo

CLI上で使えるlinksブラウザでstage3ファイルをダウンロードします。

links https://www.gentoo.org/downloads/mirrors/

Downloadページに移動してstage3をダウンロードしましょう。

この際は

stage3-amd64-desktop-openrc-*.tar.xz
という、デスクトップ+openrc環境用のstage3ファイルをダウンロードします。

USEフラグの初期値やprofileがデスクトップ向けに変更されているstage3のようです。

livecd /mnt/gentoo # ls
stage3-amd64-desktop-openrc-20251221T154556Z.tar.xz

このようになっていれば問題ありません。

stage3ファイルをインストールする

stageファイルのダウンロードができたらtarで展開します。

tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt/gentoo

コンパイルオプションの設定

Gentooではコンパイルオプションを/etc/portage/make.confに設定します。今展開したrootfs内のmake.confにオプションを書き込みます。

nano /mnt/gentoo/etc/portage/make.conf

CFLAGS、CXXFLAGS

CFLAGS、CXXFLAGSはGCCコンパイラとC++コンパイラの最適化フラグを定義する辺数です。

以下のように設定します。
-marchフラグを設定することになるかと思います。これを設定すると現在のシステムのアーキテクチャをターゲットとしてFLAGSを選択してくれます。

COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"

RUSTFLAGS

RUSTFLAGSはRustで書かれたソフトのビルドの際の最適化オプションを設定するフラグです。Rustで書かれたパッケージが多くなってきているのでこのフラグも設定しておいた方がよいです。

最適化レベルの設定はプロジェクトごとに任せ、ターゲットCPUのみ設定するのがおすすめされています。

RUSTFLAGS="${RUSTFLAGS} -C target-cpu=native"

並列コンパイル数を指定するMAKEOPTS変数はデフォルトではnprocが返すスレッド数と同じ数に指定されます。今回はデフォルト値を用います。問題が起きた場合は上限を指定します。

chrootする

DNS情報をコピーします。

cp --dereference /etc/resolv.conf /mnt/gentoo/etc/

必要なファイルシステムをマウントします。

多くのファイルシステムのマウントが必要です。これをコピペで済ませるためだけにssh接続をしているまであります。

mount --types proc /proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev
mount --bind /run /mnt/gentoo/run
mount --make-slave /mnt/gentoo/run

--make-slave、--make-rslaveはマウント先で行われたマウントをマウント元に反映されないようにするオプションです。例えば、/media/mntに--make-slaveをつけてマウントを行うと、/mnt内でマウントしたファイルシステムを/mediaから確認することができません。rslaveはこの設定を再帰的に行うオプションです。

openrcでは必須ではないようですが、一応行います。

新しい環境に入ります。入った後はchroot環境であることを忘れないようにPS1変数を変更して明示しておきます。

chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) ${PS1}"

ブートローダのために/dev/sda1をマウントしておきます。

mount /dev/sda1 /efi

Portageを設定する

Gentoo ebuildリポジトリのスナップショットをインストールする

以下コマンドを使うとインストール可能なパッケージの情報やプロファイルの一覧、ニュース等をリモートリポジトリと同期することができます。

emerge-webrsync

これからKDEなど大量のパッケージをダウンロードするため、ミラーサーバーを選択しておきます。

mirrorselectというツールを用いるとミラーサイトを明示的に選ぶことができます。

mirrorselect -i -o >> /etc/portage/make.conf

とすると、ミラーを選んだあと自動的にmake.confに設定ができます。今回はJAIST、IIJ、Rikenのミラーを選びました。

ミラー一覧
GENTOO_MIRRORS="rsync://ftp.iij.ad.jp/pub/linux/gentoo/ \
    http://ftp.iij.ad.jp/pub/linux/gentoo/ \
    https://ftp.iij.ad.jp/pub/linux/gentoo/ \
    ftp://ftp.iij.ad.jp/pub/linux/gentoo/ \
    https://ftp.jaist.ac.jp/pub/Linux/Gentoo/ \
    http://ftp.jaist.ac.jp/pub/Linux/Gentoo/ \
    ftp://ftp.jaist.ac.jp/pub/Linux/Gentoo/ \
    rsync://ftp.jaist.ac.jp/pub/Linux/Gentoo/ \
    http://repo.jing.rocks/gentoo \
    https://ftp.riken.jp/Linux/gentoo/ \
    http://ftp.riken.jp/Linux/gentoo/ \
    rsync://ftp.riken.jp/gentoo/"

プロファイルを選ぶ

プロファイルを指定します。プロファイルはUSE、CFLAGSなどの初期値を指定するだけでなくパッケージバージョンの範囲の固定などの安定したシステムを構築する上で重要な設定を行っています。

eselect profile list

で表示された中からプロファイルを選びます。

今回は

[7] default/linux/amd64/23.0/desktop/plasma (stable)

を選びます。

eselect profile set 7

CPU_FLAGS_*変数

CPU_FLAGS_*変数はCPUが持っている命令設置やハードウェア機能をビルド条件としてportageに伝える変数です。対応しているCPU命令を明示的に指定します。これを指定しないとパッケージによっては最適化がされず、動作が低速になる可能性があります。

cpuid2cpuflagsというアプリを用いることで自動設定を行うことができます。/etc/portage/package.use/00cpu-flagsに変数を書き込みます。

emerge --ask --oneshot app-portage/cpuid2cpuflags
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags

VIDEO_CARDS

VIDEO_CARDSは使用するGPUドライバをビルド対象に含めるかを明示的に伝える変数です。例えば仮想マシン上にインストールする場合は以下のような変数にします。

echo "*/* VIDEO_CARDS: virgl qxl" > /etc/portage/package.use/00video_cards

QEMUとVirtIO向けの設定です。

VIDEO_CARDS変数はこのページで確認できます。

タイムゾーンの更新

タイムゾーンを/Asia/Tokyoに設定します。

ln -sf ../usr/share/zoneinfo/Asia/Tokyo /etc/localtime

ロケールの設定

nano /etc/locale.gen

で必要なロケールのコメントアウトを解除します。

en_US.UTF-8 
ja_JP.UTF-8

を有効にします。/etc/locale.genの設定が終わったら

locale-gen

でロケールを生成します。

eselect locale listでロケールを選択しますが、日本語を選択すると文字化けが発生する可能性が高いのでとりあえず今はそのままで進めます。

環境をリロードします。

env-update && source /etc/profile && export PS1="(chroot) ${PS1}"

Linuxファームウェアのインストール

Linuxファームウェアをインストールします。この際にライセンス許諾の問題が発生します。

emerge --ask sys-kernel/linux-firmware

以下のようにpackage.license下でライセンス許諾を明示的に記載する必要があります。

mkdir -p /etc/portage/package.license
echo "sys-kernel/linux-firmware linux-fw-redistributable" \
  >> /etc/portage/package.license/linux-firmware

また、Intel CPUのマイクロコードは別にインストールする必要があります。これもライセンスの許諾が必要です。

mkdir -p /etc/portage/package.license
echo "sys-firmware/intel-microcode intel-ucode" \
  >> /etc/portage/package.license/intel-microcode

emerge --ask sys-firmware/intel-microcode

sys-kernel/installkernel

カーネルインストール時のinitramfs生成やブートローダ設定などを自動化するパッケージです。ブートローダとしてGRUBを指定するのでgrub USE変数を設定しておきます。

echo "sys-kernel/installkernel grub dracut" \
  >> /etc/portage/package.use/installkernel

emerge --ask sys-kernel/installkernel

fsckのインストール

btrfsを扱うためのfsckをインストールします。

emerge --ask sys-fs/btrfs-progs

CachyOSカーネルをインストール

CachyOSカーネルのビルドを行います。非公式リポジトリにCachyOSカーネルパッケージが用意されているため、非公式リポジトリを有効にします。

emerge --ask app-eselect/eselect-repository

eselect repository enable CachyOS-kernels
emaint sync -r CachyOS-kernels

ソースをインストールします。その際にUSE依存問題が発生するのでそれを解決します。

echo "dev-util/perf libpfm" >> /etc/portage/package.use/perf
emerge --ask sys-kernel/cachyos-sources

cachyos-sourcesにおけるCPUスケジューラの設定はUSEフラグにおいて設定ができます。デフォルトではboreフラグが有効になっており、BOREスケジューラが有効になります。今回はデスクトップ用途なのでBOREを使用します。

cachyOS Kernelが想定するLLVMでのコンパイルを行います。

まず、llvm、clang、lldをインストールします。

emerge --ask llvm-core/llvm llvm-core/clang llvm-core/lld

eselectでカーネル一覧表示をします。
現状だとcachyosカーネルだけが用意されていると思います。

eselect kernel list

cachyosを選択します。

eselect kernel set 1

カーネルソースがあるディレクトリに移動します。

cd /usr/src/linux

現在使っているモジュールを自動検出します。
マシンごとの設定をここで行います。

make localmodconfig

選択する設定はよくわからなければデフォルトで構いません。

デフォルトではbtrfsサポートがオフになっているため、コンフィグを変更します。 make nconfigでコンフィグオプションを変更します。

make nconfig

としてから

File systems-> <*>Btrfs filesystem support

を変更します。

またマウス設定やキーボード設定を行います。

Device Drivers ->Input device support -> [*]Mouse interface
Keyboard ->
[*] i8042 PC Keyboard controller
[*] PS/2 driver library
[*] PCI PS/2 keyboard and PS/2 mouse controller

ssh越しでの設定はlocalmodconfigでは自動作成されないのでオプションをより注意して作成する必要があります。

基本的にではなく、2回押して<*>の状態にしてください。
用途に応じて他のファイルシステムの対応もオンにしておきます。ext4がオフになっているので注意です。

カーネルをコンパイルします。``LLVM=1`でLLVMによるコンパイルを行います。

make -j"$(nproc)" LLVM=1

コンパイルが始まる前に複数回質問があります。

Link Time Optimization (LTO) > 
1. None (LTO_NONE) 
1. 2. Clang Full LTO (EXPERIMENTAL) (LTO_CLANG_FULL) (NEW) 
1. 3. Clang ThinLTO (EXPERIMENTAL) (LTO_CLANG_THIN) (NEW)

LTOの設定についてです。ここでは3を選びました。Full LTOと大差ない性能を実現しながら、ビルド時間を短縮することができます。

Randomize layout of sensitive kernel structures > 
1. Disable structure layout randomization (RANDSTRUCT_NONE) 
1. 2. Fully randomize structure layout (RANDSTRUCT_FULL) (NEW)

構造体メンバ順序をランダムにして攻撃を難しくするセキュリティ強化だそうです。OFFにする理由もないので2を選んでオンにします。

それ以外の質問はすべてEnterでデフォルト設定でよいです。質問が終わったらコンパイルが始まります。

コンパイルが終わったらモジュールのインストールとカーネルのインストールを行い、設定を終了します。

make modules_install
make install

先ほどinstallkernelをインストールしているため、カーネルインストール時の作業をまとめてやってくれます。

/etc/fstab

/etc/fstabを用意します。
以下内容を/etc/fstabに追加します。

/dev/sda1   /efi        vfat    umask=0077,tz=UTC     0 2
/dev/sda2   /            btrfs    defaults,noatime              0 1

Arch Linuxと同様にgenfstabを用いた/etc/fstab設定も可能です。chrootを一回抜けてgenfstabを使うと上記のような設定が簡単にできます。-UをつけるとUUID表記で/etc/fstabを設定できます。

emerge --ask sys-fs/genfstab
genfstab -U /mnt/gentoo >> /mnt/gentoo/etc/fstab

KDE Plasmaのインストール

KDE Plasmaをインストールします。今回は面倒を省くため、アプリ全部乗せのkde-plasma/plasma-metaをインストールします。かなり時間がかかります。寝る前などに行っておくとちょうどよいと思います。

emerge --ask kde-plasma/plasma-meta

インストール後はsddmが起動時自動起動するように設定します。/etc/conf.d/display-managerに以下の行を設定します。

DISPLAYMANAGER="sddm"

elogindとdisplay-managerを起動時自動起動するように設定します。

rc-update add elogind boot
rc-update add display-manager default

その他システムアプリのインストール

好き好みですが、検証環境として使うことが多そうなシステムなのでシステムロガーをインストールします。

emerge -S app-admin/sysklogd

インストール後は自動起動設定をしておきます。

rc-update add sysklogd default

現状だとターミナルが入っていません。
KDE Applications内のyakuakeというトップダウン型の使いやすいターミナルエミュレータをインストールします。

emerge --ask kde-apps/yakuake

ユーザ作成 ~ sudo設定まで

ユーザを作成します。

useradd -m <username>
passwd <username>

sudoをインストールします。

emerge --ask app-admin/sudo
visudo

%sudo ALL=(ALL:ALL) ALLの行のコメントを外します。

外した後にsudoグループを作成し、先ほど作成したユーザをsudoグループに所属させます。

groupadd sudo 
usermod -aG sudo <username>

日本語入力環境のインストール

日本語フォントと日本語入力環境をインストールします。

日本語環境はnoto-cjkと等幅フォントをインストールします。

emerge --ask media-fonts/noto-cjk media-fonts/mplus-outline-fonts

入力ツールとしてはfcitx5をインストールします。

emerge --ask app-i18n/fcitx fcitx-configtool

mozcはfcitx5USEフラグをつけてインストールします。
明示的にibus機能も切ってしまいます。

echo "app-i18n/mozc -ibus fcitx5" >> /etc/portage/package.use/mozc

emerge --ask app-i18n/mozc

grubのインストール

grubをインストールし、設定します。

emerge --ask --verbose sys-boot/grub

この際に
GRUB_PLATFORMS="efi-64"が有効になっているか確認します。

若し入っていなかった場合はUSE変数を追加します。

echo 'GRUB_PLATFORMS="efi-64"' >> /etc/portage/make.conf
emerge --ask sys-boot/grub

インストール出来たらgrub-installします。

grub-install --efi-directory=/efi

最後にgrub-mkconfigで設定ファイルを生成します。

grub-mkconfig -o /boot/grub/grub.cfg

再起動

ここまで来たら再起動を行います。
chrootからexitし、rebootを行いましょう。

exit 

cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount -R /mnt/gentoo
reboot

ログインするとこのような環境が出力されます。
neofetchを出力してみました。

image.png

まとめ

今回はGentoo + KDE Plasma + CachyOS + btrfsで非常に挑戦的なデスクトップ環境を作成しました。カーネルオプションの設定につまずき、動作確認が難航しました。

デスクトップ環境を持つ高性能ビルド環境。さらにビルドをまわしながらも他の作業を快適に行うことができるという面白いデスクトップ環境です。Gentoo構築の参考にしていただければと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?