WSL2

Table of Contents

ArchLinux disk compress

今まで使ってきたArchLinuxの仮想Diskが肥大化していて無駄もこの上ない。 VMWarePlayerのDisk圧縮って、どうやるの? ググったら、先人がおられた。

vmware イメージの圧縮

試しにやってみる。いきなりメイン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すればい いんだな。

etc

ビジュアルでわかる 信号処理入門

なかなか、良さげな本だな。どうする家康は、旧年の流行語か。


This year's Index

Home