2020年05月02日

SBCへのElasticsearch&Kibanaインストール7.6.X版

今回はSBC(シングルボードコンピュータ)へElasticsearchとKibanaをインストールする方法を改めて紹介します。対象のSBCはTinkerboardSです。以前にもSBCへElasticsearchとKibanaをインストールする方法を紹介しましたが、以前に比べて状況が変わっているため、改めて紹介します。

ARMベースのシングルボード上でElasticsearchとKibanaをアプリケーションとして動かすのではなく、サービスとして登録して運用する手順を紹介します。

■Java11ダウンロードとインストール
以前はoracleからarmhf版のJavaも配信されていましたが、最近のバージョンでは配信されていません。こちらのbellソフトウェアサイトからarmhf用のパッケージをダウンロードしてインストールします。

sudo dpkg -i bellsoft-jdk11-linux-arm32-vfp-hflt.deb

■elasticsearchダウンロード
最近のelasticsearchからJavaがバンドルされており、以前のようにJavaインストール関連のトラブルで起動しないといったことが起きづらくなりました。一方でSBCにインストールする際にはarm版である必要があるため、バンドルされたJavaは使えません。こちらのサイトからJavaがバンドルされていないバージョンのelasticsearchをダウンロードします。



■kibanaダウンロード
こちらのサイトからkibanaをダウンロードします。

合わせて、Armhf版現行のkibanaに対応したNodejsの10.16.0をダウンロードします。


■elasticsearchインストール
amd64用にパッケージされているため、そのままではインストールできません。

@強制的にARM環境にAMD64を追加するために設定を変更する
sudo dpkg --add-architecture amd64
※逆に削除する場合は dpkg --remove-architecture amd64

elasticsearchインストール
sudo dpkg -i --force-all --ignore-depends=libc6 elasticsearch-7.6.2-no-jdk-amd64.deb

Aフォルダ権限変更
sudo chmod -vR 777 /etc/elasticsearch/
sudo chmod -vR 777 /var/lib/elasticsearch/
sudo chmod -vR 777 /usr/share/elasticsearch/
sudo chmod -vR 777 /var/log/elasticsearch/

BJavaディレクトリパス設定
Jdkのパスを通します。

sudo mkdir -p /usr/share/elasticsearch/jdk
sudo cp -rf /usr/lib/jvm/java-11-openjdk-armhf/* /usr/share/elasticsearch/jdk


Celasticsearch.yml設定変更
amd64専用の機能などを無効化しないと起動に失敗します。
少しおまじないを追加します。
sudo leafpad /etc/elasticsearch/elasticsearch.yml

xpack.ml.enabled: false
bootstrap.system_call_filter: false

※必要に応じて下記も追記する。
network.host: "0.0.0.0"
http.port: 9200
transport.host: localhost
transport.tcp.port: 9300

DJava設定
必要に応じてElasticsearchのメモリ割り当てを変更します。
sudo leafpad /etc/elasticsearch/jvm.options

デフォルトは
-Xms1g
-Xmx1g
-server
でメモリ1GをElasticsearchに割り当てる設定です。Tinkerboardならメモリ2GBなのでデフォルトでも問題ありませんが、raspberryPIの場合はメモリ1GBなのでシステム領域が全く確保できなくなってしまいます。設定したメモリ領域+200MBが実際のプロセス上で使用するため、raspberryPIの場合は
-Xms500m
-Xmx500m
-server
が妥当だと思います。


E一時フォルダ設定
sudo leafpad /etc/elasticsearch/jvm.options

-Djava.io.tmpdir=${ES_TMPDIR}
から
-Djava.io.tmpdir=/usr/share/elasticsearch/tmp
に変更します。

また、一時フォルダの作成と権限付与を行います。
sudo mkdir -p /usr/share/elasticsearch/tmp
sudo chmod -vR 777 /usr/share/elasticsearch/tmp


Fjna置き換え
デフォルトではarmhf環境でsystemctl elasticsearchサービスを起動させると途中で起動に失敗(関連リンク1関連リンク2)する不具合があるようです。jnaを置き換えます。

sudo mv /usr/share/elasticsearch/lib/jna-4.5.1.jar /usr/share/elasticsearch/lib/jna-4.5.1.jar.old


Gサービス起動設定変更
デフォルトでは自動再起動の設定が無効のため、
下記のファイルに追記します。
sudo /bin/systemctl enable elasticsearch.service#ファイル生成
sudo leafpad /etc/systemd/system/multi-user.target.wants/elasticsearch.service

[Service]
・・・・
Restart=always
・・・・
Environment=ES_TMPDIR=/usr/share/elasticsearch/tmp
↑2行追加する
・・・・


Eサービス登録
下記のコマンドでサービスを有効化します。
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo service elasticsearch start

これでElasticsearchがシステム起動時に自動的に起動します。

sudo service elasticsearch statusでサービス状態を確認できます。
http://localhost:9200へアクセスして確認してもよいと思います。

statusで問題なくても9200へアクセスできない場合は
elasticsearch.ymlかjavaの設定に何か問題があることが多いです。


■Kibanaインストール
Kibanaはamd64用にパッケージされているため、そのままではインストールできません。

@強制的にARM環境にAMD64を追加するために設定を変更する(elasticsearchで実行済の場合は不要)
sudo dpkg --add-architecture amd64
※逆に削除する場合は dpkg --remove-architecture amd64

AAMD64が追加されているか確認する
sudo dpkg --print-foreign-architectures

BKibanaインストール
sudo dpkg -i kibana-7.6.2-amd64.deb

CARM版Nodejs解凍
tar xfv node-v10.16.0-linux-armv7l.tar.gz

DARM版Nodejsへ置き換え
sudo cp  node-v10.16.0-linux-armv7l/bin/node /usr/share/kibana/node/bin
sudo cp  node-v10.16.0-linux-armv7l/bin/npx /usr/share/kibana/node/bin
sudo cp  node-v10.16.0-linux-armv7l/bin/npm /usr/share/kibana/node/bin

Dkibana.yml設定変更
sudo leafpad /etc/kibana/kibana.yml
下記を追記する
server.host: "0.0.0.0"
i18n.locale: "ja-JP"

Eサービス登録
下記のコマンドでサービスを有効化します。
sudo /bin/systemctl enable kibana.service
sudo service kibana start
これでKibanaがシステム起動時に自動的に起動します。
sudo service kibana statusでサービス状態を確認できます。
http://localhost:5601へアクセスして確認してもよいと思います。

■おまけ
・Tinkerboard RTC設定方法

・日本語入力IME追加
 sudo apt-get install ibus-mozc im-config

・Nodejsインストール
 curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -

・Node-Redインストール
 sudo npm install -g --unsafe-perm node-red

・Node-Red serialportインストール
 sudo npm install -g --unsafe-perm node-red-node-serialport

・apt-getで依存関係エラーが残ってしまう場合の対処方法
 下記のコマンドでエディタを開き、依存関係エラーに関連するライブラリ名を検索し、対象のライブラリ数行を丸ごと削除して保存する。
 sudo leafpad /var/lib/dpkg/status

以上の手順でシングルボードコンピュータへElasticsearchとKibanaをインストールすることができます。以前に比べてArm版のJavaがoracleから配布されなくなったり、elasticsearchにjdkがデフォルトでバンドルされたりといろいろ状況が変わっていました。ElasticStack7.2前後はnode系のgitバイナリ絡みの依存でSBCに根本的にインストールできない状況でしたが、ElasticStack7.6では解消されています。一方でelasticsearchのjna絡みでトラブルを抱えているため、jnaの置き換えが必要な状況でした。今回はdokcerを使わずにそのままElasticStackをサービスとして使用する方法を紹介しました。dockerを活用すればArm版への対応作業は必要ですが、多少、設定は楽になると思われます。
posted by Crescent at 00:00| Comment(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2020年03月21日

SBC OSイメージリサイズ方法

RaspberrypiやTinkerboardといったシングルボードコンピュータ(SBC)ではOSを記録する媒体としてmicroSDカードやeMMCを使用しています。Win32DiskImagerといったツールでmicroSDカードやeMMCのバックアップを取った後に別のmicroSDカードやeMMCにリストアするとサイズ違いでエラーが発生し、リストアできない場合が時々あります。

microSDカードやeMMCは同じ容量でもロットやメーカによってセクタサイズが若干、異なります。小さい容量のバックアップデータから同じ容量もしくは大きい容量にリストアする場合は問題ありませんが、容量が小さい場合、エラーが発生して起動できません。パーティションに空きがあったとしてもパーティションサイズは不正なため、起動に失敗します。このような場合にはバックアップデータファイルのパーティションを操作とイメージファイルの編集が必要です。今回はバックアップしたイメージファイルをLinux(ubuntu)上で編集してOSイメージをリサイズする方法を紹介します。


■大まかな流れ
1. 縮小したいイメージファイル(*.img)をマウント
2. gpartedでドライブを縮小
3. 縮小して未使用の領域を除く

■手順
1. *.imgファイルをマウントするために空きのループデバイスを確認する。下記のコマンドで空いているループデバイス一覧が表示されます。
   sudo losetup -f

2. イメージファイル(*.img)を空きのループデバイスにマウントする。下記の例では空きのloop8にXXX.imgをマウントした場合を示す。
        sudo losetup /dev/loop8 XXX.img

loop1.jpg

3. ループデバイスを更新する。
   sudo partprobe /dev/loop8

4. パーティションを編集するためにパーティションツールを起動させる。
        sudo gparted /dev/loop8
 ※gparted がインストールされていない場合は事前にsudo apt-get install gparted を実行しておく。


5. GUI上でドライブのext4パーティション(パーティション2)を右クリックし、[リサイズ/移動]をクリックする。右端をスライドさせてパーティションを縮小する。今回はセクタサイズの若干の差のため、数MiBでも大丈夫だと思いますが念のために100MiB~500MiB程度、縮小しました。

gparted1.jpg


gparted2.jpg


6. gparted の適用ボタンを押して変更を反映させる。

※この時点ではシステム上のパーティションサイズが小さくなっただけでイメージファイル(*.img)の容量は変わっていません。イメージファイルの未使用パーティションの空き領域をイメージファイルから削除する必要があります。


gparted3.jpg

7. イメージファイルのパーティションセクタサイズを確認する。
    sudo fdisk -l /dev/loop8
       ↑エル

 下記のように表示されます。Endのセクタ位置が重要です。パーティションの最終セクタの位置をメモします。
  デバイス ブート  Start   End      Block  Id   System
  UUUUUUU         BBBB   CCCC    AAAA   *  Fat
  WWWWW    *    YYYY   ZZZZ     AAAA   *  Linux


8. ループデバイスを解除する。(追記)
  sudo losetup -d /dev/loop8

9. イメージファイルの空き領域を削除します。
         sudo truncate --size=$[(ZZZZ+1)*512] XXX.img
※重要な点は最終セクタから次の空き領域を削除するため、パーティションの最終セクタ+1を設定する点です。

terminal.jpg

これでイメージファイル(*.img)を縮小することができました。今回はVirtualBox上で実行したUbuntuでファイル操作を行いました。他にも専用スクリプトやresize2fsを使用する方法などありますが、環境によってうまくいかない場合がありました。上記の方法だと手間はかかりますが、RaspberrypiやTinkerboard、Nanopiといった様々なSBCでも適用できると思います。

posted by Crescent at 00:00| Comment(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2020年02月22日

おすすめMakerプロジェクトサイト

今回は電子工作やモノづくりのヒントや種を見つける際に便利なサイトを紹介します。

■電子工作系プロジェクトサイト

■ハイレベルな電子工作系プロジェクトサイト

■メカ・ハードウェア系プロジェクトサイト

■日本のモノづくり紹介サイト

■海外電子部品CtoCサイト

■3Dプリント向けの3Dデータサイト

■電子部品販売サイト Digikey 新製品情報

■電子部品販売サイト Mouser 新製品情報

時間がある時に見ているとモノづくりのモチベーションが上がるサイトばかりです。単に情報収集だけでなく、応用や関連情報を探すのにも非常に役立ちます。
posted by Crescent at 00:00| Comment(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2020年01月11日

Teraterm 16進数送信

前回紹介したUART I2CプロトコルブリッジをTeratermからマクロで制御する際に戸惑ったことがあったので紹介します。

Teratermには16進数で表示、送信する機能があります。ただ、この機能が少し厄介でうまく表示や送信できない制約があります。この制約を知らずになかなかUART I2Cプロトコルブリッジが意図して通りに動かなく試行錯誤してしまいました。


テスト0x00〜0xFFまでをUSBシリアルポートに送信し、ポートを結線してループバックで受信データを表示させます。送信する際のマクロは下記の通りです。

setdebug 2
mpause 500
send $00$01$02$03$04$05$06$07$08$09$0A$0B$0C$0D$0E$0F
send $10$11$12$13$14$15$16$17$18$19$1A$1B$1C$1D$1E$1F
send $20$21$22$23$24$25$26$27$28$29$2A$2B$2C$2D$2E$2F
send $30$31$32$33$34$35$36$37$38$39$3A$3B$3C$3D$3E$3F
send $40$41$42$43$44$45$46$47$48$49$4A$4B$4C$4D$4E$4F
send $50$51$52$53$54$55$56$57$58$59$5A$5B$5C$5D$5E$5F
send $60$61$62$63$64$65$66$67$68$69$6A$6B$6C$6D$6E$6F
send $70$71$72$73$74$75$76$77$78$79$7A$7B$7C$7D$7E$7F
send $80$81$82$83$84$85$86$87$88$89$8A$8B$8C$8D$8E$8F
send $90$91$92$93$94$95$96$97$98$99$9A$9B$9C$9D$9E$9F
send $A0$A1$A2$A3$A4$A5$A6$A7$A8$A9$AA$AB$AC$AD$AE$AF
send $B0$B1$B2$B3$B4$B5$B6$B7$B8$B9$BA$BB$BC$BD$BE$BF
send $C0$C1$C2$C3$C4$C5$C6$C7$C8$C9$CA$CB$CC$CD$CE$CF
send $D0$D1$D2$D3$D4$D5$D6$D7$D8$D9$DA$DB$DC$DD$DE$DF
send $E0$E1$E2$E3$E4$E5$E6$E7$E8$E9$EA$EB$EC$ED$EE$EF
send $F0$F1$F2$F3$F4$F5$F6$F7$F8$F9$FA$FB$FC$FD$FE$FF
mpause 100
setdebug 0
mpause 100


Teratermが日本語設定の場合は下記のように0x7F以降、意図しない送信データを含み、正しく表示もされません。

teraterm-1.jpg


Teratermが英語設定の場合は下記のように意図通りに動作しました。

teraterm-2.jpg

debug modeを有効かしている場合は言語を英語、デフォルトに設定することが必要です。

teraterm-3.jpg

0x7Fまでは正しく動作するため、制約に気づきづらく余計に試行錯誤してしまいました。
posted by Crescent at 00:00| Comment(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする

2019年11月09日

スリープ不具合調査 その2

対策しても、時々再発してしまうことがあったため、再度試行錯誤してみました。


普段はメインPCは電源を切らず、使わないときはスリープや休止で運用しています。使用しているPCのマザーボードはIntel i5-8400+ ASROCK製 H310M-ITX/acを使用しています。

High Definition Audio Controllerが原因と分かっていますが、以前、紹介した方法の「powercfg」コマンドでは完治しませんでした。


今回はドライバ側から原因を追ってみまいした。RealtechのオーディオドライバーをインストールするとRealtech Audio Cosoleを利用することができます。

「デバイス詳細設定」の項目から「フロントパネル」を「ヘッドフォン」に設定した上で、コネクタ設定「フロントパネルのジャックポップアップダイアログを無効にする」が「オフ」になっていたため、「オン」にして無効化しました。合わせて、「デバイスを差し込むとき、ジャック検出を有効にする」が「オン」になっていたため、「オフ」に設定しました。


realtech-audio.jpg

ジャック検出の無効化で様子を見てみるとスリープ状態に入らず、勝手に復帰する不具合はなくなりました。原因はジャック検出だったようです。一旦、様子をみてみたいと思います。

posted by Crescent at 00:00| Comment(0) | ナレッジ | このブログの読者になる | 更新情報をチェックする