• 8451阅读
  • 11回复

Sailfish SDK开发命令行简记 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2013-02-26
— 本帖被 feynman 从 Qt移动平台开发 移动到本区(2013-03-25) —
Sailfish SDK今日刚刚发布,下载下来试验了一下,安装时需要先安装VirtualBox(虚拟机软件),安装后,使用的是Qt Creator 2.6.2,开发时使用的是Qt 4.8.3和Qt Quick 1.1,打包使用的是rpm,SDK中包含了两个虚拟机(VM):


一个是MerSDK VM,里面是cross compile toolchains(在/opt/cross目录下),目前只自带了i486的版本,其它的还可以下载arm的各个版本的等。编译程序时实际上是在这个虚拟机上编译的,自己系统中的主目录在虚拟机启动时会挂载到MerSDK VM中的/home/mersdk目录下(mersdk用户主目录)。

另一个是SailfishOS VM,跑的是Sailfish手机操作系统。默认用户是nemo,软件安装在/opt目录下。

这两个虚拟机都可以通过证书登录:
  1. ssh -p 2222 -i ~/.ssh/mer-qt-creator-rsa root@localhost


  1. ssh -p 2222 -i ~/.ssh/mer-qt-creator-rsa mersdk@localhost


或者登录的是mersdk虚拟机,在里面/opt/cross/bin目录下有一大堆交叉编译工具链的文件:
  1. ssh -p 2223 -i ~/.ssh/mer-qt-creator-rsa nemo@localhost


登录的是sailfishos虚拟机,copy方式(就是不打rpm包)运行时程序默认安装在/opt/sdk目录下。

所以呢,编译时,需要启动MerSDK VM,执行时,需要启动SailfishOS VM。

基本搞清楚了,现在试验的都是i486的,arm的现在没试验,也没真机啊。
假设SailfishOS SDK安装在$SailfishOS目录下(不需要root安装),则下面的目录下有几个文件:
  1. $SailfishOS/share/qtcreator/MerProject/mer-sdk-tools/MerSDK/SailfishOS-i486-x86


qmake 、gcc、make、mv、mb等,都是shell脚本,脚本里面调用了merssh命令,来找到MerSDK虚拟机上的对应命令:
  1.     
  2. #!/bin/bash
  3. $SailfishOS/bin/merssh -sdktoolsdir $SailfishOS/share/qtcreator/MerProject/mer-sdk-tools/MerSDK -commandtype sb2 -mertarget SailfishOS-i486-x86 qmake $@

  1.     
  2. #!/bin/bash                                                                  
  3. $SailfishOS/bin/merssh -sdktoolsdir $SailfishOS/share/qtcreator/MerProject/mer-sdk-tools/MerSDK -commandtype sb2 -mertarget SailfishOS-i486-x86 make $@


而当前用户主目录,是被挂载到MerSDK虚拟机的/home/mersdk目录下的,所以当前用户目录下的项目文件等,也在MerSDK虚拟机的mersdk用户目录下可用。所以,假设自己现在写了个项目,执行过程如下:
  1. $SailfishOS/share/qtcreator/MerProject/mer-sdk-tools/MerSDK/SailfishOS-i486-x86/qmake -project
  2. $SailfishOS/share/qtcreator/MerProject/mer-sdk-tools/MerSDK/SailfishOS-i486-x86/qmake
  3. $SailfishOS/share/qtcreator/MerProject/mer-sdk-tools/MerSDK/SailfishOS-i486-x86/make

这样就能编译出最终结果了。或者进行如下操作:
  1.     
  2. export PATH=$SailfishOS/share/qtcreator/MerProject/mer-sdk-tools/MerSDK/SailfishOS-i486-x86:$PATH
  3. qmake -project
  4. qmake
  5. make

至于执行,则将当前开发程序scp拷贝到sailfishos虚拟机/opt/sdk对应目录下,然后ssh到sailfishos虚拟机上执行即可。

或者先打包(rpm,不过还没研究如何手工打包,应该还是需要集中mersdk虚拟机的吧),然后再scp到sailfishos虚拟机上,然后ssh到sailfishos虚拟机上去安装 ,然后执行。
  1. scp -P 2223 -i ~/.ssh/mer-qt-creator-rsa xxxx nemo@localhost:/home/nemo/
  2. ssh -p 2223 -i ~/.ssh/mer-qt-creator-rsa nemo@localhost


登录进去后,就可以执行/home/nemo/xxxx程序了。

至于rpm打包,估计跟MerSDK VM有关,后面再补充吧。


总的来说,由于使用了MerSDK VM方式作为编译系统的缘故,使得命令行编译过程变得简单了,但每次qmake/make编译都要merssh,这两个命令执行速度会有点影响。至于执行,都是VM,SSH登录,与其它系统相比也没什么不同的。

maemo/meego/harmattan是本地交叉编译,qemu Emulator执行。
bb10是本地交叉编译,VMWare Simulator执行。
sailfish则是VirtualBox MerSDK VM交叉编译,VirtualBox SailfishOS VM执行。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线sailfish

只看该作者 1楼 发表于: 2013-02-27
很不错的一贴 我这几天一直没有闹明白sailfish SDK 里面怎么两个虚拟机, 原来一个负责编译 一个负责运行虚拟系统用来执行编译后的程序,这样做似乎复杂了点吧,不如直接本地编译多省心,多搞出来一个虚拟机 难道是为了移植方便???可跨平台操作! 如果真是这样,看样子sailfish考虑的还真周全,开放联盟里有sailfish 恐怕以后会对andriod 和IOS 造成不小的影响。
离线sailfish

只看该作者 2楼 发表于: 2013-02-27
楼主我想问下这个sailifish可以用纯C++ 开发吗?
离线XChinux

只看该作者 3楼 发表于: 2013-02-27
可以。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 4楼 发表于: 2013-02-27
维护一个平台架构的SDK要比维护N个平台交叉编译工具链省心吧。这样三大桌面平台上只维护IDE即QtCreater插件和MaitanceTool就可以了。
这或许是将来的趋势。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线sailfish

只看该作者 5楼 发表于: 2013-02-27
回 4楼(XChinux) 的帖子
嗯 有道理,看样子sailifish 做的还挺超前 比 BB10 更有先进的思想哈哈!   不过楼主 我刚才用了下 标准的 C++ 程序 写了一个在命令终端显示的hello world  用sailfish SDK编译后 为什么说没有标准的 <iostream>
源代码如下
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
  cout<<"hello world"<<endl;
  getchar();
}


不知道楼主能否编一个简单的示例 展示下 在这个新环境下我编程一头雾水,我平时都是用linux的GCC 学习C 编程的。
离线XChinux

只看该作者 6楼 发表于: 2013-02-27
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线sailfish

只看该作者 7楼 发表于: 2013-02-28
回 6楼(XChinux) 的帖子
多谢指点迷津,远程SSH 登录 mersdk时 总是提示无法链接 错误代码如下 itnet@PC-20110526DIDJ:~$ ssh -p 2222 -i ~/.ssh/mer-qt-creator-rsa mersdk@localhost
Agent admitted failure to sign using the key.
Agent admitted failure to sign using the key.
Permission denied (publickey).
itnet@PC-20110526DIDJ:~$ ssh -p 2222 -i ~/.ssh/mer-qt-creator-rsa.pub mersdk@localhost
Agent admitted failure to sign using the key.
Agent admitted failure to sign using the key.
Permission denied (publickey).
itnet@PC-20110526DIDJ:~$ ssh -p 2222 -i ~/.ssh/mer-qt-creator-rsa root@localhostAgent admitted failure to sign using the key.
Agent admitted failure to sign using the key.
Permission denied (publickey).
itnet@PC-20110526DIDJ:~$ ssh -i ~/.ssh/mer-qt-creator-rsa mersdk@localhost -p 2222
Agent admitted failure to sign using the key.
Agent admitted failure to sign using the key.
Permission denied (publickey).
后来进入调试模式观看错误原因

itnet@PC-20110526DIDJ:~$ ssh root@localhost -p 2222 -v -i ~/.ssh/mer-qt-creator-rsa
OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
debug1: Connecting to localhost [::1] port 2222.
debug1: connect to address ::1 port 2222: Connection refused
debug1: Connecting to localhost [127.0.0.1] port 2222.
debug1: Connection established.
debug1: identity file /home/itnet/.ssh/mer-qt-creator-rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/itnet/.ssh/mer-qt-creator-rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.6
debug1: match: OpenSSH_5.6 pat OpenSSH_5*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA 08:2b:bc:09:14:1b:55:20:27:14:48:57:92:57:fa:5c
debug1: Host '[localhost]:2222' is known and matches the RSA host key.
debug1: Found key in /home/itnet/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/itnet/.ssh/mer-qt-creator-rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
Agent admitted failure to sign using the key.
debug1: Offering RSA public key: QtCreator/2013-02-26T20:49:54
debug1: Server accepts key: pkalg ssh-rsa blen 279
Agent admitted failure to sign using the key.
debug1: No more authentication methods to try.
Permission denied (publickey).

依然没有找到为什么ssh 无法链接 后来在国外的一个论坛上找到了 需要先先将SSH_AUTH_SOCK 变量值清空  使用 unset SSH_AUTH_SOCK

然后才能正常链接。 果然可以了  截图如下 itnet@PC-20110526DIDJ:~$ unset SSH_AUTH_SOCK
itnet@PC-20110526DIDJ:~$ ssh root@localhost -p 2223 -v -i ~/.ssh/mer-qt-creator-rsa
OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
debug1: Connecting to localhost [::1] port 2223.
debug1: connect to address ::1 port 2223: Connection refused
debug1: Connecting to localhost [127.0.0.1] port 2223.
debug1: Connection established.
debug1: identity file /home/itnet/.ssh/mer-qt-creator-rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/itnet/.ssh/mer-qt-creator-rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.6
debug1: match: OpenSSH_5.6 pat OpenSSH_5*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA 68:f2:02:16:8f:18:1e:bf:3d:e6:e7:df:80:23:1b:ea
debug1: Host '[localhost]:2223' is known and matches the RSA host key.
debug1: Found key in /home/itnet/.ssh/known_hosts:2
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/itnet/.ssh/mer-qt-creator-rsa
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to localhost ([127.0.0.1]:2223).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
[root@SailfishEmul ~]# exit
离线a1213125967

只看该作者 8楼 发表于: 2013-04-04
:-1: 错误:MerSDK: 连接被拒绝
:-1: 错误:SailfishOS Emulator: 连接被拒绝

楼主这错。。。。能给解决方案吗
离线XChinux

只看该作者 9楼 发表于: 2013-04-04
要将MerSDK和SailfishOS Emulator的虚拟机全启动起来。你先启动VirtualBox,然后在它里面将两个虚拟机全启动起来。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zxh1982a

只看该作者 10楼 发表于: 2013-04-09
我尝试安装 Sailfish SDK,两个虚拟机都运行起来了,还玩耍了一下虚拟机自带的demo,
但是我自己编写的程序死活都编译不成功,提示错误:Could not connect to Mer SDK Virtual Machine. Connection refused
看了楼主的帖子,是必须使用ssh连接到编译机上去自己编译吗? 我在windows上没有命令行。
我使用一个ssh客户端程序又连接不上去,不知道怎么搞了!楼主能否指导一下在windows下怎么运行自己的程序吗?
离线XChinux

只看该作者 11楼 发表于: 2013-04-09
Windows下的还没试验过, 那个ssh连接的话,得指定rsa key的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个