無償のVMware ESXi 7.0を7.0bから7.0u1dにアップデートした

VMware-VMvisor-Installer-7.0b-16324942.x86_64.isoでインストールした7.0b を使っていた。 ESXi 7.0自体はアップデートされているのだが、 7.0bより先のISOイメージはダウンロード可能になっていない。

https://my.vmware.com/group/vmware/patch からダウンロードした VMware-ESXi-7.0U1d-17551050-depot.zipを使ってアップデートしてみた。

私の環境は、ネットワークインターフェイスカードとして、Intel PRO/1000 PT Server AdapterというGigabit Ethernet adapterを利用している。 これは、VID/PID=8086/107dというデバイスであり、 VMware ESXiのhardware compatibility list によると、ESXi 7.0ではサポート対象ではない。

しかし、 VMware-ESXi-7.0U1d-17551050-depot.zip 内の vmw-ESXi-7.0.1-metadata.zip に中にある vibs/ne1000-8399353616073568098.xml によると、8086107dという文字列があり、ne1000デバイスドライバーで動くはずである。 ちなみに、7.0bでは正常に動作している。

ダウンロードしたdepotファイルをESXi上に置き、以下を実行して、どのような プロファイルがあるのか確認する。

[root@bismuth:~] esxcli software sources profile list --depot=/vmfs/volumes/670u2/depot/VMware-ESXi-7.0U1d-17551050-depot.zip
Name                           Vendor        Acceptance Level  Creation Time        Modification Time
-----------------------------  ------------  ----------------  -------------------  -----------------
ESXi-7.0U1d-17551050-no-tools  VMware, Inc.  PartnerSupported  2021-02-01T18:29:08  2021-02-01T18:29:08
ESXi-7.0U1d-17551050-standard  VMware, Inc.  PartnerSupported  2021-02-01T18:29:07  2021-02-01T18:29:07

ESXi-7.0U1d-17551050-standardというプロファイルを使うことにして、 アップデートを実行する。

[root@bismuth:~] esxcli software profile update --depot=/vmfs/volumes/670u2/depot/VMware-ESXi-7.0U1d-17551050-depot.zip --profile=ESXi-7.0U1d-17551050-standard
 [HardwareError]
 Hardware precheck of profile ESXi-7.0U1d-17551050-standard failed with warnings: <UNSUPPORTED_DEVICES WARNING: This host has unsupported devices [<PciInfo ' [8086:107d 8086:1082]'>]>

 Apply --no-hardware-warning option to ignore the warnings and proceed with the transaction.
 Please refer to the log file for more details.

Intel PRO/1000 PT Server Adapterはサポートされたデバイスではないため、 エラーとなってそのままではインストールできない。 促されたように、--no-hardware-warningオプションを付けてアップデートをしてみる。

[root@bismuth:~] esxcli software profile update --depot=/vmfs/volumes/670u2/depo
t/VMware-ESXi-7.0U1d-17551050-depot.zip --profile=ESXi-7.0U1d-17551050-standard
--no-hardware-warning
Update Result
   Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
   Reboot Required: true
   VIBs Installed: VMW_bootbank_bnxtnet_216.0.50.0-16vmw.701.0.0.16850804, VMW_bootbank_bnxtroce_216.0.58.0-7vmw.701.0.0.16850804, VMW_bootbank_brcmfcoe_12.0.1500.0-1vmw.701.0.0.16850804, VMW_bootbank_brcmnvmefc_12.6.278.10-3vmw.701.0.0.16850804, VMW_bootbank_elxiscsi_12.0.1200.0-2vmw.701.0.0.16850804, VMW_bootbank_elxnet_12.0.1250.0-5vmw.701.0.0.16850804, VMW_bootbank_i40en_1.8.1.123-1vmw.701.0.0.16850804, VMW_bootbank_i40iwn_1.1.2.6-1vmw.701.0.0.16850804, VMW_bootbank_iavmd_2.0.0.1055-5vmw.701.0.0.16850804, VMW_bootbank_icen_1.0.0.9-1vmw.701.0.0.16850804, VMW_bootbank_igbn_0.1.1.0-7vmw.701.0.0.16850804, VMW_bootbank_iser_1.1.0.1-1vmw.701.0.0.16850804, VMW_bootbank_ixgben_1.7.1.28-1vmw.701.0.0.16850804, VMW_bootbank_lpfc_12.6.278.10-8vmw.701.0.0.16850804, VMW_bootbank_lpnic_11.4.62.0-1vmw.701.0.0.16850804, VMW_bootbank_lsi-mr3_7.712.51.00-1vmw.701.0.0.16850804, VMW_bootbank_lsi-msgpt2_20.00.06.00-3vmw.701.0.0.16850804, VMW_bootbank_lsi-msgpt35_13.00.13.00-2vmw.701.0.0.16850804, VMW_bootbank_lsi-msgpt3_17.00.10.00-2vmw.701.0.0.16850804, VMW_bootbank_mtip32xx-native_3.9.8-1vmw.701.0.0.16850804, VMW_bootbank_ne1000_0.8.4-11vmw.701.0.0.16850804, VMW_bootbank_nenic_1.0.29.0-2vmw.701.0.0.16850804, VMW_bootbank_nfnic_4.0.0.44-2vmw.701.0.0.16850804, VMW_bootbank_nhpsa_70.0051.0.100-2vmw.701.0.25.17325551, VMW_bootbank_nmlx4-core_3.19.16.8-2vmw.701.0.0.16850804, VMW_bootbank_nmlx4-en_3.19.16.8-2vmw.701.0.0.16850804, VMW_bootbank_nmlx4-rdma_3.19.16.8-2vmw.701.0.0.16850804, VMW_bootbank_nmlx5-core_4.19.16.8-2vmw.701.0.0.16850804, VMW_bootbank_nmlx5-rdma_4.19.16.8-2vmw.701.0.0.16850804, VMW_bootbank_ntg3_4.1.5.0-0vmw.701.0.0.16850804, VMW_bootbank_nvme-pcie_1.2.3.9-2vmw.701.0.0.16850804, VMW_bootbank_nvmerdma_1.0.1.2-1vmw.701.0.20.17325020, VMW_bootbank_nvmxnet3-ens_2.0.0.22-1vmw.701.0.0.16850804, VMW_bootbank_nvmxnet3_2.0.0.30-1vmw.701.0.0.16850804, VMW_bootbank_pvscsi_0.1-2vmw.701.0.0.16850804, VMW_bootbank_qcnic_1.0.15.0-10vmw.701.0.0.16850804, VMW_bootbank_qedentv_3.40.3.0-12vmw.701.0.0.16850804, VMW_bootbank_qedrntv_3.40.4.0-12vmw.701.0.0.16850804, VMW_bootbank_qfle3_1.0.67.0-9vmw.701.0.0.16850804, VMW_bootbank_qfle3f_1.0.51.0-14vmw.701.0.0.16850804, VMW_bootbank_qfle3i_1.0.15.0-9vmw.701.0.0.16850804, VMW_bootbank_qflge_1.1.0.11-1vmw.701.0.0.16850804, VMW_bootbank_rste_2.0.2.0088-7vmw.701.0.0.16850804, VMW_bootbank_sfvmk_2.4.0.0010-15vmw.701.0.0.16850804, VMW_bootbank_smartpqi_70.4000.0.100-4vmw.701.0.25.17325551, VMW_bootbank_vmkata_0.1-1vmw.701.0.25.17325551, VMW_bootbank_vmkfcoe_1.0.0.2-1vmw.701.0.20.17325020, VMW_bootbank_vmkusb_0.1-1vmw.701.0.25.17325551, VMW_bootbank_vmw-ahci_2.0.5-2vmw.701.0.0.16850804, VMware_bootbank_cpu-microcode_7.0.1-0.30.17551050, VMware_bootbank_crx_7.0.1-0.30.17551050, VMware_bootbank_elx-esx-libelxima.so_12.0.1200.0-3vmw.701.0.0.16850804, VMware_bootbank_esx-base_7.0.1-0.30.17551050, VMware_bootbank_esx-dvfilter-generic-fastpath_7.0.1-0.30.17551050, VMware_bootbank_esx-ui_1.34.4-16668064, VMware_bootbank_esx-update_7.0.1-0.30.17551050, VMware_bootbank_esx-xserver_7.0.1-0.30.17551050, VMware_bootbank_gc_7.0.1-0.30.17551050, VMware_bootbank_loadesx_7.0.1-0.30.17551050, VMware_bootbank_lsuv2-hpv2-hpsa-plugin_1.0.0-3vmw.701.0.0.16850804, VMware_bootbank_lsuv2-intelv2-nvme-vmd-plugin_1.0.0-2vmw.701.0.0.16850804, VMware_bootbank_lsuv2-lsiv2-drivers-plugin_1.0.0-4vmw.701.0.0.16850804, VMware_bootbank_lsuv2-nvme-pcie-plugin_1.0.0-1vmw.701.0.0.16850804, VMware_bootbank_lsuv2-oem-dell-plugin_1.0.0-1vmw.701.0.0.16850804, VMware_bootbank_lsuv2-oem-hp-plugin_1.0.0-1vmw.701.0.0.16850804, VMware_bootbank_lsuv2-oem-lenovo-plugin_1.0.0-1vmw.701.0.0.16850804, VMware_bootbank_lsuv2-smartpqiv2-plugin_1.0.0-4vmw.701.0.0.16850804, VMware_bootbank_native-misc-drivers_7.0.1-0.30.17551050, VMware_bootbank_qlnativefc_4.0.3.0-17vmw.701.0.0.16850804, VMware_bootbank_vdfs_7.0.1-0.30.17551050, VMware_bootbank_vmware-esx-esxcli-nvme-plugin_1.2.0.38-1vmw.701.0.0.16850804, VMware_bootbank_vsan_7.0.1-0.30.17551050, VMware_bootbank_vsanhealth_7.0.1-0.30.17551050, VMware_locker_tools-light_11.1.1.16303738-16850804
   VIBs Removed: VMW_bootbank_bnxtnet_216.0.50.0-4vmw.700.1.0.15843807, VMW_bootbank_bnxtroce_216.0.58.0-1vmw.700.1.0.15843807, VMW_bootbank_brcmfcoe_12.0.1500.0-1vmw.700.1.0.15843807, VMW_bootbank_brcmnvmefc_12.4.293.2-3vmw.700.1.0.15843807, VMW_bootbank_elxiscsi_12.0.1200.0-1vmw.700.1.0.15843807, VMW_bootbank_elxnet_12.0.1250.0-5vmw.700.1.0.15843807, VMW_bootbank_i40en_1.8.1.16-1vmw.700.1.0.15843807, VMW_bootbank_i40iwn_1.1.2.5-1vmw.700.1.0.15843807, VMW_bootbank_iavmd_2.0.0.1055-3vmw.700.1.0.15843807, VMW_bootbank_igbn_0.1.1.0-6vmw.700.1.0.15843807, VMW_bootbank_iser_1.1.0.0-1vmw.700.1.0.15843807, VMW_bootbank_ixgben_1.7.1.26-1vmw.700.1.0.15843807, VMW_bootbank_lpfc_12.4.293.3-5vmw.700.1.0.15843807, VMW_bootbank_lpnic_11.4.62.0-1vmw.700.1.0.15843807, VMW_bootbank_lsi-mr3_7.712.50.00-1vmw.700.1.0.15843807, VMW_bootbank_lsi-msgpt2_20.00.06.00-2vmw.700.1.0.15843807, VMW_bootbank_lsi-msgpt35_13.00.12.00-1vmw.700.1.0.15843807, VMW_bootbank_lsi-msgpt3_17.00.10.00-1vmw.700.1.0.15843807, VMW_bootbank_mtip32xx-native_3.9.8-1vmw.700.1.0.15843807, VMW_bootbank_ne1000_0.8.4-10vmw.700.1.0.15843807, VMW_bootbank_nenic_1.0.29.0-1vmw.700.1.0.15843807, VMW_bootbank_nfnic_4.0.0.44-1vmw.700.1.0.15843807, VMW_bootbank_nhpsa_2.0.50-1vmw.700.1.0.15843807, VMW_bootbank_nmlx4-core_3.19.16.7-1vmw.700.1.0.15843807, VMW_bootbank_nmlx4-en_3.19.16.7-1vmw.700.1.0.15843807, VMW_bootbank_nmlx4-rdma_3.19.16.7-1vmw.700.1.0.15843807, VMW_bootbank_nmlx5-core_4.19.16.7-1vmw.700.1.0.15843807, VMW_bootbank_nmlx5-rdma_4.19.16.7-1vmw.700.1.0.15843807, VMW_bootbank_ntg3_4.1.4.1-1vmw.700.1.0.15843807, VMW_bootbank_nvme-pcie_1.2.2.14-1vmw.700.1.25.16324942, VMW_bootbank_nvmerdma_1.0.0.0-1vmw.700.1.0.15843807, VMW_bootbank_nvmxnet3-ens_2.0.0.22-1vmw.700.1.0.15843807, VMW_bootbank_nvmxnet3_2.0.0.30-1vmw.700.1.0.15843807, VMW_bootbank_pvscsi_0.1-2vmw.700.1.0.15843807, VMW_bootbank_qcnic_1.0.15.0-8vmw.700.1.0.15843807, VMW_bootbank_qedentv_3.12.1.0-23vmw.700.1.0.15843807, VMW_bootbank_qedrntv_3.12.1.2-12vmw.700.1.0.15843807, VMW_bootbank_qfle3_1.0.66.0-5vmw.700.1.0.15843807, VMW_bootbank_qfle3f_1.0.51.0-12vmw.700.1.0.15843807, VMW_bootbank_qfle3i_1.0.15.0-6vmw.700.1.0.15843807, VMW_bootbank_qflge_1.1.0.11-1vmw.700.1.0.15843807, VMW_bootbank_rste_2.0.2.0088-7vmw.700.1.0.15843807, VMW_bootbank_sfvmk_2.0.0.1004-3vmw.700.1.0.15843807, VMW_bootbank_smartpqi_1.0.4.3011-1vmw.700.1.0.15843807, VMW_bootbank_vmkata_0.1-1vmw.700.1.0.15843807, VMW_bootbank_vmkfcoe_1.0.0.2-1vmw.700.1.0.15843807, VMW_bootbank_vmkusb_0.1-1vmw.700.1.25.16324942, VMW_bootbank_vmw-ahci_1.3.9-1vmw.700.1.0.15843807, VMware_bootbank_cpu-microcode_7.0.0-1.25.16324942, VMware_bootbank_crx_7.0.0-1.25.16324942, VMware_bootbank_elx-esx-libelxima.so_12.0.1200.0-2vmw.700.1.0.15843807, VMware_bootbank_esx-base_7.0.0-1.25.16324942, VMware_bootbank_esx-dvfilter-generic-fastpath_7.0.0-1.25.16324942, VMware_bootbank_esx-ui_1.34.0-15603211, VMware_bootbank_esx-update_7.0.0-1.25.16324942, VMware_bootbank_esx-xserver_7.0.0-1.25.16324942, VMware_bootbank_loadesx_7.0.0-1.25.16324942, VMware_bootbank_lsuv2-hpv2-hpsa-plugin_1.0.0-2vmw.700.1.0.15843807, VMware_bootbank_lsuv2-intelv2-nvme-vmd-plugin_1.0.0-2vmw.700.1.0.15843807, VMware_bootbank_lsuv2-lsiv2-drivers-plugin_1.0.0-2vmw.700.1.0.15843807, VMware_bootbank_lsuv2-nvme-pcie-plugin_1.0.0-1vmw.700.1.0.15843807, VMware_bootbank_lsuv2-oem-dell-plugin_1.0.0-1vmw.700.1.0.15843807, VMware_bootbank_lsuv2-oem-hp-plugin_1.0.0-1vmw.700.1.0.15843807, VMware_bootbank_lsuv2-oem-lenovo-plugin_1.0.0-1vmw.700.1.0.15843807, VMware_bootbank_lsuv2-smartpqiv2-plugin_1.0.0-3vmw.700.1.0.15843807, VMware_bootbank_native-misc-drivers_7.0.0-1.25.16324942, VMware_bootbank_qlnativefc_4.0.1.0-3vmw.700.1.0.15843807, VMware_bootbank_vdfs_7.0.0-1.25.16324942, VMware_bootbank_vmware-esx-esxcli-nvme-plugin_1.2.0.37-1vmw.700.1.0.15843807, VMware_bootbank_vsan_7.0.0-1.25.16324942, VMware_bootbank_vsanhealth_7.0.0-1.25.16324942, VMware_locker_tools-light_11.1.0.16036546-16321839
   VIBs Skipped:

インストール自体は正常に終了したので、ESXiを再起動させる。

[root@bismuth:~] reboot
[root@bismuth:~] Connection to bismuth closed by remote host.
Connection to bismuth closed.

再度ログインして、バージョンを確認し、アップデートできていることを確認した。

[root@bismuth:~] esxcli system version get
   Product: VMware ESXi
   Version: 7.0.1
   Build: Releasebuild-17551050
   Update: 1
   Patch: 30

GUI上では、7.0 Update 1になり、無償ライセンスも有効のままだった。 Intel PRO/1000 PT Server Adapterも正常に動作している。

JPEG 2000と特許とGhostscript

「標準化現場ノート(6) JPEG 2000」 小野 文孝, 映像情報メディア学会誌, 2010, 64 巻, 9 号, p. 1339-1343によると、 JPEG 2000の基本方式である Part 1においては、特許権を行使されないことが、 実務的には保証されているとのことである。 でも、後年どうなったのかは良く分からない。

私がこんなことを調べたのは、GhostscriptでJPEG 2000エンコードができない問題 について、 2017-08-23のIRCログ に、エンコーダーを実装するには特許の問題があるという記述があったからなのだが、 少なくとも今日調べてもエンコーダーの実装をするのに誰かの特許に抵触するような ウェブ上の情報は見付けられなかった。

問題ないのであれば、GhostscriptでJPEG 2000エンコーディングをサポートして欲しい。

Microsoft 365のMicrosoft Outlook 16.0.12527.20986で、古いアカウントの設定のウィザードを利用する

Microsoft Office 2010を長く使っていて、Microsoft Exchange Server 2013に対してオフラインキャッシュの無効になった接続をせざるを得ない。 そうすると、オフライン時には自分のプロファイルを全く開くことができず、自分の個人用フォルダーファイル(.pst)を参照することもできない。 そうなると困ってしまうので、.pstファイルのみを利用できるプロファイルを追加で作っておくことで、過去の電子メールを参照するしかない。

Microsoft 365のMicrosoft Offcie ProPlusのOutlook 16.0.12527.20986という古めのOutlookを使うことになったのだが、同様にオフラインキャッシュは無効になっていて、 .pstファイル用のプロファイルを作成するしかないということになった。 しかし、OUtlook 2010にあったアカウントの設定のウィザードはなくなっており、.pstファイルのみを利用できるような変わったプロファイルは作れなくなっていた。

調べてみると、古いアカウントの設定ウィザードはWindowsレジストリーで再び有効化することが可能だった。 以下のように実行すれば良い。

reg add HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\setup /v DisableOffice365SimplifiedAccountCreation /t REG_DWORD /d 1 /f

Windows 10で利用するバージョンを固定する

Windows 10 1909を使わないといけない場合があり、実際に後日利用する場合にはActive Directoryドメインに参加させるので、 勝手に2004以降にアップデートされることはない訳だが、初期セットアップの中でWindows Updateを実行しておきたい。 そうすると、勝手に2004や20H2にアップデートされてしまうことがある。 私は単にWindows Update経由で配布されるデバイスドライバーを利用したいだけなのだが。

機能更新のブロックやスキップができそうな Windows Update for Business の新ポリシー(from 1803)(追記あり)にあるように、 Windows 10 1803以降では、以下のようにWindowsレジストリーに登録することで1909に固定しておくことができた。

REG ADD HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v TargetReleaseVersion /t REG_DWORD /d 1 /f
REG ADD HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate /v TargetReleaseVersionInfo /t REG_SZ /d 1909 /f

Active Directryドメインに参加したら、これらはWindowsレジストリーから削除しておく。

OCNでIPv4 over IPv6 (IPoE)が利用できるか調べる

OCNをISPとして、回線はフレッツで利用しているのだが、IPoEなIPv6は使えるようになっているのだが、IPv4 over IPv6は利用できていない。 自分の環境でIPv4 over IPv6が使えるかどうか良く分からなかったので、使えるかどうかの確認方法を書いておく。 ちなみに、私の環境ではホームゲートウェイ(HGW)では、まだ利用できなかった。

HGWのファームウェアアップデートを確認する

OCNバーチャルコネクトサービス(IPoE接続)対応端末のPDFファイルを見ると、私の利用しているPR-500MIもサポート対象のHGWであるように見える。 しかし、備考に以下のように書いてあるのが気になる。どういう意味だろうか?

左記のホームゲートウェイをご利用の場合であっても、フレッツ・ジョイントによるIPv4 over IPv6接続用ソフトウェア配信機能をご利用でない場合、IPv6接続のみのご提供になります。

これは、ホームゲートウェイ(HGW) v6Neo接続設定方法というウェブページによると、 http://ntt.setup:8888/t/でファームウェアの配信がされているか確認できるものであるらしい。「配信済事業者ソフトウェア一覧」という画面である。 ここでブロック数が0/10でなければ、配信されているようだ。 つまり、HGWにログインしてアップデートするファームウェアの更新では配信されて来ないものであるようだ。

私の環境では、0/10だった。

ここまで把握した上で、OCNのマイページを見てみると、記載する内容を理解することができた。

OCNのマイページの見方

IPoEインターネット接続機能ページのIPoEインターネット接続機能の提供状況 にOCNマイページの見方が書かれている。私の場合は、「IPoEは、提供中」で「IPoE(ホームゲートウェイ・無線LANルーター*1対応)は、未提供」であった。 これはつまり、HGWにファームウェアを配信していないということを示しているようだ。

なので、この「IPoE(ホームゲートウェイ・無線LANルーター*1対応)」を注視していれば良いようだ。ちなみに、「提供中」になる場合には、電子メールで連絡が来るらしい。

HGWを使わないようにしたいのだが、ひかり電話周りをちゃんと理解しないといけない。

ノートに保護フィルムを貼る

ノートの表紙を補強するために、保護フィルムを貼る必要があった。

エーワン A-one ラミネート UVカット透明カバーフィルム 空気が抜けるタイプ 6枚 A4 35045を使ってみたら、 確かに上から押さえるだけで、空気を抜いて貼り付けることができた。 厚さも光沢も問題なく利用できた。

エーワンブランドなのだが、中の保護フィルムの保護紙の表示も3Mだし、パッケージのメーカー表示もスリーエム ジャパンになっている。 調べてみると、2010年に3Mグループになっていた

VMware ESXiでのネイティブバーチャルコンソール

VMware ESXi 7.0bを使ってpkgsrcの検証環境を構築している。 VMware ESXiでは既にWindowsネイティブなコンソールは提供されず、ウェブユーザーインターフェイス内のコンソールしかないと思っていた。 これはNetBSD上のFirefoxでも利用できるなど便利な面はあるのだが、 入力できないショートカットキーがあるなど、GUI環境を検証する場合には必ずしも便利ではないように感じていた。

Haiku R1/beta2の環境をVMware ESXi上で構築しようとしたら、ウェブUIのコンソールではマウスの操作 がキャプチャされなかった。 これはEmulating Haiku In ESXiに解消する方法が解説されていた。 その内容は、VMware Remote Console (VMRC)というのを使えば解消するらしい。これはWindowsとLinux/x86_64向けに提供されているらしい。 Windows 10で試してみた。

実際にMy VMwareのウェブサイトにログインしてダウンロードしインストールしてみると、Firefox for WindowsでVMware ESXiのウェブインターフェイスを開く部分にある "Launch remote console"というのが動くようになる。 これを選択すると、Windowsネイティブなリモートコンソールウィンドウが開くようになる。 VMware ESXiのウェブユーザーインターフェイスがタイムアウトでログアウトされても継続してコンソールを利用できるという利点もある。 Haikuについて言えば、もちろんマウスも正常に利用できる。 Haiku以外でもGUI環境で作業する場合には便利そうだ。

pkgsrcでの取り組みの話を書くべきか

pkgsrcで自分の使うソフトウェアを最新の状態で使えるようにしているつもりで、その成果というのはpkgsrcのtreeに全て反映されている。 と言うことで、改めてその内容を日本語で書いておくことが有用な気がしていなかった。 だが、良く考えてみると、どうやってその問題に到達したのかとか、どういう補助的なツールを使ったのかといったことは、コミットログに 書かなかったとすると、記憶の中にしか残っていないことになる。 コミットログに書くのがベストではあると思うが、ここにその取り組みの内容を書いておくのも有用かもしれない。

と言うことで、pkgsrcのタグを用意したので、折を見てpkgsrcでコードにもコミットログにも表現できなかったことを書いておくようにしたい。

olsrd2の動作確認をする方法

メッシュWi-Fi的なものを自分でやってみようと思って、olsrd2を使ってみたのだが、ちゃんとneighborsを見付けて接続できたのかが分かりにくかった。 私は結局複数のWi-Fiアクセスポイントを運用するのは止めることにしたので、olsrd2を動作確認以上には利用していないのだが、 折角なので、neighborsを見付けて接続できたか確認する方法だけ書いておきたい。

olsrd2はtelnet経由で少なくとも状態を確認できるようになっている。しかし、デフォルトでは2009番ポートが割り当てられていてlocalhost以外からは接続できないようになっているようだ。 各アクセスポイントにログインして確認するのは面倒である。 まずは、localhost以外からもtelnetでログインできるようにする。

そのためには、設定ファイルを書くのが楽なように思われる。コマンドラインでも指定できるようだが、少なくともどのオプションが必要なのか見極めるためにいろいろ試している段階では、 設定ファイルを書いた方が記録が残るという意味でも良いように思われる。設定ファイルを指定してolsrd2を起動するには、設定ファイルのファイル名がolsrd2.confだとしたら、 olsrd2 --load olsrd2.confのように実行する。このように起動すると、自動的にデーモンにはならないので、何度も設定ファイルを書き変えて試行している段階では 操作しやすい。

$ cat olsrd2.conf
[telnet]
        acl     default_accept
        bindto  192.168.1.2
        port    2009

ここで、192.168.1.2は、そのWi-FiアクセスポイントのIPアドレスで、設定・確認作業をしている端末から見えるIPアドレスを指定する。

その設定・確認用の端末からは、telnet 192.168.1.2 2009のようにログインして操作しても良いのだが、readline的なものもないので操作性が悪い。 NetBSD 9.99.80であれば、ncコマンドがbaseに含まれているので、以下のようにすれば良い。ここで/を付けているのは、 表示後にtelnetのセッションを残しておきたくないためである。

$ echo /nhdpinfo json link | nc 192.168.1.2 2009

これで、空ではないJSONが表示されれば、neighborsが検出されている。 うまく行かない場合には、olsrd2.conf[interface=eth0]のように、neighborsと通信できるネットワークインターフェイスを指定しておくと良いだろう。

nginxだけで、HTTPSとsshを同時に443番ポートで待ち受ける

はじめに

どんなにひどいネットワーク環境であっても、 せめて22番ポートくらいは通るようにしておいて欲しいものだが、 そういう訳にもいかない。 通るのは80と443のみである。

sshでログインする先のサーバーが、httpdを実行していなければ、80番ポートでも443番ポート でも良いので、sshdが待ち受けるように設定してしまえば、そんな環境からでも sshでログインして作業できるのだが、httpdを実行しているサーバーにログイン したいニーズは存在する。 そのサーバーがHTTPとHTTPSで配信しているファイルを変更したいからsshでログイン したいのであって、httpdを止める訳にはいかないのである。

そのサーバーのhttpdには、nginx-1.19.6を利用している。 HTTPSとsshを同時に待ち受けさせるには、sslhを使うのが一般的な解ではないかと思う。 pkgsrcでも、net/sslhとして収録されている。

しかし、nginxほどの拡張性のあるウェブサーバーであれば、それ自身でそれくらいの 多重化はできるのではないかと考えた。 検索してみると、nginxの公式blogに、 Running SSL and Non-SSL Protocols over the Same Port with NGINX 1.15.2 という記事があるのに気付いた。 $ssl_preread_protocolと言うのを使うと、HTTPSとsshを同時に待ち受けて それぞれ適切な方にリダイレクトさせることが可能だという。

実際に試してみた。

nginxの再インストール

pkgsrcを使ってnginx-1.19.6をインストールしている。 これまでは、標準のビルドオプションに加えて、HTTP/2のサポートを有効化していた。 これに加えて、$ssl_preread_protocolを有効にするには、 まずは/etc/mk.confに以下のように書いておく。

# vi /etc/mk.conf
(snip)
PKG_OPTIONS.nginx=http2 stream-ssl-preread
(snip)

この上で、nginx-1.19.6をインストールし直す。 以下のように実行すれば良い。/usr/pkg/etc/nginxディレクトリー内の 設定ファイルの変更は維持される。

# cd /usr/pkgsrc/www/nginx-devel
# make update

これで、nginxバイナリーは準備できた。 次に設定ファイルを変更していく。 方針は以下のようである。

  1. 443番ポートでHTTPSとsshを待ち受ける。
  2. 443番ポートに接続されたログを取得する。

これを実現するために、/usr/pkg/etc/nginx/nginx.confは以下のように 設定した。コメントを入れつつnginx.conf全体を掲載しておく。

$ cat /usr/pkg/etc/nginx/nginx.conf
user   nginx  nginx;
worker_processes  1;

events {
    # After increasing this value You probably should increase limit
    # of file descriptors (for example in start_precmd in startup script)
    worker_connections  1024;
}

# Share 443 port with TLS and ssh
# https://www.nginx.com/blog/running-non-ssl-protocols-over-ssl-port-nginx-1-15-2/
stream {
	upstream ssh {
		server localhost:22; # sshdはlocalhostの22番ポートで待機しているので、それにリダイレクトする。
	}

	upstream webtls {
		server localhost:8443; # httpdはHTTPSをlocalhostの8443番ポートで待機しているので、それにリダイレクトする。
	}

	map $ssl_preread_protocol $upstream {
		default webtls; # nginx blogではHTTPS側でTLSのClientHelloを指定していたが、
				# どのようなClientHelloが来るか分からないので、既定値としてはHTTPSにしている。
		"" ssh; # ClientHelloがない場合にはsshとして扱う。
	}

	log_format stream_log  '$remote_addr - [$time_local] '
		'$status'; # 最小限の接続ログを出力する。
	access_log /var/log/nginx/access_stream.log stream_log; # ログの出力先を設定する。

	# 実際に443番ポートの多重化を設定している。
	server {
		listen 443;

		proxy_pass $upstream;
		ssl_preread on;
	}
}

http {
    include       /usr/pkg/etc/nginx/mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  www.example.org;

        #charset koi8-r;

        #access_log  /var/log/nginx/host.access.log  main;

        location / {
            root   /usr/htdocs;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   share/examples/nginx/html;
        }

	location ~ ^/~(.+?)(/.*)?$ {
		alias /home/$1/public_html$2;
	}

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        /usr/pkg/etc/nginx/fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   share/examples/nginx/html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    server {
        listen       8443 http2 ssl; # 8443番ポートで待機させる。
        server_name  www.example.org;

        ssl_certificate      www.example.org.cer;
        ssl_certificate_key  www.example.org.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   /usr/htdocs;
            index  index.html index.htm;
        }

	location /pub {
		alias /usr/htdocs/pub;
		autoindex on;
		location ~*.diff {
			add_header Content-Type text/plain;
		}
	}

	location ~ ^/~(.+?)(/.*)?$ {
		alias /home/$1/public_html$2;
	}
    }

}

以下のように443番ポート経由でsshログインできるか確認する。 同時にHTTPSでもページを表示できるか確認する。

# /etc/rc.d/nginx restart
$ ssh www.example.org -p 443
$ w3m https://www.example.org/

MPEG 2.5

MPEG 2.5と言う表記を見掛けたのだが、どういうものか理解できなかった。 /usr/pkgsrc/audio を以下のように検索すると、 /usr/pkgsrc/audio/libmad/DESCR に、MPEG-2 extension to Lower Sam...