osa2's memo

自分の記憶のために・・・。

Galaxy S2のPMOSインストール (1)

Samsung Galaxy S2 (i9100 / SC-02C) へのPMOS(postmarketOS)のインストールまとめ。

最初はOSのインストールからXfce4の起動まで。以下が参考にしている本家本元ページ。

Samsung Galaxy SII (samsung-i9100) - postmarketOS

警告:本記事で使用している端末、SDカードのデータは完全にクリアされます。バックアップを取るなど、十分な対策の後にトライしてください。またこの手順では文鎮化はないとは思いますが、あくまでも自己責任でトライしてください。

ちなみにGalaxy S2(以下S2)はPMOSの中ではかなり安定して稼働し、何とか操作もできる稀有な機種。ここではX11+Xfce4をインストールする。リソースを気にするなら、matchboxも悪くない選択です。

1. pmbootstrapのgit clone

ここは特に問題なし。ちなみにNexus5では、かつてはこのリンクに間違いがあった。

$ git clone https://gitlab.com/postmarketOS/pmbootstrap.git

以下、git cloneでできた、pmbootstrapディレクト直下での操作。

2. pmbootstarp init

ここで諸々初期設定する。

$ ./pmbootstrap.py init

本家のWikiでは.pyがないけど、aliasでも通してそうすれば良いのかも。

Q&A形式なので分からなければデフォルトでも構わないが、並列度とccacheのメモリ量は変更した方が良いかもしれない。

  • デフォルト:parallel 9, ccache 5GB
  • 私の場合 : parallel 4, ccache 50GB

途中でXfce4など選択する。あと、アプリも指定可能。ただ後からパッケージマネージャ(apk)でインストールもできるので、例の通り、vim程度でOK。initの結果は、~/.config下にpmbootstarp.cfgとして保存されている。リセットしたければこのファイルを消せばいいが、選択し直せばいいだけなので、あまり意味はない。

3. pmbootstarp install

ここはいろんな進め方があるけど、一番無難なのはSDカードを用意してそこにrootfsを焼きこんじゃうのがいい。他の方法は手間がかかるのと、容量不足など起きる可能性があり、その場合はpartedなどでのリパーティションが必要。コマンドとしては以下が結論。

$ ./pmbootstrap.py -t 1800 install --no-fde --sdcard /dev/sdx

まず後ろのsdxの部分は、母艦のPCにSDカードをUSBでのカードリーダーなどで接続し、lsblkするとxの部分がわかる(これは個々の環境により異なり、sdcだったりsdfだったりする)。もしデータが入っているならバックアップの上、sudo fdisk /dev/sdx(xの部分はさっき調べた値)でパーティションを削除する。ディストリでフォーマッタが提供されているならそれでもOK。もしsdx1のようにパーティションができた場合は念のためsudo umountしておく。

これでSDカードは準備OK。上のpmbootstrap installを打つ。ここでsudoして~/.local/var以下にchrootして主にrootfsを用意して、上のコマンドではSDカードにrootfsの展開まで行われる。

オプションの--no-fdeはディスクの暗号化(full disk encryption)をしない、という設定。これがないと暗号化がはじまり、起動時にパスコードの入力を要求されるので面倒なので--no-fdeとしている。

-t 1800はexpireationを1800秒、30分としている。これがないとデフォルトでは-t 300のため、5分でrootfsを焼ききれないとタイムアウト、出来上がったSDカードも使い物にならない。xfce4ならカードリーダーがUSB2.0でしたーとかない限り、-t 1800あれば十分である。

ここまでがERRORという表示なしに終わると、kernelとinitramfsを焼けという指示が書いてある。

4. pmbootstrap flasher flash_kernel

これでbootパーティションにkernelが、recoveryパーティションにinitramfsが焼き込まれる。

$ ./pmbootstrap.py flasher flash_kernel

ここはWikiの通りだが、前提としてWindowsならOdinに相当するheimdallが必要なのでパッケージマネージャ経由でもいいのでインストールしておく(debian系だと sudo apt install heimdall でOK)。heimdall はオプションを付けない限り、焼き終わると勝手にリブートするので、USBで端末をつなぐのはもちろんだが、S2本体はDownloadモードにしておくこと、その起動の際には3.で作成済みのSDカードをS2に装着しておく必要がある。手順としては、

  1. (USBの接続は後にする。ここでは未接続にしておく)
  2. S2の裏蓋を開けてバッテリーを取り出す
  3. SDカードを装着、バッテリーを元通りに装着する
  4. vol down + home + power同時押しをする
  5. Downloadモードに入る前の警告画面でvol upを押すとDownloading..と待機画面になる
  6. ここまで来たらUSBケーブルで母艦のPCとS2をUSBケーブルでつなぐ
  7. 上記flashコマンドを打ち込むと、heimdall経由でkernal, initramfsを焼きこんで勝手にリブートされる

黙っていれば、2,3分でXの画面が、そして程なくxfce4が立ち上がる。マウスポインタはドラッグで移動、タップでクリックとなる。

== END ==

 

 

 

 

 

 

RasPiを自力で鍛え上げてみることにした。

最近のスマホや部屋に置くやつを使えば簡単にできるのだろうけど、勉強なので、スクラッチから。

既に赤外線リモコン機器は、サンプリングさえできればある程度コントロールが効くので、どこまで賢くなれるかに重点を置いてみる。 

課題1:

エアコンを音声でコントロールし、その時の温度や湿度とセットで、主がどんな時にどんな風にエアコンを操作するのか学習させてみる。最終的にはもちろん、何も言わずとも常に快適なエアコン調整をできるように育てる!こっちはニューラルな感じでいけたらいいなぁ。

課題2:

温度・湿度・気圧センサーと体調をセットで学習させる(私の場合は頭痛だけでなく痛み、しかも普通の人とはややパターンが異なる)。当座の目標は「おまえ今、体調悪いやろ!」と言わせる。。ベイズとかを取り入れてみたい。

どちらもベランダ菜園のように、ちまちまゆっくりやるので夏が過ぎていても仕方がないとする(笑)最近まるで勉学に励む気力・体力がなくなり(汗)ゆるりと前進あるのみ!

== END ==

ようやくメール受信

世の中のPCはWindowsスマホAndroidと決まっている(macはPCではない。macである。同様にiPhoneスマホではない、iPhoneだ)。つまり、MicrosoftGoogleの独走、独占を皆で礼讃し続けた結果、独禁法も何のそので世界が征服されました。Apple貴族の方々だけが、高額な高級品を惜しげもなく買っては次、を繰り返して、maciPhone/iPadで抵抗戦線を張ってくれてる訳。他はみんなアングラとされて、テロ組織に利用されないように、ということで、潰される。ま、権力を握れば何とでもできますよね(笑)

 

でまぁ、もはや山中の洞穴に潜んで活動してるような弱小スマホOSがあるわけでpostmarketOSもその一つ。といってもスマホの上でLinuxが動くだけなのですが。当然、とてもじゃないけど、全機能綺麗に動くはずがなく、実用性ゼロ(ゼロじゃなかったら潰されますからね(笑))

それにちょいちょいアプリを乗っけて遊んでるだけ、です(笑)

いまはメールソフト作成中。まだIMAPの受信だけ。本文のデコードもできてないときもある。使い物になんかなりゃしないです。潰されますから♪写真はSamsung Galaxy S2(えーと、我が国ではSC-02Cというと、ああ、なんだあれか、と半分くらいの方々がお分かりになるかと)。pmOSがはいっている。UIはmatchbox。眠くなったので今日はここまで。

f:id:osa2:20180903235549j:image

WebKit2GTK+?で遊んでます

もはや仕事になんの興味もなくなったので、隠れ定年状態。老後のたしなみにと、WebKit2GTK+でブラウザなど作って遊んでます。

postmarketOSを入れた、Samsung Galaxy SII (SC-02C)で遊んでますが、中身はAlpine LinuxというふつーのLinux。apkというパッケージマネージャーもあり、大抵のものはバイナリが手に入ります。コンパイラや-devなパッケージもあるので、クロスコンパイルで四苦八苦することなく、Galaxy S2の中でビルドができるという(笑)

Firefoxはもちろんパッケージがあるのですが、WebKit系のブラウザはよく探してないけど(midoriとかなのかもですが)、まー老後の楽しみだし、とWebKit2GTK+なるものでC++で遊んでます。勉強嫌いなところに、なかなかこれというサンプルが落ちてなくて、でもまぁなんとかURL入れて[GO]押すと表示はされてます(あ、もちろんですが日本語フォント(Miguフォント)を入れてます)。

この写真は、WordPressのトップ画面です。見栄えの良いところまでスクロールしてます。NTT docomoのロゴが燦然と輝いてますね☆

f:id:osa2:20180722215802j:plain

WebKitWebViewって偉大すぎます。まず、ネットワーク関連のコード、一切書いてない。loadにURL指定してるだけ。httpsもちゃんとTLSでhandshakeしに行きます。何も指示してないのに。リンクはもちろん、指でなぞるとちゃんとスクロールもする。全部入りじゃないですか。(唖然)

 

長年、おさぼりであちこちのサンプルかじっただけなので、Makefileすらろくに書けず。pkg-configも知らず。少しこの作例や他の簡単なプログラムで、Linuxのビルドについて、お勉強しようと思います。いままでバカの1つ覚えで./configure -> make -> make installな人だったので。

 

他、今週末はSurface2 ProにLinux Mintを押し込んだりして、すっかりごきげんですよ♪(^-^)

 

さて、これからDAZNでF1です。

== END ==

自宅のリモコンのリメイク(1)

冬に作った部屋の照明&エアコンのリモコンを作りなおすことに。冬に作ったから暖房のデータしかサンプリングしてないのですよ(笑)

まぁせっかく作り直すので、アーキテクチャから見直しをかけて、将来のために、無駄に(今は)要らないツールも使っているのでなかなか肝心の冷房機能が実装できてないのですけど・・。

1. ハードウェアアーキテクチャの変更

これまではESP-WROOM-02(以下ESPrIR)という3cm✕4cmくらいのWiFi+IR(赤外線LED)のみで、リモコンを作っていた。WEBページで利用可能にしたが、何のことはない、80番ポートでソケット開いて、処理結果をHTMLで(HTMLで!)返していたのだった。

1つで家の中全体に赤外線を飛ばせるならこれでも不自由はない。が、小さな部屋と言えど、1つでは無理。2つは要る。他に赤外線でなくてもコントロールしたいものが増えるかもしれない。

なので司令塔として、部屋に転がっていたRaspberry Pi 2 B+(以下RPi)を使うことにして、WEBのレンダリングもRPiにやらせる。まずRPiがUIからのリクエストを受けて、各子機(今回はまだESPrIR1機のみ)にリクエストを投げる。親機と子機の間もHTTPだが、ここはJSONかCSONでやり取りすることにして、まぁ、RESTful風にする。

2. ソフトウェアの変更

WEBのUIレンダリングには(別の案件で使いたいと思っている)Vue.jsを使用した。RPiのWEBサーバーはNginxにしたが、単に好み。実際に子機との通信部分をCGIでやらせても良いのですが(笑)、せっかくなので、これも別案件で使いたいと思っていたPython、その軽量フレームワークのFlaskを使ってみることにした。

というわけで、UI(HTML,CSS,JS,Vue.js)、サーバー(Nginx+Python+Flask)という、、実はindex.html1枚とCGIで済むところに、無駄にふんだんに仕掛けを投入(笑)。ちなみに別案件はビジネス向けのWEBシステム(のプロトタイプ)で、MySQLという名のMariaDBとMroonga、MongoDB辺りを使うのと、Rや,Cともバインドがあるのではと思われるので、ららべるに後ろ髪引かれながらもPHPではなく、グルー言語の誉れ高いPython、なのでした。

3. しかし、この組み合わせは・・・(笑)

なんと、Flaskのテンプレートエンジン(Jinja2)でのサーバーサイドレンダリングと、Vue.jsでのHTMLへのデータインジェクションの「ノテーションが同じ」という軽いワナがあることが判り。やってみるもんですね。超ざっくり書くと、

<h1>{{ greeting }}</h1>

と書いて、これがVue.jsのため、と思っていても、Flask側でこのHTMLファイルをtemplatesフォルダに入れて、render_template(xxxx.html)とすると、greetingが定義されとらん! とTrace吐かれるのデス。

ま、SPAで行くならサーバーサイドレンダリングなどせずに、staticから諸々ファイルをまんま読み込んで、あとはAJAXでのリクエスト処理だけ Flaskにやらす、でいいや、というところで今日は終わり。

4. ちなみに

つまらないものですが、UIイメージだけ出来とります。ペタっ。

f:id:osa2:20180415232809j:plain

== END ==

 

 

 

リパーティション、REPARTITION♪

久々にスマホのリパーティションしたのですが、以前やったのにすっかりやり方忘れてましたので、メモです。

ご注意:やり方にもよりますが、基本的に、データが吹っ飛びます。パーティションを再構成するのだから当然ですよね?ということで、何が起きるのか、何をしたいのか分からない人は、真似しないでくださいね(リンク先やダンロード先の安全性も自己責任でお願いします)。

1. パーティション書き換えツール "parted"

旧型AndroidではARM(32bit)のバイナリが必要です。自分でクロスコンパイルしてもいいけど、ここから落としました。

iwf1.com

2. 潰し方と作り方

ココが参考になります。

forum.xda-developers.com

基本的には、fdiskとpartedで確認しながら潰し、確認しながら作って、お名前つけていきます。

パーティション一覧の見方

 # fdisk -l /dev/block/mmcblk0

パーティションの潰し方

 # ./parted /dev/block/mmcblk0 rm <パーティション番号>

パーティションの作り方

 # ./parted /dev/block/mmcblk0 mkpart primary <開始セクタ>s <終了セクタ>s

パーティションへの名前付け

 # ./parted /dev/block/mmcblk0 name <パーティション番号> <名前>

3.気をつけること

ま、これをやりたいのはsystem(factoryfs)パーティションが足りないとき。よく隣にuserdataパーティションがあるので境目をずらす感じですね。

== END ==

 

AndroidにErlang/OTPとElixirを仕込んでみた

忘れないうちに作業メモ。

Erlang/OTPのビルドと配置

基本的にはこの手順が正だとは思う。

otp/INSTALL-ANDROID.md at master · erlang/otp · GitHub

一番参考になったのは、この手順。

Building Erlang for Android

あとでこの2つの手順をベースに書き直すつもり。ソースのバージョンは20.2.2を使用した。

Elixirのビルドと配置

2つ目の手順で概ね問題なかったが、Elixirの導入でハマる。原因は、ソースをビルドしないまま配置していた!elixir.beamがなかったので、elixirやiexを使っても、呼ばれたerl(Erlang/OTP)が中でcrashしていた。

Elixirのソースはここから。

GitHub - elixir-lang/elixir: Elixir is a dynamic, functional language designed for building scalable and maintainable applications

手順はほとんどなく、git cloneした後、チェックアウト(v1.5のHEAD。v1.6はまだRC1だったので)。

で、make clean test をする。これをしてなかった。

あとはAndroidに突っ込んでパス通すくらい。スクリプトの先頭行(#!/bin/sh)がAndroidでは微妙に違う。

余談

Erlang/OTPはあまりビルドで手こずらなかった(node.jaの方が難しかった気がする)。

CordovaとElmでのapk作成はできたので、あとはElmからどーやってElixir/Erlangを叩くか。全部通ると、Androidアプリを最新のリアクティブな言語で作れるのでは?まぁ、WebViewでできる範囲のことだけですけどね。

で、Erlang/OTPからLinuxをコールできれば・・というようなことをすると、Googleが圧力をかけてくるのかこないのか、この辺りの話はとにかく情報の量が少ない。

== END ==