PEMファイルの中身をダンプする

PEM形式のファイルの中身を確認するには、以下のようにすれば良い。

$ openssl x509 -in isrgrootx1.pem.txt -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            82:10:cf:b0:d2:40:e3:59:44:63:e0:bb:63:82:8b:00
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = Internet Security Research Group, CN = ISRG Root X1
        Validity
            Not Before: Jun  4 11:04:38 2015 GMT
            Not After : Jun  4 11:04:38 2035 GMT
        Subject: C = US, O = Internet Security Research Group, CN = ISRG Root X1
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (4096 bit)
                Modulus:
                    00:ad:e8:24:73:f4:14:37:f3:9b:9e:2b:57:28:1c:
                    87:be:dc:b7:df:38:90:8c:6e:3c:e6:57:a0:78:f7:
                    75:c2:a2:fe:f5:6a:6e:f6:00:4f:28:db:de:68:86:
                    6c:44:93:b6:b1:63:fd:14:12:6b:bf:1f:d2:ea:31:
(snip)

Windows 10 1909で、ローカルのDNSキャッシュを消去する

Windows 10 1909で、ローカルのDNSキャッシュを消去するには、コマンドプロンプトで以下のように実行すれば良い。

> ipconfig /flushdns

Windows 10 1909で、IPv6が有効な時に、IPv4のDNSを優先する

自宅のネットワークでは、IPv4でしかDNSサーバーを運用していない。これは、ISC DHCPDとBINDを組み合わせて 動的にホスト名を割り当てるようにしている。 IPv6は、IPoEな接続をそのまま使っているので、IPoE接続側は自宅外のDNSサーバーを配って来る。 こういう環境では、Windows 10 1909は、IPv6の自宅外のDNSサーバーを優先して使ってしまうため、 自宅内の動的に割り当てたホスト名で他のマシンにアクセスできない。 IPv6のDNSサーバーに以下のように手動登録すれば、IPv4のDNSサーバーを優先できる。

ffff:192.168.0.1

The pkgsrc guideとEPUB

この記事は、NetBSD Advent Calendar 2019の22日目の記事です。

はじめに

ちょっと目を離した隙に、Jupyter NotebookがNetBSD/amd64-currentで動かなくなってしまっていたので、 The pkgsrc guideのEPUB版を作る話を書きたいと思います。

以下で作成したEPUBファイルの動作は、iPad Pro上のApple BooksアプリのEPUBビューアー機能で確認しました。

EPUB版The pkgsrc guideを作成する前提条件の確認

2019年1月4日12:15 (UTC)くらい以降のpkgsrcツリーのpkgsrc/doc/guideディレクトリーで作業する必要があります。 distinfoファイルに、pkgsrc-guide/htdocs-share-20200104.tar.gzファイルが登録されていれば大丈夫です。

The pkgsrc guideの生成

The pkgsrc guidleは、以下の形式で作成することができます。 括弧内は、OUTPUTS変数に設定することで生成対象にするときの名前です。

  • 1つのHTMLファイル (html)
  • 章毎に分かれたHTMLファイル (html-split)
  • PDFファイル (pdf)
  • プレインテキストファイル (ascii)
  • EPUBファイル (epub)

標準では、EPUBファイルは生成されません。明示的にEPUBファイルを生成するようにOUTPUTS変数に指定する必要があります。 つまり以下のように実行します。

$ cd /usr/pkgsrc/doc/guide
$ make OUTPUTS=epub
こうすると、${WRKSRC}/pkgsrc.epubとしてEPUB版のThe pkgsrc guideが生成されます。

今後について

The NetBSD guideも少しの修正でEPUB版を生成できるはずですので、 試してみたいと思います。

NetBSDでゲームパッドを使ってシューティングゲームをしてみる

この記事は、NetBSD Advent Calendar 2019の21日目の記事です。

はじめに

NEC PC-9801全盛の時代に、Bio_100%のMarkadiaという縦スクロールシューティングゲームをしたことがありました。 それ以来、ゲームというものには手を出していなかったのですが、久し振りにやってみたいと思いました。 ですが、手元のラップトップは、ゲームでキーボードを酷使して問題ないようには見えません。 ここでゲーミングキーボードを買って来るという選択肢もありましたが、USB接続のゲームパッドを使ってみることにしました。 USB接続のLogicool製のGamepad F310というのを選びました。

ゲームを選ぶ

pkgsrc/games以下には、450以上のゲームが登録されていますが、縦スクロールシューティングゲームに近いものは多くはないようです。 以下が候補になりました。

  • KoboDeluxe
  • naev
  • astromenace
  • chromium-bsu
  • taisei
  • xkobo

今回は、chromium-bsuをやってみることにします。 taiseiも試したのですが、NetBSDでゲームパッドを使うには何か修正が必要なようですので、今回はパスします。

chromium-bsuをインストールする

chromium-bsuのインストールは以下のようにします。

# cd /usr/pkgsrc/games/chromium-bsu
# make install
ここで、chromium-bsuはバージョン0.9.16.1nb1以降を使うようにします。 このバージョンから、SDL2経由でゲームパッドを利用できます。

ゲームパッドを接続する

Logicool Gamepad F310には2つのモードがあります。XモードとDモードです。 背面のスライドスイッチで切り替えが可能です。 Xモードでは、USB Product ID = 0xc21d、Dモードでは、USB Product ID = 0xc216と、モード毎に別々のIDが割り振られています、 スライドスイッチを切り替えると、一度抜き差ししたのと同じような挙動をします。

(Dモードで接続)
uhidev0 at uhub2 port 1 configuration 1 interface 0
uhidev0: Logicool (0x46d) Logicool Dual Action (0xc216), rev 2.00/4.14, addr 6, iclass 3/0
uhid0 at uhidev0: input=8, output=7, feature=0
(Xモードへ切り替え)
uhid0: detached
uhidev0: detached
uhidev0: at uhub2 port 1 (addr 6) disconnected
uhidev0 at uhub2 port 1 configuration 1 interface 0
uhidev0: Logicool (0x46d) Gamepad F310 (0xc21d), rev 2.00/40.14, addr 7, iclass 255/93
uhid0 at uhidev0: input=20, output=6, feature=0

XモードかDモードか

Dモードは旧来のモード、Xモードはより新しいモードであるようです。 SDL2のBSD用のjoystickサポートは、Dモードを前提としているようです。 Xモードのサポートは、Linuxのevdevを前提としているようにも見えます。 実際、XモードのF310では、キャリブレーションをしても使えるようになりませんでした。 NetBSDのUSB HID関連のカーネルソースコードを見ると、XBox用のゲームパッドのサポートコードがあります。 同様にカーネルでのサポートが必要なのかもしれません。

chromium-bsuで遊んでみる

Gamepad F310をUSB接続してDモードに切り替えてから、chromium-bsdを起動させてみると、 正しいキーバインディングで利用できているようです。 しかし、初めてゲームパッドというものを使ったので、良い成績を残すには相当の慣れが必要そうです。

chfs(4)とnandemulator(4)

この記事は、NetBSD Advent Calendar 2019の19日目の記事です。

はじめに

CHFSを使ってみたいと思っていましたが、 サポートするハードウェアが分からないし、おそらく手元に存在しないので試せないと考えていました。 CHFS (CHFS flash file system)は、フラッシュメモリー用のファイルシステムです。

しかし、NANDフラッシュメモリーデバイスについては、nandemulator(4)というエミュレートする仮想的なデバイスが用意されていて、 RAMから割り当てて揮発性のNANDフラッシュメモリーデバイスを作成することが可能でした。 これにより、NetBSD/amd64でもCHFSを試してみることができそうです。

nandemulator(4)のソースコードであるsys/dev/nand/nandemulator.cを読むと、エミュレートされるNANDフラッシュメモリーの サイズは32MBでハードコードされてしまっていますが、CHFSを試してみるという視点では、32MBでも良さそうです。

CHFSを使う準備

カーネル設定ファイルに以下のように追記して、カーネルを作り直しても良さそうですが、最も簡単なのはロード可能なカーネルモジュールを使う方法のように思います。
file-system     CHFS
pseudo-device   nandemulator

以下のようにして、カーネルモジュールを読み込みます。

# modload nandemulator
# modload chfs
これらを実行すると、カーネルブートメッセージに以下のように出力されます。
nandemulator0: NAND emulator
nand0 at nandemulator0: ONFI NAND Flash
nand0: vendor: NETBSD, model: NANDEMULATOR
nand0: manufacturer id: 0x00 (Unknown), device id: 0x00
nand0: page size: 2048 bytes, spare size: 64 bytes, block size: 131072 bytes
nand0: LUN size: 256 blocks, LUNs: 1, total storage size: 32 MB
nand0: column cycles: 2, row cycles: 3, width: x16
nand0: scanning for bad blocks
flash0 at nand0: partition, size 32 MB, offset 0
flash0: erase size 128 KB, page size 2048 bytes, write size 2048 bytes
仮想的なNANDフラッシュメモリーデバイスは、/dev/flash0に割り当てられたようです。

CHFSを使ってみる

mount_chfs(8)のマニュアルページによると、CHFSなフラッシュメモリーデバイスは、 初回マウント時に自動的にnewfs(8)相当のことが実施されるようです。

The file system will be created during the first mount.
ですので、newfs_chfsコマンドはありません。

以下のようにして、/mntにマウントしてみます。

# mount_chfs /dev/flash0 /mnt
状況を確認してみます。
$ mount
/dev/flash0 on /mnt type chfs (local)

$ df -h
/dev/flash0               31M         0B        30M   0% /mnt
どうやら普通に使えそうです。

CHFSは、LinuxやeCosで利用できるJFFS2を意識して作られたようなので、機会があったら比較してみたいと思います。

NetBSD on NVMM

この記事は、NetBSD Advent Calendar 2019の18日目の記事です。

はじめに

今年のNetBSDの目玉の一つは、NVMM (NetBSD Virtual Machine Monitor)だと思います。 実際には2018年からあったように思うのですが、NetBSD/amd64上で、AMD製のCPUだけでなくIntel製のCPUでも動くようになったことで、 活用できる幅が広がったように思います。

とは言っても、私のラップトップでは、Windows 10を問題なく動かせるようにはなっていません。 しかし他のマシンではWindows 10 x86_64も動かせるので、これは私の環境に固有の問題だと思います。 (Windows 10を起動させたいのは、Adobe Acrobat DCやWindows版のMozilla Firefoxを動かしたいのが理由でしたが、 そういう用途にはハードウェアを用意するということで解決させました。持ち歩けないのが面倒ですが。)

しかし、NetBSD上でNetBSDを動かすには十分な動作速度の環境のように感じています。 今回は、私がpkgsrcの各種確認のために使っている設定を紹介します。

ホスト側のNetBSDについて

私は新しい環境が好きなので、ほぼ常にNetBSD/amd64-currentを利用しています。 今日時点では、NetBSD/amd64 9.99.26を使っています。 NVMMは、NetBSD/amd64でしか動きません。 ゲストとしてNetBSD/i386を動かすことはできますが、ホストになれるのは、あくまでNetBSD/amd64だけです。 ハードウェアは、今回はIntel製のCPUであるCore i7-8550Uを搭載したラップトップHP Spectre x368 13-inch ae019TUを使います。 Intel VT-dに対応しているCPUであれば良いように思いますが、問題はファームウェア(BIOS)の方かもしれません。 HP Spectre x368 13-inch ae019TUだと、仮想化に必要な何かがファームウェアで欠けているような気がします。

ゲスト側のNetBSDについて

ゲストは最大128台の仮想マシンで、各仮想マシンには最大256個の仮想CPUと最大128GBのメインメモリーを搭載できるようです。 簡単に試せる最大の仮想CPU数で試してみると、実CPUのスレッド数を超えた数を設定すると、ホスト側のNetBSDでカーネルパニックしたようです。 注意した方が良さそうです。

libnvmm(3)というライブラリーがあるので、自分で仮想マシンモニターを書くこともできるようですが、 標準的には、qemuにNVMMサポートを追加したpkgsrc/wip/qemu-nvmmqemu-system-x86_64コマンドを利用するのことになります。 これは、pkgsrc/emulators/qemuと競合するパッケージなので、pkgsrc/emulators/qemuをインストールした状態で、 pkgsrc/wip/qemu-nvmmqemu-system-x86_64を別名で保持しておくのが良いかもしれません。

# cd /usr/pkgsrc/emulators/qemu
# make install
# cd /usr/pkgsrc/wip/qemu-nvmm
# make
# cp ${WRKSRC}/x86_64-softmmu/qemu-system-x86_64 /opt/bin/qemu-system-x86_64-nvmm
これは以下のように利用します。
# modload nvmm
$ qemu-system-x86_64-nvmm -accel nvmm ...
nvmmデバイスドライバーは、カーネルモジュールで利用するようにした方が良いでしょう。 カーネル構成ファイルで有効にしてしまうと、対応していないCPUにカーネルを持って行った時に困った状況になるかもしれません。

qemuを使うというは、qemuのエミュレートする様々なハードウェアや仕組みを利用できるということでもあります。 ld(4) at virtio(4)をストレージに、vioif(4)をネットワークインターフェイスに設定すれば、通常は全く困らないと思います。

$ qemu-system-x86_64-nvmm -accel nvmm -M pc -m 4G -smp 4 \
-drive driver=qcow2,file=netbsd-amd64-10.qcow2,if=virtio \
-net nic,model=virtio -net user \
-cdrom NetBSD-install.iso -boot d \ # この行はインストール時以外は使わない。
-rtc base=utc,clock=host
NetBSD/i386を利用する場合にも、qemu-system-x86_64-nvmmを使うのを間違わなければ迷うことはないはずです。

PEMファイルの中身をダンプする

PEM形式のファイルの中身を確認するには、以下のようにすれば良い。 $ openssl x509 -in isrgrootx1.pem.txt -noout -text Certificate: Data: Version: 3 (0x2) ...