[黑客人生] Firefox for U3 自製更新版心得

Firefox for U3 目前還是只有 2.0.0.4 版,雖然說安裝之後多次服用內建的「更新」功能就可以一路升級到最新版的 Firefox,但是我想一定有人跟我一樣,會有這樣的擔心或需求:

為了解決這樣的需求,首先我們要先瞭解 Firefox 是怎麼更新的。當我們使用 Firefox 內的「更新」功能時,它並不是去取得完整的 Firefox 安裝檔來重新安裝,而是去取得一個 MAR (Mozilla ARchive) 格式的更新檔案,這個檔案會描述所有該更動(新增、刪除、修改)的檔案,以及這些更動的實際內容,然後利用隨附在 Firefox 內的 updater.exe 更新程式來進行更新,最後並利用隨附在 Firefox 內的 helper.exe 來顯示更新完成的網頁。

好消息是,上述這些事我們也可以手動來做。幾乎所有你該知道的事都寫在 Mozilla 基金會的圍紀頁面「手動安裝 MAR 檔」內。不過這裡有幾個細節要再次提醒:

  1. 務必使用完整 (complete) 的 MAR 檔來進行更新,不要使用局部更新檔 (.partial.mar),以免更新失敗。
  2. 因為 U3 是 Windows 上的,所以應該一律取用 Windows (win32) 版的 MAR 檔。
  3. 因為原本的 Firefox for U3 是英文版,所以手動製作新版時,應該一律取用英文 (en-US) 版的 MAR 檔。
  4. 「一次到位」的更新方法可能會失敗,所以最好還是先更新到相同主要版本的最後一版,然後更新到下一個主要版本的第一個版本,再往該主要版本的最後一版……這樣的方式邁進。實際上來說,可以採取的更新路徑應該是 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 這樣。
  5. 官方的 http://releases.mozilla.org/pub/mozilla.org/firefox/releases/ 目錄幾乎只會留每一個主要版本 (3.0.x, 3.5.x, 3.6.x) 的最後幾個版本,因此無法從這裡取得這些主要版本的「第一個版本」;所幸許多下載映像 (mirror) 站都會留著這些不同的次要版本,所以你可以觀察一下下載 Firefox 時的映像路徑,或者用搜尋引擎搜尋檔名,把所需的 MAR 檔找出來。
  6. 如果你在 Win7/Vista 底下,需要用系統管理員權限來執行更新動作,才會成功。

那麼,現在就讓我們來開始動手吧!首先要準備好下列的東西:

  1. Firefox for U3 取得的 2.0.0.4 版原始 firefox.u3p 檔案。
  2. http://dm-download02.mozilla.org/pub/firefox/releases/ 取得的一系列 MAR 檔,包括 firefox-2.0.0.20.complete.marfirefox-3.0.complete.marfirefox-3.0.19.complete.marfirefox-3.5.complete.marfirefox-3.5.9.complete.marfirefox-3.6.complete.marfirefox-3.6.2.complete.mar,這些檔案應該都會位於對應版本的 update/win32/en-US/ 目錄內。
  3. 任何一個可以壓縮及解壓縮 zip 的軟體,請確認你使用的是「zip」格式,而不是 7z(7-zip 的格式)、zipx(WinZip 12 版以後的新的預設格式)等,否則最後的 U3 安裝檔會無法使用。
  4. 任何一個純文字編輯軟體。可以協助你處理 XML 的更好,但不是必要。

檔案準備好後,就開始動手吧:

  1. 建立一個目錄,例如 C:\fxu3\
  2. 用可以解 zip 壓縮檔的軟體,把你的 firefox.u3p 檔案「解壓縮」到步驟 1. 的目錄內。沒錯,任何 u3p 檔案其實都是 zip 格式的壓縮檔。
  3. 建立另一個目錄(這很重要!),例如 C:\fxupdater\
  4. C:\fxu3\Device\firefox\ 裡面把 updater.* 全部複製到 C:\fxupdater\ 裡面。Firefox 2.x、3.0.x 的話,會是 updater.exeupdater.ini 兩個檔案,Firefox 3.5.x 之後除了 updater.exeupdater.ini 兩個檔案外,還要多複製一個 update.locale 檔案過去
  5. 把要使用的 MAR 更新檔複製到 C:\fxupdater\ 裡面,並且把檔名改為 update.mar(這很重要!)
  6. 叫出命令列(也就是執行 cmd.exe),別忘了權限問題。
  7. 切換到步驟 1. 的目錄中,實際有 firefox.exe 的目錄。換句話說,你應該會用到像這樣的指令:

    c:
    cd c:\fxu3\Device\firefox

  8. 執行更新指令。如果你的 Firefox 目前(也就是更新前)還在 3.0.x 或 2.x 的版本的話,要用這樣的指令:

    c:\fxupdater\updater.exe c:\fxupdater\ 0

    如果你的 Firefox 目前(也就是更新前)是 3.5 以後的版本,則要用這樣的指令:

    c:\fxupdater\updater.exe c:\fxupdater\

    (兩個指令只差在最後面有沒有一個空格跟一個數字 0
  9. 更新執行完畢後,繼續下達下列指令:

    type c:\fxupdater\update.status

    這個指令會顯示出 update.status 的內容,如果顯示出來為「succeeded」,就表示成功套用更新了。如果是其他內容,則表示一定哪裡有錯,需要進一步排除。如果遇到錯誤的話,可以查看 update.log 檔案的內容,協助除錯。
  10. 確認成功套用更新後,繼續下達下列指令:

    copy /Y c:\fxupdater\update.log c:\fxu3\Device\firefox\uninstall\uninstall.update

    這個指令會把 update.log 複製到 Firefox 主程式所在路徑的 uninstall 目錄中,並且更名為 uninstall.update;如果原本就有 uninstall.update 存在的話,則會覆蓋過去。
  11. 最後用這個指令離開命令列:

    exit

  12. 還沒結束,用純文字編輯軟體,開啟 c:\fxu3\Manifest\manifest.u3i 檔案,這是個 XML 格式的純文字檔。
  13. 在檔案第二列有個 <application uuid="3C9F7B3F-D55C-42cd-8537-B878518B73AF" version="2.0.0.4">,最後面的 version="2.0.0.4" 就是我們的目標,把它改成更新後的版本號,例如 2.0.0.203.0.0.03.0.0.193.5.0.03.5.0.93.6.0.03.6.0.2 等,然後存檔,關閉。
  14. zip 格式,把 c:\fxu3\ 目錄內的四個子目錄(DataDeviceHostManifest)壓縮成一個 firefox.zip 壓縮檔;請注意,壓縮檔內應該就直接是上述四個目錄,而不會有「fxu3」這個目錄存在。
  15. 步驟 14. 取得的 firefox.zip 檔案更名為 firefox.u3p,也就是把副檔名從 .zip 變更為 .u3p,如此就獲得了新版的 Firefox for U3 安裝檔了。最後並把步驟 1.步驟 3. 建立的目錄清乾淨。(這個時候請注意,別把剛做出來的 firefox.u3p 也一併刪除啦!)
  16. 步驟 15. 獲得的 firefox.u3p 取代步驟 2. 的,重複步驟 1.15.,就可以製作出各個不同版本的 Firefox for U3 安裝檔。

就這樣,很簡單吧!如果你懶得自己來,心臟又很大,也可以試試看我自己用上述步驟做好的、但是未經妥善測試的版本:

註:各位看到此文別誤會,我平常還是在用 Opera,有空的時候也還是在弄三太子,祇不過是因為有使用高橋メソッドなプレゼンツール in XUL リターンズ的需求,所以還留著 Firefox。

jedi.org: