As I Please

MTのいんすとーるの練習と、その他びぼうろく・・・

ubuntu 22.04 on vmware でディスク容量を増やす

vmware側で増やしても自動的に ubuntu 側で増えるわけではない。
以下のサイトの通りにやってうまくいきました。

https://qiita.com/Eustace/items/9c31a9dc381f627feb64

・vmware上で当該ディスクの容量(sda)を増やす
・ubuntu上で /dev/sda の容量を rescanさせる
・parted コマンドで パーティションサイズを変更
・lvextend コマンドで 認識サイズも変更

本当は別ディスクを作成して、そちらを sdb などでattach したほうがよかったかも。

dovecot2.3 on macOSX Monterey 12.5.1

ちょっと各所にちらばっているメールについて、
macmini に ローカルに動く dovecotを動かし、imapサーバーを立ち上げて集約しようかと思い立ち、
インストールのメモ。

  1. dovecot のインストール。
    brew install dovecot
    


    これで 2.3.19.1 がインストールされた。/usr/local/Cellar/dovecot/2.3.19.1/ 以下に展開されてシンボリックリンクがいろいろ張られる。またダミーのユーザーとして、'_dovecot','_dovenull' が作成される。


  2. このまま起動しようとしたら、ちょこちょこエラーが出ていてうまくdaemonに落ちてくれない。
    https://ameblo.jp/naokitakisawa/entry-12663707247.htmlを見て confをいじる。

    % diff dovecot.conf dovecot.conf.org
    25d24
    < protocols = imap
    33d31
    <
    104,120d101
    < #
    < #
    < default_login_user = _dovenull
    < default_internal_user = _dovecot
    < #
    < default_internal_group = mail
    < #
    < # https://www.mail-archive.com/dovecot@dovecot.org/msg85160.html
    < default_vsz_limit = 0
    < #
    < # https://www.systemcodegeeks.com/mac-os/macos-dovecot-setgroups-failed/
    < last_valid_gid = 100
    < #
    < #
    % diff 10-mail.conf 10-mail.conf.org
    30,31c30
    < #mail_location =
    < mail_location = maildir:~/Maildir
    ---
    > #mail_location =
    % diff 10-master.conf 10-master.conf.org
    3d2
    < #default_client_limit = 100
    13d11
    < default_login_user = _dovenull
    18d15
    < default_internal_user = _dovecot
    23d19
    <     port = 20143
    37d32
    <   #process_min_avail = 60
    % diff 10-ssl.conf 10-ssl.conf.org
    7d6
    < ssl = no
    13,16c12,13
    < #ssl_cert =  ssl_cert =  ssl_key =    #args = dovecot
    
    anvilまわりでエラーが出ていたりしたのや、MTA,MTSを使う予定はないので、 メールのデフォルトの置き場所を変えたり、SSL使わないような設定に。
  3. サービスをdaemonで動かすように設定。
    sudo brew services restart dovecot
    

influxdb + grafana + python3 + python-influx データ投入 stringになってしまった。

InfluxDB Error: unsupported mean iterator type: *query.booleanInterruptIterator

というエラーが出た。meanが取れない?何でと思って、influxの中で各種データを見たら、ジャイロ、加速度、温度、気圧、その他全てのデータが 'string'になっていた。 cactiで使っているプログラム(python3)で、redisからデータを取ってきて do.wirte_points で書き込んでるだけだけど、redisで引っ張ってきたデータが文字列処理をしていることもあり、string形式を保ったまま influxdbに放り込まれてたっぽい。 float()とか int()(バッテリーは%の整数値)とcastして放り込み直して解決。


switchbot 温湿度計2つ目 交換品

がamazonから送られてきたのでさっそくつ買ってみた。冷蔵庫の中に新しいものと古いものをほぼ同じ場所に置いて計測。(cactiから influxdb + grafana に移行中)

古いswitchbot温湿度計
switchbot_old_b.png

新しいswitchbot温湿度計
switchbot_new_b.png


データは5分に1回取得するように設定。一目瞭然で、新しい方はほぼデータを拾えているのに、古い方は1時間1回程度。
製品の性能にばらつきありすぎのような気もするけど、中華製ならこんなもんですか?
とりあえずこの新しいものを冷蔵庫に。
また、gatt でエラーが出る件についても、新しい方では解消しなかった。
charastaristicsは同じようだが。。。
ただ、公式githubには、同じことを言っている人がいる。2022/02/10 の投稿のようなのでやはり最近の話っぽい。公式のレスポンスは無いが、そろそろ何か書き込みあるかも。

switchbot 温湿度計2つ目

家の中にセンサーを置いていろいろ(安価に)計測するのに、4年前にはテストで CC2650STKを購入して BlueToothでデータの取得とかやってたが、単純に 温度・湿度程度であれば、SwitchBotの温湿度計が良さそうということで購入してみて、データを取り始めていた。Switchbotハブミニと一緒に導入したら nature remo と同様に Cloudにデータが上がり、auth0 の認証で APIを叩くことで温度・湿度のデータが取れる。が、すでに nature remoもあるし赤外線リモコンはもう不要だし、そもそも Bluetooth でローカルにデータは出ている、RSSIとBatteryはAPIでは取得できず、なので、4000円弱出して ハブミニを買うのをためらっていた。
室内の温度とは別に、冷蔵庫(飲み物用の、出し入れ扉がガラス製)が夏にはときどきエラーを出して内部温度が上がってしまうことが月に1度程度発生していたので、それを検知するのに、もう1つswitchbot温湿度計を買って今年の夏に備えることにてみようと考えた。
CC2650だと、2分以内に connect して繋ぎ続けないと BLEの接続が切れてしまう仕様で消費電力が多くなるが connect しながら使い続ける必要があり、そうなると電源(CR2022)の寿命問題があるので外付けで単3x8本(2本直列x4並列)など作ってみたが最長3ヶ月くらいしかもたなかった。もっとうまいハンドリング手法があるのだろうけど、、、と思いながら switchbot を使ってみたら単4電源2本で半年は優に問題なくデータを出し続けていて、かつ、バッテリー表示が100%と本当か?と思えるくらい。温度だけだけど安定してデータが長期間取れるのであれば、まずはこれで冷蔵庫のモニターは必要十分ということで、amazonでもう1つ買ってみた。

ここから時系列で書いてみると、


  • 新Switchbotで接続・データ取得はうまくいく。ただし液晶の温度で数字で2,3カ所表示されないところがあって、これはちょっと何だかな・・・まぁ冷蔵庫の中に入れるので問題ないか。

  • これを冷蔵庫の中に入れたら、データが電波強度が激減。データがraspberyy pi3では取れない。が、同じ場所にいる iPhoneアプリからは取得可能。でかつ過去データの取得もOK.冷蔵庫の扉のガラス、2重でUVカットとかをうたっているのでこれが影響?

  • データを取得するために、タイムアウト対応を強化(取れないときはあきらめる)したプログラムで動かしてみるが、やはり3時間に1度くらいしかデータを拾って来ない。raspberryp pi3の位置・角度を変えたりしてみたがなかなか良いところは見つからない。

  • 電池消耗を抑えるために、BLEの advertisingデータを拾って温湿度等を取っていたが不安定。アプリだとしっかりconnectしてデータ取得しているようなので、公式のgit.hubにあるpython-hostを見て、connect してデータを取得しようとしたら、古いものはデータが来るが、新しく購入した方はデータが取れない。Errorを返す。どうも、GATTを発行しているところで error になる。2つとも firmwareは同じバージョン(2.6)なのに、、、?とはいえ、CC2650STKでもあった話だから、bluetooth機器だとよくある話なのかも

  • ふと思い立って、古いほうの switchbot を冷蔵庫の中に入れて運用してみたら、これも電波強度は落ちているかもしれないが、raspberry pi3でデータは取得している。時に欠損するときもあるが新しいものとは段違いに取れている。これ、同じものとは言えない?


ということで、同一製品とは言えどうも中身が違うのでは?という感じ。
新しいもののほうが劣化版のような気がするので、液晶表示が欠けるのを理由に、返却・交換してもらうことに。新しいものも劣化している可能性はあるが。

メールがspamassasin (sa-spamd) を通っていない。

spamassasinは怪しいメールには、メール本文の冒頭に警告メッセージをつけてくれるので、スマートフォンなどのメール通知で怪しいメールが来たかどうかをすぐに見分けることができる。本当はすぐに隔離して mailboxに入らないようにすればいいんでしょうが。。。
ところが最近、別のサーバ(MX secondary)に届くメールにそれが入らなくなってしまった。どうも milterでsa-spamd を通らなくなってしまったようだ。
milter-manager ? spamd ? socketのowner,permission ? 何が悪いのかよくわからないまま、perlのライブラリ、ruby、openssl,gpgなどいろいろアップデートしてみたが、なかなか解決と行かなかった。


/var/log/spamd.log をつぶさに追っかけて、spamdがちゃんと起動していないのが原因のよう。
どうも sendmail をバージョンアップしたときからおかしくなってしまったよう。


error: Can't locate Net/SSLeay.pm in @INC
spamd: error: Bad arg length for Socket::unpack_sockaddr_in, length is 28, should be 16

あたりが問題だったようで、以下の記事を参照に、Socket6 を再インストールしたら解決した。
https://freebsd.sing.ne.jp/daily/09/09/05.html

let's encrypt のサーバ証明書を使っていて、iphoneのメールアプリでエラーが表示される件

let's encryptの無料サーバ証明書を、httpsサーバ(このサイト)や他サイトでも利用していて、webだけではなくて、smtp(s)でも流用できるので使っていた。
メールも受信(server)・送信(client) がデフォルトで smtps/starttls を利用するようになってきているようで、
グローバルにauthorized された証明書を使っているほうが、いろいろ良さそう。
imapsは相変わらずプライベートCA+証明書を利用しているけど。

先日、2021/09でlets encrypt の証明書のCA問題の影響を受けて、iOSの標準のメールアプリからメールサーバ(smtps)の接続がうまくいかない(メールが送れなく)なった。imapsでの接続でメールの取得・閲覧はうまくいっているに。
ということでいろいろ調べてみると、openssl 1.0.2 ではCA証明書への辿りの解釈に難があるよう。
で、問題を起こしているのは sendmail が共有ライブラリとして libssl.so をリンクしていてその中身が 1.0.2(またはそれ以前)のホストばっかり!ということに気づいた。opensslは 1.1系を /usr/local/bin/openssl にインストール,libssl.so は /usr/local/lib/ あたりにいたが、sendmailのを作成したときには /usr/lib/libssl.so あたり(/usr/bin/openssl は version 1.0.2!) の共有ライブラリをリンクしていた!
なので対応としては、


  1. openssl 1.1系列(今の最新は1.1.1l)をコンパイルして、共有ライブラリのバージョン(1.1.1)を用意する。

  2. sendmailを作成し直して、openssl(libssl.so or libssl.a) をリンクし直す。


ことに。
sendmailも8.15.2と思ったら、8.17.1が最新なのでこれも sourceから持ってきて recompileした。
$src/devtools/Site/site.config.m4 の設定をよくみて、、、。
EOLになってしまっている、FreeBSD-11.4だと、

APPENDDEF(`conf_smrsh_ENVDEF', `-DCMDDIR="\"/usr/local/libexec/sm.bin\""')
APPENDDEF(`conf_smrsh_ENVDEF', `-DPATH="\"/bin:/usr/bin\""')
define(`confEBINDIR',`/usr/local/libexec')
define(`confMANROOT',`/usr/local/man/cat')
define(`confMANROOTMAN',`/usr/local/man/man')
define(`confMBINDIR',`/usr/local/sbin')
define(`confSBINDIR',`/usr/local/sbin')
define(`confUBINDIR',`/usr/local/bin')
define(`confNO_STATISTICS_INSTALL',`True')
define(`confHFDIR', `/usr/local/share/sendmail')
APPENDDEF(`conf_sendmail_ENVDEF', `-DTCPWRAPPERS')
APPENDDEF(`conf_sendmail_LIBS', `-lwrap')"
APPENDDEF(`conf_sendmail_ENVDEF', `-DNETINET6')
APPENDDEF(`conf_libmilter_ENVDEF', `-DNETINET6')
APPENDDEF(`conf_libsm_ENVDEF', `-DNETINET6')
APPENDDEF(`conf_sendmail_ENVDEF', `-DDANE')
APPENDDEF(`conf_sendmail_ENVDEF', `-I/usr/local/include')
APPENDDEF(`conf_sendmail_ENVDEF', `-DSASL=2')
APPENDDEF(`confLIBDIRS', `-L/usr/local/lib')
APPENDDEF(`conf_sendmail_LIBS', `-lsasl2')
APPENDDEF(`conf_sendmail_ENVDEF', `-DUSE_BLACKLIST')
APPENDDEF(`conf_sendmail_LIBS', `-lblacklist')
APPENDDEF(`conf_libmilter_ENVDEF', `-DMILTER')
APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER')
APPENDDEF(`conf_sendmail_ENVDEF', `-DHASSRANDOMDEV')
APPENDDEF(`confINCDIRS', `-I/usr/local/include')
APPENDDEF(`confLIBDIRS', `-L/usr/local/lib')
APPENDDEF(`confLDOPTS', ``-Wl,-rpath=/usr/local/lib'')
APPENDDEF(`conf_sendmail_ENVDEF', `-DSTARTTLS -DTLS_EC')
APPENDDEF(`conf_sendmail_LIBS', `-lssl -lcrypto')
APPENDDEF(`conf_sendmail_ENVDEF', `-DPICKY_HELO_CHECK')
sendmail-8.15のときとの違いは、、、'_FFR_TLS_EC' だったものが 'TLS_EC'と正規?なパラメータ名になったこと、くらいか。いつものように、milter,sasl2,あたりをlinkすることも忘れないように。

sendmailを展開した $srcトップ にて、'sh ./Build;sh ./Build install'
実はこの作業の前に FreeBSD 11.2 -> 11.4, perlの入れ直し、gccの入れ直しなど大工事あり・・・
それにしても、、、古い OSを使い続けるとどんどん大変になる。

sshへの不正アクセスが多いので、denyhosts をいまさらながらに導入

しつこいのは手動で /etc/hosts.allow をメンテしていたり、/etc/ssh/sshd_config で MaxAuthTries 2 とかですぐにたたき落とすようにしていたけど、やはり自動化しておいたほうが無難かと。

http://tokcs.com/2012/12/freebsd-denyhosts%E3%82%92%E5%B0%8E%E5%85%A5/を見つけてdenyhostsが簡単そうなので、インストールしてみる。
portsから入れたが、python3 が入っていればすんなり入る。
/sbin/iptables を起動しようとしたりするけどとりあえず放っておく。
早速起動したら、/var/log/auth.log を見て、3つのIPアドレスを denyした。
台湾、フランス、ロシア(シベリア)
今後はこの手は必須で入れておく必要ありかなぁ。。。時にアドレスリストのメンテが必要かもしれない(膨大に増えていく?)けど。


ubuntu20 でのサービスの起動・停止・自動起動など

FreeBSDなら 自動起動は /etc/rc.conf あたりで設定、個別のサービスの on/offは /etc/rc.d/, /usr/local/etc/rc.d/ あたりを見るというのは身体に染みついているけど、linux系はよく分かっていなくて、再起動するとサービスが立ち上がってこなかったりというのをよくやらかし、結局よくわかってない。systemctl 使いにならなくては。。。

とりあえず、まとままとまとまっているのは、https://eng-entrance.com/linux_startupあたりか。
start/stop/restart , enable/disable あたり。
サービス一覧は、systemctl list-units あたり?

CentOS6 の /etc/init.d あたりの記憶から抜け出さないと。

webコンテンツの localキャッシュ時の改行コード問題

jsonの内容を定期的にチェックするのに、一度取得してきた textデータをローカルに保存して、毎回比較(本当は headや not modifiedを利用すべきだろうけど、perlのlibwww,LWP::Simple の mirrorのようなものが見当たらなかった)することに。
単純に、requests.get, write したファイル内容と、次回の取得したデータを比較しても毎回違う結果になって、なぜ?と思ったら、元のテキストファイルが DOS形式(LF+CR)で、writeしたときに LFに置き換えてるということだった。
そのため、毎回取得して比較しても同じということに。
ということで回避策は、open()のときに newline='' のオプションをつけて改行を変更しないということで。
https://www.curict.com/item/1b/1b608b2.html
これでまた3時間。。。