Gentoo in WSL
systemdを使うので、amd64のsystemdのものをダウンロードする。
make.confの修正。
- COMMON_FLAGSに
-march=native
を追加 - MAKE_OPTSに
/proc/cpuinfo
のCPU数+1を設定
emeger-webrsync
をやる
portageをgit管理にする。
> Adding a binary package host
をやっておく。バイナリパッケージうれしい!
これをやるとemergeでパッケージをインストールする際にフリーズっぽくなるのでやめる。
/etc/locale.gen
は以下を有効に。
en_US ISO-8859-1
en_US.UTF-8 UTF-8
ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
デフォルトのlocaleはen_US.UTF-8を設定する。
# eselect locale list
# eselect locale set 6 # 6は適宜しらべてものにする
これはmitamaeを使ったセットアップでもやるのでやらなくていい。
一般ユーザを作る
# useradd -m -G wheel kenchan
Creating mailbox file: No such file or directory
# passwd kenchan
/etc/wsl.conf
を作る。
[boot]
systemd=true
[user]
default=kenchan
powershellからwslをshutdownして再起動する。
PS > wsl --shutdown
PS > wsl -d Gentoo
ユーザーはここで変えない方がいいかも。もしくはsystemdが普通に起動するところまで先にやるか。
systemdがinitializingで止まってしまう。
# systemctl status
Failed to dump process list for '...', ignoring: Input/output error
● ...
State: initializing
Units: 241 loaded (incl. loaded aliases)
Jobs: 18 queued
Failed: 0 units
Since: Sat 2024-02-10 17:27:58 JST; 48s ago
systemd: 254
Tainted: cgroupsv1
CGroup: /
調べていくと、systemd-firstboot.serviceがハングしてる。
# systemctl list-units --state=activating
UNIT LOAD ACTIVE SUB JOB DESCRIPTION
systemd-firstboot.service loaded activating start start First Boot Wizard
...
stopすると。systemd自体はdegradedになるが、再起動すると普通にあがってくる。
# systemctl stop systemd-firstboot
# systemctl status
Failed to dump process list for '...', ignoring: Input/output error
● ...
State: degraded
Units: 240 loaded (incl. loaded aliases)
Jobs: 0 queued
Failed: 1 units
Since: Sat 2024-02-10 17:27:58 JST; 2min 23s ago
systemd: 254
Tainted: cgroupsv1
CGroup: /
PS > wsl --shutdown
PS > wsl -d Gentoo
# systemctl status
Failed to dump process list for '...', ignoring: Input/output error
● ...
State: running
Units: 246 loaded (incl. loaded aliases)
Jobs: 0 queued
Failed: 0 units
Since: Sat 2024-02-10 17:31:29 JST; 6s ago
systemd: 254
Tainted: cgroupsv1
CGroup: /
systemd-firstbootで行われるもろもろは、WSL環境であれば別で設定されるものなので放置する。
firstbootを止めるの、.wslconfigに以下を追加すればよいと、Gentooのwikiに書いてある。ワークアラウンドとして。
[wsl2]
kernelCommandLine = systemd.firstboot = 0
ACCEPT_KEYWORDS="~amd64" を追加して、emerge -uDN @world
を。お好みで emerge -e @world
systemd-networkdも不要なのでsystemctl disable systemd-networkd
をして再起動する。
setupに必要なものとして、sudoとgitを入れておく。
networkmodeをmirroredにした影響か、IPv6がふってくる環境限定かわからないが、ping等が失敗するようになった。
ping: sock4.fd: 3 (socktype: SOCK_DGRAM), sock6.fd: 4 (socktype: SOCK_DGRAM), hints.ai_family: AF_UNSPEC
gitやcurlは動くが、ping等、resolvd経由するものがだめになった?以下のも同じエラーになる。
resolvectl query github.com
wslのnetworkmodeをmirroredにしつつ、かつ generateResolvConf=false
することで直った。
networkMode = mirrored
だと Windowsから localhost
でWSLに接続できないように見えるのでやめた。
CursorがWSL2から起動できないのは既知の問題だった
issueコメントにあるgistでcursor
を置き換えたら動くのでそれで様子をみる。
cursorをwslから起動するのはこのスクリプトのほうがよいかも。