Open18

WSL Ubuntu-24.04にしたらpecoがバグったので調査メモ

inomotoinomoto

22.04環境

  • クリーンインストールはまだ試してない(ちょっとめんどくさい)
  • echo TERMするとxterm-256color
  • echo hoge | env TERM=xterm-256color pecoでもecho hoge | env TERM=xterm pecoでも問題は起こらない
  • peco version v0.5.10 (built with go1.17)
inomotoinomoto

dockerでテスト。0.5.11のamd64をダウンロードした状態で

$ docker run -v $PWD:/mnt -it ubuntu:24.04 bash
# echo $TERM
xterm
# echo hoge | /mnt/peco
(問題ない)
# echo hoge | env TERM=xterm-256color /mnt/peco
(問題ない)
# apt update
# apt install peco
# peco --version
peco version v0.5.10 (built with go1.21.0)
# echo hoge | peco
(問題ない)
# echo hoge | env TERM=xterm-256color peco
(壊れる)
inomotoinomoto

同様にubuntu:22.04でテストすると、全パターンで問題ない。なおpeco version v0.5.10 (built with go1.17)

inomotoinomoto

24.04環境

  • いろいろセットアップ完了した状態で問題が再現すること・TERM=xtermで直るのが確認できている
  • echo TERMするとxterm-256color

クリーンインストールでテスト

wsl exportしてバックアップしたのち、

PS> wsl --unregister Ubuntu-24.04
PS> wsl --install Ubuntu-24.04
(user/passセットアップ)
$ sudo apt update
$ sudo apt install peco
$ echo $TERM
xterm-256color
$ peco --version
peco version v0.5.10 (built with go1.21.0)
$ echo hoge | peco
(壊れる)

$ curl -OL https://github.com/peco/peco/releases/download/v0.5.11/peco_linux_amd64.tar.gz
(略)
$ tar xzf peco_linux_amd64.tar.gz
$ ./peco_linux_amd64/peco --version
peco version v0.5.11 (built with go1.19.5)
$ echo hoge | ./peco_linux_amd64/peco
(問題ない)
inomotoinomoto

今のところgo versionの差異が怪しいように見えるので、検証する。
環境はUbuntu 22.04

inomotoinomoto

peco/pecoをcloneして、checkout v0.5.11しておく。

$ go version
go version go1.22.3 linux/amd64
$ go env | grep GOPATH
GOPATH='/opt/asdf-vm/installs/golang/1.22.3/packages'
$ mkdir /opt/asdf-vm/installs/golang/1.22.3/packages
$ cp -r peco /opt/asdf-vm/installs/golang/1.22.3/packages/ # cloneとcheckoutしておいたやつ
$ cd /opt/asdf-vm/installs/golang/1.22.3/packages/peco/
$ make build
$ ./releases/peco_linux_amd64/peco --version
peco version v0.5.11 (built with go1.22.3)
$ echo hoge | env TERM=xterm-256color ./releases/peco_linux_amd64/peco
(問題ない)
inomotoinomoto

いちおうgo 1.21.0 も試してみたけど、再現しなかった

inomotoinomoto

(Ubuntu 24.04の環境を戻しながら気づいたけど、ビルドテストはdockerで良かったな)

inomotoinomoto

Ubuntu 24.04でのgo 1.22.3, 1.21.0それぞれ全部再現しなかった

$ ./releases/peco_linux_amd64/peco --version
peco version v0.5.11 (built with go1.21.0)
$ peco --version
peco version v0.5.10 (built with go1.21.0)
$ echo hoge | env TERM=xterm-256color ./releases/peco_linux_amd64/peco
(問題ない)
$ echo hoge | env TERM=xterm-256color peco
(再現)
inomotoinomoto

とするとapt版をビルドしている環境が良くないのかな。

inomotoinomoto

バイナリと実行環境のテスト。wsl ubuntu 24.04環境で

$ cp /usr/bin/peco ./peco_2404apt
$ echo hoge | ./peco_2404apt
(再現)
$ docker run -v $PWD:/mnt -it ubuntu:22.04 bash
# echo hoge | env TERM=xterm-256color /mnt/peco_2404apt
(問題ない)
$ docker run -v $PWD:/mnt -it ubuntu:24.04 bash
# echo hoge | env TERM=xterm-256color /mnt/peco_2404apt
(再現)
$ cp /usr/local/bin/peco ./peco_2404build # wsl 24.04環境で自前ビルドしたやつ
$ echo hoge | ./peco_2404build
(問題ない)
$ docker run -v $PWD:/mnt -it ubuntu:22.04 bash
# echo hoge | env TERM=xterm-256color /mnt/peco_2404build
(問題ない)
$ docker run -v $PWD:/mnt -it ubuntu:24.04 bash
# echo hoge | env TERM=xterm-256color /mnt/peco_2404build
(問題ない)
x on docker 22.04 on docker 24.04
apt版 o x
自前ビルド版 o o
inomotoinomoto

dockerの22.04のapt版を拾ってきてみた

$ docker run -v $PWD:/mnt -it ubuntu:22.04 bash
# apt update
# apt install peco
# cp /usr/bin/peco /mnt/peco_2204apt
$ echo hoge | ./peco_2204apt
(再現)
$ docker run -v $PWD:/mnt -it ubuntu:22.04 bash
# echo hoge | env TERM=xterm-256color /mnt/peco_2204apt
(問題ない)
$ docker run -v $PWD:/mnt -it ubuntu:24.04 bash
# echo hoge | env TERM=xterm-256color /mnt/peco_2204apt
(再現)
x on docker 22.04 on docker 24.04 on wsl 24.04
apt 24.04版 o x x
apt 22.04版 o x x
自前ビルド版 o o o
$ ./peco_2204apt --version
peco version v0.5.10 (built with go1.17)
$ ./peco_2404apt --version
peco version v0.5.10 (built with go1.21.0)
$ ./peco_2404build --version
peco version v0.5.11 (built with go1.21.0)
inomotoinomoto

あーここに来てpeco自体のバージョンがずれてることに気付いてしまった

inomotoinomoto

ひとまず、自前ビルド版の peco version v0.5.10 (built with go1.21.0) でon wsl 24.04で再現しないことは確認した

inomotoinomoto

apt版(pecoバージョン問わず)を24.04環境(wsl/docker問わず)で動かした場合にダメ、という感じ...?