XperiaPro(MK16a)にLolipopベースのCyanogenMod12を導入してみる

Xperia Pro(MK16a)をBootloader Unlock してみた | matoken’s meme
でXperia Pro のブートローダーのアンロックをしたのでROMを入れ替えてみます.
入れ替えるROMはAndroidベースのCyanogenModを利用します.

CyanogenModのページを見るとXperiaProのイメージはメンテされていないようです.

古いXperiaのプロジェクトのLegacyXperia Projectを見に行くとアクティブなようなのでこちらのイメージを利用することにします.

せっかくなのでLolipop ベースのCyanogenMod12 を試してみます.

BasketBuild からcm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zipを入手しました.cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip.md5 は0byte でした….BasketBuild には8caec5afb32aacd9e529ca31f6df6595 と書かれていたのでこれと突き合わせました.

% echo '8caec5afb32aacd9e529ca31f6df6595  cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip' > cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip.md5
% md5sum -c cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip.md5
cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip: 完了
% sha1sum cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip
7d9b2c06c34bb540f5ed74635e7ddee65d27c2fa  cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip
% sha256sum cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip 
b82909fffea8ddf9ceb4f69b84970e7148a4de1b6f745a7a17f1c9cf9b8b2436  cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip
% sha512sum cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip 
5a7c6b5c0314ee4df6d9e381669518468c265cdeec0c831c20278c852aa2c4c32146ede11a5650b57e07ecddccb02950b58509d3a53310512be704975e0cbae9  cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip

CyanogenModにはGoogleの不自由なソフトウェアやプロプライエタリなドライバが同梱されていません.別パッケージのGoogle Apps(GApps)として配布されています.

GAppsは巨大なので機能を削ってスリム化されたパッケージも配布されています.

今回はこの pa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip を利用しました.hashは見当たりませんでした.手元では以下のような感じです.

% md5sum pa_gapps-modular-pico\(uni\)-5.0.1-20150315-signed.zip
3ee06867bb52465a83fd7625f7750f75  pa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip
% sha1sum pa_gapps-modular-pico\(uni\)-5.0.1-20150315-signed.zip 
639411d58817e38212b892a34832bbe1db094d36  pa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip
% sha256sum pa_gapps-modular-pico\(uni\)-5.0.1-20150315-signed.zip
f4a88039ff7870eaf989ab63c5d01ac315aecef3e66bff24e723cb8de66681fe  pa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip
% sha512sum pa_gapps-modular-pico\(uni\)-5.0.1-20150315-signed.zip 
daec26a87eb5acb6a492d6a691c2d602adc9fb201a9d9e0604f199654c16c59dcc99f636f21684a38931930951cbf68692a4c4ac717a09a60802fc0d2ce854b2  pa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip

#このPA_GAppsは記事を書くために確認したら開発をやめちゃうようです><
##次の辺りが使えるかもしれません.(未確認)

cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zippa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zip の2ファイルをmicroSD Card にコピーして,microSD をXperiaProに挿します.

cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip内からboot.imgファイルを取り出します.

% unzip cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip boot.img
Archive:  cm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zip
signed by SignApk
  inflating: boot.img

Xperia Pro をnvflash モードで起動します.

  • 電源off 状態からメニューキーを押しながらUSB Cable 接続
  • 右上側面のHDMIコネクタ上のLEDが青になる

nvflash コマンドでboot.img を送り込み起動させます.

% ./fastboot flash boot boot.img
[sudo] password for mk:
sending 'boot' (8704 KB)...
(bootloader) USB download speed was 139264kB/s
OKAY [  0.999s]
writing 'boot'...
(bootloader) Download buffer format: boot IMG
(bootloader) Flash of partition 'boot' requested
(bootloader) S1 partID 0x00000003, block 0x00000280-0x000002e3
(bootloader) Erase operation complete, 0 bad blocks encountered
(bootloader) Flashing...
(bootloader) Flash operation complete
OKAY [  1.707s]
 inished. total time: 2.706s

この後,USB Cableを抜いて電源を入れます.LegacyXperiaのロゴが出ている間に下ボリュームキーを連打します.うまく行くとCYANOGEN Recoveryの画面になります.

IMG_20150327_130657

先ずはデータ消去を行います.

  • ボリュームの上下でメニューを移動し,Wipe cache partition で電源キーを押し決定
  • ボリュームの上下でメニューを移動し,Wipe data/factory resetで電源キーを押し決定

ROMを焼きます.

  • ボリュームの上下でメニューを移動し,Apply update で電源キーを押し決定
  • Choose from sdcard0を選択し,SD Card内のcm-12-20150314-UNOFFICIAL-LegacyXperia-iyokan.zipを選択して焼く
  • 同様にGAppsのpa_gapps-modular-pico(uni)-5.0.1-20150315-signed.zipを焼きます.
  • Reboot system nowで再起動します.

後はAndroidの初期設定です.しかし,初期設定時はすごく重い(ホームボタンを押してもタイムアウトして何も出ないうちに画面が消灯したりする)ので気長にやりましょう.初期設定が終わればそこそこ実用的な速度になります.

IMG_20150322_101440
Screenshot_2015-03-27-13-36-34Screenshot_2015-03-27-13-36-41

重いけどIngressも動きます.
Screenshot_2015-03-25-12-45-44Screenshot_2015-03-25-12-59-16

Xperia Pro(MK16a)をBootloader Unlock してみた

Xperia Pro(MK16a)を持っているのですが,OSが古いし標準アプリも多くてストレージもいっぱいで使いたいアプリもなかなか入れることが出来ません.
最近はこの端末にMVNOのSIMを刺してモバイルルータ and GPSロガー的に使っていますがbluetooth tethering も使えずWi-Fi tethering だとバッテリの減りも早いです.ということでカスタムROMやCyanogenMod11か12あたりに入れ替えたいのですがブートローダーにロックがかかっているのでまずはこれを解除しないといけません.Test Point を使ったりするのは面倒だなと思っていたのですが,現在は公式でアンロックコードを手に入れることができるのでこちらで行うことに.
※保証がきかなくなります.SEUSなどが利用できなくなります.公式アップデートも利用できなくなるそうです.(まあこれからOTAとか来ることはないと思いますが)

本体の他に以下のものが必要です.ここでは開発環境の説明はしません.

  • Android 開発環境の動作するPC(今回はDebian Jessie)
  • Android 開発環境の中のfastboot コマンド(sdk/platform-tools 以下)
  • USB A-microB ケーブル

アンロックコードの入手

アンロックコードは以下のページから入手できます.

機種を選択して,メールアドレスを入力すると確認メールが届くので,そのメールのURL をクリックするとIMEIの入力画面になって,そこでIMEI を入力することでCodeが入手できます.

アンロック

Xperia Pro の電源を切ります.
USBケーブルはPCのみに接続する
電源Off 状態からメニューボタンを押しながらUSBケーブルを接続する
右上側面のHDMIコネクタ横のLEDが青くなるとFastbootモードになっている

Fastboot モードの時のdmesgはこんな感じでした.

[78677.917985] usb 1-1.1: new high-speed USB device number 30 using ehci-pci
[78678.013776] usb 1-1.1: unable to get BOS descriptor
[78678.025756] usb 1-1.1: New USB device found, idVendor=0fce, idProduct=0dde
[78678.025764] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[78678.025769] usb 1-1.1: Product: S1Boot Fastboot
[78678.025774] usb 1-1.1: Manufacturer: Sony Ericsson Mobile Communications AB
[78678.025778] usb 1-1.1: SerialNumber: CB5A1G45XXXXXX

fastboot devices コマンドで接続を確認します.

% ./fastboot devices
CB5A1G45XXXXXX  fastboot
% ./fastboot -i 0x0fce getvar version
version: 0.3
finished. total time: 0.001s

もしここでno permissions fastboot というエラーが出る場合はadb serverを起動しなおしてみるとうまく行くようです.それでもうまく行かない場合root権限で起動し直す(sudo command)とうまく行ったことも.

% ./fastboot devices
no permissions  fastboot
% ./adb kill-server
% ./adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
% ./fastboot devices
CB5A1G45XXXXXX  fastboot

問題ないようなら以下のコマンドでアンロックコードを指定してアンロックします.

% ./fastboot -i 0x0fce oem unlock 0xC3BA1080A6XXXXXX
...
(bootloader) Unlock phone requested
(bootloader) Erasing block 0x00001300
(bootloader) Erasing block 0x00001400
(bootloader) Erasing block 0x00001500
(bootloader) Erasing block 0x00001600
(bootloader) Erasing block 0x00001700
(bootloader) Erasing block 0x00001800
(bootloader) Erasing block 0x00001900
(bootloader) Erasing block 0x00001a00
(bootloader) Erasing block 0x00001b00
(bootloader) Erasing block 0x00001c00
(bootloader) Erasing block 0x00001d00
(bootloader) Erasing block 0x00001e00
(bootloader) Erasing block 0x00001f00
OKAY [  4.587s]
finished. total time: 4.587s

これでアンロック完了です.
次はOSを入れ替えてみます.

ケーブルの抜け防止に良さそうな製品

AVANTEC(アバンテック) | 電源、USB、HDMI等コネクタ、ケーブルの抜け防止製品のご紹介

サーバやスイッチなんかの電源なんかは抜け防止の金具が付いてますが,PCなんかだと付いてません.
電源だとサプライ品で見たことありましたがこちらの製品だとUSBやスマホなんかのmicroUSBなんかも対応するものがあるみたい.場合によっては便利そうです.
オンラインショップはあるようですが,Amazonとかでも売ってると便利そうです.

ownCloud 7.0.4 導入でownCloud Client 接続で嵌まる

レンタルサーバのheteml にownCloud 7.0.4 を導入する簡単なお仕事.ssh も使えるし〜と思ってさくっと導入してWeb でのテストまでして引渡したのですがユーザからownCloud のクライアントで接続できないとのこと.

ログファイルを出力しつつ試してみると確かに繋がりません.

% owncloud —confdir ./ —logfile ./log —logflush —logwindow

  • —confdir 設定ファイルのディレクトリ指定
  • —logfile ログファイル指定
  • —logflush ログのリアルタイム出力
  • —logwindow ログ出力ウィンドウ表示

WebDav でもうまく行かない.

怪しそうな以下のエラーメッセージで検索するとそれらしいものを発見.

No basic authentication headers were found

コメントを参考に以下の2ファイルを修正.

  • .htaccess
  • lib/base.php
$ diff -u .htaccess.org .htaccess
--- .htaccess.org       2015-02-19 18:41:36.000000000 +0900
+++ .htaccess   2015-03-03 18:09:27.000000000 +0900
@@-17,6 +17,9 @@
 </IfModule>
 <IfModule mod_rewrite.c>
 RewriteEngine on
+RewriteCond %{HTTP:Authorization} ^Basic.*
+RewriteRule ^(.*) $1?Authorization=%{HTTP:Authorization} [QSA,C]
+RequestHeader unset Authorization
 RewriteRule .* - [env=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
 RewriteRule ^\.well-known/host-meta /public.php?service=host-meta [QSA,L]
 RewriteRule ^\.well-known/host-meta\.json /public.php?service=host-meta-json [QSA,L]
@@-40,4 +43,4 @@
 </IfModule>
$ diff -u lib/base.php.org lib/base.php
--- lib/base.php.org    2014-12-09 03:34:15.000000000 +0900
+++ lib/base.php        2015-03-02 20:58:04.000000000 +0900
@@-805,6 +805,12 @@

        protected static function handleAuthHeaders() {
                //copy http auth headers for apache+php-fcgid work around
+               if(isset($_GET['Authorization']) && preg_match('/Basic\s+(.*)$/i', $_GET['Authorization'], $matches))
+               {
+                   list($name, $password) = explode(':', base64_decode($matches[1]));
+                   $_SERVER['PHP_AUTH_USER'] = strip_tags($name);
+                   $_SERVER['PHP_AUTH_PW'] = strip_tags($password);
+               }
                if (isset($_SERVER['HTTP_XAUTHORIZATION']) && !isset($_SERVER['HTTP_AUTHORIZATION'])) {
                        $_SERVER['HTTP_AUTHORIZATION'] = $_SERVER['HTTP_XAUTHORIZATION'];
                }
```language

これでどうにか繋がるようになりました.
同じような環境はそこそこありそうですけどね….

Android から USB-TTL 経由でRaspberry Pi にアクセス

ふと,手元のUSB-TTLアダプタ(Prolific PL2303)とmicroUSBのホストケーブルでAndroidに繋げば普通に使えるのではと思って試してみました.

Raspberry Pi 側の接続.
赤の5Vは接続しなくても動きますが,接続すると少し給電されます.
IMG_20150212_163124

こんな感じに.
IMG_20150212_204416.jpg

Android側のアプリは10種類ほど試しましたが今回利用したProlific PL2303では以下の3つでデバイスを認識しました.Playストアを見た感じではFTDI対応のものが一番多そうでした.

という感じで実際利用できているのはUSB Serial Terminal Liteだけでした.

設定はBitrateの変更と文字コードの変更を行いました.
Screenshot_2015-02-12-20-39-28

デバイスの認識状態はこんな感じ
Screenshot_2015-02-12-20-24-12Screenshot_2015-02-12-20-24-19

そしてこんな感じで使えています
Screenshot_2015-02-12-20-22-35

使い勝手はあまり良くないですが,出先とかでちょっとコマンドを打ちたいときに良さそうです.

オープンソースカンファレンス2015大分に参加

オープンソースカンファレンス2015大分に参加してきました.今回は鹿児島らぐとして展示とLTをしてきました.

IMGP0266IMGP0295
展示はKobo Debian/Android, Raspberry Pi でRasinbowstream, Raspberry Pi 2 model B デモなどでした.Raspberry Pi ブースのような感じですが鹿児島でLinuxに関する活動をしている鹿児島らぐの展示でした.(…鹿児島らぐの説明よりもずっとたくさんRaspberry Pi のはなししてましたが)

IMGP0287

ライトニングトークはトップバッターでした.スライド終わりだけど残り時間どのくらいかなと確認しようとしたところでちょうど時間で偶然時間ピッタリで終わりました.大体近県?のイベントでの宣伝は出来たかなと思いますが,広島や四国でもできればやりたいところです.以下がその時のスライドです.

鹿児島らぐはじめました(オープンソースカンファレンス2015大分LT) from Kenichiro MATOHARA



その後懇親会に参加してホテルへ帰りました.
IMGP0350

次回の鹿児島らぐの県外のイベントは未定です….鹿児島でのイベントは「鹿児島Linux勉強会」を2/21(土)に開催予定です.詳細はWeb/ML等で確認してください.

そして開けて今日はOSC大分翌日観光があったのですがこれはまた別エントリで.



Raspberry Pi 2 model B が到着!

Raspberry Pi 2 model B を入手しました.
注文したのはRSオンライン( http://jp.rs-online.com/web/ )で 2015/02/02, 月曜日, 19:48
受け取りは 2/6 でした.
丁度大分に向かうので受け取れるか微妙だったので営業所止にしてもらい受け取ってから大分に向かいました.
IMG_20150206_194411IMG_20150206_194419
途中のバスの待ち時間に写真を撮ってみました.
IMGP0250
箱がカラフルに!
IMGP0251
IMGP0257IMGP0252
中身はぱっと見 Raspberry Pi model B+ と見分けが付かない感じ.
IMGP0253
RAM のChip が別れてウラ面に張り付いてました.
IMGP0254
IMGP0255IMGP0256
大分で起動してみると4Coreになったので Raspberry が4個!
IMG_20150207_092908
未だ出先なので家に帰ったら色々触ってみるつもりです :)

追記)
Element14 扱いだと箱も説明書も違うみたい.特に説明書.

AndroidでWardrivingを試す

Wardriving?

 Wardrivingはドライブしながら位置情報とWi-Fiの電波を拾うことでどこにどんなWi-Fi APがあるかを記録することを言います(多分).これまで初期の頃はThinkPad 240Z でNetworkStumbler やKismet を動かしながら自転車で走り回ったり,iPad の脱獄アプリで記録したり,最近ではRaspberryPi でKismet を動かして保存していました.

何が楽しいの?

 コミックマーケットではアクセスポイント名にネタを仕込んだネタAP がよく飛んでいるのでこれを見るのが楽しみです.今回RaspberryPi で設定を行い動かしていましたが,動作確認もしていなかったのでサブにAndroid のアプリがないか探したらWardrive というアプリケーションを見つけました.
 WiGlE( https://wigle.net/ )向けのアプリケーションで,WiGlE のアカウントを取得してアップロードすることも出来ます.アカウントを設定しなければアップロードされませんしデータの利用も可能です.
 実用的な使い方としてはログから契約している公共無線LANサービスのエリアを探すと言ったことが可能です.例えば https://wigle.net/ のmapページに移動して調べたい緯度経度に移動した後右側のSSIDに調べたいSSIDを入力して[Filter]ボタンを押すとWigleにアップロードされたデータの中から検索した結果が表示されます.

Wardrive の使い方

 利用方法はとても簡単で Wardrive を導入して起動した後 [START] SCANNING ボタンを押すと記録が始まり,GoogleMap を利用した地図上にアクセスポイント名がポイントされていきます.メニューの Export からto KML (Google Earth) を選ぶと端末のルートディレクトリに wardrive.kml として保存されます.
Wigle のアカウントを持っている場合は設定からアカウントとパスワードを保存したうえで,Export からto KML for WiGlE(and Uploa it)* を押すとKML ファイルの作成とWiGlE へのアップロードが行われます.

Screenshot_2015-02-08-00-51-00

 保存は KML 形式で行われてGoogleEarth などのアプリケーションで閲覧できます.アクセスポイント名を眺めたいだけであれば以下のようにしてAP名だけを抜き出すといいでしょう.

% grep name wardrive.kml | cut -c 18- | cut -d']' -f1| sort -n | uniq | lv

WiGLE を見に行ったらWardrive は公式アプリではないようです.

Wigle Wifi Wardriving が公式のようです.こっちだと設定でOSMのタイルマップが使えそうなのですがそれらしい設定の Use WiGLE OSM tiles にチェックを付けてアプリを再起動しても反映されません….

Screenshot_2015-02-08-02-16-06
Screenshot_2015-02-08-00-53-17
Screenshot_2015-02-08-02-16-14
Screenshot_2015-02-08-02-16-24
Screenshot_2015-02-08-02-16-42

 さて,肝心のネタAPですが,感度が悪いのかしきい値が厳しいのか去年よりも大分少なかったです.でも利用方法はすごくお手軽なのでおすすめです.次はRaspberry Pi を携帯電話のリチウムイオンバッテリーで動かしてコンパクトにパッケージングして運用できないか試してみようと思っています.




端末で動くTwitterClient Rainbowstream

確かOSSJで見かけて知ったのだと思うのですが,

端末上で動作するTwitterのRainbowstreamというソフトウェアを知りました.

ユーザーストリーム対応で端末上にユーザストリームや検索結果リストなどが表示できます.画像をアスキーアートで表示する機能もあります.

導入

pipで入る

$ sudo apt-get install python-pip python-dev
$ sudo pip install rainbowstream PySocks Pillow

初回起動時に認証のためブラウザが起動する.認証ご表示されたpinを端末に貼り付ける.認証情報は ~/.rainbow_oauth に保存されるので要らなくなったら消す.
無くても動くけど無いと設定変更が出来ないので設定ファイルの用意をする.

% wget https://raw.githubusercontent.com/DTVD/rainbowstream/master/rainbowstream/colorset/config -O /tmp/config
% mv /tmp/config ~/.rainbow_config.json

GNU Screen のウィンドウ分割モードだと崩れてしまうので,小さめのウィンドウに表示するといい感じです.以下の画像はawesome で端末を2つ表示してRainbowstreamを実行した端末を小さくしているところです.
20150202_07:02:05-608

画像のアスキーアート表示は楽しいのですが,一気にログが流れてしまうのでoffにしちゃいました.
自作のPerl Script で昔作ったものがあるのですが,Rainbowstreamのほうがカラフルで見た目がいい感じです.

DuckDuckGo を日本語環境で使う

DuckDuckGo という検索エンジンがあります.検索エンジンといえばGoogle一強という感じですがその分プライバシーがGoogleに筒抜けだったり蓄積されたりするのが嫌かもしれません(その分その人に合う検索結果が帰ってくるはずですが).それに対してDuckDuckGo はユーザプロファイルを作らず誰に対しても同じキーワードから同じ検索結果を返します.
DuckDuckGo使いたいけど日本語の情報が出てこないから使い物にならないって人が居たので日本語の検索結果を表示する設定が知られて無さそうということで最近使っている設定をメモしておきます.

https://duckduckgo.com/?q=keyword&kp=-1&kl=jp-jp&kc=1&kf=-1&kh=1&k1=-1
この例だと以下のように日本語の検索結果を返すようになっています.

q=検索キーワード
kp=-1 セーフサーチ無効
kl=jp-jp 日本向けの検索結果
kc=1 自動先読み有効
kf=-1 サイトアイコン有効
kh=1 https有効
k1=-1 広告無効

ブックマークツールバーなどに以下を登録しておくといい感じです.
https://duckduckgo.com/?q=keyword&kp=-1&kl=jp-jp&kc=1&kf=-1&kh=1&k1=-1

常用するなら以下のように規定の検索エンジンを差し替えてしまうといいでしょう.
Screenshot from 2015-02-06 06:54:45
Screenshot from 2015-02-06 06:55:20
Screenshot from 2015-02-06 06:56:17