WSL2
Table of Contents
ArchLinux disk compress
今まで使ってきたArchLinuxの仮想Diskが肥大化していて無駄もこの上ない。 VMWarePlayerのDisk圧縮って、どうやるの? ググったら、先人がおられた。
試しにやってみる。いきなりメインDiskじゃ怖いので、予備のやつで実験。
/dev/sdb1 20464208 24 19399328 1% /mnt
Linux上のdfコマンドでは、この通り空なんだけど、Windows10上では7.5G有ったぞ。 このDiskはqemuなrisc-vをやてた時の残骸だったりする。もう秋田んで削除し たんだけど、まだWindows上では肥大化したままだ。
[sakae@arch mnt]$ sudo dd if=/dev/zero of=./zero bs=1M status=progress 20738736128 bytes (21 GB, 19 GiB) copied, 46 s, 451 MB/s dd: error writing './zero': No space left on device 19969+0 records in 19968+0 records out 20938543104 bytes (21 GB, 20 GiB) copied, 46.2727 s, 453 MB/s [sakae@arch mnt]$ df /dev/sdb1 20464208 20447824 0 100% /mnt
zeroファイルを削除してLinuxをシャットダウンする。 ここからが、vmware-toolbox-cmd の無いArchLinuxと言うかオイラー流です。
プレーヤーのコントロール画面から、仮想マシンの編集をクリックし、目的のDiskを選択。 最初にディスユーティリティからデフラグする。少し時間がかかった。次は圧 縮の実行。
同じ要領でメインDisk(001-006)も実施した。
c:/Users/sakae/Documents/Virtual Machines/Arch $ ls -sh *.vmdk 2.8G Arch-s001.vmdk 1.1G Arch-s004.vmdk 128k Arch-s007.vmdk 297M Arch-s002.vmdk 930M Arch-s005.vmdk 1.0k Arch.vmdk 1.1G Arch-s003.vmdk 777M Arch-s006.vmdk 27M extarch.vmdk
予備に割り当てているextarch.vmdkが、Windows10上では、グググと圧縮され ているのは、見て取れる。他のDiskも圧縮前は、ほとんどが4Gぐらいだったけ ど、良好に縮小されている。都合20Gぐらいは、Windows上で削減出来た。
rust
Diskの余裕が出来たんで、rustでも入れてみるかな。今迄は格好つけて、ghc を入れてたんだけど、それだと苦労が絶えなかったんで、そしてDiskも馬鹿喰 いしてたんでね。
なんてのは表面的な事。裏の理由は、GCで苦労する事は無いだろうと言う淡い 期待からです。rubyのGC博士は言うに及ばず、goでも苦労してるみたいだから ね。そんな訳で、取り合えず、入れた。
[sakae@arch ~]$ du -sh .rustup/ 1.2G .rustup/ [sakae@arch ~]$ rustc --version rustc 1.77.0-nightly (e51e98dde 2023-12-31) [sakae@arch ~]$ cargo --version cargo 1.77.0-nightly (ac6bbb332 2023-12-26)
stable版を入れても、どうせ直ぐにnightly版が欲しくなるでしょうから、最 初から、開発チックです。それにしても、やはり大飯喰いだなあ。 実際に運用を始めると、荷物室(cargo)がどんどん肥大化するんだよな。
プログラミング言語「Rust」の基礎をしっかり学べる無料の電子書籍
まあ、こんな無料の書籍も有る事だし、おいおいとやって行くかな。困ったら ChatGPTに質問。その時に魔法の言葉、Let's think step by step ってのを、 添えると奴の脳味噌が論理モードになるらしい。
wsl2
前回、目をつけたwsl2をやってみる。 どれぐらいDiskを消費するか? 現状をmingw64で確認
$ df Filesystem 1K-blocks Used Available Use% Mounted on C:/msys64 248751100 115147860 133603240 47% /
インストールはデフォです。ダウンロードに時間がかかる。その後、勝手に窓 が開いてユーザー名とパスワードを登録させられる。後は掟通りに、sudo apt update; sudo apt upgradeする。
何が入いったかと言うと、2年遅れの製品。まあ、そんなものだろう。
sakae@atom:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy
ふたたび、dfしたよ。
Filesystem 1K-blocks Used Available Use% Mounted on C:/msys64 248751100 117812704 130938396 48% /
増加分は、2664844 ~= 2.7G だった。あれ? ウブでdfとかはまだだった。
sakae@atom:~$ df Filesystem 1K-blocks Used Available Use% Mounted on none 1976732 4 1976728 1% /mnt/wsl none 248751100 119950320 128800780 49% /usr/lib/wsl/drivers /dev/sdc 1055762868 1520616 1000538780 1% / none 1976732 92 1976640 1% /mnt/wslg none 1976732 0 1976732 0% /usr/lib/wsl/lib rootfs 1973436 2056 1971380 1% /init none 1976732 824 1975908 1% /run none 1976732 0 1976732 0% /run/lock none 1976732 0 1976732 0% /run/shm tmpfs 4096 0 4096 0% /sys/fs/cgroup none 1976732 212 1976520 1% /mnt/wslg/versions.txt none 1976732 212 1976520 1% /mnt/wslg/doc drvfs 248751100 119950320 128800780 49% /mnt/c drvfs 1048572 17296 1031276 2% /mnt/r snapfuse 128 128 0 100% /snap/bare/5 snapfuse 41856 41856 0 100% /snap/snapd/20290 snapfuse 75776 75776 0 100% /snap/core22/864 snapfuse 134272 134272 0 100% /snap/ubuntu-desktop-installer/1276 snapfuse 93952 93952 0 100% /snap/gtk-common-themes/1535 sakae@atom:~$ ps PID TTY TIME CMD 15 tty1 00:00:00 bash 275 tty1 00:00:00 ps sakae@atom:~$ ps -awx PID TTY STAT TIME COMMAND 1 ? Ssl 0:00 /init 14 tty1 Ss 0:00 /init 15 tty1 S 0:00 -bash 276 tty1 R 0:00 ps -awx
ip a はWindows10のそれを、そっくりそのまま引き写ししてる様なので略。
sakae@atom:~$ sudo apt install emacs Suggested packages: mailutils emacs-common-non-dfsg ncurses-term libasound2-plugins alsa-utils colord cups-common libgd-tools gvfs liblcms2-utils m17n-docs librsvg2-bin The following NEW packages will be installed: adwaita-icon-theme alsa-topology-conf alsa-ucm-conf at-spi2-core dconf-gsettings-backend dconf-service emacs emacs-bin-common emacs-common emacs-el emacs-gtk emacsen-common fontconfig fontconfig-config fonts-dejavu-core gsettings-desktop-schemas gtk-update-icon-cache hicolor-icon-theme humanity-icon-theme libasound2 libasound2-data libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data libatspi2.0-0 libavahi-client3 libavahi-common-data libavahi-common3 libcairo-gobject2 libcairo2 libcolord2 libcups2 libdatrie1 libdconf1 libdeflate0 libepoxy0 libfontconfig1 libfreetype6 libgd3 libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgif7 libgraphite2-3 libgtk-3-0 libgtk-3-bin libgtk-3-common libharfbuzz0b libice6 libjbig0 libjpeg-turbo8 libjpeg8 liblcms2-2 libm17n-0 libotf1 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpixman-1-0 librsvg2-2 librsvg2-common libsm6 libthai-data libthai0 libtiff5 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwebp7 libxcb-render0 libxcb-shm0 libxcomposite1 libxcursor1 libxdamage1 libxfixes3 libxft2 libxi6 libxinerama1 libxkbcommon0 libxpm4 libxrandr2 libxrender1 libxt6 libxtst6 m17n-db session-migration ubuntu-mono x11-common 0 upgraded, 88 newly installed, 0 to remove and 0 not upgraded. Need to get 54.6 MB of archives. After this operation, 195 MB of additional disk space will be used.
色々と入いってくるね。
–batch
前回、make –dry-run した時、–batch なんて言うemacs の引数が使われていた。名前から想像付くけど、正確を期してみる。
C.2 初期化オプション これ、普段参照してる開発系の資料じゃなくて、利用者用の資 料なのね。こちらを征すれば、一人前のemacsユーザーか。
vbox$ emacs -batch --eval '(progn (defun f (n) (if (= 0 n) 1 (* n (f (- n 1))))) (print (f 10)))' 3628800
evalを利用して、裸のS式を評価してる。良く見ると、defunでの定義と、それ を実行して結果を表示する2つの式を、prognで強引にひとつのS式にしてる。 schemeなら、prognの代わりにbeginを使うのかな。
この他、-f で、直接emacsのコマンドを指定する事も出来る。でも、使いたい コマンドが既に存在するって稀だろう。そういう場合は、えっちらおっちらと、 自分でコマンドを羅列したファイルを用意して、それを、-l で指定する。
vbox$ cat mytest.el (defun myfact (n) (if (= 0 n) 1 (* n (myfact (1- n))))) (print (myfact 10))
実行するぞ。
vbox$ emacs -batch -l mytest.el 3628800
この -batchの代わりに、–scriptも使える。但しその場合は、ファイルの冒 頭に、#! /opt/bin/emacs 等のシェバングが必要である。
speed by -batch
折角、仲間も増えた事だし、公平にベンチする。
(defun mysort (n) (let* ((list (mapcar 'random (make-list n most-positive-fixnum))) (i (length list))) (while (> i 1) (let ((b list)) (while (cdr b) (when (< (cadr b) (car b)) (setcar b (prog1 (cadr b) (setcdr b (cons (car b) (cddr b)))))) (setq b (cdr b)))) (setq i (1- i))) list)) (print (benchmark-run (mysort 1000)) )
(0.328705814 3 0.025824238) ; ArchLinux on VMwarePlayer (0.425446301 6 0.0448496) ; Ubuntu on WSL2 (0.425333 2 0.023705000000000004) ; mingw64 (3.899217396 2 0.148736839) ; Debian(32Bit) (0.961038464 3 0.041056698999995) ; FreeBSD(32Bit)
ielm to eshell
前回、色々なshellを試したけど、オイラー的に面白いと思ったのは、eshell だ。少し遊んでみる。
lisp/eshell/em-tramp.elに、su,sudo,doasなんて語句があったので、OpenBSD で、試してみた。
/tmp $ doas syspatch doas (sakae@vbox.local.jp) password: /tmp $ sudo syspatch sudo: command not found
doasは有るけどsudoは、入っていないとな。無い袖は振れぬ。
eshellが、端末変りになるかと思って、sshをやってみた。リモート側で、補 完をしようとTABを叩いてみたけど、途中で喰われているみたいで、機能しな かった。微妙なのね。
副作用
辰年は荒れると言うけど、本当だな。平成6年能登半島地震だもの。これで初めて、 今年が、平成6年と知った次第。和暦って、西暦のエイリアスと、ふと思った ぞ。
そんな事は、どうでもよくて、WSL2にしたら、強烈な副作用に見回れた。コロ ナの時は、どこかの官僚が、副作用って言葉を嫌って、副反応と言ってたけど、 所詮、言葉のアヤだ。どう、取り繕っても、来るものは来る。
その1
VirtualBox 7.0.6に入れていた、OpenBSD 7.4(32Bit)が、起動中にハングして しまうという、致命的な副作用が発現した。
WSL2とVirtualBoxを共存させる方法とそれが必要となった私の理由
WSL2 と Virtual Boxの併用方法 (VERRNEMINITFAILED対策)
こちらを見ると、OpenBSDなんて、完全に蚊帳の外であります。救済策は、 Diskを取り外して、VMWare Playerに装着するぐらいかな。面倒そうなので、 やらないけど。新規に入れちゃうのが、良さそう。
その2
今迄使えていたGUIってか、グラフ表示が出来なくなった。VcXsrvをWindows10 側のサーバーにしてたんだけどね。
[sakae@arch ~]$ gnuplot : Terminal type is now 'qt' gnuplot> plot sin(x) Warning: slow font initializationgnuplot> MESA: error: ZINK: vkCreateInstance failed (VK_ERROR_INCOMPATIBLE_DRIVER) glx: failed to create drisw screen failed to load driver: zink Error: plot window (gnuplot_qt) not responding - will restart
Unable to run d3d12 driver after Microsoft-experimental vulkan driver install WSL2
ググると、こういう人が居たけど、関係なかった。もう少し調査かな。
その3
純粋なWSL2の問題。updatedb すると、10分以上の時間がかかる。なんか変な 事をやってませんか? findで確認してみる。
sakae@atom:/usr$ time find /usr -name ielm.elc /usr/share/emacs/27.1/lisp/ielm.elc real 0m2.346s user 0m0.100s sys 0m0.151s
これって、妥当な時間だと思うかい? 公正な比較じゃないけど、HDD(いわゆ る昔のハードディスク)なdebian(32Bit)で、同じ事をする。最初は生diskへの アクセスなので、それを除いた2度目のキャッシュ・アクセス結果(wslな方も 2度目のアクセス結果です)。
[sakae@deb ~]$ time find /usr -name ielm.elc /usr/local/src/emacs-git/lisp/ielm.elc /usr/local/share/emacs/30.0.50/lisp/ielm.elc real 0m2.856s user 0m1.261s sys 0m1.566s
喧伝される程WSLでのアクセスは速くない。むしろ期待外れ。sddな豪華な奴な んだけどね。そんなの無茶振りです。あくまでも、開発のお共にが目的です(っ て、MSの人は言うに違いない)。
まあ、いいや。もう少し検索範囲を広げてみる。
sakae@atom:/usr$ time find / -name ielm.elc /usr/share/emacs/27.1/lisp/ielm.elc find: ‘/mnt/c/Windows/ServiceProfiles/NetworkService’: Permission denied find: ‘/mnt/c/Windows/ServiceState’: Permission denied : ^C real 8m56.900s user 0m7.453s sys 1m48.748s
余りにも時間がかかり過ぎるので、中止した。おまえ、何考えているんだよう。 実質、検索機能はユーザーが頭を働かせて、範囲を指定して下さいっていうト ンデモ版です。こういう事に言及してるサイトは無かったので、あえて警鐘を 鳴らしてみました。
それもこれも、
sakae@atom:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sdc 1007G 1.5G 955G 1% / none 1.9G 0 1.9G 0% /run/shm drvfs 238G 102G 137G 43% /mnt/c snapfuse 132M 132M 0 100% /snap/ubuntu-desktop-installer/1276
何でもmount病に取り憑かれているからですな。Windows側も見えるんですが仇 になってます。1Tの仮想Diskに得意のマウントと読めます。
また、メモリー消費も、WSL2が稼動していると、 3.4G -> 4.6G となった。使用していない時は、wsl –shutdown しとくべし。 直ぐに起動するってのも嘘。
元に戻すか、その前に、まとめ
WSL2のまとめ、将来のためにね。
C:\Users\sakae>wsl -l -v NAME STATE VERSION * Ubuntu Stopped 2 ;; 停止中 C:\Users\sakae>wsl ~ ;; Ubuntu 起動まで少し時間が必要 sakae@atom:~$ exit logout C:\Users\sakae>wsl -l -v NAME STATE VERSION * Ubuntu Running 2 ;; 終了直後は、少しの時間running C:\Users\sakae>wsl --shutdown ;; 直ぐ停止なら、これ C:\Users\sakae>wsl --update ;; Linux kernelの更新
wsl –set-default-version 2 で、wsl2が規定値になる(する)。wsl -l -vで1 だったら、wsl –set-version Ubunto 2 で、更新する。
wslに別れを告げるなら、下記のWindowsコンポーネントを同時に切り替えてreboot
「Linux 用 Windows サブシステム」 「仮想マシンプラットフォーム」 「Windows ハイパーバイザー プラットフォーム」 ;; for VirtualBox ?
Ubuntuの塊は、アプリと機能の中に列挙されてる。emacsとかx11-appを入れた んで、多少太って、2.24GBだった。不要だったら、これをuninstallすればい いんだな。