Giter VIP home page Giter VIP logo

ome2023's Introduction

IT未来塾講義用 Raspberry Pi OS

Build for Windows Users

Check docs/build_in_vm/index.md.

Build for Linux Users

Prerequisites

Detailed Procedure

リポジトリをクローンする

git clone [email protected]:OmeSatoFoundation/ome2023.git --recurse

--recurse オプションを忘れないこと。もし忘れてしまったら、リポジトリのディレクトリで

git submodule update --init

を実行する。

初回のみ、講座用Raspberry Pi OS作成に使うコンテナイメージををビルドする。

docker build . -t ome2023

ビルドを始める前に毎回,前回の作業用 .img ファイルが残っていないか確認する.

rm -f 2022-09-22-raspios-bullseye-arm64.img

ssh 鍵の登録をし,コンテナでスクリプトを実行することで Raspberry Pi OS のイメージが現在時刻付きのファイル名とともにホストのカレントディレクトリに生成される.

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa  # or any key you registers in github.com.
docker run --rm -ti -v /dev/:/dev --privileged -v $(pwd):/work -v --workfdir=/work -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent ome2023 sh -c 'aclocal -I m4 && automake -a -c && autoconf && ./configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --prefix=/usr/local && make -j$(nproc) && ./contrib/scripts/install.bash -f'

Modification of Lecture Materials

ディレクトリ 01/, 02/, ..., 08/ に変更を加えた際には,

find 01 02 03 04 05 06 07 08 -type f | sort

を実行し,その結果で Makefile.amnobase_dist_omedata_DATA を更新してください.

ome2023's People

Contributors

rollman avatar twinkletia avatar tikisi avatar yutashx avatar ip-arch avatar onitama avatar pshimizu avatar sugasin2813 avatar

Stargazers

Chihiro Koyama avatar

Watchers

 avatar Yuichi Okuyama avatar

ome2023's Issues

UIの色をOSビルド時に初期設定し、前年度までの環境の色と同じにする

前提
・Bullseyeの初期UIカラーが灰色になっている。前環境までは青色だったので、スクリーンショット(主にエクスプローラ)の流用ができない。

目的
・色以外のUIが前環境と全く変わらないスクリーンショットにおいて、前年度のものを流用可能にすることで、教科書作成の負担を減らす

概要
/usr/share/themes/PiXflat/gtk-3.0/gtk-contained.cssの、@define-color theme_selected_bg_color #RRGGBB
の値を変えることで、uiの色の初期設定の変更ができる。(通常であれば、色の変更はguiツールの”外観の設定”から行う。その場合、$HOME/.local/share/themes/PiXflat/gtk-3.0/gtk.cssが新しく作成され、前述の/usr/share下のものをラップする)install.bashでOSビルド時にgtk-contained.cssの色を青色にしてしまえば、初回起動から青色のUIになる

[第6回] run-linux-gmm.shがOS内に存在しない

第6回 教科書6.9 Juliusで必要になるrun-linux-gmm.shを実行すると、見つからない旨が表示される。

pi@raspberrypi:~/06 $ run-linux-gmm.sh
-bash: run-linux-gmm.sh: コマンドが見つかりません

findコマンドで検索しても存在しないため、OSへの同梱がされていないと思われる。

pi@raspberrypi:/usr/local $ find . -type f -name "run-linux-gmm.sh"

yomi2voca.plが二種類存在する

Juliusのビルド後にyomi2voca.plが生成され、2023年のOSでは1の方が配置されている。
2種類存在していると間違いの原因になるので、2の方を削除する。

  1. contrib/Julius/gramtools/yomi2voca/yomi2voca.pl
  2. contrib/IR/yomi2voca.pl

`01/`, `02/`, ... のパーミッション

make install を chroot で行うと destination に /home/pi が含まれる場合コピーファイルのowner が 0:0 になる.これは例えば HSP が __hsptmp.ax 等を作成できなくなり,HSP スクリプトの実行ができなくなる.

#20 がワークアラウンドにはなるが,パーミッション保持の論理が必要. #19 の方法によってはそちらで解決できる.

bookworm のベースイメージに gpicviewコマンドがない

Inherited from Inherited from OmeSatoFoundation/ome-doc#450, related to #96

2022-09-22-raspios-bullseye から 2024-03-12-raspios-bookworm へアップグレードする (#96) と 2022-09-22 版で使えた gpicview が使えない。

実際、gpicview2022-09-22 でプリインストールされている2024-03-12 では除去されている2024-03-12 では eom がプリインストールされる ようなので、こちらを使うことに切り替えたのだろう。また、bookworm のリポジトリには gpicview が存在する ので、これを contrib/scripts/install.bash でインストールすることもできる。

ベースディストリビューションのアップグレード (#96) に関する問題のマイルストーンはその最終的な量によって決める。問題の量が過多の場合は修正を次年度に持ち越し、当該年度は前年度のイメージを再利用する。

パッケージインデックスの自動アップデートを禁止する

Raspberry Pi OS がインターネットに繋がると、初期状態で、バックグラウンドで自動的にパッケージインデックスを更新する (i.e. apt-get update)。講座中は動作を保証するためパッケージ本体のアップグレードを禁止することと、また Raspberry Pi の性能がそんなに高くなくこれのせいで体験が悪くなることが考えられることから、パッケージインデックスのアップデートも抑制する。

該当の systemd unit を停止し、apt の設定も変更する。

Reference

https://blog.turai.work/entry/20191005/1570271926

HSP でパスを使うときのソース相対パス指定を止める

たとえば 06/julius.hsp.dic ファイルを開くときのように,
HSP から外部ファイルを開く際,$HOME 以下のファイルは
これまで /home/pi で固定されていた.

HSP では PATH の解決に SHELL を通さないので (@onitama に要確認),tilde expansion が機能しない.
第 3 回の教科書では,ホームディレクトリへのパスを表現する方法として ~ (チルダ) のみ
紹介しているので,変更が必要である.

  • 受講生に absolute path を書かせる.
init_julius <あなたのホームディレクトリ>/06/yomi.dic
  • 環境変数 ($HOME) が使えるか確認する.使えたら受講生に導入もする必要がある.
  • ソース (オブジェクト (`.ax)) 相対にする (現在の対応).Cons: ソースを mv すると動作しなくなる.

Raspberry Pi 400で実行できない可能性のあるHSPファイル

対象ファイル
02/drop.hsp

実行環境
30a7f8aでDockerを用いてOSイメージを作成

実行時のログ

/home/pi/ome2023/02 ./drop.hsp
hsed: RUN(./hspcmp -d -i -u /home/pi/ome2023/02/__hsptmp.hsp)
#HSP script preprocessor ver3.6 / onion software 1997-2021(c)
#Use file [hspdef.as]
#Use file [dish_enhance.as]
#Use file [dish_enhance.as]
#HSP code generator ver3.6 / onion software 1997-2021(c)
#use UTF-8 strings.
#Uninitalized variable (score).
#Uninitalized variable (bg).
#Uninitalized variable (key).
#Uninitalized variable (id).
#Uninitalized variable (my).
#Uninitalized variable (ax).
#Uninitalized variable (ay).
#Uninitalized variable (res).
#Uninitalized variable (u1).
#Uninitalized variable (u2).
#Uninitalized variable (u3).
#Uninitalized variable (tcol).
#Uninitalized variable (tx).
#Uninitalized variable (ty).
#Uninitalized variable (var_gm).
#Uninitalized variable (var_rate).
#Uninitalized variable (v_gmode).
#Uninitalized variable (v_rate).
#Code size (2096) String data size (457) param size (0)
#Vars (38) Labels (13) Modules (0) Libs (0) Plugins (3)
#No error detected. (total 4085 bytes)

Runtime[hsp3dish].
hsed: Runtime [hsp3dish].
Init:HGIOScreen(640,480)
[MMMan] Failed se_puyo.wav on bank #0 (1)
Execute from __hsptmp.ax runtime[hsp3dish](1).
hsed: Process end 255.

第7回 cgi演習用のhspファイルが動作しない

  • led.hsp, ir.hsp
    sh: 1: gpio: not foundと出て、LEDがひからない。原因は調査中

  • querystring.hsp
    sh: 1: decurl.py: not foundと出て、期待動作しない。cgi.as内でcmdexec decurl.pyのような記述があるが、どのディレクトリを参照しているのか?(2019の場合、/home/pi/ome/binにあった)

  • sensors.hsp, sensors_table.hsp
    プログラムに問題なく、httpは正常(200レスポンス)だが、ブラウザが「このページは動作していません ERR_INBALID_HTTP_RESPONSE」と出て、温度が表示されない。原因は調査中
    私が間違えてローカルな古いスクリプトを適用したのが原因で、PR #63 版のスクリプトで期待動作しました。

[第8回] 例題8-8 amedas.pyの解説が実際と異なる

  • amedas.pyのパスは~/bin/amedas.pyではなく/usr/local/bin/amedas.py
  • 教科書に載っているamedas.pyの解説が実際のコードと異なる(python2用が書かれている?)
  • もっと詳しく知りたい人向けの誘導がpython2になっているが、amedas.pyはpython3で記述されている

WSL でビルドするためのインストラクションの追加

現在の Raspberry Pi OS 作成のためのインストラクションは x86_64 Linux がネイティブで動作することが前提にある。Linux を持っていない人などに需要があるため、WSL でビルドするために必要な手順を README.md に追記する。

現在わかっている追加の必要手順

summary

apt-get install -y binfmt-support
update-binfmts --import qemu-aarch64      # `qemu-user-static` places `/usr/share/binfmts/qemu-aarch64`.
TBD

binfmt を手動で設定する

Debian 系の Linux では qemu-user-staticapt でインストールすれば postinst で binfmt が適切に設定されるが、WSL ではうまく動作しないようだ [1]。手動で update-binfmts を作成するために、binfmt-support をインストールし、qemu-user-static に含まれる binfmt config ファイルを import する。

apt-get install -y binfmt-support
update-binfmts --import qemu-aarch64      # `qemu-user-static` places `/usr/share/binfmts/qemu-aarch64`.

または (のちのち)、binfmt を使わないといけないのは hspcmp でヘルプファイルをビルドするところだけなので、これをいい感じに host と target のアーキテクチャを識別して chroot するような仕組みに変更する。現在これは make でやっているが、install.bash でやることになる?

growpart の実行が失敗する

install.bash の実行中、growpart が失敗する。

+ growpart /dev/loop0 2
/usr/bin/growpart: 522: arithmetic expression: expecting EOF: "5*1000*1000+15*1000+146.1"
+ EXITCODE=2
+ '[' 2 -ne 0 ']'
+ '[' 2 -ne 1 ']'
+ echo 'growpart unexpectedly exited.'
growpart unexpectedly exited.
+ exit 2

かんたんに検索すると、システムロケールの問題により growpart がサブコマンドで取得するオペランド (日本語) を受け付けられない説 [2]、サブコマンドで取得する uname -r が purely numeric でない場合 growpart で受け付けられない説 [3] を見つけたが、今回の stdout を見る限りこれが原因ではなさそう。'146.1' の部分の小数点が原因の可能性が有りそう (bash の shell arithmetic は整数のみ対応) なので、'146.1' がどこから来ているか調査するとよさそう。

  • 失敗する growpart のバージョンを確認してもらう
  • ロケールの変更 [2] を試してもらう
  • uname -r の実行結果を出してもらう
  • growpart を --verbose オプション付きで実行してもらう

References

コンテナに $HOME/.ssh をバインドマウントする必要はない

コンテナで ssh 鍵を用いた認証をする際、ssh-agent を通して鍵のやりとりをすれば
$HOME/.ssh のマウントは必要ない。むしろ、$HOME/.ssh をマウントすると、個人の設定が
コンテナに衝突し動作しない場合があるので、ssh-agent 以外の鍵共有方法は禁止したほうがよい。

具体的には、README に書いてある

docker build . -t ome2023
docker run --rm -ti -v $HOME/.ssh:/root/.ssh -v /dev/:/dev --privileged -v $(pwd):/work --workdir=/work ome2023 sh -c 'aclocal -I m4 && automake -a -c && autoconf && ./configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --prefix=/usr/local && make -j6 && ./contrib/scripts/install.bash -f'

を廃止し、

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
docker run --rm -ti -v $HOME/.ssh:/root/.ssh -v /dev/:/dev --privileged -v $(pwd):/work -v --workfdir=/work -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent ome2023 sh -c 'aclocal -I m4 && automake -a -c && autoconf && ./configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --prefix=/usr/local && make -j6 && ./contrib/scripts/install.bash -f'

-v $HOME/.ssh:/root/.ssh を取り除く。

03/button_led2.hsp の差し替え

OmeSatoFoundation/ome-doc#285 にもあるように,教科書記述の button_led2.hsp とこのリポジトリに含まれているものが相違していた.議論の結果,教科書の版に合わせることになったため,リポジトリの同ファイルを更新し,
また講座で受講生の Raspberry Pi をアップグレードするためのスクリプトを用意する (#73).

スクリプトの要件

  • /usr/local/share/ome/03/button_led2.hsp を教科書版で上書きする.
  • 上記のような操作を行う bash script を作成し,USB メモリにストア,講座直前に受講生にそれを渡し,接続させ,ダブルクリックで実行してもらうことで上書き完了とする.

懸念点

/usr/local/share/ome 以下は一般ユーザの書き込み権限がない.ダブルクリックすると勝手に (必要があれば ASKPASS_PROGRAM を起動し) 昇格してくれると楽.

`make` と `make install` は異なる環境で実行されるべきではない

現状,クロスコンパイルのため make はホストで実行され, make install は chroot 下で実行される.
この方法では,ホストにはインストールされているコマンドを使うよう Makefile が生成されるが,
それが chroot 下には存在しない場合が発生する.

現状起きている例として, autoconfAC_PROG_AWK は AWK の実装を gawk, mawk, nawk, awk の優先順で指定する.
今回のコンテナは別の理由で gawk をインストールしているので,Makefile の環境変数 AWK には gawk が設定されるが,Raspberry Pi OS にはデフォルトでインストールされない.ワークアラウンドとして, d60f735 でもされているように環境変数 AWK を明示的に指定することができる (make AWK=awk install)が,問題は本質的に解決しない.

configure--prefix を適切に (e.g. mount_point/usr/lib) 設定することで,ホストで make install を実行することができる.
問題は,現状 /home/pi/ome 以下が make install で配置されること./home/pi/ome にファイルを配置するには,--prefix の親ディレクトリを参照しないといけない.

案1: autotools で prefix の prefix を設定する

可能かどうかを調査する必要があるが, prefix の prefix のような概念があれば,設定できる.

prefix_prefix = /
prefix = $(prefix_prefix)/$1
omedir_data = $(prefix_prefix)/home/pi

追加のパラメータが増えないことが望ましいが,増えることを許容すれば Makefile.am に適当なスクリプトをかけば可能そうではある.

案2: /home/pi/ome の配置を make install でするのをやめる

やめる方法は二つある:

  • home/pi/ome 以下のディレクトリをインストール時にホストからコピーする
  • 初めに /usr/local/share/omemake install でコピーし,あとで /home/pi に移動/コピーする

考察

  • ふつうのひとは make install にホームディレクトリを弄ってほしくないかもしれない.
  • インストールするホストでもクロス環境のホストでも,最小限で慣例的なパラメータ付与さえすれば同じコマンドでビルド・インストールできると嬉しい.
  • そもそも 教材 (01, ...) と教材の依存環境 (contrib/) は分けるべきか?

[第6回] convert_yomi.shによって生成されるdicファイルを利用できない

"第6回 教科書 6.11 自分の単語辞書を作成する"で利用するconvert_yomi.shによって生成されるdicファイルが利用できない。

以下実行時のログ
convert_yomi.shの実行ログ (06/kudamono.yomiをそのまま利用)

pi@raspberrypi:~/06 $ convert_yomi.sh kudamono.yomi > kudamono.dic
Error: (they were also printed to stdout)
line 1: 
line 2: ߤ       ߤ
line 3: ֤ɤ       ֤ɤ
line 4: 
line 5: 
line 6: 
line 7: 
line 8: 
line 9: 
line 10: 
line 11: 
line 12: ʤ      ʤ
line 13: 

julius.shでdicファイルを読み込んだときのログ

pi@raspberrypi:~/06 $ julius.sh kudamono.dic
STAT: include config: /usr/local/bin/julius_conf/default.jconf
WARNING: m_chkparam: "-lmp" only for N-gram, ignored
WARNING: m_chkparam: "-lmp2" only for N-gram, ignored
STAT: jconf successfully finalized
STAT: *** loading AM00 _default
Stat: init_phmm: Reading in HMM definition
Stat: binhmm-header: variance inversed
Stat: read_binhmm: has inversed variances
Stat: read_binhmm: binary format HMM definition
Stat: read_binhmm: this HMM does not need multipath handling
Stat: init_phmm: defined HMMs:  8443
Stat: init_phmm: loading ascii hmmlist
Stat: init_phmm: logical names: 21429 in HMMList
Stat: init_phmm: base phones:    43 used in logical
Stat: init_phmm: finished reading HMM definitions
STAT: making pseudo bi/mono-phone for IW-triphone
Stat: hmm_lookup: 12 pseudo phones are added to logical HMM list
STAT: *** AM00 _default loaded
STAT: *** loading LM00 _default
STAT: reading [kudamono.dic]...
Stat: init_wordlist: reading in word list
Error: voca_load_wordlist: line 1: logical phone "" not found
Error: voca_load_wordlist: the line content was:
Error: voca_load_wordlist: line 2: logical phone "ߤ" not found
Error: voca_load_wordlist: the line content was: ߤ      ߤ
Error: voca_load_wordlist: line 3: logical phone "֤ɤ" not found
Error: voca_load_wordlist: the line content was: ֤ɤ      ֤ɤ
Error: voca_load_wordlist: line 4: logical phone "" not found
Error: voca_load_wordlist: the line content was:
Error: voca_load_wordlist: line 5: logical phone "" not found
Error: voca_load_wordlist: the line content was:
Error: voca_load_wordlist: line 6: logical phone "" not found
Error: voca_load_wordlist: the line content was:
Error: voca_load_wordlist: line 7: logical phone "" not found
Error: voca_load_wordlist: the line content was:
Error: voca_load_wordlist: line 8: logical phone "" not found
Error: voca_load_wordlist: the line content was:
Error: voca_load_wordlist: line 9: logical phone "" not found
Error: voca_load_wordlist: the line content was:
Error: voca_load_wordlist: line 10: logical phone "" not found
Error: voca_load_wordlist: the line content was:
Error: voca_load_wordlist: line 11: logical phone "" not found
Error: voca_load_wordlist: the line content was:
Error: voca_load_wordlist: line 12: logical phone "ʤ" not found
Error: voca_load_wordlist: the line content was: ʤ      ʤ
Error: voca_load_wordlist: line 13: logical phone "" not found
Error: voca_load_wordlist: the line content was:
Error: voca_load_htkdict: begin missing phones
Error: voca_load_htkdict:
Error: voca_load_htkdict: end missing phones
Error: init_wordlist: error in reading kudamono.dic: 13 words failed out of 0 words
ERROR: failed to read word list "kudamono.dic"
ERROR: m_fusion: some error occured in reading grammars
ERROR: Error in loading model

生成されたdicファイル

���	���
�ߤ���	�ߤ���
�֤ɤ�	�֤ɤ�
��	���
������	������
����	����
��	������
��������	��������
��	����
������	������
�����	�����
�ʤ�	�ʤ�
�����	�����

[第2回] orgディレクトリを削除する

来年度(2024年)に向けて
/usr/local/share/omeからコピーしてきて利用する方針になったため、orgディレクトリを削除することを提案します。
また2023年度のイメージでは、poker.hspなど一部のファイルについて02/org02で内容が異なるものがありましたが、orgディレクトリ自体を削除する場合は、対処不要です。

2022-09-22-raspios-bullseye-arm64.imgが作成できない

READMEで記載されている方法でdocker runすると、HSPをmakeする際にリンクで大量のundefined referenceが出て2022-09-22-raspios-bullseye-arm64.imgの作成ができません。

コマンド
git clone [email protected]:OmeSatoFoundation/ome2023.git --recurse && pushd ome2023 && eval $(ssh-agent -s) && ssh-add ~/.ssh/id_rsa && docker run --rm -ti -v /dev/:/dev --privileged -v $(pwd):/work -v --workfdir=/work -v $SSH_AUTH_SOCK:/ssh-agent -e SSH_AUTH_SOCK=/ssh-agent ome2023 sh -c 'aclocal -I m4 && automake -a -c && autoconf && ./configure --build=x86_64-linux-gnu --host=aarch64-linux-gnu --prefix=/usr/local && make -j$(nproc) && ./contrib/scripts/install.bash -f' 2>&1 | tee build.log && popd

結果(略)

make[3]: Leaving directory '/work/contrib/OpenHSP/OpenHSP'
make[3]: Leaving directory '/work/contrib/OpenHSP/OpenHSP'
make[2]: Leaving directory '/work/contrib/OpenHSP'
make[1]: *** [Makefile:318: all-recursive] Error 1
make[1]: Leaving directory '/work/contrib'
make: *** [Makefile:666: all-recursive] Error 1

ログ
build.log

Raspberry Pi OSの初回起動時のWizardを出さずにデフォルトユーザとパスワードを設定する

現状Raspberry Pi 400用のRaspberry Pi OSは初回起動時にユーザー名などの設定を要求される(Wizardの画面: https://ome-edu.nshimizu.com/index.php?未来塾2023に向けてFabo%20を%20Raspberry%20Pi%20400%20で動作させる#t45f2caf)。
青梅の教科書のパスの表記とOSのパスが一致している方が望ましいため、OSの配布時にユーザー名などをあらかじめ設定しておくことが望ましい。
そのため、Raspberry Pi OSの初回起動時のWizardを出さずに次の項目を設定するようにOSを作成するスクリプト(https://github.com/OmeSatoFoundation/ome2023/blob/master/contrib/scripts/install.bash)を変更したい。

  • ユーザー名
  • パスワード
  • ホームディレクトリ
  • 言語
  • タイムゾーン
  • キーボード配列

ちなみに/etc/xdg/autostart/piwiz.desktopを消去してOSを作成すれば、Wizardを出さずにOSを初回起動できそう。(参考: https://forums.raspberrypi.com/viewtopic.php?t=231557)

configure, Makefile.いn 等はリポジトリに置かず、都度生成する

configure, configure.in, Makefile.in, Makefileconfigure.acMakefile.amm4/ で生成されるので、
リポジトリには含めない。

代わりに、慣習 (?) に従い、aclocalautoconfautomake をラップする autogen.sh を作成する。

https://cutter.osdn.jp/reference/ja/tutorial.html#id-1.2.4.2.5

#!/bin/sh

run()
{
    $@
    if test $? -ne 0; then
        echo "Failed $@"
        exit 1
    fi
}

run aclocal ${ACLOCAL_ARGS}
run libtoolize --copy --force
run autoheader
run automake --add-missing --foreign --copy
run autoconf

第7回 tv.pyがイメージに含まれていない、実行権限が付与されていない

2023-06-17のイメージには、第7回演習tv.hspで使用するtv.pyが含まれていない。
contrib/HTMLParse/Makefile.amに含まれていないのが原因?

また、contrib/HTMLParse/tv.pyのパーミッションが622となっているので、pythonスクリプトとして実行できる状態にない。

bin_SCRIPTS = amedas.py decurl.py eki.py htmlparser Makefile.am weblio.py wikipedia.py zipcode.py

`--prefix` to replace where `hsed` will be

0c07166

path specification in object files should be independent of DESTDIR

Wrapping Makefile.am in OpenHSP replaces the path specification in
hsed.desktop to put target files (e.g. hsed) where the original
project does not desire. This path should not include DESTDIR when
make install, otherwise, the target file path specifies a
relative path from where install.bash launches in a host.

In that reason, --prefix at configure must be an absolute path inside target
chroot.

TODO: we need the other measure to create or replace hsed.desktop to
enable configure to use relative --prefix.

  1. add a parameter (a environment variable) to clarify chroot root.
    autoconf accepts --enable-feature[=arg] or `--with-[=arg]. The parameter can be a
    candidate to distinguish if it is cross-build or not.

https://github.com/nghttp2/nghttp2/blob/00bd76fc3defeffc4fa5208598ef414ad5db56f1/android-config#L38

  1. ask the OpenHSP project to place executables and data at /usr/local/{bin,share}.

Raspberry Pi OS のアップグレードをする

ベースのディストリビューションイメージを更新。

wget https://downloads.raspberrypi.org/raspios_arm64/images/raspios_arm64-2022-09-26/2022-09-22-raspios-bullseye-arm64.img.xz

今だと

https://downloads.raspberrypi.com/raspios_arm64/images/raspios_arm64-2024-03-13/2024-03-12-raspios-bookworm-arm64.img.xz?

をダウンロードする。

growpartコマンドが見つからない

Dockerfileにcloud-guest-utilsのapt installを追加して対策可能。
------------------------------- error --------------------------------

 + IMG_NAME=2022-09-22-raspios-bullseye-arm64.img
 + '[' '!' -e 2022-09-22-raspios-bullseye-arm64.img ']'
 + truncate -s 7800000000 2022-09-22-raspios-bullseye-arm64.img
 ++ losetup -P -f --show 2022-09-22-raspios-bullseye-arm64.img
 + DEVICE_PATH=/dev/loop0
 + set +e
 + growpart /dev/loop0 2
 ./contrib/scripts/install.bash: line 50: growpart: command not found
 + EXITCODE=127
 + '[' 127 -ne 0 ']'
 + '[' 127 -ne 1 ']'
 + echo 'growpart unexpectedly exited.'
 growpart unexpectedly exited.
 + exit 127

------------------------------ ここまで ---------------------------

 diff --git a/Dockerfile b/Dockerfile
 index c8b3f33..68d1857 100644
 --- a/Dockerfile
 +++ b/Dockerfile
 @@ -29,6 +29,7 @@ RUN dpkg --add-architecture arm64 \
      && sed -i 's/^deb/deb [arch=amd64,arm64]/g' /etc/apt/sources.list \
      && apt update \
      && apt install -y \
 +    cloud-guest-utils \
      dpkg-cross \
      g++-aarch64-linux-gnu \
      libasound2-dev:arm64 \
 diff --git a/contrib/Julius b/contrib/Julius
 --- a/contrib/Julius
 +++ b/contrib/Julius
 @@ -1 +1 @@
 -Subproject commit 36de4696f9095cd03f2f60b0fb37b80501bf90e9
 +Subproject commit 36de4696f9095cd03f2f60b0fb37b80501bf90e9-dirty

[第5回] OLEDが利用できない

パスをusr/local/binに変更した上での動作について
https://github.com/OmeSatoFoundation/ome2023/blob/master/contrib/FaBo/rpz-gpio.as#L479

05/oled.hspを実行すると、以下のエラーが発生

Runtime[hsp3dish].
hsed: Runtime [hsp3dish].
Traceback (most recent call last):
File "/usr/local/bin/oled", line 4, in <module>
import FaBoOLED_EROLED096
ModuleNotFoundError: No module named 'FaBoOLED_EROLED096'

考えられる原因

[第5回] 講義で使用するスクリプトの動作不良

第5回で使用するscriptの動作検証を行った際、いくつかのscriptに不具合が見られた。
検証したscriptと動作検証方法、実際の挙動を以下に並べる。

  • digout.hsp

    • 検証方法
      GPIO23, 25にLED、振動子のブリックを接続して検証
    • 挙動
      ブリックに反応が見られなかった。(LEDなら点灯、振動子なら振動といった挙動が見られたはず)
  • digin.hsp

    • 検証方法
      • GPIO24にボタン、スイッチ、リミットスイッチ、傾斜センサーを接続して検証
      • GPIO20にボタンを接続して検証
    • 挙動
      ブリックから信号を入力してもボードのLEDが点灯するといった挙動は見られず
  • pwm.hsp

    • 検証方法
      ブリックの接続などせずに実行
    • 挙動
      ボード上のLEDに反応は見られなかった。(LEDの光が強くなったり弱くなったりという挙動が見られたはず)
  • 赤外線信号を保存する手順

    • 検証方法
      mode2 -d /dev/lirc1 | tee onoff.txtを実行
    • 挙動
      /dev内に赤外線受信用ユニットのデバイスファイルが存在しないため、実行できなかった。
  • ir.hsp

    • 検証方法
      赤外線信号の受信ができなかったので、スクリプト内で実行するirsend SEND_ONCE fan onoffをターミナル上で実行した。
    • 挙動
      hardware does not support sending
      Error running command : Input/Output error
      
      というエラーが出力された。
      赤外線受信用ユニットもラズパイ側が識別していない様子。

第7回 ir.hspが動作しない

irsend SEND_ONCE fan onoffで赤外線リモコンを操作するみたいだが、
unknown remote "fan"という旨のエラーが出る。
irsend list "" ""で、デバイスのリストを確認したがfanというリモートはない。
indoor corgiのサイトで、LIRCを用いた方法はOSバージョンの違いによる変更が大きいと書いてあったので、前環境のものが対応していない可能性が高い。

bookworm のベースイメージを使うと HSP で gpio コマンドが動作しない

Inherited from OmeSatoFoundation/ome-doc#450, related to #96

pseudo filesystem を使った gpio へのアクセスは deprecated で 2020 から削除していく事になっていた (https://www.kernel.org/doc/Documentation/gpio/sysfs.txt https://www.kernel.org/doc/Documentation/ABI/obsolete/sysfs-gpio) が、2024-03-12-raspios-bookworm (Linux 5.15.61-v7+) までに削除されたようで (または 不具合かもしれない)、このベースイメージを使用すると HSP の gpio コマンドが動作しない。HSP は gpio 制御のために pseudo filesystem を使用している。

かわりに、c library として新しく導入された gpio interface である libgpiod を使う必要がある。

上記に取り組む前に考察の確証を持つため下記を確認する。

  • 問題が再現する手順を確立する
  • /sys/class/gpio の存在・可用性確認
  • kernel version の確認

ベースディストリビューションのアップグレード (#96) に関する問題のマイルストーンはその最終的な量によって決める。問題の量が過多の場合は修正を次年度に持ち越し、当該年度は前年度のイメージを再利用する。

第7回 cgiにアクセスすると403エラーが出る

.hspファイルをwebserverスクリプトでexecveでコンパイルしなくてはならないが、hspファイルはhsedを通してコンパイルしないとasファイルがないといわれ、コンパイルが通らない。

hspcmpコマンドを実行したディレクトリのcommonディレクトリからasファイルを探すようなので、07/www/cgi-bin直下に/usr/local/bin/commonのシンボリックリンクを作れば、コンパイルできることを確認した。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.