ホーム » コンピュータ » Linux (ページ 2)

Linux」カテゴリーアーカイブ

システム

最近の投稿

アーカイブ

カテゴリー

switchbot API の排他処理とリトライ

自宅サーバを更新し、Switchbot の温度監視を munin でグラフ化、その結果を nagios4 で結果のモニタリングをしていたけど、新しいサーバで Unknown の状態が頻発している。旧サーバでの運用時より、発生回数が増えている。

排他処理とリトライの追加

Switchbot API での値の取得だけれど、muninでの値取得とnagios4での値取得の処理と重なるとデータ取得に失敗すると思われるので、flock コマンドで排他処理を追加。これである程度は Unknown が減ったが、それでも Unknown 発生する。

しかたがないので、Switchbot API で 成功ステータス100が取れなかった時は、1秒の間をあけて1度だけリトライするようにした。(当初は0.3秒 sleep にしたけど効果が薄かった) これにより Unknown はかなり減ったけど、まだ失敗することがある。しかしながら、Switchbot API の1日あたりの回数制限もあるし、何度もリトライさせるのはやめておこう。

#!/bin/bash

. "/usr/local/etc/switchbot/token-v11.sh"

function curl_status() {
    # flockで排他処理
    /usr/bin/flock -x /tmp/switchbot-api.lock \
    /usr/bin/curl -s --request GET \
                  -H "Content-Type: application/json" -H "Authorization: ${token}" \
                  -H "sign: ${sign}" -H "nonce: ${nonce}" -H "t: ${t}" \
                  "${url_list_v11_meter}"
}

function device_status() {
    url_list_v11_meter="${url_list_v11}/$1/status"
    JQ=/usr/bin/jq

    json=$(curl_status)
    state=$($JQ '.statusCode' <<< "$json" )
    # 取得に失敗したら1度だけリトライ
    if [ "$state" != "100" ]; then
        # リトライ間隔(sleep 0.3 では効果が薄かった)
        sleep 1
        json=$(curl_status)
    fi
    $JQ -r '. | (.statusCode|tostring) + " " + (.message|tostring)' <<< "$json"
}

(追記) 0:00 頃に unknown

上記の改良後だけど、2日連続で 0:00 に unknown 状態になる。 Switchbot HUB 自身が、日替わり時に何らかの処理を実行しているんだろうなぁ…

homebridgeも新サーバに移行

今まで、raspberry-pi で動かしていた、homebridge を 新サーバに移行させた。

機能の中には、webとhomebridgeの連携で、機能の中継でムダな処理があったけど、一体化してすっきり。

ただ、cec-client による HDMI を使った TV,CATVSTB などのON/OFF/入力切替 については、パソコンではできないので、cec-client 処理は raspberry-pi に依存したまま。

Ubuntu に gcalcli の最新 4.5.1

自分の Google Calendar のデータを表示する Script を動かしていたが、Ubuntu ベースの新しいサーバで動かない。

“gcalcli –noauth_local_webserver” で初期化しようとするが、コマンドラインに表示された URL をブラウザで開いてもエラーがでてしまう。確認すると、Ubuntu Desktop 24 でインストールされていたパッケージが 4.3.0 で古いみたい。

しかたがないので、gcalcli の apt パッケージを削除して、pip でインストール。

$ sudo apt purge gcalcli
$ pip install gcalcli

ただ、 .bashrc に “$HOME/.local/bin” の PATH が通っていない。PATH の追加と、自作 script の gcalcli 呼び出し部分の PATH を書き換え。

netplanの問題?ネットワークが切れる

新しいサーバに移行したけど、ネットワークが勝手に切れる。当初、Debian をインストールをしたときには、ネットワークインタフェース自体が消えていたので、ドライバーがうまく動いていないと思われたが、今回は Ubuntu に入れ直ししているし、ifconfig -a でみても、インタフェースは動いているものの、IPアドレス勝手にダウンしている。

netplan の設定トラブル

Gemini で質問したら、アドレス固定設定で登録した netplan の構文エラーとの指摘。でも警告を直しても相変わらず切れる。

netplan の設定ファイルは、Gemini の提案を手作業で登録したけど、netplan, Network-Manager との絡みの問題で、相互が設定をおかしくしている可能性がある。ということで gnome 設定 – ネットワークで固定アドレス設定で登録したら、安定した…の…かなぁ…

ssh多段ログイン

自宅のサーバ更新で、公開しているサーバの奥にある自宅内端末にログインする機会も多い。

あるんだろーなと調べるとやっぱりあるね、ssh 多段ログイン。”-X”オプション x11-forward も動くじゃん。
x11-forward で google-chrome 開くと、最初はフォントとかいろいろやりとりがあって立ち上がりは遅いけど、普通に動くな。

((( ssh多段ログイン )))
$ slogin user@踏み台サーバ -t slogin user@自宅内別端末

((( ssh X11 フォワード )))
$ slogin -X user@踏み台サーバ -t slogin -X user@自宅内別端末
[自宅内端末]$ xeyes

新しいサーバ用にUSB-Cポートを

7年前のWindows機に Ubuntu を入れてメインの自宅サーバに更新しようと最終段階。今後の使い方も含め、USB-C ポートもつけておこうと安い PCI の USB-C ボードを購入。ロープロファイルのブラケット付きって書いてあるのに、ノーマルブラケットしか入っていない。

送り返すのも面倒だし、金属加工で逃げた。

ロープロファイル加工を終えて、サーバにくっつけたけど、USB-C × 2port は普通に使えるけど、縦配置の USB-A 3.0 × 2port は、パソコンのブラケットを支えるフレームの幅が狭く USB-A コネクタが刺すことができない。USB-Cポートが目的なのでひとまず妥協。

接続して起動するが、どうも sytemd-udevd の負荷が発生し、1CPU の loadavg が 100% に張り付いている。相性悪いのかな。2000円ムダにした…(T_T;

USB 切り替え機を導入

自宅サーバを更新しているけど、Ubuntu Desktop も安定して使えるので、Windows 端末と 新サーバを切り替えることも多い。キーボード・マウス・USBスピーカをまとめて切り替えたいので、USB 3.0切り替えスイッチを導入。Amazon さんから届いて早々につなぐけど、USB が INPUT/OUTPUT 両方が USB-A メスコネクタになってる。だから添付ケーブルがUSB-Aオス/オスのケーブル。USB-Aオス/Aメスとか、USB-A/USB-B の組み合わせじゃないから、差し間違えてひと悩み。

自宅サーバの移行中

メインPCを Windows 10 から 新しいPCを導入し Windows 11 に切り替えたが、データの移行も終わったので、Windows 10 の PC に Linux を入れる。

現状自宅サーバの問題点

現状の自宅サーバは ほぼ 15年に使い始めたが、最近はマナーの悪いクローラで負荷が高くなったり、smartd から エラー警告が出る(root ではない)ようになっているし、これを契機にサーバ移行中。1台の PC を 15 年運用というのも我ながらすごいな。

しかし、Core i3 第5世代の CPU から Core i7 の第7世代で処理速度も約4倍になってるし、SSD なので全体的に処理速度も大幅改善。

OS は Debian 13(trixie) から Ubuntu 24 に

OSは、設定移行も考え、同じ Debian にしようと作業を始めたが、ネットワークデバイスのドライバがまずいのか、時々 切れてしまう。処理速度もまともなので、デスクトップでも使うと思うし Ubuntu 24 Desktop に変更。最新 firmware のパッケージをいれて適切なネットワークデバイスが選ばれたのか、ネットワークも安定。

デスクトップも、デフォルト設定が Debian より使いやすいし便利。

ついでに、FireWall の管理は長年 ferm を使っていたけど、メジャーじゃないし最新ディストリビューションでは対象外。今回、移行を契機に netfilter + netfilter-persistent に移行。

postfix + opendkim + clamav + saslauthd + dovecot-imapd の設定はほぼ移行が終わったと思うけどなかなか面倒。設定が色々とかみあってて面倒。設定をまるまる移行すると、処理が途中で現行サーバに飛ぶので、移行中サーバ内で処理が留まるように設定しながらの作業中。

munin + nagios4 の環境も移行したけど、まだまだ道半ば。WordPress のインストールとコンテンツ移行が最後の難関かな。

追記:Wordpressの ヘッダ画像

WordPress も移行したけど、古いサーバのデータを完全移行で、どっちで作業していたかわからなくなるので、新しいサーバの WordPress ヘッダ画像を更新。

ライセンス的にいい写真がなかったので、Gemini で画像を生成させた。

Alibaba Cloud LLC からの大量アクセス

自宅サーバで作業していたら、loadaverage 30越えの高負荷。

調べてみると、Web サーバの負荷が高い。一旦 apache を止めると負荷が落ち着く。

早々にアクセス元の IP アドレスを調べると広い範囲の端末からアクセスが集中している。ひとまず FireWall で下記サブネットをアクセス拒否。

47.79.0.0/20
47.79.96.0/19
47.79.208.0/20
47.82.8.0/21

アクセス履歴の内容を確認すると、アクセス間隔を空けないマナーの悪いクローラーのようだ。

saslauthd の起動で smtpd chroot 解除

postfix の更新が入ったようだけど、以前から postfix 更新のたびに動かなくなることが多かった saslauthd がうまく起動しないトラブルが再発。
postfix での smtpd 起動がセキュリティ対策のために chroot 起動にしていて、saslauthd が chroot のファイルを正しくアクセスできないのが原因。でも、debian の default 設定の 非chroot の設定だし、debian 推奨設定ということで chroot 起動を解除することにした。

Google 検索

My Google   Yahoo

Microsoft

ファンサイト