Rasbian の rc_gui の日本語訳をしてみる

https://www.flickr.com/photos/119142834@N05/22961495820/in/dateposted-public/
https://www.flickr.com/photos/119142834@N05/23257335535/in/dateposted-public/
https://www.flickr.com/photos/119142834@N05/23231207776/in/dateposted-public/
https://www.flickr.com/photos/119142834@N05/22630222323/in/dateposted-public/

Raspberry Pi の OS の一つの Rasbian に jessie から Raspberry Pi 設定ツールの GUI 版が登場しました.パッケージ名は rc-gui で,実行ファイルは /usr/bin/rc_gui です.
( ちょうど先日の鹿児島Linux 勉強会向けに作ったスライドに説明が少しあるので興味のある方はどうぞ.-> 勉強会向けサーバを作ってみる2 / Rasbian jessieを試す/ Google Authenticatorのパスコードを作る )

Raspberry Pi 固有の設定を行うのにほぼ必須のツールなので日本語化されると嬉しい人が多そうな気がしたので翻訳して本家?に投げてみました.(文章量少なかったし)すると取り込まれたようなので記録を残しておきます.

翻訳の手順は,@okano_tさんの以下の文章などが解りやすいと思います.今回は主に poEdit 上で翻訳を行いました.

動作確認が楽なので作業は Rasbian jessie 上で行いました.翻訳に必要なパッケージを導入し,source を入手,poEdit で翻訳して動作確認,GitHub に push して pull request を投げるという感じです.

  • パッケージの導入
$ sudo apt update && sudo apt upgrade
$ sudo apt install gettext git
  • source の入手
$ git clone https://github.com/raspberrypi/rc_gui.git
  • poEdit で翻訳
    poEdit を開き,「翻訳プロジェクトを新規作成する」から clone した中の rc_gyui/po/en_GB.po を開きます.翻訳の言語に「日本語 (日本)」を選び翻訳していきます.
    保存を行うと ja_JP.po として保存され,同時に ja_JP.mo が作成されます.

  • 動作確認
    ja_JP.mo をシステムにコピーして rc_gui を実行して動作確認します.

$ sudo cp ja_JP.mo /usr/share/locale/ja/LC_MESSAGES/rc_gui.mo
$ LANG=ja_JP.UTF8 rc_gui

一通り訳したら GitHub で pull request を投げました.

とりあえず試してみる1

リリースサイクルなどがわからないのでいつこの翻訳が取り込まれるかわからないのですが,以下のような手順で翻訳を反映させることが可能です.
必要なパッケージの導入,po ファイルを mo ファイルに変換,システムに反映.

$ sudo apt install gettext git
$ git clone --depth 1 https://github.com/raspberrypi/rc_gui.git
$ cd rc_gui/po
$ msgfmt ja_JP.po -o ja_JP.mo
$ sudo cp ja_JP.mo /usr/share/locale/ja/LC_MESSAGES/rc_gui.mo

とりあえず試してみる2

以下に今の時点での ja_JP.mo を GitHub に置いたのでとりあえず以下のような感じで試せると思います.(こちらは更新するつもりはないのでどんどん古くなるはずです)

$ sudo sh -c 'wget https://raw.githubusercontent.com/matoken/matoken.github.com/master/blog/20151124-rc_gui-translation/ja_JP.mo -O /usr/share/locale/ja/LC_MESSAGES/rc_gui.mo'

追記)
パッケージ情報を確認すると,違うURL が出てきました.もしかしたら違うところで作業をしてしまった?

$ apt show rc-gui|grep Homepage
 
Homepage: https://github.com/RPi-Distro/rc_gui

複数パーティーション情報を含むディスクイメージの作成からフォーマット,マウントまでのメモ

SD card などの実デバイスで作成して dd で書き出すという方法もありますが遅いし面倒なのでちょっと調べてみました.
以下は debian-jessie-raspberrypi.img というイメージファイルを 500MB の容量で作成し,fat と ext4 の2つのファイルシステムを作ってマウントするまでのメモです.

イメージの作成

% ionice -c 2 -n 0 dd if=/dev/zero of=./debian-jessie-raspberrypi.img bs=1M count=500

パーテションの作成(ここでは1つ目のプライマリパーティションに32Mのfat領域を,2つ目のプライマリパーティションに残り全ての容量でlinux領域を作成)

% /sbin/fdisk  ./debian-jessie-raspberrypi.img
 
Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
 
 
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-1023999, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-1023999, default 1023999): +32M
 
Created a new partition 1 of type 'Linux' and of size 32 MiB.
 
Command (m for help): t
Selected partition 1
Partition type (type L to list all types): e
Changed type of partition 'Linux' to 'W95 FAT16 (LBA)'.
 
Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2):
First sector (67584-1023999, default 67584):
Last sector, +sectors or +size{K,M,G,T,P} (67584-1023999, default 1023999):
 
Created a new partition 2 of type 'Linux' and of size 467 MiB.
 
Command (m for help): p
Disk ./debian-jessie-raspberrypi.img: 500 MiB, 524288000 bytes, 1024000 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
 
Device                           Boot Start     End Sectors  Size Id Type
./debian-jessie-raspberrypi.img1       2048   67583   65536   32M  e W95 FAT16 (LBA)
./debian-jessie-raspberrypi.img2      67584 1023999  956416  467M 83 Linux
 
Command (m for help): w
The partition table has been altered.
Syncing disks.
 

現在利用している loop デバイスを確認

% /sbin/losetup
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         1  1 /home/mk/Downloads/db410c_sd_install_ubuntu.img
/dev/loop1         0      0         0  1 /ubuntu/rootfs_1.img
/dev/loop2         0      0         0  1 /ubuntu/rootfs_2.img

オフセットを指定して loop デバイスに接続(上で確認したデバイスを避ける,オフセットはfdisk で確認できる開始セクタ /sbin/fdisk -l -u ./debian-jessie-raspberrypi.img で確認できる )

% sudo losetup -o2048 /dev/loop4 ./debian-jessie-raspberrypi.img
% sudo losetup -o67584 /dev/loop5 ./debian-jessie-raspberrypi.img

フォーマット

% sudo mkfs.fat /dev/loop4
mkfs.fat 3.0.28 (2015-05-16)
Loop device does not match a floppy size, using default hd params
% sudo mkfs.ext4 /dev/loop5
mke2fs 1.42.13 (17-May-2015)
Discarding device blocks: done
Creating filesystem with 511932 1k blocks and 128016 inodes
Filesystem UUID: b4d1c469-c057-4839-b412-86486f586d9b
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
 
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
 

マウント

% sudo mount /dev/loop4 ./mnt/boot
% sudo mount /dev/loop5 ./mnt/rootfs
% mount |grep /dev/loop
/dev/loop4 on /var/tmp/debian_pi/mnt/boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=utf8,shortname=mixed,errors=remount-ro)
/dev/loop5 on /var/tmp/debian_pi/mnt/rootfs type ext4 (rw,relatime,data=ordered)

アンマウントと loop デバイスの切断

% sudo umount /dev/loop4 /dev/loop5
% sudo losetup -d /dev/loop4 /dev/loop5

Dragonboard 410c の購入メモ

<追記>
20151125にchip1stopからメールが届きました.出荷予定日が11/30から12/14になったそうです.それと EIAJ-3 で 24W な Dragonboard 410c に適合するACアダプタと,2.1mm から EIAJ-3 への変換プラグの取り扱いも始めたそうです.
TW-12020U TWシリーズ アイコー電子 アイコ― あいこー | パワーサプライ | ACアダプタ | AIKOH ELECTRONICS – チップワンストップ 電子部品半導体通販サイト
SSCI-025461 Speed United Electronics | パワーサプライ | 電源用アクセサリ | Speed United Electronics – チップワンストップ 電子部品半導体通販サイト
出荷が伸びたのは悲しいですが,ACアダプタと変換プラグは安いし良いのではないでしょうか.案内メールには注文後一括配送設定をすれば送料は掛からないとなっていますがうまく行きませんでした.これは問い合わせてみています…….(一括配送設定ボタンが出てこない) -> 注文時の条件で出ないことがあるようです.問い合わせして一括配送設定をしてもらえました :)
</追記>

DragonBoard-UpdatedImages-side
Dragonboard 410c という Snapdragon 410 開発ボードがあります.96Boards というマルチベンダーの ARM32/64 の開発ボードのシリーズの一つで Android/Ubuntu vivid ベースのOS やWindows 10 IoT Core に対応していて Wi-Fi/Bluetooth/GPS などが乗っているボードです.Raspberry Pi の倍くらいの値段だけどパワーはあるし,Wi-Fi/Bluetooth/GPS を後でのせることを考えると安いしちょっと欲しいなーと思っていたのですが,無線機器が付いているので日本国内で利用するにはいわゆる技適の問題があって面倒でした.このボードが国内でも技適取得済みで販売されることになりました.

16日に購入できるようになってその時300台ほどでしたが今日みても200台近く.ということは100台位しか捌けていない?
ということで Dragonboard 410c を買うのにちょっと調べたメモを残しておきます.

Raspberry Pi との大雑把な比較

Rasbperry Pi B+ Raspberry Pi 2B Dragonboard 410c
SoC Broadcom BCM2835 Broadcom BCM2836 Qualcomm SnapDragon 410
ARM version ARMv6 ARMv7 ARMv8
CPU 700MHz 1Core 900MHz 4Core 1200MHz 4Core
RAM 512MB 1GB 1GB
eMMC 8GB(eMMC 4.51)
microSD 1(Class10) 1(Class10) 1(UHS-I)
USB 4(2.0) 4(2.0) 2(2.0)
Ethernet 1(100Mb) 1(100Mb)
Wi-Fi IEEE 802.11 b/g/n 2.4GHz
Bluetooth 4.1(BR/EDT + BLE)
GPS Qualcomm WGR7640 GNSS(GLONASS+COMPASS)
GPIO 40 40 LS40(UART, SPI, I2S, I2C x2, GPIO x12, DC power)
+ HS60(4L-MIPI DSI, USB, I2C x2, 2L+4L-MIPI CSI)
電源 microUSB(5V 2A) microUSB(5V 2A) EIAJ-3(+6.5V to +18V 24W)

Dragonboard 410c の購入

技適の問題があるのでここから買うのが無難

電源

EIAJ-3 プラグ +6.5V to +18V
chip1stop の通販サイトによると24W 以上推奨

ハードウェアマニュアル v4.1 の該当部分

20151119_09:11:32-3233

96Boards の forum で紹介されていたもの

国内で探しても EIAJ3 はなかなか見当たらない.

一般的な 2.1mm のアダプタから変換するのがお手軽かもしれない.

その他便利そうなアクセサリ類

Raspberry Pi を使っている人なら揃っていそうですが,

Dragonboard 410c 関連ページ

Raspberry Pi をセロテープで修理する

Raspberry Pi 2 model B の microSD card slot のロックが壊れてしまい microSD を挿しても出てきてしまう状態になっていました.
新しいの欲しいなぁと思っていたのですが,値段を確認するとRS は \3,966(2015/02/02の値段) -> \4,900(今) と約1,000円値上がりしています.ちょっとつらい.
https://www.flickr.com/photos/119142834@N05/22624238729/in/dateposted-public/

microSD 刺さることは刺さるのでどうにか microSD を固定すればいけるのではと試しにセロテープ貼って固定したら動くようになりました.

https://www.flickr.com/photos/119142834@N05/23045475125/in/dateposted-public/
https://www.flickr.com/photos/119142834@N05/23056665281/in/dateposted-public/

暫くこれで様子見てみようかと思います.
+より前の旧型なら SD ソケット付け替えや増設出来そうなんですけど + 以降はmicroSD だし BGA ぽいしソケット入手出来ても辛そうですね.

ちなみに Androidの SIMやmicroSD ソケットを交換してくれる業者もあるようでお願いすれば修理いてくれそうですが,手数料と新品がそう変わらなくなりそうな感じです…….

追記)
ステープラー芯でロックできるというのも見かけて試してみました.

ターミナルで動作する Markdown Viewer terminal_markdown_viewer を試す

これは便利そう.ということで試してみました.

% git clone https://github.com/axiros/terminal_markdown_viewer.git
% terminal_markdown_viewer/mdv.py -h
Usage:
    mdv [-t THEME] [-T C_THEME] [-x] [-l] [-L] [-c COLS] [-f FROM] [-m] [-M DIR] [-H] [-A] [MDFILE]
 
Options:
    MDFILE    : Path to markdown file
    -t THEME  : Key within the color ansi_table.json. 'random' accepted.
    -T C_THEME: Theme for code highlight. If not set: Use THEME.
    -l        : Light background (not yet supported)
    -L        : Display links
    -x        : Do not try guess code lexer (guessing is a bit slow)
    -f FROM   : Display FROM given substring of the file.
    -m        : Monitor file for changes and redisplay FROM given substring
    -M DIR    : Monitor directory for markdown file changes
    -c COLS   : Fix columns to this (default: your terminal width)
    -A        : Strip all ansi (no colors then)
    -H        : Print html version
 
Notes:
 
    We use stty tool to derive terminal size.
 
    To use mdv.py as lib:
        Call the main function with markdown string at hand to get a
        formatted one back.
 
    FROM:
        FROM may contain max lines to display, seperated by colon.
        Example:
        -f 'Some Head:10' -> displays 10 lines after 'Some Head'
        If the substring is not found we set it to the *first* charactor of the
        file - resulting in output from the top (if you terminal height can be
        derived correctly through the stty cmd).
 
    File Monitor:
        If FROM is not found we display the whole file.
 
    Directory Monitor:
        We check only text file changes, monitoring their size.
 
        By default .md, .mdown, .markdown files are checked but you can change
        like -M 'mydir:py,c,md,' where the last empty substrings makes mdv also
        monitor any file w/o extension (like 'README').
 
        Running actions on changes:
        If you append to -M a '::<cmd>' we run the command on any change
        detected (sync, in foreground).
        The command can contain placeholders:
            _fp_    : Will be replaced with filepath
            _raw_   : Will be replaced with the base64 encoded raw content
                      of the file
            _pretty_: Will be replaced with the base64 encoded prettyfied output
 
        Like: mdv -M './mydocs:py,md::open "_fp_"'  which calls the open
        command with argument the path to the changed file.
 
 
    Theme rollers:
        mdv -T all:  All available code styles on the given file.
        mdv -t all:  All available md   styles on the given file.
                    If file is not given we use a short sample file.
 
        So to see all code hilite variations with a given theme:
            Say C_THEME = all and fix THEME
        Setting both to all will probably spin your beach ball, at least on OSX.
 
    Lastly: Using docopt, so this docstring is building the options checker.
    -> That's why this app can't currently use itself for showing the docu.
    Have to find a way to trick docopt to parse md ;-)

簡単に導入実行できていい感じです.
色付きのまま使えるページャーが欲しいのですがなにかいいものはないですかね…….
とりあえずは -A option で色無しで lv コマンドあたりに食わせています.

% terminal_markdown_viewer/mdv.py -A ~/Documents/pelican/content/1st_post.md |lv
 

asciicast

Termlnal で動作する Slack client の terminal-slack を試す

Termlnal で動作する Slack client の terminal-slack というものを見かけたので試してみました.

% git clone https://github.com/evanyeung/terminal-slack.git
% cd terminal-slack

"Slack Web API | Slack" で Token を入手して実行.

% SLACK_TOKEN=xxxx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx node main.js

https://www.flickr.com/photos/119142834@N05/22901628116/in/datetaken/

さくっと動作しましたが日本語は文字化けしてしまいます.残念.

追記)

Google+ で教えてもらったのですが,次のパッチで日本語が見られるようになりました.書き込みもOK でした :)

Let’s Encrypt を使った https 設定

Let’s Encrypt に以前メールアドレスを登録していたのですが,

Let’s Encrypt Closed Beta Invite

とうことでメールが届いていたので試してみました.

ちなみに Let’s Encrypt は DV(Domain Validation)証明書が無料で取得できるサービスで,経路の暗号化はされるけど組織の実在確認まではしないレベルの物.

早速試してみます.
実行環境は Debian jessie amd64 + Apache httpd 2.4(2.4.10-10+deb8u3)

Let’s Encrypt のツールを入手して実行する.

$ git clone https://github.com/letsencrypt/letsencrypt.git
$ cd letsencrypt
$ ./letsencrypt-auto --agree-dev-preview --server https://acme-v01.api.letsencrypt.org/directory auth
Bootstrapping dependencies for Debian-based OSes...
[sudo] password for user:

とすると,必要なパッケージを自動的に導入し始めます.
質問がいくつか来るけど,メールアドレス(Let’s Encrypt 登録時のもの)とコモンネームにApache とそれ以外の選択くらい.これで自動的に Let’s Encrypt のサーバと通信を行い証明書の取得ホト損までしてくれます.
そして,最後にこんな注意書きが表示されました.

IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to user@example.org.
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/example.org/fullchain.pem. Your cert will
   expire on 2016-02-02. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.

/etc 以下はデイリーでバックアップ取ってるので大丈夫なはず.24時間以上経ったけどメールは未だ届いていないよう.
そして,自動的に /etc/apache2/sites-available/009-example.conf を元に /etc/apache2/sites-available/009-example-le-ssl.conf が作られていました.
※このファイルは letsencrypt-auto を再実行すると消えて実行完了後再生成(以下の修正も必要)されたのでちょっと嫌.多分オプションとかで回避できると思うけど未確認.

以下の2行だけ修正して,

SSLCertificateFile /etc/letsencrypt/live/example.org/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.org/privkey.pem

a2ensite して restart で

$ sudo a2ensite 009-example-le-ssl
$ sudo service apache2 reload

とりあえず動いた

% openssl s_client -connect example.org:443
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X1
verify return:1
depth=0 CN = example.org
verify return:1
---
Certificate chain
 0 s:/CN=example.org
   i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
   i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE/TCCA+WgAwIBAgISAbbh6Bp+aXaatBj/TJ7lkyyZMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTAeFw0xNTExMDQxNjQ4MDBaFw0x
NjAyMDIxNjQ4MDBaMBYxFDASBgNVBAMTC2thZ29sdWcub3JnMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzb79Wux4LWzC+ZKTRRXN53+/IRraso2AZRrt
/wesf4EBEIl8i6Iu4Dl0FjLoomxZUCN0T7C5iJ4aPy629UkWDZrawFWGkXYT00ed
UziOKTXpYYTM9BBp9Qx1aw/CT8XY6TjOtaJ21AjcIXZBZ8EPnf6fWcHEFCsNYLKk
7U/e59WJ1B1ciXowS7nMwDy1c3rvu7tlzGRuO/xSx/hu0R5DYL8zyPlLwGZyfVv/
UYYtY6Wf8ItzgthpzltqtbMv4Kuohwu2mPwKQJ73MJoOghUD4p6oxiJ3nsgLY8DO
mIlW6ScXihlZ/pWfzjWaohKsvWM+qgnQpWNUQoaXNj0ES34m4QIDAQABo4ICDzCC
AgswDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
AjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQH4Pb+Brg5Q0PWhEZ7CEdAkxWKxzAf
BgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBwBggrBgEFBQcBAQRkMGIw
LwYIKwYBBQUHMAGGI2h0dHA6Ly9vY3NwLmludC14MS5sZXRzZW5jcnlwdC5vcmcv
MC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDEubGV0c2VuY3J5cHQub3Jn
LzAWBgNVHREEDzANggtrYWdvbHVnLm9yZzCCAQAGA1UdIASB+DCB9TAKBgZngQwB
AgEwADCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMu
bGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNh
dGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFu
ZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5
IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMA0G
CSqGSIb3DQEBCwUAA4IBAQBa5DjWSE/d6alvGUDNW4guiJauqvxB3B+YULzRTseb
0kXGyu46u16F4av+Ate0Jxq3NnZdOpy8OTiL/wGQeWOWs33zdlxii5o8R12pMMTS
/NWFxawiCkJnzpWkhdLQGv3RNUUQn0w5yXDSY/4wK8nZYJiHXJyNQen2V6vkRPUA
U+u24R4iytsrCXW08bGa+B3F9VIadBa8Br3bbJxV5hxCC2nCE6J8C9jRERc3GKTG
YBuSlM/gaLFopgFjRIDHY5IY5tCB3P8YFbbahqNHCXkh3Ilnlbmn3WW3sOXGOJDT
2s4AbSyzJHdAk3OqtMUoVl/7fk2a70mFiQi0JWotcsoa
-----END CERTIFICATE-----
subject=/CN=example.org
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3171 bytes and written 441 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: 21463ABE9EDCAF2B93E782CC2C4252E8CAA9A98B6B0036F957218C42A81419CE
    Session-ID-ctx:
    Master-Key: 0B652E199D83894F04BEAB5E268EEA8806F0DAB300AA4F5AA26C3B6361D57766FE5ACF08353DAD07781960A95BDFB7BB
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - be 38 de da a3 27 cf 1e-be 39 ee df 1c f0 2e e3   .8...'...9......
    0010 - 47 4e a1 ad 15 8f 43 3c-89 2b 1b 1f ea ef 46 a1   GN....C<.+....F.
    0020 - 09 d3 1b 0d c6 09 9a 99-e1 c2 d7 22 fd e0 b7 6f   ..........."...o
    0030 - 08 cb ba 73 d8 cb 3a 82-55 59 ee 5f 05 56 9c d6   ...s..:.UY._.V..
    0040 - bc 80 1a b3 b0 8c 87 16-2f fc 69 e2 03 0c a2 7f   ......../.i.....
    0050 - 9d e2 1f 2b d3 14 fb b7-78 28 22 48 3b ff 28 52   ...+....x("H;.(R
    0060 - 5e 89 bd cd 9f 3d 4f 26-aa 1d 2d bb af 4a 84 cf   ^....=O&..-..J..
    0070 - ce 3c 20 ac 55 84 33 56-10 6c 19 1a d3 15 ce 30   .< .U.3V.l.....0
    0080 - 7e e7 0b 6f f9 31 ef 92-c0 11 7f 95 de a6 fa 80   ~..o.1..........
    0090 - c1 5d 46 92 d6 b5 0c 5a-78 75 92 ad 1f bb 6f c0   .]F....Zxu....o.
    00a0 - 7f 35 ac 07 41 07 0a c7-a5 f5 5b 3f 16 ca b7 4e   .5..A.....[?...N
    00b0 - d7 7f c1 68 dc 28 e8 15-f9 95 d9 e1 a7 bf d0 c4   ...h.(..........
 
    Start Time: 1446664204
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
 
% cat cer
-----BEGIN CERTIFICATE-----
MIIE/TCCA+WgAwIBAgISAbbh6Bp+aXaatBj/TJ7lkyyZMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTAeFw0xNTExMDQxNjQ4MDBaFw0x
NjAyMDIxNjQ4MDBaMBYxFDASBgNVBAMTC2thZ29sdWcub3JnMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzb79Wux4LWzC+ZKTRRXN53+/IRraso2AZRrt
/wesf4EBEIl8i6Iu4Dl0FjLoomxZUCN0T7C5iJ4aPy629UkWDZrawFWGkXYT00ed
UziOKTXpYYTM9BBp9Qx1aw/CT8XY6TjOtaJ21AjcIXZBZ8EPnf6fWcHEFCsNYLKk
7U/e59WJ1B1ciXowS7nMwDy1c3rvu7tlzGRuO/xSx/hu0R5DYL8zyPlLwGZyfVv/
UYYtY6Wf8ItzgthpzltqtbMv4Kuohwu2mPwKQJ73MJoOghUD4p6oxiJ3nsgLY8DO
mIlW6ScXihlZ/pWfzjWaohKsvWM+qgnQpWNUQoaXNj0ES34m4QIDAQABo4ICDzCC
AgswDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
AjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQH4Pb+Brg5Q0PWhEZ7CEdAkxWKxzAf
BgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBwBggrBgEFBQcBAQRkMGIw
LwYIKwYBBQUHMAGGI2h0dHA6Ly9vY3NwLmludC14MS5sZXRzZW5jcnlwdC5vcmcv
MC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDEubGV0c2VuY3J5cHQub3Jn
LzAWBgNVHREEDzANggtrYWdvbHVnLm9yZzCCAQAGA1UdIASB+DCB9TAKBgZngQwB
AgEwADCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMu
bGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNh
dGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFu
ZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5
IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMA0G
CSqGSIb3DQEBCwUAA4IBAQBa5DjWSE/d6alvGUDNW4guiJauqvxB3B+YULzRTseb
0kXGyu46u16F4av+Ate0Jxq3NnZdOpy8OTiL/wGQeWOWs33zdlxii5o8R12pMMTS
/NWFxawiCkJnzpWkhdLQGv3RNUUQn0w5yXDSY/4wK8nZYJiHXJyNQen2V6vkRPUA
U+u24R4iytsrCXW08bGa+B3F9VIadBa8Br3bbJxV5hxCC2nCE6J8C9jRERc3GKTG
YBuSlM/gaLFopgFjRIDHY5IY5tCB3P8YFbbahqNHCXkh3Ilnlbmn3WW3sOXGOJDT
2s4AbSyzJHdAk3OqtMUoVl/7fk2a70mFiQi0JWotcsoa
-----END CERTIFICATE-----
% openssl x509 -in cer -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            01:b6:e1:e8:1a:7e:69:76:9a:b4:18:ff:4c:9e:e5:93:2c:99
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X1
        Validity
            Not Before: Nov  4 16:48:00 2015 GMT
            Not After : Feb  2 16:48:00 2016 GMT
        Subject: CN=example.org
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:cd:be:fd:5a:ec:78:2d:6c:c2:f9:92:93:45:15:
                    cd:e7:7f:bf:21:1a:da:b2:8d:80:65:1a:ed:ff:07:
                    ac:7f:81:01:10:89:7c:8b:a2:2e:e0:39:74:16:32:
                    e8:a2:6c:59:50:23:74:4f:b0:b9:88:9e:1a:3f:2e:
                    b6:f5:49:16:0d:9a:da:c0:55:86:91:76:13:d3:47:
                    9d:53:38:8e:29:35:e9:61:84:cc:f4:10:69:f5:0c:
                    75:6b:0f:c2:4f:c5:d8:e9:38:ce:b5:a2:76:d4:08:
                    dc:21:76:41:67:c1:0f:9d:fe:9f:59:c1:c4:14:2b:
                    0d:60:b2:a4:ed:4f:de:e7:d5:89:d4:1d:5c:89:7a:
                    30:4b:b9:cc:c0:3c:b5:73:7a:ef:bb:bb:65:cc:64:
                    6e:3b:fc:52:c7:f8:6e:d1:1e:43:60:bf:33:c8:f9:
                    4b:c0:66:72:7d:5b:ff:51:86:2d:63:a5:9f:f0:8b:
                    73:82:d8:69:ce:5b:6a:b5:b3:2f:e0:ab:a8:87:0b:
                    b6:98:fc:0a:40:9e:f7:30:9a:0e:82:15:03:e2:9e:
                    a8:c6:22:77:9e:c8:0b:63:c0:ce:98:89:56:e9:27:
                    17:8a:19:59:fe:95:9f:ce:35:9a:a2:12:ac:bd:63:
                    3e:aa:09:d0:a5:63:54:42:86:97:36:3d:04:4b:7e:
                    26:e1
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier:
                07:E0:F6:FE:06:B8:39:43:43:D6:84:46:7B:08:47:40:93:15:8A:C7
            X509v3 Authority Key Identifier:
                keyid:A8:4A:6A:63:04:7D:DD:BA:E6:D1:39:B7:A6:45:65:EF:F3:A8:EC:A1
 
            Authority Information Access:
                OCSP - URI:http://ocsp.int-x1.letsencrypt.org/
                CA Issuers - URI:http://cert.int-x1.letsencrypt.org/
 
            X509v3 Subject Alternative Name:
                DNS:example.org
            X509v3 Certificate Policies:
                Policy: 2.23.140.1.2.1
                Policy: 1.3.6.1.4.1.44947.1.1.1
                  CPS: http://cps.letsencrypt.org
                  User Notice:
                    Explicit Text: This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/
 
    Signature Algorithm: sha256WithRSAEncryption
         5a:e4:38:d6:48:4f:dd:e9:a9:6f:19:40:cd:5b:88:2e:88:96:
         ae:aa:fc:41:dc:1f:98:50:bc:d1:4e:c7:9b:d2:45:c6:ca:ee:
         3a:bb:5e:85:e1:ab:fe:02:d7:b4:27:1a:b7:36:76:5d:3a:9c:
         bc:39:38:8b:ff:01:90:79:63:96:b3:7d:f3:76:5c:62:8b:9a:
         3c:47:5d:a9:30:c4:d2:fc:d5:85:c5:ac:22:0a:42:67:ce:95:
         a4:85:d2:d0:1a:fd:d1:35:45:10:9f:4c:39:c9:70:d2:63:fe:
         30:2b:c9:d9:60:98:87:5c:9c:8d:41:e9:f6:57:ab:e4:44:f5:
         00:53:eb:b6:e1:1e:22:ca:db:2b:09:75:b4:f1:b1:9a:f8:1d:
         c5:f5:52:1a:74:16:bc:06:bd:db:6c:9c:55:e6:1c:42:0b:69:
         c2:13:a2:7c:0b:d8:d1:11:17:37:18:a4:c6:60:1b:92:94:cf:
         e0:68:b1:68:a6:01:63:44:80:c7:63:92:18:e6:d0:81:dc:ff:
         18:15:b6:da:86:a3:47:09:79:21:dc:89:67:95:b9:a7:dd:65:
         b7:b0:e5:c6:38:90:d3:da:ce:00:6d:2c:b3:24:77:40:93:73:
         aa:b4:c5:28:56:5f:fb:7e:4d:9a:ef:49:85:89:08:b4:25:6a:
         2d:72:ca:1a
-----BEGIN CERTIFICATE-----
MIIE/TCCA+WgAwIBAgISAbbh6Bp+aXaatBj/TJ7lkyyZMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMTAeFw0xNTExMDQxNjQ4MDBaFw0x
NjAyMDIxNjQ4MDBaMBYxFDASBgNVBAMTC2thZ29sdWcub3JnMIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzb79Wux4LWzC+ZKTRRXN53+/IRraso2AZRrt
/wesf4EBEIl8i6Iu4Dl0FjLoomxZUCN0T7C5iJ4aPy629UkWDZrawFWGkXYT00ed
UziOKTXpYYTM9BBp9Qx1aw/CT8XY6TjOtaJ21AjcIXZBZ8EPnf6fWcHEFCsNYLKk
7U/e59WJ1B1ciXowS7nMwDy1c3rvu7tlzGRuO/xSx/hu0R5DYL8zyPlLwGZyfVv/
UYYtY6Wf8ItzgthpzltqtbMv4Kuohwu2mPwKQJ73MJoOghUD4p6oxiJ3nsgLY8DO
mIlW6ScXihlZ/pWfzjWaohKsvWM+qgnQpWNUQoaXNj0ES34m4QIDAQABo4ICDzCC
AgswDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcD
AjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQH4Pb+Brg5Q0PWhEZ7CEdAkxWKxzAf
BgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBwBggrBgEFBQcBAQRkMGIw
LwYIKwYBBQUHMAGGI2h0dHA6Ly9vY3NwLmludC14MS5sZXRzZW5jcnlwdC5vcmcv
MC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDEubGV0c2VuY3J5cHQub3Jn
LzAWBgNVHREEDzANggtrYWdvbHVnLm9yZzCCAQAGA1UdIASB+DCB9TAKBgZngQwB
AgEwADCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUHAgEWGmh0dHA6Ly9jcHMu
bGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyBm1RoaXMgQ2VydGlmaWNh
dGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVseWluZyBQYXJ0aWVzIGFu
ZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2VydGlmaWNhdGUgUG9saWN5
IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3JnL3JlcG9zaXRvcnkvMA0G
CSqGSIb3DQEBCwUAA4IBAQBa5DjWSE/d6alvGUDNW4guiJauqvxB3B+YULzRTseb
0kXGyu46u16F4av+Ate0Jxq3NnZdOpy8OTiL/wGQeWOWs33zdlxii5o8R12pMMTS
/NWFxawiCkJnzpWkhdLQGv3RNUUQn0w5yXDSY/4wK8nZYJiHXJyNQen2V6vkRPUA
U+u24R4iytsrCXW08bGa+B3F9VIadBa8Br3bbJxV5hxCC2nCE6J8C9jRERc3GKTG
YBuSlM/gaLFopgFjRIDHY5IY5tCB3P8YFbbahqNHCXkh3Ilnlbmn3WW3sOXGOJDT
2s4AbSyzJHdAk3OqtMUoVl/7fk2a70mFiQi0JWotcsoa
-----END CERTIFICATE-----

後はコンテンツを全部 https に設定して http から転送するようにしないといけないですね.

とりあえず無料で使える StartSSL,安めの Rapid SSL,キャンペーンや乗り換えで一定期間無料とか色々ありますが,そのくらいのレベルであれば代替になるかなと思います.それ以上は大抵 EV になるでしょうし.ただ CNしか無かったり期間が短いのが気になりますね.

Android の Google Authenticator のデータをダンプしてバックアップする

Android の Google Authenticator 色々な認証に使えて便利ですが,以前 Nexus5 を紛失した時や LGL22 でデータが飛んでしまった後復旧が面倒でした.どうにかバックアップが取れないかなと調べてみました.

Android からデータを取得

/data/data/com.google.android.apps.authenticator2/databases/databases がデータが格納されているファイルらしいです.
adb pull で持ってきたいけど権限がないので一旦 /storage/sdcard0/ に cp する

% adb shell
shell@g2:/ $ su
root@g2:/ # cp /data/data/com.google.android.apps.authenticator2/databases/databases /storage/sdcard0/

ローカルPC に退避

% adb pull /storage/sdcard0/databases .

/storage/sdcard0/ に cp したデータを消す.暗号化領域の下のはずだけど一応上書きしてから削除

% adb shell
shell@g2:/ $ su
root@g2:/ # ls -l /storage/sdcard0/databases
-rw-rw---- root     sdcard_r    16384 2015-10-09 22:51 databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # head -c 16384 /dev/random > /storage/sdcard0/databases
root@g2:/ # rm /storage/sdcard0/databases
root@g2:/ # ^D
shell@g2:/ $ ^D

データ形式を確認してdump

該当ファイルは file コマンドによると SQLite3 のようなので dump してみる

% file ./databases
./databases: SQLite 3.x database
% sqlite3 ./databases
SQLite version 3.8.11.1 2015-07-29 20:00:57
Enter ".help" for usage hints.
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE android_metadata (locale TEXT);
INSERT INTO "android_metadata" VALUES('ja_JP');
CREATE TABLE accounts (_id INTEGER PRIMARY KEY, email TEXT NOT NULL, secret TEXT NOT NULL, counter INTEGER DEFAULT 0, type INTEGER, provider INTEGER DEFAULT 0, issuer TEXT DEFAULT NULL, original_name TEXT DEFAULT NULL);
 :

ここで取得した PRIMARY KEY を HOTP TOKEN を割り出す script の "google-authenticator.py に食わせると Android App と同じコードが帰ってくるのを確認しました.勿論普通に認証も可能.

IMG_20151010_012917

ということで要root ですが, /data/data/com.google.android.apps.authenticator2/databases/databases を退避して他の端末に持って行っても動作するかも.少なくとも PRIMARY KEY は入手できるので手動で入力すれば OK ですね.
とはいえ端末紛失時には作りなおしたほうが良いでしょうが.

root が取れない場合は登録時に PRIMARY KEY をメモしておくくらいですかね.QR Code だけしか見えない場合は Google Authenticator に食わせる前に別のリーダーを利用したりすれば可能です
例えば以下のような読み取り内容の場合 6QHI5WW6H3FMJ2ZI が PRIMARY KEY です.

otpauth://t│·········· otp/mk@micro?secret=6QHI5WW6H3FMJ2ZI

LGL22 導入アプリメモ

LGL22 ですが,先日起動してもすぐに再起動してしまう様になってしまいました.起動してパスコードを入力してデスクトップが表示されるくらいの辺りで再起動してしまいます.アイコンが減っていたりするのでストレージが死んだかファイルシステムが壊れているかかな?と初期化しました.

とりあえず復活したようなので導入アプリのメモを書いておきます.

  • Squera レジ
    関東では使うことあったけど鹿児島では一度も使ったことがない……
  • PayPal
  • Debian News
  • Go雨!探知機
    XRAIN をオーバーレイしてくれる
  • Gmail
  • K-9 Mail
    Gmail 以外のメールに利用
  • APG
    主に K-9 Mail での GPG に
  • 音泉
  • Tuneln Radio
  • Raziko
  • Radiko.jp
  • らじるらじる
  • Google Playミュージック
  • DeviantArt
  • Pixiv
  • リトルノア
    ゲーム.何気に続けてる
  • Ingress
    緑です
  • Ingress Helper
  • Intelgrated Timer
  • Google+
    利用率が一番高い
  • Mustard
    Twitter や GNU Social 対応クライアント
  • SobaCha
    軽くてユーザーストリームに対応した Twitter クライアント
  • Twitter
  • Plag
  • Instagram
  • Snapchat
  • Swarm
  • tsu
  • Tumblrunning
  • WharsApp
  • Slack
  • SlideShare
  • Ustream
  • WiFLE WIFI
    War Driving に(携帯局も拾う)
  • mineo スイッチ
    SIMの利用料確認に
  • Debian
    chroot で Debian が動く.暇つぶしに良い
  • Programmer Keyboard
  • Google Goggles
    翻訳(日本語非対応)したりバーコード読んだり
  • WiFi QR Share
    端末で設定してある Wi-Fi 設定を QR Code で表示したり※root
  • プレゼンタイマ
  • Bluetooth Auto Connect
    Bluetooth 機器に自動接続する
  • OsmAnd+
    OSM の確認,POI 登録など
  • MAPS ME
    OSM 地図確認.見やすい
  • OSMTraker
    GPS ログ取りに
  • Strava
    散歩時のログ取りなどに
  • GPS Status
  • Google Camera
  • Jota+
  • JotterPad
  • LibreOffice Viewer
  • N2 TTS
  • Voice Notify
    N2 TTS とあわせて喋らせる
  • ownCloud
  • Photo Editor
  • Rapica Reader
    フェリー乗船前の残高確認に
  • SMARTalk
  • SuperSU
  • 認証システム
    Google Authenticator.バックアップコード引っぱり出したり再設定が面倒だった.バックアップ方法を調べたい.
  • Titanium Backup

Node.js製 Slack クライアントの plaidchat を試してみる

ということで plaidchat も少し試してみました.

導入は特に苦労はなくページに書いてあるとおり npm install で一発でした.

Slack 製の物に比べると機能は少ないです.多分1プロジェクトのみの対応です.でもリソースの省比量は大分少なくメインウィンドウを隠すことも出来ます.
About が後ろに行って複数出せてしまったり,窓の中が真っ白になったり未だこなれてない感じです.これからに期待です.

20150928_08:09:00-13716

% ps aux | grep -i plaidchat | awk '{print $6}' | xargs echo| sed -e 's/\ /\+/g' | bc
326480

RAM 消費量が少ないとはいってもそこそこ消費するので今度は Slack IRC GW なども試してみたいです.