找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3753|回复: 6

[webOS开发] PreWare用ipk包打包方法

[复制链接]
发表于 2010-1-22 22:56 | 显示全部楼层 |阅读模式
目前除官方的以外,Preware和quickinstall是主要的软件来安装途径.
- T8 K' ^& F3 ?: N" k) r7 w; d9 b) O( \
因为这两个软件一直在更新,所以打包的方式也在变化..
# C  }; ?+ ~$ a! c/ R2 p/ B: z8 i& \3 M3 C( l. b
最方便的方式是利用preware出的build包.在linux目录下直接可以make出来.' _( P6 [7 R  R
/ w: f! R# Z5 _1 M" f$ j0 d: u; m0 a- Z
不过对于多数朋友来说相对麻烦一些,而且Linux机器不好找,虚拟机的话也有很多人不一定愿意去用.3 P, O: G* A1 \0 o. J2 V
除了这种方式以外,还可以利用我们的Pre来打包,
1 N% K2 ?1 P8 ~4 w6 o5 ]- w& g, Nwebos本身就是一个Linux内核的系统.所以常见的指令都是全的.
* X8 v9 F% ~# d  A9 o4 k- v/ S6 w! T( K3 @0 J) V# Q% i
以snowmonkey 老兄的中文短信为例:$ X+ k: d" N8 v2 U6 B7 g
附件里是一个我打出来的ipk文件.我们可以用7-zip软件把这个包解开.(7-zip软件可以在下载中心下载到,也可以在这里下载到http://www.7-zip.org/8 W' t4 N! D" u" ^3 M9 f4 r$ C
假设我们在电脑上建立一个临时目录,名为cnsms,然后把解压后的程序放在这个目录里.然后把里面的control.tar.gz和data.tar.gz分别解压后放在不同的目录下,可以在cnsms目录下得到这样的一个目录结构* p8 P! d  {3 w
cnsms: l* E- w, e9 N8 h: C0 L! j, ^
└─cnsms" w' M& v0 B) t* w. R, r
    │  debian-binary
9 [8 i  s2 c( E! m3 A    │  * K! L# x$ G  _
    ├─data
6 X6 U+ y5 N" U    │  └─ipktemp# E& [. M1 `/ K  K2 l
    │      └─media
* \- J: `* Q! Y$ C& z    │          └─internal
' r: ~& g2 }  i) o0 S    │              └─cnsmstemp
3 o, q) f* d$ x! g    │                  │  telephonyinterfacelayer1cdma.md5sums: T; }( ~  b9 G, g5 p' v0 A
    │                  │  TelephonyInterfaceLayerCdma( D8 M1 T8 e4 u; j
    │                  │  messagingrouter.jar6 o  l3 k* [; K- K/ n6 B, q
    │                  │  
& f" ^" r5 j- F3 m! m3 V    │                  └─usr2 `% B3 o! R# v2 |8 C
    │                      └─bin% K9 h8 I7 J$ D! H" _4 K
    └─control9 L) y  H0 c( W/ J
            control3 Y2 B( ?9 ]6 x) t
            postinst
* S, }* c# ~" G            postrm: I. {4 [6 [$ p9 h3 l
            prerm

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

×
回复

使用道具 举报

 楼主| 发表于 2010-1-22 23:18 | 显示全部楼层
上述目录中cnsmstemp以下的usr等目录是用来说明的.可以根据自己的情况建..
% v8 Z0 r/ g5 `  i# k* z& Q安装的时候系统自动把ipk解开,并运行相关的脚本sh! L7 i+ H+ u; v' q' _0 d; W
由于这样的补丁与标准的应用程序不同.所以需要用到postinst文件,实际上大多数的安装工作都是由postinst定义出来的.
5 j& A% s8 m. R' \! l6 p8 m
  ^" k. E% R3 ]) Hpostinst第一部分,主要是先检查在安装后这个ipk里的data包内的文件被放在什么地方了, 这是自动放置的.主要是两个位置,一是/media/cryptofs/apps/(目前的ROM多数在这里),另一个是/var/(早期的ROM是放在这里)
, Q7 @, O! h( h' f, h4 b, _, O6 P6 n) \/ G
因为不同的ROM这个位置是不一样的,所以用if语句判断一下,然后把data包里的文件夹移到根目录下,这时相关的文件都会在/media/internal目录下的cnsmstemp里了,根据文件目录的结构可以知道,这个位置我们可以自由定义.
  1. if [ -d /media/cryptofs/apps/ipktemp ]; then
    , D6 z; {# P% E* W
  2.         cp -fr /media/cryptofs/apps/ipktemp/* /
    / b9 U7 J. l4 L7 {) H# H
  3.         rm -fr /media/cryptofs/apps/ipktemp
    " i# ]8 T+ h% T) I; S4 c
  4. else9 x+ h' t- m! K6 g. `
  5.         cp -fr /var/ipktemp/* /0 X) N  [5 G: z  C( v
  6.         rm -fr /var/ipktemp
    ( M' T+ p8 }0 l' ?1 p
  7. fi# r8 e. w$ b8 b
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-22 23:28 | 显示全部楼层
接下来先把环境设定一下,这个对于很多操作并不是必需的,但是这样做可以避免很多错误.
  1. + ^3 T- P9 b9 m) G8 U; B
  2. rootfs_open -w
复制代码
主要的重头在这里.其实就是一些shell指令写成的脚本..相信很多人比我更熟悉如何写这些语句..
  1. #=setup: copy the files to special folder=
    ) u! h3 {0 d8 f8 v/ @: F3 U

  2. & M3 Q  N9 ~: A7 r, m* W. n. `
  3. cp -f /media/internal/cnsmstemp/TelephonyInterfaceLayerCdma /usr/bin/
    4 }! Z- h- b! [9 l; m
  4. chmod 755 /usr/bin/TelephonyInterfaceLayerCdma1 U. b4 z9 F& p! d, J0 w% o
  5. cp -f /media/internal/cnsmstemp/messagingrouter.jar /usr/lib/luna/java/
    8 _, ?5 Y/ M4 K+ o+ z
  6. cp -f /media/internal/cnsmstemp/telephonyinterfacelayer1cdma.md5sums /usr/lib/ipkg/info/2 B) S& d- l: r  F( Q  E3 A
  7. 0 H* A6 H" `6 `: h0 Z) n
  8. #=delet: remove the temp folder =  J0 g8 ^( W+ {4 L
  9. rm -fr /media/internal/cnsmstemp/
    8 R, Q2 s* A' L  D, q; ^( A+ z

  10. 0 _' X4 `. \4 O, {3 \5 I! l
  11. reboot! A$ M* k: u% L% F2 \7 O
复制代码
把这些都写好后,检查一下其他的几个脚本文件,control主要是用于说明ipk包的,可以按情况写一下
" ~* M1 `. V: i/ c% _9 s1 o
# r2 s$ a3 R/ W* g5 [其他的脚本目前说都是没什么语句的..如果需要删除功能一类的,可以对其他脚本文件进行定义.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-22 23:29 | 显示全部楼层
把Pre置于U盘模式,把整个cnsms目录copy到Pre的U盘根目录下.或是你自己建立的其他的目录也可以.
. O2 e6 S/ e! X4 t# D& s然后用指令把这个目录移出/media/internal目录,可以放到/media/目录下.因为/media/internal/目录的分区格式是FAT32.可能有部分操作会无效
6 W+ {! t8 \" p+ P: l- g
# |: V4 V% B, S; k9 v6 ~* p$ @+ q* `在cnsms目录下建立一个临时的文件夹ipk.供打包时放文件用
  M9 c! I+ u4 Q# B# D# {) q) u; u9 F% g+ Y
% h8 p: q; X  m# j# L; W7 ^8 K
先解决一下权限问题.这个会直接影响到将来是不是可以成功.
( k) w' I# u6 H8 R# h
: a4 [0 @8 Z: ]4 M1 M' a, n& V通过novaproxy和putty登录到Pre里.' R8 V# K5 N) Q, R
然后设置文件的属性
  1. cd /media/internal/cnsms
    $ H4 Y5 L* Y$ F- _: [; t9 B
  2. chown -R root ./*- f7 i" n) P7 w% l& R
  3. chmod -R 755 ./*' J% t; p& ]1 Z# N7 s
复制代码
打包文件
  1. cd control3 F9 l% ~+ V& ^' }7 T
  2. tar czvf ../control.tar.gz ./! J4 Q+ L* ^) V' ?3 f

  3. 2 ^+ {/ ]1 e& [) \2 R2 I
  4. cd ../data( Q8 I! ]8 S: t/ Z! z5 D
  5. tar czvf ../data.tar.gz ./
复制代码
把打出来的文件放到临时目录下,再对打好的包的属性进行设置..注意.属性设置是很必要的,否则可能打出来的包无法使用
  1. mv ./control.tar.gz ./ipk/
    % V* C( g- {9 @1 {
  2. mv ./data.tar.gz ./ipk/
    2 Q+ S: J' t9 z% \
  3. mv debian-binary ./ipk/2 E6 I; v6 E5 M% ?% {
  4. & ?) r9 E$ x4 D( J
  5. cd ipk5 \4 u3 C) P9 h6 B* M/ s: ^
  6. , D7 p! K. a' n/ q4 n' R  Z
  7. chown -R root ./*) G$ g6 c2 B- W$ K$ Y: ^
  8. chmod -R 755 ./*' f$ K& l2 y# E0 T$ W
复制代码
然后再最后进行打包..文件名可以自己指定.
  1. tar czvf ../wrapped.ipk ./
复制代码
就ok了..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-22 23:45 | 显示全部楼层
再把Pre置于U盘模式.把打好的包COPY出来改个名字.适应标准的定义方式..
; q# y% A. q3 P  S3 l2 q1 U
( ~$ q0 F( E, q( T$ R2 ^7 J也可以在本机上测试一下.
. l/ @: f1 R/ Z: }7 W( D7 c  z! z/ Q8 s8 \  \
附:本贴PDF格式文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

×
回复 支持 反对

使用道具 举报

发表于 2010-1-23 00:10 | 显示全部楼层
学习了。。。。好像上次我试的命令差别不大啊,但是为啥不行呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-23 09:52 | 显示全部楼层
我个人觉得,这中间需要注意的几个方面:! K) ~3 s" m& _  Q
一是系统性的补丁类是不能直接放在相对目录下解过去的..需要解开后由postinst文件移动到相应的位置上% h3 g) r4 d( i2 l% x; n! w" t
0 f- }9 S/ E, L' r# X
二是很多目录和文件的权限影响了打包后的效果.比如有时有一些文件经过在不同系统,不同机器上几次转移后,所有者身份不是root,或是属性不再是755(或777),那么打包后在执行的时候就很可能会出错.- m0 z/ T  [) \" y; E: L% J; F

' m: m1 k5 c* f根据目前的情况.在Pre里打包定制ROM应该也是可行的.不过还没有具体测试.回头试一下.只要需要注意文件格式.
9 Q# r* B3 `( V: d# E/ G: [
/ L' H( ~7 S: F: c6 i0 _+ V' R/ v) x. o/meia/internal用的是FAT32的格式换到其他的目录就可以了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

QQ|Archiver|手机版|小黑屋|吹友吧 ( 京ICP备05078561号 )

GMT+8, 2025-1-13 07:43 , Processed in 0.311575 second(s), 17 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表