Install Sailfish SDK Emulator on CZC P10T Tablet PC (tegav2/Viewpad10)

暇村さんが、↓やるのに、ONKYOタブレットが安く入手できないかみたいな話をしていた。
Install Sailfish SDK Emulator on ExoPC
https://wiki.merproject.org/wiki/Sailfish/Exopc
手順を見ると、Mesa使っているようだし、タッチだけ調整してやればPC選ばないんじゃないかと。
というわけで、手元のタブレットで入れてみる。
まぁ、こんな第四極以下は、誰も興味ないだろうけど。


まず、vdiイメージをもらってこないといけないのだけど、直接配布はしてないみたい。
なんか、runという拡張子の付いた妙なファイルを配っている。
自己展開のシェルアーカイブのようなものかな?
https://sailfishos.org/develop-installation-article.html
32bit版と64bit版がある。
今回は確か64bitは動作しないターゲットのような気がするので、32bit版をもらってくる。

kinneko@BuildSV:/work/sailfishos$ wget http://jolla.cachefly.net/SailfishOSSDK/alpha/installers/SailfishOSSDK-linux-32-offline.run

通常、実行権限を与えて実行すると、virtualboxが起動することになるようだ。
開発環境で、無闇と実行ファイルを動かしたりしたくない。
vdiがほしいだけなので、展開方法を検討する。

kinneko@BuildSV:/work/sailfishos$ file SailfishOSSDK-linux-32-offline.run
SailfishOSSDK-linux-32-offline.run: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

うげ、ELFバイナリじゃないの。
実行するしかないか。
UIなくてもいいのかな?

kinneko@BuildSV:/work/sailfishos$ chmod +x SailfishOSSDK-linux-32-offline.run
kinneko@BuildSV:/work/sailfishos$ ./SailfishOSSDK-linux-32-offline.run
SailfishOSSDK-linux-32-offline.run: cannot connect to X server

UIないとダメなのね。
しょうがないので、コンソールログインしてX起動し実行する。


GTKっぽいセットアップウィザードが表示される。
http://farm9.staticflickr.com/8519/8549820719_2840dd53a8.jpg
インストールする場所を決める。
http://farm9.staticflickr.com/8229/8549820747_774ec9bd1f.jpg
ライセンスの確認画面。
http://farm9.staticflickr.com/8247/8550920022_30b4dd5889.jpg
acceptにチェックして進む。
http://farm9.staticflickr.com/8089/8550920084_a780ba90e7.jpg
インストールの最終確認。
http://farm9.staticflickr.com/8520/8550920124_d0332664c3.jpg
詳細ボタンがあるので押してみた。
http://farm9.staticflickr.com/8243/8550920164_b444801acc.jpg
http://farm9.staticflickr.com/8241/8549821011_6438353910.jpg
installボタンでインストール開始。
http://farm9.staticflickr.com/8112/8549821071_4ab9802791.jpg
完了画面。
http://farm9.staticflickr.com/8238/8550920284_14c7336849.jpg
IDEのチェック入れたままにしておいたら、Qtcreatorが起動してきた。
http://farm9.staticflickr.com/8380/8549821197_4ac4dd75d3.jpg
すぐに終了。
インストーラーとしてはよくできているかもね。


インストールされたものを確認してみる。

kinneko@BuildSV:/work/sailfishos$ ls -al ~/SailfishOS/
total 27848
drwxr-xr-x 12 kinneko kinneko 4096 Mar 12 22:08 .
drwxr-xr-x 91 kinneko kinneko 4096 Mar 12 22:59 ..
-rw-r--r-- 1 kinneko kinneko 63260 Mar 12 22:08 InstallationLog.txt
drwxr-xr-x 2 kinneko kinneko 4096 Mar 12 22:06 Licenses
-rwxr-xr-x 1 kinneko kinneko 22863028 Mar 12 22:08 SDKMaintenanceTool
-rw-r--r-- 1 kinneko kinneko 5517945 Mar 12 22:08 SDKMaintenanceTool.dat
-rw-r--r-- 1 kinneko kinneko 5049 Mar 12 22:08 SDKMaintenanceTool.ini
drwxr-xr-x 3 kinneko kinneko 4096 Mar 12 22:07 additionaltools
drwxr-xr-x 10 kinneko kinneko 4096 Mar 12 22:06 bin
-rw-r--r-- 1 kinneko kinneko 3592 Mar 12 22:08 components.xml
drwxrwxr-x 2 kinneko kinneko 4096 Mar 12 22:08 documentation
drwx------ 4 kinneko kinneko 4096 Mar 12 22:07 emulator
drwx------ 3 kinneko kinneko 4096 Mar 12 22:06 examples
drwxr-xr-x 4 kinneko kinneko 4096 Mar 12 22:06 ifw
drwxr-xr-x 3 kinneko kinneko 4096 Mar 12 22:06 lib
drwxrwxr-x 6 kinneko kinneko 4096 Mar 12 22:07 mersdk
-rw-r--r-- 1 kinneko kinneko 362 Mar 12 22:08 network.xml
drwxr-xr-x 3 kinneko kinneko 4096 Mar 12 22:06 share

なんだかよくわからん。
mersdk, qtcreator, emulator, share/qtcreator, lib/qtcreator, examplesという感じの構成。
vidはここにあった。

kinneko@BuildSV:/work/sailfishos$ ls -alh ~/SailfishOS/emulator/sailfishos.vdi
-rw-rw-r-- 1 kinneko kinneko 874M Mar 12 22:08 /home/kinneko/SailfishOS/emulator/sailfishos.vdi

ほしいのは、vdiだけなので、あとはお掃除。

kinneko@BuildSV:/work/sailfishos$ mv ~/SailfishOS/emulator/sailfishos.vdi ./
kinneko@BuildSV:/work/sailfishos$ rm -rf ~/SailfishOS/

raw形式への変換。

kinneko@BuildSV:/work/sailfishos$ VBoxManage internalcommands converttoraw sailfishos.vdi sailfish.raw
Converting image "sailfishos.vdi" with size 2098200576 bytes (2001MB) to raw...
kinneko@BuildSV:/work/sailfishos$ ls -alh sailfish.raw
-rw------- 1 kinneko kinneko 2.0G Mar 12 23:24 sailfish.raw

2GBとは無駄にデカいな。
というわけで、2GB以上のUSBメモリを用意しないといけなくなった。
4GBのものを見つけたので、それを使うことにした。


rawイメージデータの書き込み。

kinneko@BuildSV:/work/sailfishos$ sudo dd if=sailfish.raw of=/dev/sdc bs=4M
500+1 records in
500+1 records out
2098200576 bytes (2.1 GB) copied, 292.906 s, 7.2 MB/s

オリジナルにはsyncがあるけど、ddでsyncはいらないような。


一回抜いて、USBメモリ上のextlinuxの設定を変更する。

kinneko@BuildSV:/work/sailfishos$ sudo fdisk -l /dev/sdc

Disk /dev/sdc: 4110 MB, 4110417920 bytes
4 heads, 32 sectors/track, 62720 cylinders
Units = cylinders of 128 * 512 = 65536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00028f7e

Device Boot Start End Blocks Id System
/dev/sdc1 * 1 32000 2047999+ 83 Linux

なんだこのベタっとした1パーティション
なかみは普通なLinuxっぽい配置。

kinneko@BuildSV:/work/sailfishos$ sudo mount /dev/sdc1 /media
kinneko@BuildSV:/work/sailfishos$ ls -al /media/
total 100
drwxr-xr-x 22 root root 4096 Feb 23 01:16 .
drwxrwxrwx 27 root root 4096 Feb 8 14:13 ..
drwx------ 2 root root 4096 Feb 23 01:16 .ssh
drwxr-xr-x 2 root root 4096 Feb 23 01:16 bin
drwxr-xr-x 3 root root 4096 Feb 23 01:16 boot
drwxr-xr-x 3 root root 4096 Jul 30 2012 dev
drwxr-xr-x 64 root root 4096 Feb 23 01:16 etc
drwxr-xr-x 3 root root 4096 Feb 23 01:16 home
drwxr-xr-x 10 root root 4096 Feb 23 01:16 lib
drwx------ 2 root root 16384 Feb 23 01:13 lost+found
drwxr-xr-x 2 root root 4096 Jul 30 2012 media
drwxr-xr-x 2 root root 4096 Jul 30 2012 mnt
drwxr-xr-x 3 kinneko root 4096 Feb 23 01:16 opt
drwxr-xr-x 2 root root 4096 Feb 23 01:13 proc
drwxr-x--- 2 root root 4096 Feb 23 01:14 root
drwxr-xr-x 10 root root 4096 Feb 23 01:16 run
drwxr-xr-x 2 root root 4096 Feb 23 01:16 sbin
drwxr-xr-x 2 root root 4096 Jul 30 2012 srv
drwxr-xr-x 2 root root 4096 Feb 23 01:13 sys
d-wxr----t 2 root root 4096 Feb 23 01:16 tmp
drwxr-xr-x 12 root root 4096 Feb 23 01:14 usr
drwxr-xr-x 17 root root 4096 Feb 23 01:14 var

編集。

kinneko@BuildSV:/work/sailfishos$ sudo vi /media/boot/extlinux/extlinux.conf

デフォルトで24line。

prompt 0
timeout 1

default vesamenu.c32
menu autoboot Starting MerDevice...
menu hidden


menu title Welcome to MerDevice!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color timeout_msg 0 #ffffffff #00000000
menu color timeout 0 #ffffffff #00000000
menu color cmdline 0 #ffffffff #00000000
label merdevice0
        menu label MerDevice (3.6.11-8.1)
        linux vmlinuz-3.6.11-8.1
        append ro root=/dev/sda1 quiet
        menu default

起動ドライブを変更。rootwait入れて、quietは抜く。

append ro root=/dev/sdb1 rootwait

アンマウントしておく。

kinneko@BuildSV:/work/sailfishos$ sudo umount /media/


起動してみる。
USBキーボードを接続する。
AMI BIOSなので、F11で起動ドライブを選ぶモードになる。
USBメモリを選んで起動する。
sshのキーがダメとか、splashが出せないとかエラーは出している。

target Graphical Interface.

のあと、USBメモリはチカチカしているものの、先に進まなくなった。
UI描画はできないので、あたりまえだけど。
Ctl+Alt+F2でコンソールに落ちた。
USBメモリはまだチカチカしたまま。
裏でフレームバッファをいじっているようで、時々コンソールがフラッシュする。
rootでログインできる。パスワードはnemo。


パッケージをいくつか導入する必要があるので、WiFiを有効にする。

$ cd /usr/lib/connman/test
$ ./test-connman enable wifi
wlan0: link is not ready

APのリストを見る。

$ ./test-connman list

リストに接続するAPが出ない場合は、scanやりなおしてみると書いてある。

$ ./test-connman scan
'scan' takes two arguments

と出るわ。
後ろにtypeを入れないといけないみたいね。
なんじゃこりゃ。
これ以上のヘルプはない。


とりあえず、WEPで接続してみる。
しかし、これがめんどくさい。
コンソールは英語キーボード配列なので注意。

$ ./simple-agent Name=0ACE87B21863D Passphrase=mogemo
vpnd is connect to system bus
vpn agent registered
Release VPM agent
vpnd is dissconnected from system bus

コンソール奪われたよ。
simple-agentはpythonで書かれているようだ。
別のターミナル開いて作業するのか。
Ctl+Alt+F3を押す。
接続には、リストに出てくる長い長いAP名称を入れないとダメみたい。ううう。
それに、こっちのコンソールでは、デバイスつかまれてて表示できないときた... orz

$ ./test-connman connect wifi_e0b9a5463545_30414345383742323138363344_managed_wep

キャプチャできないけど、ゾロとログが出た。
F2のほうは走らせたままにしておくようだ。
ifconfigしてみると、確かに接続できているのがわかる。


sshできるというが、どうだろう。
psしてみたが、sshdは起動していないようだ。
inted的なスーパーバイザが起動するのかな?
/etc/ssh/ssh_configを編集してみる。

$ vi /etc/ssh/ssh_config

Port 22
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
PermitEmptyPasswords no

追記してみる。

$ systemctl stop sshd.service
$ systemctl start sshd.service

同じだねぇ。
めんどくさいのでリブートした。
再起動したら、無線は再接続しているようだ。


sshできぬので、手動で行く覚悟した。
x86-generic adaptationから2つのパッケージをダウンロードする。
https://build.merproject.org/project/show?project=home%3Avgrade%3Abranches%3Anemo%3Adevel%3Ahw%3Ax86-common

mesa-x86-generic
xorg-x11-drv-intel

zypperのお勉強。arはaddrepoでリポジトリの追加。

$ zypper ar http://repo.merproject.org//obs/home:/vgrade:/branches:/nemo:/devel:/hw:/x86-common/latest_i586/home:vgrade:branches:nemo:devel:hw:x86-common.repo
not found on medium 'http://repo.merproject.org/'

できないと思ったら、resolve.confが未定義だよ。
書く。
まだ出られない?
って、ことはgwも未定義なのか。

$ route add default gw 192.168.1.1
SIOCADDRT: File exist

違うか。
出るのは問題なくなったが、まだリポジトリが見つからないという。
スラッシュ一個多い感じの削る。
同じ。


しょうがないので、設定に直接書く。

$ vi /etc/zypp/repos.d/home_vgrade_branches_nemo_devel_hw_x86-common.repo

[home_vgrade_branches_nemo_devel_hw_x86-common]
name=Branch project for package mesa-x86-generic (latest_i586)
type=rpm-md
baseurl=http://repo.merproject.org/repositories/home:/vgrade:/branches:/nemo:/devel:/hw:/x86-common/latest_i586/
gpgcheck=1
enabled=1

$ zypper search reposしたら署名ないけど加えるか聞いてきた。
yesして加える。
加えてもリストには出てこないのね。
そんなもんか。

$ zypper in mesa-x86-generic-9.0.2
$ zypper in xorg-x11-drv-intel-2.21.3

パッケージ入った。
おお、なんか最初の画面が黒いままだけど、ちょっとfb動いたような感じ。
LEDチカチカの頻度も下がった。


残りの微調整をやる。

$ rm /usr/lib/egl/egl_gallium.so

st.soはなかった。


/usr/lib/systemd/lipstick.serviceとドキュメントにはあるが、これはPath間違い。

$ vi /usr/lib/systemd/user/lipstick.service

末尾に追記したらいいようだ。

Environment=QT_DEFAULT_RUNTIME_SYSTEM=

$ vi /var/lib/environment/nemo/50-jolla-ui

これも末尾に追記。

EGL_PLATFORM=x11
EGL_DRIVER=egl_dri2
MCOMPOSITOR_USE_TFP=1

$ rm /etc/sysctl.d/vm.conf
$ rm /etc/X11/xorg.conf.d/x86-vm.conf
$ vi /etc/X11/xorg.conf.d/xorg.conf

んで、何を書く?
何も書かないで再起動してみた。
なんかマウスポインタとスプラッシュのカジキマグロが出るぞ。
そこから先は何もおきない。
なんか、放置してたら、×カーソル出て、カジキが左に出ることあったな。
その後すぐにブラックアウト。
X裏で頑張っているのかも。
またしばらく放置したら、カジキと×がまた出てきた。
×はタッチに追随するので、デバイス認識はちゃんとしているようだ。
もう一息かな。
さらに放置したらまた出てきた。
カジキの絵は、カーソルが矢印で、縦ドラッグするとスクロールして時刻などが出る。
右の部分では、カーソルが×になるので、こっちはXの領域。
つまり描画領域がうまく認識できていない。
放置したら、またブラックアウトした。


サイズあわせてみる。

$ /usr/lib/qt4/imports/Sailfish/Silica/ApplicationWindow.qml
width: 1024
height: 600

全画面来た!
なんか、効果音も出ているな。
が、ブラックアウトしちゃった。
ん、LCD切っているだけかな?
電源ボタン一回軽く押すと必ず出てくるってことは、LCDスリープしてるってことか。
なんか、1分に一回くらい、自然に起きてまた寝る。
なんだ?


あとは、xorg.confか。
$ Xorg -configureしてみる。
サーバーはすでにアクティブだからできないか。
たぶん、こんなんでいいと思うけど、コピペできないんで入力がつらい。

Section "Monitor"
Identifier "Default Monitor"
HorizSync 30-100
VertRefresh 20-160
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Default Monitor"
DefaultDepth 24 
SubSection "Display"
Depth 24
EndSubsection
EndSection
Section "Device"
Identifier "Videocard0"
Driver "intel"
Option "AccelMethod" "sna"
EndSection
Section "Module"
Load "glx"
Load "dri"
EndSection
Section "DRI"
Mode 0666
EndSection


ローテーションの例。試してない。
https://wiki.merproject.org/wiki/Sailfish/Exopc

$ gconftool-2 --set /desktop/jolla/components/screen_rotation_angle --type int 90

nemoでログインしているときだけか。