stylesheet

ラベル orangepi の投稿を表示しています。 すべての投稿を表示
ラベル orangepi の投稿を表示しています。 すべての投稿を表示

2020-01-19

OrangePi WinをDLNAメディアサーバーにする

前回、OrangePi WinへSambaを入れてファイルサーバー化した。

ネットワーク内でのファイル共有、主にメディアファイルの複数マシンからのアクセスに便利に使用しているが、せっかくなので、格納しているメディアファイルをDLNAで公開してメディアサーバーにしてみようと思う。

最近は、PlexやServiioといった有償アプリケーション(無料版もある)が人気のようだが、高機能な分リソース消費も多そう。非力なOrangePiでは荷が重いことだろう。
そこで、今回はDLNAサーバーとしては最もシンプルな、管理用UIやトランスコーディング機能もない、minidlnaを使用することにする。

インストールはaptで行える。

$ sudo apt install minidlna

設定ファイルを編集。管理用のUIは持たないので、直接設定ファイルを編集する。
配信用ディレクトリは、音声/画像/動画で別々のディレクトリを指定することも可能。 また、friendly_nameで表示名を変更できる。

$ sudo jed /etc/minidlna.conf

...

# Path to the directory you want scanned for media files.
#
# This option can be specified more than once if you want multiple directories
# scanned.
#
# If you want to restrict a media_dir to a specific content type, you can
# prepend the directory name with a letter representing the type (A, P or V),
# followed by a comma, as so:
#   * "A" for audio    (eg. media_dir=A,/var/lib/minidlna/music)
#   * "P" for pictures (eg. media_dir=P,/var/lib/minidlna/pictures)
#   * "V" for video    (eg. media_dir=V,/var/lib/minidlna/videos)
#   * "PV" for pictures and video (eg. media_dir=PV,/var/lib/minidlna/digital_camera)
# media_dir=/var/lib/minidlna
media_dir=A,/mnt/usbhdd/music
media_dir=P,/mnt/usbhdd/photo
media_dir=V,/mnt/usbhdd/media

...


# Name that the DLNA server presents to clients.
# Defaults to "hostname: username".
friendly_name=OrangePi Media Server

ファイルが多いとinotfyが足りなくなるので、max_user_watchesを増やしておく。
最大524288まで指定できるが、大きな値を指定するとそれだけメモリーを専有するので程々に。
64bitシステムで最大値を指定した場合、1つあたり1kB、合計512MBのカーネルメモリーを使用する。

$ sudo sysctl -a | grep fs.inotify
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192

$ sudo sysctl fs.inotify.max_user_watches=65536

再起動後も反映させるため、sysctl.d以下にファイルを作成。

$ sudo jed /etc/sysctl.d/90-inotify.config 

fs.inotify.max_user_watches = 65536

デーモンを停止。


$ sudo service minidlna start

DBを強制再作成。

$ sudo minidlnad -R

デーモンを起動。

$ sudo service minidlna start

MediaTombのような管理インターフェイスは存在しないが、ブラウザでポート8200番にアクセスすると簡易なステータス表示を行える。死活監視用に使えるだろう。

Windows10ではエクスプローラーが自動認識した。
クライアントとしてはPCではWindows Media Player、スマホではVLC Media Player等がDLNAに対応している。 その他、一部テレビやプレイステーション等からも参照可能。

もっとも、PCやスマートフォンならばSamba経由でマウントしてしまうほうがよっぽど扱いやすいので、DLNA自体の出番は少ないかもしれない。
Google HomeやAmazon Echo等のスマートスピーカーで直接再生できるようになれば、もう少し活用のしがいもあるだが...

2020-01-18

OrangePi WinにSambaを入れてファイルサーバーにする

OrangePi Winへ最新のArmbianをクリーンインストールしたので、ちまちまと環境再構築を行っている。
今回は、NTFSファイルシステムのUSBハードディスクを繋いで、簡易ファイルサーバーにする手順をメモ。

USBハードディスクを起動時に自動マウント

据え置きでつけたり外したりすることがないならfstabに追記してしまうのが楽。割当先が変わってしまっても良いようにHDD固有のUUIDを指定する。
UUIDを調べるにはblkidコマンドが手っ取り早い。

$ sudo blkid
/dev/mmcblk0p1: UUID="df60a59a-dc75-4ca4-9a17-c546acbb03f3" TYPE="ext4" PARTUUID="e6de6566-01"
/dev/zram0: LABEL="log2ram" UUID="297abf0b-bd2e-4f58-a031-424e6c752837" TYPE="ext4"
/dev/sda1: UUID="D6BEABF3BEABCA77" TYPE="ntfs" PARTLABEL="Elements" PARTUUID="4dd64d94-0369-4714-a4b6-6bdf04b56b62"
/dev/zram1: UUID="924853f6-4a2d-4b88-b93b-bdd289a81d77" TYPE="swap"
/dev/mmcblk0: PTUUID="e6de6566" PTTYPE="dos"

/dev/sda1がUSBハードディスクなのでUUIDは"D6BEABF3BEABCA77"だとわかる。

マウント先を作ってfstabに追記。
今回のハードディスクはNTFSファイルシステムを使用しているため、ntfs-3gを使用。uidとgidにはマウント時に所有権を与えるユーザーを指定する。

$ sudo mkdir /mnt/usbhdd
$ sudo emacs /etc/fstab

UUID=df60a59a-dc75-4ca4-9a17-c546acbb03f3 / ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 1
tmpfs /tmp tmpfs defaults,nosuid 0 0
UUID=D6BEABF3BEABCA77 /mnt/usbhdd ntfs-3g defaults,iocharset=utf8,uid=1000,gid=1000,umask=0022 0 0

再起動するかmount -aで反映させる。

Sambaをローカル認証で使用

aptでインストール。

$ sudo apt install samba

Linuxユーザーを作成してSambaへ登録。ユーザー名とパスワードはWindowsと合わせておくと楽。

$ sudo adduser USERNAME
$ sudo pdbedit -a USERNAME

共有を追加してサービスを再起動。

$ emacs /etc/samba/smb.conf

...

[share]
  comment = USB Harddisk
  path = /mnt/usbhdd
  browseable = yes
  read only = no
  writable = yes
  force user = 1000
  create mode = 0755
  directory mode = 0755

# ゲスト共有用
;  guest only = yes
;  guest ok = yes


$ sudo service smbd restart

以上。

Windows10 Creators Updateの留意事項

Windows 10 Creators Update以降、SMB1.0と認証なしゲスト共有はセキュリティリスクの懸念からデフォルトで無効化されているので使用しないようにする。

どうしても必要な場合は...

SMB1.0は「Windowsの機能の有効化または無効化」からインストールできる。

ゲスト共有は、グループポリシーの「コンピューターの構成 > 管理用テンプレート > ネットワーク > Lanmanワークステーション > 安全でないゲストログオンを有効にする」または、レジストリ「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters\AllowInsecureGuestAuth」で設定できる。

2020-01-12

OrangePi WinへArmbian Bionicをクリーンインストール

面倒なので放置していたが、OrangePi Winへ最新版のArmbianをクリーンインストールすることにする。
インストール自体は、SDカードにイメージを書き込んで電源ONするだけなので、通常のPCとくらべてもあっけないほど簡単に終わる。

準備するもの

  • OSインストール用のTFカード(microSDカード)。最低でも2GBは欲しい。
  • TFカードを読み書きできるPC
  • HDMIケーブル/ディスプレイ/USBキーボード。(最初からリモートで行う場合は不要)

OSイメージの準備

OSイメージの準備はPCで行う。
TFカードにOSイメージを書き込むだけなので、WindowsでもMacでも、なんでもいい。今回は手近にあったUbuntuPCを使用した。

armbian公式からイメージファイルをダウンロード。
ubuntuベース(Armbian Bionic)かdebianベース(Armbian Buster)かを選べる。
また、ダウンロード方法もTorrentと直接ダウンロードを選べる。ただ、直接ダウンロードはかなり遅いので環境が許すならTorrent使用を推奨。

ダウンロードしたファイルは7zipで圧縮されているので展開しておく。

$ 7z e Armbian_19.11.6_Orangepiwin_bionic_current_5.4.7.7z

イメージの書き込みにはEtcherが推奨されてる。Linuxなのでddコマンドでもよいが、Etcherを使用するのが簡単。

$ wget https://github.com/balena-io/etcher/releases/download/v1.5.70/balena-etcher-electron-1.5.70-linux-x64.zip
$ unzip balena-etcher-electron-1.5.70-linux-x64.zip
$ chmod +x balenaEtcher-1.5.70-x64.AppImage 
$ ./balenaEtcher-1.5.70-x64.AppImage

imageを選択してFlash!
SDカードがうまく自動認識されない場合はlspciやlsusbなどしてみると認識する場合がある。

うまく焼けたらマウントし直して、必要なファイルを追加しておくと初期設定がスムーズに進む。ext4ファイルシステムなので、ubuntuならそのまま読み書きできるはず。

Armbianを起動

HDMIケーブルでディスプレイを接続、USBキーボードを接続、TFカードを挿入、電源ボタンをON。
SSHサーバーが有効なので最初からリモート経由でもよいが、対面で行ったほうがトラブルも発生しない。

Linuxの起動メッセージが終わり、無事に起動したらrootユーザーでログインする。

login: root
password: 1234

ログインするとrootパスワードの変更、一般ユーザーの作成を聞かれるので答える。

初期設定

初期設定には、設定用のツールが用意されているので、そちらを使用するとググる手間が省ける。
最低限、タイムゾーンやネットワークの設定を行うとよいだろう。

$ sudo armbian-config

ここまでで基本的なセットアップは終了。あとはやりたいことに応じて好きにすればOK。

リリース情報はUbuntuのものをそのまま使用しているようだ。

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

その他

mDNS

ホスト名.localアクセスできるようにmDNS関連を入れておく。

$ sudo apt install avahi-daemon libnss-mdsn

GPIO

/sys/class/gpioの仮想ファイルを直接いじってももちろん良いけど、WiringPiを入れておく。

$ sudo apt install build-essential

$ git clone https://github.com/OrangePiLibra/WiringPi.git
$ cd WiringPi
$ sudo ./build OrangePi_A64
$ sudo ./build OrangePi_A64 install

$ gpio readall
 +-----+-----+----------+------+---+-Orange Pi Win/Win+ +---+---+------+---------+-----+--+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 |     |     |     3.3v |      |   |  1 || 2  |   |      | 5v       |     |     |
 | 227 |   8 |    SDA.1 |   IN | 0 |  3 || 4  |   |      | 5V       |     |     |
 | 226 |   9 |    SCL.1 |   IN | 0 |  5 || 6  |   |      | 0v       |     |     |
 | 362 |   7 |   GPIO.7 |   IN | 0 |  7 || 8  | 0 | OUT  | S_TX     | 15  | 354 |
 |     |     |       0v |      |   |  9 || 10 | 0 | OUT  | S_RX     | 16  | 355 |
 | 229 |   0 |     RxD3 |   IN | 0 | 11 || 12 | 0 | OUT  | GPIO.1   | 1   | 100 |
 | 228 |   2 |     TxD3 |   IN | 0 | 13 || 14 |   |      | 0v       |     |     |
 | 231 |   3 |     CTS3 |   IN | 0 | 15 || 16 | 0 | IN   | GPIO.4   | 4   | 361 |
 |     |     |     3.3v |      |   | 17 || 18 | 0 | IN   | GPIO.5   | 5   | 68  |
 |  98 |  12 |     MOSI |   IN | 0 | 19 || 20 |   |      | 0v       |     |     |
 |  99 |  13 |     MISO |   IN | 0 | 21 || 22 | 0 | IN   | RTS3     | 6   | 230 |
 |  97 |  14 |     SCLK |   IN | 0 | 23 || 24 | 0 | IN   | CE0      | 10  | 96  |
 |     |     |       0v |      |   | 25 || 26 | 0 | IN   | GPIO.11  | 11  | 102 |
 | 143 |  30 |    SDA.2 |   IN | 0 | 27 || 28 | 0 | IN   | SCL.2    | 31  | 142 |
 |  36 |  21 |  GPIO.21 |   IN | 0 | 29 || 30 |   |      | 0v       |     |     |
 |  37 |  22 |  GPIO.22 |   IN | 0 | 31 || 32 | 0 | IN   | RTS2     | 26  | 34  |
 |  38 |  23 |  GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v       |     |     |
 |  39 |  24 |  GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | CTS2     | 27  | 35  |
 | 101 |  25 |  GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | TxD2     | 28  | 32  |
 |     |     |       0v |      |   | 39 || 40 | 0 | IN   | RxD2     | 29  | 33  |
 +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+
 | BCM | wPi |   Name   | Mode | V | Physical | V | Mode | Name     | wPi | BCM |
 +-----+-----+----------+------+---+-Orange Pi Win/Win+ +---+------+----------+-----+-----+

Armbianについて

少し触った感じでは以前のxenialベースの時のような変なクセもなくなって扱いやすくなった気がする。
有線LANが1Gbpsでリンクしない問題は解消されていた。

2018-08-03

arm64版armbianでpuppeteerを使う

puppetterはnodejsからheadless-chromeを使用するためのライブラリ。
こちらもarm64環境では素直に動かなかったのでメモ。

環境

  • Orange Pi Win Plus
  • ARMBIAN 5.41 stable Ubuntu 16.04.5 LTS 3.10.107-pine64
  • nodejs v8.11.3

問題点

  • npmインストール時にchromeバイナリが自動ダウンロードされるがarm64版ではないので起動しない。
  • 手動でarm64版をダウンロードして置き換えようにも、そもそもarm64版のスナップショットは公式で提供されていない。
  • armbian(ubuntu)がarm64版のchromiumを提供しているが少しバージョンが古い。Chromium 68.0.3440.75
  • 最新のpuppeteer v1.6.1が対応するchromeはChromium 69.0.3494.0 (r575458)。
  • chromiumのような大きなアプリケーションをセルフビルドするのは嫌だ。

対処

  • 古いのを承知でaptパッケージのchromium-browserをインストール。
  • 対応chromeのバージョンが近いpuppetter v1.4.0で妥協。
  • aptパッケージのchromiumを使う。(executablePathで/usr/bin/chromium-browserを指定)
$ sudo apt install chromium-browser
$ npm install puppeteer@1.4.0 
const puppeteer = require('puppeteer')

(async () => {
    const browser = await puppeteer.launch({
      executablePath: '/usr/bin/chromium-browser'
    })
    ...
})()

以上の対処で今回のケースでは一応動作した。
早くarm64もメジャーなアーキテクチャになって欲しいところ。

2018-06-03

node-red + influxdb + prometheus + grafanaでorange-pi-winへダッシュボードを作る

orangepi-win(armbian x64)を監視用ダッシュボードにするために色々とインストールを行う。
arm64用のパッケージが古かったり提供されてなかったりで色々と面倒。

監視用ダッシュボード

grafanaを使用してウェブブラウザで各種メトリクスデータをグラフ表示するもの。

メトリクスデータは以下のものを収集。

  1. システムのメトリクスデータ
  2. 外部Webサービスの応答速度
  3. websocketやweb apiで収集したセンサー値など

1番、2番に関してはprometheusを使用して収集する。それぞれnode_exporter、blackbox_exporterが追加で必要になる。
3番は、node-redを使用してデータフローを作成して対応する。メトリクスデータの保存にはinfluxdbを使用。

以下、必要となるソフトウェアのインストール方法をメモしていく。
node-redデータフローの内容やgrafanaダッシュボードの作り方は記載しない。

※センサーデータの配信サーバーデバイスを自作してやろうという変人は著作のこちらも参考にどうぞ。 esp8266向けのhttp/websocket apiサーバーです。

influxdb

https://www.influxdata.com/

influxDBは時系列データの扱いに特化したデータベース。
時系列データベースとして採用例が多いgraphiteより後発のもの。

インストールはaptで素直に入る。
ついでにnode-redからの書き込み用のデータベースを作成しておく。

$ sudo apt install influxdb influxdb-client
$ influx
> create database things

http apiで更新可能のためか、簡易なWebUIが付属している。

http://127.0.0.1:8083

prometheus

https://prometheus.io/

prometheusはpull型のサーバー監視ツール。k8s環境で使われることが多い印象。

arm64版のパッケージがレポジトリに登録されていないのでインストールは少し面倒。
公式サイトからバイナリを入手してインストールする必要がある。

$ wget https://github.com/prometheus/prometheus/releases/download/v2.2.1/prometheus-2.2.1.linux-arm64.tar.gz
$ sudo tar xvfz prometheus-2.2.1.linux-arm64.tar.gz -C /opt
$ cd /opt
$ sudo ln -s prometheus-2.2.1.linux-arm64/ prometheus
$ sudo vi /etc/systemd/system/prometheus.service

  [Unit]
  Description=Prometheus
  Wants=network-online.target
  After=network-online.target

  [Service]
  User=root
  Group=root
  Type=simple
  ExecStart=/opt/prometheus/prometheus --config.file /opt/prometheus/prometheus.yml

  [Install]
  WantedBy=multi-user.target

$ sudo systemctl daemon-reload
$ sudo systemctl enable prometheus

また、prometheusではメトリクスデータの収集に各種exporterが必要。
システムメトリクスの収集はnode_exporter、外部サービスの死活監視はblackbox_exporterを使用する。

これらも同じようにインストール。手順はほぼ一緒なので省略。

インストールが完了したら、/opt/prometheus/prometheus.ymlを編集してjobを登録する。

...
scrape_configs:

  ...

  - job_name: 'node_exporter'
    static_configs:
    - targets: ['localhost:9100']

  - job_name: 'blackbox_http'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets:
        - http://example.com
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9115

最後にsystemdで自動起動を有効にする。

$ sudo systemctl daemon-reload
$ sudo systemctl enable prometheus
$ sudo systemctl enable node_exporter
$ sudo systemctl enable blackbox_exporter

node-red

https://nodered.org/

node-redはビジュアルデータフロープログラミングツール。
"mqttでセンサーデータを受信、influxdbへ保存"みたいなことがマウスでポチポチするだけで出来あがる。

nodejs製のWebアプリなので、インストールにはnpmを使用する。また、daemon化にはpm2を使用した。

$ sudo npm install -g --unsafe-perm node-red
$ sudo npm install -g pm2

プロセス構成を作成してsystemdへ登録する。

$ sudo su
$ pm2 start node-red
$ pm2 save
$ pm2 startup

WebUIはポート1880番を使用。

http://127.0.0.1:1880

WebUIにアクセスし、node-red-contrib-influxdbを設定から追加。

その後、マウスでポチポチしてデータフローを組み上げる。
例えば、以下のようなデータフローを作成する。

websocket接続 -> 受信データのフィルタと成形 -> influxdbへ追加
定期実行 -> httpリクエスト -> レスポンスデータのフィルタと成形 -> influxdbへ追加

grafana

https://grafana.com/

grafanaはwebブラウザ向けのデータビジュアライゼーションツール。kibanaからフォークして誕生した。
ストレージにinfluxdbやprometheusが使用可能。

aptリポジトリ版はUIが壊れた(アイコンが表示されない)不具合のある旧版なので公式パッケージを使用。

$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.0.4_amd64.deb
$ sudo dpkg -i grafana_5.0.4_amd64.deb

一旦、homepathを指定して起動してやる。

$ sudo grafana-server -homepath /usr/share/grafana

自動起動を有効にする。

$ sudo systemctl enable grafana-server

WebUIはポート3000番を使用。

http://127.0.0.1:3000

初期アカウントはユーザー、パスワード共にadmin。
メニューのData Sourcesからinfluxdbとprometheusを追加しておく。

Type: InfluxDB
Url: http://localhost:8086

Type: Prometheus
Url: http://localhost:9090

その後、こちらもマウスでポチポチしてダッシュボードを作成していく。
公開されているものをインポートしてから調整していくと少しは楽できる。

結構大掛かりになったが、以上でセットアップは完了。

メトリクスデータが僅かなこともあって、非力なorange-piでも一応は動作しているが、それなりに負荷はかかっているよう(特にinfluxdb)なので、そのうち破綻しそうな気はする。

都会派のカメはヒキガエルと言うそうです

2017-07-01

Orange Pi Win Plusの写真集

Windows IoTに対応するかも?との噂のOrange Pi Win Plusを購入。

  • Brand Name:ORANGEPI
  • Memory Capacity:2GB
  • Processor Brand:Allwinner
  • Intergrated Feature:10/100/1000Mbps,WiFi 802.11b/g/n
  • Interface:TF Card Support,USB OTG
  • Model Number:Orange Pi Win Plus Set 4
  • Demo Board Type:ARM
  • is it customized:Yes
  • Operating Temperature:-10 ~ 65℃
  • Application:Computer/ Wireless serve/ Games
  • Supply Voltage:5V
  • Condition:New
  • CPU:A64 Quad-core Cortex-A53 64bit
  • Memory (SDRAM):2GB DDR3 (shared with GPU)
  • GPU:Mali400MP2 GPU Supports OpenGL ES 2.

この手の製品としてはそこそこのスペック。それなりの値段。(US 30ドル程)
比較的新しめの製品なので、ソフトウェア的な対応はまだまだこれからといった感じ。

以下、写真。