Harmless Weblog

Raspberry_pi

さくらVPSその後(CentOS7のEOL対応)

さくらのVPSは契約後そろそろ2年になる。面倒で何もせずに先送りしているうちにあっという間にCentOS7のEOLの日(2024.6.30)が来てしまった。

結局移行先のOSは何が最適なのかはっきりしない。さくらVPS公式サイトの初心者向け講座が改訂されることを期待していたんだけど、何もなし。検索した感じだとAlmaLinuxとRockyLinuxのどちらかで、AlmaLinux派がやや優勢か?という感じ。

とにかく日替わり通信術練習の日々更新を止めないことが最重要で、あとは自分用のWebアプリ(日記とメモ)はできればすぐに使えるようにしたいけれど、これは最悪自分だけの問題なので、しばらく止まるのは許容できる。

移行の手順は次のような感じだろうか。ここで抜け漏れが無いようにできるだけ考えておくことが大切な気がする。それでも「あ、あの設定が抜けてた」とか必ずありそうだけど。それでもちょっと考えただけでこれだけのステップがあるのかと呆然とする。

  1. レンタルサーバ上の日替わり通信術練習サイトにシステムメンテナンスのアナウンスを載せる
  2. 移行作業中のバックアップ環境であるラズパイを最新状態にする(pythonのライブラリをVPSに合わせる)
  3. 日替わり通信術練習の生成スクリプトの最新バージョンをgithubにプッシュし、上記ラズパイにクローン
  4. pythonのパッケージをラズパイに反映[※1]
  5. Xで更新状況をつぶやくbotも同様にクローン
  6. クローンしたスクリプトの動作をチェックしてちゃんと動くようにする
  7. VPS上のcronで日々更新を止める。
  8. ラズパイ上のcronで日々更新を開始。この時点でうまく動かなければいったん切り戻し。
  9. VPS上のデータやスクリプト、設定などをバックアップ
    • 日記アプリとデータ
    • メモアプリとデータ
    • Webサイト
    • ITマンションアシスタント
    • cron, incron
    • firewalldのblacklist IPファイル
    • クラウドドライブの設定 
    • WAFの設定エクスポート
    • 各種設定ファイルをとりあえずまとめてバックアップ /etc, /var
    • pythonの必要パッケージをバックアップ pip freeze > requirements.txt
    • pythonのバージョン:3.6.8
    • ラズパイにクラウドドライブをマウント
  10. VPSのOS(AlmaLinux9->AlmaLinux8)を新規インストール
  11. 環境構築
    • ssh設定(rootログイン禁止、ユーザ作成、公開鍵暗号)
    • Apache設定
    • クラウドドライブのマウント[※2、※3]
    • phpの設定[※4]
    • pythonの各種ライブラリインストール(日替わり通信術関係)[※5]
    • ドメイン設定(何もする必要がなかった)
    • 常時SSL化
    • メールサーバ設定(postfix)
    • CGI許可設定(httpd.conf)
    • chrome、WebDriverのインストール、設定
  12. バックアップファイルのリストア[※6]
  13. 新環境の動作確認。問題あれば対策
  14. 動作OKならcronの設定
  15. バックアップ環境のラズパイのcronを停止

【バックアップ環境の構築で困ったこと】

※1 Chrome WebDriverでちょっと苦戦。chrome-driver-binnaryが入らず。コメントアウトして、seleniumのバージョン相違を反映してfind_element_by_idを見直したらOKになった。

【OS移行後に困った・漏れていたこと】

OSの再インストールは、さくらVPSの公式スタートアップスクリプトを適用することである程度のところまでは自動でセットアップしてくれるので、そこは便利。sshの公開鍵方式のログインとかは、管理画面に公開鍵を登録しておくことで最初から使えるので、危険なパスワードログインは使わずに済む

※2 AlmaLinux9を選択して再インストールしたのは良かったんだけど、早速トラブル。いろいろとバックアップデータを置いているクラウドドライブ(InfiniCloud(旧TeraCloud))をマウントするためのdavfs2がインストールできない。検索してもどうやらまだAlumaLinux9(RHEL9系)に対応していないみたい(そもそもネット上に情報がほとんどない)。自分でソースからコンパイルしてやればどうにかなるのかもしれないけれど、こっちはとにかく環境復旧を優先したいので、他のモジュールについても同様のことがあっていちいち詰まるのも困るし、EOLまでの期間は短くなってしまう(2029年まで)けれど、枯れているであろうAlmaLinux8を再度インストール。9系はWebDAVに対応するまではお預けかな。

※3 正確にはクラウドドライブではないけれど、以前はさくらレンタルサーバのストレージ(さくらポケット)を、curlFtpFsというツールでマウントして使っていた。しかし、AlmaLinux8(RHEL8系)ではインストールできないみたい。WebDAVもダメ、curlFtpFsもダメとなると、9系のOSではクラウドドライブのマウントってどうやるのがスタンダードなんだろう?

※4 Apacheの設定もphpのインストールも簡単だったけれど、肝心の自分アプリが動かない問題に遭遇。500エラーだったので、.htaccessがらみかと思っていろいろ試したけれどダメ。最終的にはphp-fpmのログを確認したら、以前は普通に動いていたところがsyntax errorになっていて、これはphpのバージョンが古いせいでは、と思ってphpをアップデートしたら無事に解決。

※5 日替わり通信術練習関係では、やはりMeCabのインストールで一苦労。下記のサイトなどを参考に、サンプルは動くようになったものの、pythonスクリプト中のMeCab.Tagger("-Oyomi")がエラーになる。結局この行を書き換えて、辞書のパスを指定するようにして動くようになった。

m = MeCab.Tagger('-r /etc/mecabrc -d /usr/lib64/mecab/dic/mecab-ipadic-neologd -u /home/ユーザ名/user.dic -Oyomi')

AlmaLinux8上でMeCab+NEologdで辞書を作成してPythonから呼び出す

PythonでMeCabを使う際のメモ2

※6 WAF(SiteGuard Server Edition)は、CentOS7とAlmaLinux8でインストールしたバージョンが違っていて、せっかくエクスポートした設定ファイルが新環境で読み込めなかった。また一からカスタムシグネチャなどを再設定。

≫ 続きを読む

パソコン・インターネット   2024/07/27   gena

日替わり通信術アップデート(過去の日替わり問題の練習機能)

ユーザーの方から、「何日の問題がちょっとおかしかったです」的なご指摘を何度か頂いた。日替わり通信術の電報文は、毎日上書きしていて過去のデータは残していないためにバグの確認もできない。

一応バックアップを残すようにするか、と考え始めたところ、どうせならサーバ上にバックアップをとって、それを参照すれば過去の日替わり問題を練習できるのでは、と思い立って実装を開始。

バックアップはシェルスクリプトで比較的簡単にできたけれど、過去問題の参照はそこそこ苦戦。元々そういう構造にしておらず、日々の問題を同じ場所に上書きして、index.htmlで静的に読み込んでいた。過去問は日々「年/月/日」のフォルダを作って保存されるため、これを動的に読み込む必要がある。

参考になりそうなサイトをググって試してみるものの、こちらの方法はいずれもうまくいかなかった。読み込むタイミングとかの問題だと思うんだけどよくわからず。こちらの方法はうまく動いた。どうやらappendChildメソッドで、headの要素として追加するか、bodyの要素として追加するかで挙動が違うような感じ。

【参考サイト】

これでとりあえず動くようにはなったと思う。ただ、練習問題がたくさんある状態というのが、実力アップに効果があるかどうかは正直わからない。一期一会の日替わり問題だからこそ、毎日真剣勝負で練習できるという面はあると思うし、そのつもりで日替わり形式にした経緯がある。一方で追い込みの時期には毎日2回分の問題では物足りない、というコメントも確かにある。選択肢は用意したので、あとはご自身のスタイルに合わせて使っていただければと思う。

【2022.8.1追記】

1日分の過去データがある状態でデバッグしてリリースしたものの、2日分以上のデータがあると、前日以外のデータが選べないバグがあることがわかった。やはりテストデータも作らず拙速にリリースするとこういうことになる。

過去問題のデータを動的に読み込むと言っても、一度ページを読み込み終わってしまうと、書き換えるためにはページを再読み込みする必要がある。そして再読み込みすると日付選択のカレンダーが前日の日付にリセットされてしまい、毎回前日のデータが読み込まれてしまうというわけ。

そこでCookieに選択した日付を覚えさせてからページをリロードするようにしたら、思ったような動作になった。

日付選択のUIは端末によって動作が異なるし、Cookieとリロードに頼るのもあまり美しくはないけれど、まずは動くことが重要ということで。もっとモダンなコードが書けるようになれたら良いな。

本サイトの固定記事へのリンク

Webアプリ「日替わり通信術」

アプリの詳しい説明

≫ 続きを読む

アマチュア無線   2022/07/31   gena

Webアプリ日替わり通信術(公開後1年経過)

Webアプリ日替わり通信術練習(モールス受信)を公開して1年になる。

おかげさまでTwitterやメールでアプリを使っていますとレスポンスをいくつか頂くようになり、嬉しいことにアプリを使って頂いた2名の方が2022年3月期の一総通試験で見事に合格された。元々かんなさん(奥様)の受験サポートのために開発したアプリだったけれど、公開したことで多少なりともお役に立てたようで嬉しい。

冗談半分で合格者倍増を狙っていると公開時に書いたけれど、残念ながら2022年3月期から合格者(受験番号)のネット公開はされなくなって、受験者への個別メール連絡のみとなってしまったため、アプリの効果を定量的に測ることは困難になってしまった。もしアプリを使っておられる方で合格された方はTwitterやjarl.comのメール宛にお知らせ頂ければありがたいです。

ダウンロード不要で利用登録など何もない単なるWebアプリなので、利用者がどれくらいいらっしゃるのかはわからない。レンタルサーバのアクセス記録から、通信術アプリのファイルが読まれた回数を数えて、ざっくり利用者数を推計したのが下のグラフ。9月期の試験までに徐々に利用者が増え、試験後にいったん減って、年明けに3月期の試験に向けて増加が見られる。受験者数は100名ほどだし、なんとなくオーダーは合っているように思う。もちろん日替わり問題を1日に何度もこなしている方もいると思うので、ユニークユーザはもう少し減るだろう。

higawaricw2021.jpg

「一総通 通信術 モールス」等のキーワードで検索するとトップページに表示されるので、今のところモールス受信術の練習アプリとしては高いシェアを獲得しているものと思うけれど、それでも利用者は30名とかその程度。完全無償のアプリでもこうなので、一総通向けの市販教材やツールが皆無なのも仕方がない。まったく商売にならない超ニッチな分野ということがよくわかる。

公開後の1年で、メジャーなアップデートとしては以下のような感じ。いずれも利用者さんからのリクエストや指摘で実装したもので、重い腰を上げられたのは利用者さんのおかげだと思う。

現在開発・テスト中のブランチとして、PWA(Progressive Web Apps)への対応がある。これはWebアプリをネイティブアプリのように使えるようにする技術。強力なキャッシュ管理でオフラインでも(まるでネイティブアプリのように)使えるのがメリットなんだけど、iOSだとキャッシュが強力すぎて日替わり更新が反映されないという問題が解決できずにスタックしているところ。

開発頓挫したブランチとしては、音源保存機能の実装がある。元々はラズパイでmp3の音源を作ってアップするところからスタートしているけれど、これだと速度などが決め打ちになってしまうし、スマホ利用だとダウンロードのパケットを消費する。そのためにWeb Audio APIでリアルタイムに生成する方式に変えた経緯がある。このmp3を作るPythonのプログラムがcgiとしてレンタルサーバ上で動かせれば可能かもしれない。

あとリクエストというほどではないけれど、複数の受験者の方から、試験会場ではモールスの音が反響して聴きづらかったという指摘があった。これについてはリバーブをかけるオプションを追加できたら良いと考えているけれど、のんびり取り組もうと思う。→反響音効果を実装しました(2022.4.22)

本サイトの固定記事へのリンク

Webアプリ「日替わり通信術」

アプリの詳しい説明

≫ 続きを読む

アマチュア無線   2022/04/03   gena

ラズパイその後(Zero WHとRPZ-IR-Sensorを購入)

またラズパイを買い足してしまった。以前試してそのままになっていた赤外線リモコンの送受信を再度夏休みのレジャーで試してみようと思って。

買ったのはRaspberry Pi Zero WHというコンパクトで安い(1800円くらい)機種。この小ささ、安さでCPU1GHz,メモリ512MBというから素晴らしい。あとは専用の拡張ボードの赤外線+環境センサ「RPZ-IR-Sensor」Rev2.0(端子未実装)というもの。Amazonのリンクを貼っているけれど、SwitchScienceの方が安いかも。

ラズパイZeroはUSBがmicroB 1口のみ、HDMIがラズパイ4のmicro HDMIとも違うmini HDMIという特殊端子ということもあって、手持ちのキーボードやケーブルが使えない。また、スペックも低いのでデスクトップGUI環境ではなく、CUIのみとしたい。

ということで、OSはRaspberry Pi ImagerでLiteを選択。さらに起動時にssh有効化とWiFi接続をさせるために、OSを書き込んだmicroSDカードをMacで開いて、ファイル名sshの空ファイルと、他のラズパイからネットワークの設定ファイル(wpa_supplicant.conf)をコピーしてrootの直下に書き込んでから起動させる方法で無事にキーボード、モニタ接続なしでssh接続に成功した。(参考サイト:Raspberry Pi Zero WHをキーボードなしで初期設定してみる)

拡張ボードのRPZ-IR-Sensorはピンソケットをハンダ付けしてPi Zeroと合体。

PythonからLチカはすんなり成功。BME280の環境センサとTSL2572の照度センサの値取得もスイッチサイエンスのサンプルプログラムでそのまま動作した。

リモコンの赤外線信号の読み取りと送信は少し苦戦。最初LIRCを使おうと思ってサイトの手順通りに操作したけれど、LIRCのビルドがうまくいかずスタック。あれこれ検索して試してみたけれど、どうも動かない。サイトによってはLIRCはOSのバージョン等によってうまくいかないことがありビギナー向けではないと書いてある。

スイッチサイエンスのサポートページを良く読んだら、LIRCを使わないサンプルプログラムが載っていて、こちらはそのまま動作した。

最初にダイキンエアコン(型番)のリモコンの学習をさせてみたところ、信号はちゃんと記録されるけれど、送信してもエアコンが反応しない。ラズパイとエアコンを近づけたりしてもダメ。

試しに他メーカー(東芝)のエアコンでやってみると、ちゃんと学習した信号で反応する。リモコン式の照明も問題なし。かなり距離があってもちゃんと反応する。

ダイキンのリモコンだけ特殊なのかな。片方向だけだなく本体と双方向通信をしていたりするのかも。

ということで、環境情報の取得、赤外線リモコンの制御が可能になったので、あとは作り込みなんだけど、ここで夏休みは終わってしまったので、具体的な実装はヒマなときに考えたい。

≫ 続きを読む

パソコン・インターネット   2021/08/22   gena
タグ:Raspberry_pi

Raspberry Piその後(ラズパイ4を追加)

Raspberry Pi2Bを譲ってもらって遊び始めたのが2018年の夏だったので、そろそろ3年になる。

その後ラズパイ3Bを買い足して、2台体制で運用してきた。部屋の環境を記録してつぶやいたりmicro:bit百葉箱の温度データをBLEでラズパイに飛ばして記録したりと、基本的には2台とも24時間稼働させている。

今一番重要なのが、2021年4月に公開したWebアプリ「日替わり通信術」の、電報文を自動生成するスクリプト。これはcronで毎日10時過ぎに自動実行してFTPでサイトにアップロードしている。

ただ、このスクリプトも初期の頃から少しずつ改良しているためにコードが乱雑だし、ラズパイの初期設定がPython2だったこともあって、コードはPython2で書いており、Python2のサポート終了も気になっていた。

そこでとりあえずPython3に対応させようと少しずついじっていたんだけど、そもそも3年前のRasbianだとPython3が3.5で、これもサポート終了している。まずはPython自体のアップデート...といろいろやっていたら、なんだかラズパイ自体の動作が変になってきた。こういう稼働中のシステムには「動いているものはいじるな」という格言があって、気になるところはあってもヘタに触るとおかしくしてしまうという典型。

そこでラズパイ2Bは丸ごとバックアップしてあったマイクロSDに挿し替えて元に戻し、新たにラズパイ4を買ってそちらでPython3対応などをして、最終的に2Bから4にメイン機を移行する作戦とした。その上で2Bは最新のRaspberryPi OSを入れて負荷の軽い運用とすれば良いかな。

買ったのはラズパイ4のメモリ4GBのモデルと、ファン付きヒートシンク型のケース、USB電源、マイクロSDカード。ケースはこのタイプだとGPIOがそのまま使えるので便利。あとモニタ出力がマイクロHDMIに変わっているので、ケーブルも購入した。

もうラズパイは3台目になるのに、毎回使えるようにするまでの手順をググっている。一応思い出せる範囲でやったことをメモしておく。

  1. Raspberry Pi OSの最新版を、Raspberry Pi Imagerを使ってマイクロSDに書き込み
  2. マイクロHDMIケーブルでモニタ(TV)につないで起動して、設定からホスト名・パスワードの変更、SSHの有効化、WiFiの接続設定、RealVNCのインストールと有効化
  3. Teamviewerのインストールと設定(これはHDMI接続した状態でやらないとダメ)。
  4. HDMI接続を外してもVNC、Teamviewerがつながる設定
  5. IPアドレスを使わずホスト名.localで接続するためにAvahiのインストール
  6. 以降はモニタは不要。SSH、VNCで接続して操作可能。
  7. cifs-utilsをインストールして、NASをマウント
  8. GUIの日本語入力(ibus-mozc)のインストール
  9. Python3をデフォルトにする場合、シンボリックリンクを変更
  10. nanoエディタの設定
  11. crontab -eでcronの設定、またはバックアップからリストア
  12. 基板のLEDを常時消灯にする

【追記】

ラズパイ4で日替わり通信術のスクリプトを実行するようにしたので、古いラズパイ2Bは新しいマイクロSDカードに最新のOSイメージをクリーンインストール。

クリーンインストールなのでUSB WiFiアダプタは外しておいた。ら、GUIが起動した時点でWiFiにアクセスできることに気づいた。ラズパイ2Bは内蔵無線LANはなかったはずなのに...と思って世代を調べるコマンドで確認してみたら、2Bだと思っていたラズパイが実は3Bだったことが判明。3年間気づかずにUSB WiFiアダプタを付けて使っていた。元々人から譲ってもらったものだし、メモリも同じ1GBなので全然気がつかなかった。

≫ 続きを読む

パソコン・インターネット   2021/07/17   gena
タグ:Raspberry_pi

ラズパイその後

2018年に2台購入したRaspberry Pi(ラズパイ)は、24時間連続稼働でいろいろな役割を担ってくれている。

1台目(Raspberry Pi2 Model B)は、室内環境(室温、湿度、気圧)のログを取ってグラフをアップロードし、Yahoo!ニュースのトピックスを読み込んでログと一緒に定期的にツイッターにつぶやく。ゴミの日のリマインダーなどもする。さらに日替わり通信術の額表(電報文)を自動生成してアップロードしている。

2台目(Raspberry Pi3 Model B)は、ベランダのMicro:bit百葉箱の温度計測値をBLEで取得してグラフ化してツイッターにつぶやく。また日替わり通信術のJavaScriptとhtmlはこのラズパイ上で書いていて、こうすることで自宅からはMacのターミナルからsshで、外出先からでもTeamViewerで接続してプログラムやサイトを直すことができる。以前は留守番猫カメラの制御もさせていたけれど、現在はATOM CAMを使っている。

1台はLEGOでケースを作ったりもしたけれど、今は2台ともヒートシンクタイプの金属ケース(ファン付き)に入れた。ファンは回さなくてもCPU温度は47℃くらい。夏場はファンを回した方が良いかも。

かんなさんが毎日一総通の通信術の勉強(というか練習?修行?)に日替わり通信術を使っていたので、試験が終わるまではラズパイの稼働を止めないようにしていた。

3月にかんなさんの試験が無事に終わったので、日替わり通信術の一般公開に向けてラズパイをバックアップ&メンテナンス。

まずはマイクロSDカードを買ってきて、SD card formaterでフォーマットしてから、USBカードリーダでラズパイにつなぎ、SD card copierで、カードを丸ごとバックアップ。これは元のカードをアンマウントしたりせずとも、パーティション構造やRasbianのシステムファイルまで含めてすべてコピーしてくれる優れもの。コピー後は、コピー元とコピー先のカードを差し替えればそのまま同じ環境で起動できる。

バックアップ後に、apt update/upgradeで最新状態に更新してメンテナンス完了。

ラズパイサーバは今のところ高い信頼性で動いてくれているけれど、マイクロSDは書き込み回数的に寿命があるのでそれが心配かな。無料とはいえ日替わり更新のサービスを止めないためにはそれなりに気を使う。

≫ 続きを読む

パソコン・インターネット   2021/04/11   gena
タグ:Raspberry_pi