qemu上でNetBSD/amd64-currentを使ってみる (VirtIO SCSI)

この記事は、NetBSD Advent Calendar 2021の7日目の記事です。

はじめに

今回は、VirtIO SCSI Host Device (virtio-scsi)を使う場合について、書きたいと思います。

VirtIO SCSI Host Deviceとは?

仕様書によると、いわゆるvirtio-scsiというのが、VirtIO Host Deviceのことであるようです。 NetBSDですと、vioscsi(4)というのが それに当たるようです。 VirtIO SCSIには、scsi-hdとscsi-block、scsi-genericという3つの種類の設定ができるようです。 qemu.orgによりvirtio-blkとvirtio-scsiの各設定の比較記事によると、 通常の仮想ディスクイメージを使う場合には、最も性能の良いscsi-hdを使うので良さそうです。 この比較記事によると、virtio-blkの方がvirtio-scsiよりもランダム読み取りの性能が高いそうです。 しかし、接続できるディスクデバイスの数はvirtio-scsiの方が多いそうです。

Google Cloud Compute Engineで提供されている VPSの標準のブロックデバイスは、このvirtio-scsiになっていました。

qemuでvirtio-scsiを使うように指定してNetBSD/amd64-currentをインストールする

virtio-scsiでは、光学ディスクドライブもサポートしているようです。 インストールするために利用するISOイメージファイルもvirtio-scsi経由で設定してみます。

qemuを起動するシェルスクリプトを用意します。VirtIO機能を利用する場合には、コマンドライン引数が長くなりがちですので、 シェルスクリプトの形にまとめておくのが良いと思います。 qemu-virtio-scsi_install.shというファイル名で、以下のようなシェルスクリプトを作成しておきます。

#!/bin/sh

INSTALLISO=../NetBSD-9.99.92-amd64_202112102310Z.iso

# Install
qemu-system-x86_64 \
        -smp 4 \
        -m 4G \
        -accel nvmm \
        -device virtio-scsi-pci,id=scsi \
        -device scsi-cd,drive=cd0 \
        -drive if=none,id=cd0,file=${INSTALLISO},media=disk,format=raw \
        -device scsi-hd,drive=hd1 \
        -drive if=none,id=hd1,file=netbsd.qcow2,format=qcow2 \
        -net nic,model=virtio -net user \
        -rtc base=localtime,clock=host \
        -device intel-hda -device hda-duplex \
        -vga qxl

起動は以下のように実行すれば良いでしょう。 cd0 at scsibus0 at vioscsi0から起動できます。 インストールの各手順を割愛します。

$ sh ./qemu-virtio-scsi_install.sh

インストールが完了したら、仮想マシンはシャットダウンしておきます。

インストールしたNetBSD/amd64-currentを起動させる

インストールに必要な設定は省いたコマンドライン引数を指定してqemuを起動させるシェルスクリプトを以下のように用意します。 ファイル名は、qemu-virtio-scsi.shとしておきます

0
#!/bin/sh

qemu-system-x86_64 \
        -smp 4 \
        -m 4G \
        -accel nvmm \
        -device virtio-scsi-pci,id=scsi \
        -device scsi-hd,drive=hd1 \
        -drive if=none,id=hd1,file=netbsd.qcow2,format=qcow2 \
        -net nic,model=virtio -net user \
        -rtc base=localtime,clock=host \
        -device intel-hda -device hda-duplex \
        -vga qxl

起動するとdmesgは以下のようになります。

Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
    2018, 2019, 2020, 2021 The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 9.99.92 (GENERIC) #0: Fri Dec 10 21:57:13 UTC 2021
	mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/amd64/compile/GENERIC
total memory = 4095 MB
avail memory = 3941 MB
timecounter: Timecounters tick every 10.000 msec
Kernelized RAIDframe activated
timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100
mainbus0 (root)
ACPI: RSDP 0x00000000000F5980 000014 (v00 BOCHS )
ACPI: RSDT 0x00000000BFFE1A2B 000034 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: FACP 0x00000000BFFE18C7 000074 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: DSDT 0x00000000BFFE0040 001887 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: FACS 0x00000000BFFE0000 000040
ACPI: APIC 0x00000000BFFE193B 000090 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: HPET 0x00000000BFFE19CB 000038 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: WAET 0x00000000BFFE1A03 000028 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: 1 ACPI AML tables successfully acquired and loaded
ioapic0 at mainbus0 apid 0: pa 0xfec00000, version 0x20, 24 pins
cpu0 at mainbus0 apid 0
cpu0: Use lfence to serialize rdtsc
cpu0: CPU base freq 1500000000 Hz
cpu0: CPU max freq 3900000000 Hz
cpu0: TSC freq CPUID 1497600000 Hz
cpu0: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz, id 0x706e5
cpu0: node 0, package 0, core 0, smt 0
cpu1 at mainbus0 apid 1
cpu1: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz, id 0x706e5
cpu1: node 0, package 0, core 0, smt 1
cpu2 at mainbus0 apid 2
cpu2: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz, id 0x706e5
cpu2: node 0, package 0, core 1, smt 0
cpu3 at mainbus0 apid 3
cpu3: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz, id 0x706e5
cpu3: node 0, package 0, core 1, smt 1
acpi0 at mainbus0: Intel ACPICA 20210930
acpi0: X/RSDT: OemId &t;BOCHS ,BXPC    ,00000001>, AslId <BXPC,00000001>
LNKS: ACPI: Found matching pin for 0.1.INTA at func 3: 9
LNKB: ACPI: Found matching pin for 0.2.INTA at func 0: 10
LNKC: ACPI: Found matching pin for 0.3.INTA at func 0: 11
LNKD: ACPI: Found matching pin for 0.4.INTA at func 0: 11
LNKA: ACPI: Found matching pin for 0.5.INTA at func 0: 10
acpi0: SCI interrupting at int 9
acpi0: fixed power button present
timecounter: Timecounter "ACPI-Fast" frequency 3579545 Hz quality 1000
hpet0 at acpi0: high precision event timer (mem 0xfed00000-0xfed00400)
timecounter: Timecounter "hpet0" frequency 100000000 Hz quality 2000
pckbc1 at acpi0 (KBD, PNP0303) (kbd port): io 0x60,0x64 irq 1
pckbc2 at acpi0 (MOU, PNP0F13) (aux port): irq 12
fdc0 at acpi0 (FDC0, PNP0700): io 0x3f2-0x3f5,0x3f7 irq 6 drq 2
lpt0 at acpi0 (LPT1, PNP0400-1): io 0x378-0x37f irq 7
com0 at acpi0 (COM1, PNP0501-1): io 0x3f8-0x3ff irq 4
com0: ns16550a, 16-byte FIFO
qemufwcfg0 at acpi0 (FWCF, QEMU0002): io 0x510-0x51b
qemufwcfg0: <QEMU>
ACPI: Enabled 2 GPEs in block 00 to 0F
pckbd0 at pckbc1 (kbd slot)
pckbc1: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard
pms0 at pckbc1 (aux slot)
pckbc1: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
pci0 at mainbus0 bus 0: configuration mode 1
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
pchb0 at pci0 dev 0 function 0: Intel 82441FX (PMC) PCI and Memory Controller (rev. 0x02)
pcib0 at pci0 dev 1 function 0: Intel 82371SB (PIIX3) PCI-ISA Bridge (rev. 0x00)
piixide0 at pci0 dev 1 function 1: Intel 82371SB IDE Interface (PIIX3) (rev. 0x00)
piixide0: bus-master DMA support present
piixide0: primary channel wired to compatibility mode
piixide0: primary channel interrupting at ioapic0 pin 14
atabus0 at piixide0 channel 0
piixide0: secondary channel wired to compatibility mode
piixide0: secondary channel interrupting at ioapic0 pin 15
atabus1 at piixide0 channel 1
piixpm0 at pci0 dev 1 function 3: Intel 82371AB (PIIX4) Power Management Controller (rev. 0x03)
timecounter: Timecounter "piixpm0" frequency 3579545 Hz quality 1000
piixpm0: 24-bit timer
piixpm0: interrupting at ioapic0 pin 9
iic0 at piixpm0 port 0: I2C bus
vga0 at pci0 dev 2 function 0: Red Hat QXL Video (rev. 0x05)
wsdisplay0 at vga0 kbdmux 1: console (80x25, vt100 emulation), using wskbd0
wsmux1: connecting to wsdisplay0
drm at vga0 not configured
virtio0 at pci0 dev 3 function 0
virtio0: network device (rev. 0x00)
vioif0 at virtio0: features: 0x31070020<EVENT_IDX,INDIRECT_DESC,NOTIFY_ON_EMPTY,CTRL_RX,CTRL_VQ,STATUS,MAC>
vioif0: Ethernet address 52:54:00:12:34:56
virtio0: allocated 20480 byte for virtqueue 0 for rx0, size 256
virtio0: using 8192 byte (512 entries) indirect descriptors
virtio0: allocated 81920 byte for virtqueue 1 for tx0, size 256
virtio0: using 69632 byte (4352 entries) indirect descriptors
virtio0: allocated 8192 byte for virtqueue 2 for control, size 64
virtio0: config interrupting at msix0 vec 0
virtio0: queues interrupting at msix0 vec 1
virtio1 at pci0 dev 4 function 0
virtio1: SCSI device (rev. 0x00)
vioscsi0 at virtio1: features: 0x10000000<INDIRECT_DESC>
virtio1: allocated 86016 byte for virtqueue 0 for control, size 256
virtio1: using 73728 byte (4608 entries) indirect descriptors
virtio1: allocated 86016 byte for virtqueue 1 for event, size 256
virtio1: using 73728 byte (4608 entries) indirect descriptors
virtio1: allocated 86016 byte for virtqueue 2 for request, size 256
virtio1: using 73728 byte (4608 entries) indirect descriptors
vioscsi0: cmd_per_lun 128 qsize 256 seg_max 254 max_target 255 max_lun 16383
virtio1: config interrupting at msix1 vec 0
virtio1: queues interrupting at msix1 vec 1
scsibus0 at vioscsi0: 16 targets, 1024 luns per target
hdaudio0 at pci0 dev 5 function 0: HD Audio Controller
hdaudio0: interrupting at msi2 vec 0
hdaudio0: HDA ver. 1.0, OSS 4, ISS 4, BSS 0, SDO 1, 64-bit
hdafg0 at hdaudio0: vendor 1af4 product 0022
hdafg0: DAC00 2ch: Speaker [Jack]
hdafg0: ADC01 2ch: Line In [Jack]
hdafg0: 2ch/2ch 16000Hz 22050Hz 32000Hz 44100Hz 48000Hz 88200Hz 96000Hz PCM16
audio0 at hdafg0: playback, capture, full duplex, independent
audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for playback
audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for recording
spkr0 at audio0: PC Speaker (synthesized)
wsbell at spkr0 not configured
isa0 at pcib0
attimer0 at isa0 port 0x40-0x43
pcppi0 at isa0 port 0x61
spkr1 at pcppi0: PC Speaker
wsbell at spkr1 not configured
midi0 at pcppi0: PC speaker
sysbeep0 at pcppi0
attimer0: attached to pcppi0
acpicpu0 at cpu0: ACPI CPU
acpicpu0: C1: HLT, lat   0 us, pow     0 mW
acpicpu1 at cpu1: ACPI CPU
acpicpu2 at cpu2: ACPI CPU
acpicpu3 at cpu3: ACPI CPU
cpu0: CPU base freq 1500000000 Hz
cpu0: CPU max freq 3900000000 Hz
cpu0: TSC freq CPUID 1497600000 Hz
cpu0: TSC freq calibrated 1396657000 Hz
timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
autoconfiguration error: ERROR: 43778851 cycle TSC drift observed
fd0 at fdc0 drive 0: 1.44MB, 80 cyl, 2 head, 18 sec
sd0 at scsibus0 target 0 lun 0: <QEMU, QEMU HARDDISK, 2.5+> disk fixed
sd0: 30720 MB, 16383 cyl, 16 head, 240 sec, 512 bytes/sect x 62914560 sectors
sd0: GPT GUID: 65ba8dc6-924e-42ea-a203-23da6b8a35d4
dk0 at sd0: "VMROOT", 54523904 blocks at 64, type: ffs
dk1 at sd0: "VMSWAP", 8388608 blocks at 54523968, type: swap
sd0: async, 8-bit transfers, tagged queueing
IPsec: Initialized Security Association Processing.
aes: Intel AES-NI
chacha: x86 SSE2 ChaCha
WARNING: 1 error while detecting hardware; check system log.
boot device: sd0
root on dk0 dumps on dk1
root file system type: ffs
kern.module.path=/stand/amd64/9.99.92/modules
clock: unknown CMOS layout
wsdisplay0: screen 1 added (80x25, vt100 emulation)
wsdisplay0: screen 2 added (80x25, vt100 emulation)
wsdisplay0: screen 3 added (80x25, vt100 emulation)
wsdisplay0: screen 4 added (80x25, vt100 emulation)

無事にdk0 at sd0 at scsibus0 at vioscsi0 at virtio1から起動できました。

qemu上でNetBSD/amd64-currentを使ってみる (VirtIO Block Device)

この記事は、NetBSD Advent Calendar 2021の5日目の記事です。

はじめに

VPSサービスの提供する仮想マシンにNetBSD/amd64-currentをインストールした時の話を書こうと思ったのですが、 どうにも準備ができていません。 今回から何回かに分けて、その前準備としてやってみていた、qemu上でNetBSD/amd64-currentを動かした際のリポートをしたいと思います。 今回は、VirtIO Block Device (virtio-blk)を使う場合について、書きたいと思います。

VirtIO Block Deviceとは?

VirtIOの仕様というのは、OASISにより標準化されているようです。 仕様書によると、いわゆるvirtio-blkというのが、VirtIO Block Deviceのことであるようです。 NetBSDですと、virtio(4)のman pageにあるld* at virtio?というのが それに当たるようです。

さくらのVPSConoHa VPSで提供されている VPSの標準のブロックデバイスは、このvirtio-blkになっていました。

qemuを用意する

まずはホストとなるNetBSD/amd64 9.99.92のマシンでqemuをインストールします。 以下のようにpkgsrc/emulators/qemuをインストールするので良いでしょう。 私はqemu 6.2.0リリースに備えて、自分のpkgsrcツリーでは、qemu 6.2.0-rc4を用意しています。 ですので以下の例は全てqemu-6.2.0rc4パッケージによるものですが、誰でも使えるqemu-6.1.0nb5でも特に差はないはずです。

# cd /usr/pkgsrc/emulators/qemu
# make install

私は、/etc/mk.confPKG_OPTIONS.qemu=gtk3という行を追加しているため、 標準の状態のpkgsrc/emulators/qemuパッケージとは異なりますが、今回の内容を再現するには影響はしないと思います。

qemuでvirtio-blkを使うように指定してNetBSD/amd64-currentをインストールする

インストールするには、NetBSD/amd64-currentのインストールイメージを入手しないといけません。 CD-R用のISOイメージでなく、BIOS (CSM)ブート用とUEFIブート用のそれぞれのUSBスティック等で使えるディスクイメージも提供されていますが、 今回はISOイメージを使ってインストールしたいと思います。 NetBSD上であれば、ftp(1)コマンドとしてnbftpが使えますので、以下のように実行すれば良いでしょう。 この記事を書いている時点では、202112102310Zというタイムスタンプのものがダウンロードできます。

$ ftp -o NetBSD-9.99.92-amd64_202112102310Z.iso http://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/latest/images/NetBSD-9.99.92-amd64.iso

次に、qemuを起動するシェルスクリプトを用意します。VirtIO機能を利用する場合には、コマンドライン引数が長くなりがちですので、 シェルスクリプトの形にまとめておくのが良いと思います。 qemu-virtio-blk_install.shというファイル名で、以下のようなシェルスクリプトを作成しておきます。

#!/bin/sh

INSTALLISO=../NetBSD-9.99.92-amd64_202112102310Z.iso

sudo modload nvmm

# Install
qemu-system-x86_64 \
        -smp 4 \
        -m 4G \
        -accel nvmm \
        -drive driver=qcow2,file=netbsd.qcow2,if=virtio \
        -net nic,model=virtio -net user \
        -rtc base=localtime,clock=host \
        -device intel-hda -device hda-duplex \
        -vga qxl \
        -drive file=${INSTALLISO},index=1,media=cdrom

sudo modunload nvmm

今回はnvmm(4) (NetBSD Virtual Machine Monitor)というNetBSDの機能を使うようにしました。 以下のように実行すれば、qemuの仮想マシンが起動し、その上でNetBSD/amd64 9.99.92が起動しインストーラーにより インストールすることができます。 今回はインストーラーでの各手順については割愛します。 インストールが終わったら、仮想マシンはシャットダウンしておきます。

$ sh ./qemu-virtio-blk_install.sh

インストールしたNetBSD/amd64-currentを起動させる

インストールに必要な設定は省いたコマンドライン引数を指定してqemuを起動させるシェルスクリプトを以下のように用意します。 ファイル名は、qemu-virtio-blk.shとしておきます

#!/bin/sh

qemu-system-x86_64 \
        -smp 4 \
        -m 4G \
        -accel nvmm \
        -drive driver=qcow2,file=netbsd.qcow2,if=virtio \
        -net nic,model=virtio -net user \
        -rtc base=localtime,clock=host \
        -device intel-hda -device hda-duplex \
        -vga qxl

起動するとdmesgは以下のようになります。

Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
    2018, 2019, 2020, 2021 The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 9.99.92 (GENERIC) #0: Fri Dec 10 21:57:13 UTC 2021
	mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/amd64/compile/GENERIC
total memory = 4095 MB
avail memory = 3941 MB
timecounter: Timecounters tick every 10.000 msec
Kernelized RAIDframe activated
timecounter: Timecounter "i8254" frequency 1193182 Hz quality 100
mainbus0 (root)
ACPI: RSDP 0x00000000000F5980 000014 (v00 BOCHS )
ACPI: RSDT 0x00000000BFFE1A2B 000034 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: FACP 0x00000000BFFE18C7 000074 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: DSDT 0x00000000BFFE0040 001887 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: FACS 0x00000000BFFE0000 000040
ACPI: APIC 0x00000000BFFE193B 000090 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: HPET 0x00000000BFFE19CB 000038 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: WAET 0x00000000BFFE1A03 000028 (v01 BOCHS  BXPC     00000001 BXPC 00000001)
ACPI: 1 ACPI AML tables successfully acquired and loaded
ioapic0 at mainbus0 apid 0: pa 0xfec00000, version 0x20, 24 pins
cpu0 at mainbus0 apid 0
cpu0: Use lfence to serialize rdtsc
cpu0: CPU base freq 1500000000 Hz
cpu0: CPU max freq 3900000000 Hz
cpu0: TSC freq CPUID 1497600000 Hz
cpu0: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz, id 0x706e5
cpu0: node 0, package 0, core 0, smt 0
cpu1 at mainbus0 apid 1
cpu1: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz, id 0x706e5
cpu1: node 0, package 0, core 0, smt 1
cpu2 at mainbus0 apid 2
cpu2: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz, id 0x706e5
cpu2: node 0, package 0, core 1, smt 0
cpu3 at mainbus0 apid 3
cpu3: Intel(R) Core(TM) i7-1065G7 CPU @ 1.30GHz, id 0x706e5
cpu3: node 0, package 0, core 1, smt 1
acpi0 at mainbus0: Intel ACPICA 20210930
acpi0: X/RSDT: OemId <BOCHS ,BXPC    ,00000001>, AslId <BXPC,00000001>
LNKS: ACPI: Found matching pin for 0.1.INTA at func 3: 9
LNKB: ACPI: Found matching pin for 0.2.INTA at func 0: 10
LNKC: ACPI: Found matching pin for 0.3.INTA at func 0: 11
LNKD: ACPI: Found matching pin for 0.4.INTA at func 0: 11
LNKA: ACPI: Found matching pin for 0.5.INTA at func 0: 10
acpi0: SCI interrupting at int 9
acpi0: fixed power button present
timecounter: Timecounter "ACPI-Fast" frequency 3579545 Hz quality 1000
hpet0 at acpi0: high precision event timer (mem 0xfed00000-0xfed00400)
timecounter: Timecounter "hpet0" frequency 100000000 Hz quality 2000
pckbc1 at acpi0 (KBD, PNP0303) (kbd port): io 0x60,0x64 irq 1
pckbc2 at acpi0 (MOU, PNP0F13) (aux port): irq 12
fdc0 at acpi0 (FDC0, PNP0700): io 0x3f2-0x3f5,0x3f7 irq 6 drq 2
lpt0 at acpi0 (LPT1, PNP0400-1): io 0x378-0x37f irq 7
com0 at acpi0 (COM1, PNP0501-1): io 0x3f8-0x3ff irq 4
com0: ns16550a, 16-byte FIFO
qemufwcfg0 at acpi0 (FWCF, QEMU0002): io 0x510-0x51b
qemufwcfg0: <QEMU>
ACPI: Enabled 2 GPEs in block 00 to 0F
pckbd0 at pckbc1 (kbd slot)
pckbc1: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard
pms0 at pckbc1 (aux slot)
pckbc1: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
pci0 at mainbus0 bus 0: configuration mode 1
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
pchb0 at pci0 dev 0 function 0: Intel 82441FX (PMC) PCI and Memory Controller (rev. 0x02)
pcib0 at pci0 dev 1 function 0: Intel 82371SB (PIIX3) PCI-ISA Bridge (rev. 0x00)
piixide0 at pci0 dev 1 function 1: Intel 82371SB IDE Interface (PIIX3) (rev. 0x00)
piixide0: bus-master DMA support present
piixide0: primary channel wired to compatibility mode
piixide0: primary channel interrupting at ioapic0 pin 14
atabus0 at piixide0 channel 0
piixide0: secondary channel wired to compatibility mode
piixide0: secondary channel interrupting at ioapic0 pin 15
atabus1 at piixide0 channel 1
piixpm0 at pci0 dev 1 function 3: Intel 82371AB (PIIX4) Power Management Controller (rev. 0x03)
timecounter: Timecounter "piixpm0" frequency 3579545 Hz quality 1000
piixpm0: 24-bit timer
piixpm0: interrupting at ioapic0 pin 9
iic0 at piixpm0 port 0: I2C bus
vga0 at pci0 dev 2 function 0: Red Hat QXL Video (rev. 0x05)
wsdisplay0 at vga0 kbdmux 1: console (80x25, vt100 emulation), using wskbd0
wsmux1: connecting to wsdisplay0
drm at vga0 not configured
virtio0 at pci0 dev 3 function 0
virtio0: network device (rev. 0x00)
vioif0 at virtio0: features: 0x31070020<EVENT_IDX,INDIRECT_DESC,NOTIFY_ON_EMPTY,CTRL_RX,CTRL_VQ,STATUS,MAC>
vioif0: Ethernet address 52:54:00:12:34:56
virtio0: allocated 20480 byte for virtqueue 0 for rx0, size 256
virtio0: using 8192 byte (512 entries) indirect descriptors
virtio0: allocated 81920 byte for virtqueue 1 for tx0, size 256
virtio0: using 69632 byte (4352 entries) indirect descriptors
virtio0: allocated 8192 byte for virtqueue 2 for control, size 64
virtio0: config interrupting at msix0 vec 0
virtio0: queues interrupting at msix0 vec 1
hdaudio0 at pci0 dev 4 function 0: HD Audio Controller
hdaudio0: interrupting at msi1 vec 0
hdaudio0: HDA ver. 1.0, OSS 4, ISS 4, BSS 0, SDO 1, 64-bit
hdafg0 at hdaudio0: vendor 1af4 product 0022
hdafg0: DAC00 2ch: Speaker [Jack]
hdafg0: ADC01 2ch: Line In [Jack]
hdafg0: 2ch/2ch 16000Hz 22050Hz 32000Hz 44100Hz 48000Hz 88200Hz 96000Hz PCM16
audio0 at hdafg0: playback, capture, full duplex, independent
audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for playback
audio0: slinear_le:16 2ch 48000Hz, blk 1920 bytes (10ms) for recording
spkr0 at audio0: PC Speaker (synthesized)
wsbell at spkr0 not configured
virtio1 at pci0 dev 5 function 0
virtio1: block device (rev. 0x00)
ld0 at virtio1: features: 0x10000a54<INDIRECT_DESC,CONFIG_WCE,FLUSH,BLK_SIZE,GEOMETRY,SEG_MAX>
virtio1: allocated 1060864 byte for virtqueue 0 for I/O request, size 256
virtio1: using 1048576 byte (65536 entries) indirect descriptors
virtio1: config interrupting at msix2 vec 0
virtio1: queues interrupting at msix2 vec 1
ld0: 30720 MB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 62914560 sectors
isa0 at pcib0
attimer0 at isa0 port 0x40-0x43
pcppi0 at isa0 port 0x61
spkr1 at pcppi0: PC Speaker
wsbell at spkr1 not configured
midi0 at pcppi0: PC speaker
sysbeep0 at pcppi0
attimer0: attached to pcppi0
acpicpu0 at cpu0: ACPI CPU
acpicpu0: C1: HLT, lat   0 us, pow     0 mW
acpicpu1 at cpu1: ACPI CPU
acpicpu2 at cpu2: ACPI CPU
acpicpu3 at cpu3: ACPI CPU
cpu0: CPU base freq 1500000000 Hz
cpu0: CPU max freq 3900000000 Hz
cpu0: TSC freq CPUID 1497600000 Hz
cpu0: TSC freq calibrated 1425040000 Hz
timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
autoconfiguration error: ERROR: 291025806 cycle TSC drift observed
fd0 at fdc0 drive 0: 1.44MB, 80 cyl, 2 head, 18 sec
ld0: GPT GUID: 078cc71c-d564-4e22-959c-c8c7f2f57b6a
dk0 at ld0: "VMROOT", 54523904 blocks at 64, type: ffs
dk1 at ld0: "VMSWAP", 8388608 blocks at 54523968, type: swap
IPsec: Initialized Security Association Processing.
aes: Intel AES-NI
chacha: x86 SSE2 ChaCha
atapibus0 at atabus1: 2 targets
cd0 at atapibus0 drive 0: <QEMU DVD-ROM, QM00003, 2.5+> cdrom removable
cd0: 32-bit data port
cd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
cd0(piixide0:1:0): using PIO mode 4, DMA mode 2 (using DMA)
WARNING: 1 error while detecting hardware; check system log.
boot device: ld0
root on dk0 dumps on dk1
root file system type: ffs
kern.module.path=/stand/amd64/9.99.92/modules
clock: unknown CMOS layout
wsdisplay0: screen 1 added (80x25, vt100 emulation)
wsdisplay0: screen 2 added (80x25, vt100 emulation)
wsdisplay0: screen 3 added (80x25, vt100 emulation)
wsdisplay0: screen 4 added (80x25, vt100 emulation)

無事にld0にあるdk0から起動できました。

NetBSDでCreative BT-W3を使ってみる

この記事は、NetBSD Advent Calendar 2021の2日目の記事です。 2日目から遅刻してすみません。

はじめに

Bluetooth Audio on OpenBSD with the Creative BT-W3という記事を読む前ではあったのですが、 Bluetooth Audioをより安定してNetBSD/amd64-currentで使いたいと思っていました。 確かにbta2dpd(8)を使えば、A2DPプロファイルでSBCではありますが、btsco(4)を使うよりは良い音質で音を聞くことができます。 2020年8月までNetBSD-currentはxhci(4)でアイソクロナス転送をサポートしていなかったので ですが、今はサポートされていますので、uaudio(4)を使うことができます。 ですので、uaudio(4)として認識されるはずのCreative BT-W3を使ってみることにしました。 2021年1月に最初に試した時には使えなかったのですが、NetBSD-currentでは、2021年6月19日以降は使えるようになっています。

Creative BT-W3とは?

BT-W3は、Bluetooth A2DPプロファイル、または、Hands-FreeプロファイルをUSBオーディオクラスのデバイスに変換してくれるアダプターです。 BT-W3とBluetoothヘッドセットをペアリングしておくと、USBヘッドホンやUSBヘッドセットとして利用できます。 Hands-Freeプロファイルのモードの場合には、Bluetoothヘッドセットのマイクも入力として利用できます。 Creativeの商品紹介ページによると、aptX LLやaptX HDも利用できる らしいですが、私の持っているJabra Move WirelessはA2DPではコーデックとしてSBCしかサポートしていませんので、試せていません。 BT-W3は、USB Type-Cのコネクターで接続するようになっていますが、USB Type-CからType-Aに変換するアダプターが附属しています。

NetBSD/amd64-currentにつないでみる

私が最初に試した2021年1月の時点では、”no usable endpoint found”というエラーでuaudio(4)として機能しませんでした。 どうやら、その時点のuaudio(4)が想定するディスクリプターの登場する順序と、BT-W3の持つ順序が異なっているようです。

NetBSDで動くように

FreeBSDの実装を見てみると、ディスクリプターを一定の順番に処理するNetBSDの実装とは違って、ディスクリプター毎にタイプを判別して 登場する順序によらないような実装になっていました。 Creative HP-BTW3 (BT-W3) USB audio device has another descriptor layout #55919で サポートする方法を模索してみましたが、2021年6月19日にJabra Evolve 75を サポートする変更で無事に動くようになりました。

uaudio0 at uhub4 port 1 configuration 1 interface 0
uaudio0: Creative Technology Ltd (0x041e) Creative BT-W3 (0x3270), rev 2.00/1.00, addr 4
uaudio0: audio rev 1.00
audio1 at uaudio0: playback, capture, full duplex, independent
audio1: slinear_le:16 2ch 48000Hz, blk 11520 bytes (60ms) for playback
audio1: slinear_le:16 1ch 48000Hz, blk 5760 bytes (60ms) for recording
spkr2 at audio1: PC Speaker (synthesized)
wsbell at spkr2 not configured
uhidev0 at uhub4 port 1 configuration 1 interface 3
uhidev0: Creative Technology Ltd (0x041e) Creative BT-W3 (0x3270), rev 2.00/1.00, addr 4, iclass 3/0
uhidev0: 3 report ids
uhid0 at uhidev0 reportid 1: input=2, output=0, feature=0
uhid1 at uhidev0 reportid 2: input=18, output=18, feature=0
uhid2 at uhidev0 reportid 3: input=64, output=64, feature=0
uhidev1 at uhub4 port 1 configuration 1 interface 4
uhidev1: Creative Technology Ltd (0x041e) Creative BT-W3 (0x3270), rev 2.00/1.00, addr 4, iclass 3/0
uhidev1: 4 report ids
uhid3 at uhidev1 reportid 1: input=0, output=65, feature=0
uhid4 at uhidev1 reportid 2: input=65, output=0, feature=0
uhid5 at uhidev1 reportid 3: input=0, output=0, feature=3
uhid6 at uhidev1 reportid 4: input=0, output=0, feature=3

おわりに

実を言うと、bta2dpd(8)も2021年3月7日に-nオプションが追加されています。 これで、より安定して使えるようになっているかもしれません。 でも、Dell XPS 13 9300のxhci(4)デバイスは、そもそもあまり安定していないのですが…。

.asiaドメインのWHOIS Privacyサービス

.asiaドメインは、WHOIS Privacy (お名前.comで言うWhois情報公開代行サービスは 利用できないものと思っていたのだが、少なくとも現在はWHOIS Privacyサービスを使っても良いらしい。

DotAsia OrganisationのFAQページによると、.ASIA General FAQ for Registrars and Resellers の部分に、以下のように書かれていて、.asiaとしては提供しないが登録事業者が提供するのであれば利用できるらしい。

Does .Asia registry allow WHOIS Privacy?

While this is not a service we offer at the Registry level, a number of .Asia Accredited Registrars offer domain privacy or WHOIS privacy for Registrants. WHOIS Privacy is accepted by the Registry.

お名前.comは.asiaのドメイン名にはWhois情報公開代行を提供していないし、 Value Domainも以下のようで自由にはできない

レジストラGMOは代行不可。レジストラeNom/KeySystemsは、WHOIS代行は可能ですが、登録後に登録者情報の変更ができません。

結局、Namecheap.comが安いしWHOIS Privacy (Domain privacy protection)も無料で利用可能 だったので、移管することにした。

「星宝転生ジュエルセイバー」の素材を利用する場合について考えてみた

「星宝転生ジュエルセイバー」というスマートフォン向けのゲームがあって、そのサービス終了時に利用規約にあるような条件で、 二次利用ができることになっている。 とは言っても、jewel-s.jpというドメインは、既に元の所有者である株式会社ブリリアントサービスの所有ではないようだし、株式会社ブリリアントサービスは Cognizantに買収されて、現在はコグニザントジャパンというCognizantの日本法人になっているようで、brilliantservice.co.jpのドメインも他の人に取得されている。

二次利用できるコンテンツはjewel-s-free101j.zipというファイルに含まれている内容であり、利用規約を読む限りでは、このZIPファイルの再配布に制限はなさそうだ。 開発に関与した有川光太さんという方の「noteはじめました」という記事でも、このZIPファイルの再配布に制限は ないと書いているし、まあ普通に読めば再配布には問題ないと理解できる文章であると思って良いように思われる。 その中のreadme.txtにある内容は、項番4以外は簡単に満足させられる。 項番4は以下のようになっている。

4.事後の報告を欠いた利用
「フリーコンテンツ」を利用した作品の公開から4週間以内の報告が必要となります。専用報告フォーム (https://docs.google.com/a/brilliantservice.co.jp/forms/d/1N4xCA6lY_5d_pNC0TSLJMg-GqJyY2jDhmOvegN1QRjU/viewform)への事後報告をしてください。

簡単に満足させられないというのは、この「専用報告フォーム」が、2021年8月10日時点、既に存在しないという点である。

「星宝転生ジュエルセイバー」には公式Twitterアカウントがあって、当然、既に更新などされていないのだが、それを見てみると、 https://twitter.com/jewelsavior/status/636487745360162816というtweetがある。 これによると、@jewelsaviorにメンションして、ゲーム名とその運営者が分かるユーザー名を連絡すれば良いとの記述がある。 元々は、公開で利用の許諾を得ていることを宣言するためのものだったようだが、今はこれしかないので、これで報告するのが項番4を満足させる唯一の方法であるように思われる。 実際、結構な数のメンションがこのtweetに連なっている。

web.archive.orgでjewel-s.jpを見てみると、以下のようにQ&Aが書かれている。

どんな形で報告すれば良いでしょうか?
「書籍に利用」「ゲームアプリに利用」「イベントフライヤーに利用」などの簡素な報告で問題ありません。 ただし、作品が公に発表される類のものである場合は作品を確認するための情報を添えて下さい。 Web上に作品を紹介したり販売するためのページがある場合はURLを、Webでの確認が難しい場合は販売・発表の場所や販売元等の情報をお願いします(個人間やクローズドな組織内での利用等、公にはしない類のものであれば不要です)。

これに従ってメンションするので良いと考えて良さそうだ。 これで、どこかで発表する資料でこの素材を使うことはできそうだ。

本当は、コグニザントジャパンに問い合わせて項番4を取り消してもらえれば良いのだろうが…。

HTTP_PROXY環境変数に記号を含めたい場合

RubyのURI.parseでプロキシーサーバーを設定する際にパスワードとして使えない文字と言う記事で、 ユーザー認証付きのプロキシーサーバーの認証情報付きのURIをWindowsのHTTP_PROXY環境変数に指定する際の条件について書いていた。

いまいちescaped = % hex hexの場合がどうなるのか分からないが…。

と書いていたが、使えない文字(記号など)は普通にURLエンコードすればパスワードとして使用できるようだ。 元記事はJRubyの場合で、今はJRubyの環境ではチェックできなかったが、Go言語で書かれたプログラムでは、URLエンコードされたものは利用できた。

ただ、URLエンコードしない場合にGo言語で書かれたプログラムがどうなるかはチェックしなかった。その環境でチェックできるのはしばらく先になりそうだが、確認しておきたい。

NetBSD上のPuTTYでUnix domain socket経由でsshアクセスしてみる

PuTTY 0.75の変更点によると、 PuTTYのツールでUnix domain socketが接続先等に指定できるようになっている。

The Unix tools can now connect directly to a Unix-domain socket.

OpenSSHのsshコマンドはUnix domain socketに接続はできないようだし、sshdもUnix domain socketで接続を待ち受けることは できないようだが、sshコマンドでport forwardingでUnix domain socketを転送の元としても先としても利用できるようだ。

以下のようにすることで、remotehostホストで起動するsshdが22番portで待ち受ける接続を、 /tmp/test.sockからアクセス可能にする。 -o StreamLocalBindUnlink=yesは、/tmp/test.sockが既に接続済みである場合に上書きして作成するように指示している。

$ ssh -o StreamLocalBindUnlink=yes -NL /tmp/test.sock:remotehost:22 localhost

以下が接続した場合の例である。

$ plink -ssh /tmp/test.sock
WARNING - POTENTIAL SECURITY BREACH!
The server's host key does not match the one PuTTY has
cached. This means that either the server administrator
has changed the host key, or you have actually connected
to another computer pretending to be the server.
The new ssh-ed25519 key fingerprint is:
ssh-ed25519 255 SHA256:xxxx
If you were expecting this change and trust the new key,
enter "y" to update PuTTY's cache and continue connecting.
If you want to carry on connecting but without updating
the cache, enter "n".
If you want to abandon the connection completely, press
Return to cancel. Pressing Return is the ONLY guaranteed
safe choice.
Update cached key? (y/n, Return cancels connection, i for more info) y
Using username "username".
Access granted. Press Return to begin session.
Last login: Sat Jul 24 01:10:29 2021 from xxxx
NetBSD 9.1_STABLE (XEN3_DOMU) #2: Wed Jan  6 15:28:26 JST 2021

$

OpenSSHでsocksなプロキシーサーバーを実現する

IPアドレスでアクセスして来た利用者の地理的な位置を認識するウェブサービスというのはいろいろとあって、 その制限を回避してまでそういうサービスを利用しようとは思わないのだが、明確に制限されているということが分からないような 表示になっている場合があって、そういう場合には他の地理的場所のIPアドレスからアクセスしたい場合がある。

これまでは、U.S.にあるVPSを借りているので、そこにsshでログインしてw3mでアクセスしていたが、 JavaScriptどころかCSSでさえもサポートされていないので、目的を達成できないことも多かった。

良く考えるとOpenSSHのport forwardingでSocksサーバーくらい実現できるような気がしたので調べてみると、 UbuntuのページにあるDynamic Port Forwardingを 解説しているページを見つけた。

sshコマンドを実行するホストと同じホストでブラウザーを動かすのであれば、以下のように実行すれば良い。 この場合、sshはlocalhostからしか接続できない。

$ ssh -D 1080 -N remotehostnameinus

sshコマンドを実行するホストとは違うホストでブラウザーを動かしているのであれば、どのホストからもアクセスできるように、以下のように実行すれば良い。

$ ssh -g -D 1080 -N remotehostnameinus

これをFirefoxで、プロキシー設定のホスト欄にsshを実行しているホストのホスト名かIPアドレスを設定し、 ポート番号欄には1080を指定すれば良い。 FirefoxであればSOCKS v5でもSOCKS v4でもどちらでも良いようだ。

NetBSDでホスト名にアンダースコア(_)が入っていても不正なホスト名と認識されないようにする

Bloggerのpreviewは、アンダースコア(_)が入っているホスト名を利用している。 NetBSDは、かつてはアンダースコア入りのホスト名は許されていなくて、libc resolver library does not resolve host names with underscores ("_")でデフォルトで許容するようになっていた。 最近の議論を追えていないのだが、2021年4月30日に 戻されて、/etc/resolv.confno-check-namesオプションを指定しないと、アンダースコアが含まれているホスト名は許容されないようになっていた。 Bloggerで書いている以上、アンダースコアを含んだホスト名を許容しない訳にはいかないので、/etc/resolv.confno-check-namesオプションを含めておかなくてはいけない。 だが、/etc/resolv.confdhcpcd(8)を実行する度に内容が書き変わってしまうので、手で/etc/resolv.confで書き換えても永続化はできない。 /etc/resolvconf.confで設定して、/etc/resolv.confを再生成する度に、no-check-namesオプションを含めておくようにすれば良い。

$ cat /etc/resolvconf.conf
resolv_conf_options=no-check-names

こうしておくと、以下のようにoptions no-check-namesを含んだ/etc/resolv.confが生成される。

$ cat /etc/resolv.conf
# Generated by resolvconf
domain mylocalnetworkdomain
nameserver xxx.xxx.xxx.xxx
options no-check-names

JPEG形式の写真のEXIFデータを削除する

ディジタルカメラでJPEG形式で撮影した画像には、カメラや撮影条件の情報がEXIFデータとして含められている。 場合によっては、このEXIFデータを削除したい場合がある。 調べてみると、ImageMagick-stripオプションを付けたmogrifyコマンドで 簡単に削除できた。 以下のように実行すれば良い。

$ mogrify -strip *.JPG

Toshiba dynabook R731/16BでCloudReadyを使い、Chromium OSマシンとして使ってみる

東芝dynabook R731/16Bというラップトップを持っている。 Microsoft Windows 10も動くのだが、CPUはIntel Core i3-2310Mだし、メインメモリーも2GBなので、あまり快適ではない。 かといって、NetBSD/amd64をインストールしても、開発するには非力過ぎる。

最近はChromebookのシェアが伸びていると聞いて、そういえば何年か前はChromium OSを独自ビルドして配布している人がいたのを思い出して探してみた。 最近は放送大学のテレビ・ラジオの講義のインターネット配信がWidevine CDMを使っているので、これが視聴できれば便利である。 ちなみに、Chromebookとして販売されているラップトップでは、正常に視聴できると分かっている。

そこでChromium OSの独自ビルドを探してみると、2021年も熱心に安定版をビルドして配布している人はあまりいないようだ。 その中で、Googleに買収されたNeverwareという会社のCloudReadyの Homeエディションが無料で使えることが分かった。 ただ、安定版はChromium OS 89ベースだった。Chromium OS自体の最新安定版は91である。最新のDev channelとして提供されるのも90.1であるようだ。

インストールは、USBスティックにダウンロードしたイメージファイルを書き込んで、そこから起動させ、メニューのInstall OSから実行すれば、内蔵HDDにインストールできる。

当初の目的であったWidevine CDMを使ったビデオ配信は、問題なく視聴できた。 ちなみに、Androidアプリのインストールはサポートされていないし、サポートする予定もないとのことだ。 Linuxバイナリーの実行はメニューにはあったので有効化できそうだ。

How to use Zoom Video Conferencing with pkgsrc/www/firefox-88.0 under NetBSD/amd64 9.99.82

Zoom Video Conferencing supports Mozilla Firefox after 76.0 release The pkgsrc has Mozilla Firefox package as pkgsrc/www/firefox. And it is 88.0 as of 2021-04-26. You can install pkgsrc/www/firefox under NetBSD/amd64 9.99.82. The latest NetBSD/amd64-current (for example, 9.99.82) support XHCI isochronous transfer and you can use USB webcam with uviceo(4) device driver. And you can send and receive voices with pulseaudio option of pkgsrc/www/firefox. I will explain how to setup Zoom ready environment with pkgsrc/www/firefox-88.0 under NetBSD/amd64 9.99.82.

Update your NetBSD/amd64-current to the latest

uvideo(4) device driver for USB Video Class (UVC) webcams uses USB isochronous transfer. The latest NetBSD supports XHCI isochronous transfer and you should update your NetBSD/amd64-current environment to the latest. pkgsrc/www/firefox-88.0 should be built for NetBSD/evbarm64-current too. If your aarch64 machine has USB host controller that supports isochronous transfer, you can use the host controller to connect your UVC webcam.

If your machine has EHCI as host controller, you can connect UVC webcam to the ports that are controllerd by EHCI. As far as I understand correctly, NetBSD 9.1's ehci(4) device driver for USB EHCI supports isochronous transfer. If you use EHCI, it is not required to update your NetBSD to the latest current.

I tests UVC webcam on my Toshiba dynabook R63/PS laptop. Logitech Webcam C300 (VendorID/ProductID=0x056d/0x0805) and dynabook's internal UVC webcam (VendorID/ProductID=0x04f2/0xb3b2) work fine. The laptop has VendorID/ProductID=0x8086/0x9cb1 as XHCI and it works fine for USB isochronous transfer with uvideo(4) and uaudio(4). I have another laptop, Dell XPS 13 9300 and it has two XHCIs, VendorID/ProductID=0x8086/0x8a13 and 0x8086/0x34ed. The XHCIs do not work for uvideo(4) and works for uaudio(4). I do not figure out why NetBSD-current's XHCI USB isochronous support does not work for Dell XPS 13 9300 yet. If your UVC webcam displays camera image in very low frame-per-second (for example, 1/120 fps or lower), you encountered the same problem with my Dell XPS 13 9300.

Prepare pkgsrc packages

By default, pkgsrc/www/firefox-88.0 does not use PulseAudio audio backend and I cannot send my voice via WebRTC. pkgsrc/www/firefox under NetBSD uses Sun audio backend by default. I do not investigate deeper however I cannot send my voice with Sun audio backend. Of course I can receive and play the other's voice. I should identify why Sun audio backend does not work for audio capture, however I could not find a time.

Anyway, prebuit package (binary package) of pkgsrc/www/firefox does not have pulseaudio support and you must build and install pkgsrc/www/firefox from the source code tarball. If you have up-to-date pkgsrc tree in your /usr/pkgsrc, you can build and install pkgsrc/www/firefox as follows:

# cd /usr/pkgsrc/www/firefox
# make PKG_OPTIONS.firefox=pulseaudio install

After some hours, you can get PulseAudio ready Mozilla Firefox web browser for your NetBSD environment.

Set fake user-agent string for your Mozilla Firefox

The Firefox under NetBSD/amd64 has the following user-agent sting by default.

Mozilla/5.0 (X11; NetBSD amd64; rv:88.0) Gecko/20100101 Firefox/88.0 

Zoom Video Conferencing's web client checks the user-agent string and it rejects the web browser because my environment is not supported. Firefox add-on market has many user-agent switchers. I am usindg User-Agent Switcher by Linder to change my user-agent string to Linux. You must set your user-agent sting to Firefox under Linux. However its user-agent string indicates very old Firefox user-agent string (Firefox 31.0's). You must update your Firefox under Linux user-agent string as follows, for example:

Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/81.0

Of course this is strange and inconsistent, however Zoom does not check rv value (31.0) and you should update the last number to newer (81.0).

Start your video conferencing with Zoom web client

Follow Quick start guide for the Zoom web client instructions to connect to Zoom with the Firefox. I have no idea that Zoom video conferencing uses WebRTC. However video and audio captures use WebRTC interface at least. You can select video and audio sources in WebRTC source selection user interface of Firefox.

If your have problems to capture video, WebRTC samples getUserMedia: select resolution will help you to debug your situation. If you have problems in audio capture, WebRTC samples Audio stream volume is useful.

For audio capture, you should check your audio mixer settings with mixerctl(1) command. In my case, input source (laptop's internal microphone) is set as muted by default. I have the following /etc/mixerctl.conf file.

$ cat /etc/mixerctl.conf
inputs.reclvl.mute=off

Audible (www.audible.co.jp)のオーディオブックをNetBSD/amd64上のFirefox 87.0で再生する

AudibleというAmazonのやっているウェブサービスがあって、 当然のようにその音声データはWidevine CDMがないNetBSD/amd64上のFirefoxでは再生できないと思っていたのだが、 実際に試してみると再生できる。 その際、"The clearkey plugin has crashed."という警告メッセージが出るので、DRMを使おうとしているのだとは思うが、 使えなかった場合には、フォールバックする仕組みがあるのか、問題なく再生できる。

Spotifyで再生しようとした際にも、このclearkeyプラグインの警告は表示されていたはずで、Spotifyでは一切再生 できなかったように記憶している。

そもそもclearkey CDMを実際に利用しているサービスがあるような気が全くしないのだが、もし本当にAudibleが利用しようとしていて、 プラグインがクラッシュしているのであれば、pkgsrc/www/firefoxで直さないといけないように思う。

放送大学の「インターネット公開講座」

ずいぶんと長い間、放送大学の全科履修生(卒業して学士(教養)の学位をもらえる学生)をやっている。 最近では、放送授業のインターネット配信を自由に利用できるというのが、学生を継続している大きな理由であるように思う。 放送大学は、今はBSテレビとBSラジオで全国放送をするようになっている。 放送授業は、テレビはBS 232チャンネル、ラジオはBS 531チャンネルで放送されている。 この内容は基本的には学生向けのインターネット配信ウェブサイトで配信されていて、自分が受講している放送授業以外も自由に 視聴することができる。 BSテレビでは、生涯学習支援チャンネルであるBS 231チャンネルという放送もあって、スペシャル講義という区分の番組や、 放送大学アーカイブスという区分の過去の放送授業の再放送、日本語教育の講義、プログラミング教育の講義、データサイエンスの講義、情報セキュリティーの講義などが 放送されているはずである。 私はテレビ放送を見る習慣がないので、全くこれらの番組を視聴することができていなかった。

学生証の更新で、学習センターに行ったところ、広報誌ON AIRの紙版が置いてあって、そこで「放送大学インターネット公開講座」 と言うのが特集されていた。ウェブサイトを見てみると、下の方にリンクも存在する。 これまで存在に全く気付いていなかった。

ラインナップを見てみると、データサイエンスについての一部の講義と、プログラミング教育の講義以外は、無料で視聴できることが分かった。 逆に、データサイエンスについての講義の一部やプログラミング教育の講義は有料であり、受講するとテストがあり、合格するとOpen Badge v2仕様のデジタル認証バッジを取得できるらしい。

BS 231チャンネルで放送されている番組の全てがインターネット公開講座として存在している訳ではないし、BS 231チャンネルで視聴できてインターネット公開講座で有料のものもあるので、 完全に代替にはならないかもしれないが、チェックはしておきたい。

学生向けのインターネット配信は、どうやらWidevine CDMを使って配信されているようだ。 一方で、インターネット公開講座はVimeoベースのようで、DRMはない。NetBSD/amd64上のFirefoxでも視聴できる。

新しいリムネットのSMTPサーバーの認証方式を調べmsmtpで使う

リムネットの電子メールアドレスのみ目的として、ずいぶんと長い期間利用してきている。 2021年4月1日から、私のような電子メールアドレスだけ維持したい人にとっては、大幅値上げとなった。

値上げを機会にウェブサイトを見てみたところ、これまでのSMTP AUTHだけでなく、StartTLSもサポートされるSMTPサーバーが案内されていた。 しかし、いつものようにWindowsやmacOSのメールユーザーエージェントでの設定マニュアルしかなく、肝心な認証方式が明示されていない。 これまでであれば、telnetで接続して確認すれば良かった訳だが、StartTLSが必要なのでtelnetでは難しい。 OpenSSLのs_clientであればできたので、認証方式の確認方法を書いておく。

$ openssl s_client -connect mails.rim.or.jp:587 -starttls smtp
CONNECTED(00000006)
depth=2 C = JP, O = "SECOM Trust Systems CO.,LTD.", OU = Security Communication RootCA2
verify return:1
depth=1 C = JP, O = "Japan Registry Services Co., Ltd.", CN = JPRS Domain Validation Authority - G4
verify return:1
depth=0 CN = mails.rim.or.jp
verify return:1
---
Certificate chain
 0 s:CN = mails.rim.or.jp
   i:C = JP, O = "Japan Registry Services Co., Ltd.", CN = JPRS Domain Validation Authority - G4
 1 s:C = JP, O = "Japan Registry Services Co., Ltd.", CN = JPRS Domain Validation Authority - G4
   i:C = JP, O = "SECOM Trust Systems CO.,LTD.", OU = Security Communication RootCA2
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGyjCCBbKgAwIBAgIQT532t4NDUWB7LXzNmQGlvDANBgkqhkiG9w0BAQsFADBp
MQswCQYDVQQGEwJKUDEqMCgGA1UEChMhSmFwYW4gUmVnaXN0cnkgU2VydmljZXMg
Q28uLCBMdGQuMS4wLAYDVQQDEyVKUFJTIERvbWFpbiBWYWxpZGF0aW9uIEF1dGhv
cml0eSAtIEc0MB4XDTIwMDkwMTAxMTY1NFoXDTIxMDkzMDE0NTk1OVowGjEYMBYG
A1UEAxMPbWFpbHMucmltLm9yLmpwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEArEKY/HOWHwsO+BZ9cOqUD9Pm3UoUQlL4wodhBiTmnpKl9bwZoNEQiKer
cINLVdvK1cFEXJdvR/DS91l1NRHNEuA++bdIFEjynLyZOsc13a9Ph2DAnC3JWVAD
n7PqgHL7eIqAg1encmoFTM++2hrGQ0ibHQ0YaJ6ksdJO4hiX4vBMVV+qDq0eRfeq
yexcTxVfzj0x13M77lQJs+6hwEX5+OuY+nTY9EfOHuWsCTpvtOWdKpq5jB83IwW9
KsAvNv7xpVMFevfFojYpVho4BuiAsyg0WYO1xnxcUIxO8eaiubIf7qKXXxFNK+sO
DR3JbEuEQ/ICK/D/vNVEChZr5ziWVwIDAQABo4IDuzCCA7cwHwYDVR0jBBgwFoAU
fCTODaQ4LcezY16neHqNHUwuxxUwgZAGCCsGAQUFBwEBBIGDMIGAME8GCCsGAQUF
BzAChkNodHRwOi8vcmVwby5wdWJjZXJ0LmpwcnMuanAvc3BwY2EvanBycy9kdmNh
X2c0L0pQUlNfRFZDQV9HNF9ERVIuY2VyMC0GCCsGAQUFBzABhiFodHRwOi8vZHYu
ZzQub2NzcC5wdWJjZXJ0LmpwcnMuanAwGgYDVR0RBBMwEYIPbWFpbHMucmltLm9y
LmpwMFkGA1UdIARSMFAwRAYLKwYBBAGDpEMBAQQwNTAzBggrBgEFBQcCARYnaHR0
cDovL2pwcnMuanAvcHViY2VydC9pbmZvL3JlcG9zaXRvcnkvMAgGBmeBDAECATAT
BgNVHSUEDDAKBggrBgEFBQcDATBLBgNVHR8ERDBCMECgPqA8hjpodHRwOi8vcmVw
by5wdWJjZXJ0LmpwcnMuanAvc3BwY2EvanBycy9kdmNhX2c0L2Z1bGxjcmwuY3Js
MB0GA1UdDgQWBBSgR+YQ5YQATT7SK/uFkT60pIVUtzAOBgNVHQ8BAf8EBAMCBaAw
ggH3BgorBgEEAdZ5AgQCBIIB5wSCAeMB4QB2APZclC/RdzAiFFQYCDCUVo7jTRMZ
M7/fDC8gC8xO8WTjAAABdEdGLawAAAQDAEcwRQIhAIKqb8G+6QO/sGeA1na5J9Wl
XkUX3NmRKL0tZoxYV/NqAiAtR+b9EL6xwbp+cmWTWXVWStWyT+ZozCVdXcenKF+J
zwB3AH0+8viP/4hVaCTCwMqeUol5K8UOeAl/LmqXaJl+IvDXAAABdEdGL50AAAQD
AEgwRgIhAIbErwl45/bM5zpLjLLdFkcuGJD3YcZnkmBl9l3QNoKNAiEA4lvcivQg
7/vdNP8A/Wt2UCNOgmgUCFm8Z3XHvZpARn0AdwBc3EOS/uarRUSxXprUVuYQN/vV
+kfcoXOUsl7m9scOygAAAXRHRjJ8AAAEAwBIMEYCIQC5Oy/GKwlsw8Pqdm52Z3sv
K4GvwT2wdt4jrnGMvAMr0QIhAJlkD+Pf0Bph5bPMAI79Y59G6/KxM9RbWz9roUe+
vsAcAHUARJRlLrDuzq/EQAfYqP4owNrmgr7YyzG1P9MzlrW2gagAAAF0R0Y0+QAA
BAMARjBEAiBODY+IO45a5lw9RSrpmTP0k4jHLZQEeGb+dskIqwj8RwIgBI+Bbfe9
L7DX/m3ZGPFHfNhmgCFqIKCOBT1t2CeaIcUwDQYJKoZIhvcNAQELBQADggEBAC0k
IxsaSU4+bZmedGHEi7Hi+1Qcn+NecMJKk2ZdraToO5C5bw7lOnNG1P3MHrmKVcFA
kGJrcVjsQ7Q88HWT2aFsCw816ASEaPV4ObRV9Ez7FGaOITf86q0HXDViYxSxglmR
+iXM4kS3fB18b4PgZaH94Lyd5O1IWMT74fd/gpHcl8UNmzXHHDTlVDd6pNjGgmog
SzDjXqTZ1EUkCw6uDbFAgrtCQjQ8MkcUDD8P8TGOfyVh7v7NPXBpOoO/gy15cJwT
uEuz98o0i2czkZ8oPEjLJTxbrRhWZaAwhMaLjMQYPCM4L5YgHH/XReniJYg1Zj9A
1RzTkI/+mfaZUFpLuJc=
-----END CERTIFICATE-----
subject=CN = mails.rim.or.jp

issuer=C = JP, O = "Japan Registry Services Co., Ltd.", CN = JPRS Domain Validation Authority - G4

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3831 bytes and written 476 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 35F0843AB35F26236A543CAF46B32CFA23939B0278B9980723C0B28A51CB3074
    Session-ID-ctx:
    Master-Key: D9F4A55EB36CC3BAA5EAEDFD8F0A7E21EE5C57EEFBF7507DD83D06F3FAEB3C8C453116CEB73D90CE8054B333E61D08C9
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1618408385
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
---
250 DSN
EHLO mail.rim.or.jp
250-access05.SiriusCloud.jp
250-PIPELINING
250-SIZE 57671680
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5と表示されているので、以前通りCRAM-MD5を継続利用できた。

と言うことで、~/.msmtprcは以下のようにすれば良い。

account rimnet
tls on
tls_certcheck off
tls_starttls on
host mails.rim.or.jp
port 587
protocol smtp
auth cram-md5
from username@xx.rim.or.jp
user username@xx.rim.or.jp
password "YOURPASSWORD"

比較のため、これまで利用していたSMTPサーバーの返答も記載しておく。

$ telnet mail.yk.rim.or.jp 587
Trying 219.118.67.45...
Connected to mail.yk.rim.or.jp.
Escape character is '^]'.
220 mail.yk.rim.or.jp ESMTP (submission cluster node 03)
EHLO mail.yk.rim.or.jp
250-access03.SiriusCloud.jp
250-PIPELINING
250-SIZE 57671680
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Dell XPS 13 9300を再度修理してもらった

購入直後に修理してもらったDell XPS 13 9300だが、 ファンが大きな異音を発生するようになってしまったので、訪問修理をしてもらった。

2021年4月5日11:48ごろ

修理受付のフリーダイヤルの電話番号へ電話し、ファンから大きな異音が発生している旨を伝えた。 自己診断機能を電話中に実施したがエラー表示はなく、既にBIOSも最新化してあったため、 訪問修理をしてもらうことになった。オペレーターにはすぐにつながり、約30分間の通話だった。 電話の最後に、電子メールアドレスの確認のため、電子メールのテスト送信がされた。 修理前後の部品の配送はヤマト運輸で行うとのことであった。

2021年4月5日16:36ころ

訪問修理のスケジュール調整をする電話があり、2021年4月8日16:00から17:00の間に来訪してもらい、 修理をしてもらうこととなった。

2021年4月6日12:00ころ

訪問修理の訪問先である自宅に交換部品が届いた。薄型ではあるがサイズは結構大きい荷物だった。 航空便という扱いの荷物であった。 サポートウェブページによると、ファン2つとヒートシンク、その他小物の部品が入っているらしい。

2021年4月8日16:30ころ

技術者が来訪し、免責のサインをiPhone上でした上で作業を開始した。

2021年4月8日16:54ころ

ファンを左右2つ交換し、動作確認を実施した。 ファン交換前は、envstat(8)コマンドで確認すると、すぐにCPU温度が95℃以上になっていたのだが、 pkgsrc/www/firefoxをmake buildしてみても、85℃くらいまでしか温度が上昇しないようになった。 ファンは右側が故障している可能性があるとのことだったが、念のため左右ともに交換されたとのことであった。 最後に修理完了とのことで、再度iPhone上でサインをした。

2021年4月10日

修理の満足度調査回答依頼の電子メールが来ていたので、ウェブページから回答した。

2021年4月12日14:45ころ

交換済みの部品や修理に使用しなかった部品の入っている荷物を、ヤマト運輸で料金着払いで回収してもらった。

無償の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/

HP ProBook 450 G7のタッチパッドをMicrosoft WIndows 10 1909以前で利用する

HP ProBook 450 G7を購入したところ、Microsoft Windows 10 2004がインストールされていた。 これを都合があってMicrosoft WIndows 10 1903にダウングレードして利用しようとしたところ、 内蔵のSynaptics製のタッチパッド(ClickPad)が認識されず、利用できなかった。

HPのフォーラムでの投稿を参考にして、 デバイスドライバーの配布ページからダウンロードできる Intel Serial IO Driver - Comet Lake 30.100.2020.7 Rev.Aというデバイスドライバーをインストールすると、認識され使えるようになった。

このデバイスドライバーは、Microsoft Windows 10 1909でも必要だった。

ローカルで大容量・多数のファイルをバックアップしたい場合

ネットワーク経由ではなく、ローカルのハードディスクドライブ間で多数・大容量のファイルをバックアップしたい場合にも、私はrsyncを使っている。 途中経過を表示してくれるし、途中で止まってしまった場合にもリカバリーが簡単だろうという意図である。 幸運にも途中で止まったことはないのだが、2回目以降は-uオプションを付ければ良いはずと考えている。

$ rsync -av /share/a/data/ /share/c/data/

Amazon Fire TV Stick第1世代のOSバージョンアップ

しばらく電源を入れていなかったAmazon Fire TV Stick (第1世代)があるのだが、後々面倒になるといけないのでOSのバージョンアップを しておくことにした。気付いたことを書いておきたい。

アップデート方法

Fire TVのソフトウェアをアップデートするに あるように、設定→My Fire TV→バージョン情報→アップデートを確認の順で選択すれば、OSアップデートすることができる。

しかし、複数バージョンのアップデートがある場合、一気に最新のバージョンにアップデートすることはできず、1世代ずつ順々に適用していくこととなる。

最新のバージョン

Fire TV端末およびアクセサリのソフトウェアアップデートに 記載のあるようなバージョンが各Fire TVデバイスの最新のOSのバージョンである。 しかし、2021-01-02現在、私の持っているAmazon Fire TV STick第1世代と第2世代は、いずれもFire OS 5.2.7.7ではなく5.2.7.6までしかアップデートできなかった。 新しいバージョンを見つけられないようだった。

MPEG 2.5

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