(追記)ストア版がv1になってビルトインサポートが安定化したのでややこしくないようにタイトル書き換えました
センセーショナルなタイトルのような気もするけど新規性のある所だけかいつまんでるので、抜けてるところは他のブログでも見てください。
新しいPCを買いました。
いまのところ物理的にも論理的にも軽いので良いです。ぜんぜん使ってないけど。 ところで5800Uと5600XってCineBenchのスコアがあんまり変わらないらしいね。デスクトップェ……
環境検討
今回はデュアルブートをせずになんとかしようの試みをしました。
このPCなぜかWin11 Pro が入ってるのでHyper-Vを検討しましたが、別にめちゃくちゃパフォーマンスが良い訳ではないらしいのでやめました。
で次にWSL。せっかくなのでディストリはGentooにしました。
入れ方はかんたん。Stage3 tarballを落としてきてxz部分だけ解凍したらwsl --import
するだけ。あと細かいのはあるけど↓に大体書いてあります。
pacstrapするだけのArchはインスコ楽だよなあと思ってたけど、こう思うとGentooも大概楽だよなあと(最近GUIのLive USBも出たらしいし)。 ちなみにWSLでArchやるならarchwslがいいと思います(scoopで入るし)。
閑話休題(これが言いたいだけ)。
genie
以前からWSL環境でsystemd環境下っぽい動きのできるgenie
というのを知っていたので導入を検討しましたが、配布パッケージがない模様。
しかたがないのでebuildを書きました。↓のoverlayに入っています。 github.com
時代は(laymanではなく) eselect-repositoryらしいのでこれ経由で(というかGitHubがgit://
を無効化したことに気付いてなくて執筆時点ではlayman経由だと無理です)。
emerge app-eselect/eselect-repository eselect repository add gachicam-overlay git https://github.com/Gachicam/gachicam-overlay.git
あとemerge --sync
とかいるんだっけ
genieはビルドの途中でpythonライブラリを(pip経由で)入れようとするんですが、portageは当然これを許さないので自前でsrc_compile
とかを書き直しています。もちろん入れようとするパッケージのebuildも↑のoverlayに入っています。
1つはGitHubから直pullするやつになっていて(PyPIにはあるけどgenieが使っているバージョンのものではない)、それはNo Keywordsになっています。悪しからず。
ということでflaggieが入っているなら↓からどうぞ。
flaggie +~amd64 sys-apps/genie dev-python/python-hosts flaggie dev-python/nsenter '+kw::**' emerge sys-apps/genie
あとは~/.profile
とかで適当に
if [ ! -v INSIDE_GENIE ]; then genie -s fi
(これはwikiに乗ってるやつ)
おまけ: YubiKey
YubiKeyが便利なので使っているんですが、genieの環境下だとwsl2-ssh-pageant
が(READMEに乗ってるままだと)使えなくなる可能性が高いです(未検証)。
wsl2-ssh-pageant
自体についての説明は省略(そのへんにいくらでも転がってるので)。
一応リンク。
github.com
で、
これめちゃくちゃ関係ありそうだなあ…… pic.twitter.com/KzTtsfZFe3
— (*´ー`*) (@xecual) 2022年5月15日
関係あった (https://lists.gnupg.org/pipermail/gnupg-devel/2016-June/031192.html あたり?)
/var/run/<uid>/gnupg
が作られてしまうものはどうしようもないので便乗してgpgconf --list-dirs
を使う方向に。
あとはGpg4Win 4.0あたりでソケットのパスが%LOCALAPPDATA%\gnupg
になったらしいことを踏まえ、修正版
wsl2_ssh_pageant_bin="/path/to/wsl2-ssh-pageant.exe" wsl2_ssh_pageant_opt="-verbose -logfile $HOME/.wsl2_ssh_pageant.log -gpgConfigBasepath 'C:/Users/<username>/AppData/Local/gnupg'" if test -x "$wsl2_ssh_pageant_bin"; then ## SSH export SSH_AUTH_SOCK=$(gpgconf -L agent-ssh-socket) if ! ss -a | grep -q "$SSH_AUTH_SOCK"; then rm -f "$SSH_AUTH_SOCK" (setsid nohup socat UNIX-LISTEN:"$SSH_AUTH_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin $wsl2_ssh_pageant_opt" >/dev/null 2>&1 &) fi ## GPG export GPG_AGENT_SOCK=$(gpgconf -L agent-socket) if ! ss -a | grep -q "$GPG_AGENT_SOCK"; then rm -rf "$GPG_AGENT_SOCK" (setsid nohup socat UNIX-LISTEN:"$GPG_AGENT_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin $wsl2_ssh_pageant_opt -gpg S.gpg-agent" >/dev/null 2>&1 &) fi else echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable." fi unset wsl2_ssh_pageant_bin unset wsl2_ssh_pageant_opt
ちなみにArchだと(?) gpg-agentのsystemdソケットが開いているせいかなんかで動かないことがあるので、そういうときは
$ systemctl --user mask gpg-agent.socket gpg-agent-ssh.socket
するといいかも(disableだとgenieが再起動した時に生き返る)。
追記:
VSCodeとかでいい感じにするために/etc/wsl.conf
でデフォルトユーザを変更すると↑の作戦が使えなくなったのですが、私の場合wsl2-ssh-pageant
のログファイルのownerがrootなことに気付いたので一旦消してみたところ(とりあえず)動いたので、同じ症状が出たら試してみてください(また動かなくなるかもしれん)。
逆になんでrootになっていたんだ……?(無知)
これでしばらく頑張ってみます。