2月 162025
 

今まで購入した「NiPoGi GK3Pro ミニ PC」や「Beelink MINI S」は Intel の Atom 系の CPU だったのだけど、今度は AMD Ryzen7 の CPU 搭載ミニ PC を購入しました。

まぁ、AMD Ryzen7 搭載ミニ PC が欲しかった。と、いうのもあるのですが、一番は USB Type-C がついているモノが欲しくなった。と、いうのが大前提としてありました。モバイルサブディスプレーなどは HDMI ではなく USB Type-C のものがそれなりに存在しているし、そーいうのに接続できるミニ PC が欲しくなった。と、いうことですね。

 
amazon で購入しましたが、注文したのは 2024/12/29 で、正月休みにこれで遊べたら嬉しいなぁ。なんて思っていましたが、配達されたのが、明けた 2025/01/18 でした。あらま・・。
まぁ、このミニ PC は 2022 年に発売されたようで、今はもう売ってないみたいです。僕が買ったタイミングで、多分、既に在庫一斉セール状態だったのかもしれません。だって、以下のスペックなのに 40,154yen で、そこにポイント還元で 400 ポイントくらいもらったので、実質 30,000yen 台で購入することができました。

  • CPU: Ryzen 7 5800H (3 コア/16 スレッド)
  • Memory: 16GB (DDR4 SO-DIMM 8GBx2)
  • SSD: PCIe M.2 2280 SSD 512GB

 
多少古い製品で、既にディスコンとはいえ、新品でこのスペックであればサブ機として十分です。
届いた箱を早速開けました。中に入っていたのはこんな感じ。

写真中央のちょっと上の黒い個体が本体で、右の説明書の下にあるのが、100W の USB Type-C のアダプターです。 USB Type-C のポートが二つあり、一個はミニ PC 本体への電源供給。もう一個は他の機器の充電用。なのだと思い、試しましたが PC に電源供給して起動している最中にもう一個の USB-C ポートに接続したら、PC 本体の電源が落ちてしまいました(g_g)。ダメじゃん・・orz。

本体の下の袋にはいっているのが S-ATA コネクタです。マザーボードに接続してミニ PC 本体に S-ATA の 2.5 インチ SSD などを追加可能です。早速、余っていた SSD を中に入れました。

全体のスペック、筐体の雰囲気などはこんな感じです。

 
このミニ PC 使い方ですが、どうしよう・・。

以前購入した NiPoGi GK3Pro ミニ PC は Windows11 Pro がインストールされていて、かつ FreeBSD でデスクトップ環境もフルで KDE6+Plasma6 が入っているマルチブートな環境で利用していますが、メインでの利用は FreeBSDで、それを bhyve サーバとして、利用していて仮想マシンが 3 台動作しています。

今回購入したのは Windows11 Pro の専用機に使用かなぁ。と、なったのであります。

 
まぁ、中国産のミニ PC は基本 OS 再インストール必須なので、今回も全て削除してから Windows11 Pro を再インストール。アクティベーションキーは BIOS(UEFI) 中で持っているので、サクっと再インストールできました。また、 Atom 機とは違い使っているデバイスも AMD 系 PC の一般的なものなので、あちこちから拾ってくる手間いらずで嬉しいです。

探し回ったのは WiFi と Bluetooth のドライバくらいでしょうか。最近は AMD の CPU 搭載 PC は MediaTek のものを利用しているケースが多いので、それだけ拾ってきました。

普段は FreeBSD の pciconf -lv を貼り付けるのですが、今回は FreeBSD はインストールしないので「デバイスマネージャー」のキャプチャを貼り付けておきます;-)。

さてと。 Windows 専用マシンとして利用するのにどうしよう。などと思ったのですが Oracle VirtualBox をインストールして、そこに FreeBSD/amd64 14.2-RELEASE をインストールしてみたいと思います。

と、いうのも Oracle VirtualBox はバージョンが 7.1.6 になって、MS ゴシックのギザギザしたフォントが変更になり、ちゃんとアンチエイリアスが効いたフォントで表示されるようになりました。また、Qt5 から Qt6 にフレームワークが変更になり、ロゴのアイコンまで変更になり「お。なんか良い感じじゃーん。」となっているのであります。

 
では、ここから FreeBSD/amd64 14.2-RELEASE をインストールして、X まで動作させていきます。

1. VirtualBox 7.1.6 を拾ってきてインストール
2. VirtualBox 7.1.6 Extension Pack を拾ってきてインストール
3. FreeBSD の iso ファイルを拾ってくる
4. FreeBSD をインストール

 
端折りましたが、ここまで大丈夫でしょうかね。

で、今回は X まで動作させるので、当然 KDE6 をインストールします。
他のマシンで既に KDE6+Plasma6 が動作しているので、そのマシン上で以下のコマンドを実行すれば、pkg を生成してくれます。

# pkg create -n -g -o /usr/ports/packages/All -a

 
あとは今回 Virtialbox にインストールした FreeBSD 側で /usr/ports/packages/All を NFS マウントするなり /usr/ports/packages/All/* を scp で取ってくるなりして pkg add kde-6.2.5.24.12.2.pkg などすれば 一気にインストールされます。また、 xorg-7 や emacs-29.4 などを pkg add するのも良いでしょう。

と、いうか、僕の場合、メインの ports コンパイルマシンがあって、そこでコンパイルして pkg create して NFS サーバ上に置いて、他の FreeBSD は NFS マウントして pkg add しています。 FreeBSD サイトを利用した pkg install はほぼ利用していないです。 pkg install すると、僕の make config とは合わないので、あまり利用していません。

 
と、いうこどて、 Xorg をインストールして KDE6+Plasma6 までインストールが完了しました。と、いうことで Xorg を起動させましょう。

今回 VirtualBox で FreeBSD を動作させるには以下のサイトが参考になるかと思います。

https://docs.freebsd.org/en/books/handbook/virtualization/#virtualization-guest-virtualbox

 
virtualbox-ose-additions を emulators/virtualbox-ose-additions からインストールします。 Xorg 使う版をインストールします。その後、 /etc/rc.conf に以下の行を追加。

vboxguest_enable="YES"
vboxservice_enable="YES"

 
続いて /usr/local/etc/X11/xorg.conf.d/ 配下の xorg.conf の設定です。 今の Xorg は結構自動で設定認識して動作するので設定は不要かもしれないです。僕の場合の設定を記載します。

o. 00-module.conf

Section "Module"
    Load  "GLcore"
    Load  "drm"
    Load  "fb"
    Load  "vgahw"
    Load  "shadow"

    SubSection "extmod"
        Option      "omit xfree86-dga"
    EndSubSection
EndSection

Section "DRI"
    Group "video"
    Mode 0666
EndSection

Section "ServerFlags"
    Option      "StandbyTime" "3"
    Option      "SuspendTime" "5"
    Option      "OffTime"     "10"
    Option      "AIGLX"       "True"

#   Option      "AllowEmptyInput" "off"
#   Option      "AutoAddDevices"  "off"
EndSection

 

o. 10-monitor-screen.conf

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Monitor Vendor"
    ModelName      "Monitor Model"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Card0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "NvAGP"

    SubSection "Display"
        Viewport   0 0
        Depth     24
    EndSubSection
EndSection

 

o. 20-video.conf

Section "Device"
    Identifier "Card0"
    Driver "vboxvideo"
    VendorName "InnoTek Systemberatung GmbH"
    BoardName "VirtualBox Graphics Adapter"
EndSection

 

o. 50-keyboard.conf

Section "InputClass"
    Identifier      "AT Keyboard"
    MatchIsKeyboard "on"
#   Driver      "kbd"
    Driver      "evdev"
#   Option      "XkbRules"   "xorg"
    Option      "XkbRules"   "base"
    Option      "XkbModel"   "jp106"
    Option      "XkbLayout"  "jp"
#   Option      "XkbOptions" "ctrl:swapcaps"
EndSection

 

o. 60-mouse.conf

Section "InputDevice"
        Identifier      "Mouse0"
        Driver          "vboxmouse"
        Option          "Protocol"      "auto"
#       Option          "Device"        "/dev/sysmouse"
        Option          "Buttons"       "5"
        Option          "ZAxisMapping"  "5 4 6 7 8 9"
EndSection

 
Xorg でディスプレーを表示させたり、キーボードやマウスを認識させたり、マウスホイールを動作させたりするには VirtualBox 側の「設定」が重要になってきます。

必要な設定内容を抜き出しました。

  • 「システム」の「ポインティングデバイス」は[PS2 マウス]を選択
  • 「システム」の「EFIを有効化」にチェック
  • 「システム」の他の「拡張機能」も必要に応じてチェック
  • 「ディスプレイ」の「グラフィックコントラー」は[VBosSVGA]を選択
  • 上記の設定を有効にすることにより一番下に「無効な設定が見つかりました」となるがとりあえず無視して[OK]を押す
  • CPU やメモリ容量については自分の好みでチョイス

 
こんな感じで設定して、 FreeBSD を起動して Xorg を起動すると動作してくれると思います。

ただ、一点。マウスのホイール機能がいまいち怪しい動作です。どうやら VirtualBox の他の機能に食われているようです。

FreeBSD の画面のメニューから「入力」をクリックして「マウス統合」を無効にしてみてください。

「マウス統合」を無効にすると、FreeBSD のウィンドから他のウィンドに移動する際、左 Ctrl ボダンを押す必要があります。シームレスにマウスが動作しません。しかし、VirtualBox の FreeBSD ではホイール機能はちゃんと動作するようになりました。ただ、ダブルクリックしてコピーしようとしたとき、下にちょっとズレたり、あまり使い勝手が良くないような・・。

このあたり、趣味の世界で利用方法を選択してください。

 
今回、初めてコッテリと Windows 側で FreeBSD を設定してみました。普段は PC 買ったら即『マルチブート』が鉄則になっていたので、まぁ、ある意味良い体験でした。これで、Windows 上の VirtualBox で FreeBSD が動作することも確認できたし、まぁ良しとするですかねぇ。

ちなみに、今回購入したミニ PC で World of Warships なるゲームを試してみましたが 3 分に一回落ちるとか、結構悲惨。ファイナル・ファンタジーのベンチマークとか走らせたら 1920×1080 のフル HD で 2700 とか。ゲームにはちとつらいか・・。

2月 062025
 

kde.org から KDE6 がリリースされて、FreeBSD では長らくベータ版だったのですが、いよいよ 2025/2/3 に、ports-current に降ってきました。以前「FreeBSD に KDE5 が降ってきた。」と書いたのは 2018 年 5 月で、その間ずっと KDE5 と Plasma5 を使っていたのですが、今回、めでたくバージョンアップです。

今回は KDE5+Plasma5 から KDE6+Plasma6 へのバージョンアップ編として書いてみたいと思います。

KDE5 から KDE6 へのバージョンアップについては、以下の項目に付いて重点的に考慮しつつインストールしてみたいと思います。

  • QT5 との決別
  • fcitx は 4 系から fcitx5 へ移行
  • fcitx5 への移行に伴う mozc のバージョンアップ

内容が似ているようないないような雰囲気ですが、簡単に説明すると、そもそも KDE6+Plasma6 になると QT5 が不要になり、 KDE6+Plasma6 は QT6 へ移行していきます。また、QT5 と QT6 では qt アプリケーションの中でも同居できないモノがあり conflift が発生するので QT6 への移行は必須となります。

QT5 を使っているアプリケーションが色々あるよなぁ。と、思うのですが、上記でいうと mozc-tools が QT5 を利用しているので、これを QT6 を利用しているバージョンに移行する必要があります。するっていと、 fcitx は 4 系から fcitx5 へ移行。と、なります。

では実際にインストールしてみます。環境としましては、 FreeBSD/amd64 14.2-RELEASE において、現在、 KDE5+Plasma5 がインストールされている状態のところに ports から x11/kde をインストールするところから始めます。

次に fcitx5 をインストールして、最後に mozc をインストールして、環境を整えます。

 

1. kde6 のインストール
まず、その前に不要なものを削除しましょうか。

# pkg delete kde5-5.27.11.23.08.5_2
# pkg delete ja-fcitx-mozc-2.23.2815.102.01_25 ja-mozc-el-2.23.2815.102.01_25 ja-mozc-server-2.23.2815.102.01_25 ja-mozc-tool-2.23.2815.102.01_25
# pkg delete fcitx-qt5-1.2.7 zh-fcitx-4.2.9.9 zh-fcitx-configtool-0.4.9_2
# pkg delete sddm
# pkg autoremove
#
# pkg info | grep qt5- | awk '{print "pkg delete -fy " $1}' | sh -x
# pkg info | grep kf5- | awk '{print "pkg delete -fy " $1}' | sh -x
# pkg info | grep plasma5- | awk '{print "pkg delete -fy " $1}' | sh -x
#
# portmaster -a
#
# cd /usr/ports/x11/kde
# make install
# cd /usr/ports/x11/sddm
# make install
#

 
大体こんな感じでしょうか。そして、そのあと x11/kde をインストールします。
一点気をつけるのが x11/plasma6-plasma の make config のオプションです。

下の「Install Plasma 6 integration plugins for Qt5 applications」にチェックを付けてコンパイルすると、ドドドと QT5 関係のソフトウェアが入ってしまいます。なので、チェックは外したほうが良いです。
それにしても、ここからインストールされる qt アプリはどうして QT5 と QT6 で conflict を起こさないのだろう・・。不思議だ。

まぁ、速いマシンで約半日。と、いう感じでしょうか。

まっさらな状態から KDE6+Plasma6 をインストールするときは素直に下の二つの make install を叩けば良いでしょう。あ。その前に 既存のインストールされているものを portmaster -a で最新の状態にしておきましょう。

 
インストールが完了した KDE6 と、以前利用していた KDE5 との違いはあまり感じられません。まぁ、themes で色々カスタマイズしているしているので、それはそれで今まで利用していた自分の環境が引き継がれるかと思います。
ただ、QT5 から QT6 になった関係で themes やアイコンが引き継がれない場合があるので、その場合は「ソフトウェアセンター」から再インストールしましょう。

KDE6+Plasma6 になって一番変わったのは「設定」アプリでしょうか。左側の並び順がごそっと変わりました。一番上に[入力/出力デバイス]が来て、[接続されたデバイス]とか、[外観とスタイル]は結構下に移動しました。

あとは、現在動作確認中です。特に問題なく動作しています。

 

2. fcitx5 のインストール
次に日本語入力である fcitx5 をインストールします。 fcitx の 4 系は今までは ports では chinese/fcitx にありましたが fcitx5 では textproc/fcitx5 になります。 textproc/ の下に fcitx5 関連のものが色々入っているのでこちらをインストールします。

# cd /usr/ports/textproc/fcitx5
# make install
# cd ../fcitx5-qt
# make FLAVOR=qt6 install 
# cd ../fcitx5-gtk
# make install
# cd ../fcitx5-m17n
# make install

 
こんな感じで OK です。 fcitx5-qt は FLAVOR=qt6 を指定して QT6 対応のものを作成します。
fcitx5-gtk は Firefox や Thunderbird など GTK アプリで日本語入力をする場合に必須ですので、インストールします。 falkon などは QT6 アプリなので fcitx5-gtk は不要で日本語入力ができます。
GTK アプリで日本語入力する場合は環境変数が多少変わりました。以下のように指定すると良いでしょう。

export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

 
GTK_IM_MODULE は、多分今まで xim と指定していたかと思いますが、 fcitx5 からは fcitx と指定してください。これで Firefox でも日本語が打てるようになります。

 
fcitx5 を利用していて、もうひとつ困るのが設定についてです。KDE6 のパネルにウィジェットとして「入力メソッドパネル」を追加すると、日本語キーボードと mozc の切り替え、または動作モードが表示されますが、「インプットメソッドを設定」で fcitx5 のオン/オフやキーバインドの設定をするのですが、これには textproc/fcitx5-configtool が必要になります。がっ!! しかし、 textproc/fcitx5-configtool をコンパイルすると QT5 のファイルがドドドとインストールされてしまいます。で、QT6 のファイルと conflict が発生します。結構痛い・・。

一時的に textproc/fcitx5-configtool をインストールして、fcitx5 の設定が完了したらサクっと、 textproc/fcitx5-configtool を pkg delete して、かつ、 pkg autoremove して conflict した QT6 のアプリを再インストールするのが良いかと思われます。

 
fcitx5-configtool で設定した情報は ~/.config/fcitx5/config の設定ファイルとして保存されます。と、いうことは、このファイルを使い回せば大丈夫なわけですね。

せっかくなので、ここに僕の ~/.config/fcitx5/config を貼り付けておきましょう。
これをそのまま自分の環境に置くと textproc/fcitx5-configtool のインストールが不要になります。

[Hotkey]
# トリガーキーを押すたびに切り替える
EnumerateWithTriggerKeys=True
# 次の入力メソッドに切り替える
EnumerateForwardKeys=
# 前の入力メソッドに切り替える
EnumerateBackwardKeys=
# 切り替え時は第1入力メソッドをスキップする
EnumerateSkipFirst=False

[Hotkey/TriggerKeys]
0=Shift+space
1=Henkan
2=Muhenkan

[Hotkey/AltTriggerKeys]
0=Shift_L

[Hotkey/EnumerateGroupForwardKeys]
0=Super+space

[Hotkey/EnumerateGroupBackwardKeys]
0=Shift+Super+space

[Hotkey/ActivateKeys]
0=Hangul_Hanja

[Hotkey/DeactivateKeys]
0=Hangul_Romaja

[Hotkey/PrevPage]
0=Up

[Hotkey/NextPage]
0=Down

[Hotkey/PrevCandidate]
0=Shift+Tab

[Hotkey/NextCandidate]
0=Tab

[Hotkey/TogglePreedit]
0=Control+Alt+P

[Behavior]
# デフォルトで有効にする
ActiveByDefault=False
# フォーカス時に状態をリセット
resetStateWhenFocusIn=No
# 入力状態を共有する
ShareInputState=No
# アプリケーションにプリエディットを表示する
PreeditEnabledByDefault=True
# 入力メソッドを切り替える際に入力メソッドの情報を表示する
ShowInputMethodInformation=True
# フォーカスを変更する際に入力メソッドの情報を表示する
showInputMethodInformationWhenFocusIn=False
# 入力メソッドの情報をコンパクトに表示する
CompactInputMethodInformation=True
# 第1入力メソッドの情報を表示する
ShowFirstInputMethodInformation=True
# デフォルトのページサイズ
DefaultPageSize=5
# XKB オプションより優先する
OverrideXkbOption=False
# カスタム XKB オプション
CustomXkbOption=
# Force Enabled Addons
EnabledAddons=
# Force Disabled Addons
DisabledAddons=
# Preload input method to be used by default
PreloadInputMethod=True
# パスワード欄に入力メソッドを許可する
AllowInputMethodForPassword=False
# パスワード入力時にプリエディットテキストを表示する
ShowPreeditForPassword=False
# ユーザーデータを保存する間隔(分)
AutoSavePeriod=30

 

以上で fcitx5 のインストールは終わりです。

ただ、fcitx5 を利用するようになると、今度は japanese/fcitx-mozc が利用できなくなります。 japanese/fcitx-mozc を利用しなくなるので合わせて japanese/mozc-server も利用しなくなります。と、いうことで fcitx5 に対応した fcitx5-mozc を利用することになるのであります。

と、いうことで次へ。

 

3. fcitx5-mozc のインストール
FreeBSD-users-jp な ML でも何回か投稿がありました。ports-current の fcitx-mozc の mozc のバージョンは ja-fcitx-mozc-2.23.2815.102.01_25 ですが、 fcitx5 に対応した mozc は ja-fcitx5-mozc-2.31.5712.102_6 という、先進的なバージョンになります。

まずは、情報収集として以下の URL を確認します。

https://lists.freebsd.org/archives/freebsd-users-jp/2024-July/000379.html
https://github.com/kdeguchi/mozc-ports

 
では、インストール手順ですが、まず上の URL の github.com から mozc-ports-main.zip をダウンロードして展開し /usr/ports/ 配下に設置します。

# wget https://github.com/kdeguchi/mozc-ports/archive/refs/heads/main.zip -O mozc-ports-main.zip
# unzip mozc-ports-main.zip
# cp -pr mozc-ports-main /usr/ports/mozc-ports
# cd /usr/ports/mozc-ports/japanese/
# ls 
fcitx-mozc/   fcitx5-mozc/  ibus-mozc/    Makefile.inc  mozc-el/      mozc-server/  mozc-tool/    uim-mozc/

 
こんな感じです。で、/etc/make.conf に一行追加します。

# fcix5-mozc compile
OVERLAYS+=/usr/ports/mozc-ports

 

これで準備が整いました。コンパイルしていきます。
ちなみに mozc は最新版です。 mozc-ports/devel/bazel8 も合わせてインストールされて openjdk18 など java 関係のごついのが色々インストールされます。コンパイルにそれなりの時間がかかります。

# cd /usr/ports/mozc-ports/japanese/fcitx5-mozc/
# make install
# cd ../mozc-server
# make install
# cd ../mozc-tool
# make install
# cd ../mozc-el
# make install
# 

 
コンパイルは時間はかかりますが、順調に進むと思います。 python3 が BUILD_DEPENDS と RUN_DEPENDS で必要になります。既存でインストールされている python3.11 などを /usr/local/bin/python3 へと symlink する lang/python3 がインストールされます。

無事にコンパイルできて、インストールして、使えるようになったでしょうか?

僕の場合は特に問題なく動作しましたが、ただ、一点。 mozc-el がダメで emacs 中で日本語が利用できなくなりました。どうも /usr/local/libexec/mozc_emacs_helper が起動されない雰囲気です。色々試したけどやっぱりダメで emacs-lisp 部分の /usr/local/share/emacs/29.4/site-lisp/mozc/* のファイルを ja-mozc-el-2.23.2815.102.01_25 の、つまりは japanese/mozc-el がインストールしたものと入れ替えたら無事に動作しました。入れ替えるファイルは emacs-lisp の部分のみなので、mozc のバージョンに引きずられることもなく、無事に動作して一安心。

 
とまぁ、これで KDE6+Plasma6 と QT6 がインストールされ、日本語入力もできるようになり KDE5+Plasma5 から KDE6+Plasma6 と QT6 への移行が完了しました。

ただ、残りほんの少し QT5 を利用しているアプリが存在します。その一つが sddm になります。おかげで deskutils/plasma6-sddm-kcm をインストールして themes を別のに選択しても反映されない。とかが起きています。
あと、 KDE 系とは直接関係ないですが、 vlc も QT5 のライブラリを利用しています。今のところ最後の QT5 利用アプリはこの二つ。 pkg info | grep qt5- | wc -l すると 16 となっています。

 
あ。KDE6+Plasma6 の Wayland についてちょっと触れておきます。 sddm から Plasma (Wayland) を指定してログインしてもすぐに sddm の画面に戻ってしまい、 Wayland では利用できません。
sddm でのログイン時のログは ~/.local/share/sddm/wayland-session.log に保存されているので確認することができます。僕の環境では以下のログが出力されていました。

kwin_core: Could not determine the active graphical session
kwin_wayland_drm: failed to open drm device at "/dev/dri/card0"
kwin_wayland_drm: No suitable DRM devices have been found

 
なんか、AMD CPU と、そこに搭載されているグラフィックチップでは Wayland が動作しないようです。 nVidia とか Intel なGPU なら動作するかもしれんです・・(g_g)。

 
と、いうことで、ほぼ完全に移行が完了しました。これからドンドン使い込んでいきたいと思います。
KDE については KDE5 のときもそうでしたが、時々パラパラっとエントリ書いていますので、もしかしたらまた書くかもです。

 
あ。 japanese/mozc-server あたりは最新の 2.31.5712.102 にならないのかな? (独り言)

1月 112025
 

Linux 方面では pacemaker と corosync 、そして drbd で MySQL サーバの冗長構成を構築する。なんてのは日常茶飯事のようですが、同様な構成を FreeBSD で組んでみたい。
と、いうのも Linux 方面では pacemaker の管理用コマンドがややこしい。以前の CentOS7 辺りでは crm_mon を利用しているかと思っていたが、 AlmaLinux8 では どうやら crm_mon が利用できない。あと、 pacemaker のバージョンが 1 系から 2 系になり、設定ファイルに互換性がなくなり、もう一度、設定方法について勉強し直し。みたいな雰囲気で、そろそろ FreeBSD で MySQL サーバの冗長を組みたくなってきた。と、いう雰囲気です。

 
と、いうことで、今回は FreeBSD で carp と hast を利用して、二台のマシンで冗長構成な MySQL サーバを構築してみましょう。

そもそも、二台の FreeBSD を利用した冗長構成な MySQL サーバを構築するには何を利用したら良いの? Linux で言うところの pacemaker と drbd みたいなものって、何かあるの?などと、調査からはじめました。
carp が pacemaker 部分。 hast のほうが drbd を受け持っている。と、いう認識で良いかと思われます。

まずは順番に見ていきます。

 

1. 今回の構成

二台の FreeBSD を用意するわけですが、今回は VMware ESXi 上で動作する FreeBSD/amd64 14.2-RELEASE と bhyve 上で動作する FreeBSD/amd64 14.2-RELEASE を用意しました。二台のサーバ共、同一の ESXi 上に載せていても冗長構成になりませんからねf(^^;;。

ESXi 側の FreeBSD のホスト名は freebsd-esxi (192.168.202.53) 、bhyve上で動作している FreeBSD のホスト名は freebsd-bhyve (192.168.202.202) として運用します。あと、 VIP が必要ですが、これは 192.168.202.251 とします。

図に書くとこんな感じになります。

それぞれの仮想環境上に冗長構成として利用する 2 台のサーバを設置。各サーバは OS をインストールしたディスク (da0) と、hast 用 (Linux で言うところの drbd) にもう一個 da1 を用意します。それが、各ホストの下の「hast disk」です。

プライマリ側で hast で利用しているディスクに更新があると、チョロチョロチョロっと、対向のセカンダリ側の hast のディスクに書き込まれて同期が保たれます。で、セカンダリ側がマスタになると、そのまま hast disk をマウントしてサービスを開始します。

carp はプライマリとセカンダリを切り替える機能、 Linux で言うところの pacemaker と corosync に相当します。

それでは実際に hast と carp の設定について見ていくことにしましょう。

 

2. carp の設定

まずはネットワーク系に相当する carp の設定から見ていきます。
とは言いつつ、簡単です。

まずはカーネルモジュールのロード設定ですね。

o. /boot/loader.conf

carp_load="YES"

 
続いて VIP の IP アドレスの設定を /etc/rc.conf に記載します。
プライマリ側とセカンダリ側では多少設定が違います。

o. プライマリ側 /etc/rc.conf

ifconfig_em0_alias0="inet vhid 1 pass mysql00 alias 192.168.202.251/32"

 

o. セカンダリ側 /etc/rc.conf

ifconfig_em0_alias0="inet vhid 1 pass mysql00 advskew 50 alias 192.168.202.251/32"

 
まぁ、実際に、セカンダリの設定が入っているサーバがプライマリで動作しているときにプライマリの設定が入っているサーバが再起動すると、セカンダリとして動作するので、設定自体にあまり意味はないかもですね。

 
この設定を入れると em0 には VIPが付加されるのと、マルチキャストアドレスが付加されます。まずは上記設定を入れて再起動してみましょう。

$ ifconfig em0
em0: flags=1008943 metric 0 mtu 1500
        options=4e524bb
        ether 00:0c:29:75:28:84
        inet 192.168.202.211 netmask 0xffffff00 broadcast 192.168.202.255
        inet 192.168.202.251 netmask 0xffffffff broadcast 192.168.202.252 vhid 1
        inet6 fe80::20c:29ff:fe75:2884%em0 prefixlen 64 scopeid 0x1
        inet6 2001:470:fe36:feed:0:202:211:1 prefixlen 64
        carp: MASTER vhid 1 advbase 1 advskew 50
              peer 224.0.0.18 peer6 ff02::12
        media: Ethernet autoselect (1000baseT )
        status: active
        nd6 options=21

 
192.168.202.251 が alias で付加され、あと、carp: MASTER vhid 1 advbase 1 advskew 50 というのが付加されます。マルチキャストアドレスで、同期判断をしています。多分、Linux でいうところの drbd に相当する差分データも流れていると思います。

そして、一点注意点があります。VMwareESXi 上で動作している仮想マシンの em0 が接続する vSwitch はプロミスキャス・モードを有効にしてあげる必要があります。 ESXi 的に言うと『無差別モード』と、いうヤツですね。これを許可していないと二台サーバの同期ができません。
bhyve 側にはこの設定がありません。まぁ、bhyve の vSwitch に相当する部分はそもそも bridge インターフェイスなので、プロミスキャス・モードは既にオンになっていますね。

と、いうことでネットワークの設定は終了。
続いて hast 側、HDD の作成や、設定について見ていきましょう。

 

3. hast 用ディスクイメージの用意

上にも書いたとおり、ディスクイメージは二つ必要で、da0 側に OS イメージをインストールし、da1 側はフツーに ufs でフォーマットします。あ。多分 zfs でも行けると思いますが、僕は ufs でフォーマットしました。

両方のサーバで実施してください。

# newfs -U /dev/da1
# mount /dev/da1 /mnt/
/dev/da1  20308252      8   18683584     0%    /mnt
# umount /mnt

 
gpart で、パーティションを分けるようなことはせず、ダイレクトに /dev/da0 に対して newfs を実施します。その後、マウントして、サイズを確認します。2 台のサーバで同一容量になっている必要があります。

 

4. hast 用環境設定

続いて各種設定を見ていきます。

o. /etc/rc.conf

hastd_enable="YES"

 

o. /etc/hast.conf (新規に作成)

replication memsync
resource disk0 {
    on freebsd-esxi {
        local /dev/ada0
        remote 192.168.202.202
    }
    on freebsd-bhyve {
        local /dev/da1
        remote 192.168.202.53
    }
}

 
/etc/hast.conf ファイルは一個のディクスを用意する場合は上記の設定で、二個目の場合は resource disk1 { } みたいになります。
両方のサーバで同一の内容を記載します。
on freebsd-esxi { } の設定のところで remote の IP アドレスを記載します。対向のサーバの IP アドレスになります。
また、ホスト名は名前解決ができている必要があります。 DNS 登録がない場合は /etc/hosts に記載しましょう。

o. /etc/fstab

/dev/hast/disk0 /var/db/mysql   ufs     noauto,rw,noatime       0       0

 
とりあえず /var/db/mysql にマウントする設定内容で記載します。

設定内容はこんな感じですかね。 Linux 方面 の pacemaker と corosync、そして drbd の設定よりは格段に楽ちんです。

 

5. /dev/hast/disk0 の準備

まずは hastd を起動します。

# service hastd start
# ps -ax | grep hast
1053  -  Ss    0:00.01 /sbin/hastd

 
続いてディスクの初期化を実施します。

まずは、プライマリサーバ側から。今回は、プライマリ側サーバは IP アドレスの若版である、freebsd-esxi にします。

# hastctl create disk0
# hastctl role primary disk0

 

続いてセカンダリ側を。こちらは freebsd-bhyve になります。

# hastctl create disk0
# hastctl role secondary disk0

 

そしたら次に HDD 初期化とマウントを実施します。これは両方のサーバで実施してください。

# newfs -U /dev/hast/disk0
# fsck -fy -t ufs /dev/hast/disk0
# mount -o noatime -o rw /dev/hast/disk0 /var/db/mysql

 

ここまで来たら作業は完了。 hastctl でステータスを確認します。

# hastctl status disk0
Name    Status   Role           Components
disk0   degraded primary        /dev/ada0       192.168.202.51
# hastctl list
disk0:
  role: primary
  provname: disk0
  localpath: /dev/ada0
  extentsize: 2097152 (2.0MB)
  keepdirty: 64
  remoteaddr: 192.168.202.51
  replication: memsync
  status: degraded
  workerpid: 1747
  dirty: 75497472 (72MB)
  statistics:
    reads: 211
    writes: 150
    deletes: 0
    flushes: 0
    activemap updates: 36
    local errors: read: 0, write: 0, delete: 0, flush: 0
    queues: local: 0, send: 0, recv: 0, done: 0, idle: 255

 
こちらはプライマリ側の状態です。hastctl status disk0 で確認すると、primary と表示され、IP アドレスも合わせて表示されます。
セカンダリ側でも同様のコマンドで確認することができます。今回は割愛します。
hastctl list はディスク同期の詳細が表示されます。まぁ、簡単に言うと、この二つのコマンドは Linux でいうところの cat /proc/drbd みたいな感じでしょうか。

 

6. hast の状態の遷移

HDD イメージを二台のサーバ間で操るのですが、hastctl コマンドで制御します。

  • プライマリとして利用: hastctl role primary disk0
  • セカンダリとして利用: hastctl role secondary disk0
  • どちらでもない状態:   hastctl role init disk0

実際に運用し始めるとある程度解ってくると思います。

 
とまぁ、ここまでで carp と hast の設定が全て完了しました。これで、さぁてっ!! 冗長構成にするぜいっ!! と、は、実はまだなりません。

carp はサーバ障害発生時に IP アドレスを付け替えてくれます。hast は HDD 周りの同期を取ってくれます。がっ!! では、誰が /dev/hast/disk0 を /var/db/mysql にマウントしてくれるの?誰が切り替わった後に mysqld を起動してくれるの?

そーなのです。 carp+hast はこの部分に未対応です。なので、スクリプトを書く必要があるのであります。ありゃまっ!! orz

ここからはスクリプトについて見ていきましょう。

 

7. ホストダウンの検知

対向のホストがダウンした場合、検知は carp がしてくれます。カーネルモジュールを kldload しているので、実質的にはカーネルでの検知と、いうことになりますね。
ですので、イベントは devd で拾うことができます。まずは devd の carp.conf を作成します。設置場所はお好きなところに。僕は /usr/local/etc/devd/carp.conf を設置しました。

中身はこんな感じです。が、今回は以下のサイトを参考にさせて頂きました。ありがとうございました。

https://qiita.com/asakura_titems/7c117f2d7870afa76994

 
o. carp.conf

notify 0 {
    match "system"          "CARP";
    match "subsystem"       "[0-9]+@[0-9a-z]+";
    match "type"            "(INIT|MASTER|BACKUP)";
    action "/usr/local/bin/carphast.sh $type $subsystem";
};

 
system が CARP で、subsystem が ifconfig em0 したときの MASTER vhid で、type が ステータスですね。このイベントを拾ってから action で記載されたスクリプトが動作します。

スクリプトは以下になります。

o. carphast.sh

#!/bin/sh

services="mysql-server"
resources="all"

action=$1
vhid=${2%@*}
ifname=${2#*@}

syslog_facility="user.notice"
syslog_tag="carp-hast"
maxwait=60
delay=3

logger="/usr/bin/logger -p $syslog_facility -t $syslog_tag"


if [ "$resources" = "all" ]; then
    hastdevs=$(/sbin/hastctl dump | /usr/bin/awk '/^[[:space:]]*resource:[[:space:]]/ {print $2}')
else
    hastdevs="$resources"
fi


# 
case "$action" in
    MASTER|BACKUP|INIT)
        $logger "State Changed. I/F: $ifname VHID: $vhid state: $action"
        ;;

    AUTO)
        action=$(/sbin/ifconfig $ifname | /usr/bin/awk '/[[:space:]]*carp:[[:space:]]+([A-Z]+)[[:space:]]vhid[[:space:]]'"$vhid"'[[:space:]]?/ {print $2; exit}' )
        if [ "$action" ]; then
            $logger "State Changed. I/F: $ifname VHID: $vhid state: $action"
        else
            die "carp state not found"
        fi
        ;;
    
    *)
        die "$action is not yet implemented"
        ;;
esac


reverse_list()
{
    _revlist=
    for _revfile in $*; do
        _revlist="$_revfile $_revlist"
    done
    echo $_revlist
}

die()
{
    $logger "FATAL: "$*
    exit 1
}

# check hastd enabled
if ! /bin/pgrep -q hastd; then
    $logger "hastd not running"
    exit
fi


stop_services()
{
    for service in $( reverse_list $* ); do
        if /usr/sbin/service ${service} onestatus | /usr/bin/grep -q "running as" ; then
            /usr/sbin/service ${service} onestop \
                || $logger "Unable to stop service: ${service}."
        fi
    done
}

change_role()
{
    roletype=$1
    shift 1
    
    for hdev in $*; do
        /sbin/hastctl role $roletype $hdev \
            || $logger "Unable to change role to $roletype for resource: $hdev"
    done
}

# main
case "$action" in
    BACKUP|INIT)
        # stop services
        stop_services $services

        # unmount ufs
        for mdev in $(/sbin/mount -p | /usr/bin/awk '/^\/dev\/hast\// {print $1}'); do
            for hdev in $hastdevs; do
                if [ "$mdev" = "/dev/hast/$hdev" ]; then
                    /sbin/umount -f $mdev \
                        || $logger "Unable to unmount: ${mdev}."
                fi
            done
        done

        # change role
        if [ "$action" = "BACKUP" ]; then
            roletype="secondary"
        else
            roletype="init"
        fi
        change_role $roletype $resources

        $logger "Change role $roletype completed."
        ;;

    MASTER)
        # stop services
        stop_services $services

        # wait for not running secondary
        for hdev in $hastdevs; do
            for i in $(/usr/bin/jot $maxwait); do
                /bin/pgrep -fq "hastd: ${hdev} \(secondary\)" || break
                sleep 1
            done

            if /bin/pgrep -fq "hastd: ${hdev} \(secondary\)" ; then
                die "Secondary process for resource ${hdev} is still running after $maxwait seconds."
            fi
        done

        # change role primary
        change_role primary $resources
        sleep $delay

        # wait for the /dev/hast/* devices to appear
        for hdev in $hastdevs; do
            for i in $(/usr/bin/jot $maxwait); do
                [ -c /dev/hast/$hdev ] && break
                sleep 1
            done

            if [ ! -c /dev/hast/$hdev ]; then
                die "GEOM provider /dev/hast/$hdev did not appear."
            fi
        done

        # mount ufs
        for mdev in $(/usr/bin/awk '/^\/dev\/hast\// {print $1}' /etc/fstab); do
            for hdev in $hastdevs; do
                if [ "$mdev" = "/dev/hast/$hdev" ]; then
                    $logger "mount $mdev"
                    /sbin/mount -p | /usr/bin/grep -q -e "^${mdev}[[:space:]]" && break;
                    
                    /sbin/fsck -y -t ufs ${mdev} \
                        || die "Failed to fsck: ${mdev}."
                    
                    /sbin/mount ${mdev} \
                        || die "Unable to mount: ${mdev}."
                fi
            done
        done

        # start services
        for service in ${services}; do
            /usr/sbin/service ${service} onestart \
                || $logger "Failed to start service: ${service}."
        done

        $logger "Change role primary completed."
        ;;

esac

 
基本的に、MASTER の場合は hastctl role primary disk0 して /var/db/mysql をマウントして mysqld をスタートする感じ。
それ以外は hastctl role secondary disk0 する。それをもう少し複雑に色々している雰囲気でしょうか。
まぁ、切り替わったときにやる一連の作業を devd 経由で検知して、スクリプトを実行するようにした。と、いう感じです。

この辺り、の管理用スクリプトとか、ports になってないのかな?

 
僕の場合、もう一個、 /etc/rc.local から呼び出して実行するスクリプトを用意しています。サーバが再起動したとき hastctl status disk0 すると init になっているので、対向のホストに ssh してステータスを確認して hastctl role secondary disk0 を打つようにしました。

o. /usr/local/bin/hast_primary_check.sh

#!/bin/sh

REMOTE=`/usr/local/bin/sudo hastctl list | grep remoteaddr |awk '{print $2}'`
HBSTATUS=`/usr/bin/ssh -i /home/takachan/.ssh/id_rsa takachan@${REMOTE} /usr/local/bin/sudo hastctl status disk0 | grep ^disk0 | awk '{print $3}'`

if [ ${HBSTATUS} = 'primary' ];then
#    echo "sudo hastctl role secondary disk0"
    /usr/local/bin/sudo hastctl role secondary disk0
fi

 
再起動直後はセカンダリで良いので、起動時にステータスを更新してしまう。と、いう感じです。

 
さてと、これで carp+hast の冗長構成完了です。

Linux 方面の pacemaker と corosync、そして drbd の場合はスクリプト書かないんだけど、設定が面倒。 FreeBSD の場合は設定は簡単なんだけど、アプリ側に仕掛けとか何もなし。

どちらが良いかは自分で決めてくだされ。
ただ、これで冗長構成が完了したので、ヨシヨシ。と、いう感じかな。

11月 022024
 

2022 年に AQUOS sense6 SH-M19モトローラ moto g52j 5G を購入しました。
モトローラ moto g52j 5G のほうはまだ良かったのですが、AQUOS sense6 はひどいスマートフォンだった・・。小さいのはまだ良かったのだけど、CPU 的に遅すぎてお話にならない。しかし、我慢しつつ、使い続けました。

そこに iPhone15 を 2023 年 11 月に購入して、三台体制で布陣を敷いておりました。

 
AQUOS sense6 の後継として、何か良い端末が無いかと探していたのですが、それなりに結構な値段がする。と、いうのがあるし、大きいサイズだし・・。 Xperia10 VI など良さそうだと思いつつも高いので、悩んでいたところに、Y!mobile でとてつもない値段で、ハイミドルな端末が売りに出ていたので、ここはひとまず行ってみんべぇ。ということで購入してみました。

Libero Flip というヤツ。最近は機種変更でも 9,800yen という値段で出ているのでハイミドルでもこの値段であれば、『多少失敗しても良いやぁ。』と、いうことで飛びつきました。

今回のエントリは Libero Flip についてまとめたものになります。目次はこんな感じかな。

  • Y!mobile での機種変購入
  • SIM カードの検討
  • サイズと折りたたみ
  • 機能(サブ画面とバッテリの設定他)は?
  • 実際に使ってみた感想

では、順に見ていきましょう。

 

・Y!mobile での機種変購入

僕は Y!mobile を既に契約していて、現在は iPhone15 で利用しています。契約はシンプル S で、月々 2,000yen ちょい。奥さんが「家族割引サービス」を適用していて、割安でシンプル M の契約をしています。ここ、重要ですからね。僕の契約は『シンプル S』で奥さんは『シンプル M』です。

今回、機種変更でも Libero Flip が 9,800yen で購入できる。と、いうので、購入しました。
購入時「Libero Flip ガチャキャンペーン」と、いうのをやっていて、PayPay ポイントをもらうことができます。僕はガチャで 1,000 ポイントゲットしました。

その他に購入時にヤフーショップで購入すると PayPay ポイントが上乗せされたり、届いた Libero Flip の箱の中から Libero Flip の専用ケース 1,900yen 相当のプレゼントクーポンが出てきたりとかで、トータルで大体の実質 5〜6,000yen 前後で購入できるのではないかと思われます。

購入時の金銭的な障壁は以外に低いです。価格.com のクチコミでは画面が割れるとか液晶割れて液漏れとか、結構悲惨なレビューがあるのですが、この値段なら、まぁ、許せるかな。

液晶が壊れるのが早いか、OS のバージョンアップ切れが早いか? 的に考えても、まぁ、妥当な値段かと。

 
さてと、値段の話はここまでにして、届いた本体は AQUOS sense6 の後継ですので、そのつもりで移行作業開始です。

最近の Android は新旧二つのスマートフォンを USB ケーブルで接続すると、データ移行してくれるみたいですね。 Google へのバックアップも不要でした。

今回は AQUOS sense6 と Libero Flip を USB Type-C ケーブルで接続して AQUOS sense6 からアプリや設定情報などがドドドと Libero Flip の中に入りました。非常に簡単で、嬉しかったです。
まぁ、その後は多少の微調整と、言うか、設定も必要ではありますが・・。

で、このときに感動と、いうか、関心したこと。AQUOS sense6 と Libero Flip を USB Type-C ケーブルで接続しているとき、なんと!! AQUOS sense6 側は充電されていますっ!! つまり Libero Flip はモバイルバッテリー的な利用方法もできる。と、いうことですね。それはすごいっ!!

とは思うのですが、考えてみると Libero Flip のバッテリーの持ちはあまり良くないので、他のデバイスの充電に活用できてもなぁ・・。と、いう感じ。まぁ、そーいうことで・・f(^^;;。

 

・SIM カードの検討

開封から、データ移行が完了しましたので、SIM カードを入れようと思います。

Y!mobile の機種変更では、対象端末の他に新しい SIM カードも一緒に送られてきます。今まで利用していた SIM カードから切り替え作業が発生します。

写真は左から、今回機種変更する AQUOS sense6・今回購入した Lbero Flip 、 そして、現在 Y!mobile で利用中の iPhone15。上に乗っている SIM は今回 Lbero Flip を購入したときに一緒に付いてきたモノ。これは iPhone15 に入れる予定。

Y!mobile というか SoftBank の SIM カードというのは都市伝説的なお話があって『iPhone で利用していた SIM カードでは Android では利用できないので SIM カードを交換する必要がある。』んだそうな。ほんまかいな?

今まで iPhone15 に入っていた SIM は n111 でした。今回送られてきたのは n161。これは、iPhone と Android の両方で利用可能なんだそうで、まぁ、安心と言えば安心かな。

 
と、いうことでややこしい SIM カードをどの端末に何を入れるか。今回の登場人物はこんな感じ。

  • iPhone15 : 現在 Y!mobile の SIM カードで利用中
  • AQUOS sense6 : シェアプラン の SIM カードと povo2.0 eSIM の DSDV で利用中
  • Libero Flip : 今回機種変用に購入した端末

 
まず、iPhone15 に入っていた SIM カードを抜いて、Libero Flip 購入時に送付された SIM カードを入れます。その後切り替え作業を実施して iPhone15 は無事に新しい SIM カード(n161 の番号)で無事に動作しました。

さてと。今回機種変更名目で購入した Libero Flip にはどの SIM を入れるか? AQUOS sense6 で利用していたシェアプランの SIM カードを入れることにします。

そもそも、「シェアプラン」とはなんぞや? Y!mobileではシンプル M/L を契約している人は無料でデータ専用 SIM を最高 3 枚まで利用できるのです。シンプル M/L のギガを追加の SIM カードでシェアしつつ利用できるオプションです。

以下が参考になります。

子回線専用プラン(シェアプラン)

SoftBank は SIM の発行枚数が増えるので嬉しいのでしょうな。うちとしては、上で書いた奥さんの『シンプル M』にシェアプランで SIM を 2 枚もらっています。それが現在は AQUOS sense6 に入っているのですが、これを今回購入した Libero Flip に入れることにします。

あ。ちなみに「シェアプラン」の SIM カードはデータ通信専用で、電話できません。SMS は SoftBank からの通知が来るだけで、他の人とはメッセージ交換できません。まぁ、良いか。と、いう感じ。

 
あと、 Libero Flip は Y!mobile から発売されている端末なので、他キャリアの周波数に対応している必要は全く無い。割り切っているようです。

今回は povo2.0 の eSIM を入れる予定なので、確認の意味もこめて au の動作確認端末一覧サイトを見て『機種を絞り込む』に “Libero Flip” を入れて検索すると表示はしてくれます。ステータスは △ で、かつ、赤字で『対応エリア△:バンド18/26(800MHz帯)に非対応です。利用可能エリアが限られるため対応端末のご購入、ご利用をお勧めします。』と書かれています。
『動きません。』や『対象外。』とは、書いてないです;-)。

と、いうことで eSIM は povo2.0 を入れることにてみます;-)。 データ転送は Y!mobile で、通話と SMS は povo2.0 な環境を Libero Flip に構築するのであります;-)。

Y!mobile と povo2.0 データ通信にどっちを利用するかは下の「データ通信用のデフォルトSIM」で 1 か 2 を選択すれば良いだけなので、非常に操作が簡単です。 AQUOS sense6 の頃は SIM を切り替えるの、随分ナンギしたので、このラクチンさは嬉しい。

ちなみに povo2.0 で 1 週間 1 ギガのトッピングを購入して動作確認してみました。

au のメインバンドである 18 と 26 が利用できないにもかかわらず、高速で通信できます。かつ、電波をよく拾って、アンテナがちゃんと立ちます。

家の近所とか、秋葉原辺りで povo2.0 を試しましたが、Band 1, 3, 41 辺りで電波を拾ってくれて、かつ高速です。家で深夜に試したら 5G に接続していて google のスピード計測サイトで計ったら 200Mbps 越えました。
あぁ・・。ギガが消えていくーーっ!!

まだ、山間部や海上(僕は海釣りをする人なのよ;-)に行って試してはいませんが、都内であれば特に問題なく利用できました。ある意味『au って凄いっ!!』と感じますね。

 

・サイズと折りたたみ

サイズはでかいっ!! とりあえず、開いたときの大きさ比較。
moto g52j 5G とほぼ同じ大きさなのです。だったら、特に畳んで持ち歩くことないじゃん。と、いうことになりそうですf(^^;;。

パタパタ閉じたり開いたりして液晶画面にインパクト与えるより、開いたまま使って、寿命を伸ばしたほうがフツーのスマートフォンとして使ったほうが良いのでは?と思います。

閉じたときは厚くなるので、開いたまま利用するとなると非常に薄いスマートフォン。と、いうことになります。

 

・機能(サブ画面とバッテリの設定他)は?

あまり、閉じて利用することを想定してない(サイズ的に moto g52j 5G と同じ。と、いうことなので。)のですが、おサイフケータイで電車の改札口を通過するときは閉じていたほうがかっこ良いよなぁ。とか・・。

閉じているとに効果的に機能するのがまぁるいサブディスプレーですが、現在利用できる機能はこれしかありません。

合計六個ですね。唯一色々なアプリに対応しているのが『音楽』ですかね。音楽プレーヤーでは現在再生中の曲が表示されたりします。あと、他のサイト見たりしていると YouTube も表示できている。と、いうのもありました。

僕的には SMART USEN と U-NEXT アプリ、 Musicolet の動作確認をしてみましたが、これら全てサブディスプレーに再生中のタイトルを表示してくれました。

写真は SMART USEN で落語チャンネル聴いているときの動作です。当然曲飛ばしは機能しません。

U-NEXT アプリで再生中の動画のタイトルは表示しますが、実際には閉じている状態なので見ることはできませんf(^^;;。

 
バッテリーの消費について、特に気にしている OS なようで(TZE の Android OS は MyOS というらしい)バックグラウンドで動作しているモノや長時間常駐しているアプリは比較的頻繁に kill されているように感じられます。
あと、画面のリフレッシュレート 120Hz 設定が消えて 60Hz に戻ってしまうのにも、バッテリー設定が影響しているような気がします。

僕が頻繁に kill されていたのは iOS で言うことろの「ダイナミックアイランド」相当機能を実現する DynamicSpot や「アシスティブタッチ」相当機能を実現するアプリなどもバシバシ kill されます。

この機能はもしかしたらオフにしたほうが平和になれるかもしれません。

 

・実際に使ってみた感想

ミドルハイというランクの端末。Snapdragon 7 Gen1 は速いのか?とか思ったけど、体感的には moto g52j 5G のほうが速いと感じるかなぁ。と、いうか moto g52j 5G はスゲーな。ずっと使い続けてたい。と、思わせる性能ですが、今回購入した Libero Flip はそれに次ぐものだと思います。あ。iPhone15 は別次元の商品です;-|。

 
折りたたみの液晶画面ですが、曲がる部分を上から下に指でなぞっていくと、確かに溝がある感じがしますが、特に気にならないです。安定したガラス面ではなく、厚手のビニールを触っているような感じ?表面はツルツルしているので滑りは良いです。

 
最初のほうでも書きましたが、 Android のサポートが 2 年だと想定して、パカパカ開いたり閉じたりして、液晶が 2 年持つのか? これはもう判らないなぁ。なるべく閉じないようにして利用するかな。と・・。

値段 9,600yen で、ここれだけのスペック、性能は大したモノです。本当に。

2月 052024
 

以前のエントリで「bhyve の ubuntu で Intel Wi-Fi 6 AX200 を利用する。」と、いうエントリを書きました。そして、一個前のエントリ「NiPoGi GK3Pro ミニ PC 購入。」では MINI PC には VMware ESXi ではなく bhyve で仮想環境を構築した。と、書いています。

bhyve は基本的にコマンドをチマチマ打っていく状態だったので『GUI で簡単に仮想サーバ構築とかできないのかなぁ?』と思って探してみるとあるようですねぇ。 FreeBSD の ports にはなっていないようですが、GitHub からダウンロードできるようです。

https://github.com/DaVieS007/bhyve-webadmin

ここから bhyve-webadmin-master.zip をダウンロードして展開します。
今回ダウンロードしたのは BVCP という bhyve をウェブベースの GUI で管理できるものになります。
インストール先の FreeBSD では bhyve の環境が整っている必要があります。上記の「bhyve の ubuntu で Intel Wi-Fi 6 AX200 を利用する。」のエントリ中の『1. FreeBSD 母艦側の設定』の部分の設定をまず先済ませておく必要があります。

 
1.インストール
展開後にその中にある install.sh を実行します。以下、簡単なテキストキャプチャです。
指定するのは唯一データを管理するディレクトリを指定するのみです。今回は /opt/bhyve を指定しました。

# unzip bhyve-webadmin-master.zip
<略>
# cd bhyve-webadmin-master
# ./install.sh

                    ██████╗ ██╗   ██╗ ██████╗██████╗ 
                    ██╔══██╗██║   ██║██╔════╝██╔══██╗
                    ██████╔╝██║   ██║██║     ██████╔╝
                    ██╔══██╗╚██╗ ██╔╝██║     ██╔═══╝ 
                    ██████╔╝ ╚████╔╝ ╚██████╗██║     
                    ╚═════╝   ╚═══╝   ╚═════╝╚═╝     

            Bhyve Virtual-Machine Control Panel under FreeBSD
        
 N  2024-02-05 09:38:25 | BVCP | Initialising BVCP-Backend 1.9.8-p9 Application

  [>] Generating Entropy ... [9BA2FE3E0EC4B6D72CF2E6760FF5B0AA]

 Welcome to initial setup menu!
 The Software is located at: /var/lib/nPulse/BVCP

 The Software is producing pseudo filesystem scheme for virtual machines using symlinks
 Where to create metadata, iso_images, database, config, logs: (Does not need much space), default: [/vms]_> /opt/bhyve
<略>
 N  2024-02-05 09:40:08 | BVCP | Initialising BVCP-Backend 1.9.8-p9 Application
 N  2024-02-05 09:40:10 | BVCP | Starting Database ...
 (!) Admin Credentials recreated,
   - User: admin
   - Password: LmZH4kXD

 N  2024-02-05 09:40:10 | SW | Program exited gracefully...
Installation Finished!
Navigate: https://[your-ip]:8086
#

 
BVCP のデータ管理用ディレクトリを指定してインストールすると上記のようになって終わります。ウェブログインするパスワードが表示されているので覚えておきましょう。

インストール先についてですが、以下のようになっています。

  • BVCP のベースプログラムは /var/lib/nPulse/ にインストールされます
  • /etc/rc.conf に bvcp_enable=”YES” という文字列が追加されます
  • /usr/local/etc/rc.d/ 内に bvcp-backend bvcp-frontend bvcp-helper の三つのファイルが追加されます
  • データ保存先の /opt/bhyve/ が作成されます

 
上記のディレクトリ、ファイルを全て削除することによりまっさらな状態(uninstall した状態)となります。

 
2.仮想マシン作成前の準備
インストール後ウェブブラウザから https://wanchan.running-dog.net:8086 などとアクセスします。

インストール時に控えていた admin とそのパスワードでログインし、まずは右上をクリックしアカウントの管理として Account Settings から自分のメールアドレスを登録しましょう。

 
新規にアカウントを作成したら admin をログアウトして、新しいユーザでログインし直してと。
仮想マシンが利用する HDD イメージを保存するストレージを指定します。大容量のディレクトリを指定しましょう。

NFS 領域も指定できます。Active 系 bhyve 母艦がダウンすると NFS 上にゲスト OS のイメージがあるので Standby 系を Active にしてゲスト OS を起動できたりするので冗長構成が取れそうですね。

 
次にネットワークを設定します。
VLAN などの設定は母艦の FreeBSD 側で先に設定しておく必要があります。必要であれば設定しておきましょう。この辺り VMware ESXi 的に言うと vmnic0 に VLAN 単位の vSwitch を生成して、それを仮想マシンで利用する。みたいな雰囲気ですね。
母艦の FreeBSD が利用できないネットワークインターフェースは当然 bhyve でも利用できません。
pptdevs 経由で仮想マシン側にデバイス渡したくても BVCP の UI にデバイスを渡すオプションは今のところ無いようです。

ネットワークを作成する場合は em0 とか re0 などを一個含めておくと、bridge300 番台を生成してくれます。母艦側の FreeBSD の VLAN インターフェースも指定可能です。
その後、仮想マシンを作成したタイミングで tap300 番台を自動生成してくれ、かつ、それを bridge として追加してくれるようになります。
母艦側の NIC を含めないネットワークを作成すると、それは裏 LAN 的な、外に出ていかないネットワークとなります。

これで、アカウント・ストレージ・ネットワークの設定が完了しました。

 
3.仮想マシン作成
ここまで来たらいよいよ仮想マシンの追加をします。一番最初は OS の雛形を指定することになります。

対応している OS は FreeBSD・Linux・Windows になります。まぁ、それだけあれば十分か? macOS は FreeBSD かな?デバイスの形態が全く違うけど・・。 VyOS は Linux ですな。では Solaris は? まぁ、その話は置いといて・・f(^^;;。

雛形を作成したら次に作成した OS を選択して詳細を設定していきます。まぁ、GUI なので直感的に設定ができますよね。

色々細かい設定とかありますが、まずは OS をインストールしなければならない。
Virtual Hardware のところでは CPU 数やメモリ容量の変更ができます。

インストールのために CD-ROM Drive を指定します。ISO イメージを、データを管理するディレクトリ内に設置します。今回の環境での場所としては /opt/bhyve/iso_images/ になります。このディレクトリ内に保存します。

次に HDD イメージを作成します。登録したストレージ内に必要な容量を選択します。
その次に追加された HDD イメージの詳細設定を行います。

Name / Description は書いておいたほうが良いでしょう。 LUN Slot は気分的な設定値ですが、仮に HDD を複数接続したときに番号をずらしたほうが良さそうな雰囲気ですよね。
Attach Disk にチェックを入れると OS 側で HDD を認識するようになります。

作成した HDD は 今回の環境では NFS 領域の /media/Strage/ に vm_images というディレクトリが作成され、その中に格納され /media/Strage/vm_images/ubuntu01_disk01.img になります。 仮想マシン登録時に指定した Machine Name の ubuntu01 (小文字になる)と Name / Description で指定した disk01 を合わせたファイル名になります。

最後にネットワークを指定します。
自分が接続したいネットワークの指定と、ドライバを指定します。ドライバは FreeBSD 的に言うと vtnet0 と em0 の二つが選べます。 WindowsOS をインストールするときは Intel Pro 1000 を指定したほうが良いかもです。

 
これで設定がぜんぶ完了しましたかね。

 
4.いよいよ起動
では左上にある緑色の Start ボタンを押しましょう。そして起動後に現れる VNC Console をクリックすると別ウィンドでコンソールが表示され OS がブートするところを確認できます。その後 OS のインストールを進め、再起動してインストール完了。
apt -y update などで最新の OS 状態にしたり apt-get install でパッケージを色々インストールして最低限の環境を構築すれば良いですね。

ここで一旦 OS を停止して /media/Strage/vm_images/ubuntu01_disk01.img をバックアップしておけば、もう一個 OS を作成したいときにタネ用 HDD として利用できます。
新規に ubuntu02 とかを作成するときに Create Virtual Disk のところでうまいこと指定することができます。

あと、起動時に毎回コンソールに入る状態になっているのですが、一番上の Options の中の Wait for console: を No にすると、コンソール画面を開く必要はなくスルっと起動するようになります。

 
自分で作成した環境で、コマンドベコベコ打って仮想マシンを作成していたとき、WindowsOS は中々起動できなかったのですが BVCP を利用すると簡単に起動させることができます。
母艦側には潤沢な資源が必要になりますが、僕が試してみたところ Windows11 Pro と Window Ssever 2019 が起動できて動作しています。
まぁ、Windows11 の場合は BypassTPMCheck と BypassSecureBootCheck は必須になりますが、ここでは省略します;-)。

とまぁ、比較的簡単に bhyve を利用したウェブ UI の仮想環境が構築できました。

 
今回の BVCP を利用した bhyve 環境は、新規の仮想環境の構築となります。今までコマンドベースで自分の趣味を反映した bhyve 環境で用意したモノを再利用しようとしてもほぼ利用できません。
例えば BVCP 環境下で作成した FreeBSD のディスクイメージを自分がコマンドベースで作成した bhyve 環境に持っていって起動しようとしても、ブート時のデバイス認識のところでエラーになって起動しなかったりします。その逆もしかりです。

今までのコマンドベースで構築した環境・仮想マシンを捨てて、新しく BVCP 環境に移行するか、コマンドラインベース環境と同居するか悩みます。が、やっぱ GUI 環境のほうが楽だね。になると思いますが・・f(^^;;。

 
5.そろそろエンディング
前回のエントリでは Intel Celeron N5105 な NiPoGi GK3Pro ミニ PC で VMwareESXi が動作しないような環境(動作したとしてもデバイスを認識しないような PC の構成)においても FreeBSD が動作するのであれば bhyve による仮想環境が構築可能である。と記載しています。
そこに今回 GUI ベースで bhyve を動作させることにより、ますます bhyve のしきいが低くなりました。これで楽しさが広がりますねぇ;-)。

これは僕の仮想マシン一覧になりますが、母艦は FreeBSD/amd64 14.0-RELEASE で動作しております。仮想マシンとして動作している freebsd03 は FreeBSD/amd64 13.2-RELEASE で、現在起動中です。
この freebsd03 内では qemu を利用した chroot で中に入る環境があって、そこは FreeBSD/arm64 13.2-RELEASE の環境が構築されており ports のコンパイルなどを行っております。

こんな非常にややこすぃーい環境も構築できるのが良いっ!! ;-P

1月 272024
 

前回の Beelink MINI S 購入に引き続き、もう一個 MINI PC を購入してみしました。

と、いうのも比較的小型の OS が可動する装置としては Raspberry Pi を持っているのですが、どうも FreeBSD 14.0-RELEASE を arm7 とか arm64 で動作させるのに嫌気が差してきて『素直に amd64 で良いじゃん。』と、なり、今回の MINI PC の購入となったのでありました。

今回購入したのは NiPoGi GK3Pro ミニ PC というらしいです。これは Intel の第 12 世代プロセッサである Intel Celeron N5105 を搭載しています。メモリは 8GB で SSD は 256GB です。このスペックで 15,000yen 前後なので、随分と安い。今だと Raspberry Pi 4 とかと同じくらいではないかなぁ・・。値段的にも一緒であれば、 arm64 でなくとも良いよねぇ。みたいな・・。

ただ、値段が安いだけのことはあります。SSD は NMVe ではなく、SATA 接続の M2.SSD です。

安さの秘訣を一覧にしてみましょう。あ。全て FreeBSD/amd64 14.0-RELEASE で認識した内容です。

  • SSD は上にも書いた通り M2 SATA で 256GB の容量
  • サウンドカードは USB 接続の C-Media Electronics Inc. USB Audio Device で snd_uaudio.ko で認識
  • Bluetooth も USB 接続で Realtek Bluetooth Radio で ng_ubt.ko で認識されますが利用できるかは知りません
  • WiFi は Realtek RTL8821CE で if_rtw88.ko で認識できますが、まだ利用できません。これは PCIe にぶるさがっているっぽい

 
この辺りで基本的にプライスダウンしている感じでしょうか。ほとんどのデバイスが USB にぶるさがっているので BIOS の画面から Disable にできません。『FreeBSD で利用できないデバイスなんて要らないよー。』とか思って BIOS 画面覗いても Disable にする項目がないです・・。orz

pciconf -lv してみると none が 11 個もありますが、これは Intel の Celeron プロセッサを使っている PC のパターンでしょうか。

あと、悲しいことに、最近の PC のはずなのに USB-C ポートがありません。これは結構ショックでかい・・。orz。

 
この PC の使い方
さてと。気を取り直して・・。
例の如く、この手の中華製 MINI PC は付属の WindowsOS の出どころが非常に怪しいので、サクっと削除。
Windows Product Key Viewer という Windows のプロダクトキーを確認するアプリでチェックしてみると、やはり “B” のみが並んでおりました。これは Beelink SER4 を購入してチェックしたときにと一緒ですね。

しょーがないので FreeBSD 専用の PC にすることにしました。チョイスした OS は FreeBSD/amd64 14.0-RELEASE です。 CPU の Intel Celeron N5105 には Intel のバーチャリゼーション機能が搭載されているので vmm.ko を kldload した場合は bhyve で仮想環境が構築でき、また、起動時に vmm.ko を kldload していなければ virtualbox が起動できます。

この手の MINI PC って VMware ESXi が動作しなかったり、動作してもデバイスを認識してくれなかったりするので FreeBSD をインストールして仮想環境を構築するのはアリです。まあ、 VMware ESXi は Broadcom に買収されて、その後無料版の VMware ESXi がなくなることになるので FreeBSD+bhyve は今のところチョー注目株です;-)。
AlmaLinux+Docker の環境よりしきいが低いですかね。

ただ、その場合、メモリ 8GB はちょっと量が少ないので 16GB に拡張したほうが良いですかね。
Intel の Celeron N5105 のサイトを見ると対応メモリは 16GB までのようです。

HDMI の上の黒いパーツのネジを一本外して、横にスライドさせると内部にアクセスできます。

MINI PC の上のフタを開けると 2.5 インチの SATA SSD が装着できます。その下にメモリスロットが一個あって default で 8GB のメモリが入っいます。メモリ換装は簡単そうです。 M2.SATA SSD を換装するか、換装せずに 2.5 インチ STAT SSD を増設するか、微妙ではありますね。

ちなみに、上記の写真に写っているのは銅板ではありません。ただ単にテカリのあるプラスチックです:-|。

 
あ。そーそー。この MINI PC は、一個目の HDD として追加の 2.5 インチ STAT SSD が認識され、内蔵の M2.SATA SSD は二個目として認識されます。ちょっとーっ!! この辺りもおかしいよねぇ・・。 orz

以下は mount コマンドの結果。

/dev/ada1p2 on / (ufs, local, soft-updates, journaled soft-updates)
devfs on /dev (devfs)
/dev/ada1p1 on /boot/efi (msdosfs, local)
/dev/ada1p3 on /home (ufs, local, soft-updates, journaled soft-updates)
/dev/ada1p4 on /usr (ufs, local, soft-updates, journaled soft-updates)
/dev/ada1p5 on /var (ufs, local, soft-updates, journaled soft-updates)
/dev/ada0p1 on /opt (ufs, local, soft-updates)
<以下略>

 
何もかも怪しい筐体です・・。orz。

 
FreeBSD もインストールしたし virtualbox に WindowsOS もインストールしたので、これは外に持ち出しも OK っぽい。
仕事でデータセンタ行ったとき、IP アドレス付加したあとに inetd 経由で sredird が動作すればポートサーバ風に利用できてコンソール接続も可。なんてこともできるし。

小さいので夢が膨らみます;-)。

 
最後にですが、全然デバイスが認識できていない pciconf-lv の結果を添付してこのエントリは終了とします;-)。

hostb0@pci0:0:0:0:      class=0x060000 rev=0x00 hdr=0x00 vendor=0x8086 device=0x4e24 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = bridge
    subclass   = HOST-PCI
vgapci0@pci0:0:2:0:     class=0x030000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4e61 subvendor=0x8086 subdevice=0x2212
    vendor     = 'Intel Corporation'
    device     = 'JasperLake [UHD Graphics]'
    class      = display
    subclass   = VGA
none0@pci0:0:4:0:       class=0x118000 rev=0x00 hdr=0x00 vendor=0x8086 device=0x4e03 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    device     = 'Dynamic Tuning service'
    class      = dasp
xhci0@pci0:0:20:0:      class=0x0c0330 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4ded subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = serial bus
    subclass   = USB
none1@pci0:0:20:2:      class=0x050000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4def subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = memory
    subclass   = RAM
none2@pci0:0:21:0:      class=0x0c8000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4de8 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    device     = 'Serial IO I2C Host Controller'
    class      = serial bus
none3@pci0:0:21:1:      class=0x0c8000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4de9 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    device     = 'Serial IO I2C Host Controller'
    class      = serial bus
none4@pci0:0:21:2:      class=0x0c8000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4dea subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = serial bus
none5@pci0:0:22:0:      class=0x078000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4de0 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    device     = 'Management Engine Interface'
    class      = simple comms
ahci0@pci0:0:23:0:      class=0x010601 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4dd3 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = mass storage
    subclass   = SATA
none6@pci0:0:25:0:      class=0x0c8000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4dc5 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = serial bus
none7@pci0:0:25:1:      class=0x0c8000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4dc6 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = serial bus
sdhci_pci0@pci0:0:26:0: class=0x080501 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4dc4 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = base peripheral
    subclass   = SD host controller
pcib1@pci0:0:28:0:      class=0x060400 rev=0x01 hdr=0x01 vendor=0x8086 device=0x4db8 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = bridge
    subclass   = PCI-PCI
pcib2@pci0:0:28:1:      class=0x060400 rev=0x01 hdr=0x01 vendor=0x8086 device=0x4db9 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = bridge
    subclass   = PCI-PCI
none8@pci0:0:30:0:      class=0x078000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4da8 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = simple comms
none9@pci0:0:30:3:      class=0x0c8000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4dab subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = serial bus
isab0@pci0:0:31:0:      class=0x060100 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4d87 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    class      = bridge
    subclass   = PCI-ISA
hdac0@pci0:0:31:3:      class=0x040300 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4dc8 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    device     = 'Jasper Lake HD Audio'
    class      = multimedia
    subclass   = HDA
none10@pci0:0:31:4:     class=0x0c0500 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4da3 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    device     = 'Jasper Lake SMBus'
    class      = serial bus
    subclass   = SMBus
none11@pci0:0:31:5:     class=0x0c8000 rev=0x01 hdr=0x00 vendor=0x8086 device=0x4da4 subvendor=0x8086 subdevice=0x7270
    vendor     = 'Intel Corporation'
    device     = 'Jasper Lake SPI Controller'
    class      = serial bus
re0@pci0:1:0:0: class=0x020000 rev=0x15 hdr=0x00 vendor=0x10ec device=0x8168 subvendor=0x10ec subdevice=0x0123
    vendor     = 'Realtek Semiconductor Co., Ltd.'
    device     = 'RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller'
    class      = network
    subclass   = ethernet
rtw880@pci0:2:0:0:      class=0x028000 rev=0x00 hdr=0x00 vendor=0x10ec device=0xc821 subvendor=0x10ec subdevice=0xc821
    vendor     = 'Realtek Semiconductor Co., Ltd.'
    device     = 'RTL8821CE 802.11ac PCIe Wireless Network Adapter'
    class      = network

 
では。さようなら。

11月 042023
 

ずいぶんと久しぶりに iPhone を買い替えました。 そもそも iPhone は高いモノなので、ここのところ何回か Android 端末を購入していたのですが、今まで利用していた iPhone8 はいよいよ最新の iOSが動作しなくなる。とのことなので一番新しい iPhone15 を購入することにした。

ちなみに iPhone8 を購入したのは 2017 年 10 月とかになってます。途中、二年ほど使用したあと、一回リコールで本体を交換しています。その後更にバッテリー交換を一回。いやぁ。ずいぶんと iPhone8 を使い続けたものでした;-)。

 
今回は iPhone15 を購入しました。一番安い端末ですが、以下の点が購入の決め手でした。

  • 価格が安い
  • ダイナミックアイランド搭載
  • USB-C が利用可
  • そもそも iPhone8 は iOS17 に対応していない
  • iPhone8 のバッテリがだいぶヘタってきた

まぁ、フツーに誰もが新しい iPhone に買い換える要因と言えるでしょうか・・。あ。写真は macOS を介した iPhone8 のデータ移行中。

購入履歴的エントリな意味合いが濃いのでネタに特化した記事内容などは特にないです。と、いうか、iPhone とか iOS についてはそこいら中にネタがゴマンとあるのであえて書かなくても良いかぁ。みたいな雰囲気;-)。
カメラがどうとか、ロック解除とかとかいまさら書くことも無いでしょみたいな。

 
あ。チタンのこと、書いておきましょうか。実は、僕はもうかなり前からチタン信者で、 iPhone15 Pro で『チタンボディ』と言われて「あぁ。なるほどねぇ♪」的な状態です。無理して iPhone にチタン無くとも・・。みたいな、半分負け惜しみ的な・・。;-P。

まず、腕時計。左側がステンレス、右側がチタン。いやぁ。二つを比べるともう、持った段階で全然違う。

実は、右側のシチズンの腕時計はもう 10 年くらい前に買っているんだけど、購入時に同じモデルでもステンレス製とチタン製の両方があって・・。チタン製を持った瞬間「あ。こっちください。」となりました。それくらい軽さにインパクトがあった。

 
もう一個チタンで一式揃えているのはキャンプ道具。コッヘル・マグ・スプーン・フォークはチタンは当たり前で、ペグまでチタンで揃えています。これはザック背負って山行きの時などは本領発揮する(のではないか)と、思っています;-)。

と、いうことで、別なところで軽さが必要な部分にはもう、チタンを導入しているので iPhone には無理にチタンは必要ねぇだろう。と、いうのが今回頭のスミのほうにありました;-)。

 
さてと。ネタ的に、もうひとつ書くとしたら USB-C でしょうか。

まず、iPhone15 の USB-C は USB2.0 の速度と、言われています。まぁ、写真や楽曲の転送くらいなので USB3.0 の転送速度でなくとも良い感じ。

充電速度は速くないかなぁ。どちらかというと遅い感じ。これは接続している USB ポート側の電力供給力の問題でもあるのかもしれない。

 
ただ、USB-C は偉大です。

実はテレワークのために会社支給の NotePC を自宅で使うために USB-C の HUB を購入しました。

この USB-C な HUB は USB ポートにキーボードとマウスを接続し HDMI も接続して、画面転送できるというしろモノ。写真的にはこんな感じ。あ。USB-C なので、当然電源供給もできています。

もともと NotePC の USB-C ポートに接続するために購入して、テレワークのために利用するのでケーブル類はずっと付けっぱなし。これを iPhone15 に接続したところ・・。

おやおや。iPhone の画面が HDMI で接続したディスプレーに表示されました。 iPhone15 を横にして U-NEXT アプリでアニメを鑑賞してみるとディスプレーにはフル画面で、横表示で再生してくれます。すげっ。

これについては Android 端末も脱帽でしょう。ただ、僕が普段、エントリーレベルの Android 端末を利用しているために『default で画面を HDMI 表示』してくれるモノを購入していないののかもしれないですが・・。

画面の他にキーボードはフツーに文字入力できます。マウスもフツーに使えてクリックしてアプリが起動します。

USB-C な iPad 持ってないんだけど、それと似たような感じなのかな? USB-C はやっぱり良いっ!! てのは確認できました。いやぁ。 iPhone15 が出るまで待って(と、いうか USB-C 対応の iPhone が出るまで待って)いて良かった。

 
しかし、iPhone15 の画面をディスプレーに映す機会がどれだけあるのか微妙です。例えば U-NEXT は PC でも閲覧可能なので無理して iPhone15 の画面を HDMI 接続してディスプレーで見る必要ないし・・。既に mac mimi 持っているので iPhone15 にキーボードやマウス付ける必要ないし・・。

あ、そー言えば、 mac mini から外部カメラとして利用でけた。この機能も iPhone8 には無かった機能だ;-)。

 
とまぁ、こんな感じで普段使いで既に利用している感じ。今回は Apple ストアで購入しました。今まで利用していた iPhone8 は 9,000yen で Apple に引き取ってもらいました。
iPhone15 は 9 月中頃に注文して、届いたのが 10 月 03 日でした。約一ヶ月ほど使い込んでのエントリ記載。と、いう感じです。

 
最後にですが、 iPhone8 から iPhon15 にしたら『ギガ』の減り方が早いですな。まぁ、iPhone15 が目新しくて使い続けてしまった。と、いうのもあるかもしれませんが、 5G に接続するようになったから。と、いうのも起因しているかもしれません。 Y!mobile の 3 ギガのプランでは『ギガ』が足りないかも・・。

5 ギガプランを契約している IIJmio や、ギガ活でほぼ無料で利用している povo2.0 にオフロードしないとやっていけない雰囲気・・。

上手に SIM を使うようにして行こう。と、思う今日この頃。

9月 282023
 

いやぁ。まいった。 FreeBSD 14-RELEASE/amd64 になったら if_iwlwifi.ko が正常動作するようになって FreeBSD でいよいよ待ちに待った WiFi6 が利用できるようになるのかと思いきや・・。
ぜーんぜんそんなことはなくて FreeBSD 14.0-BETA3 で bhyve から Intel AX200 を試してみたけど、やっぱり 802.11a 止まりですな。 802.11ac さえも相変わらず利用できない。一体いつまで待てば FreeBSD で高速な WiFi が利用できることになるのやら・・。

ちなみに FreeBSD 13.2-RELEASE/amd64 では一応 if_iwlwifi.ko は 802.11a では利用可能になりました。しかし、これが suspend/resume に対応していない。 resume すると利用不可になるデバイスなのでまるで利用する気にならない・・。orz。
なので、僕はずっと USB な if_rtwn_usb.ko を利用しています。一応 802.11a での通信になってしまうのだけど supend/resume には対応しているので、そこはかとなく使い続けている状態です。

 
今回は、今 FreeBSD をインストールして利用している ThinkPad X13 で Intel Wi-Fi 6 AX200 を 802.11ac or ax で利用するために bhyve を利用して ubuntu をインストールします。
そして ubuntu 側で Wi-Fi 6 AX200 を利用するのですが、一応、前提条件を書いておきます。

  • 今回 ubuntu はルータとして利用しません。IPv4/IPv6 のデアルスタクにすると設定むづかしくてしょーがない・・。
  • 母艦の FreeBSD はネットワーク的にはフツーに通信できる状態として、それとは別にブリッジ経由で bhyve の ubuntu と通信します。
  • データのやり取りは bhyve な ubuntu 側の wlp0s6 を利用し、母艦の ThunPad X13 上の FreeBSD に橋渡しします。
  • 母艦の FreeBSD の /home/takachan を bhyve な ubuntu に NFS マウントするとこでデータ転送の手間を省きます。

 
上記を図にするとこんな感じ。

 
母艦側の FreeBSD の default gateway を bhybe の ubuntu の 172.16.1.11 にすると母艦側の通信は ubuntu の wlp0s6 を抜けて WiFi6 な通信が可能になるのだけど、戻りパケットの設定などを上位のルータに設定して上げる必要があったりとか、IPv4/IPv6 デアルスタクにすると色々ややこしくなるのでやめました。

 
では、母艦の FreeBSD に必用な設定と bhyve 側 ubuntu のインストールと設定を見ていきましょう。

 
1. FreeBSD 母艦側の設定
まず、 FreeBSD の母艦側の設定を行います。

今回、 bhyve を動作させるために、まず packages をインストールします。今回はこれだけインストールしました。

$ pkg info | grep bhyve
bhyve-firmware-1.0_1           Collection of Firmware for bhyve
edk2-bhyve-g202308_3           EDK2 Firmware for bhyve
uefi-edk2-bhyve-csm-0.2_4,1    UEFI EDK2 firmware for bhyve with CSM (16-bit BIOS)
vm-bhyve-1.5.0                 Management system for bhyve virtual machines

 
続いて起動時の設定を行います。

 
o./boot/loader.conf

# bhyve
vmm_load="YES"
hw.vmm.amdvi.enable=1
pptdevs="2/0/0"

 
bhyve を利用するには vmm.ko を kldload する必要があります。そして hw.vmm.amdvi.enable=1 にします。
しかし、 vmm.ko は仮想環境で排他利用となります。以前のエントリで書いていますが VirtualBox を利用する場合は vmm.ko を kldunload する必要があります。

pptdevs=”2/0/0″ は pciconf -lv で確認した PCI デバイスを bhyve で利用するための設定です。以下は pciconf -lv の例です。

$ pciconf -lv | grep -A 3 iwl
iwlwifi0@pci0:2:0:0:        class=0x028000 rev=0x1a hdr=0x00 vendor=0x8086 device=0x2723 subvendor=0x8086 subdevice=0x0080
    vendor     = 'Intel Corporation'
    device     = 'Wi-Fi 6 AX200'
    class      = network

 
if_iwlwifi.ko を利用したデバイス iwlwifi0 は PCI バスの 2:0:0 に割り当てられているので、/boot/loader.conf で上記のように割り当ててあげます。

次に bhyve の起動設定です。

 
o. /etc/rc.conf

vm_enable="YES"
vm_dir="/opt/bhyve"

 
vm_enable=”YES” と vm_dir=”hoge” を設定しました。他に zfs のオプションとかなんか色々あるみたいですが、ひとまず不要なので省き、一番簡単な設定のみとしました。

これで一旦再起動します。

 
2. bhyve の準備と OS のインストール

o.ネットワーク設定
bhyve では仮想スイッチを利用します。まぁ『仮想スイッチ』と、言ってもただ単にブリッジインターフェースを作成するのみです。

母艦側 FreeBSD のネットワークの状態は lo0 と wlan0 があるのみです。 wlan0 は if_rtwn_usb.ko を利用した 802.11a で 5G の周波数に接続するフツーの NIC です。

ここに bhyve の ubuntu と通信するための『仮想スイッチ』を準備してしてあげます。

# service vm start
# ifconfig tap0 create
# sysctl net.link.tap.up_on_open=1
# vm switch create -a 172.16.1.1/24 public
# vm switch add public tap0
#
# ifconfig -a
lo0: flags=8049 metric 0 mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
        inet 127.0.0.1 netmask 0xff000000
<一部略>
wlan0: flags=8843 metric 0 mtu 1500
        inet 192.168.1.32 netmask 0xffffff00 broadcast 192.168.1.255
        inet6 fe80::20f:ff:fe8d:2c72%wlan0 prefixlen 64 scopeid 0x2
        inet6 2001:470:fe36:5678::32:1 prefixlen 64
<一部略>
vm-public: flags=8843 metric 0 mtu 1500
        ether 3e:ce:d6:69:ff:84
        inet 172.16.1.1 netmask 0xffffff00 broadcast 172.16.1.255
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
        root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
        member: tap0 flags=143
                ifmaxaddr 0 port 4 priority 128 path cost 2000000
        groups: bridge vm-switch viid-4c918@
        nd6 options=9
tap0: flags=8943 metric 0 mtu 1500
        options=80000
        ether 58:9c:fc:10:fc:0e
        groups: tap
        media: Ethernet autoselect
        status: no carrier
        nd6 options=21
        Opened by PID 2627

 
bhyve で利用する tap0 を作成します。次の sysctl はまぁ、おまじない。次に『仮想スイッチ』を public という名で vm switch create します。ついでに IP アドレスを付加します。

ifconfig -a で確認すると vm-public と tap0 が作成されました。
vm-public は bridge インターフェースで vm switch add public tap0 コマンドにより tap0 を内包しています。かつ vm-public には 172.16.1.1/24 の IPv4 アドレスが付きました。 bhyve 側の ubuntu は FreeBSD 側から見ると tap0 ですが ubuntu 側では enp0s2 として認識してそこに 172.16.1.11/24 のアドレスを付加すると母艦と bhyve 側の ubuntu で通信が可能になります。

母艦側の wlan0 は全く触ることはありません。

 
ネットワークの設定ができたので、bhyve の ubuntu をインストールしていきましょう。

まず、原型を作成します。

# service vm start
# vm create -t ubuntu ubuntu
# cd /opt/bhyve
# ls -aCF
.config/    .img/       .iso/       .templates/ ubuntu/
#
# vm install ubuntu .iso/ubuntu-23.04-live-server-amd64.iso
<以下略>

 
/etc/rc.conf に記載した vm_dir の /opt/bhyve の下に色々できています。 /opt/bhyve/.templates/ の下にファイルを一個作成します。

o./opt/bhyve/.templates/ubuntu.conf

loader="uefi"
cpu=2
memory=2G
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
graphics="yes"
graphics_port="5900"

 
このファイルを作成して、iso イメージを /opt/bhyve/.iso/ に設置してから vm install ubuntu を実行しましょう。そして、インストールします。あ。なんか、 ubuntu23 はメモリが 512MB ではインストーラが起動しないようです。1GB とか 2GB のメモリ量にしてあげましょう。

インストール中はネットワークは利用できないので利用する iso イメージは最低限インストールできるものをチョイスします。

これでイントールは完了しましたかねぇ。

o. bhyve の ubuntu の起動スクリプト

#!/bin/sh

case $1 in
'start' )
    bhyve -c 2 -m 1G -w -H -S \
          -s 0,hostbridge \
          -s 1,virtio-blk,/opt/bhyve/ubuntu/disk0.img \
          -s 2,virtio-net,tap0 \
          -s 3,fbuf,tcp=0.0.0.0:5900 \
          -s 4,xhci,tablet \
          -s 5,lpc -l com1,stdio \
          -s 6,passthru,2/0/0 \
          -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
          ubuntu
    ;;
'tm' )
    tmux new-session -d -s mugi-ubuntu 'sudo /opt/bhyve/bin/vm_ubuntu.sh start'
    sleep 3
    ifconfig tap0 | grep status
    ;;
'stop' )
    bhyvectl --force-poweroff --vm=ubuntu
    ;;
'ls' )
    bhyvectl --get-stats --vm=ubuntu
    echo;echo
    echo "tmux list-sessions"
    echo "tmux attach -t ubuntu"
    ;;
'*' )
    echo vm_ubuntu.sh { start | stop | ls | tm }
    ;;

esac

exit 1;

 
bhyve でゲスト OS を起動するにはずいぶんと難儀です。上記のスクリプトは /opt/bhyve/bin/vm_ubuntu.sh という名で準備しました。
ちと、説明が必要ですかね。

まず、 start オプションのパラメータですが、-s は PCI BUS を想定してください。ディスク・ネットワーク・コンソール・USB、そして pptdevs で渡された Intel Wi-Fi 6 AX200 になります。このパラメータでまず、ubuntu が起動できるかと思います。

しかし、ここまでたどり着くまでにはずいぶんと色々苦労したので bhyve の起動オプションは本当に難儀したぞぉ。簡単に bhyve の ubuntu とか FreeBSD が起動するとは思わないほうが良い。色々検索して情報を探してくだされ。 BIOS でのブートとか UEFI でのブートとか、google に聞くと古い情報とかごまんとあって、最新の情報を拾ってくるのは中々悩ましい・・。

 
次の tm オプションですが、これは tmux を介してバックグラウンドで動作させます。 tmux については個別に勉強してください。コマンドのサワリだけ書いておきます。

# tmux list-sessions
ubuntu: 1 windows (created Wed Sep 27 12:31:41 2023)
# tmux attach -t -ubuntu
<以下略>

 
tmux list-sessions で tmux のセッションを確認して、そのセッションに tmux attach -t -ubuntu でアタッチするとコンソールが表示されます。コンソールから抜けるには tmux のコマンド C-b d を打ちます。

もしかしら ubuntu では tmux 使えないかも・・。
もうひとつのコンソールへのアクセス方法があります。 ports から net/tigervnc-viewer をインストールします。そして、以下のコマンドを打ちます。

$ vncviewer localhost:5900
<以下略>

 
上のほうで /opt/bhyve/.templates/ubuntu.conf というファイルを作成しましたが、そのとき graphics_port=”5900″ を指定していると思います。また bhyve 起動時にも -s 3,fbuf,tcp=0.0.0.0:5900 というオプションを指定しています。これが vncviewer でアクセスするポートになります。

コンソールに接続できたので ubuntu の設定を色々していくことにします。まぁ、僕は ubuntu はあまり得意ではありませんので、このあとはサワリだけ説明することにします。

そして、次に行きます。

 
3. 母艦と bhyve の ubuntu との通信
bhyve の ubuntu 側で ip addr をたたくと以下のインターフェースが確認できると思います。

$ ip addr show
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: enp0s2:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
3: wlp0s6:  mtu 1500 qdisc noqueue state UP group default qlen 1000

 
enp0s2 が 母艦側との通信インターフェースで wlp0s6 が WiFi6 です。

まず、母艦の 172.16.1.1 と通信する enp0s2 設定からです。

o./etc/netplan/99-config.yaml

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s2:
      dhcp4: false
      addresses: 
        - 172.16.1.11/24
#     gateway4: 172.16.1.1
      nameservers:
        addresses: [192.168.1.34]
        addresses: [192.168.22.251]

 
さーっ!! yaml の設定に悩んでくだされーっ!! なんでまともに設定できんのだ?! とウンザリすることでしょう・・。orz
設定完了後 sudo netplan apply のコマンドを打って、で設定を反映して、そしてうんと怒られてください;-P。

無事に設定が完了すると、FreeBSD 母艦と bhyve との間の 172.16.1.0/.24 のセグメントで通信ができるようになります。

ここまでできたら母艦側から ssh 接続できるようになるので、作業が格段にしやすくなります。

 
続いて wlp0s6 側の設定を見ていきます。 enp0s2 は母艦との接続のためだけのインターフェースですが wlp0s6 は外部との通信を行います。 ubuntu は WiFi6 に対応しているので Intel Wi-Fi 6 AX200 を利用する通信はむちゃくちゃ速いです。

o./etc/netplan/50-cloud-init.yaml

network:
    wifis:
        wlp0s6:
            optional: true
            access-points:
                "AP80211AX":
                    hidden: true
                    password: "PASSWORD"
            dhcp4: false
            addresses:
              - 192.168.1.48/24
              - 2001:470:fe36:abcd::48:1
            gateway4: 192.168.1.1
            nameservers:
              addresses: [192.168.1.34]
              addresses: [2001:470:fe36::ffff:34]

 
WiFi の SSID は AP80211AX で パスフレーズは PASSWORD です。この AP はステルス機能を有効化しているので hidden: true を設定しています。
IP アドレスについては IPv4/IPv6 デアルスタクです。 IPv4 gateway は設定していますが IPv6 gateway は ra で降ってきます。ネームサーバも IPv4/IPv6 両方のアドレスを指定しました。

これまた書き方にうんと悩んだあと sudo netplan apply のコマンドを打って設定を反映して、そしてうんと怒られてください;-P。

これで ubuntu 側の設定は完了です。

 
4. bhyve の ubuntu の設定と実際に利用してみる
ubuntu では設定というか、dep を apt-get install で色々好きなものをインストールしてください。
ここでは特には書かないです。

唯一必要だったのが NFS クライアント側の設定でしょうか。母艦の FreeBSD 側で NFS Server を有効にして /etc/exports を書きます。 /home/takachan を NFS のマウントポイントとして 172.16.1.0/24 から許可します。
ubuntu 側では /etc/fstab に母艦の FreeBSD の /home/takachan を /home/takachan/takachan 辺りにマウントするようにします。

NFS の設定が完了したら、試しに iso イメージをダウンロードしてみましょう。

まずは母艦の FreeBSD で wget を実施し、次に ssh で bhyve の ubuntu にログインしたあとに wget してみました。

$ wget http://ftp.iij.ad.jp/pub/FreeBSD/releases/ISO-IMAGES/14.0/FreeBSD-14.0-BETA3-amd64-bootonly.iso
FreeBSD-14.0-BETA3-amd64 1%[                    ]   7.35M  1.84MB/s   残り3m 49s  
^C
$ ssh 172.16.1.11
ubuntu $ cd takachan
ubuntu $ wget http://ftp.iij.ad.jp/pub/FreeBSD/releases/ISO-IMAGES/14.0/FreeBSD-14.0-BETA3-amd64-bootonly.iso
FreeBSD-14.0-BETA3-amd64 4%[>                   ]  20.66M  10.2MB/s   eta 38s
^C
ubunru $

 
母艦側の FreeBSD のホームディレクトリで wget で iso イメージを取得すると大体 16Mbps の速度が出るか出ないか。これは USB の if_rtwn_usb.ko を利用して 802.11a で通信する FreeBSD で一番速い WiFi の速度です。
次に bhyve の ubuntu に ssh して NFS マウント先で wget すると FreeBSD側 の $HOME で wget するのと同じ状態になります。ただ、ubuntu 側で wget すると速度が全然違い 80Mbps 出ています。これは Linux での iwlwifi ドライバが正常に動作していることを示しています。そして、この速度はうちの外部接続ネットワークの限界です。

 
宅内の他の PC やサーバとデータをやりとりするときは ubuntu 側の 192.168.1.48 側のアドレスでデータをやり取りすることにより高速に転送することが可能です。

 
こんな感じで、いつまで待っても FreeBSD で WiFi の 802.11ac or ax が利用できないのを bhyve の ubuntu で通信速度を稼ぐ。と、いうちょっと荒業を、今回は使ってみました。

おかげで bhyve にずいぶんと詳しくなったぞぉーっ!! みたいな f(^^;;。

一点だけ注意点があるかも。母艦の FreeBSD は suspend/resume に対応していても bhyve で動作する OS が動作しないかな? FreeBSD の resume 後 vm lsit で Running 状態だったゲスト OS は動作がおかしくなる傾向が見受けられました。
が、これは当然でしょうかねぇ・・。考えてみると FreeBSD 側で Intel Wi-Fi 6 AX200 は supend/resume に対応してないので、たとえ pptdevs で ubuntu に渡していても resume 後は利用出来ない状態に陥ります・・。orz。

FreeBSD 14-R で if_iwlwifi.ko が suspend/resume に対応してくれるとともっと幸せになれるのだけれど、それはリリースされてみたいと解らないかなぁ。

 
と、いうことで、皆さんもせっかく持っている内臓の、 FreeBSD では中々利用できない Intel 系の WiFi チップ。 bhyve の ubuntu で有効利用するのもありなのかなぁ。と、いうのが今回のネタだったのでありました。

bhyve のこと、今後、ネタとして書く機会あるかな?

7月 012023
 

「リコリス・リコイル」をアニメ好きの人に教えてもらって見たら、確かに面白い。会社への往復で、スマートフォンで U-NEXT で見てたらなんとっ!! 『ギガ』が 4 ギガくらい消えて無くなった。 DVD で見るようにしたんだけど、画質が違うのねぇ。 U-NEXT などはテレビに対抗しないとならないので、画質がずいぶんと綺麗で驚いた次第・・。今更、 DVD もねーぞー。みたいな。

 
と、いうことでいきなりアニメの話ですが・・。

「リコリス・リコイル」の中に登場する『喫茶リコリコ』の風景。

コレ見るとさぁ・・。どうみても座布団が CPU に見えてしまうのよ。僕・・。

日本全国探しても、喫茶リコリコの座布団が CPU に見えてしまうのは僕だけだろうなぁ。

二枚の座布団は千束とたきなで使っているので、実質 6Socket なマザーボードなのだろうなぁ。みたいな;-)。あ。けど、実質 4Socket で千束はどこからか一枚持ってきたのかな?

 
と、いうことで座布団と CPU の比較。これがなくてただキャプチャ上げただけだと、著作権法にひっかかる。

とりあえず、手持ちの CPU で土台がムラサキでコア部分が金色の CPU を 6 枚並べてみた。

おーーっ!! 喫茶リコリコだぁっ!!

『本当に、座布団が CPU に見えるんですね。』 (たきな風に読んで;-)
『そーよっ!! すごいだろぉ。 ウォールナットもロボ太も持ってねーぞ。』(千束風に読んで;-)

あ。第 5 話の最後の部分ね;-P。

 
今度は P54C を並べてみた。あ。486 も混ざっているけど;-)。

ふむー。これはちょっと違うか。やっぱりコア部分がゴールドに輝いていたほうが座布団に見える。

せっかくなので Athlon も並べてみた。

土台がセラミックなのは 4 個しか持ってなかった・・。

で、このままでは Intel がかわいそうなので、Socket370 も並べてみた。

こちらは黒土台にシルバー。Celeron Dual な CPU。ピンのマークがあるけど、座布団に見えなくも無い。数が足りなかったので緑のヤツも並べました。

 
と、いうことで、非常にバカなことをしているようだが、見えてしまったものはしょーがない。実際に並べてみて『あぁ。やっぱり座布団は CPU に見えるよねぇ。』と、実感するのであります。

皆さんはどう思います? ;-P。

 
このサイトでは「リコリス・リコイル」の画像を著作権法第 32 条に定める比較研究を目的として引用しました。
「リコリス・リコイル」は Spider Lily/アニプレックス・ABCアニメーション・BS11 の著作物です。

6月 282023
 

自分でも、強引な手法だなぁ。と、思ってしまいます。

まず、 Windows11 Pro 上で動作している Hyper-V サーバがあります。その下で FreeBSD/amd64 13.2-RELEASE が動作しております。

Hyper-V の母艦である Windows11 Pro は NotePC なので WiFi 使ったり RJ45 使ったり VPN 使ったりするので Hyper-V のサーバとクライアントの間の「仮想スイッチ」はブリッジ、それはつまりは仮想スイッチマネージャの「接続の種類」で[外部ネットワーク]を選択することはほぼ不可能(利用する物理ネットワークによって毎回変更する必要がある)なのであります。

母艦側で複数のネットワークアダプタを利用する場合は、どうしても NAT、それはつまりは[内部ネットワーク]をチョイスするしかないのであります。

Hyper-V の仮想スイッチが NAT になると、色々と制約を受けます。まず、 DHCP を克服する必要があります。これについてはウェブ上に、設定方法について、色々書かれたドキュメントがあるのでそちらを参考にしてください。

いろいろ設定すると Hyper-V のクライアント (俗に『仮想マシン』と、言いますな) は NAT 配下で、固定 IPv4 アドレスで動作させることが可能になりました。

Hyper-V の母艦からは仮想マシンに対して ssh などのアクセスができるようになります。が、当然リモートのマシンからは Hyper-V 管理下の仮想マシンへはアクセスできません。

あと、仮想マシンのネットワークは NAT が入るのでこれまた色々と制約受けます。上に書いた、外部からのアクセスができません。他に NFS マウントできません。 gif トンネル張れません。とか・・。

 
そもそも、 Hyper-V の母艦の外部のネットワークに IPv6 がない場合、仮想マシンは IPv6 を利用することができません。あれ? Hyper-V の NAT 仮想スイッチで IPv6 喋れるのか?

どうして仮想マシン側に IPv6 が欲しいのだ? -> だって、IPv4 は NAT なので上記の制約受けるじゃん。それなら、トンネルでも良いから IPv6 でどっかーんっ!! と抜けていきたいじゃん。

と、いうのが発想の原点にあります。

と、いうことで図を書いてみました。

簡単に説明します。

  • 真ん中に Windows11 Pro の Hyper-V サーバがいます
  • Windows11 Pro の Hyper-V サーバは上位のネットワークとは IPv4 アドレスのみが降ってくるネットワークに接続しています
  • Hyper-V 配下の仮想マシンは FreeBSD/amd64 13.2-RELEASE です
  • Hyper-V サーバと仮想マシンの間には NAT の仮想スイッチが入っています
  • NAT の仮想スイッチは仮想マシンが固定 IPv4 アドレスを利用できるようにしています

 
これが現状、フツーにできる Hyper-V 環境です。この状態で、仮想マシン側に IPv6 グローバルアドレスを付加して、IPv4 の NAT 超えをあきらめ、IPv6 で外部との通信をできるようにして色々楽しめる状態にします。

  • 仮想マシンの FreeBSD は wireguard で外部に接続します
  • wireguard で作成した VPN トンネルの中に gif トンネルを通します
  • 仮想マシンに IPv6 が通ったので様々通信ができるようになります

 
トンネルの多段ですね。
図の左側は VyOS と wireguard のサーバは別々に描かれていますが、最近の VyOS を使うと一個にまとめられると思います。僕の環境では未だに VyOS-1.1.8 を利用していますので wireguard は別サーバに構築しました。

 
wireguard と VyOS の置き場所によって仮想マシンの IPv6 の通信速度は圧倒的に変わります。色々考えてみてください;-)。

と、いうことで、次に設定を見ていきましょうか。

 
1. 仮想マシン側の wireguard の設定
今回、仮想マシンは FreeBSD/amd64 13.2-RELEASE なので wireguard は ports から簡単に入ります。 net/wireguard をインストールしましょう。もしかしたら wireguard-kmod-0.0.20220615_1 がインストールされるかもしれませんが、実際には利用しません。

wireguard-kmod-0.0.20220615_1 をインストールした場合には /boot/modules/if_wg.ko がインストールされますが 13.2-RELEASE からは OS 標準で /boot/kernel/if_wg.ko が用意されています。フツーに wireguard_enable=”YES” すると /boot/kernel/if_wg.ko が利用されます。

僕の環境では wireguard-2,1 、wireguard-kmod-0.0.20220615_1 、 wireguard-tools-1.0.20210914_1 がインストールされました。

次に設定です。

が、その前に、まず最初に wireguard では鍵のペアを作成する必要があります。

# cd /usr/local/etc/wireguard/
# wg genkey > server.key
# wg pubkey < server.key > server.pub
#
# wg genkey > client.key
# wg pubkey < client.key > client.pub
# 
# chmod 600 *.key 
#

 
サーバ側とクライアント側のキーの両方を作成しましたが、これを利用します。

続いて設定を見ていきます。今回は wireguard のトンネルを一個作成するだけですので wg0.conf のみです。複数に接続する場合は wg1.conf wg2.conf などと設定フアイルを複数書きます。

・/usr/local/etc/wireguard/wg0.conf

[Interface]
PrivateKey = 8LJDuAU9Ste2ySHRmgHnOAyk+E4ZMbw+vCBbMHXMbZU=
Address = 192.168.254.11/32

[Peer]
PublicKey = 17CucZLVbS1Jt/8LXREvrDGEnYunIA2RYYjlJhxftlk=
AllowedIPs = 192.168.254.1/32, 10.20.65.201/32
Endpoint = 10.20.65.15:51820

 
[Interface] の 設定は自分側の設定を記載します。

  • PrivateKey は作成した鍵ファイルの client.key の内容を記載します。
  • Address は wg0 インターフェイスに付加する IPv4 アドレスです。 wireguard で接続するためだけに利用するので /32 で指定します。ただ、サーバ側と同じレンジが良いでしょう。

続いて [Peer] の設定で、これは wireguard のサーバ側に関する設定になります。

  • PublicKey は server.pub の内容を記載します。
  • AllowedIPs は wireguard サーバの wg0 インターフェイスの IPv4 アドレスを記載します。
  • AllowedIPs にはもう一個 IPv4 アドレスを記載します。 gif トンネルの接続先 IPv4 アドレスを “,” で区切って記載します。詳細についてはあとで書きます。
  • Endpoint は wireguard が動作しているサーバの IPv4 アドレスと Port 番号を記載します。

 
だいたいこんな感じで良いと思います。非常に簡単な設定ですね。ただ、一点。 [Peer] 側の設定の AllowedIPs の設定がクセモノです。
AllowedIPs に wireguard サーバ側の wg0 インターフェースの IP アドレスを書いただけでは wireguard サーバとしか通信ができません。

『wireguard サーバ側で NAT の設定を入れてないから他のネットワークと通信できんのか?』と思い、wireguard サーバ側の設定を色々いじってしまうのですが、そうではなく、クライアント側がどこと通信したいのか、AllowedIPs に記載することにより通信が可能となります。

今回は wireguard トンネルを抜けいてったあと gif トンネルを張りたいので VyOS の IPv4 アドレスを AllowedIPs に追加しました。 10.20.65.0/24 と通信したい場合は AllowedIPs には wireguard サーバの wg0 インターフェースの IPv4 アドレスと 10.20.65.0/24 を追加で書けば良いです。

で、自動起動するように設定を書きます。 /boot/loader.conf に明示的に if_wg_load=”YES” と書かずともカーネルモジュールがロードされます。

・/etc/rc.conf

wireguard_enable="YES"
wireguard_interfaces="wg0"

 
これでクライアント側の設定は完了です。

次にサーバ側の設定を見ていきましょう。

 
2. wireguard のサーバ側の設定
上のほうでも書きましたが、 wireguard のサーバは自前で用意せずとも VyOS で利用可能です。 VyOS-1.3 以降から wireguard に対応したんだったかな? 詳細なバージョンは覚えていませんが・・。

今回、僕は wireguard サーバも FreeBSD 側で作成しました。インストールは ports からですが、クライアント側のと同様のモノをインストールしました。

鍵は既に作成したので、それを使いまわしましょう。すると、サーバ側で用意するのは設定フアイル一個のみです。

・/usr/local/etc/wireguard/wg0.conf

[Interface]
PrivateKey = aJbypbTUy5LB+EIPd6FHf25D2rbTw9l+x5o7fBLL+Ec=
Address = 192.168.254.1/24
ListenPort = 51820

[Peer]
PublicKey = F8kvub6jdPnl99rISnffYtilNVEswDUo+sqGWzc7FRY=
AllowedIPs = 192.168.254.11/32

 
[Interface] の 設定は自分側の設定を記載します。

  • PrivateKey は server.key の内容を記載します。
  • Address は wg0 インターフェイスに付加する IPv4 アドレスです。

続いて [Peer] の設定で、これは wireguard のサーバ側に関する設定になります。

  • PublicKey は client.pub の内容を記載します。
  • AllowedIPs は wireguard クライアントの wg0 インターフェイスの IPv4 アドレスを記載します。

 
以上で設定は完了です。 /etc/rc.conf にクライアントのと同じ設定を追加して wireguard を起動します。サーバ側とクライアント側の両方で service wireguard start を実行すると wg0 インターフェースが生えてきます。

双方の wg0 の IPv4 アドレスに ping を打ち、到達性を確認します。この時点で ping が当たらない場合は設定情報が間違っています。なおしてください。そもそも wireguard のサーバとクライアントの物理インターフェース間で通信できることを確認します。

 
双方の wg0 に付加された IPv4 アドレスに ping が当たるようになったら OK。クライアント側の [Peer] 設定の AllowedIPs に記載した VyOS の IPv4 アドレスに ping が当たることを確認します。
上にも書いた通り 10.2.65.201 だけでなく、もっと他のマシンにも接続したい場合はクライアント側で設定してみてください。

 
最後に wireguard の wg0 トンネルをぬけて gif トンネルを掘ります。 gif トンネルが掘れると Hyper-V の仮想マシンにはグローバルな IPv6 アドレスが付加されます。 IPv6 を利用することにより IPv4 で受けていた NAT の制約から開放されることになります。パチパチパチっ!!

と、いうことで IPv6 gif トンネルの設定については以前書いているのでそつらを参考にしてください。

IPv6 Over IPv4 トンネルを dtcp から VyOSへ。

 
移動する PC 上で Hyper-V を動かしたとき、その下で動作する仮想マシンはネットワーク的に色々な制約を受けるモノです。今回は多段トンネルでその問題を解決してみました。

  • 仮想マシンは NAT ネットワークで gif トンネルが利用できないので wireguard なトンネルを掘る
  • wg0 を抜けて gif トンネルを掘る
  • IPv4 は NAT ネットワークなので IPv6 の直アクセスで NAT 問題を回避
  • 仮想マシンに IPv6 アドレスが付加されたので仮想マシンのネットワークはもーサイコーっ!!

 
こんな感じの手順で今回の構成を構築しましたが、フツーここまでやる?

ってか、まあ、Hyper-V が動作するのは WindowsOS なので、ネットワーク的に色々な制約が多すぎてやりたいことができない。
ネットワークはトンネルで抜けて色々やりましょう。と、いう雰囲気ですが・・。

一点だけ。まだ検証してないし、計算が必要だと思うのですが・・。 MTU って、一体いくつになるの? f(^^;;。