more vmware

Table of Contents

free

Lubuntuにして、メモリーの使用状況がどうなるか計測してみた。

sakae@lu:~$ free -m
               total        used        free      shared  buff/cache   available
Mem:            7824         899        6442          75         790        6925
Swap:            511           0         511
sakae@lu:~$ free -m
               total        used        free      shared  buff/cache   available
Mem:            7824        1407        5583         167        1238        6417
Swap:            511           0         511
sakae@lu:~$ free -m
               total        used        free      shared  buff/cache   available
Mem:            7824        1847        4614         347        1952        5976
Swap:            511           0         511
sakae@lu:~$ free -m
               total        used        free      shared  buff/cache   available
Mem:            7824        1921        3966         346        2526        5902
Swap:            511           0         511

一番上から順番に、起動直後でMLtermを開いて相棒のemacs(server)が動作してる状態。 次は、google-chromeも起動させてメールをチェックしてる。3番目は、firefoxも起動 してwebの閲覧。最後は、それに飽きたので、vmplayerでOpenBSDを起動して、ソースの 閲覧に移った。

vmplayerを起動する時、swapが現在512Mだけど、1Gにして貰えたらパフォーマンスが 最高になりまっせと案内してくるんだよな。そんなヘビーな使い方はしないし、 メモリー欠乏症の兆候もないんで、このままでいいか。まあ、ゲストのOpenBSDには、 メモリーを2G分け与えているけど、慎ましいOSで460Mしか消費していない。

ruby 3.4.1

つくって学ぶプログラミング言語 RubyによるScheme処理系の実装

こんな楽しい書籍が公開されているのね。年始からワクワク。それはいいんだけど 元となるRubyを入れていないぞ。aptから入れてもいいんだけど、折角なので コンパイラー系の試験も兼ねて、自分でやってみよう。Matzさんのプレゼントも 有る事だし。

./configure --enable-shared

したら最後に、こんな風にコンパイル・インストールするからねと報告が出た。

time make -j4

して、全速力でコンパイル開始。んが、途中でエラーですよ。libssl-devと libyaml-devが無いよと言う嫌がらせが有ったぞ。そんなのconfigure時に 教えて欲しいぞ。まあ、来年は大丈夫でしょう。今年のコンパイル時間記録は 4分弱だったよ。

sharedのオプションを付けているんで、本体はこんくらい。

sakae@lu:~$ ls -lh /usr/local/bin/ruby
-rwxr-xr-x 1 root root 221K  1月  6 07:07 /usr/local/bin/ruby*

本体がこれで済むはずは無い。

sakae@lu:~$ ldd /usr/local/bin/ruby
        linux-vdso.so.1 (0x00007ffc971d1000)
        libruby.so.3.4 => /usr/local/lib/libruby.so.3.4 (0x00007b18d1c00000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007b18d231b000)
        libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007b18d22e1000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007b18d1b17000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007b18d1800000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007b18d22b1000)
        /lib64/ld-linux-x86-64.so.2 (0x00007b18d2353000)
sakae@lu:~$ ls -lh /usr/local/lib/libruby.so.3.4.1
-rwxr-xr-x 1 root root 20M  1月  6 07:05 /usr/local/lib/libruby.so.3.4.1*

実態は20Mも有るんだ。sharedにしてないと、rubyを起動する度に、20Mがガバガバと 消費されていく。sheradにしてると、複数のrubyを起動しても、それが避けられる。

何で、このご利益を利用しない? 多分Railsに忖度してるんだろう。一度rubyを起動 すればキャッシュに載るから、2度目はshared無しだと起動が速い。対してshared版だと、 起動時に、動的なリンクと言う余分な工程が入ってしまって、遅くなる。それを 嫌ったんでしょうな。

sakae@lu:~$ ls -lh /usr/bin/python3.12
-rwxr-xr-x 1 root root 7.7M 11月  7 03:32 /usr/bin/python3.12*
sakae@lu:~$ ldd /usr/bin/python3.12
        linux-vdso.so.1 (0x00007ffc85368000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007092b8253000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007092b8237000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007092b820c000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007092b7e00000)
        /lib64/ld-linux-x86-64.so.2 (0x00007092b8353000)
sakae@lu:~$

一応、rubyの好敵手であるpythonも確認しとく。rubyに比べて軽い仕上りだなあ。その分 は、わんさかと用意されてるライブラリィーで補う方針なんだな。

port 902

ちょっと悪戯心が湧いたので、OpenBSD機からLubuntu機に向けてnmapしてみた。

Starting Nmap 7.92 ( https://nmap.org ) at 2025-01-09 06:02 JST
Nmap scan report for lu (xxx.xxx.xxx.xxx)
Host is up (0.0061s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT    STATE SERVICE
22/tcp  open  ssh
902/tcp open  iss-realsecure

Nmap done: 1 IP address (1 host up) scanned in 0.39 seconds

22番さんは同意するけど、902番って何や? /etc/servicesにも登録されていない、 闇番号だぞ。しかも権力が有るっぽい。こういうのは世間に聞いてみるしかない。 いや世間と言ういいまわしは、日本でしか通用しないぞ。国際的には社会ね、なんて 事を、同調圧力って本で、最近知った。

ESXi に必要なポート

ふーん、vmwareが引き連れてきたポートなのか。どんな反応をするか叩いてみる。

sakae@lu:~$ nc localhost 902
220 VMware Authentication Daemon Version 1.10: SSL Required, ServerDaemonProtocol:SOAP,
 MKSDisplayProtocol:VNC , VMXARGS supported, NFCSSL supported/t, SHA256 supported

気味が悪いのでブロックしておきたいんだけど、Lubuntuの場合は火壁はオプションになる のかな。それより、Ubuntuの標準火壁ってどんな奴なんだろう?

firewall

火壁を設定してみる。一応複数のサイトを参照しときます。

Ubuntu22.04.2 LTSのufw(ファイアウォールツール)の設定方法

ファイアウォール

UFW : 基本操作

なんか、簡単すぎる気がしないでもないけど。たまにログを見てね、だな。

setup

まずは火壁を立てて、全ての穴が塞がっている事を確認した。 この状態でも死活状況のビーコン(ping)には返答するのね。ICMPとは別枠なのかな? それともufwで何とか出来るのかな?

次にレスキュー用の穴を一つだけ開けたよ。もし何か有った時の、頼みの綱になる からね。

sakae@lu:~$ sudo cat /etc/ufw/user.rules
 :
### tuple ### allow any 22 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp --dport 22 -j ACCEPT
-A ufw-user-input -p udp --dport 22 -j ACCEPT

何を心配してるかって言うと、ハングして、どうにもならなくなった時の事さ。 インストールに使ったUSBも大事に保存しといた方が良いらしい。最悪そのUSBから ブートして、インストールせずに試してみるを選ぶと、SDDとは関係なくRAMだけで使えるそうなんで、 SDDをレスキューできるぞ。

sakae@lu:~$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda2      244711864 49919052 182289308  22% /
/dev/sda1         306572     7932    298640   3% /boot/efi

こんな配置になってるんだね。

OpenBSDとの回廊

Lubuntuをインストールする時、OpenBSDとの情報交換用エリアを設定しようとしていて 忘れてしまっていた。上の /boot/efi って、ひょっとしてOpenBSDからもアクセス可能な msdosになっていないかな?

USB-HDDに鎮座してるOpenBSDを起動して確認してみる。

eq$ disklabel sd0
# /dev/rsd0c:
type: SCSI
disk: SCSI disk
 :
16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  c:        500118192                0  unused
  i:           614400             4096   MSDOS
  j:        499484954           618496  ext2fs

どうやらiパーテションが、/dev/sda1 に、jパーテションが /dev/sda2 として見えるっぽい。

eq$ doas mount -t msdos /dev/sd0i /CVS
eq$ tree /CVS
/CVS
`-- EFI
    |-- BOOT
    |   |-- BOOTX64.EFI
    |   |-- fbx64.efi
    |   `-- mmx64.efi
    `-- ubuntu
        |-- BOOTX64.CSV
        |-- grub.cfg
        |-- grubx64.efi
        |-- mmx64.efi
        `-- shimx64.efi

eq$ df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
  :
/dev/sd0i      299M    7.7M    292M     3%    /CVS

250Mぐらいは問題なく利用出来るな。実際にdirを作成してmemoを置いてみた。 但し、書き込みできるのは、rootだけだけど。

sakae@lu:/boot/efi$ tree
.
├── EFI
│   ├── BOOT
│   │   ├── BOOTX64.EFI
│   │   ├── fbx64.efi
│   │   └── mmx64.efi
│   └── ubuntu
│       ├── BOOTX64.CSV
│       ├── grub.cfg
│       ├── grubx64.efi
│       ├── mmx64.efi
│       └── shimx64.efi
└── zCOMM
    └── memo

これで、わざわざファイルサーバーを起動する必要は無くなったな。

GUI <–> CUI

次に心配なのはguiがグチャグチャになってしまう事。そんな時にはCUIな端末が 欲しくなるぞ。

Q: Lubuntuについて質問します。 DeskTopのグラフィカルな画面から、CUIなコンソール画面に 切り替えには、どうしますか? また、戻る方法も教えて ください。

A: Lubuntu(Ubuntuの軽量版)では、デスクトップ環境(GUI)とコンソール画面(CUI)の切り替えが可能です。以下にその方法を説明します。

### 1. GUIからCUIに切り替える方法

コンソール画面に切り替えるには、以下のキーボードショートカットを使用します:

  • `Ctrl` + `Alt` + `F1` から `F6` これらのキーのいずれかを押すと、仮想コンソール(TTY)に切り替わります。たとえば:
    • `Ctrl` + `Alt` + `F1` でTTY1
    • `Ctrl` + `Alt` + `F2` でTTY2
    • 以下同様にF6まで選択可能です。

仮想コンソールに切り替えた後、ログインプロンプトが表示されるので、以下を入力してログインします:

  1. ユーザー名を入力し、`Enter`
  2. パスワードを入力し、`Enter` (パスワードは表示されませんが、そのまま入力してください。)

### 2. CUIからGUIに戻る方法

GUI画面に戻るには、以下のキーボードショートカットを使用します:

  • `Ctrl` + `Alt` + `F7` Lubuntuでは通常、GUIセッションはTTY7に割り当てられています。

もし`F7`で戻れない場合は、`Ctrl` + `Alt` + `F2` から `F6` を試してみてください。GUIセッションが別のTTYに割り当てられていることがあります。

### 注意点

  • Lubuntuのバージョンや設定によっては、GUIが`F7`ではなく他のTTYに割り当てられている場合があります。その場合は他のファンクションキーを試してください。
  • 仮想コンソールを終了する際には、セッションのセキュリティを確保するためにログアウト(`exit` コマンド)を忘れずに行ってください。

何か他に質問があればお気軽にどうぞ!

鵜呑みにしないで、自分で確認するのが常識ってもんです。その結果は、

Ctl + Alt + F4 で、CUIに突入

Ctl + Alt + F2 で、GUIに復帰

なんだけど、CUIでは、CapsLock -> Ctl が有効になっていないんで、真のCtlキーを 使う事。CapaLockは、大文字効果になるんで、あれれ とならない様に注意。同じ 注意は、vmwareが作成するWindowからカーソルを引き剥すのに使われる、Ctl + Alt のキーコンビネーションにも言える事だ。CUIなフォントサイズが鬼のように細かいなあ。 何処を変更すれば良いの?

rust

久し振りのrust種。

Rustプロジェクトのビルド高速化に関するベストプラクティス

以下のようにすると、どこでコンパイルに手間取ってるか、簡単に視覚化できる。 こういうのが有るって事は、時間がかかるって事だね。

cargo test --timings --no-run

ssh-keygenしたときに出るあのキラキラの正体

これで、長年の疑問が氷解した。よかった、よかった。ありがとう!

reboot

Ctl + Alt + t するとQTerminalが起動する。その端末でvmplayer & して、OpenBSDを 起動。端末からssh vm して、OpenBSDにログイン。そこでtmuxしてあげると、まともに emacsが使えるなあ。なんでだ? 嬉しい発見である。

ソースを追跡する時の儀式を実施。ctagsを止めてetagsでemacs用のTAGSを作成。

--- Makefile.org        Mon Jan  6 07:26:01 2025
+++ Makefile    Mon Jan  6 07:36:02 2025
@@ -34,7 +34,7 @@
        eval "SFILES=\"`make -V SFILES -f $${TDIR}/Makefile`\"" && \
        eval "CFILES=\"`make -V CFILES -f $${TDIR}/Makefile`\"" && \
        eval "AFILES=\"`make -V AFILES -f $${TDIR}/Makefile`\"" && \
-       ctags -wd -f ${TAGS} $${CFILES} $${HFILES} && \
+       etags  $${CFILES} $${HFILES} && \
        egrep "^[_A-Z]*ENTRY[_A-Z]*\(.*\)" $${SFILES} $${AFILES} | \
            sed "s;\\([^:]*\\):\\([^(]*\\)(\\([^, )]*\\)\\(.*\\);\\3    \\1     /^\\2(\\3\\4$$/;" \
            >> ${TAGS} && \

実際にタグを作成して、それを中心地にコピーしておく。

doas make tags
doas cp TAGS /sys/kern

で、前回の続きで、電源断の仕組み解析。 kern_xxx.c reboot から /sys/arch/amd64/amd64/machdep.c のbootへと案内された。

if NACPI > 0 && !defined(SMALL_KERNEL)
                extern int acpi_enabled;

                if (acpi_enabled) {
                        delay(500000);
                        if ((howto & RB_POWERDOWN) != 0)
                                acpi_powerdown();
                }
#endif

舞台は、dev/acpi/acpi.cへと推移する。電源の制御系ってドライバーなんだな。

/* XXX                                                                                                   
 * We are going to do AML execution but are not in the acpi thread.                                      
 * We do not know if the acpi thread is sleeping on acpiec in some                                       
 * intermediate context.  Wish us luck.                                                                  
 */
void
acpi_powerdown(void)
{
        int state = ACPI_STATE_S5, s;
        struct acpi_softc *sc = acpi_softc;

        if (acpi_enabled == 0)
                return;

        s = splhigh();
        intr_disable();
        cold = 1;

        /* 1st powerdown AML step: _PTS(tostate) */
        aml_node_setval(sc, sc->sc_pts, state);

        acpi_disable_allgpes(sc);
        acpi_enable_wakegpes(sc, state);

        /* 2nd powerdown AML step: _GTS(tostate) */
        aml_node_setval(sc, sc->sc_gts, state);

        acpi_sleep_pm(sc, state);
        panic("acpi S5 transition did not happen");
        while (1)
                ;
}

acpi_sleep_pm で制御レジスターに書き込みをすると、電源が切れるっぽい。 よく見ると、このドライバー群の中に、scpisony.c とか scpithinkpad.c なんていう 固有ベンダー名のソースが混在してる。それから、昔懐かしいapmなんてのも散見 される。

i386な石用には、apmの使用も考慮されてた。

if NAPM > 0
                if ((howto & RB_POWERDOWN) != 0) {
                        int rv;

                        printf("\nAttempting to power down...\n");
                        /*
                         * Turn off, if we can.  But try to turn disk off and
                         * wait a bit first--some disk drives are slow to
                         * clean up and users have reported disk corruption.
                         *
                         * If apm_set_powstate() fails the first time, don't
                         * try to turn the system off.
                         */
                        delay(500000);
                        apm_set_powstate(APM_DEV_DISK(0xff), APM_SYS_OFF);
                        delay(500000);
                        rv = apm_set_powstate(APM_DEV_DISK(0xff), APM_SYS_OFF);
                        if (rv == 0 || rv == ENXIO) {
                                delay(500000);
                                (void) apm_set_powstate(APM_DEV_ALLDEVS,
                                                        APM_SYS_OFF);
                        }
                }
#endif

あっ、これインストールの終了時に、よく見るな。こんな所で出してたのか。

printf("\n");
printf("The operating system has halted.\n");
printf("Please press any key to reboot.\n\n");
cnpollc(1);     /* for proper keyboard command handling */
cngetc();
cnpollc(0);

more vmware

上記をやる時、端末からvmplyerを起動した。他にも色々な起動方法が有るので 列挙してみる。これもそれも、土台がWindowsと違って、見通しが良いからである。 まあ、オイラーはWindowsが嫌いなんで深く追求しなかったせいも有るけど。

by CUI

最初に起動した方法だと、仮想マシンをマウスで選択して、起動をツンツンする必要が ある。そんなのオイラー的には許せない。そういう我侭に答てくれる起動方法が下記。 起動時に仮想マシンの設定ファイルを指定すればOK。コマンド列が長いとお感じ なら、エイリアスにしちゃえば良い。

sakae@lu:~$ vmplayer /var/my/vmware/OpenBSD/OpenBSD.vmx &
[1] 5810
sakae@lu:~$ [AppLoader] Use shipped Linux kernel AIO access library.
An up-to-date "libaio" or "libaio1" package from your system is preferred.
I/O warning : failed to load external entity "/etc/vmware/hostd/proxy.xml"
Warning: program compiled against libxml 212 using older 209

sakae@lu:~$ ssh vm
sakae@vm's password: 
Last login: Fri Jan 10 07:04:31 2025 from 192.168.92.1
OpenBSD 7.6 (GENERIC.MP) #338: Mon Sep 30 08:55:35 MDT 2024

Welcome to OpenBSD: The proactively secure Unix-like operating system.

vm$ 

微妙に、Lubuntuの版が古くなってるのかな。vmwareの新版が出たと喜んでアップデート したら大変な事になりそうな予感。普通に動いていたら、もう、それでいいじゃないかって 達観が必要だな。

by GUI

Lubuntuの オンライン・マニュアル を斜め読みした成果です。

Win + r するとランナーってアプレットが走って、画面上部に質問Boxが出てきます。 そこに、vm ぐらいを入力すると、コマンドが補完され、vmplayerとvmworkstationの 候補が列挙される。矢印キーで目的のコマンドを指定すればOK。Windowsなユーザーにも 優しいインターフェースです。

Winキーを叩くと、メニューが左下から立ち上がってきます。大分類なので、上下 矢印キーで、 システムツールまで移動。そこで、右矢印。小分類を上下矢印キーで移動してから選択。

気がつけば、オイラーって、とことんマウス嫌いですねぇ。

by vmrun

ブロード・コムのサイト をウロウロしてて見付けた奴。

Usage: vmrun [AUTHENTICATION-FLAGS] COMMAND [PARAMETERS]

AUTHENTICATION-FLAGS
--------------------
These must appear before the command and any command parameters.

   -T <hostType> (ws|fusion||player)
   -vp <password for encrypted virtual machine>
   -gu <userName in guest OS>
   -gp <password in guest OS>

Examples:

Starting a virtual machine with Workstation on a Windows host
   vmrun -T ws start "c:\my VMs\myVM.vmx"

Running a program in a virtual machine with Workstation on a Windows host with Windows guest
   vmrun -T ws -gu guestUser -gp guestPassword runProgramInGuest "c:\my VMs\myVM.vmx" "c:\Program Files\myProgram.exe"

vmrun コマンドの例

sakae@lu:~$ vmrun -T player start /var/my/vmware/OpenBSD/OpenBSD.vmx 
Warning: program compiled against libxml 212 using older 209
sakae@lu:~$ ssh vm
sakae@vm's password: 
Last login: Fri Jan 10 07:26:19 2025 from 192.168.92.1
OpenBSD 7.6 (GENERIC.MP) #338: Mon Sep 30 08:55:35 MDT 2024

vm$ 

例に習って、起動してる仮想マシンにコマンドを送り込んでみたけど、エラーだわさ。 OpenBSD用のVMWare Toolsなんて無いから当然か。

sakae@lu:~$ vmrun -T player -gu sakae -gp hoge runProgramInGuest '/var/my/vmware/OpenBSD/OpenBSD.vmx' 'df -h'
Warning: program compiled against libxml 212 using older 209
Error: The VMware Tools are not running in the virtual machine: /var/my/vmware/OpenBSD/OpenBSD.vmx

まあ、これをやっちゃうと、bash historyに記録がバッチリ残ってしまうんで、二重の 意味を込めて封印だな。

README

以前NHKのプロジェクト X で、トルコのインスタンブールに有る海峡に海底トンネルを 施設する苦労をやってた。異国に派遣された土木技術者を待っていたのは、異文化と 流れを読めない潮流。

その番組では時間の関係か肝心の海底トンネルの詳しい説明が無かった。そんな折り、 海底トンネルの造り方 なんて本を見つけてしまったので、読んでみた。

幅40M x 高さ10M x 長さ120M ぐらいの中空の箱を何本も海底に掘った溝の中で連結して、トンネルに してるのね。箱の接合部は浸水しないようにゴムのパッキンにする。水圧でパッキンが 圧縮されるんで、水漏れは無いそうな。よく、こんな発想が湧いてくるなあ。

圧巻は、最後の箱をどうするかだ。V字形のくさびの様なな箱を使って接合。それだと、空港 近くみたいにクレーンの高さ制限の有る所では利用できない。そこで、最後の箱は、 両端にテーパーを入れたキーエレメントと呼ぶ箱を使う。もちろん、対向する箱にも テーパーを付けておく。テーパーの角度は、垂線に対して15度だそうだ。

鋼鉄な箱の枠だけを陸上のドッグで作成。現場近くまで、それを曳航。そこで、コンクリート 打ちして箱を完成させ、それを沈めるそうだ。良く考えるよなあ。


This year's Index

Home