先手必勝
「Firefox はレッサーパンダだ!」というつっこみは受け付けておりません。:)
必要な道具を揃える
Firefox をビルドするために必要なコマンドなどをインストールする。
詳しくは "Unix/Linux システムで Mozilla をビルドするための必要条件" を参照してもらい、ここではその Web ページに記載されていない注意事項などを記す。
C++ コンパイラ
公式では
egcs 1.0.3 (またはそれ以降)、gcc 2.95.2 (またはそれ以降) も動作します。
と記載されているが、多くの最適化オプションを使用したい場合は GCC 3.2 以降をお勧めする。
GCC 3.2 以降になると SSE2 や SSE3 など、現行の CPU で使用できる最適化オプションを指定できるため、gcc 2.95.2 より多くの最適化オプションを指定できる。
また、CPU ファミリー単位で指定することが出来るようにもなっている。

libIDL 0.6.3 - 0.6.8
libIDL だけを入れても build 前の configure でエラーになったので、追加で ORBit をパッケージインストールした。

GTK
GTK1系よりも GTK2系のほうがウィンドウ描画が軽かったので、個人的には GTK2系をお勧めする。

設定ファイルの用意
Firefox のビルドはソースディレクトリに .mozconfig を用意してからビルドを行う。
.mozconfig の内容は configure や client.mk のオプションを指定するために必要なので必ず必要となる。
まずは "ビルドオプションの設定" を熟読してから .mozconfig の設定を行って欲しいが、今回使用した .mozconfig の内容を以下に記す。 適当なディレクトリに .mozconfig を作成し、以下の内容をコピペする。
なお、この内容だけでビルドできる基本状態だが、詳しくは各自で吟味すること。
#
# .mozconfig
#
# 先頭が # の行はコメント扱い。
#

export MOZ_PHOENIX=1
mk_add_options MOZ_PHOENIX=1
# Firefox をビルドする場合は "browser" を指定する。
mk_add_options MOZ_CO_PROJECT=browser
# Firefox をビルドする場合は "browser" を指定する。
ac_add_options --enable-application=browser
ac_add_options --enable-crypto
ac_add_options --disable-tests
ac_add_options --disable-mailnews
ac_add_options --disable-composer
ac_add_options --enable-default-toolkit=gtk2
ac_add_options --with-system-jpeg=/usr/local
ac_add_options --with-system-zlib
ac_add_options --with-system-png=/usr/local
ac_add_options --with-system-mng=/usr/local
ac_add_options --without-system-nspr
ac_add_options --with-pthreads
ac_add_options --disable-auto-deps
ac_add_options --disable-bidi
ac_add_options --disable-dtd-debug
ac_add_options --disable-jsd
ac_add_options --disable-ldap
ac_add_options --disable-pedantic
ac_add_options --disable-profilesharing
ac_add_options --disable-installer
ac_add_options --enable-single-profile
ac_add_options --disable-profilesharing
ac_add_options --enable-image-decoders=png,gif,jpeg,bmp
# --enable-extensions:勝手に最適な標準拡張を使ってくれるので設定する必要はない。 #ac_add_options --enable-extensions=cookie,xml-rpc,xmlextras,pref,transformiix,\
#universalchardet,webservices,inspector,p3p,gnomevfs

ac_add_options --disable-debug
ac_add_options --enable-strip
ac_add_options --enable-logging
ac_add_options --enable-xft
ac_add_options --disable-gnomevfs
# enable-optimize:最適化オプション。訳がわからないときは -O2 くらいにしておく。
ac_add_options --enable-optimize="-O2"
ここで気になるのは "最適化オプション" だと思われるが、これは CPU 依存が激しいので 1つのパッケージを複数のプラットフォームで使い回す場合は注意が必要となる。
逆に、ただ 1つのプラットフォームで使う場合は、そのプラットフォーム専用カスタマイズを行うことが出来る。
オプション内容については "gcc 最適化 オプション" でググるか、以下のコマンドを使用してヘルプを参照する事。
% /usr/lib/gcc-lib/(platform)/(gcc version)/cc1 --help
% /usr/local/libexec/gcc/(platform)/(gcc version)/cc1 --help
※太文字は任意の文字列。ディレクトリに移動して各自確認すること。
ちなみにこのオプションは、Firefox 1.0@X11 で about:buildconfig とすると出てきた物をほぼそのまま使っている。
ソースの準備
ソースからビルドする場合は、ソースの tarball (gzip などで圧縮された tar ファイル) を取得して展開する方法と、CVS から最新版を取得する方法の 2種類がある。
tarball を取得して展開する方法はただたんに「そうするだけ」であるのでここでは説明を省略し、CVS を使用してソースを取得する方法をとりあげる。
なお、ソースの tarball はMozilla Japan もしくは Mozilla 本家からダウンロードする。
trunk を使ってみたい人は "ナイトリービルド" のソースを落とすこと。

まずは client.mk ファイルを取得する。
# このファイルはビルドを行う際のベースとなる Makefile のようだ。
この作業は CVS からダウンロードする初回時にのみ行うだけで良く、次回以降の CVS checkout 時は不要である。

~ % setenv CVSROOT :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot
~ % cvs login
Logging in to :pserver:anonymous@cvs-mirror.mozilla.org:2401/cvsroot
CVS password: anonymous
cvs login: warning: failed to open ~/.cvspass for reading: No such file or directory
~ % cvs checkout mozilla/client.mk
WARNING が出るが、これは CVS ログインの際にパスワードを保存するファイルが存在しないときに表示されるだけなので気にすることはない。
# CSV を頻繁に使っている方などは、もしかすると .cvspass ファイルが存在するかもしれない。
なお、一度 cvs login すると .cvspass にパスワードが保存されるので、次回以降はログイン作業は不要となり、checkout を実行するだけとなる。

もしここで AVIARY ブランチなどの他のブランチを取得したい場合は以下のようにする。

~ % cvs checkout -r [タグ名] mozilla/client.mk
タグ名は盆栽で探してこなければならないが、Menu → Browser でブランチのタグ名を取得できる。

あとは残りのファイルを取得しなければならないので、.mozconfig を mozilla ディレクトリにコピーして gmake checkout を行う。
ビルドを行う前に毎回 checkout を行うことで、ソースを最新に保つことが可能なので、ビルド前にはまず checkout する事をお勧めする。

~ % cd mozilla ~/mozilla % cp ~/.mozconfig ./ ~/mozilla % gmake -f client.mk checkout
これでソースの取得が完了した。
ソースハッキング:上手くビルド出来ない場合の対応方法
"ハック" と言えるほど大層な物じゃないが、そのままだとビルド出来ない人向けの情報。

unknown option でビルドが止まる
以下のようなエラーが出る場合はソースの変更が必要。
gmake[4]: Entering directory `/usr/src/software/mozilla/toolkit/locales'
Unknown option: -
Unknown option: I
Unknown option: .
Unknown option: /
Unknown option: e
Unknown option: n
Unknown option: -
Unknown option: U
Unknown option: S
Unknown option: /
+++ making chrome /usr/src/software/mozilla/toolkit/locales => efines.inc -DAB_CD=en-US
-DOSTYPE="FreeBSD4" -DOSARCH="FreeBSD" -DMOZILLA_VERSION="1.7.6" -DD_INO=d_ino
-DSTDC_HEADERS=1 -DHAVE_ST_BLKSIZE=1 -DHAVE_INT16_T=1 -DHAVE_INT32_T=1 -DHAVE_INT64_T=1
-DHAVE_UINT=1 -DHAVE_UINT16_T=1 -DHAVE_DIRENT_H=1 -DHAVE_MEMORY_H=1 -DHAVE_UNISTD_H=1
-DHAVE_NL_TYPES_H=1 -DHAVE_X11_XKBLIB_H=1 -DHAVE_SYS_CDEFS_H=1 -DHAVE_LIBM=1
-DFUNCPROTO=15 -DHAVE_XSHM=1 -D_REENTRANT=1 -D_THREAD_SAFE=1 -DHAVE_RANDOM=1
-DHAVE_STRERROR=1 -DHAVE_LCHOWN=1 -DHAVE_FCHMOD=1 -DHAVE_SNPRINTF=1 -DHAVE_MEMMOVE=1
-DHAVE_RINT=1 -DHAVE_FLOCKFILE=1 -DHAVE_LOCALTIME_R=1 -DHAVE_STRTOK_R=1
-DHAVE_LANGINFO_CODESET=1 -DHAVE_I18N_LC_MESSAGES=1 -DMOZ_DEFAULT_TOOLKIT="gtk"
-DMOZ_WIDGET_GTK=1 -DMOZ_ENABLE_XREMOTE=1 -DMOZ_X11=1
-DMOZ_DISTRIBUTION_ID_UNQUOTED=org.mozilla -DMOZ_DISTRIBUTION_ID="org.mozilla"
-DMOZ_PHOENIX=1 -DMOZ_XUL_APP=1 -DMOZ_APP_NAME="firefox" -DMOZ_ENABLE_XFT=1
-DMOZ_ENABLE_COREXFONTS=1 -DMOZ_EXTRA_X11CONVERTERS=1 -DOJI=1 -DIBMBIDI=1
-DMOZ_VIEW_SOURCE=1 -DACCESSIBILITY=1 -DMOZ_XPINSTALL=1 -DMOZ_JSLOADER=1 -DMOZ_MATHML=1
-DMOZ_LOGGING=1 -DMOZ_USER_DIR=".mozilla" -DMOZ_XUL=1 -DMOZ_PROFILELOCKING=1
-DMOZ_DLL_SUFFIX=".so" -DXP_UNIX=1 -DUNIX_ASYNC_DNS=1 -DJS_THREADSAFE=1
-DNS_PRINT_PREVIEW=1 -DNS_PRINTING=1 -DMOZILLA_LOCALE_VERSION="1.7"
-DMOZILLA_REGION_VERSION="1.7" -DMOZILLA_SKIN_VERSION="1.5" /en-US.jar
Couldn't open /usr/src/software/mozilla/toolkit/locales/-DAB_CD=en-US: No such file or directory
Preprocessing of generic/chrome/global/contents.rdf failed: 2 at ../../config/make-jars.pl line 446, <STDIN> chunk 122.
gmake[4]: *** [libs] エラー 63
gmake[4]: Leaving directory `/usr/src/software/mozilla/toolkit/locales'
gmake[3]: *** [libs] エラー 2
gmake[3]: Leaving directory `/usr/src/software/mozilla/toolkit'
gmake[2]: *** [tier_50] エラー 2
gmake[2]: Leaving directory `/usr/src/software/mozilla'
gmake[1]: *** [default] エラー 2
gmake[1]: Leaving directory `/usr/src/software/mozilla'
gmake: *** [build] エラー 2
根本解決が無理だったので、以下のような手順でエラーを回避した。

~/mozilla/toolkit/locales/Makefile の57行目付近にある以下の行をコメントアウト。

XULPPFLAGS += -I$(srcdir)/$(AB_CD)/defines.inc
~/mozilla/toolkit/locales/generic/chrome/global/contents.rdf の 15行目を修正。
chrome:displayName="@MOZ_LANG_TITLE@"

chrome:displayName="English (US)"
なお、この "English (US)" という文字列は、~/mozilla/toolkit/locales/en-US/defines.inc の中に記述されている @MOZ_LANG_TITLE@ が置換されるべき文字列を手動で置換しているだけである。

~/mozilla/toolkit/locales/ で gmake を行い、エラーが出ないことを確認する。
gmake はオプション無しでそのまま実行すればよい。

ビルドする
~/mozilla/ で以下のコマンドを実行する。
~/mozilla % gmake -f client.mk build
もし gcc3* を使用して拡張された最適化オプションを適用する場合は、CC と CXX でコンパイラを指定する。
以下は gcc32 (GCC 3.2) を使用する場合の実行方法。
~/mozilla % gmake -f client.mk CC=gcc32 CXX=g++32 build
あとはひたすら待つわけだが、全てが終わるまでにはかなり時間がかかり、Pentium3 800MHz だと 2時間、Cempron 3100+ だと 30分ちょっとかかった。

もしビルド中にエラーになった場合は、ほとんどが .mozconfig の設定間違いなので、間違っている箇所を正しく設定する。
時折ソースまで修正しなければならないようなこともあるが、それらは臨機応変に対応すること。

.mozconfig を修正したら gmake を実行し直すが、出来れば clean を行った方が良い場合もある。
clean は以下のように行う。

~/mozilla % gmake -f client.mk clean
上手く行かなければ
~/mozilla % gmake clean
を実行する。
これでもビルドで調子が悪い場合は distclean を使用すると良い。
※distclean を実行すると、config.cache も削除されるので完全に初期状態となるようだ。
圧縮パッケージの作成とインストール
無事ビルドが完了したら、圧縮パッケージを作成する。
~/mozilla % gmake -C browser/installer
すると ~/mozilla/dist/ に圧縮ファイル "firefox-*.tar.gz" が出来るので、それを /usr/local/ に展開する。
% cd /usr/local/
% su
# tar xfvz ~/mozilla/dist/firefox-*.tar.gz
Firefoxの起動
インストールが完了したら起動してみるが、その前に、必ず既存のプロファイルをバックアップしておく。
-P オプションを付けて起動するとプロファイルを別に出来るが、念には念を入れておこう。
なお、バックアップを取る前にはキャッシュをクリアしておくと良い。
% cd ~/ % tar cfvz firefox-profile_YYYYMMDD.tar.gz .mozilla
プロファイルのバックアップが取れたら -P オプション付きで起動する。
~/ % /usr/local/firefox/firefox -P &
ここで、もし以下のようなエラーが出た場合は多少追加作業が発生する。
Extension System Warning: Failed to set up default extensions files
probably because you do not have write privileges to this location.
While you can run Firefox like this, it is recommended that you run it
at least once with privileges that allow it to generate these initial
files to improve start performance. Running from a disk image on MacOS
X is not recommended. *** loading the extensions data source
このようなエラーが出た場合は、root ユーザーで 1度だけ Firefox を起動して終了させると治る
※この "root で起動する" 作業は一度だけで良い
なお、su で上に上がって起動してもエラーは治らず、root で X を起動するところから始めなければならないことに注意。

無事起動できたらプロファイル選択ウィンドウが開いているはずなので、新規プロファイルを作成して一旦終了する。
終了したらもう一度起動するが、今度はプロファイル名付きで起動すると良い。

~/ % /usr/local/firefox/firefox -P PROFILENAME &
このプロファイル名 "PROFILENAME" は、ディレクトリ名ではなく、プロファイルエディタで作成したプロファイル名を指定することに注意する事。

起動する際にバックグラウンドで以下のようなエラー:

*** nsExtensionManager::_disableObsoleteExtensions - failure, catching exception so finalize windowcan close
*** loading the extensions datasource
*** ExtensionManager:_updateManifests: no access privileges to application directory, skipping.
*** loading the extensions datasource
*** ExtensionManager:_updateManifests: no access privileges to application directory, skipping.
が出る場合があるが、これは警告メッセージらしいのでそのまま無視してもかまわない。
※そのうち勝手に出てこなくなる。
その後は?
JLP をインストールして日本語化が可能なので、英語が苦手な方は JLP をインストールすると良いだろう。
日本語化などについては "XFree86 環境のセットアップ 〜 火狐/雷鳥を日本語環境で使うまで" を参照のこと。