サーバ」カテゴリーアーカイブ

aes67-web-monitorの構築

お久しぶりです

aes67-web-monitor
ブラウザでAES67ストリームを検聴することができるサービスです。
https://github.com/nicolassturmel/aes67-web-monitor

今回はHyper-V上にUbuntu環境を作ってみました。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.3 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.3 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

やっぱりLTSやろ

必要なのパッケージをインストール

$ sudo apt install nodejs npm git
$ node --version
v8.10.0

もし、aes67-web-monitorが起動できない場合は、
Nodeのバージョンをあげるといいかもしれません。

$ sudo npm install n -g
$ sudo n stable
$ node --version
v12.18.4

Git cloneして、Nodeの依存関係を解決します。

$ git clone https://github.com/nicolassturmel/aes67-web-monitor
Cloning into 'aes67-web-monitor'...
remote: Enumerating objects: 59, done.
remote: Counting objects: 100% (59/59), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 59 (delta 28), reused 44 (delta 15), pack-reused 0
Unpacking objects: 100% (59/59), done.
$
$ cd aes67-web-monitor
$ ll
total 72
drwxrwxr-x  5 neko6 neko6  4096  9月 17 12:57 ./
drwxr-xr-x 17 neko6 neko6  4096  9月 17 12:56 ../
drwxrwxr-x  8 neko6 neko6  4096  9月 17 12:56 .git/
-rw-rw-r--  1 neko6 neko6    13  9月 17 12:56 .gitignore
-rw-rw-r--  1 neko6 neko6  1536  9月 17 12:56 README.md
drwxrwxr-x  2 neko6 neko6  4096  9月 17 12:56 html/
drwxrwxr-x 61 neko6 neko6  4096  9月 17 12:58 node_modules/
-rw-rw-r--  1 neko6 neko6 15596  9月 17 12:56 package-lock.json
-rw-rw-r--  1 neko6 neko6   804  9月 17 12:56 package.json
-rw-rw-r--  1 neko6 neko6  5024  9月 17 12:56 rtp-worker.js
-rw-rw-r--  1 neko6 neko6  9570  9月 17 12:56 server.js
-rw-rw-r--  1 neko6 neko6  1222  9月 17 12:56 statistics.js
$
$ npm i
aes67-web-monitor@1.0.0 /home/neko6/aes67-web-monitor
├── UNMET PEER DEPENDENCY bufferutil@^4.0.1
├─┬ express@4.17.1
│ ├─┬ accepts@1.3.7
│ │ ├─┬ mime-types@2.1.27
│ │ │ └── mime-db@1.44.0
│ │ └── negotiator@0.6.2
│ ├── array-flatten@1.1.1
│ ├─┬ body-parser@1.19.0
│ │ ├── bytes@3.1.0
│ │ ├─┬ http-errors@1.7.2
│ │ │ ├── inherits@2.0.3
│ │ │ └── toidentifier@1.0.0
│ │ ├─┬ iconv-lite@0.4.24
│ │ │ └── safer-buffer@2.1.2
│ │ └── raw-body@2.4.0
│ ├── content-disposition@0.5.3
│ ├── content-type@1.0.4
│ ├── cookie@0.4.0
│ ├── cookie-signature@1.0.6
│ ├─┬ debug@2.6.9
│ │ └── ms@2.0.0
│ ├── depd@1.1.2
│ ├── encodeurl@1.0.2
│ ├── escape-html@1.0.3
│ ├── etag@1.8.1
│ ├─┬ finalhandler@1.1.2
│ │ └── unpipe@1.0.0
│ ├── fresh@0.5.2
│ ├── merge-descriptors@1.0.1
│ ├── methods@1.1.2
│ ├─┬ on-finished@2.3.0
│ │ └── ee-first@1.1.1
│ ├── parseurl@1.3.3
│ ├── path-to-regexp@0.1.7
│ ├─┬ proxy-addr@2.0.6
│ │ ├── forwarded@0.1.2
│ │ └── ipaddr.js@1.9.1
│ ├── qs@6.7.0
│ ├── range-parser@1.2.1
│ ├── safe-buffer@5.1.2
│ ├─┬ send@0.17.1
│ │ ├── destroy@1.0.4
│ │ ├── mime@1.6.0
│ │ └── ms@2.1.1
│ ├── serve-static@1.14.1
│ ├── setprototypeof@1.1.1
│ ├── statuses@1.5.0
│ ├─┬ type-is@1.6.18
│ │ └── media-typer@0.3.0
│ ├── utils-merge@1.0.1
│ └── vary@1.1.2
├── sdp-transform@2.14.0
├─┬ url@0.11.0
│ ├── punycode@1.3.2
│ └── querystring@0.2.0
├── UNMET PEER DEPENDENCY utf-8-validate@^5.0.2
├── vhost@3.0.2
└── ws@7.3.1

npm WARN ws@7.3.1 requires a peer of bufferutil@^4.0.1 but none was installed.
npm WARN ws@7.3.1 requires a peer of utf-8-validate@^5.0.2 but none was installed.

どうやら足りないものがあるようなので追加インストールします。

$ npm install bufferutil utf-8-validate
> bufferutil@4.0.1 install /home/neko6/aes67-web-monitor/node_modules/bufferutil
> node-gyp-build

> utf-8-validate@5.0.2 install /home/neko6/aes67-web-monitor/node_modules/utf-8-validate
> node-gyp-build

aes67-web-monitor@1.0.0 /home/neko6/aes67-web-monitor
├── bufferutil@4.0.1  extraneous
└── utf-8-validate@5.0.2  extraneous

これで準備はできました。

さて起動してみます。
rootで起動しないとエラーこきますので注意。

$ sudo node --experimental-worker server.js
[
  { name: 'lo', ip: '127.0.0.1', mask: '255.0.0.0' },
  { name: 'eth0', ip: '10.255.1.11', mask: '255.255.255.0' }
]
Server ready...
Server ready...
Server started on port 8067 :)
One more worker
undefined
Socket connected. sending data...
Socket connected. sending data...
{"type":"selectInterface","data":"10.255.1.11"} { type: 'selectInterface', data: '10.255.1.11' }
UDP Client listening on 224.0.1.129:319
UDP Client listening on 239.255.255.255:9875

あとはブラウザから
http://サーバIP:8067
へアクセスすると、SAPやAES67ストリームが流れて来ていると検聴できると思います。
(そこまで環境が作れなかったw)

Docker Desktopのインストール

最近は仮想ではなくコンテナを使うことが増えてきました。
Windowsでも手軽に使えるようになったのでインストールしておこうと思います。

0)VT-xの有効化
Docker自体はHyper-VのゲストOSとして扱われます。
Hyper-VにはCPUの仮想化支援VT-xが必要なのでBIOSで有効にしておきます。
(VT-dは特に必要ありません。)

1)Hyper-Vを有効にする
コントロールパネル
 Windowsの機能の有効化または無効化
  Hyper-V
にチェック
再起動が必要です。

2)Docker Desktopをダウンロード
Dokcer Hubのアカウント
作る
https://docs.docker.com/docker-for-windows/install/
作らない
https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe

3)インストール
普通にインストールすればOK
起動するとHyper-VのゲストOSとして起動してきます。

4)GUI管理
Dockerコマンドも使えますが、GUI管理ツールも使ってみたい場合は
kitematicが古いといわれるので、別途ダウンロード
https://github.com/docker/kitematic/releases
ダウンロードしたあとは
C:\Program Files\Docker\Kitematic
におけばOK

portainerのアップデート

お久しぶりです

Docker管理ツールとしてportainerを使っているのですが、
アップデート方法を書いておきます。。。

portainerのコンテナを作るときに、
portainer_data:/data」というオプションを設定して、
マウントポイントを指定してたのでデータはそのまま移行できます。

一旦、起動中のportainerを削除してから作り直せばOK。

# docker ps
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS              PORTS                                                                 NAMES
20258c0b59da        portainer/portainer              "/portainer"             5 months ago      1 months ago        0.0.0.0:9000->9000/tcp                                                portainer

# docker stop portainer
# docker rm portainer
# docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

これだけ!!

Dockerのiptables

Dockerサービスが起動したときや、
コンテナを作ったときに、iptablesに自動的にフィルターが入ります。

困ったことに、特に設定しなければ、
INPUTもFORWARDもACCEPTになるため精神衛生上よくありません。
せめてINPUTとFORWARDはDROPとしておきたいです。

それに加えて、DOCKERコンテナへのフィルターを書く場合は、
mangleで設定しなければなりません。(natテーブルでもいけるかもしれません)
https://ja.wikipedia.org/wiki/Iptables#/media/File:Netfilter-packet-flow.svg

続きを読む