経緯
wsl2でGUIアプリが使いたくなったので、放置していたwsl1をアップデートしようと試みた。
wsl --list --verbose NAME STATE VERSION * Ubuntu-20.04 Stopped 1 Ubuntu-20.04-sandbox01 Stopped 2
これである。試すだけなら新しくいれればいいのだが、再度アプリをインストールするのが面倒なので、今回はアップデートしたいのである。アップデートは公式の方法によると以下
そしてsudo apt update
したのち、とりあえずsudo apt install gedit -y
としてテストがてらgedit
を使おうとしたらば
$ gedit Unable to init server: Could not connect: Connection refused (gedit:7785): Gtk-WARNING **: 10:34:52.171: cannot open display:
などと言われおる。検索して10個ほど読んだが有益そうな情報はなかったため、今度はsudo apt install x11-apps -y
としてxeyes
を使おうとした
$ xeyes Error: Can't open display:
いずれもインストール時・アップデート時はSucces!もFailed!も言われていない。ここにきてなんかおかしいな~と思い、wsl --update
してから確認してなかったのだがバージョンを再度みてみると
wsl --list --verbose NAME STATE VERSION * Ubuntu-20.04 Stopped 1 Ubuntu-20.04-sandbox01 Stopped 2
変わっとらんやないかい!ということでwslをアップデートするコマンドを実行
wsl --set-version Ubuntu-20.04 2 変換中です。この処理には数分かかることがあります... WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください ディストリビューションのエクスポートが失敗しました。 : tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket: tar format cannot archive socket
なんか無限にtar format cannot archive socket
が出力されとる......
やったこと
/tmpを消す・--exportを使う・bsdtarを使う
ここにそう書いてあったので試した
まず/tmp
を消すことについて。どうやらvscodeのRemote-WSLでWSL環境を使うたびにソケットファイルが作成される?らしい。なんかたくさん残っていた
それ以外のファイルやフォルダもあるが、まとめてrm /tmp/ -r
で消した。そうすると無限に出力されるのは解決されたが、エラーメッセージなどなにひとつ出ずに「ディストリビューションのエクスポートが失敗しました」と出て以前解決されず。
次にwslコマンドのオプションである、--export
を使って環境をまるごと吐き出し、--import
かつ--version 2
を使うことでWSL2として読み込む方法である。ヘルプの内容は以下
しかしこれでも「ディストリビューションのエクスポートに失敗しました。」というエラーが出て失敗する。エラーメッセージは無い。失敗してもtar.gz
で固めたファイルができているがどうせ失敗している。本来ならこれを--import
する際にバージョンを指定してやることができるらしい。
ここで、さきほどのissuesでは、exportではなく直接tarにするコマンドを使って成功したという。以下のようなやつ。適宜変更する。
PS C:\Users\XXX> wsl sudo /mnt/c/Windows/System32/lxss/tools/bsdtar --exclude="/dev/*" --exclude="/proc/\*" --exclude="/sys/\*" --exclude="/tmp/\*" --exclude="/run/\*" --exclude="/mnt/\*" --exclude="/media/\*" --exclude="/lost+found/\*" --exclude="\*\*/node_modules/\*" -C / --xattrs --one-file-system -czpvf '/mnt/c/Users/XXX/WLinux-full.tar.gz'
わたしの場合はこれをしても失敗し、出来損ないのtarballが出来上がっただけであった。
ファイルサイズを減らす
今まで使っていたWSLはメディアファイル(動画や音楽ファイル)をDLしたり、適宜ffmpeg
で変換したりする目的で使うのが主であった。それらのファイル総量がわりとでかいことになっていた
もうアップデートするのは諦めて、最悪WSL2環境を作ってこのディレクトリだけ移してやればいいか、と思い、一旦WSLの外に移動したあと、試しに変換してみた。
なぜかあっさりとうまくいった......何故...... ちゃんとGUIアプリも動いた。
原因はわからないが、同じような問題に直面したときは、とりあえず巨大なファイルやフォルダは一旦逃して試してみるのも手ということにしておく