最近のOSMマッピング方法2015

この記事は OpenStreetMap Advent Calendar 2015 の4日目の記事です.昨日の記事は,OpenStreetMap – Wheelchair=*タグで素敵なプレゼントを でした.
私もついWheelchair=*タグを後回しにしてしまっているのでもっと意識してマッピングしたいと思います.

さて,今日は私の最近のOSMマッピング方法をメモしておこうと思います.たまに聞かれることがあるので参考になる人も居るかもしれません.

私は最近引きこもりでチェアマッピングが主ですが,外に出るときにはGPSロガーなどを持って出歩いてサーベイして家に帰ってからPCで入力することが多いです.この時使っているアプリケーションなどの紹介をしたいと思います.

目的地に行く前

マッピングをするとき道路や建物があるのと無いのではやりやすさが大分違います.そこで前もって作業できる時間があるなら目的地の地図を確認して基盤地図情報などをトレースしておきます.

このときJava製のマルチプラットホームのアプリケーションの JOSM を利用しています.Windows/MacOSX/Linux 等で動作します.私はLinux上で利用しています.

以下のページに利用ガイドがあります.

基盤地図情報のトレースはそのままでは出来ないので次のページを参考に基盤地図情報 25000,および 2500 TMSの設定を行います.

これで基盤地図情報を背景にしてトレースが出来るようになります.以下はとある自転車屋さんに行こうと思い周辺の道路と建物をトレースした例です.(結局未だ行けていませんorz)

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

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

目的地でのサーベイ

私はGPSロガーの他にAndroid端末を利用しています.
端末は以下の2つを利用しています.どちらもちょっと古いので新しい端末が欲しいところです><

  • Galaxy Note II
    ペンが使える.SIMスロット破損で3G通信不可
  • Xperia Pro
    主に3Gモデムとして利用

Android端末に以下のようなアプリケーションを導入しています.

Mapの確認&POI登録に OsmAnd+

これは前もってOSMの地図データをローカルに保存(オンラインモードもあり)しておき,地図の確認やPOIの登録が出来ます.ちょこっとPOIを登録するのに使っています.

GPSロギングと写真撮影などに OSMTracker for Android™

GPSロガーを別途持っていますがそれ以外にこのアプリケーションを起動してロギング&写真撮影をしています.帰宅してからその情報をJOSMに取り込んでマッピングしています.

OSM登録データの確認に OSMfocus

POIは登録されているけれど詳細なデータも登録されているのかなど確認したいことがあります.そういった場合のこのアプリで確認ができます.

Screenshot_2015-12-04-18-37-02

手書きマッピングに OSM sketch

以前もOsmAnd+ のスクリーンショットを取得してその上に手書きでメモを取るといったことをしていたのですが,このアプリケーションではメモしたデータをそのままOSMにアップロードできます.アップロードしたデータはそのまま他のアプリケーションで編集に使えます.
メモをするときはちょっとコツがあって,意識して大きめに書かないと操作ま丸められてしまうようでうまく書けません.大きめのストロークでメモしてこまめにスクロールするとうまく書けます.
広告のない有料版があれば購入したいです.

※このアプリケーションは2015年10月31日に浜松で開催された State of the Map Japan 2015 in Hamamatsu 内の次の公演「プレゼンテーション:マッピング用スマホアプリを作ってみた」で知りました.現地にはいけませんでしたが中継で参加しました :)

Mapの閲覧に MAPS.ME

ローカルに地図データをダウンロードして閲覧できます.地図データも地域ごとにダウンロードできるので欲しい場所の地図だけをダウンロードできます.(最近はOSMAnd+でも可能)
このアプリケーションは以前は有料だったのですが去年の今頃無料になり,現在はオープンソースになっています.
#購入して数週間で無料になってちょっとがっかりしました><

その他

お店で買い物をしたらレシートをもらうようにしています.レシートにはお店の詳細な情報が書かれていることが多いです.スーパーやコンビニなどの選択肢が複数ある場合は情報の少ない方で買い物するようにしています :)
タグにはsource=receipt が使えます.

Android以外ではGPSロガー(Garmin Oregon300)とデジタルカメラを持ち歩いています.GPSログはOSMにアップロードしてトレース元のデータに,写真にはジオタグを埋め込んでJOSMで読み込んでマッピングしています.
Linux でのジオタグの埋め込み方はちょっと古いですが以下の資料を参照して下さい.MacOSXでも動作すると思います.

Windowsでは などのアプリケーションで実現できます.(轍はWineでも動作します)

帰宅後のマッピング

帰宅後はサーベイしたデータを元に入力していきます.GPSログ,ジオタグの含まれた写真,レシートなどを見ながら JOSM を利用しています.撮ったつもりの写真が無かったり,撮っていてもぶれてたり光の具合でうまく見えないということもよくあります.確実なのは再度現地に行くことですが,画像編集ソフトでシャープネスやコンストラストを変更すると読みやすくなることもあります.これにはマルチプラットホームアプリケーションの GIMP を利用しています.
GIMP – GNU Image Manipulation Program

やってみたいマッピング方法

広角のアクションカメラの利用

最近はアクションカムが色々出ていますが,以下のような広角のカメラでアーケードなどのGPSの電波状態の悪いところなどをビデオマッピングしたら便利そうと思っています.最近出た新型では解像度も上がったようなので看板などの文字も読みやすそうです.

GNESS 対応ロガーの利用

準天頂測量衛星などのGNESS対応のGPSレシーバーを利用して精度の高いログを取得してみたいと思っています.GPSモジュールを入手出来ていないので計画はストップしています><

おわりに

実際はバッテリが持たなくてうまくサーベイ出来なかったりしますが最近はだいたいこんな感じでマッピングしています..もっといい手順やアプリがあったらぜひ教えて下さい.

また,不定期で鹿児島らぐでマッピングカフェをしています.参加者ははほぼ私一人ですが興味のある方はチェックしてみて下さい.

#しかし,もっと外出してサーベイする機会を増やさないといけないです…….

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 2BDragonboard 410c
SoCBroadcom BCM2835Broadcom BCM2836Qualcomm SnapDragon 410
ARM versionARMv6ARMv7ARMv8
CPU700MHz 1Core900MHz 4Core1200MHz 4Core
RAM512MB1GB1GB
eMMC8GB(eMMC 4.51)
microSD1(Class10)1(Class10)1(UHS-I)
USB4(2.0)4(2.0)2(2.0)
Ethernet1(100Mb)1(100Mb)
Wi-FiIEEE 802.11 b/g/n 2.4GHz
Bluetooth4.1(BR/EDT + BLE)
GPSQualcomm WGR7640 GNSS(GLONASS+COMPASS)
GPIO4040LS40(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