Pixel3・android11(R)正式リリース版でroot化!

じゃんくはっく
じゃんくはっく

Pixel3をAndroid11でroot化したよ!

どんなメリットがあるの?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

それは色々ありすぎて、目的によるね!

そんなマニアックなネタ、需要あるの?

ぴー
ぴー

はいー! ぴーちゃんの言う通り、マニアックネタになります。しかし、root化によるメリットは結構あります。もちろんデメリットもありますが、実際にいろいろ触って体験してみましょう。あと自己責任でよろしくね!真似して何か不利益が起きても著者は知りませんよ。

そもそも、root化ってなに?

このブログの趣旨としては、なるべく専用用語を使わずわかりやすく一般の人にも理解してもらいたい・そー著者は思っております。

すべて使わないのは無理があるわね!

ぴー
ぴー

root化 (Android OS)
出典: フリー百科事典『ウィキペディア(Wikipedia)』

https://ja.wikipedia.org/wiki/Root%E5%8C%96_(Android_OS)

wikiではこのように説明されていますね。一言で言えば、Androidの最高管理権限をゲットするということです。一体、この権限を取得して何をするのか? ということが、本来大事ですよね。目的があってこそのroot化です。

root化して何するの・・・?

今回、スマホ(Pixel3)をroot化したいなと思った1つの大きな目的はtermux です。Termuxは、root化しなくてもいろんなアプリが動作する大変面白い神アプリですが、1024ポート未満は、root権限がないと動作しません。例えば、nginxを80番ポートで動作させようとすると以下のようになります。

$ nginx
nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /data/data/com.termux/files/usr/etc/nginx/nginx.conf:3
nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

このようにroot権限がないと、バインドできないんです。WEBサーバ以外にも、例えばDNSの53ポートや、SSLの443など、なるべくそのままのポートで動作させたいものがあります。root化していれば、この制限がなくなります。つまり、今の所、内部向けDNSと、WEB・SSLサーバをスマホで動作させたいのが root化の大きな目的です。

 現在、このブログが動作している Umidigi F2というスマホにもtermuxが動作していて、そこでは8080と8443ポートで動作しているWordPressがあります。現在は外向け用に、グローバルIP+ポートをプライベートIP+内部ポートに変換して運用していますが、内部からのアクセスだとUターンNATができないルータの影響で、内部ネットワークからはドメイン名でWordPressにアクセスできないのです。ポート変換がなければ、内部向けDNSを作ればシンプルに解決できますので、ポート53で動作する省電力DNSサーバとWEB/SSLサーバが欲しかったわけです。まだ検討中なので、実運用するかどうかはわかりません。

 というわけで、Pixel3のroot化やってみましょうか。

ステップ1 概要

こういうのは、全体像が見えていることが大事です。今回、Pixel3のAndroid11最新バージョンの状態でroot化をどのようにするか、要点をまとめてみます。

・Magiskというツールを使い、twrpは使わない
・Magiskを使い、純正ファクトリーイメージに含まれるBootにパッチする
・adb純正ツールで、BootをPixelに書き込む
・Termuxはroot権限を利用できるようMagiskに設定しておく

root化というのは、Bootプロセスの一部に細工を加えその後に展開されるOSイメージのroot権限を奪取して、永続化できるよう書き換えるというものです。Pixelの場合は、ブートローダは普通にだれでもアンロックできますので boot.imgを程よく書き換えればその後マウントされる中でrootがイキの状態に持っていけるということです。

他にも違うやり方はあると思いますが、Magiskというツールがなかなかよかったので、今回はこれでやることにします。boot中にどのような手法でやっているのか(一部、脆弱性を利用していると思いますが)、その具体的な手法については未調査です。

ステップ2 必要なツールと準備

さて、まずは前準備が大切です。

SDK・プラットフォームツール
::
これは最新にしておいてね!

https://developer.android.com/studio/releases/platform-tools.html

AndroidStudioから、最新にする方法もあります。また入れてあれば上記からDLして、本来入っているところに上書きしておけばOKです。現在の最新は以下のバージョンです。

$ adb --version
Android Debug Bridge version 1.0.41
Version 30.0.4-6686687

次はファクトリーイメージをダウンロードしておきます。

Factory Image
::
“blueline” for Pixel 3
::
11.0.0 (RP1A.200720.009, Sep 2020)

https://developers.google.com/android/images

Pixel3のコードネームは、bluline です。これの現在最新の11.0.0 (RP1A.200720.009, Sep 2020)をダウンロードしておきます。コマンドでやる場合は以下のようになります。著者は、ルート直下にsrcディレクトリ作ってますが、別にどこでやってもいいです。パスが長くなるのが嫌だっただけです。

$ sudo mkdir /src
$ sudo chmod 777 /src
$ cd /src
$ wget https://dl.google.com/dl/android/aosp/blueline-rp1a.200720.009-factory-145e4cc4.zip
$ shasum -a 256 blueline-rp1a.200720.009-factory-145e4cc4.zip

 ※ Checksum を確認しておいてね。RP1A.200720.009

ステップ3 ファクトリーイメージを展開

ダウンロードしたファイルを展開します。

$ unzip blueline-rp1a.200720.009-factory-145e4cc4.zip 
$ tree blueline-rp1a.200720.009
blueline-rp1a.200720.009
├── bootloader-blueline-b1c1-0.3-6623201.img
├── flash-all.bat
├── flash-all.sh
├── flash-base.sh
├── image-blueline-rp1a.200720.009.zip
└── radio-blueline-g845-00107-200702-b-6648703.img

さらにその中のイメージファイルを展開

$ mv blueline-rp1a.200720.009/*.zip ./
$ mv blueline-rp1a.200720.009/*.img ./
$ unzip image-blueline-rp1a.200720.009.zip -d image-blueline-rp1a.200720.009
$ tree image-blueline-rp1a.200720.009
image-blueline-rp1a.200720.009
├── android-info.txt
├── boot.img
├── dtbo.img
├── product.img
├── super_empty.img
├── system.img
├── system_ext.img
├── system_other.img
├── vbmeta.img
└── vendor.img

$ mv image-blueline-rp1a.200720.009/boot.img ./

ステップ4 Magisk Managerを入れる

スマホのアプリなので、スマホから操作です。

Magisk Manager Canary
 ※ Magisk Manager Canary から、APKをDLして入れておく

https://github.com/topjohnwu/Magisk

Canaryビルドのほうが、現時点ではインターフェイスが新しくなって使いやすかったです。

ステップ5 boot.img をスマホに転送

さきほど、ファクトリーイメージの中から取り出した、boot.img をスマホに転送しておきます。adb コマンドでやる場合は以下

$ adb push ./boot.img /sdcard/Download/
./boot.img: 1 file pushed, 0 skipped. 83.1 MB/s (67108864 bytes in 0.770s)

Android File Transfer とか使ってもOKです。何らかの方法でスマホに転送してね。

ステップ6 Magisk Managerアプリでパッチ

スマホに転送したboot.imgをMagisk Managerアプリでパッチを当てます。

追記
 Magiskマネージャーはインストール後、設定→更新チャンネルをβ版に変更しておきます。記事執筆時。

匿名さんからコメントいただきましたので修正、補足しておきます。

boot.imgを選択して、LET`S GO→ です。

All done! でパッチ当て成功です。

ステップ7 magisk_patched.img をPCにダウンロード

PCから、adbコマンドでパッチしたboot.imgを書き込みますのでさきほどの、magisk_patched.img をPCにダウンロードしておきます。adb コマンドでやる場合は、以下

$ adb pull /sdcard/Download/magisk_patched.img ./
/sdcard/Download/magisk_patched.img: 1 file pulled, 0 skipped. 69.2 MB/s (67108864 bytes in 0.925s)

ステップ8 OEMロック解除

開発者オプションから、OEMロック解除をOnにしておきます。あと、USBデバックはONで。

一回、電源を落とします。電源オフの状態から電源+ボリューム下キーを長押し “Fastboot Mode” を起動。

$ fastboot flashing unlock

スマホ本体よりボリューム↑↓キーで『Unlock the bootloader』を選択、電源キーで確定します。

$ fastboot reboot

ステップ9 PCからイメージファイルを書込

PCから、adbコマンドでいろいろ書き込みます。まずは、スマホをFastboot modeにしておきます。

・再起動>ボリューム下キー
 → Fastboot mode でスマホが起動

PCから認識されているか確認しておきます。以下のようにシリアルナンバーが表示されていればOKです。

$ fastboot devices
8*******6	fastboot

ファクトリーイメージに含まれる、以下ファイルを書き込みます。

$ fastboot flash bootloader <以下ファイルをD&D>

 bootloader-blueline-b1c1-0.3-6623201.img

追記
 半角スペース忘れないこと→例:fastboot flash bootloader<半角スペース><ファイルパス>

匿名さんから、つまずいた点をご指摘いただきましたので記載しておきますね。

実行例は以下です。

$ fastboot flash bootloader ./bootloader-blueline-b1c1-0.3-6623201.img
Sending 'bootloader_b' (8537 KB)                   OKAY [  0.290s]
Writing 'bootloader_b'                             (bootloader) Flashing Pack version b1c1-0.3-6623201
(bootloader) Flashing partition table for Lun = 0
(bootloader) Flashing partition table for Lun = 1
(bootloader) Flashing partition table for Lun = 2
(bootloader) Flashing partition table for Lun = 4
(bootloader) Flashing partition table for Lun = 5
(bootloader) Flashing partition msadp_b
(bootloader) Flashing partition xbl_b
(bootloader) Flashing partition xbl_config_b
(bootloader) Flashing partition aop_b
(bootloader) Flashing partition tz_b
(bootloader) Flashing partition hyp_b
(bootloader) Flashing partition abl_b
(bootloader) Flashing partition keymaster_b
(bootloader) Flashing partition cmnlib_b
(bootloader) Flashing partition cmnlib64_b
(bootloader) Flashing partition devcfg_b
(bootloader) Flashing partition qupfw_b
(bootloader) Flashing partition storsec_b
(bootloader) Flashing partition logfs
OKAY [  0.825s]
Finished. Total time: 1.384s

で、このコマンドをやっておきます。

$ fastboot reboot bootloader

実行例は以下です。

$ fastboot reboot bootloader
Rebooting into bootloader                          OKAY [  0.081s]
Finished. Total time: 0.081s

radioファイルを書き込みます。

$ fastboot flash radio <以下ファイル>

 radio-blueline-g845-00107-200702-b-6648703.img

実行例は以下です。

$ fastboot flash radio ./radio-blueline-g845-00107-200702-b-6648703.img 
Sending 'radio_b' (71436 KB)                       OKAY [  1.670s]
Writing 'radio_b'                                  (bootloader) Flashing Pack version SSD:g845-00107-200702-B-6648703
(bootloader) Flashing partition modem_b
OKAY [  0.555s]
Finished. Total time: 2.495s

で、このコマンドをやっておきます。

$ fastboot reboot bootloader

実行例は先と同じなので省略です。

Android11の本体イメージを書き込みます。

$ fastboot --skip-reboot update <以下ファイル>

 image-blueline-rp1a.200720.009.zip

実行例です。ここは少し時間がかかります。途中リブートしましたがほっとけばOKです。

$ fastboot --skip-reboot update ./image-blueline-rp1a.200720.009.zip 
--------------------------------------------
Bootloader Version...: b1c1-0.3-6623201
Baseband Version.....: g845-00107-200702-B-6648703
Serial Number........: 8*******6
--------------------------------------------
extracting android-info.txt (0 MB) to RAM...
Checking 'product'                                 OKAY [  0.058s]
Checking 'version-bootloader'                      OKAY [  0.060s]
Checking 'version-baseband'                        OKAY [  0.060s]
Setting current slot to 'b'                        OKAY [  0.396s]
extracting boot.img (64 MB) to disk... took 0.503s
archive does not contain 'boot.sig'
Sending 'boot_b' (65536 KB)                        OKAY [  1.531s]
Writing 'boot_b'                                   OKAY [  0.468s]
extracting dtbo.img (8 MB) to disk... took 0.017s
archive does not contain 'dtbo.sig'
Sending 'dtbo_b' (8192 KB)                         OKAY [  0.280s]
Writing 'dtbo_b'                                   OKAY [  0.170s]
archive does not contain 'dt.img'
archive does not contain 'recovery.img'
extracting vbmeta.img (0 MB) to disk... took 0.000s
archive does not contain 'vbmeta.sig'
Sending 'vbmeta_b' (8 KB)                          OKAY [  0.120s]
Writing 'vbmeta_b'                                 OKAY [  0.067s]
archive does not contain 'vbmeta_system.img'
archive does not contain 'vendor_boot.img'
extracting super_empty.img (0 MB) to disk... took 0.000s
Rebooting into fastboot                            OKAY [  0.060s]
< waiting for any device >

 ※端末がリブート > もう一度リブート
  >fastbootd 画面になる
  >さらに、コマンドが流れる

Sending 'system_b' (4 KB)                          OKAY [  0.001s]
Updating super partition                           OKAY [  0.006s]
Deleting 'system_a'                                OKAY [  0.005s]
Deleting 'vendor_a'                                OKAY [  0.005s]
Resizing 'product_b'                               OKAY [  0.005s]
Resizing 'system_b'                                OKAY [  0.005s]
Resizing 'system_ext_b'                            OKAY [  0.006s]
Resizing 'vendor_b'                                OKAY [  0.006s]
archive does not contain 'boot_other.img'
archive does not contain 'odm.img'
extracting product.img (1871 MB) to disk... took 14.110s
archive does not contain 'product.sig'
Resizing 'product_b'                               OKAY [  0.006s]
Sending sparse 'product_b' 1/8 (262140 KB)         OKAY [  6.294s]
Writing 'product_b'                                OKAY [  2.634s]
Sending sparse 'product_b' 2/8 (262140 KB)         OKAY [  6.388s]
Writing 'product_b'                                OKAY [  1.599s]
Sending sparse 'product_b' 3/8 (262140 KB)         OKAY [  6.376s]
Writing 'product_b'                                OKAY [  1.598s]
Sending sparse 'product_b' 4/8 (262140 KB)         OKAY [  6.399s]
Writing 'product_b'                                OKAY [  1.648s]
Sending sparse 'product_b' 5/8 (262140 KB)         OKAY [  6.375s]
Writing 'product_b'                                OKAY [  1.612s]
Sending sparse 'product_b' 6/8 (262140 KB)         OKAY [  6.385s]
Writing 'product_b'                                OKAY [  1.625s]
Sending sparse 'product_b' 7/8 (262140 KB)         OKAY [  6.404s]
Writing 'product_b'                                OKAY [  1.586s]
Sending sparse 'product_b' 8/8 (81204 KB)          OKAY [  2.447s]
Writing 'product_b'                                OKAY [  0.579s]
extracting system.img (784 MB) to disk... took 4.331s
archive does not contain 'system.sig'
Resizing 'system_b'                                OKAY [  0.006s]
Sending sparse 'system_b' 1/4 (262140 KB)          OKAY [  6.089s]
Writing 'system_b'                                 OKAY [  2.647s]
Sending sparse 'system_b' 2/4 (262140 KB)          OKAY [  6.203s]
Writing 'system_b'                                 OKAY [  1.607s]
Sending sparse 'system_b' 3/4 (262140 KB)          OKAY [  6.149s]
Writing 'system_b'                                 OKAY [  1.631s]
Sending sparse 'system_b' 4/4 (16400 KB)           OKAY [  0.806s]
Writing 'system_b'                                 OKAY [  0.171s]
extracting system_ext.img (183 MB) to disk... took 0.944s
archive does not contain 'system_ext.sig'
Resizing 'system_ext_b'                            OKAY [  0.005s]
Sending 'system_ext_b' (187564 KB)                 OKAY [  4.167s]
Writing 'system_ext_b'                             OKAY [  2.209s]
extracting system_other.img (68 MB) to disk... took 0.385s
archive does not contain 'system.sig'
Sending 'system_a' (69880 KB)                      OKAY [  1.558s]
Writing 'system_a'                                 OKAY [  0.420s]
extracting vendor.img (408 MB) to disk... took 2.065s
archive does not contain 'vendor.sig'
Resizing 'vendor_b'                                OKAY [  0.005s]
Sending sparse 'vendor_b' 1/2 (262140 KB)          OKAY [  5.997s]
Writing 'vendor_b'                                 OKAY [  2.631s]
Sending sparse 'vendor_b' 2/2 (156584 KB)          OKAY [  3.825s]
Writing 'vendor_b'                                 OKAY [  1.022s]
archive does not contain 'vendor_dlkm.img'
archive does not contain 'vendor_other.img'
Finished. Total time: 162.157s

最後です。スマホでパッチしたboot.imgを書き込みます。

$ fastboot flash boot <以下パッチしたimgファイル>

 magisk_patched.img

実行例です。

$ fastboot flash boot ./magisk_patched.img 
Sending 'boot_b' (65536 KB)                        OKAY [  1.454s]
Writing 'boot_b'                                   OKAY [  0.392s]
Finished. Total time: 1.855s

ステップ10 スマホをリブートする

スマホの画面は、fastbootd になっていますので、「Reboot system now」が選択された状態で電源ボタンを押します。リブートは40秒くらいして、OSが起動しました。

ステップ11 確認

Magiskアプリは以下のようになっていれば、root化は成功しています。Termuxからrootパッケージを入れて、su すると許可画面が出るのでOKしておけば以下のようにスーパーユーザーの画面に出てきます。

逆にアプリから隠したい場合は、MagiskHideからアプリを選択しておきます。Termux側からの操作、例えばrootパッケージを入れてどうなったかなどは次回また紹介することにします。あと、OSの自動アップデートはOffにしておいてくださいね。ここ、めちゃ大事。開発者オプションから選択できます。

まとめ

今回、作業してみての感想やまとめは以下です。

・root化は久しぶりで事情がだいぶ変わっていた
・Magiskアプリはよくできている
・TWRPは、対応したらやってみる。たぶんUmidigiF2でやることになりそう
・日本語で、まとまっているサイトがなかった
・今年中にまたOSアップデートが来ると思うが、その時は状況みて導入するか考える

あとがき

ステップ9はわけるべきだったか迷いました。まぁ、流れは書き込みなのでいいかな?w で、root化すると、tcpdump も使い放題、他のアプリ領域のデータも見放題となり、随分いろいろと物色してしまいました。また、当初の目標だった、1024ポート以下のサービス起動も問題なくできていろいろできることが増えそうです。

 あと、termux-root-packagesを見ていると知らないアプリがあって興味津々です。たとえば、tincとかっていうVPNデーモン。これすごく使いやすそうです。

著者にメッセージ

コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

備忘録:Termuxで、Pixel3のUnixBench

じゃんくはっく
じゃんくはっく

Pixel3が来たんでUnixBenchとっておきます!

あ〜、ごみジャンクなPixel3が到着したのね!

ぴー
ぴー
じゃんくはっく
じゃんくはっく

・・・いちいち、ジャンク〜と言うのね!w

ごみ、よりいいでしょ?w

ぴー
ぴー

はい、ジャンクなPixel3が到着しました。メルカリは面白いですね。値下げ文化みたいなのがあって、売り手と買い手のせめぎ合いです。今回、自分はそういうのには参加せず、8500円まで値下げされていた状態で発見しました。さらに、買い手が7500円でどうか?と打診中に、8500円でゲットしたという感じです。ヤフオクはそういうのがないので、なんか新鮮に感じましたが、売り手は慣れないと「まーた、値下げかよ!」みたいな感じになるのかなと。Pixel3は発売価格9.5万円ですからね!

なぜ、今頃Pixel3なんかゲットしたの?

え〜っとw。目的は root化した状態の termux で遊びたかったからです。UmidigiF2はこのブログが動作しているので、あれこれできないのです。

で、どうせなら、Umidigi F2 よりも速そうで Androidリファレンス機のPixelシリーズが良いな! という感じです。Pixelという機種は、知らない人もいるかもしれませんが Google から発売されている機種で、AndroidOSの最新版が最初にリリースされます。つい最近も、Android11がリリースされましたよね!なので、いち早くandroidOSの最新にアップデートできます。

アプリ開発者とPixel

 アプリ開発者は、1年に1回9月ごろにAndroidOSのアップデートがあるので、情報調査など春頃から準備しています。9月には新しいOSが出るから、それにアプリを対応させるんです。これは慣例作業なので、大概アプリ開発やってる人や会社は、Pixelシリーズを持っています。iOSもこの時期にOSアップデートがあり、アプリ開発者は新年度〜秋にかけて大忙しです。iosとandroidの両方のアプリが扱っているので結構大変ですが、一番面白い時期でもあります。

 また、秋〜春にかけては新しいOSが実装した新機能にアプリをどう対応させるのか、またその機能を実装するのか?など様々な検討が繰り広げられています。つまり、1年中あれこれやることが嫌でもあるわけです。

まずはAntutu8 でベンチマーク

Antutuの情報はたくさんあるんですが、意図的にPixel3で OS10とOS11でベンチマークした結果はほぼ無いと思うので、載せておきます。なお、Antutuは何も意識しないと常駐するのでOS初期化後に入れて計測したら速攻、消したほうがいいです。そのうち、この指標も違うものがスタンダードになると思うのですが、今は antutuスコアがピンときますよね。

約、25マン〜27マンで今ではミドルクラスの上位というスコアです。計測の誤差なのか、少しAndroid11で計測したときの方が速くなっていますね。Kernel周りの影響か、チューニングを変えて来たのかそのあたりは不明です。

計測時のKernelバージョンは以下となります。

Termux入れて、設定

termuxを入れて、アプリが良い状態で動作するよう以下の設定をやっておきます。

・Wakelockを有効にしておく。

画面右の状態にしておきます。wakelockとは何か知りたい人は以下を参照してね。Termuxは、wakelockしておくか、しないか選択できるようになっています。

デバイスの起動状態を維持する

https://developer.android.com/training/scheduling/wakelock?hl=ja

・電池の最適化をしない 設定にしておく

この表現、紛らわしいですよね! つまり、標準ではシステム関連のプリイン・アプリの一部以外、つまりストアから入れたアプリは、最適化していて電池消費を抑える仕組みです。これを意図的に、「最適化しない」状態にしておきます。

UnixBenchiを計測!

結果から。どちらも1回限りの結果ですので計測誤差の範囲かと思います。

・Pixel3 Android10の場合
 CPU:Snapdragon 845
 Hardware : Qualcomm Technologies, Inc SDM845

シングル:546.9
8CPU:1396.4

・Pixel3 Android11の場合

シングル:520.0
8CPU:1343.3

・Pixel3 Android11 再計測

シングル:590.1
8CPU:1732.6

UmidigiF2や、Redmi Note 9S より速いですね。比較のため、スコアを載せておきます。

・UmidigiF2 Android10の場合
 CPU MediaTek Helio P70
 Hardware : MT6771V/CT

シングルCPU・・・スコア406.2
8CPU・・・・・・スコア1312.3

・Redmi Note 9S Android10の場合
 CPU:Qualcomm Snapdragon 720G
 Hardware : Qualcomm Technologies, Inc SM7125

シングルCPU・・・スコア571.9
8CPU・・・・・・スコア1127.1

詳細は以下に載せておきます。インストール方法は、以下参照してね。

衝撃価格7500円でゲットしたRedmi Note 9SにLinux入れてUnixBenchを計測

・Android10の場合

$ cat /proc/cpuinfo | head
Processor	: AArch64 Processor rev 13 (aarch64)
processor	: 0
BogoMIPS	: 38.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp
CPU implementer	: 0x51
CPU architecture: 8
CPU variant	: 0x7
CPU part	: 0x803
CPU revision	: 12

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: localhost: Android
   OS: Android -- 4.9.210-g28c696160049-ab6386370 -- #0 SMP PREEMPT Fri Apr 10 23:00:22 UTC 2020
   Machine: aarch64 (unknown)
   Language: en_US.utf8 (charmap=, collate=)
   13:25:54 up  1:07,  load average: 6.94, 6.06, 4.72; runlevel 

------------------------------------------------------------------------
Benchmark Run: Fri Oct 02 2020 13:25:54 - 13:54:01
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       29151129.2 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     6277.5 MWIPS (9.9 s, 7 samples)
Execl Throughput                                308.0 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        425891.2 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          167742.2 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1012005.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1057618.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  49668.9 lps   (10.0 s, 7 samples)
Process Creation                               1233.6 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1388.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    478.6 lpm   (60.1 s, 2 samples)
System Call Overhead                        1024417.8 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   29151129.2   2498.0
Double-Precision Whetstone                       55.0       6277.5   1141.4
Execl Throughput                                 43.0        308.0     71.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     425891.2   1075.5
File Copy 256 bufsize 500 maxblocks            1655.0     167742.2   1013.5
File Copy 4096 bufsize 8000 maxblocks          5800.0    1012005.2   1744.8
Pipe Throughput                               12440.0    1057618.2    850.2
Pipe-based Context Switching                   4000.0      49668.9    124.2
Process Creation                                126.0       1233.6     97.9
Shell Scripts (1 concurrent)                     42.4       1388.6    327.5
Shell Scripts (8 concurrent)                      6.0        478.6    797.7
System Call Overhead                          15000.0    1024417.8    682.9
                                                                   ========
System Benchmarks Index Score                                         546.9

------------------------------------------------------------------------
Benchmark Run: Fri Oct 02 2020 13:54:01 - 14:22:44
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables       91224897.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    23800.2 MWIPS (9.6 s, 7 samples)
Execl Throughput                               1057.6 lps   (29.6 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        401385.2 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          139250.6 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1389559.4 KBps  (30.0 s, 2 samples)
Pipe Throughput                             3891494.8 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 249526.0 lps   (10.0 s, 7 samples)
Process Creation                              11033.1 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   4638.3 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                    475.1 lpm   (60.7 s, 2 samples)
System Call Overhead                        3275443.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   91224897.9   7817.0
Double-Precision Whetstone                       55.0      23800.2   4327.3
Execl Throughput                                 43.0       1057.6    246.0
File Copy 1024 bufsize 2000 maxblocks          3960.0     401385.2   1013.6
File Copy 256 bufsize 500 maxblocks            1655.0     139250.6    841.4
File Copy 4096 bufsize 8000 maxblocks          5800.0    1389559.4   2395.8
Pipe Throughput                               12440.0    3891494.8   3128.2
Pipe-based Context Switching                   4000.0     249526.0    623.8
Process Creation                                126.0      11033.1    875.6
Shell Scripts (1 concurrent)                     42.4       4638.3   1093.9
Shell Scripts (8 concurrent)                      6.0        475.1    791.9
System Call Overhead                          15000.0    3275443.3   2183.6
                                                                   ========
System Benchmarks Index Score                                        1396.4

・Android11の場合

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: localhost: Android
   OS: Android -- 4.9.223-g5bded8e40b62-ab6647920 -- #0 SMP PREEMPT Thu Jul 2 03:22:48 UTC 2020
   Machine: aarch64 (unknown)
   Language: en_US.utf8 (charmap=, collate=)
   19:02:02 up 18 min,  load average: 2.42, 2.89, 2.08; runlevel 

------------------------------------------------------------------------
Benchmark Run: Fri Oct 02 2020 19:02:02 - 19:30:09
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       27896830.6 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     6039.7 MWIPS (10.0 s, 7 samples)
Execl Throughput                                281.0 lps   (29.6 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        401241.9 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          139431.4 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1020201.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                              826721.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  48668.2 lps   (10.0 s, 7 samples)
Process Creation                               1540.1 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1008.3 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    514.6 lpm   (60.1 s, 2 samples)
System Call Overhead                        1128058.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   27896830.6   2390.5
Double-Precision Whetstone                       55.0       6039.7   1098.1
Execl Throughput                                 43.0        281.0     65.4
File Copy 1024 bufsize 2000 maxblocks          3960.0     401241.9   1013.2
File Copy 256 bufsize 500 maxblocks            1655.0     139431.4    842.5
File Copy 4096 bufsize 8000 maxblocks          5800.0    1020201.2   1759.0
Pipe Throughput                               12440.0     826721.2    664.6
Pipe-based Context Switching                   4000.0      48668.2    121.7
Process Creation                                126.0       1540.1    122.2
Shell Scripts (1 concurrent)                     42.4       1008.3    237.8
Shell Scripts (8 concurrent)                      6.0        514.6    857.6
System Call Overhead                          15000.0    1128058.3    752.0
                                                                   ========
System Benchmarks Index Score                                         520.0

------------------------------------------------------------------------
Benchmark Run: Fri Oct 02 2020 19:30:09 - 19:58:33
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables       95077365.5 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    24278.9 MWIPS (10.0 s, 7 samples)
Execl Throughput                               1177.7 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        428589.2 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          124505.1 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1293287.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             3825103.0 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 299481.8 lps   (10.0 s, 7 samples)
Process Creation                              10720.9 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   3892.1 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                    386.7 lpm   (60.7 s, 2 samples)
System Call Overhead                        2499234.1 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   95077365.5   8147.2
Double-Precision Whetstone                       55.0      24278.9   4414.3
Execl Throughput                                 43.0       1177.7    273.9
File Copy 1024 bufsize 2000 maxblocks          3960.0     428589.2   1082.3
File Copy 256 bufsize 500 maxblocks            1655.0     124505.1    752.3
File Copy 4096 bufsize 8000 maxblocks          5800.0    1293287.0   2229.8
Pipe Throughput                               12440.0    3825103.0   3074.8
Pipe-based Context Switching                   4000.0     299481.8    748.7
Process Creation                                126.0      10720.9    850.9
Shell Scripts (1 concurrent)                     42.4       3892.1    917.9
Shell Scripts (8 concurrent)                      6.0        386.7    644.6
System Call Overhead                          15000.0    2499234.1   1666.2
                                                                   ========
System Benchmarks Index Score                                        1343.3

追記:10/07

再度、ベンチマーク測っていたらもっと良いスコアが出た。気温とか関係あるのかな? 室温24度でちょっと肌寒くなってきたときに計測したもの。

・Pixel3 Android11 再計測

シングル:590.1
8CPU:1732.6

この時、CPUのクロックは以下となっていました。6881と、1766400と、2803200

# cat /sys/devices/platform/soc/soc:qcom,mincpubw/devfreq/soc:qcom,mincpubw/cur_freq
6881
# cat  /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq
1766400
# cat  /sys/devices/system/cpu/cpufreq/policy/cpuinfo_cur_freq
policy0/ policy4/ 
# cat  /sys/devices/system/cpu/cpufreq/policy4/cpuinfo_cur_freq
2803200

平常時には、この値は以下。762と、748800と、825600

# cat /sys/devices/platform/soc/soc:qcom,mincpubw/devfreq/soc:qcom,mincpubw/cur_freq
762
# cat  /sys/devices/system/cpu/cpufreq/policy0/cpuinfo_cur_freq
748800
# cat  /sys/devices/system/cpu/cpufreq/policy4/cpuinfo_cur_freq
825600

これが、良い値が出た時です。計測誤差の範囲を超えているのでメモっておきます。冷蔵庫とか冷凍庫とかに入れて計測したらもう少しよくなるのかも。

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: localhost: Android
   OS: Android -- 4.9.223-g5bded8e40b62-ab6647920 -- #0 SMP PREEMPT Thu Jul 2 03:22:48 UTC 2020
   Machine: aarch64 (unknown)
   Language: en_US.utf8 (charmap=, collate=)
   05:38:19 up 2 days, 19:49,  load average: 0.50, 0.43, 0.44; runlevel 

------------------------------------------------------------------------
Benchmark Run: Wed Oct 07 2020 05:38:19 - 06:06:26
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       29316819.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     6350.0 MWIPS (10.0 s, 7 samples)
Execl Throughput                                364.2 lps   (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        442024.5 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          190751.4 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1076696.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1154520.1 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  56229.7 lps   (10.0 s, 7 samples)
Process Creation                               1221.6 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   1494.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                    519.6 lpm   (60.1 s, 2 samples)
System Call Overhead                        1181160.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   29316819.1   2512.2
Double-Precision Whetstone                       55.0       6350.0   1154.6
Execl Throughput                                 43.0        364.2     84.7
File Copy 1024 bufsize 2000 maxblocks          3960.0     442024.5   1116.2
File Copy 256 bufsize 500 maxblocks            1655.0     190751.4   1152.6
File Copy 4096 bufsize 8000 maxblocks          5800.0    1076696.0   1856.4
Pipe Throughput                               12440.0    1154520.1    928.1
Pipe-based Context Switching                   4000.0      56229.7    140.6
Process Creation                                126.0       1221.6     97.0
Shell Scripts (1 concurrent)                     42.4       1494.6    352.5
Shell Scripts (8 concurrent)                      6.0        519.6    866.0
System Call Overhead                          15000.0    1181160.9    787.4
                                                                   ========
System Benchmarks Index Score                                         590.1

------------------------------------------------------------------------
Benchmark Run: Wed Oct 07 2020 06:06:26 - 06:34:46
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables      117327891.2 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    31178.6 MWIPS (10.1 s, 7 samples)
Execl Throughput                               1466.5 lps   (29.8 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        667533.5 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          204691.5 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1852436.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                             5170382.3 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 181908.1 lps   (10.0 s, 7 samples)
Process Creation                              12532.5 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   5742.0 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                    734.3 lpm   (60.2 s, 2 samples)
System Call Overhead                        2722146.3 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0  117327891.2  10053.8
Double-Precision Whetstone                       55.0      31178.6   5668.8
Execl Throughput                                 43.0       1466.5    341.0
File Copy 1024 bufsize 2000 maxblocks          3960.0     667533.5   1685.7
File Copy 256 bufsize 500 maxblocks            1655.0     204691.5   1236.8
File Copy 4096 bufsize 8000 maxblocks          5800.0    1852436.2   3193.9
Pipe Throughput                               12440.0    5170382.3   4156.3
Pipe-based Context Switching                   4000.0     181908.1    454.8
Process Creation                                126.0      12532.5    994.6
Shell Scripts (1 concurrent)                     42.4       5742.0   1354.2
Shell Scripts (8 concurrent)                      6.0        734.3   1223.8
System Call Overhead                          15000.0    2722146.3   1814.8
                                                                   ========
System Benchmarks Index Score                                        1732.6

まとめ

まとめるほどの記事ではないですが、要点を書いておきます。

・Pixel3は、シングル約550、マルチ8coreで1400くらいのUnixBenchスコア
・手持ちのスマホの中では一番速い
・antutuは、27マンくらいだが、GPUは使わないのでTermuxではもったいない
・今後、root化してtermuxで遊んでみようと思う
・再計測したら、1700超えていた。温度が関係しているくさい。

あとがき

あともう少しで、1400に届きそうでしたが2年前のハイエンドクラスなので検討していますよね。UnixBenchの結果にはグラフィックス性能が含まれないので、UmidigiF2や、Redmi Note 9S と比べてもさほど変わらない感じですね。

 安くて、CPU性能が高いのはいろいろ検討した結果、MediaTek Dimensity 1000+ がいいんじゃないかなーと。このチップは、vivo iqoo z1とかに乗っていて antutuは、CPUで18万、トータルで50万を超えています。

 これ、Termux上のUnixBenchだと2500は超えてきそうですよね!いつか、入手して確認してみたいなと思います。中古ではあまり出回っていないので、画面割れとかジャンクが出るまでは無理ですが。アリエクから新品で買っても3.4万くらいなんでさほど高くはないです。しかし遊びどきは、5Gが普及するあと1、2年後〜が中古市場に出回る時期かなと思います。

別の見方をすれば、あと1、2年すればUnixBench2000〜3000で動作するスマホが、5000円とか1万未満の中古で買えちゃうってことです!

 ARMチップが乗ったスマホの活用の夢が膨らみます!

あと、画面割れのPixel3ですがもし画面を修理するならアリエクで9500円くらいで部品は入りそうです。まぁ、しかしそれほどひどい割れでもないですから、このまま使うかなと。なんか、直したら負けな気がします。w

Termuxからメールを送れるようにするには?

じゃんくはっく
じゃんくはっく

コマンドラインからメールを送れるようにしたいね!

え?メール送れないの?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

今のところはね。よさげなアプリを物色中〜!

てか、最近Lineばっかりでメールあんまりしてないな。

ぴー
ぴー

さて、今回はメールを取り扱います。ですが、別にメールサーバを作るわけではないです。やりたい事は、こんな感じ。

・コマンドラインからメールを送れるようにしたい
・WordPressのプラグインからメールを送れるにしたい
・Cronとかの結果をメールできるようにしたい
・配送先はgmail!

Termux環境でお手軽にメールを送るには?

メールを取り扱うってことは、いろいろ用意する必要がありますが、今回はメールを他のサーバに送るだけです。Termuxでメールを受信したり、imapのメールを読み書きして送受信したり、あるいは他のサーバからリレーしたりということは今回はしません。内部配送もtermux は1ユーザしかいないのでしません。このあたり、MTAとかMUAとかMDAとか用語がありますが、興味のあるかたはここがわかりやすいです。

メール転送エージェント (MTA)

https://wa3.i-3-i.info/word11120.html

そんなこたぁーわかっとる! っていうベテランも改めてどうぞw

メール設定で最初につまずく『SMTP』『POP』『IMAP』 その意味&設定方法は?

https://time-space.kddi.com/ict-keywords/kaisetsu/20170824/2081

つまりは、SMTPクライアントだけあればいいんです。

お手軽なSMTPクライアント!msmtp

一般的なLinuxなら、postfixとかsendmailとかありますよね。でもTermuxのバイナリにはありません。でも、SMTPクライアントならあります。

msmtp

https://marlam.de/msmtp/

これ、実は今まで知りませんでした! 一応、メールサーバ関連はsendmailや、qmailや、postfixはさわった事があるのですが msmtpってのは取り扱う機会もなくて、こんなのがあったのかという印象です。機能は、こんな感じ!

  • Sendmail互換インターフェイス(コマンドラインオプションと終了コード)
  • 複数のアカウントのサポート
  • クライアント証明書を含むTLS / SSLサポート
  • 国際化ドメイン名(IDN)のサポート
  • 多くの認証方法
  • コマンドパイプラインを使用した高速SMTP実装
  • DSN(配信ステータス通知)のサポート
  • SOCKSプロキシサポート

ステップ1 とにかく入れてみる!

まずは、使ってみましょう。インストールは簡単です。

$ pkg install msmtp

このあたりに入るようです。

$ find $PREFIX -name *msmtp*
/data/data/com.termux/files/usr/bin/msmtpd
/data/data/com.termux/files/usr/bin/msmtp
/data/data/com.termux/files/usr/var/lib/dpkg/info/msmtp.list
/data/data/com.termux/files/usr/var/lib/dpkg/info/msmtp.md5sums
/data/data/com.termux/files/usr/share/doc/msmtp
/data/data/com.termux/files/usr/share/info/msmtp.info
/data/data/com.termux/files/usr/share/man/man1/msmtp.1.gz
/data/data/com.termux/files/usr/share/man/man1/msmtpd.1.gz

ステップ2 設定

ここの説明がわかりやすかったです。参考にしました。

msmtp – ArchWiki

https://wiki.archlinux.jp/index.php/Msmtp

つまりは、以下の設定ファイルを書けばOKです。システム全体は etc 配下に書きますが、今回はホームディレクトリ直下です。gmailのsmtpを使います。

~/.msmtprc
------------------
# Set default values for all following accounts.
defaults
auth           on
tls            on
tls_trust_file /data/data/com.termux/files/usr/etc/tls/cert.pem
logfile        ~/.msmtp.log

# Gmail
account        gmail
host           smtp.gmail.com
port           587
from           username@gmail.com
user           username
password       plain-text-password

# Set a default account
account default : gmail

デフォルトのCA証明書は、opensslがどっかに持っていると思い、どこにあるかわからなかったので以下のように調べました。直接ダウンロードしてどこかに保存しておいても良いのですが。

$ which openssl
/data/data/com.termux/files/usr/bin/openssl
$ ldd /data/data/com.termux/files/usr/bin/openssl
libssl.so.1.1
libcrypto.so.1.1
libc.so

$ find $PREFIX -name libcrypto.so
/data/data/com.termux/files/usr/lib/libcrypto.so
$ ls -l /data/data/com.termux/files/usr/lib/libcrypto.so
lrwxrwxrwx 1 u0_a364 u0_a364 18 Sep 30 05:12 /data/data/com.termux/files/usr/lib/libcrypto.so -> libcrypto.so.1.1

$ cd $PREFIX/lib
$ strings libssl.so | grep -P '^/\w+/'
/data/data/com.termux/files/usr/lib

$ strings libcrypto.so | grep -P '^/\w+/'
/data/data/com.termux/files/usr/lib
/data/data/com.termux/files/usr/etc/tls/ct_log_list.cnf
/data/data/com.termux/files/usr/lib/engines-1.1
/dev/urandom
/dev/random
/dev/hwrng
/dev/srandom
/dev/tty
/data/data/com.termux/files/usr/etc/tls/private
/data/data/com.termux/files/usr/etc/tls
/data/data/com.termux/files/usr/etc/tls/certs
/data/data/com.termux/files/usr/etc/tls/cert.pem

$ tree -N /data/data/com.termux/files/usr/etc/tls
/data/data/com.termux/files/usr/etc/tls
 ├── cert.pem
 └── openssl.cnf

今回必須ではないですが、このサーバのIPをSPFテキストレコードに追加しておきました。MTAをビルドしてテストするかもしれません。この機会に書いておきます。

$ dig -t txt gpl.jp
::
;; ANSWER SECTION:
gpl.jp.			3599	IN	TXT	"v=spf1 +ip4:124.41.83.243 +ip4:106.185.159.254 +ip4:116.58.181.140 +a:www.gpl.jp +a:mail.gpl.jp include:aspmx.googlemail.com include:_spf.google.com ~all"

ステップ3 送信テスト

とりあえず、送信テストです。

$ msmtp -t
To: who@example.jp
Subject: Hello World.

Hi.
これはテストメールです。

認証でエラーが出る場合は、Gmailの以下を確認してみてください。

安全性の低いアプリのアクセス

https://myaccount.google.com/lesssecureapps

これをOnにすれば、認証に通りメール送信できます。ちゃんと届いていました!gmailはUTF-8でも文字化けしませんね。

SPFもパスしていて、問題ないようでした。

DKIMは、googleのやつです。

ステップ4 コマンドラインでメール!

当初やりたかったことの1つです。コマンドラインの結果などをメールしたかったんです。例えば、lsの結果をメールしておきたい場合とか、

$ ls -l /system/etc | msmtp junkhack@gpl.jp

topの結果を送っておきたいとか、

$ top -b -d 1 -n 30 | msmtp junkhack@gpl.jp

なにかの設定ファイルを送っておきたいとか、

$ cat php-fpm.conf | msmtp junkhack@gpl.jp

こんな感じです。題名のないメールですが送れます。同じようにcrontab にもパイプしておけばメールが飛んできます。cronをシステムワイドに設定する方法は詳細を省きますが、いろいろ試してうまく行きませんでした。

ステップ5 PHP でメールを送信

自作のメールフォームを作ることはないかもしれませんが、PHPの設定をしておくと何かと便利かなと。php.ini に以下を記載。termux のphp.ini は自分で作成です。

パスは、/data/data/com.termux/files/usr/lib/php.ini

[mail function]
sendmail_path = "/data/data/com.termux/files/usr/bin/msmtp -C /data/data/com.termux/files/home/.msmtprc -t"

php-fpm を再起動して、テスト用のphpで確認しておきます。

<?php
     mail("hoge@example.jp", "Test email from PHP", "msmtp as sendmail for PHP");
?>

ブラウザーから、このPHPを叩くとメールが送られるはずです。届いたメールヘッダーは、SPFもDKIMもPASSです。

他、以下のサンプルコード(mb_send_mail関数)とかも問題なく動作します。

誰でも実装できる!PHPでメール送信を行う方法【初心者向け】

https://techacademy.jp/magazine/11629

ステップ6 WordPress でメールを送信

WordPressのプラグインからメールするっていうことはPHPの設定をそのまま引き継ぐと思っていたのですが、実際にやってみるとWordPressは、PHPMailerを使って、直接MXへ配送しているようです。

PHPMailer 6.1.6 (https://github.com/PHPMailer/PHPMailer) 

なので、php.ini のsendmail_pathを使った配送にはならないのがデフォルトの挙動のようです。ヘッダーには、SPFもDKIMもありません。これだと、迷惑メールフォルダに分類されてしまいます。

なので、WP Mail SMTPプラグインを使った方法でやっておきます。これは、SMTPクライアントの機能を持っています。つまりは、msmtpと同じようなことができます。この辺りはいくらでも情報があるので省略です。

まとめ

今回、なんとなくわかったのは以下となります。

・msmtpは、お手軽でスマホで作るサーバにはぴったりのSMTPクライアント
・gmailにTLSで送れる
・コマンドラインからパイプでメールが送れるようになった
・cron にも、パイプしておけばメールは飛んでくる
・php.ini のsendmail_path にmsmtpを指定しておけばPHPプログラムのmail関数から配送可能
・しかし、WordPressは、PHPMailerを使って直接MXへ配送しているようだ
・なので、とりあえずWP Mail SMTPプラグインを使う
・直接、WordPressからphp.ini のsendmail_path に配送するにはどうしたらいいだろう?
・機会があれば、wp_mail()を上書きするプラグインを作ってみる

あとがき

とりあえず、やりたいことはほぼ満たせました。msmtpは、スマホで動作するTermux環境にぴったりですね。ただ、配送に失敗した場合などキューにたまらない設計だと思いますので、そのあたりいろいろ考えると面倒です。が、今回は割り切って使うことにします。

著者にメッセージ

コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

備忘録:Termuxで、 HUAWEI P20 liteのUnixBench

じゃんくはっく
じゃんくはっく

ちょっと備忘録、書いておきます!

メモ的なものをブログに書くの?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

あとで検索して参照できるようにね。それに書いておけば誰かの役に立つかも。

あ〜、それはあるかもね。

ぴー
ぴー

ちょっと、手持ちのスマホでTermux入れてUnixBenchを取っておきました。今回は、HUAWEI P20 liteです。

スコアは?

結果から。

シングル:260.3
マルチ:932.8

詳細は以下。インストール方法は、以下参照してね。

衝撃価格7500円でゲットしたRedmi Note 9SにLinux入れてUnixBenchを計測

$ uname -a
Linux localhost 4.9.148 #1 SMP PREEMPT Wed Jul 1 02:47:50 CST 2020 aarch64 Android
::
$ cat /proc/cpuinfo
Processor	: AArch64 Processor rev 4 (aarch64)
processor	: 0
BogoMIPS	: 3.84
Features	: fp asimd evtstrm aes pmull crc32
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4
::
========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: localhost: Android
   OS: Android -- 4.9.148 -- #1 SMP PREEMPT Wed Jul 1 02:47:50 CST 2020
   Machine: aarch64 (unknown)
   Language: en_US.utf8 (charmap=, collate=)
   16:18:43 up 10 days, 23:58,  load average: 38.42, 38.42, 38.81; runlevel 

------------------------------------------------------------------------
Benchmark Run: Mon Sep 28 2020 16:18:43 - 16:46:46
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables        8363204.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2047.9 MWIPS (9.8 s, 7 samples)
Execl Throughput                                128.2 lps   (29.8 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        167326.5 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           50941.4 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        451669.2 KBps  (30.0 s, 2 samples)
Pipe Throughput                              317299.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  59343.3 lps   (10.0 s, 7 samples)
Process Creation                               1418.5 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                    762.5 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                    305.9 lpm   (60.1 s, 2 samples)
System Call Overhead                         460331.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    8363204.1    716.6
Double-Precision Whetstone                       55.0       2047.9    372.4
Execl Throughput                                 43.0        128.2     29.8
File Copy 1024 bufsize 2000 maxblocks          3960.0     167326.5    422.5
File Copy 256 bufsize 500 maxblocks            1655.0      50941.4    307.8
File Copy 4096 bufsize 8000 maxblocks          5800.0     451669.2    778.7
Pipe Throughput                               12440.0     317299.2    255.1
Pipe-based Context Switching                   4000.0      59343.3    148.4
Process Creation                                126.0       1418.5    112.6
Shell Scripts (1 concurrent)                     42.4        762.5    179.8
Shell Scripts (8 concurrent)                      6.0        305.9    509.8
System Call Overhead                          15000.0     460331.9    306.9
                                                                   ========
System Benchmarks Index Score                                         260.3

------------------------------------------------------------------------
Benchmark Run: Mon Sep 28 2020 16:46:46 - 17:14:54
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables       64563351.9 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    15851.2 MWIPS (9.8 s, 7 samples)
Execl Throughput                                689.2 lps   (29.7 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        285983.5 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           80097.8 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        758680.0 KBps  (30.0 s, 2 samples)
Pipe Throughput                             2020594.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 427478.4 lps   (10.0 s, 7 samples)
Process Creation                               4981.4 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   2721.2 lpm   (60.1 s, 2 samples)
Shell Scripts (8 concurrent)                    326.6 lpm   (60.4 s, 2 samples)
System Call Overhead                        2323008.0 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   64563351.9   5532.4
Double-Precision Whetstone                       55.0      15851.2   2882.0
Execl Throughput                                 43.0        689.2    160.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     285983.5    722.2
File Copy 256 bufsize 500 maxblocks            1655.0      80097.8    484.0
File Copy 4096 bufsize 8000 maxblocks          5800.0     758680.0   1308.1
Pipe Throughput                               12440.0    2020594.4   1624.3
Pipe-based Context Switching                   4000.0     427478.4   1068.7
Process Creation                                126.0       4981.4    395.4
Shell Scripts (1 concurrent)                     42.4       2721.2    641.8
Shell Scripts (8 concurrent)                      6.0        326.6    544.3
System Call Overhead                          15000.0    2323008.0   1548.7
                                                                   ========
System Benchmarks Index Score                                         932.8

あとがき

結局CPU性能しか使わないから、CPU性能だけ高いスマホって他、何かないですかねー。1500-2000くらい出るやつでお手頃のがあればいいんだけど。電力ほとんど使わないから、結構使い勝手はあると思うんですよね。

あと、HUAWEIはブートローダーのロックが無料で外せないようになったから今後、買うことはないかなー。結構ファンだったんですが。

Termuxネイティブ環境でWordPressのバックアップをどうするか考える。その3

じゃんくはっく
じゃんくはっく

上書き保存して版数管理のバックアップができました!

あ〜!あのせこい作戦工夫した方法できたの?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

はい!できました〜。

私も参考にするから、わかりやすくよろしくね。

ぴー
ぴー

ということで、今回は完結編です。わかりやすくはできないかもですが、要点を記録しておきますね。

バックアップスクリプトはプラグインで

BackWPup – WordPress Backup Plugin

https://ja.wordpress.org/plugins/backwpup/

結局、DBのバックアップスクリプトやファイルの指定などシェルで書かずにワードプレスの↑のプラグインでやることにしました。BackWPupの操作方法はググって貰えばわかると思うので、省きますが以下のように7つのジョブをつくることにしました。

BackWPupは、ジョブをwp-cliで叩けるようになっています。そして、それをcronで定期実行するという方法です。wp-cliでは、以下のようにコマンド叩くと、ジョブIDがわかります。

$ wp backwpup jobs
+--------+--------------------+
| Job ID | Name               |
+--------+--------------------+
| 1      | hackgpljp_db       |DBのバックアップ
| 2      | hackgpljp_uploads  |uploadsの必要なものだけ
| 3      | hackgpljp_etc      |Termuxのetc配下の設定ファイル
| 4      | hackgpljp_themes   |テーマファイル
| 5      | hackgpljp_plugins  |プラグイン全部
| 6      | hackgpljp_wpconfig |WordPressの設定関連
| 7      | hackgpljp_log      |Termuxのログ全部
+--------+--------------------+

これらのジョブを実行すると、指定したバックアップディレクトリに圧縮されて保存されます。

スクリプトは最低限

プラグインでバックアップしたファイル名にはハッシュ文字列が付いています。このハッシュ文字列は、プラグイン中の設定で消すことができなかったので、スクリプトでファイル名を固定します。rcloneでGoogleDriveに同期したときに上書きされるようにして版数が作られるようにするためです。以下のようなファイルツリーを目指します。

├── hackgpljp_db.zip
├── hackgpljp_etc.zip
├── hackgpljp_log.zip
├── hackgpljp_plugins.zip
├── hackgpljp_themes.zip
├── hackgpljp_uploads.zip
├── hackgpljp_wpconfig.zip
├── log
│   └── backwpup_log.html.gz
└── php.ini

手抜きですが、以下のようなスクリプトができました。

#!/bin/bash
PATH=$PATH:/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/home/bin

#バックアップ先
BACKUP_PATH="/backup/dir/path"
LOG_PATH="/backup/dir/path/log"

# GoogleDrive のrcloneドライブ名
DRIVENAME=01bup
# GoogleDrive の保存ディレクトリ
CPATH=hackgpljp

mv  $BACKUP_PATH/hackgpljp_db_* $BACKUP_PATH/hackgpljp_db.zip
mv  $BACKUP_PATH/hackgpljp_etc_* $BACKUP_PATH/hackgpljp_etc.zip
mv  $BACKUP_PATH/hackgpljp_log_* $BACKUP_PATH/hackgpljp_log.zip
mv  $BACKUP_PATH/hackgpljp_plugins_* $BACKUP_PATH/hackgpljp_plugins.zip
mv  $BACKUP_PATH/hackgpljp_themes_* $BACKUP_PATH/hackgpljp_themes.zip
mv  $BACKUP_PATH/hackgpljp_uploads_* $BACKUP_PATH/hackgpljp_uploads.zip
mv  $BACKUP_PATH/hackgpljp_wpconfig_* $BACKUP_PATH/hackgpljp_wpconfig.zip
cp -p /data/data/com.termux/files/usr/lib/php.ini $BACKUP_PATH/php.ini
mv $LOG_PATH/backwpup_log_* $LOG_PATH/backwpup_log.html.gz

tree -N $BACKUP_PATH
echo ''
echo "rclone sync start : "  `date +'%H:%M:%S.%3N'`
rclone sync $BACKUP_PATH/ $DRIVENAME:$CPATH
echo "rclone sync end   : "  `date +'%H:%M:%S.%3N'`

cronで定期実行

termuxはcronもちゃんと動くようです。一番、ネットワークが空いている時間帯に動作させます。まず、WordPressのバックアップジョブを動作させ、一番最後の4:00から動くのは、先ほどのスクリプトです。

# hackgpljp_db
30 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 1 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_etc
31 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 3 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_themes
31 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 4 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_plugins 5m
32 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 5 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_wpconfig
37 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 6 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_uploads maybe 10m
38 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 2 --path=/data/data/com.termux/files/home/htdocs_nginx/
# hackgpljp_log
48 03 * * * /data/data/com.termux/files/usr/bin/wp backwpup start 7 --path=/data/data/com.termux/files/home/htdocs_nginx/
##
## Sync Google Drive
##
00 04 * * * /data/data/com.termux/files/home/backup/0_bup_to_googledrive.sh

一応、テストはしてきます。ちなみに、このファイルツリー・約1.1GBのファイルをsyncするのにかかった時間は、約2分10秒でした。

rclone sync start :  19:48:41.010
rclone sync end   :  19:50:52.552

GoogleDrive側は?

ちゃんと上書きされて、版ができるか確認しておきます。

土曜日にテストしていたのですが、日・月とちゃんと動作しているようですね! この画像はuploadsの画像フォルダのバックアップですが圧縮しても1GBはあります。現行版を含めて4つファイルはあり、普通にバックアップしていれば4GBになりますが、ディスク消費は1.1GBです。

版を消さないようにすると、

保存容量にカウントされるようです。(リロード後、容量は変わります)

なるほど、「この履歴を削除しない」は必要な時だけ使うようにします。

まとめ

今後の課題も見つかりましたのでまとめにメモをしておきます。

・GoogleDriveの版は、保存容量を消費しない。
・しかし、「この履歴を削除しない」とすると消費される
・cronのメールはsendmailが動作してないので、飛んでこない
・sendmailの代わりに、msmtpが良さそうかも。
・版は100個まで保存されるが、過去30日で消えるそうなので実質、30日前までは戻せる。(たぶん)

あとがき

termuxで、cronのメールを飛んでくるようにするには、sendmail相当の何かを入れる必要があります。定番は、msmtpということのようです。

稼働率・SLA99.95%をスマホ自宅サーバで目指せ!まずは1ヶ月間

じゃんくはっく
じゃんくはっく

SLAって知ってる?

聞いたことはあるけど、品質の合意だっけ?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

そうそう!稼働率のSLA99.95%とかって意味でよく使われてるよね。99.95%稼働してるってことは1ヶ月で約21分はダウンしたってこと。

それを自宅サーバでがんばってみるのね!

ぴー
ぴー

目標を持つのは、大事だよなということで、せっかく自宅サーバを運用しているので遊び感覚で、稼働率SLA99.95%を目指してみることにします。今、検討しているsite24x7のサービスは、この稼働率を算出する仕組みもあるようです。

SLA99.95%とはどのくらいダウンが許されるのか?

稼働率 => 月間ダウンタイム計算ツール

https://cloned.jp/sla-calc/

こんな便利な計算サイトがありました。ここで計算してみると、99.95%とは1ヶ月に21.6分以内であればOKということです。年間だと、262.8分(4.4時間)以内であればOK。

じゃんくはっく
じゃんくはっく

少ないような多いような、う〜ん。あまり体感できないね!

1ヶ月に21.6分しか休憩できないって思うとぞっとするわ!

相当なブラック企業よ!

ぴー
ぴー
じゃんくはっく
じゃんくはっく

・・・なんか、すごく大変な気がしてきた!w

site24x7で、SLA設定をしてみる!

現在、検討中の監視サービス・site24x7は、目標のSLAを設定できます。世界各地の拠点、8箇所から1分間隔で監視しています。そこから算出してくれる大変、便利な機能です。設定は、管理>SLA設定 から行えます。

営業時間は設定していませんので、24時間が対象ということです。

現在の稼働率はどのくらい?

まだ、9/20から始めたので1ヶ月は経過していませんが現状は以下の通りです。

9/21と23日に停止時間があり、落ちていた時間は8分40秒ということです。現在は、99.852%の稼働率ということがわかりました。

評価期間・1ヶ月でSLAをチャレンジ!

良い目標ができたので、とりあえず1ヶ月後の10/20にSLA目標が達成できるかチャレンジしてみようと思います。今のところ、8分40秒ダウンしていますので、あと猶予は約12分間です。あと25日間で12分ダウンさせなければSLA99.95%を達成できます。

 うーん、こうして計算してみると結構大変な気がします。まず、1台のスマホサーバでやっているのでダウンしたら12分なんてあっという間でしょう。あと寝ている時間とかに、ダウンしたら終わりですね。年間を通じて、99.95%を維持しようとするなら、ロードバランサーや複数台構成が必須だと思います。停電っていうのもありますしね。スマホ自体は電池があるから無停電電源装置がついているようなものですが、ルータ周りやHUBなど対応する必要がありそうです。

やるしかないでしょ!期待してるわよ。

ぴー
ぴー

まとめ

だいぶ煽られていますがまとめます。今回、なんとなくわかったのは以下ですね。

・稼働率SLA99.95%とは1ヶ月に21.6分以内であればOK
・1年なら、262.8分(4.4時間)以内であればOK
・監視サービス・site24x7は、サイトを客観的に見るために有用だ
・監視サービス・site24x7(有料版)は、SLA目標を設定できレポートが作れる

あとがき

こうして自分で体験してみると結構大変そうだなって思いました。また1ヶ月後に具体的な数字が出るのでそこで、何かまた発見があるかもしれません。

余談ですが、世界各地8箇所から応答時間をモニタリングしていますが、なんと国内からよりもロサンゼルスからが一番品質が良いようです。

東京など国内は、ロスからのように平坦ではないです。今、InterLinkのPPoEのIP固定使っています。国内のほうが速いだろうと思っていましたがこれは以外な発見でした。site24x7のサービス、すごく良いと思います。