[教學] 重刷大絕招~自己架 source !!!

看板iOS作者 (方力偶)時間14年前 (2010/05/30 00:15), 編輯推噓3(3015)
留言18則, 5人參與, 最新討論串1/1
(本文同步發表於 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

05/30 00:16, , 1F
喔喔 皮樂那招! 教學讚耶 可是我沒MAC orz
05/30 00:16, 1F

05/30 00:17, , 2F
那就快點m起來吧 XDDD 在windows裝虛擬機器灌linux也行~
05/30 00:17, 2F

05/30 00:18, , 3F
不然板主試試看在windows底下做吧~重點是弄出deb檔
05/30 00:18, 3F

05/30 00:18, , 4F
我晚點換台電腦再套色......不然版面還是太亂 Orz
05/30 00:18, 4F

05/30 00:18, , 5F
等我成功了再回來M(轉頭)
05/30 00:18, 5F

05/30 00:19, , 6F
改好說一下 我收精華
05/30 00:19, 6F

05/30 00:53, , 7F
搞定啦!!!
05/30 00:53, 7F

05/30 01:08, , 8F
讓我想想這算進階區還是越獄區XD
05/30 01:08, 8F

05/30 01:34, , 9F
XD
05/30 01:34, 9F

05/30 01:35, , 10F
參起來做進階越獄區
05/30 01:35, 10F

05/30 01:36, , 11F
cool
05/30 01:36, 11F

05/30 01:37, , 12F
請不要讓精華區變更複雜了XDD 我想這還是偏JB吧
05/30 01:37, 12F

05/30 01:39, , 13F
進階越獄區不錯啊哈哈哈 XDDD
05/30 01:39, 13F

05/30 01:45, , 14F
要是這種高深的越獄文多起來的話開個子區好了
05/30 01:45, 14F

05/30 01:45, , 15F
畢竟等級遠超過普通JB使用 XD
05/30 01:45, 15F
※ 編輯: leo80042 來自: 140.112.101.199 (06/03 11:57)

06/03 11:58, , 16F
修改了幾個錯字和刪自己的推文~
06/03 11:58, 16F

06/15 16:03, , 17F
很不錯的文章。我個人也是有參考皮樂網頁,及其它相關的網站
06/15 16:03, 17F

06/15 16:05, , 18F
我是在XP下完全使用Cygwin(約250MB)來製作DEB相關文件
06/15 16:05, 18F
文章代碼(AID): #1C0JsClS (iOS)