Closed6

【バイナリ展開で解決】WSL2(Ubuntu v22.04)でZigを動かしたい

ピン留めされたアイテム
WhyKWhyK

結論として、以下記事を読んでバイナリを落として展開して完了とした
https://qiita.com/hidman/items/27770ffcf0551ce9e813

$ 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

でバイナリのパスを書き込み、即時適用

.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.
WhyKWhyK

Zigを動かすときにいくつか引っかかってるのでメモ書き

WhyKWhyK

環境

$ 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"
WhyKWhyK

私の環境の場合、公式のUbuntu (snap)に従ってインストールする必要がある
https://github.com/ziglang/zig/wiki/Install-Zig-from-a-Package-Manager

ただ、インストールすると以下のようなエラーが出た

$ 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

そこで以下記事を参考にした
https://zenn.dev/dozo/articles/63c3e066f3c6ed

デーモンが動いていないらしい、という話だったので試したら同じだった

$ 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

無事に実行できた

WhyKWhyK

ただ、しばらく経ったあとに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

探していたところ、以下記事がヒット
https://qiita.com/sakaia/items/083d1349eec705aac207
以下コマンドを試したところ、ログインしろというエラーが出たため、さらに調査

$ sudo snap debug connectivity
error: access denied (see 'snap help login')

現在、WSL公式の以下のIssueに突き当たったため、後で読むステータスになっている
https://github.com/microsoft/WSL/issues/5126

WhyKWhyK

https://github.com/microsoft/WSL/issues/5126#issuecomment-716389723

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を自分のログイン名にすれば良いらしい?
https://zenn.dev/link/comments/4db6cf770ebf62
ただ、PIDがわからなかったのと、Snapを最初にやったときにログインした記憶がなさすぎて「ログイン名なんてあったか?」となって難航した

このスクラップは2023/07/30にクローズされました