firefox-60 套件實例

  1. 緣由:firefox v52 無法使用 hangout 視訊。
  2. 下載 SRPM 套件
    [dywang@dyw219 ~]$ cd rpmbuild
    [dywang@dyw219 rpmbuild]$ wget ftp://ftp.pbone.net/mirror/ftp.redhat.com/pub\
    /redhat/linux/enterprise/6ComputeNode/en/os/SRPMS/firefox-60.9.0-1.el6_10.src.rpm
    
  3. 安裝 SRPM 套件
    [dywang@dyw219 rpmbuild]$ rpm -ivh firefox-60.9.0-1.el6_10.src.rpm
    
  4. 查看安裝的所有檔案。
    [dywang@dyw219 rpmbuild]$ rpm -qpl firefox-60.9.0-1.el6_10.src.rpm 
    warning: firefox-60.9.0-1.el6_10.src.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
    Python-2.7.13.tar.xz
    build-aarch64-skia.patch
    build-big-endian.patch
    build-debug-qcms.patch
    build-disable-elfhack.patch
    build-gdk-version.patch
    build-icu-big-endian.patch
    build-jit-atomic-always-lucky.patch
    build-mozconfig-fix.patch
    build-nss-version.patch
    distribution.ini
    firefox-60.9.0esr.source.tar.xz
    firefox-enable-addons.patch
    firefox-langpacks-60.9.0esr-20190902.tar.xz
    firefox-mozconfig
    firefox-pipewire.patch
    firefox-redhat-default-prefs.js
    firefox-symbolic.svg
    firefox.1
    firefox.desktop
    firefox.sh.in
    firefox.spec
    google-api-key
    gtk3-private-3.22.26-1-files.inc
    gtk3-private-3.22.26-1-post.inc
    gtk3-private-3.22.26-1-posttrans.inc
    gtk3-private-3.22.26-1-postun.inc
    gtk3-private-3.22.26-1-requires-provides-filter.inc
    gtk3-private-3.22.26-1-setup-flags-env.inc
    gtk3-private-3.22.26-1.el6.src.rpm
    libffi-3.0.13-18.el7_3.src.rpm
    mozilla-1005640-accept-lang.patch
    mozilla-1170092.patch
    mozilla-1196777.patch
    mozilla-1353817.patch
    mozilla-1436242.patch
    mozilla-256180.patch
    mozilla-526293.patch
    mozilla-api-key
    mozilla-build-arm.patch
    rhbz-1173156.patch
    rhbz-1354671.patch
    rhbz-1503632-nss.patch
    xulrunner-24.0-jemalloc-ppc.patch
    yasm-1.2.0-3.el5.src.rpm
    
  5. 查看程式主要的打包壓縮檔。
    [dywang@dyw219 SOURCES]$ cd SOURCES/
    [dywang@dyw219 SOURCES]$ ls firefox-60.9.0esr.source.tar.xz 
    firefox-60.9.0esr.source.tar.xz
    
  6. 解壓縮原始碼 tarball,產生 firefox-45.1.0esr 目錄,存放原始碼。
    [dywang@dyw219 SOURCES]$ tar xJvf firefox-60.9.0esr.source.tar.xz
    
  7. 查看解壓縮目錄 firefox-60.9.0 內的檔案。
    [dywang@dyw219 SOURCES]$ ls firefox-60.9.0
    accessible    dom                memory               services
    aclocal.m4    editor             mfbt                 servo
    AUTHORS       embedding          mobile               settings.gradle
    browser       extensions         modules              sourcestamp.txt
    build         gfx                moz.build            startupcache
    build.gradle  GNUmakefile        moz.configure        storage
    caps          gradle             mozglue              taskcluster
    Cargo.lock    gradle.properties  mozilla-config.h.in  testing
    Cargo.toml    gradlew            netwerk              test.mozbuild
    chrome        hal                npm-shrinkwrap.json  third_party
    client.mk     image              nsprpub              toolkit
    client.py     intl               old-configure        tools
    CLOBBER       ipc                old-configure.in     uriloader
    config        js                 other-licenses       view
    configure     layout             package.json         widget
    configure.in  LEGAL              parser               xpcom
    configure.py  LICENSE            python               xpfe
    db            mach               rdf
    devtools      Makefile.in        README.txt
    docshell      media              security
    
  8. 進入暫存目錄 tmp,解開原始 src.rpm,方便做修改的比對。
    [dywang@dyw219 tmp]$ rm ./* -rf
    [dywang@dyw219 tmp]$ rpm2cpio ../firefox-60.9.0-1.el6_10.src.rpm | cpio -idvm
    Python-2.7.13.tar.xz
    build-aarch64-skia.patch
    build-big-endian.patch
    build-debug-qcms.patch
    build-disable-elfhack.patch
    build-gdk-version.patch
    build-icu-big-endian.patch
    build-jit-atomic-always-lucky.patch
    build-mozconfig-fix.patch
    build-nss-version.patch
    distribution.ini
    firefox-60.9.0esr.source.tar.xz
    firefox-enable-addons.patch
    firefox-langpacks-60.9.0esr-20190902.tar.xz
    firefox-mozconfig
    firefox-pipewire.patch
    firefox-redhat-default-prefs.js
    firefox-symbolic.svg
    firefox.1
    firefox.desktop
    firefox.sh.in
    firefox.spec
    google-api-key
    gtk3-private-3.22.26-1-files.inc
    gtk3-private-3.22.26-1-post.inc
    gtk3-private-3.22.26-1-posttrans.inc
    gtk3-private-3.22.26-1-postun.inc
    gtk3-private-3.22.26-1-requires-provides-filter.inc
    gtk3-private-3.22.26-1-setup-flags-env.inc
    gtk3-private-3.22.26-1.el6.src.rpm
    libffi-3.0.13-18.el7_3.src.rpm
    mozilla-1005640-accept-lang.patch
    mozilla-1170092.patch
    mozilla-1196777.patch
    mozilla-1353817.patch
    mozilla-1436242.patch
    mozilla-256180.patch
    mozilla-526293.patch
    mozilla-api-key
    mozilla-build-arm.patch
    rhbz-1173156.patch
    rhbz-1354671.patch
    rhbz-1503632-nss.patch
    xulrunner-24.0-jemalloc-ppc.patch
    yasm-1.2.0-3.el5.src.rpm
    854680 blocks
    
  9. 暫存目錄下解開 firefox-60.9.0esr.source.tar.xz
    [dywang@dyw219 tmp]$ tar Jxvf firefox-60.9.0esr.source.tar.xz
    
  10. 修改 RPM spec 規格檔,版本加入 dyw。
    [dywang@dyw219 tmp]$ cd ../SOURCES/
    [dywang@dyw219 SOURCES]$ vim ../SPECS/firefox.spec
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox.spec ../SPECS/firefox.spec
    --- ../tmp/firefox.spec	2019-09-02 19:17:11.000000000 +0800
    +++ ../SPECS/firefox.spec	2019-10-22 06:48:42.790943109 +0800
    @@ -142,7 +142,7 @@
     Summary:        Mozilla Firefox Web browser
     Name:           firefox
     Version:        60.9.0
    -Release:        1%{?pre_tag}%{?dist}
    +Release:        1%{?pre_tag}%{?dist}.dyw
     URL:            https://www.mozilla.org/firefox/
     License:        MPLv1.1 or GPLv2+ or LGPLv2+
     %if 0%{?rhel} == 7
    
  11. 修改其他編碼為 UTF-8。
    [dywang@dyw219 SOURCES]$ vim firefox-60.9.0/browser/components/preferences/fonts.xul 
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox-60.9.0/browser/components/\
    preferences/fonts.xul firefox-60.9.0/browser/components/preferences/fonts.xul
    --- ../tmp/firefox-60.9.0/browser/components/preferences/fonts.xul
    	2019-09-01 21:09:05.000000000 +0800
    +++ firefox-60.9.0/browser/components/preferences/fonts.xul
    	2019-10-22 06:53:30.883965034 +0800
    @@ -293,7 +293,7 @@
          <menuitem label="&languages.customize.Fallback.thai;"       value="windows-874"/>
          <menuitem label="&languages.customize.Fallback.turkish;"    value="windows-1254"/>
          <menuitem label="&languages.customize.Fallback.vietnamese;" value="windows-1258"/>
          <menuitem label="&languages.customize.Fallback.other;"      value="windows-1252"/>
          <menuitem label="&languages.customize.Fallback.other;"      value="utf-8"/>
        </menupopup>
      </menulist>
    </hbox>
    
  12. 增加瀏覽器語系 en-US。
    [dywang@dyw219 SOURCES]$ vim firefox-60.9.0/browser/locales/all-locales 
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox-60.9.0/browser/locales/\
    all-locales firefox-60.9.0/browser/locales/all-locales
    --- ../tmp/firefox-60.9.0/browser/locales/all-locales	2019-09-01 21:09:05.000000000 +0800
    +++ firefox-60.9.0/browser/locales/all-locales	2019-10-22 06:56:29.193978604 +0800
    @@ -19,6 +19,7 @@
     de
     dsb
     el
    +en-US
     en-GB
     en-ZA
     eo
    
  13. 當找不到編碼時預設使用 UTF-8。
    [dywang@dyw219 SOURCES]$ vim firefox-60.9.0/dom/encoding/FallbackEncoding.cpp
    
  14. unix 系統預設使用 UTF-8 編碼。
    [dywang@dyw219 SOURCES]$ vim firefox-60.9.0/intl/locale/gtk/OSPreferences_gtk.cpp
    
  15. 預設等寬字 monospace 字型大小為 16。
    [dywang@dyw219 SOURCES]$ sed -i 's/\(font.size.fixed.[a-z\-]*", \)1[0-9]/\116/g'
     firefox-60.9.0/modules/libpref/init/all.js | grep font.size.fixed
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox-60.9.0/modules/libpref/init/\
    all.js firefox-60.9.0/modules/libpref/init/all.js 
    --- ../tmp/firefox-60.9.0/modules/libpref/init/all.js	2019-09-01 21:09:28.000000000 +0800
    +++ firefox-60.9.0/modules/libpref/init/all.js	2019-10-22 07:34:37.407152744 +0800
    @@ -2385,7 +2385,7 @@
     // fallback charset list for Unicode conversion (converting from Unicode)
     // currently used for mail send only to handle symbol characters (e.g Euro, trademark, smartquotes)
     // for ISO-8859-1
    -pref("intl.fallbackCharsetList.ISO-8859-1", "windows-1252");
    +pref("intl.fallbackCharsetList.ISO-8859-1", "utf-8");
     pref("font.language.group",                 "chrome://global/locale/intl.properties");
     
     // Android-specific pref to use key-events-only mode for IME-unaware webapps.
    @@ -3454,17 +3454,17 @@
     pref("font.default.ar", "sans-serif");
     pref("font.minimum-size.ar", 0);
     pref("font.size.variable.ar", 16);
    -pref("font.size.fixed.ar", 13);
    +pref("font.size.fixed.ar", 16);
     
     pref("font.default.el", "serif");
     pref("font.minimum-size.el", 0);
     pref("font.size.variable.el", 16);
    -pref("font.size.fixed.el", 13);
    +pref("font.size.fixed.el", 16);
     
     pref("font.default.he", "sans-serif");
     pref("font.minimum-size.he", 0);
     pref("font.size.variable.he", 16);
    -pref("font.size.fixed.he", 13);
    +pref("font.size.fixed.he", 16);
     
     pref("font.default.ja", "sans-serif");
     pref("font.minimum-size.ja", 0);
    @@ -3479,102 +3479,102 @@
     pref("font.default.th", "sans-serif");
     pref("font.minimum-size.th", 0);
     pref("font.size.variable.th", 16);
    -pref("font.size.fixed.th", 13);
    +pref("font.size.fixed.th", 16);
     
     pref("font.default.x-cyrillic", "serif");
     pref("font.minimum-size.x-cyrillic", 0);
     pref("font.size.variable.x-cyrillic", 16);
    -pref("font.size.fixed.x-cyrillic", 13);
    +pref("font.size.fixed.x-cyrillic", 16);
     
     pref("font.default.x-devanagari", "serif");
     pref("font.minimum-size.x-devanagari", 0);
     pref("font.size.variable.x-devanagari", 16);
    -pref("font.size.fixed.x-devanagari", 13);
    +pref("font.size.fixed.x-devanagari", 16);
     
     pref("font.default.x-tamil", "serif");
     pref("font.minimum-size.x-tamil", 0);
     pref("font.size.variable.x-tamil", 16);
    -pref("font.size.fixed.x-tamil", 13);
    +pref("font.size.fixed.x-tamil", 16);
     
     pref("font.default.x-armn", "serif");
     pref("font.minimum-size.x-armn", 0);
     pref("font.size.variable.x-armn", 16);
    -pref("font.size.fixed.x-armn", 13);
    +pref("font.size.fixed.x-armn", 16);
     
     pref("font.default.x-beng", "serif");
     pref("font.minimum-size.x-beng", 0);
     pref("font.size.variable.x-beng", 16);
    -pref("font.size.fixed.x-beng", 13);
    +pref("font.size.fixed.x-beng", 16);
     
     pref("font.default.x-cans", "serif");
     pref("font.minimum-size.x-cans", 0);
     pref("font.size.variable.x-cans", 16);
    -pref("font.size.fixed.x-cans", 13);
    +pref("font.size.fixed.x-cans", 16);
     
     pref("font.default.x-ethi", "serif");
     pref("font.minimum-size.x-ethi", 0);
     pref("font.size.variable.x-ethi", 16);
    -pref("font.size.fixed.x-ethi", 13);
    +pref("font.size.fixed.x-ethi", 16);
     
     pref("font.default.x-geor", "serif");
     pref("font.minimum-size.x-geor", 0);
     pref("font.size.variable.x-geor", 16);
    -pref("font.size.fixed.x-geor", 13);
    +pref("font.size.fixed.x-geor", 16);
     
     pref("font.default.x-gujr", "serif");
     pref("font.minimum-size.x-gujr", 0);
     pref("font.size.variable.x-gujr", 16);
    -pref("font.size.fixed.x-gujr", 13);
    +pref("font.size.fixed.x-gujr", 16);
     
     pref("font.default.x-guru", "serif");
     pref("font.minimum-size.x-guru", 0);
     pref("font.size.variable.x-guru", 16);
    -pref("font.size.fixed.x-guru", 13);
    +pref("font.size.fixed.x-guru", 16);
     
     pref("font.default.x-khmr", "serif");
     pref("font.minimum-size.x-khmr", 0);
     pref("font.size.variable.x-khmr", 16);
    -pref("font.size.fixed.x-khmr", 13);
    +pref("font.size.fixed.x-khmr", 16);
     
     pref("font.default.x-mlym", "serif");
     pref("font.minimum-size.x-mlym", 0);
     pref("font.size.variable.x-mlym", 16);
    -pref("font.size.fixed.x-mlym", 13);
    +pref("font.size.fixed.x-mlym", 16);
     
     pref("font.default.x-orya", "serif");
     pref("font.minimum-size.x-orya", 0);
     pref("font.size.variable.x-orya", 16);
    -pref("font.size.fixed.x-orya", 13);
    +pref("font.size.fixed.x-orya", 16);
     
     pref("font.default.x-telu", "serif");
     pref("font.minimum-size.x-telu", 0);
     pref("font.size.variable.x-telu", 16);
    -pref("font.size.fixed.x-telu", 13);
    +pref("font.size.fixed.x-telu", 16);
     
     pref("font.default.x-knda", "serif");
     pref("font.minimum-size.x-knda", 0);
     pref("font.size.variable.x-knda", 16);
    -pref("font.size.fixed.x-knda", 13);
    +pref("font.size.fixed.x-knda", 16);
     
     pref("font.default.x-sinh", "serif");
     pref("font.minimum-size.x-sinh", 0);
     pref("font.size.variable.x-sinh", 16);
    -pref("font.size.fixed.x-sinh", 13);
    +pref("font.size.fixed.x-sinh", 16);
     
     pref("font.default.x-tibt", "serif");
     pref("font.minimum-size.x-tibt", 0);
     pref("font.size.variable.x-tibt", 16);
    -pref("font.size.fixed.x-tibt", 13);
    +pref("font.size.fixed.x-tibt", 16);
     
     pref("font.default.x-unicode", "serif");
     pref("font.minimum-size.x-unicode", 0);
     pref("font.size.variable.x-unicode", 16);
    -pref("font.size.fixed.x-unicode", 13);
    +pref("font.size.fixed.x-unicode", 16);
     
     pref("font.default.x-western", "serif");
     pref("font.minimum-size.x-western", 0);
     pref("font.size.variable.x-western", 16);
    -pref("font.size.fixed.x-western", 13);
    +pref("font.size.fixed.x-western", 16);
     
     pref("font.default.zh-CN", "sans-serif");
     pref("font.minimum-size.zh-CN", 0);
    @@ -3596,7 +3596,7 @@
     pref("font.default.x-math", "serif");
     pref("font.minimum-size.x-math", 0);
     pref("font.size.variable.x-math", 16);
    -pref("font.size.fixed.x-math", 13);
    +pref("font.size.fixed.x-math", 16);
     
     /*
      * A value greater than zero enables font size inflation for
    @@ -4414,17 +4414,17 @@
     pref("font.name-list.serif.ar", "serif");
     pref("font.name-list.sans-serif.ar", "sans-serif");
     pref("font.name-list.monospace.ar", "monospace");
    -pref("font.size.fixed.ar", 12);
    +pref("font.size.fixed.ar", 16);
     
     pref("font.name-list.serif.el", "serif");
     pref("font.name-list.sans-serif.el", "sans-serif");
     pref("font.name-list.monospace.el", "monospace");
    -pref("font.size.fixed.el", 12);
    +pref("font.size.fixed.el", 16);
     
     pref("font.name-list.serif.he", "serif");
     pref("font.name-list.sans-serif.he", "sans-serif");
     pref("font.name-list.monospace.he", "monospace");
    -pref("font.size.fixed.he", 12);
    +pref("font.size.fixed.he", 16);
     
     pref("font.name-list.serif.ja", "serif");
     pref("font.name-list.sans-serif.ja", "sans-serif");
    @@ -4454,7 +4454,7 @@
     pref("font.name-list.serif.x-cyrillic", "serif");
     pref("font.name-list.sans-serif.x-cyrillic", "sans-serif");
     pref("font.name-list.monospace.x-cyrillic", "monospace");
    -pref("font.size.fixed.x-cyrillic", 12);
    +pref("font.size.fixed.x-cyrillic", 16);
     
     pref("font.name-list.serif.x-devanagari", "serif");
     pref("font.name-list.sans-serif.x-devanagari", "sans-serif");
    @@ -4511,12 +4511,12 @@
     pref("font.name-list.serif.x-unicode", "serif");
     pref("font.name-list.sans-serif.x-unicode", "sans-serif");
     pref("font.name-list.monospace.x-unicode", "monospace");
    -pref("font.size.fixed.x-unicode", 12);
    +pref("font.size.fixed.x-unicode", 16);
     
     pref("font.name-list.serif.x-western", "serif");
     pref("font.name-list.sans-serif.x-western", "sans-serif");
     pref("font.name-list.monospace.x-western", "monospace");
    -pref("font.size.fixed.x-western", 12);
    +pref("font.size.fixed.x-western", 16);
     
     pref("font.name-list.serif.zh-CN", "serif");
     pref("font.name-list.sans-serif.zh-CN", "sans-serif");
    @@ -4560,21 +4560,21 @@
     
     #if defined(ANDROID)
     
    -pref("font.size.fixed.ar", 12);
    +pref("font.size.fixed.ar", 16);
     
     pref("font.default.el", "sans-serif");
    -pref("font.size.fixed.el", 12);
    +pref("font.size.fixed.el", 16);
     
    -pref("font.size.fixed.he", 12);
    +pref("font.size.fixed.he", 16);
     
     pref("font.default.x-cyrillic", "sans-serif");
    -pref("font.size.fixed.x-cyrillic", 12);
    +pref("font.size.fixed.x-cyrillic", 16);
     
     pref("font.default.x-unicode", "sans-serif");
    -pref("font.size.fixed.x-unicode", 12);
    +pref("font.size.fixed.x-unicode", 16);
     
     pref("font.default.x-western", "sans-serif");
    -pref("font.size.fixed.x-western", 12);
    +pref("font.size.fixed.x-western", 16);
     
     # ANDROID
     #endif
    
  16. toolkit 語系增加 en-US。
    [dywang@dyw219 SOURCES]$ vim firefox-60.9.0/toolkit/locales/all-locales 
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox-60.9.0/toolkit/locales/\
    all-locales firefox-60.9.0/toolkit/locales/all-locales
    --- ../tmp/firefox-60.9.0/toolkit/locales/all-locales
    	2019-09-01 21:10:20.000000000 +0800
    +++ firefox-60.9.0/toolkit/locales/all-locales
    	2019-10-22 07:38:57.752172557 +0800
    @@ -12,3 +12,4 @@
     ro
     sv-SE
     ru
    +en-US
    
  17. 增加 zh-TW 可用語系。
    [dywang@dyw219 SOURCES]$ vim firefox-60.9.0/toolkit/locales/en-US/chrome/\
    global/intl.properties
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox-60.9.0/toolkit/locales/\
    en-US/chrome/global/intl.properties \
    firefox-60.9.0/toolkit/locales/en-US/chrome/global/intl.properties
    --- ../tmp/firefox-60.9.0/toolkit/locales/en-US/chrome/global/intl.properties
    	2019-09-01 21:10:19.000000000 +0800
    +++ firefox-60.9.0/toolkit/locales/en-US/chrome/global/intl.properties
    	2019-10-22 07:40:44.895180711 +0800
    @@ -20,7 +20,7 @@
     # British English in their list, since those languages are commonly spoken in
     # the same area as Breton:
     # intl.accept_languages=br, fr-FR, fr, en-GB, en
    -intl.accept_languages=en-US, en
    +intl.accept_languages=en-US, en, zh-TW
     
     # LOCALIZATION NOTE (font.language.group):
     # This preference controls the initial setting of the language drop-down menu
    
  18. 系統預設使用 UTF-8 編碼。
    [dywang@dyw219 SOURCES]$ vim firefox-60.9.0/toolkit/locales/en-US/chrome/\
    global-platform/unix/intl.properties 
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox-60.9.0/toolkit/locales/\
    en-US/chrome/global-platform/unix/intl.properties firefox-60.9.0/toolkit/\
    locales/en-US/chrome/global-platform/unix/intl.properties
    --- ../tmp/firefox-60.9.0/toolkit/locales/en-US/chrome/global-platform/
    unix/intl.properties	2019-09-01 21:09:57.000000000 +0800
    +++ firefox-60.9.0/toolkit/locales/en-US/chrome/global-platform/unix/
    intl.properties	2019-10-22 07:43:37.751193866 +0800
    @@ -4,4 +4,4 @@
     
     # LOCALIZATION NOTE (intl.ellipsis): Use the unicode ellipsis char, \u2026,
     # or use "..." if \u2026 doesn't suit traditions in your locale.
    -intl.ellipsis=…
    +intl.ellipsis=utf-8
    
  19. 最小字型大小由 None 改為 12。
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox-60.9.0/browser/locales/en-US/\
    chrome/browser/preferences/fonts.dtd firefox-60.9.0/browser/locales/en-US/\
    chrome/browser/preferences/fonts.dtd
    --- ../tmp/firefox-60.9.0/browser/locales/en-US/chrome/browser/preferences/fonts.dtd
    	2019-09-01 21:09:05.000000000 +0800
    +++ firefox-60.9.0/browser/locales/en-US/chrome/browser/preferences/fonts.dtd
    	2019-10-26 10:40:22.998302206 +0800
    @@ -55,7 +55,7 @@
     <!-- Minimum font size -->
     <!ENTITY minSize2.label                           "Minimum font size">
     <!ENTITY minSize2.accesskey                       "o">
    -<!ENTITY minSize.none                             "None">
    +<!ENTITY minSize.none                             "12">
     
     <!-- default font type -->
     <!ENTITY  useDefaultFontSerif.label               "Serif">
    
  20. uidensity 預設由 Normal(0) 改成 Compact(1)。
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox-60.9.0/browser/app/profile/\
    firefox.js firefox-60.9.0/browser/app/profile/firefox.js
    --- ../tmp/firefox-60.9.0/browser/app/profile/firefox.js
    	2019-09-01 21:09:05.000000000 +0800
    +++ firefox-60.9.0/browser/app/profile/firefox.js
    	2019-10-26 11:14:05.163456099 +0800
    @@ -239,7 +239,7 @@
     
     // UI density of the browser chrome. This mostly affects toolbarbutton
     // and urlbar spacing. The possible values are 0=normal, 1=compact, 2=touch.
    -pref("browser.uidensity", 0);
    +pref("browser.uidensity", 1);
     // Whether Firefox will automatically override the uidensity to "touch"
     // while the user is in a touch environment (such as Windows tablet mode).
     pref("browser.touchmode.auto", true);
    
  21. 修改預設首頁到個人網頁。
    [dywang@dyw219 SOURCES]$ vim firefox-redhat-default-prefs.js 
    [dywang@dyw219 SOURCES]$ sed -i 's|\(startup.homepage.*\",\ *\"\).*\"|\
    \1http://dy.csie.cyut.edu.tw\"|g' firefox-redhat-default-prefs.js 
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox-redhat-default-prefs.js\
     firefox-redhat-default-prefs.js 
    --- ../tmp/firefox-redhat-default-prefs.js	2019-09-02 19:17:03.000000000 +0800
    +++ firefox-redhat-default-prefs.js	2019-10-22 07:47:17.020210553 +0800
    @@ -14,9 +14,9 @@
     pref("network.manage-offline-status",       true);
     pref("extensions.shownSelectionUI",         true);
     pref("ui.SpellCheckerUnderlineStyle",       1);
    -pref("startup.homepage_override_url",       "http://www.redhat.com");
    -pref("startup.homepage_welcome_url",        "http://www.redhat.com");
    -pref("browser.startup.homepage",            "data:text/plain,browser.startup.homepage=file:///usr/share/doc/HTML/index.html");
    +pref("startup.homepage_override_url",       "http://dy.csie.cyut.edu.tw");
    +pref("startup.homepage_welcome_url",        "http://dy.csie.cyut.edu.tw");
    +pref("browser.startup.homepage",            "http://dy.csie.cyut.edu.tw");
     pref("geo.wifi.uri", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%");
     pref("media.gmp-gmpopenh264.provider.enabled",false);
     pref("media.gmp-gmpopenh264.autoupdate",false);
    
  22. 重新打包壓縮 firefox-60.9.0 目錄。
    [dywang@dyw219 SOURCES]$ tar Jcvf firefox-60.9.0esr.source.tar.xz firefox-60.9.0
    
  23. 解決 firefox-60 無法使用中文輸入的問題
    [dywang@dyw219 SOURCES]$ vim firefox.sh.in
    [dywang@dyw219 SOURCES]$ diff -uN ../tmp/firefox.sh.in firefox.sh.in
    --- ../tmp/firefox.sh.in	2019-09-02 19:17:03.000000000 +0800
    +++ firefox.sh.in	2019-10-25 19:11:33.389061007 +0800
    @@ -48,6 +48,7 @@
    		;;
     esac
     
    +export GTK_IM_MODULE=xim
     MOZ_FIREFOX_FILE="firefox"
     
     if [ ! -r $MOZ_LIB_DIR/firefox/$MOZ_FIREFOX_FILE ]; then
    
  24. 需要以下套件
    [dywang@dyw219 SOURCES]$ rpmbuild -ba --clean --target=$(uname -m) ../SPECS/firefox.spec
    Building target platforms: x86_64
    Building for target x86_64
    error: Failed build dependencies:
    	devtoolset-7-gcc-c++ is needed by firefox-60.9.0-1.el6.dyw.x86_64
    	devtoolset-7-gcc is needed by firefox-60.9.0-1.el6.dyw.x86_64
    	devtoolset-7-binutils is needed by firefox-60.9.0-1.el6.dyw.x86_64
    	devtoolset-7-libatomic-devel is needed by firefox-60.9.0-1.el6.dyw.x86_64
    	rust-toolset-7-cargo is needed by firefox-60.9.0-1.el6.dyw.x86_64
    	rust-toolset-7-rust >= 1.24 is needed by firefox-60.9.0-1.el6.dyw.x86_64
    
  25. 需要以下套件
    
    
  26. 再同時建立 RPM 及 SRPM 二進位檔字,firefox RPM 建立要 1 小時以上,要耐心等候。成功建立的訊息最後幾行,看到產生 firefox firefox-debuginfo 二個 RPM 檔及一個 firefox SRPM 檔。
    [dywang@dyw219 SOURCES]$ rpmbuild -ba --clean --target=$(uname -m) ../SPECS/firefox.spec
    編譯尚未成功