最近比較紅的一個 Cydia 問題是:
「Wow, you exceeded the number of package names this APT is capable of」的問題
如果你想解決這個問題,我會推薦你看 頭號哆啦迷 的這篇教學。
不過伴隨著的一個情況是,為甚麼在這個問題出現後,底下總是會有類似「Modmyi」出錯的訊息呢?
因為 Modmyi 隨之顯示出錯的原因,導致有些人對 Modmyi 有點誤解,而有了「刪除 Modmyi 就可以解決」的迷思。
不過,在這裡我關注的是,為甚麼出錯的總是「Modmyi」?
簡單研究一下之後,我得到了解答。
首先大家必須先知道,APT(Cydia 的 Source 機制)最多可以容許有 65536 個 Package (套件)
所以我們先來算一下內建的三大 Source 有多少個 Package 吧…
計算方法:從 Package List 裡面搜尋「Package: 」這個關鍵字,看有幾個搜尋結果。
以下是 2014 年 3 月 17 號的數據:
Bigboss:13545
Zodttd:13713
Modmyi:….哇是 22195 !
三大 Source 加起來是 49453 個 Packages,(內建的 Saurk source 加超雪只有 300 多個 Package,所以乾脆忽略不計)
再根據強力的計算 ,65535-49453 = 16082 ,這大概就是你可以再另外加的 Source 裡面所有 Package 的數量
再看下面的圖,兩個國外盜版源加起來約 13691 個 Packages,再隨便加兩個大陸盜版源就爆了
好,那講回重點,既然知道爆了,那為甚麼出錯的總是 Modmyi?
原因很簡單,APT 的機制會先抓完所有的 source,之後再 MergeList (合併所有列表)
一旦 Modmyi 的合併順序在比較後面,而前面已經合併超過了 65535-22195 = 43340 個套件資料的話,就會導致錯誤的是 Modmyi
(其實在 Modmyi 後面才合併的也會出錯,但是當出錯時就停止合併直接跳警告了,所以才會覺得 Modmyi 是兇手)
看不懂嗎?講個簡單的比喻,有個電梯限重 1000 公斤,Modmyi 這個胖子重 300 公斤,
一旦電梯快滿了才讓 Modmyi 進去,當然每次都會覺得是 Modmyi 讓電梯超重的。
但真的嗎?其實只要不要載那麼多人(不要加那麼多 Source),Modmyi 還是可以正常搭電梯的。
當然你也可以直接把 Modmyi 殺了,其他人就可以全部塞進去電梯裡面,但是 Modmyi 胖不是虛胖,
如果你哪一天需要他,或者其他人需要他(套件的 Depends 依賴)時,就會發生找不到套件的錯誤。
所以說… Modmyi 真的是無辜的,他只是肥了點而已,但當 APT 爆量時,常常犧牲的就是他…嗚嗚