Firefox for U3 自製更新版心得
Firefox for U3 目前還是只有 2.0.0.4 版,雖然說安裝之後多次服用內建的「更新」功能就可以一路升級到最新版的 Firefox,但是我想一定有人跟我一樣,會有這樣的擔心或需求:
- 萬一哪一天 Mozilla 基金會倒掉了,我沒得更新,怎麼辦?
- 萬一我被困在沒有聯外網路的環境中,但是又需要新版的 Firefox 來瀏覽內部網路中的網頁,怎麼辦?
- 萬一我非用不可的擴充套件在最新版的 Firefox 當中會爛掉,所以我一定祇能用沒那麼新的版本的 Firefox,而這個版本又會被內建的「更新」功能跳過,怎麼辦?沒有擴充套件可用的 Firefox 就沒價值了啊!
為了解決這樣的需求,首先我們要先瞭解 Firefox 是怎麼更新的。當我們使用 Firefox 內的「更新」功能時,它並不是去取得完整的 Firefox 安裝檔來重新安裝,而是去取得一個 MAR (Mozilla ARchive) 格式的更新檔案,這個檔案會描述所有該更動(新增、刪除、修改)的檔案,以及這些更動的實際內容,然後利用隨附在 Firefox 內的 updater.exe
更新程式來進行更新,最後並利用隨附在 Firefox 內的 helper.exe
來顯示更新完成的網頁。
好消息是,上述這些事我們也可以手動來做。幾乎所有你該知道的事都寫在 Mozilla 基金會的圍紀頁面「手動安裝 MAR 檔」內。不過這裡有幾個細節要再次提醒:
- 務必使用完整 (complete) 的 MAR 檔來進行更新,不要使用局部更新檔 (
.partial.mar
),以免更新失敗。 - 因為 U3 是 Windows 上的,所以應該一律取用 Windows (win32) 版的 MAR 檔。
- 因為原本的 Firefox for U3 是英文版,所以手動製作新版時,應該一律取用英文 (en-US) 版的 MAR 檔。
- 「一次到位」的更新方法可能會失敗,所以最好還是先更新到相同主要版本的最後一版,然後更新到下一個主要版本的第一個版本,再往該主要版本的最後一版……這樣的方式邁進。實際上來說,可以採取的更新路徑應該是 2.0.0.4→2.0.0.20→3.0.0→3.0.19→3.5.0→3.5.9→3.6.0→3.6.2 這樣。
- 官方的 http://releases.mozilla.org/pub/mozilla.org/firefox/releases/ 目錄幾乎只會留每一個主要版本 (3.0.x, 3.5.x, 3.6.x) 的最後幾個版本,因此無法從這裡取得這些主要版本的「第一個版本」;所幸許多下載映像 (mirror) 站都會留著這些不同的次要版本,所以你可以觀察一下下載 Firefox 時的映像路徑,或者用搜尋引擎搜尋檔名,把所需的 MAR 檔找出來。
- 如果你在 Win7/Vista 底下,需要用系統管理員權限來執行更新動作,才會成功。
那麼,現在就讓我們來開始動手吧!首先要準備好下列的東西:
- 從 Firefox for U3 取得的 2.0.0.4 版原始
firefox.u3p
檔案。 - 從 http://dm-download02.mozilla.org/pub/firefox/releases/ 取得的一系列 MAR 檔,包括
firefox-2.0.0.20.complete.mar
、firefox-3.0.complete.mar
、firefox-3.0.19.complete.mar
、firefox-3.5.complete.mar
、firefox-3.5.9.complete.mar
、firefox-3.6.complete.mar
、firefox-3.6.2.complete.mar
,這些檔案應該都會位於對應版本的 update/win32/en-US/ 目錄內。 - 任何一個可以壓縮及解壓縮
zip
的軟體,請確認你使用的是「zip」格式,而不是7z
(7-zip 的格式)、zipx
(WinZip 12 版以後的新的預設格式)等,否則最後的 U3 安裝檔會無法使用。 - 任何一個純文字編輯軟體。可以協助你處理 XML 的更好,但不是必要。
檔案準備好後,就開始動手吧:
- 建立一個目錄,例如
C:\fxu3\
- 用可以解 zip 壓縮檔的軟體,把你的
firefox.u3p
檔案「解壓縮」到步驟 1.
的目錄內。沒錯,任何 u3p 檔案其實都是 zip 格式的壓縮檔。 - 建立另一個目錄(這很重要!),例如
C:\fxupdater\
- 從
C:\fxu3\Device\firefox\
裡面把updater.*
全部複製到C:\fxupdater\
裡面。Firefox 2.x、3.0.x 的話,會是updater.exe
和updater.ini
兩個檔案,Firefox 3.5.x 之後除了updater.exe
和updater.ini
兩個檔案外,還要多複製一個update.locale
檔案過去 - 把要使用的 MAR 更新檔複製到
C:\fxupdater\
裡面,並且把檔名改為 update.mar(這很重要!) - 叫出命令列(也就是執行
cmd.exe
),別忘了權限問題。 - 切換到
步驟 1.
的目錄中,實際有firefox.exe
的目錄。換句話說,你應該會用到像這樣的指令:c:
cd c:\fxu3\Device\firefox - 執行更新指令。如果你的 Firefox 目前(也就是更新前)還在 3.0.x 或 2.x 的版本的話,要用這樣的指令:
c:\fxupdater\updater.exe c:\fxupdater\ 0
如果你的 Firefox 目前(也就是更新前)是 3.5 以後的版本,則要用這樣的指令:c:\fxupdater\updater.exe c:\fxupdater\
(兩個指令只差在最後面有沒有一個空格
跟一個數字0
) - 更新執行完畢後,繼續下達下列指令:
type c:\fxupdater\update.status
這個指令會顯示出update.status
的內容,如果顯示出來為「succeeded」,就表示成功套用更新了。如果是其他內容,則表示一定哪裡有錯,需要進一步排除。如果遇到錯誤的話,可以查看update.log
檔案的內容,協助除錯。 - 確認成功套用更新後,繼續下達下列指令:
copy /Y c:\fxupdater\update.log c:\fxu3\Device\firefox\uninstall\uninstall.update
這個指令會把update.log
複製到 Firefox 主程式所在路徑的uninstall
目錄中,並且更名為uninstall.update
;如果原本就有uninstall.update
存在的話,則會覆蓋過去。 - 最後用這個指令離開命令列:
exit
- 還沒結束,用純文字編輯軟體,開啟
c:\fxu3\Manifest\manifest.u3i
檔案,這是個 XML 格式的純文字檔。 - 在檔案第二列有個 <application uuid="3C9F7B3F-D55C-42cd-8537-B878518B73AF" version="2.0.0.4">,最後面的 version="2.0.0.4" 就是我們的目標,把它改成更新後的版本號,例如
2.0.0.20
、3.0.0.0
、3.0.0.19
、3.5.0.0
、3.5.0.9
、3.6.0.0
、3.6.0.2
等,然後存檔,關閉。 - 用 zip 格式,把
c:\fxu3\
目錄內的四個子目錄(Data
、Device
、Host
、Manifest
)壓縮成一個firefox.zip
壓縮檔;請注意,壓縮檔內應該就直接是上述四個目錄,而不會有「fxu3
」這個目錄存在。 - 把
步驟 14.
取得的firefox.zip
檔案更名為 firefox.u3p,也就是把副檔名從.zip
變更為 .u3p,如此就獲得了新版的 Firefox for U3 安裝檔了。最後並把步驟 1.
和步驟 3.
建立的目錄清乾淨。(這個時候請注意,別把剛做出來的firefox.u3p
也一併刪除啦!) - 用
步驟 15.
獲得的firefox.u3p
取代步驟 2.
的,重複步驟 1.
到15.
,就可以製作出各個不同版本的 Firefox for U3 安裝檔。
就這樣,很簡單吧!如果你懶得自己來,心臟又很大,也可以試試看我自己用上述步驟做好的、但是未經妥善測試的版本:
註:各位看到此文別誤會,我平常還是在用 Opera,有空的時候也還是在弄三太子,祇不過是因為有使用高橋メソッドなプレゼンツール in XUL リターンズ的需求,所以還留著 Firefox。