【バイナリ展開で解決】WSL2(Ubuntu v22.04)でZigを動かしたい
結論として、以下記事を読んでバイナリを落として展開して完了とした
$ wget https://ziglang.org/download/0.10.1/zig-linux-x86_64-0.10.1.tar.xz
でv0.10.1をダウンロード
$ sudo mkdir /usr/local/zig
$ sudo tar Jxvf zig-linux-x86_64-0.10.1.tar.xz -C /usr/local/zig --strip-components 1
で指定のディレクトリに展開
$ vi ~/.bash_profile
でバイナリのパスを書き込み、即時適用
export PATH=/usr/local/zig:$PATH
$ source ~/.bash_profile
これでZigの起動まで持ち込めた
$ zig zen
* Communicate intent precisely.
* Edge cases matter.
* Favor reading code over writing code.
* Only one obvious way to do things.
* Runtime crashes are better than bugs.
* Compile errors are better than runtime crashes.
* Incremental improvements.
* Avoid local maximums.
* Reduce the amount one must remember.
* Focus on code rather than style.
* Resource allocation may fail; resource deallocation must succeed.
* Memory is a resource.
* Together we serve the users.
Zigを動かすときにいくつか引っかかってるのでメモ書き
環境
$ uname -sr
Linux 5.15.90.1-microsoft-standard-WSL2
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"
私の環境の場合、公式のUbuntu (snap)に従ってインストールする必要がある
ただ、インストールすると以下のようなエラーが出た
$ sudo snap install zig
error: cannot communicate with server: Post http://localhost/v2/snaps/zig: dial unix /run/snapd.socket: connect: no such file or directory
そこで以下記事を参考にした
デーモンが動いていないらしい、という話だったので試したら同じだった
$ service snapd status
snapd: unrecognized service
ので、記載されている以下の回避策を実行
sudo apt update && sudo apt install -yqq daemonize dbus-user-session fontconfig
sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
exec sudo nsenter -t $(pidof systemd) -a su - $LOGNAME
無事に実行できた
ただ、しばらく経ったあとにzigコマンドを実行したところ
$ zig --help
internal error, please report: running "zig" failed: cannot find installed snap "zig" at revision 6352: missing file /snap/zig/6352/meta/snap.yaml
というエラーが起きた
デーモンが死んでいるのかと思ったがそうでもない
$ service snapd status
● snapd.service - Snap Daemon
Loaded: loaded (/lib/systemd/system/snapd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2023-07-28 08:36:18 JST; 4h 30min ago
TriggeredBy: ● snapd.socket
Main PID: 335
Tasks: 16 (limit: 9479)
Memory: 205.5M
CGroup: /system.slice/snapd.service
└─335 /usr/lib/snapd/snapd
探していたところ、以下記事がヒット
以下コマンドを試したところ、ログインしろというエラーが出たため、さらに調査$ sudo snap debug connectivity
error: access denied (see 'snap help login')
現在、WSL公式の以下のIssueに突き当たったため、後で読むステータスになっている
Did you replace the placeholders with your values?
(意訳:プレースホルダーを自分の値に置き換えた?)
忘れてた……。
You need to execute the first two commands. Then use top (or htop) to find out the PID of systemd and then use it to replace the $(pidof systemd) in the third command and replace $LOGNAME with your login name.
以下でやってたコマンドの2つを実行して、最後のコマンドの$(pidof systemd)
を自分のPIDにし、$LOGNAME
を自分のログイン名にすれば良いらしい?
ただ、PIDがわからなかったのと、Snapを最初にやったときにログインした記憶がなさすぎて「ログイン名なんてあったか?」となって難航した