Open20

Gentoo in WSL

kenchankenchan

systemdを使うので、amd64のsystemdのものをダウンロードする。

kenchankenchan

make.confの修正。

  • COMMON_FLAGSに-march=nativeを追加
  • MAKE_OPTSに /proc/cpuinfoのCPU数+1を設定
kenchankenchan

> Adding a binary package host

をやっておく。バイナリパッケージうれしい!

これをやるとemergeでパッケージをインストールする際にフリーズっぽくなるのでやめる。

kenchankenchan

/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は適宜しらべてものにする
kenchankenchan

これはmitamaeを使ったセットアップでもやるのでやらなくていい。

kenchankenchan

一般ユーザを作る

# useradd -m -G wheel kenchan
Creating mailbox file: No such file or directory

# passwd kenchan
kenchankenchan

/etc/wsl.conf を作る。

[boot]
systemd=true

[user]
default=kenchan
kenchankenchan

ユーザーはここで変えない方がいいかも。もしくは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環境であれば別で設定されるものなので放置する。

kenchankenchan

firstbootを止めるの、.wslconfigに以下を追加すればよいと、Gentooのwikiに書いてある。ワークアラウンドとして。

[wsl2] 
kernelCommandLine = systemd.firstboot = 0
kenchankenchan

ACCEPT_KEYWORDS="~amd64" を追加して、emerge -uDN @world を。お好みで emerge -e @world

kenchankenchan

systemd-networkdも不要なのでsystemctl disable systemd-networkdをして再起動する。

kenchankenchan

setupに必要なものとして、sudoとgitを入れておく。

kenchankenchan

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 することで直った。

kenchankenchan

networkMode = mirrored だと Windowsから localhost でWSLに接続できないように見えるのでやめた。