作者leo80042 (方力偶)
看板iPhone
标题[教学] 重刷大绝招~自己架 source !!!
时间Sun May 30 00:15:05 2010
(本文同步发表於 iPhone4.tw 与 PTT-iPhone 版)
受到皮乐和 saurik 的教学启发
(范例请见
http://iphone4.tw/forums/showthread.php?t=80837 XD)
我决定把架 source 的(最简)过程完整写出来
这样以後大家要重刷会方便一点
不需要手动或用 rock 的 backup 等等方式
一个一个把 App 装回来
只要装自己的套件就行了!
但为了要解释清楚
文章会变得很长
还请各位多多包含~
架 source 需要以下技术和环境:
‧对 linux 和 jb (逃狱)有基本了解
‧一台 mac 或是装有 linux 系统的电脑( windows 下我没研究过...)
‧一支已 jb 的 iPhone/iPod/iPad
‧用 Cydia 或 Rock 装套件皆可
‧可以放网页的网路空间
因为门槛有点高,没有自信能掌握一切的人请不要轻易尝试
更不要寄信跟我求救
我可能也不会解决=.="
此外以下所有工作都要在 terminal 上完成
(除了把东西丢到网路空间时除外 XD)
最後,用 mac 的人需要先安装
fink 来处理 deb 档:
http://www.finkproject.org/download/srcdist.php
(连结里有档案下载和安装方式,基本上安装时都选 default 值就行了)
而且在进行以下工作前
请先执行
. /sw/bin/init.sh
来开启 fink 环境
也才能用 dpkg 相关指令!
ps. 用 linux 的话通常各个 distribution 应该都有内建,因此不必担心
整个过程分为两大部分
第一是
制作自己的套件
因为有人喜欢 jb 後只装几个特定 App
有人则喜欢装一大堆
我们不可能把所有想装的 App 的 deb 都抓下来
包在自己的套件里
一来工程浩大,二来不确定是否会有相冲问题
(有兴趣的人倒是可以自行试试看XD)
那我们该怎麽做呢?
答案是把想装的 App 都列在套件的 dependency 里
(要解释 dependency 得要花一些篇幅
所以才有我前面所说的第一条要求...)
如此一来当安装自己的套件时
就会把所有想装的 App 都装进去
而事实上我们的套件里也只有这个 dependecy 的资讯
并不会装任何其他东西
可以说是一种很乾净的安装方法
那麽应该要怎麽写 dependency 呢?
首先建立以下资料夹路径
~/TEMP/DEBIAN
注意"TEMP"是我们的工作资料夹
这只是一个方便作业的路径
所以依个人喜好可以随便乱取名字
但"DEBIAN"这资料夹则一定要有
且注意一定要大写!
建立好路径之後
用 vim (或任何文字编辑器)
在该路径里写一个叫
control 的档案:
vim ~/TEMP/DEBIAN/control
这个 control 档将会是我们自制套件里头唯一的档案
前面所说的 dependency 就会列在其中
为了快速进入状况
以下列出 backgrounder 的 control 档给大家参考:
Package: backgrounder
Name: Backgrounder
Version: svn.r447-1
Architecture: iphoneos-arm
Description: Enable and manage backgrounding
Homepage: http://iphone-backgrounder.googlecode.com/
Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=
backgrounder3Data
Maintainer: BigBoss <bigboss*thebigboss.org>
Author: Lance Fetters (ashikase) <gaizin*gmail.com>
Section: System
Depends: firmware (>= 3.0), firmware (<< 4.0), mobilesubstrate, libactivator
(>= 1.3.1)
dev: ashikase
Sponsor: thebigboss.org <http://thebigboss.org>
Installed-Size: 356
以下将依序解释各项含意
不过值得一提的是
如果套件只是要给自己用
几乎所有东西都可以乱写 XD
1.package: 这是套件 id,大家如果上 cydia/rock 看每个 App 都会有,
常见的会写成 com.xxxxx.xxx 这种形式,这是 cydia 认识套
件的方法,若取不同 id ,即使 Name 一样,cydia也会当成
不同的套件,所以要注意!
2.Name: 这才是实际上套件的名字
3.version: 套件的版本
4.Architecture: 这是判别此套件是否适用於特定 iPhone OS 的方法(但我不太
确定),给 OS 3.0 以上写 iphoneos-arm 就可以了(arm 其实
就是 iPhone 的处理器名称,是不是很眼熟啊?XD)
5.Description: 对套件的描述,到时也会出现在 cydia 里
6.Homepage: 套件的官方网站
7.Depiction: 如果没有在 control 档里头写详细的套件资讯的话,cydia
会到这个项目所列出的网址抓资料
8.Maintainer: 维持套件的人,"<>"里头写 email
9.Auther: 就是套件作者
10.Section: 此套件在 cydia 软体集里头的分类,像 backgrounder 跟系
统有关所以写 system
11.dev: (其实我不清楚是什麽=.="总之可以不写)
12.Sponsor: 赞助者,很多 cydia 上的 App 都是 BigBoss 赞助
13.Installed-Size:套件安装後的大小,也可以不写
如果各位有仔细看完以上描述
一定会觉得奇怪,为什麽漏掉了
Depends 没介绍
因为这是整个过程中最重要的部份
也就是开头所说的 dependency 要写的地方
大家可以看到这里列的都是套件 id
(也就是 package 这个项目所写的)
此外还能够指定要安装套件的版本
像 backgrounder 这个例子
就需要安装在 OS 3.x 上
还需要 1.3.1 版以上的 activator
所以安装 backgrounder 前
cydia 会先确定 OS 版本
然後装 mobilesubstrate 和 activator
这样大家应该就知道要怎麽写 dependency 了:
找出想安装的套件 id
然後通通列在 Depends 里
并以逗号分开
若有版本需求则另外写在括号里
可能有人会问
像 backgrounder 需要先装 mobilesubstrate 和 activator
那也要把这两个列在自己的 dependency 吗?
答案当然是不用
(否则就没完没了了,dependency 列到手软 XD)
因为装自己列的 App 前
cydia 就会分别去检查各个 App 的 depedency 了
所以其实我们在 Depends 这边要打的东西并没有很多
够懒人了吧? XD
(这其实也是为什麽 saurik 要用 Debian-APT 建立 cydia 的原因之一
因为 APT 有 dependency 这个超方便的管理套件方法 )
control 档写完之後
事实上工作已经完成一半了 XD
接下来第二阶段我们只需打包成 deb 档
并生出 cydia 看的懂的 repository (也就是 source)资讯
(mac 使用者注意在打包前还要先执行以下指令
export COPYFILE_DISABLE
export COPY_EXTENDED_ATTRIBUTES_DISABLE
这是因为 Mac OS 在制作 tar 或 zip 等压缩档时
都会自动在档案里放入一堆 ._* 的档案
据 saurik 的说法会和许多套件相冲
因此我们要把这个功能关掉)
打包指令是
dpkg -b ~/TEMP 套件名称.deb
注意套件名称要是英文或数字
待会还会用到
到此为止我们就完成自己的套件了!
此外我们要生出一个叫
Package.bz2 的档案
所有 source 资讯都包在这里头
cydia 每次连到我们的网路空间
就会去找这个档案
那麽要怎麽生呢?
首先我们需要执行一个叫
dpkg-scanpackages 的 script
但因为这个 script 里头少了 cydia 需要的几行字
我们得先编辑它
mac 使用者若在安装 fink 的过程中都使用预设值
这个档案应该会在
/sw/bin/ 里头
linux 使用者可能需要用 find 指令找找看
找到之後可用 vim 编辑它
找到
fieldpri 这个子项目後
按其格式加入
'Name', 'Auther', 'Homepage', 'Icon' 等等字串
然後存档离开
完成 dpkg-scanpackages 的编辑後
在 ~ (家目录,也就是存有 deb 的资料夹)底下执行
dpkg-scanpackages . /dev/null > Packages
来生出
Packages 这个档
如果成功的话会出现这个讯息:
Wrote 1 entries to output Packages file.
ps. 在 saurik 的网站上有提供他自己写的 dpkg-scanpackages
但执行他的档案还会需要一个叫 dpkg-gettext.pl 的档案
不知道为什麽我的 mac 里头没有
大家可以试试看
Packages 是一个文字档
里头除了存 control 档里头的讯息还写了其他 cydia 需要的资讯
不过若按照我写的步骤做到这里
应该需要修正里头
Filename 这一行
它告诉 cydia 我们的 deb 档放在网路空间的何处
不管它写了什麽(通常是多一个斜线)
该路径请改成
./套件名称.deb
否则会出错
(当然熟悉一切的人就可以乱改啦~知道自已在做什麽就好)
完成之後压缩它:
bzip2 Packages
我们就生出 Package.bz2 这个档案了!
最後一步请把 "套件名称.deb" 和 "Package.bz2" 加入自己网页空间的根目录下
(或是 public_html/ 底下,依各网页空间设定而有所不同 )
再到 cydia 里头加入 source
就大功告成啦!
(例如这两个档案如果放在
http://abc.com/public_html/ 里
则 source 要加入
http://abc.com/ )
另外,若有套件需要额外加入 source
请记得一并加入
所有列出的 dependency 资讯会出现在 cydia 按下 install 後的画面里
或是 rock 的套件资讯里
(老实说我比较喜欢 rock 这点....cydia 还得按进去看,好麻烦)
落落长的教学文终於到此结束了
第一次写教学文觉得好累 XD
希望有任何问题或意见可以提出来告诉我
另外以下两个是参考网页
http://iphone4.tw/forums/showthread.php?t=80921
http://www.saurik.com/id/7
应该会有所帮助
最後感谢皮乐的关键提示 XD
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.204.171.65
1F:推 ithildin:喔喔 皮乐那招! 教学赞耶 可是我没MAC orz 05/30 00:16
2F:→ leo80042:那就快点m起来吧 XDDD 在windows装虚拟机器灌linux也行~ 05/30 00:17
3F:→ leo80042:不然板主试试看在windows底下做吧~重点是弄出deb档 05/30 00:18
4F:→ leo80042:我晚点换台电脑再套色......不然版面还是太乱 Orz 05/30 00:18
5F:→ ithildin:等我成功了再回来M(转头) 05/30 00:18
6F:→ ithildin:改好说一下 我收精华 05/30 00:19
7F:→ leo80042:搞定啦!!! 05/30 00:53
8F:→ ithildin:让我想想这算进阶区还是越狱区XD 05/30 01:08
9F:→ leo80042:XD 05/30 01:34
10F:→ hkhbb323:参起来做进阶越狱区 05/30 01:35
11F:推 m0535:cool 05/30 01:36
12F:→ ithildin:请不要让变更复杂了XDD 我想这还是偏JB吧 05/30 01:37
13F:→ leo80042:进阶越狱区不错啊哈哈哈 XDDD 05/30 01:39
14F:→ ithildin:要是这种高深的越狱文多起来的话开个子区好了 05/30 01:45
15F:→ ithildin:毕竟等级远超过普通JB使用 XD 05/30 01:45
※ 编辑: leo80042 来自: 140.112.101.199 (06/03 11:57)
16F:→ leo80042:修改了几个错字和删自己的推文~ 06/03 11:58
17F:推 Sdany:很不错的文章。我个人也是有参考皮乐网页,及其它相关的网站 06/15 16:03
18F:→ Sdany:我是在XP下完全使用Cygwin(约250MB)来制作DEB相关文件 06/15 16:05