2020年12月27日日曜日

SMTPs / POPs ゲートウェイを立てる

 ウチの HDD 録画機であるところの VARDIA RD-S1004K,ネット録画予約するにはメールを介してやり取りするが,古い機種なので SMTP-AUTH / SMTP over SSL / POP over SSL にことごとく対応していない.
プロバイダが提供するメールサーバはこれらが必須になったので,ローカルでメールサーバを立てようかと思ったけど,メールサーバは非常に管理がめんどくさい.
なので素の SMTP / POP を SMTP-AUTH over SSL (SMTPs) / POP over SSL (POPs) に変換するゲートウェイを立ててメール処理自体は gmail のメールサーバに丸投げすることにした.

で,* over SSL の部分は,stone で以下のようにすれば実現できる.

stone smtp.gmail.com:465/ssl 10025 -- pop.gmail.com:995/ssl 110
これで少なくとも POPs に関しては,stone を実行しているマシンのポート 110 で POP アクセスできる.

次に SMTP を SMTP AUTH に変換する簡単なゲートウェイプログラムを作った.→GitHub
SMTP AUTH のプロトコルはググれば色々出てくる.
これを上記 stone と同じサーバに仕掛けて以下のような経路を作ると,

port25 → [SMTP AUTH GW] → port10025 → [stone] → gmail smtp (port993)
port 25 で受けた素の SMTP プロトコルを SMTPs に変換して gmail smtp サーバに転送する.

試しに telnet で手動でメール投げてみた.

  [yoshi@rafale ~]# telnet ag300h 25
  Trying 192.168.0.254...
  Connected to ag300h.
  Escape character is '^]'.
  220 smtp.gmail.com ESMTP y23sm35522980pfc.178 - gsmtp
* EHLO hoge.com
  250-smtp.gmail.com at your service, [xx.xx.xx.xx]
  250-SIZE 35882577
  250-8BITMIME
  250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
  250-ENHANCEDSTATUSCODES
  250-PIPELINING
  250-CHUNKING
  250 SMTPUTF8
* MAIL FROM: <yyyy@gmail.com>
  250 2.1.0 OK y23sm35522980pfc.178 - gsmtp
* RCPT TO: <xxxx@gmail.com>
  250 2.1.5 OK y23sm35522980pfc.178 - gsmtp
* DATA
  354  Go ahead y23sm35522980pfc.178 - gsmtp
* From: yyyy@gmail.com
* To: xxxx@gmail.com
* Subject: TEST
* 
* test mail
* .
  250 2.0.0 OK  1609073620 y23sm35522980pfc.178 - gsmtp
* QUIT
  221 2.0.0 closing connection y23sm35522980pfc.178 - gsmtp
  Connection closed by foreign host.
  [yoshi@rafale ~]#
行頭が * の行が手入力した行.暗号化は stone がやってくれるので telnet で素のテキストでやり取りできるし,EHLO コマンドを投げたあと裏では SMTP AUTH 認証が走っているので,MAIL コマンドが受け付けられているのがわかる.

これで RD-S1004 が延命できたヽ(´ー`)ノ

2020年12月26日土曜日

OpenWRT で stone-ssl を動かす (2020年版)

Buffalo WZR-HP-AG300H で DD-WRT を動かしていたけど,DD-WRT はもう長らく開発が止まってるので,OpenWRT の最新版を入れた.
で stone をクロスコンパイルしてこれで動かしてみる.
下記修正を行ったものを GitHub で公開しているので,欲しい人はどうぞ. https://github.com/yoshinrt/stone
の branch: ag300h

●環境
ハード: Buffalo WZR-HP-AG300H
OpenWRT: 19.07.5 r11257-5090152ae3 / LuCI openwrt-19.07 branch git-20.341.57626-51f55b5
stone: 2.3e

●以下の手順通りに OpenWRT ビルド環境を構築
https://openwrt.org/docs/guide-developer/quickstart-build-images

●環境変数の設定
export OPENWRT_DIR=~/openwrt
export PATH=$OPENWRT_DIR/staging_dir/toolchain-mips_24kc_gcc-8.4.0_musl/bin:$PATH
export STAGING_DIR=$OPENWRT_DIR/staging_dir/toolchain-mips_24kc_gcc-8.4.0_musl
●openssl のビルド
OpenWRT の toolchain でビルドされる openssh は 1.1.1i で stone の想定と合っていないので,旧 ver. をビルドして static link するのが楽.
1.0.2u なら無理なく通せそうなので,これ持ってきて configure, make.
./Configure linux-mips32 --prefix=/usr --libdir=lib \
  --openssldir=/etc/ssl --cross-compile-prefix="mips-openwrt-linux-musl-" \
  -I$OPENWRT_DIR/staging_dir/toolchain-mips_24kc_gcc-8.4.0_musl/usr/include \
  -I$OPENWRT_DIR/staging_dir/toolchain-mips_24kc_gcc-8.4.0_musl/include/fortify \
  -I$OPENWRT_DIR/staging_dir/toolchain-mips_24kc_gcc-8.4.0_musl/include \
  -L$OPENWRT_DIR/staging_dir/toolchain-mips_24kc_gcc-8.4.0_musl/usr/lib \
  -L$OPENWRT_DIR/staging_dir/toolchain-mips_24kc_gcc-8.4.0_musl/lib \
  -znow -zrelro -Wl,--gc-sections shared enable-weak-ssl-ciphers \
  enable-ssl enable-ssl2 enable-ssl2-method enable-ssl3 enable-ssl3-method \
  -DOPENSSL_PREFER_CHACHA_OVER_GCM -DOPENSSL_SMALL_FOOTPRINT
make
キモは SSLv2, SSLv3 あたりを有効にしないと,stone リンク時に SSLv2_server_method(), SSLv3_server_method() が無いと怒られる.

●AG300H 用の make エントリ作成
TOOLDIR_AG300H = $(OPENWRT_DIR)/staging_dir/target-mips_24kc_musl
ag300h:
    $(MAKE) CC="mips-openwrt-linux-musl-gcc" CFLAGS="$(CFLAGS) -D_GNU_SOURCE \
        -I$(TOOLDIR_AG300H)/usr/include -L$(TOOLDIR_AG300H)/usr/lib" \
        FLAGS="-O -Wall -DPTHREAD -DUNIX_DAEMON -DPRCTL $(FLAGS)" LIBS="-lpthread $(LIBS)" stone
    mips-openwrt-linux-musl-strip stone

ag300h-pop:
    $(MAKE) CC="mips-openwrt-linux-musl-gcc" TARGET=ag300h pop_stone

ag300h-ssl:
    $(MAKE) CC="mips-openwrt-linux-musl-gcc" CFLAGS="-static -I./openssl/include -L./openssl" \
        SSL_LIBS="-lssl -lcrypto" TARGET=ag300h ssl_stone
基本的に fon あたりをコピーして修正するのが楽.

というわけで,AG300H に持っていって動いたヽ(´ー`)ノ
SSLv2, SSLv3 もちゃんと組み込まれている.
root@ag300h:~# stone -h ssl
Dec 26 17:33:25.671984 6325176 stone 2.3e  http://www.gcd.org/sengoku/stone/
Dec 26 17:33:25.673056 6325176 Copyright(C)2007 by Hiroaki Sengoku 
Dec 26 17:33:25.675053 6325176 using OpenSSL 1.0.2u  20 Dec 2019  http://www.openssl.org/
opt:  -q             ; SSL client option
      -z             ; SSL server option
SSL:   default            ; reset to default
 (略)
       tls1               ; just use TLSv1
       ssl3               ; just use SSLv3
       ssl2               ; just use SSLv2
       no_tls1            ; turn off TLSv1
       no_ssl3            ; turn off SSLv3
       no_ssl2            ; turn off SSLv2
 (略)

2020年12月18日金曜日

古い Android 端末を Linux サーバとして復活させる

ちょっとしたサーバを立ち上げる必要が出てきたので,余ってて使いみちがない GalaxyNote SC-05D で Linux 環境を構築することにした.そういうことをするための UserLAnd というアプリがあるが,SC-05D は Android 4.1 と古く UserLAnd が入らないので,それの昔のバージョンである GNURoot を入れる.

あとは sshd を立ち上げてしまえばあとはなんとでもなるが,GNURoot のメンテはもう終わってるらしく,色々環境を修正しないといけない.


(1) apt 環境修正
apt-get update が 404 になるので,/etc/apt/sources.list を修正

root@localhost:~# cat /etc/apt/sources.list
deb http://archive.debian.org/debian/ wheezy main contrib non-free
deb-src http://archive.debian.org/debian/ wheezy main contrib non-free
root@localhost:~# apt-get update
root@localhost:~# apt-get upgrade
(2) sshd インストール,環境修正
root@localhost:~# apt-get install openssh-server
root@localhost:~# passwd                ← root パスワード変更

/etc/ssh/sshd_config の以下を修正
Port 10022
UsePrivilegeSeparation no
PermitRootLogin yes

root@localhost:~# service ssh restart   ← sshd 起動
で PC から WinSCP を使って GNote にファイル転送したところ,大きいファイルが GNURoot 環境で読めない & 消せないファイルが出来上がって困ったが,WinSCP の設定を図のとおりにすることで改善した.

ちょっと使ってみたところ限りなく普通の Linux に近い.なんと言っても apt でビルド済みのパッケージがインストールできるので,非常に使い勝手が良い.
余ってる Android 端末の活用方法としてはありなんじゃないだろうか.


2020年12月11日金曜日

ドライブレコーダーもどき設置

バイク買ってから週末はほぼバイク乗ってるので,ドライブレコーダーをつけようと思った.
車用のドラレコは \3,000 位からそこそこまともなやつがあるが,バイク用はカメラと本体が分離式 かつ 防水でないといけないので,安いやつがない.
で 3年くらい前にヘルメットカメラ用に買った小型カメラ Quelima SQ11 Mini Camera がドラレコ的にも動く (ループ録画,USB 電源供給開始/停止に連動して録画開始/停止) ことを発見したので,値が下がるまでのつなぎにこれを GROM に付けることにした.

こいつは全く防水されていないので 3D プリンターでケースとマウンタを作成.
前面だけ透明なプラスチック板をホットボンドで接着防水.
マウンタをヘッドライト下に貼り付けて固定した.
電源はカウル内を這わせて前作った USB 電源ユニットに接続する.
近くで見るとアレだけど,黒色なんで遠くから見れば目立たない.

画質はそれなりだけど,証拠映像としては問題なさそう.
まぁカメラ代 \1,000 でドラレコがついたと思えば満足.

2020年11月27日金曜日

見えるぞ…私にも波が見える!

電子工作するたびにオシロスコープ欲しいなぁと思いつつ,年 1回あるかどうかの少ない使用頻度から,ずっと買わずにいた.
で AliExpress を眺めていたらテスター一体のオシロスコープ KKmoon kkm828 を見つけたので \5,500 で get! ちょうどテスターの調子悪くなっていたし,テスターなら使用頻度はそこそこあるので,まさに自分にぴったり.

で早速使ってみる.
全体的な質感は全く問題なし.表示もムダに大きいカラーバックライト LCD なので見やすくて良い.
また最大値・最小値ピークホールド,周波数表示,と何に使ったらいいのかわからない機能も充実.

そして本命のオシロスコープ機能.
1CH ながら,トリガ設定や縦横スケール切り替え等,最低限の機能は備わっている.
サンプリングレートも 2.5MHz なので,マイコン電子工作には十分なんじゃなかろうか.
やっと,想像だけでやってきた波形が見えるようになるよヽ(´ー`)ノ
プローブもそこそこしっかりした作りだけど,欲を言えば先端は金メッキしてほしかった.
梱包の箱は相変わらずバキバキw

あとは耐久性だけが心配だけど,それが問題なければ,高機能テスター & オシロスコープがこの値段で買えたので,満足ヽ(´ー`)ノ

2020年11月24日火曜日

パワーヲ解放セヨ

通勤の足である JOG 3KJ,ちょっと前に燃費改善しようとハイスピードプーリーキットを入れたら,GPS 読みで 69km/h 出る一発免停マシンになってしまったw なのでボアアップして原二に変更することにした.(ちなみに燃費は 24km/L → 28km/L に改善)

馬力アップが目的ではなく耐久性や燃費を落としたくないので,ボアアップとしては最小の 59.6cc のキット KN 企画 Y1001 を¥8,262 で購入.

早速シリンダー交換作業開始.エンジンは載せたまま作業できるが,シリンダーを取り外すときにフレームに当たって抜けなくて困った.リアダンパーを外してリアタイヤの下に適当な木を敷き,リアサスを沈めるようにすれば外すことができた.

サクッと交換完了.特殊な工具も不要なので難易度は高くない.一番苦労したのはピストンピンを固定するサークリップをピストンに嵌める作業.

で軽く乗ってみたところ,特に不具合もなく普通に乗ることができた.今の所慣らし中で全開にできないので,馬力が向上したかどうかは不明 20%も排気量が UP したので,中間加速は良くなった.ただしトップスピードは変速比が変わってないので変わらないみたい.

次に役所に行ってボアアップの申請をしてきた.ウチの役所は改造したことがわかる写真や使用したキットの資料提出が必要なので,5P に渡る熱い資料作っていったら 1分くらいでサラッと流された(;´д⊂)
でもらったナンバーはスバリストみたいな番号になったwww

これで堂々と 60km/h 出せるヽ(´ー`)ノ 二段階右折もしなくていいし (やったこと無いけど),追い越し車線も爆走しちゃうんだぜ? しかも税金も自賠責も金額が変わらない,といい事ずくめ.ボアアップキット代もスピード違反の罰金に比べたら安いもの.

2020年10月30日金曜日

グロム スピードメーター補正 完了

グロム スピードメーター補正の続き.

数分に 1回位の頻度でスピードメータ表示が一瞬 1km/h になるので,原因を調べてみた.といってもデバッグに使用できるのは LED 1灯だけw
メーター表示が 1km/h になるということは,メーターに対して出力するパルスが盛大に抜けていることになる.まずスピードセンサー → arduino のパルスが抜けているか調べたところ,それは抜けていなかった.

そうするとメーターへのパルス出力を行っているタイマ制御で何かおかしなことになっているはず.ここからはもう現象から原因を推定するしか無いのだが,パルス出力タイマは,

1. 出力パルス 1個分の時間をタイマで計測
2. その時間に達したら割込み発生,割込みハンドラ内でパルス幅の補正計算を行う
  タイマは並行して 0 に自動的にカウントが戻り,カウントアップを継続する
3. パルス幅の補正計算結果をタイマのカウント最大値として設定,タイマがその値に達したらまた 2. の処理が走る

となっている.ここで 3. でカウント最大値を設定した時,タイマのカウンタがその値をすでに超えていたら,カウンタはその値で止まらずに 0xFFFF まで回ってしまう.その時のパルス幅は時速換算で 0.3km/h なので,メーターとしては 1km/h を表示する.
と辻褄はあっているが,2. の補正計算 (32bit 乗算) は 8bit の AVR にはそんなに重い処理なんだろうか? 100km/h のパルス幅であっても 14414 サイクル@16MHz の処理時間が使えるから,余裕あると思うんだけどなぁ.

まぁ悩んでも仕方ないので以下のように変更.

・補正計算は loop() 内で実施 ( = いつでも割込み可能)
・タイマの割込みルーチンでは,補正計算値をタイマレジスタに設定するだけにする.そうすると,割込み発生からすぐにカウント最大値を設定するので,カウンタがすでに過ぎている可能性は低くなる.

でやってみたら直ったヽ(´ー`)ノ
これでソフトは fix したので,3D プリンタでケースを作った.

車体への取り付けは,バッテリー上とシート下に隙間があったので,ここに設置 (テープ止めwww)
というわけでめでたく完成ヽ(´ー`)ノ これでやっと正確なスピード表示ができる.あとつけようと思ってた USB の口もつけられたんで満足.

ていうか,デジタルメーターなんだから,裏設定かなんかでスピード補正表示とかさせてほしいんだが.スプロケットの歯数変更とか割とみんなやるでしょ.

2020年10月28日水曜日

グロム スピードメーター補正 (2)

グロム スピードメーター補正の続き.

前回は電気的な接続を確認したので,今回は Arduino のプログラムを作成する.
で色々プログラムのこと書こうと思ったけどめんどくさいのでやめたwww 興味ある人は GitHub で公開してるのでどうぞ.
まぁ一言でいうと,タイマでパルス幅を測って,その幅を補正したあと別のタイマで補正パルス幅の信号を出力するだけ.

で,Arduino 用に 5V 電源が必要だけど,AliExpress で 12V -> 5V/3A のレギュレータモジュールを見つけたので,ついでに USB 給電ユニットも作ることにした.
車体側はスピードパルスのギボシ端子がある付近にアクセサリ電源用のコネクタがあるので,こっから取ろうと電圧等を調べてみた.で,ふと気づいたらシート下右側に,いかにも電源をとってくださいとばかりの赤いコネクタがあるではないか.
コネクタの形は同じなのでピンアサインも同じかもと思ったら,GND の位置が違っていた.今回は楽なんでこっちから取ることにした.それ用のコネクタはアリエクで購入→これ.これの値段知ってたらキジマの電源分岐ケーブル買うのがアホらしくなってくるwww

で,ついに完成したので車体に接続して試走してみた.
スピード表示も問題なく,ノイズ等による誤動作等もなく完璧に動作したヽ(´ー`)ノ USB からの充電も問題なさそう.

... と思いきや,数分に 1回,スピードメータ表示が一瞬 1km/h になったりする.多方使用には問題ないものの,やっぱり気になる.
うーん,直すか.

2020年10月26日月曜日

グロム スピードメーター補正 (1)

バイクのメーターは総じてハッピーメーターだけど,グロムは GPS 比較で 10% も速度が高く表示される.これはちょっと酷いので補正したいと思ったけど,既製品は \9,000 とちょっと高い.なので,マイコンで自作することにした.

使うマイコンボードはBIOS パスワードをぶっ壊す! の時に使った Arduino Pro Micro.安い,小型,開発が楽,機能・性能も十分,ということで今回の目的にピッタリ.

まずは車体左のカウルを外し,スピードパルスのギボシを特定する.自分 (JC75) の場合は薄黄色に緑ラインの線だった.わかんなければ適当なキボシ外して車体動かしてメーターの車速が動かなければ,それ.
最初に,Arduino → メーターに信号を渡して,速度とスピードパルス周波数の関係を調べる.自分はロジアナを持ってないので電圧とかは推定するしかなく,多分スピードパルスは 12V の信号と推定されるが,まずはダメ元で 5V を突っ込んでみたら普通にメーターが認識した.
そこでいろいろな周波数の信号を突っ込んでみたところ,大体 1km/h あたり 11.1Hz だということがわかった.

次に車速センサーのパルスを Arduino で拾ってみる.これも 12V だと思ったので抵抗分割で 5V に落としてみたら,Arduino 側で認識できなかった.もしかしてスピードパルス 5V なの? とダイレクトに Arduino に突っ込んでみたら,パルスを認識した.本当はアカンもしれんけど,Arduino に保護ダイオード内蔵されてるしまぁいいか.
我々は特殊な訓練を受けています.良い子は絶対に真似しないでください.

最後に,スピードセンサ → Arduino → メーター とつないでみて,タイヤを動かした時メーターが動くか見てみたところ,バッチリ動いたヽ(´ー`)ノ
これで電気的な接続は pass したので,あとは Arduino のプログラムを作成するだけ.

2020年10月17日土曜日

ケツ痛シート改善ファイナル

前回ウレタンに多数穴開けることでウレタンを柔らかくして,ケツ痛航続距離が倍くらいに伸びたものの,それでも 200km くらいが限界. 
丸一日走り回ることを考えるとこれでは足りないので,ドンキで見つけた低反発クッション (変形させてもじわーと戻るやつ) を貼り付けることにした.

まずはクッションの厚み分,大胆にウレタンをカット.
そしてクッションを貼り付けてシートの形にカット.
カッターで切ったのでかなりガタガタだが,表皮を被せれば目立たないので気にしない.
あと,タンデム乗車位置はもともとウレタンが薄く,削り取れる厚みが 2cm くらいしかないが,クッション (厚さ 4.7cm) を薄く加工したりせずにそのまま貼った.
というのも,自分はいつも一人乗車位置とタンデム乗車位置の境界あたりに着座しているので,ここを薄くするわけにはいかないので.
完成図.
かなり見た目がモコモコになったがw 座り心地は超最高ヽ(´ー`)ノ 200km は余裕になった.

加工にかかった費用はドンキのクッション代 \1,000 だけ.割と簡単だったので,穴なんか開けずに最初からこうしておけばよかった.

あとこのシート (Noi Watdan),フラットシートで複雑な造形が必要ないのと,表皮が立体縫製であまり表皮を引っ張らないで済むので,中身のウレタンがガタガタでもあまり目立たない.安いし加工ベースとしてはおすすめ.