📑
Gentoo on WSL2
個人的なおぼえがきです
セットアップ
例
stage3-amd64-openrc-YYYYMMDDTHHMMSSZ.tar.xz をダウンロードする
Stage3 をインポートするだけでインストールできる
wsl --import Gentoo C:\Users\nanasess\wsl\Gentoo\ .\stage3-amd64-openrc-20220206T170533Z.tar --version 2
2022-09-23追記
0.67.6 より、 systemd が利用できるようになった。
以下の手順で systemd を利用可能
-
stage3-amd64-systemd-YYYYMMDDTHHMMSSZ.tar.xz
をダウンロード -
wsl --import
を実行するwsl --import Gentoo C:\Users\nanasess\wsl\Gentoo\ .\stage3-amd64-systemd-20220206T170533Z.tar --version 2
-
/etc/wsl.conf
に以下を追記する[boot] systemd=true
-
wsl --shutdown
を実行し、 WSL2 を再起動する -
systemctl list-units --type=service
を実行して、サービス一覧が確認できれば OK
2023-02-05追記
上記では systemd が起動しない模様。
以下を /etc/wsl.conf に追記することで systemd を使用できるようになった
[boot]
systemd=true
command = "/usr/bin/env -i /usr/bin/unshare --pid --fork --mount-proc /lib/systemd/systemd --system-unit=basic.target"
see https://askubuntu.com/a/1379567
2023-02-25追記
Emacs を GTK+ サポート付きでビルドすると、 xwidget をロードした瞬間に Emacs がクラッシュする。
export WEBKIT_FORCE_SANDBOX=0
を設定しておくことで回避できるが、 Windows のスタートメニューのアイコンから起動した場合は、ユーザーのシェル初期化ファイルを経由しないため、環境変数の設定ができない。
これを回避するためには、以下のコマンドを実行するショートカットをデスクトップ等に作成しておく
C:\Windows\System32\wslg.exe -d Gentoo --cd "~" -- zsh -lic /usr/bin/emacs
see https://stackoverflow.com/a/71112917
ユーザー作成とパスワード設定
useradd -m -G wheel nanasess
passwd nanasess
passwd
デフォルトユーザー
/etc/wsl.conf
[user]
default=nanasess
/etc/portage/make.conf
USE="X gtk -ipv6 xml truetype pcre unicode embed cgi acl berkdb bzip2 calendar cdb cjk curl exif firebird ftp gmp iconv imap iodbc kerberos ldap mysqli nls posix postgres readline selinux session snmp soap sockets spell sqlite ssl tidy xmlrpc xpm zip zlib icu xft jpeg json imagemagick tiff svg xml harfbuzz gif libxml2 gd png webp"
# Enable python 3.9 and set 3.9 as default
PYTHON_TARGETS="python3_8 python3_9"
PYTHON_SINGLE_TARGET="python3_9"
PHP_TARGETS="php7-4"
# Define targets for QEMU
QEMU_SOFTMMU_TARGETS="aarch64 arm i386 riscv32 riscv64 x86_64"
QEMU_USER_TARGETS="aarch64 arm i386 riscv32 riscv64 x86_64"
# No hardware videocard support
VIDEO_CARDS="dummy"
# Disable non-functional sandboxing features
FEATURES="-ipc-sandbox -pid-sandbox -mount-sandbox -network-sandbox"
# Always ask when managing packages, always consider deep dependencies (slow)
EMERGE_DEFAULT_OPTS="--ask --complete-graph"
# Enable optimizations for the used CPU
COMMON_FLAGS="-march=znver2 -O2 -pipe"
CHOST="x86_64-pc-linux-gnu"
CFLAGS=${COMMON_FLAGS}
CXXFLAGS=${COMMON_FLAGS}
FCFLAGS=${COMMON_FLAGS}
FFLAGS=${COMMON_FLAGS}
MAKEOPTS="-j28"
# NOTE: This stage was built with the bindist Use flag enabled
PORTDIR=/var/db/repos/gentoo
DISTDIR=/var/cache/distfiles
PKGDIR=/var/cache/binpkgs
# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C
ACCEPT_LICENSE="*"
GENTOO_MIRRORS="https://ftp.riken.jp/Linux/gentoo/ rsync://ftp.riken.jp/gentoo/"
#GENTOO_MIRRORS="rsync://ftp.riken.jp/gentoo/"
@world パッケージのインストール
emerge-webrsync
emerge --oneshot --deep sys-devel/gcc
emerge --oneshot --usepkg=n sys-devel/libtool
emerge --oneshot --emptytree --deep @world
emerge --oneshot --deep @preserved-rebuild
emerge --ask --depclean
locale の設定
sudo echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen
sudo locale-gen
sudo eselect locale list
wslg の使用
export DISPLAY=:0.0
emerge
emerge --ask app-admin/sudo
sudo emerge --ask app-editors/gvim
sudo emerge --ask app-shells/zsh
sudo emerge --ask app-shells/zsh-complations
sudo emerge --ask app-shells/gentoo-zsh-completions
sudo emerge --ask dev-lang/php:7.4
sudo emerge --ask net-libs/nodejs
sudo npm install --global yarn
sudo emerge --ask github-cli
sudo emerge --ask www-client/google-chrome
equery
Portage の管理を簡単にするツール
emerge --ask app-portage/gentoolkit
Emacs
sudo emerge --ask app-editors/emacs
sudo emerge --ask media-fonts/mix-mplus-ipa
fc-cache -f -v
sudo emerge --ask sys-apps/ripgrep
sudo emerge --ask app-text/cmigemo
sudo emerge --ask app-arch/sharutils
sudo emerge --ask x11-apps/xrdb
echo "Emacs.font: MigMix 1M-12" >> ~/.Xresources
xrdb -merge ~/.Xresources
OneDrive
emerge --ask --noreplace app-eselect/eselect-repository
sudo eselect repository enable dlang
sudo emerge --ask app-portage/layman
sudo layman -a dlang
sudo emerge --sync dlang
sudo emerge --ask x11-libs/libnotify
sudo emerge --ask net-misc/onedrive
onedrive --synchronize --single-directory 'emacs'
/etc/portage 以下の IaC
Playwright で必要なライブラリ
-
x11-misc/xvfb-run
とmedia-video/ffmpeg
に依存するライブラリが入っていれば、 Playwright の video を有効にできることを確認-
--headed
で実行する必要がある
-
## MAKEOPTS="-j28" とかだとビルド中にプロセスが落ちる
sudo MAKEOPTS="-j2" ACCEPT_KEYWORDS="~amd64" emerge --ask dev-lang/spidermonkey
sudo emerge --ask x11-misc/xvfb-run
sudo emerge --ask media-video/ffmpeg
OpenRC から systemd へ移行する
OpenRCなGentoo Linuxをsystemd化する を参考にさせていただきました。
WSL2 の場合はWSLのカーネルを使用するため、カーネルの再構築は必要ない。
プロファイルを変更し、 emerge @world
を実行すれば利用できる。
- eselectコマンドを使用して、systemd用のプロファイルに切り替える
eselect profile list #現在のプロファイル確認&sytemdプロファイルの番号を確認。 eselect profile set 15 #変更 eselect profile list #確認 -------(省略)--------- [15] default/linux/amd64/17.1/systemd (stable) *
- 変更したプロファイルに基づき、システムを再構築する
emerge -avDN @world
-
/etc/wsl.conf
に以下を追記する[boot] systemd=true
-
wsl --shutdown
を実行し、 WSL2 を再起動する -
systemctl list-units --type=service
を実行して、サービス一覧が確認できれば OK
すべてのパッケージをリビルドする
sudo emerge -e world && emerge --depclean -a
Discussion