アプリストアで配る
app.cfg の id と version、アプリストアへの投稿、署名した配布物の作り方、本体のストアやSDに置くパッケージでのインストール
作ったLuaアプリは、SDカードへコピーする代わりにランチャの「ストア」から Web 経由で入れることもできます。
配布物を作る道具はリポジトリの script/build_app_repo.py、形式の細かい決まりは docs/APP_REPO.md です。
本体のストアの既定の配布元は、投稿用リポジトリ kimu1109/pico-os-apps です。
アプリ側で用意するもの
app.cfg に id(英小文字・数字・-・_、23文字まで)と version(1.2.0 のような数字と .)を書きます。
name=テトリス
id=tetris
version=2.0.0
icon=icon.pimg
permission_network=false
- ファイル名は英数字と
. - _だけ(日本語のファイル名は配れません)。ディレクトリ名(/lua/apps/<ここ>)は日本語でかまいません。 - 版を上げるときは
versionを増やします。本体は「入っている版 < 一覧の版」なら「更新」を出します。 - 権限(
permission_*)は一覧にも載り、入れる前に利用者へ見せます。 pico.store_save()のセーブやpico.sd_write()で自分のディレクトリに書いたファイルは、更新しても残ります(削除すると消えます)。
ストアに投稿する
kimu1109/pico-os-apps へプルリクエストを出すと、検査に通ればストアに並びます (手順と決まりはそのリポジトリの README)。だいたいの流れ:
# 作者の鍵(1回だけ)。秘密鍵は手元のPCの外へ出さない
python3 script/build_app_repo.py keygen --key ~/.pico-os/author.key
# pico-os-apps を clone して apps/<id>/app/ にアプリを置き、署名する(初めてのときは --owner と --dir も)
python3 script/build_app_repo.py author-sign --key ~/.pico-os/author.key --app apps/tetris \
--owner <GitHubのアカウント> --dir テトリス
- 新しいアプリは管理者が中身を見てからマージします。2回目からの更新は、版を上げて自分(
meta.cfgのowners)がPRを出し、 権限が増えていなければ自動でマージされます。 - 一度入れた端末は作者の鍵を覚えるので、更新は同じ鍵で署名したものしか入りません。鍵は無くさないでください。
自分で配布物を作る
# 鍵(1回だけ)。秘密鍵は手元のPCの外へ出さない
python3 script/build_app_repo.py keygen --key ~/.pico-os/app_repo.key
# 配布物をまるごと作る(Raspberry Pi などの静的なサーバへ置く)
python3 script/build_app_repo.py build --key ~/.pico-os/app_repo.key --out /tmp/apps --clean
表示された公開鍵を、入れる側の本体のSDの /sys/store.cfg に key = ... として書いてもらいます。
配布元のURLは /sys/store.cfg の url = ... です(ストアの [設定] でも変えられます)。
投稿用リポジトリを通さずに、自分のサーバから配るときの手順です。
本体での動き
- 一覧は署名を確かめてから使います。署名が合わない・信頼していない鍵・前より古い一覧は使いません。
- 入れるときは、ファイルを1つずつSHA-256で確かめ、
app.cfgのid・版・権限が一覧と同じかを見てから/lua/apps/<dir>/へ移します。 - 入れたアプリはすぐランチャに並びます(再起動は要りません)。
SDカードに置いて入れる(パッケージ)
Wi-Fiが無くても入れられるように、アプリを1つのファイル(.papp)にまとめたパッケージもあります。
- アプリストアのページの DOWNLOAD で落としたファイルを、SDカードの直下にそのまま置きます。
次に起動したとき(またはUSBドライブを終えたとき)に
/lua/apps/<dir>/へ入り、通知が出ます。入ったファイルは消えます。 - 入れられなかったときは、ファイルの名前の後ろに
.errが付き、通知に理由が出ます。 - ストアから入れるときと同じく、作者の署名とファイルごとのSHA-256を確かめます。一度入れたアプリは、同じ作者の鍵で署名された新しい版でしか更新できません。
ストアに載せずに自分のアプリを渡したいときは、作者の鍵でパッケージを作ります。
python3 script/build_app_repo.py keygen --key ~/.pico-os/author.key # 1回だけ
python3 script/build_app_repo.py package --key ~/.pico-os/author.key --app pc/sdcard/lua/apps/テトリス
# → tetris-2.0.0.papp(app.cfg の id と version から名前を付ける)
配布物を自分のサーバに置くときは、build の後に site を回すと、同じ場所に一覧のページ(index.html)とパッケージができます。
python3 script/build_app_repo.py site --dir /tmp/apps