2021年7月15日木曜日

Docker で MemSQL を試す

今日は入手から起動するところまで。

アカウント登録

SingleStore is The Database of Now™ Powering Modern Applications and Analytical Systems」 にアクセスし、右上の Start Free → ボタン押下。

登録フォームに情報を入力し、ページに従ってアカウント登録を行う。

ライセンスキー取得

アカウント登録完了後、ログインし、ポータルの左メニューから Software Licenses を選択すると、ライセンスキーが確認できるのでメモ。

MemSQL 動作確認

Docker コンテナ起動

# 「ライセンスキー取得」でメモした文字列を設定
$MEM_SQL_LICENSE_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# MemSQL 管理コンソールに root ログインする際に使用するパスワードを設定
$MEM_SQL_ROOT_PASSWORD="yyyyyyy"

# MemSQL 用の volume 作成
docker volume create memsql

# コンテナ初期化
docker run -i --init `
    --name memsql-ciab1 `
    -e LICENSE_KEY=$MEM_SQL_LICENSE_KEY `
    -e ROOT_PASSWORD=$MEM_SQL_ROOT_PASSWORD `
    -e START_AFTER_INIT=Y `
    -v "memsql:/var/lib/memsql" `
    -p 3306:3306 -p 8080:8080 `
    memsql/cluster-in-a-box

MemSQL へ接続

http://localhost:8080 へアクセスすると、管理コンソールへ接続できる。

また、 docker exec でコンテナ内のクライアントを使用することもできる。

後片付け

Ctrl-C でコンテナから抜けたうえで、以下コマンドを実行。

コンテナ起動時に初期データを投入するのを試す

/init.sql にファイルを入れると、初期化時に実行してくれるようなので、そちらも試してみる。

以下 SQL ファイルを作成し、 init.sql という名前で保存。

コンテナ起動時に、 -v/init.sql へマウントする。

http://localhost:8080 に接続。はい、いけてるっぽい。

後片付け

Ctrl-C でコンテナから抜けたうえで、以下コマンドを実行。

以上。

参考資料

2021年7月13日火曜日

Windows で shiguredo/momo を Jetson Xavier NX / AGX 向けにビルドする

基本的に momo/BUILD_LINUX.md at develop · shiguredo/momo を見れば OK.

前提

  • OS: Windows 11 Pro 21H2
  • Docker: Docker version 20.10.7, build f0df350

ソースコード取得

git clone https://github.com/shiguredo/momo.git
cd momo

ビルド用コンテナ環境立ち上げ

ビルドに Docker が必要なので、コンテナにソケットを渡してしまう。

docker run -it --rm -v "$(pwd):/work" --workdir=/work -v "/var/run/docker.sock:/var/run/docker.sock" docker:20.10

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

ビルドに bashgit が必要。

ビルド結果のバイナリを簡易的に確認するため、 file もインストール。

apk add bash git file

ビルド

ビルド手順通りに Ubuntu 18.04 (armv8) Jetson Xavier NX / AGX 向けバイナリを作成する。

cd build
./build.sh --no-mount ubuntu-18.04_armv8_jetson_xavier

/work/_build/ubuntu-18.04_armv8_jetson_xavier/momo にバイナリが出力された。

/work/build # file /work/_build/ubuntu-18.04_armv8_jetson_xavier/momo
/work/_build/ubuntu-18.04_armv8_jetson_xavier/momo: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped

後は docker cp コマンドでバイナリを抽出して Jetson にコピーすれば OK なのかな?

とりあえずここまで、以上。

参考資料

2021年7月7日水曜日

Raspberry Pi 4 Model B の WiFi 設定を CLI で行う

やっていきます。

前提

WiFi デバイスの有効化

/boot/config.txt に記載した dtoverlay=disable-wifi を削除。

WiFi 情報設定

/etc/wpa_supplicant/wpa_supplicant.conf に、 WiFi 情報を追記する。

設定ファイルにパスフレーズが平文で記載されているのは気持ち悪いので、暗号化した文字列を記載する。

sudo -s

# 基本情報
SSID="xxxxxxxx"
PASSPHRASE="yyyyyyyy"

# 暗号化後のパスフレーズを抽出
 PSK=$(wpa_passphrase ${SSID} ${PASSPHRASE} | awk -F= 'NR==4{print $2}')

# WiFi 設定追記
cat << EOS >> /etc/wpa_supplicant/wpa_supplicant.conf
country=JP

network={
  scan_ssid=1
  ssid="${SSID}"
  psk=${PSK}
}
EOS
exit
  • scan_ssid=1: SSID ステルス機能を使って隠れている AP につなげに行く

再起動

wpa_supplicant やネットワークインターフェースを再起動しても有効にならなかった…。

sudo reboot

※ AP の MAC フィルターを使用している場合、適切に設定すること。

無線確認

ip address コマンドで、 wlan0 に IP が割り当たっていることを確認する。

参考資料

Raspberry Pi で mlterm-fb をビルドする

やっていきます。

前提

方針

mlterm は raspbian の apt リポジトリに登録済みなので、そこからソースコードを取得し、 mlterm-fb が有効になるようビルドオプションを修正してビルドする。

ビルドに必要パッケージのインストール

ソースパッケージ取得有効化

/etc/apt/sources.list を修正し、ソースパッケージを取得できるようにする

sudo sed -i -e 's/#deb-src/deb-src/g' /etc/apt/sources.list
sudo apt-get update

依存パッケージインストール

sudo apt-get build-dep mlterm

ソースの取得・展開

apt-get source でソースパッケージをダウンロードし、カレントディレクトリに展開してくれる。

mkdir mlterm
cd mlterm
apt-get source mlterm

実行後、カレントディレクトリにソースパッケージのアーカイブファイルと展開後のディレクトリがあるのが確認できる。

pi@raspberrypi:~/project/mlterm $ ls
mlterm-3.8.6  mlterm_3.8.6-2.debian.tar.xz  mlterm_3.8.6-2.dsc  mlterm_3.8.6.orig.tar.gz

ビルド・インストール

cd mlterm-3.8.6/
./configure --with-gui=fb
make
sudo make install
sudo ldconfig

日本語フォントインストール

sudo apt-get install fonts-ipafont

動作確認

Raspberry Pi に繋がったディスプレイとキーボードでログインし、 mlterm-fb を起動する。

mlterm-fb

デフォルトだと白背景で、左にスクロールバーがあるターミナルが開くはず。

以上。

参考資料

Raspberry Pi 4 Model B の実験環境構築手順まとめ

前回, 前々回 とラズパイで遊んだが、 初期設定のあたりを見直したので手順をまとめておく。

前提

  • 作業環境
    • Windows 11 Pro
  • 動作環境
    • Raspberry Pi 4 Model B 8GB
  • インストールするもの
    • Raspberry Pi OS Lite(Desktop 環境のないイメージ)

今回使ったハードウェア

Raspberry Pi OS のインストール

SD カードへの焼込み

  1. microSD カードを PC へ差し込み、どのドライブに割り当たったかを確認(今回は D: に割り当たった)
  2. Teach, Learn, and Make with Raspberry Pi へアクセス
  3. Software -> Help -> GET STARTED WITH RASPBERRY PI を押下
    1. Raspberry Pi OS – Raspberry Pi からイメージ作成アプリ(Raspberry Pi Imager)ダウンロード
    2. ダウンロードした imager_1.6.2.exe を実行
    3. Raspberry Pi Imager を起動
    4. CHOOOSE OS -> Raspberry Pi OS (other) -> Raspberry Pi OS Lite (32-bit) を選択
    5. CHOOSE STORAGE -> SD カードデバイスを選択(今回は D:)
    6. WRITE 押下
    7. CONTINUE 押下

設定ファイル配置

SD カードを PC に挿し直し、リムーバブルディスクのルートに以下 cmdline.txt, config.txt, ssh を配置。

cmdline.txt

console=tty1 root=PARTUUID=9730496b-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh

config.txt

# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
#sdtv_mode=2

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18

# Additional overlays and parameters are documented /boot/overlays/README

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

[pi4]
# Enable DRM VC4 V3D driver on top of the dispmanx display stack
#dtoverlay=vc4-fkms-v3d
max_framebuffers=2

[all]
# ディスプレイを 90 度回転
#dtoverlay=vc4-fkms-v3d
dtoverlay=hyperpixel4
display_rotate=1

# ON/OFF スイッチ実装
# 以下のようにスイッチをつなげることで、スイッチによる起動・シャットダウンが可能
# +---------+  +---------------+
# | SW PIN1 |--| PIN 5(GPIO 3) |
# +---------+  +---------------+
# 
# +---------+  +------------+
# | SW PIN2 |--| PIN 6(GND) |
# +---------+  +------------+
dtoverlay=gpio-shutdown

# UART 有効化
enable_uart=1

# 無線デバイス類を無効化
dtoverlay=disable-bt
dtoverlay=disable-wifi

ssh(空ファイル)

初期設定

SD カードを Raspberry Pi へ入れて起動する。

起動後、 ssh でログインできるようになっているので接続する。

ログイン情報は以下の通り。

  • ユーザー名: pi
  • パスワード: raspberry
ssh pi@raspberrypi

パスワード変更

passwd

日本語設定

sudo raspi-config
  1. Locale 設定
    1. 1 Localisation Options -> L1 locale -> ja_JP.UTF-8 UTF-8 にチェックを入れて Ok
    2. C.UTF-8 を選択
  2. キーボード設定
    1. 5 Localisation Options -> L3 Keyboard -> Generic 105 PC (intl.) -> Other -> Japanese を選択
    2. Japanese を選択
    3. The default for the keyboard layout を選択
    4. No compose key を選択
  3. タイムゾーン設定
    1. 5 Localisation Options -> L2 Timezone -> Asia -> Tokyo を選択
  • タイムゾーン: date で確認
  • Locale: ログアウト→ログインしてから locale で確認
  • キーボード: ラズパイにつながっているディスプレイとキーボードで /, | あたりを入力して確認

一通りアップデート

sudo apt-get update
sudo apt-get dist-upgrade

以上。

2021年7月5日月曜日

Raspberry Pi 4 Model B に GPS を接続して NTP サーバーにしたかったがダメだった

必要なソフトをいれて接続してみたけど、 GPS モジュールが信号を受信していないっぽくて上手くいかない。

とりあえずやったことメモを残す。

GPS 受信キット組み立て

GPS受信機キット 1PPS出力付き 「みちびき」3機受信対応: センサ一般 秋月電子通商-電子部品・ネット通販 を購入。

  1. 付属の L 型ピンが 6 ピンだったので、ニッパーで 1 ピンを取り外す
  2. 「1.」のピンを 5V, GND, RXD, TXD, 1pps にはんだ付け

今回は、バックアップ電源は不要なので電池ソケットの取り付けは行わなかった。

Raspberry Pi の準備

前回 の手順の「オーバーレイファイルシステムの有効化」以外を実施

GPS 用の UART 有効化

sudo sh -c 'echo "enable_uart=1" >> /boot/config.txt'

reboot

GPS 接続

GPS モジュールと Raspberry Pi のピンを、以下のようにつなげる。

+------+  +-----------+
| 5V   |--| PIN 4(5V) |
+------+  +-----------+

+------+  +------------+
| GND  |--| PIN 6(GND) |
+------+  +------------+

+------+  +----------------+
| RXD  |--| PIN 8(GPIO 14) |
+------+  +----------------+

+------+  +-----------------+
| TXD  |--| PIN 10(GPIO 15) |
+------+  +-----------------+

+------+  +-----------------+
| 1pps |--| PIN 12(GPIO 18) |
+------+  +-----------------+

ソフトウェアの準備

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

sudo apt-get install -y ntp gpsd gpsd-clients pps-tools setserial

ntpd 動作確認

とりあえず、普通の NTP サーバーを参照して同期してみる。

sudo sh -c 'echo "server ntp.nict.jp iburst" >> /etc/ntp.conf'
systemctl restart ntp

ntpq -p で nict のサーバーが追加されていることを確認。

シリアルをローレイテンシーモードで実行するための設定

/etc/rc.localexit 0 の前に、以下コマンドを追加。

/usr/bin/setserial /dev/ttyS0 low_latency

pps 設定

pps モジュール有効化

sudo sh -c 'echo "pps-gpio" >> /etc/modules'
sudo sh -c 'echo "dtoverlay=pps-gpio,gpiopin=18" >> /boot/config.txt'
reboot

lsmod でモジュールが有効化されていることを確認。

lsmod | grep pps

gpsd 設定

/etc/default/gpsd を修正。

/etc/default/gpsd

START_DAEMON="true"
USBAUTO="false"
DEVICES="/dev/ttyS0 /dev/pps0"
GPSD_OPTIONS="-n"
GPSD_SOCKET="/var/run/gpsd.sock"

動作確認

gpsmon で GPS 情報の取得ができるはずだが、ずっと GPS 信号をつかまない…。

GSP モジュールの LED が点滅していないので基盤側っぽいのだがどうなんだろうか。

後で別モジュールを調達して試してみる。

今回はここまで。

その他

systemd による自動起動をしてみる

/etc/rc.local への追記で済ませたが、 systemd でやりたい場合には以下のようになる。

/etc/systemd/system/serial.service を作成し、以下のように編集。

[Unit]
Description= Set low latency to /dev/ttyS0
After=syslog.target

[Service]
Type=simple
Restart=no
ExecStart=/usr/bin/setserial /dev/ttyS0 low_latency

[Install]
WantedBy=multi-user.target

systemd で自動起動を有効化。

sudo systemctl enable serial

参考資料

Raspberry Pi 4 Model B で Raspberry Pi OS を動かす

買って放置したままの Raspberry Pi に火を入れます。

インストールは基本的に、Setting up your Raspberry Pi - Introduction | Raspberry Pi Projects の手順に従うだけ。

前提

  • 作業環境
    • Windows 11 Pro
  • 動作環境
    • Raspberry Pi 4 Model B 8GB
    • Raspberry Pi 3 Model B+
  • インストールするもの
    • Raspberry Pi OS Lite(Desktop 環境のないイメージ)
  • 準備したハードウェア
    • midroSD カード : 家に転がっていたやつ。 32 GB。 SD カード変換アダプタとセットのやつ。
    • SD カードリーダー : これも家に転がっていたやつ。

Raspberry Pi OS のインストール

  1. microSD カードを PC へ差し込み、どのドライブに割り当たったかを確認(今回は D: に割り当たった)
  2. Teach, Learn, and Make with Raspberry Pi へアクセス
  3. Software -> Help -> GET STARTED WITH RASPBERRY PI を押下
    1. Raspberry Pi OS – Raspberry Pi からイメージ作成アプリ(Raspberry Pi Imager)ダウンロード
    2. ダウンロードした imager_1.6.2.exe を実行
    3. Raspberry Pi Imager を起動
    4. CHOOOSE OS -> Raspberry Pi OS (other) -> Raspberry Pi OS Lite (32-bit) を選択
    5. CHOOSE STORAGE -> SD カードデバイスを選択(今回は D:)
    6. WRITE 押下
    7. CONTINUE 押下
  4. SD カードを Raspberry Pi に挿入。 HDMI, キーボード, LAN ケーブル, microUSB(電源)をつなげる。
  5. 以下情報でログイン
    • ユーザー名: pi
    • パスワード: raspberry

初期設定

パッケージアップデート

一通り新しいものを使いたいので dist-upgrade する。

sudo apt-get update
sudo apt-get dist-upgrade

自環境用のカスタマイズ

初期パスワード変更

passwd

日本語キーボード設定

sudo raspi-config
  1. Locale 設定
    1. 1 Localisation Options -> L1 locale -> ja_JP.UTF-8 UTF-8 にチェックを入れて Ok
    2. ja_JP.UTF-8 を選択
  2. 5 Localisation Options -> L3 Keyboard -> Generic 105 PC (intl.) -> Other -> Japanese
  3. Japanese を選択
  4. The default for the keyboard layout を選択
  5. No compose key を選択

/, | あたりで動作確認。

ディスプレイを 90 度回転

ディスプレイ配置の問題て縦置きにしているので…。

Raspberry Pi 4 以降

/boot/config.txt を修正。

  1. [pi4] セクションの dtoverlay=vc4-fkms-v3d をコメントアウト
  2. [all] セクションに dtoverlay=hyperpixel4display_rotate=1 を追加
sudo vi /boot/config.txt'
reboot

Raspberry Pi 3 以前

/boot/config.txtdisplay_hdmi_rotate=1 を追加。

sudo sh -c 'echo "display_rotate=1" >> /boot/config.txt'
reboot

電源ボタン実装

設定ファイル修正

/boot/config.txtdtoverlay=gpio-shutdown を追加。

sudo sh -c 'echo "dtoverlay=gpio-shutdown" >> /boot/config.txt'
shutdown -h now

スイッチ接続

電源ケーブルを抜いて、スイッチに接続する。

+---------+  +---------------+
| SW PIN1 |--| PIN 5(GPIO 3) |
+---------+  +---------------+

+---------+  +------------+
| SW PIN2 |--| PIN 6(GND) |
+---------+  +------------+

スイッチ押下で起動・シャットダウンができるようになる。

シリアルコンソール無効化

/boot/cmdline.txt 内の console=serial0,115200 の記述を削除。

sudo sed -i.bkup -e 's/console=serial0,115200 //' /boot/cmdline.txt
reboot

オーバーレイファイルシステムの有効化

もろもろの設定が完了したら、 SD カード読み書き回数を削減するため、オーバーレイファイルシステムの有効化を行う。

これにより、電源断によるファイルシステム破損防止と、 SD カードの寿命を伸ばすことを実現する。

sudo raspi-config
  1. 4 Performance Options -> Overlay File System
    • Would you like the overlay file system to be enabled? : Yes
    • The overlay file system is enabled. : Ok
    • Would you like the boot partition to be write-protected? : Yes
    • The boot partition is read-only. : Ok
  2. Finish 選択

その他

/boot は、SD カードを挿し直すと Windows でも読み書きできるので、あらかじめ Windows 上で編集するというのもアリ。

今回使ったものたち

参考資料