VMware上のUbuntuでMozilla Trunkビルド環境を作る

VMware上にUbuntu 7.10環境を構築し,Mozilla Trunk(Minefield)のビルド環境を構築するためのメモ.

環境

  • Ubuntu 7.10 (Gutsy Gibbon)
    • Desktop CDを使いGNOME環境を構築する.
    • 事前にisoイメージを適宜入手しておく.

作業手順 (Ubuntuセットアップ)

VMware上にUbuntu用ゲストOSを作成

ゲストOS作成後,vmxファイルをテキストエディタで開き,以下を追加する.これは,VMware上でUbuntuインストーラを起動させた際,解像度がやたら高くなってしまう問題を回避するため.

svga.maxWidth = "1024"
svga.maxHeight = "768"

D: にUbuntu 7.10のisoイメージをマウントし,普通にインストール.再起動する.

まずはアップデート

GUIが好きな人は,タスクトレイ(?)の所にあるアレをクリックしてアップデートしてもよいと思う.

% sudo apt-get update
% sudo apt-get upgrade

一度再起動が必要かも.

Mozillaのビルドに必要なパッケージをapt-get install

がんがんapt-get installする.

% sudo apt-get -y install build-essential
% sudo apt-get -y build-dep firefox-3.0
% sudo apt-get -y install cvs
% sudo apt-get -y install libdbus-glib-1-dev
% sudo apt-get -y install libcurl3
% sudo apt-get -y install libcurl4-openssl-dev

生活環境も整える.

% sudo apt-get -y install vim lv
% sudo apt-get -y install subversion zsh openssh-server
% sudo apt-get -y install ddd global

zshが無いと死ぬ人はchshしておく.

VMware toolsをビルドするのに必要なパッケージもインストール.

% sudo apt-get install libqt3-headers libqt3-mt-dev
% sudo apt-get install bin86 kernel-package

VMware toolsをここでインストールしてもよいし,しなくてもよい.

私は上記を毎回手で打つのも面倒なので,.sshや.zshenv, .zshrc, .screenrc, ... etc ... を展開する作業とあわせてシェルスクリプトにした.このあたりは各自お好みで.

Mozilla Firefox(Minefield)ビルド手順

ビルド環境を整える

${HOME}/.mozconfigを作る

. $topsrcdir/browser/config/mozconfig
export CC=/usr/bin/gcc
export CXX=/usr/bin/g++

mk_add_options MOZ_CO_PROJECT=browser
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/firefox-build

ac_add_options --enable-application=browser
ac_add_options --enable-default-toolkit=cairo-gtk2

# below are not necessary. do as you like:
ac_add_options --disable-ldap
ac_add_options --disable-postscript
ac_add_options --disable-accessibility
ac_add_options --disable-printing
ac_add_options --disable-composer
ac_add_options --disable-mathml
ac_add_options --disable-svg
ac_add_options --disable-svg-foreignobject
ac_add_options --enable-debug
ac_add_options --enable-optimize=-O

ビルドの度に手でコマンドを打つのも面倒なので,シェルスクリプト書く.

  • build-trunk.sh
#!/bin/sh
# build-trunk.sh
# $Id: build-trunk.sh 87 2008-04-07 08:57:04Z genta $

# BRANCH="-r MOZILLA_1_8_BRANCH"
BRANCH=""
DIRNAME="mozilla_trunk"
LOG=${HOME}/log/build.${DIRNAME}.log
export CVSROOT=':pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot'

# Output to STDOUT and STDERR gose to file ${LOG}
exec 4>&1 5>&2
exec 3>${LOG} 1>&3 2>&3

echo 'Begin building'
LANG=C date

# rotate dir and mkdir
if [ -d ${DIRNAME} ]; then
        if [ -d ${DIRNAME}.old ]; then
                mv ${DIRNAME}.old ${DIRNAME}.trash
                rm -rf ${DIRNAME}.trash
        fi
        mv ${DIRNAME} ${DIRNAME}.old
fi
mkdir ${DIRNAME}; cd ${DIRNAME}

cvs co ${BRANCH} mozilla/client.mk
cvs co ${BRANCH} mozilla/browser/config/mozconfig
mkdir mozilla/firefox-build
cd mozilla

cp ${HOME}/.mozconfig .

make -f client.mk checkout
make -f client.mk build 2>&1

echo 'Build done'
LANG=C date

echo 'Creating gtags'
LANG=C date
gtags -v
htags -saF
echo 'Done'

gtagsとかしている部分はお好みで.

ビルド中のログを出力するためのディレクトリを掘る.

% mkdir ~/log
ビルド
% ./build-trunk.sh

ビルド中のログは~/log/build.mozilla_trunk.logに落ちているので,気になる人は他の端末エミュレータを開いてtail -fしておくとよいと思う.

起動

無事ビルドが終わったら,起動してみる.

% cd mozilla_trunk/mozilla/firefox-build/dist/bin
% ./run-mozilla.sh ./firefox

run-mozilla.shの引数には "./firefox" と,"./" を忘れないように注意.忘れると/usr/bin/firefoxの方が起動したりしてわりと混乱することになる.

デバッガ(ddd)の上でfirefoxを起動するときは以下のようにする.

% ./run-mozilla.sh -g ./firefox-bin

runさせて適当なタイミングでinfo threadsとかして途方に暮れるのもよし.

ssh経由で起動するときは,DISPLAY環境変数を適当に設定しておくとよし.手元にX11が起動していればそれを使ってもいいと思う.

  • SSH端末(putty等)より以下を実行
% env DISPLAY=:0.0 ./run-mozilla.sh ./firefox-bin

これでVMware上でMinefieldが起動する.

GNU Globalで作ったHTMLを閲覧

htagsが~/mozilla_trunk/mozilla/HTML以下にHTMLファイルを作ってくれているので,これをソースコード解析の基点にすることができる.普通にUbuntuの上でWebブラウザを用いて閲覧するか,またはlighttpdとか適当なHTTPdをインストールして他のマシンから閲覧してもよい.

lighttpdのセットアップ (おまけ)

public_htmlを用意

% mkdir ~/public_html
% cd ~/public_html
% ln -s ../mozilla_trunk/mozilla/HTML

lighttpdインストール用スクリプト

#!/bin/sh
# build-lighttpd.sh -- Build lighttpd environment for reading source code

apt-get install lighttpd

cp lighttpd.user /etc/lighttpd
(cd /etc/lighttpd; patch ) < patch.lighttpd.conf
(cd /etc/lighttpd/conf-available; patch -p1 ) < patch.auth.conf

/usr/sbin/lighty-enable-mod auth
/usr/sbin/lighty-enable-mod userdir

/etc/init.d/lighttpd force-reload
yourname:yourBasicAuthPassword

お好みで.

*** lighttpd.conf.orig  2008-03-12 04:23:02.000000000 +0900
--- lighttpd.conf       2008-04-07 12:03:07.000000000 +0900
***************
*** 63,68 ****
--- 63,69 ----

  ## bind to port (default: 80)
  # server.port               = 81
+ server.port = 10080

  ## bind to localhost only (default: all interfaces)
  ## server.bind                = "localhost"

server.portはお好みで.

  • patch.auth.conf
*** conf-available/10-auth.conf.orig    2008-03-12 04:23:02.000000000 +0900
--- conf-available/10-auth.conf 2008-04-07 12:17:00.000000000 +0900
***************
*** 5,13 ****

  server.modules                += ( "mod_auth" )

! # auth.backend                 = "plain"
! # auth.backend.plain.userfile  = "lighttpd.user"
! # auth.backend.plain.groupfile = "lighttpd.group"

  # auth.backend.ldap.hostname   = "localhost"
  # auth.backend.ldap.base-dn    = "dc=my-domain,dc=com"
--- 5,20 ----

  server.modules                += ( "mod_auth" )

! auth.backend                 = "plain"
! auth.backend.plain.userfile  = "/etc/lighttpd/lighttpd.user"
! auth.backend.plain.groupfile = "lighttpd.group"
!
! auth.require = ( "/" =>
!                ( "method" => "digest",
!                  "realm"  => "Permitted user",
!                  "require" => "valid-user"
!                )
!              )

  # auth.backend.ldap.hostname   = "localhost"
  # auth.backend.ldap.base-dn    = "dc=my-domain,dc=com"

BASIC認証の設定ファイル.これまたお好みで.

インストール用スクリプトを実行.

% sudo ./build-lighttpd.sh

他のマシンから http://:10080/~/HTML/ をアクセス.以下はサンプル.

または,mozilla.orgが提供しているLXRも便利かも.

そのほか

インストール手順は,とりあえずshell scriptで書いておいて,SVNレポジトリに放り込んでおくと便利.新しいマシンをセットアップしたら,レポジトリの内容をtarアーカイブにしてSFTPして実行,という具合にすれば楽.