Asterisk 16で、ソフトフォンとの間をPJSIPによる通信に変更する

Asteriskに接続している一部のクライアントはIAX2で通信するようにしたのだが、 もう1台はZoiPerではなくbaresip+を使っているので、 IAX2にすることはできない。 そこで、この端末についてもchan_sipではなくPJSIPに乗り換えることにした。

PJSIP自体は、既にひかり電話のホームゲートウェイに接続するのに利用しているので、それも合わせて、以下のように設定すれば良い。

PJSIPでAsteriskにregisterするには、Asterisk 16はデータベースを使えるようになっている必要がある。 pkgsrc/comms/asterisk16の場合には、標準ではSQLite3が利用され、/var/db/asterisk/astdb.sqlite3にデータベースファイル が置かれている。 今回は、なぜかこのデータベースファイルの所有者が別ユーザーになっており、SQL errorが起きていたのを無視していたため、 端末がAsteriskにregisterできなかった。ユーザーIDとパスワードの認証までは通過できるのだが、着信できない状態になってしまった。

pjsip.confは、以下のようにした。

[general]
match_auth_username = yes

[system]
type = system
disable_rport = yes

[transport-udp]
type = transport
protocol = udp
bind = 0.0.0.0

; 外線: ひかり電話
[hikari-denwa]
type = registration
transport = transport-udp
outbound_auth = hikari-trunk
server_uri = sip:10.81.0.1
client_uri = sip:3@10.81.0.1
retry_interval = 60

[hikari-trunk]
type = auth
auth_type = userpass
username = 0003
password = 0003_password

[hikari-trunk]
type = aor
contact = sip:3@10.81.0.1

[hikari-trunk]
type = endpoint
transport = transport-udp
context = default
disallow = all
allow = ulaw
outbound_auth = hikari-trunk
aors = hikari-trunk
direct_media = no
from_user = 3
from_domain = 10.81.0.1
dtmf_mode = inband

[hikari-trunk]
type = identify
endpoint = hikari-trunk
match = 10.81.0.1


; 内線: baresip+ on Amazon Kindle Fire HD 8 gen10
[fire8]
type = aor
max_contacts = 1
qualify_frequency = 60
remove_existing = yes

[fire8]
type = auth
auth_type = userpass
username = fire8
password = user3_password

[fire8]
type = endpoint
transport = transport-udp
context = default
disallow = all
allow = ilbc,ulaw,alaw,gsm,g729,g723
aors = fire8
auth = fire8
;outbound_auth = fire8
dtmf_mode = rfc4733
force_rport = yes
ice_support = no
rtp_symmetric = yes
direct_media = no
rewrite_contact = yes
device_state_busy_at = 1

これに合わせて、extensions.confも変更し、発信・着信できるようにする。

[default]
;include => stdexten

; 着信
;; 内線
;;; 自動応答
exten => 1290,1,Playback(demo-congrats) ; 動作チェック用
;;; 各端末
exten => 101,1,Dial(IAX2/user1,20,rt)
exten => 103,1,Dial(IAX2/user2,20,rt)
exten => 104,1,Dial(PJSIP/fire8,20,rt)

;; 外線
exten => 55863768,1,Deal(IAX2/user1&IAX2/user2&PJSIP/fire8,20,rt)
exten => 53077771,1,Dial(IAX2/user1&lIAX2/user2&PJSIP/fire8,20,rt)
exten => s,1,Dial(IAX2/user1&IAX2/user2&PJSIP/fire8)


; 発信
;; Fusion SMARTalkの場合には9で発信する。
exten => _9.,1,NoOp(Fusion発信9)
exten => _9.,n,Set(CALLERID(num)=${MYNUMBER})
exten => _9.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _9.,n,Dial(PJSIP/${EXTEN:1}@fusion1,120,T)
exten => _9.,n,Hangup()

;; Fusion SMARTalkの場合には8で発信する。
exten => _8.,1,NoOp(Fusion発信8)
exten => _8.,n,Set(CALLERID(num)=${MYNUMBER})
exten => _8.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _8.,n,Dial(PJSIP/${EXTEN:1}@fusion2,120,T)
exten => _9.,n,Hangup()

;; ひかり電話の場合には7で発信する。
exten => _7.,1,NoOp(ひかり電話で発信7)
exten => _7.,n,Set(CALLERID(num)=${MYNUMBER})
exten => _7.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _7.,n,Dial(PJSIP/${EXTEN:1}@hikari-trunk)
exten => _7.,n,Hangup()

Asterisk 16で、ソフトフォンとの間をIAX2プロトコルによる通信に変更する

これまで、NetBSD/amd64 9上で動かしているpkgsrc/comms/asterisk16では、SIPソフトフォンとの間については、chan_sipによるSIPを利用していた。 しかし、既にchan_sipの利用は推奨されていないようだ。 後継となるPJSIPについては、既にひかり電話のためにNTT東日本から借りているホームゲートウェイに接続するのに利用していた。 3台のソフトフォンのうち、2台はZoiPerなので、IAX2を利用できる。 この分はIAX2にしてしまおう。

IAX2の設定は、iax.confに記載すれば良い。 chan_sipと似た感じで記入でき、簡単である。

[general]
match_auth_username=yes
iaxcompact=yes
allow=all

; 電話機との接続
[user1] ; Android smartphone
type=friend
username=user1
secret=user1_password1
context=default
canreinvite=no
host=dynamic
qualify=no

[user2] ; Zoiper for Windows
type=friend
username=user2
secret=user2_password2
context=default
canreinvite=no
host=dynamic
qualify=no

extensions.confでも、IAX2を使って着信させるための通信をするのを指定する。

[default]
;include => stdexten

; 着信
;; 内線
exten => 1290,1,Playback(demo-congrats) ; 動作チェック用
exten => 101,1,Dial(IAX2/user1,20,rt)
exten => 103,1,Dial(IAX2/user2,20,rt)

;; 外線
exten => 55863768,1,Dial(IAX2/user1&IAX2/user1,20,rt)
exten => 53077771,1,Dial(IAX2/user1&IAX2/user2,20,rt)
exten => s,1,Dial(IAX2/user1)


; 発信
;; 1回線目のFusion SMARTalkの場合には9で発信する。
exten => _9.,1,NoOp(Fusion発信9)
exten => _9.,n,Set(CALLERID(num)=${MYNUMBER})
exten => _9.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _9.,n,Dial(PJSIP/${EXTEN:1}@fusion1,120,T)
exten => _9.,n,Hangup()

;; 2回線目のFusion SMARTalkの場合には8で発信する。
exten => _8.,1,NoOp(Fusion発信8)
exten => _8.,n,Set(CALLERID(num)=${MYNUMBER})
exten => _8.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _8.,n,Dial(PJSIP/${EXTEN:1}@fusion2,120,T)
exten => _9.,n,Hangup()

;; ひかり電話の場合には7で発信する。
exten => _7.,1,NoOp(ひかり電話で発信7)
exten => _7.,n,Set(CALLERID(num)=${MYNUMBER})
exten => _7.,n,Set(CALLERID(name)=${MYNUMBER})
exten => _7.,n,Dial(PJSIP/${EXTEN:1}@hikari-trunk)
exten => _7.,n,Hangup()

sip.confpjsip.confの内容は、前回と大差はない。

無料のVMware ESXi 8.0のライセンスを取得する

VMwareのウェブサイトを見たら、VMware ESXi 8.0がリリースされていた。 しかし、無料で入手できるような表示にはなっていないように見える。

VMware ESXiの無料での提供は止めてしまったのかと思ったのだが、そうでもないようだ。Free ESXi 8.0 - How to Download and get License Keysによると、 Evaluationを申し込むと、これまで提供されて来たような無料のライセンスが提供されるらしい。

実際に、Customer Connectにログインして、Product Evaluation Center for VMware vSphere Hypervisor 8のページへ行き、License&Downloadのタブへ移動して、 Registerの青色のボタンをクリックして自分についての情報を入力し(基本的にはアカウントの情報が既に入力済みだったが、必須項目で抜けているものもあった)、 評価版の申し込みを完了すると、VMware vSphere Hypervisor 8 Licenseという表示に、無期限のESXi 8.0のライセンスが表示されるようになる。 同様に、インストールのためのISOイメージファイルもダウンロードできるようになる。

ライセンスを割り当てた後の表示は以下のようになる。期限は定められていないことが分かる。「Up to 8-way virtual SMP」という機能の制限は これまでと変わっていないはずである。

MSI製Z79-S01というマザーボードで、NVMe SSDから起動できる条件

Z79-S01というのは、OEM製品のようで、BIOSアップデーターも提供されない。残念な気がする。 MeltdownとかSpectreとかも無視なのかと悲しい気持ちにもなる。

とは言っても、安定しているのかもしれないし、設定項目は結構たくさんある。 NVMe SSDを挿せるM.2端子が1つのみあるのだが、Fast BootオプションをOffにすると、 NVMe SSDからは一切起動できなくなる。

普通のマシンでのFast Bootであれば何も関係ないような気がするが、実際Z79-S01については そういう状態だった。

オフライン状態で、ローカルグループにActive Directoryユーザーを追加する

Windows 10 ProでActive Directoryでセットアップされているマシンで、 ドメインコントローラーにアクセスできない状態、つまり、オフラインの 状態で、ローカルグループ(手元のPCのグループ)のAdministratorsに Active Directoryのユーザーを追加したいと思った。

特に工夫もなく、以下のようにコマンドラインで実行すれば良い。

> net localgroup LOCALGROUP DOMAINUSERID /add
これで、ローカルのLOCALGROUPグループに、DOMAIN\DOMAINUSERIDユーザーを 追加できる。

iPhoneから、MTP経由で写真をコピーする際に、「MACまたはPCに転送」の「元のフォーマットのまま」と「自動」が切り替わるタイミング

pkgsrc/graphics/libheifで利用できるlibheif-1.13.0ではうまく扱えないiPhone XRのiOS 15で撮影した.HEIC画像がある。 とりあえずやりたいことはJPEG形式に変換することなので、いつもは「元のフォーマットのまま(Keep Originals)」に設定している写真アプリの 「MACまたはPCに転送」の設定を「自動(Automatic)」にしてみることにした。 これは、「設定アプリ→写真→MACまたはPCに転送」あるいは「Settings app→Photos→TRANSFER TO MAC OR PC」のようにたどると設定できる。

これUSB to Lightningケーブルをつないている状態でも設定変更できるが、実際にJPEGファイルがMTP経由でPCから見えるようになるのは、 USB to Lightningケーブルをつなぎ直した後からだった。

IA16なGCCのint、long、ポインターのサイズを確認する

GCCはIA16 (8086で始まる16ビットのIntelアーキテクチャー)をサポートするようになっているが、int型、long型、ポインター型のサイズがどうなっているのか理解していなかった。 GCCのオンラインマニュアルでのx86の-m16オプションの説明を読むと、 -m16でも-m32と同様にint型、long型、ポインター型は全て32ビットであるらしい。 それを確認するには、以下のようにすれば良さそうだ。

まず、以下のようなC言語のソースコードsizeof.cを作成する。

$ cat sizeof.c
int
main(void)
{
        int int_size = sizeof(int);
        int long_size = sizeof(long);
        int pointer_size = sizeof(void *);

        return 0;
}

これをコンパイルして、オブジェクトファイルsizeof.oを生成する。

$ gcc -m16 -c sizeof.c

これをディスアセンブルする。すると、$0x4というのが代入される部分が3箇所あることが分かる。 つまり、4バイト=32ビットがint型、long型、ポインター型のサイズであることが分かる。

$ objdump -d sizeof.o

sizeof.o:     file format elf32-i386


Disassembly of section .text:

00000000 <main≶:
   0:   66 55                   push   %bp
   2:   66 89 e5                mov    %sp,%bp
   5:   66 83 ec 10             sub    $0x10,%sp
   9:   67 66 c7 45 fc 04 00    movw   $0x4,-0x4(%di)
  10:   00 00                   add    %al,(%eax)
  12:   67 66 c7 45 f8 04 00    movw   $0x4,-0x8(%di)
  19:   00 00                   add    %al,(%eax)
  1b:   67 66 c7 45 f4 04 00    movw   $0x4,-0xc(%di)
  22:   00 00                   add    %al,(%eax)
  24:   66 b8 00 00             mov    $0x0,%ax
  28:   00 00                   add    %al,(%eax)
  2a:   66 89 ec                mov    %bp,%sp
  2d:   66 5d                   pop    %bp
  2f:   66 c3                   retw

Asterisk 16で、ソフトフォンとの間をPJSIPによる通信に変更する

Asteriskに接続している一部のクライアントはIAX2で通信するようにしたのだが、 もう1台はZoiPerではなく baresip+ を使っているので、 IAX2にすることはできない。 そこで、この端末についてもchan_sipではなくPJSIPに乗り換える...