作者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